@bigbinary/neeto-atoms 1.0.101 → 1.0.103
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{Alert-CydF7eEs.js → Alert-BN00VOZx.js} +2 -2
- package/dist/{Alert-CydF7eEs.js.map → Alert-BN00VOZx.js.map} +1 -1
- package/dist/{Avatar-DxRDQDjh.js → Avatar-ChF94Ken.js} +3 -2
- package/dist/Avatar-ChF94Ken.js.map +1 -0
- package/dist/{Badge-DC6zxOwS.js → Badge-Bl5cyQ5Q.js} +4 -1
- package/dist/Badge-Bl5cyQ5Q.js.map +1 -0
- package/dist/{Button-DV9xCqlc.js → Button-C4c_dj-f.js} +2 -2
- package/dist/{Button-DV9xCqlc.js.map → Button-C4c_dj-f.js.map} +1 -1
- package/dist/{Callout-BgV-Lfuu.js → Callout-DJGi3MQR.js} +2 -1
- package/dist/{Callout-BgV-Lfuu.js.map → Callout-DJGi3MQR.js.map} +1 -1
- package/dist/{Checkbox-m4rEnxUz.js → Checkbox-DiAngQvO.js} +4 -2
- package/dist/Checkbox-DiAngQvO.js.map +1 -0
- package/dist/{DataTable-BNMYEa_7.js → DataTable-CwWARMEv.js} +197 -174
- package/dist/DataTable-CwWARMEv.js.map +1 -0
- package/dist/{Empty-Bfido_mq.js → Empty-DINS0Uu4.js} +19 -8
- package/dist/Empty-DINS0Uu4.js.map +1 -0
- package/dist/{HelpIcon-Cm3ZgoCx.js → HelpIcon-CbnRiSjn.js} +3 -3
- package/dist/{HelpIcon-Cm3ZgoCx.js.map → HelpIcon-CbnRiSjn.js.map} +1 -1
- package/dist/{Input-CYKHBpJn.js → Input-CuIurquS.js} +2 -2
- package/dist/{Input-CYKHBpJn.js.map → Input-CuIurquS.js.map} +1 -1
- package/dist/{Kbd-CAIAs4OO.js → Kbd-CKfR8HlC.js} +2 -2
- package/dist/{Kbd-CAIAs4OO.js.map → Kbd-CKfR8HlC.js.map} +1 -1
- package/dist/{Label-mrNM2drW.js → Label-DjOaTM4Q.js} +2 -2
- package/dist/{Label-mrNM2drW.js.map → Label-DjOaTM4Q.js.map} +1 -1
- package/dist/{MultiEmailInput-Du1964Ka.js → MultiEmailInput-BB334s4C.js} +93 -86
- package/dist/MultiEmailInput-BB334s4C.js.map +1 -0
- package/dist/{Pagination-BRd3WPJ_.js → Pagination-yjG8uCpV.js} +6 -4
- package/dist/{Pagination-BRd3WPJ_.js.map → Pagination-yjG8uCpV.js.map} +1 -1
- package/dist/{Popover-C1FNlRtU.js → Popover-BHGvcdV2.js} +2 -1
- package/dist/{Popover-C1FNlRtU.js.map → Popover-BHGvcdV2.js.map} +1 -1
- package/dist/{Progress-DURemsl_.js → Progress-DbtLbWf8.js} +10 -2
- package/dist/{Progress-DURemsl_.js.map → Progress-DbtLbWf8.js.map} +1 -1
- package/dist/{Select-SvphlEXA.js → Select-YWCfd2p1.js} +2 -5
- package/dist/Select-YWCfd2p1.js.map +1 -0
- package/dist/{Spinner-DgV3mILN.js → Spinner-vfggfvEp.js} +2 -1
- package/dist/{Spinner-DgV3mILN.js.map → Spinner-vfggfvEp.js.map} +1 -1
- package/dist/{Stepper-7OpfOfas.js → Stepper-DO7EBWYL.js} +2 -1
- package/dist/{Stepper-7OpfOfas.js.map → Stepper-DO7EBWYL.js.map} +1 -1
- package/dist/{Switch-D_Xt6QgL.js → Switch-Am2l2UdV.js} +3 -1
- package/dist/Switch-Am2l2UdV.js.map +1 -0
- package/dist/{Tabs-BCUdAnva.js → Tabs-ModAabFc.js} +7 -3
- package/dist/Tabs-ModAabFc.js.map +1 -0
- package/dist/{Textarea-B2Uhx-Yy.js → Textarea-CMGZZ4rL.js} +4 -3
- package/dist/{Textarea-B2Uhx-Yy.js.map → Textarea-CMGZZ4rL.js.map} +1 -1
- package/dist/{Tooltip-CA3irJ2q.js → Tooltip-DWDsgyx7.js} +2 -1
- package/dist/{Tooltip-CA3irJ2q.js.map → Tooltip-DWDsgyx7.js.map} +1 -1
- package/dist/{TreeSelect-Ct7qDBad.js → TreeSelect-wYDOZ5yD.js} +2 -1
- package/dist/TreeSelect-wYDOZ5yD.js.map +1 -0
- package/dist/cjs/{Alert-BdZVGiON.js → Alert-BTheamzj.js} +2 -2
- package/dist/cjs/{Alert-BdZVGiON.js.map → Alert-BTheamzj.js.map} +1 -1
- package/dist/cjs/{Avatar-DWuHnGh4.js → Avatar-DGuMcBnh.js} +3 -2
- package/dist/cjs/Avatar-DGuMcBnh.js.map +1 -0
- package/dist/cjs/{Badge-Dz_Kb49L.js → Badge-DPGWAq4H.js} +4 -1
- package/dist/cjs/Badge-DPGWAq4H.js.map +1 -0
- package/dist/cjs/{Button-8VH9p9RB.js → Button-DJSysuyG.js} +2 -2
- package/dist/cjs/{Button-8VH9p9RB.js.map → Button-DJSysuyG.js.map} +1 -1
- package/dist/cjs/{Callout-Cnsff-NS.js → Callout-Bci3POCo.js} +2 -1
- package/dist/cjs/{Callout-Cnsff-NS.js.map → Callout-Bci3POCo.js.map} +1 -1
- package/dist/cjs/{Checkbox-CymHP7QE.js → Checkbox-7lX2aMKA.js} +4 -2
- package/dist/cjs/Checkbox-7lX2aMKA.js.map +1 -0
- package/dist/cjs/{DataTable-CRDwhMUB.js → DataTable-ChgPVrRB.js} +197 -174
- package/dist/cjs/DataTable-ChgPVrRB.js.map +1 -0
- package/dist/cjs/{Empty-aQaWK0p4.js → Empty-Bqt-TucD.js} +19 -8
- package/dist/cjs/Empty-Bqt-TucD.js.map +1 -0
- package/dist/cjs/{HelpIcon-CIkKt2uy.js → HelpIcon-QpZY6Zmc.js} +3 -3
- package/dist/cjs/{HelpIcon-CIkKt2uy.js.map → HelpIcon-QpZY6Zmc.js.map} +1 -1
- package/dist/cjs/{Input-k6MkhSTc.js → Input-lWo0YoZ9.js} +2 -2
- package/dist/cjs/{Input-k6MkhSTc.js.map → Input-lWo0YoZ9.js.map} +1 -1
- package/dist/cjs/{Kbd-BvC3VSNb.js → Kbd--A8Gl8TV.js} +2 -2
- package/dist/cjs/Kbd--A8Gl8TV.js.map +1 -0
- package/dist/cjs/{Label-Dt7K54Ly.js → Label-D8RFE9hd.js} +2 -2
- package/dist/cjs/{Label-Dt7K54Ly.js.map → Label-D8RFE9hd.js.map} +1 -1
- package/dist/cjs/{MultiEmailInput-KmN2BSaX.js → MultiEmailInput-BlIqzq-o.js} +93 -86
- package/dist/cjs/MultiEmailInput-BlIqzq-o.js.map +1 -0
- package/dist/cjs/{Pagination-8yFg8xR2.js → Pagination-WyQlBpvK.js} +6 -4
- package/dist/cjs/{Pagination-8yFg8xR2.js.map → Pagination-WyQlBpvK.js.map} +1 -1
- package/dist/cjs/{Popover-DuRSsDHz.js → Popover-5BUgIW60.js} +2 -1
- package/dist/cjs/{Popover-DuRSsDHz.js.map → Popover-5BUgIW60.js.map} +1 -1
- package/dist/cjs/{Progress-yBpMAzIU.js → Progress-n_VwK9_E.js} +10 -2
- package/dist/cjs/{Progress-yBpMAzIU.js.map → Progress-n_VwK9_E.js.map} +1 -1
- package/dist/cjs/{Select-YtJKCZeT.js → Select-Bs5Fp3wj.js} +3 -6
- package/dist/cjs/Select-Bs5Fp3wj.js.map +1 -0
- package/dist/cjs/{Spinner-DzNBz8al.js → Spinner-DRoghJA8.js} +2 -1
- package/dist/cjs/{Spinner-DzNBz8al.js.map → Spinner-DRoghJA8.js.map} +1 -1
- package/dist/cjs/{Stepper-DZb25oBH.js → Stepper-BtZG_XmC.js} +2 -1
- package/dist/cjs/{Stepper-DZb25oBH.js.map → Stepper-BtZG_XmC.js.map} +1 -1
- package/dist/cjs/{Switch-DrSFyxis.js → Switch-DY7bdiEz.js} +3 -1
- package/dist/cjs/Switch-DY7bdiEz.js.map +1 -0
- package/dist/cjs/{Tabs-COMRjTVU.js → Tabs-CA0QAWp0.js} +7 -3
- package/dist/cjs/Tabs-CA0QAWp0.js.map +1 -0
- package/dist/cjs/{Textarea-yWv-66yX.js → Textarea-Cw7Uea82.js} +4 -3
- package/dist/cjs/{Textarea-yWv-66yX.js.map → Textarea-Cw7Uea82.js.map} +1 -1
- package/dist/cjs/{Tooltip-Dph_R3Ct.js → Tooltip-B6uv_2Jz.js} +2 -1
- package/dist/cjs/{Tooltip-Dph_R3Ct.js.map → Tooltip-B6uv_2Jz.js.map} +1 -1
- package/dist/cjs/{TreeSelect-Ck0takdS.js → TreeSelect-C9BSJt1d.js} +2 -1
- package/dist/cjs/TreeSelect-C9BSJt1d.js.map +1 -0
- package/dist/cjs/components/Alert.js +2 -2
- package/dist/cjs/components/Avatar.js +1 -1
- package/dist/cjs/components/Badge.js +1 -1
- package/dist/cjs/components/Button.js +1 -1
- package/dist/cjs/components/Callout.js +1 -1
- package/dist/cjs/components/Checkbox.js +4 -4
- package/dist/cjs/components/DataTable.js +3 -3
- package/dist/cjs/components/DatePicker.js +3 -3
- package/dist/cjs/components/DropdownMenu.js +2 -1
- package/dist/cjs/components/DropdownMenu.js.map +1 -1
- package/dist/cjs/components/Empty.js +2 -2
- package/dist/cjs/components/Input.js +4 -4
- package/dist/cjs/components/Kbd.js +1 -1
- package/dist/cjs/components/Label.js +4 -4
- package/dist/cjs/components/MultiEmailInput.js +4 -4
- package/dist/cjs/components/Pagination.js +1 -1
- package/dist/cjs/components/Popover.js +1 -1
- package/dist/cjs/components/Progress.js +1 -1
- package/dist/cjs/components/RadioGroup.js +3 -3
- package/dist/cjs/components/Select.js +5 -4
- package/dist/cjs/components/Select.js.map +1 -1
- package/dist/cjs/components/Slider.js +3 -3
- package/dist/cjs/components/Spinner.js +1 -1
- package/dist/cjs/components/Stepper.js +1 -1
- package/dist/cjs/components/Switch.js +4 -4
- package/dist/cjs/components/Tabs.js +2 -1
- package/dist/cjs/components/Tabs.js.map +1 -1
- package/dist/cjs/components/Textarea.js +4 -4
- package/dist/cjs/components/TimePicker.js +3 -3
- package/dist/cjs/components/Tooltip.js +1 -1
- package/dist/cjs/components/TreeSelect.js +4 -4
- package/dist/cjs/components/index.js +25 -24
- package/dist/cjs/components/index.js.map +1 -1
- package/dist/cjs/formik/ActionBlock.js +1 -1
- package/dist/cjs/formik/BlockNavigation.js +1 -1
- package/dist/cjs/formik/Button.js +1 -1
- package/dist/cjs/formik/Checkbox.js +4 -4
- package/dist/cjs/formik/Input.js +4 -4
- package/dist/cjs/formik/MultiEmailInput.js +4 -4
- package/dist/cjs/formik/RadioGroup.js +3 -3
- package/dist/cjs/formik/Select.js +5 -4
- package/dist/cjs/formik/Select.js.map +1 -1
- package/dist/cjs/formik/Slider.js +3 -3
- package/dist/cjs/formik/Switch.js +4 -4
- package/dist/cjs/formik/Textarea.js +4 -4
- package/dist/cjs/formik/TreeSelect.js +4 -4
- package/dist/cjs/formik/index.js +11 -10
- package/dist/cjs/formik/index.js.map +1 -1
- package/dist/cjs/hyphenize-B8IGPzjp.js +8 -0
- package/dist/cjs/hyphenize-B8IGPzjp.js.map +1 -0
- package/dist/cjs/index.js +25 -24
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/primitives/Button.js +2 -0
- package/dist/cjs/primitives/Button.js.map +1 -1
- package/dist/cjs/primitives/Dialog.js +1 -0
- package/dist/cjs/primitives/Dialog.js.map +1 -1
- package/dist/cjs/primitives/Field.js +3 -3
- package/dist/cjs/primitives/Sheet.js +1 -0
- package/dist/cjs/primitives/Sheet.js.map +1 -1
- package/dist/cjs/primitives/index.js +3 -3
- package/dist/components/Alert.js +2 -2
- package/dist/components/Avatar.js +1 -1
- package/dist/components/Badge.js +1 -1
- package/dist/components/Button.js +1 -1
- package/dist/components/Callout.js +1 -1
- package/dist/components/Checkbox.js +4 -4
- package/dist/components/DataTable.js +3 -3
- package/dist/components/DatePicker.js +3 -3
- package/dist/components/DropdownMenu.js +2 -1
- package/dist/components/DropdownMenu.js.map +1 -1
- package/dist/components/Empty/Empty.d.ts +2 -0
- package/dist/components/Empty.js +2 -2
- package/dist/components/Input.js +4 -4
- package/dist/components/Kbd.js +1 -1
- package/dist/components/Label.js +4 -4
- package/dist/components/MultiEmailInput.js +4 -4
- package/dist/components/Pagination.js +1 -1
- package/dist/components/Popover.js +1 -1
- package/dist/components/Progress.js +1 -1
- package/dist/components/RadioGroup.js +3 -3
- package/dist/components/Select.js +5 -4
- package/dist/components/Select.js.map +1 -1
- package/dist/components/Slider.js +3 -3
- package/dist/components/Spinner.js +1 -1
- package/dist/components/Stepper.js +1 -1
- package/dist/components/Switch.js +4 -4
- package/dist/components/Tabs/Tabs.d.ts +2 -0
- package/dist/components/Tabs.js +2 -1
- package/dist/components/Tabs.js.map +1 -1
- package/dist/components/Textarea.js +4 -4
- package/dist/components/TimePicker.js +3 -3
- package/dist/components/Tooltip.js +1 -1
- package/dist/components/TreeSelect/types.d.ts +2 -0
- package/dist/components/TreeSelect.js +4 -4
- package/dist/components/index.js +25 -24
- package/dist/components/index.js.map +1 -1
- package/dist/formik/ActionBlock.js +1 -1
- package/dist/formik/BlockNavigation.js +1 -1
- package/dist/formik/Button.js +1 -1
- package/dist/formik/Checkbox.js +4 -4
- package/dist/formik/Input.js +4 -4
- package/dist/formik/MultiEmailInput.js +4 -4
- package/dist/formik/RadioGroup.js +3 -3
- package/dist/formik/Select.js +5 -4
- package/dist/formik/Select.js.map +1 -1
- package/dist/formik/Slider.js +3 -3
- package/dist/formik/Switch.js +4 -4
- package/dist/formik/Textarea.js +4 -4
- package/dist/formik/TreeSelect.js +4 -4
- package/dist/formik/index.js +11 -10
- package/dist/formik/index.js.map +1 -1
- package/dist/hyphenize-BU4K8zjb.js +6 -0
- package/dist/hyphenize-BU4K8zjb.js.map +1 -0
- package/dist/index.js +25 -24
- package/dist/index.js.map +1 -1
- package/dist/primitives/Button.js +2 -0
- package/dist/primitives/Button.js.map +1 -1
- package/dist/primitives/Dialog.js +1 -0
- package/dist/primitives/Dialog.js.map +1 -1
- package/dist/primitives/Field.js +3 -3
- package/dist/primitives/Sheet.js +1 -0
- package/dist/primitives/Sheet.js.map +1 -1
- package/dist/primitives/index.js +3 -3
- package/package.json +1 -1
- package/dist/Avatar-DxRDQDjh.js.map +0 -1
- package/dist/Badge-DC6zxOwS.js.map +0 -1
- package/dist/Checkbox-m4rEnxUz.js.map +0 -1
- package/dist/DataTable-BNMYEa_7.js.map +0 -1
- package/dist/Empty-Bfido_mq.js.map +0 -1
- package/dist/MultiEmailInput-Du1964Ka.js.map +0 -1
- package/dist/Select-SvphlEXA.js.map +0 -1
- package/dist/Switch-D_Xt6QgL.js.map +0 -1
- package/dist/Tabs-BCUdAnva.js.map +0 -1
- package/dist/TreeSelect-Ct7qDBad.js.map +0 -1
- package/dist/cjs/Avatar-DWuHnGh4.js.map +0 -1
- package/dist/cjs/Badge-Dz_Kb49L.js.map +0 -1
- package/dist/cjs/Checkbox-CymHP7QE.js.map +0 -1
- package/dist/cjs/DataTable-CRDwhMUB.js.map +0 -1
- package/dist/cjs/Empty-aQaWK0p4.js.map +0 -1
- package/dist/cjs/Kbd-BvC3VSNb.js.map +0 -1
- package/dist/cjs/MultiEmailInput-KmN2BSaX.js.map +0 -1
- package/dist/cjs/Select-YtJKCZeT.js.map +0 -1
- package/dist/cjs/Switch-DrSFyxis.js.map +0 -1
- package/dist/cjs/Tabs-COMRjTVU.js.map +0 -1
- package/dist/cjs/TreeSelect-Ck0takdS.js.map +0 -1
|
@@ -138,7 +138,7 @@ const Textarea = React.forwardRef(
|
|
|
138
138
|
}
|
|
139
139
|
) : textareaElement;
|
|
140
140
|
if (!hasField) {
|
|
141
|
-
return /* @__PURE__ */ jsxRuntime.jsx("div", { className: utils.cn(className), children: textareaWithAffixes });
|
|
141
|
+
return /* @__PURE__ */ jsxRuntime.jsx("div", { className: utils.cn(className), "data-testid": "nui-textarea-wrapper", children: textareaWithAffixes });
|
|
142
142
|
}
|
|
143
143
|
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
144
144
|
primitives_Field.Field,
|
|
@@ -146,6 +146,7 @@ const Textarea = React.forwardRef(
|
|
|
146
146
|
"data-disabled": disabled || void 0,
|
|
147
147
|
"data-invalid": !!error || void 0,
|
|
148
148
|
className,
|
|
149
|
+
"data-testid": "nui-textarea-wrapper",
|
|
149
150
|
children: [
|
|
150
151
|
(label || isCharacterLimitVisible) && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-between", children: [
|
|
151
152
|
label && /* @__PURE__ */ jsxRuntime.jsxs(primitives_Field.FieldLabel, { htmlFor: id, ...labelProps, children: [
|
|
@@ -169,7 +170,7 @@ const Textarea = React.forwardRef(
|
|
|
169
170
|
] }),
|
|
170
171
|
/* @__PURE__ */ jsxRuntime.jsxs(primitives_Field.FieldContent, { children: [
|
|
171
172
|
textareaWithAffixes,
|
|
172
|
-
!!error && /* @__PURE__ */ jsxRuntime.jsx(primitives_Field.FieldError, { id: errorId, children: error }),
|
|
173
|
+
!!error && /* @__PURE__ */ jsxRuntime.jsx(primitives_Field.FieldError, { "data-testid": "input-error", id: errorId, children: error }),
|
|
173
174
|
helpText && /* @__PURE__ */ jsxRuntime.jsx(primitives_Field.FieldDescription, { id: helpTextId, children: helpText })
|
|
174
175
|
] })
|
|
175
176
|
]
|
|
@@ -180,4 +181,4 @@ const Textarea = React.forwardRef(
|
|
|
180
181
|
Textarea.displayName = "Textarea";
|
|
181
182
|
|
|
182
183
|
exports.Textarea = Textarea;
|
|
183
|
-
//# sourceMappingURL=Textarea-
|
|
184
|
+
//# sourceMappingURL=Textarea-Cw7Uea82.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Textarea-yWv-66yX.js","sources":["../../src/components/Textarea/constants.ts","../../src/components/Textarea/utils.ts","../../src/components/Textarea/Textarea.tsx"],"sourcesContent":["type TextareaSize = \"small\" | \"medium\" | \"large\";\n\nconst SIZE_ROWS: Record<TextareaSize, number> = {\n small: 1,\n medium: 3,\n large: 4,\n};\n\nconst SIZE_MIN_HEIGHT: Record<TextareaSize, string> = {\n small: \"min-h-8\",\n medium: \"min-h-20\",\n large: \"min-h-28\",\n};\n\nexport { SIZE_ROWS, SIZE_MIN_HEIGHT };\nexport type { TextareaSize };\n","function getTrimmedValue(\n value: string | number,\n disableTrimOnBlur: boolean\n): string | number {\n if (disableTrimOnBlur || typeof value !== \"string\") return value;\n return value.trim();\n}\n\nexport { getTrimmedValue };\n","import React, { forwardRef, useId, useState } from \"react\";\n\nimport { cn } from \"src/shadcn/lib/utils\";\nimport {\n Field,\n FieldLabel,\n FieldContent,\n FieldDescription,\n FieldError,\n} from \"src/primitives/Field\";\nimport { Textarea as PrimitiveTextarea } from \"src/primitives/Textarea\";\n\nimport { SIZE_ROWS, SIZE_MIN_HEIGHT } from \"./constants\";\nimport { getTrimmedValue } from \"./utils\";\n\nimport type { TextareaSize } from \"./constants\";\n\ntype TextareaResize = \"vertical\" | \"none\";\n\ntype PrimitiveTextareaProps = React.ComponentProps<typeof PrimitiveTextarea>;\n\nexport interface TextareaProps extends Omit<\n PrimitiveTextareaProps,\n \"size\" | \"children\" | \"prefix\" | \"value\"\n> {\n /** Controlled value. */\n value?: string | number;\n /** Size of the textarea. Controls default rows: small=1, medium=3, large=4. */\n size?: TextareaSize;\n /** Resize behavior. */\n resize?: TextareaResize;\n /** Label displayed above the textarea. */\n label?: string;\n /** Error message displayed below the textarea. */\n error?: string;\n /** Help text displayed below the textarea. Accepts string or ReactNode. */\n helpText?: React.ReactNode;\n /** Maximum character limit. Counter visible at 85% capacity. */\n maxLength?: number;\n /** Allow typing past maxLength, show error styling on count. */\n unlimitedChars?: boolean;\n /** Prevent trimming whitespace on blur. */\n disableTrimOnBlur?: boolean;\n /** Content to display before the textarea. */\n prefix?: React.ReactNode;\n /** Content to display after the textarea. */\n suffix?: React.ReactNode;\n /** Render the textarea without borders. */\n nakedTextarea?: boolean;\n /** Props forwarded to the Label element. */\n labelProps?: React.ComponentProps<typeof FieldLabel>;\n /** Additional class name for the outermost wrapper. */\n className?: string;\n}\n\nconst Textarea = forwardRef<HTMLTextAreaElement, TextareaProps>(\n (\n {\n size = \"medium\",\n resize = \"vertical\",\n label = \"\",\n error = \"\",\n helpText = \"\",\n disabled = false,\n required = false,\n maxLength,\n unlimitedChars = false,\n disableTrimOnBlur = false,\n prefix,\n suffix,\n nakedTextarea = false,\n labelProps,\n className = \"\",\n rows: rowsProp,\n onBlur,\n onChange,\n value: controlledValue,\n ...otherProps\n },\n ref\n ) => {\n const generatedId = useId();\n const id = otherProps.id ?? generatedId;\n const errorId = `error_${id}`;\n const helpTextId = `helpText_${id}`;\n\n // Controlled / uncontrolled value tracking\n const [valueInternal, setValueInternal] = useState(controlledValue ?? \"\");\n const isControlled = controlledValue !== undefined;\n\n const value = isControlled ? controlledValue : valueInternal;\n const valueLength = value?.toString().length || 0;\n\n const isMaxLengthPresent = !!maxLength || maxLength === 0;\n const isCharacterLimitVisible =\n isMaxLengthPresent && valueLength >= maxLength! * 0.85;\n const maxLengthError = unlimitedChars && valueLength > maxLength!;\n\n const rows = rowsProp ?? SIZE_ROWS[size];\n\n // --- Handlers ---\n\n const handleChange = (e: React.ChangeEvent<HTMLTextAreaElement>) => {\n if (!isControlled) {\n setValueInternal(e.target.value);\n }\n onChange?.(e);\n };\n\n const handleBlur = (e: React.FocusEvent<HTMLTextAreaElement>) => {\n const trimmedValue = getTrimmedValue(value ?? \"\", disableTrimOnBlur);\n\n if (trimmedValue !== value) {\n e.target.value = trimmedValue.toString();\n handleChange(e as unknown as React.ChangeEvent<HTMLTextAreaElement>);\n }\n\n onBlur?.(e);\n };\n\n // --- aria-describedby ---\n\n const ariaDescribedBy =\n [error ? errorId : null, helpText ? helpTextId : null]\n .filter(Boolean)\n .join(\" \") || undefined;\n\n // --- Textarea element ---\n\n const hasField = !!(label || error || helpText);\n\n const textareaElement = (\n <PrimitiveTextarea\n ref={ref}\n id={id}\n rows={rows}\n disabled={disabled}\n required={required}\n aria-invalid={!!error || undefined}\n aria-describedby={ariaDescribedBy}\n className={cn(\n // Override shadcn's field-sizing-content and min-h-16 so rows works\n \"!field-sizing-normal\",\n SIZE_MIN_HEIGHT[size],\n resize === \"none\" && \"resize-none\",\n resize === \"vertical\" && \"resize-y\",\n nakedTextarea &&\n \"border-transparent shadow-none px-0 py-0 focus-visible:border-transparent focus-visible:ring-0\",\n !!error && \"border-destructive ring-destructive/20 ring-3\"\n )}\n value={value}\n onBlur={handleBlur}\n onChange={handleChange}\n {...(isMaxLengthPresent && !unlimitedChars ? { maxLength } : {})}\n {...otherProps}\n />\n );\n\n const hasPrefixSuffix = !!(prefix || suffix);\n\n const textareaWithAffixes = hasPrefixSuffix ? (\n <div\n className={cn(\n \"flex items-start gap-2 rounded-lg border border-input px-2.5 py-2 focus-within:border-ring focus-within:ring-3 focus-within:ring-ring/50\",\n !!error && \"border-destructive ring-destructive/20 ring-3\",\n nakedTextarea && \"border-transparent shadow-none\"\n )}\n >\n {prefix && (\n <div className=\"shrink-0 pt-0.5 text-muted-foreground\">{prefix}</div>\n )}\n <PrimitiveTextarea\n ref={ref}\n id={id}\n rows={rows}\n disabled={disabled}\n required={required}\n aria-invalid={!!error || undefined}\n aria-describedby={ariaDescribedBy}\n className={cn(\n \"!field-sizing-normal border-0 p-0 shadow-none focus-visible:border-0 focus-visible:ring-0\",\n SIZE_MIN_HEIGHT[size],\n resize === \"none\" && \"resize-none\",\n resize === \"vertical\" && \"resize-y\"\n )}\n value={value}\n onBlur={handleBlur}\n onChange={handleChange}\n {...(isMaxLengthPresent && !unlimitedChars ? { maxLength } : {})}\n {...otherProps}\n />\n {suffix && (\n <div className=\"shrink-0 pt-0.5 text-muted-foreground\">{suffix}</div>\n )}\n </div>\n ) : (\n textareaElement\n );\n\n if (!hasField) {\n return <div className={cn(className)}>{textareaWithAffixes}</div>;\n }\n\n return (\n <Field\n data-disabled={disabled || undefined}\n data-invalid={!!error || undefined}\n className={className}\n >\n {(label || isCharacterLimitVisible) && (\n <div className=\"flex items-center justify-between\">\n {label && (\n <FieldLabel htmlFor={id} {...labelProps}>\n {label}\n {required && (\n <span aria-hidden=\"true\" className=\"text-destructive\">\n *\n </span>\n )}\n </FieldLabel>\n )}\n {isCharacterLimitVisible && (\n <span\n className={cn(\n \"text-xs tabular-nums\",\n maxLengthError ? \"text-destructive\" : \"text-muted-foreground\"\n )}\n >\n {valueLength}/{maxLength}\n </span>\n )}\n </div>\n )}\n <FieldContent>\n {textareaWithAffixes}\n {!!error && <FieldError id={errorId}>{error}</FieldError>}\n {helpText && (\n <FieldDescription id={helpTextId}>{helpText}</FieldDescription>\n )}\n </FieldContent>\n </Field>\n );\n }\n);\n\nTextarea.displayName = \"Textarea\";\n\nexport { Textarea };\n"],"names":["forwardRef","useId","useState","jsx","PrimitiveTextarea","cn","jsxs","Field","FieldLabel","FieldContent","FieldError","FieldDescription"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Textarea-Cw7Uea82.js","sources":["../../src/components/Textarea/constants.ts","../../src/components/Textarea/utils.ts","../../src/components/Textarea/Textarea.tsx"],"sourcesContent":["type TextareaSize = \"small\" | \"medium\" | \"large\";\n\nconst SIZE_ROWS: Record<TextareaSize, number> = {\n small: 1,\n medium: 3,\n large: 4,\n};\n\nconst SIZE_MIN_HEIGHT: Record<TextareaSize, string> = {\n small: \"min-h-8\",\n medium: \"min-h-20\",\n large: \"min-h-28\",\n};\n\nexport { SIZE_ROWS, SIZE_MIN_HEIGHT };\nexport type { TextareaSize };\n","function getTrimmedValue(\n value: string | number,\n disableTrimOnBlur: boolean\n): string | number {\n if (disableTrimOnBlur || typeof value !== \"string\") return value;\n return value.trim();\n}\n\nexport { getTrimmedValue };\n","import React, { forwardRef, useId, useState } from \"react\";\n\nimport { cn } from \"src/shadcn/lib/utils\";\nimport {\n Field,\n FieldLabel,\n FieldContent,\n FieldDescription,\n FieldError,\n} from \"src/primitives/Field\";\nimport { Textarea as PrimitiveTextarea } from \"src/primitives/Textarea\";\n\nimport { SIZE_ROWS, SIZE_MIN_HEIGHT } from \"./constants\";\nimport { getTrimmedValue } from \"./utils\";\n\nimport type { TextareaSize } from \"./constants\";\n\ntype TextareaResize = \"vertical\" | \"none\";\n\ntype PrimitiveTextareaProps = React.ComponentProps<typeof PrimitiveTextarea>;\n\nexport interface TextareaProps extends Omit<\n PrimitiveTextareaProps,\n \"size\" | \"children\" | \"prefix\" | \"value\"\n> {\n /** Controlled value. */\n value?: string | number;\n /** Size of the textarea. Controls default rows: small=1, medium=3, large=4. */\n size?: TextareaSize;\n /** Resize behavior. */\n resize?: TextareaResize;\n /** Label displayed above the textarea. */\n label?: string;\n /** Error message displayed below the textarea. */\n error?: string;\n /** Help text displayed below the textarea. Accepts string or ReactNode. */\n helpText?: React.ReactNode;\n /** Maximum character limit. Counter visible at 85% capacity. */\n maxLength?: number;\n /** Allow typing past maxLength, show error styling on count. */\n unlimitedChars?: boolean;\n /** Prevent trimming whitespace on blur. */\n disableTrimOnBlur?: boolean;\n /** Content to display before the textarea. */\n prefix?: React.ReactNode;\n /** Content to display after the textarea. */\n suffix?: React.ReactNode;\n /** Render the textarea without borders. */\n nakedTextarea?: boolean;\n /** Props forwarded to the Label element. */\n labelProps?: React.ComponentProps<typeof FieldLabel>;\n /** Additional class name for the outermost wrapper. */\n className?: string;\n}\n\nconst Textarea = forwardRef<HTMLTextAreaElement, TextareaProps>(\n (\n {\n size = \"medium\",\n resize = \"vertical\",\n label = \"\",\n error = \"\",\n helpText = \"\",\n disabled = false,\n required = false,\n maxLength,\n unlimitedChars = false,\n disableTrimOnBlur = false,\n prefix,\n suffix,\n nakedTextarea = false,\n labelProps,\n className = \"\",\n rows: rowsProp,\n onBlur,\n onChange,\n value: controlledValue,\n ...otherProps\n },\n ref\n ) => {\n const generatedId = useId();\n const id = otherProps.id ?? generatedId;\n const errorId = `error_${id}`;\n const helpTextId = `helpText_${id}`;\n\n // Controlled / uncontrolled value tracking\n const [valueInternal, setValueInternal] = useState(controlledValue ?? \"\");\n const isControlled = controlledValue !== undefined;\n\n const value = isControlled ? controlledValue : valueInternal;\n const valueLength = value?.toString().length || 0;\n\n const isMaxLengthPresent = !!maxLength || maxLength === 0;\n const isCharacterLimitVisible =\n isMaxLengthPresent && valueLength >= maxLength! * 0.85;\n const maxLengthError = unlimitedChars && valueLength > maxLength!;\n\n const rows = rowsProp ?? SIZE_ROWS[size];\n\n // --- Handlers ---\n\n const handleChange = (e: React.ChangeEvent<HTMLTextAreaElement>) => {\n if (!isControlled) {\n setValueInternal(e.target.value);\n }\n onChange?.(e);\n };\n\n const handleBlur = (e: React.FocusEvent<HTMLTextAreaElement>) => {\n const trimmedValue = getTrimmedValue(value ?? \"\", disableTrimOnBlur);\n\n if (trimmedValue !== value) {\n e.target.value = trimmedValue.toString();\n handleChange(e as unknown as React.ChangeEvent<HTMLTextAreaElement>);\n }\n\n onBlur?.(e);\n };\n\n // --- aria-describedby ---\n\n const ariaDescribedBy =\n [error ? errorId : null, helpText ? helpTextId : null]\n .filter(Boolean)\n .join(\" \") || undefined;\n\n // --- Textarea element ---\n\n const hasField = !!(label || error || helpText);\n\n const textareaElement = (\n <PrimitiveTextarea\n ref={ref}\n id={id}\n rows={rows}\n disabled={disabled}\n required={required}\n aria-invalid={!!error || undefined}\n aria-describedby={ariaDescribedBy}\n className={cn(\n // Override shadcn's field-sizing-content and min-h-16 so rows works\n \"!field-sizing-normal\",\n SIZE_MIN_HEIGHT[size],\n resize === \"none\" && \"resize-none\",\n resize === \"vertical\" && \"resize-y\",\n nakedTextarea &&\n \"border-transparent shadow-none px-0 py-0 focus-visible:border-transparent focus-visible:ring-0\",\n !!error && \"border-destructive ring-destructive/20 ring-3\"\n )}\n value={value}\n onBlur={handleBlur}\n onChange={handleChange}\n {...(isMaxLengthPresent && !unlimitedChars ? { maxLength } : {})}\n {...otherProps}\n />\n );\n\n const hasPrefixSuffix = !!(prefix || suffix);\n\n const textareaWithAffixes = hasPrefixSuffix ? (\n <div\n className={cn(\n \"flex items-start gap-2 rounded-lg border border-input px-2.5 py-2 focus-within:border-ring focus-within:ring-3 focus-within:ring-ring/50\",\n !!error && \"border-destructive ring-destructive/20 ring-3\",\n nakedTextarea && \"border-transparent shadow-none\"\n )}\n >\n {prefix && (\n <div className=\"shrink-0 pt-0.5 text-muted-foreground\">{prefix}</div>\n )}\n <PrimitiveTextarea\n ref={ref}\n id={id}\n rows={rows}\n disabled={disabled}\n required={required}\n aria-invalid={!!error || undefined}\n aria-describedby={ariaDescribedBy}\n className={cn(\n \"!field-sizing-normal border-0 p-0 shadow-none focus-visible:border-0 focus-visible:ring-0\",\n SIZE_MIN_HEIGHT[size],\n resize === \"none\" && \"resize-none\",\n resize === \"vertical\" && \"resize-y\"\n )}\n value={value}\n onBlur={handleBlur}\n onChange={handleChange}\n {...(isMaxLengthPresent && !unlimitedChars ? { maxLength } : {})}\n {...otherProps}\n />\n {suffix && (\n <div className=\"shrink-0 pt-0.5 text-muted-foreground\">{suffix}</div>\n )}\n </div>\n ) : (\n textareaElement\n );\n\n if (!hasField) {\n return (\n <div className={cn(className)} data-testid=\"nui-textarea-wrapper\">\n {textareaWithAffixes}\n </div>\n );\n }\n\n return (\n <Field\n data-disabled={disabled || undefined}\n data-invalid={!!error || undefined}\n className={className}\n data-testid=\"nui-textarea-wrapper\"\n >\n {(label || isCharacterLimitVisible) && (\n <div className=\"flex items-center justify-between\">\n {label && (\n <FieldLabel htmlFor={id} {...labelProps}>\n {label}\n {required && (\n <span aria-hidden=\"true\" className=\"text-destructive\">\n *\n </span>\n )}\n </FieldLabel>\n )}\n {isCharacterLimitVisible && (\n <span\n className={cn(\n \"text-xs tabular-nums\",\n maxLengthError ? \"text-destructive\" : \"text-muted-foreground\"\n )}\n >\n {valueLength}/{maxLength}\n </span>\n )}\n </div>\n )}\n <FieldContent>\n {textareaWithAffixes}\n {!!error && (\n <FieldError data-testid=\"input-error\" id={errorId}>\n {error}\n </FieldError>\n )}\n {helpText && (\n <FieldDescription id={helpTextId}>{helpText}</FieldDescription>\n )}\n </FieldContent>\n </Field>\n );\n }\n);\n\nTextarea.displayName = \"Textarea\";\n\nexport { Textarea };\n"],"names":["forwardRef","useId","useState","jsx","PrimitiveTextarea","cn","jsxs","Field","FieldLabel","FieldContent","FieldError","FieldDescription"],"mappings":"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"}
|
|
@@ -80,6 +80,7 @@ const Tooltip = ({
|
|
|
80
80
|
align,
|
|
81
81
|
className,
|
|
82
82
|
onPointerDownOutside: interactive ? (e) => e.preventDefault() : void 0,
|
|
83
|
+
"data-testid": "tooltip-box",
|
|
83
84
|
...contentProps,
|
|
84
85
|
children: content
|
|
85
86
|
}
|
|
@@ -91,4 +92,4 @@ const Tooltip = ({
|
|
|
91
92
|
Tooltip.displayName = "Tooltip";
|
|
92
93
|
|
|
93
94
|
exports.Tooltip = Tooltip;
|
|
94
|
-
//# sourceMappingURL=Tooltip-
|
|
95
|
+
//# sourceMappingURL=Tooltip-B6uv_2Jz.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Tooltip-
|
|
1
|
+
{"version":3,"file":"Tooltip-B6uv_2Jz.js","sources":["../../src/components/Tooltip/constants.ts","../../src/components/Tooltip/Tooltip.tsx"],"sourcesContent":["export const SIDE_MAP: Record<string, \"top\" | \"right\" | \"bottom\" | \"left\"> = {\n top: \"top\",\n bottom: \"bottom\",\n left: \"left\",\n right: \"right\",\n \"top-start\": \"top\",\n \"top-end\": \"top\",\n \"bottom-start\": \"bottom\",\n \"bottom-end\": \"bottom\",\n \"left-start\": \"left\",\n \"left-end\": \"left\",\n \"right-start\": \"right\",\n \"right-end\": \"right\",\n auto: \"top\",\n};\n\nexport const ALIGN_MAP: Record<string, \"start\" | \"center\" | \"end\"> = {\n top: \"center\",\n bottom: \"center\",\n left: \"center\",\n right: \"center\",\n \"top-start\": \"start\",\n \"top-end\": \"end\",\n \"bottom-start\": \"start\",\n \"bottom-end\": \"end\",\n \"left-start\": \"start\",\n \"left-end\": \"end\",\n \"right-start\": \"start\",\n \"right-end\": \"end\",\n auto: \"center\",\n};\n","import React, { useEffect, useState, type ReactNode } from \"react\";\n\nimport {\n Tooltip as PrimitiveTooltip,\n TooltipContent,\n TooltipProvider,\n TooltipTrigger,\n} from \"src/primitives/Tooltip\";\n\ntype TooltipPosition =\n | \"top\"\n | \"bottom\"\n | \"left\"\n | \"right\"\n | \"top-start\"\n | \"top-end\"\n | \"bottom-start\"\n | \"bottom-end\"\n | \"left-start\"\n | \"left-end\"\n | \"right-start\"\n | \"right-end\"\n | \"auto\";\n\n/** Radix Tooltip.Content props we forward via ...otherProps. */\ntype TooltipContentProps = React.ComponentProps<typeof TooltipContent>;\n\nexport interface TooltipProps extends Omit<\n TooltipContentProps,\n \"children\" | \"className\" | \"side\" | \"align\" | \"content\"\n> {\n /** Content rendered inside the tooltip popup. */\n content?: ReactNode;\n /** The trigger element. */\n children?: ReactNode;\n /** Disable the tooltip. */\n disabled?: boolean;\n /** Placement of the tooltip relative to the trigger. */\n position?: TooltipPosition;\n /** Whether the tooltip stays open when hovered over. */\n interactive?: boolean;\n /** Auto-hide after N milliseconds. Use -1 to disable. */\n hideAfter?: number;\n /** Additional CSS class names for the tooltip content. */\n className?: string;\n /** Delay in ms before the tooltip opens (forwarded to TooltipProvider). */\n delayDuration?: number;\n /** Radix Tooltip `defaultOpen` prop. */\n defaultOpen?: boolean;\n}\n\nimport { SIDE_MAP, ALIGN_MAP } from \"./constants\";\n\nconst Tooltip = ({\n content,\n children,\n disabled = false,\n position = \"auto\",\n interactive = false,\n hideAfter = -1,\n className,\n delayDuration = 0,\n defaultOpen,\n // Radix TooltipContent props forwarded\n ...contentProps\n}: TooltipProps) => {\n const [open, setOpen] = useState(false);\n\n // Auto-hide after hideAfter ms\n useEffect(() => {\n if (!open || hideAfter <= 0) return;\n const timer = setTimeout(() => setOpen(false), hideAfter);\n return () => clearTimeout(timer);\n }, [open, hideAfter]);\n\n if (disabled || !content) {\n return <>{children}</>;\n }\n\n const side = SIDE_MAP[position] ?? \"top\";\n const align = ALIGN_MAP[position] ?? \"center\";\n\n // Wrap non-element children in a span so TooltipTrigger can attach\n const trigger = React.isValidElement(children) ? (\n children\n ) : (\n <span>{children}</span>\n );\n\n return (\n <TooltipProvider delayDuration={delayDuration}>\n <PrimitiveTooltip\n open={open}\n onOpenChange={setOpen}\n defaultOpen={defaultOpen}\n disableHoverableContent={!interactive}\n >\n <TooltipTrigger asChild>{trigger}</TooltipTrigger>\n <TooltipContent\n side={side}\n align={align}\n className={className}\n onPointerDownOutside={\n interactive ? e => e.preventDefault() : undefined\n }\n data-testid=\"tooltip-box\"\n {...contentProps}\n >\n {content}\n </TooltipContent>\n </PrimitiveTooltip>\n </TooltipProvider>\n );\n};\n\nTooltip.displayName = \"Tooltip\";\n\nexport { Tooltip };\n"],"names":["useState","useEffect","React","jsx","TooltipProvider","jsxs","PrimitiveTooltip","TooltipTrigger","TooltipContent"],"mappings":"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"}
|
|
@@ -275,6 +275,7 @@ const TreeSelect = React.forwardRef(
|
|
|
275
275
|
isDisabled,
|
|
276
276
|
required,
|
|
277
277
|
className,
|
|
278
|
+
testIdPrefix: props.testIdPrefix ?? "tree",
|
|
278
279
|
children: /* @__PURE__ */ jsxRuntime.jsxs(primitives_Popover.Popover, { open: isOpen, onOpenChange: handleOpenChange, children: [
|
|
279
280
|
/* @__PURE__ */ jsxRuntime.jsx(primitives_Popover.PopoverTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
280
281
|
TreeSelectTrigger,
|
|
@@ -337,4 +338,4 @@ const TreeSelect = React.forwardRef(
|
|
|
337
338
|
TreeSelect.displayName = "TreeSelect";
|
|
338
339
|
|
|
339
340
|
exports.TreeSelect = TreeSelect;
|
|
340
|
-
//# sourceMappingURL=TreeSelect-
|
|
341
|
+
//# sourceMappingURL=TreeSelect-C9BSJt1d.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TreeSelect-C9BSJt1d.js","sources":["../../src/components/TreeSelect/utils/pruneTree.ts","../../src/components/TreeSelect/utils/resolveFieldNames.ts","../../src/components/TreeSelect/hooks/useTreeSelectValue.ts","../../src/components/TreeSelect/hooks/useTreeSelectState.ts","../../src/components/TreeSelect/constants.ts","../../src/components/TreeSelect/TreeSelectTrigger.tsx","../../src/components/TreeSelect/TreeSelect.tsx"],"sourcesContent":["import type { TreeNodeData } from \"../../Tree/types\";\n\nexport const pruneTree = (\n nodes: TreeNodeData[],\n searchTerm: string\n): TreeNodeData[] => {\n if (!searchTerm.trim()) return nodes;\n\n const lower = searchTerm.toLowerCase();\n\n const prune = (items: TreeNodeData[]): TreeNodeData[] =>\n items.reduce<TreeNodeData[]>((acc, node) => {\n const titleStr = typeof node.title === \"string\" ? node.title : \"\";\n const nodeMatches = titleStr.toLowerCase().includes(lower);\n\n if (nodeMatches) {\n acc.push(node);\n } else {\n const prunedChildren = node.children ? prune(node.children) : [];\n if (prunedChildren.length > 0) {\n acc.push({ ...node, children: prunedChildren });\n }\n }\n\n return acc;\n }, []);\n\n return prune(nodes);\n};\n","import type { ReactNode } from \"react\";\nimport type { TreeNodeData } from \"../../Tree/types\";\n\ninterface FieldNameMapping {\n label?: string;\n value?: string;\n}\n\nexport const resolveFieldNames = (\n nodes: TreeNodeData[],\n fieldNames: FieldNameMapping\n): TreeNodeData[] => {\n const labelKey = fieldNames.label ?? \"title\";\n const valueKey = fieldNames.value ?? \"key\";\n\n const remap = (items: TreeNodeData[]): TreeNodeData[] =>\n items.map(item => {\n const record = item as unknown as Record<string, unknown>;\n\n return {\n key: String(record[valueKey] ?? \"\"),\n title: record[labelKey] as ReactNode,\n disabled: record.disabled as boolean | undefined,\n children: Array.isArray(item.children)\n ? remap(item.children)\n : undefined,\n };\n });\n\n return remap(nodes);\n};\n","import { useCallback, useId, useMemo, useState } from \"react\";\nimport { findNode } from \"../../Tree/utils/adapter\";\nimport type { TreeSelectProps } from \"../types\";\nimport { resolveFieldNames } from \"../utils/resolveFieldNames\";\n\nexport function useTreeSelectValue(props: TreeSelectProps) {\n const {\n value: valueProp,\n defaultValue,\n onChange,\n treeData: rawTreeData,\n fieldNames,\n isClearable = false,\n isDisabled = false,\n size = \"medium\",\n label = \"\",\n error = \"\",\n helpText = \"\",\n required = false,\n } = props;\n\n const id = useId();\n const errorId = `error_${id}`;\n const helpTextId = `helpText_${id}`;\n\n const treeData = useMemo(() => {\n if (!fieldNames) return rawTreeData;\n\n return resolveFieldNames(rawTreeData, fieldNames);\n }, [rawTreeData, fieldNames?.label, fieldNames?.value]);\n\n const isControlled = valueProp !== undefined;\n const [internalValue, setInternalValue] = useState(defaultValue ?? \"\");\n const currentValue = isControlled ? (valueProp ?? \"\") : internalValue;\n\n const applyValue = useCallback(\n (next: string) => {\n if (!isControlled) setInternalValue(next);\n onChange?.(next);\n },\n [isControlled, onChange]\n );\n\n const selectedLabel = useMemo(() => {\n if (!currentValue) return \"\";\n const node = findNode(currentValue, treeData);\n if (!node) return currentValue;\n\n return typeof node.title === \"string\" ? node.title : \"\";\n }, [currentValue, treeData]);\n\n const handleClear = useCallback(\n (e: React.MouseEvent) => {\n e.stopPropagation();\n applyValue(\"\");\n },\n [applyValue]\n );\n\n const showClearButton = isClearable && !!currentValue && !isDisabled;\n\n return {\n id,\n errorId,\n helpTextId,\n label,\n error,\n helpText,\n required,\n isDisabled,\n size,\n treeData,\n currentValue,\n selectedLabel,\n applyValue,\n handleClear,\n showClearButton,\n };\n}\n","import { useCallback, useMemo, useRef, useState } from \"react\";\nimport type { TreeNodeData } from \"../../Tree/types\";\nimport { walkTree } from \"../../Tree/utils/adapter\";\nimport type { TreeSelectProps } from \"../types\";\nimport { pruneTree } from \"../utils/pruneTree\";\nimport { useTreeSelectValue } from \"./useTreeSelectValue\";\n\nexport function useTreeSelectState(props: TreeSelectProps) {\n const { isSearchable = false, defaultExpandedKeys } = props;\n const defaultExpandedKeysRef = useRef(defaultExpandedKeys);\n defaultExpandedKeysRef.current = defaultExpandedKeys;\n const value = useTreeSelectValue(props);\n\n const [isOpen, setIsOpen] = useState(false);\n const [searchTerm, setSearchTerm] = useState(\"\");\n const [expandedKeys, setExpandedKeys] = useState<string[]>(\n defaultExpandedKeys ?? []\n );\n\n const prunedTreeData = useMemo(\n () =>\n searchTerm.trim()\n ? pruneTree(value.treeData, searchTerm)\n : value.treeData,\n [value.treeData, searchTerm]\n );\n\n const effectiveExpandedKeys = useMemo(() => {\n if (!searchTerm) return expandedKeys;\n\n const allKeys: string[] = [];\n walkTree(prunedTreeData, node => {\n if (node.children?.length) allKeys.push(node.key);\n });\n\n return allKeys;\n }, [searchTerm, prunedTreeData]);\n\n const handleSelect = useCallback(\n (keys: string[], info: { node: TreeNodeData }) => {\n if (value.isDisabled || info.node.disabled) return;\n value.applyValue(keys[0] ?? \"\");\n setIsOpen(false);\n setSearchTerm(\"\");\n },\n [value.applyValue, value.isDisabled]\n );\n\n const handleOpenChange = useCallback(\n (open: boolean) => {\n if (value.isDisabled) return;\n setIsOpen(open);\n if (!open) {\n setSearchTerm(\"\");\n setExpandedKeys(defaultExpandedKeysRef.current ?? []);\n }\n },\n [value.isDisabled]\n );\n\n const handleExpand = useCallback(\n (keys: string[]) => setExpandedKeys(keys),\n []\n );\n\n return {\n ...value,\n isSearchable,\n isOpen,\n handleOpenChange,\n searchTerm,\n setSearchTerm,\n prunedTreeData,\n effectiveExpandedKeys,\n handleSelect,\n handleExpand,\n };\n}\n","export const DROPDOWN_HEIGHT = 256;\n\nexport const SIZE_CONFIG: Record<\n \"small\" | \"medium\" | \"large\",\n { trigger: string; text: string }\n> = {\n small: {\n trigger: \"min-h-8 md:min-h-7 px-2 py-0.5\",\n text: \"text-base md:text-xs\",\n },\n medium: { trigger: \"min-h-8 px-2.5 py-1\", text: \"text-base md:text-sm\" },\n large: { trigger: \"min-h-10 px-2.5 py-1.5\", text: \"text-base md:text-sm\" },\n};\n","import { forwardRef, type ReactNode } from \"react\";\nimport { ChevronDown, X } from \"lucide-react\";\nimport { cn } from \"src/shadcn/lib/utils\";\nimport { SIZE_CONFIG } from \"./constants\";\n\ninterface TreeSelectTriggerProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n size: \"small\" | \"medium\" | \"large\";\n currentValue: string;\n selectedLabel: string;\n placeholder?: string;\n isDisabled: boolean;\n error: string;\n showClearButton: boolean;\n handleClear: (e: React.MouseEvent) => void;\n suffixIcon?: ReactNode;\n}\n\nexport const TreeSelectTrigger = forwardRef<\n HTMLButtonElement,\n TreeSelectTriggerProps\n>(\n (\n {\n size,\n currentValue,\n selectedLabel,\n placeholder,\n isDisabled,\n error,\n showClearButton,\n handleClear,\n suffixIcon,\n className,\n ...rest\n },\n ref\n ) => (\n <button\n ref={ref}\n type=\"button\"\n disabled={isDisabled}\n {...rest}\n className={cn(\n \"inline-flex w-full items-center gap-1 rounded-md border border-input bg-background outline-none\",\n \"hover:bg-accent focus:ring-1 focus:ring-ring\",\n \"disabled:pointer-events-none disabled:opacity-50\",\n error && \"border-destructive\",\n SIZE_CONFIG[size].trigger,\n SIZE_CONFIG[size].text,\n className\n )}\n >\n <span\n className={cn(\n \"flex-1 truncate text-left\",\n !currentValue && \"text-muted-foreground\"\n )}\n >\n {selectedLabel || placeholder || \"\"}\n </span>\n {showClearButton && (\n <span\n role=\"button\"\n tabIndex={-1}\n aria-label=\"Clear selection\"\n className=\"shrink-0 text-muted-foreground hover:text-foreground\"\n onClick={handleClear}\n >\n <X className=\"size-3.5\" />\n </span>\n )}\n {suffixIcon ?? <ChevronDown className=\"size-4 shrink-0 opacity-50\" />}\n </button>\n )\n);\n\nTreeSelectTrigger.displayName = \"TreeSelectTrigger\";\n","import { forwardRef } from \"react\";\nimport { cn } from \"src/shadcn/lib/utils\";\nimport {\n Popover,\n PopoverContent,\n PopoverTrigger,\n} from \"src/primitives/Popover\";\nimport { SelectFieldWrapper } from \"../Select/SelectFieldWrapper\";\nimport { Tree } from \"../Tree\";\nimport { useTreeSelectState } from \"./hooks/useTreeSelectState\";\nimport { TreeSelectTrigger } from \"./TreeSelectTrigger\";\nimport { SIZE_CONFIG, DROPDOWN_HEIGHT } from \"./constants\";\nimport type { TreeSelectProps } from \"./types\";\n\nconst TreeSelect = forwardRef<HTMLButtonElement, TreeSelectProps>(\n (props, ref) => {\n const {\n id,\n label,\n error,\n helpText,\n errorId,\n helpTextId,\n isDisabled,\n required,\n isOpen,\n handleOpenChange,\n currentValue,\n handleClear,\n selectedLabel,\n showClearButton,\n size,\n isSearchable,\n searchTerm,\n setSearchTerm,\n prunedTreeData,\n effectiveExpandedKeys,\n handleSelect,\n handleExpand,\n } = useTreeSelectState(props);\n const { suffixIcon, switcherIcon, autoExpandParent, className } = props;\n\n return (\n <SelectFieldWrapper\n id={id}\n label={label}\n error={error}\n helpText={helpText}\n errorId={errorId}\n helpTextId={helpTextId}\n isDisabled={isDisabled}\n required={required}\n className={className}\n testIdPrefix={props.testIdPrefix ?? \"tree\"}\n >\n <Popover open={isOpen} onOpenChange={handleOpenChange}>\n <PopoverTrigger asChild>\n <TreeSelectTrigger\n ref={ref}\n currentValue={currentValue}\n error={error}\n handleClear={handleClear}\n isDisabled={isDisabled}\n placeholder={props.placeholder}\n selectedLabel={selectedLabel}\n showClearButton={showClearButton}\n size={size}\n suffixIcon={suffixIcon}\n />\n </PopoverTrigger>\n <PopoverContent\n align=\"start\"\n className=\"w-[var(--radix-popover-trigger-width)] p-0\"\n onOpenAutoFocus={e => {\n if (isSearchable) e.preventDefault();\n }}\n >\n {isSearchable && (\n <div className=\"border-b border-border px-2 py-1.5\">\n <input\n autoFocus\n type=\"text\"\n className={cn(\n \"w-full bg-transparent outline-none placeholder:text-muted-foreground\",\n SIZE_CONFIG[size].text\n )}\n placeholder=\"Search...\"\n value={searchTerm}\n onChange={e => setSearchTerm(e.target.value)}\n />\n </div>\n )}\n {prunedTreeData.length > 0 ? (\n <div className=\"p-1\">\n <Tree\n autoExpandParent={autoExpandParent}\n expandedKeys={effectiveExpandedKeys}\n height={DROPDOWN_HEIGHT}\n switcherIcon={switcherIcon}\n treeData={prunedTreeData}\n onExpand={handleExpand}\n onSelect={handleSelect}\n />\n </div>\n ) : (\n <div className=\"py-6 text-center text-sm text-muted-foreground\">\n No results found.\n </div>\n )}\n </PopoverContent>\n </Popover>\n </SelectFieldWrapper>\n );\n }\n);\n\nTreeSelect.displayName = \"TreeSelect\";\n\nexport { TreeSelect };\n"],"names":["useId","useMemo","useState","useCallback","findNode","useRef","walkTree","forwardRef","jsxs","cn","jsx","X","ChevronDown","SelectFieldWrapper","Popover","PopoverTrigger","PopoverContent","Tree"],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var Alert = require('../Alert-
|
|
3
|
+
var Alert = require('../Alert-BTheamzj.js');
|
|
4
4
|
require('react/jsx-runtime');
|
|
5
5
|
require('react');
|
|
6
6
|
require('react-i18next');
|
|
@@ -20,7 +20,7 @@ require('react-dom');
|
|
|
20
20
|
require('../index-DnKJmaCq.js');
|
|
21
21
|
require('../index-BrpkRQoS.js');
|
|
22
22
|
require('../with-selector-DeKHbQY7.js');
|
|
23
|
-
require('../Button-
|
|
23
|
+
require('../Button-DJSysuyG.js');
|
|
24
24
|
require('react-router-dom');
|
|
25
25
|
require('../renderIcon-BRrpZu9a.js');
|
|
26
26
|
require('../primitives/Button.js');
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var Checkbox = require('../Checkbox-
|
|
3
|
+
var Checkbox = require('../Checkbox-7lX2aMKA.js');
|
|
4
4
|
require('react/jsx-runtime');
|
|
5
5
|
require('react');
|
|
6
6
|
require('../utils-BhM0B89p.js');
|
|
@@ -18,7 +18,7 @@ require('../index-DcCSSgb7.js');
|
|
|
18
18
|
require('../index-DMbj7vXd.js');
|
|
19
19
|
require('react-dom');
|
|
20
20
|
require('../primitives/Field.js');
|
|
21
|
-
require('../HelpIcon-
|
|
21
|
+
require('../HelpIcon-QpZY6Zmc.js');
|
|
22
22
|
require('../primitives/Tooltip.js');
|
|
23
23
|
require('../tooltip-hM8gc5L8.js');
|
|
24
24
|
require('../index-Bvu9MiFi.js');
|
|
@@ -30,12 +30,12 @@ require('../floating-ui.utils.dom-BGEmL7pd.js');
|
|
|
30
30
|
require('../index-Df-Ffa3s.js');
|
|
31
31
|
require('../index-CB9xFokC.js');
|
|
32
32
|
require('../renderIcon-BRrpZu9a.js');
|
|
33
|
-
require('../Popover-
|
|
33
|
+
require('../Popover-5BUgIW60.js');
|
|
34
34
|
require('../index-vioSzJOw.js');
|
|
35
35
|
require('../primitives/HoverCard.js');
|
|
36
36
|
require('../Typography-BW6xEk10.js');
|
|
37
37
|
require('../index-DuNgWCXZ.js');
|
|
38
|
-
require('../Button-
|
|
38
|
+
require('../Button-DJSysuyG.js');
|
|
39
39
|
require('react-router-dom');
|
|
40
40
|
require('../primitives/Button.js');
|
|
41
41
|
require('../button-CSBhDSDJ.js');
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var DataTable = require('../DataTable-
|
|
3
|
+
var DataTable = require('../DataTable-ChgPVrRB.js');
|
|
4
4
|
require('react/jsx-runtime');
|
|
5
5
|
require('react');
|
|
6
6
|
require('../primitives/Table.js');
|
|
@@ -43,12 +43,12 @@ require('../floating-ui.react-dom--alWUjS1.js');
|
|
|
43
43
|
require('../floating-ui.utils.dom-BGEmL7pd.js');
|
|
44
44
|
require('../index-Df-Ffa3s.js');
|
|
45
45
|
require('../index-DoVhdseB.js');
|
|
46
|
-
require('../Button-
|
|
46
|
+
require('../Button-DJSysuyG.js');
|
|
47
47
|
require('../renderIcon-BRrpZu9a.js');
|
|
48
48
|
require('../primitives/Tooltip.js');
|
|
49
49
|
require('../tooltip-hM8gc5L8.js');
|
|
50
50
|
require('../index-CB9xFokC.js');
|
|
51
|
-
require('../Popover-
|
|
51
|
+
require('../Popover-5BUgIW60.js');
|
|
52
52
|
require('../primitives/HoverCard.js');
|
|
53
53
|
require('../Typography-BW6xEk10.js');
|
|
54
54
|
require('../info-DGfDptn1.js');
|
|
@@ -39,15 +39,15 @@ require('dayjs');
|
|
|
39
39
|
require('dayjs/plugin/customParseFormat');
|
|
40
40
|
require('@bigbinary/neeto-commons-frontend/utils');
|
|
41
41
|
require('../primitives/Field.js');
|
|
42
|
-
require('../HelpIcon-
|
|
42
|
+
require('../HelpIcon-QpZY6Zmc.js');
|
|
43
43
|
require('../primitives/Tooltip.js');
|
|
44
44
|
require('../tooltip-hM8gc5L8.js');
|
|
45
45
|
require('../index-CB9xFokC.js');
|
|
46
46
|
require('../renderIcon-BRrpZu9a.js');
|
|
47
|
-
require('../Popover-
|
|
47
|
+
require('../Popover-5BUgIW60.js');
|
|
48
48
|
require('../primitives/HoverCard.js');
|
|
49
49
|
require('../Typography-BW6xEk10.js');
|
|
50
|
-
require('../Button-
|
|
50
|
+
require('../Button-DJSysuyG.js');
|
|
51
51
|
require('react-router-dom');
|
|
52
52
|
require('../primitives/Spinner.js');
|
|
53
53
|
require('react-i18next');
|
|
@@ -7,7 +7,7 @@ var reactI18next = require('react-i18next');
|
|
|
7
7
|
var utils = require('../utils-BhM0B89p.js');
|
|
8
8
|
var primitives_Button = require('../primitives/Button.js');
|
|
9
9
|
var primitives_ButtonGroup = require('../primitives/ButtonGroup.js');
|
|
10
|
-
var Button = require('../Button-
|
|
10
|
+
var Button = require('../Button-DJSysuyG.js');
|
|
11
11
|
var chevronDown = require('../chevron-down-CPsWSS51.js');
|
|
12
12
|
var renderIcon = require('../renderIcon-BRrpZu9a.js');
|
|
13
13
|
require('../chevron-right-0jNdwX2Q.js');
|
|
@@ -240,6 +240,7 @@ const DropdownBase = ({
|
|
|
240
240
|
align,
|
|
241
241
|
onEscapeKeyDown: closeOnEsc ? void 0 : (e) => e.preventDefault(),
|
|
242
242
|
onInteractOutside: closeOnOutsideClick ? void 0 : (e) => e.preventDefault(),
|
|
243
|
+
"data-testid": "nui-dropdown-container",
|
|
243
244
|
...dropdownProps,
|
|
244
245
|
children
|
|
245
246
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DropdownMenu.js","sources":["../../../src/components/DropdownMenu/constants.ts","../../../src/components/DropdownMenu/SplitTrigger.tsx","../../../src/components/DropdownMenu/TriggerButton.tsx","../../../src/components/DropdownMenu/types.ts","../../../src/components/DropdownMenu/DropdownBase.tsx","../../../src/components/DropdownMenu/Divider.tsx","../../../src/components/DropdownMenu/Label.tsx","../../../src/components/DropdownMenu/Menu.tsx","../../../src/components/DropdownMenu/MenuItem.tsx","../../../src/components/DropdownMenu/SubMenu.tsx","../../../src/components/DropdownMenu/index.tsx"],"sourcesContent":["export const SIDE_MAP: Record<string, \"top\" | \"right\" | \"bottom\" | \"left\"> = {\n top: \"top\",\n bottom: \"bottom\",\n left: \"left\",\n right: \"right\",\n \"top-start\": \"top\",\n \"top-end\": \"top\",\n \"bottom-start\": \"bottom\",\n \"bottom-end\": \"bottom\",\n \"left-start\": \"left\",\n \"left-end\": \"left\",\n \"right-start\": \"right\",\n \"right-end\": \"right\",\n auto: \"bottom\",\n};\n\nexport const ALIGN_MAP: Record<string, \"start\" | \"center\" | \"end\"> = {\n top: \"center\",\n bottom: \"center\",\n left: \"center\",\n right: \"center\",\n \"top-start\": \"start\",\n \"top-end\": \"end\",\n \"bottom-start\": \"start\",\n \"bottom-end\": \"end\",\n \"left-start\": \"start\",\n \"left-end\": \"end\",\n \"right-start\": \"start\",\n \"right-end\": \"end\",\n auto: \"end\",\n};\n\n","import React, { forwardRef } from \"react\";\n\nimport { ChevronDown } from \"lucide-react\";\nimport { useTranslation } from \"react-i18next\";\nimport { cn } from \"src/shadcn/lib/utils\";\nimport { Button } from \"src/components/Button\";\nimport { Button as PrimitiveButton } from \"src/primitives/Button\";\nimport { ButtonGroup } from \"src/primitives/ButtonGroup\";\nimport { DropdownMenuTrigger } from \"src/primitives/DropdownMenu\";\n\nimport type { BaseTriggerProps } from \"./types\";\n\ninterface SplitTriggerOwnProps extends BaseTriggerProps {\n /** Ref forwarded to the action button (left side). */\n actionButtonRef?: React.Ref<HTMLButtonElement>;\n}\n\n/**\n * Radix injects extra props (aria-expanded, data-state, …) via Slot on the\n * DropdownMenuTrigger child. We capture them with a rest-spread.\n */\ntype SplitTriggerProps = SplitTriggerOwnProps &\n Omit<React.ComponentProps<\"div\">, keyof SplitTriggerOwnProps>;\n\nconst SplitTrigger = forwardRef<HTMLDivElement, SplitTriggerProps>(\n (\n {\n label,\n icon,\n buttonProps,\n disabled,\n isOpen,\n onClick,\n actionButtonRef,\n className,\n ...otherProps\n },\n ref\n ) => {\n const { t } = useTranslation();\n const variant = buttonProps?.variant;\n const size = buttonProps?.size;\n\n return (\n <ButtonGroup\n ref={ref}\n className={cn(\"neeto-ui-action-dropdown\", className)}\n {...otherProps}\n >\n {/* Action button — fires the primary onClick */}\n <Button\n ref={actionButtonRef}\n type=\"button\"\n label={label}\n icon={icon}\n iconPosition=\"left\"\n disabled={disabled}\n {...buttonProps}\n onClick={onClick}\n data-testid=\"action-dropdown-btn\"\n />\n\n {/* Chevron trigger — opens the dropdown menu */}\n <DropdownMenuTrigger asChild disabled={disabled}>\n <PrimitiveButton\n type=\"button\"\n variant={variant}\n size={size}\n disabled={disabled}\n aria-label={t(\n \"neetoatoms.dropdownMenu.openMenu\",\n \"Open dropdown menu\"\n )}\n className=\"px-1.5\"\n >\n <ChevronDown\n aria-hidden=\"true\"\n className={cn(\n \"shrink-0 transition-transform duration-200\",\n isOpen && \"rotate-180\"\n )}\n />\n </PrimitiveButton>\n </DropdownMenuTrigger>\n </ButtonGroup>\n );\n }\n);\nSplitTrigger.displayName = \"Dropdown.SplitTrigger\";\n\nexport { SplitTrigger };\n","import React, { forwardRef } from \"react\";\n\nimport { ChevronDown } from \"lucide-react\";\nimport { cn } from \"src/shadcn/lib/utils\";\nimport { Button } from \"src/components/Button\";\n\nimport type { BaseTriggerProps } from \"./types\";\n\n/**\n * Extra props that Radix's Slot injects when the parent Trigger uses\n * `asChild` (aria-expanded, aria-haspopup, data-state, id, …).\n * We capture them with a rest-spread so they reach the DOM button.\n */\ntype TriggerButtonProps = BaseTriggerProps &\n Omit<React.ComponentProps<\"button\">, keyof BaseTriggerProps>;\n\nconst TriggerButton = forwardRef<HTMLButtonElement, TriggerButtonProps>(\n (\n {\n label,\n icon,\n buttonProps,\n disabled,\n isOpen,\n onClick,\n className,\n ...otherProps\n },\n ref\n ) => (\n <Button\n ref={ref}\n type=\"button\"\n label={label}\n icon={icon}\n iconPosition=\"left\"\n trailing={\n <ChevronDown\n aria-hidden=\"true\"\n className={cn(\n \"shrink-0 transition-transform duration-200\",\n isOpen && \"rotate-180\"\n )}\n />\n }\n disabled={disabled}\n {...otherProps}\n {...buttonProps}\n onClick={onClick}\n className={cn(className, buttonProps?.className)}\n />\n )\n);\nTriggerButton.displayName = \"Dropdown.TriggerButton\";\n\nexport { TriggerButton };\n","import { createContext, type ReactNode, type Ref } from \"react\";\n\nimport {\n DropdownMenuContent,\n DropdownMenuItem as PrimitiveDropdownMenuItem,\n} from \"src/primitives/DropdownMenu\";\nimport type { ButtonProps } from \"src/components/Button\";\nimport type { IconProp } from \"src/shared/renderIcon\";\n\nexport type DropdownPosition =\n | \"top\"\n | \"bottom\"\n | \"left\"\n | \"right\"\n | \"top-start\"\n | \"top-end\"\n | \"bottom-start\"\n | \"bottom-end\"\n | \"left-start\"\n | \"left-end\"\n | \"right-start\"\n | \"right-end\"\n | \"auto\";\n\n/**\n * Mirrors the primitive `DropdownMenuItem`'s `variant` vocabulary so the\n * wrapper speaks the same language. Keep in sync with Radix primitive.\n */\nexport type MenuItemVariant = \"default\" | \"destructive\";\n\n/**\n * Props forwarded to the trigger button. Sourced from the `Button` wrapper,\n * so consumers can pass `variant`, `size`, `loading`, `tooltipProps`,\n * `fullWidth`, `iconPosition`, etc.\n *\n * The dropdown owns these and so they are excluded:\n * - `label`/`icon`: top-level props on `DropdownMenu`\n * - `trailing`: the chevron\n * - `disabled`: `DropdownMenu`'s own `disabled` prop is authoritative\n * - `onClick`: use `DropdownMenu`'s `onClick` (drives split-button mode)\n * - `to`/`href`: a navigating trigger doesn't open a menu\n * - `asChild`/`children`: use `customTarget` / `label` instead\n */\nexport type DropdownButtonProps = Omit<\n ButtonProps,\n | \"label\"\n | \"icon\"\n | \"trailing\"\n | \"disabled\"\n | \"onClick\"\n | \"to\"\n | \"href\"\n | \"asChild\"\n | \"children\"\n>;\n\nexport interface BaseTriggerProps {\n label?: string;\n icon?: IconProp;\n buttonProps?: DropdownButtonProps;\n disabled: boolean;\n isOpen: boolean;\n onClick?: (e: React.MouseEvent) => void;\n}\n\nexport interface DropdownProps {\n /** Text label displayed inside the trigger button. */\n label?: string;\n /** Icon rendered inside the trigger button. */\n icon?: IconProp;\n /**\n * Props forwarded to the trigger button (variant, size, className,\n * loading, tooltipProps, fullWidth, iconPosition, …). In split-button\n * mode, forwarded to the action button; the chevron half visually mirrors\n * `variant`/`size`. Accepts the full `Button` prop type minus the props\n * the dropdown controls.\n */\n buttonProps?: DropdownButtonProps;\n /** Custom trigger element. Overrides the default button trigger. */\n customTarget?: ReactNode | ((props: { isOpen: boolean }) => ReactNode);\n /** Whether the dropdown is disabled. */\n disabled?: boolean;\n /** Dropdown menu content. */\n children?: ReactNode;\n /** Position of the dropdown menu relative to the trigger. */\n position?: DropdownPosition;\n /** Whether pressing Escape closes the dropdown. */\n closeOnEsc?: boolean;\n /** Whether selecting an item closes the dropdown. */\n closeOnSelect?: boolean;\n /** Whether clicking outside closes the dropdown. */\n closeOnOutsideClick?: boolean;\n /**\n * Whether the dropdown is modal. When `true`, the rest of the page is made\n * inert: focus is trapped, body scroll is locked, and sibling content is\n * hidden from assistive tech. Defaults to `false` to match the WAI-ARIA\n * `menu` pattern. Opt in only when the menu must own the user's attention\n * (e.g. a command palette).\n */\n modal?: boolean;\n /** Controlled open state. */\n isOpen?: boolean;\n /** Callback fired when the dropdown closes. */\n onClose?: () => void;\n /**\n * Callback fired when the trigger button is clicked.\n * When provided (without `customTarget`), renders a **split-button**:\n * a primary action button (fires `onClick`) paired with a separate\n * chevron that opens the dropdown menu.\n */\n onClick?: (e: React.MouseEvent) => void;\n /** Additional CSS class names for the trigger wrapper. */\n className?: string;\n /** Ref forwarded to the trigger button. In split-button mode, forwarded to the action button. */\n triggerRef?: Ref<HTMLButtonElement>;\n /** Extra props forwarded to the DropdownMenuContent. */\n dropdownProps?: Omit<\n React.ComponentProps<typeof DropdownMenuContent>,\n \"side\" | \"align\"\n >;\n}\n\nexport interface MenuItemProps extends Omit<\n React.ComponentProps<typeof PrimitiveDropdownMenuItem>,\n \"prefix\" | \"variant\" | \"onClick\"\n> {\n /** Highlight as active. */\n isActive?: boolean;\n /** Disable the menu item. */\n isDisabled?: boolean;\n /** Visual variant of the menu item. */\n variant?: MenuItemVariant;\n /** Content rendered before the label. */\n prefix?: ReactNode;\n /** Content rendered after the label. */\n suffix?: ReactNode;\n /** Internal route (renders as anchor). */\n to?: string;\n /** External link (renders as anchor). */\n href?: string;\n /** Callback fired when the item is selected. */\n onClick?: (e: Event) => void;\n /** Children / label text. */\n children?: ReactNode;\n /** Additional CSS class names. */\n className?: string;\n}\n\nexport const DropdownContext = createContext({ closeOnSelect: true });\n","import { useCallback, useState } from \"react\";\n\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuTrigger,\n} from \"src/primitives/DropdownMenu\";\n\nimport { ALIGN_MAP, SIDE_MAP } from \"./constants\";\nimport { SplitTrigger } from \"./SplitTrigger\";\nimport { TriggerButton } from \"./TriggerButton\";\nimport { DropdownContext, type DropdownProps } from \"./types\";\n\nconst DropdownBase = ({\n label,\n icon,\n buttonProps,\n customTarget,\n disabled = false,\n children,\n position = \"bottom-end\",\n closeOnEsc = true,\n closeOnSelect = true,\n closeOnOutsideClick = true,\n modal = false,\n isOpen: isOpenProp,\n onClose,\n onClick,\n className,\n triggerRef,\n dropdownProps,\n}: DropdownProps) => {\n const [internalOpen, setInternalOpen] = useState(false);\n const isControlled = isOpenProp !== undefined;\n const open = isControlled ? isOpenProp : internalOpen;\n const handleOpenChange = useCallback(\n (isOpen: boolean) => {\n if (!isControlled) setInternalOpen(isOpen);\n if (!isOpen) onClose?.();\n },\n [isControlled, onClose]\n );\n\n const side = SIDE_MAP[position] ?? \"bottom\";\n const align = ALIGN_MAP[position] ?? \"end\";\n\n // Split-button mode: onClick provided without a customTarget.\n const isSplit = !!onClick && !customTarget;\n\n const sharedTriggerProps = {\n label,\n icon,\n buttonProps,\n disabled,\n isOpen: open,\n onClick,\n };\n\n const triggerNode = isSplit ? (\n <SplitTrigger\n {...sharedTriggerProps}\n actionButtonRef={triggerRef}\n className={className}\n />\n ) : (\n <DropdownMenuTrigger asChild disabled={disabled} className={className}>\n {customTarget ? (\n typeof customTarget === \"function\" ? (\n customTarget({ isOpen: open })\n ) : (\n customTarget\n )\n ) : (\n <TriggerButton ref={triggerRef} {...sharedTriggerProps} />\n )}\n </DropdownMenuTrigger>\n );\n\n return (\n <DropdownContext.Provider value={{ closeOnSelect }}>\n <DropdownMenu open={open} onOpenChange={handleOpenChange} modal={modal}>\n {triggerNode}\n <DropdownMenuContent\n side={side}\n align={align}\n onEscapeKeyDown={closeOnEsc ? undefined : e => e.preventDefault()}\n onInteractOutside={\n closeOnOutsideClick ? undefined : e => e.preventDefault()\n }\n {...dropdownProps}\n >\n {children}\n </DropdownMenuContent>\n </DropdownMenu>\n </DropdownContext.Provider>\n );\n};\n\nexport { DropdownBase };\n","import React, { forwardRef } from \"react\";\n\nimport { DropdownMenuSeparator } from \"src/primitives/DropdownMenu\";\n\nconst Divider = forwardRef<\n HTMLDivElement,\n React.ComponentProps<typeof DropdownMenuSeparator>\n>((props, ref) => <DropdownMenuSeparator ref={ref} {...props} />);\nDivider.displayName = \"Dropdown.Divider\";\n\nexport { Divider };\n","import React, { forwardRef, type ReactNode } from \"react\";\n\nimport { DropdownMenuLabel } from \"src/primitives/DropdownMenu\";\n\ninterface MenuLabelProps extends React.ComponentProps<\"div\"> {\n children?: ReactNode;\n className?: string;\n}\n\nconst Label = forwardRef<HTMLDivElement, MenuLabelProps>(\n ({ children, className, ...otherProps }, ref) => (\n <DropdownMenuLabel ref={ref} className={className} {...otherProps}>\n {children}\n </DropdownMenuLabel>\n )\n);\nLabel.displayName = \"Dropdown.Label\";\n\nexport { Label };\n","import React, { forwardRef, type ReactNode } from \"react\";\n\nimport { cn } from \"src/shadcn/lib/utils\";\nimport { DropdownMenuGroup } from \"src/primitives/DropdownMenu\";\n\ninterface MenuProps extends React.ComponentProps<\"div\"> {\n children?: ReactNode;\n className?: string;\n}\n\nconst Menu = forwardRef<HTMLDivElement, MenuProps>(\n ({ children, className, ...otherProps }, ref) => (\n <DropdownMenuGroup\n ref={ref}\n className={cn(\"flex flex-col\", className)}\n {...otherProps}\n >\n {children}\n </DropdownMenuGroup>\n )\n);\nMenu.displayName = \"Dropdown.Menu\";\n\nexport { Menu };\n","import { forwardRef, useCallback, useContext, useMemo } from \"react\";\n\nimport { cn } from \"src/shadcn/lib/utils\";\nimport { DropdownMenuItem as PrimitiveDropdownMenuItem } from \"src/primitives/DropdownMenu\";\n\nimport { DropdownContext, type MenuItemProps } from \"./types\";\n\nconst MenuItem = forwardRef<HTMLDivElement, MenuItemProps>(\n (\n {\n children,\n isActive = false,\n isDisabled = false,\n variant = \"default\",\n prefix,\n suffix,\n to,\n href,\n className,\n onClick,\n disabled: _disabled,\n asChild: _asChild,\n onSelect: _onSelect,\n ...otherProps\n },\n ref\n ) => {\n const { closeOnSelect } = useContext(DropdownContext);\n const linkHref = to ?? href;\n\n const handleSelect = useCallback(\n (e: Event) => {\n if (!closeOnSelect) e.preventDefault();\n onClick?.(e);\n },\n [closeOnSelect, onClick]\n );\n\n const itemContent = useMemo(\n () => (\n <>\n {prefix && (\n <span data-slot=\"menu-item-prefix\" className=\"shrink-0\">\n {prefix}\n </span>\n )}\n <span className=\"flex-1 truncate\">{children}</span>\n {suffix && (\n <span\n data-slot=\"menu-item-suffix\"\n className=\"ms-auto shrink-0 text-muted-foreground\"\n >\n {suffix}\n </span>\n )}\n </>\n ),\n [prefix, children, suffix]\n );\n\n return (\n <PrimitiveDropdownMenuItem\n ref={ref}\n variant={variant}\n disabled={isDisabled}\n data-active={isActive || undefined}\n className={cn(\n isActive && \"bg-accent text-accent-foreground\",\n className\n )}\n asChild={!!linkHref}\n onSelect={handleSelect}\n {...otherProps}\n >\n {linkHref ? <a href={linkHref}>{itemContent}</a> : itemContent}\n </PrimitiveDropdownMenuItem>\n );\n }\n);\nMenuItem.displayName = \"Dropdown.MenuItem\";\n\nexport { MenuItem };\n","import React, { forwardRef, type ReactNode } from \"react\";\n\nimport { renderIcon, type IconProp } from \"src/shared/renderIcon\";\nimport {\n DropdownMenuSub,\n DropdownMenuSubContent,\n DropdownMenuSubTrigger,\n} from \"src/primitives/DropdownMenu\";\n\ninterface SubMenuProps {\n label?: string;\n icon?: IconProp;\n children?: ReactNode;\n className?: string;\n triggerProps?: Omit<\n React.ComponentProps<typeof DropdownMenuSubTrigger>,\n \"ref\" | \"className\" | \"children\"\n >;\n contentProps?: Omit<\n React.ComponentProps<typeof DropdownMenuSubContent>,\n \"children\"\n >;\n}\n\nconst SubMenu = forwardRef<HTMLDivElement, SubMenuProps>(\n ({ label, icon, children, className, triggerProps, contentProps }, ref) => (\n <DropdownMenuSub>\n <DropdownMenuSubTrigger ref={ref} className={className} {...triggerProps}>\n {icon && <span className=\"shrink-0\">{renderIcon(icon, \"size-4\")}</span>}\n {label && <span>{label}</span>}\n </DropdownMenuSubTrigger>\n <DropdownMenuSubContent {...contentProps}>\n {children}\n </DropdownMenuSubContent>\n </DropdownMenuSub>\n )\n);\nSubMenu.displayName = \"Dropdown.SubMenu\";\n\nexport { SubMenu };\n","import { DropdownBase } from \"./DropdownBase\";\nimport { Divider } from \"./Divider\";\nimport { Label } from \"./Label\";\nimport { Menu } from \"./Menu\";\nimport { MenuItem } from \"./MenuItem\";\nimport { SubMenu } from \"./SubMenu\";\n\nexport type { DropdownProps, DropdownPosition } from \"./types\";\n\ntype DropdownComponent = typeof DropdownBase & {\n displayName?: string;\n Menu: typeof Menu;\n MenuItem: typeof MenuItem;\n Divider: typeof Divider;\n Label: typeof Label;\n SubMenu: typeof SubMenu;\n};\n\nconst DropdownMenu = DropdownBase as DropdownComponent;\nDropdownMenu.displayName = \"DropdownMenu\";\nDropdownMenu.Menu = Menu;\nDropdownMenu.MenuItem = MenuItem;\nDropdownMenu.Divider = Divider;\nDropdownMenu.Label = Label;\nDropdownMenu.SubMenu = SubMenu;\n\nexport { DropdownMenu };\n"],"names":["forwardRef","useTranslation","jsxs","ButtonGroup","cn","jsx","Button","DropdownMenuTrigger","PrimitiveButton","ChevronDown","createContext","useState","useCallback","DropdownMenu","DropdownMenuContent","DropdownMenuSeparator","DropdownMenuLabel","DropdownMenuGroup","useContext","useMemo","Fragment","PrimitiveDropdownMenuItem","DropdownMenuSub","DropdownMenuSubTrigger","renderIcon","DropdownMenuSubContent"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAO,MAAM,QAAA,GAAgE;AAAA,EAC3E,GAAA,EAAK,KAAA;AAAA,EACL,MAAA,EAAQ,QAAA;AAAA,EACR,IAAA,EAAM,MAAA;AAAA,EACN,KAAA,EAAO,OAAA;AAAA,EACP,WAAA,EAAa,KAAA;AAAA,EACb,SAAA,EAAW,KAAA;AAAA,EACX,cAAA,EAAgB,QAAA;AAAA,EAChB,YAAA,EAAc,QAAA;AAAA,EACd,YAAA,EAAc,MAAA;AAAA,EACd,UAAA,EAAY,MAAA;AAAA,EACZ,aAAA,EAAe,OAAA;AAAA,EACf,WAAA,EAAa,OAAA;AAAA,EACb,IAAA,EAAM;AACR,CAAA;AAEO,MAAM,SAAA,GAAwD;AAAA,EACnE,GAAA,EAAK,QAAA;AAAA,EACL,MAAA,EAAQ,QAAA;AAAA,EACR,IAAA,EAAM,QAAA;AAAA,EACN,KAAA,EAAO,QAAA;AAAA,EACP,WAAA,EAAa,OAAA;AAAA,EACb,SAAA,EAAW,KAAA;AAAA,EACX,cAAA,EAAgB,OAAA;AAAA,EAChB,YAAA,EAAc,KAAA;AAAA,EACd,YAAA,EAAc,OAAA;AAAA,EACd,UAAA,EAAY,KAAA;AAAA,EACZ,aAAA,EAAe,OAAA;AAAA,EACf,WAAA,EAAa,KAAA;AAAA,EACb,IAAA,EAAM;AACR,CAAA;;ACNA,MAAM,YAAA,GAAeA,gBAAA;AAAA,EACnB,CACE;AAAA,IACE,KAAA;AAAA,IACA,IAAA;AAAA,IACA,WAAA;AAAA,IACA,QAAA;AAAA,IACA,MAAA;AAAA,IACA,OAAA;AAAA,IACA,eAAA;AAAA,IACA,SAAA;AAAA,IACA,GAAG;AAAA,KAEL,GAAA,KACG;AACH,IAAA,MAAM,EAAE,CAAA,EAAE,GAAIC,2BAAA,EAAe;AAC7B,IAAA,MAAM,UAAU,WAAA,EAAa,OAAA;AAC7B,IAAA,MAAM,OAAO,WAAA,EAAa,IAAA;AAE1B,IAAA,uBACEC,eAAA;AAAA,MAACC,kCAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,SAAA,EAAWC,QAAA,CAAG,0BAAA,EAA4B,SAAS,CAAA;AAAA,QAClD,GAAG,UAAA;AAAA,QAGJ,QAAA,EAAA;AAAA,0BAAAC,cAAA;AAAA,YAACC,aAAA;AAAA,YAAA;AAAA,cACC,GAAA,EAAK,eAAA;AAAA,cACL,IAAA,EAAK,QAAA;AAAA,cACL,KAAA;AAAA,cACA,IAAA;AAAA,cACA,YAAA,EAAa,MAAA;AAAA,cACb,QAAA;AAAA,cACC,GAAG,WAAA;AAAA,cACJ,OAAA;AAAA,cACA,aAAA,EAAY;AAAA;AAAA,WACd;AAAA,0BAGAD,cAAA,CAACE,2CAAA,EAAA,EAAoB,OAAA,EAAO,IAAA,EAAC,QAAA,EAC3B,QAAA,kBAAAF,cAAA;AAAA,YAACG,wBAAA;AAAA,YAAA;AAAA,cACC,IAAA,EAAK,QAAA;AAAA,cACL,OAAA;AAAA,cACA,IAAA;AAAA,cACA,QAAA;AAAA,cACA,YAAA,EAAY,CAAA;AAAA,gBACV,kCAAA;AAAA,gBACA;AAAA,eACF;AAAA,cACA,SAAA,EAAU,QAAA;AAAA,cAEV,QAAA,kBAAAH,cAAA;AAAA,gBAACI,uBAAA;AAAA,gBAAA;AAAA,kBACC,aAAA,EAAY,MAAA;AAAA,kBACZ,SAAA,EAAWL,QAAA;AAAA,oBACT,4CAAA;AAAA,oBACA,MAAA,IAAU;AAAA;AACZ;AAAA;AACF;AAAA,WACF,EACF;AAAA;AAAA;AAAA,KACF;AAAA,EAEJ;AACF,CAAA;AACA,YAAA,CAAa,WAAA,GAAc,uBAAA;;ACxE3B,MAAM,aAAA,GAAgBJ,gBAAA;AAAA,EACpB,CACE;AAAA,IACE,KAAA;AAAA,IACA,IAAA;AAAA,IACA,WAAA;AAAA,IACA,QAAA;AAAA,IACA,MAAA;AAAA,IACA,OAAA;AAAA,IACA,SAAA;AAAA,IACA,GAAG;AAAA,KAEL,GAAA,qBAEAK,cAAA;AAAA,IAACC,aAAA;AAAA,IAAA;AAAA,MACC,GAAA;AAAA,MACA,IAAA,EAAK,QAAA;AAAA,MACL,KAAA;AAAA,MACA,IAAA;AAAA,MACA,YAAA,EAAa,MAAA;AAAA,MACb,QAAA,kBACED,cAAA;AAAA,QAACI,uBAAA;AAAA,QAAA;AAAA,UACC,aAAA,EAAY,MAAA;AAAA,UACZ,SAAA,EAAWL,QAAA;AAAA,YACT,4CAAA;AAAA,YACA,MAAA,IAAU;AAAA;AACZ;AAAA,OACF;AAAA,MAEF,QAAA;AAAA,MACC,GAAG,UAAA;AAAA,MACH,GAAG,WAAA;AAAA,MACJ,OAAA;AAAA,MACA,SAAA,EAAWA,QAAA,CAAG,SAAA,EAAW,WAAA,EAAa,SAAS;AAAA;AAAA;AAGrD,CAAA;AACA,aAAA,CAAc,WAAA,GAAc,wBAAA;;AC+FrB,MAAM,eAAA,GAAkBM,mBAAA,CAAc,EAAE,aAAA,EAAe,MAAM,CAAA;;ACvIpE,MAAM,eAAe,CAAC;AAAA,EACpB,KAAA;AAAA,EACA,IAAA;AAAA,EACA,WAAA;AAAA,EACA,YAAA;AAAA,EACA,QAAA,GAAW,KAAA;AAAA,EACX,QAAA;AAAA,EACA,QAAA,GAAW,YAAA;AAAA,EACX,UAAA,GAAa,IAAA;AAAA,EACb,aAAA,GAAgB,IAAA;AAAA,EAChB,mBAAA,GAAsB,IAAA;AAAA,EACtB,KAAA,GAAQ,KAAA;AAAA,EACR,MAAA,EAAQ,UAAA;AAAA,EACR,OAAA;AAAA,EACA,OAAA;AAAA,EACA,SAAA;AAAA,EACA,UAAA;AAAA,EACA;AACF,CAAA,KAAqB;AACnB,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAIC,eAAS,KAAK,CAAA;AACtD,EAAA,MAAM,eAAe,UAAA,KAAe,MAAA;AACpC,EAAA,MAAM,IAAA,GAAO,eAAe,UAAA,GAAa,YAAA;AACzC,EAAA,MAAM,gBAAA,GAAmBC,iBAAA;AAAA,IACvB,CAAC,MAAA,KAAoB;AACnB,MAAA,IAAI,CAAC,YAAA,EAAc,eAAA,CAAgB,MAAM,CAAA;AACzC,MAAA,IAAI,CAAC,QAAQ,OAAA,IAAU;AAAA,IACzB,CAAA;AAAA,IACA,CAAC,cAAc,OAAO;AAAA,GACxB;AAEA,EAAA,MAAM,IAAA,GAAO,QAAA,CAAS,QAAQ,CAAA,IAAK,QAAA;AACnC,EAAA,MAAM,KAAA,GAAQ,SAAA,CAAU,QAAQ,CAAA,IAAK,KAAA;AAGrC,EAAA,MAAM,OAAA,GAAU,CAAC,CAAC,OAAA,IAAW,CAAC,YAAA;AAE9B,EAAA,MAAM,kBAAA,GAAqB;AAAA,IACzB,KAAA;AAAA,IACA,IAAA;AAAA,IACA,WAAA;AAAA,IACA,QAAA;AAAA,IACA,MAAA,EAAQ,IAAA;AAAA,IACR;AAAA,GACF;AAEA,EAAA,MAAM,cAAc,OAAA,mBAClBP,cAAA;AAAA,IAAC,YAAA;AAAA,IAAA;AAAA,MACE,GAAG,kBAAA;AAAA,MACJ,eAAA,EAAiB,UAAA;AAAA,MACjB;AAAA;AAAA,GACF,mBAEAA,cAAA,CAACE,2CAAA,EAAA,EAAoB,OAAA,EAAO,IAAA,EAAC,UAAoB,SAAA,EAC9C,QAAA,EAAA,YAAA,GACC,OAAO,YAAA,KAAiB,UAAA,GACtB,YAAA,CAAa,EAAE,MAAA,EAAQ,IAAA,EAAM,CAAA,GAE7B,YAAA,mBAGFF,cAAA,CAAC,iBAAc,GAAA,EAAK,UAAA,EAAa,GAAG,kBAAA,EAAoB,CAAA,EAE5D,CAAA;AAGF,EAAA,uBACEA,cAAA,CAAC,eAAA,CAAgB,QAAA,EAAhB,EAAyB,KAAA,EAAO,EAAE,aAAA,EAAc,EAC/C,QAAA,kBAAAH,eAAA,CAACW,oCAAA,EAAA,EAAa,IAAA,EAAY,YAAA,EAAc,kBAAkB,KAAA,EACvD,QAAA,EAAA;AAAA,IAAA,WAAA;AAAA,oBACDR,cAAA;AAAA,MAACS,2CAAA;AAAA,MAAA;AAAA,QACC,IAAA;AAAA,QACA,KAAA;AAAA,QACA,eAAA,EAAiB,UAAA,GAAa,MAAA,GAAY,CAAA,CAAA,KAAK,EAAE,cAAA,EAAe;AAAA,QAChE,iBAAA,EACE,mBAAA,GAAsB,MAAA,GAAY,CAAA,CAAA,KAAK,EAAE,cAAA,EAAe;AAAA,QAEzD,GAAG,aAAA;AAAA,QAEH;AAAA;AAAA;AACH,GAAA,EACF,CAAA,EACF,CAAA;AAEJ,CAAA;;AC5FA,MAAM,OAAA,GAAUd,gBAAA,CAGd,CAAC,KAAA,EAAO,GAAA,oCAASe,6CAAA,EAAA,EAAsB,GAAA,EAAW,GAAG,KAAA,EAAO,CAAE,CAAA;AAChE,OAAA,CAAQ,WAAA,GAAc,kBAAA;;ACCtB,MAAM,KAAA,GAAQf,gBAAA;AAAA,EACZ,CAAC,EAAE,QAAA,EAAU,SAAA,EAAW,GAAG,UAAA,EAAW,EAAG,GAAA,qBACvCK,cAAA,CAACW,yCAAA,EAAA,EAAkB,GAAA,EAAU,SAAA,EAAuB,GAAG,YACpD,QAAA,EACH;AAEJ,CAAA;AACA,KAAA,CAAM,WAAA,GAAc,gBAAA;;ACNpB,MAAM,IAAA,GAAOhB,gBAAA;AAAA,EACX,CAAC,EAAE,QAAA,EAAU,WAAW,GAAG,UAAA,IAAc,GAAA,qBACvCK,cAAA;AAAA,IAACY,yCAAA;AAAA,IAAA;AAAA,MACC,GAAA;AAAA,MACA,SAAA,EAAWb,QAAA,CAAG,eAAA,EAAiB,SAAS,CAAA;AAAA,MACvC,GAAG,UAAA;AAAA,MAEH;AAAA;AAAA;AAGP,CAAA;AACA,IAAA,CAAK,WAAA,GAAc,eAAA;;ACdnB,MAAM,QAAA,GAAWJ,gBAAA;AAAA,EACf,CACE;AAAA,IACE,QAAA;AAAA,IACA,QAAA,GAAW,KAAA;AAAA,IACX,UAAA,GAAa,KAAA;AAAA,IACb,OAAA,GAAU,SAAA;AAAA,IACV,MAAA;AAAA,IACA,MAAA;AAAA,IACA,EAAA;AAAA,IACA,IAAA;AAAA,IACA,SAAA;AAAA,IACA,OAAA;AAAA,IACA,QAAA,EAAU,SAAA;AAAA,IACV,OAAA,EAAS,QAAA;AAAA,IACT,QAAA,EAAU,SAAA;AAAA,IACV,GAAG;AAAA,KAEL,GAAA,KACG;AACH,IAAA,MAAM,EAAE,aAAA,EAAc,GAAIkB,gBAAA,CAAW,eAAe,CAAA;AACpD,IAAA,MAAM,WAAW,EAAA,IAAM,IAAA;AAEvB,IAAA,MAAM,YAAA,GAAeN,iBAAA;AAAA,MACnB,CAAC,CAAA,KAAa;AACZ,QAAA,IAAI,CAAC,aAAA,EAAe,CAAA,CAAE,cAAA,EAAe;AACrC,QAAA,OAAA,GAAU,CAAC,CAAA;AAAA,MACb,CAAA;AAAA,MACA,CAAC,eAAe,OAAO;AAAA,KACzB;AAEA,IAAA,MAAM,WAAA,GAAcO,aAAA;AAAA,MAClB,sBACEjB,eAAA,CAAAkB,mBAAA,EAAA,EACG,QAAA,EAAA;AAAA,QAAA,MAAA,mCACE,MAAA,EAAA,EAAK,WAAA,EAAU,kBAAA,EAAmB,SAAA,EAAU,YAC1C,QAAA,EAAA,MAAA,EACH,CAAA;AAAA,wBAEFf,cAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,iBAAA,EAAmB,QAAA,EAAS,CAAA;AAAA,QAC3C,MAAA,oBACCA,cAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,WAAA,EAAU,kBAAA;AAAA,YACV,SAAA,EAAU,wCAAA;AAAA,YAET,QAAA,EAAA;AAAA;AAAA;AACH,OAAA,EAEJ,CAAA;AAAA,MAEF,CAAC,MAAA,EAAQ,QAAA,EAAU,MAAM;AAAA,KAC3B;AAEA,IAAA,uBACEA,cAAA;AAAA,MAACgB,wCAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,OAAA;AAAA,QACA,QAAA,EAAU,UAAA;AAAA,QACV,eAAa,QAAA,IAAY,MAAA;AAAA,QACzB,SAAA,EAAWjB,QAAA;AAAA,UACT,QAAA,IAAY,kCAAA;AAAA,UACZ;AAAA,SACF;AAAA,QACA,OAAA,EAAS,CAAC,CAAC,QAAA;AAAA,QACX,QAAA,EAAU,YAAA;AAAA,QACT,GAAG,UAAA;AAAA,QAEH,qCAAWC,cAAA,CAAC,GAAA,EAAA,EAAE,IAAA,EAAM,QAAA,EAAW,uBAAY,CAAA,GAAO;AAAA;AAAA,KACrD;AAAA,EAEJ;AACF,CAAA;AACA,QAAA,CAAS,WAAA,GAAc,mBAAA;;ACvDvB,MAAM,OAAA,GAAUL,gBAAA;AAAA,EACd,CAAC,EAAE,KAAA,EAAO,IAAA,EAAM,QAAA,EAAU,SAAA,EAAW,YAAA,EAAc,YAAA,EAAa,EAAG,GAAA,qBACjEE,eAAA,CAACoB,uCAAA,EAAA,EACC,QAAA,EAAA;AAAA,oBAAApB,eAAA,CAACqB,8CAAA,EAAA,EAAuB,GAAA,EAAU,SAAA,EAAuB,GAAG,YAAA,EACzD,QAAA,EAAA;AAAA,MAAA,IAAA,mCAAS,MAAA,EAAA,EAAK,SAAA,EAAU,YAAY,QAAA,EAAAC,qBAAA,CAAW,IAAA,EAAM,QAAQ,CAAA,EAAE,CAAA;AAAA,MAC/D,KAAA,oBAASnB,cAAA,CAAC,MAAA,EAAA,EAAM,QAAA,EAAA,KAAA,EAAM;AAAA,KAAA,EACzB,CAAA;AAAA,oBACAA,cAAA,CAACoB,8CAAA,EAAA,EAAwB,GAAG,YAAA,EACzB,QAAA,EACH;AAAA,GAAA,EACF;AAEJ,CAAA;AACA,OAAA,CAAQ,WAAA,GAAc,kBAAA;;ACnBtB,MAAM,YAAA,GAAe;AACrB,YAAA,CAAa,WAAA,GAAc,cAAA;AAC3B,YAAA,CAAa,IAAA,GAAO,IAAA;AACpB,YAAA,CAAa,QAAA,GAAW,QAAA;AACxB,YAAA,CAAa,OAAA,GAAU,OAAA;AACvB,YAAA,CAAa,KAAA,GAAQ,KAAA;AACrB,YAAA,CAAa,OAAA,GAAU,OAAA;;;;"}
|
|
1
|
+
{"version":3,"file":"DropdownMenu.js","sources":["../../../src/components/DropdownMenu/constants.ts","../../../src/components/DropdownMenu/SplitTrigger.tsx","../../../src/components/DropdownMenu/TriggerButton.tsx","../../../src/components/DropdownMenu/types.ts","../../../src/components/DropdownMenu/DropdownBase.tsx","../../../src/components/DropdownMenu/Divider.tsx","../../../src/components/DropdownMenu/Label.tsx","../../../src/components/DropdownMenu/Menu.tsx","../../../src/components/DropdownMenu/MenuItem.tsx","../../../src/components/DropdownMenu/SubMenu.tsx","../../../src/components/DropdownMenu/index.tsx"],"sourcesContent":["export const SIDE_MAP: Record<string, \"top\" | \"right\" | \"bottom\" | \"left\"> = {\n top: \"top\",\n bottom: \"bottom\",\n left: \"left\",\n right: \"right\",\n \"top-start\": \"top\",\n \"top-end\": \"top\",\n \"bottom-start\": \"bottom\",\n \"bottom-end\": \"bottom\",\n \"left-start\": \"left\",\n \"left-end\": \"left\",\n \"right-start\": \"right\",\n \"right-end\": \"right\",\n auto: \"bottom\",\n};\n\nexport const ALIGN_MAP: Record<string, \"start\" | \"center\" | \"end\"> = {\n top: \"center\",\n bottom: \"center\",\n left: \"center\",\n right: \"center\",\n \"top-start\": \"start\",\n \"top-end\": \"end\",\n \"bottom-start\": \"start\",\n \"bottom-end\": \"end\",\n \"left-start\": \"start\",\n \"left-end\": \"end\",\n \"right-start\": \"start\",\n \"right-end\": \"end\",\n auto: \"end\",\n};\n\n","import React, { forwardRef } from \"react\";\n\nimport { ChevronDown } from \"lucide-react\";\nimport { useTranslation } from \"react-i18next\";\nimport { cn } from \"src/shadcn/lib/utils\";\nimport { Button } from \"src/components/Button\";\nimport { Button as PrimitiveButton } from \"src/primitives/Button\";\nimport { ButtonGroup } from \"src/primitives/ButtonGroup\";\nimport { DropdownMenuTrigger } from \"src/primitives/DropdownMenu\";\n\nimport type { BaseTriggerProps } from \"./types\";\n\ninterface SplitTriggerOwnProps extends BaseTriggerProps {\n /** Ref forwarded to the action button (left side). */\n actionButtonRef?: React.Ref<HTMLButtonElement>;\n}\n\n/**\n * Radix injects extra props (aria-expanded, data-state, …) via Slot on the\n * DropdownMenuTrigger child. We capture them with a rest-spread.\n */\ntype SplitTriggerProps = SplitTriggerOwnProps &\n Omit<React.ComponentProps<\"div\">, keyof SplitTriggerOwnProps>;\n\nconst SplitTrigger = forwardRef<HTMLDivElement, SplitTriggerProps>(\n (\n {\n label,\n icon,\n buttonProps,\n disabled,\n isOpen,\n onClick,\n actionButtonRef,\n className,\n ...otherProps\n },\n ref\n ) => {\n const { t } = useTranslation();\n const variant = buttonProps?.variant;\n const size = buttonProps?.size;\n\n return (\n <ButtonGroup\n ref={ref}\n className={cn(\"neeto-ui-action-dropdown\", className)}\n {...otherProps}\n >\n {/* Action button — fires the primary onClick */}\n <Button\n ref={actionButtonRef}\n type=\"button\"\n label={label}\n icon={icon}\n iconPosition=\"left\"\n disabled={disabled}\n {...buttonProps}\n onClick={onClick}\n data-testid=\"action-dropdown-btn\"\n />\n\n {/* Chevron trigger — opens the dropdown menu */}\n <DropdownMenuTrigger asChild disabled={disabled}>\n <PrimitiveButton\n type=\"button\"\n variant={variant}\n size={size}\n disabled={disabled}\n aria-label={t(\n \"neetoatoms.dropdownMenu.openMenu\",\n \"Open dropdown menu\"\n )}\n className=\"px-1.5\"\n >\n <ChevronDown\n aria-hidden=\"true\"\n className={cn(\n \"shrink-0 transition-transform duration-200\",\n isOpen && \"rotate-180\"\n )}\n />\n </PrimitiveButton>\n </DropdownMenuTrigger>\n </ButtonGroup>\n );\n }\n);\nSplitTrigger.displayName = \"Dropdown.SplitTrigger\";\n\nexport { SplitTrigger };\n","import React, { forwardRef } from \"react\";\n\nimport { ChevronDown } from \"lucide-react\";\nimport { cn } from \"src/shadcn/lib/utils\";\nimport { Button } from \"src/components/Button\";\n\nimport type { BaseTriggerProps } from \"./types\";\n\n/**\n * Extra props that Radix's Slot injects when the parent Trigger uses\n * `asChild` (aria-expanded, aria-haspopup, data-state, id, …).\n * We capture them with a rest-spread so they reach the DOM button.\n */\ntype TriggerButtonProps = BaseTriggerProps &\n Omit<React.ComponentProps<\"button\">, keyof BaseTriggerProps>;\n\nconst TriggerButton = forwardRef<HTMLButtonElement, TriggerButtonProps>(\n (\n {\n label,\n icon,\n buttonProps,\n disabled,\n isOpen,\n onClick,\n className,\n ...otherProps\n },\n ref\n ) => (\n <Button\n ref={ref}\n type=\"button\"\n label={label}\n icon={icon}\n iconPosition=\"left\"\n trailing={\n <ChevronDown\n aria-hidden=\"true\"\n className={cn(\n \"shrink-0 transition-transform duration-200\",\n isOpen && \"rotate-180\"\n )}\n />\n }\n disabled={disabled}\n {...otherProps}\n {...buttonProps}\n onClick={onClick}\n className={cn(className, buttonProps?.className)}\n />\n )\n);\nTriggerButton.displayName = \"Dropdown.TriggerButton\";\n\nexport { TriggerButton };\n","import { createContext, type ReactNode, type Ref } from \"react\";\n\nimport {\n DropdownMenuContent,\n DropdownMenuItem as PrimitiveDropdownMenuItem,\n} from \"src/primitives/DropdownMenu\";\nimport type { ButtonProps } from \"src/components/Button\";\nimport type { IconProp } from \"src/shared/renderIcon\";\n\nexport type DropdownPosition =\n | \"top\"\n | \"bottom\"\n | \"left\"\n | \"right\"\n | \"top-start\"\n | \"top-end\"\n | \"bottom-start\"\n | \"bottom-end\"\n | \"left-start\"\n | \"left-end\"\n | \"right-start\"\n | \"right-end\"\n | \"auto\";\n\n/**\n * Mirrors the primitive `DropdownMenuItem`'s `variant` vocabulary so the\n * wrapper speaks the same language. Keep in sync with Radix primitive.\n */\nexport type MenuItemVariant = \"default\" | \"destructive\";\n\n/**\n * Props forwarded to the trigger button. Sourced from the `Button` wrapper,\n * so consumers can pass `variant`, `size`, `loading`, `tooltipProps`,\n * `fullWidth`, `iconPosition`, etc.\n *\n * The dropdown owns these and so they are excluded:\n * - `label`/`icon`: top-level props on `DropdownMenu`\n * - `trailing`: the chevron\n * - `disabled`: `DropdownMenu`'s own `disabled` prop is authoritative\n * - `onClick`: use `DropdownMenu`'s `onClick` (drives split-button mode)\n * - `to`/`href`: a navigating trigger doesn't open a menu\n * - `asChild`/`children`: use `customTarget` / `label` instead\n */\nexport type DropdownButtonProps = Omit<\n ButtonProps,\n | \"label\"\n | \"icon\"\n | \"trailing\"\n | \"disabled\"\n | \"onClick\"\n | \"to\"\n | \"href\"\n | \"asChild\"\n | \"children\"\n>;\n\nexport interface BaseTriggerProps {\n label?: string;\n icon?: IconProp;\n buttonProps?: DropdownButtonProps;\n disabled: boolean;\n isOpen: boolean;\n onClick?: (e: React.MouseEvent) => void;\n}\n\nexport interface DropdownProps {\n /** Text label displayed inside the trigger button. */\n label?: string;\n /** Icon rendered inside the trigger button. */\n icon?: IconProp;\n /**\n * Props forwarded to the trigger button (variant, size, className,\n * loading, tooltipProps, fullWidth, iconPosition, …). In split-button\n * mode, forwarded to the action button; the chevron half visually mirrors\n * `variant`/`size`. Accepts the full `Button` prop type minus the props\n * the dropdown controls.\n */\n buttonProps?: DropdownButtonProps;\n /** Custom trigger element. Overrides the default button trigger. */\n customTarget?: ReactNode | ((props: { isOpen: boolean }) => ReactNode);\n /** Whether the dropdown is disabled. */\n disabled?: boolean;\n /** Dropdown menu content. */\n children?: ReactNode;\n /** Position of the dropdown menu relative to the trigger. */\n position?: DropdownPosition;\n /** Whether pressing Escape closes the dropdown. */\n closeOnEsc?: boolean;\n /** Whether selecting an item closes the dropdown. */\n closeOnSelect?: boolean;\n /** Whether clicking outside closes the dropdown. */\n closeOnOutsideClick?: boolean;\n /**\n * Whether the dropdown is modal. When `true`, the rest of the page is made\n * inert: focus is trapped, body scroll is locked, and sibling content is\n * hidden from assistive tech. Defaults to `false` to match the WAI-ARIA\n * `menu` pattern. Opt in only when the menu must own the user's attention\n * (e.g. a command palette).\n */\n modal?: boolean;\n /** Controlled open state. */\n isOpen?: boolean;\n /** Callback fired when the dropdown closes. */\n onClose?: () => void;\n /**\n * Callback fired when the trigger button is clicked.\n * When provided (without `customTarget`), renders a **split-button**:\n * a primary action button (fires `onClick`) paired with a separate\n * chevron that opens the dropdown menu.\n */\n onClick?: (e: React.MouseEvent) => void;\n /** Additional CSS class names for the trigger wrapper. */\n className?: string;\n /** Ref forwarded to the trigger button. In split-button mode, forwarded to the action button. */\n triggerRef?: Ref<HTMLButtonElement>;\n /** Extra props forwarded to the DropdownMenuContent. */\n dropdownProps?: Omit<\n React.ComponentProps<typeof DropdownMenuContent>,\n \"side\" | \"align\"\n >;\n}\n\nexport interface MenuItemProps extends Omit<\n React.ComponentProps<typeof PrimitiveDropdownMenuItem>,\n \"prefix\" | \"variant\" | \"onClick\"\n> {\n /** Highlight as active. */\n isActive?: boolean;\n /** Disable the menu item. */\n isDisabled?: boolean;\n /** Visual variant of the menu item. */\n variant?: MenuItemVariant;\n /** Content rendered before the label. */\n prefix?: ReactNode;\n /** Content rendered after the label. */\n suffix?: ReactNode;\n /** Internal route (renders as anchor). */\n to?: string;\n /** External link (renders as anchor). */\n href?: string;\n /** Callback fired when the item is selected. */\n onClick?: (e: Event) => void;\n /** Children / label text. */\n children?: ReactNode;\n /** Additional CSS class names. */\n className?: string;\n}\n\nexport const DropdownContext = createContext({ closeOnSelect: true });\n","import { useCallback, useState } from \"react\";\n\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuTrigger,\n} from \"src/primitives/DropdownMenu\";\n\nimport { ALIGN_MAP, SIDE_MAP } from \"./constants\";\nimport { SplitTrigger } from \"./SplitTrigger\";\nimport { TriggerButton } from \"./TriggerButton\";\nimport { DropdownContext, type DropdownProps } from \"./types\";\n\nconst DropdownBase = ({\n label,\n icon,\n buttonProps,\n customTarget,\n disabled = false,\n children,\n position = \"bottom-end\",\n closeOnEsc = true,\n closeOnSelect = true,\n closeOnOutsideClick = true,\n modal = false,\n isOpen: isOpenProp,\n onClose,\n onClick,\n className,\n triggerRef,\n dropdownProps,\n}: DropdownProps) => {\n const [internalOpen, setInternalOpen] = useState(false);\n const isControlled = isOpenProp !== undefined;\n const open = isControlled ? isOpenProp : internalOpen;\n const handleOpenChange = useCallback(\n (isOpen: boolean) => {\n if (!isControlled) setInternalOpen(isOpen);\n if (!isOpen) onClose?.();\n },\n [isControlled, onClose]\n );\n\n const side = SIDE_MAP[position] ?? \"bottom\";\n const align = ALIGN_MAP[position] ?? \"end\";\n\n // Split-button mode: onClick provided without a customTarget.\n const isSplit = !!onClick && !customTarget;\n\n const sharedTriggerProps = {\n label,\n icon,\n buttonProps,\n disabled,\n isOpen: open,\n onClick,\n };\n\n const triggerNode = isSplit ? (\n <SplitTrigger\n {...sharedTriggerProps}\n actionButtonRef={triggerRef}\n className={className}\n />\n ) : (\n <DropdownMenuTrigger asChild disabled={disabled} className={className}>\n {customTarget ? (\n typeof customTarget === \"function\" ? (\n customTarget({ isOpen: open })\n ) : (\n customTarget\n )\n ) : (\n <TriggerButton ref={triggerRef} {...sharedTriggerProps} />\n )}\n </DropdownMenuTrigger>\n );\n\n return (\n <DropdownContext.Provider value={{ closeOnSelect }}>\n <DropdownMenu open={open} onOpenChange={handleOpenChange} modal={modal}>\n {triggerNode}\n <DropdownMenuContent\n side={side}\n align={align}\n onEscapeKeyDown={closeOnEsc ? undefined : e => e.preventDefault()}\n onInteractOutside={\n closeOnOutsideClick ? undefined : e => e.preventDefault()\n }\n data-testid=\"nui-dropdown-container\"\n {...dropdownProps}\n >\n {children}\n </DropdownMenuContent>\n </DropdownMenu>\n </DropdownContext.Provider>\n );\n};\n\nexport { DropdownBase };\n","import React, { forwardRef } from \"react\";\n\nimport { DropdownMenuSeparator } from \"src/primitives/DropdownMenu\";\n\nconst Divider = forwardRef<\n HTMLDivElement,\n React.ComponentProps<typeof DropdownMenuSeparator>\n>((props, ref) => <DropdownMenuSeparator ref={ref} {...props} />);\nDivider.displayName = \"Dropdown.Divider\";\n\nexport { Divider };\n","import React, { forwardRef, type ReactNode } from \"react\";\n\nimport { DropdownMenuLabel } from \"src/primitives/DropdownMenu\";\n\ninterface MenuLabelProps extends React.ComponentProps<\"div\"> {\n children?: ReactNode;\n className?: string;\n}\n\nconst Label = forwardRef<HTMLDivElement, MenuLabelProps>(\n ({ children, className, ...otherProps }, ref) => (\n <DropdownMenuLabel ref={ref} className={className} {...otherProps}>\n {children}\n </DropdownMenuLabel>\n )\n);\nLabel.displayName = \"Dropdown.Label\";\n\nexport { Label };\n","import React, { forwardRef, type ReactNode } from \"react\";\n\nimport { cn } from \"src/shadcn/lib/utils\";\nimport { DropdownMenuGroup } from \"src/primitives/DropdownMenu\";\n\ninterface MenuProps extends React.ComponentProps<\"div\"> {\n children?: ReactNode;\n className?: string;\n}\n\nconst Menu = forwardRef<HTMLDivElement, MenuProps>(\n ({ children, className, ...otherProps }, ref) => (\n <DropdownMenuGroup\n ref={ref}\n className={cn(\"flex flex-col\", className)}\n {...otherProps}\n >\n {children}\n </DropdownMenuGroup>\n )\n);\nMenu.displayName = \"Dropdown.Menu\";\n\nexport { Menu };\n","import { forwardRef, useCallback, useContext, useMemo } from \"react\";\n\nimport { cn } from \"src/shadcn/lib/utils\";\nimport { DropdownMenuItem as PrimitiveDropdownMenuItem } from \"src/primitives/DropdownMenu\";\n\nimport { DropdownContext, type MenuItemProps } from \"./types\";\n\nconst MenuItem = forwardRef<HTMLDivElement, MenuItemProps>(\n (\n {\n children,\n isActive = false,\n isDisabled = false,\n variant = \"default\",\n prefix,\n suffix,\n to,\n href,\n className,\n onClick,\n disabled: _disabled,\n asChild: _asChild,\n onSelect: _onSelect,\n ...otherProps\n },\n ref\n ) => {\n const { closeOnSelect } = useContext(DropdownContext);\n const linkHref = to ?? href;\n\n const handleSelect = useCallback(\n (e: Event) => {\n if (!closeOnSelect) e.preventDefault();\n onClick?.(e);\n },\n [closeOnSelect, onClick]\n );\n\n const itemContent = useMemo(\n () => (\n <>\n {prefix && (\n <span data-slot=\"menu-item-prefix\" className=\"shrink-0\">\n {prefix}\n </span>\n )}\n <span className=\"flex-1 truncate\">{children}</span>\n {suffix && (\n <span\n data-slot=\"menu-item-suffix\"\n className=\"ms-auto shrink-0 text-muted-foreground\"\n >\n {suffix}\n </span>\n )}\n </>\n ),\n [prefix, children, suffix]\n );\n\n return (\n <PrimitiveDropdownMenuItem\n ref={ref}\n variant={variant}\n disabled={isDisabled}\n data-active={isActive || undefined}\n className={cn(\n isActive && \"bg-accent text-accent-foreground\",\n className\n )}\n asChild={!!linkHref}\n onSelect={handleSelect}\n {...otherProps}\n >\n {linkHref ? <a href={linkHref}>{itemContent}</a> : itemContent}\n </PrimitiveDropdownMenuItem>\n );\n }\n);\nMenuItem.displayName = \"Dropdown.MenuItem\";\n\nexport { MenuItem };\n","import React, { forwardRef, type ReactNode } from \"react\";\n\nimport { renderIcon, type IconProp } from \"src/shared/renderIcon\";\nimport {\n DropdownMenuSub,\n DropdownMenuSubContent,\n DropdownMenuSubTrigger,\n} from \"src/primitives/DropdownMenu\";\n\ninterface SubMenuProps {\n label?: string;\n icon?: IconProp;\n children?: ReactNode;\n className?: string;\n triggerProps?: Omit<\n React.ComponentProps<typeof DropdownMenuSubTrigger>,\n \"ref\" | \"className\" | \"children\"\n >;\n contentProps?: Omit<\n React.ComponentProps<typeof DropdownMenuSubContent>,\n \"children\"\n >;\n}\n\nconst SubMenu = forwardRef<HTMLDivElement, SubMenuProps>(\n ({ label, icon, children, className, triggerProps, contentProps }, ref) => (\n <DropdownMenuSub>\n <DropdownMenuSubTrigger ref={ref} className={className} {...triggerProps}>\n {icon && <span className=\"shrink-0\">{renderIcon(icon, \"size-4\")}</span>}\n {label && <span>{label}</span>}\n </DropdownMenuSubTrigger>\n <DropdownMenuSubContent {...contentProps}>\n {children}\n </DropdownMenuSubContent>\n </DropdownMenuSub>\n )\n);\nSubMenu.displayName = \"Dropdown.SubMenu\";\n\nexport { SubMenu };\n","import { DropdownBase } from \"./DropdownBase\";\nimport { Divider } from \"./Divider\";\nimport { Label } from \"./Label\";\nimport { Menu } from \"./Menu\";\nimport { MenuItem } from \"./MenuItem\";\nimport { SubMenu } from \"./SubMenu\";\n\nexport type { DropdownProps, DropdownPosition } from \"./types\";\n\ntype DropdownComponent = typeof DropdownBase & {\n displayName?: string;\n Menu: typeof Menu;\n MenuItem: typeof MenuItem;\n Divider: typeof Divider;\n Label: typeof Label;\n SubMenu: typeof SubMenu;\n};\n\nconst DropdownMenu = DropdownBase as DropdownComponent;\nDropdownMenu.displayName = \"DropdownMenu\";\nDropdownMenu.Menu = Menu;\nDropdownMenu.MenuItem = MenuItem;\nDropdownMenu.Divider = Divider;\nDropdownMenu.Label = Label;\nDropdownMenu.SubMenu = SubMenu;\n\nexport { DropdownMenu };\n"],"names":["forwardRef","useTranslation","jsxs","ButtonGroup","cn","jsx","Button","DropdownMenuTrigger","PrimitiveButton","ChevronDown","createContext","useState","useCallback","DropdownMenu","DropdownMenuContent","DropdownMenuSeparator","DropdownMenuLabel","DropdownMenuGroup","useContext","useMemo","Fragment","PrimitiveDropdownMenuItem","DropdownMenuSub","DropdownMenuSubTrigger","renderIcon","DropdownMenuSubContent"],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var Empty = require('../Empty-
|
|
3
|
+
var Empty = require('../Empty-Bqt-TucD.js');
|
|
4
4
|
require('react/jsx-runtime');
|
|
5
5
|
require('react');
|
|
6
6
|
require('../utils-BhM0B89p.js');
|
|
@@ -28,7 +28,7 @@ require('../index-CB9xFokC.js');
|
|
|
28
28
|
require('../renderIcon-BRrpZu9a.js');
|
|
29
29
|
require('../Typography-BW6xEk10.js');
|
|
30
30
|
require('../index-DuNgWCXZ.js');
|
|
31
|
-
require('../Button-
|
|
31
|
+
require('../Button-DJSysuyG.js');
|
|
32
32
|
require('react-router-dom');
|
|
33
33
|
require('../primitives/Button.js');
|
|
34
34
|
require('../button-CSBhDSDJ.js');
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var Input = require('../Input-
|
|
3
|
+
var Input = require('../Input-lWo0YoZ9.js');
|
|
4
4
|
require('react/jsx-runtime');
|
|
5
5
|
require('react');
|
|
6
6
|
require('../utils-BhM0B89p.js');
|
|
7
7
|
require('../primitives/Field.js');
|
|
8
|
-
require('../HelpIcon-
|
|
8
|
+
require('../HelpIcon-QpZY6Zmc.js');
|
|
9
9
|
require('../primitives/Tooltip.js');
|
|
10
10
|
require('../tooltip-hM8gc5L8.js');
|
|
11
11
|
require('../index-COPkC3I5.js');
|
|
@@ -27,12 +27,12 @@ require('../index-CyrAgb4H.js');
|
|
|
27
27
|
require('../index-CB9xFokC.js');
|
|
28
28
|
require('../renderIcon-BRrpZu9a.js');
|
|
29
29
|
require('../createLucideIcon-D0tRgV6l.js');
|
|
30
|
-
require('../Popover-
|
|
30
|
+
require('../Popover-5BUgIW60.js');
|
|
31
31
|
require('../index-vioSzJOw.js');
|
|
32
32
|
require('../primitives/HoverCard.js');
|
|
33
33
|
require('../Typography-BW6xEk10.js');
|
|
34
34
|
require('../index-DuNgWCXZ.js');
|
|
35
|
-
require('../Button-
|
|
35
|
+
require('../Button-DJSysuyG.js');
|
|
36
36
|
require('react-router-dom');
|
|
37
37
|
require('../primitives/Button.js');
|
|
38
38
|
require('../button-CSBhDSDJ.js');
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var Label = require('../Label-
|
|
3
|
+
var Label = require('../Label-D8RFE9hd.js');
|
|
4
4
|
require('react/jsx-runtime');
|
|
5
5
|
require('react');
|
|
6
|
-
require('../HelpIcon-
|
|
6
|
+
require('../HelpIcon-QpZY6Zmc.js');
|
|
7
7
|
require('../primitives/Tooltip.js');
|
|
8
8
|
require('../tooltip-hM8gc5L8.js');
|
|
9
9
|
require('../utils-BhM0B89p.js');
|
|
@@ -26,12 +26,12 @@ require('../index-CyrAgb4H.js');
|
|
|
26
26
|
require('../index-CB9xFokC.js');
|
|
27
27
|
require('../renderIcon-BRrpZu9a.js');
|
|
28
28
|
require('../createLucideIcon-D0tRgV6l.js');
|
|
29
|
-
require('../Popover-
|
|
29
|
+
require('../Popover-5BUgIW60.js');
|
|
30
30
|
require('../index-vioSzJOw.js');
|
|
31
31
|
require('../primitives/HoverCard.js');
|
|
32
32
|
require('../Typography-BW6xEk10.js');
|
|
33
33
|
require('../index-DuNgWCXZ.js');
|
|
34
|
-
require('../Button-
|
|
34
|
+
require('../Button-DJSysuyG.js');
|
|
35
35
|
require('react-router-dom');
|
|
36
36
|
require('../primitives/Button.js');
|
|
37
37
|
require('../button-CSBhDSDJ.js');
|