@hewnui/ui 0.0.0-stage → 0.1.0
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/LICENSE +21 -0
- package/README.md +69 -2
- package/dist/chart/axes.d.ts +31 -0
- package/dist/chart/axes.js +20 -0
- package/dist/chart/colors.d.ts +1 -0
- package/dist/chart/colors.js +13 -0
- package/dist/chart/frame.d.ts +13 -0
- package/dist/chart/frame.js +17 -0
- package/dist/chart/interaction.d.ts +22 -0
- package/dist/chart/interaction.js +22 -0
- package/dist/chart/path.d.ts +10 -0
- package/dist/chart/path.js +24 -0
- package/dist/chart/scales.d.ts +34 -0
- package/dist/chart/scales.js +66 -0
- package/dist/chart/status.d.ts +3 -0
- package/dist/chart/status.js +15 -0
- package/dist/chart/types.d.ts +34 -0
- package/dist/chart/types.js +6 -0
- package/dist/components/area-chart/area-chart.d.ts +17 -0
- package/dist/components/area-chart/area-chart.js +54 -0
- package/dist/components/area-chart/index.d.ts +1 -0
- package/dist/components/area-chart/index.js +1 -0
- package/dist/components/badge/badge.d.ts +2 -0
- package/dist/components/badge/badge.js +5 -0
- package/dist/components/badge/badge.styles.d.ts +8 -0
- package/dist/components/badge/badge.styles.js +57 -0
- package/dist/components/badge/badge.types.d.ts +11 -0
- package/dist/components/badge/badge.types.js +1 -0
- package/dist/components/badge/index.d.ts +3 -0
- package/dist/components/badge/index.js +2 -0
- package/dist/components/bar-chart/bar-chart.d.ts +17 -0
- package/dist/components/bar-chart/bar-chart.js +73 -0
- package/dist/components/bar-chart/index.d.ts +1 -0
- package/dist/components/bar-chart/index.js +1 -0
- package/dist/components/breadcrumbs/breadcrumbs.d.ts +3 -0
- package/dist/components/breadcrumbs/breadcrumbs.js +13 -0
- package/dist/components/breadcrumbs/breadcrumbs.styles.d.ts +5 -0
- package/dist/components/breadcrumbs/breadcrumbs.styles.js +10 -0
- package/dist/components/breadcrumbs/breadcrumbs.types.d.ts +16 -0
- package/dist/components/breadcrumbs/breadcrumbs.types.js +1 -0
- package/dist/components/breadcrumbs/index.d.ts +2 -0
- package/dist/components/breadcrumbs/index.js +1 -0
- package/dist/components/button/button.d.ts +2 -0
- package/dist/components/button/button.js +18 -0
- package/dist/components/button/button.motion.d.ts +23 -0
- package/dist/components/button/button.motion.js +11 -0
- package/dist/components/button/button.styles.d.ts +10 -0
- package/dist/components/button/button.styles.js +24 -0
- package/dist/components/button/button.types.d.ts +11 -0
- package/dist/components/button/button.types.js +1 -0
- package/dist/components/button/index.d.ts +2 -0
- package/dist/components/button/index.js +1 -0
- package/dist/components/card/card.d.ts +21 -0
- package/dist/components/card/card.js +19 -0
- package/dist/components/card/card.styles.d.ts +4 -0
- package/dist/components/card/card.styles.js +13 -0
- package/dist/components/card/card.types.d.ts +4 -0
- package/dist/components/card/card.types.js +1 -0
- package/dist/components/card/index.d.ts +2 -0
- package/dist/components/card/index.js +1 -0
- package/dist/components/checkbox/checkbox.d.ts +2 -0
- package/dist/components/checkbox/checkbox.js +17 -0
- package/dist/components/checkbox/checkbox.styles.d.ts +3 -0
- package/dist/components/checkbox/checkbox.styles.js +6 -0
- package/dist/components/checkbox/checkbox.types.d.ts +6 -0
- package/dist/components/checkbox/checkbox.types.js +1 -0
- package/dist/components/checkbox/index.d.ts +2 -0
- package/dist/components/checkbox/index.js +1 -0
- package/dist/components/checkbox-group/checkbox-group.d.ts +2 -0
- package/dist/components/checkbox-group/checkbox-group.js +8 -0
- package/dist/components/checkbox-group/checkbox-group.styles.d.ts +2 -0
- package/dist/components/checkbox-group/checkbox-group.styles.js +5 -0
- package/dist/components/checkbox-group/checkbox-group.types.d.ts +9 -0
- package/dist/components/checkbox-group/checkbox-group.types.js +1 -0
- package/dist/components/checkbox-group/index.d.ts +2 -0
- package/dist/components/checkbox-group/index.js +1 -0
- package/dist/components/color-picker/color-picker.d.ts +2 -0
- package/dist/components/color-picker/color-picker.js +27 -0
- package/dist/components/color-picker/color-picker.oklch.d.ts +2 -0
- package/dist/components/color-picker/color-picker.oklch.js +54 -0
- package/dist/components/color-picker/color-picker.panel.d.ts +2 -0
- package/dist/components/color-picker/color-picker.panel.js +15 -0
- package/dist/components/color-picker/color-picker.styles.d.ts +16 -0
- package/dist/components/color-picker/color-picker.styles.js +28 -0
- package/dist/components/color-picker/color-picker.types.d.ts +36 -0
- package/dist/components/color-picker/color-picker.types.js +1 -0
- package/dist/components/color-picker/index.d.ts +4 -0
- package/dist/components/color-picker/index.js +3 -0
- package/dist/components/combobox/combobox.d.ts +15 -0
- package/dist/components/combobox/combobox.js +11 -0
- package/dist/components/combobox/index.d.ts +1 -0
- package/dist/components/combobox/index.js +1 -0
- package/dist/components/command-palette/command-palette-items.d.ts +4 -0
- package/dist/components/command-palette/command-palette-items.js +14 -0
- package/dist/components/command-palette/command-palette.d.ts +15 -0
- package/dist/components/command-palette/command-palette.hotkey.d.ts +8 -0
- package/dist/components/command-palette/command-palette.hotkey.js +51 -0
- package/dist/components/command-palette/command-palette.js +33 -0
- package/dist/components/command-palette/command-palette.styles.d.ts +13 -0
- package/dist/components/command-palette/command-palette.styles.js +25 -0
- package/dist/components/command-palette/command-palette.types.d.ts +65 -0
- package/dist/components/command-palette/command-palette.types.js +1 -0
- package/dist/components/command-palette/index.d.ts +14 -0
- package/dist/components/command-palette/index.js +13 -0
- package/dist/components/data-table/data-table.d.ts +7 -0
- package/dist/components/data-table/data-table.js +31 -0
- package/dist/components/data-table/index.d.ts +1 -0
- package/dist/components/data-table/index.js +1 -0
- package/dist/components/date-picker/date-picker.d.ts +7 -0
- package/dist/components/date-picker/date-picker.js +8 -0
- package/dist/components/date-picker/index.d.ts +1 -0
- package/dist/components/date-picker/index.js +1 -0
- package/dist/components/date-range-picker/date-range-picker.calendar.d.ts +5 -0
- package/dist/components/date-range-picker/date-range-picker.calendar.js +21 -0
- package/dist/components/date-range-picker/date-range-picker.d.ts +2 -0
- package/dist/components/date-range-picker/date-range-picker.js +9 -0
- package/dist/components/date-range-picker/date-range-picker.presets.d.ts +3 -0
- package/dist/components/date-range-picker/date-range-picker.presets.js +53 -0
- package/dist/components/date-range-picker/date-range-picker.styles.d.ts +11 -0
- package/dist/components/date-range-picker/date-range-picker.styles.js +14 -0
- package/dist/components/date-range-picker/date-range-picker.types.d.ts +28 -0
- package/dist/components/date-range-picker/date-range-picker.types.js +1 -0
- package/dist/components/date-range-picker/index.d.ts +2 -0
- package/dist/components/date-range-picker/index.js +1 -0
- package/dist/components/dialog/dialog.d.ts +18 -0
- package/dist/components/dialog/dialog.js +16 -0
- package/dist/components/dialog/dialog.styles.d.ts +6 -0
- package/dist/components/dialog/dialog.styles.js +9 -0
- package/dist/components/dialog/index.d.ts +7 -0
- package/dist/components/dialog/index.js +7 -0
- package/dist/components/donut-chart/donut-chart.d.ts +17 -0
- package/dist/components/donut-chart/donut-chart.js +65 -0
- package/dist/components/donut-chart/index.d.ts +1 -0
- package/dist/components/donut-chart/index.js +1 -0
- package/dist/components/drawer/drawer.d.ts +13 -0
- package/dist/components/drawer/drawer.js +14 -0
- package/dist/components/drawer/index.d.ts +1 -0
- package/dist/components/drawer/index.js +1 -0
- package/dist/components/empty/empty.d.ts +7 -0
- package/dist/components/empty/empty.js +5 -0
- package/dist/components/empty/index.d.ts +1 -0
- package/dist/components/empty/index.js +1 -0
- package/dist/components/file-upload/file-upload.d.ts +2 -0
- package/dist/components/file-upload/file-upload.js +44 -0
- package/dist/components/file-upload/file-upload.styles.d.ts +12 -0
- package/dist/components/file-upload/file-upload.styles.js +14 -0
- package/dist/components/file-upload/file-upload.types.d.ts +16 -0
- package/dist/components/file-upload/file-upload.types.js +1 -0
- package/dist/components/file-upload/index.d.ts +2 -0
- package/dist/components/file-upload/index.js +1 -0
- package/dist/components/form/form.d.ts +2 -0
- package/dist/components/form/form.js +7 -0
- package/dist/components/form/form.styles.d.ts +1 -0
- package/dist/components/form/form.styles.js +4 -0
- package/dist/components/form/form.types.d.ts +6 -0
- package/dist/components/form/form.types.js +1 -0
- package/dist/components/form/index.d.ts +2 -0
- package/dist/components/form/index.js +1 -0
- package/dist/components/input-group/index.d.ts +2 -0
- package/dist/components/input-group/index.js +1 -0
- package/dist/components/input-group/input-group.d.ts +14 -0
- package/dist/components/input-group/input-group.js +24 -0
- package/dist/components/input-group/input-group.styles.d.ts +8 -0
- package/dist/components/input-group/input-group.styles.js +9 -0
- package/dist/components/input-group/input-group.types.d.ts +22 -0
- package/dist/components/input-group/input-group.types.js +1 -0
- package/dist/components/input-otp/index.d.ts +2 -0
- package/dist/components/input-otp/index.js +1 -0
- package/dist/components/input-otp/input-otp.d.ts +2 -0
- package/dist/components/input-otp/input-otp.js +76 -0
- package/dist/components/input-otp/input-otp.styles.d.ts +8 -0
- package/dist/components/input-otp/input-otp.styles.js +11 -0
- package/dist/components/input-otp/input-otp.types.d.ts +23 -0
- package/dist/components/input-otp/input-otp.types.js +1 -0
- package/dist/components/line-chart/index.d.ts +1 -0
- package/dist/components/line-chart/index.js +1 -0
- package/dist/components/line-chart/line-chart.d.ts +17 -0
- package/dist/components/line-chart/line-chart.js +53 -0
- package/dist/components/link/index.d.ts +2 -0
- package/dist/components/link/index.js +1 -0
- package/dist/components/link/link.d.ts +2 -0
- package/dist/components/link/link.js +7 -0
- package/dist/components/link/link.styles.d.ts +5 -0
- package/dist/components/link/link.styles.js +9 -0
- package/dist/components/link/link.types.d.ts +8 -0
- package/dist/components/link/link.types.js +1 -0
- package/dist/components/menu/index.d.ts +8 -0
- package/dist/components/menu/index.js +8 -0
- package/dist/components/menu/menu.d.ts +20 -0
- package/dist/components/menu/menu.js +26 -0
- package/dist/components/number-field/index.d.ts +2 -0
- package/dist/components/number-field/index.js +1 -0
- package/dist/components/number-field/number-field.d.ts +2 -0
- package/dist/components/number-field/number-field.js +14 -0
- package/dist/components/number-field/number-field.styles.d.ts +8 -0
- package/dist/components/number-field/number-field.styles.js +7 -0
- package/dist/components/number-field/number-field.types.d.ts +14 -0
- package/dist/components/number-field/number-field.types.js +1 -0
- package/dist/components/pagination/index.d.ts +3 -0
- package/dist/components/pagination/index.js +2 -0
- package/dist/components/pagination/pagination.d.ts +2 -0
- package/dist/components/pagination/pagination.js +49 -0
- package/dist/components/pagination/pagination.styles.d.ts +8 -0
- package/dist/components/pagination/pagination.styles.js +19 -0
- package/dist/components/pagination/pagination.types.d.ts +35 -0
- package/dist/components/pagination/pagination.types.js +1 -0
- package/dist/components/pagination/pagination.utils.d.ts +6 -0
- package/dist/components/pagination/pagination.utils.js +51 -0
- package/dist/components/password-field/index.d.ts +2 -0
- package/dist/components/password-field/index.js +1 -0
- package/dist/components/password-field/password-field.d.ts +2 -0
- package/dist/components/password-field/password-field.js +17 -0
- package/dist/components/password-field/password-field.styles.d.ts +8 -0
- package/dist/components/password-field/password-field.styles.js +7 -0
- package/dist/components/password-field/password-field.types.d.ts +16 -0
- package/dist/components/password-field/password-field.types.js +1 -0
- package/dist/components/popover/index.d.ts +2 -0
- package/dist/components/popover/index.js +1 -0
- package/dist/components/popover/popover.d.ts +10 -0
- package/dist/components/popover/popover.js +16 -0
- package/dist/components/popover/popover.styles.d.ts +3 -0
- package/dist/components/popover/popover.styles.js +7 -0
- package/dist/components/popover/popover.types.d.ts +14 -0
- package/dist/components/popover/popover.types.js +1 -0
- package/dist/components/progress/index.d.ts +2 -0
- package/dist/components/progress/index.js +1 -0
- package/dist/components/progress/progress.d.ts +12 -0
- package/dist/components/progress/progress.js +26 -0
- package/dist/components/radio-group/index.d.ts +2 -0
- package/dist/components/radio-group/index.js +1 -0
- package/dist/components/radio-group/radio-group.d.ts +3 -0
- package/dist/components/radio-group/radio-group.js +21 -0
- package/dist/components/radio-group/radio-group.styles.d.ts +5 -0
- package/dist/components/radio-group/radio-group.styles.js +14 -0
- package/dist/components/radio-group/radio-group.types.d.ts +14 -0
- package/dist/components/radio-group/radio-group.types.js +1 -0
- package/dist/components/search-field/index.d.ts +2 -0
- package/dist/components/search-field/index.js +1 -0
- package/dist/components/search-field/search-field.d.ts +2 -0
- package/dist/components/search-field/search-field.js +15 -0
- package/dist/components/search-field/search-field.styles.d.ts +8 -0
- package/dist/components/search-field/search-field.styles.js +7 -0
- package/dist/components/search-field/search-field.types.d.ts +15 -0
- package/dist/components/search-field/search-field.types.js +1 -0
- package/dist/components/select/index.d.ts +5 -0
- package/dist/components/select/index.js +5 -0
- package/dist/components/select/select.d.ts +16 -0
- package/dist/components/select/select.js +11 -0
- package/dist/components/select/select.styles.d.ts +5 -0
- package/dist/components/select/select.styles.js +13 -0
- package/dist/components/skeleton/index.d.ts +1 -0
- package/dist/components/skeleton/index.js +1 -0
- package/dist/components/skeleton/skeleton.d.ts +3 -0
- package/dist/components/skeleton/skeleton.js +5 -0
- package/dist/components/slider/index.d.ts +2 -0
- package/dist/components/slider/index.js +1 -0
- package/dist/components/slider/slider.d.ts +2 -0
- package/dist/components/slider/slider.js +8 -0
- package/dist/components/slider/slider.styles.d.ts +6 -0
- package/dist/components/slider/slider.styles.js +9 -0
- package/dist/components/slider/slider.types.d.ts +8 -0
- package/dist/components/slider/slider.types.js +1 -0
- package/dist/components/sparkline/index.d.ts +1 -0
- package/dist/components/sparkline/index.js +1 -0
- package/dist/components/sparkline/sparkline.d.ts +11 -0
- package/dist/components/sparkline/sparkline.js +34 -0
- package/dist/components/spinner/index.d.ts +1 -0
- package/dist/components/spinner/index.js +1 -0
- package/dist/components/spinner/spinner.d.ts +4 -0
- package/dist/components/spinner/spinner.js +6 -0
- package/dist/components/stepper/index.d.ts +3 -0
- package/dist/components/stepper/index.js +2 -0
- package/dist/components/stepper/stepper-step.d.ts +15 -0
- package/dist/components/stepper/stepper-step.js +46 -0
- package/dist/components/stepper/stepper.d.ts +4 -0
- package/dist/components/stepper/stepper.js +17 -0
- package/dist/components/stepper/stepper.styles.d.ts +10 -0
- package/dist/components/stepper/stepper.styles.js +37 -0
- package/dist/components/stepper/stepper.types.d.ts +50 -0
- package/dist/components/stepper/stepper.types.js +1 -0
- package/dist/components/stepper/use-stepper.d.ts +6 -0
- package/dist/components/stepper/use-stepper.js +40 -0
- package/dist/components/switch/index.d.ts +2 -0
- package/dist/components/switch/index.js +1 -0
- package/dist/components/switch/switch.d.ts +2 -0
- package/dist/components/switch/switch.js +7 -0
- package/dist/components/switch/switch.styles.d.ts +3 -0
- package/dist/components/switch/switch.styles.js +6 -0
- package/dist/components/switch/switch.types.d.ts +6 -0
- package/dist/components/switch/switch.types.js +1 -0
- package/dist/components/table/index.d.ts +11 -0
- package/dist/components/table/index.js +11 -0
- package/dist/components/table/table-sort-glyph.d.ts +3 -0
- package/dist/components/table/table-sort-glyph.js +5 -0
- package/dist/components/table/table.d.ts +33 -0
- package/dist/components/table/table.js +31 -0
- package/dist/components/table/table.styles.d.ts +8 -0
- package/dist/components/table/table.styles.js +19 -0
- package/dist/components/tabs/index.d.ts +7 -0
- package/dist/components/tabs/index.js +7 -0
- package/dist/components/tabs/tabs.d.ts +20 -0
- package/dist/components/tabs/tabs.js +29 -0
- package/dist/components/tabs/tabs.styles.d.ts +5 -0
- package/dist/components/tabs/tabs.styles.js +30 -0
- package/dist/components/tag-field/index.d.ts +2 -0
- package/dist/components/tag-field/index.js +1 -0
- package/dist/components/tag-field/tag-field-icons.d.ts +2 -0
- package/dist/components/tag-field/tag-field-icons.js +7 -0
- package/dist/components/tag-field/tag-field-tags.d.ts +7 -0
- package/dist/components/tag-field/tag-field-tags.js +19 -0
- package/dist/components/tag-field/tag-field.d.ts +6 -0
- package/dist/components/tag-field/tag-field.js +46 -0
- package/dist/components/tag-field/tag-field.styles.d.ts +14 -0
- package/dist/components/tag-field/tag-field.styles.js +42 -0
- package/dist/components/tag-field/tag-field.types.d.ts +32 -0
- package/dist/components/tag-field/tag-field.types.js +1 -0
- package/dist/components/text-area/index.d.ts +2 -0
- package/dist/components/text-area/index.js +1 -0
- package/dist/components/text-area/text-area.d.ts +2 -0
- package/dist/components/text-area/text-area.js +9 -0
- package/dist/components/text-area/text-area.styles.d.ts +6 -0
- package/dist/components/text-area/text-area.styles.js +5 -0
- package/dist/components/text-area/text-area.types.d.ts +16 -0
- package/dist/components/text-area/text-area.types.js +1 -0
- package/dist/components/text-field/index.d.ts +2 -0
- package/dist/components/text-field/index.js +1 -0
- package/dist/components/text-field/text-field.d.ts +2 -0
- package/dist/components/text-field/text-field.js +8 -0
- package/dist/components/text-field/text-field.styles.d.ts +1 -0
- package/dist/components/text-field/text-field.styles.js +1 -0
- package/dist/components/text-field/text-field.types.d.ts +15 -0
- package/dist/components/text-field/text-field.types.js +1 -0
- package/dist/components/toast/index.d.ts +2 -0
- package/dist/components/toast/index.js +1 -0
- package/dist/components/toast/toast-glyph.d.ts +4 -0
- package/dist/components/toast/toast-glyph.js +23 -0
- package/dist/components/toast/toast-item.d.ts +14 -0
- package/dist/components/toast/toast-item.js +21 -0
- package/dist/components/toast/toast.d.ts +16 -0
- package/dist/components/toast/toast.js +50 -0
- package/dist/components/toast/toast.styles.d.ts +13 -0
- package/dist/components/toast/toast.styles.js +50 -0
- package/dist/components/tooltip/index.d.ts +2 -0
- package/dist/components/tooltip/index.js +1 -0
- package/dist/components/tooltip/tooltip.d.ts +3 -0
- package/dist/components/tooltip/tooltip.js +10 -0
- package/dist/components/tooltip/tooltip.styles.d.ts +1 -0
- package/dist/components/tooltip/tooltip.styles.js +6 -0
- package/dist/components/tooltip/tooltip.types.d.ts +18 -0
- package/dist/components/tooltip/tooltip.types.js +1 -0
- package/dist/index.d.ts +54 -0
- package/dist/index.js +51 -0
- package/dist/providers/material-provider.d.ts +12 -0
- package/dist/providers/material-provider.js +30 -0
- package/dist/providers/motion-provider.d.ts +20 -0
- package/dist/providers/motion-provider.js +45 -0
- package/dist/providers/radius-provider.d.ts +13 -0
- package/dist/providers/radius-provider.js +73 -0
- package/dist/providers/theme-provider.d.ts +25 -0
- package/dist/providers/theme-provider.js +66 -0
- package/dist/styles/field.d.ts +24 -0
- package/dist/styles/field.js +36 -0
- package/dist/styles/overlays.d.ts +3 -0
- package/dist/styles/overlays.js +4 -0
- package/dist/utils/cn.d.ts +1 -0
- package/dist/utils/cn.js +3 -0
- package/package.json +468 -4
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { cn } from "../../utils/cn";
|
|
2
|
+
import { popoverSurfaceClass } from "../../styles/overlays";
|
|
3
|
+
export function popoverClassName(className) {
|
|
4
|
+
return cn(popoverSurfaceClass, "min-w-56 p-3", className);
|
|
5
|
+
}
|
|
6
|
+
export const popoverTitleClass = "text-sm font-medium text-foreground";
|
|
7
|
+
export const popoverBodyClass = "mt-1.5 text-sm text-muted-foreground";
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { ReactNode } from "react";
|
|
2
|
+
import type { OverlayPlacement } from "../tooltip/tooltip.types";
|
|
3
|
+
export type PopoverProps = {
|
|
4
|
+
children: ReactNode;
|
|
5
|
+
className?: string;
|
|
6
|
+
placement?: OverlayPlacement;
|
|
7
|
+
offset?: number;
|
|
8
|
+
};
|
|
9
|
+
export type PopoverTriggerProps = {
|
|
10
|
+
children: ReactNode;
|
|
11
|
+
isOpen?: boolean;
|
|
12
|
+
defaultOpen?: boolean;
|
|
13
|
+
onOpenChange?: (isOpen: boolean) => void;
|
|
14
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { Progress } from "./progress";
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export type ProgressVariant = "default" | "gradient" | "glass" | "success" | "danger";
|
|
2
|
+
export type ProgressSize = "sm" | "md" | "lg";
|
|
3
|
+
export declare function Progress({ className, label, value, minValue, maxValue, isIndeterminate, size, variant, }: {
|
|
4
|
+
className?: string | undefined;
|
|
5
|
+
label?: string;
|
|
6
|
+
value?: number;
|
|
7
|
+
minValue?: number;
|
|
8
|
+
maxValue?: number;
|
|
9
|
+
isIndeterminate?: boolean;
|
|
10
|
+
size?: ProgressSize;
|
|
11
|
+
variant?: ProgressVariant;
|
|
12
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
3
|
+
import { ProgressBar as AriaProgressBar, Label } from "react-aria-components";
|
|
4
|
+
import { cn } from "../../utils/cn";
|
|
5
|
+
const trackSizes = {
|
|
6
|
+
sm: "h-1.5",
|
|
7
|
+
md: "h-2.5",
|
|
8
|
+
lg: "h-4",
|
|
9
|
+
};
|
|
10
|
+
const fillVariants = {
|
|
11
|
+
default: "bg-accent shadow-[inset_0_1px_0_oklch(1_0_0/30%)]",
|
|
12
|
+
gradient: "bg-gradient-to-r from-accent to-[color-mix(in_oklch,var(--kp-accent)_75%,white)] shadow-[inset_0_1px_0_oklch(1_0_0/40%)]",
|
|
13
|
+
glass: "bg-accent backdrop-blur-sm shadow-[inset_0_1px_0_oklch(1_0_0/40%)]",
|
|
14
|
+
success: "bg-success shadow-[inset_0_1px_0_oklch(1_0_0/30%)]",
|
|
15
|
+
danger: "bg-danger shadow-[inset_0_1px_0_oklch(1_0_0/30%)]",
|
|
16
|
+
};
|
|
17
|
+
export function Progress({ className, label, value = 0, minValue = 0, maxValue = 100, isIndeterminate, size = "md", variant = "default", }) {
|
|
18
|
+
return (_jsx(AriaProgressBar, { className: cn("flex w-full max-w-sm flex-col gap-2 text-sm", className), value: value, minValue: minValue, maxValue: maxValue, ...(isIndeterminate !== undefined ? { isIndeterminate } : {}), children: ({ percentage = 0 }) => (_jsxs(_Fragment, { children: [_jsxs("div", { className: "flex items-center justify-between gap-3", children: [label ? _jsx(Label, { className: "font-medium", children: label }) : null, !isIndeterminate ? (_jsxs("span", { className: "font-mono text-xs tabular-nums text-muted-foreground", children: [Math.round(percentage), "%"] })) : (_jsx("span", { className: "font-mono text-xs text-muted-foreground", children: "\u2026" }))] }), _jsx("div", { "data-kp-control": "progress-track", className: cn("relative overflow-hidden rounded-full border border-[color-mix(in_oklch,var(--kp-foreground)_12%,transparent)]", variant === "glass"
|
|
19
|
+
? "bg-[color-mix(in_oklch,var(--kp-surface)_45%,transparent)] backdrop-blur-md backdrop-saturate-150"
|
|
20
|
+
: "bg-[color-mix(in_oklch,var(--kp-muted)_75%,transparent)] shadow-[inset_0_1px_1px_oklch(0_0_0/12%)]", trackSizes[size]), children: _jsx("div", { className: cn("h-full w-full origin-left rounded-full transition-transform duration-[var(--kp-motion-duration)] ease-[var(--kp-motion-ease-standard)]", fillVariants[variant], isIndeterminate &&
|
|
21
|
+
"absolute inset-y-0 !w-1/3 kp-progress-indeterminate motion-reduce:animate-pulse"), style: isIndeterminate
|
|
22
|
+
? undefined
|
|
23
|
+
: {
|
|
24
|
+
transform: `scaleX(${Math.max(0, Math.min(1, percentage / 100))})`,
|
|
25
|
+
} }) })] })) }));
|
|
26
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { Radio, RadioGroup } from "./radio-group";
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import type { RadioGroupProps, RadioProps } from "./radio-group.types";
|
|
2
|
+
export declare function RadioGroup({ children, className, description, errorMessage, label, orientation, ...props }: RadioGroupProps): import("react/jsx-runtime").JSX.Element;
|
|
3
|
+
export declare function Radio({ children, className, ...props }: RadioProps): import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
3
|
+
import { AnimatePresence, m } from "motion/react";
|
|
4
|
+
import { FieldError, Label, Radio as AriaRadio, RadioGroup as AriaRadioGroup, Text, } from "react-aria-components";
|
|
5
|
+
import { iconPop, iconState } from "@hewnui/motion";
|
|
6
|
+
import { useMotionMode } from "../../providers/motion-provider";
|
|
7
|
+
import { fieldDescriptionClass, fieldErrorClass, fieldLabelClass, } from "../../styles/field";
|
|
8
|
+
import { radioClassName, radioControlClass, radioDotClass, radioGroupClassName, radioGroupItemsClass, } from "./radio-group.styles";
|
|
9
|
+
function RadioDot({ animate }) {
|
|
10
|
+
if (!animate) {
|
|
11
|
+
return _jsx("span", { className: radioDotClass });
|
|
12
|
+
}
|
|
13
|
+
return (_jsx(m.span, { className: radioDotClass, variants: iconState, initial: "hidden", animate: "visible", exit: "hidden", transition: iconPop }));
|
|
14
|
+
}
|
|
15
|
+
export function RadioGroup({ children, className, description, errorMessage, label, orientation = "vertical", ...props }) {
|
|
16
|
+
return (_jsxs(AriaRadioGroup, { ...props, orientation: orientation, className: radioGroupClassName(className), children: [label ? _jsx(Label, { className: fieldLabelClass, children: label }) : null, description ? (_jsx(Text, { slot: "description", className: fieldDescriptionClass, children: description })) : null, _jsx("div", { className: radioGroupItemsClass(orientation), children: children }), _jsx(FieldError, { className: fieldErrorClass, children: errorMessage })] }));
|
|
17
|
+
}
|
|
18
|
+
export function Radio({ children, className, ...props }) {
|
|
19
|
+
const { motionEnabled } = useMotionMode();
|
|
20
|
+
return (_jsx(AriaRadio, { ...props, className: radioClassName(className), children: ({ isSelected }) => (_jsxs(_Fragment, { children: [_jsx("span", { className: radioControlClass, "data-kp-control": "radio", children: _jsx(AnimatePresence, { initial: false, children: isSelected ? (_jsx(RadioDot, { animate: motionEnabled }, "dot")) : null }) }), children ? _jsx("span", { children: children }) : null] })) }));
|
|
21
|
+
}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export declare function radioGroupClassName(className?: string | undefined): string;
|
|
2
|
+
export declare function radioGroupItemsClass(orientation?: "horizontal" | "vertical"): string;
|
|
3
|
+
export declare function radioClassName(className?: string | undefined): string;
|
|
4
|
+
export declare const radioControlClass: string;
|
|
5
|
+
export declare const radioDotClass: string;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { cn } from "../../utils/cn";
|
|
2
|
+
export function radioGroupClassName(className) {
|
|
3
|
+
return cn("flex w-full max-w-sm flex-col gap-2.5 text-sm text-foreground", className);
|
|
4
|
+
}
|
|
5
|
+
export function radioGroupItemsClass(orientation = "vertical") {
|
|
6
|
+
return cn("flex", orientation === "horizontal"
|
|
7
|
+
? "flex-row flex-wrap gap-x-1 gap-y-1"
|
|
8
|
+
: "flex-col gap-1");
|
|
9
|
+
}
|
|
10
|
+
export function radioClassName(className) {
|
|
11
|
+
return cn("group flex min-h-11 items-center gap-3 rounded-[var(--kp-radius-md)] px-2.5 py-1.5", "text-sm text-foreground outline-none", "transition-[background-color,transform,color]", "duration-[var(--kp-motion-duration)] ease-[var(--kp-motion-ease-standard)]", "hover:bg-[color-mix(in_oklch,var(--kp-muted)_52%,transparent)]", "data-[selected]:bg-[color-mix(in_oklch,var(--kp-accent)_10%,transparent)]", "data-[selected]:font-medium", "data-[focus-visible]:ring-2 data-[focus-visible]:ring-ring/45", "data-[focus-visible]:ring-offset-2 data-[focus-visible]:ring-offset-background", "data-[pressed]:scale-[0.98]", "disabled:cursor-not-allowed disabled:opacity-45", className);
|
|
12
|
+
}
|
|
13
|
+
export const radioControlClass = cn("relative flex size-5 shrink-0 items-center justify-center", "rounded-full border", "border-[color-mix(in_oklch,var(--kp-foreground)_36%,transparent)]", "bg-[color-mix(in_oklch,var(--kp-surface)_82%,var(--kp-foreground)_8%)]", "shadow-[inset_0_1px_0_oklch(1_0_0/45%),inset_0_0_0_1px_oklch(1_0_0/4%)]", "transition-[background-color,border-color,box-shadow,transform]", "duration-[var(--kp-motion-duration)] ease-[var(--kp-motion-ease-standard)]", "group-hover:border-[color-mix(in_oklch,var(--kp-foreground)_48%,transparent)]", "group-data-[selected]:border-accent group-data-[selected]:bg-accent", "group-data-[selected]:shadow-[inset_0_1px_0_oklch(1_0_0/38%)]", "group-data-[pressed]:scale-[0.96]");
|
|
14
|
+
export const radioDotClass = cn("size-2 rounded-full", "bg-[color-mix(in_oklch,var(--kp-accent-foreground)_94%,white)]", "shadow-[inset_0_1px_0_oklch(1_0_0/35%),0_1px_1px_oklch(0_0_0/18%)]");
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { RadioGroupProps as AriaRadioGroupProps, RadioProps as AriaRadioProps } from "react-aria-components";
|
|
2
|
+
import type { ReactNode } from "react";
|
|
3
|
+
export type RadioGroupProps = Omit<AriaRadioGroupProps, "className" | "children"> & {
|
|
4
|
+
children: ReactNode;
|
|
5
|
+
label?: ReactNode;
|
|
6
|
+
description?: ReactNode;
|
|
7
|
+
errorMessage?: ReactNode;
|
|
8
|
+
className?: string;
|
|
9
|
+
orientation?: "horizontal" | "vertical";
|
|
10
|
+
};
|
|
11
|
+
export type RadioProps = Omit<AriaRadioProps, "className" | "children"> & {
|
|
12
|
+
children?: ReactNode;
|
|
13
|
+
className?: string;
|
|
14
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { SearchField } from "./search-field";
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { Button, FieldError, Group, Input, Label, SearchField as AriaSearchField, Text, } from "react-aria-components";
|
|
4
|
+
import { cn } from "../../utils/cn";
|
|
5
|
+
import { fieldDescriptionClass, fieldErrorClass, fieldLabelClass, fieldRootClass, fieldSurfaceProps, } from "../../styles/field";
|
|
6
|
+
import { searchClearClass, searchGroupClassName, searchInputClass, } from "./search-field.styles";
|
|
7
|
+
function SearchIcon() {
|
|
8
|
+
return (_jsxs("svg", { viewBox: "0 0 16 16", className: "size-4 shrink-0 text-muted-foreground", "aria-hidden": true, children: [_jsx("circle", { cx: "7", cy: "7", r: "4.25", fill: "none", stroke: "currentColor", strokeWidth: "1.5" }), _jsx("path", { d: "M10.2 10.2 13.5 13.5", fill: "none", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round" })] }));
|
|
9
|
+
}
|
|
10
|
+
function ClearIcon() {
|
|
11
|
+
return (_jsx("svg", { viewBox: "0 0 12 12", className: "size-3.5", "aria-hidden": true, children: _jsx("path", { d: "M2.5 2.5 9.5 9.5M9.5 2.5 2.5 9.5", fill: "none", stroke: "currentColor", strokeWidth: "1.6", strokeLinecap: "round" }) }));
|
|
12
|
+
}
|
|
13
|
+
export function SearchField({ className, description, errorMessage, inputClassName: inputClass, label, placeholder = "Search", size = "md", variant = "outline", ...props }) {
|
|
14
|
+
return (_jsxs(AriaSearchField, { ...props, className: cn(fieldRootClass, className), children: [label ? _jsx(Label, { className: fieldLabelClass, children: label }) : null, _jsxs(Group, { ...fieldSurfaceProps(variant), className: searchGroupClassName({ size, variant }), children: [_jsx(SearchIcon, {}), _jsx(Input, { className: cn(searchInputClass, inputClass), ...(placeholder !== undefined ? { placeholder } : {}) }), _jsx(Button, { slot: "clear", className: searchClearClass, "aria-label": "Clear search", children: _jsx(ClearIcon, {}) })] }), description ? (_jsx(Text, { slot: "description", className: fieldDescriptionClass, children: description })) : null, _jsx(FieldError, { className: fieldErrorClass, children: errorMessage })] }));
|
|
15
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { type FieldSize, type FieldVariant } from "../../styles/field";
|
|
2
|
+
export declare function searchGroupClassName({ className, size, variant, }?: {
|
|
3
|
+
className?: string | undefined;
|
|
4
|
+
size?: FieldSize | undefined;
|
|
5
|
+
variant?: FieldVariant | undefined;
|
|
6
|
+
}): string;
|
|
7
|
+
export declare const searchInputClass = "min-w-0 flex-1 bg-transparent p-0 text-foreground outline-none placeholder:text-muted-foreground";
|
|
8
|
+
export declare const searchClearClass: string;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { cn } from "../../utils/cn";
|
|
2
|
+
import { inputSurfaceClassName, } from "../../styles/field";
|
|
3
|
+
export function searchGroupClassName({ className, size = "md", variant = "outline", } = {}) {
|
|
4
|
+
return cn(inputSurfaceClassName({ size, variant }), "flex items-center gap-1.5", className);
|
|
5
|
+
}
|
|
6
|
+
export const searchInputClass = "min-w-0 flex-1 bg-transparent p-0 text-foreground outline-none placeholder:text-muted-foreground";
|
|
7
|
+
export const searchClearClass = cn("inline-flex size-10 shrink-0 items-center justify-center rounded-[calc(var(--kp-radius-sm)-0.05rem)]", "text-muted-foreground outline-none", "transition-[background-color,color,transform,opacity]", "duration-[var(--kp-motion-duration)] ease-[var(--kp-motion-ease-standard)]", "hover:bg-muted/70 hover:text-foreground", "pressed:scale-[0.96] data-[pressed]:scale-[0.96]");
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { SearchFieldProps as AriaSearchFieldProps } from "react-aria-components";
|
|
2
|
+
import type { ReactNode } from "react";
|
|
3
|
+
import type { FieldSize, FieldVariant } from "../../styles/field";
|
|
4
|
+
export type SearchFieldVariant = FieldVariant;
|
|
5
|
+
export type SearchFieldSize = FieldSize;
|
|
6
|
+
export type SearchFieldProps = Omit<AriaSearchFieldProps, "className" | "children"> & {
|
|
7
|
+
label?: ReactNode;
|
|
8
|
+
description?: ReactNode;
|
|
9
|
+
errorMessage?: ReactNode;
|
|
10
|
+
placeholder?: string;
|
|
11
|
+
className?: string;
|
|
12
|
+
inputClassName?: string;
|
|
13
|
+
variant?: SearchFieldVariant;
|
|
14
|
+
size?: SearchFieldSize;
|
|
15
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { ReactNode } from "react";
|
|
2
|
+
import { type SelectProps as AriaSelectProps } from "react-aria-components";
|
|
3
|
+
import { type SelectVariant } from "./select.styles";
|
|
4
|
+
type SelectProps = Omit<AriaSelectProps<object>, "children" | "className"> & {
|
|
5
|
+
children: ReactNode;
|
|
6
|
+
className?: string | undefined;
|
|
7
|
+
label?: ReactNode;
|
|
8
|
+
variant?: SelectVariant;
|
|
9
|
+
};
|
|
10
|
+
export declare function Select({ children, className, label, placeholder, variant, ...props }: SelectProps): import("react/jsx-runtime").JSX.Element;
|
|
11
|
+
export declare function SelectItem({ children, id, textValue, }: {
|
|
12
|
+
children: ReactNode;
|
|
13
|
+
id: string;
|
|
14
|
+
textValue?: string;
|
|
15
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
16
|
+
export {};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { Button, Label, ListBox, ListBoxItem, Popover, Select as AriaSelect, SelectValue, } from "react-aria-components";
|
|
4
|
+
import { selectItemClass, selectPopoverClass, selectTriggerClass, selectValueClass, } from "./select.styles";
|
|
5
|
+
import { fieldSurfaceProps } from "../../styles/field";
|
|
6
|
+
export function Select({ children, className, label, placeholder = "Select an option", variant = "outline", ...props }) {
|
|
7
|
+
return (_jsxs(AriaSelect, { ...props, placeholder: placeholder, className: "flex w-full max-w-sm flex-col gap-1.5 text-sm", children: [label ? _jsx(Label, { className: "font-medium", children: label }) : null, _jsxs(Button, { className: selectTriggerClass(className, variant), ...fieldSurfaceProps(variant), children: [_jsx(SelectValue, { className: selectValueClass }), _jsx("span", { "aria-hidden": true, className: "text-muted-foreground", children: "\u25BE" })] }), _jsx(Popover, { className: selectPopoverClass, "data-kp-surface": true, children: _jsx(ListBox, { className: "outline-none", children: children }) })] }));
|
|
8
|
+
}
|
|
9
|
+
export function SelectItem({ children, id, textValue, }) {
|
|
10
|
+
return (_jsx(ListBoxItem, { id: id, className: selectItemClass, ...(textValue !== undefined ? { textValue } : {}), children: children }));
|
|
11
|
+
}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export type SelectVariant = "outline" | "filled" | "flushed" | "glass";
|
|
2
|
+
export declare function selectTriggerClass(className?: string, variant?: SelectVariant): string;
|
|
3
|
+
export declare const selectValueClass = "truncate text-foreground";
|
|
4
|
+
export declare const selectPopoverClass: string;
|
|
5
|
+
export declare const selectItemClass: string;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { cn } from "../../utils/cn";
|
|
2
|
+
const triggerVariants = {
|
|
3
|
+
outline: cn("rounded-[var(--kp-radius-md)] border px-3", "border-[color-mix(in_oklch,var(--kp-foreground)_16%,transparent)]", "bg-[color-mix(in_oklch,var(--kp-surface)_88%,var(--kp-foreground)_4%)]", "shadow-[var(--kp-shadow-surface),inset_0_1px_0_oklch(1_0_0/35%)]", "data-[focus-visible]:ring-2 data-[focus-visible]:ring-ring"),
|
|
4
|
+
filled: cn("rounded-[var(--kp-radius-md)] border border-transparent px-3", "bg-[color-mix(in_oklch,var(--kp-muted)_72%,transparent)]", "shadow-[inset_0_1px_0_oklch(1_0_0/18%)]", "hover:bg-[color-mix(in_oklch,var(--kp-muted)_88%,transparent)]", "data-[focus-visible]:border-ring data-[focus-visible]:ring-2 data-[focus-visible]:ring-ring/30"),
|
|
5
|
+
flushed: cn("rounded-none border-0 border-b-2 border-solid bg-transparent px-0", "border-b-[color-mix(in_oklch,var(--kp-foreground)_32%,transparent)]", "shadow-none", "data-[focus-visible]:border-b-ring data-[focus-visible]:ring-0", "data-[focus-visible]:shadow-[0_1px_0_0_color-mix(in_oklch,var(--kp-ring)_55%,transparent)]"),
|
|
6
|
+
glass: cn("rounded-[var(--kp-radius-md)] border px-3", "border-[color-mix(in_oklch,var(--kp-foreground)_14%,transparent)]", "bg-[color-mix(in_oklch,var(--kp-surface)_42%,transparent)]", "backdrop-blur-md backdrop-saturate-150", "shadow-[inset_0_1px_0_oklch(1_0_0/42%),inset_0_0_0_1px_oklch(1_0_0/8%),0_8px_24px_-14px_oklch(0_0_0/28%)]", "data-[focus-visible]:ring-2 data-[focus-visible]:ring-ring"),
|
|
7
|
+
};
|
|
8
|
+
export function selectTriggerClass(className, variant = "outline") {
|
|
9
|
+
return cn("inline-flex min-h-11 min-w-52 items-center justify-between gap-3 text-sm outline-none", "transition-[transform,background-color,border-color,box-shadow]", "duration-[var(--kp-motion-duration)] ease-[var(--kp-motion-ease-standard)]", "data-[pressed]:scale-[0.96] data-[disabled]:opacity-45", triggerVariants[variant], className);
|
|
10
|
+
}
|
|
11
|
+
export const selectValueClass = "truncate text-foreground";
|
|
12
|
+
export const selectPopoverClass = cn("min-w-[var(--trigger-width)] overflow-auto rounded-[var(--kp-radius-panel)]", "border bg-surface-raised p-1 shadow-[var(--kp-shadow-surface)] outline-none");
|
|
13
|
+
export const selectItemClass = cn("flex cursor-default items-center rounded-[var(--kp-radius-sm)]", "px-3 py-2 text-sm outline-none", "data-[focused]:bg-muted data-[selected]:font-medium");
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { Skeleton } from "./skeleton";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { Skeleton } from "./skeleton";
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { cn } from "../../utils/cn";
|
|
3
|
+
export function Skeleton({ className, }) {
|
|
4
|
+
return (_jsx("div", { "aria-hidden": true, "data-kp-control": "skeleton", className: cn("animate-pulse rounded-[var(--kp-radius-md)]", "bg-[color-mix(in_oklch,var(--kp-muted)_88%,var(--kp-foreground)_6%)]", "shadow-[inset_0_1px_0_oklch(1_0_0/35%)]", className ?? "h-4 w-full") }));
|
|
5
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { Slider } from "./slider";
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
3
|
+
import { Label, Slider as AriaSlider, SliderOutput, SliderThumb, SliderTrack, Text, } from "react-aria-components";
|
|
4
|
+
import { fieldDescriptionClass, fieldLabelClass, } from "../../styles/field";
|
|
5
|
+
import { sliderClassName, sliderFillClass, sliderHeaderClass, sliderOutputClass, sliderThumbClass, sliderTrackClass, } from "./slider.styles";
|
|
6
|
+
export function Slider({ className, description, label, showOutput = true, ...props }) {
|
|
7
|
+
return (_jsxs(AriaSlider, { ...props, className: sliderClassName(className), children: [_jsxs("div", { className: sliderHeaderClass, children: [label ? _jsx(Label, { className: fieldLabelClass, children: label }) : null, showOutput ? (_jsx(SliderOutput, { className: sliderOutputClass })) : null] }), _jsx(SliderTrack, { className: sliderTrackClass, children: ({ state }) => (_jsxs(_Fragment, { children: [_jsx("div", { className: sliderFillClass, style: { width: `${state.getThumbPercent(0) * 100}%` } }), _jsx(SliderThumb, { className: sliderThumbClass, index: 0 })] })) }), description ? (_jsx(Text, { slot: "description", className: fieldDescriptionClass, children: description })) : null] }));
|
|
8
|
+
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export declare function sliderClassName(className?: string | undefined): string;
|
|
2
|
+
export declare const sliderHeaderClass = "flex items-baseline justify-between gap-3";
|
|
3
|
+
export declare const sliderOutputClass = "font-mono text-xs tabular-nums text-muted-foreground";
|
|
4
|
+
export declare const sliderTrackClass: string;
|
|
5
|
+
export declare const sliderFillClass: string;
|
|
6
|
+
export declare const sliderThumbClass: string;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { cn } from "../../utils/cn";
|
|
2
|
+
export function sliderClassName(className) {
|
|
3
|
+
return cn("flex w-full max-w-sm flex-col gap-2 text-sm text-foreground", "disabled:cursor-not-allowed disabled:opacity-45", className);
|
|
4
|
+
}
|
|
5
|
+
export const sliderHeaderClass = "flex items-baseline justify-between gap-3";
|
|
6
|
+
export const sliderOutputClass = "font-mono text-xs tabular-nums text-muted-foreground";
|
|
7
|
+
export const sliderTrackClass = cn("relative h-10 w-full", "before:absolute before:top-1/2 before:h-1.5 before:w-full before:-translate-y-1/2", "before:rounded-full before:bg-[color-mix(in_oklch,var(--kp-muted)_85%,var(--kp-foreground)_8%)]", "before:shadow-[inset_0_1px_0_oklch(0_0_0/8%)]");
|
|
8
|
+
export const sliderFillClass = cn("absolute top-1/2 h-1.5 -translate-y-1/2 rounded-full bg-accent", "shadow-[inset_0_1px_0_oklch(1_0_0/25%)]");
|
|
9
|
+
export const sliderThumbClass = cn("top-1/2 size-5 -translate-y-1/2 rounded-full border", "border-[color-mix(in_oklch,var(--kp-foreground)_18%,transparent)]", "bg-surface shadow-[var(--kp-shadow-surface),inset_0_1px_0_oklch(1_0_0/55%)]", "outline-none transition-[box-shadow,transform]", "duration-[var(--kp-motion-duration)] ease-[var(--kp-motion-ease-standard)]", "dragging:scale-[0.96] data-[dragging]:scale-[0.96]", "focus-visible:ring-2 focus-visible:ring-ring/40");
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { SliderProps as AriaSliderProps } from "react-aria-components";
|
|
2
|
+
import type { ReactNode } from "react";
|
|
3
|
+
export type SliderProps = Omit<AriaSliderProps, "className" | "children"> & {
|
|
4
|
+
label?: ReactNode;
|
|
5
|
+
description?: ReactNode;
|
|
6
|
+
className?: string;
|
|
7
|
+
showOutput?: boolean;
|
|
8
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { Sparkline, type SparklineProps } from "./sparkline";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { Sparkline } from "./sparkline";
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { ChartDatum, ChartStatus } from "../../chart/types";
|
|
2
|
+
export type SparklineProps = {
|
|
3
|
+
data: ChartDatum[] | number[];
|
|
4
|
+
className?: string;
|
|
5
|
+
width?: number;
|
|
6
|
+
height?: number;
|
|
7
|
+
summary: string;
|
|
8
|
+
status?: ChartStatus;
|
|
9
|
+
color?: string;
|
|
10
|
+
};
|
|
11
|
+
export declare function Sparkline({ data, className, width, height, summary, status, color, }: SparklineProps): import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
|
+
import { drawIn } from "@hewnui/motion";
|
|
4
|
+
import { m } from "motion/react";
|
|
5
|
+
import { useMotionMode } from "../../providers/motion-provider";
|
|
6
|
+
import { seriesColor } from "../../chart/colors";
|
|
7
|
+
import { ChartFrame } from "../../chart/frame";
|
|
8
|
+
import { linePath } from "../../chart/path";
|
|
9
|
+
import { createLinearScales, flattenSeries } from "../../chart/scales";
|
|
10
|
+
import { resolveStatus } from "../../chart/status";
|
|
11
|
+
function toPoints(data) {
|
|
12
|
+
if (data.length === 0)
|
|
13
|
+
return [];
|
|
14
|
+
if (typeof data[0] === "number") {
|
|
15
|
+
return data.map((y, x) => ({ x, y }));
|
|
16
|
+
}
|
|
17
|
+
return data;
|
|
18
|
+
}
|
|
19
|
+
export function Sparkline({ data, className, width = 160, height = 40, summary, status, color, }) {
|
|
20
|
+
const { motionEnabled } = useMotionMode();
|
|
21
|
+
const points = toPoints(data);
|
|
22
|
+
const resolved = resolveStatus(points, status);
|
|
23
|
+
const stroke = seriesColor(0, color);
|
|
24
|
+
if (resolved !== "ready") {
|
|
25
|
+
return (_jsx(ChartFrame, { className: className, width: width, height: height, summary: summary, status: resolved }));
|
|
26
|
+
}
|
|
27
|
+
const { x, y, xIsNumeric } = createLinearScales(points, {
|
|
28
|
+
width,
|
|
29
|
+
height,
|
|
30
|
+
padding: { top: 4, right: 4, bottom: 4, left: 4 },
|
|
31
|
+
});
|
|
32
|
+
const d = linePath(points, x, y, xIsNumeric);
|
|
33
|
+
return (_jsx(ChartFrame, { className: className, width: width, height: height, summary: summary, children: motionEnabled ? (_jsx(m.path, { d: d, fill: "none", stroke: stroke, strokeWidth: 1.75, strokeLinecap: "round", strokeLinejoin: "round", initial: { pathLength: 0, opacity: 0.4 }, animate: { pathLength: 1, opacity: 1 }, transition: drawIn })) : (_jsx("path", { d: d, fill: "none", stroke: stroke, strokeWidth: 1.75, strokeLinecap: "round", strokeLinejoin: "round" })) }));
|
|
34
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { Spinner } from "./spinner";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { Spinner } from "./spinner";
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { cn } from "../../utils/cn";
|
|
3
|
+
/** CSS-driven spinner — animation lives in theme tokens, not Tailwind arbitrary values. */
|
|
4
|
+
export function Spinner({ className, }) {
|
|
5
|
+
return _jsx("span", { "aria-hidden": true, className: cn("kp-spinner", className) });
|
|
6
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { ReactNode } from "react";
|
|
2
|
+
import type { StepperOrientation, StepperStepProps, StepStatus } from "./stepper.types";
|
|
3
|
+
export type StepperContextValue = {
|
|
4
|
+
orientation: StepperOrientation;
|
|
5
|
+
currentIndex?: number | undefined;
|
|
6
|
+
onStepChange?: ((index: number) => void) | undefined;
|
|
7
|
+
allowGoBack: boolean;
|
|
8
|
+
};
|
|
9
|
+
export declare function resolveStatus(explicit: StepStatus | undefined, index: number, currentIndex: number | undefined, isOptional: boolean | undefined): StepStatus;
|
|
10
|
+
export declare function StepperStepView({ children, className, ctx, description, index, isClickable, isLast, isOptional, onPress, status: statusProp, }: StepperStepProps & {
|
|
11
|
+
isLast: boolean;
|
|
12
|
+
ctx: StepperContextValue;
|
|
13
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
14
|
+
/** Public step marker — collected by {@link Stepper}. */
|
|
15
|
+
export declare function StepperStep(_props: StepperStepProps): ReactNode;
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
3
|
+
import { stepperButtonClass, stepperButtonVerticalClass, stepperConnectorClass, stepperDescriptionClass, stepperIndicatorClass, stepperItemClass, stepperOptionalClass, stepperTitleClass, } from "./stepper.styles";
|
|
4
|
+
export function resolveStatus(explicit, index, currentIndex, isOptional) {
|
|
5
|
+
if (explicit)
|
|
6
|
+
return explicit;
|
|
7
|
+
if (currentIndex === undefined) {
|
|
8
|
+
return isOptional ? "optional" : "upcoming";
|
|
9
|
+
}
|
|
10
|
+
if (index < currentIndex)
|
|
11
|
+
return "complete";
|
|
12
|
+
if (index === currentIndex)
|
|
13
|
+
return "current";
|
|
14
|
+
return isOptional ? "optional" : "upcoming";
|
|
15
|
+
}
|
|
16
|
+
function CheckGlyph() {
|
|
17
|
+
return (_jsx("svg", { viewBox: "0 0 16 16", className: "size-4", "aria-hidden": true, children: _jsx("path", { d: "M3.5 8.5 6.5 11.5 12.5 4.5", fill: "none", stroke: "currentColor", strokeWidth: "1.8", strokeLinecap: "round", strokeLinejoin: "round" }) }));
|
|
18
|
+
}
|
|
19
|
+
function AlertGlyph() {
|
|
20
|
+
return (_jsx("svg", { viewBox: "0 0 16 16", className: "size-4", "aria-hidden": true, children: _jsx("path", { d: "M8 3.5v6M8 12.2h.01", fill: "none", stroke: "currentColor", strokeWidth: "1.8", strokeLinecap: "round" }) }));
|
|
21
|
+
}
|
|
22
|
+
export function StepperStepView({ children, className, ctx, description, index = 0, isClickable, isLast, isOptional, onPress, status: statusProp, }) {
|
|
23
|
+
const { allowGoBack, currentIndex, onStepChange, orientation } = ctx;
|
|
24
|
+
const status = resolveStatus(statusProp, index, currentIndex, isOptional);
|
|
25
|
+
const clickable = isClickable ??
|
|
26
|
+
Boolean(onPress ||
|
|
27
|
+
(allowGoBack &&
|
|
28
|
+
onStepChange &&
|
|
29
|
+
(status === "complete" || status === "error")));
|
|
30
|
+
function activate() {
|
|
31
|
+
if (!clickable)
|
|
32
|
+
return;
|
|
33
|
+
onPress?.();
|
|
34
|
+
onStepChange?.(index);
|
|
35
|
+
}
|
|
36
|
+
const indicator = status === "complete" ? (_jsx(CheckGlyph, {})) : status === "error" ? (_jsx(AlertGlyph, {})) : (_jsx("span", { className: "tabular-nums", children: index + 1 }));
|
|
37
|
+
const frameClass = orientation === "vertical"
|
|
38
|
+
? stepperButtonVerticalClass(clickable)
|
|
39
|
+
: stepperButtonClass(clickable);
|
|
40
|
+
const body = (_jsxs(_Fragment, { children: [_jsx("span", { className: stepperIndicatorClass(status), "aria-hidden": true, children: indicator }), _jsxs("span", { className: "min-w-0", children: [_jsx("span", { className: stepperTitleClass, children: children }), isOptional || status === "optional" ? (_jsx("span", { className: stepperOptionalClass, children: "Optional" })) : null, description ? (_jsx("span", { className: stepperDescriptionClass, children: description })) : null] })] }));
|
|
41
|
+
return (_jsxs("li", { className: stepperItemClass(orientation, className), "aria-current": status === "current" ? "step" : undefined, "data-status": status, children: [!isLast ? (_jsx("span", { "aria-hidden": true, className: stepperConnectorClass(orientation, status === "complete") })) : null, clickable ? (_jsx("button", { type: "button", className: frameClass, onClick: activate, children: body })) : (_jsx("div", { className: frameClass, children: body }))] }));
|
|
42
|
+
}
|
|
43
|
+
/** Public step marker — collected by {@link Stepper}. */
|
|
44
|
+
export function StepperStep(_props) {
|
|
45
|
+
return null;
|
|
46
|
+
}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { StepperStep } from "./stepper-step";
|
|
2
|
+
import type { StepperProps } from "./stepper.types";
|
|
3
|
+
export { StepperStep };
|
|
4
|
+
export declare function Stepper({ "aria-label": ariaLabel, allowGoBack, children, className, currentIndex, onStepChange, orientation, }: StepperProps): import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
|
+
import { Children, isValidElement, useMemo, } from "react";
|
|
4
|
+
import { stepperListClass } from "./stepper.styles";
|
|
5
|
+
import { StepperStep, StepperStepView, } from "./stepper-step";
|
|
6
|
+
export { StepperStep };
|
|
7
|
+
export function Stepper({ "aria-label": ariaLabel = "Progress", allowGoBack, children, className, currentIndex, onStepChange, orientation = "horizontal", }) {
|
|
8
|
+
const canGoBack = allowGoBack ?? Boolean(onStepChange);
|
|
9
|
+
const ctx = useMemo(() => ({
|
|
10
|
+
orientation,
|
|
11
|
+
allowGoBack: canGoBack,
|
|
12
|
+
...(currentIndex !== undefined ? { currentIndex } : {}),
|
|
13
|
+
...(onStepChange !== undefined ? { onStepChange } : {}),
|
|
14
|
+
}), [canGoBack, currentIndex, onStepChange, orientation]);
|
|
15
|
+
const steps = Children.toArray(children).filter(isValidElement);
|
|
16
|
+
return (_jsx("nav", { "aria-label": ariaLabel, "data-kp-control": "stepper", children: _jsx("ol", { className: stepperListClass(orientation, className), children: steps.map((step, i) => (_jsx(StepperStepView, { ...step.props, ctx: ctx, index: step.props.index ?? i, isLast: i === steps.length - 1 }, step.key ?? step.props.index ?? i))) }) }));
|
|
17
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { StepperOrientation, StepStatus } from "./stepper.types";
|
|
2
|
+
export declare function stepperListClass(orientation: StepperOrientation, className?: string | undefined): string;
|
|
3
|
+
export declare function stepperItemClass(orientation: StepperOrientation, className?: string | undefined): string;
|
|
4
|
+
export declare function stepperConnectorClass(orientation: StepperOrientation, complete: boolean): string;
|
|
5
|
+
export declare function stepperIndicatorClass(status: StepStatus): string;
|
|
6
|
+
export declare function stepperButtonClass(clickable: boolean): string;
|
|
7
|
+
export declare function stepperButtonVerticalClass(clickable: boolean): string;
|
|
8
|
+
export declare const stepperTitleClass = "text-sm font-medium tracking-tight text-balance text-foreground";
|
|
9
|
+
export declare const stepperDescriptionClass = "mt-0.5 text-xs leading-relaxed text-pretty text-muted-foreground";
|
|
10
|
+
export declare const stepperOptionalClass = "mt-0.5 font-mono text-[10px] uppercase tracking-[0.12em] text-muted-foreground";
|