From 16cd04f84bb02bd0039482bd1c5f5304cc2b649b Mon Sep 17 00:00:00 2001 From: twlite <46562212+twlite@users.noreply.github.com> Date: Fri, 30 Jan 2026 18:45:14 +0545 Subject: [PATCH 1/3] fix: optional components and types --- .npmrc | 3 +- CONTRIBUTING.md | 4 +- .../app/commands/(interactions)/prompt.tsx | 2 +- package.json | 4 +- .../src/components/common/element.ts | 16 +++++ .../src/components/display/common.ts | 3 + .../src/components/interactive/modal/Modal.ts | 8 ++- .../interactive/select-menu/SelectMenu.ts | 26 ++++++-- packages/commandkit/src/config/config.ts | 3 + packages/commandkit/src/config/default.ts | 1 + packages/commandkit/src/config/types.ts | 5 ++ pnpm-lock.yaml | 64 ++++++++++--------- pnpm-workspace.yaml | 2 +- 13 files changed, 95 insertions(+), 46 deletions(-) diff --git a/.npmrc b/.npmrc index f3d2d36b..4d578f57 100644 --- a/.npmrc +++ b/.npmrc @@ -1 +1,2 @@ -public-hoist-pattern[]=*commandkit* \ No newline at end of file +prefer-workspace-packages=true +public-hoist-pattern[]=@commandkit/* \ No newline at end of file diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 9943aec3..31d8883f 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -44,8 +44,8 @@ git checkout -b your-feature-or-bugfix 2. Make your changes. Please make sure to use the [Prettier](https://marketplace.visualstudio.com/items?itemName=esbenp.prettier-vscode) extension for consistent formatting and comments wherever - necessary. Alternatively, you can run `pnpm prettier:format` after - you've made your changes. + necessary. Alternatively, you can run `pnpm format` after you've + made your changes. 3. Ensure that your changes don't break any existing functionality. You can test the functionality of your code depending on where diff --git a/apps/test-bot/src/app/commands/(interactions)/prompt.tsx b/apps/test-bot/src/app/commands/(interactions)/prompt.tsx index f9ef311e..1b23560a 100644 --- a/apps/test-bot/src/app/commands/(interactions)/prompt.tsx +++ b/apps/test-bot/src/app/commands/(interactions)/prompt.tsx @@ -11,7 +11,7 @@ import { StringSelectMenuOption, FileUpload, } from 'commandkit'; -import { ComponentType, MessageFlags } from 'discord.js'; +import { MessageFlags } from 'discord.js'; export const command: CommandData = { name: 'prompt', diff --git a/package.json b/package.json index 314f36cc..4f5a7852 100644 --- a/package.json +++ b/package.json @@ -11,9 +11,9 @@ "bootstrap": "turbo gen bootstrap --args", "check-types": "turbo run --filter=\"./packages/*\" check-types", "build": "turbo run --filter=\"./packages/*\" build", - "docgen": "tsx ./scripts/docs/generate-typescript-docs.ts && pnpm prettier:format", + "docgen": "tsx ./scripts/docs/generate-typescript-docs.ts && pnpm format", "prettier:check": "prettier --experimental-cli --check . --ignore-path=.prettierignore", - "prettier:format": "prettier --experimental-cli --write . --ignore-path=.prettierignore" + "format": "prettier --experimental-cli --write . --ignore-path=.prettierignore" }, "devDependencies": { "@types/node": "^22.10.2", diff --git a/packages/commandkit/src/components/common/element.ts b/packages/commandkit/src/components/common/element.ts index 2c9afc1c..c31cedbb 100644 --- a/packages/commandkit/src/components/common/element.ts +++ b/packages/commandkit/src/components/common/element.ts @@ -1,6 +1,7 @@ import type { ActionRowBuilder, TextInputBuilder } from 'discord.js'; import type { ButtonKit } from '../interactive/button/ButtonKit'; import type { ModalKit } from '../interactive/modal/ModalKit'; +import { getConfig } from '../../config/config'; /** * Represents the types of elements that can be used in CommandKit. @@ -102,3 +103,18 @@ export function createElement( } export { createElement as jsx, createElement as jsxs }; + +let _isOptional: boolean; + +export function applyDefaultOptionalComponentBehavior

(props: P): P { + if ( + props && + typeof props === 'object' && + (props as { required?: boolean }).required == null && + (_isOptional ??= getConfig().jsxDefaultOptionalComponents) + ) { + (props as { required?: boolean }).required ??= false; + } + + return props; +} diff --git a/packages/commandkit/src/components/display/common.ts b/packages/commandkit/src/components/display/common.ts index 8a7b4f19..5925bda3 100644 --- a/packages/commandkit/src/components/display/common.ts +++ b/packages/commandkit/src/components/display/common.ts @@ -1,9 +1,12 @@ import { ComponentBuilder } from 'discord.js'; +import { applyDefaultOptionalComponentBehavior } from '../..'; /** * @private */ export function applyId(props: { id?: number }, component: ComponentBuilder) { + applyDefaultOptionalComponentBehavior(props); + if (props.id != null && 'setId' in component) { component.setId(props.id); } diff --git a/packages/commandkit/src/components/interactive/modal/Modal.ts b/packages/commandkit/src/components/interactive/modal/Modal.ts index d0d10f5b..376d0ef2 100644 --- a/packages/commandkit/src/components/interactive/modal/Modal.ts +++ b/packages/commandkit/src/components/interactive/modal/Modal.ts @@ -5,7 +5,10 @@ import { FileUploadBuilder, } from 'discord.js'; import { MaybeArray } from '../../common/types'; -import { CommandKitElement } from '../../common/element'; +import { + applyDefaultOptionalComponentBehavior, + CommandKitElement, +} from '../../common/element'; import { CommandKitModalBuilderInteractionCollectorDispatchContextData, ModalKit, @@ -95,6 +98,7 @@ export interface TextInputProps { export function TextInput( props: TextInputProps & { style: TextInputStyle }, ): CommandKitElement<'text-input'> { + applyDefaultOptionalComponentBehavior(props); const input = new TextInputBuilder().setStyle(props.style); if (props.customId) { @@ -127,7 +131,7 @@ export function TextInput( input.setValue(props.value); } - if (props.required) { + if (props.required != null) { input.setRequired(props.required); } diff --git a/packages/commandkit/src/components/interactive/select-menu/SelectMenu.ts b/packages/commandkit/src/components/interactive/select-menu/SelectMenu.ts index 2a09a958..0bb1df21 100644 --- a/packages/commandkit/src/components/interactive/select-menu/SelectMenu.ts +++ b/packages/commandkit/src/components/interactive/select-menu/SelectMenu.ts @@ -8,6 +8,7 @@ import { RoleSelectMenuComponentData, RoleSelectMenuInteraction, SelectMenuComponentOptionData, + Snowflake, StringSelectMenuInteraction, StringSelectMenuOptionBuilder, UserSelectMenuComponentData, @@ -24,6 +25,7 @@ import { CommandKitSelectMenuBuilderInteractionCollectorDispatchContextData, CommandKitSelectMenuBuilderOnEnd, } from './common'; +import { applyDefaultOptionalComponentBehavior } from '../../common/element'; /** * Type for the common properties shared by all select menu builders. @@ -39,8 +41,10 @@ export interface CommonSelectMenuProps { * Type for the base select menu component data. */ export interface SelectMenuProps - extends Partial>, - CommonSelectMenuProps {} + extends Partial>, + CommonSelectMenuProps { + required?: boolean; +} /** * The properties for a string select menu component. @@ -83,9 +87,13 @@ export type ResolveBuilderInteraction = T extends StringSelectMenuKit */ function applyPropsToBuilder( builder: B, - props: Partial> & - CommonSelectMenuProps, B>, + props: Partial> & + CommonSelectMenuProps, B> & { + required?: boolean; + }, ) { + applyDefaultOptionalComponentBehavior(props); + builder.setCustomId(props.customId ?? `select-menu::${crypto.randomUUID()}`); if (props.maxValues != null) { @@ -116,6 +124,10 @@ function applyPropsToBuilder( // @ts-ignore builder.onSelect(props.onSelect, props.options); } + + if (props.required != null) { + builder.setRequired(props.required); + } } /** @@ -182,8 +194,10 @@ export function StringSelectMenuOption(props: StringSelectMenuOptionProps) { * The UserSelectMenu component. */ export interface UserSelectMenuProps - extends Partial>, - CommonSelectMenuProps {} + extends Partial>, + CommonSelectMenuProps { + defaultValues?: MaybeArray; +} /** * The UserSelectMenu component. diff --git a/packages/commandkit/src/config/config.ts b/packages/commandkit/src/config/config.ts index 35113877..5444a443 100644 --- a/packages/commandkit/src/config/config.ts +++ b/packages/commandkit/src/config/config.ts @@ -77,6 +77,9 @@ export function defineConfig( disablePermissionsMiddleware: config.disablePermissionsMiddleware ?? defaultConfig.disablePermissionsMiddleware, + jsxDefaultOptionalComponents: + config.jsxDefaultOptionalComponents ?? + defaultConfig.jsxDefaultOptionalComponents, }; return defined; diff --git a/packages/commandkit/src/config/default.ts b/packages/commandkit/src/config/default.ts index aa25dc11..c9764cd3 100644 --- a/packages/commandkit/src/config/default.ts +++ b/packages/commandkit/src/config/default.ts @@ -34,4 +34,5 @@ export const defaultConfig: ResolvedCommandKitConfig = { development: true, production: false, }, + jsxDefaultOptionalComponents: true, }; diff --git a/packages/commandkit/src/config/types.ts b/packages/commandkit/src/config/types.ts index 70ae75c1..2db2b35a 100644 --- a/packages/commandkit/src/config/types.ts +++ b/packages/commandkit/src/config/types.ts @@ -114,4 +114,9 @@ export interface CommandKitConfig { * @default true */ showUnknownPrefixCommandsWarning?: boolean; + /** + * Whether to make interaction components optional by default when using JSX (opposite of Discord's default behavior). + * @default true + */ + jsxDefaultOptionalComponents?: boolean; } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 3b44dd45..d473552f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -14,8 +14,8 @@ catalogs: version: 5.9.3 discordjs: discord.js: - specifier: ^14.24.0 - version: 14.24.0 + specifier: ^14.25.1 + version: 14.25.1 workflow: '@workflow/builders': specifier: ^4.0.1-beta.41 @@ -148,7 +148,7 @@ importers: version: link:../../packages/commandkit discord.js: specifier: catalog:discordjs - version: 14.24.0 + version: 14.25.1 dotenv: specifier: ^16.4.7 version: 16.6.1 @@ -259,7 +259,7 @@ importers: version: link:../commandkit discord.js: specifier: catalog:discordjs - version: 14.24.0 + version: 14.25.1 tsconfig: specifier: workspace:* version: link:../tsconfig @@ -360,7 +360,7 @@ importers: version: 17.0.33 discord.js: specifier: catalog:discordjs - version: 14.24.0 + version: 14.25.1 tsconfig: specifier: workspace:* version: link:../tsconfig @@ -449,7 +449,7 @@ importers: version: link:../commandkit discord.js: specifier: catalog:discordjs - version: 14.24.0 + version: 14.25.1 tsconfig: specifier: workspace:* version: link:../tsconfig @@ -643,7 +643,7 @@ importers: version: link:../commandkit discord.js: specifier: catalog:discordjs - version: 14.24.0 + version: 14.25.1 tsconfig: specifier: workspace:* version: link:../tsconfig @@ -658,7 +658,7 @@ importers: version: link:../commandkit discord.js: specifier: catalog:discordjs - version: 14.24.0 + version: 14.25.1 tsconfig: specifier: workspace:* version: link:../tsconfig @@ -1875,16 +1875,16 @@ packages: resolution: {integrity: sha512-LiSusze9Tc7qF03sLCujF5iZp7K+vRNEDBZ86FT9aQAv3vxMLihUvKvpsCWiQ2DJq1tVckopKm1rxomgNUc9hg==} engines: {node: '>=18'} - '@discordjs/formatters@0.6.1': - resolution: {integrity: sha512-5cnX+tASiPCqCWtFcFslxBVUaCetB0thvM/JyavhbXInP1HJIEU+Qv/zMrnuwSsX3yWH2lVXNJZeDK3EiP4HHg==} + '@discordjs/formatters@0.6.2': + resolution: {integrity: sha512-y4UPwWhH6vChKRkGdMB4odasUbHOUwy7KL+OVwF86PvT6QVOwElx+TiI1/6kcmcEe+g5YRXJFiXSXUdabqZOvQ==} engines: {node: '>=16.11.0'} '@discordjs/rest@2.6.0': resolution: {integrity: sha512-RDYrhmpB7mTvmCKcpj+pc5k7POKszS4E2O9TYc+U+Y4iaCP+r910QdO43qmpOja8LRr1RJ0b3U+CqVsnPqzf4w==} engines: {node: '>=18'} - '@discordjs/util@1.1.1': - resolution: {integrity: sha512-eddz6UnOBEB1oITPinyrB2Pttej49M9FZQY8NxgEvc3tq6ZICZ19m70RsmzRdDHk80O9NoYN/25AqJl8vPVf/g==} + '@discordjs/util@1.2.0': + resolution: {integrity: sha512-3LKP7F2+atl9vJFhaBjn4nOaSWahZ/yWjOvA4e5pnXkt2qyXRCHLxoBQy81GFtLGCq7K9lPm9R517M1U+/90Qg==} engines: {node: '>=18'} '@discordjs/ws@1.2.3': @@ -5887,11 +5887,11 @@ packages: directive-to-hof@0.0.2: resolution: {integrity: sha512-LXSafC5HhiYxMxAUMgq8TvbgL9TjGwkN5yqndVluDa5DbuuCouSuwGqpwHJadTxm+KZmwBmxJKsGVdOk1NT2uw==} - discord-api-types@0.38.31: - resolution: {integrity: sha512-kC94ANsk8ackj8ENTuO8joTNEL0KtymVhHy9dyEC/s4QAZ7GCx40dYEzQaadyo8w+oP0X8QydE/nzAWRylTGtQ==} + discord-api-types@0.38.38: + resolution: {integrity: sha512-7qcM5IeZrfb+LXW07HvoI5L+j4PQeMZXEkSm1htHAHh4Y9JSMXBWjy/r7zmUCOj4F7zNjMcm7IMWr131MT2h0Q==} - discord.js@14.24.0: - resolution: {integrity: sha512-KNq/ekT8bsmT3ZAfVre8cPbl+DfVYSdlLnDmGZPoz7Cw21LYeWHllRA9MivqNq5b1GPGAxGvyUN1vxbTb/PQWw==} + discord.js@14.25.1: + resolution: {integrity: sha512-2l0gsPOLPs5t6GFZfQZKnL1OJNYFcuC/ETWsW4VtKVD/tg4ICa9x+jb9bkPffkMdRpRpuUaO/fKkHCBeiCKh8g==} engines: {node: '>=18'} dlv@1.1.3: @@ -11910,10 +11910,10 @@ snapshots: '@discordjs/builders@1.13.0': dependencies: - '@discordjs/formatters': 0.6.1 - '@discordjs/util': 1.1.1 + '@discordjs/formatters': 0.6.2 + '@discordjs/util': 1.2.0 '@sapphire/shapeshift': 4.0.0 - discord-api-types: 0.38.31 + discord-api-types: 0.38.38 fast-deep-equal: 3.1.3 ts-mixer: 6.0.4 tslib: 2.8.1 @@ -11922,33 +11922,35 @@ snapshots: '@discordjs/collection@2.1.1': {} - '@discordjs/formatters@0.6.1': + '@discordjs/formatters@0.6.2': dependencies: - discord-api-types: 0.38.31 + discord-api-types: 0.38.38 '@discordjs/rest@2.6.0': dependencies: '@discordjs/collection': 2.1.1 - '@discordjs/util': 1.1.1 + '@discordjs/util': 1.2.0 '@sapphire/async-queue': 1.5.5 '@sapphire/snowflake': 3.5.3 '@vladfrangu/async_event_emitter': 2.4.6 - discord-api-types: 0.38.31 + discord-api-types: 0.38.38 magic-bytes.js: 1.12.1 tslib: 2.8.1 undici: 7.19.2 - '@discordjs/util@1.1.1': {} + '@discordjs/util@1.2.0': + dependencies: + discord-api-types: 0.38.38 '@discordjs/ws@1.2.3': dependencies: '@discordjs/collection': 2.1.1 '@discordjs/rest': 2.6.0 - '@discordjs/util': 1.1.1 + '@discordjs/util': 1.2.0 '@sapphire/async-queue': 1.5.5 '@types/ws': 8.18.1 '@vladfrangu/async_event_emitter': 2.4.6 - discord-api-types: 0.38.31 + discord-api-types: 0.38.38 tslib: 2.8.1 ws: 8.18.3 transitivePeerDependencies: @@ -16952,18 +16954,18 @@ snapshots: transitivePeerDependencies: - supports-color - discord-api-types@0.38.31: {} + discord-api-types@0.38.38: {} - discord.js@14.24.0: + discord.js@14.25.1: dependencies: '@discordjs/builders': 1.13.0 '@discordjs/collection': 1.5.3 - '@discordjs/formatters': 0.6.1 + '@discordjs/formatters': 0.6.2 '@discordjs/rest': 2.6.0 - '@discordjs/util': 1.1.1 + '@discordjs/util': 1.2.0 '@discordjs/ws': 1.2.3 '@sapphire/snowflake': 3.5.3 - discord-api-types: 0.38.31 + discord-api-types: 0.38.38 fast-deep-equal: 3.1.3 lodash.snakecase: 4.1.1 magic-bytes.js: 1.12.1 diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index fff22d57..ecad9c2b 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -3,7 +3,7 @@ packages: - apps/* catalogs: discordjs: - discord.js: ^14.24.0 + discord.js: ^14.25.1 build: typescript: ^5.9.3 tsdown: ^0.20.0-beta.3 From 2445f8beec9aa5550614b8f23bec7a1b51a71bb5 Mon Sep 17 00:00:00 2001 From: twlite <46562212+twlite@users.noreply.github.com> Date: Fri, 30 Jan 2026 18:49:06 +0545 Subject: [PATCH 2/3] fix: use ready client type for ctx --- apps/test-bot/src/app/commands/(interactions)/prompt.tsx | 9 +++++++++ packages/commandkit/src/app/commands/Context.ts | 4 ++-- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/apps/test-bot/src/app/commands/(interactions)/prompt.tsx b/apps/test-bot/src/app/commands/(interactions)/prompt.tsx index 1b23560a..b311a498 100644 --- a/apps/test-bot/src/app/commands/(interactions)/prompt.tsx +++ b/apps/test-bot/src/app/commands/(interactions)/prompt.tsx @@ -10,6 +10,7 @@ import { StringSelectMenu, StringSelectMenuOption, FileUpload, + UserSelectMenu, } from 'commandkit'; import { MessageFlags } from 'discord.js'; @@ -68,6 +69,14 @@ export async function chatInput(ctx: ChatInputCommandContext) { /> + ); diff --git a/packages/commandkit/src/app/commands/Context.ts b/packages/commandkit/src/app/commands/Context.ts index 8b2bca8b..5c143664 100644 --- a/packages/commandkit/src/app/commands/Context.ts +++ b/packages/commandkit/src/app/commands/Context.ts @@ -234,7 +234,7 @@ export class Context< /** * The client instance. */ - public readonly client: Client; + public readonly client: Client; /** * The command that this context belongs to. @@ -265,7 +265,7 @@ export class Context< // these are assigned to readonly properties to make them accessible via object destructuring this.interaction = config.interaction; this.message = config.message; - this.client = commandkit.client; + this.client = commandkit.client as Client; this.#store = config.environment?.store ?? config.store ?? new Collection(); this.command = config.command; From 6853c32762a816ea078bb6e1b5c13f6f5f42464e Mon Sep 17 00:00:00 2001 From: twlite <46562212+twlite@users.noreply.github.com> Date: Fri, 30 Jan 2026 18:50:01 +0545 Subject: [PATCH 3/3] chore: docgen --- .../commandkit/classes/context.mdx | 4 +-- ...ly-default-optional-component-behavior.mdx | 28 +++++++++++++++++++ .../functions/channel-select-menu.mdx | 2 +- .../commandkit/functions/create-element.mdx | 2 +- .../commandkit/functions/file-upload.mdx | 2 +- .../commandkit/functions/fragment.mdx | 2 +- .../commandkit/functions/get-element.mdx | 2 +- .../functions/is-command-kit-element.mdx | 2 +- .../functions/mentionable-select-menu.mdx | 2 +- .../commandkit/functions/modal.mdx | 2 +- .../commandkit/functions/paragraph-input.mdx | 2 +- .../commandkit/functions/role-select-menu.mdx | 2 +- .../commandkit/functions/short-input.mdx | 2 +- .../functions/string-select-menu-option.mdx | 2 +- .../functions/string-select-menu.mdx | 2 +- .../commandkit/functions/text-input.mdx | 2 +- .../commandkit/functions/user-select-menu.mdx | 2 +- .../interfaces/channel-select-menu-props.mdx | 2 +- .../interfaces/command-kit-config.mdx | 6 ++++ .../interfaces/command-kit-element-data.mdx | 2 +- .../interfaces/common-select-menu-props.mdx | 2 +- .../interfaces/file-upload-props.mdx | 2 +- .../interfaces/fragment-element-props.mdx | 2 +- .../mentionable-select-menu-props.mdx | 2 +- .../commandkit/interfaces/modal-props.mdx | 2 +- .../interfaces/role-select-menu-props.mdx | 2 +- .../interfaces/select-menu-props.mdx | 19 ++++++++++--- .../interfaces/string-select-menu-props.mdx | 2 +- .../interfaces/text-input-props.mdx | 2 +- .../interfaces/user-select-menu-props.mdx | 19 ++++++++++--- .../types/any-command-kit-element.mdx | 2 +- .../commandkit/types/command-kit-element.mdx | 2 +- .../commandkit/types/common-builder-kit.mdx | 2 +- .../commandkit/types/element-type.mdx | 2 +- .../types/resolve-builder-interaction.mdx | 2 +- .../types/string-select-menu-option-props.mdx | 2 +- .../commandkit/variables/element-type.mdx | 2 +- 37 files changed, 98 insertions(+), 42 deletions(-) create mode 100644 apps/website/docs/api-reference/commandkit/functions/apply-default-optional-component-behavior.mdx diff --git a/apps/website/docs/api-reference/commandkit/classes/context.mdx b/apps/website/docs/api-reference/commandkit/classes/context.mdx index a7281a68..92a57018 100644 --- a/apps/website/docs/api-reference/commandkit/classes/context.mdx +++ b/apps/website/docs/api-reference/commandkit/classes/context.mdx @@ -26,7 +26,7 @@ class Context; public readonly command: LoadedCommand; constructor(commandkit: CommandKit, config: ContextParameters) store: void @@ -87,7 +87,7 @@ The channel where the command was triggered. The channel id where the command was triggered. ### client - + The client instance. ### command diff --git a/apps/website/docs/api-reference/commandkit/functions/apply-default-optional-component-behavior.mdx b/apps/website/docs/api-reference/commandkit/functions/apply-default-optional-component-behavior.mdx new file mode 100644 index 00000000..863f9450 --- /dev/null +++ b/apps/website/docs/api-reference/commandkit/functions/apply-default-optional-component-behavior.mdx @@ -0,0 +1,28 @@ +--- +title: "ApplyDefaultOptionalComponentBehavior" +isDefaultIndex: false +generated: true +--- + +import MemberInfo from '@site/src/components/MemberInfo'; +import GenerationInfo from '@site/src/components/GenerationInfo'; +import MemberDescription from '@site/src/components/MemberDescription'; + + + + +## applyDefaultOptionalComponentBehavior + + + + + +```ts title="Signature" +function applyDefaultOptionalComponentBehavior

(props: P): P +``` +Parameters + +### props + + + diff --git a/apps/website/docs/api-reference/commandkit/functions/channel-select-menu.mdx b/apps/website/docs/api-reference/commandkit/functions/channel-select-menu.mdx index a9eed232..359fc0ba 100644 --- a/apps/website/docs/api-reference/commandkit/functions/channel-select-menu.mdx +++ b/apps/website/docs/api-reference/commandkit/functions/channel-select-menu.mdx @@ -13,7 +13,7 @@ import MemberDescription from '@site/src/components/MemberDescription'; ## ChannelSelectMenu - + The ChannelSelectMenu component. diff --git a/apps/website/docs/api-reference/commandkit/functions/create-element.mdx b/apps/website/docs/api-reference/commandkit/functions/create-element.mdx index 6498958f..79ce68de 100644 --- a/apps/website/docs/api-reference/commandkit/functions/create-element.mdx +++ b/apps/website/docs/api-reference/commandkit/functions/create-element.mdx @@ -13,7 +13,7 @@ import MemberDescription from '@site/src/components/MemberDescription'; ## createElement - + The createElement function is used to create CommandKit elements. diff --git a/apps/website/docs/api-reference/commandkit/functions/file-upload.mdx b/apps/website/docs/api-reference/commandkit/functions/file-upload.mdx index 9ac57eda..eea9502f 100644 --- a/apps/website/docs/api-reference/commandkit/functions/file-upload.mdx +++ b/apps/website/docs/api-reference/commandkit/functions/file-upload.mdx @@ -13,7 +13,7 @@ import MemberDescription from '@site/src/components/MemberDescription'; ## FileUpload - + The file upload component. diff --git a/apps/website/docs/api-reference/commandkit/functions/fragment.mdx b/apps/website/docs/api-reference/commandkit/functions/fragment.mdx index b7206d07..908d8b86 100644 --- a/apps/website/docs/api-reference/commandkit/functions/fragment.mdx +++ b/apps/website/docs/api-reference/commandkit/functions/fragment.mdx @@ -13,7 +13,7 @@ import MemberDescription from '@site/src/components/MemberDescription'; ## Fragment - + Represents a fragment of CommandKit elements. diff --git a/apps/website/docs/api-reference/commandkit/functions/get-element.mdx b/apps/website/docs/api-reference/commandkit/functions/get-element.mdx index 57ccfe5f..d90eda3c 100644 --- a/apps/website/docs/api-reference/commandkit/functions/get-element.mdx +++ b/apps/website/docs/api-reference/commandkit/functions/get-element.mdx @@ -13,7 +13,7 @@ import MemberDescription from '@site/src/components/MemberDescription'; ## getElement - + Gets the element data for a specific CommandKit element. diff --git a/apps/website/docs/api-reference/commandkit/functions/is-command-kit-element.mdx b/apps/website/docs/api-reference/commandkit/functions/is-command-kit-element.mdx index 2746eee1..5dd4589f 100644 --- a/apps/website/docs/api-reference/commandkit/functions/is-command-kit-element.mdx +++ b/apps/website/docs/api-reference/commandkit/functions/is-command-kit-element.mdx @@ -13,7 +13,7 @@ import MemberDescription from '@site/src/components/MemberDescription'; ## isCommandKitElement - + Checks if the given element is a CommandKit element. diff --git a/apps/website/docs/api-reference/commandkit/functions/mentionable-select-menu.mdx b/apps/website/docs/api-reference/commandkit/functions/mentionable-select-menu.mdx index 0318e8be..e2744c38 100644 --- a/apps/website/docs/api-reference/commandkit/functions/mentionable-select-menu.mdx +++ b/apps/website/docs/api-reference/commandkit/functions/mentionable-select-menu.mdx @@ -13,7 +13,7 @@ import MemberDescription from '@site/src/components/MemberDescription'; ## MentionableSelectMenu - + The MentionableSelectMenu component. diff --git a/apps/website/docs/api-reference/commandkit/functions/modal.mdx b/apps/website/docs/api-reference/commandkit/functions/modal.mdx index 17a748fd..17c8b49c 100644 --- a/apps/website/docs/api-reference/commandkit/functions/modal.mdx +++ b/apps/website/docs/api-reference/commandkit/functions/modal.mdx @@ -13,7 +13,7 @@ import MemberDescription from '@site/src/components/MemberDescription'; ## Modal - + The modal component. diff --git a/apps/website/docs/api-reference/commandkit/functions/paragraph-input.mdx b/apps/website/docs/api-reference/commandkit/functions/paragraph-input.mdx index 93d07aa7..2259e44e 100644 --- a/apps/website/docs/api-reference/commandkit/functions/paragraph-input.mdx +++ b/apps/website/docs/api-reference/commandkit/functions/paragraph-input.mdx @@ -13,7 +13,7 @@ import MemberDescription from '@site/src/components/MemberDescription'; ## ParagraphInput - + The paragraph text input component. diff --git a/apps/website/docs/api-reference/commandkit/functions/role-select-menu.mdx b/apps/website/docs/api-reference/commandkit/functions/role-select-menu.mdx index bf8ed198..3f08a5ed 100644 --- a/apps/website/docs/api-reference/commandkit/functions/role-select-menu.mdx +++ b/apps/website/docs/api-reference/commandkit/functions/role-select-menu.mdx @@ -13,7 +13,7 @@ import MemberDescription from '@site/src/components/MemberDescription'; ## RoleSelectMenu - + The RoleSelectMenu component. diff --git a/apps/website/docs/api-reference/commandkit/functions/short-input.mdx b/apps/website/docs/api-reference/commandkit/functions/short-input.mdx index 9ac60b0a..174b5d2d 100644 --- a/apps/website/docs/api-reference/commandkit/functions/short-input.mdx +++ b/apps/website/docs/api-reference/commandkit/functions/short-input.mdx @@ -13,7 +13,7 @@ import MemberDescription from '@site/src/components/MemberDescription'; ## ShortInput - + The short text input component. diff --git a/apps/website/docs/api-reference/commandkit/functions/string-select-menu-option.mdx b/apps/website/docs/api-reference/commandkit/functions/string-select-menu-option.mdx index ef6f9fb7..b6ee3243 100644 --- a/apps/website/docs/api-reference/commandkit/functions/string-select-menu-option.mdx +++ b/apps/website/docs/api-reference/commandkit/functions/string-select-menu-option.mdx @@ -13,7 +13,7 @@ import MemberDescription from '@site/src/components/MemberDescription'; ## StringSelectMenuOption - + A select menu option for the string select menu. diff --git a/apps/website/docs/api-reference/commandkit/functions/string-select-menu.mdx b/apps/website/docs/api-reference/commandkit/functions/string-select-menu.mdx index 63d63d14..afe9a125 100644 --- a/apps/website/docs/api-reference/commandkit/functions/string-select-menu.mdx +++ b/apps/website/docs/api-reference/commandkit/functions/string-select-menu.mdx @@ -13,7 +13,7 @@ import MemberDescription from '@site/src/components/MemberDescription'; ## StringSelectMenu - + The StringSelectMenu component. diff --git a/apps/website/docs/api-reference/commandkit/functions/text-input.mdx b/apps/website/docs/api-reference/commandkit/functions/text-input.mdx index 03216614..8835e016 100644 --- a/apps/website/docs/api-reference/commandkit/functions/text-input.mdx +++ b/apps/website/docs/api-reference/commandkit/functions/text-input.mdx @@ -13,7 +13,7 @@ import MemberDescription from '@site/src/components/MemberDescription'; ## TextInput - + The text input component. diff --git a/apps/website/docs/api-reference/commandkit/functions/user-select-menu.mdx b/apps/website/docs/api-reference/commandkit/functions/user-select-menu.mdx index 4ed147c5..3d58369b 100644 --- a/apps/website/docs/api-reference/commandkit/functions/user-select-menu.mdx +++ b/apps/website/docs/api-reference/commandkit/functions/user-select-menu.mdx @@ -13,7 +13,7 @@ import MemberDescription from '@site/src/components/MemberDescription'; ## UserSelectMenu - + The UserSelectMenu component. diff --git a/apps/website/docs/api-reference/commandkit/interfaces/channel-select-menu-props.mdx b/apps/website/docs/api-reference/commandkit/interfaces/channel-select-menu-props.mdx index 1f3ba808..cb3c65f1 100644 --- a/apps/website/docs/api-reference/commandkit/interfaces/channel-select-menu-props.mdx +++ b/apps/website/docs/api-reference/commandkit/interfaces/channel-select-menu-props.mdx @@ -13,7 +13,7 @@ import MemberDescription from '@site/src/components/MemberDescription'; ## ChannelSelectMenuProps - + The ChannelSelectMenu component props. diff --git a/apps/website/docs/api-reference/commandkit/interfaces/command-kit-config.mdx b/apps/website/docs/api-reference/commandkit/interfaces/command-kit-config.mdx index 26795770..f4408e05 100644 --- a/apps/website/docs/api-reference/commandkit/interfaces/command-kit-config.mdx +++ b/apps/website/docs/api-reference/commandkit/interfaces/command-kit-config.mdx @@ -58,6 +58,7 @@ interface CommandKitConfig { disablePrefixCommands?: boolean; disablePermissionsMiddleware?: boolean; showUnknownPrefixCommandsWarning?: boolean; + jsxDefaultOptionalComponents?: boolean; } ``` @@ -135,6 +136,11 @@ Whether or not to disable the built-in permissions middleware. This only affects Whether or not to show a warning when a prefix command is not found. This only affects development mode. +### jsxDefaultOptionalComponents + + + +Whether to make interaction components optional by default when using JSX (opposite of Discord's default behavior). diff --git a/apps/website/docs/api-reference/commandkit/interfaces/command-kit-element-data.mdx b/apps/website/docs/api-reference/commandkit/interfaces/command-kit-element-data.mdx index cd2af931..cf684288 100644 --- a/apps/website/docs/api-reference/commandkit/interfaces/command-kit-element-data.mdx +++ b/apps/website/docs/api-reference/commandkit/interfaces/command-kit-element-data.mdx @@ -13,7 +13,7 @@ import MemberDescription from '@site/src/components/MemberDescription'; ## CommandKitElementData - + The data structure that maps each ElementType to its corresponding CommandKit element. diff --git a/apps/website/docs/api-reference/commandkit/interfaces/common-select-menu-props.mdx b/apps/website/docs/api-reference/commandkit/interfaces/common-select-menu-props.mdx index cba9b7a4..f909f5d0 100644 --- a/apps/website/docs/api-reference/commandkit/interfaces/common-select-menu-props.mdx +++ b/apps/website/docs/api-reference/commandkit/interfaces/common-select-menu-props.mdx @@ -13,7 +13,7 @@ import MemberDescription from '@site/src/components/MemberDescription'; ## CommonSelectMenuProps - + Type for the common properties shared by all select menu builders. diff --git a/apps/website/docs/api-reference/commandkit/interfaces/file-upload-props.mdx b/apps/website/docs/api-reference/commandkit/interfaces/file-upload-props.mdx index 913696f6..daea7791 100644 --- a/apps/website/docs/api-reference/commandkit/interfaces/file-upload-props.mdx +++ b/apps/website/docs/api-reference/commandkit/interfaces/file-upload-props.mdx @@ -13,7 +13,7 @@ import MemberDescription from '@site/src/components/MemberDescription'; ## FileUploadProps - + diff --git a/apps/website/docs/api-reference/commandkit/interfaces/fragment-element-props.mdx b/apps/website/docs/api-reference/commandkit/interfaces/fragment-element-props.mdx index 25292466..f65a2ae1 100644 --- a/apps/website/docs/api-reference/commandkit/interfaces/fragment-element-props.mdx +++ b/apps/website/docs/api-reference/commandkit/interfaces/fragment-element-props.mdx @@ -13,7 +13,7 @@ import MemberDescription from '@site/src/components/MemberDescription'; ## FragmentElementProps - + Represents the properties for a fragment element in CommandKit. diff --git a/apps/website/docs/api-reference/commandkit/interfaces/mentionable-select-menu-props.mdx b/apps/website/docs/api-reference/commandkit/interfaces/mentionable-select-menu-props.mdx index 399fda5c..64c430fc 100644 --- a/apps/website/docs/api-reference/commandkit/interfaces/mentionable-select-menu-props.mdx +++ b/apps/website/docs/api-reference/commandkit/interfaces/mentionable-select-menu-props.mdx @@ -13,7 +13,7 @@ import MemberDescription from '@site/src/components/MemberDescription'; ## MentionableSelectMenuProps - + The MentionableSelectMenu component props. diff --git a/apps/website/docs/api-reference/commandkit/interfaces/modal-props.mdx b/apps/website/docs/api-reference/commandkit/interfaces/modal-props.mdx index 079e5369..65a95932 100644 --- a/apps/website/docs/api-reference/commandkit/interfaces/modal-props.mdx +++ b/apps/website/docs/api-reference/commandkit/interfaces/modal-props.mdx @@ -13,7 +13,7 @@ import MemberDescription from '@site/src/components/MemberDescription'; ## ModalProps - + The properties for the modal component. diff --git a/apps/website/docs/api-reference/commandkit/interfaces/role-select-menu-props.mdx b/apps/website/docs/api-reference/commandkit/interfaces/role-select-menu-props.mdx index 6902e79e..d23e1aaa 100644 --- a/apps/website/docs/api-reference/commandkit/interfaces/role-select-menu-props.mdx +++ b/apps/website/docs/api-reference/commandkit/interfaces/role-select-menu-props.mdx @@ -13,7 +13,7 @@ import MemberDescription from '@site/src/components/MemberDescription'; ## RoleSelectMenuProps - + The RoleSelectMenu component props. diff --git a/apps/website/docs/api-reference/commandkit/interfaces/select-menu-props.mdx b/apps/website/docs/api-reference/commandkit/interfaces/select-menu-props.mdx index 311fbfd9..c1ddf425 100644 --- a/apps/website/docs/api-reference/commandkit/interfaces/select-menu-props.mdx +++ b/apps/website/docs/api-reference/commandkit/interfaces/select-menu-props.mdx @@ -13,16 +13,27 @@ import MemberDescription from '@site/src/components/MemberDescription'; ## SelectMenuProps - + Type for the base select menu component data. ```ts title="Signature" -interface SelectMenuProps extends Partial>, +interface SelectMenuProps extends Partial>, CommonSelectMenuProps { - + required?: boolean; } ``` -* Extends: Partial<Omit<BaseSelectMenuComponentData, 'type'>>, CommonSelectMenuProps<T, C> +* Extends: Partial<Omit<BaseSelectMenuComponentData, 'type' | 'required'>>, CommonSelectMenuProps<T, C> + + + +

+ +### required + + + + +
diff --git a/apps/website/docs/api-reference/commandkit/interfaces/string-select-menu-props.mdx b/apps/website/docs/api-reference/commandkit/interfaces/string-select-menu-props.mdx index 9478ef78..844ae27a 100644 --- a/apps/website/docs/api-reference/commandkit/interfaces/string-select-menu-props.mdx +++ b/apps/website/docs/api-reference/commandkit/interfaces/string-select-menu-props.mdx @@ -13,7 +13,7 @@ import MemberDescription from '@site/src/components/MemberDescription'; ## StringSelectMenuProps - + The properties for a string select menu component. diff --git a/apps/website/docs/api-reference/commandkit/interfaces/text-input-props.mdx b/apps/website/docs/api-reference/commandkit/interfaces/text-input-props.mdx index fc783063..61bf3d59 100644 --- a/apps/website/docs/api-reference/commandkit/interfaces/text-input-props.mdx +++ b/apps/website/docs/api-reference/commandkit/interfaces/text-input-props.mdx @@ -13,7 +13,7 @@ import MemberDescription from '@site/src/components/MemberDescription'; ## TextInputProps - + diff --git a/apps/website/docs/api-reference/commandkit/interfaces/user-select-menu-props.mdx b/apps/website/docs/api-reference/commandkit/interfaces/user-select-menu-props.mdx index 66b722d0..5a51fdca 100644 --- a/apps/website/docs/api-reference/commandkit/interfaces/user-select-menu-props.mdx +++ b/apps/website/docs/api-reference/commandkit/interfaces/user-select-menu-props.mdx @@ -13,16 +13,27 @@ import MemberDescription from '@site/src/components/MemberDescription'; ## UserSelectMenuProps - + The UserSelectMenu component. ```ts title="Signature" -interface UserSelectMenuProps extends Partial>, +interface UserSelectMenuProps extends Partial>, CommonSelectMenuProps { - + defaultValues?: MaybeArray; } ``` -* Extends: Partial<Omit<UserSelectMenuComponentData, 'type'>>, CommonSelectMenuProps<UserSelectMenuInteraction, UserSelectMenuKit> +* Extends: Partial<Omit<UserSelectMenuComponentData, 'type' | 'defaultValues'>>, CommonSelectMenuProps<UserSelectMenuInteraction, UserSelectMenuKit> + + + +
+ +### defaultValues + +MaybeArray<string | Snowflake>`} /> + + +
diff --git a/apps/website/docs/api-reference/commandkit/types/any-command-kit-element.mdx b/apps/website/docs/api-reference/commandkit/types/any-command-kit-element.mdx index 93568385..c9e7ef07 100644 --- a/apps/website/docs/api-reference/commandkit/types/any-command-kit-element.mdx +++ b/apps/website/docs/api-reference/commandkit/types/any-command-kit-element.mdx @@ -13,7 +13,7 @@ import MemberDescription from '@site/src/components/MemberDescription'; ## AnyCommandKitElement - + Represents any CommandKit element, which can be of any type defined in CommandKitElementData. diff --git a/apps/website/docs/api-reference/commandkit/types/command-kit-element.mdx b/apps/website/docs/api-reference/commandkit/types/command-kit-element.mdx index dea16a5b..cfff4652 100644 --- a/apps/website/docs/api-reference/commandkit/types/command-kit-element.mdx +++ b/apps/website/docs/api-reference/commandkit/types/command-kit-element.mdx @@ -13,7 +13,7 @@ import MemberDescription from '@site/src/components/MemberDescription'; ## CommandKitElement - + Represents a CommandKit element with a specific type and data. diff --git a/apps/website/docs/api-reference/commandkit/types/common-builder-kit.mdx b/apps/website/docs/api-reference/commandkit/types/common-builder-kit.mdx index 688a68cd..8f60de09 100644 --- a/apps/website/docs/api-reference/commandkit/types/common-builder-kit.mdx +++ b/apps/website/docs/api-reference/commandkit/types/common-builder-kit.mdx @@ -13,7 +13,7 @@ import MemberDescription from '@site/src/components/MemberDescription'; ## CommonBuilderKit - + Type for the common builder kit that can be used with select menus. diff --git a/apps/website/docs/api-reference/commandkit/types/element-type.mdx b/apps/website/docs/api-reference/commandkit/types/element-type.mdx index 4df0d795..afa9442a 100644 --- a/apps/website/docs/api-reference/commandkit/types/element-type.mdx +++ b/apps/website/docs/api-reference/commandkit/types/element-type.mdx @@ -13,7 +13,7 @@ import MemberDescription from '@site/src/components/MemberDescription'; ## ElementType - + The type of element that can be used in CommandKit. This is a union of the keys of the ElementType object. diff --git a/apps/website/docs/api-reference/commandkit/types/resolve-builder-interaction.mdx b/apps/website/docs/api-reference/commandkit/types/resolve-builder-interaction.mdx index 68884a61..b88e05f0 100644 --- a/apps/website/docs/api-reference/commandkit/types/resolve-builder-interaction.mdx +++ b/apps/website/docs/api-reference/commandkit/types/resolve-builder-interaction.mdx @@ -13,7 +13,7 @@ import MemberDescription from '@site/src/components/MemberDescription'; ## ResolveBuilderInteraction - + Type that resolves to the specific interaction type based on the builder type. This is used to ensure that the interaction type matches the builder type. diff --git a/apps/website/docs/api-reference/commandkit/types/string-select-menu-option-props.mdx b/apps/website/docs/api-reference/commandkit/types/string-select-menu-option-props.mdx index c059a1a7..54746d8e 100644 --- a/apps/website/docs/api-reference/commandkit/types/string-select-menu-option-props.mdx +++ b/apps/website/docs/api-reference/commandkit/types/string-select-menu-option-props.mdx @@ -13,7 +13,7 @@ import MemberDescription from '@site/src/components/MemberDescription'; ## StringSelectMenuOptionProps - + Represents the properties for a string select menu option. This can be either a SelectMenuComponentOptionData or an APISelectMenuOption. diff --git a/apps/website/docs/api-reference/commandkit/variables/element-type.mdx b/apps/website/docs/api-reference/commandkit/variables/element-type.mdx index 525b108c..4ae8628b 100644 --- a/apps/website/docs/api-reference/commandkit/variables/element-type.mdx +++ b/apps/website/docs/api-reference/commandkit/variables/element-type.mdx @@ -13,7 +13,7 @@ import MemberDescription from '@site/src/components/MemberDescription'; ## ElementType - + Represents the types of elements that can be used in CommandKit.