@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
|
@@ -3,7 +3,7 @@ import { forwardRef, useId, useRef } from 'react';
|
|
|
3
3
|
import { useTranslation } from 'react-i18next';
|
|
4
4
|
import { c as cn } from './utils-BJnb9o5c.js';
|
|
5
5
|
import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogDescription, DialogFooter } from './primitives/Dialog.js';
|
|
6
|
-
import { b as Button } from './Button-
|
|
6
|
+
import { b as Button } from './Button-C4c_dj-f.js';
|
|
7
7
|
|
|
8
8
|
const SIZE_CLASS_MAP = {
|
|
9
9
|
small: "sm:max-w-xs",
|
|
@@ -125,4 +125,4 @@ const Alert = forwardRef(
|
|
|
125
125
|
Alert.displayName = "Alert";
|
|
126
126
|
|
|
127
127
|
export { Alert as A };
|
|
128
|
-
//# sourceMappingURL=Alert-
|
|
128
|
+
//# sourceMappingURL=Alert-BN00VOZx.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Alert-
|
|
1
|
+
{"version":3,"file":"Alert-BN00VOZx.js","sources":["../src/components/Alert/constants.ts","../src/components/Alert/Alert.tsx"],"sourcesContent":["import type { AlertSize, AlertStyle } from \"./Alert\";\n\nexport const SIZE_CLASS_MAP: Record<AlertSize, string> = {\n small: \"sm:max-w-xs\",\n medium: \"sm:max-w-sm\",\n large: \"sm:max-w-md\",\n};\n\nexport const STYLE_VARIANT_MAP: Record<AlertStyle, \"destructive\" | \"default\"> =\n {\n danger: \"destructive\",\n warning: \"default\",\n };\n","import {\n forwardRef,\n useId,\n useRef,\n type ReactNode,\n type RefObject,\n} from \"react\";\n\nimport { useTranslation } from \"react-i18next\";\nimport { cn } from \"src/shadcn/lib/utils\";\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n} from \"src/primitives/Dialog\";\nimport { Button } from \"src/components/Button\";\n\nimport { SIZE_CLASS_MAP, STYLE_VARIANT_MAP } from \"./constants\";\n\nexport type AlertStyle = \"danger\" | \"warning\";\nexport type AlertSize = \"small\" | \"medium\" | \"large\";\ntype InitialFocusElement = \"submit\" | \"cancel\";\n\n/** Radix Dialog.Content props we forward via ...otherProps. */\ntype DialogContentProps = React.ComponentProps<typeof DialogContent>;\n\nexport interface AlertProps extends Omit<\n DialogContentProps,\n | \"children\"\n | \"role\"\n | \"showCloseButton\"\n | \"className\"\n | \"style\"\n | \"onEscapeKeyDown\"\n | \"onInteractOutside\"\n> {\n /** Size of the alert dialog. */\n size?: AlertSize;\n /** Whether the alert is open. */\n isOpen?: boolean;\n /** Whether the submit action is in progress. */\n isSubmitting?: boolean;\n /** Additional CSS class names applied to the dialog content. */\n className?: string;\n /** Close on pressing the Esc key. */\n closeOnEsc?: boolean;\n /** Show the close button. */\n closeButton?: boolean;\n /** Additional CSS class names applied to the backdrop/overlay. */\n backdropClassName?: string;\n /** Close on clicking outside the dialog. */\n closeOnOutsideClick?: boolean;\n /** Callback invoked when the alert is closed. */\n onClose?: () => void;\n /** Callback invoked when the submit button is clicked. */\n onSubmit?: () => void;\n /** Title text of the alert. */\n title?: string;\n /** Message content of the alert. */\n message?: ReactNode;\n /** Label for the submit button. */\n submitButtonLabel?: string;\n /** Label for the cancel button. */\n cancelButtonLabel?: string;\n /** Hide the cancel button. */\n hideCancelButton?: boolean;\n /** Visual style of the submit button. */\n style?: AlertStyle;\n /** Ref of the element to receive focus when the alert opens. */\n initialFocusRef?: RefObject<HTMLElement | null>;\n /** Which built-in button receives focus on open: \"submit\" or \"cancel\". */\n initialFocusElement?: InitialFocusElement;\n /** Radix Dialog `modal` prop — controls modal vs non-modal behaviour. */\n modal?: boolean;\n /** Radix Dialog `defaultOpen` prop. */\n defaultOpen?: boolean;\n}\n\nconst Alert = forwardRef<HTMLDivElement, AlertProps>(\n (\n {\n size = \"medium\",\n isOpen = false,\n isSubmitting = false,\n className,\n closeOnEsc = true,\n closeButton = true,\n backdropClassName,\n closeOnOutsideClick = true,\n onClose = () => {},\n onSubmit = () => {},\n title = \"\",\n message = \"\",\n submitButtonLabel: submitButtonLabelProp,\n cancelButtonLabel: cancelButtonLabelProp,\n hideCancelButton = false,\n style = \"danger\",\n initialFocusRef,\n initialFocusElement,\n modal,\n defaultOpen,\n ...otherProps\n },\n ref\n ) => {\n const { t } = useTranslation();\n const submitButtonLabel =\n submitButtonLabelProp ?? t(\"neetoatoms.alert.continue\", \"Continue\");\n const cancelButtonLabel =\n cancelButtonLabelProp ?? t(\"neetoatoms.alert.cancel\", \"Cancel\");\n const baseId = useId();\n const titleId = `alert-title-${baseId}`;\n const messageId = `alert-message-${baseId}`;\n const submitButtonRef = useRef<HTMLButtonElement>(null);\n const cancelButtonRef = useRef<HTMLButtonElement>(null);\n\n // Base UI consolidates the per-interaction dismiss callbacks into\n // onOpenChange's eventDetails, and takes initial focus as a ref.\n const handleOpenChange: React.ComponentProps<\n typeof Dialog\n >[\"onOpenChange\"] = (open, eventDetails) => {\n if (open) return;\n if (\n (eventDetails.reason === \"escape-key\" && !closeOnEsc) ||\n (eventDetails.reason === \"outside-press\" && !closeOnOutsideClick)\n ) {\n eventDetails.cancel();\n\n return;\n }\n onClose();\n };\n\n // Custom focus ref takes highest priority, then the named button\n const initialFocus =\n initialFocusRef ??\n (initialFocusElement === \"submit\"\n ? submitButtonRef\n : initialFocusElement === \"cancel\"\n ? cancelButtonRef\n : undefined);\n\n return (\n <Dialog\n open={isOpen}\n onOpenChange={handleOpenChange}\n modal={modal}\n defaultOpen={defaultOpen}\n >\n <DialogContent\n ref={ref}\n role=\"alertdialog\"\n aria-labelledby={title ? titleId : undefined}\n aria-describedby={message ? messageId : undefined}\n showCloseButton={closeButton}\n overlayClassName={backdropClassName}\n initialFocus={initialFocus ?? undefined}\n className={cn(SIZE_CLASS_MAP[size], className)}\n data-testid=\"alert-box\"\n {...otherProps}\n >\n <DialogHeader>\n <DialogTitle\n id={titleId}\n data-testid=\"alert-title\"\n className=\"text-2xl font-semibold\"\n >\n {title}\n </DialogTitle>\n {message && (\n <DialogDescription id={messageId} data-testid=\"alert-message\">\n {message}\n </DialogDescription>\n )}\n </DialogHeader>\n <DialogFooter>\n {!hideCancelButton && (\n <Button\n ref={cancelButtonRef}\n variant=\"outline\"\n label={cancelButtonLabel}\n onClick={onClose}\n data-testid=\"alert-cancel-button\"\n />\n )}\n <Button\n ref={submitButtonRef}\n variant={STYLE_VARIANT_MAP[style]}\n label={submitButtonLabel}\n loading={isSubmitting}\n disabled={isSubmitting || !isOpen}\n onClick={onSubmit}\n data-testid=\"alert-submit-button\"\n />\n </DialogFooter>\n </DialogContent>\n </Dialog>\n );\n }\n);\n\nAlert.displayName = \"Alert\";\n\nexport { Alert };\n"],"names":[],"mappings":"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"}
|
|
@@ -63,6 +63,7 @@ const Avatar = forwardRef(
|
|
|
63
63
|
ref,
|
|
64
64
|
size: primitiveSize,
|
|
65
65
|
className: cn(isXl && XL_CLASSES, className),
|
|
66
|
+
"data-testid": "nui-avatar",
|
|
66
67
|
...otherProps,
|
|
67
68
|
children: [
|
|
68
69
|
user?.imageUrl && /* @__PURE__ */ jsx(AvatarImage, { src: user.imageUrl, alt: user?.name ?? "" }),
|
|
@@ -76,7 +77,7 @@ const Avatar = forwardRef(
|
|
|
76
77
|
const side = SIDE_MAP[tooltipProps?.position ?? "auto"] ?? "bottom";
|
|
77
78
|
return /* @__PURE__ */ jsx(TooltipProvider, { delayDuration: 0, children: /* @__PURE__ */ jsxs(Tooltip, { children: [
|
|
78
79
|
/* @__PURE__ */ jsx(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsx("span", { className: "inline-flex", children: avatarElement }) }),
|
|
79
|
-
/* @__PURE__ */ jsx(TooltipContent, { side, children: tooltipContent })
|
|
80
|
+
/* @__PURE__ */ jsx(TooltipContent, { "data-testid": "tooltip-box", side, children: tooltipContent })
|
|
80
81
|
] }) });
|
|
81
82
|
}
|
|
82
83
|
return avatarElement;
|
|
@@ -89,4 +90,4 @@ const AvatarNamespace = Object.assign(Avatar, {
|
|
|
89
90
|
});
|
|
90
91
|
|
|
91
92
|
export { AvatarNamespace as A };
|
|
92
|
-
//# sourceMappingURL=Avatar-
|
|
93
|
+
//# sourceMappingURL=Avatar-ChF94Ken.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Avatar-ChF94Ken.js","sources":["../src/components/Avatar/constants.ts","../src/components/Avatar/utils.ts","../src/components/Avatar/Avatar.tsx"],"sourcesContent":["export const STATUS_COLOR_MAP: Record<string, string> = {\n online: \"bg-emerald-500 dark:bg-emerald-400\",\n idle: \"bg-amber-500 dark:bg-amber-400\",\n offline: \"bg-gray-400 dark:bg-gray-500\",\n};\n\nexport const SIDE_MAP: Record<string, \"top\" | \"right\" | \"bottom\" | \"left\"> = {\n top: \"top\",\n bottom: \"bottom\",\n left: \"left\",\n right: \"right\",\n auto: \"bottom\",\n};\n\nexport const XL_CLASSES =\n \"data-[size=lg]:size-16 [&>[data-slot=avatar-badge]]:size-4 [&>[data-slot=avatar-fallback]]:text-lg\";\n","import type { CSSProperties } from \"react\";\n\nexport function getInitials(name?: string): string {\n if (!name) return \"\";\n\n return name\n .split(/\\s+/)\n .slice(0, 2)\n .map(word => word.charAt(0).toUpperCase())\n .join(\"\");\n}\n\nfunction cyrb53(str: string, seed = 0): number {\n let h1 = 0xdeadbeef ^ seed;\n let h2 = 0x41c6ce57 ^ seed;\n for (let i = 0; i < str.length; i++) {\n const ch = str.charCodeAt(i);\n h1 = Math.imul(h1 ^ ch, 2654435761);\n h2 = Math.imul(h2 ^ ch, 1597334677);\n }\n h1 =\n Math.imul(h1 ^ (h1 >>> 16), 2246822507) ^\n Math.imul(h2 ^ (h2 >>> 13), 3266489909);\n h2 =\n Math.imul(h2 ^ (h2 >>> 16), 2246822507) ^\n Math.imul(h1 ^ (h1 >>> 13), 3266489909);\n return 4294967296 * (2097151 & h2) + (h1 >>> 0);\n}\n\nexport function getAvatarColorStyle(seed?: string): CSSProperties | undefined {\n if (!seed) return undefined;\n\n const hue = cyrb53(seed) % 360;\n\n return {\n backgroundColor: `oklch(var(--avatar-l) var(--avatar-c) ${hue})`,\n color: \"var(--avatar-fg)\",\n };\n}\n","import React, { forwardRef } from \"react\";\n\nimport { cn } from \"src/shadcn/lib/utils\";\nimport {\n Avatar as PrimitiveAvatar,\n AvatarImage,\n AvatarFallback,\n AvatarBadge,\n AvatarGroup,\n AvatarGroupCount,\n} from \"src/primitives/Avatar\";\nimport {\n Tooltip,\n TooltipContent,\n TooltipProvider,\n TooltipTrigger,\n} from \"src/primitives/Tooltip\";\n\nimport { STATUS_COLOR_MAP, SIDE_MAP, XL_CLASSES } from \"./constants\";\nimport { getAvatarColorStyle, getInitials } from \"./utils\";\n\ntype AvatarSize = \"sm\" | \"default\" | \"lg\" | \"xl\";\n\ninterface AvatarTooltipProps {\n /** Tooltip content. Defaults to user.name if showTooltip is true. */\n content?: React.ReactNode;\n /** Tooltip position. */\n position?: string;\n}\n\nexport interface AvatarProps extends Omit<\n React.ComponentProps<typeof PrimitiveAvatar>,\n \"size\"\n> {\n /** User data for the avatar. */\n user?: {\n id?: string | number;\n name?: string;\n email?: string;\n imageUrl?: string;\n };\n /** Status indicator displayed as a colored badge. */\n status?: \"online\" | \"idle\" | \"offline\" | null;\n /** Show the user's name in a tooltip on hover. */\n showTooltip?: boolean;\n /** Tooltip configuration. Overrides showTooltip content. */\n tooltipProps?: AvatarTooltipProps;\n /** Size of the avatar. */\n size?: AvatarSize;\n /** Additional CSS class names. */\n className?: string;\n}\n\nconst Avatar = forwardRef<HTMLSpanElement, AvatarProps>(\n (\n {\n user,\n status,\n showTooltip = false,\n tooltipProps,\n size = \"default\",\n className,\n ...otherProps\n },\n ref\n ) => {\n const initials = getInitials(user?.name);\n const isXl = size === \"xl\";\n const primitiveSize = isXl ? \"lg\" : size;\n const seed =\n user?.id != null\n ? String(user.id)\n : user?.email?.trim().toLowerCase() || user?.name;\n\n const avatarElement = (\n <PrimitiveAvatar\n ref={ref}\n size={primitiveSize}\n className={cn(isXl && XL_CLASSES, className)}\n data-testid=\"nui-avatar\"\n {...otherProps}\n >\n {user?.imageUrl && (\n <AvatarImage src={user.imageUrl} alt={user?.name ?? \"\"} />\n )}\n <AvatarFallback style={getAvatarColorStyle(seed)}>\n {initials}\n </AvatarFallback>\n {status && <AvatarBadge className={cn(STATUS_COLOR_MAP[status])} />}\n </PrimitiveAvatar>\n );\n\n const tooltipContent =\n tooltipProps?.content ?? (showTooltip ? user?.name : null);\n\n if (tooltipContent) {\n const side = SIDE_MAP[tooltipProps?.position ?? \"auto\"] ?? \"bottom\";\n\n return (\n <TooltipProvider delayDuration={0}>\n <Tooltip>\n <TooltipTrigger asChild>\n <span className=\"inline-flex\">{avatarElement}</span>\n </TooltipTrigger>\n <TooltipContent data-testid=\"tooltip-box\" side={side}>\n {tooltipContent}\n </TooltipContent>\n </Tooltip>\n </TooltipProvider>\n );\n }\n\n return avatarElement;\n }\n);\n\nAvatar.displayName = \"Avatar\";\n\nconst AvatarNamespace = Object.assign(Avatar, {\n Group: AvatarGroup,\n GroupCount: AvatarGroupCount,\n});\n\nexport { AvatarNamespace as Avatar };\n"],"names":["PrimitiveAvatar"],"mappings":"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"}
|
|
@@ -85,6 +85,7 @@ const Badge = forwardRef(
|
|
|
85
85
|
variant,
|
|
86
86
|
size,
|
|
87
87
|
shape,
|
|
88
|
+
"data-testid": "badge-container",
|
|
88
89
|
className: cn(
|
|
89
90
|
disabled && "opacity-50 pointer-events-none",
|
|
90
91
|
icon && iconPosition === "left" && SIZE_CONFIG[size].iconPl,
|
|
@@ -98,6 +99,7 @@ const Badge = forwardRef(
|
|
|
98
99
|
"span",
|
|
99
100
|
{
|
|
100
101
|
"aria-hidden": "true",
|
|
102
|
+
"data-testid": "badge-indicator",
|
|
101
103
|
className: cn(
|
|
102
104
|
"size-1.5 shrink-0 rounded-full",
|
|
103
105
|
INDICATOR_COLORS[indicator]
|
|
@@ -112,6 +114,7 @@ const Badge = forwardRef(
|
|
|
112
114
|
{
|
|
113
115
|
type: "button",
|
|
114
116
|
"aria-label": t("neetoatoms.badge.dismiss", "Dismiss"),
|
|
117
|
+
"data-testid": "badge-close-button",
|
|
115
118
|
onClick: onDismiss,
|
|
116
119
|
className: cn(
|
|
117
120
|
"inline-flex shrink-0 items-center justify-center rounded-full bg-current/15 transition-[background-color,opacity] hover:bg-current/25 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-1",
|
|
@@ -128,4 +131,4 @@ const Badge = forwardRef(
|
|
|
128
131
|
Badge.displayName = "Badge";
|
|
129
132
|
|
|
130
133
|
export { Badge as B };
|
|
131
|
-
//# sourceMappingURL=Badge-
|
|
134
|
+
//# sourceMappingURL=Badge-Bl5cyQ5Q.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Badge-Bl5cyQ5Q.js","sources":["../src/components/Badge/constants.ts","../src/components/Badge/Badge.tsx"],"sourcesContent":["import type { IndicatorVariant } from \"./Badge\";\n\nexport const SIZE_CONFIG = {\n sm: {\n iconPl: \"pl-1\",\n iconPr: \"pr-1\",\n dismissPr: \"pr-0.5\",\n btnSize: \"size-3\",\n iconSize: \"size-2\",\n },\n default: {\n iconPl: \"pl-1.5\",\n iconPr: \"pr-1.5\",\n dismissPr: \"pr-1\",\n btnSize: \"size-3.5\",\n iconSize: \"size-2.5\",\n },\n lg: {\n iconPl: \"pl-2\",\n iconPr: \"pr-2\",\n dismissPr: \"pr-1\",\n btnSize: \"size-4.5\",\n iconSize: \"size-3\",\n },\n};\n\nexport const INDICATOR_COLORS: Record<IndicatorVariant, string> = {\n default: \"bg-primary\",\n secondary: \"bg-muted-foreground\",\n destructive: \"bg-destructive\",\n blue: \"bg-blue-600\",\n green: \"bg-green-600\",\n amber: \"bg-amber-400\",\n red: \"bg-red-600\",\n purple: \"bg-purple-700\",\n pink: \"bg-pink-600\",\n teal: \"bg-teal-600\",\n gray: \"bg-gray-400\",\n};\n","import React, { forwardRef, type ReactNode } from \"react\";\n\nimport { X } from \"lucide-react\";\nimport { useTranslation } from \"react-i18next\";\n\nimport { cn } from \"src/shadcn/lib/utils\";\nimport { renderIcon, type IconProp } from \"src/shared/renderIcon\";\nimport { Badge as PrimitiveBadge } from \"src/primitives/Badge\";\n\nimport { SIZE_CONFIG, INDICATOR_COLORS } from \"./constants\";\n\ntype BadgeVariant =\n | \"default\"\n | \"secondary\"\n | \"destructive\"\n | \"outline\"\n | \"ghost\"\n | \"link\"\n | \"gray\"\n | \"gray-subtle\"\n | \"blue\"\n | \"blue-subtle\"\n | \"purple\"\n | \"purple-subtle\"\n | \"amber\"\n | \"amber-subtle\"\n | \"red\"\n | \"red-subtle\"\n | \"pink\"\n | \"pink-subtle\"\n | \"green\"\n | \"green-subtle\"\n | \"teal\"\n | \"teal-subtle\";\n\ntype BadgeSize = \"sm\" | \"default\" | \"lg\";\n\ntype BadgeShape = \"pill\" | \"rounded\";\n\nexport type IndicatorVariant =\n | \"default\"\n | \"secondary\"\n | \"destructive\"\n | \"blue\"\n | \"green\"\n | \"amber\"\n | \"red\"\n | \"purple\"\n | \"pink\"\n | \"teal\"\n | \"gray\";\n\nexport interface BadgeProps extends Omit<\n React.ComponentProps<\"span\">,\n \"children\"\n> {\n /** Visual variant of the badge. */\n variant?: BadgeVariant;\n /** Size of the badge. */\n size?: BadgeSize;\n /** Corner shape: `pill` (fully rounded, default) or `rounded` (4px). */\n shape?: BadgeShape;\n /** Text label rendered inside the badge. */\n label?: string;\n /** Icon component, element, or class-name string. */\n icon?: IconProp;\n /** Placement of the icon relative to the label. */\n iconPosition?: \"left\" | \"right\";\n /** Colored status indicator dot. */\n indicator?: IndicatorVariant;\n /** Callback when the badge is dismissed. Renders a dismiss button when provided. */\n onDismiss?: () => void;\n /** Disables the badge and hides the dismiss button. */\n disabled?: boolean;\n /** Render as a custom element (polymorphic via Radix Slot). */\n asChild?: boolean;\n /** Children rendered inside the badge (fallback for `label`). */\n children?: ReactNode;\n}\n\nconst Badge = forwardRef<HTMLSpanElement, BadgeProps>(\n (\n {\n variant = \"default\",\n size = \"default\",\n shape = \"pill\",\n label,\n icon,\n iconPosition = \"left\",\n indicator,\n onDismiss,\n disabled = false,\n className,\n asChild = false,\n children,\n ...otherProps\n },\n ref\n ) => {\n const { t } = useTranslation();\n\n if (asChild) {\n return (\n <PrimitiveBadge\n ref={ref}\n asChild\n variant={variant}\n size={size}\n shape={shape}\n className={className}\n {...otherProps}\n >\n {children}\n </PrimitiveBadge>\n );\n }\n\n const renderLabel = label || children;\n const iconElement = icon ? renderIcon(icon) : null;\n\n const hasDismiss = !!onDismiss && !disabled;\n\n return (\n <PrimitiveBadge\n ref={ref}\n variant={variant}\n size={size}\n shape={shape}\n data-testid=\"badge-container\"\n className={cn(\n disabled && \"opacity-50 pointer-events-none\",\n icon && iconPosition === \"left\" && SIZE_CONFIG[size].iconPl,\n icon && iconPosition === \"right\" && SIZE_CONFIG[size].iconPr,\n hasDismiss && SIZE_CONFIG[size].dismissPr,\n className\n )}\n {...otherProps}\n >\n {indicator && (\n <span\n aria-hidden=\"true\"\n data-testid=\"badge-indicator\"\n className={cn(\n \"size-1.5 shrink-0 rounded-full\",\n INDICATOR_COLORS[indicator]\n )}\n />\n )}\n {iconPosition === \"left\" && iconElement}\n {renderLabel}\n {iconPosition === \"right\" && iconElement}\n {onDismiss && !disabled && (\n <button\n type=\"button\"\n aria-label={t(\"neetoatoms.badge.dismiss\", \"Dismiss\")}\n data-testid=\"badge-close-button\"\n onClick={onDismiss}\n className={cn(\n \"inline-flex shrink-0 items-center justify-center rounded-full bg-current/15 transition-[background-color,opacity] hover:bg-current/25 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-1\",\n SIZE_CONFIG[size].btnSize\n )}\n >\n <X className={SIZE_CONFIG[size].iconSize} />\n </button>\n )}\n </PrimitiveBadge>\n );\n }\n);\n\nBadge.displayName = \"Badge\";\n\nexport { Badge };\n"],"names":["PrimitiveBadge"],"mappings":"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"}
|
|
@@ -203,7 +203,7 @@ const Button = forwardRef(
|
|
|
203
203
|
const triggerContent = isDisabled ? /* @__PURE__ */ jsx("span", { className: "inline-flex", children: buttonElement }) : buttonElement;
|
|
204
204
|
return /* @__PURE__ */ jsx(TooltipProvider, { children: /* @__PURE__ */ jsxs(Tooltip, { children: [
|
|
205
205
|
/* @__PURE__ */ jsx(TooltipTrigger, { asChild: true, children: triggerContent }),
|
|
206
|
-
/* @__PURE__ */ jsx(TooltipContent, { side, children: content })
|
|
206
|
+
/* @__PURE__ */ jsx(TooltipContent, { "data-testid": "tooltip-box", side, children: content })
|
|
207
207
|
] }) });
|
|
208
208
|
}
|
|
209
209
|
return /* @__PURE__ */ jsx(Fragment, { children: buttonElement });
|
|
@@ -212,4 +212,4 @@ const Button = forwardRef(
|
|
|
212
212
|
Button.displayName = "Button";
|
|
213
213
|
|
|
214
214
|
export { BUTTON_SIZES as B, BUTTON_VARIANTS as a, Button as b };
|
|
215
|
-
//# sourceMappingURL=Button-
|
|
215
|
+
//# sourceMappingURL=Button-C4c_dj-f.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Button-DV9xCqlc.js","sources":["../src/components/Button/constants.ts","../src/components/Button/Button.tsx"],"sourcesContent":["type ButtonSize =\n | \"default\"\n | \"xs\"\n | \"sm\"\n | \"lg\"\n | \"icon\"\n | \"icon-xs\"\n | \"icon-sm\"\n | \"icon-lg\";\n\nexport const ICON_ONLY_SIZE_MAP: Partial<Record<ButtonSize, ButtonSize>> = {\n xs: \"icon-xs\",\n sm: \"icon-sm\",\n default: \"icon\",\n lg: \"icon-lg\",\n};\n\nexport const SPINNER_SIZE_MAP: Record<ButtonSize, string> = {\n xs: \"size-3\",\n sm: \"size-3.5\",\n default: \"size-3.5\",\n lg: \"size-4\",\n icon: \"size-3.5\",\n \"icon-xs\": \"size-3\",\n \"icon-sm\": \"size-3.5\",\n \"icon-lg\": \"size-4\",\n};\n\n// Map NeetoUI tooltip `position` values to Radix side values\nexport const TOOLTIP_SIDE_MAP: Record<\n string,\n \"top\" | \"right\" | \"bottom\" | \"left\"\n> = {\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};\n","import React, { forwardRef, type ReactNode, type MouseEvent } from \"react\";\n\nimport { Link } from \"react-router-dom\";\nimport { cn } from \"src/shadcn/lib/utils\";\nimport { renderIcon, type IconProp } from \"src/shared/renderIcon\";\nimport { Button as PrimitiveButton } from \"src/primitives/Button\";\nimport { Spinner } from \"src/primitives/Spinner\";\nimport {\n Tooltip,\n TooltipContent,\n TooltipProvider,\n TooltipTrigger,\n} from \"src/primitives/Tooltip\";\n\nimport {\n ICON_ONLY_SIZE_MAP,\n SPINNER_SIZE_MAP,\n TOOLTIP_SIDE_MAP,\n} from \"./constants\";\n\nexport const BUTTON_VARIANTS = [\n \"default\",\n \"secondary\",\n \"destructive\",\n \"destructive-soft\",\n \"outline\",\n \"ghost\",\n \"link\",\n] as const;\n\nexport const BUTTON_SIZES = [\n \"default\",\n \"xs\",\n \"sm\",\n \"lg\",\n \"icon\",\n \"icon-xs\",\n \"icon-sm\",\n \"icon-lg\",\n] as const;\n\nexport type ButtonVariant = (typeof BUTTON_VARIANTS)[number];\nexport type ButtonSize = (typeof BUTTON_SIZES)[number];\n\ntype IconPosition = \"left\" | \"right\";\n\ntype ButtonType = \"button\" | \"reset\" | \"submit\";\n\ninterface ButtonTooltipProps {\n content?: ReactNode;\n position?: string;\n disabled?: boolean;\n}\n\nexport interface ButtonProps extends Omit<\n React.ButtonHTMLAttributes<HTMLButtonElement>,\n \"type\" | \"disabled\" | \"className\" | \"children\" | \"onClick\"\n> {\n /** Visual variant of the button. */\n variant?: ButtonVariant;\n /** Size of the button. */\n size?: ButtonSize;\n /** Text label rendered inside the button. */\n label?: string;\n /** Icon component, element, or class-name string. */\n icon?: IconProp;\n /** Placement of the icon relative to the label. */\n iconPosition?: IconPosition;\n /** Show a loading spinner and prevent clicks. */\n loading?: boolean;\n /** Disable the button. */\n disabled?: boolean;\n /** Click handler. */\n onClick?: (e: MouseEvent<HTMLButtonElement | HTMLAnchorElement>) => void;\n /** Internal route (react-router `Link`). */\n to?: string;\n /** External URL (renders an anchor tag). */\n href?: string;\n /** HTML button type attribute. */\n type?: ButtonType;\n /** Stretch the button to fill its container. */\n fullWidth?: boolean;\n /** Additional CSS class names. */\n className?: string;\n /** Props forwarded to a wrapping Tooltip. */\n tooltipProps?: ButtonTooltipProps | null;\n /** Render as a custom element (polymorphic). */\n asChild?: boolean;\n /**\n * Content rendered after the label and any right-side icon (e.g., a trailing\n * chevron, badge, or shortcut indicator). Auto-wrapped with\n * `data-icon=\"inline-end\"` so the button's compact end-padding kicks in.\n */\n trailing?: ReactNode;\n /** Children rendered inside the button (fallback for `label`). */\n children?: ReactNode;\n}\n\nconst Button = forwardRef<HTMLButtonElement, ButtonProps>(\n (\n {\n variant = \"default\",\n size = \"default\",\n label,\n icon = null,\n iconPosition = \"right\",\n loading = false,\n disabled = false,\n onClick,\n to,\n href,\n type = \"button\",\n fullWidth = false,\n className,\n tooltipProps = null,\n asChild = false,\n trailing,\n children,\n ...otherProps\n },\n ref\n ) => {\n const isIconSize = size.startsWith(\"icon\");\n const renderLabel = isIconSize ? null : label || children;\n const isIconOnly = !renderLabel && !!icon;\n const resolvedSize = isIconOnly ? (ICON_ONLY_SIZE_MAP[size] ?? size) : size;\n\n // --- Loading / disabled state ---\n const isDisabled = disabled || loading;\n\n // --- Click handler ---\n const handleClick = (\n e: MouseEvent<HTMLButtonElement | HTMLAnchorElement>\n ) => {\n if (loading || disabled) {\n e.preventDefault();\n return;\n }\n onClick?.(e);\n };\n\n // --- Icon elements ---\n const iconElement = icon ? renderIcon(icon) : null;\n\n // --- Build the inner content ---\n const buttonContent = (\n <>\n {loading && (\n <span className=\"absolute inset-0 flex items-center justify-center\">\n <Spinner\n aria-hidden=\"true\"\n className={SPINNER_SIZE_MAP[resolvedSize]}\n />\n </span>\n )}\n <span\n className={cn(\n \"inline-flex items-center gap-1.5\",\n loading && \"invisible\"\n )}\n >\n {iconPosition === \"left\" && iconElement && (\n <span data-icon=\"inline-start\">{iconElement}</span>\n )}\n {renderLabel && <span>{renderLabel}</span>}\n {iconPosition === \"right\" && iconElement && (\n <span data-icon=\"inline-end\">{iconElement}</span>\n )}\n {trailing && <span data-icon=\"inline-end\">{trailing}</span>}\n </span>\n </>\n );\n\n // --- Merged className ---\n const mergedClassName = cn(\n fullWidth && \"w-full\",\n loading && \"relative pointer-events-none\",\n variant === \"link\" && \"[table_&]:max-w-full [table_&]:whitespace-normal\",\n className\n );\n\n // --- Determine render element ---\n let buttonElement: ReactNode;\n\n if (asChild) {\n buttonElement = (\n <PrimitiveButton\n ref={ref}\n asChild\n variant={variant}\n size={resolvedSize}\n className={mergedClassName}\n disabled={isDisabled}\n {...otherProps}\n >\n {children}\n </PrimitiveButton>\n );\n } else if (!disabled && to) {\n buttonElement = (\n <PrimitiveButton\n asChild\n variant={variant}\n size={resolvedSize}\n className={mergedClassName}\n disabled={isDisabled}\n {...otherProps}\n >\n <Link\n innerRef={ref as React.Ref<HTMLAnchorElement>}\n to={to}\n onClick={handleClick}\n >\n {buttonContent}\n </Link>\n </PrimitiveButton>\n );\n } else if (!disabled && href) {\n buttonElement = (\n <PrimitiveButton\n asChild\n variant={variant}\n size={resolvedSize}\n className={mergedClassName}\n disabled={isDisabled}\n {...otherProps}\n >\n <a\n ref={ref as React.Ref<HTMLAnchorElement>}\n href={href}\n onClick={handleClick}\n >\n {buttonContent}\n </a>\n </PrimitiveButton>\n );\n } else {\n buttonElement = (\n <PrimitiveButton\n ref={ref}\n type={type}\n variant={variant}\n size={resolvedSize}\n className={mergedClassName}\n disabled={isDisabled}\n onClick={handleClick}\n {...otherProps}\n >\n {buttonContent}\n </PrimitiveButton>\n );\n }\n\n // --- Tooltip wrapper ---\n if (tooltipProps) {\n const { content, position, disabled: tooltipDisabled } = tooltipProps;\n\n if (tooltipDisabled || !content) {\n return <>{buttonElement}</>;\n }\n\n const side = position ? TOOLTIP_SIDE_MAP[position] : undefined;\n\n // Wrap disabled buttons in a span so tooltip still triggers\n const triggerContent = isDisabled ? (\n <span className=\"inline-flex\">{buttonElement}</span>\n ) : (\n buttonElement\n );\n\n return (\n <TooltipProvider>\n <Tooltip>\n <TooltipTrigger asChild>{triggerContent}</TooltipTrigger>\n <TooltipContent side={side}>{content}</TooltipContent>\n </Tooltip>\n </TooltipProvider>\n );\n }\n\n return <>{buttonElement}</>;\n }\n);\n\nButton.displayName = \"Button\";\n\nexport { Button };\n"],"names":["PrimitiveButton"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Button-C4c_dj-f.js","sources":["../src/components/Button/constants.ts","../src/components/Button/Button.tsx"],"sourcesContent":["type ButtonSize =\n | \"default\"\n | \"xs\"\n | \"sm\"\n | \"lg\"\n | \"icon\"\n | \"icon-xs\"\n | \"icon-sm\"\n | \"icon-lg\";\n\nexport const ICON_ONLY_SIZE_MAP: Partial<Record<ButtonSize, ButtonSize>> = {\n xs: \"icon-xs\",\n sm: \"icon-sm\",\n default: \"icon\",\n lg: \"icon-lg\",\n};\n\nexport const SPINNER_SIZE_MAP: Record<ButtonSize, string> = {\n xs: \"size-3\",\n sm: \"size-3.5\",\n default: \"size-3.5\",\n lg: \"size-4\",\n icon: \"size-3.5\",\n \"icon-xs\": \"size-3\",\n \"icon-sm\": \"size-3.5\",\n \"icon-lg\": \"size-4\",\n};\n\n// Map NeetoUI tooltip `position` values to Radix side values\nexport const TOOLTIP_SIDE_MAP: Record<\n string,\n \"top\" | \"right\" | \"bottom\" | \"left\"\n> = {\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};\n","import React, { forwardRef, type ReactNode, type MouseEvent } from \"react\";\n\nimport { Link } from \"react-router-dom\";\nimport { cn } from \"src/shadcn/lib/utils\";\nimport { renderIcon, type IconProp } from \"src/shared/renderIcon\";\nimport { Button as PrimitiveButton } from \"src/primitives/Button\";\nimport { Spinner } from \"src/primitives/Spinner\";\nimport {\n Tooltip,\n TooltipContent,\n TooltipProvider,\n TooltipTrigger,\n} from \"src/primitives/Tooltip\";\n\nimport {\n ICON_ONLY_SIZE_MAP,\n SPINNER_SIZE_MAP,\n TOOLTIP_SIDE_MAP,\n} from \"./constants\";\n\nexport const BUTTON_VARIANTS = [\n \"default\",\n \"secondary\",\n \"destructive\",\n \"destructive-soft\",\n \"outline\",\n \"ghost\",\n \"link\",\n] as const;\n\nexport const BUTTON_SIZES = [\n \"default\",\n \"xs\",\n \"sm\",\n \"lg\",\n \"icon\",\n \"icon-xs\",\n \"icon-sm\",\n \"icon-lg\",\n] as const;\n\nexport type ButtonVariant = (typeof BUTTON_VARIANTS)[number];\nexport type ButtonSize = (typeof BUTTON_SIZES)[number];\n\ntype IconPosition = \"left\" | \"right\";\n\ntype ButtonType = \"button\" | \"reset\" | \"submit\";\n\ninterface ButtonTooltipProps {\n content?: ReactNode;\n position?: string;\n disabled?: boolean;\n}\n\nexport interface ButtonProps extends Omit<\n React.ButtonHTMLAttributes<HTMLButtonElement>,\n \"type\" | \"disabled\" | \"className\" | \"children\" | \"onClick\"\n> {\n /** Visual variant of the button. */\n variant?: ButtonVariant;\n /** Size of the button. */\n size?: ButtonSize;\n /** Text label rendered inside the button. */\n label?: string;\n /** Icon component, element, or class-name string. */\n icon?: IconProp;\n /** Placement of the icon relative to the label. */\n iconPosition?: IconPosition;\n /** Show a loading spinner and prevent clicks. */\n loading?: boolean;\n /** Disable the button. */\n disabled?: boolean;\n /** Click handler. */\n onClick?: (e: MouseEvent<HTMLButtonElement | HTMLAnchorElement>) => void;\n /** Internal route (react-router `Link`). */\n to?: string;\n /** External URL (renders an anchor tag). */\n href?: string;\n /** HTML button type attribute. */\n type?: ButtonType;\n /** Stretch the button to fill its container. */\n fullWidth?: boolean;\n /** Additional CSS class names. */\n className?: string;\n /** Props forwarded to a wrapping Tooltip. */\n tooltipProps?: ButtonTooltipProps | null;\n /** Render as a custom element (polymorphic). */\n asChild?: boolean;\n /**\n * Content rendered after the label and any right-side icon (e.g., a trailing\n * chevron, badge, or shortcut indicator). Auto-wrapped with\n * `data-icon=\"inline-end\"` so the button's compact end-padding kicks in.\n */\n trailing?: ReactNode;\n /** Children rendered inside the button (fallback for `label`). */\n children?: ReactNode;\n}\n\nconst Button = forwardRef<HTMLButtonElement, ButtonProps>(\n (\n {\n variant = \"default\",\n size = \"default\",\n label,\n icon = null,\n iconPosition = \"right\",\n loading = false,\n disabled = false,\n onClick,\n to,\n href,\n type = \"button\",\n fullWidth = false,\n className,\n tooltipProps = null,\n asChild = false,\n trailing,\n children,\n ...otherProps\n },\n ref\n ) => {\n const isIconSize = size.startsWith(\"icon\");\n const renderLabel = isIconSize ? null : label || children;\n const isIconOnly = !renderLabel && !!icon;\n const resolvedSize = isIconOnly ? (ICON_ONLY_SIZE_MAP[size] ?? size) : size;\n\n // --- Loading / disabled state ---\n const isDisabled = disabled || loading;\n\n // --- Click handler ---\n const handleClick = (\n e: MouseEvent<HTMLButtonElement | HTMLAnchorElement>\n ) => {\n if (loading || disabled) {\n e.preventDefault();\n return;\n }\n onClick?.(e);\n };\n\n // --- Icon elements ---\n const iconElement = icon ? renderIcon(icon) : null;\n\n // --- Build the inner content ---\n const buttonContent = (\n <>\n {loading && (\n <span className=\"absolute inset-0 flex items-center justify-center\">\n <Spinner\n aria-hidden=\"true\"\n className={SPINNER_SIZE_MAP[resolvedSize]}\n />\n </span>\n )}\n <span\n className={cn(\n \"inline-flex items-center gap-1.5\",\n loading && \"invisible\"\n )}\n >\n {iconPosition === \"left\" && iconElement && (\n <span data-icon=\"inline-start\">{iconElement}</span>\n )}\n {renderLabel && <span>{renderLabel}</span>}\n {iconPosition === \"right\" && iconElement && (\n <span data-icon=\"inline-end\">{iconElement}</span>\n )}\n {trailing && <span data-icon=\"inline-end\">{trailing}</span>}\n </span>\n </>\n );\n\n // --- Merged className ---\n const mergedClassName = cn(\n fullWidth && \"w-full\",\n loading && \"relative pointer-events-none\",\n variant === \"link\" && \"[table_&]:max-w-full [table_&]:whitespace-normal\",\n className\n );\n\n // --- Determine render element ---\n let buttonElement: ReactNode;\n\n if (asChild) {\n buttonElement = (\n <PrimitiveButton\n ref={ref}\n asChild\n variant={variant}\n size={resolvedSize}\n className={mergedClassName}\n disabled={isDisabled}\n {...otherProps}\n >\n {children}\n </PrimitiveButton>\n );\n } else if (!disabled && to) {\n buttonElement = (\n <PrimitiveButton\n asChild\n variant={variant}\n size={resolvedSize}\n className={mergedClassName}\n disabled={isDisabled}\n {...otherProps}\n >\n <Link\n innerRef={ref as React.Ref<HTMLAnchorElement>}\n to={to}\n onClick={handleClick}\n >\n {buttonContent}\n </Link>\n </PrimitiveButton>\n );\n } else if (!disabled && href) {\n buttonElement = (\n <PrimitiveButton\n asChild\n variant={variant}\n size={resolvedSize}\n className={mergedClassName}\n disabled={isDisabled}\n {...otherProps}\n >\n <a\n ref={ref as React.Ref<HTMLAnchorElement>}\n href={href}\n onClick={handleClick}\n >\n {buttonContent}\n </a>\n </PrimitiveButton>\n );\n } else {\n buttonElement = (\n <PrimitiveButton\n ref={ref}\n type={type}\n variant={variant}\n size={resolvedSize}\n className={mergedClassName}\n disabled={isDisabled}\n onClick={handleClick}\n {...otherProps}\n >\n {buttonContent}\n </PrimitiveButton>\n );\n }\n\n // --- Tooltip wrapper ---\n if (tooltipProps) {\n const { content, position, disabled: tooltipDisabled } = tooltipProps;\n\n if (tooltipDisabled || !content) {\n return <>{buttonElement}</>;\n }\n\n const side = position ? TOOLTIP_SIDE_MAP[position] : undefined;\n\n // Wrap disabled buttons in a span so tooltip still triggers\n const triggerContent = isDisabled ? (\n <span className=\"inline-flex\">{buttonElement}</span>\n ) : (\n buttonElement\n );\n\n return (\n <TooltipProvider>\n <Tooltip>\n <TooltipTrigger asChild>{triggerContent}</TooltipTrigger>\n <TooltipContent data-testid=\"tooltip-box\" side={side}>\n {content}\n </TooltipContent>\n </Tooltip>\n </TooltipProvider>\n );\n }\n\n return <>{buttonElement}</>;\n }\n);\n\nButton.displayName = \"Button\";\n\nexport { Button };\n"],"names":["PrimitiveButton"],"mappings":"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"}
|
|
@@ -64,6 +64,7 @@ const Callout = forwardRef(
|
|
|
64
64
|
{
|
|
65
65
|
ref,
|
|
66
66
|
className: cn(config.container, className),
|
|
67
|
+
"data-testid": "callout-element",
|
|
67
68
|
...otherProps,
|
|
68
69
|
children: [
|
|
69
70
|
renderIcon(resolvedIcon, "size-4 shrink-0"),
|
|
@@ -77,4 +78,4 @@ const Callout = forwardRef(
|
|
|
77
78
|
Callout.displayName = "Callout";
|
|
78
79
|
|
|
79
80
|
export { Callout as C };
|
|
80
|
-
//# sourceMappingURL=Callout-
|
|
81
|
+
//# sourceMappingURL=Callout-DJGi3MQR.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Callout-
|
|
1
|
+
{"version":3,"file":"Callout-DJGi3MQR.js","sources":["../node_modules/lucide-react/dist/esm/icons/circle-alert.js","../node_modules/lucide-react/dist/esm/icons/circle-check-big.js","../src/components/Callout/constants.ts","../src/components/Callout/Callout.tsx"],"sourcesContent":["/**\n * @license lucide-react v0.577.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"circle\", { cx: \"12\", cy: \"12\", r: \"10\", key: \"1mglay\" }],\n [\"line\", { x1: \"12\", x2: \"12\", y1: \"8\", y2: \"12\", key: \"1pkeuh\" }],\n [\"line\", { x1: \"12\", x2: \"12.01\", y1: \"16\", y2: \"16\", key: \"4dfq90\" }]\n];\nconst CircleAlert = createLucideIcon(\"circle-alert\", __iconNode);\n\nexport { __iconNode, CircleAlert as default };\n//# sourceMappingURL=circle-alert.js.map\n","/**\n * @license lucide-react v0.577.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M21.801 10A10 10 0 1 1 17 3.335\", key: \"yps3ct\" }],\n [\"path\", { d: \"m9 11 3 3L22 4\", key: \"1pflzl\" }]\n];\nconst CircleCheckBig = createLucideIcon(\"circle-check-big\", __iconNode);\n\nexport { __iconNode, CircleCheckBig as default };\n//# sourceMappingURL=circle-check-big.js.map\n","import React from \"react\";\n\nimport {\n InfoIcon,\n AlertTriangleIcon,\n AlertCircleIcon,\n CheckCircleIcon,\n} from \"lucide-react\";\n\nimport type { CalloutVariant } from \"./Callout\";\n\nexport const VARIANT_CONFIG: Record<\n CalloutVariant,\n {\n container: string;\n icon: React.ComponentType<{ className?: string }>;\n }\n> = {\n info: {\n container: \"border border-info-border bg-info text-info-foreground\",\n icon: InfoIcon,\n },\n warning: {\n container:\n \"border border-warning-border bg-warning text-warning-foreground\",\n icon: AlertTriangleIcon,\n },\n danger: {\n container: \"border border-error-border bg-error text-error-foreground\",\n icon: AlertCircleIcon,\n },\n success: {\n container:\n \"border border-success-border bg-success text-success-foreground\",\n icon: CheckCircleIcon,\n },\n};\n","import React, { forwardRef } from \"react\";\n\nimport {\n Alert as PrimitiveAlert,\n AlertTitle,\n AlertDescription,\n} from \"src/primitives/Alert\";\nimport { cn } from \"src/shadcn/lib/utils\";\nimport { renderIcon, type IconProp } from \"src/shared/renderIcon\";\n\nimport { VARIANT_CONFIG } from \"./constants\";\n\nexport type CalloutVariant = \"info\" | \"warning\" | \"danger\" | \"success\";\n\ntype PrimitiveAlertProps = React.ComponentProps<typeof PrimitiveAlert>;\n\nexport interface CalloutProps extends Omit<PrimitiveAlertProps, \"variant\"> {\n /** Visual style of the callout. */\n variant?: CalloutVariant;\n /** Custom icon. Defaults to a variant-specific icon. */\n icon?: IconProp;\n /** Optional title rendered as AlertTitle. */\n title?: string;\n /** Content rendered as AlertDescription. */\n children?: React.ReactNode;\n}\n\nconst Callout = forwardRef<HTMLDivElement, CalloutProps>(\n (\n { variant = \"info\", icon, title, children, className, ...otherProps },\n ref\n ) => {\n const config = VARIANT_CONFIG[variant];\n const resolvedIcon = icon ?? config.icon;\n\n return (\n <PrimitiveAlert\n ref={ref}\n className={cn(config.container, className)}\n data-testid=\"callout-element\"\n {...otherProps}\n >\n {renderIcon(resolvedIcon, \"size-4 shrink-0\")}\n {title && <AlertTitle className=\"font-semibold\">{title}</AlertTitle>}\n {children && (\n <AlertDescription className=\"text-foreground\">\n {children}\n </AlertDescription>\n )}\n </PrimitiveAlert>\n );\n }\n);\n\nCallout.displayName = \"Callout\";\n\nexport { Callout };\n"],"names":["__iconNode","InfoIcon","AlertTriangleIcon","AlertCircleIcon","CheckCircleIcon","PrimitiveAlert"],"mappings":";;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;;;AAIA,MAAMA,YAAU,GAAG;AACnB,EAAE,CAAC,QAAQ,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC;AAC5D,EAAE,CAAC,MAAM,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC;AACpE,EAAE,CAAC,MAAM,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,QAAQ,EAAE;AACvE,CAAC;AACD,MAAM,WAAW,GAAG,gBAAgB,CAAC,cAAc,EAAEA,YAAU,CAAC;;ACdhE;AACA;AACA;AACA;AACA;AACA;;;AAIA,MAAM,UAAU,GAAG;AACnB,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,iCAAiC,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC;AACnE,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,gBAAgB,EAAE,GAAG,EAAE,QAAQ,EAAE;AACjD,CAAC;AACD,MAAM,cAAc,GAAG,gBAAgB,CAAC,kBAAkB,EAAE,UAAU,CAAC;;ACFhE,MAAM,cAAA,GAMT;AAAA,EACF,IAAA,EAAM;AAAA,IACJ,SAAA,EAAW,wDAAA;AAAA,IACX,IAAA,EAAMC;AAAA,GACR;AAAA,EACA,OAAA,EAAS;AAAA,IACP,SAAA,EACE,iEAAA;AAAA,IACF,IAAA,EAAMC;AAAA,GACR;AAAA,EACA,MAAA,EAAQ;AAAA,IACN,SAAA,EAAW,2DAAA;AAAA,IACX,IAAA,EAAMC;AAAA,GACR;AAAA,EACA,OAAA,EAAS;AAAA,IACP,SAAA,EACE,iEAAA;AAAA,IACF,IAAA,EAAMC;AAAA;AAEV,CAAA;;ACTA,MAAM,OAAA,GAAU,UAAA;AAAA,EACd,CACE,EAAE,OAAA,GAAU,MAAA,EAAQ,IAAA,EAAM,KAAA,EAAO,QAAA,EAAU,SAAA,EAAW,GAAG,UAAA,EAAW,EACpE,GAAA,KACG;AACH,IAAA,MAAM,MAAA,GAAS,eAAe,OAAO,CAAA;AACrC,IAAA,MAAM,YAAA,GAAe,QAAQ,MAAA,CAAO,IAAA;AAEpC,IAAA,uBACE,IAAA;AAAA,MAACC,KAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,SAAA,EAAW,EAAA,CAAG,MAAA,CAAO,SAAA,EAAW,SAAS,CAAA;AAAA,QACzC,aAAA,EAAY,iBAAA;AAAA,QACX,GAAG,UAAA;AAAA,QAEH,QAAA,EAAA;AAAA,UAAA,UAAA,CAAW,cAAc,iBAAiB,CAAA;AAAA,UAC1C,KAAA,oBAAS,GAAA,CAAC,UAAA,EAAA,EAAW,SAAA,EAAU,iBAAiB,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,UACtD,QAAA,oBACC,GAAA,CAAC,gBAAA,EAAA,EAAiB,SAAA,EAAU,mBACzB,QAAA,EACH;AAAA;AAAA;AAAA,KAEJ;AAAA,EAEJ;AACF;AAEA,OAAA,CAAQ,WAAA,GAAc,SAAA;;;;","x_google_ignoreList":[0,1]}
|
|
@@ -32,6 +32,7 @@ const Checkbox = forwardRef(
|
|
|
32
32
|
"aria-required": required || void 0,
|
|
33
33
|
"aria-describedby": ariaDescribedBy,
|
|
34
34
|
className,
|
|
35
|
+
"data-testid": "nui-checkbox-container",
|
|
35
36
|
...otherProps
|
|
36
37
|
}
|
|
37
38
|
);
|
|
@@ -42,6 +43,7 @@ const Checkbox = forwardRef(
|
|
|
42
43
|
className: cn("flex flex-col gap-1", className),
|
|
43
44
|
"data-disabled": disabled || void 0,
|
|
44
45
|
"data-invalid": !!error || void 0,
|
|
46
|
+
"data-testid": "nui-checkbox-container",
|
|
45
47
|
children: [
|
|
46
48
|
/* @__PURE__ */ jsxs(Field, { orientation: "horizontal", children: [
|
|
47
49
|
/* @__PURE__ */ jsx(
|
|
@@ -64,7 +66,7 @@ const Checkbox = forwardRef(
|
|
|
64
66
|
helpText && /* @__PURE__ */ jsx(FieldDescription, { id: helpTextId, children: helpText })
|
|
65
67
|
] })
|
|
66
68
|
] }),
|
|
67
|
-
error && /* @__PURE__ */ jsx(FieldError, { id: errorId, children: error })
|
|
69
|
+
error && /* @__PURE__ */ jsx(FieldError, { "data-testid": "input-error", id: errorId, children: error })
|
|
68
70
|
]
|
|
69
71
|
}
|
|
70
72
|
);
|
|
@@ -73,4 +75,4 @@ const Checkbox = forwardRef(
|
|
|
73
75
|
Checkbox.displayName = "Checkbox";
|
|
74
76
|
|
|
75
77
|
export { Checkbox as C };
|
|
76
|
-
//# sourceMappingURL=Checkbox-
|
|
78
|
+
//# sourceMappingURL=Checkbox-DiAngQvO.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Checkbox-DiAngQvO.js","sources":["../src/components/Checkbox/Checkbox.tsx"],"sourcesContent":["import React, { forwardRef, useId } from \"react\";\n\nimport { cn } from \"src/shadcn/lib/utils\";\nimport { Checkbox as PrimitiveCheckbox } from \"src/primitives/Checkbox\";\nimport {\n Field,\n FieldContent,\n FieldLabel,\n FieldDescription,\n FieldError,\n} from \"src/primitives/Field\";\n\nexport interface CheckboxProps extends React.ComponentProps<\n typeof PrimitiveCheckbox\n> {\n /** Text displayed next to the checkbox. */\n label?: string;\n /** Error message displayed below the checkbox. */\n error?: string;\n /** Helper text displayed below the label. Accepts string or ReactNode. */\n helpText?: React.ReactNode;\n /** Shows a required indicator next to the label. */\n required?: boolean;\n /** Additional class name for the outermost wrapper. */\n className?: string;\n /** Props forwarded to the Label element. */\n labelProps?: React.ComponentProps<typeof FieldLabel>;\n}\n\nconst Checkbox = forwardRef<\n React.ComponentRef<typeof PrimitiveCheckbox>,\n CheckboxProps\n>(\n (\n {\n label,\n error,\n helpText,\n required = false,\n disabled = false,\n className,\n labelProps,\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 const ariaDescribedBy =\n [error ? errorId : null, helpText ? helpTextId : null]\n .filter(Boolean)\n .join(\" \") || undefined;\n\n const hasField = !!(label || error || helpText);\n\n if (!hasField) {\n return (\n <PrimitiveCheckbox\n ref={ref}\n id={id}\n disabled={disabled}\n aria-invalid={!!error || undefined}\n aria-required={required || undefined}\n aria-describedby={ariaDescribedBy}\n className={className}\n data-testid=\"nui-checkbox-container\"\n {...otherProps}\n />\n );\n }\n\n return (\n <div\n className={cn(\"flex flex-col gap-1\", className)}\n data-disabled={disabled || undefined}\n data-invalid={!!error || undefined}\n data-testid=\"nui-checkbox-container\"\n >\n <Field orientation=\"horizontal\">\n <PrimitiveCheckbox\n ref={ref}\n id={id}\n disabled={disabled}\n aria-invalid={!!error || undefined}\n aria-required={required || undefined}\n aria-describedby={ariaDescribedBy}\n {...otherProps}\n />\n <FieldContent>\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 {helpText && (\n <FieldDescription id={helpTextId}>{helpText}</FieldDescription>\n )}\n </FieldContent>\n </Field>\n {error && (\n <FieldError data-testid=\"input-error\" id={errorId}>\n {error}\n </FieldError>\n )}\n </div>\n );\n }\n);\n\nCheckbox.displayName = \"Checkbox\";\n\nexport { Checkbox };\n"],"names":["PrimitiveCheckbox"],"mappings":";;;;;;AA6BA,MAAM,QAAA,GAAW,UAAA;AAAA,EAIf,CACE;AAAA,IACE,KAAA;AAAA,IACA,KAAA;AAAA,IACA,QAAA;AAAA,IACA,QAAA,GAAW,KAAA;AAAA,IACX,QAAA,GAAW,KAAA;AAAA,IACX,SAAA;AAAA,IACA,UAAA;AAAA,IACA,GAAG;AAAA,KAEL,GAAA,KACG;AACH,IAAA,MAAM,cAAc,KAAA,EAAM;AAC1B,IAAA,MAAM,EAAA,GAAK,WAAW,EAAA,IAAM,WAAA;AAC5B,IAAA,MAAM,OAAA,GAAU,SAAS,EAAE,CAAA,CAAA;AAC3B,IAAA,MAAM,UAAA,GAAa,YAAY,EAAE,CAAA,CAAA;AAEjC,IAAA,MAAM,eAAA,GACJ,CAAC,KAAA,GAAQ,OAAA,GAAU,MAAM,QAAA,GAAW,UAAA,GAAa,IAAI,CAAA,CAClD,MAAA,CAAO,OAAO,CAAA,CACd,IAAA,CAAK,GAAG,CAAA,IAAK,MAAA;AAElB,IAAA,MAAM,QAAA,GAAW,CAAC,EAAE,KAAA,IAAS,KAAA,IAAS,QAAA,CAAA;AAEtC,IAAA,IAAI,CAAC,QAAA,EAAU;AACb,MAAA,uBACE,GAAA;AAAA,QAACA,UAAA;AAAA,QAAA;AAAA,UACC,GAAA;AAAA,UACA,EAAA;AAAA,UACA,QAAA;AAAA,UACA,cAAA,EAAc,CAAC,CAAC,KAAA,IAAS,MAAA;AAAA,UACzB,iBAAe,QAAA,IAAY,MAAA;AAAA,UAC3B,kBAAA,EAAkB,eAAA;AAAA,UAClB,SAAA;AAAA,UACA,aAAA,EAAY,wBAAA;AAAA,UACX,GAAG;AAAA;AAAA,OACN;AAAA,IAEJ;AAEA,IAAA,uBACE,IAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAW,EAAA,CAAG,qBAAA,EAAuB,SAAS,CAAA;AAAA,QAC9C,iBAAe,QAAA,IAAY,MAAA;AAAA,QAC3B,cAAA,EAAc,CAAC,CAAC,KAAA,IAAS,MAAA;AAAA,QACzB,aAAA,EAAY,wBAAA;AAAA,QAEZ,QAAA,EAAA;AAAA,0BAAA,IAAA,CAAC,KAAA,EAAA,EAAM,aAAY,YAAA,EACjB,QAAA,EAAA;AAAA,4BAAA,GAAA;AAAA,cAACA,UAAA;AAAA,cAAA;AAAA,gBACC,GAAA;AAAA,gBACA,EAAA;AAAA,gBACA,QAAA;AAAA,gBACA,cAAA,EAAc,CAAC,CAAC,KAAA,IAAS,MAAA;AAAA,gBACzB,iBAAe,QAAA,IAAY,MAAA;AAAA,gBAC3B,kBAAA,EAAkB,eAAA;AAAA,gBACjB,GAAG;AAAA;AAAA,aACN;AAAA,iCACC,YAAA,EAAA,EACE,QAAA,EAAA;AAAA,cAAA,KAAA,oBACC,IAAA,CAAC,UAAA,EAAA,EAAW,OAAA,EAAS,EAAA,EAAK,GAAG,UAAA,EAC1B,QAAA,EAAA;AAAA,gBAAA,KAAA;AAAA,gBACA,4BACC,GAAA,CAAC,MAAA,EAAA,EAAK,eAAY,MAAA,EAAO,SAAA,EAAU,oBAAmB,QAAA,EAAA,GAAA,EAEtD;AAAA,eAAA,EAEJ,CAAA;AAAA,cAED,QAAA,oBACC,GAAA,CAAC,gBAAA,EAAA,EAAiB,EAAA,EAAI,YAAa,QAAA,EAAA,QAAA,EAAS;AAAA,aAAA,EAEhD;AAAA,WAAA,EACF,CAAA;AAAA,UACC,yBACC,GAAA,CAAC,UAAA,EAAA,EAAW,eAAY,aAAA,EAAc,EAAA,EAAI,SACvC,QAAA,EAAA,KAAA,EACH;AAAA;AAAA;AAAA,KAEJ;AAAA,EAEJ;AACF;AAEA,QAAA,CAAS,WAAA,GAAc,UAAA;;;;"}
|