@g4rcez/components 4.0.1 → 4.1.1
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/ai/SKILL.md +233 -0
- package/ai/docs/Alert.md +166 -0
- package/ai/docs/AnimatedList.md +206 -0
- package/ai/docs/Autocomplete.md +221 -0
- package/ai/docs/Button.md +182 -0
- package/ai/docs/Calendar.md +185 -0
- package/ai/docs/Card.md +178 -0
- package/ai/docs/Checkbox.md +194 -0
- package/ai/docs/CommandPalette.md +275 -0
- package/ai/docs/DatePicker.md +152 -0
- package/ai/docs/Dropdown.md +195 -0
- package/{dist/ai → ai}/docs/Empty.md +41 -44
- package/{dist/ai → ai}/docs/Expand.md +40 -54
- package/ai/docs/FileUpload.md +218 -0
- package/{dist/ai → ai}/docs/Form.md +35 -29
- package/{dist/ai → ai}/docs/FormReset.md +37 -37
- package/{dist/ai → ai}/docs/Heading.md +4 -6
- package/ai/docs/Input.md +212 -0
- package/ai/docs/InputField.md +170 -0
- package/ai/docs/List.md +208 -0
- package/ai/docs/Menu.md +168 -0
- package/ai/docs/Modal.md +273 -0
- package/ai/docs/MultiSelect.md +177 -0
- package/ai/docs/Notifications.md +231 -0
- package/ai/docs/PageCalendar.md +262 -0
- package/{dist/ai → ai}/docs/Polymorph.md +25 -41
- package/{dist/ai → ai}/docs/Progress.md +55 -51
- package/{dist/ai → ai}/docs/Radiobox.md +49 -41
- package/{dist/ai → ai}/docs/RenderOnView.md +26 -32
- package/{dist/ai → ai}/docs/Resizable.md +60 -65
- package/ai/docs/Select.md +284 -0
- package/{dist/ai → ai}/docs/Shortcut.md +14 -14
- package/{dist/ai → ai}/docs/Skeleton.md +56 -60
- package/{dist/ai → ai}/docs/Slider.md +26 -49
- package/{dist/ai → ai}/docs/Slot.md +15 -17
- package/{dist/ai → ai}/docs/Spinner.md +17 -15
- package/{dist/ai → ai}/docs/Stats.md +44 -42
- package/ai/docs/Step.md +159 -0
- package/{dist/ai → ai}/docs/Switch.md +44 -54
- package/ai/docs/Table.md +286 -0
- package/ai/docs/Tabs.md +191 -0
- package/ai/docs/Tag.md +222 -0
- package/{dist/ai → ai}/docs/TaskList.md +40 -50
- package/ai/docs/Textarea.md +144 -0
- package/ai/docs/Timeline.md +212 -0
- package/{dist/ai → ai}/docs/Toolbar.md +46 -46
- package/ai/docs/Tooltip.md +231 -0
- package/ai/docs/Typography.md +187 -0
- package/ai/docs/Wizard.md +208 -0
- package/ai/docs/index.md +183 -0
- package/dist/autocomplete-DcTNOwyg.js +393 -0
- package/dist/autocomplete-DcTNOwyg.js.map +1 -0
- package/dist/{calendar-B5lSd0ID.js → calendar-BJMHRoy2.js} +104 -105
- package/dist/calendar-BJMHRoy2.js.map +1 -0
- package/dist/components/core/button.js +10 -10
- package/dist/components/core/button.js.map +1 -1
- package/dist/components/core/tag.js +4 -4
- package/dist/components/core/tag.js.map +1 -1
- package/dist/components/display/alert.js +48 -46
- package/dist/components/display/alert.js.map +1 -1
- package/dist/components/display/calendar.js +6 -6
- package/dist/components/display/card.js +2 -2
- package/dist/components/display/card.js.map +1 -1
- package/dist/components/display/list.js +1 -1
- package/dist/components/display/list.js.map +1 -1
- package/dist/components/display/notifications.js +3 -3
- package/dist/components/display/stats.js +1 -1
- package/dist/components/display/tabs.js +2 -2
- package/dist/components/display/timeline.js +1 -1
- package/dist/components/floating/dropdown.js +25 -17
- package/dist/components/floating/dropdown.js.map +1 -1
- package/dist/components/floating/expand.js +7 -7
- package/dist/components/floating/expand.js.map +1 -1
- package/dist/components/floating/menu.js +10 -10
- package/dist/components/floating/menu.js.map +1 -1
- package/dist/components/floating/modal.js +106 -102
- package/dist/components/floating/modal.js.map +1 -1
- package/dist/components/floating/tooltip.js +14 -14
- package/dist/components/floating/tooltip.js.map +1 -1
- package/dist/components/form/autocomplete.js +6 -6
- package/dist/components/form/checkbox.js +1 -1
- package/dist/components/form/date-picker.js +5 -5
- package/dist/components/form/file-upload.js +2 -2
- package/dist/components/form/form.js.map +1 -1
- package/dist/components/form/input.js +1 -1
- package/dist/components/form/radiobox.js +1 -1
- package/dist/components/form/select.js +3 -3
- package/dist/components/form/switch.js +2 -2
- package/dist/components/form/switch.js.map +1 -1
- package/dist/components/table/table.js +3 -3
- package/dist/{date-picker-DwNo22lx.js → date-picker-Bnl07nd8.js} +8 -6
- package/dist/date-picker-Bnl07nd8.js.map +1 -0
- package/dist/{dom-Dl8XH0CK.js → dom-CyQHY7ID.js} +66 -61
- package/dist/dom-CyQHY7ID.js.map +1 -0
- package/dist/{file-upload-Brf2NkLr.js → file-upload-93d5DR4q.js} +139 -129
- package/dist/file-upload-93d5DR4q.js.map +1 -0
- package/dist/{floating-ui.react-QNHG9W4N.js → floating-ui.react-M2PGXLDp.js} +8 -8
- package/dist/floating-ui.react-M2PGXLDp.js.map +1 -0
- package/dist/{fns-D2eyJKd5.js → fns-C7Dt27Qd.js} +2 -2
- package/dist/fns-C7Dt27Qd.js.map +1 -0
- package/dist/index-BJ1ayTam.js +126 -0
- package/dist/index-BJ1ayTam.js.map +1 -0
- package/dist/index-C-PuFUZi.js.map +1 -1
- package/dist/{index-BelDtX5M.js → index-DDeQW0JW.js} +399 -404
- package/dist/index-DDeQW0JW.js.map +1 -0
- package/dist/index-DE4shK8D.js +215 -0
- package/dist/index-DE4shK8D.js.map +1 -0
- package/dist/{index-DJSMaZR4.js → index-DlJ_2RBL.js} +2 -2
- package/dist/index-DlJ_2RBL.js.map +1 -0
- package/dist/index.css +1 -1
- package/dist/index.esm-BaIwleSE.js.map +1 -1
- package/dist/index.js +2826 -2765
- package/dist/index.js.map +1 -1
- package/dist/{input-CrGrSnUt.js → input-_MVxmIpu.js} +116 -114
- package/dist/input-_MVxmIpu.js.map +1 -0
- package/dist/{input-field-5vYcz5tT.js → input-field-CDCOODOl.js} +63 -47
- package/dist/input-field-CDCOODOl.js.map +1 -0
- package/dist/notifications-Dp0ydKJS.js +2576 -0
- package/dist/notifications-Dp0ydKJS.js.map +1 -0
- package/dist/polymorph-B5n9fs_K.js.map +1 -1
- package/dist/preset/plugin.tailwind.d.ts.map +1 -1
- package/dist/preset/plugin.tailwind.js +20 -18
- package/dist/preset/preset.tailwind.js +24 -25
- package/dist/preset/src/styles/common.js +6 -3
- package/dist/preset/src/styles/dark.d.ts.map +1 -1
- package/dist/preset/src/styles/dark.js +9 -5
- package/dist/preset/src/styles/design-tokens.js +68 -89
- package/dist/preset/src/styles/light.d.ts.map +1 -1
- package/dist/preset/src/styles/light.js +9 -5
- package/dist/preset/src/styles/theme.js +7 -4
- package/dist/preset/src/styles/theme.types.d.ts +2 -1
- package/dist/preset/src/styles/theme.types.d.ts.map +1 -1
- package/dist/preset/src/styles/theme.types.js +2 -1
- package/dist/skeleton-BjJobYYf.js +24 -0
- package/dist/skeleton-BjJobYYf.js.map +1 -0
- package/dist/slot-CRyweuj0.js.map +1 -1
- package/dist/styles/common.js +6 -3
- package/dist/styles/dark.d.ts.map +1 -1
- package/dist/styles/dark.js +9 -5
- package/dist/styles/design-tokens.js +68 -89
- package/dist/styles/light.d.ts.map +1 -1
- package/dist/styles/light.js +9 -5
- package/dist/styles/theme.js +7 -4
- package/dist/styles/theme.types.d.ts +2 -1
- package/dist/styles/theme.types.d.ts.map +1 -1
- package/dist/styles/theme.types.js +2 -1
- package/dist/tabs-B0g7YtQv.js +123 -0
- package/dist/tabs-B0g7YtQv.js.map +1 -0
- package/dist/tsconfig.lib.tsbuildinfo +1 -0
- package/dist/{context-BFXNJVn2.js → use-translations-DSltA7H_.js} +38 -30
- package/dist/use-translations-DSltA7H_.js.map +1 -0
- package/package.json +101 -88
- package/dist/ai/SKILL.md +0 -266
- package/dist/ai/docs/Alert.md +0 -167
- package/dist/ai/docs/AnimatedList.md +0 -205
- package/dist/ai/docs/Autocomplete.md +0 -225
- package/dist/ai/docs/Button.md +0 -182
- package/dist/ai/docs/Calendar.md +0 -219
- package/dist/ai/docs/Card.md +0 -174
- package/dist/ai/docs/Checkbox.md +0 -199
- package/dist/ai/docs/CommandPalette.md +0 -293
- package/dist/ai/docs/DatePicker.md +0 -171
- package/dist/ai/docs/Dropdown.md +0 -223
- package/dist/ai/docs/FileUpload.md +0 -225
- package/dist/ai/docs/Input.md +0 -237
- package/dist/ai/docs/InputField.md +0 -170
- package/dist/ai/docs/List.md +0 -205
- package/dist/ai/docs/Menu.md +0 -166
- package/dist/ai/docs/Modal.md +0 -280
- package/dist/ai/docs/MultiSelect.md +0 -196
- package/dist/ai/docs/Notifications.md +0 -231
- package/dist/ai/docs/PageCalendar.md +0 -271
- package/dist/ai/docs/Select.md +0 -284
- package/dist/ai/docs/Step.md +0 -159
- package/dist/ai/docs/Table.md +0 -298
- package/dist/ai/docs/Tabs.md +0 -191
- package/dist/ai/docs/Tag.md +0 -224
- package/dist/ai/docs/Textarea.md +0 -167
- package/dist/ai/docs/Timeline.md +0 -210
- package/dist/ai/docs/Tooltip.md +0 -231
- package/dist/ai/docs/TransferList.md +0 -142
- package/dist/ai/docs/Typography.md +0 -187
- package/dist/ai/docs/Wizard.md +0 -213
- package/dist/ai/docs/index.md +0 -183
- package/dist/autocomplete-Cn9Z2hLq.js +0 -375
- package/dist/autocomplete-Cn9Z2hLq.js.map +0 -1
- package/dist/calendar-B5lSd0ID.js.map +0 -1
- package/dist/components/core/button.d.ts +0 -77
- package/dist/components/core/button.d.ts.map +0 -1
- package/dist/components/core/heading.d.ts +0 -3
- package/dist/components/core/heading.d.ts.map +0 -1
- package/dist/components/core/polymorph.d.ts +0 -10
- package/dist/components/core/polymorph.d.ts.map +0 -1
- package/dist/components/core/render-on-view.d.ts +0 -7
- package/dist/components/core/render-on-view.d.ts.map +0 -1
- package/dist/components/core/resizable.d.ts +0 -3
- package/dist/components/core/resizable.d.ts.map +0 -1
- package/dist/components/core/slot.d.ts +0 -16
- package/dist/components/core/slot.d.ts.map +0 -1
- package/dist/components/core/tag.d.ts +0 -35
- package/dist/components/core/tag.d.ts.map +0 -1
- package/dist/components/core/typography.d.ts +0 -24
- package/dist/components/core/typography.d.ts.map +0 -1
- package/dist/components/display/alert.d.ts +0 -28
- package/dist/components/display/alert.d.ts.map +0 -1
- package/dist/components/display/calendar.d.ts +0 -42
- package/dist/components/display/calendar.d.ts.map +0 -1
- package/dist/components/display/card.d.ts +0 -29
- package/dist/components/display/card.d.ts.map +0 -1
- package/dist/components/display/empty.d.ts +0 -8
- package/dist/components/display/empty.d.ts.map +0 -1
- package/dist/components/display/list.d.ts +0 -16
- package/dist/components/display/list.d.ts.map +0 -1
- package/dist/components/display/notifications.d.ts +0 -27
- package/dist/components/display/notifications.d.ts.map +0 -1
- package/dist/components/display/progress.d.ts +0 -13
- package/dist/components/display/progress.d.ts.map +0 -1
- package/dist/components/display/shortcut.d.ts +0 -4
- package/dist/components/display/shortcut.d.ts.map +0 -1
- package/dist/components/display/skeleton.d.ts +0 -12
- package/dist/components/display/skeleton.d.ts.map +0 -1
- package/dist/components/display/spinner.d.ts +0 -5
- package/dist/components/display/spinner.d.ts.map +0 -1
- package/dist/components/display/stats.d.ts +0 -12
- package/dist/components/display/stats.d.ts.map +0 -1
- package/dist/components/display/step.d.ts +0 -24
- package/dist/components/display/step.d.ts.map +0 -1
- package/dist/components/display/tabs.d.ts +0 -24
- package/dist/components/display/tabs.d.ts.map +0 -1
- package/dist/components/display/timeline.d.ts +0 -10
- package/dist/components/display/timeline.d.ts.map +0 -1
- package/dist/components/floating/command-palette.d.ts +0 -49
- package/dist/components/floating/command-palette.d.ts.map +0 -1
- package/dist/components/floating/dropdown.d.ts +0 -15
- package/dist/components/floating/dropdown.d.ts.map +0 -1
- package/dist/components/floating/expand.d.ts +0 -11
- package/dist/components/floating/expand.d.ts.map +0 -1
- package/dist/components/floating/menu.d.ts +0 -52
- package/dist/components/floating/menu.d.ts.map +0 -1
- package/dist/components/floating/modal.d.ts +0 -60
- package/dist/components/floating/modal.d.ts.map +0 -1
- package/dist/components/floating/toolbar.d.ts +0 -6
- package/dist/components/floating/toolbar.d.ts.map +0 -1
- package/dist/components/floating/tooltip.d.ts +0 -17
- package/dist/components/floating/tooltip.d.ts.map +0 -1
- package/dist/components/floating/wizard.d.ts +0 -26
- package/dist/components/floating/wizard.d.ts.map +0 -1
- package/dist/components/form/autocomplete.d.ts +0 -16
- package/dist/components/form/autocomplete.d.ts.map +0 -1
- package/dist/components/form/checkbox.d.ts +0 -12
- package/dist/components/form/checkbox.d.ts.map +0 -1
- package/dist/components/form/date-picker.d.ts +0 -10
- package/dist/components/form/date-picker.d.ts.map +0 -1
- package/dist/components/form/file-upload.d.ts +0 -15
- package/dist/components/form/file-upload.d.ts.map +0 -1
- package/dist/components/form/form.d.ts +0 -3
- package/dist/components/form/form.d.ts.map +0 -1
- package/dist/components/form/formReset.d.ts +0 -2
- package/dist/components/form/formReset.d.ts.map +0 -1
- package/dist/components/form/free-text.d.ts +0 -11
- package/dist/components/form/free-text.d.ts.map +0 -1
- package/dist/components/form/input-field.d.ts +0 -34
- package/dist/components/form/input-field.d.ts.map +0 -1
- package/dist/components/form/input.d.ts +0 -52
- package/dist/components/form/input.d.ts.map +0 -1
- package/dist/components/form/multi-select.d.ts +0 -19
- package/dist/components/form/multi-select.d.ts.map +0 -1
- package/dist/components/form/radiobox.d.ts +0 -7
- package/dist/components/form/radiobox.d.ts.map +0 -1
- package/dist/components/form/select.d.ts +0 -13
- package/dist/components/form/select.d.ts.map +0 -1
- package/dist/components/form/slider.d.ts +0 -7
- package/dist/components/form/slider.d.ts.map +0 -1
- package/dist/components/form/switch.d.ts +0 -9
- package/dist/components/form/switch.d.ts.map +0 -1
- package/dist/components/form/task-list.d.ts +0 -3
- package/dist/components/form/task-list.d.ts.map +0 -1
- package/dist/components/form/textarea.d.ts +0 -6
- package/dist/components/form/textarea.d.ts.map +0 -1
- package/dist/components/form/transfer-list.d.ts +0 -14
- package/dist/components/form/transfer-list.d.ts.map +0 -1
- package/dist/components/form/transfer-list.js +0 -55
- package/dist/components/form/transfer-list.js.map +0 -1
- package/dist/components/index.d.ts +0 -46
- package/dist/components/index.d.ts.map +0 -1
- package/dist/components/page-calendar/calendar-header.d.ts +0 -16
- package/dist/components/page-calendar/calendar-header.d.ts.map +0 -1
- package/dist/components/page-calendar/day-view.d.ts +0 -12
- package/dist/components/page-calendar/day-view.d.ts.map +0 -1
- package/dist/components/page-calendar/event-pill.d.ts +0 -9
- package/dist/components/page-calendar/event-pill.d.ts.map +0 -1
- package/dist/components/page-calendar/index.d.ts +0 -4
- package/dist/components/page-calendar/index.d.ts.map +0 -1
- package/dist/components/page-calendar/month-view.d.ts +0 -11
- package/dist/components/page-calendar/month-view.d.ts.map +0 -1
- package/dist/components/page-calendar/page-calendar.d.ts +0 -18
- package/dist/components/page-calendar/page-calendar.d.ts.map +0 -1
- package/dist/components/page-calendar/page-calendar.types.d.ts +0 -18
- package/dist/components/page-calendar/page-calendar.types.d.ts.map +0 -1
- package/dist/components/page-calendar/page-calendar.utils.d.ts +0 -24
- package/dist/components/page-calendar/page-calendar.utils.d.ts.map +0 -1
- package/dist/components/page-calendar/week-view.d.ts +0 -11
- package/dist/components/page-calendar/week-view.d.ts.map +0 -1
- package/dist/components/table/filter.d.ts +0 -42
- package/dist/components/table/filter.d.ts.map +0 -1
- package/dist/components/table/group.d.ts +0 -17
- package/dist/components/table/group.d.ts.map +0 -1
- package/dist/components/table/index.d.ts +0 -20
- package/dist/components/table/index.d.ts.map +0 -1
- package/dist/components/table/inner-table.d.ts +0 -29
- package/dist/components/table/inner-table.d.ts.map +0 -1
- package/dist/components/table/metadata.d.ts +0 -4
- package/dist/components/table/metadata.d.ts.map +0 -1
- package/dist/components/table/pagination.d.ts +0 -3
- package/dist/components/table/pagination.d.ts.map +0 -1
- package/dist/components/table/row.d.ts +0 -12
- package/dist/components/table/row.d.ts.map +0 -1
- package/dist/components/table/sort.d.ts +0 -28
- package/dist/components/table/sort.d.ts.map +0 -1
- package/dist/components/table/table-lib.d.ts +0 -135
- package/dist/components/table/table-lib.d.ts.map +0 -1
- package/dist/components/table/table.context.d.ts +0 -10
- package/dist/components/table/table.context.d.ts.map +0 -1
- package/dist/components/table/thead.d.ts +0 -9
- package/dist/components/table/thead.d.ts.map +0 -1
- package/dist/config/context.d.ts +0 -21
- package/dist/config/context.d.ts.map +0 -1
- package/dist/config/default-translations.d.ts +0 -90
- package/dist/config/default-translations.d.ts.map +0 -1
- package/dist/config/default-tweaks.d.ts +0 -13
- package/dist/config/default-tweaks.d.ts.map +0 -1
- package/dist/constants.d.ts +0 -3
- package/dist/constants.d.ts.map +0 -1
- package/dist/context-BFXNJVn2.js.map +0 -1
- package/dist/date-picker-DwNo22lx.js.map +0 -1
- package/dist/dom-Dl8XH0CK.js.map +0 -1
- package/dist/file-upload-Brf2NkLr.js.map +0 -1
- package/dist/floating-ui.react-QNHG9W4N.js.map +0 -1
- package/dist/fns-D2eyJKd5.js.map +0 -1
- package/dist/hooks/use-click-outside.d.ts +0 -3
- package/dist/hooks/use-click-outside.d.ts.map +0 -1
- package/dist/hooks/use-color-parser.d.ts +0 -2
- package/dist/hooks/use-color-parser.d.ts.map +0 -1
- package/dist/hooks/use-components-provider.d.ts +0 -15
- package/dist/hooks/use-components-provider.d.ts.map +0 -1
- package/dist/hooks/use-debounce.d.ts +0 -5
- package/dist/hooks/use-debounce.d.ts.map +0 -1
- package/dist/hooks/use-floating-ref.d.ts +0 -2
- package/dist/hooks/use-floating-ref.d.ts.map +0 -1
- package/dist/hooks/use-form.d.ts +0 -394
- package/dist/hooks/use-form.d.ts.map +0 -1
- package/dist/hooks/use-hover.d.ts +0 -3
- package/dist/hooks/use-hover.d.ts.map +0 -1
- package/dist/hooks/use-input-id.d.ts +0 -4
- package/dist/hooks/use-input-id.d.ts.map +0 -1
- package/dist/hooks/use-is-coarse-device.d.ts +0 -2
- package/dist/hooks/use-is-coarse-device.d.ts.map +0 -1
- package/dist/hooks/use-locale.d.ts +0 -3
- package/dist/hooks/use-locale.d.ts.map +0 -1
- package/dist/hooks/use-media-query.d.ts +0 -2
- package/dist/hooks/use-media-query.d.ts.map +0 -1
- package/dist/hooks/use-on-event.d.ts +0 -4
- package/dist/hooks/use-on-event.d.ts.map +0 -1
- package/dist/hooks/use-parent.d.ts +0 -3
- package/dist/hooks/use-parent.d.ts.map +0 -1
- package/dist/hooks/use-preferences.d.ts +0 -2
- package/dist/hooks/use-preferences.d.ts.map +0 -1
- package/dist/hooks/use-previous.d.ts +0 -2
- package/dist/hooks/use-previous.d.ts.map +0 -1
- package/dist/hooks/use-reactive.d.ts +0 -2
- package/dist/hooks/use-reactive.d.ts.map +0 -1
- package/dist/hooks/use-remove-scroll.d.ts +0 -4
- package/dist/hooks/use-remove-scroll.d.ts.map +0 -1
- package/dist/hooks/use-resize-observer.d.ts +0 -2
- package/dist/hooks/use-resize-observer.d.ts.map +0 -1
- package/dist/hooks/use-stable-ref.d.ts +0 -2
- package/dist/hooks/use-stable-ref.d.ts.map +0 -1
- package/dist/hooks/use-swipe.d.ts +0 -8
- package/dist/hooks/use-swipe.d.ts.map +0 -1
- package/dist/hooks/use-translations.d.ts +0 -88
- package/dist/hooks/use-translations.d.ts.map +0 -1
- package/dist/hooks/use-tweaks.d.ts +0 -3
- package/dist/hooks/use-tweaks.d.ts.map +0 -1
- package/dist/hooks/use-window-size.d.ts +0 -5
- package/dist/hooks/use-window-size.d.ts.map +0 -1
- package/dist/index-BelDtX5M.js.map +0 -1
- package/dist/index-DJSMaZR4.js.map +0 -1
- package/dist/index-Z-fZHxfJ.js +0 -335
- package/dist/index-Z-fZHxfJ.js.map +0 -1
- package/dist/index.d.ts +0 -22
- package/dist/index.d.ts.map +0 -1
- package/dist/input-CrGrSnUt.js.map +0 -1
- package/dist/input-field-5vYcz5tT.js.map +0 -1
- package/dist/lib/combi-keys.d.ts +0 -15
- package/dist/lib/combi-keys.d.ts.map +0 -1
- package/dist/lib/dict.d.ts +0 -12
- package/dist/lib/dict.d.ts.map +0 -1
- package/dist/lib/dom.d.ts +0 -19
- package/dist/lib/dom.d.ts.map +0 -1
- package/dist/lib/fns.d.ts +0 -11
- package/dist/lib/fns.d.ts.map +0 -1
- package/dist/lib/fzf.d.ts +0 -16
- package/dist/lib/fzf.d.ts.map +0 -1
- package/dist/lib/keyboard-area.d.ts +0 -16
- package/dist/lib/keyboard-area.d.ts.map +0 -1
- package/dist/notifications-cUdVPs-B.js +0 -2786
- package/dist/notifications-cUdVPs-B.js.map +0 -1
- package/dist/skeleton-D75GFBV6.js +0 -10
- package/dist/skeleton-D75GFBV6.js.map +0 -1
- package/dist/tabs-S00a8qq8.js +0 -106
- package/dist/tabs-S00a8qq8.js.map +0 -1
- package/dist/types.d.ts +0 -26
- package/dist/types.d.ts.map +0 -1
- package/dist/use-translations-BwLKTrZv.js +0 -10
- package/dist/use-translations-BwLKTrZv.js.map +0 -1
|
@@ -1,271 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: PageCalendar
|
|
3
|
-
description: Full-page calendar with month, week, and day views, event filtering, and custom event rendering.
|
|
4
|
-
package: "@g4rcez/components"
|
|
5
|
-
export: "{ PageCalendar }"
|
|
6
|
-
import: "import { PageCalendar } from '@g4rcez/components'"
|
|
7
|
-
category: calendar
|
|
8
|
-
---
|
|
9
|
-
|
|
10
|
-
# PageCalendar
|
|
11
|
-
|
|
12
|
-
Full-page calendar with month, week, and day views, event filtering, and custom event rendering.
|
|
13
|
-
|
|
14
|
-
## Import
|
|
15
|
-
|
|
16
|
-
```tsx
|
|
17
|
-
import { PageCalendar } from "@g4rcez/components";
|
|
18
|
-
```
|
|
19
|
-
|
|
20
|
-
## Props
|
|
21
|
-
|
|
22
|
-
| Prop | Type | Default | Description |
|
|
23
|
-
|------|------|---------|-------------|
|
|
24
|
-
| `events` | `CalendarEvent<T>[]` | — | Array of event objects to display across all views. |
|
|
25
|
-
| `filters` | `CalendarFilter[]` | `[]` | Filter tag definitions. Each filter can be toggled to hide/show matching events. |
|
|
26
|
-
| `defaultView` | `"month" \| "week" \| "day"` | `"month"` | Initial view rendered when the component mounts. |
|
|
27
|
-
| `defaultDate` | `Date` | `new Date()` | Initial date the calendar focuses on. |
|
|
28
|
-
| `onEventClick` | `(event: CalendarEvent) => void` | — | Called when the user clicks an event pill. |
|
|
29
|
-
| `onSlotClick` | `(date: Date) => void` | — | Called when the user clicks an empty time slot (week and day views). |
|
|
30
|
-
| `onAddEvent` | `() => void` | — | Called when the "Add event" button in the header is clicked. Omit to hide the button. |
|
|
31
|
-
| `onChangeFilters` | `(filters: CalendarFilter[]) => void` | — | Called whenever a filter is toggled, receiving the updated filter array. |
|
|
32
|
-
| `renderEvent` | `(event: CalendarEvent<T>) => ReactNode` | — | Custom renderer for the selected event detail panel in day view. |
|
|
33
|
-
| `filterArea` | `ReactNode` | — | Replaces the default filter tag row in the header with custom content. |
|
|
34
|
-
| `getFilterId` | `() => void` | — | Custom accessor to extract a `filterId` from an event. Defaults to `event.filterId`. |
|
|
35
|
-
|
|
36
|
-
## Type Definitions
|
|
37
|
-
|
|
38
|
-
### CalendarEventBase
|
|
39
|
-
|
|
40
|
-
```ts
|
|
41
|
-
type CalendarEventBase = {
|
|
42
|
-
id: string;
|
|
43
|
-
date: Date;
|
|
44
|
-
};
|
|
45
|
-
```
|
|
46
|
-
|
|
47
|
-
### CalendarEvent
|
|
48
|
-
|
|
49
|
-
```ts
|
|
50
|
-
type CalendarEvent<T extends CalendarEventBase = CalendarEventBase> = T & {
|
|
51
|
-
title: string;
|
|
52
|
-
filterId?: string;
|
|
53
|
-
className?: string;
|
|
54
|
-
};
|
|
55
|
-
```
|
|
56
|
-
|
|
57
|
-
`className` is applied directly to the event pill element in all views.
|
|
58
|
-
|
|
59
|
-
### CalendarFilter
|
|
60
|
-
|
|
61
|
-
```ts
|
|
62
|
-
type CalendarFilter = {
|
|
63
|
-
id: string;
|
|
64
|
-
label: string;
|
|
65
|
-
enabled: boolean;
|
|
66
|
-
theme: TagProps["theme"]; // "primary" | "success" | "warn" | "danger" | "info" | "neutral" | "secondary" | "muted"
|
|
67
|
-
};
|
|
68
|
-
```
|
|
69
|
-
|
|
70
|
-
### ViewMode
|
|
71
|
-
|
|
72
|
-
```ts
|
|
73
|
-
type ViewMode = "month" | "week" | "day";
|
|
74
|
-
```
|
|
75
|
-
|
|
76
|
-
## Design Tokens
|
|
77
|
-
|
|
78
|
-
Tokens this component reads. Customize by overriding these CSS variables in your theme.
|
|
79
|
-
|
|
80
|
-
| Token | CSS Variable | Purpose |
|
|
81
|
-
|-------|-------------|---------|
|
|
82
|
-
| `bg-primary` | `--primary` | Today indicator background, selected day highlight |
|
|
83
|
-
| `text-primary-foreground` | `--primary-foreground` | Text on today / selected day indicator |
|
|
84
|
-
| `bg-card` | `--card` | Non-today day indicator background in header |
|
|
85
|
-
| `text-foreground` | `--foreground` | Default text in day cells and header |
|
|
86
|
-
| `text-muted-foreground` | `--muted-foreground` | Week label, hour labels, secondary text |
|
|
87
|
-
| `border-border` | `--border` | Grid cell borders, day view hour-slot dividers |
|
|
88
|
-
| `border-card-border` | `--card-border` | Day and week view column borders |
|
|
89
|
-
| `bg-muted` | `--muted` | Hover background on time slots |
|
|
90
|
-
| `z-calendar` | `--z-calendar` | `z-index` for the column resizer handle (value: 2) |
|
|
91
|
-
| `z-floating` | `--z-floating` | `z-index` for floating overlays (value: 22) |
|
|
92
|
-
|
|
93
|
-
## Views
|
|
94
|
-
|
|
95
|
-
### Month view
|
|
96
|
-
|
|
97
|
-
Displays a 6-row grid of all days in the selected month. Each day cell shows event pills. Clicking a day navigates to that day in the day view.
|
|
98
|
-
|
|
99
|
-
### Week view
|
|
100
|
-
|
|
101
|
-
Displays the 7 days of the current week with an hourly time grid. Events are placed at their time position. Clicking an empty slot calls `onSlotClick`.
|
|
102
|
-
|
|
103
|
-
### Day view
|
|
104
|
-
|
|
105
|
-
Displays a single day with an hourly grid alongside a mini calendar and a detail panel. The detail panel shows a default summary or your `renderEvent` output when an event is clicked.
|
|
106
|
-
|
|
107
|
-
## Examples
|
|
108
|
-
|
|
109
|
-
### Minimal calendar
|
|
110
|
-
|
|
111
|
-
```tsx
|
|
112
|
-
import { PageCalendar } from "@g4rcez/components";
|
|
113
|
-
|
|
114
|
-
type MyEvent = { id: string; date: Date; title: string };
|
|
115
|
-
|
|
116
|
-
const events: MyEvent[] = [
|
|
117
|
-
{ id: "1", date: new Date(), title: "Team standup" },
|
|
118
|
-
];
|
|
119
|
-
|
|
120
|
-
export function MyCalendar() {
|
|
121
|
-
return (
|
|
122
|
-
<PageCalendar
|
|
123
|
-
events={events}
|
|
124
|
-
onEventClick={(event) => console.log(event)}
|
|
125
|
-
/>
|
|
126
|
-
);
|
|
127
|
-
}
|
|
128
|
-
```
|
|
129
|
-
|
|
130
|
-
### With filters
|
|
131
|
-
|
|
132
|
-
```tsx
|
|
133
|
-
import { PageCalendar } from "@g4rcez/components";
|
|
134
|
-
import type { CalendarFilter } from "@g4rcez/components";
|
|
135
|
-
|
|
136
|
-
const filters: CalendarFilter[] = [
|
|
137
|
-
{ id: "work", label: "Work", enabled: true, theme: "primary" },
|
|
138
|
-
{ id: "personal", label: "Personal", enabled: true, theme: "success" },
|
|
139
|
-
];
|
|
140
|
-
|
|
141
|
-
const events = [
|
|
142
|
-
{ id: "1", date: new Date(), title: "Sprint planning", filterId: "work" },
|
|
143
|
-
{ id: "2", date: new Date(), title: "Gym", filterId: "personal" },
|
|
144
|
-
];
|
|
145
|
-
|
|
146
|
-
export function FilteredCalendar() {
|
|
147
|
-
return (
|
|
148
|
-
<PageCalendar
|
|
149
|
-
events={events}
|
|
150
|
-
filters={filters}
|
|
151
|
-
onChangeFilters={(updated) => console.log(updated)}
|
|
152
|
-
/>
|
|
153
|
-
);
|
|
154
|
-
}
|
|
155
|
-
```
|
|
156
|
-
|
|
157
|
-
### Custom event detail in day view
|
|
158
|
-
|
|
159
|
-
```tsx
|
|
160
|
-
import { PageCalendar } from "@g4rcez/components";
|
|
161
|
-
import { MapPinIcon } from "@phosphor-icons/react";
|
|
162
|
-
|
|
163
|
-
export function DetailCalendar() {
|
|
164
|
-
return (
|
|
165
|
-
<PageCalendar
|
|
166
|
-
events={events}
|
|
167
|
-
defaultView="day"
|
|
168
|
-
renderEvent={(event) => (
|
|
169
|
-
<div className="flex flex-col gap-1 p-2 bg-muted rounded-card">
|
|
170
|
-
<span className="font-semibold text-foreground">{event.title}</span>
|
|
171
|
-
<span className="flex items-center gap-1 text-sm text-muted-foreground">
|
|
172
|
-
<MapPinIcon size={12} />
|
|
173
|
-
{event.location}
|
|
174
|
-
</span>
|
|
175
|
-
</div>
|
|
176
|
-
)}
|
|
177
|
-
/>
|
|
178
|
-
);
|
|
179
|
-
}
|
|
180
|
-
```
|
|
181
|
-
|
|
182
|
-
### Controlled add-event flow
|
|
183
|
-
|
|
184
|
-
```tsx
|
|
185
|
-
import { useState } from "react";
|
|
186
|
-
import { PageCalendar } from "@g4rcez/components";
|
|
187
|
-
|
|
188
|
-
export function EditableCalendar() {
|
|
189
|
-
const [showForm, setShowForm] = useState(false);
|
|
190
|
-
const [slotDate, setSlotDate] = useState<Date | null>(null);
|
|
191
|
-
|
|
192
|
-
return (
|
|
193
|
-
<>
|
|
194
|
-
<PageCalendar
|
|
195
|
-
events={events}
|
|
196
|
-
onAddEvent={() => setShowForm(true)}
|
|
197
|
-
onSlotClick={(date) => {
|
|
198
|
-
setSlotDate(date);
|
|
199
|
-
setShowForm(true);
|
|
200
|
-
}}
|
|
201
|
-
/>
|
|
202
|
-
{showForm && <EventForm defaultDate={slotDate} onClose={() => setShowForm(false)} />}
|
|
203
|
-
</>
|
|
204
|
-
);
|
|
205
|
-
}
|
|
206
|
-
```
|
|
207
|
-
|
|
208
|
-
### Custom filter area
|
|
209
|
-
|
|
210
|
-
```tsx
|
|
211
|
-
import { PageCalendar } from "@g4rcez/components";
|
|
212
|
-
import { Button } from "@g4rcez/components/button";
|
|
213
|
-
|
|
214
|
-
export function CustomFilterCalendar() {
|
|
215
|
-
return (
|
|
216
|
-
<PageCalendar
|
|
217
|
-
events={events}
|
|
218
|
-
filterArea={
|
|
219
|
-
<div className="flex items-center gap-2 rounded-card bg-muted px-3 py-1.5">
|
|
220
|
-
<Button theme="ghost-muted" size="small">All</Button>
|
|
221
|
-
<Button theme="primary" size="small">Mine</Button>
|
|
222
|
-
</div>
|
|
223
|
-
}
|
|
224
|
-
/>
|
|
225
|
-
);
|
|
226
|
-
}
|
|
227
|
-
```
|
|
228
|
-
|
|
229
|
-
## Do
|
|
230
|
-
|
|
231
|
-
- Provide unique `id` values for every event and filter to ensure stable React keys and filter matching.
|
|
232
|
-
- Use `theme` on filters to give users a quick visual legend for event categories.
|
|
233
|
-
- Implement both `onAddEvent` and `onSlotClick` to give users two natural entry points for creating events.
|
|
234
|
-
- Use design-token classes in `renderEvent` output (`bg-muted`, `text-foreground`, `border-border`).
|
|
235
|
-
- Keep event `title` values short — they are truncated in month and week event pills.
|
|
236
|
-
|
|
237
|
-
## Don't
|
|
238
|
-
|
|
239
|
-
- Don't pass raw Tailwind color classes (`bg-blue-500`, `text-white`, `border-gray-300`) — use `theme` on filters/events or design tokens instead.
|
|
240
|
-
- Don't use arbitrary Tailwind values (`bg-[#abc]`, `bg-[--my-var]`) — override CSS variables in your `@theme` block instead.
|
|
241
|
-
- Don't pack more than a handful of events per day in month view — the grid will overflow; guide users toward week or day view for dense schedules.
|
|
242
|
-
- Don't use extremely long event titles; they are truncated inside the event pill.
|
|
243
|
-
- Don't supply both `filterArea` and `filters` expecting both to render — `filterArea` fully replaces the default filter tag row.
|
|
244
|
-
|
|
245
|
-
## Accessibility
|
|
246
|
-
|
|
247
|
-
- The root container has `role="application"` and `aria-label` from the i18n translation key `pageCalendarLabel`.
|
|
248
|
-
- The header month/year title uses `aria-live="polite"` and `aria-atomic="true"` so screen readers announce date changes after navigation.
|
|
249
|
-
- Navigation buttons (`Previous`, `Today`, `Next`) have `aria-label` attributes for screen reader descriptions.
|
|
250
|
-
- View toggle buttons use `aria-pressed` to communicate the active view.
|
|
251
|
-
- Filter tags are rendered as `<button>` elements with `aria-pressed` and an `aria-label` that includes the enabled/disabled state.
|
|
252
|
-
- Day view hour slots have `role="button"`, `tabIndex={0}`, and `aria-label` for keyboard-accessible slot selection.
|
|
253
|
-
- The day column header uses `aria-label` with the full formatted date string.
|
|
254
|
-
|
|
255
|
-
## Data Attributes
|
|
256
|
-
|
|
257
|
-
- `data-component="day-view-scroller"` — the scrolling container inside the day view. Useful for CSS height overrides:
|
|
258
|
-
|
|
259
|
-
```css
|
|
260
|
-
[data-component="day-view-scroller"] {
|
|
261
|
-
height: calc(100dvh - 200px);
|
|
262
|
-
}
|
|
263
|
-
```
|
|
264
|
-
|
|
265
|
-
## Notes
|
|
266
|
-
|
|
267
|
-
- Internally uses `date-fns` for all date arithmetic and locale-aware formatting. The locale is read from the `useLocale` hook; set it at the app root via the component provider.
|
|
268
|
-
- All labels (button text, ARIA strings, week number format) are driven by the i18n translation system. Override via the `translations` prop on the root provider.
|
|
269
|
-
- Event filtering is managed internally; `onChangeFilters` lets you mirror the filter state to an external store without controlling it.
|
|
270
|
-
- The day view mini-calendar renders dots beneath days that have events, matching the `bg-primary` token for visual consistency.
|
|
271
|
-
- The component grows to fill its container (`h-full flex-grow`). Place it inside a flex or grid container with an explicit height.
|
package/dist/ai/docs/Select.md
DELETED
|
@@ -1,284 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: Select
|
|
3
|
-
description: Styled native select component with validation, loading state, and form integration.
|
|
4
|
-
package: "@g4rcez/components"
|
|
5
|
-
export: "{ Select }"
|
|
6
|
-
import: "import { Select } from '@g4rcez/components/select'"
|
|
7
|
-
category: form
|
|
8
|
-
---
|
|
9
|
-
|
|
10
|
-
# Select
|
|
11
|
-
|
|
12
|
-
Styled native select component with validation, loading state, and form integration.
|
|
13
|
-
|
|
14
|
-
## Import
|
|
15
|
-
|
|
16
|
-
```tsx
|
|
17
|
-
import { Select } from "@g4rcez/components/select";
|
|
18
|
-
```
|
|
19
|
-
|
|
20
|
-
## Props
|
|
21
|
-
|
|
22
|
-
| Prop | Type | Default | Description |
|
|
23
|
-
|------|------|---------|-------------|
|
|
24
|
-
| `options` | `OptionProps[]` | — | Array of option objects. |
|
|
25
|
-
| `selectContainer` | `string` | `""` | Additional CSS classes for the select container. |
|
|
26
|
-
| `required` | `boolean` | `true` | Whether the field is required. |
|
|
27
|
-
| `error` | `string` | — | Error message to display. |
|
|
28
|
-
| `loading` | `boolean` | `false` | Shows a loading indicator and disables the field. |
|
|
29
|
-
| `disabled` | `boolean` | `false` | Disables the select. |
|
|
30
|
-
| `placeholder` | `string` | — | Placeholder shown as a disabled hidden option. |
|
|
31
|
-
| `value` | `string` | — | Controlled selected value. |
|
|
32
|
-
| `onChange` | `(e: ChangeEvent<HTMLSelectElement>) => void` | — | Change handler. |
|
|
33
|
-
| `...inputFieldProps` | `InputFieldProps` | — | All `InputField` props (title, left, right, feedback, etc.). |
|
|
34
|
-
|
|
35
|
-
### OptionProps
|
|
36
|
-
|
|
37
|
-
| Prop | Type | Description |
|
|
38
|
-
|------|------|-------------|
|
|
39
|
-
| `value` | `string` | Option value (required). |
|
|
40
|
-
| `label` | `string` | Display text (falls back to `value` if omitted). |
|
|
41
|
-
| `disabled` | `boolean` | Disables this individual option. |
|
|
42
|
-
| `data-dynamic` | `string` | Marks a dynamically generated option. |
|
|
43
|
-
| `data-*` | `string` | Any custom data attributes forwarded to the `<option>`. |
|
|
44
|
-
|
|
45
|
-
## Design Tokens
|
|
46
|
-
|
|
47
|
-
Tokens this component reads. Customize by overriding these CSS variables in your theme.
|
|
48
|
-
|
|
49
|
-
| Token | CSS Variable | Purpose |
|
|
50
|
-
|-------|-------------|---------|
|
|
51
|
-
| `text-foreground` | `--foreground` | Selected option text color |
|
|
52
|
-
| `text-input-placeholder` | `--input-placeholder` | Color when no option is selected |
|
|
53
|
-
| `placeholder-input-placeholder` | `--input-placeholder` | Placeholder styling |
|
|
54
|
-
| `bg-input-mask-error` (via `group-error`) | `--input-mask-error` | Placeholder tint in error state |
|
|
55
|
-
| `text-danger` (via `group-error`) | `--danger` | Text color in error state |
|
|
56
|
-
| `hover:text-primary` | `--primary` | Caret icon hover color |
|
|
57
|
-
| `h-input-height` | `--input-height` | Control height (2.5 rem) |
|
|
58
|
-
| `px-input-x` | `--input-x` | Horizontal padding |
|
|
59
|
-
| `py-input-y` | `--input-y` | Vertical padding |
|
|
60
|
-
|
|
61
|
-
## Examples
|
|
62
|
-
|
|
63
|
-
### Basic usage
|
|
64
|
-
|
|
65
|
-
```tsx
|
|
66
|
-
import { useState } from "react";
|
|
67
|
-
import { Select } from "@g4rcez/components/select";
|
|
68
|
-
|
|
69
|
-
export default function FruitPicker() {
|
|
70
|
-
const [value, setValue] = useState("");
|
|
71
|
-
|
|
72
|
-
return (
|
|
73
|
-
<Select
|
|
74
|
-
title="Fruit"
|
|
75
|
-
options={[
|
|
76
|
-
{ value: "apple", label: "Apple" },
|
|
77
|
-
{ value: "banana", label: "Banana" },
|
|
78
|
-
{ value: "orange", label: "Orange" },
|
|
79
|
-
]}
|
|
80
|
-
placeholder="Select a fruit"
|
|
81
|
-
value={value}
|
|
82
|
-
onChange={(e) => setValue(e.target.value)}
|
|
83
|
-
/>
|
|
84
|
-
);
|
|
85
|
-
}
|
|
86
|
-
```
|
|
87
|
-
|
|
88
|
-
### With validation error
|
|
89
|
-
|
|
90
|
-
```tsx
|
|
91
|
-
import { useState } from "react";
|
|
92
|
-
import { Select } from "@g4rcez/components/select";
|
|
93
|
-
|
|
94
|
-
export default function CountrySelect() {
|
|
95
|
-
const [country, setCountry] = useState("");
|
|
96
|
-
const [error, setError] = useState("");
|
|
97
|
-
|
|
98
|
-
return (
|
|
99
|
-
<Select
|
|
100
|
-
title="Country"
|
|
101
|
-
options={[
|
|
102
|
-
{ value: "us", label: "United States" },
|
|
103
|
-
{ value: "ca", label: "Canada" },
|
|
104
|
-
{ value: "uk", label: "United Kingdom" },
|
|
105
|
-
]}
|
|
106
|
-
placeholder="Select country"
|
|
107
|
-
value={country}
|
|
108
|
-
error={error}
|
|
109
|
-
required
|
|
110
|
-
onChange={(e) => {
|
|
111
|
-
setCountry(e.target.value);
|
|
112
|
-
setError(e.target.value ? "" : "Please select a country");
|
|
113
|
-
}}
|
|
114
|
-
/>
|
|
115
|
-
);
|
|
116
|
-
}
|
|
117
|
-
```
|
|
118
|
-
|
|
119
|
-
### With disabled options
|
|
120
|
-
|
|
121
|
-
```tsx
|
|
122
|
-
import { Select } from "@g4rcez/components/select";
|
|
123
|
-
|
|
124
|
-
export default function StatusSelect() {
|
|
125
|
-
return (
|
|
126
|
-
<Select
|
|
127
|
-
title="Status"
|
|
128
|
-
options={[
|
|
129
|
-
{ value: "active", label: "Active" },
|
|
130
|
-
{ value: "pending", label: "Pending" },
|
|
131
|
-
{ value: "legacy", label: "Legacy (deprecated)", disabled: true },
|
|
132
|
-
{ value: "inactive", label: "Inactive" },
|
|
133
|
-
]}
|
|
134
|
-
placeholder="Select status"
|
|
135
|
-
/>
|
|
136
|
-
);
|
|
137
|
-
}
|
|
138
|
-
```
|
|
139
|
-
|
|
140
|
-
### Async options with loading state
|
|
141
|
-
|
|
142
|
-
```tsx
|
|
143
|
-
import { useEffect, useState } from "react";
|
|
144
|
-
import { Select } from "@g4rcez/components/select";
|
|
145
|
-
|
|
146
|
-
export default function AsyncSelect() {
|
|
147
|
-
const [options, setOptions] = useState<{ value: string; label: string }[]>([]);
|
|
148
|
-
const [loading, setLoading] = useState(false);
|
|
149
|
-
const [value, setValue] = useState("");
|
|
150
|
-
|
|
151
|
-
useEffect(() => {
|
|
152
|
-
setLoading(true);
|
|
153
|
-
fetchOptions().then((data) => {
|
|
154
|
-
setOptions(data);
|
|
155
|
-
setLoading(false);
|
|
156
|
-
});
|
|
157
|
-
}, []);
|
|
158
|
-
|
|
159
|
-
return (
|
|
160
|
-
<Select
|
|
161
|
-
title="Region"
|
|
162
|
-
options={options}
|
|
163
|
-
placeholder={loading ? "Loading..." : "Select a region"}
|
|
164
|
-
value={value}
|
|
165
|
-
loading={loading}
|
|
166
|
-
disabled={loading}
|
|
167
|
-
onChange={(e) => setValue(e.target.value)}
|
|
168
|
-
/>
|
|
169
|
-
);
|
|
170
|
-
}
|
|
171
|
-
```
|
|
172
|
-
|
|
173
|
-
### Form integration with `useForm`
|
|
174
|
-
|
|
175
|
-
```tsx
|
|
176
|
-
import { Select } from "@g4rcez/components/select";
|
|
177
|
-
import { useForm } from "@g4rcez/components/form";
|
|
178
|
-
|
|
179
|
-
export default function UserForm() {
|
|
180
|
-
const form = useForm(schema, "userForm");
|
|
181
|
-
|
|
182
|
-
return (
|
|
183
|
-
<form {...form.props}>
|
|
184
|
-
<Select
|
|
185
|
-
{...form.select("role")}
|
|
186
|
-
options={[
|
|
187
|
-
{ value: "admin", label: "Administrator" },
|
|
188
|
-
{ value: "editor", label: "Editor" },
|
|
189
|
-
{ value: "viewer", label: "Viewer" },
|
|
190
|
-
]}
|
|
191
|
-
placeholder="Select role"
|
|
192
|
-
/>
|
|
193
|
-
</form>
|
|
194
|
-
);
|
|
195
|
-
}
|
|
196
|
-
```
|
|
197
|
-
|
|
198
|
-
### Cascading selects
|
|
199
|
-
|
|
200
|
-
```tsx
|
|
201
|
-
import { useState } from "react";
|
|
202
|
-
import { Select } from "@g4rcez/components/select";
|
|
203
|
-
|
|
204
|
-
const subcategories: Record<string, { value: string; label: string }[]> = {
|
|
205
|
-
electronics: [
|
|
206
|
-
{ value: "phones", label: "Phones" },
|
|
207
|
-
{ value: "laptops", label: "Laptops" },
|
|
208
|
-
],
|
|
209
|
-
clothing: [
|
|
210
|
-
{ value: "shirts", label: "Shirts" },
|
|
211
|
-
{ value: "pants", label: "Pants" },
|
|
212
|
-
],
|
|
213
|
-
};
|
|
214
|
-
|
|
215
|
-
export default function CascadingSelect() {
|
|
216
|
-
const [category, setCategory] = useState("");
|
|
217
|
-
const [subcategory, setSubcategory] = useState("");
|
|
218
|
-
|
|
219
|
-
return (
|
|
220
|
-
<div className="flex flex-col gap-base">
|
|
221
|
-
<Select
|
|
222
|
-
title="Category"
|
|
223
|
-
options={[
|
|
224
|
-
{ value: "electronics", label: "Electronics" },
|
|
225
|
-
{ value: "clothing", label: "Clothing" },
|
|
226
|
-
]}
|
|
227
|
-
placeholder="Select category"
|
|
228
|
-
value={category}
|
|
229
|
-
onChange={(e) => {
|
|
230
|
-
setCategory(e.target.value);
|
|
231
|
-
setSubcategory("");
|
|
232
|
-
}}
|
|
233
|
-
/>
|
|
234
|
-
|
|
235
|
-
{category && (
|
|
236
|
-
<Select
|
|
237
|
-
title="Subcategory"
|
|
238
|
-
options={subcategories[category] ?? []}
|
|
239
|
-
placeholder="Select subcategory"
|
|
240
|
-
value={subcategory}
|
|
241
|
-
onChange={(e) => setSubcategory(e.target.value)}
|
|
242
|
-
/>
|
|
243
|
-
)}
|
|
244
|
-
</div>
|
|
245
|
-
);
|
|
246
|
-
}
|
|
247
|
-
```
|
|
248
|
-
|
|
249
|
-
## Do
|
|
250
|
-
|
|
251
|
-
- Use descriptive `label` values for each option.
|
|
252
|
-
- Order options logically (alphabetically or by usage frequency).
|
|
253
|
-
- Provide a `placeholder` so users know what to select.
|
|
254
|
-
- Use `loading` and `disabled` together while fetching options asynchronously.
|
|
255
|
-
- Use design-token classes for wrapper elements (`bg-background`, `text-foreground`, `border-border`).
|
|
256
|
-
|
|
257
|
-
## Don't
|
|
258
|
-
|
|
259
|
-
- Don't use `Select` for only 2–3 options — prefer `Radiobox` or `Switch` for better visibility.
|
|
260
|
-
- Don't use `Select` for large searchable lists — use `Autocomplete` instead.
|
|
261
|
-
- Don't use long option labels that may truncate on small viewports.
|
|
262
|
-
- Don't pass raw Tailwind color classes (`bg-blue-500`, `text-white`, `border-gray-300`) — use design tokens instead.
|
|
263
|
-
- Don't use arbitrary Tailwind values (`bg-[#abc]`, `bg-[--my-var]`) — override CSS variables in your `@theme` block instead.
|
|
264
|
-
|
|
265
|
-
## Accessibility
|
|
266
|
-
|
|
267
|
-
- Uses a native `<select>` element for full keyboard support and screen-reader compatibility.
|
|
268
|
-
- The `placeholder` renders as a `disabled hidden` option so it is never submitted.
|
|
269
|
-
- A `CaretDownIcon` caret is rendered inside a `<label>` pointing to the select id, giving it a larger click target.
|
|
270
|
-
- `data-selected` is set to `"false"` until the user selects an option, which toggles the placeholder color class.
|
|
271
|
-
|
|
272
|
-
## Data Attributes
|
|
273
|
-
|
|
274
|
-
| Attribute | Element | Value | Description |
|
|
275
|
-
|-----------|---------|-------|-------------|
|
|
276
|
-
| `data-component` | `InputField` root | `"select"` | Identifies the component. |
|
|
277
|
-
| `data-selected` | `<select>` | `"true" \| "false"` | Whether a non-placeholder option is selected. |
|
|
278
|
-
|
|
279
|
-
## Notes
|
|
280
|
-
|
|
281
|
-
- Built on `InputField` for layout, label, error, and loading handling.
|
|
282
|
-
- Supports all standard HTML `<select>` attributes via prop spread.
|
|
283
|
-
- `required` defaults to `true` — pass `required={false}` when the field is optional.
|
|
284
|
-
- Custom data attributes on `OptionProps` (e.g., `data-price`) are forwarded to each `<option>` and accessible via `e.target.selectedOptions[0].dataset`.
|