@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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Avatar.js","sources":["../../../src/components/avatar/Avatar.tsx"],"sourcesContent":["
|
|
1
|
+
{"version":3,"file":"Avatar.js","sources":["../../../src/components/avatar/Avatar.tsx"],"sourcesContent":["\"use client\";\n\nimport React, { useState } from 'react';\nimport { cn } from '../../utils';\nimport './Avatar.css';\n\nexport type AvatarSize = 'sm' | 'md' | 'lg' | 'xl';\nexport type AvatarShape = 'circle' | 'rounded' | 'square';\nexport type AvatarStatus = 'online' | 'offline' | 'busy' | 'away';\n\nexport interface AvatarProps extends React.HTMLAttributes<HTMLDivElement> {\n src?: string;\n alt?: string;\n name?: string;\n size?: AvatarSize;\n shape?: AvatarShape;\n status?: AvatarStatus;\n fallbackIcon?: React.ReactNode; \n loading?: boolean; \n className?: string;\n}\n\n/**\n * Utility to extract initials from a name string.\n * Handles single words and multi-word names appropriately.\n */\nfunction getInitials(name?: string): string {\n if (!name) return '';\n const parts = name.trim().split(/\\s+/);\n if (parts.length === 0) return '';\n if (parts.length === 1) return parts[0].substring(0, 2).toUpperCase();\n return (parts[0][0] + parts[parts.length - 1][0]).toUpperCase();\n}\n\n/**\n * Avatar Component\n * * A visual representation of a user or entity.\n * Implements a strict fallback sequence: Image -> Initials -> Fallback Icon -> Default Icon.\n */\nexport function Avatar({\n src,\n alt,\n name,\n size = 'md',\n shape = 'circle',\n status,\n fallbackIcon, \n loading, \n className,\n ...props \n}: AvatarProps) {\n // * Native error handling: We track if the image fails to load via the native onError event\n // to seamlessly trigger the fallback UI without needing complex fetch checks.\n const [hasError, setHasError] = useState(false);\n const initials = getInitials(name);\n \n // If loading is true, we force the fallback/skeleton state by hiding the image\n const showImage = src && !hasError && !loading;\n\n return (\n <div\n className={cn(\n \"nui-avatar\", \n loading && \"nui-avatar--loading\", \n className\n )}\n data-size={size}\n data-shape={shape}\n role=\"img\"\n aria-label={alt || name || \"Avatar\"}\n {...props} \n >\n {showImage ? (\n <img\n src={src}\n alt={alt || name}\n className=\"nui-avatar__image\"\n onError={() => setHasError(true)}\n />\n ) : (\n <div className=\"nui-avatar__fallback\" aria-hidden=\"true\">\n {/* Fallback Waterfall Logic */}\n {!loading && (initials || fallbackIcon || (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2\"></path>\n <circle cx=\"12\" cy=\"7\" r=\"4\"></circle>\n </svg>\n ))}\n </div>\n )}\n\n {status && (\n <span \n className=\"nui-avatar__status\" \n data-status={status} \n role=\"status\"\n aria-label={status}\n />\n )}\n </div>\n );\n}"],"names":["getInitials","name","parts","Avatar","src","alt","size","shape","status","fallbackIcon","loading","className","props","hasError","setHasError","useState","initials","showImage","jsxs","cn","jsx"],"mappings":";;;;AA0BA,SAASA,EAAYC,GAAuB;AAC1C,MAAI,CAACA,EAAM,QAAO;AAClB,QAAMC,IAAQD,EAAK,KAAA,EAAO,MAAM,KAAK;AACrC,SAAIC,EAAM,WAAW,IAAU,KAC3BA,EAAM,WAAW,IAAUA,EAAM,CAAC,EAAE,UAAU,GAAG,CAAC,EAAE,YAAA,KAChDA,EAAM,CAAC,EAAE,CAAC,IAAIA,EAAMA,EAAM,SAAS,CAAC,EAAE,CAAC,GAAG,YAAA;AACpD;AAOO,SAASC,EAAO;AAAA,EACrB,KAAAC;AAAA,EACA,KAAAC;AAAA,EACA,MAAAJ;AAAA,EACA,MAAAK,IAAO;AAAA,EACP,OAAAC,IAAQ;AAAA,EACR,QAAAC;AAAA,EACA,cAAAC;AAAA,EACA,SAAAC;AAAA,EACA,WAAAC;AAAA,EACA,GAAGC;AACL,GAAgB;AAGd,QAAM,CAACC,GAAUC,CAAW,IAAIC,EAAS,EAAK,GACxCC,IAAWhB,EAAYC,CAAI,GAG3BgB,IAAYb,KAAO,CAACS,KAAY,CAACH;AAEvC,SACE,gBAAAQ;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAWC;AAAA,QACT;AAAA,QACAT,KAAW;AAAA,QACXC;AAAA,MAAA;AAAA,MAEF,aAAWL;AAAA,MACX,cAAYC;AAAA,MACZ,MAAK;AAAA,MACL,cAAYF,KAAOJ,KAAQ;AAAA,MAC1B,GAAGW;AAAA,MAEH,UAAA;AAAA,QAAAK,IACC,gBAAAG;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,KAAAhB;AAAA,YACA,KAAKC,KAAOJ;AAAA,YACZ,WAAU;AAAA,YACV,SAAS,MAAMa,EAAY,EAAI;AAAA,UAAA;AAAA,QAAA,IAGjC,gBAAAM,EAAC,OAAA,EAAI,WAAU,wBAAuB,eAAY,QAE/C,UAAA,CAACV,MAAYM,KAAYP,KACxB,gBAAAS,EAAC,OAAA,EAAI,OAAM,MAAK,QAAO,MAAK,SAAQ,aAAY,MAAK,QAAO,QAAO,gBAAe,aAAY,KAAI,eAAc,SAAQ,gBAAe,SACrI,UAAA;AAAA,UAAA,gBAAAE,EAAC,QAAA,EAAK,GAAE,4CAAA,CAA4C;AAAA,4BACnD,UAAA,EAAO,IAAG,MAAK,IAAG,KAAI,GAAE,IAAA,CAAI;AAAA,QAAA,EAAA,CAC/B,GAAA,CAEJ;AAAA,QAGDZ,KACC,gBAAAY;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,WAAU;AAAA,YACV,eAAaZ;AAAA,YACb,MAAK;AAAA,YACL,cAAYA;AAAA,UAAA;AAAA,QAAA;AAAA,MACd;AAAA,IAAA;AAAA,EAAA;AAIR;"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r=require("react/jsx-runtime"),
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r=require("react/jsx-runtime"),t=require("react");;/* empty css */const u=require("../../utils/cn/cn.cjs");function d({children:l,max:s=3,size:a="md",className:o,...m}){const n=t.Children.toArray(l),v=n.slice(0,s),i=n.length-s;return r.jsxs("div",{className:u.cn("nui-avatar-group",o),"data-size":a,...m,children:[v.map(e=>{if(t.isValidElement(e)){const c=e;return t.cloneElement(c,{size:a,className:u.cn("nui-avatar-group__item",c.props.className)})}return e}),i>0&&r.jsx("div",{className:"nui-avatar nui-avatar--excess","data-size":a,children:r.jsxs("span",{className:"nui-avatar__fallback",children:["+",i]})})]})}exports.AvatarGroup=d;
|
|
2
2
|
//# sourceMappingURL=AvatarGroup.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AvatarGroup.cjs","sources":["../../../src/components/avatar/AvatarGroup.tsx"],"sourcesContent":["
|
|
1
|
+
{"version":3,"file":"AvatarGroup.cjs","sources":["../../../src/components/avatar/AvatarGroup.tsx"],"sourcesContent":["import React from 'react';\nimport { cn } from '../../utils'; \nimport { AvatarSize, AvatarProps } from './Avatar'; \nimport './Avatar.css';\n\ninterface AvatarGroupProps extends React.HTMLAttributes<HTMLDivElement> {\n children?: React.ReactNode;\n /** Maximum number of avatars to display before truncating */\n max?: number;\n /** Size passed down to all nested Avatar components */\n size?: AvatarSize;\n className?: string;\n}\n\n/**\n * AvatarGroup Component\n * * Visually groups multiple Avatar components together, handling truncation and overlapping.\n */\nexport function AvatarGroup({\n children,\n max = 3,\n size = 'md',\n className,\n ...props\n}: AvatarGroupProps) {\n const items = React.Children.toArray(children);\n const visibleItems = items.slice(0, max);\n const extraCount = items.length - max;\n\n return (\n <div \n className={cn(\"nui-avatar-group\", className)} \n data-size={size}\n {...props}\n >\n {visibleItems.map((child) => {\n // * Library Architecture: We strictly check and cast children to ensure we are only\n // injecting props into valid Avatar elements, preventing runtime crashes if users\n // accidentally pass text or invalid DOM nodes as children.\n if (React.isValidElement(child)) {\n const avatarChild = child as React.ReactElement<AvatarProps>;\n \n return React.cloneElement(avatarChild, { \n size,\n className: cn(\"nui-avatar-group__item\", avatarChild.props.className) \n });\n }\n return child;\n })}\n\n {/* Overflow Indicator */}\n {extraCount > 0 && (\n <div className=\"nui-avatar nui-avatar--excess\" data-size={size}>\n <span className=\"nui-avatar__fallback\">+{extraCount}</span>\n </div>\n )}\n </div>\n );\n}"],"names":["AvatarGroup","children","max","size","className","props","items","React","visibleItems","extraCount","jsxs","cn","child","avatarChild","jsx"],"mappings":"6MAkBO,SAASA,EAAY,CAC1B,SAAAC,EACA,IAAAC,EAAM,EACN,KAAAC,EAAO,KACP,UAAAC,EACA,GAAGC,CACL,EAAqB,CACnB,MAAMC,EAAQC,EAAM,SAAS,QAAQN,CAAQ,EACvCO,EAAeF,EAAM,MAAM,EAAGJ,CAAG,EACjCO,EAAaH,EAAM,OAASJ,EAElC,OACEQ,EAAAA,KAAC,MAAA,CACC,UAAWC,EAAAA,GAAG,mBAAoBP,CAAS,EAC3C,YAAWD,EACV,GAAGE,EAEH,SAAA,CAAAG,EAAa,IAAKI,GAAU,CAI3B,GAAIL,EAAM,eAAeK,CAAK,EAAG,CAC/B,MAAMC,EAAcD,EAEpB,OAAOL,EAAM,aAAaM,EAAa,CACrC,KAAAV,EACA,UAAWQ,EAAAA,GAAG,yBAA0BE,EAAY,MAAM,SAAS,CAAA,CACpE,CACH,CACA,OAAOD,CACT,CAAC,EAGAH,EAAa,GACZK,EAAAA,IAAC,MAAA,CAAI,UAAU,gCAAgC,YAAWX,EACxD,SAAAO,EAAAA,KAAC,OAAA,CAAK,UAAU,uBAAuB,SAAA,CAAA,IAAED,CAAA,CAAA,CAAW,CAAA,CACtD,CAAA,CAAA,CAAA,CAIR"}
|
|
@@ -1,32 +1,41 @@
|
|
|
1
|
-
import { jsxs as
|
|
2
|
-
import
|
|
1
|
+
import { jsxs as o, jsx as v } from "react/jsx-runtime";
|
|
2
|
+
import t from "react";
|
|
3
3
|
/* empty css */
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
4
|
+
import { cn as m } from "../../utils/cn/cn.js";
|
|
5
|
+
function x({
|
|
6
|
+
children: c,
|
|
7
|
+
max: e = 3,
|
|
8
|
+
size: a = "md",
|
|
9
|
+
className: l,
|
|
10
|
+
...u
|
|
9
11
|
}) {
|
|
10
|
-
const
|
|
11
|
-
return /* @__PURE__ */
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
"
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
12
|
+
const s = t.Children.toArray(c), p = s.slice(0, e), n = s.length - e;
|
|
13
|
+
return /* @__PURE__ */ o(
|
|
14
|
+
"div",
|
|
15
|
+
{
|
|
16
|
+
className: m("nui-avatar-group", l),
|
|
17
|
+
"data-size": a,
|
|
18
|
+
...u,
|
|
19
|
+
children: [
|
|
20
|
+
p.map((r) => {
|
|
21
|
+
if (t.isValidElement(r)) {
|
|
22
|
+
const i = r;
|
|
23
|
+
return t.cloneElement(i, {
|
|
24
|
+
size: a,
|
|
25
|
+
className: m("nui-avatar-group__item", i.props.className)
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
return r;
|
|
29
|
+
}),
|
|
30
|
+
n > 0 && /* @__PURE__ */ v("div", { className: "nui-avatar nui-avatar--excess", "data-size": a, children: /* @__PURE__ */ o("span", { className: "nui-avatar__fallback", children: [
|
|
22
31
|
"+",
|
|
23
|
-
|
|
24
|
-
]
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
32
|
+
n
|
|
33
|
+
] }) })
|
|
34
|
+
]
|
|
35
|
+
}
|
|
36
|
+
);
|
|
28
37
|
}
|
|
29
38
|
export {
|
|
30
|
-
|
|
39
|
+
x as AvatarGroup
|
|
31
40
|
};
|
|
32
41
|
//# sourceMappingURL=AvatarGroup.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AvatarGroup.js","sources":["../../../src/components/avatar/AvatarGroup.tsx"],"sourcesContent":["
|
|
1
|
+
{"version":3,"file":"AvatarGroup.js","sources":["../../../src/components/avatar/AvatarGroup.tsx"],"sourcesContent":["import React from 'react';\nimport { cn } from '../../utils'; \nimport { AvatarSize, AvatarProps } from './Avatar'; \nimport './Avatar.css';\n\ninterface AvatarGroupProps extends React.HTMLAttributes<HTMLDivElement> {\n children?: React.ReactNode;\n /** Maximum number of avatars to display before truncating */\n max?: number;\n /** Size passed down to all nested Avatar components */\n size?: AvatarSize;\n className?: string;\n}\n\n/**\n * AvatarGroup Component\n * * Visually groups multiple Avatar components together, handling truncation and overlapping.\n */\nexport function AvatarGroup({\n children,\n max = 3,\n size = 'md',\n className,\n ...props\n}: AvatarGroupProps) {\n const items = React.Children.toArray(children);\n const visibleItems = items.slice(0, max);\n const extraCount = items.length - max;\n\n return (\n <div \n className={cn(\"nui-avatar-group\", className)} \n data-size={size}\n {...props}\n >\n {visibleItems.map((child) => {\n // * Library Architecture: We strictly check and cast children to ensure we are only\n // injecting props into valid Avatar elements, preventing runtime crashes if users\n // accidentally pass text or invalid DOM nodes as children.\n if (React.isValidElement(child)) {\n const avatarChild = child as React.ReactElement<AvatarProps>;\n \n return React.cloneElement(avatarChild, { \n size,\n className: cn(\"nui-avatar-group__item\", avatarChild.props.className) \n });\n }\n return child;\n })}\n\n {/* Overflow Indicator */}\n {extraCount > 0 && (\n <div className=\"nui-avatar nui-avatar--excess\" data-size={size}>\n <span className=\"nui-avatar__fallback\">+{extraCount}</span>\n </div>\n )}\n </div>\n );\n}"],"names":["AvatarGroup","children","max","size","className","props","items","React","visibleItems","extraCount","jsxs","cn","child","avatarChild","jsx"],"mappings":";;;;AAkBO,SAASA,EAAY;AAAA,EAC1B,UAAAC;AAAA,EACA,KAAAC,IAAM;AAAA,EACN,MAAAC,IAAO;AAAA,EACP,WAAAC;AAAA,EACA,GAAGC;AACL,GAAqB;AACnB,QAAMC,IAAQC,EAAM,SAAS,QAAQN,CAAQ,GACvCO,IAAeF,EAAM,MAAM,GAAGJ,CAAG,GACjCO,IAAaH,EAAM,SAASJ;AAElC,SACE,gBAAAQ;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAWC,EAAG,oBAAoBP,CAAS;AAAA,MAC3C,aAAWD;AAAA,MACV,GAAGE;AAAA,MAEH,UAAA;AAAA,QAAAG,EAAa,IAAI,CAACI,MAAU;AAI3B,cAAIL,EAAM,eAAeK,CAAK,GAAG;AAC/B,kBAAMC,IAAcD;AAEpB,mBAAOL,EAAM,aAAaM,GAAa;AAAA,cACrC,MAAAV;AAAA,cACA,WAAWQ,EAAG,0BAA0BE,EAAY,MAAM,SAAS;AAAA,YAAA,CACpE;AAAA,UACH;AACA,iBAAOD;AAAA,QACT,CAAC;AAAA,QAGAH,IAAa,KACZ,gBAAAK,EAAC,OAAA,EAAI,WAAU,iCAAgC,aAAWX,GACxD,UAAA,gBAAAO,EAAC,QAAA,EAAK,WAAU,wBAAuB,UAAA;AAAA,UAAA;AAAA,UAAED;AAAA,QAAA,EAAA,CAAW,EAAA,CACtD;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAIR;"}
|
|
@@ -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");;/* empty css */const x=require("../../utils/cn/cn.cjs");function N({children:g,count:n,max:d=99,variant:j="default",size:m="md",pill:f=!1,dot:a=!1,href:s,onClick:i,className:o,iconLeft:c,iconRight:b,...l}){let t=g;n!==void 0&&(a?t=null:t=n>d?`${d}+`:n);const r=x.cn("nui-badge",`nui-badge--${j}`,`nui-badge--${m}`,f&&"nui-badge--pill",a&&"nui-badge--dot",(s||i)&&"nui-badge--interactive",o),u=e.jsxs(e.Fragment,{children:[c&&e.jsx("span",{className:"nui-badge__icon",children:c}),!a&&t,b&&e.jsx("span",{className:"nui-badge__icon",children:b})]});return s?e.jsx("a",{href:s,className:r,...l,children:u}):i?e.jsx("button",{type:"button",onClick:i,className:r,...l,children:u}):e.jsx("span",{className:r,...l,children:u})}exports.Badge=N;
|
|
2
2
|
//# sourceMappingURL=Badge.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Badge.cjs","sources":["../../../src/components/badge/Badge.tsx"],"sourcesContent":["
|
|
1
|
+
{"version":3,"file":"Badge.cjs","sources":["../../../src/components/badge/Badge.tsx"],"sourcesContent":["import React from 'react';\nimport { cn } from '../../utils';\nimport './Badge.css';\n\nexport type BadgeVariant = 'default' | 'primary' | 'success' | 'warning' | 'danger' | 'outline';\nexport type BadgeSize = 'sm' | 'md' | 'lg';\n\nexport interface BadgeProps extends React.HTMLAttributes<HTMLSpanElement> {\n children?: React.ReactNode;\n /** Displays a numerical count inside the badge */\n count?: number;\n /** The maximum number to display before showing a '+' (e.g., 99+) */\n max?: number;\n variant?: BadgeVariant;\n size?: BadgeSize;\n /** Rounds the edges to create a pill shape */\n pill?: boolean;\n /** Renders a small, empty circular indicator instead of text */\n dot?: boolean;\n \n /** If provided, renders the badge as an <a> tag */\n href?: string;\n /** If provided, renders the badge as a <button> tag */\n onClick?: React.MouseEventHandler<HTMLElement>;\n \n iconLeft?: React.ReactNode;\n iconRight?: React.ReactNode;\n}\n\n/**\n * Badge Component\n * * A small status descriptor for UI elements.\n * Architecture Note: Dynamically renders as a <span>, <a>, or <button> based on\n * the presence of `href` or `onClick` props to ensure strict semantic HTML.\n */\nexport function Badge({\n children,\n count,\n max = 99,\n variant = 'default',\n size = 'md',\n pill = false,\n dot = false,\n href,\n onClick,\n className,\n iconLeft,\n iconRight,\n ...props\n}: BadgeProps) {\n \n // 1. Calculate Display Content\n let content = children;\n \n if (count !== undefined) {\n if (dot) {\n content = null; \n } else {\n content = count > max ? `${max}+` : count;\n }\n }\n\n // 2. Compute Classes\n const classes = cn(\n 'nui-badge',\n `nui-badge--${variant}`,\n `nui-badge--${size}`,\n pill && 'nui-badge--pill',\n dot && 'nui-badge--dot',\n (href || onClick) && 'nui-badge--interactive',\n className\n );\n\n // 3. Render Inner Content\n const inner = (\n <>\n {iconLeft && <span className=\"nui-badge__icon\">{iconLeft}</span>}\n {!dot && content}\n {iconRight && <span className=\"nui-badge__icon\">{iconRight}</span>}\n </>\n );\n\n // 4. Render as Link (Semantic Anchor)\n if (href) {\n return (\n <a \n href={href} \n className={classes} \n {...(props as React.AnchorHTMLAttributes<HTMLAnchorElement>)}\n >\n {inner}\n </a>\n );\n }\n\n // 5. Render as Button (Semantic Interactive Element)\n if (onClick) {\n return (\n <button \n type=\"button\" \n onClick={onClick as React.MouseEventHandler<HTMLButtonElement>} \n className={classes} \n {...(props as React.ButtonHTMLAttributes<HTMLButtonElement>)}\n >\n {inner}\n </button>\n );\n }\n\n // 6. Default Span (Static Indicator)\n return (\n <span className={classes} {...props}>\n {inner}\n </span>\n );\n}"],"names":["Badge","children","count","max","variant","size","pill","dot","href","onClick","className","iconLeft","iconRight","props","content","classes","cn","inner","jsxs","Fragment","jsx"],"mappings":"yLAmCO,SAASA,EAAM,CACpB,SAAAC,EACA,MAAAC,EACA,IAAAC,EAAM,GACN,QAAAC,EAAU,UACV,KAAAC,EAAO,KACP,KAAAC,EAAO,GACP,IAAAC,EAAM,GACN,KAAAC,EACA,QAAAC,EACA,UAAAC,EACA,SAAAC,EACA,UAAAC,EACA,GAAGC,CACL,EAAe,CAGb,IAAIC,EAAUb,EAEVC,IAAU,SACRK,EACFO,EAAU,KAEVA,EAAUZ,EAAQC,EAAM,GAAGA,CAAG,IAAMD,GAKxC,MAAMa,EAAUC,EAAAA,GACd,YACA,cAAcZ,CAAO,GACrB,cAAcC,CAAI,GAClBC,GAAQ,kBACRC,GAAO,kBACNC,GAAQC,IAAY,yBACrBC,CAAA,EAIIO,EACJC,EAAAA,KAAAC,EAAAA,SAAA,CACG,SAAA,CAAAR,GAAYS,EAAAA,IAAC,OAAA,CAAK,UAAU,kBAAmB,SAAAT,EAAS,EACxD,CAACJ,GAAOO,EACRF,GAAaQ,EAAAA,IAAC,OAAA,CAAK,UAAU,kBAAmB,SAAAR,CAAA,CAAU,CAAA,EAC7D,EAIF,OAAIJ,EAEAY,EAAAA,IAAC,IAAA,CACC,KAAAZ,EACA,UAAWO,EACV,GAAIF,EAEJ,SAAAI,CAAA,CAAA,EAMHR,EAEAW,EAAAA,IAAC,SAAA,CACC,KAAK,SACL,QAAAX,EACA,UAAWM,EACV,GAAIF,EAEJ,SAAAI,CAAA,CAAA,QAOJ,OAAA,CAAK,UAAWF,EAAU,GAAGF,EAC3B,SAAAI,EACH,CAEJ"}
|
|
@@ -1,81 +1,56 @@
|
|
|
1
|
-
import { jsx as
|
|
1
|
+
import { jsx as e, jsxs as N, Fragment as _ } from "react/jsx-runtime";
|
|
2
2
|
/* empty css */
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
title: n,
|
|
19
|
-
iconLeft: m,
|
|
20
|
-
iconRight: p
|
|
3
|
+
import { cn as h } from "../../utils/cn/cn.js";
|
|
4
|
+
function x({
|
|
5
|
+
children: b,
|
|
6
|
+
count: n,
|
|
7
|
+
max: c = 99,
|
|
8
|
+
variant: g = "default",
|
|
9
|
+
size: f = "md",
|
|
10
|
+
pill: o = !1,
|
|
11
|
+
dot: a = !1,
|
|
12
|
+
href: i,
|
|
13
|
+
onClick: s,
|
|
14
|
+
className: p,
|
|
15
|
+
iconLeft: u,
|
|
16
|
+
iconRight: m,
|
|
17
|
+
...l
|
|
21
18
|
}) {
|
|
22
|
-
let
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
{
|
|
39
|
-
className: t,
|
|
40
|
-
"aria-label": e,
|
|
41
|
-
"aria-hidden": e ? void 0 : !0,
|
|
42
|
-
title: n
|
|
43
|
-
}
|
|
44
|
-
);
|
|
45
|
-
const b = /* @__PURE__ */ _(
|
|
46
|
-
"span",
|
|
47
|
-
{
|
|
48
|
-
className: "ui-badge-content",
|
|
49
|
-
"aria-hidden": e ? !0 : void 0,
|
|
50
|
-
children: [
|
|
51
|
-
m && /* @__PURE__ */ r("span", { className: "ui-badge__icon", children: m }),
|
|
52
|
-
l,
|
|
53
|
-
p && /* @__PURE__ */ r("span", { className: "ui-badge__icon", children: p })
|
|
54
|
-
]
|
|
55
|
-
}
|
|
56
|
-
);
|
|
57
|
-
return u ? /* @__PURE__ */ r(
|
|
19
|
+
let d = b;
|
|
20
|
+
n !== void 0 && (a ? d = null : d = n > c ? `${c}+` : n);
|
|
21
|
+
const r = h(
|
|
22
|
+
"nui-badge",
|
|
23
|
+
`nui-badge--${g}`,
|
|
24
|
+
`nui-badge--${f}`,
|
|
25
|
+
o && "nui-badge--pill",
|
|
26
|
+
a && "nui-badge--dot",
|
|
27
|
+
(i || s) && "nui-badge--interactive",
|
|
28
|
+
p
|
|
29
|
+
), t = /* @__PURE__ */ N(_, { children: [
|
|
30
|
+
u && /* @__PURE__ */ e("span", { className: "nui-badge__icon", children: u }),
|
|
31
|
+
!a && d,
|
|
32
|
+
m && /* @__PURE__ */ e("span", { className: "nui-badge__icon", children: m })
|
|
33
|
+
] });
|
|
34
|
+
return i ? /* @__PURE__ */ e(
|
|
58
35
|
"a",
|
|
59
36
|
{
|
|
60
|
-
href:
|
|
61
|
-
className:
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
children: b
|
|
37
|
+
href: i,
|
|
38
|
+
className: r,
|
|
39
|
+
...l,
|
|
40
|
+
children: t
|
|
65
41
|
}
|
|
66
|
-
) :
|
|
42
|
+
) : s ? /* @__PURE__ */ e(
|
|
67
43
|
"button",
|
|
68
44
|
{
|
|
69
45
|
type: "button",
|
|
70
|
-
onClick:
|
|
71
|
-
className:
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
children: b
|
|
46
|
+
onClick: s,
|
|
47
|
+
className: r,
|
|
48
|
+
...l,
|
|
49
|
+
children: t
|
|
75
50
|
}
|
|
76
|
-
) : /* @__PURE__ */
|
|
51
|
+
) : /* @__PURE__ */ e("span", { className: r, ...l, children: t });
|
|
77
52
|
}
|
|
78
53
|
export {
|
|
79
|
-
|
|
54
|
+
x as Badge
|
|
80
55
|
};
|
|
81
56
|
//# sourceMappingURL=Badge.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Badge.js","sources":["../../../src/components/badge/Badge.tsx"],"sourcesContent":["
|
|
1
|
+
{"version":3,"file":"Badge.js","sources":["../../../src/components/badge/Badge.tsx"],"sourcesContent":["import React from 'react';\nimport { cn } from '../../utils';\nimport './Badge.css';\n\nexport type BadgeVariant = 'default' | 'primary' | 'success' | 'warning' | 'danger' | 'outline';\nexport type BadgeSize = 'sm' | 'md' | 'lg';\n\nexport interface BadgeProps extends React.HTMLAttributes<HTMLSpanElement> {\n children?: React.ReactNode;\n /** Displays a numerical count inside the badge */\n count?: number;\n /** The maximum number to display before showing a '+' (e.g., 99+) */\n max?: number;\n variant?: BadgeVariant;\n size?: BadgeSize;\n /** Rounds the edges to create a pill shape */\n pill?: boolean;\n /** Renders a small, empty circular indicator instead of text */\n dot?: boolean;\n \n /** If provided, renders the badge as an <a> tag */\n href?: string;\n /** If provided, renders the badge as a <button> tag */\n onClick?: React.MouseEventHandler<HTMLElement>;\n \n iconLeft?: React.ReactNode;\n iconRight?: React.ReactNode;\n}\n\n/**\n * Badge Component\n * * A small status descriptor for UI elements.\n * Architecture Note: Dynamically renders as a <span>, <a>, or <button> based on\n * the presence of `href` or `onClick` props to ensure strict semantic HTML.\n */\nexport function Badge({\n children,\n count,\n max = 99,\n variant = 'default',\n size = 'md',\n pill = false,\n dot = false,\n href,\n onClick,\n className,\n iconLeft,\n iconRight,\n ...props\n}: BadgeProps) {\n \n // 1. Calculate Display Content\n let content = children;\n \n if (count !== undefined) {\n if (dot) {\n content = null; \n } else {\n content = count > max ? `${max}+` : count;\n }\n }\n\n // 2. Compute Classes\n const classes = cn(\n 'nui-badge',\n `nui-badge--${variant}`,\n `nui-badge--${size}`,\n pill && 'nui-badge--pill',\n dot && 'nui-badge--dot',\n (href || onClick) && 'nui-badge--interactive',\n className\n );\n\n // 3. Render Inner Content\n const inner = (\n <>\n {iconLeft && <span className=\"nui-badge__icon\">{iconLeft}</span>}\n {!dot && content}\n {iconRight && <span className=\"nui-badge__icon\">{iconRight}</span>}\n </>\n );\n\n // 4. Render as Link (Semantic Anchor)\n if (href) {\n return (\n <a \n href={href} \n className={classes} \n {...(props as React.AnchorHTMLAttributes<HTMLAnchorElement>)}\n >\n {inner}\n </a>\n );\n }\n\n // 5. Render as Button (Semantic Interactive Element)\n if (onClick) {\n return (\n <button \n type=\"button\" \n onClick={onClick as React.MouseEventHandler<HTMLButtonElement>} \n className={classes} \n {...(props as React.ButtonHTMLAttributes<HTMLButtonElement>)}\n >\n {inner}\n </button>\n );\n }\n\n // 6. Default Span (Static Indicator)\n return (\n <span className={classes} {...props}>\n {inner}\n </span>\n );\n}"],"names":["Badge","children","count","max","variant","size","pill","dot","href","onClick","className","iconLeft","iconRight","props","content","classes","cn","inner","jsxs","Fragment","jsx"],"mappings":";;;AAmCO,SAASA,EAAM;AAAA,EACpB,UAAAC;AAAA,EACA,OAAAC;AAAA,EACA,KAAAC,IAAM;AAAA,EACN,SAAAC,IAAU;AAAA,EACV,MAAAC,IAAO;AAAA,EACP,MAAAC,IAAO;AAAA,EACP,KAAAC,IAAM;AAAA,EACN,MAAAC;AAAA,EACA,SAAAC;AAAA,EACA,WAAAC;AAAA,EACA,UAAAC;AAAA,EACA,WAAAC;AAAA,EACA,GAAGC;AACL,GAAe;AAGb,MAAIC,IAAUb;AAEd,EAAIC,MAAU,WACRK,IACFO,IAAU,OAEVA,IAAUZ,IAAQC,IAAM,GAAGA,CAAG,MAAMD;AAKxC,QAAMa,IAAUC;AAAA,IACd;AAAA,IACA,cAAcZ,CAAO;AAAA,IACrB,cAAcC,CAAI;AAAA,IAClBC,KAAQ;AAAA,IACRC,KAAO;AAAA,KACNC,KAAQC,MAAY;AAAA,IACrBC;AAAA,EAAA,GAIIO,IACJ,gBAAAC,EAAAC,GAAA,EACG,UAAA;AAAA,IAAAR,KAAY,gBAAAS,EAAC,QAAA,EAAK,WAAU,mBAAmB,UAAAT,GAAS;AAAA,IACxD,CAACJ,KAAOO;AAAA,IACRF,KAAa,gBAAAQ,EAAC,QAAA,EAAK,WAAU,mBAAmB,UAAAR,EAAA,CAAU;AAAA,EAAA,GAC7D;AAIF,SAAIJ,IAEA,gBAAAY;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,MAAAZ;AAAA,MACA,WAAWO;AAAA,MACV,GAAIF;AAAA,MAEJ,UAAAI;AAAA,IAAA;AAAA,EAAA,IAMHR,IAEA,gBAAAW;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,MAAK;AAAA,MACL,SAAAX;AAAA,MACA,WAAWM;AAAA,MACV,GAAIF;AAAA,MAEJ,UAAAI;AAAA,IAAA;AAAA,EAAA,sBAOJ,QAAA,EAAK,WAAWF,GAAU,GAAGF,GAC3B,UAAAI,GACH;AAEJ;"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),l=require("./Badge.cjs");function
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),d=require("react"),l=require("./Badge.cjs");;/* empty css */const g=require("../../utils/cn/cn.cjs");function m({children:n,max:r=3,className:t,...a}){const s=d.Children.toArray(n),c=s.slice(0,r),i=s.length-r;return e.jsxs("div",{className:g.cn("nui-badge-group",t),...a,children:[c.map((u,o)=>e.jsx("span",{className:"nui-badge-group__item",children:u},o)),i>0&&e.jsxs(l.Badge,{variant:"default",size:"sm",className:"nui-badge--more",children:["+",i]})]})}exports.BadgeGroup=m;
|
|
2
2
|
//# sourceMappingURL=BadgeGroup.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BadgeGroup.cjs","sources":["../../../src/components/badge/BadgeGroup.tsx"],"sourcesContent":["
|
|
1
|
+
{"version":3,"file":"BadgeGroup.cjs","sources":["../../../src/components/badge/BadgeGroup.tsx"],"sourcesContent":["import React from 'react';\nimport { cn } from '../../utils';\nimport { Badge } from './Badge';\nimport './Badge.css';\n\ninterface BadgeGroupProps extends React.HTMLAttributes<HTMLDivElement> {\n // Marked as optional to allow empty dynamic arrays without TS errors\n children?: React.ReactNode; \n max?: number;\n}\n\n/**\n * BadgeGroup Component\n * * Visually groups multiple Badges together, handling overflow truncation.\n */\nexport function BadgeGroup({\n children,\n max = 3,\n className,\n ...props\n}: BadgeGroupProps) {\n const items = React.Children.toArray(children);\n const visible = items.slice(0, max);\n const extra = items.length - max;\n\n return (\n <div className={cn(\"nui-badge-group\", className)} {...props}>\n {visible.map((item, i) => (\n // Wrapper span ensures spacing/layout integrity regardless of badge element type\n <span key={i} className=\"nui-badge-group__item\">{item}</span>\n ))}\n\n {extra > 0 && (\n <Badge variant=\"default\" size=\"sm\" className=\"nui-badge--more\">\n +{extra}\n </Badge>\n )}\n </div>\n );\n}"],"names":["BadgeGroup","children","max","className","props","items","React","visible","extra","jsxs","cn","item","i","jsx","Badge"],"mappings":"qOAeO,SAASA,EAAW,CACzB,SAAAC,EACA,IAAAC,EAAM,EACN,UAAAC,EACA,GAAGC,CACL,EAAoB,CAClB,MAAMC,EAAQC,EAAM,SAAS,QAAQL,CAAQ,EACvCM,EAAUF,EAAM,MAAM,EAAGH,CAAG,EAC5BM,EAAQH,EAAM,OAASH,EAE7B,OACEO,EAAAA,KAAC,OAAI,UAAWC,EAAAA,GAAG,kBAAmBP,CAAS,EAAI,GAAGC,EACnD,SAAA,CAAAG,EAAQ,IAAI,CAACI,EAAMC,IAElBC,EAAAA,IAAC,OAAA,CAAa,UAAU,wBAAyB,YAAtCD,CAA2C,CACvD,EAEAJ,EAAQ,GACPC,OAACK,EAAAA,MAAA,CAAM,QAAQ,UAAU,KAAK,KAAK,UAAU,kBAAkB,SAAA,CAAA,IAC3DN,CAAA,CAAA,CACJ,CAAA,EAEJ,CAEJ"}
|
|
@@ -1,17 +1,27 @@
|
|
|
1
|
-
import { jsxs as
|
|
2
|
-
import
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
import { jsxs as o, jsx as d } from "react/jsx-runtime";
|
|
2
|
+
import l from "react";
|
|
3
|
+
import { Badge as p } from "./Badge.js";
|
|
4
|
+
/* empty css */
|
|
5
|
+
import { cn as u } from "../../utils/cn/cn.js";
|
|
6
|
+
function x({
|
|
7
|
+
children: t,
|
|
5
8
|
max: e = 3,
|
|
6
|
-
className:
|
|
9
|
+
className: a,
|
|
10
|
+
...s
|
|
7
11
|
}) {
|
|
8
|
-
const t = r.slice(0, e), i = r.length - e;
|
|
9
|
-
return /* @__PURE__ */
|
|
10
|
-
|
|
11
|
-
|
|
12
|
+
const r = l.Children.toArray(t), n = r.slice(0, e), i = r.length - e;
|
|
13
|
+
return /* @__PURE__ */ o("div", { className: u("nui-badge-group", a), ...s, children: [
|
|
14
|
+
n.map((m, c) => (
|
|
15
|
+
// Wrapper span ensures spacing/layout integrity regardless of badge element type
|
|
16
|
+
/* @__PURE__ */ d("span", { className: "nui-badge-group__item", children: m }, c)
|
|
17
|
+
)),
|
|
18
|
+
i > 0 && /* @__PURE__ */ o(p, { variant: "default", size: "sm", className: "nui-badge--more", children: [
|
|
19
|
+
"+",
|
|
20
|
+
i
|
|
21
|
+
] })
|
|
12
22
|
] });
|
|
13
23
|
}
|
|
14
24
|
export {
|
|
15
|
-
|
|
25
|
+
x as BadgeGroup
|
|
16
26
|
};
|
|
17
27
|
//# sourceMappingURL=BadgeGroup.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BadgeGroup.js","sources":["../../../src/components/badge/BadgeGroup.tsx"],"sourcesContent":["
|
|
1
|
+
{"version":3,"file":"BadgeGroup.js","sources":["../../../src/components/badge/BadgeGroup.tsx"],"sourcesContent":["import React from 'react';\nimport { cn } from '../../utils';\nimport { Badge } from './Badge';\nimport './Badge.css';\n\ninterface BadgeGroupProps extends React.HTMLAttributes<HTMLDivElement> {\n // Marked as optional to allow empty dynamic arrays without TS errors\n children?: React.ReactNode; \n max?: number;\n}\n\n/**\n * BadgeGroup Component\n * * Visually groups multiple Badges together, handling overflow truncation.\n */\nexport function BadgeGroup({\n children,\n max = 3,\n className,\n ...props\n}: BadgeGroupProps) {\n const items = React.Children.toArray(children);\n const visible = items.slice(0, max);\n const extra = items.length - max;\n\n return (\n <div className={cn(\"nui-badge-group\", className)} {...props}>\n {visible.map((item, i) => (\n // Wrapper span ensures spacing/layout integrity regardless of badge element type\n <span key={i} className=\"nui-badge-group__item\">{item}</span>\n ))}\n\n {extra > 0 && (\n <Badge variant=\"default\" size=\"sm\" className=\"nui-badge--more\">\n +{extra}\n </Badge>\n )}\n </div>\n );\n}"],"names":["BadgeGroup","children","max","className","props","items","React","visible","extra","jsxs","cn","item","i","jsx","Badge"],"mappings":";;;;;AAeO,SAASA,EAAW;AAAA,EACzB,UAAAC;AAAA,EACA,KAAAC,IAAM;AAAA,EACN,WAAAC;AAAA,EACA,GAAGC;AACL,GAAoB;AAClB,QAAMC,IAAQC,EAAM,SAAS,QAAQL,CAAQ,GACvCM,IAAUF,EAAM,MAAM,GAAGH,CAAG,GAC5BM,IAAQH,EAAM,SAASH;AAE7B,SACE,gBAAAO,EAAC,SAAI,WAAWC,EAAG,mBAAmBP,CAAS,GAAI,GAAGC,GACnD,UAAA;AAAA,IAAAG,EAAQ,IAAI,CAACI,GAAMC;AAAA;AAAA,MAElB,gBAAAC,EAAC,QAAA,EAAa,WAAU,yBAAyB,eAAtCD,CAA2C;AAAA,KACvD;AAAA,IAEAJ,IAAQ,KACP,gBAAAC,EAACK,GAAA,EAAM,SAAQ,WAAU,MAAK,MAAK,WAAU,mBAAkB,UAAA;AAAA,MAAA;AAAA,MAC3DN;AAAA,IAAA,EAAA,CACJ;AAAA,EAAA,GAEJ;AAEJ;"}
|
|
@@ -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");;/* empty css */const b=require("../../utils/cn/cn.cjs");function j({items:r,maxItems:m=5,separator:c="›",className:o,..._}){if(!r.length)return null;let i=r;if(r.length>m){const s=r.slice(0,1),n=r.slice(-2);i=[...s,"ellipsis",...n]}return e.jsx("nav",{"aria-label":"Breadcrumb",className:b.cn("nui-breadcrumbs",o),..._,children:e.jsx("ol",{className:"nui-breadcrumbs__list",children:i.map((s,n)=>{const a=n===i.length-1,l=`crumb-${n}`;if(s==="ellipsis")return e.jsxs("li",{className:"nui-breadcrumbs__item",children:[e.jsx("span",{className:"nui-breadcrumbs__ellipsis","aria-hidden":"true",children:"…"}),e.jsx("span",{className:"nui-breadcrumbs__separator","aria-hidden":"true",children:c})]},l);const{label:u,href:t,onClick:d}=s,h=!!(t||d)&&!a;return e.jsxs("li",{className:"nui-breadcrumbs__item",children:[h?e.jsx("a",{href:t,onClick:d,className:"nui-breadcrumbs__link",children:u}):e.jsx("span",{className:b.cn("nui-breadcrumbs__link",a&&"nui-breadcrumbs__link--current"),"aria-current":a?"page":void 0,children:u}),!a&&e.jsx("span",{className:"nui-breadcrumbs__separator","aria-hidden":"true",children:c})]},l)})})})}exports.Breadcrumbs=j;
|
|
2
2
|
//# sourceMappingURL=Breadcrumbs.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Breadcrumbs.cjs","sources":["../../../src/components/breadcrumbs/Breadcrumbs.tsx"],"sourcesContent":["
|
|
1
|
+
{"version":3,"file":"Breadcrumbs.cjs","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","isInteractive"],"mappings":"+LA0BO,SAASA,EAAY,CAC1B,MAAAC,EACA,SAAAC,EAAW,EACX,UAAAC,EAAY,IACZ,UAAAC,EACA,GAAGC,CACL,EAAqB,CACnB,GAAI,CAACJ,EAAM,OAAQ,OAAO,KAK1B,IAAIK,EAA+CL,EAEnD,GAAIA,EAAM,OAASC,EAAU,CAC3B,MAAMK,EAAQN,EAAM,MAAM,EAAG,CAAC,EACxBO,EAAMP,EAAM,MAAM,EAAE,EAC1BK,EAAc,CAAC,GAAGC,EAAO,WAAY,GAAGC,CAAG,CAC7C,CAEA,OACEC,EAAAA,IAAC,MAAA,CACC,aAAW,aACX,UAAWC,EAAAA,GAAG,kBAAmBN,CAAS,EACzC,GAAGC,EAEJ,SAAAI,EAAAA,IAAC,MAAG,UAAU,wBACX,WAAY,IAAI,CAACE,EAAMC,IAAU,CAChC,MAAMC,EAASD,IAAUN,EAAY,OAAS,EACxCQ,EAAM,SAASF,CAAK,GAG1B,GAAID,IAAS,WACX,OACEI,EAAAA,KAAC,KAAA,CAAa,UAAU,wBACtB,SAAA,CAAAN,MAAC,OAAA,CAAK,UAAU,4BAA4B,cAAY,OAAO,SAAA,IAE/D,QACC,OAAA,CAAK,UAAU,6BAA6B,cAAY,OACtD,SAAAN,CAAA,CACH,CAAA,CAAA,EANOW,CAOT,EAKJ,KAAM,CAAE,MAAAE,EAAO,KAAAC,EAAM,QAAAC,CAAA,EAAYP,EAE3BQ,EAAgB,GAAQF,GAAQC,IAAY,CAACL,EAEnD,OACEE,EAAAA,KAAC,KAAA,CAAa,UAAU,wBACrB,SAAA,CAAAI,EAECV,EAAAA,IAAC,IAAA,CACC,KAAAQ,EACA,QAAAC,EACA,UAAU,wBAET,SAAAF,CAAA,CAAA,EAIHP,EAAAA,IAAC,OAAA,CACC,UAAWC,EAAAA,GACT,wBACAG,GAAU,gCAAA,EAEZ,eAAcA,EAAS,OAAS,OAE/B,SAAAG,CAAA,CAAA,EAKJ,CAACH,GACAJ,MAAC,OAAA,CAAK,UAAU,6BAA6B,cAAY,OACtD,SAAAN,CAAA,CACH,CAAA,CAAA,EA3BKW,CA6BT,CAEJ,CAAC,CAAA,CACH,CAAA,CAAA,CAGN"}
|