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.