@heymantle/litho 0.0.14 → 0.0.16
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_COMPONENTS_GUIDE.md +28 -15
- package/AI_INTEGRATION_GUIDE.md +3 -3
- package/AI_PATTERNS_GUIDE.md +59 -25
- package/COMPONENT_QUICK_REFERENCE.md +3 -3
- package/README.md +52 -0
- package/dist/cjs/components/ActionList.js +33 -25
- package/dist/cjs/components/AnnouncementBar.js +115 -18
- package/dist/cjs/components/AnnouncementCard.js +269 -0
- package/dist/cjs/components/AppProvider.js +15 -2
- package/dist/cjs/components/Autocomplete.js +58 -36
- package/dist/cjs/components/Badge.js +28 -14
- package/dist/cjs/components/Banner.js +37 -27
- package/dist/cjs/components/Box.js +50 -38
- package/dist/cjs/components/Button.js +338 -109
- package/dist/cjs/components/ButtonGroup.js +27 -14
- package/dist/cjs/components/Card.js +311 -143
- package/dist/cjs/components/Checkbox.js +55 -47
- package/dist/cjs/components/CheckboxCard.js +222 -0
- package/dist/cjs/components/CheckboxCardGroup.js +384 -0
- package/dist/cjs/components/ChoiceList.js +21 -11
- package/dist/cjs/components/Code.js +22 -8
- package/dist/cjs/components/Collapsible.js +24 -11
- package/dist/cjs/components/ColorField.js +163 -38
- package/dist/cjs/components/ContextualSaveBar.js +13 -6
- package/dist/cjs/components/DatePicker.js +48 -37
- package/dist/cjs/components/Disclosure.js +57 -13
- package/dist/cjs/components/Divider.js +82 -18
- package/dist/cjs/components/DropZone.js +194 -68
- package/dist/cjs/components/EmptyState.js +18 -6
- package/dist/cjs/components/Filters.js +84 -36
- package/dist/cjs/components/FooterHelp.js +14 -4
- package/dist/cjs/components/Form.js +13 -2
- package/dist/cjs/components/Frame.js +57 -22
- package/dist/cjs/components/FrameSaveBar.js +37 -6
- package/dist/cjs/components/Grid.js +31 -15
- package/dist/cjs/components/HorizontalStack.js +38 -25
- package/dist/cjs/components/Icon.js +683 -61
- package/dist/cjs/components/Image.js +35 -22
- package/dist/cjs/components/InlineError.js +19 -10
- package/dist/cjs/components/Label.js +21 -12
- package/dist/cjs/components/Layout.js +37 -26
- package/dist/cjs/components/LayoutSection.js +84 -22
- package/dist/cjs/components/Link.js +35 -22
- package/dist/cjs/components/List.js +28 -12
- package/dist/cjs/components/Listbox.js +53 -31
- package/dist/cjs/components/Loading.js +14 -2
- package/dist/cjs/components/Modal.js +32 -39
- package/dist/cjs/components/Navigation.js +107 -36
- package/dist/cjs/components/Page.js +44 -31
- package/dist/cjs/components/Pagination.js +20 -5
- package/dist/cjs/components/Pane.js +67 -4
- package/dist/cjs/components/Popover.js +63 -30
- package/dist/cjs/components/PopoverManager.js +14 -1
- package/dist/cjs/components/ProgressBar.js +28 -15
- package/dist/cjs/components/RadioButton.js +32 -24
- package/dist/cjs/components/RadioButtonCard.js +92 -67
- package/dist/cjs/components/RadioButtonCardGroup.js +379 -0
- package/dist/cjs/components/RangeSlider.js +34 -26
- package/dist/cjs/components/ResourceList.js +28 -14
- package/dist/cjs/components/Select.js +38 -26
- package/dist/cjs/components/SkeletonText.js +33 -18
- package/dist/cjs/components/Spinner.js +24 -12
- package/dist/cjs/components/Stack.js +131 -71
- package/dist/cjs/components/TabNavigation.js +27 -1
- package/dist/cjs/components/Table.js +85 -29
- package/dist/cjs/components/Tabs.js +84 -24
- package/dist/cjs/components/Tag.js +37 -16
- package/dist/cjs/components/Text.js +32 -18
- package/dist/cjs/components/TextField.js +119 -69
- package/dist/cjs/components/Thumbnail.js +25 -11
- package/dist/cjs/components/TimePicker.js +22 -1
- package/dist/cjs/components/Tip.js +140 -25
- package/dist/cjs/components/ToastNotification.js +107 -34
- package/dist/cjs/components/ToastProvider.js +13 -3
- package/dist/cjs/components/Tooltip.js +50 -41
- package/dist/cjs/components/TopBar.js +83 -9
- package/dist/cjs/components/VerticalStack.js +31 -16
- package/dist/cjs/index.js +24 -0
- package/dist/cjs/playwright.config.js +114 -0
- package/dist/cjs/stories/Autocomplete.stories.js +10 -10
- package/dist/cjs/stories/Checkbox.stories.js +6 -8
- package/dist/cjs/stories/CheckboxCardGroup.stories.js +459 -0
- package/dist/cjs/stories/Collapsible.stories.js +11 -11
- package/dist/cjs/stories/ColorField.stories.js +2 -3
- package/dist/cjs/stories/ComplexExamples.stories.js +48 -77
- package/dist/cjs/stories/ContextualSaveBar.stories.js +1 -1
- package/dist/cjs/stories/Divider.stories.js +15 -16
- package/dist/cjs/stories/DropZone.stories.js +3 -3
- package/dist/cjs/stories/FooterHelp.stories.js +3 -4
- package/dist/cjs/stories/Form.stories.js +2 -4
- package/dist/cjs/stories/Grid.stories.js +24 -33
- package/dist/cjs/stories/Icon.stories.js +22 -23
- package/dist/cjs/stories/Image.stories.js +12 -15
- package/dist/cjs/stories/InlineError.stories.js +0 -1
- package/dist/cjs/stories/Layout.stories.js +96 -2
- package/dist/cjs/stories/LayoutSection.stories.js +13 -18
- package/dist/cjs/stories/List.stories.js +24 -28
- package/dist/cjs/stories/Listbox.stories.js +2 -2
- package/dist/cjs/stories/Loading.stories.js +21 -25
- package/dist/cjs/stories/Modal.stories.js +0 -1
- package/dist/cjs/stories/Pagination.stories.js +4 -4
- package/dist/cjs/stories/Pane.stories.js +10 -18
- package/dist/cjs/stories/Popover.stories.js +7 -7
- package/dist/cjs/stories/PopoverManager.stories.js +9 -9
- package/dist/cjs/stories/ProgressBar.stories.js +8 -8
- package/dist/cjs/stories/RadioButton.stories.js +2 -2
- package/dist/cjs/stories/RadioButtonCard.stories.js +2 -2
- package/dist/cjs/stories/RadioButtonCardGroup.stories.js +502 -0
- package/dist/cjs/stories/RangeSlider.stories.js +1 -3
- package/dist/cjs/stories/ResourceList.stories.js +13 -13
- package/dist/cjs/stories/Spinner.stories.js +9 -9
- package/dist/cjs/stories/Stack.stories.js +233 -51
- package/dist/cjs/stories/Tabs.stories.js +2 -2
- package/dist/cjs/stories/Tag.stories.js +1 -1
- package/dist/cjs/stories/Thumbnail.stories.js +17 -18
- package/dist/cjs/stories/TimePicker.stories.js +0 -5
- package/dist/cjs/stories/Tip.stories.js +1 -1
- package/dist/cjs/styles/Table.js +2 -7
- package/dist/cjs/tests/visual/stories.spec.js +637 -0
- package/dist/cjs/utilities/dates.js +7 -7
- package/dist/esm/components/ActionList.js +33 -25
- package/dist/esm/components/AnnouncementBar.js +115 -18
- package/dist/esm/components/AnnouncementCard.js +254 -0
- package/dist/esm/components/AppProvider.js +15 -2
- package/dist/esm/components/Autocomplete.js +58 -36
- package/dist/esm/components/Badge.js +28 -14
- package/dist/esm/components/Banner.js +37 -27
- package/dist/esm/components/Box.js +50 -38
- package/dist/esm/components/Button.js +338 -109
- package/dist/esm/components/ButtonGroup.js +27 -14
- package/dist/esm/components/Card.js +300 -140
- package/dist/esm/components/Checkbox.js +55 -47
- package/dist/esm/components/CheckboxCard.js +207 -0
- package/dist/esm/components/CheckboxCardGroup.js +370 -0
- package/dist/esm/components/ChoiceList.js +21 -11
- package/dist/esm/components/Code.js +22 -8
- package/dist/esm/components/Collapsible.js +24 -11
- package/dist/esm/components/ColorField.js +165 -40
- package/dist/esm/components/ContextualSaveBar.js +13 -6
- package/dist/esm/components/DatePicker.js +48 -37
- package/dist/esm/components/Disclosure.js +50 -6
- package/dist/esm/components/Divider.js +78 -20
- package/dist/esm/components/DropZone.js +194 -68
- package/dist/esm/components/EmptyState.js +18 -6
- package/dist/esm/components/Filters.js +84 -36
- package/dist/esm/components/FooterHelp.js +14 -4
- package/dist/esm/components/Form.js +13 -2
- package/dist/esm/components/Frame.js +57 -22
- package/dist/esm/components/FrameSaveBar.js +37 -6
- package/dist/esm/components/Grid.js +31 -15
- package/dist/esm/components/HorizontalStack.js +38 -25
- package/dist/esm/components/Icon.js +681 -62
- package/dist/esm/components/Image.js +35 -22
- package/dist/esm/components/InlineError.js +19 -10
- package/dist/esm/components/Label.js +21 -12
- package/dist/esm/components/Layout.js +62 -27
- package/dist/esm/components/LayoutSection.js +84 -22
- package/dist/esm/components/Link.js +35 -22
- package/dist/esm/components/List.js +28 -12
- package/dist/esm/components/Listbox.js +53 -31
- package/dist/esm/components/Loading.js +14 -2
- package/dist/esm/components/Modal.js +79 -40
- package/dist/esm/components/Navigation.js +107 -36
- package/dist/esm/components/Page.js +44 -31
- package/dist/esm/components/Pagination.js +20 -5
- package/dist/esm/components/Pane.js +67 -4
- package/dist/esm/components/Popover.js +63 -30
- package/dist/esm/components/PopoverManager.js +14 -1
- package/dist/esm/components/ProgressBar.js +28 -15
- package/dist/esm/components/RadioButton.js +32 -24
- package/dist/esm/components/RadioButtonCard.js +92 -67
- package/dist/esm/components/RadioButtonCardGroup.js +364 -0
- package/dist/esm/components/RangeSlider.js +34 -26
- package/dist/esm/components/ResourceList.js +28 -14
- package/dist/esm/components/Select.js +38 -26
- package/dist/esm/components/SkeletonText.js +33 -18
- package/dist/esm/components/Spinner.js +24 -12
- package/dist/esm/components/Stack.js +131 -71
- package/dist/esm/components/TabNavigation.js +27 -1
- package/dist/esm/components/Table.js +85 -29
- package/dist/esm/components/Tabs.js +84 -24
- package/dist/esm/components/Tag.js +37 -16
- package/dist/esm/components/Text.js +32 -18
- package/dist/esm/components/TextField.js +119 -69
- package/dist/esm/components/Thumbnail.js +25 -11
- package/dist/esm/components/TimePicker.js +22 -1
- package/dist/esm/components/Tip.js +140 -25
- package/dist/esm/components/ToastNotification.js +107 -34
- package/dist/esm/components/ToastProvider.js +13 -3
- package/dist/esm/components/Tooltip.js +50 -41
- package/dist/esm/components/TopBar.js +83 -9
- package/dist/esm/components/VerticalStack.js +31 -16
- package/dist/esm/index.js +6 -0
- package/dist/esm/playwright.config.js +104 -0
- package/dist/esm/stories/Autocomplete.stories.js +10 -10
- package/dist/esm/stories/Checkbox.stories.js +6 -8
- package/dist/esm/stories/CheckboxCardGroup.stories.js +421 -0
- package/dist/esm/stories/Collapsible.stories.js +11 -11
- package/dist/esm/stories/ColorField.stories.js +2 -3
- package/dist/esm/stories/ComplexExamples.stories.js +48 -77
- package/dist/esm/stories/ContextualSaveBar.stories.js +1 -1
- package/dist/esm/stories/Divider.stories.js +15 -16
- package/dist/esm/stories/DropZone.stories.js +3 -3
- package/dist/esm/stories/FooterHelp.stories.js +3 -4
- package/dist/esm/stories/Form.stories.js +2 -4
- package/dist/esm/stories/Grid.stories.js +24 -33
- package/dist/esm/stories/Icon.stories.js +22 -23
- package/dist/esm/stories/Image.stories.js +12 -15
- package/dist/esm/stories/InlineError.stories.js +0 -1
- package/dist/esm/stories/Layout.stories.js +93 -2
- package/dist/esm/stories/LayoutSection.stories.js +13 -18
- package/dist/esm/stories/List.stories.js +24 -28
- package/dist/esm/stories/Listbox.stories.js +2 -2
- package/dist/esm/stories/Loading.stories.js +21 -25
- package/dist/esm/stories/Modal.stories.js +0 -1
- package/dist/esm/stories/Pagination.stories.js +4 -4
- package/dist/esm/stories/Pane.stories.js +10 -18
- package/dist/esm/stories/Popover.stories.js +7 -7
- package/dist/esm/stories/PopoverManager.stories.js +9 -9
- package/dist/esm/stories/ProgressBar.stories.js +8 -8
- package/dist/esm/stories/RadioButton.stories.js +2 -2
- package/dist/esm/stories/RadioButtonCard.stories.js +2 -2
- package/dist/esm/stories/RadioButtonCardGroup.stories.js +461 -0
- package/dist/esm/stories/RangeSlider.stories.js +1 -3
- package/dist/esm/stories/ResourceList.stories.js +13 -13
- package/dist/esm/stories/Spinner.stories.js +9 -9
- package/dist/esm/stories/Stack.stories.js +224 -51
- package/dist/esm/stories/Tabs.stories.js +2 -2
- package/dist/esm/stories/Tag.stories.js +1 -1
- package/dist/esm/stories/Thumbnail.stories.js +17 -18
- package/dist/esm/stories/TimePicker.stories.js +0 -5
- package/dist/esm/stories/Tip.stories.js +1 -1
- package/dist/esm/styles/Table.js +2 -7
- package/dist/esm/tests/visual/stories.spec.js +633 -0
- package/dist/esm/utilities/dates.js +7 -7
- package/dist/types/components/ActionList.d.ts +1 -31
- package/dist/types/components/ActionList.d.ts.map +1 -1
- package/dist/types/components/AnnouncementBar.d.ts +1 -19
- package/dist/types/components/AnnouncementBar.d.ts.map +1 -1
- package/dist/types/components/AnnouncementCard.d.ts +3 -0
- package/dist/types/components/AnnouncementCard.d.ts.map +1 -0
- package/dist/types/components/AppProvider.d.ts +14 -1
- package/dist/types/components/AppProvider.d.ts.map +1 -1
- package/dist/types/components/Autocomplete.d.ts +1 -71
- package/dist/types/components/Autocomplete.d.ts.map +1 -1
- package/dist/types/components/Badge.d.ts +1 -19
- package/dist/types/components/Badge.d.ts.map +1 -1
- package/dist/types/components/Banner.d.ts +1 -37
- package/dist/types/components/Banner.d.ts.map +1 -1
- package/dist/types/components/Box.d.ts +1 -68
- package/dist/types/components/Box.d.ts.map +1 -1
- package/dist/types/components/Button.d.ts +1 -131
- package/dist/types/components/Button.d.ts.map +1 -1
- package/dist/types/components/ButtonGroup.d.ts +1 -22
- package/dist/types/components/ButtonGroup.d.ts.map +1 -1
- package/dist/types/components/Card.d.ts +54 -59
- package/dist/types/components/Card.d.ts.map +1 -1
- package/dist/types/components/Checkbox.d.ts +1 -63
- package/dist/types/components/Checkbox.d.ts.map +1 -1
- package/dist/types/components/CheckboxCard.d.ts +3 -0
- package/dist/types/components/CheckboxCard.d.ts.map +1 -0
- package/dist/types/components/CheckboxCardGroup.d.ts +3 -0
- package/dist/types/components/CheckboxCardGroup.d.ts.map +1 -0
- package/dist/types/components/ChoiceList.d.ts +1 -42
- package/dist/types/components/ChoiceList.d.ts.map +1 -1
- package/dist/types/components/Code.d.ts +1 -26
- package/dist/types/components/Code.d.ts.map +1 -1
- package/dist/types/components/Collapsible.d.ts +1 -15
- package/dist/types/components/Collapsible.d.ts.map +1 -1
- package/dist/types/components/ColorField.d.ts +13 -34
- package/dist/types/components/ColorField.d.ts.map +1 -1
- package/dist/types/components/ContextualSaveBar.d.ts +13 -6
- package/dist/types/components/ContextualSaveBar.d.ts.map +1 -1
- package/dist/types/components/DatePicker.d.ts +1 -64
- package/dist/types/components/DatePicker.d.ts.map +1 -1
- package/dist/types/components/Disclosure.d.ts +1 -25
- package/dist/types/components/Disclosure.d.ts.map +1 -1
- package/dist/types/components/Divider.d.ts +1 -19
- package/dist/types/components/Divider.d.ts.map +1 -1
- package/dist/types/components/DropZone.d.ts +3 -62
- package/dist/types/components/DropZone.d.ts.map +1 -1
- package/dist/types/components/EmptyState.d.ts +1 -50
- package/dist/types/components/EmptyState.d.ts.map +1 -1
- package/dist/types/components/Filters.d.ts +13 -68
- package/dist/types/components/Filters.d.ts.map +1 -1
- package/dist/types/components/FooterHelp.d.ts +14 -4
- package/dist/types/components/FooterHelp.d.ts.map +1 -1
- package/dist/types/components/Form.d.ts +13 -2
- package/dist/types/components/Form.d.ts.map +1 -1
- package/dist/types/components/Frame.d.ts +15 -36
- package/dist/types/components/Frame.d.ts.map +1 -1
- package/dist/types/components/FrameSaveBar.d.ts +3 -6
- package/dist/types/components/FrameSaveBar.d.ts.map +1 -1
- package/dist/types/components/Grid.d.ts +5 -21
- package/dist/types/components/Grid.d.ts.map +1 -1
- package/dist/types/components/HorizontalStack.d.ts +1 -34
- package/dist/types/components/HorizontalStack.d.ts.map +1 -1
- package/dist/types/components/Icon.d.ts +1 -41
- package/dist/types/components/Icon.d.ts.map +1 -1
- package/dist/types/components/Image.d.ts +1 -43
- package/dist/types/components/Image.d.ts.map +1 -1
- package/dist/types/components/InlineError.d.ts +1 -20
- package/dist/types/components/InlineError.d.ts.map +1 -1
- package/dist/types/components/Label.d.ts +1 -26
- package/dist/types/components/Label.d.ts.map +1 -1
- package/dist/types/components/Layout.d.ts +24 -15
- package/dist/types/components/Layout.d.ts.map +1 -1
- package/dist/types/components/LayoutSection.d.ts +1 -19
- package/dist/types/components/LayoutSection.d.ts.map +1 -1
- package/dist/types/components/Link.d.ts +1 -37
- package/dist/types/components/Link.d.ts.map +1 -1
- package/dist/types/components/List.d.ts +5 -17
- package/dist/types/components/List.d.ts.map +1 -1
- package/dist/types/components/Listbox.d.ts +1 -32
- package/dist/types/components/Listbox.d.ts.map +1 -1
- package/dist/types/components/Loading.d.ts +14 -2
- package/dist/types/components/Loading.d.ts.map +1 -1
- package/dist/types/components/Modal.d.ts +26 -35
- package/dist/types/components/Modal.d.ts.map +1 -1
- package/dist/types/components/Navigation.d.ts +1 -25
- package/dist/types/components/Navigation.d.ts.map +1 -1
- package/dist/types/components/Page.d.ts +1 -57
- package/dist/types/components/Page.d.ts.map +1 -1
- package/dist/types/components/Pagination.d.ts +13 -3
- package/dist/types/components/Pagination.d.ts.map +1 -1
- package/dist/types/components/Pane.d.ts +55 -3
- package/dist/types/components/Pane.d.ts.map +1 -1
- package/dist/types/components/Popover.d.ts +5 -35
- package/dist/types/components/Popover.d.ts.map +1 -1
- package/dist/types/components/PopoverManager.d.ts.map +1 -1
- package/dist/types/components/ProgressBar.d.ts +1 -22
- package/dist/types/components/ProgressBar.d.ts.map +1 -1
- package/dist/types/components/RadioButton.d.ts +1 -37
- package/dist/types/components/RadioButton.d.ts.map +1 -1
- package/dist/types/components/RadioButtonCard.d.ts +1 -39
- package/dist/types/components/RadioButtonCard.d.ts.map +1 -1
- package/dist/types/components/RadioButtonCardGroup.d.ts +3 -0
- package/dist/types/components/RadioButtonCardGroup.d.ts.map +1 -0
- package/dist/types/components/RangeSlider.d.ts +1 -42
- package/dist/types/components/RangeSlider.d.ts.map +1 -1
- package/dist/types/components/ResourceList.d.ts +5 -30
- package/dist/types/components/ResourceList.d.ts.map +1 -1
- package/dist/types/components/Select.d.ts +1 -46
- package/dist/types/components/Select.d.ts.map +1 -1
- package/dist/types/components/SkeletonText.d.ts +1 -26
- package/dist/types/components/SkeletonText.d.ts.map +1 -1
- package/dist/types/components/Spinner.d.ts +1 -16
- package/dist/types/components/Spinner.d.ts.map +1 -1
- package/dist/types/components/Stack.d.ts +1 -47
- package/dist/types/components/Stack.d.ts.map +1 -1
- package/dist/types/components/TabNavigation.d.ts.map +1 -1
- package/dist/types/components/Table.d.ts +13 -58
- package/dist/types/components/Table.d.ts.map +1 -1
- package/dist/types/components/Tabs.d.ts +40 -34
- package/dist/types/components/Tabs.d.ts.map +1 -1
- package/dist/types/components/Tag.d.ts +1 -24
- package/dist/types/components/Tag.d.ts.map +1 -1
- package/dist/types/components/Text.d.ts +1 -30
- package/dist/types/components/Text.d.ts.map +1 -1
- package/dist/types/components/TextField.d.ts +1 -109
- package/dist/types/components/TextField.d.ts.map +1 -1
- package/dist/types/components/Thumbnail.d.ts +1 -16
- package/dist/types/components/Thumbnail.d.ts.map +1 -1
- package/dist/types/components/TimePicker.d.ts +28 -1
- package/dist/types/components/TimePicker.d.ts.map +1 -1
- package/dist/types/components/Tip.d.ts +1 -21
- package/dist/types/components/Tip.d.ts.map +1 -1
- package/dist/types/components/ToastNotification.d.ts +1 -34
- package/dist/types/components/ToastNotification.d.ts.map +1 -1
- package/dist/types/components/ToastProvider.d.ts +13 -3
- package/dist/types/components/ToastProvider.d.ts.map +1 -1
- package/dist/types/components/Tooltip.d.ts +1 -54
- package/dist/types/components/Tooltip.d.ts.map +1 -1
- package/dist/types/components/TopBar.d.ts +1 -19
- package/dist/types/components/TopBar.d.ts.map +1 -1
- package/dist/types/components/VerticalStack.d.ts +1 -25
- package/dist/types/components/VerticalStack.d.ts.map +1 -1
- package/dist/types/index.d.ts +6 -0
- package/dist/types/styles/Table.d.ts.map +1 -1
- package/index.css +76 -14
- package/package.json +15 -5
|
@@ -2,8 +2,42 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
|
2
2
|
import { tv } from "tailwind-variants";
|
|
3
3
|
import Text from "./Text.js";
|
|
4
4
|
import Label from "./Label.js";
|
|
5
|
-
|
|
6
|
-
|
|
5
|
+
/**
|
|
6
|
+
* @component RadioButtonCard
|
|
7
|
+
*
|
|
8
|
+
* @description A card-styled radio input that displays a title and description within a selectable card container.
|
|
9
|
+
*
|
|
10
|
+
* @usage
|
|
11
|
+
* - DO: Use for visually prominent single-choice selections with descriptive content.
|
|
12
|
+
* - DON'T: Use for simple inline radio inputs (use RadioButton).
|
|
13
|
+
*
|
|
14
|
+
* @accessibility
|
|
15
|
+
* - The entire card is clickable and keyboard accessible; ensure title clearly describes the option.
|
|
16
|
+
*
|
|
17
|
+
* @alternative
|
|
18
|
+
* - If you need a simple inline radio button, use `RadioButton`. If you need a checkbox-style card, use `CheckboxCard`.
|
|
19
|
+
*
|
|
20
|
+
* @param {Object} props - Props for the RadioButtonCard component.
|
|
21
|
+
* @param {string} [props.label] - The text label for the radio button.
|
|
22
|
+
* @param {boolean} [props.labelHidden=false] - If true, hides the label visually but keeps it available for screen readers.
|
|
23
|
+
* @param {string} [props.id] - The unique identifier for the radio input.
|
|
24
|
+
* @param {string} [props.name] - The name attribute for the radio input (must be the same for grouped buttons).
|
|
25
|
+
* @param {string} [props.description] - A description of the radio button.
|
|
26
|
+
* @param {string} [props.value] - The value attribute for the radio input.
|
|
27
|
+
* @param {string} [props.error] - An error message associated with the radio button, if any.
|
|
28
|
+
* @param {boolean} [props.checked=false] - Indicates whether the radio button is checked.
|
|
29
|
+
* @param {boolean} [props.disabled=false] - Indicates whether the radio button is disabled.
|
|
30
|
+
* @param {string} [props.helpText] - Additional descriptive text for the radio button.
|
|
31
|
+
* @param {function} [props.onChange] - Callback function called when the radio button state changes.
|
|
32
|
+
* @param {function} [props.onFocus] - Callback function called when the radio button gains focus.
|
|
33
|
+
* @param {function} [props.onBlur] - Callback function called when the radio button loses focus.
|
|
34
|
+
* @param {boolean} [props.hideRadioButton=false] - When true, hides the visual radio button control.
|
|
35
|
+
* @param {React.ReactNode} [props.icon=null] - Optional icon JSX to display in the card.
|
|
36
|
+
* @param {boolean} [props.allowDeselect=true] - When true, clicking an already-selected card deselects it by calling onChange with a synthetic event where target.value is null.
|
|
37
|
+
*
|
|
38
|
+
* @returns {JSX.Element} The rendered RadioButton component.
|
|
39
|
+
*/ var styles = tv({
|
|
40
|
+
base: "Litho-RadioButtonCardContainer border border-transparent rounded-lg p-3 pl-4 flex justify-between gap-2 hover:border-form-border-focus hover:ring hover:ring-form-focus",
|
|
7
41
|
variants: {
|
|
8
42
|
disabled: {
|
|
9
43
|
true: "bg-tint-1",
|
|
@@ -18,12 +52,12 @@ var styles = tv({
|
|
|
18
52
|
{
|
|
19
53
|
disabled: false,
|
|
20
54
|
checked: true,
|
|
21
|
-
class: "border-form-border-focus
|
|
55
|
+
class: "border-form-border-focus bg-surface-selected"
|
|
22
56
|
},
|
|
23
57
|
{
|
|
24
58
|
disabled: false,
|
|
25
59
|
checked: false,
|
|
26
|
-
class: "
|
|
60
|
+
class: ""
|
|
27
61
|
}
|
|
28
62
|
]
|
|
29
63
|
});
|
|
@@ -61,32 +95,9 @@ var radioStyles = tv({
|
|
|
61
95
|
}
|
|
62
96
|
]
|
|
63
97
|
});
|
|
64
|
-
|
|
65
|
-
* RadioButton Component
|
|
66
|
-
*
|
|
67
|
-
* A custom radio button component with support for labels, help text, and extensive styling using Tailwind Variants (tv).
|
|
68
|
-
*
|
|
69
|
-
* @component
|
|
70
|
-
*
|
|
71
|
-
* @param {Object} props - Props for the RadioButton component.
|
|
72
|
-
* @param {string} [props.label] - The text label for the radio button.
|
|
73
|
-
* @param {boolean} [props.labelHidden=false] - If true, hides the label visually but keeps it available for screen readers.
|
|
74
|
-
* @param {string} [props.id] - The unique identifier for the radio input.
|
|
75
|
-
* @param {string} [props.name] - The name attribute for the radio input (must be the same for grouped buttons).
|
|
76
|
-
* @param {string} [props.description] - A description of the radio button.
|
|
77
|
-
* @param {string} [props.value] - The value attribute for the radio input.
|
|
78
|
-
* @param {string} [props.error] - An error message associated with the radio button, if any.
|
|
79
|
-
* @param {boolean} [props.checked=false] - Indicates whether the radio button is checked.
|
|
80
|
-
* @param {boolean} [props.disabled=false] - Indicates whether the radio button is disabled.
|
|
81
|
-
* @param {string} [props.helpText] - Additional descriptive text for the radio button.
|
|
82
|
-
* @param {function} [props.onChange] - Callback function called when the radio button state changes.
|
|
83
|
-
* @param {function} [props.onFocus] - Callback function called when the radio button gains focus.
|
|
84
|
-
* @param {function} [props.onBlur] - Callback function called when the radio button loses focus.
|
|
85
|
-
*
|
|
86
|
-
* @returns {JSX.Element} The rendered RadioButton component.
|
|
87
|
-
*/ function RadioButtonCard() {
|
|
98
|
+
function RadioButtonCard() {
|
|
88
99
|
var props = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {};
|
|
89
|
-
var label = props.label, tooltip = props.tooltip, labelHidden = props.labelHidden, id = props.id, name = props.name, description = props.description, value = props.value, error = props.error, _props_checked = props.checked, checked = _props_checked === void 0 ? false : _props_checked, _props_disabled = props.disabled, disabled = _props_disabled === void 0 ? false : _props_disabled, helpText = props.helpText, onChange = props.onChange, onFocus = props.onFocus, onBlur = props.onBlur;
|
|
100
|
+
var label = props.label, tooltip = props.tooltip, labelHidden = props.labelHidden, id = props.id, name = props.name, description = props.description, value = props.value, error = props.error, _props_checked = props.checked, checked = _props_checked === void 0 ? false : _props_checked, _props_disabled = props.disabled, disabled = _props_disabled === void 0 ? false : _props_disabled, helpText = props.helpText, _props_hideRadioButton = props.hideRadioButton, hideRadioButton = _props_hideRadioButton === void 0 ? false : _props_hideRadioButton, _props_icon = props.icon, icon = _props_icon === void 0 ? null : _props_icon, _props_allowDeselect = props.allowDeselect, allowDeselect = _props_allowDeselect === void 0 ? true : _props_allowDeselect, onChange = props.onChange, onFocus = props.onFocus, onBlur = props.onBlur, _props_labelFontWeight = props.labelFontWeight, labelFontWeight = _props_labelFontWeight === void 0 ? "semibold" : _props_labelFontWeight;
|
|
90
101
|
var hasError = !!error;
|
|
91
102
|
var classes = styles({
|
|
92
103
|
checked: checked,
|
|
@@ -113,57 +124,71 @@ var radioStyles = tv({
|
|
|
113
124
|
onBlur(event);
|
|
114
125
|
}
|
|
115
126
|
};
|
|
127
|
+
var handleLabelClick = function() {
|
|
128
|
+
if (allowDeselect && checked && !disabled) {
|
|
129
|
+
onChange === null || onChange === void 0 ? void 0 : onChange({
|
|
130
|
+
target: {
|
|
131
|
+
value: null
|
|
132
|
+
}
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
};
|
|
116
136
|
return /*#__PURE__*/ _jsxs("div", {
|
|
117
137
|
className: "flex flex-col gap-1",
|
|
118
138
|
children: [
|
|
119
139
|
/*#__PURE__*/ _jsxs("label", {
|
|
120
140
|
className: classes,
|
|
141
|
+
onClick: handleLabelClick,
|
|
121
142
|
children: [
|
|
122
143
|
/*#__PURE__*/ _jsxs("div", {
|
|
123
|
-
className: "flex
|
|
144
|
+
className: "flex items-center gap-4",
|
|
124
145
|
children: [
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
fontWeight: "semibold",
|
|
129
|
-
as: "p",
|
|
130
|
-
children: label
|
|
146
|
+
icon && /*#__PURE__*/ _jsx("div", {
|
|
147
|
+
className: "flex-shrink-0",
|
|
148
|
+
children: icon
|
|
131
149
|
}),
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
150
|
+
/*#__PURE__*/ _jsxs("div", {
|
|
151
|
+
children: [
|
|
152
|
+
label && !labelHidden && /*#__PURE__*/ _jsx(Label, {
|
|
153
|
+
tooltip: tooltip,
|
|
154
|
+
disabled: disabled,
|
|
155
|
+
fontWeight: labelFontWeight,
|
|
156
|
+
as: "p",
|
|
157
|
+
children: label
|
|
158
|
+
}),
|
|
159
|
+
description && /*#__PURE__*/ _jsx(Text, {
|
|
160
|
+
color: disabled ? "disabled" : "subdued",
|
|
161
|
+
children: description
|
|
162
|
+
})
|
|
163
|
+
]
|
|
135
164
|
})
|
|
136
165
|
]
|
|
137
166
|
}),
|
|
138
|
-
/*#__PURE__*/
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
checked && hasError && /*#__PURE__*/ _jsx("div", {
|
|
161
|
-
className: "rounded-full w-1.5 h-1.5 ".concat(disabled ? "bg-form-input-fg-disabled" : "bg-form-bg")
|
|
162
|
-
})
|
|
163
|
-
]
|
|
167
|
+
/*#__PURE__*/ _jsx("input", {
|
|
168
|
+
type: "radio",
|
|
169
|
+
id: id,
|
|
170
|
+
name: name,
|
|
171
|
+
value: value,
|
|
172
|
+
checked: checked,
|
|
173
|
+
disabled: disabled,
|
|
174
|
+
onChange: handleChange,
|
|
175
|
+
onFocus: handleFocus,
|
|
176
|
+
onBlur: handleBlur,
|
|
177
|
+
className: "sr-only"
|
|
178
|
+
}),
|
|
179
|
+
!hideRadioButton && /*#__PURE__*/ _jsx("div", {
|
|
180
|
+
className: "Litho-RadioButton__ControlContainer w-5 h-5 flex items-center",
|
|
181
|
+
children: /*#__PURE__*/ _jsxs("div", {
|
|
182
|
+
className: radioClasses,
|
|
183
|
+
children: [
|
|
184
|
+
checked && !hasError && /*#__PURE__*/ _jsx("div", {
|
|
185
|
+
className: "rounded-full w-1.5 h-1.5 ".concat(disabled ? "bg-form-input-fg-disabled" : "bg-form-input-fg-light")
|
|
186
|
+
}),
|
|
187
|
+
checked && hasError && /*#__PURE__*/ _jsx("div", {
|
|
188
|
+
className: "rounded-full w-1.5 h-1.5 ".concat(disabled ? "bg-form-input-fg-disabled" : "bg-form-bg")
|
|
164
189
|
})
|
|
165
|
-
|
|
166
|
-
|
|
190
|
+
]
|
|
191
|
+
})
|
|
167
192
|
})
|
|
168
193
|
]
|
|
169
194
|
}),
|
|
@@ -0,0 +1,364 @@
|
|
|
1
|
+
function _define_property(obj, key, value) {
|
|
2
|
+
if (key in obj) {
|
|
3
|
+
Object.defineProperty(obj, key, {
|
|
4
|
+
value: value,
|
|
5
|
+
enumerable: true,
|
|
6
|
+
configurable: true,
|
|
7
|
+
writable: true
|
|
8
|
+
});
|
|
9
|
+
} else {
|
|
10
|
+
obj[key] = value;
|
|
11
|
+
}
|
|
12
|
+
return obj;
|
|
13
|
+
}
|
|
14
|
+
function _object_spread(target) {
|
|
15
|
+
for(var i = 1; i < arguments.length; i++){
|
|
16
|
+
var source = arguments[i] != null ? arguments[i] : {};
|
|
17
|
+
var ownKeys = Object.keys(source);
|
|
18
|
+
if (typeof Object.getOwnPropertySymbols === "function") {
|
|
19
|
+
ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function(sym) {
|
|
20
|
+
return Object.getOwnPropertyDescriptor(source, sym).enumerable;
|
|
21
|
+
}));
|
|
22
|
+
}
|
|
23
|
+
ownKeys.forEach(function(key) {
|
|
24
|
+
_define_property(target, key, source[key]);
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
return target;
|
|
28
|
+
}
|
|
29
|
+
function ownKeys(object, enumerableOnly) {
|
|
30
|
+
var keys = Object.keys(object);
|
|
31
|
+
if (Object.getOwnPropertySymbols) {
|
|
32
|
+
var symbols = Object.getOwnPropertySymbols(object);
|
|
33
|
+
if (enumerableOnly) {
|
|
34
|
+
symbols = symbols.filter(function(sym) {
|
|
35
|
+
return Object.getOwnPropertyDescriptor(object, sym).enumerable;
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
keys.push.apply(keys, symbols);
|
|
39
|
+
}
|
|
40
|
+
return keys;
|
|
41
|
+
}
|
|
42
|
+
function _object_spread_props(target, source) {
|
|
43
|
+
source = source != null ? source : {};
|
|
44
|
+
if (Object.getOwnPropertyDescriptors) {
|
|
45
|
+
Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));
|
|
46
|
+
} else {
|
|
47
|
+
ownKeys(Object(source)).forEach(function(key) {
|
|
48
|
+
Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
return target;
|
|
52
|
+
}
|
|
53
|
+
function _object_without_properties(source, excluded) {
|
|
54
|
+
if (source == null) return {};
|
|
55
|
+
var target = _object_without_properties_loose(source, excluded);
|
|
56
|
+
var key, i;
|
|
57
|
+
if (Object.getOwnPropertySymbols) {
|
|
58
|
+
var sourceSymbolKeys = Object.getOwnPropertySymbols(source);
|
|
59
|
+
for(i = 0; i < sourceSymbolKeys.length; i++){
|
|
60
|
+
key = sourceSymbolKeys[i];
|
|
61
|
+
if (excluded.indexOf(key) >= 0) continue;
|
|
62
|
+
if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;
|
|
63
|
+
target[key] = source[key];
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
return target;
|
|
67
|
+
}
|
|
68
|
+
function _object_without_properties_loose(source, excluded) {
|
|
69
|
+
if (source == null) return {};
|
|
70
|
+
var target = {};
|
|
71
|
+
var sourceKeys = Object.keys(source);
|
|
72
|
+
var key, i;
|
|
73
|
+
for(i = 0; i < sourceKeys.length; i++){
|
|
74
|
+
key = sourceKeys[i];
|
|
75
|
+
if (excluded.indexOf(key) >= 0) continue;
|
|
76
|
+
target[key] = source[key];
|
|
77
|
+
}
|
|
78
|
+
return target;
|
|
79
|
+
}
|
|
80
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
81
|
+
import { tv } from "tailwind-variants";
|
|
82
|
+
import Text from "./Text.js";
|
|
83
|
+
import Label from "./Label.js";
|
|
84
|
+
import Icon from "./Icon.js";
|
|
85
|
+
import { CircleAlertMajor } from "@shopify/polaris-icons";
|
|
86
|
+
/**
|
|
87
|
+
* @component RadioButtonCardGroup
|
|
88
|
+
*
|
|
89
|
+
* @description A grouped radio selection component that renders options in a single bordered container with dividers between items, using card-styled radio inputs.
|
|
90
|
+
*
|
|
91
|
+
* @usage
|
|
92
|
+
* - DO: Use for single-select options that benefit from a compact grouped list layout with descriptions and icons.
|
|
93
|
+
* - DON'T: Use when each option needs its own standalone card appearance (use RadioButtonCard individually).
|
|
94
|
+
*
|
|
95
|
+
* @accessibility
|
|
96
|
+
* - Each option uses a native radio input (sr-only) wrapped in a label for keyboard accessibility and screen reader support.
|
|
97
|
+
* - All radio inputs share the same `name` attribute for native radio group behavior.
|
|
98
|
+
* - Focus-visible ring appears on keyboard navigation.
|
|
99
|
+
*
|
|
100
|
+
* @alternative
|
|
101
|
+
* - If you need standalone card-styled radio inputs, use `RadioButtonCard`.
|
|
102
|
+
* - If you need a simple inline radio/checkbox list, use `ChoiceList`.
|
|
103
|
+
*
|
|
104
|
+
* @param {Object} [props={}] - Component props.
|
|
105
|
+
* @param {string} [props.title] - Optional title rendered above the group.
|
|
106
|
+
* @param {React.ReactNode} [props.tooltip] - Tooltip content for the title.
|
|
107
|
+
* @param {boolean} [props.titleHidden=false] - Visually hides the title while keeping it accessible to screen readers.
|
|
108
|
+
* @param {Array<RadioButtonCardGroupOption>} [props.options=[]] - Array of option objects to render.
|
|
109
|
+
* @param {string} props.options[].value - The value of the option.
|
|
110
|
+
* @param {string} props.options[].label - The display label of the option.
|
|
111
|
+
* @param {string} [props.options[].description] - A description displayed below the label.
|
|
112
|
+
* @param {React.ReactNode} [props.options[].icon] - Optional icon JSX displayed on the left.
|
|
113
|
+
* @param {boolean} [props.options[].disabled=false] - Whether this specific option is disabled.
|
|
114
|
+
* @param {string|React.ReactNode} [props.options[].helpText] - Additional descriptive text for the option.
|
|
115
|
+
* @param {React.ReactNode} [props.options[].tooltip] - Tooltip content for this option's label.
|
|
116
|
+
* @param {Array<string>} [props.selected=[]] - Currently selected values. Array for API consistency with ChoiceList.
|
|
117
|
+
* @param {Function} [props.onChange] - Callback when selection changes. Receives updated array of selected values.
|
|
118
|
+
* @param {string} [props.name] - The name attribute for the radio inputs (groups them together).
|
|
119
|
+
* @param {string} [props.error] - Error message displayed below the group.
|
|
120
|
+
* @param {boolean} [props.disabled=false] - Disables all options.
|
|
121
|
+
* @param {boolean} [props.hideRadioButton=false] - Hides the radio button controls.
|
|
122
|
+
* @param {boolean} [props.allowDeselect=false] - When true, clicking a selected option deselects it.
|
|
123
|
+
* @param {"left"|"right"} [props.radioPosition="right"] - Position of the radio button control relative to the content.
|
|
124
|
+
* @param {Object} [restProps] - Additional props passed to the root element.
|
|
125
|
+
*
|
|
126
|
+
* @returns {JSX.Element} The rendered RadioButtonCardGroup component.
|
|
127
|
+
*
|
|
128
|
+
* @example
|
|
129
|
+
* <RadioButtonCardGroup
|
|
130
|
+
* title="Select a plan"
|
|
131
|
+
* name="plan"
|
|
132
|
+
* options={[
|
|
133
|
+
* { value: "basic", label: "Basic", description: "For individuals" },
|
|
134
|
+
* { value: "pro", label: "Pro", description: "For teams" },
|
|
135
|
+
* { value: "enterprise", label: "Enterprise", description: "For organizations" },
|
|
136
|
+
* ]}
|
|
137
|
+
* selected={["basic"]}
|
|
138
|
+
* onChange={(selected) => setSelected(selected)}
|
|
139
|
+
* />
|
|
140
|
+
*/ var containerStyles = tv({
|
|
141
|
+
base: "Litho-RadioButtonCardGroup border rounded-lg overflow-hidden",
|
|
142
|
+
variants: {
|
|
143
|
+
hasError: {
|
|
144
|
+
true: "border-form-border-error",
|
|
145
|
+
false: "border-edge-light"
|
|
146
|
+
}
|
|
147
|
+
},
|
|
148
|
+
defaultVariants: {
|
|
149
|
+
hasError: false
|
|
150
|
+
}
|
|
151
|
+
});
|
|
152
|
+
var itemStyles = tv({
|
|
153
|
+
base: "Litho-RadioButtonCardGroup__Item p-3 pl-4 flex items-center gap-3 has-[:focus-visible]:ring-2 has-[:focus-visible]:ring-form-focus has-[:focus-visible]:ring-inset",
|
|
154
|
+
variants: {
|
|
155
|
+
checked: {
|
|
156
|
+
true: "",
|
|
157
|
+
false: ""
|
|
158
|
+
},
|
|
159
|
+
disabled: {
|
|
160
|
+
true: "bg-tint-1",
|
|
161
|
+
false: "cursor-pointer hover"
|
|
162
|
+
},
|
|
163
|
+
isLast: {
|
|
164
|
+
true: "",
|
|
165
|
+
false: "border-b border-edge-subdued"
|
|
166
|
+
},
|
|
167
|
+
radioPosition: {
|
|
168
|
+
right: "justify-between",
|
|
169
|
+
left: ""
|
|
170
|
+
}
|
|
171
|
+
},
|
|
172
|
+
defaultVariants: {
|
|
173
|
+
radioPosition: "right"
|
|
174
|
+
}
|
|
175
|
+
});
|
|
176
|
+
// Replicated from RadioButtonCard — the radio circle control styles
|
|
177
|
+
var radioStyles = tv({
|
|
178
|
+
base: "Litho-RadioButton__Control w-4.5 h-4.5 rounded-full border border-form-border flex items-center justify-center",
|
|
179
|
+
variants: {
|
|
180
|
+
disabled: {
|
|
181
|
+
true: "bg-form-bg-disabled border-form-border"
|
|
182
|
+
}
|
|
183
|
+
},
|
|
184
|
+
compoundVariants: [
|
|
185
|
+
{
|
|
186
|
+
hasError: true,
|
|
187
|
+
disabled: false,
|
|
188
|
+
checked: false,
|
|
189
|
+
class: "bg-form-bg-error border-form-border-error hover:bg-form-bg-error-low hover:ring hover:ring-form-focus-error"
|
|
190
|
+
},
|
|
191
|
+
{
|
|
192
|
+
hasError: true,
|
|
193
|
+
disabled: false,
|
|
194
|
+
checked: true,
|
|
195
|
+
class: "bg-critical border-form-border-error hover:ring hover:ring-form-focus-error"
|
|
196
|
+
},
|
|
197
|
+
{
|
|
198
|
+
hasError: false,
|
|
199
|
+
disabled: false,
|
|
200
|
+
checked: false,
|
|
201
|
+
class: "bg-form-bg border-form-border hover:border-form-border-focus hover:ring hover:ring-form-focus"
|
|
202
|
+
},
|
|
203
|
+
{
|
|
204
|
+
hasError: false,
|
|
205
|
+
disabled: false,
|
|
206
|
+
checked: true,
|
|
207
|
+
class: "bg-form-accent border-form-border-focus hover:border-form-border-focus hover:ring hover:ring-form-focus"
|
|
208
|
+
}
|
|
209
|
+
]
|
|
210
|
+
});
|
|
211
|
+
function RadioButtonCardGroup() {
|
|
212
|
+
var props = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {};
|
|
213
|
+
var title = props.title, tooltip = props.tooltip, _props_titleHidden = props.titleHidden, titleHidden = _props_titleHidden === void 0 ? false : _props_titleHidden, _props_options = props.options, options = _props_options === void 0 ? [] : _props_options, _props_selected = props.selected, selected = _props_selected === void 0 ? [] : _props_selected, onChange = props.onChange, name = props.name, error = props.error, _props_disabled = props.disabled, disabled = _props_disabled === void 0 ? false : _props_disabled, _props_hideRadioButton = props.hideRadioButton, hideRadioButton = _props_hideRadioButton === void 0 ? false : _props_hideRadioButton, _props_allowDeselect = props.allowDeselect, allowDeselect = _props_allowDeselect === void 0 ? false : _props_allowDeselect, _props_radioPosition = props.radioPosition, radioPosition = _props_radioPosition === void 0 ? "left" : _props_radioPosition, _props_labelFontWeight = props.labelFontWeight, labelFontWeight = _props_labelFontWeight === void 0 ? "semibold" : _props_labelFontWeight, restProps = _object_without_properties(props, [
|
|
214
|
+
"title",
|
|
215
|
+
"tooltip",
|
|
216
|
+
"titleHidden",
|
|
217
|
+
"options",
|
|
218
|
+
"selected",
|
|
219
|
+
"onChange",
|
|
220
|
+
"name",
|
|
221
|
+
"error",
|
|
222
|
+
"disabled",
|
|
223
|
+
"hideRadioButton",
|
|
224
|
+
"allowDeselect",
|
|
225
|
+
"radioPosition",
|
|
226
|
+
"labelFontWeight"
|
|
227
|
+
]);
|
|
228
|
+
var hasError = !!error;
|
|
229
|
+
var containerClasses = containerStyles({
|
|
230
|
+
hasError: hasError
|
|
231
|
+
});
|
|
232
|
+
var handleOptionChange = function(optionValue) {
|
|
233
|
+
if (allowDeselect && selected.includes(optionValue)) {
|
|
234
|
+
onChange === null || onChange === void 0 ? void 0 : onChange([]);
|
|
235
|
+
} else {
|
|
236
|
+
onChange === null || onChange === void 0 ? void 0 : onChange([
|
|
237
|
+
optionValue
|
|
238
|
+
]);
|
|
239
|
+
}
|
|
240
|
+
};
|
|
241
|
+
return /*#__PURE__*/ _jsxs("div", _object_spread_props(_object_spread({
|
|
242
|
+
className: "Litho-RadioButtonCardGroupContainer flex flex-col gap-1"
|
|
243
|
+
}, restProps), {
|
|
244
|
+
children: [
|
|
245
|
+
title && !titleHidden && /*#__PURE__*/ _jsx(Label, {
|
|
246
|
+
as: "p",
|
|
247
|
+
tooltip: tooltip,
|
|
248
|
+
children: title
|
|
249
|
+
}),
|
|
250
|
+
/*#__PURE__*/ _jsx("div", {
|
|
251
|
+
className: containerClasses,
|
|
252
|
+
children: options.map(function(option, index) {
|
|
253
|
+
var isChecked = selected.includes(option.value);
|
|
254
|
+
var isDisabled = disabled || option.disabled;
|
|
255
|
+
var isLast = index === options.length - 1;
|
|
256
|
+
var itemClasses = itemStyles({
|
|
257
|
+
checked: isChecked,
|
|
258
|
+
disabled: isDisabled,
|
|
259
|
+
isLast: isLast,
|
|
260
|
+
radioPosition: radioPosition
|
|
261
|
+
});
|
|
262
|
+
var radioClasses = radioStyles({
|
|
263
|
+
checked: isChecked,
|
|
264
|
+
disabled: isDisabled,
|
|
265
|
+
hasError: hasError
|
|
266
|
+
});
|
|
267
|
+
return /*#__PURE__*/ _jsxs("label", {
|
|
268
|
+
className: itemClasses,
|
|
269
|
+
onClick: function() {
|
|
270
|
+
if (allowDeselect && isChecked && !isDisabled) {
|
|
271
|
+
onChange === null || onChange === void 0 ? void 0 : onChange([]);
|
|
272
|
+
}
|
|
273
|
+
},
|
|
274
|
+
children: [
|
|
275
|
+
!hideRadioButton && radioPosition === "left" && /*#__PURE__*/ _jsx("div", {
|
|
276
|
+
className: "Litho-RadioButton__ControlContainer w-5 h-5 flex items-center flex-shrink-0",
|
|
277
|
+
children: /*#__PURE__*/ _jsxs("div", {
|
|
278
|
+
className: radioClasses,
|
|
279
|
+
children: [
|
|
280
|
+
isChecked && !hasError && /*#__PURE__*/ _jsx("div", {
|
|
281
|
+
className: "rounded-full w-1.5 h-1.5 ".concat(isDisabled ? "bg-form-input-fg-disabled" : "bg-form-input-fg-light")
|
|
282
|
+
}),
|
|
283
|
+
isChecked && hasError && /*#__PURE__*/ _jsx("div", {
|
|
284
|
+
className: "rounded-full w-1.5 h-1.5 ".concat(isDisabled ? "bg-form-input-fg-disabled" : "bg-form-bg")
|
|
285
|
+
})
|
|
286
|
+
]
|
|
287
|
+
})
|
|
288
|
+
}),
|
|
289
|
+
/*#__PURE__*/ _jsxs("div", {
|
|
290
|
+
className: "flex items-center gap-4",
|
|
291
|
+
children: [
|
|
292
|
+
option.icon && /*#__PURE__*/ _jsx("div", {
|
|
293
|
+
className: "flex-shrink-0",
|
|
294
|
+
children: option.icon
|
|
295
|
+
}),
|
|
296
|
+
/*#__PURE__*/ _jsxs("div", {
|
|
297
|
+
children: [
|
|
298
|
+
option.label && /*#__PURE__*/ _jsx(Label, {
|
|
299
|
+
tooltip: option.tooltip,
|
|
300
|
+
disabled: isDisabled,
|
|
301
|
+
fontWeight: labelFontWeight,
|
|
302
|
+
as: "p",
|
|
303
|
+
children: option.label
|
|
304
|
+
}),
|
|
305
|
+
option.description && /*#__PURE__*/ _jsx(Text, {
|
|
306
|
+
color: isDisabled ? "disabled" : "subdued",
|
|
307
|
+
children: option.description
|
|
308
|
+
}),
|
|
309
|
+
option.helpText && typeof option.helpText === "string" && /*#__PURE__*/ _jsx(Text, {
|
|
310
|
+
color: isDisabled ? "disabled" : "subdued",
|
|
311
|
+
variant: "bodySm",
|
|
312
|
+
children: option.helpText
|
|
313
|
+
}),
|
|
314
|
+
option.helpText && typeof option.helpText !== "string" && option.helpText
|
|
315
|
+
]
|
|
316
|
+
})
|
|
317
|
+
]
|
|
318
|
+
}),
|
|
319
|
+
/*#__PURE__*/ _jsx("input", {
|
|
320
|
+
type: "radio",
|
|
321
|
+
name: name,
|
|
322
|
+
value: option.value,
|
|
323
|
+
checked: isChecked,
|
|
324
|
+
disabled: isDisabled,
|
|
325
|
+
onChange: function() {
|
|
326
|
+
return handleOptionChange(option.value);
|
|
327
|
+
},
|
|
328
|
+
className: "sr-only"
|
|
329
|
+
}),
|
|
330
|
+
!hideRadioButton && radioPosition === "right" && /*#__PURE__*/ _jsx("div", {
|
|
331
|
+
className: "Litho-RadioButton__ControlContainer w-5 h-5 flex items-center",
|
|
332
|
+
children: /*#__PURE__*/ _jsxs("div", {
|
|
333
|
+
className: radioClasses,
|
|
334
|
+
children: [
|
|
335
|
+
isChecked && !hasError && /*#__PURE__*/ _jsx("div", {
|
|
336
|
+
className: "rounded-full w-1.5 h-1.5 ".concat(isDisabled ? "bg-form-input-fg-disabled" : "bg-form-input-fg-light")
|
|
337
|
+
}),
|
|
338
|
+
isChecked && hasError && /*#__PURE__*/ _jsx("div", {
|
|
339
|
+
className: "rounded-full w-1.5 h-1.5 ".concat(isDisabled ? "bg-form-input-fg-disabled" : "bg-form-bg")
|
|
340
|
+
})
|
|
341
|
+
]
|
|
342
|
+
})
|
|
343
|
+
})
|
|
344
|
+
]
|
|
345
|
+
}, option.value);
|
|
346
|
+
})
|
|
347
|
+
}),
|
|
348
|
+
error && /*#__PURE__*/ _jsxs("div", {
|
|
349
|
+
className: "flex gap-2 items-center",
|
|
350
|
+
children: [
|
|
351
|
+
/*#__PURE__*/ _jsx(Icon, {
|
|
352
|
+
source: CircleAlertMajor,
|
|
353
|
+
color: "critical"
|
|
354
|
+
}),
|
|
355
|
+
/*#__PURE__*/ _jsx(Text, {
|
|
356
|
+
color: "critical",
|
|
357
|
+
children: error
|
|
358
|
+
})
|
|
359
|
+
]
|
|
360
|
+
})
|
|
361
|
+
]
|
|
362
|
+
}));
|
|
363
|
+
}
|
|
364
|
+
export default RadioButtonCardGroup;
|
|
@@ -51,7 +51,39 @@ import Label from "./Label.js";
|
|
|
51
51
|
import Text from "./Text.js";
|
|
52
52
|
import TextField from "./TextField.js";
|
|
53
53
|
import { tv } from "tailwind-variants";
|
|
54
|
-
|
|
54
|
+
/**
|
|
55
|
+
* @component RangeSlider
|
|
56
|
+
*
|
|
57
|
+
* @description A slider input for selecting a numeric value within a defined range, with optional label, prefix, suffix, and numeric text field output.
|
|
58
|
+
*
|
|
59
|
+
* @usage
|
|
60
|
+
* - DO: Use for selecting a numeric value within a continuous range (e.g., volume, price, percentage).
|
|
61
|
+
* - DON'T: Use for discrete option selection (use Select or Listbox).
|
|
62
|
+
*
|
|
63
|
+
* @accessibility
|
|
64
|
+
* - Renders a native `<input type="range">` element; ensure a descriptive label is provided via the `label` prop.
|
|
65
|
+
*
|
|
66
|
+
* @alternative
|
|
67
|
+
* - If you need a text-only numeric input, use `TextField` with `type="number"`.
|
|
68
|
+
*
|
|
69
|
+
* @param {Object} props - Component props.
|
|
70
|
+
* @param {string} [props.id] - The ID for the range input element.
|
|
71
|
+
* @param {string} [props.label] - Label displayed above the slider.
|
|
72
|
+
* @param {boolean} [props.labelHidden] - Whether the label is visually hidden.
|
|
73
|
+
* @param {string} [props.labelVariant] - Typography variant for the label.
|
|
74
|
+
* @param {string} [props.tooltip] - Tooltip content for the label.
|
|
75
|
+
* @param {boolean} [props.disabled] - Whether the slider is disabled.
|
|
76
|
+
* @param {number} [props.step=1] - Step increment for the slider.
|
|
77
|
+
* @param {React.ReactNode} [props.prefix] - Content displayed before the slider.
|
|
78
|
+
* @param {string} [props.prefixClasses=""] - Additional CSS classes for the prefix.
|
|
79
|
+
* @param {React.ReactNode} [props.suffix] - Content displayed in the output text field suffix.
|
|
80
|
+
* @param {number} [props.value] - The current value of the slider.
|
|
81
|
+
* @param {number} [props.min=0] - Minimum value of the slider.
|
|
82
|
+
* @param {number} [props.max=100] - Maximum value of the slider.
|
|
83
|
+
* @param {boolean} [props.output=true] - Whether to show the numeric output text field.
|
|
84
|
+
* @param {Function} [props.onChange] - Callback fired when the value changes.
|
|
85
|
+
* @returns {JSX.Element} The rendered RangeSlider component.
|
|
86
|
+
*/ var rangeStyles = tv({
|
|
55
87
|
base: "Litho-RangeSlider__ActiveRange absolute left-0 top-1/2 -translate-y-1/2 rounded-l-full h-1 pointer-events-none",
|
|
56
88
|
variants: {
|
|
57
89
|
disabled: {
|
|
@@ -87,31 +119,7 @@ function useSyncedState(externalValue) {
|
|
|
87
119
|
setValue
|
|
88
120
|
];
|
|
89
121
|
}
|
|
90
|
-
|
|
91
|
-
* RangeSlider Component
|
|
92
|
-
*
|
|
93
|
-
* A range slider component that allows users to select a numeric value within a defined range.
|
|
94
|
-
*
|
|
95
|
-
* @component
|
|
96
|
-
* @param {Object} props - The properties for the RangeSlider component.
|
|
97
|
-
* @param {string} [props.id] - The unique ID for the slider. If not provided, a UUID will be generated.
|
|
98
|
-
* @param {string} [props.label] - The label text displayed for the slider.
|
|
99
|
-
* @param {boolean} [props.labelHidden=false] - If true, hides the label visually but keeps it accessible for screen readers.
|
|
100
|
-
* @param {string} [props.labelVariant] - Variant of the label style.
|
|
101
|
-
* @param {string} [props.tooltip] - Tooltip text for the label.
|
|
102
|
-
* @param {boolean} [props.disabled=false] - Disables the slider if true.
|
|
103
|
-
* @param {number} [props.step=1] - Step value for the slider increments.
|
|
104
|
-
* @param {string} [props.prefix] - Text to display before the slider input.
|
|
105
|
-
* @param {string} [props.prefixClasses=""] - Additional classes for the prefix text.
|
|
106
|
-
* @param {string} [props.suffix] - Text to display after the slider value input.
|
|
107
|
-
* @param {number} [props.value] - Initial value for the slider. Defaults to the minimum value.
|
|
108
|
-
* @param {number} [props.min=0] - Minimum value of the slider.
|
|
109
|
-
* @param {number} [props.max=100] - Maximum value of the slider.
|
|
110
|
-
* @param {boolean} [props.output=true] - Whether to display an output field for the slider value.
|
|
111
|
-
* @param {function} [props.onChange] - Callback function triggered when the slider value changes.
|
|
112
|
-
*
|
|
113
|
-
* @returns {JSX.Element} The rendered RangeSlider component.
|
|
114
|
-
*/ function RangeSlider() {
|
|
122
|
+
function RangeSlider() {
|
|
115
123
|
var props = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {};
|
|
116
124
|
var _id = props.id, label = props.label, labelHidden = props.labelHidden, labelVariant = props.labelVariant, tooltip = props.tooltip, disabled = props.disabled, _props_step = props.step, step = _props_step === void 0 ? 1 : _props_step, prefix = props.prefix, _props_prefixClasses = props.prefixClasses, prefixClasses = _props_prefixClasses === void 0 ? "" : _props_prefixClasses, suffix = props.suffix, initialValue = props.value, _props_min = props.min, min = _props_min === void 0 ? 0 : _props_min, _props_max = props.max, max = _props_max === void 0 ? 100 : _props_max, _props_output = props.output, output = _props_output === void 0 ? true : _props_output, onChange = props.onChange;
|
|
117
125
|
var idValue = useId();
|