@archytechtor/ui 0.0.0-stage → 0.2.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 +105 -2
- package/dist/components/accordion/accordion.d.ts +25 -0
- package/dist/components/accordion/accordion.js +88 -0
- package/dist/components/accordion/index.d.ts +3 -0
- package/dist/components/accordion/index.js +1 -0
- package/dist/components/accordion/types.d.ts +39 -0
- package/dist/components/alert/alert.d.ts +25 -0
- package/dist/components/alert/alert.js +59 -0
- package/dist/components/alert/index.d.ts +3 -0
- package/dist/components/alert/index.js +3 -0
- package/dist/components/alert/types.d.ts +32 -0
- package/dist/components/alert/types.js +19 -0
- package/dist/components/alert-dialog/alert-dialog.d.ts +73 -0
- package/dist/components/alert-dialog/alert-dialog.js +170 -0
- package/dist/components/alert-dialog/index.d.ts +3 -0
- package/dist/components/alert-dialog/index.js +1 -0
- package/dist/components/alert-dialog/types.d.ts +80 -0
- package/dist/components/aspect-ratio/aspect-ratio.d.ts +8 -0
- package/dist/components/aspect-ratio/aspect-ratio.js +20 -0
- package/dist/components/aspect-ratio/index.d.ts +3 -0
- package/dist/components/aspect-ratio/index.js +1 -0
- package/dist/components/aspect-ratio/types.d.ts +8 -0
- package/dist/components/attachment/attachment.d.ts +57 -0
- package/dist/components/attachment/attachment.js +139 -0
- package/dist/components/attachment/index.d.ts +3 -0
- package/dist/components/attachment/index.js +3 -0
- package/dist/components/attachment/types.d.ts +79 -0
- package/dist/components/attachment/types.js +43 -0
- package/dist/components/avatar/avatar.d.ts +39 -0
- package/dist/components/avatar/avatar.js +88 -0
- package/dist/components/avatar/index.d.ts +3 -0
- package/dist/components/avatar/index.js +3 -0
- package/dist/components/avatar/types.d.ts +54 -0
- package/dist/components/avatar/types.js +21 -0
- package/dist/components/badge/badge.d.ts +7 -0
- package/dist/components/badge/badge.js +23 -0
- package/dist/components/badge/index.d.ts +3 -0
- package/dist/components/badge/index.js +3 -0
- package/dist/components/badge/types.d.ts +21 -0
- package/dist/components/badge/types.js +26 -0
- package/dist/components/bottom-nav/bottom-nav.d.ts +19 -0
- package/dist/components/bottom-nav/bottom-nav.js +59 -0
- package/dist/components/bottom-nav/index.d.ts +3 -0
- package/dist/components/bottom-nav/index.js +3 -0
- package/dist/components/bottom-nav/types.d.ts +45 -0
- package/dist/components/bottom-nav/types.js +44 -0
- package/dist/components/box/box.d.ts +7 -0
- package/dist/components/box/box.js +26 -0
- package/dist/components/box/index.d.ts +3 -0
- package/dist/components/box/index.js +3 -0
- package/dist/components/box/types.d.ts +23 -0
- package/dist/components/box/types.js +27 -0
- package/dist/components/breadcrumb/breadcrumb.d.ts +43 -0
- package/dist/components/breadcrumb/breadcrumb.js +115 -0
- package/dist/components/breadcrumb/index.d.ts +3 -0
- package/dist/components/breadcrumb/index.js +1 -0
- package/dist/components/breadcrumb/types.d.ts +36 -0
- package/dist/components/bubble/bubble.d.ts +25 -0
- package/dist/components/bubble/bubble.js +69 -0
- package/dist/components/bubble/index.d.ts +3 -0
- package/dist/components/bubble/index.js +3 -0
- package/dist/components/bubble/types.d.ts +51 -0
- package/dist/components/bubble/types.js +60 -0
- package/dist/components/button/button.d.ts +7 -0
- package/dist/components/button/button.js +155 -0
- package/dist/components/button/index.d.ts +4 -0
- package/dist/components/button/index.js +4 -0
- package/dist/components/button/types.d.ts +80 -0
- package/dist/components/button/types.js +99 -0
- package/dist/components/button/use-hold-to-confirm.d.ts +25 -0
- package/dist/components/button/use-hold-to-confirm.js +161 -0
- package/dist/components/button-group/button-group.d.ts +20 -0
- package/dist/components/button-group/button-group.js +62 -0
- package/dist/components/button-group/index.d.ts +3 -0
- package/dist/components/button-group/index.js +3 -0
- package/dist/components/button-group/types.d.ts +30 -0
- package/dist/components/button-group/types.js +19 -0
- package/dist/components/calendar/calendar.d.ts +15 -0
- package/dist/components/calendar/calendar.js +157 -0
- package/dist/components/calendar/index.d.ts +3 -0
- package/dist/components/calendar/index.js +1 -0
- package/dist/components/calendar/types.d.ts +21 -0
- package/dist/components/card/card.d.ts +43 -0
- package/dist/components/card/card.js +97 -0
- package/dist/components/card/index.d.ts +3 -0
- package/dist/components/card/index.js +3 -0
- package/dist/components/card/types.d.ts +44 -0
- package/dist/components/card/types.js +19 -0
- package/dist/components/carousel/carousel.d.ts +36 -0
- package/dist/components/carousel/carousel.js +190 -0
- package/dist/components/carousel/index.d.ts +3 -0
- package/dist/components/carousel/index.js +1 -0
- package/dist/components/carousel/types.d.ts +79 -0
- package/dist/components/chart/chart.d.ts +35 -0
- package/dist/components/chart/chart.js +212 -0
- package/dist/components/chart/index.d.ts +3 -0
- package/dist/components/chart/index.js +1 -0
- package/dist/components/chart/types.d.ts +89 -0
- package/dist/components/chart/types.js +7 -0
- package/dist/components/checkbox/checkbox.d.ts +7 -0
- package/dist/components/checkbox/checkbox.js +31 -0
- package/dist/components/checkbox/index.d.ts +3 -0
- package/dist/components/checkbox/index.js +1 -0
- package/dist/components/checkbox/types.d.ts +25 -0
- package/dist/components/code-block/code-block.d.ts +49 -0
- package/dist/components/code-block/code-block.js +188 -0
- package/dist/components/code-block/highlighter.d.ts +15 -0
- package/dist/components/code-block/highlighter.js +123 -0
- package/dist/components/code-block/index.d.ts +5 -0
- package/dist/components/code-block/index.js +5 -0
- package/dist/components/code-block/types.d.ts +94 -0
- package/dist/components/code-block/types.js +38 -0
- package/dist/components/code-block/use-highlighted-code.d.ts +9 -0
- package/dist/components/code-block/use-highlighted-code.js +67 -0
- package/dist/components/collapsible/collapsible.d.ts +19 -0
- package/dist/components/collapsible/collapsible.js +44 -0
- package/dist/components/collapsible/index.d.ts +3 -0
- package/dist/components/collapsible/index.js +1 -0
- package/dist/components/collapsible/types.d.ts +26 -0
- package/dist/components/combobox/combobox.d.ts +104 -0
- package/dist/components/combobox/combobox.js +365 -0
- package/dist/components/combobox/index.d.ts +3 -0
- package/dist/components/combobox/index.js +1 -0
- package/dist/components/combobox/types.d.ts +229 -0
- package/dist/components/command/command.d.ts +55 -0
- package/dist/components/command/command.js +179 -0
- package/dist/components/command/index.d.ts +3 -0
- package/dist/components/command/index.js +1 -0
- package/dist/components/command/types.d.ts +69 -0
- package/dist/components/context-menu/context-menu.d.ts +92 -0
- package/dist/components/context-menu/context-menu.js +270 -0
- package/dist/components/context-menu/index.d.ts +3 -0
- package/dist/components/context-menu/index.js +1 -0
- package/dist/components/context-menu/types.d.ts +138 -0
- package/dist/components/data-table/data-table-features.d.ts +21 -0
- package/dist/components/data-table/data-table-features.js +22 -0
- package/dist/components/data-table/data-table.d.ts +69 -0
- package/dist/components/data-table/data-table.js +283 -0
- package/dist/components/data-table/index.d.ts +4 -0
- package/dist/components/data-table/index.js +3 -0
- package/dist/components/data-table/types.d.ts +63 -0
- package/dist/components/date-input/date-input.d.ts +7 -0
- package/dist/components/date-input/date-input.js +147 -0
- package/dist/components/date-input/index.d.ts +3 -0
- package/dist/components/date-input/index.js +1 -0
- package/dist/components/date-input/types.d.ts +27 -0
- package/dist/components/date-picker/date-picker.d.ts +7 -0
- package/dist/components/date-picker/date-picker.js +74 -0
- package/dist/components/date-picker/index.d.ts +3 -0
- package/dist/components/date-picker/index.js +1 -0
- package/dist/components/date-picker/types.d.ts +38 -0
- package/dist/components/date-range-picker/date-range-picker.d.ts +7 -0
- package/dist/components/date-range-picker/date-range-picker.js +89 -0
- package/dist/components/date-range-picker/index.d.ts +3 -0
- package/dist/components/date-range-picker/index.js +1 -0
- package/dist/components/date-range-picker/types.d.ts +43 -0
- package/dist/components/dialog/dialog.d.ts +61 -0
- package/dist/components/dialog/dialog.js +160 -0
- package/dist/components/dialog/index.d.ts +3 -0
- package/dist/components/dialog/index.js +1 -0
- package/dist/components/dialog/types.d.ts +68 -0
- package/dist/components/drawer/drawer.d.ts +69 -0
- package/dist/components/drawer/drawer.js +245 -0
- package/dist/components/drawer/index.d.ts +3 -0
- package/dist/components/drawer/index.js +1 -0
- package/dist/components/drawer/types.d.ts +93 -0
- package/dist/components/dropdown-menu/dropdown-menu.d.ts +92 -0
- package/dist/components/dropdown-menu/dropdown-menu.js +268 -0
- package/dist/components/dropdown-menu/index.d.ts +3 -0
- package/dist/components/dropdown-menu/index.js +1 -0
- package/dist/components/dropdown-menu/types.d.ts +143 -0
- package/dist/components/empty/empty.d.ts +37 -0
- package/dist/components/empty/empty.js +84 -0
- package/dist/components/empty/index.d.ts +3 -0
- package/dist/components/empty/index.js +3 -0
- package/dist/components/empty/types.d.ts +39 -0
- package/dist/components/empty/types.js +13 -0
- package/dist/components/expanded-card/expanded-card.d.ts +43 -0
- package/dist/components/expanded-card/expanded-card.js +352 -0
- package/dist/components/expanded-card/index.d.ts +3 -0
- package/dist/components/expanded-card/index.js +1 -0
- package/dist/components/expanded-card/types.d.ts +52 -0
- package/dist/components/field/field.d.ts +62 -0
- package/dist/components/field/field.js +173 -0
- package/dist/components/field/index.d.ts +3 -0
- package/dist/components/field/index.js +3 -0
- package/dist/components/field/types.d.ts +81 -0
- package/dist/components/field/types.js +21 -0
- package/dist/components/form/form.d.ts +49 -0
- package/dist/components/form/form.js +136 -0
- package/dist/components/form/index.d.ts +3 -0
- package/dist/components/form/index.js +1 -0
- package/dist/components/form/types.d.ts +59 -0
- package/dist/components/grid/grid.d.ts +7 -0
- package/dist/components/grid/grid.js +36 -0
- package/dist/components/grid/index.d.ts +3 -0
- package/dist/components/grid/index.js +3 -0
- package/dist/components/grid/types.d.ts +35 -0
- package/dist/components/grid/types.js +102 -0
- package/dist/components/hover-card/hover-card.d.ts +19 -0
- package/dist/components/hover-card/hover-card.js +63 -0
- package/dist/components/hover-card/index.d.ts +3 -0
- package/dist/components/hover-card/index.js +1 -0
- package/dist/components/hover-card/types.d.ts +27 -0
- package/dist/components/image-gallery/image-gallery.d.ts +8 -0
- package/dist/components/image-gallery/image-gallery.js +294 -0
- package/dist/components/image-gallery/index.d.ts +4 -0
- package/dist/components/image-gallery/index.js +3 -0
- package/dist/components/image-gallery/masonry.d.ts +11 -0
- package/dist/components/image-gallery/masonry.js +62 -0
- package/dist/components/image-gallery/types.d.ts +80 -0
- package/dist/components/input/index.d.ts +3 -0
- package/dist/components/input/index.js +1 -0
- package/dist/components/input/input.d.ts +7 -0
- package/dist/components/input/input.js +18 -0
- package/dist/components/input/types.d.ts +28 -0
- package/dist/components/input-group/index.d.ts +3 -0
- package/dist/components/input-group/index.js +3 -0
- package/dist/components/input-group/input-group.d.ts +37 -0
- package/dist/components/input-group/input-group.js +103 -0
- package/dist/components/input-group/types.d.ts +64 -0
- package/dist/components/input-group/types.js +31 -0
- package/dist/components/input-otp/index.d.ts +3 -0
- package/dist/components/input-otp/index.js +1 -0
- package/dist/components/input-otp/input-otp.d.ts +25 -0
- package/dist/components/input-otp/input-otp.js +76 -0
- package/dist/components/input-otp/types.d.ts +43 -0
- package/dist/components/item/index.d.ts +3 -0
- package/dist/components/item/index.js +3 -0
- package/dist/components/item/item.d.ts +61 -0
- package/dist/components/item/item.js +149 -0
- package/dist/components/item/types.d.ts +75 -0
- package/dist/components/item/types.js +48 -0
- package/dist/components/kbd/index.d.ts +3 -0
- package/dist/components/kbd/index.js +1 -0
- package/dist/components/kbd/kbd.d.ts +13 -0
- package/dist/components/kbd/kbd.js +30 -0
- package/dist/components/kbd/types.d.ts +9 -0
- package/dist/components/label/index.d.ts +3 -0
- package/dist/components/label/index.js +1 -0
- package/dist/components/label/label.d.ts +7 -0
- package/dist/components/label/label.js +17 -0
- package/dist/components/label/types.d.ts +8 -0
- package/dist/components/loader/index.d.ts +3 -0
- package/dist/components/loader/index.js +3 -0
- package/dist/components/loader/loader.d.ts +8 -0
- package/dist/components/loader/loader.js +386 -0
- package/dist/components/loader/types.d.ts +27 -0
- package/dist/components/loader/types.js +58 -0
- package/dist/components/marker/index.d.ts +3 -0
- package/dist/components/marker/index.js +3 -0
- package/dist/components/marker/marker.d.ts +19 -0
- package/dist/components/marker/marker.js +51 -0
- package/dist/components/marker/types.d.ts +30 -0
- package/dist/components/marker/types.js +16 -0
- package/dist/components/menubar/index.d.ts +3 -0
- package/dist/components/menubar/index.js +1 -0
- package/dist/components/menubar/menubar.d.ts +98 -0
- package/dist/components/menubar/menubar.js +284 -0
- package/dist/components/menubar/types.d.ts +146 -0
- package/dist/components/message/index.d.ts +3 -0
- package/dist/components/message/index.js +1 -0
- package/dist/components/message/message.d.ts +37 -0
- package/dist/components/message/message.js +83 -0
- package/dist/components/message/types.d.ts +32 -0
- package/dist/components/message-scroller/index.d.ts +4 -0
- package/dist/components/message-scroller/index.js +3 -0
- package/dist/components/message-scroller/message-scroller-primitive.d.ts +21 -0
- package/dist/components/message-scroller/message-scroller-primitive.js +1349 -0
- package/dist/components/message-scroller/message-scroller.d.ts +39 -0
- package/dist/components/message-scroller/message-scroller.js +103 -0
- package/dist/components/message-scroller/types.d.ts +107 -0
- package/dist/components/money-input/index.d.ts +3 -0
- package/dist/components/money-input/index.js +1 -0
- package/dist/components/money-input/money-input.d.ts +7 -0
- package/dist/components/money-input/money-input.js +143 -0
- package/dist/components/money-input/types.d.ts +20 -0
- package/dist/components/morph-image/index.d.ts +3 -0
- package/dist/components/morph-image/index.js +3 -0
- package/dist/components/morph-image/morph-image.d.ts +8 -0
- package/dist/components/morph-image/morph-image.js +155 -0
- package/dist/components/morph-image/types.d.ts +38 -0
- package/dist/components/morph-image/types.js +18 -0
- package/dist/components/native-select/index.d.ts +3 -0
- package/dist/components/native-select/index.js +3 -0
- package/dist/components/native-select/native-select.d.ts +20 -0
- package/dist/components/native-select/native-select.js +57 -0
- package/dist/components/native-select/types.d.ts +52 -0
- package/dist/components/native-select/types.js +23 -0
- package/dist/components/navigation-menu/index.d.ts +3 -0
- package/dist/components/navigation-menu/index.js +3 -0
- package/dist/components/navigation-menu/navigation-menu.d.ts +50 -0
- package/dist/components/navigation-menu/navigation-menu.js +145 -0
- package/dist/components/navigation-menu/types.d.ts +79 -0
- package/dist/components/navigation-menu/types.js +15 -0
- package/dist/components/number-stepper/index.d.ts +3 -0
- package/dist/components/number-stepper/index.js +3 -0
- package/dist/components/number-stepper/number-stepper.d.ts +9 -0
- package/dist/components/number-stepper/number-stepper.js +223 -0
- package/dist/components/number-stepper/types.d.ts +47 -0
- package/dist/components/number-stepper/types.js +174 -0
- package/dist/components/pagination/index.d.ts +3 -0
- package/dist/components/pagination/index.js +1 -0
- package/dist/components/pagination/pagination.d.ts +43 -0
- package/dist/components/pagination/pagination.js +121 -0
- package/dist/components/pagination/types.d.ts +37 -0
- package/dist/components/phone-input/index.d.ts +3 -0
- package/dist/components/phone-input/index.js +1 -0
- package/dist/components/phone-input/phone-input.d.ts +7 -0
- package/dist/components/phone-input/phone-input.js +54 -0
- package/dist/components/phone-input/types.d.ts +12 -0
- package/dist/components/popover/index.d.ts +3 -0
- package/dist/components/popover/index.js +1 -0
- package/dist/components/popover/popover.d.ts +37 -0
- package/dist/components/popover/popover.js +100 -0
- package/dist/components/popover/types.d.ts +51 -0
- package/dist/components/progress/index.d.ts +3 -0
- package/dist/components/progress/index.js +1 -0
- package/dist/components/progress/progress.d.ts +32 -0
- package/dist/components/progress/progress.js +100 -0
- package/dist/components/progress/types.d.ts +31 -0
- package/dist/components/questionnaire/index.d.ts +3 -0
- package/dist/components/questionnaire/index.js +1 -0
- package/dist/components/questionnaire/questionnaire-primitive.js +1563 -0
- package/dist/components/questionnaire/questionnaire.d.ts +91 -0
- package/dist/components/questionnaire/questionnaire.js +315 -0
- package/dist/components/questionnaire/types.d.ts +203 -0
- package/dist/components/radio-group/index.d.ts +3 -0
- package/dist/components/radio-group/index.js +1 -0
- package/dist/components/radio-group/radio-group.d.ts +13 -0
- package/dist/components/radio-group/radio-group.js +44 -0
- package/dist/components/radio-group/types.d.ts +33 -0
- package/dist/components/reorder-list/index.d.ts +3 -0
- package/dist/components/reorder-list/index.js +1 -0
- package/dist/components/reorder-list/reorder-list.d.ts +19 -0
- package/dist/components/reorder-list/reorder-list.js +279 -0
- package/dist/components/reorder-list/types.d.ts +65 -0
- package/dist/components/resizable/index.d.ts +3 -0
- package/dist/components/resizable/index.js +1 -0
- package/dist/components/resizable/resizable.d.ts +19 -0
- package/dist/components/resizable/resizable.js +44 -0
- package/dist/components/resizable/types.d.ts +89 -0
- package/dist/components/scroll-area/index.d.ts +3 -0
- package/dist/components/scroll-area/index.js +1 -0
- package/dist/components/scroll-area/scroll-area.d.ts +13 -0
- package/dist/components/scroll-area/scroll-area.js +47 -0
- package/dist/components/scroll-area/types.d.ts +19 -0
- package/dist/components/select/index.d.ts +3 -0
- package/dist/components/select/index.js +1 -0
- package/dist/components/select/select.d.ts +61 -0
- package/dist/components/select/select.js +183 -0
- package/dist/components/select/types.d.ts +100 -0
- package/dist/components/separator/index.d.ts +3 -0
- package/dist/components/separator/index.js +1 -0
- package/dist/components/separator/separator.d.ts +7 -0
- package/dist/components/separator/separator.js +20 -0
- package/dist/components/separator/types.d.ts +9 -0
- package/dist/components/sheet/index.d.ts +3 -0
- package/dist/components/sheet/index.js +1 -0
- package/dist/components/sheet/sheet.d.ts +61 -0
- package/dist/components/sheet/sheet.js +155 -0
- package/dist/components/sheet/types.d.ts +69 -0
- package/dist/components/sidebar/index.d.ts +3 -0
- package/dist/components/sidebar/index.js +3 -0
- package/dist/components/sidebar/sidebar.d.ts +145 -0
- package/dist/components/sidebar/sidebar.js +550 -0
- package/dist/components/sidebar/types.d.ts +186 -0
- package/dist/components/sidebar/types.js +42 -0
- package/dist/components/sidebar/use-mobile.js +21 -0
- package/dist/components/skeleton/index.d.ts +3 -0
- package/dist/components/skeleton/index.js +1 -0
- package/dist/components/skeleton/skeleton.d.ts +8 -0
- package/dist/components/skeleton/skeleton.js +18 -0
- package/dist/components/skeleton/types.d.ts +5 -0
- package/dist/components/slider/index.d.ts +3 -0
- package/dist/components/slider/index.js +1 -0
- package/dist/components/slider/slider.d.ts +7 -0
- package/dist/components/slider/slider.js +106 -0
- package/dist/components/slider/types.d.ts +39 -0
- package/dist/components/spinner/index.d.ts +3 -0
- package/dist/components/spinner/index.js +1 -0
- package/dist/components/spinner/spinner.d.ts +7 -0
- package/dist/components/spinner/spinner.js +21 -0
- package/dist/components/spinner/types.d.ts +8 -0
- package/dist/components/stack/index.d.ts +3 -0
- package/dist/components/stack/index.js +3 -0
- package/dist/components/stack/stack.d.ts +7 -0
- package/dist/components/stack/stack.js +29 -0
- package/dist/components/stack/types.d.ts +56 -0
- package/dist/components/stack/types.js +62 -0
- package/dist/components/statistics/index.d.ts +3 -0
- package/dist/components/statistics/index.js +3 -0
- package/dist/components/statistics/statistics.d.ts +31 -0
- package/dist/components/statistics/statistics.js +141 -0
- package/dist/components/statistics/types.d.ts +84 -0
- package/dist/components/statistics/types.js +27 -0
- package/dist/components/switch/index.d.ts +3 -0
- package/dist/components/switch/index.js +3 -0
- package/dist/components/switch/switch.d.ts +7 -0
- package/dist/components/switch/switch.js +32 -0
- package/dist/components/switch/types.d.ts +37 -0
- package/dist/components/switch/types.js +23 -0
- package/dist/components/table/index.d.ts +3 -0
- package/dist/components/table/index.js +1 -0
- package/dist/components/table/table.d.ts +49 -0
- package/dist/components/table/table.js +112 -0
- package/dist/components/table/types.d.ts +33 -0
- package/dist/components/tabs/index.d.ts +3 -0
- package/dist/components/tabs/index.js +3 -0
- package/dist/components/tabs/tabs.d.ts +25 -0
- package/dist/components/tabs/tabs.js +81 -0
- package/dist/components/tabs/types.d.ts +61 -0
- package/dist/components/tabs/types.js +18 -0
- package/dist/components/textarea/index.d.ts +3 -0
- package/dist/components/textarea/index.js +1 -0
- package/dist/components/textarea/textarea.d.ts +7 -0
- package/dist/components/textarea/textarea.js +17 -0
- package/dist/components/textarea/types.d.ts +26 -0
- package/dist/components/toast/index.d.ts +3 -0
- package/dist/components/toast/index.js +1 -0
- package/dist/components/toast/toast.d.ts +63 -0
- package/dist/components/toast/toast.js +321 -0
- package/dist/components/toast/types.d.ts +120 -0
- package/dist/components/toggle/index.d.ts +3 -0
- package/dist/components/toggle/index.js +3 -0
- package/dist/components/toggle/toggle.d.ts +7 -0
- package/dist/components/toggle/toggle.js +32 -0
- package/dist/components/toggle/types.d.ts +35 -0
- package/dist/components/toggle/types.js +37 -0
- package/dist/components/toggle-group/index.d.ts +3 -0
- package/dist/components/toggle-group/index.js +1 -0
- package/dist/components/toggle-group/toggle-group.d.ts +13 -0
- package/dist/components/toggle-group/toggle-group.js +88 -0
- package/dist/components/toggle-group/types.d.ts +52 -0
- package/dist/components/tooltip/index.d.ts +3 -0
- package/dist/components/tooltip/index.js +1 -0
- package/dist/components/tooltip/tooltip.d.ts +25 -0
- package/dist/components/tooltip/tooltip.js +79 -0
- package/dist/components/tooltip/types.d.ts +48 -0
- package/dist/components/trace/index.d.ts +3 -0
- package/dist/components/trace/index.js +1 -0
- package/dist/components/trace/trace.d.ts +52 -0
- package/dist/components/trace/trace.js +132 -0
- package/dist/components/trace/types.d.ts +54 -0
- package/dist/components/typography/index.d.ts +3 -0
- package/dist/components/typography/index.js +3 -0
- package/dist/components/typography/types.d.ts +29 -0
- package/dist/components/typography/types.js +25 -0
- package/dist/components/typography/typography.d.ts +7 -0
- package/dist/components/typography/typography.js +40 -0
- package/dist/components/video-player/index.d.ts +6 -0
- package/dist/components/video-player/index.js +5 -0
- package/dist/components/video-player/types.d.ts +143 -0
- package/dist/components/video-player/use-video-player.js +319 -0
- package/dist/components/video-player/video-player-context.d.ts +45 -0
- package/dist/components/video-player/video-player-context.js +15 -0
- package/dist/components/video-player/video-player-controls.d.ts +38 -0
- package/dist/components/video-player/video-player-controls.js +226 -0
- package/dist/components/video-player/video-player-overlay.d.ts +13 -0
- package/dist/components/video-player/video-player-overlay.js +113 -0
- package/dist/components/video-player/video-player.d.ts +8 -0
- package/dist/components/video-player/video-player.js +139 -0
- package/dist/index.d.ts +259 -0
- package/dist/index.js +124 -0
- package/dist/lib/floating.d.ts +44 -0
- package/dist/lib/focus-source.js +51 -0
- package/dist/lib/format.d.ts +67 -0
- package/dist/lib/format.js +130 -0
- package/dist/lib/locale.d.ts +104 -0
- package/dist/lib/locale.js +103 -0
- package/dist/lib/part-props.d.ts +15 -0
- package/dist/lib/use-controllable-state.js +22 -0
- package/dist/lib/utils.d.ts +9 -0
- package/dist/lib/utils.js +16 -0
- package/dist/styles/index.css +128 -0
- package/dist/styles/theme.css +84 -0
- package/dist/styles/utilities.css +553 -0
- package/package.json +89 -3
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import { cva } from "class-variance-authority";
|
|
2
|
+
// src/components/button/types.ts
|
|
3
|
+
/**
|
|
4
|
+
* Стили кнопки: вариант оформления и размер.
|
|
5
|
+
* Экспортируются, чтобы оформить кнопкой другой элемент: buttonVariants({ variant: 'outline' }).
|
|
6
|
+
*
|
|
7
|
+
* Отключённая кнопка (disabled или aria-disabled у render) не теряет события мыши, чтобы показать
|
|
8
|
+
* курсор not-allowed (в загрузке — progress): нажатие блокирует сам disabled или обработчик Button,
|
|
9
|
+
* а цвета наведения у каждого варианта возвращаются к обычным.
|
|
10
|
+
*/
|
|
11
|
+
const buttonVariants = cva([
|
|
12
|
+
"group/button inline-flex shrink-0 items-center justify-center rounded-lg border border-transparent bg-clip-padding",
|
|
13
|
+
"text-sm font-medium whitespace-nowrap transition-all outline-none select-none",
|
|
14
|
+
"focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50",
|
|
15
|
+
"active:not-aria-[haspopup]:not-aria-disabled:translate-y-px",
|
|
16
|
+
"cursor-pointer disabled:cursor-not-allowed aria-disabled:cursor-not-allowed",
|
|
17
|
+
"data-loading:disabled:cursor-progress data-loading:aria-disabled:cursor-progress",
|
|
18
|
+
"disabled:opacity-50 aria-disabled:opacity-50",
|
|
19
|
+
"aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20",
|
|
20
|
+
"dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40",
|
|
21
|
+
"[&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*=size-])]:size-4",
|
|
22
|
+
"[&>[data-slot=button-spinner]+svg]:hidden"
|
|
23
|
+
], {
|
|
24
|
+
variants: {
|
|
25
|
+
variant: {
|
|
26
|
+
default: ["bg-primary text-primary-foreground hover:bg-primary/80", "disabled:hover:bg-primary aria-disabled:hover:bg-primary"],
|
|
27
|
+
outline: [
|
|
28
|
+
"border-border bg-background hover:bg-muted hover:text-foreground",
|
|
29
|
+
"aria-expanded:bg-muted aria-expanded:text-foreground",
|
|
30
|
+
"dark:border-input dark:bg-input/30 dark:hover:bg-input/50",
|
|
31
|
+
"disabled:hover:bg-background disabled:hover:text-inherit",
|
|
32
|
+
"aria-disabled:hover:bg-background aria-disabled:hover:text-inherit",
|
|
33
|
+
"dark:disabled:hover:bg-input/30 dark:aria-disabled:hover:bg-input/30"
|
|
34
|
+
],
|
|
35
|
+
secondary: [
|
|
36
|
+
"bg-secondary text-secondary-foreground hover:bg-[color-mix(in_oklch,var(--secondary),var(--foreground)_5%)]",
|
|
37
|
+
"aria-expanded:bg-secondary aria-expanded:text-secondary-foreground",
|
|
38
|
+
"disabled:hover:bg-secondary aria-disabled:hover:bg-secondary"
|
|
39
|
+
],
|
|
40
|
+
ghost: [
|
|
41
|
+
"hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground",
|
|
42
|
+
"dark:hover:bg-muted/50",
|
|
43
|
+
"disabled:hover:bg-transparent disabled:hover:text-inherit",
|
|
44
|
+
"aria-disabled:hover:bg-transparent aria-disabled:hover:text-inherit"
|
|
45
|
+
],
|
|
46
|
+
destructive: [
|
|
47
|
+
"bg-destructive/10 text-destructive hover:bg-destructive/20",
|
|
48
|
+
"focus-visible:border-destructive/40 focus-visible:ring-destructive/20",
|
|
49
|
+
"dark:bg-destructive/20 dark:hover:bg-destructive/30 dark:focus-visible:ring-destructive/40",
|
|
50
|
+
"disabled:hover:bg-destructive/10 aria-disabled:hover:bg-destructive/10",
|
|
51
|
+
"dark:disabled:hover:bg-destructive/20 dark:aria-disabled:hover:bg-destructive/20"
|
|
52
|
+
],
|
|
53
|
+
link: ["text-primary underline-offset-4 hover:underline", "disabled:hover:no-underline aria-disabled:hover:no-underline"]
|
|
54
|
+
},
|
|
55
|
+
size: {
|
|
56
|
+
default: ["h-8 gap-1.5 px-2.5", "has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2"],
|
|
57
|
+
xs: [
|
|
58
|
+
"h-6 gap-1 rounded-[min(var(--radius-md),10px)] px-2 text-xs",
|
|
59
|
+
"in-data-[slot=button-group]:rounded-lg",
|
|
60
|
+
"has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5",
|
|
61
|
+
"[&_svg:not([class*=size-])]:size-3"
|
|
62
|
+
],
|
|
63
|
+
sm: [
|
|
64
|
+
"h-7 gap-1 rounded-[min(var(--radius-md),12px)] px-2.5 text-[0.8rem]",
|
|
65
|
+
"in-data-[slot=button-group]:rounded-lg",
|
|
66
|
+
"has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5",
|
|
67
|
+
"[&_svg:not([class*=size-])]:size-3.5"
|
|
68
|
+
],
|
|
69
|
+
lg: ["h-9 gap-1.5 px-2.5", "has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2"],
|
|
70
|
+
icon: "size-8",
|
|
71
|
+
"icon-xs": ["size-6 rounded-[min(var(--radius-md),10px)] in-data-[slot=button-group]:rounded-lg", "[&_svg:not([class*=size-])]:size-3"],
|
|
72
|
+
"icon-sm": "size-7 rounded-[min(var(--radius-md),12px)] in-data-[slot=button-group]:rounded-lg",
|
|
73
|
+
"icon-lg": "size-9"
|
|
74
|
+
}
|
|
75
|
+
},
|
|
76
|
+
defaultVariants: {
|
|
77
|
+
variant: "default",
|
|
78
|
+
size: "default"
|
|
79
|
+
}
|
|
80
|
+
});
|
|
81
|
+
/**
|
|
82
|
+
* Стили заливки удержания: растёт слева направо поверх кнопки, цвет контрастен варианту
|
|
83
|
+
*/
|
|
84
|
+
const buttonHoldFillVariants = cva([
|
|
85
|
+
"pointer-events-none absolute -inset-px flex items-center justify-center gap-[inherit] rounded-[inherit]",
|
|
86
|
+
"border border-transparent [clip-path:inset(0_calc((1-var(--hold-progress,0))*100%)_0_0)]",
|
|
87
|
+
"transition-opacity duration-200 group-data-[hold=resetting]/button:opacity-0"
|
|
88
|
+
], {
|
|
89
|
+
variants: { variant: {
|
|
90
|
+
default: "bg-primary-foreground text-primary",
|
|
91
|
+
outline: "bg-primary text-primary-foreground",
|
|
92
|
+
secondary: "bg-primary text-primary-foreground",
|
|
93
|
+
ghost: "bg-primary text-primary-foreground",
|
|
94
|
+
destructive: "bg-destructive text-white",
|
|
95
|
+
link: "bg-primary text-primary-foreground"
|
|
96
|
+
} },
|
|
97
|
+
defaultVariants: { variant: "default" }
|
|
98
|
+
});
|
|
99
|
+
export { buttonHoldFillVariants, buttonVariants };
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { HoldStateT, HoldToConfirmOptionsI } from "./types.js";
|
|
2
|
+
import { KeyboardEvent, PointerEvent } from "react";
|
|
3
|
+
/**
|
|
4
|
+
* Удержание для подтверждения: пока держат кнопку (мышью, касанием, пробелом или Enter), заливка
|
|
5
|
+
* растёт до конца и вызывает onConfirm; отпустили раньше — заливка откатывается. Прогресс пишется
|
|
6
|
+
* в CSS-переменную --hold-progress (0…1) на элементе из ref, без перерисовки React
|
|
7
|
+
* @param options - настройки
|
|
8
|
+
* @returns состояние, ref для элемента и обработчики событий
|
|
9
|
+
*/
|
|
10
|
+
export declare function useHoldToConfirm({ enabled, duration, resetDelay, disabled, onConfirm, onCancel }: HoldToConfirmOptionsI): {
|
|
11
|
+
state: HoldStateT;
|
|
12
|
+
setElement: (node: HTMLElement | null) => void;
|
|
13
|
+
handlers: {
|
|
14
|
+
onPointerDown: (event: PointerEvent<HTMLElement>) => void;
|
|
15
|
+
onPointerUp: () => void;
|
|
16
|
+
onPointerCancel: () => void;
|
|
17
|
+
onLostPointerCapture: () => void;
|
|
18
|
+
onKeyDown: (event: KeyboardEvent<HTMLElement>) => void;
|
|
19
|
+
onKeyUp: (event: KeyboardEvent<HTMLElement>) => void;
|
|
20
|
+
onBlur: () => void;
|
|
21
|
+
onContextMenu: (event: {
|
|
22
|
+
preventDefault: () => void;
|
|
23
|
+
}) => void;
|
|
24
|
+
};
|
|
25
|
+
};
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { useCallback, useEffect, useRef, useState } from "react";
|
|
3
|
+
// src/components/button/use-hold-to-confirm.ts
|
|
4
|
+
/** Длительность отката заливки после раннего отпускания, мс */
|
|
5
|
+
const CANCEL_DURATION = 350;
|
|
6
|
+
/** Длительность исчезновения заливки при возврате к ожиданию, мс */
|
|
7
|
+
const FADE_DURATION = 200;
|
|
8
|
+
/**
|
|
9
|
+
* Замедление к концу: откат заливки
|
|
10
|
+
* @param time - доля времени от 0 до 1
|
|
11
|
+
* @returns доля пути
|
|
12
|
+
*/
|
|
13
|
+
function easeOut(time) {
|
|
14
|
+
return 1 - (1 - time) ** 3;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Клавиша, которой нажимают кнопку
|
|
18
|
+
* @param key - клавиша
|
|
19
|
+
* @returns true для пробела и Enter
|
|
20
|
+
*/
|
|
21
|
+
function isHoldKey(key) {
|
|
22
|
+
return key === " " || key === "Enter";
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Удержание для подтверждения: пока держат кнопку (мышью, касанием, пробелом или Enter), заливка
|
|
26
|
+
* растёт до конца и вызывает onConfirm; отпустили раньше — заливка откатывается. Прогресс пишется
|
|
27
|
+
* в CSS-переменную --hold-progress (0…1) на элементе из ref, без перерисовки React
|
|
28
|
+
* @param options - настройки
|
|
29
|
+
* @returns состояние, ref для элемента и обработчики событий
|
|
30
|
+
*/
|
|
31
|
+
function useHoldToConfirm({ enabled, duration, resetDelay, disabled, onConfirm, onCancel }) {
|
|
32
|
+
const [state, setState] = useState("idle");
|
|
33
|
+
const stateRef = useRef("idle");
|
|
34
|
+
const elementRef = useRef(null);
|
|
35
|
+
const progressRef = useRef(0);
|
|
36
|
+
/**
|
|
37
|
+
* Запомнить элемент кнопки: на нём обновляется прогресс удержания
|
|
38
|
+
* @param node - элемент или null при размонтировании
|
|
39
|
+
*/
|
|
40
|
+
const setElement = useCallback((node) => {
|
|
41
|
+
elementRef.current = node;
|
|
42
|
+
}, []);
|
|
43
|
+
const frameRef = useRef(0);
|
|
44
|
+
const timerRef = useRef(null);
|
|
45
|
+
const callbacksRef = useRef({
|
|
46
|
+
onConfirm,
|
|
47
|
+
onCancel
|
|
48
|
+
});
|
|
49
|
+
useEffect(() => {
|
|
50
|
+
callbacksRef.current = {
|
|
51
|
+
onConfirm,
|
|
52
|
+
onCancel
|
|
53
|
+
};
|
|
54
|
+
});
|
|
55
|
+
/**
|
|
56
|
+
* Сменить состояние
|
|
57
|
+
* @param next - новое состояние
|
|
58
|
+
*/
|
|
59
|
+
const updateState = (next) => {
|
|
60
|
+
stateRef.current = next;
|
|
61
|
+
setState(next);
|
|
62
|
+
};
|
|
63
|
+
/**
|
|
64
|
+
* Записать прогресс в CSS-переменную
|
|
65
|
+
* @param value - доля от 0 до 1
|
|
66
|
+
*/
|
|
67
|
+
const setProgress = (value) => {
|
|
68
|
+
progressRef.current = value;
|
|
69
|
+
elementRef.current?.style.setProperty("--hold-progress", String(value));
|
|
70
|
+
};
|
|
71
|
+
/** Остановить анимацию и таймер */
|
|
72
|
+
const stopAll = () => {
|
|
73
|
+
cancelAnimationFrame(frameRef.current);
|
|
74
|
+
if (timerRef.current) {
|
|
75
|
+
clearTimeout(timerRef.current);
|
|
76
|
+
timerRef.current = null;
|
|
77
|
+
}
|
|
78
|
+
};
|
|
79
|
+
/**
|
|
80
|
+
* Плавно довести прогресс до значения
|
|
81
|
+
* @param to - целевая доля
|
|
82
|
+
* @param time - длительность, мс
|
|
83
|
+
* @param easing - кривая
|
|
84
|
+
* @param onDone - по окончании
|
|
85
|
+
*/
|
|
86
|
+
const animateProgress = (to, time, easing, onDone) => {
|
|
87
|
+
const from = progressRef.current;
|
|
88
|
+
const startedAt = performance.now();
|
|
89
|
+
/** Кадр анимации */
|
|
90
|
+
const tick = () => {
|
|
91
|
+
const elapsed = Math.min((performance.now() - startedAt) / time, 1);
|
|
92
|
+
setProgress(from + (to - from) * easing(elapsed));
|
|
93
|
+
if (elapsed < 1) {
|
|
94
|
+
frameRef.current = requestAnimationFrame(tick);
|
|
95
|
+
return;
|
|
96
|
+
}
|
|
97
|
+
onDone?.();
|
|
98
|
+
};
|
|
99
|
+
cancelAnimationFrame(frameRef.current);
|
|
100
|
+
frameRef.current = requestAnimationFrame(tick);
|
|
101
|
+
};
|
|
102
|
+
/** Вернуться к ожиданию: заливка гаснет, прогресс обнуляется */
|
|
103
|
+
const reset = () => {
|
|
104
|
+
updateState("resetting");
|
|
105
|
+
timerRef.current = setTimeout(() => {
|
|
106
|
+
setProgress(0);
|
|
107
|
+
updateState("idle");
|
|
108
|
+
}, FADE_DURATION);
|
|
109
|
+
};
|
|
110
|
+
/** Удержали до конца */
|
|
111
|
+
const confirm = () => {
|
|
112
|
+
updateState("confirmed");
|
|
113
|
+
callbacksRef.current.onConfirm?.();
|
|
114
|
+
if (resetDelay !== false) timerRef.current = setTimeout(reset, resetDelay);
|
|
115
|
+
};
|
|
116
|
+
/** Начали удерживать: заливка растёт с текущего места */
|
|
117
|
+
const start = () => {
|
|
118
|
+
if (!enabled || disabled || stateRef.current !== "idle") return;
|
|
119
|
+
stopAll();
|
|
120
|
+
updateState("holding");
|
|
121
|
+
const remaining = duration * (1 - progressRef.current);
|
|
122
|
+
animateProgress(1, remaining, (value) => value, confirm);
|
|
123
|
+
};
|
|
124
|
+
/** Отпустили раньше: заливка откатывается */
|
|
125
|
+
const cancel = () => {
|
|
126
|
+
if (stateRef.current !== "holding") return;
|
|
127
|
+
const reached = progressRef.current;
|
|
128
|
+
updateState("idle");
|
|
129
|
+
animateProgress(0, CANCEL_DURATION, easeOut);
|
|
130
|
+
callbacksRef.current.onCancel?.(reached);
|
|
131
|
+
};
|
|
132
|
+
useEffect(() => {
|
|
133
|
+
if (disabled) cancel();
|
|
134
|
+
});
|
|
135
|
+
useEffect(() => stopAll, []);
|
|
136
|
+
return {
|
|
137
|
+
state,
|
|
138
|
+
setElement,
|
|
139
|
+
handlers: {
|
|
140
|
+
onPointerDown: (event) => {
|
|
141
|
+
if (event.button !== 0) return;
|
|
142
|
+
event.currentTarget.setPointerCapture(event.pointerId);
|
|
143
|
+
start();
|
|
144
|
+
},
|
|
145
|
+
onPointerUp: cancel,
|
|
146
|
+
onPointerCancel: cancel,
|
|
147
|
+
onLostPointerCapture: cancel,
|
|
148
|
+
onKeyDown: (event) => {
|
|
149
|
+
if (!isHoldKey(event.key)) return;
|
|
150
|
+
event.preventDefault();
|
|
151
|
+
if (!event.repeat) start();
|
|
152
|
+
},
|
|
153
|
+
onKeyUp: (event) => {
|
|
154
|
+
if (isHoldKey(event.key)) cancel();
|
|
155
|
+
},
|
|
156
|
+
onBlur: cancel,
|
|
157
|
+
onContextMenu: (event) => event.preventDefault()
|
|
158
|
+
}
|
|
159
|
+
};
|
|
160
|
+
}
|
|
161
|
+
export { useHoldToConfirm };
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { ButtonGroupPropsT, ButtonGroupSeparatorPropsT, ButtonGroupTextPropsT } from "./types.js";
|
|
2
|
+
/**
|
|
3
|
+
* Группа кнопок: связанные кнопки, поля и списки вплотную с общей рамкой
|
|
4
|
+
* @param props - пропсы группы
|
|
5
|
+
* @returns div с role="group"
|
|
6
|
+
*/
|
|
7
|
+
export declare function ButtonGroup({ className, orientation, ...props }: ButtonGroupPropsT): import("react").JSX.Element;
|
|
8
|
+
/**
|
|
9
|
+
* Текст в группе: подпись или префикс в серой плашке
|
|
10
|
+
* @param props - пропсы текста
|
|
11
|
+
* @returns div
|
|
12
|
+
*/
|
|
13
|
+
export declare function ButtonGroupText({ className, render, ...props }: ButtonGroupTextPropsT): import("react").ReactElement<unknown, string | import("react").JSXElementConstructor<any>>;
|
|
14
|
+
/**
|
|
15
|
+
* Разделитель в группе: линия между кнопками без рамки (например, secondary).
|
|
16
|
+
* Без orientation идёт поперёк группы: в горизонтальной — вертикальная линия, в вертикальной — горизонтальная
|
|
17
|
+
* @param props - пропсы разделителя
|
|
18
|
+
* @returns div
|
|
19
|
+
*/
|
|
20
|
+
export declare function ButtonGroupSeparator({ className, orientation, ...props }: ButtonGroupSeparatorPropsT): import("react").JSX.Element;
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { cn } from "../../lib/utils.js";
|
|
3
|
+
import { Separator } from "../separator/separator.js";
|
|
4
|
+
import { buttonGroupVariants } from "./types.js";
|
|
5
|
+
import { jsx } from "react/jsx-runtime";
|
|
6
|
+
import { mergeProps } from "@base-ui/react/merge-props";
|
|
7
|
+
import { createContext, useContext } from "react";
|
|
8
|
+
import { useRender } from "@base-ui/react/use-render";
|
|
9
|
+
// src/components/button-group/button-group.tsx
|
|
10
|
+
/** Ориентация ближайшей группы: разделитель внутри поворачивается поперёк неё */
|
|
11
|
+
const OrientationContext = createContext("horizontal");
|
|
12
|
+
/**
|
|
13
|
+
* Группа кнопок: связанные кнопки, поля и списки вплотную с общей рамкой
|
|
14
|
+
* @param props - пропсы группы
|
|
15
|
+
* @returns div с role="group"
|
|
16
|
+
*/
|
|
17
|
+
function ButtonGroup({ className, orientation, ...props }) {
|
|
18
|
+
const classes = cn(buttonGroupVariants({ orientation }), className);
|
|
19
|
+
return /* @__PURE__ */ jsx(OrientationContext, {
|
|
20
|
+
value: orientation ?? "horizontal",
|
|
21
|
+
children: /* @__PURE__ */ jsx("div", {
|
|
22
|
+
role: "group",
|
|
23
|
+
"data-slot": "button-group",
|
|
24
|
+
"data-orientation": orientation,
|
|
25
|
+
className: classes,
|
|
26
|
+
...props
|
|
27
|
+
})
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Текст в группе: подпись или префикс в серой плашке
|
|
32
|
+
* @param props - пропсы текста
|
|
33
|
+
* @returns div
|
|
34
|
+
*/
|
|
35
|
+
function ButtonGroupText({ className, render, ...props }) {
|
|
36
|
+
const classes = cn("flex", "items-center", "gap-2", "rounded-lg", "border", "bg-muted", "px-2.5", "text-sm", "font-medium", "[&_svg]:pointer-events-none", "[&_svg:not([class*=size-])]:size-4", "group-data-[orientation=vertical]/button-group:min-h-8", "group-data-[orientation=vertical]/button-group:justify-center", className);
|
|
37
|
+
return useRender({
|
|
38
|
+
defaultTagName: "div",
|
|
39
|
+
render,
|
|
40
|
+
props: mergeProps({
|
|
41
|
+
"data-slot": "button-group-text",
|
|
42
|
+
className: classes
|
|
43
|
+
}, props)
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Разделитель в группе: линия между кнопками без рамки (например, secondary).
|
|
48
|
+
* Без orientation идёт поперёк группы: в горизонтальной — вертикальная линия, в вертикальной — горизонтальная
|
|
49
|
+
* @param props - пропсы разделителя
|
|
50
|
+
* @returns div
|
|
51
|
+
*/
|
|
52
|
+
function ButtonGroupSeparator({ className, orientation, ...props }) {
|
|
53
|
+
const acrossGroup = useContext(OrientationContext) === "vertical" ? "horizontal" : "vertical";
|
|
54
|
+
const classes = cn("relative", "self-stretch", "bg-input", "data-horizontal:mx-px", "data-horizontal:w-auto", "data-vertical:my-px", "data-vertical:h-auto", className);
|
|
55
|
+
return /* @__PURE__ */ jsx(Separator, {
|
|
56
|
+
"data-slot": "button-group-separator",
|
|
57
|
+
orientation: orientation ?? acrossGroup,
|
|
58
|
+
className: classes,
|
|
59
|
+
...props
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
export { ButtonGroup, ButtonGroupSeparator, ButtonGroupText };
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import { ButtonGroupPropsT, ButtonGroupSeparatorPropsT, ButtonGroupTextPropsT, buttonGroupVariants } from "./types.js";
|
|
2
|
+
import { ButtonGroup, ButtonGroupSeparator, ButtonGroupText } from "./button-group.js";
|
|
3
|
+
export { ButtonGroup, type ButtonGroupPropsT, ButtonGroupSeparator, type ButtonGroupSeparatorPropsT, ButtonGroupText, type ButtonGroupTextPropsT, buttonGroupVariants };
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { SeparatorPropsT } from "../separator/types.js";
|
|
2
|
+
import { VariantProps } from "class-variance-authority";
|
|
3
|
+
import { ComponentProps } from "react";
|
|
4
|
+
import { useRender } from "@base-ui/react/use-render";
|
|
5
|
+
/**
|
|
6
|
+
* Стили группы кнопок: ориентация.
|
|
7
|
+
* Экспортируются, чтобы оформить группой другой элемент: buttonGroupVariants({ orientation: 'vertical' }).
|
|
8
|
+
*/
|
|
9
|
+
export declare const buttonGroupVariants: (props?: ({
|
|
10
|
+
orientation?: "vertical" | "horizontal" | null | undefined;
|
|
11
|
+
} & import("class-variance-authority/types").ClassProp) | undefined) => string;
|
|
12
|
+
/**
|
|
13
|
+
* Варианты стилей группы
|
|
14
|
+
*/
|
|
15
|
+
export type ButtonGroupVariantsT = VariantProps<typeof buttonGroupVariants>;
|
|
16
|
+
/**
|
|
17
|
+
* Пропсы группы кнопок
|
|
18
|
+
*/
|
|
19
|
+
export type ButtonGroupPropsT = ComponentProps<'div'> & {
|
|
20
|
+
/** Ориентация: horizontal — в ряд, vertical — столбиком */
|
|
21
|
+
orientation?: ButtonGroupVariantsT['orientation'];
|
|
22
|
+
};
|
|
23
|
+
/**
|
|
24
|
+
* Пропсы текста в группе
|
|
25
|
+
*/
|
|
26
|
+
export type ButtonGroupTextPropsT = useRender.ComponentProps<'div'>;
|
|
27
|
+
/**
|
|
28
|
+
* Пропсы разделителя в группе
|
|
29
|
+
*/
|
|
30
|
+
export type ButtonGroupSeparatorPropsT = SeparatorPropsT;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { cva } from "class-variance-authority";
|
|
2
|
+
// src/components/button-group/types.ts
|
|
3
|
+
/**
|
|
4
|
+
* Стили группы кнопок: ориентация.
|
|
5
|
+
* Экспортируются, чтобы оформить группой другой элемент: buttonGroupVariants({ orientation: 'vertical' }).
|
|
6
|
+
*/
|
|
7
|
+
const buttonGroupVariants = cva([
|
|
8
|
+
"group/button-group flex w-fit items-stretch *:focus-visible:relative *:focus-visible:z-10",
|
|
9
|
+
"[&>[data-slot=select-trigger]:not([class*=w-])]:w-fit [&>input]:flex-1",
|
|
10
|
+
"has-[>[data-slot=button-group]]:gap-2",
|
|
11
|
+
"has-[select[aria-hidden=true]:last-child]:[&>[data-slot=select-trigger]:last-of-type]:rounded-r-lg"
|
|
12
|
+
], {
|
|
13
|
+
variants: { orientation: {
|
|
14
|
+
horizontal: ["[&>*:not(:first-child)]:rounded-l-none [&>*:not(:first-child)]:border-l-0", "[&>*:not(:last-child)]:rounded-r-none [&>[data-slot]:not(:has(~[data-slot]))]:rounded-r-lg!"],
|
|
15
|
+
vertical: ["flex-col [&>*:not(:first-child)]:rounded-t-none [&>*:not(:first-child)]:border-t-0", "[&>*:not(:last-child)]:rounded-b-none [&>[data-slot]:not(:has(~[data-slot]))]:rounded-b-lg!"]
|
|
16
|
+
} },
|
|
17
|
+
defaultVariants: { orientation: "horizontal" }
|
|
18
|
+
});
|
|
19
|
+
export { buttonGroupVariants };
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { CalendarDayButtonPropsT, CalendarPropsT } from "./types.js";
|
|
2
|
+
/**
|
|
3
|
+
* Календарь: выбор даты, нескольких дат или периода. Неделя начинается с понедельника,
|
|
4
|
+
* названия месяцев и дней — на русском
|
|
5
|
+
* @param props - пропсы DayPicker; mode — single, multiple или range
|
|
6
|
+
* @returns div
|
|
7
|
+
*/
|
|
8
|
+
export declare function Calendar({ className, classNames, showOutsideDays, captionLayout, buttonVariant, locale, weekStartsOn, formatters, components, ...props }: CalendarPropsT): import("react").JSX.Element;
|
|
9
|
+
/**
|
|
10
|
+
* Кнопка дня: подсветка выбранного дня и периода. Используется в components.DayButton,
|
|
11
|
+
* чтобы дописать в день свой текст
|
|
12
|
+
* @param props - пропсы кнопки от DayPicker; day и modifiers — день и его состояния
|
|
13
|
+
* @returns кнопка
|
|
14
|
+
*/
|
|
15
|
+
export declare function CalendarDayButton({ className, day, modifiers, locale, ...props }: CalendarDayButtonPropsT): import("react").JSX.Element;
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { cn } from "../../lib/utils.js";
|
|
3
|
+
import "../../lib/locale.js";
|
|
4
|
+
import { buttonVariants } from "../button/types.js";
|
|
5
|
+
import { Button } from "../button/button.js";
|
|
6
|
+
import { ChevronDownIcon, ChevronLeftIcon, ChevronRightIcon } from "lucide-react";
|
|
7
|
+
import { jsx } from "react/jsx-runtime";
|
|
8
|
+
import { useEffect, useRef } from "react";
|
|
9
|
+
import { DayPicker, getDefaultClassNames, useDayPicker } from "react-day-picker";
|
|
10
|
+
import { ru } from "react-day-picker/locale/ru";
|
|
11
|
+
// src/components/calendar/calendar.tsx
|
|
12
|
+
/**
|
|
13
|
+
* Корень календаря с data-slot
|
|
14
|
+
* @param props - пропсы корня от DayPicker
|
|
15
|
+
* @returns div
|
|
16
|
+
*/
|
|
17
|
+
function CalendarRoot({ className, rootRef, ...props }) {
|
|
18
|
+
const classes = cn(className);
|
|
19
|
+
return /* @__PURE__ */ jsx("div", {
|
|
20
|
+
"data-slot": "calendar",
|
|
21
|
+
ref: rootRef,
|
|
22
|
+
className: classes,
|
|
23
|
+
...props
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Стрелка навигации и выпадающих списков
|
|
28
|
+
* @param props - пропсы стрелки от DayPicker; orientation — направление
|
|
29
|
+
* @returns иконка
|
|
30
|
+
*/
|
|
31
|
+
function CalendarChevron({ className, orientation, size: _size, ...props }) {
|
|
32
|
+
const classes = cn("size-4", className);
|
|
33
|
+
if (orientation === "left") return /* @__PURE__ */ jsx(ChevronLeftIcon, {
|
|
34
|
+
className: classes,
|
|
35
|
+
...props
|
|
36
|
+
});
|
|
37
|
+
if (orientation === "right") return /* @__PURE__ */ jsx(ChevronRightIcon, {
|
|
38
|
+
className: classes,
|
|
39
|
+
...props
|
|
40
|
+
});
|
|
41
|
+
return /* @__PURE__ */ jsx(ChevronDownIcon, {
|
|
42
|
+
className: classes,
|
|
43
|
+
...props
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Ячейка с номером недели
|
|
48
|
+
* @param props - пропсы ячейки от DayPicker
|
|
49
|
+
* @returns td
|
|
50
|
+
*/
|
|
51
|
+
function CalendarWeekNumber({ children, week: _week, ...props }) {
|
|
52
|
+
return /* @__PURE__ */ jsx("td", {
|
|
53
|
+
...props,
|
|
54
|
+
children: /* @__PURE__ */ jsx("div", {
|
|
55
|
+
className: "flex size-(--cell-size) items-center justify-center text-center",
|
|
56
|
+
children
|
|
57
|
+
})
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Календарь: выбор даты, нескольких дат или периода. Неделя начинается с понедельника,
|
|
62
|
+
* названия месяцев и дней — на русском
|
|
63
|
+
* @param props - пропсы DayPicker; mode — single, multiple или range
|
|
64
|
+
* @returns div
|
|
65
|
+
*/
|
|
66
|
+
function Calendar({ className, classNames, showOutsideDays = true, captionLayout = "label", buttonVariant = "ghost", locale = ru, weekStartsOn: weekStartsOn$1 = 1, formatters, components, ...props }) {
|
|
67
|
+
const defaultClassNames = getDefaultClassNames();
|
|
68
|
+
const classes = cn("group/calendar", "bg-background", "p-2", "[--cell-radius:var(--radius-md)]", "[--cell-size:--spacing(7)]", "in-data-[slot=card-content]:bg-transparent", "in-data-[slot=popover-content]:bg-transparent", className);
|
|
69
|
+
const captionLabelClasses = captionLayout === "label" ? "text-sm" : "flex h-6 items-center gap-1 rounded-(--cell-radius) pr-1 pl-1.5 text-sm [&>svg]:size-3.5 [&>svg]:text-muted-foreground";
|
|
70
|
+
const dayEdgeClasses = props.showWeekNumber ? "[&:nth-child(2)[data-selected=true]_button]:rounded-l-(--cell-radius)" : "[&:first-child[data-selected=true]_button]:rounded-l-(--cell-radius)";
|
|
71
|
+
const navButtonClasses = cn(buttonVariants({ variant: buttonVariant }), "size-(--cell-size)", "p-0", "select-none", "aria-disabled:opacity-50");
|
|
72
|
+
/**
|
|
73
|
+
* Короткое название месяца в выпадающем списке: «янв.»
|
|
74
|
+
* @param date - месяц
|
|
75
|
+
* @returns название
|
|
76
|
+
*/
|
|
77
|
+
const formatMonthDropdown = (date) => date.toLocaleString(locale?.code, { month: "short" });
|
|
78
|
+
return /* @__PURE__ */ jsx(DayPicker, {
|
|
79
|
+
showOutsideDays,
|
|
80
|
+
className: classes,
|
|
81
|
+
captionLayout,
|
|
82
|
+
locale,
|
|
83
|
+
weekStartsOn: weekStartsOn$1,
|
|
84
|
+
formatters: {
|
|
85
|
+
formatMonthDropdown,
|
|
86
|
+
...formatters
|
|
87
|
+
},
|
|
88
|
+
classNames: {
|
|
89
|
+
root: cn("w-fit", defaultClassNames.root),
|
|
90
|
+
months: cn("relative", "flex", "flex-col", "gap-4", "md:flex-row", defaultClassNames.months),
|
|
91
|
+
month: cn("flex", "w-full", "flex-col", "gap-4", defaultClassNames.month),
|
|
92
|
+
nav: cn("absolute", "inset-x-0", "top-0", "flex", "w-full", "items-center", "justify-between", "gap-1", defaultClassNames.nav),
|
|
93
|
+
button_previous: cn(navButtonClasses, defaultClassNames.button_previous),
|
|
94
|
+
button_next: cn(navButtonClasses, defaultClassNames.button_next),
|
|
95
|
+
month_caption: cn("flex", "h-(--cell-size)", "w-full", "items-center", "justify-center", "px-(--cell-size)", defaultClassNames.month_caption),
|
|
96
|
+
dropdowns: cn("flex", "h-(--cell-size)", "w-full", "items-center", "justify-center", "gap-1.5", "text-sm", "font-medium", defaultClassNames.dropdowns),
|
|
97
|
+
dropdown_root: cn("relative", "rounded-(--cell-radius)", "border", "border-input", "keyboard:has-focus:border-ring", "keyboard:has-focus:ring-3", "keyboard:has-focus:ring-ring/50", defaultClassNames.dropdown_root),
|
|
98
|
+
dropdown: cn("absolute", "inset-0", "bg-popover", "opacity-0", defaultClassNames.dropdown),
|
|
99
|
+
caption_label: cn("font-medium", "select-none", captionLabelClasses, defaultClassNames.caption_label),
|
|
100
|
+
month_grid: cn("w-full", "border-collapse", defaultClassNames.month_grid),
|
|
101
|
+
weekdays: cn("flex", defaultClassNames.weekdays),
|
|
102
|
+
weekday: cn("flex-1", "rounded-(--cell-radius)", "text-[0.8rem]", "font-normal", "text-muted-foreground", "select-none", defaultClassNames.weekday),
|
|
103
|
+
week: cn("mt-2", "flex", "w-full", defaultClassNames.week),
|
|
104
|
+
week_number_header: cn("w-(--cell-size)", "select-none", defaultClassNames.week_number_header),
|
|
105
|
+
week_number: cn("text-[0.8rem]", "text-muted-foreground", "select-none", defaultClassNames.week_number),
|
|
106
|
+
day: cn("group/day", "relative", "aspect-square", "h-full", "w-full", "rounded-(--cell-radius)", "p-0", "text-center", "select-none", "[&:last-child[data-selected=true]_button]:rounded-r-(--cell-radius)", dayEdgeClasses, defaultClassNames.day),
|
|
107
|
+
range_start: cn("relative", "isolate", "z-0", "rounded-l-(--cell-radius)", "bg-muted", "after:absolute", "after:inset-y-0", "after:right-0", "after:w-4", "after:bg-muted", defaultClassNames.range_start),
|
|
108
|
+
range_middle: cn("rounded-none", defaultClassNames.range_middle),
|
|
109
|
+
range_end: cn("relative", "isolate", "z-0", "rounded-r-(--cell-radius)", "bg-muted", "after:absolute", "after:inset-y-0", "after:left-0", "after:w-4", "after:bg-muted", defaultClassNames.range_end),
|
|
110
|
+
today: cn("rounded-(--cell-radius)", "bg-muted", "text-foreground", "data-[selected=true]:rounded-none", defaultClassNames.today),
|
|
111
|
+
outside: cn("text-muted-foreground", "aria-selected:text-muted-foreground", defaultClassNames.outside),
|
|
112
|
+
disabled: cn("text-muted-foreground", "opacity-50", defaultClassNames.disabled),
|
|
113
|
+
hidden: cn("invisible", defaultClassNames.hidden),
|
|
114
|
+
...classNames
|
|
115
|
+
},
|
|
116
|
+
components: {
|
|
117
|
+
Root: CalendarRoot,
|
|
118
|
+
Chevron: CalendarChevron,
|
|
119
|
+
DayButton: CalendarDayButton,
|
|
120
|
+
WeekNumber: CalendarWeekNumber,
|
|
121
|
+
...components
|
|
122
|
+
},
|
|
123
|
+
...props
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Кнопка дня: подсветка выбранного дня и периода. Используется в components.DayButton,
|
|
128
|
+
* чтобы дописать в день свой текст
|
|
129
|
+
* @param props - пропсы кнопки от DayPicker; day и modifiers — день и его состояния
|
|
130
|
+
* @returns кнопка
|
|
131
|
+
*/
|
|
132
|
+
function CalendarDayButton({ className, day, modifiers, locale, ...props }) {
|
|
133
|
+
const { dayPickerProps } = useDayPicker();
|
|
134
|
+
const dayLocale = locale ?? dayPickerProps.locale;
|
|
135
|
+
const defaultClassNames = getDefaultClassNames();
|
|
136
|
+
const ref = useRef(null);
|
|
137
|
+
const isRange = modifiers.range_start || modifiers.range_end || modifiers.range_middle;
|
|
138
|
+
const isSelectedSingle = modifiers.selected && !isRange;
|
|
139
|
+
const dayLabel = day.date.toLocaleDateString(dayLocale?.code);
|
|
140
|
+
const classes = cn("relative", "isolate", "z-10", "flex", "aspect-square", "size-auto", "w-full", "min-w-(--cell-size)", "flex-col", "gap-1", "border-0", "leading-none", "font-normal", "group-data-[focused=true]/day:relative", "group-data-[focused=true]/day:z-10", "keyboard:group-data-[focused=true]/day:border-ring", "keyboard:group-data-[focused=true]/day:ring-[3px]", "keyboard:group-data-[focused=true]/day:ring-ring/50", "data-[range-end=true]:rounded-(--cell-radius)", "data-[range-end=true]:rounded-r-(--cell-radius)", "data-[range-end=true]:bg-primary", "data-[range-end=true]:text-primary-foreground", "data-[range-middle=true]:rounded-none", "data-[range-middle=true]:bg-muted", "data-[range-middle=true]:text-foreground", "data-[range-start=true]:rounded-(--cell-radius)", "data-[range-start=true]:rounded-l-(--cell-radius)", "data-[range-start=true]:bg-primary", "data-[range-start=true]:text-primary-foreground", "data-[selected-single=true]:bg-primary", "data-[selected-single=true]:text-primary-foreground", "dark:hover:text-foreground", "[&>span]:text-xs", "[&>span]:opacity-70", defaultClassNames.day, className);
|
|
141
|
+
useEffect(() => {
|
|
142
|
+
if (modifiers.focused) ref.current?.focus();
|
|
143
|
+
}, [modifiers.focused]);
|
|
144
|
+
return /* @__PURE__ */ jsx(Button, {
|
|
145
|
+
ref,
|
|
146
|
+
variant: "ghost",
|
|
147
|
+
size: "icon",
|
|
148
|
+
"data-day": dayLabel,
|
|
149
|
+
"data-selected-single": isSelectedSingle,
|
|
150
|
+
"data-range-start": modifiers.range_start,
|
|
151
|
+
"data-range-end": modifiers.range_end,
|
|
152
|
+
"data-range-middle": modifiers.range_middle,
|
|
153
|
+
className: classes,
|
|
154
|
+
...props
|
|
155
|
+
});
|
|
156
|
+
}
|
|
157
|
+
export { Calendar, CalendarDayButton };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { Calendar, CalendarDayButton } from "./calendar.js";
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { ButtonPropsT } from "../button/types.js";
|
|
2
|
+
import { ComponentProps } from "react";
|
|
3
|
+
import { DateRange, DayButtonProps, DayPicker, DayPickerLocale } from "react-day-picker";
|
|
4
|
+
/**
|
|
5
|
+
* Выбранный период: from — начало, to — конец
|
|
6
|
+
*/
|
|
7
|
+
export type CalendarRangeT = DateRange;
|
|
8
|
+
/**
|
|
9
|
+
* Пропсы календаря
|
|
10
|
+
*/
|
|
11
|
+
export type CalendarPropsT = ComponentProps<typeof DayPicker> & {
|
|
12
|
+
/** Вариант кнопок «назад» и «вперёд». По умолчанию ghost */
|
|
13
|
+
buttonVariant?: ButtonPropsT['variant'];
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* Пропсы кнопки дня
|
|
17
|
+
*/
|
|
18
|
+
export type CalendarDayButtonPropsT = DayButtonProps & {
|
|
19
|
+
/** Локаль для data-day. По умолчанию — локаль календаря */
|
|
20
|
+
locale?: Partial<DayPickerLocale>;
|
|
21
|
+
};
|