@nofinite/nui 1.1.2 → 2.0.2
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/README.md +61 -48
- package/dist/components/accordion/Accordion.cjs +1 -1
- package/dist/components/accordion/Accordion.cjs.map +1 -1
- package/dist/components/accordion/Accordion.js +64 -43
- package/dist/components/accordion/Accordion.js.map +1 -1
- package/dist/components/alert/Alert.cjs +1 -1
- package/dist/components/alert/Alert.cjs.map +1 -1
- package/dist/components/alert/Alert.js +39 -25
- package/dist/components/alert/Alert.js.map +1 -1
- package/dist/components/avatar/Avatar.cjs +1 -1
- package/dist/components/avatar/Avatar.cjs.map +1 -1
- package/dist/components/avatar/Avatar.js +58 -44
- package/dist/components/avatar/Avatar.js.map +1 -1
- package/dist/components/avatar/AvatarGroup.cjs +1 -1
- package/dist/components/avatar/AvatarGroup.cjs.map +1 -1
- package/dist/components/avatar/AvatarGroup.js +34 -25
- package/dist/components/avatar/AvatarGroup.js.map +1 -1
- package/dist/components/badge/Badge.cjs +1 -1
- package/dist/components/badge/Badge.cjs.map +1 -1
- package/dist/components/badge/Badge.js +43 -68
- package/dist/components/badge/Badge.js.map +1 -1
- package/dist/components/badge/BadgeGroup.cjs +1 -1
- package/dist/components/badge/BadgeGroup.cjs.map +1 -1
- package/dist/components/badge/BadgeGroup.js +20 -10
- package/dist/components/badge/BadgeGroup.js.map +1 -1
- package/dist/components/breadcrumbs/Breadcrumbs.cjs +1 -1
- package/dist/components/breadcrumbs/Breadcrumbs.cjs.map +1 -1
- package/dist/components/breadcrumbs/Breadcrumbs.js +59 -39
- package/dist/components/breadcrumbs/Breadcrumbs.js.map +1 -1
- package/dist/components/button/Button.cjs +1 -1
- package/dist/components/button/Button.cjs.map +1 -1
- package/dist/components/button/Button.js +52 -17
- package/dist/components/button/Button.js.map +1 -1
- package/dist/components/card/Card.cjs +1 -1
- package/dist/components/card/Card.cjs.map +1 -1
- package/dist/components/card/Card.js +44 -41
- package/dist/components/card/Card.js.map +1 -1
- package/dist/components/checkbox/Checkbox.cjs +1 -1
- package/dist/components/checkbox/Checkbox.cjs.map +1 -1
- package/dist/components/checkbox/Checkbox.js +59 -40
- package/dist/components/checkbox/Checkbox.js.map +1 -1
- package/dist/components/chip/Chip.cjs +1 -1
- package/dist/components/chip/Chip.cjs.map +1 -1
- package/dist/components/chip/Chip.js +67 -47
- package/dist/components/chip/Chip.js.map +1 -1
- package/dist/components/combobox/Combobox.cjs +1 -1
- package/dist/components/combobox/Combobox.cjs.map +1 -1
- package/dist/components/combobox/Combobox.js +123 -108
- package/dist/components/combobox/Combobox.js.map +1 -1
- package/dist/components/commandpalette/CommandPalette.cjs +1 -1
- package/dist/components/commandpalette/CommandPalette.cjs.map +1 -1
- package/dist/components/commandpalette/CommandPalette.js +96 -73
- package/dist/components/commandpalette/CommandPalette.js.map +1 -1
- package/dist/components/contextmenu/ContextMenu.cjs +1 -1
- package/dist/components/contextmenu/ContextMenu.cjs.map +1 -1
- package/dist/components/contextmenu/ContextMenu.js +79 -58
- package/dist/components/contextmenu/ContextMenu.js.map +1 -1
- package/dist/components/datagrid/DataGrid.cjs +1 -1
- package/dist/components/datagrid/DataGrid.cjs.map +1 -1
- package/dist/components/datagrid/DataGrid.js +184 -202
- package/dist/components/datagrid/DataGrid.js.map +1 -1
- package/dist/components/datepicker/DatePicker.cjs +1 -1
- package/dist/components/datepicker/DatePicker.cjs.map +1 -1
- package/dist/components/datepicker/DatePicker.js +197 -164
- package/dist/components/datepicker/DatePicker.js.map +1 -1
- package/dist/components/daterangepicker/DateRangePicker.cjs +1 -1
- package/dist/components/daterangepicker/DateRangePicker.cjs.map +1 -1
- package/dist/components/daterangepicker/DateRangePicker.js +254 -213
- package/dist/components/daterangepicker/DateRangePicker.js.map +1 -1
- package/dist/components/dialog/DialogProvider.cjs +2 -0
- package/dist/components/dialog/DialogProvider.cjs.map +1 -0
- package/dist/components/dialog/DialogProvider.js +71 -0
- package/dist/components/dialog/DialogProvider.js.map +1 -0
- package/dist/components/dialog/dialogStore.cjs +2 -0
- package/dist/components/dialog/dialogStore.cjs.map +1 -0
- package/dist/components/dialog/dialogStore.js +60 -0
- package/dist/components/dialog/dialogStore.js.map +1 -0
- package/dist/components/drawer/Drawer.cjs +1 -1
- package/dist/components/drawer/Drawer.cjs.map +1 -1
- package/dist/components/drawer/Drawer.js +69 -47
- package/dist/components/drawer/Drawer.js.map +1 -1
- package/dist/components/dropdown/Dropdown.cjs +1 -1
- package/dist/components/dropdown/Dropdown.cjs.map +1 -1
- package/dist/components/dropdown/Dropdown.js +134 -108
- package/dist/components/dropdown/Dropdown.js.map +1 -1
- package/dist/components/fileuploader/FileUploader.cjs +1 -1
- package/dist/components/fileuploader/FileUploader.cjs.map +1 -1
- package/dist/components/fileuploader/FileUploader.js +96 -61
- package/dist/components/fileuploader/FileUploader.js.map +1 -1
- package/dist/components/hovercard/HoverCard.cjs +1 -1
- package/dist/components/hovercard/HoverCard.cjs.map +1 -1
- package/dist/components/hovercard/HoverCard.js +124 -69
- package/dist/components/hovercard/HoverCard.js.map +1 -1
- package/dist/components/input/Input.cjs +1 -1
- package/dist/components/input/Input.cjs.map +1 -1
- package/dist/components/input/Input.js +62 -37
- package/dist/components/input/Input.js.map +1 -1
- package/dist/components/layout/Container.cjs +1 -1
- package/dist/components/layout/Container.cjs.map +1 -1
- package/dist/components/layout/Container.js +21 -30
- package/dist/components/layout/Container.js.map +1 -1
- package/dist/components/layout/Flex.cjs +1 -1
- package/dist/components/layout/Flex.cjs.map +1 -1
- package/dist/components/layout/Flex.js +36 -19
- package/dist/components/layout/Flex.js.map +1 -1
- package/dist/components/layout/Grid.cjs +1 -1
- package/dist/components/layout/Grid.cjs.map +1 -1
- package/dist/components/layout/Grid.js +30 -18
- package/dist/components/layout/Grid.js.map +1 -1
- package/dist/components/link/Link.cjs +2 -0
- package/dist/components/link/Link.cjs.map +1 -0
- package/dist/components/link/Link.js +41 -0
- package/dist/components/link/Link.js.map +1 -0
- package/dist/components/megamenu/MegaMenu.cjs +1 -1
- package/dist/components/megamenu/MegaMenu.cjs.map +1 -1
- package/dist/components/megamenu/MegaMenu.js +107 -38
- package/dist/components/megamenu/MegaMenu.js.map +1 -1
- package/dist/components/modal/Modal.cjs +1 -1
- package/dist/components/modal/Modal.cjs.map +1 -1
- package/dist/components/modal/Modal.js +91 -83
- package/dist/components/modal/Modal.js.map +1 -1
- package/dist/components/multiselect/MultiSelect.cjs +2 -0
- package/dist/components/multiselect/MultiSelect.cjs.map +1 -0
- package/dist/components/multiselect/MultiSelect.js +176 -0
- package/dist/components/multiselect/MultiSelect.js.map +1 -0
- package/dist/components/nuiprovider/NUIProvider.cjs +2 -0
- package/dist/components/nuiprovider/NUIProvider.cjs.map +1 -0
- package/dist/components/nuiprovider/NUIProvider.js +36 -0
- package/dist/components/nuiprovider/NUIProvider.js.map +1 -0
- package/dist/components/pagination/Pagination.cjs +1 -1
- package/dist/components/pagination/Pagination.cjs.map +1 -1
- package/dist/components/pagination/Pagination.js +74 -41
- package/dist/components/pagination/Pagination.js.map +1 -1
- package/dist/components/popover/Popover.cjs +1 -1
- package/dist/components/popover/Popover.cjs.map +1 -1
- package/dist/components/popover/Popover.js +99 -100
- package/dist/components/popover/Popover.js.map +1 -1
- package/dist/components/progress/Progress.cjs +1 -1
- package/dist/components/progress/Progress.cjs.map +1 -1
- package/dist/components/progress/Progress.js +44 -22
- package/dist/components/progress/Progress.js.map +1 -1
- package/dist/components/radiogroup/RadioGroup.cjs +1 -1
- package/dist/components/radiogroup/RadioGroup.cjs.map +1 -1
- package/dist/components/radiogroup/RadioGroup.js +69 -74
- package/dist/components/radiogroup/RadioGroup.js.map +1 -1
- package/dist/components/rating/Rating.cjs +1 -1
- package/dist/components/rating/Rating.cjs.map +1 -1
- package/dist/components/rating/Rating.js +72 -33
- package/dist/components/rating/Rating.js.map +1 -1
- package/dist/components/resizable/Resizable.cjs +2 -0
- package/dist/components/resizable/Resizable.cjs.map +1 -0
- package/dist/components/resizable/Resizable.js +134 -0
- package/dist/components/resizable/Resizable.js.map +1 -0
- package/dist/components/select/Select.cjs +1 -1
- package/dist/components/select/Select.cjs.map +1 -1
- package/dist/components/select/Select.js +114 -113
- package/dist/components/select/Select.js.map +1 -1
- package/dist/components/skeleton/Skeleton.cjs +1 -1
- package/dist/components/skeleton/Skeleton.cjs.map +1 -1
- package/dist/components/skeleton/Skeleton.js +90 -67
- package/dist/components/skeleton/Skeleton.js.map +1 -1
- package/dist/components/slider/Slider.cjs +1 -1
- package/dist/components/slider/Slider.cjs.map +1 -1
- package/dist/components/slider/Slider.js +85 -82
- package/dist/components/slider/Slider.js.map +1 -1
- package/dist/components/spinner/Spinner.cjs +1 -1
- package/dist/components/spinner/Spinner.cjs.map +1 -1
- package/dist/components/spinner/Spinner.js +60 -17
- package/dist/components/spinner/Spinner.js.map +1 -1
- package/dist/components/stepper/Stepper.cjs +1 -5
- package/dist/components/stepper/Stepper.cjs.map +1 -1
- package/dist/components/stepper/Stepper.js +65 -39
- package/dist/components/stepper/Stepper.js.map +1 -1
- package/dist/components/switch/Switch.cjs +1 -1
- package/dist/components/switch/Switch.cjs.map +1 -1
- package/dist/components/switch/Switch.js +89 -62
- package/dist/components/switch/Switch.js.map +1 -1
- package/dist/components/table/Table.cjs +1 -1
- package/dist/components/table/Table.cjs.map +1 -1
- package/dist/components/table/Table.js +62 -35
- package/dist/components/table/Table.js.map +1 -1
- package/dist/components/tabs/Tabs.cjs +1 -1
- package/dist/components/tabs/Tabs.cjs.map +1 -1
- package/dist/components/tabs/Tabs.js +110 -50
- package/dist/components/tabs/Tabs.js.map +1 -1
- package/dist/components/textarea/Textarea.cjs +1 -1
- package/dist/components/textarea/Textarea.cjs.map +1 -1
- package/dist/components/textarea/Textarea.js +63 -58
- package/dist/components/textarea/Textarea.js.map +1 -1
- package/dist/components/timepicker/TimePicker.cjs +2 -0
- package/dist/components/timepicker/TimePicker.cjs.map +1 -0
- package/dist/components/timepicker/TimePicker.js +159 -0
- package/dist/components/timepicker/TimePicker.js.map +1 -0
- package/dist/components/timerangepicker/TimeRangePicker.cjs +2 -0
- package/dist/components/timerangepicker/TimeRangePicker.cjs.map +1 -0
- package/dist/components/timerangepicker/TimeRangePicker.js +208 -0
- package/dist/components/timerangepicker/TimeRangePicker.js.map +1 -0
- package/dist/components/toast/Toast.cjs +1 -1
- package/dist/components/toast/Toast.cjs.map +1 -1
- package/dist/components/toast/Toast.js +91 -38
- package/dist/components/toast/Toast.js.map +1 -1
- package/dist/components/tooltip/Tooltip.cjs +1 -1
- package/dist/components/tooltip/Tooltip.cjs.map +1 -1
- package/dist/components/tooltip/Tooltip.js +72 -56
- package/dist/components/tooltip/Tooltip.js.map +1 -1
- package/dist/components/treeview/TreeView.cjs +1 -1
- package/dist/components/treeview/TreeView.cjs.map +1 -1
- package/dist/components/treeview/TreeView.js +120 -90
- package/dist/components/treeview/TreeView.js.map +1 -1
- package/dist/components/virtuallist/VirtualList.cjs +1 -1
- package/dist/components/virtuallist/VirtualList.cjs.map +1 -1
- package/dist/components/virtuallist/VirtualList.js +52 -34
- package/dist/components/virtuallist/VirtualList.js.map +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.css +1 -0
- package/dist/index.js +120 -106
- package/dist/index.js.map +1 -1
- package/dist/package.json +49 -6
- package/dist/types/components/accordion/Accordion.d.ts +7 -3
- package/dist/types/components/accordion/Accordion.d.ts.map +1 -1
- package/dist/types/components/alert/Alert.d.ts +18 -5
- package/dist/types/components/alert/Alert.d.ts.map +1 -1
- package/dist/types/components/avatar/Avatar.d.ts +12 -8
- package/dist/types/components/avatar/Avatar.d.ts.map +1 -1
- package/dist/types/components/avatar/AvatarGroup.d.ts +11 -4
- package/dist/types/components/avatar/AvatarGroup.d.ts.map +1 -1
- package/dist/types/components/badge/Badge.d.ts +19 -11
- package/dist/types/components/badge/Badge.d.ts.map +1 -1
- package/dist/types/components/badge/BadgeGroup.d.ts +7 -4
- package/dist/types/components/badge/BadgeGroup.d.ts.map +1 -1
- package/dist/types/components/breadcrumbs/Breadcrumbs.d.ts +14 -6
- package/dist/types/components/breadcrumbs/Breadcrumbs.d.ts.map +1 -1
- package/dist/types/components/button/Button.d.ts +25 -10
- package/dist/types/components/button/Button.d.ts.map +1 -1
- package/dist/types/components/card/Card.d.ts +12 -21
- package/dist/types/components/card/Card.d.ts.map +1 -1
- package/dist/types/components/checkbox/Checkbox.d.ts +12 -7
- package/dist/types/components/checkbox/Checkbox.d.ts.map +1 -1
- package/dist/types/components/chip/Chip.d.ts +14 -11
- package/dist/types/components/chip/Chip.d.ts.map +1 -1
- package/dist/types/components/combobox/Combobox.d.ts +15 -4
- package/dist/types/components/combobox/Combobox.d.ts.map +1 -1
- package/dist/types/components/commandpalette/CommandPalette.d.ts +12 -3
- package/dist/types/components/commandpalette/CommandPalette.d.ts.map +1 -1
- package/dist/types/components/contextmenu/ContextMenu.d.ts +14 -6
- package/dist/types/components/contextmenu/ContextMenu.d.ts.map +1 -1
- package/dist/types/components/datagrid/DataGrid.d.ts +16 -4
- package/dist/types/components/datagrid/DataGrid.d.ts.map +1 -1
- package/dist/types/components/datepicker/DatePicker.d.ts +13 -1
- package/dist/types/components/datepicker/DatePicker.d.ts.map +1 -1
- package/dist/types/components/daterangepicker/DateRangePicker.d.ts +3 -1
- package/dist/types/components/daterangepicker/DateRangePicker.d.ts.map +1 -1
- package/dist/types/components/dialog/DialogProvider.d.ts +2 -0
- package/dist/types/components/dialog/DialogProvider.d.ts.map +1 -0
- package/dist/types/components/dialog/dialogStore.d.ts +42 -0
- package/dist/types/components/dialog/dialogStore.d.ts.map +1 -0
- package/dist/types/components/drawer/Drawer.d.ts +18 -4
- package/dist/types/components/drawer/Drawer.d.ts.map +1 -1
- package/dist/types/components/dropdown/Dropdown.d.ts +21 -16
- package/dist/types/components/dropdown/Dropdown.d.ts.map +1 -1
- package/dist/types/components/fileuploader/FileUploader.d.ts +22 -3
- package/dist/types/components/fileuploader/FileUploader.d.ts.map +1 -1
- package/dist/types/components/hovercard/HoverCard.d.ts +45 -5
- package/dist/types/components/hovercard/HoverCard.d.ts.map +1 -1
- package/dist/types/components/input/Input.d.ts +20 -10
- package/dist/types/components/input/Input.d.ts.map +1 -1
- package/dist/types/components/layout/Container.d.ts +8 -4
- package/dist/types/components/layout/Container.d.ts.map +1 -1
- package/dist/types/components/layout/Flex.d.ts +27 -10
- package/dist/types/components/layout/Flex.d.ts.map +1 -1
- package/dist/types/components/layout/Grid.d.ts +11 -5
- package/dist/types/components/layout/Grid.d.ts.map +1 -1
- package/dist/types/components/link/Link.d.ts +22 -0
- package/dist/types/components/link/Link.d.ts.map +1 -0
- package/dist/types/components/megamenu/MegaMenu.d.ts +8 -11
- package/dist/types/components/megamenu/MegaMenu.d.ts.map +1 -1
- package/dist/types/components/modal/Modal.d.ts +8 -7
- package/dist/types/components/modal/Modal.d.ts.map +1 -1
- package/dist/types/components/multiselect/MultiSelect.d.ts +33 -0
- package/dist/types/components/multiselect/MultiSelect.d.ts.map +1 -0
- package/dist/types/components/nuiprovider/NUIProvider.d.ts +29 -0
- package/dist/types/components/nuiprovider/NUIProvider.d.ts.map +1 -0
- package/dist/types/components/pagination/Pagination.d.ts +17 -3
- package/dist/types/components/pagination/Pagination.d.ts.map +1 -1
- package/dist/types/components/popover/Popover.d.ts +54 -16
- package/dist/types/components/popover/Popover.d.ts.map +1 -1
- package/dist/types/components/progress/Progress.d.ts +17 -7
- package/dist/types/components/progress/Progress.d.ts.map +1 -1
- package/dist/types/components/radiogroup/RadioGroup.d.ts +15 -10
- package/dist/types/components/radiogroup/RadioGroup.d.ts.map +1 -1
- package/dist/types/components/rating/Rating.d.ts +24 -10
- package/dist/types/components/rating/Rating.d.ts.map +1 -1
- package/dist/types/components/resizable/Resizable.d.ts +24 -0
- package/dist/types/components/resizable/Resizable.d.ts.map +1 -0
- package/dist/types/components/select/Select.d.ts +17 -8
- package/dist/types/components/select/Select.d.ts.map +1 -1
- package/dist/types/components/skeleton/Skeleton.d.ts +37 -36
- package/dist/types/components/skeleton/Skeleton.d.ts.map +1 -1
- package/dist/types/components/slider/Slider.d.ts +15 -4
- package/dist/types/components/slider/Slider.d.ts.map +1 -1
- package/dist/types/components/spinner/Spinner.d.ts +14 -4
- package/dist/types/components/spinner/Spinner.d.ts.map +1 -1
- package/dist/types/components/stepper/Stepper.d.ts +17 -3
- package/dist/types/components/stepper/Stepper.d.ts.map +1 -1
- package/dist/types/components/switch/Switch.d.ts +20 -5
- package/dist/types/components/switch/Switch.d.ts.map +1 -1
- package/dist/types/components/table/Table.d.ts +24 -4
- package/dist/types/components/table/Table.d.ts.map +1 -1
- package/dist/types/components/tabs/Tabs.d.ts +25 -12
- package/dist/types/components/tabs/Tabs.d.ts.map +1 -1
- package/dist/types/components/textarea/Textarea.d.ts +8 -5
- package/dist/types/components/textarea/Textarea.d.ts.map +1 -1
- package/dist/types/components/timepicker/TimePicker.d.ts +26 -0
- package/dist/types/components/timepicker/TimePicker.d.ts.map +1 -0
- package/dist/types/components/timerangepicker/TimeRangePicker.d.ts +32 -0
- package/dist/types/components/timerangepicker/TimeRangePicker.d.ts.map +1 -0
- package/dist/types/components/toast/Toast.d.ts +23 -7
- package/dist/types/components/toast/Toast.d.ts.map +1 -1
- package/dist/types/components/tooltip/Tooltip.d.ts +13 -2
- package/dist/types/components/tooltip/Tooltip.d.ts.map +1 -1
- package/dist/types/components/treeview/TreeView.d.ts +20 -6
- package/dist/types/components/treeview/TreeView.d.ts.map +1 -1
- package/dist/types/components/virtuallist/VirtualList.d.ts +12 -16
- package/dist/types/components/virtuallist/VirtualList.d.ts.map +1 -1
- package/dist/types/index.d.ts +8 -4
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/utils/cn/cn.d.ts +19 -0
- package/dist/types/utils/cn/cn.d.ts.map +1 -0
- package/dist/types/utils/generateid/generateId.d.ts +7 -0
- package/dist/types/utils/generateid/generateId.d.ts.map +1 -1
- package/dist/types/utils/index.d.ts +2 -0
- package/dist/types/utils/index.d.ts.map +1 -1
- package/dist/types/utils/inertmanager/inertManager.d.ts +13 -0
- package/dist/types/utils/inertmanager/inertManager.d.ts.map +1 -1
- package/dist/types/utils/keyboardnav/keyboardNav.d.ts +17 -6
- package/dist/types/utils/keyboardnav/keyboardNav.d.ts.map +1 -1
- package/dist/types/utils/onclickoutside/onClickOutside.d.ts +9 -1
- package/dist/types/utils/onclickoutside/onClickOutside.d.ts.map +1 -1
- package/dist/types/utils/portal/portal.d.ts +14 -1
- package/dist/types/utils/portal/portal.d.ts.map +1 -1
- package/dist/types/utils/restorefocus/restoreFocus.d.ts +8 -4
- package/dist/types/utils/restorefocus/restoreFocus.d.ts.map +1 -1
- package/dist/types/utils/scrolllock/scrollLock.d.ts +10 -2
- package/dist/types/utils/scrolllock/scrollLock.d.ts.map +1 -1
- package/dist/types/utils/slot/slot.d.ts +12 -0
- package/dist/types/utils/slot/slot.d.ts.map +1 -0
- package/dist/types/utils/trapfocus/trapFocus.d.ts +6 -2
- package/dist/types/utils/trapfocus/trapFocus.d.ts.map +1 -1
- package/dist/utils/cn/cn.cjs +2 -0
- package/dist/utils/cn/cn.cjs.map +1 -0
- package/dist/utils/cn/cn.js +21 -0
- package/dist/utils/cn/cn.js.map +1 -0
- package/dist/utils/inertmanager/inertManager.cjs.map +1 -1
- package/dist/utils/inertmanager/inertManager.js.map +1 -1
- package/dist/utils/onclickoutside/onClickOutside.cjs +1 -1
- package/dist/utils/onclickoutside/onClickOutside.cjs.map +1 -1
- package/dist/utils/onclickoutside/onClickOutside.js +10 -6
- package/dist/utils/onclickoutside/onClickOutside.js.map +1 -1
- package/dist/utils/portal/portal.cjs.map +1 -1
- package/dist/utils/portal/portal.js.map +1 -1
- package/dist/utils/restorefocus/restoreFocus.cjs.map +1 -1
- package/dist/utils/restorefocus/restoreFocus.js.map +1 -1
- package/dist/utils/scrolllock/scrollLock.cjs.map +1 -1
- package/dist/utils/scrolllock/scrollLock.js +7 -0
- package/dist/utils/scrolllock/scrollLock.js.map +1 -1
- package/dist/utils/slot/slot.cjs +2 -0
- package/dist/utils/slot/slot.cjs.map +1 -0
- package/dist/utils/slot/slot.js +57 -0
- package/dist/utils/slot/slot.js.map +1 -0
- package/dist/utils/trapfocus/trapFocus.cjs.map +1 -1
- package/dist/utils/trapfocus/trapFocus.js.map +1 -1
- package/package.json +49 -6
- package/dist/components/layout/HStack.cjs +0 -2
- package/dist/components/layout/HStack.cjs.map +0 -1
- package/dist/components/layout/HStack.js +0 -9
- package/dist/components/layout/HStack.js.map +0 -1
- package/dist/components/layout/Stack.cjs +0 -2
- package/dist/components/layout/Stack.cjs.map +0 -1
- package/dist/components/layout/Stack.js +0 -9
- package/dist/components/layout/Stack.js.map +0 -1
- package/dist/styles/nui.css +0 -1
- package/dist/theme/NUIProvider.cjs +0 -2
- package/dist/theme/NUIProvider.cjs.map +0 -1
- package/dist/theme/NUIProvider.js +0 -34
- package/dist/theme/NUIProvider.js.map +0 -1
- package/dist/theme/useTheme.cjs +0 -2
- package/dist/theme/useTheme.cjs.map +0 -1
- package/dist/theme/useTheme.js +0 -9
- package/dist/theme/useTheme.js.map +0 -1
- package/dist/types/components/layout/HStack.d.ts +0 -8
- package/dist/types/components/layout/HStack.d.ts.map +0 -1
- package/dist/types/components/layout/Stack.d.ts +0 -8
- package/dist/types/components/layout/Stack.d.ts.map +0 -1
- package/dist/types/theme/NUIProvider.d.ts +0 -14
- package/dist/types/theme/NUIProvider.d.ts.map +0 -1
- package/dist/types/theme/useTheme.d.ts +0 -11
- package/dist/types/theme/useTheme.d.ts.map +0 -1
- package/dist/utils/generateid/generateId.cjs +0 -2
- package/dist/utils/generateid/generateId.cjs.map +0 -1
- package/dist/utils/generateid/generateId.js +0 -7
- package/dist/utils/generateid/generateId.js.map +0 -1
- package/dist/utils/keyboardnav/keyboardNav.cjs +0 -2
- package/dist/utils/keyboardnav/keyboardNav.cjs.map +0 -1
- package/dist/utils/keyboardnav/keyboardNav.js +0 -10
- package/dist/utils/keyboardnav/keyboardNav.js.map +0 -1
|
@@ -1,46 +1,66 @@
|
|
|
1
|
-
import { jsx as r, jsxs as
|
|
1
|
+
import { jsx as r, jsxs as m } from "react/jsx-runtime";
|
|
2
2
|
/* empty css */
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
separator:
|
|
8
|
-
className:
|
|
3
|
+
import { cn as b } from "../../utils/cn/cn.js";
|
|
4
|
+
function g({
|
|
5
|
+
items: e,
|
|
6
|
+
maxItems: o = 5,
|
|
7
|
+
separator: c = "›",
|
|
8
|
+
className: _,
|
|
9
|
+
...h
|
|
9
10
|
}) {
|
|
10
|
-
if (!
|
|
11
|
-
let i =
|
|
12
|
-
if (
|
|
13
|
-
const
|
|
14
|
-
i = [...
|
|
11
|
+
if (!e.length) return null;
|
|
12
|
+
let i = e;
|
|
13
|
+
if (e.length > o) {
|
|
14
|
+
const a = e.slice(0, 1), n = e.slice(-2);
|
|
15
|
+
i = [...a, "ellipsis", ...n];
|
|
15
16
|
}
|
|
16
|
-
return /* @__PURE__ */ r(
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
17
|
+
return /* @__PURE__ */ r(
|
|
18
|
+
"nav",
|
|
19
|
+
{
|
|
20
|
+
"aria-label": "Breadcrumb",
|
|
21
|
+
className: b("nui-breadcrumbs", _),
|
|
22
|
+
...h,
|
|
23
|
+
children: /* @__PURE__ */ r("ol", { className: "nui-breadcrumbs__list", children: i.map((a, n) => {
|
|
24
|
+
const s = n === i.length - 1, l = `crumb-${n}`;
|
|
25
|
+
if (a === "ellipsis")
|
|
26
|
+
return /* @__PURE__ */ m("li", { className: "nui-breadcrumbs__item", children: [
|
|
27
|
+
/* @__PURE__ */ r("span", { className: "nui-breadcrumbs__ellipsis", "aria-hidden": "true", children: "…" }),
|
|
28
|
+
/* @__PURE__ */ r("span", { className: "nui-breadcrumbs__separator", "aria-hidden": "true", children: c })
|
|
29
|
+
] }, l);
|
|
30
|
+
const { label: u, href: t, onClick: d } = a;
|
|
31
|
+
return /* @__PURE__ */ m("li", { className: "nui-breadcrumbs__item", children: [
|
|
32
|
+
!!(t || d) && !s ? (
|
|
33
|
+
// Interactive Link
|
|
34
|
+
/* @__PURE__ */ r(
|
|
35
|
+
"a",
|
|
36
|
+
{
|
|
37
|
+
href: t,
|
|
38
|
+
onClick: d,
|
|
39
|
+
className: "nui-breadcrumbs__link",
|
|
40
|
+
children: u
|
|
41
|
+
}
|
|
42
|
+
)
|
|
43
|
+
) : (
|
|
44
|
+
// Static Text (Current Page or non-linked breadcrumb)
|
|
45
|
+
/* @__PURE__ */ r(
|
|
46
|
+
"span",
|
|
47
|
+
{
|
|
48
|
+
className: b(
|
|
49
|
+
"nui-breadcrumbs__link",
|
|
50
|
+
s && "nui-breadcrumbs__link--current"
|
|
51
|
+
),
|
|
52
|
+
"aria-current": s ? "page" : void 0,
|
|
53
|
+
children: u
|
|
54
|
+
}
|
|
55
|
+
)
|
|
56
|
+
),
|
|
57
|
+
!s && /* @__PURE__ */ r("span", { className: "nui-breadcrumbs__separator", "aria-hidden": "true", children: c })
|
|
58
|
+
] }, l);
|
|
59
|
+
}) })
|
|
60
|
+
}
|
|
61
|
+
);
|
|
42
62
|
}
|
|
43
63
|
export {
|
|
44
|
-
|
|
64
|
+
g as Breadcrumbs
|
|
45
65
|
};
|
|
46
66
|
//# sourceMappingURL=Breadcrumbs.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Breadcrumbs.js","sources":["../../../src/components/breadcrumbs/Breadcrumbs.tsx"],"sourcesContent":["
|
|
1
|
+
{"version":3,"file":"Breadcrumbs.js","sources":["../../../src/components/breadcrumbs/Breadcrumbs.tsx"],"sourcesContent":["import React from 'react';\nimport { cn } from '../../utils';\nimport './Breadcrumbs.css';\n\nexport interface BreadcrumbItem {\n label: React.ReactNode;\n /** If provided, renders the item as an <a> tag */\n href?: string;\n /** Triggered when the breadcrumb is clicked */\n onClick?: (e: React.MouseEvent) => void;\n}\n\nexport interface BreadcrumbsProps extends React.HTMLAttributes<HTMLElement> {\n items: BreadcrumbItem[];\n /** The maximum number of items to display before truncating the middle path. Default: 5 */\n maxItems?: number;\n /** The visual separator between items. Default: '›' */\n separator?: React.ReactNode;\n className?: string;\n}\n\n/**\n * Breadcrumbs Component\n * * A navigation aid that helps users understand their current location within a website.\n * Implements strict WAI-ARIA navigation patterns.\n */\nexport function Breadcrumbs({\n items,\n maxItems = 5,\n separator = '›',\n className,\n ...props\n}: BreadcrumbsProps) {\n if (!items.length) return null;\n\n // * Truncation Engine\n // If the path length exceeds maxItems, we truncate the middle.\n // We strictly preserve the root (index 0) and the immediate parent + current page (last 2).\n let renderItems: (BreadcrumbItem | 'ellipsis')[] = items;\n\n if (items.length > maxItems) {\n const start = items.slice(0, 1); \n const end = items.slice(-2); \n renderItems = [...start, 'ellipsis', ...end];\n }\n\n return (\n <nav \n aria-label=\"Breadcrumb\"\n className={cn(\"nui-breadcrumbs\", className)} \n {...props}\n >\n <ol className=\"nui-breadcrumbs__list\">\n {renderItems.map((item, index) => {\n const isLast = index === renderItems.length - 1;\n const key = `crumb-${index}`;\n\n // --- 1. Render Ellipsis ---\n if (item === 'ellipsis') {\n return (\n <li key={key} className=\"nui-breadcrumbs__item\">\n <span className=\"nui-breadcrumbs__ellipsis\" aria-hidden=\"true\">\n …\n </span>\n <span className=\"nui-breadcrumbs__separator\" aria-hidden=\"true\">\n {separator}\n </span>\n </li>\n );\n }\n\n // --- 2. Render Item ---\n const { label, href, onClick } = item;\n // An item is only interactive if it has a destination/action AND is not the current page\n const isInteractive = Boolean(href || onClick) && !isLast;\n \n return (\n <li key={key} className=\"nui-breadcrumbs__item\">\n {isInteractive ? (\n // Interactive Link\n <a\n href={href}\n onClick={onClick}\n className=\"nui-breadcrumbs__link\"\n >\n {label}\n </a>\n ) : (\n // Static Text (Current Page or non-linked breadcrumb)\n <span \n className={cn(\n \"nui-breadcrumbs__link\", \n isLast && \"nui-breadcrumbs__link--current\"\n )}\n aria-current={isLast ? 'page' : undefined}\n >\n {label}\n </span>\n )}\n\n {/* Separator (except for last item) */}\n {!isLast && (\n <span className=\"nui-breadcrumbs__separator\" aria-hidden=\"true\">\n {separator}\n </span>\n )}\n </li>\n );\n })}\n </ol>\n </nav>\n );\n}"],"names":["Breadcrumbs","items","maxItems","separator","className","props","renderItems","start","end","jsx","cn","item","index","isLast","key","jsxs","label","href","onClick"],"mappings":";;;AA0BO,SAASA,EAAY;AAAA,EAC1B,OAAAC;AAAA,EACA,UAAAC,IAAW;AAAA,EACX,WAAAC,IAAY;AAAA,EACZ,WAAAC;AAAA,EACA,GAAGC;AACL,GAAqB;AACnB,MAAI,CAACJ,EAAM,OAAQ,QAAO;AAK1B,MAAIK,IAA+CL;AAEnD,MAAIA,EAAM,SAASC,GAAU;AAC3B,UAAMK,IAAQN,EAAM,MAAM,GAAG,CAAC,GACxBO,IAAMP,EAAM,MAAM,EAAE;AAC1B,IAAAK,IAAc,CAAC,GAAGC,GAAO,YAAY,GAAGC,CAAG;AAAA,EAC7C;AAEA,SACE,gBAAAC;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,cAAW;AAAA,MACX,WAAWC,EAAG,mBAAmBN,CAAS;AAAA,MACzC,GAAGC;AAAA,MAEJ,UAAA,gBAAAI,EAAC,QAAG,WAAU,yBACX,YAAY,IAAI,CAACE,GAAMC,MAAU;AAChC,cAAMC,IAASD,MAAUN,EAAY,SAAS,GACxCQ,IAAM,SAASF,CAAK;AAG1B,YAAID,MAAS;AACX,iBACE,gBAAAI,EAAC,MAAA,EAAa,WAAU,yBACtB,UAAA;AAAA,YAAA,gBAAAN,EAAC,QAAA,EAAK,WAAU,6BAA4B,eAAY,QAAO,UAAA,KAE/D;AAAA,8BACC,QAAA,EAAK,WAAU,8BAA6B,eAAY,QACtD,UAAAN,EAAA,CACH;AAAA,UAAA,EAAA,GANOW,CAOT;AAKJ,cAAM,EAAE,OAAAE,GAAO,MAAAC,GAAM,SAAAC,EAAA,IAAYP;AAIjC,eACE,gBAAAI,EAAC,MAAA,EAAa,WAAU,yBACrB,UAAA;AAAA,UAJiB,GAAQE,KAAQC,MAAY,CAACL;AAAA;AAAA,YAM7C,gBAAAJ;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,MAAAQ;AAAA,gBACA,SAAAC;AAAA,gBACA,WAAU;AAAA,gBAET,UAAAF;AAAA,cAAA;AAAA,YAAA;AAAA;AAAA;AAAA,YAIH,gBAAAP;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,WAAWC;AAAA,kBACT;AAAA,kBACAG,KAAU;AAAA,gBAAA;AAAA,gBAEZ,gBAAcA,IAAS,SAAS;AAAA,gBAE/B,UAAAG;AAAA,cAAA;AAAA,YAAA;AAAA;AAAA,UAKJ,CAACH,KACA,gBAAAJ,EAAC,QAAA,EAAK,WAAU,8BAA6B,eAAY,QACtD,UAAAN,EAAA,CACH;AAAA,QAAA,EAAA,GA3BKW,CA6BT;AAAA,MAEJ,CAAC,EAAA,CACH;AAAA,IAAA;AAAA,EAAA;AAGN;"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),j=require("react");;/* empty css */const l=require("../../utils/slot/slot.cjs"),f=require("../../utils/cn/cn.cjs"),a=j.forwardRef(({className:o,variant:i="default",size:u="md",isLoading:t=!1,iconLeft:s,iconRight:n,asChild:r=!1,children:c,disabled:m,...b},d)=>{const x=m||t,p=r?l.Slot:"button";return e.jsxs(p,{ref:d,disabled:x,className:f.cn("nui-btn",`nui-btn--${i}`,`nui-btn--${u}`,o),...b,children:[t&&e.jsxs("svg",{className:"nui-btn__spinner",viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",children:[e.jsx("circle",{className:"opacity-25",cx:"12",cy:"12",r:"10",stroke:"currentColor",strokeWidth:"4"}),e.jsx("path",{className:"opacity-75",fill:"currentColor",d:"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"})]}),!t&&s&&e.jsx("span",{className:"nui-btn__icon -left",children:s}),e.jsx(l.Slottable,{children:r?c:e.jsx("span",{className:"nui-btn__content",children:c})}),!t&&n&&e.jsx("span",{className:"nui-btn__icon -right",children:n})]})});a.displayName="Button";exports.Button=a;
|
|
2
2
|
//# sourceMappingURL=Button.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Button.cjs","sources":["../../../src/components/button/Button.tsx"],"sourcesContent":["
|
|
1
|
+
{"version":3,"file":"Button.cjs","sources":["../../../src/components/button/Button.tsx"],"sourcesContent":["\"use client\";\n\nimport React from 'react';\nimport { cn, Slot, Slottable } from '../../utils';\nimport './Button.css';\n\nexport type ButtonVariant = 'default' | 'primary' | 'outline' | 'ghost' | 'danger' | 'link';\nexport type ButtonSize = 'sm' | 'md' | 'lg' | 'icon';\n\nexport interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n /** The visual style of the button. */\n variant?: ButtonVariant;\n /** The dimensional size of the button (controls padding and height). */\n size?: ButtonSize;\n /** Automatically disables the button and replaces the left icon with a loading spinner. */\n isLoading?: boolean;\n /** An element (usually an SVG or Icon component) placed before the text. */\n iconLeft?: React.ReactNode;\n /** An element (usually an SVG or Icon component) placed after the text. */\n iconRight?: React.ReactNode;\n /** * Polymorphic Prop: When true, the button will render as its immediate child element \n * (e.g., a Next.js `<Link>` or an `<a>` tag) instead of a native `<button>`, \n * while inheriting all button styles.\n */\n asChild?: boolean;\n}\n\n/**\n * Button Component\n * ----------------\n * The primary interactive element for user actions.\n * * Architecture Note: \n * - Automatically handles its disabled state when `isLoading` is true to prevent double-submissions.\n * - Supports polymorphism via the `asChild` prop for seamless router integration.\n */\nexport const Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n ({ \n className, \n variant = 'default', \n size = 'md', \n isLoading = false, \n iconLeft,\n iconRight,\n asChild = false,\n children, \n disabled,\n ...props \n }, ref) => {\n \n // State Management: Loading strictly implies the button cannot be interacted with.\n const isDisabled = disabled || isLoading;\n\n // Polymorphic Node: Use our custom zero-dependency Slot if asChild is true.\n const Comp = asChild ? Slot : \"button\";\n\n return (\n <Comp\n ref={ref}\n disabled={isDisabled}\n className={cn(\n \"nui-btn\",\n `nui-btn--${variant}`,\n `nui-btn--${size}`,\n className\n )}\n {...props}\n >\n {/* Loading Spinner */}\n {isLoading && (\n <svg \n className=\"nui-btn__spinner\" \n viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"\n aria-hidden=\"true\" // Hides the SVG from screen readers; 'disabled' attribute handles the state announcement\n >\n <circle className=\"opacity-25\" cx=\"12\" cy=\"12\" r=\"10\" stroke=\"currentColor\" strokeWidth=\"4\"></circle>\n <path className=\"opacity-75\" fill=\"currentColor\" d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\"></path>\n </svg>\n )}\n\n {/* Icon Left: Hidden when loading to prevent UI layout shifts */}\n {!isLoading && iconLeft && <span className=\"nui-btn__icon -left\">{iconLeft}</span>}\n \n {/* Slottable: Directs the Slot component to inject the provided children right here, \n preserving the spinners and icons on the outside. */}\n <Slottable>\n {asChild ? children : <span className=\"nui-btn__content\">{children}</span>}\n </Slottable>\n \n {/* Icon Right */}\n {!isLoading && iconRight && <span className=\"nui-btn__icon -right\">{iconRight}</span>}\n </Comp>\n );\n }\n);\n\nButton.displayName = \"Button\";"],"names":["Button","React","className","variant","size","isLoading","iconLeft","iconRight","asChild","children","disabled","props","ref","isDisabled","Comp","Slot","jsxs","cn","jsx","Slottable"],"mappings":"oPAmCaA,EAASC,EAAM,WAC1B,CAAC,CACC,UAAAC,EACA,QAAAC,EAAU,UACV,KAAAC,EAAO,KACP,UAAAC,EAAY,GACZ,SAAAC,EACA,UAAAC,EACA,QAAAC,EAAU,GACV,SAAAC,EACA,SAAAC,EACA,GAAGC,CAAA,EACFC,IAAQ,CAGT,MAAMC,EAAaH,GAAYL,EAGzBS,EAAON,EAAUO,EAAAA,KAAO,SAE9B,OACEC,EAAAA,KAACF,EAAA,CACC,IAAAF,EACA,SAAUC,EACV,UAAWI,EAAAA,GACT,UACA,YAAYd,CAAO,GACnB,YAAYC,CAAI,GAChBF,CAAA,EAED,GAAGS,EAGH,SAAA,CAAAN,GACCW,EAAAA,KAAC,MAAA,CACC,UAAU,mBACV,QAAQ,YAAY,KAAK,OAAO,MAAM,6BACtC,cAAY,OAEZ,SAAA,CAAAE,EAAAA,IAAC,SAAA,CAAO,UAAU,aAAa,GAAG,KAAK,GAAG,KAAK,EAAE,KAAK,OAAO,eAAe,YAAY,IAAI,QAC3F,OAAA,CAAK,UAAU,aAAa,KAAK,eAAe,EAAE,iHAAA,CAAkH,CAAA,CAAA,CAAA,EAKxK,CAACb,GAAaC,SAAa,OAAA,CAAK,UAAU,sBAAuB,SAAAA,EAAS,EAI3EY,EAAAA,IAACC,EAAAA,WACE,SAAAX,EAAUC,QAAY,OAAA,CAAK,UAAU,mBAAoB,SAAAA,CAAA,CAAS,CAAA,CACrE,EAGC,CAACJ,GAAaE,SAAc,OAAA,CAAK,UAAU,uBAAwB,SAAAA,CAAA,CAAU,CAAA,CAAA,CAAA,CAGpF,CACF,EAEAP,EAAO,YAAc"}
|
|
@@ -1,21 +1,56 @@
|
|
|
1
|
-
import { jsx as
|
|
1
|
+
import { jsxs as l, jsx as t } from "react/jsx-runtime";
|
|
2
|
+
import b from "react";
|
|
2
3
|
/* empty css */
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
}
|
|
4
|
+
import { Slot as d, Slottable as f } from "../../utils/slot/slot.js";
|
|
5
|
+
import { cn as h } from "../../utils/cn/cn.js";
|
|
6
|
+
const N = b.forwardRef(
|
|
7
|
+
({
|
|
8
|
+
className: o,
|
|
9
|
+
variant: c = "default",
|
|
10
|
+
size: i = "md",
|
|
11
|
+
isLoading: n = !1,
|
|
12
|
+
iconLeft: e,
|
|
13
|
+
iconRight: r,
|
|
14
|
+
asChild: s = !1,
|
|
15
|
+
children: a,
|
|
16
|
+
disabled: m,
|
|
17
|
+
...p
|
|
18
|
+
}, u) => /* @__PURE__ */ l(
|
|
19
|
+
s ? d : "button",
|
|
20
|
+
{
|
|
21
|
+
ref: u,
|
|
22
|
+
disabled: m || n,
|
|
23
|
+
className: h(
|
|
24
|
+
"nui-btn",
|
|
25
|
+
`nui-btn--${c}`,
|
|
26
|
+
`nui-btn--${i}`,
|
|
27
|
+
o
|
|
28
|
+
),
|
|
29
|
+
...p,
|
|
30
|
+
children: [
|
|
31
|
+
n && /* @__PURE__ */ l(
|
|
32
|
+
"svg",
|
|
33
|
+
{
|
|
34
|
+
className: "nui-btn__spinner",
|
|
35
|
+
viewBox: "0 0 24 24",
|
|
36
|
+
fill: "none",
|
|
37
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
38
|
+
"aria-hidden": "true",
|
|
39
|
+
children: [
|
|
40
|
+
/* @__PURE__ */ t("circle", { className: "opacity-25", cx: "12", cy: "12", r: "10", stroke: "currentColor", strokeWidth: "4" }),
|
|
41
|
+
/* @__PURE__ */ t("path", { className: "opacity-75", fill: "currentColor", d: "M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z" })
|
|
42
|
+
]
|
|
43
|
+
}
|
|
44
|
+
),
|
|
45
|
+
!n && e && /* @__PURE__ */ t("span", { className: "nui-btn__icon -left", children: e }),
|
|
46
|
+
/* @__PURE__ */ t(f, { children: s ? a : /* @__PURE__ */ t("span", { className: "nui-btn__content", children: a }) }),
|
|
47
|
+
!n && r && /* @__PURE__ */ t("span", { className: "nui-btn__icon -right", children: r })
|
|
48
|
+
]
|
|
49
|
+
}
|
|
50
|
+
)
|
|
51
|
+
);
|
|
52
|
+
N.displayName = "Button";
|
|
18
53
|
export {
|
|
19
|
-
|
|
54
|
+
N as Button
|
|
20
55
|
};
|
|
21
56
|
//# sourceMappingURL=Button.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Button.js","sources":["../../../src/components/button/Button.tsx"],"sourcesContent":["
|
|
1
|
+
{"version":3,"file":"Button.js","sources":["../../../src/components/button/Button.tsx"],"sourcesContent":["\"use client\";\n\nimport React from 'react';\nimport { cn, Slot, Slottable } from '../../utils';\nimport './Button.css';\n\nexport type ButtonVariant = 'default' | 'primary' | 'outline' | 'ghost' | 'danger' | 'link';\nexport type ButtonSize = 'sm' | 'md' | 'lg' | 'icon';\n\nexport interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n /** The visual style of the button. */\n variant?: ButtonVariant;\n /** The dimensional size of the button (controls padding and height). */\n size?: ButtonSize;\n /** Automatically disables the button and replaces the left icon with a loading spinner. */\n isLoading?: boolean;\n /** An element (usually an SVG or Icon component) placed before the text. */\n iconLeft?: React.ReactNode;\n /** An element (usually an SVG or Icon component) placed after the text. */\n iconRight?: React.ReactNode;\n /** * Polymorphic Prop: When true, the button will render as its immediate child element \n * (e.g., a Next.js `<Link>` or an `<a>` tag) instead of a native `<button>`, \n * while inheriting all button styles.\n */\n asChild?: boolean;\n}\n\n/**\n * Button Component\n * ----------------\n * The primary interactive element for user actions.\n * * Architecture Note: \n * - Automatically handles its disabled state when `isLoading` is true to prevent double-submissions.\n * - Supports polymorphism via the `asChild` prop for seamless router integration.\n */\nexport const Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n ({ \n className, \n variant = 'default', \n size = 'md', \n isLoading = false, \n iconLeft,\n iconRight,\n asChild = false,\n children, \n disabled,\n ...props \n }, ref) => {\n \n // State Management: Loading strictly implies the button cannot be interacted with.\n const isDisabled = disabled || isLoading;\n\n // Polymorphic Node: Use our custom zero-dependency Slot if asChild is true.\n const Comp = asChild ? Slot : \"button\";\n\n return (\n <Comp\n ref={ref}\n disabled={isDisabled}\n className={cn(\n \"nui-btn\",\n `nui-btn--${variant}`,\n `nui-btn--${size}`,\n className\n )}\n {...props}\n >\n {/* Loading Spinner */}\n {isLoading && (\n <svg \n className=\"nui-btn__spinner\" \n viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"\n aria-hidden=\"true\" // Hides the SVG from screen readers; 'disabled' attribute handles the state announcement\n >\n <circle className=\"opacity-25\" cx=\"12\" cy=\"12\" r=\"10\" stroke=\"currentColor\" strokeWidth=\"4\"></circle>\n <path className=\"opacity-75\" fill=\"currentColor\" d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\"></path>\n </svg>\n )}\n\n {/* Icon Left: Hidden when loading to prevent UI layout shifts */}\n {!isLoading && iconLeft && <span className=\"nui-btn__icon -left\">{iconLeft}</span>}\n \n {/* Slottable: Directs the Slot component to inject the provided children right here, \n preserving the spinners and icons on the outside. */}\n <Slottable>\n {asChild ? children : <span className=\"nui-btn__content\">{children}</span>}\n </Slottable>\n \n {/* Icon Right */}\n {!isLoading && iconRight && <span className=\"nui-btn__icon -right\">{iconRight}</span>}\n </Comp>\n );\n }\n);\n\nButton.displayName = \"Button\";"],"names":["Button","React","className","variant","size","isLoading","iconLeft","iconRight","asChild","children","disabled","props","ref","jsxs","Slot","cn","jsx","Slottable"],"mappings":";;;;;AAmCO,MAAMA,IAASC,EAAM;AAAA,EAC1B,CAAC;AAAA,IACC,WAAAC;AAAA,IACA,SAAAC,IAAU;AAAA,IACV,MAAAC,IAAO;AAAA,IACP,WAAAC,IAAY;AAAA,IACZ,UAAAC;AAAA,IACA,WAAAC;AAAA,IACA,SAAAC,IAAU;AAAA,IACV,UAAAC;AAAA,IACA,UAAAC;AAAA,IACA,GAAGC;AAAA,EAAA,GACFC,MASC,gBAAAC;AAAA,IAHWL,IAAUM,IAAO;AAAA,IAG3B;AAAA,MACC,KAAAF;AAAA,MACA,UAReF,KAAYL;AAAA,MAS3B,WAAWU;AAAA,QACT;AAAA,QACA,YAAYZ,CAAO;AAAA,QACnB,YAAYC,CAAI;AAAA,QAChBF;AAAA,MAAA;AAAA,MAED,GAAGS;AAAA,MAGH,UAAA;AAAA,QAAAN,KACC,gBAAAQ;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,WAAU;AAAA,YACV,SAAQ;AAAA,YAAY,MAAK;AAAA,YAAO,OAAM;AAAA,YACtC,eAAY;AAAA,YAEZ,UAAA;AAAA,cAAA,gBAAAG,EAAC,UAAA,EAAO,WAAU,cAAa,IAAG,MAAK,IAAG,MAAK,GAAE,MAAK,QAAO,gBAAe,aAAY,KAAI;AAAA,gCAC3F,QAAA,EAAK,WAAU,cAAa,MAAK,gBAAe,GAAE,kHAAA,CAAkH;AAAA,YAAA;AAAA,UAAA;AAAA,QAAA;AAAA,QAKxK,CAACX,KAAaC,uBAAa,QAAA,EAAK,WAAU,uBAAuB,UAAAA,GAAS;AAAA,QAI3E,gBAAAU,EAACC,KACE,UAAAT,IAAUC,sBAAY,QAAA,EAAK,WAAU,oBAAoB,UAAAA,EAAA,CAAS,EAAA,CACrE;AAAA,QAGC,CAACJ,KAAaE,uBAAc,QAAA,EAAK,WAAU,wBAAwB,UAAAA,EAAA,CAAU;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAItF;AAEAP,EAAO,cAAc;"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const s=require("react/jsx-runtime"),o=require("react");;/* empty css */const i=require("../../utils/cn/cn.cjs"),c=o.forwardRef(({className:e,clickable:r=!1,hover:a=!1,onClick:n,onKeyDown:t,children:y,...l},N)=>s.jsx("div",{ref:N,className:i.cn("nui-card",r&&"nui-card--clickable",a&&"nui-card--hover",e),role:r?"button":void 0,tabIndex:r?0:void 0,onClick:r?n:void 0,onKeyDown:d=>{t&&t(d),r&&(d.key==="Enter"||d.key===" ")&&(d.preventDefault(),n?.(d))},...l,children:y}));c.displayName="Card";const u=o.forwardRef(({className:e,...r},a)=>s.jsx("div",{ref:a,className:i.cn("nui-card__header",e),...r}));u.displayName="Card.Header";const f=o.forwardRef(({className:e,...r},a)=>s.jsx("div",{ref:a,className:i.cn("nui-card__body",e),...r}));f.displayName="Card.Body";const v=o.forwardRef(({className:e,...r},a)=>s.jsx("div",{ref:a,className:i.cn("nui-card__footer",e),...r}));v.displayName="Card.Footer";const m=o.forwardRef(({className:e,...r},a)=>s.jsx("hr",{ref:a,className:i.cn("nui-card__divider",e),...r}));m.displayName="Card.Divider";const j=Object.assign(c,{Header:u,Body:f,Footer:v,Divider:m});exports.Card=j;
|
|
2
2
|
//# sourceMappingURL=Card.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Card.cjs","sources":["../../../src/components/card/Card.tsx"],"sourcesContent":["
|
|
1
|
+
{"version":3,"file":"Card.cjs","sources":["../../../src/components/card/Card.tsx"],"sourcesContent":["import React from 'react';\nimport { cn } from '../../utils';\nimport './Card.css';\n\nexport interface CardProps extends React.HTMLAttributes<HTMLDivElement> {\n /** If true, makes the card interactive via mouse and keyboard (Enter/Space) */\n clickable?: boolean;\n /** If true, adds a shadow elevation effect on hover */\n hover?: boolean;\n}\n\n/**\n * CardRoot\n * * The main container for the Card component.\n * Architecture Note: We manage the 'clickable' state here to ensure the container\n * receives the correct ARIA roles and keyboard event listeners, transforming a standard\n * <div> into an accessible interactive element when needed.\n */\nconst CardRoot = React.forwardRef<HTMLDivElement, CardProps>(\n ({ className, clickable = false, hover = false, onClick, onKeyDown, children, ...props }, ref) => {\n return (\n <div\n ref={ref}\n className={cn(\n 'nui-card',\n clickable && 'nui-card--clickable',\n hover && 'nui-card--hover',\n className\n )}\n // Assign button role if clickable for screen readers\n role={clickable ? 'button' : undefined}\n // Make focusable if clickable\n tabIndex={clickable ? 0 : undefined}\n onClick={clickable ? onClick : undefined}\n onKeyDown={(e) => {\n // Preserve any user-provided onKeyDown logic\n if (onKeyDown) onKeyDown(e);\n \n if (!clickable) return;\n \n // Trigger click on Enter or Space for keyboard users\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n // * Type Casting Note: React types expect a MouseEvent for onClick.\n // Since we are synthesizing a click from a KeyboardEvent, we must cast it\n // through 'unknown' to satisfy TypeScript's strict event typing.\n onClick?.(e as unknown as React.MouseEvent<HTMLDivElement>);\n }\n }}\n {...props}\n >\n {children}\n </div>\n );\n }\n);\nCardRoot.displayName = 'Card';\n\nconst Header = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={cn(\"nui-card__header\", className)} {...props} />\n )\n);\nHeader.displayName = 'Card.Header';\n\nconst Body = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={cn(\"nui-card__body\", className)} {...props} />\n )\n);\nBody.displayName = 'Card.Body';\n\nconst Footer = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={cn(\"nui-card__footer\", className)} {...props} />\n )\n);\nFooter.displayName = 'Card.Footer';\n\nconst Divider = React.forwardRef<HTMLHRElement, React.HTMLAttributes<HTMLHRElement>>(\n ({ className, ...props }, ref) => (\n <hr ref={ref} className={cn(\"nui-card__divider\", className)} {...props} />\n )\n);\nDivider.displayName = 'Card.Divider';\n\n/**\n * Compound Component Architecture\n * Exposes sub-components via dot notation (e.g., <Card.Header>) for a cleaner API.\n */\nexport const Card = Object.assign(CardRoot, {\n Header,\n Body,\n Footer,\n Divider,\n});"],"names":["CardRoot","React","className","clickable","hover","onClick","onKeyDown","children","props","ref","jsx","cn","e","Header","Body","Footer","Divider","Card"],"mappings":"2MAkBMA,EAAWC,EAAM,WACrB,CAAC,CAAE,UAAAC,EAAW,UAAAC,EAAY,GAAO,MAAAC,EAAQ,GAAO,QAAAC,EAAS,UAAAC,EAAW,SAAAC,EAAU,GAAGC,CAAA,EAASC,IAEtFC,EAAAA,IAAC,MAAA,CACC,IAAAD,EACA,UAAWE,EAAAA,GACT,WACAR,GAAa,sBACbC,GAAS,kBACTF,CAAA,EAGF,KAAMC,EAAY,SAAW,OAE7B,SAAUA,EAAY,EAAI,OAC1B,QAASA,EAAYE,EAAU,OAC/B,UAAYO,GAAM,CAEZN,KAAqBM,CAAC,EAErBT,IAGDS,EAAE,MAAQ,SAAWA,EAAE,MAAQ,OACjCA,EAAE,eAAA,EAIFP,IAAUO,CAAgD,EAE9D,EACC,GAAGJ,EAEH,SAAAD,CAAA,CAAA,CAIT,EACAP,EAAS,YAAc,OAEvB,MAAMa,EAASZ,EAAM,WACnB,CAAC,CAAE,UAAAC,EAAW,GAAGM,CAAA,EAASC,IACxBC,EAAAA,IAAC,MAAA,CAAI,IAAAD,EAAU,UAAWE,EAAAA,GAAG,mBAAoBT,CAAS,EAAI,GAAGM,CAAA,CAAO,CAE5E,EACAK,EAAO,YAAc,cAErB,MAAMC,EAAOb,EAAM,WACjB,CAAC,CAAE,UAAAC,EAAW,GAAGM,CAAA,EAASC,IACxBC,EAAAA,IAAC,MAAA,CAAI,IAAAD,EAAU,UAAWE,EAAAA,GAAG,iBAAkBT,CAAS,EAAI,GAAGM,CAAA,CAAO,CAE1E,EACAM,EAAK,YAAc,YAEnB,MAAMC,EAASd,EAAM,WACnB,CAAC,CAAE,UAAAC,EAAW,GAAGM,CAAA,EAASC,IACxBC,EAAAA,IAAC,MAAA,CAAI,IAAAD,EAAU,UAAWE,EAAAA,GAAG,mBAAoBT,CAAS,EAAI,GAAGM,CAAA,CAAO,CAE5E,EACAO,EAAO,YAAc,cAErB,MAAMC,EAAUf,EAAM,WACpB,CAAC,CAAE,UAAAC,EAAW,GAAGM,CAAA,EAASC,IACxBC,EAAAA,IAAC,KAAA,CAAG,IAAAD,EAAU,UAAWE,EAAAA,GAAG,oBAAqBT,CAAS,EAAI,GAAGM,CAAA,CAAO,CAE5E,EACAQ,EAAQ,YAAc,eAMf,MAAMC,EAAO,OAAO,OAAOjB,EAAU,CAC1C,OAAAa,EACA,KAAAC,EACA,OAAAC,EACA,QAAAC,CACF,CAAC"}
|
|
@@ -1,50 +1,53 @@
|
|
|
1
|
-
import { jsx as
|
|
1
|
+
import { jsx as o } from "react/jsx-runtime";
|
|
2
|
+
import i from "react";
|
|
2
3
|
/* empty css */
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
className:
|
|
6
|
-
clickable: e = !1,
|
|
7
|
-
hover: t = !1,
|
|
8
|
-
onClick: d
|
|
9
|
-
}) {
|
|
10
|
-
return /* @__PURE__ */ i(
|
|
4
|
+
import { cn as s } from "../../utils/cn/cn.js";
|
|
5
|
+
const f = i.forwardRef(
|
|
6
|
+
({ className: a, clickable: r = !1, hover: d = !1, onClick: t, onKeyDown: n, children: u, ...y }, N) => /* @__PURE__ */ o(
|
|
11
7
|
"div",
|
|
12
8
|
{
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
9
|
+
ref: N,
|
|
10
|
+
className: s(
|
|
11
|
+
"nui-card",
|
|
12
|
+
r && "nui-card--clickable",
|
|
13
|
+
d && "nui-card--hover",
|
|
14
|
+
a
|
|
15
|
+
),
|
|
16
|
+
role: r ? "button" : void 0,
|
|
17
|
+
tabIndex: r ? 0 : void 0,
|
|
18
|
+
onClick: r ? t : void 0,
|
|
19
|
+
onKeyDown: (e) => {
|
|
20
|
+
n && n(e), r && (e.key === "Enter" || e.key === " ") && (e.preventDefault(), t?.(e));
|
|
24
21
|
},
|
|
25
|
-
|
|
22
|
+
...y,
|
|
23
|
+
children: u
|
|
26
24
|
}
|
|
27
|
-
)
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
25
|
+
)
|
|
26
|
+
);
|
|
27
|
+
f.displayName = "Card";
|
|
28
|
+
const m = i.forwardRef(
|
|
29
|
+
({ className: a, ...r }, d) => /* @__PURE__ */ o("div", { ref: d, className: s("nui-card__header", a), ...r })
|
|
30
|
+
);
|
|
31
|
+
m.displayName = "Card.Header";
|
|
32
|
+
const c = i.forwardRef(
|
|
33
|
+
({ className: a, ...r }, d) => /* @__PURE__ */ o("div", { ref: d, className: s("nui-card__body", a), ...r })
|
|
34
|
+
);
|
|
35
|
+
c.displayName = "Card.Body";
|
|
36
|
+
const v = i.forwardRef(
|
|
37
|
+
({ className: a, ...r }, d) => /* @__PURE__ */ o("div", { ref: d, className: s("nui-card__footer", a), ...r })
|
|
38
|
+
);
|
|
39
|
+
v.displayName = "Card.Footer";
|
|
40
|
+
const p = i.forwardRef(
|
|
41
|
+
({ className: a, ...r }, d) => /* @__PURE__ */ o("hr", { ref: d, className: s("nui-card__divider", a), ...r })
|
|
42
|
+
);
|
|
43
|
+
p.displayName = "Card.Divider";
|
|
44
|
+
const w = Object.assign(f, {
|
|
45
|
+
Header: m,
|
|
46
|
+
Body: c,
|
|
47
|
+
Footer: v,
|
|
48
|
+
Divider: p
|
|
46
49
|
});
|
|
47
50
|
export {
|
|
48
|
-
|
|
51
|
+
w as Card
|
|
49
52
|
};
|
|
50
53
|
//# sourceMappingURL=Card.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Card.js","sources":["../../../src/components/card/Card.tsx"],"sourcesContent":["
|
|
1
|
+
{"version":3,"file":"Card.js","sources":["../../../src/components/card/Card.tsx"],"sourcesContent":["import React from 'react';\nimport { cn } from '../../utils';\nimport './Card.css';\n\nexport interface CardProps extends React.HTMLAttributes<HTMLDivElement> {\n /** If true, makes the card interactive via mouse and keyboard (Enter/Space) */\n clickable?: boolean;\n /** If true, adds a shadow elevation effect on hover */\n hover?: boolean;\n}\n\n/**\n * CardRoot\n * * The main container for the Card component.\n * Architecture Note: We manage the 'clickable' state here to ensure the container\n * receives the correct ARIA roles and keyboard event listeners, transforming a standard\n * <div> into an accessible interactive element when needed.\n */\nconst CardRoot = React.forwardRef<HTMLDivElement, CardProps>(\n ({ className, clickable = false, hover = false, onClick, onKeyDown, children, ...props }, ref) => {\n return (\n <div\n ref={ref}\n className={cn(\n 'nui-card',\n clickable && 'nui-card--clickable',\n hover && 'nui-card--hover',\n className\n )}\n // Assign button role if clickable for screen readers\n role={clickable ? 'button' : undefined}\n // Make focusable if clickable\n tabIndex={clickable ? 0 : undefined}\n onClick={clickable ? onClick : undefined}\n onKeyDown={(e) => {\n // Preserve any user-provided onKeyDown logic\n if (onKeyDown) onKeyDown(e);\n \n if (!clickable) return;\n \n // Trigger click on Enter or Space for keyboard users\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n // * Type Casting Note: React types expect a MouseEvent for onClick.\n // Since we are synthesizing a click from a KeyboardEvent, we must cast it\n // through 'unknown' to satisfy TypeScript's strict event typing.\n onClick?.(e as unknown as React.MouseEvent<HTMLDivElement>);\n }\n }}\n {...props}\n >\n {children}\n </div>\n );\n }\n);\nCardRoot.displayName = 'Card';\n\nconst Header = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={cn(\"nui-card__header\", className)} {...props} />\n )\n);\nHeader.displayName = 'Card.Header';\n\nconst Body = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={cn(\"nui-card__body\", className)} {...props} />\n )\n);\nBody.displayName = 'Card.Body';\n\nconst Footer = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={cn(\"nui-card__footer\", className)} {...props} />\n )\n);\nFooter.displayName = 'Card.Footer';\n\nconst Divider = React.forwardRef<HTMLHRElement, React.HTMLAttributes<HTMLHRElement>>(\n ({ className, ...props }, ref) => (\n <hr ref={ref} className={cn(\"nui-card__divider\", className)} {...props} />\n )\n);\nDivider.displayName = 'Card.Divider';\n\n/**\n * Compound Component Architecture\n * Exposes sub-components via dot notation (e.g., <Card.Header>) for a cleaner API.\n */\nexport const Card = Object.assign(CardRoot, {\n Header,\n Body,\n Footer,\n Divider,\n});"],"names":["CardRoot","React","className","clickable","hover","onClick","onKeyDown","children","props","ref","jsx","cn","Header","Body","Footer","Divider","Card"],"mappings":";;;;AAkBA,MAAMA,IAAWC,EAAM;AAAA,EACrB,CAAC,EAAE,WAAAC,GAAW,WAAAC,IAAY,IAAO,OAAAC,IAAQ,IAAO,SAAAC,GAAS,WAAAC,GAAW,UAAAC,GAAU,GAAGC,EAAA,GAASC,MAEtF,gBAAAC;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAAD;AAAA,MACA,WAAWE;AAAA,QACT;AAAA,QACAR,KAAa;AAAA,QACbC,KAAS;AAAA,QACTF;AAAA,MAAA;AAAA,MAGF,MAAMC,IAAY,WAAW;AAAA,MAE7B,UAAUA,IAAY,IAAI;AAAA,MAC1B,SAASA,IAAYE,IAAU;AAAA,MAC/B,WAAW,CAAC,MAAM;AAIhB,QAFIC,OAAqB,CAAC,GAErBH,MAGD,EAAE,QAAQ,WAAW,EAAE,QAAQ,SACjC,EAAE,eAAA,GAIFE,IAAU,CAAgD;AAAA,MAE9D;AAAA,MACC,GAAGG;AAAA,MAEH,UAAAD;AAAA,IAAA;AAAA,EAAA;AAIT;AACAP,EAAS,cAAc;AAEvB,MAAMY,IAASX,EAAM;AAAA,EACnB,CAAC,EAAE,WAAAC,GAAW,GAAGM,EAAA,GAASC,MACxB,gBAAAC,EAAC,OAAA,EAAI,KAAAD,GAAU,WAAWE,EAAG,oBAAoBT,CAAS,GAAI,GAAGM,EAAA,CAAO;AAE5E;AACAI,EAAO,cAAc;AAErB,MAAMC,IAAOZ,EAAM;AAAA,EACjB,CAAC,EAAE,WAAAC,GAAW,GAAGM,EAAA,GAASC,MACxB,gBAAAC,EAAC,OAAA,EAAI,KAAAD,GAAU,WAAWE,EAAG,kBAAkBT,CAAS,GAAI,GAAGM,EAAA,CAAO;AAE1E;AACAK,EAAK,cAAc;AAEnB,MAAMC,IAASb,EAAM;AAAA,EACnB,CAAC,EAAE,WAAAC,GAAW,GAAGM,EAAA,GAASC,MACxB,gBAAAC,EAAC,OAAA,EAAI,KAAAD,GAAU,WAAWE,EAAG,oBAAoBT,CAAS,GAAI,GAAGM,EAAA,CAAO;AAE5E;AACAM,EAAO,cAAc;AAErB,MAAMC,IAAUd,EAAM;AAAA,EACpB,CAAC,EAAE,WAAAC,GAAW,GAAGM,EAAA,GAASC,MACxB,gBAAAC,EAAC,MAAA,EAAG,KAAAD,GAAU,WAAWE,EAAG,qBAAqBT,CAAS,GAAI,GAAGM,EAAA,CAAO;AAE5E;AACAO,EAAQ,cAAc;AAMf,MAAMC,IAAO,OAAO,OAAOhB,GAAU;AAAA,EAC1C,QAAAY;AAAA,EACA,MAAAC;AAAA,EACA,QAAAC;AAAA,EACA,SAAAC;AACF,CAAC;"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),t=require("react");;/* empty css */const g=require("../../utils/cn/cn.cjs"),h=t.forwardRef(({checked:i,defaultChecked:d,indeterminate:n=!1,onChange:k,label:l,disabled:o=!1,className:x,...f},c)=>{const r=t.useRef(null);t.useEffect(()=>{typeof c=="function"?c(r.current):c&&(c.current=r.current)},[c]);const a=i!==void 0,[p,j]=t.useState(d??!1),s=a?i:p;t.useEffect(()=>{r.current&&(r.current.indeterminate=n)},[n]);const b=C=>{if(o)return;const u=C.target.checked;a||j(u),k?.(u)};return e.jsxs("label",{className:g.cn("nui-checkbox",o&&"nui-checkbox--disabled",x),children:[e.jsxs("div",{className:"nui-checkbox__wrapper",children:[e.jsx("input",{ref:r,type:"checkbox",className:"nui-checkbox__input",disabled:o,checked:s,onChange:b,"aria-checked":n?"mixed":s,"data-state":n?"indeterminate":s?"checked":"unchecked",...f}),e.jsx("span",{className:"nui-checkbox__indicator","aria-hidden":"true",children:n?e.jsx("svg",{width:"10",height:"10",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"4",strokeLinecap:"round",strokeLinejoin:"round",children:e.jsx("line",{x1:"5",y1:"12",x2:"19",y2:"12"})}):s?e.jsx("svg",{width:"10",height:"10",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"4",strokeLinecap:"round",strokeLinejoin:"round",children:e.jsx("polyline",{points:"20 6 9 17 4 12"})}):null})]}),l&&e.jsx("span",{className:"nui-checkbox__label",children:l})]})});h.displayName="Checkbox";exports.Checkbox=h;
|
|
2
2
|
//# sourceMappingURL=Checkbox.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Checkbox.cjs","sources":["../../../src/components/checkbox/Checkbox.tsx"],"sourcesContent":["
|
|
1
|
+
{"version":3,"file":"Checkbox.cjs","sources":["../../../src/components/checkbox/Checkbox.tsx"],"sourcesContent":["\"use client\";\n\nimport React, { useEffect, useRef, useState, forwardRef } from 'react';\nimport { cn } from '../../utils';\nimport './Checkbox.css';\n\nexport interface CheckboxProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'onChange'> {\n /** If provided, makes the checkbox a controlled component. */\n checked?: boolean; \n /** If provided, sets the initial state of an uncontrolled checkbox. */\n defaultChecked?: boolean;\n /** Sets the visual state to mixed/indeterminate. This is visually distinct from checked/unchecked. */\n indeterminate?: boolean;\n /** Callback fired when the state changes. */\n onChange?: (checked: boolean) => void;\n label?: React.ReactNode;\n}\n\n/**\n * Checkbox Component\n * * A control that allows the user to toggle between checked and not checked.\n * Architecture Note: This component seamlessly handles both controlled and uncontrolled \n * paradigms, and directly manipulates the DOM node to support the HTML5 'indeterminate' property.\n */\nexport const Checkbox = forwardRef<HTMLInputElement, CheckboxProps>(\n (\n {\n checked,\n defaultChecked,\n indeterminate = false,\n onChange,\n label,\n disabled = false,\n className,\n ...props\n },\n ref\n ) => {\n // 1. Internal Ref to handle the indeterminate DOM property\n // The 'indeterminate' state does not exist as an HTML attribute, it only exists\n // as a property on the DOM node itself, so we must access it via ref.\n const internalRef = useRef<HTMLInputElement>(null);\n\n // Merge external ref with internal ref\n useEffect(() => {\n if (typeof ref === 'function') {\n ref(internalRef.current);\n } else if (ref) {\n (ref as React.MutableRefObject<HTMLInputElement | null>).current = internalRef.current;\n }\n }, [ref]);\n\n // 2. Controlled vs Uncontrolled Logic\n const isControlled = checked !== undefined;\n const [internalChecked, setInternalChecked] = useState(defaultChecked ?? false);\n const currentChecked = isControlled ? checked : internalChecked;\n\n // 3. Sync Indeterminate state to the actual DOM element\n useEffect(() => {\n if (internalRef.current) {\n internalRef.current.indeterminate = indeterminate;\n }\n }, [indeterminate]);\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n if (disabled) return;\n const newVal = e.target.checked;\n \n // Only update internal state if the component is uncontrolled\n if (!isControlled) setInternalChecked(newVal);\n \n onChange?.(newVal);\n };\n\n return (\n <label \n className={cn(\n \"nui-checkbox\", \n disabled && \"nui-checkbox--disabled\", \n className\n )}\n >\n <div className=\"nui-checkbox__wrapper\">\n {/* Hidden but accessible input */}\n <input\n ref={internalRef}\n type=\"checkbox\"\n className=\"nui-checkbox__input\"\n disabled={disabled}\n checked={currentChecked}\n onChange={handleChange}\n // aria-checked explicitly supports the 'mixed' state for screen readers\n aria-checked={indeterminate ? 'mixed' : currentChecked}\n data-state={\n indeterminate ? 'indeterminate' : currentChecked ? 'checked' : 'unchecked'\n }\n {...props}\n />\n \n {/* Visual Indicator (Overlays the input) */}\n <span className=\"nui-checkbox__indicator\" aria-hidden=\"true\">\n {indeterminate ? (\n <svg width=\"10\" height=\"10\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"4\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\"></line>\n </svg>\n ) : currentChecked ? (\n <svg width=\"10\" height=\"10\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"4\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <polyline points=\"20 6 9 17 4 12\"></polyline>\n </svg>\n ) : null}\n </span>\n </div>\n\n {/* Label */}\n {label && <span className=\"nui-checkbox__label\">{label}</span>}\n </label>\n );\n }\n);\n\nCheckbox.displayName = 'Checkbox';"],"names":["Checkbox","forwardRef","checked","defaultChecked","indeterminate","onChange","label","disabled","className","props","ref","internalRef","useRef","useEffect","isControlled","internalChecked","setInternalChecked","useState","currentChecked","handleChange","e","newVal","jsxs","cn","jsx"],"mappings":"+MAwBaA,EAAWC,EAAAA,WACtB,CACE,CACE,QAAAC,EACA,eAAAC,EACA,cAAAC,EAAgB,GAChB,SAAAC,EACA,MAAAC,EACA,SAAAC,EAAW,GACX,UAAAC,EACA,GAAGC,CAAA,EAELC,IACG,CAIH,MAAMC,EAAcC,EAAAA,OAAyB,IAAI,EAGjDC,EAAAA,UAAU,IAAM,CACV,OAAOH,GAAQ,WACjBA,EAAIC,EAAY,OAAO,EACdD,IACRA,EAAwD,QAAUC,EAAY,QAEnF,EAAG,CAACD,CAAG,CAAC,EAGR,MAAMI,EAAeZ,IAAY,OAC3B,CAACa,EAAiBC,CAAkB,EAAIC,EAAAA,SAASd,GAAkB,EAAK,EACxEe,EAAiBJ,EAAeZ,EAAUa,EAGhDF,EAAAA,UAAU,IAAM,CACVF,EAAY,UACdA,EAAY,QAAQ,cAAgBP,EAExC,EAAG,CAACA,CAAa,CAAC,EAElB,MAAMe,EAAgBC,GAA2C,CAC/D,GAAIb,EAAU,OACd,MAAMc,EAASD,EAAE,OAAO,QAGnBN,GAAcE,EAAmBK,CAAM,EAE5ChB,IAAWgB,CAAM,CACnB,EAEA,OACEC,EAAAA,KAAC,QAAA,CACC,UAAWC,EAAAA,GACT,eACAhB,GAAY,yBACZC,CAAA,EAGF,SAAA,CAAAc,EAAAA,KAAC,MAAA,CAAI,UAAU,wBAEb,SAAA,CAAAE,EAAAA,IAAC,QAAA,CACC,IAAKb,EACL,KAAK,WACL,UAAU,sBACV,SAAAJ,EACA,QAASW,EACT,SAAUC,EAEV,eAAcf,EAAgB,QAAUc,EACxC,aACEd,EAAgB,gBAAkBc,EAAiB,UAAY,YAEhE,GAAGT,CAAA,CAAA,EAINe,EAAAA,IAAC,OAAA,CAAK,UAAU,0BAA0B,cAAY,OACnD,SAAApB,EACCoB,EAAAA,IAAC,MAAA,CAAI,MAAM,KAAK,OAAO,KAAK,QAAQ,YAAY,KAAK,OAAO,OAAO,eAAe,YAAY,IAAI,cAAc,QAAQ,eAAe,QACrI,SAAAA,MAAC,OAAA,CAAK,GAAG,IAAI,GAAG,KAAK,GAAG,KAAK,GAAG,IAAA,CAAK,CAAA,CACvC,EACEN,EACFM,EAAAA,IAAC,MAAA,CAAI,MAAM,KAAK,OAAO,KAAK,QAAQ,YAAY,KAAK,OAAO,OAAO,eAAe,YAAY,IAAI,cAAc,QAAQ,eAAe,QACrI,SAAAA,EAAAA,IAAC,WAAA,CAAS,OAAO,gBAAA,CAAiB,CAAA,CACpC,EACE,IAAA,CACN,CAAA,EACF,EAGClB,GAASkB,EAAAA,IAAC,OAAA,CAAK,UAAU,sBAAuB,SAAAlB,CAAA,CAAM,CAAA,CAAA,CAAA,CAG7D,CACF,EAEAN,EAAS,YAAc"}
|