@windmorph/react 0.0.0-stage → 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/NOTICE +23 -0
- package/README.md +149 -2
- package/dist/cli.d.ts +1 -0
- package/dist/cli.js +112 -0
- package/dist/cli.js.map +1 -0
- package/dist/components/app-bar/AppBarItems.js +23 -0
- package/dist/components/app-bar/AppBarItems.js.map +1 -0
- package/dist/components/app-bar/TopAppBar.d.ts +89 -0
- package/dist/components/app-bar/TopAppBar.js +103 -0
- package/dist/components/app-bar/TopAppBar.js.map +1 -0
- package/dist/components/app-bar/app-bar-styles.d.ts +280 -0
- package/dist/components/app-bar/app-bar-styles.js +142 -0
- package/dist/components/app-bar/app-bar-styles.js.map +1 -0
- package/dist/components/app-bar/app-bar-tokens.d.ts +7 -0
- package/dist/components/app-bar/app-bar-tokens.js +64 -0
- package/dist/components/app-bar/app-bar-tokens.js.map +1 -0
- package/dist/components/app-bar/use-app-bar-scroll.d.ts +6 -0
- package/dist/components/app-bar/use-app-bar-scroll.js +139 -0
- package/dist/components/app-bar/use-app-bar-scroll.js.map +1 -0
- package/dist/components/autocomplete/Autocomplete.d.ts +142 -0
- package/dist/components/autocomplete/Autocomplete.js +284 -0
- package/dist/components/autocomplete/Autocomplete.js.map +1 -0
- package/dist/components/badge/Badge.d.ts +71 -0
- package/dist/components/badge/Badge.js +72 -0
- package/dist/components/badge/Badge.js.map +1 -0
- package/dist/components/badge/badge-styles.d.ts +100 -0
- package/dist/components/badge/badge-styles.js +43 -0
- package/dist/components/badge/badge-styles.js.map +1 -0
- package/dist/components/badge/badge-tokens.d.ts +7 -0
- package/dist/components/badge/badge-tokens.js +40 -0
- package/dist/components/badge/badge-tokens.js.map +1 -0
- package/dist/components/button/Button.d.ts +91 -0
- package/dist/components/button/Button.js +96 -0
- package/dist/components/button/Button.js.map +1 -0
- package/dist/components/button/ButtonContext.d.ts +30 -0
- package/dist/components/button/ButtonContext.js +18 -0
- package/dist/components/button/ButtonContext.js.map +1 -0
- package/dist/components/button/DensityZeroButtons.js +25 -0
- package/dist/components/button/DensityZeroButtons.js.map +1 -0
- package/dist/components/button/button-pending.d.ts +10 -0
- package/dist/components/button/button-pending.js +166 -0
- package/dist/components/button/button-pending.js.map +1 -0
- package/dist/components/button/button-styles.d.ts +216 -0
- package/dist/components/button/button-styles.js +199 -0
- package/dist/components/button/button-styles.js.map +1 -0
- package/dist/components/button/button-tokens.d.ts +10 -0
- package/dist/components/button/button-tokens.js +257 -0
- package/dist/components/button/button-tokens.js.map +1 -0
- package/dist/components/button/connected-shapes.js +152 -0
- package/dist/components/button/connected-shapes.js.map +1 -0
- package/dist/components/card/Card.d.ts +60 -0
- package/dist/components/card/Card.js +69 -0
- package/dist/components/card/Card.js.map +1 -0
- package/dist/components/card/card-styles.d.ts +42 -0
- package/dist/components/card/card-styles.js +64 -0
- package/dist/components/card/card-styles.js.map +1 -0
- package/dist/components/card/card-tokens.d.ts +7 -0
- package/dist/components/card/card-tokens.js +84 -0
- package/dist/components/card/card-tokens.js.map +1 -0
- package/dist/components/carousel/Carousel.d.ts +124 -0
- package/dist/components/carousel/Carousel.js +387 -0
- package/dist/components/carousel/Carousel.js.map +1 -0
- package/dist/components/carousel/carousel-keylines.js +486 -0
- package/dist/components/carousel/carousel-keylines.js.map +1 -0
- package/dist/components/carousel/carousel-press-area.js +35 -0
- package/dist/components/carousel/carousel-press-area.js.map +1 -0
- package/dist/components/carousel/carousel-styles.d.ts +188 -0
- package/dist/components/carousel/carousel-styles.js +116 -0
- package/dist/components/carousel/carousel-styles.js.map +1 -0
- package/dist/components/carousel/carousel-tokens.d.ts +7 -0
- package/dist/components/carousel/carousel-tokens.js +18 -0
- package/dist/components/carousel/carousel-tokens.js.map +1 -0
- package/dist/components/checkbox/Checkbox.d.ts +78 -0
- package/dist/components/checkbox/Checkbox.js +77 -0
- package/dist/components/checkbox/Checkbox.js.map +1 -0
- package/dist/components/checkbox/checkbox-box.js +34 -0
- package/dist/components/checkbox/checkbox-box.js.map +1 -0
- package/dist/components/checkbox/checkbox-styles.d.ts +100 -0
- package/dist/components/checkbox/checkbox-styles.js +54 -0
- package/dist/components/checkbox/checkbox-styles.js.map +1 -0
- package/dist/components/checkbox/checkbox-tokens.d.ts +7 -0
- package/dist/components/checkbox/checkbox-tokens.js +41 -0
- package/dist/components/checkbox/checkbox-tokens.js.map +1 -0
- package/dist/components/chip/Chip.d.ts +171 -0
- package/dist/components/chip/Chip.js +348 -0
- package/dist/components/chip/Chip.js.map +1 -0
- package/dist/components/chip/ChipSet.d.ts +70 -0
- package/dist/components/chip/ChipSet.js +198 -0
- package/dist/components/chip/ChipSet.js.map +1 -0
- package/dist/components/chip/chip-styles.d.ts +263 -0
- package/dist/components/chip/chip-styles.js +360 -0
- package/dist/components/chip/chip-styles.js.map +1 -0
- package/dist/components/chip/chip-tokens.d.ts +13 -0
- package/dist/components/chip/chip-tokens.js +185 -0
- package/dist/components/chip/chip-tokens.js.map +1 -0
- package/dist/components/date-picker/CalendarGrid.js +94 -0
- package/dist/components/date-picker/CalendarGrid.js.map +1 -0
- package/dist/components/date-picker/CompactDateDialog.js +63 -0
- package/dist/components/date-picker/CompactDateDialog.js.map +1 -0
- package/dist/components/date-picker/DateField.d.ts +161 -0
- package/dist/components/date-picker/DateField.js +393 -0
- package/dist/components/date-picker/DateField.js.map +1 -0
- package/dist/components/date-picker/DateInput.d.ts +20 -0
- package/dist/components/date-picker/DateInput.js +99 -0
- package/dist/components/date-picker/DateInput.js.map +1 -0
- package/dist/components/date-picker/DatePicker.d.ts +165 -0
- package/dist/components/date-picker/DatePicker.js +492 -0
- package/dist/components/date-picker/DatePicker.js.map +1 -0
- package/dist/components/date-picker/PickerDialog.d.ts +121 -0
- package/dist/components/date-picker/PickerDialog.js +161 -0
- package/dist/components/date-picker/PickerDialog.js.map +1 -0
- package/dist/components/date-picker/calendar-parts.js +141 -0
- package/dist/components/date-picker/calendar-parts.js.map +1 -0
- package/dist/components/date-picker/date-format.js +72 -0
- package/dist/components/date-picker/date-format.js.map +1 -0
- package/dist/components/date-picker/date-picker-styles.d.ts +247 -0
- package/dist/components/date-picker/date-picker-styles.js +163 -0
- package/dist/components/date-picker/date-picker-styles.js.map +1 -0
- package/dist/components/date-picker/date-picker-tokens.d.ts +7 -0
- package/dist/components/date-picker/date-picker-tokens.js +104 -0
- package/dist/components/date-picker/date-picker-tokens.js.map +1 -0
- package/dist/components/date-picker/picker-dialog-context.js +8 -0
- package/dist/components/date-picker/picker-dialog-context.js.map +1 -0
- package/dist/components/date-picker/picker-dialog-styles.d.ts +95 -0
- package/dist/components/date-picker/picker-dialog-styles.js +57 -0
- package/dist/components/date-picker/picker-dialog-styles.js.map +1 -0
- package/dist/components/date-picker/picker-icons.js +24 -0
- package/dist/components/date-picker/picker-icons.js.map +1 -0
- package/dist/components/date-picker/use-media-query.js +21 -0
- package/dist/components/date-picker/use-media-query.js.map +1 -0
- package/dist/components/date-picker/use-size-transform.js +62 -0
- package/dist/components/date-picker/use-size-transform.js.map +1 -0
- package/dist/components/date-picker/use-view-exit.js +68 -0
- package/dist/components/date-picker/use-view-exit.js.map +1 -0
- package/dist/components/dialog/Dialog.d.ts +267 -0
- package/dist/components/dialog/Dialog.js +521 -0
- package/dist/components/dialog/Dialog.js.map +1 -0
- package/dist/components/dialog/dialog-styles.d.ts +335 -0
- package/dist/components/dialog/dialog-styles.js +377 -0
- package/dist/components/dialog/dialog-styles.js.map +1 -0
- package/dist/components/dialog/dialog-tokens.d.ts +7 -0
- package/dist/components/dialog/dialog-tokens.js +57 -0
- package/dist/components/dialog/dialog-tokens.js.map +1 -0
- package/dist/components/divider/Divider.d.ts +59 -0
- package/dist/components/divider/Divider.js +53 -0
- package/dist/components/divider/Divider.js.map +1 -0
- package/dist/components/divider/divider-styles.d.ts +90 -0
- package/dist/components/divider/divider-styles.js +66 -0
- package/dist/components/divider/divider-styles.js.map +1 -0
- package/dist/components/divider/divider-tokens.d.ts +7 -0
- package/dist/components/divider/divider-tokens.js +16 -0
- package/dist/components/divider/divider-tokens.js.map +1 -0
- package/dist/components/fab/Fab.d.ts +130 -0
- package/dist/components/fab/Fab.js +137 -0
- package/dist/components/fab/Fab.js.map +1 -0
- package/dist/components/fab/FabTooltip.js +36 -0
- package/dist/components/fab/FabTooltip.js.map +1 -0
- package/dist/components/fab/fab-styles.d.ts +286 -0
- package/dist/components/fab/fab-styles.js +131 -0
- package/dist/components/fab/fab-styles.js.map +1 -0
- package/dist/components/fab/fab-tokens.d.ts +12 -0
- package/dist/components/fab/fab-tokens.js +105 -0
- package/dist/components/fab/fab-tokens.js.map +1 -0
- package/dist/components/fab-menu/FabMenu.d.ts +156 -0
- package/dist/components/fab-menu/FabMenu.js +291 -0
- package/dist/components/fab-menu/FabMenu.js.map +1 -0
- package/dist/components/fab-menu/fab-menu-stagger.js +51 -0
- package/dist/components/fab-menu/fab-menu-stagger.js.map +1 -0
- package/dist/components/fab-menu/fab-menu-styles.d.ts +166 -0
- package/dist/components/fab-menu/fab-menu-styles.js +107 -0
- package/dist/components/fab-menu/fab-menu-styles.js.map +1 -0
- package/dist/components/fab-menu/fab-menu-tokens.d.ts +7 -0
- package/dist/components/fab-menu/fab-menu-tokens.js +120 -0
- package/dist/components/fab-menu/fab-menu-tokens.js.map +1 -0
- package/dist/components/icon-button/IconButton.d.ts +125 -0
- package/dist/components/icon-button/IconButton.js +112 -0
- package/dist/components/icon-button/IconButton.js.map +1 -0
- package/dist/components/icon-button/icon-button-styles.d.ts +217 -0
- package/dist/components/icon-button/icon-button-styles.js +244 -0
- package/dist/components/icon-button/icon-button-styles.js.map +1 -0
- package/dist/components/icon-button/icon-button-tokens.d.ts +11 -0
- package/dist/components/icon-button/icon-button-tokens.js +215 -0
- package/dist/components/icon-button/icon-button-tokens.js.map +1 -0
- package/dist/components/list/List.d.ts +265 -0
- package/dist/components/list/List.js +1386 -0
- package/dist/components/list/List.js.map +1 -0
- package/dist/components/list/ListMedia.d.ts +88 -0
- package/dist/components/list/ListMedia.js +132 -0
- package/dist/components/list/ListMedia.js.map +1 -0
- package/dist/components/list/list-styles.d.ts +375 -0
- package/dist/components/list/list-styles.js +220 -0
- package/dist/components/list/list-styles.js.map +1 -0
- package/dist/components/list/list-tokens.d.ts +7 -0
- package/dist/components/list/list-tokens.js +92 -0
- package/dist/components/list/list-tokens.js.map +1 -0
- package/dist/components/loading-indicator/LoadingIndicator.d.ts +65 -0
- package/dist/components/loading-indicator/LoadingIndicator.js +92 -0
- package/dist/components/loading-indicator/LoadingIndicator.js.map +1 -0
- package/dist/components/loading-indicator/lazy-loading-indicator.js +25 -0
- package/dist/components/loading-indicator/lazy-loading-indicator.js.map +1 -0
- package/dist/components/loading-indicator/loading-indicator-frames.js +149 -0
- package/dist/components/loading-indicator/loading-indicator-frames.js.map +1 -0
- package/dist/components/loading-indicator/loading-indicator-styles.d.ts +36 -0
- package/dist/components/loading-indicator/loading-indicator-styles.js +22 -0
- package/dist/components/loading-indicator/loading-indicator-styles.js.map +1 -0
- package/dist/components/loading-indicator/loading-indicator-tokens.d.ts +7 -0
- package/dist/components/loading-indicator/loading-indicator-tokens.js +44 -0
- package/dist/components/loading-indicator/loading-indicator-tokens.js.map +1 -0
- package/dist/components/menu/Menu.d.ts +215 -0
- package/dist/components/menu/Menu.js +715 -0
- package/dist/components/menu/Menu.js.map +1 -0
- package/dist/components/menu/menu-styles.d.ts +354 -0
- package/dist/components/menu/menu-styles.js +219 -0
- package/dist/components/menu/menu-styles.js.map +1 -0
- package/dist/components/menu/menu-tokens.d.ts +7 -0
- package/dist/components/menu/menu-tokens.js +93 -0
- package/dist/components/menu/menu-tokens.js.map +1 -0
- package/dist/components/menu/menu-trigger.d.ts +51 -0
- package/dist/components/menu/menu-trigger.js +100 -0
- package/dist/components/menu/menu-trigger.js.map +1 -0
- package/dist/components/menu/use-reveal-entering.js +42 -0
- package/dist/components/menu/use-reveal-entering.js.map +1 -0
- package/dist/components/navigation/NavItem.d.ts +54 -0
- package/dist/components/navigation/NavItem.js +182 -0
- package/dist/components/navigation/NavItem.js.map +1 -0
- package/dist/components/navigation/NavigationBar.d.ts +64 -0
- package/dist/components/navigation/NavigationBar.js +121 -0
- package/dist/components/navigation/NavigationBar.js.map +1 -0
- package/dist/components/navigation/NavigationRail.d.ts +91 -0
- package/dist/components/navigation/NavigationRail.js +285 -0
- package/dist/components/navigation/NavigationRail.js.map +1 -0
- package/dist/components/navigation/nav-item-styles.d.ts +190 -0
- package/dist/components/navigation/nav-item-styles.js +123 -0
- package/dist/components/navigation/nav-item-styles.js.map +1 -0
- package/dist/components/navigation/navigation-styles.d.ts +239 -0
- package/dist/components/navigation/navigation-styles.js +134 -0
- package/dist/components/navigation/navigation-styles.js.map +1 -0
- package/dist/components/navigation/navigation-tokens.d.ts +9 -0
- package/dist/components/navigation/navigation-tokens.js +114 -0
- package/dist/components/navigation/navigation-tokens.js.map +1 -0
- package/dist/components/navigation/use-hide-on-scroll.js +115 -0
- package/dist/components/navigation/use-hide-on-scroll.js.map +1 -0
- package/dist/components/navigation/use-item-arrow-keys.js +37 -0
- package/dist/components/navigation/use-item-arrow-keys.js.map +1 -0
- package/dist/components/navigation/use-rail-item-morph.js +61 -0
- package/dist/components/navigation/use-rail-item-morph.js.map +1 -0
- package/dist/components/progress/ProgressIndicator.d.ts +95 -0
- package/dist/components/progress/ProgressIndicator.js +426 -0
- package/dist/components/progress/ProgressIndicator.js.map +1 -0
- package/dist/components/progress/progress-geometry.js +285 -0
- package/dist/components/progress/progress-geometry.js.map +1 -0
- package/dist/components/progress/progress-styles.d.ts +81 -0
- package/dist/components/progress/progress-styles.js +43 -0
- package/dist/components/progress/progress-styles.js.map +1 -0
- package/dist/components/progress/progress-tokens.d.ts +7 -0
- package/dist/components/progress/progress-tokens.js +39 -0
- package/dist/components/progress/progress-tokens.js.map +1 -0
- package/dist/components/pull-to-refresh/PullToRefresh.d.ts +94 -0
- package/dist/components/pull-to-refresh/PullToRefresh.js +395 -0
- package/dist/components/pull-to-refresh/PullToRefresh.js.map +1 -0
- package/dist/components/pull-to-refresh/pull-to-refresh-math.js +37 -0
- package/dist/components/pull-to-refresh/pull-to-refresh-math.js.map +1 -0
- package/dist/components/pull-to-refresh/pull-to-refresh-styles.d.ts +53 -0
- package/dist/components/pull-to-refresh/pull-to-refresh-styles.js +14 -0
- package/dist/components/pull-to-refresh/pull-to-refresh-styles.js.map +1 -0
- package/dist/components/radio/RadioGroup.d.ts +121 -0
- package/dist/components/radio/RadioGroup.js +163 -0
- package/dist/components/radio/RadioGroup.js.map +1 -0
- package/dist/components/radio/radio-ring.js +21 -0
- package/dist/components/radio/radio-ring.js.map +1 -0
- package/dist/components/radio/radio-styles.d.ts +155 -0
- package/dist/components/radio/radio-styles.js +60 -0
- package/dist/components/radio/radio-styles.js.map +1 -0
- package/dist/components/radio/radio-tokens.d.ts +7 -0
- package/dist/components/radio/radio-tokens.js +31 -0
- package/dist/components/radio/radio-tokens.js.map +1 -0
- package/dist/components/search/SearchAppBar.d.ts +45 -0
- package/dist/components/search/SearchAppBar.js +61 -0
- package/dist/components/search/SearchAppBar.js.map +1 -0
- package/dist/components/search/SearchBar.d.ts +147 -0
- package/dist/components/search/SearchBar.js +412 -0
- package/dist/components/search/SearchBar.js.map +1 -0
- package/dist/components/search/search-styles.d.ts +243 -0
- package/dist/components/search/search-styles.js +143 -0
- package/dist/components/search/search-styles.js.map +1 -0
- package/dist/components/search/search-tokens.d.ts +9 -0
- package/dist/components/search/search-tokens.js +70 -0
- package/dist/components/search/search-tokens.js.map +1 -0
- package/dist/components/select/Select.d.ts +187 -0
- package/dist/components/select/Select.js +319 -0
- package/dist/components/select/Select.js.map +1 -0
- package/dist/components/select/field-shell.d.ts +29 -0
- package/dist/components/select/field-shell.js +135 -0
- package/dist/components/select/field-shell.js.map +1 -0
- package/dist/components/select/option-list.d.ts +81 -0
- package/dist/components/select/option-list.js +291 -0
- package/dist/components/select/option-list.js.map +1 -0
- package/dist/components/select/search-list.js +135 -0
- package/dist/components/select/search-list.js.map +1 -0
- package/dist/components/select/selection-cap.js +30 -0
- package/dist/components/select/selection-cap.js.map +1 -0
- package/dist/components/sheet/BottomSheet.d.ts +154 -0
- package/dist/components/sheet/BottomSheet.js +442 -0
- package/dist/components/sheet/BottomSheet.js.map +1 -0
- package/dist/components/sheet/SheetTrigger.d.ts +25 -0
- package/dist/components/sheet/SheetTrigger.js +46 -0
- package/dist/components/sheet/SheetTrigger.js.map +1 -0
- package/dist/components/sheet/SideSheet.d.ts +139 -0
- package/dist/components/sheet/SideSheet.js +289 -0
- package/dist/components/sheet/SideSheet.js.map +1 -0
- package/dist/components/sheet/bottom-sheet-gesture.js +30 -0
- package/dist/components/sheet/bottom-sheet-gesture.js.map +1 -0
- package/dist/components/sheet/lazy-bottom-sheet.js +33 -0
- package/dist/components/sheet/lazy-bottom-sheet.js.map +1 -0
- package/dist/components/sheet/sheet-gesture.js +48 -0
- package/dist/components/sheet/sheet-gesture.js.map +1 -0
- package/dist/components/sheet/sheet-icons.js +31 -0
- package/dist/components/sheet/sheet-icons.js.map +1 -0
- package/dist/components/sheet/sheet-settle.js +58 -0
- package/dist/components/sheet/sheet-settle.js.map +1 -0
- package/dist/components/sheet/sheet-styles.d.ts +312 -0
- package/dist/components/sheet/sheet-styles.js +229 -0
- package/dist/components/sheet/sheet-styles.js.map +1 -0
- package/dist/components/sheet/sheet-tokens.d.ts +12 -0
- package/dist/components/sheet/sheet-tokens.js +115 -0
- package/dist/components/sheet/sheet-tokens.js.map +1 -0
- package/dist/components/sheet/side-swipe-gesture.js +22 -0
- package/dist/components/sheet/side-swipe-gesture.js.map +1 -0
- package/dist/components/sheet/use-peek-inert.js +32 -0
- package/dist/components/sheet/use-peek-inert.js.map +1 -0
- package/dist/components/sheet/use-side-swipe.js +174 -0
- package/dist/components/sheet/use-side-swipe.js.map +1 -0
- package/dist/components/slider/Slider.d.ts +129 -0
- package/dist/components/slider/Slider.js +295 -0
- package/dist/components/slider/Slider.js.map +1 -0
- package/dist/components/slider/slider-geometry.js +138 -0
- package/dist/components/slider/slider-geometry.js.map +1 -0
- package/dist/components/slider/slider-styles.d.ts +133 -0
- package/dist/components/slider/slider-styles.js +97 -0
- package/dist/components/slider/slider-styles.js.map +1 -0
- package/dist/components/slider/slider-tokens.d.ts +7 -0
- package/dist/components/slider/slider-tokens.js +66 -0
- package/dist/components/slider/slider-tokens.js.map +1 -0
- package/dist/components/slider/use-touch-track.js +138 -0
- package/dist/components/slider/use-touch-track.js.map +1 -0
- package/dist/components/snackbar/Snackbar.d.ts +96 -0
- package/dist/components/snackbar/Snackbar.js +253 -0
- package/dist/components/snackbar/Snackbar.js.map +1 -0
- package/dist/components/snackbar/snackbar-state.d.ts +58 -0
- package/dist/components/snackbar/snackbar-state.js +73 -0
- package/dist/components/snackbar/snackbar-state.js.map +1 -0
- package/dist/components/snackbar/snackbar-styles.d.ts +109 -0
- package/dist/components/snackbar/snackbar-styles.js +67 -0
- package/dist/components/snackbar/snackbar-styles.js.map +1 -0
- package/dist/components/snackbar/snackbar-tokens.d.ts +7 -0
- package/dist/components/snackbar/snackbar-tokens.js +54 -0
- package/dist/components/snackbar/snackbar-tokens.js.map +1 -0
- package/dist/components/split-button/SplitButton.d.ts +109 -0
- package/dist/components/split-button/SplitButton.js +195 -0
- package/dist/components/split-button/SplitButton.js.map +1 -0
- package/dist/components/split-button/split-button-styles.d.ts +214 -0
- package/dist/components/split-button/split-button-styles.js +164 -0
- package/dist/components/split-button/split-button-styles.js.map +1 -0
- package/dist/components/split-button/split-button-tokens.d.ts +7 -0
- package/dist/components/split-button/split-button-tokens.js +36 -0
- package/dist/components/split-button/split-button-tokens.js.map +1 -0
- package/dist/components/switch/Switch.d.ts +82 -0
- package/dist/components/switch/Switch.js +165 -0
- package/dist/components/switch/Switch.js.map +1 -0
- package/dist/components/switch/switch-styles.d.ts +96 -0
- package/dist/components/switch/switch-styles.js +68 -0
- package/dist/components/switch/switch-styles.js.map +1 -0
- package/dist/components/switch/switch-thumb.js +41 -0
- package/dist/components/switch/switch-thumb.js.map +1 -0
- package/dist/components/switch/switch-tokens.d.ts +7 -0
- package/dist/components/switch/switch-tokens.js +78 -0
- package/dist/components/switch/switch-tokens.js.map +1 -0
- package/dist/components/tabs/Tabs.d.ts +120 -0
- package/dist/components/tabs/Tabs.js +346 -0
- package/dist/components/tabs/Tabs.js.map +1 -0
- package/dist/components/tabs/tabs-styles.d.ts +198 -0
- package/dist/components/tabs/tabs-styles.js +99 -0
- package/dist/components/tabs/tabs-styles.js.map +1 -0
- package/dist/components/tabs/tabs-tokens.d.ts +7 -0
- package/dist/components/tabs/tabs-tokens.js +121 -0
- package/dist/components/tabs/tabs-tokens.js.map +1 -0
- package/dist/components/text-field/TextField.d.ts +175 -0
- package/dist/components/text-field/TextField.js +250 -0
- package/dist/components/text-field/TextField.js.map +1 -0
- package/dist/components/text-field/text-field-styles.d.ts +252 -0
- package/dist/components/text-field/text-field-styles.js +209 -0
- package/dist/components/text-field/text-field-styles.js.map +1 -0
- package/dist/components/text-field/text-field-tokens.d.ts +7 -0
- package/dist/components/text-field/text-field-tokens.js +177 -0
- package/dist/components/text-field/text-field-tokens.js.map +1 -0
- package/dist/components/time-picker/TimePicker.d.ts +142 -0
- package/dist/components/time-picker/TimePicker.js +700 -0
- package/dist/components/time-picker/TimePicker.js.map +1 -0
- package/dist/components/time-picker/time-picker-styles.d.ts +175 -0
- package/dist/components/time-picker/time-picker-styles.js +112 -0
- package/dist/components/time-picker/time-picker-styles.js.map +1 -0
- package/dist/components/time-picker/time-picker-tokens.d.ts +7 -0
- package/dist/components/time-picker/time-picker-tokens.js +86 -0
- package/dist/components/time-picker/time-picker-tokens.js.map +1 -0
- package/dist/components/toolbar/Toolbar.d.ts +209 -0
- package/dist/components/toolbar/Toolbar.js +282 -0
- package/dist/components/toolbar/Toolbar.js.map +1 -0
- package/dist/components/toolbar/toolbar-styles.d.ts +403 -0
- package/dist/components/toolbar/toolbar-styles.js +253 -0
- package/dist/components/toolbar/toolbar-styles.js.map +1 -0
- package/dist/components/toolbar/toolbar-tokens.d.ts +27 -0
- package/dist/components/toolbar/toolbar-tokens.js +117 -0
- package/dist/components/toolbar/toolbar-tokens.js.map +1 -0
- package/dist/components/toolbar/use-toolbar-scroll-expansion.d.ts +56 -0
- package/dist/components/toolbar/use-toolbar-scroll-expansion.js +86 -0
- package/dist/components/toolbar/use-toolbar-scroll-expansion.js.map +1 -0
- package/dist/components/tooltip/Tooltip.d.ts +131 -0
- package/dist/components/tooltip/Tooltip.js +388 -0
- package/dist/components/tooltip/Tooltip.js.map +1 -0
- package/dist/components/tooltip/lazy-tooltip.js +35 -0
- package/dist/components/tooltip/lazy-tooltip.js.map +1 -0
- package/dist/components/tooltip/tooltip-placement.d.ts +16 -0
- package/dist/components/tooltip/tooltip-placement.js +14 -0
- package/dist/components/tooltip/tooltip-placement.js.map +1 -0
- package/dist/components/tooltip/tooltip-styles.d.ts +142 -0
- package/dist/components/tooltip/tooltip-styles.js +81 -0
- package/dist/components/tooltip/tooltip-styles.js.map +1 -0
- package/dist/components/tooltip/tooltip-tokens.d.ts +9 -0
- package/dist/components/tooltip/tooltip-tokens.js +72 -0
- package/dist/components/tooltip/tooltip-tokens.js.map +1 -0
- package/dist/components/tooltip/tooltip-trigger.d.ts +42 -0
- package/dist/components/tooltip/tooltip-trigger.js +115 -0
- package/dist/components/tooltip/tooltip-trigger.js.map +1 -0
- package/dist/composites/button-group/ButtonGroup.d.ts +116 -0
- package/dist/composites/button-group/ButtonGroup.js +270 -0
- package/dist/composites/button-group/ButtonGroup.js.map +1 -0
- package/dist/composites/button-group/button-group-styles.d.ts +73 -0
- package/dist/composites/button-group/button-group-styles.js +87 -0
- package/dist/composites/button-group/button-group-styles.js.map +1 -0
- package/dist/composites/button-group/lazy-overflow-menu.js +43 -0
- package/dist/composites/button-group/lazy-overflow-menu.js.map +1 -0
- package/dist/composites/button-group/overflow-menu-list.js +26 -0
- package/dist/composites/button-group/overflow-menu-list.js.map +1 -0
- package/dist/composites/button-group/use-overflow.js +75 -0
- package/dist/composites/button-group/use-overflow.js.map +1 -0
- package/dist/composites/button-group/use-press-expansion.js +155 -0
- package/dist/composites/button-group/use-press-expansion.js.map +1 -0
- package/dist/index.d.ts +142 -0
- package/dist/index.js +136 -0
- package/dist/motion/get-m3-spring.d.ts +6 -0
- package/dist/motion/get-m3-spring.js +10 -0
- package/dist/motion/get-m3-spring.js.map +1 -0
- package/dist/motion/reduced-motion.js +19 -0
- package/dist/motion/reduced-motion.js.map +1 -0
- package/dist/motion/use-m3-spring.d.ts +13 -0
- package/dist/motion/use-m3-spring.js +22 -0
- package/dist/motion/use-m3-spring.js.map +1 -0
- package/dist/next/NextRouterProvider.d.ts +13 -0
- package/dist/next/NextRouterProvider.js +26 -0
- package/dist/next/NextRouterProvider.js.map +1 -0
- package/dist/next/get-theme-from-cookies.d.ts +32 -0
- package/dist/next/get-theme-from-cookies.js +27 -0
- package/dist/next/get-theme-from-cookies.js.map +1 -0
- package/dist/next/navigation-guard.d.ts +30 -0
- package/dist/next/navigation-guard.js +68 -0
- package/dist/next/navigation-guard.js.map +1 -0
- package/dist/next.d.ts +5 -0
- package/dist/next.js +5 -0
- package/dist/primitives/ButtonBase.d.ts +115 -0
- package/dist/primitives/ButtonBase.js +231 -0
- package/dist/primitives/ButtonBase.js.map +1 -0
- package/dist/primitives/DomDirectionLocale.d.ts +18 -0
- package/dist/primitives/DomDirectionLocale.js +28 -0
- package/dist/primitives/DomDirectionLocale.js.map +1 -0
- package/dist/primitives/Field.d.ts +50 -0
- package/dist/primitives/Field.js +74 -0
- package/dist/primitives/Field.js.map +1 -0
- package/dist/primitives/IconFaces.js +23 -0
- package/dist/primitives/IconFaces.js.map +1 -0
- package/dist/primitives/Overlay.d.ts +39 -0
- package/dist/primitives/Overlay.js +86 -0
- package/dist/primitives/Overlay.js.map +1 -0
- package/dist/primitives/SelectionControl.d.ts +55 -0
- package/dist/primitives/SelectionControl.js +58 -0
- package/dist/primitives/SelectionControl.js.map +1 -0
- package/dist/primitives/Surface.d.ts +123 -0
- package/dist/primitives/Surface.js +68 -0
- package/dist/primitives/Surface.js.map +1 -0
- package/dist/primitives/ToolbarContext.js +12 -0
- package/dist/primitives/ToolbarContext.js.map +1 -0
- package/dist/primitives/TouchTarget.d.ts +14 -0
- package/dist/primitives/TouchTarget.js +20 -0
- package/dist/primitives/TouchTarget.js.map +1 -0
- package/dist/primitives/TriggerContext.d.ts +34 -0
- package/dist/primitives/TriggerContext.js +24 -0
- package/dist/primitives/TriggerContext.js.map +1 -0
- package/dist/primitives/hidden-input-focus.js +27 -0
- package/dist/primitives/hidden-input-focus.js.map +1 -0
- package/dist/primitives/icon-faces-styles.d.ts +9 -0
- package/dist/primitives/icon-faces-styles.js +45 -0
- package/dist/primitives/icon-faces-styles.js.map +1 -0
- package/dist/primitives/locale-with-direction.d.ts +9 -0
- package/dist/primitives/locale-with-direction.js +17 -0
- package/dist/primitives/locale-with-direction.js.map +1 -0
- package/dist/primitives/morph-path.d.ts +25 -0
- package/dist/primitives/morph-path.js +38 -0
- package/dist/primitives/morph-path.js.map +1 -0
- package/dist/primitives/selection-control-styles.d.ts +54 -0
- package/dist/primitives/selection-control-styles.js +44 -0
- package/dist/primitives/selection-control-styles.js.map +1 -0
- package/dist/primitives/use-m3-interaction.d.ts +51 -0
- package/dist/primitives/use-m3-interaction.js +149 -0
- package/dist/primitives/use-m3-interaction.js.map +1 -0
- package/dist/primitives/use-m3-morph.d.ts +18 -0
- package/dist/primitives/use-m3-morph.js +36 -0
- package/dist/primitives/use-m3-morph.js.map +1 -0
- package/dist/primitives/use-presence.d.ts +19 -0
- package/dist/primitives/use-presence.js +37 -0
- package/dist/primitives/use-presence.js.map +1 -0
- package/dist/primitives.d.ts +36 -0
- package/dist/primitives.js +34 -0
- package/dist/shapes/corner-rounding.d.ts +13 -0
- package/dist/shapes/corner-rounding.js +18 -0
- package/dist/shapes/corner-rounding.js.map +1 -0
- package/dist/shapes/cubic.d.ts +52 -0
- package/dist/shapes/cubic.js +189 -0
- package/dist/shapes/cubic.js.map +1 -0
- package/dist/shapes/feature-mapping.js +80 -0
- package/dist/shapes/feature-mapping.js.map +1 -0
- package/dist/shapes/features.d.ts +23 -0
- package/dist/shapes/features.js +82 -0
- package/dist/shapes/features.js.map +1 -0
- package/dist/shapes/float-mapping.js +65 -0
- package/dist/shapes/float-mapping.js.map +1 -0
- package/dist/shapes/generated/material-shape-path-record.d.ts +11 -0
- package/dist/shapes/generated/material-shape-path-record.js +48 -0
- package/dist/shapes/generated/material-shape-path-record.js.map +1 -0
- package/dist/shapes/generated/material-shape-paths.d.ts +78 -0
- package/dist/shapes/generated/material-shape-paths.js +218 -0
- package/dist/shapes/generated/material-shape-paths.js.map +1 -0
- package/dist/shapes/mask.d.ts +14 -0
- package/dist/shapes/mask.js +24 -0
- package/dist/shapes/mask.js.map +1 -0
- package/dist/shapes/material-shapes.d.ts +11 -0
- package/dist/shapes/material-shapes.js +250 -0
- package/dist/shapes/material-shapes.js.map +1 -0
- package/dist/shapes/morph.d.ts +25 -0
- package/dist/shapes/morph.js +97 -0
- package/dist/shapes/morph.js.map +1 -0
- package/dist/shapes/path.d.ts +33 -0
- package/dist/shapes/path.js +47 -0
- package/dist/shapes/path.js.map +1 -0
- package/dist/shapes/point.d.ts +28 -0
- package/dist/shapes/point.js +103 -0
- package/dist/shapes/point.js.map +1 -0
- package/dist/shapes/polygon-measure.js +140 -0
- package/dist/shapes/polygon-measure.js.map +1 -0
- package/dist/shapes/rounded-polygon.d.ts +44 -0
- package/dist/shapes/rounded-polygon.js +278 -0
- package/dist/shapes/rounded-polygon.js.map +1 -0
- package/dist/shapes/shape-path.d.ts +15 -0
- package/dist/shapes/shapes.d.ts +53 -0
- package/dist/shapes/shapes.js +171 -0
- package/dist/shapes/shapes.js.map +1 -0
- package/dist/styles/generated/components.css +710 -0
- package/dist/styles/generated/theme.css +247 -0
- package/dist/styles/generated/themes.css +3361 -0
- package/dist/styles/generated/tokens.css +284 -0
- package/dist/styles/styles.css +15 -0
- package/dist/styles/utilities.css +283 -0
- package/dist/styles.compiled.css +2 -0
- package/dist/theme/ThemeProvider.d.ts +72 -0
- package/dist/theme/ThemeProvider.js +144 -0
- package/dist/theme/ThemeProvider.js.map +1 -0
- package/dist/theme/ThemeScope.d.ts +32 -0
- package/dist/theme/ThemeScope.js +67 -0
- package/dist/theme/ThemeScope.js.map +1 -0
- package/dist/theme/ThemeScript.d.ts +26 -0
- package/dist/theme/ThemeScript.js +44 -0
- package/dist/theme/ThemeScript.js.map +1 -0
- package/dist/theme/context.d.ts +32 -0
- package/dist/theme/context.js +47 -0
- package/dist/theme/context.js.map +1 -0
- package/dist/theme/create-theme.d.ts +60 -0
- package/dist/theme/create-theme.js +47 -0
- package/dist/theme/create-theme.js.map +1 -0
- package/dist/theme/css.js +54 -0
- package/dist/theme/css.js.map +1 -0
- package/dist/theme/parse-palettes.js +40 -0
- package/dist/theme/parse-palettes.js.map +1 -0
- package/dist/theme/scheme.d.ts +6 -0
- package/dist/theme/scheme.js +118 -0
- package/dist/theme/scheme.js.map +1 -0
- package/dist/theme/state.d.ts +38 -0
- package/dist/theme/state.js +93 -0
- package/dist/theme/state.js.map +1 -0
- package/dist/theme/storage.js +21 -0
- package/dist/theme/storage.js.map +1 -0
- package/dist/tokens/breakpoints.d.ts +15 -0
- package/dist/tokens/breakpoints.js +16 -0
- package/dist/tokens/breakpoints.js.map +1 -0
- package/dist/tokens/color.d.ts +104 -0
- package/dist/tokens/color.js +147 -0
- package/dist/tokens/color.js.map +1 -0
- package/dist/tokens/component.d.ts +110 -0
- package/dist/tokens/component.js +67 -0
- package/dist/tokens/component.js.map +1 -0
- package/dist/tokens/density.d.ts +20 -0
- package/dist/tokens/density.js +27 -0
- package/dist/tokens/density.js.map +1 -0
- package/dist/tokens/elevation.d.ts +44 -0
- package/dist/tokens/elevation.js +45 -0
- package/dist/tokens/elevation.js.map +1 -0
- package/dist/tokens/motion.d.ts +79 -0
- package/dist/tokens/motion.js +126 -0
- package/dist/tokens/motion.js.map +1 -0
- package/dist/tokens/shape.d.ts +22 -0
- package/dist/tokens/shape.js +22 -0
- package/dist/tokens/shape.js.map +1 -0
- package/dist/tokens/spring-velocity.d.ts +19 -0
- package/dist/tokens/spring-velocity.js +44 -0
- package/dist/tokens/spring-velocity.js.map +1 -0
- package/dist/tokens/state.d.ts +18 -0
- package/dist/tokens/state.js +19 -0
- package/dist/tokens/state.js.map +1 -0
- package/dist/tokens/typography.d.ts +64 -0
- package/dist/tokens/typography.js +60 -0
- package/dist/tokens/typography.js.map +1 -0
- package/dist/tokens/z-index.d.ts +17 -0
- package/dist/tokens/z-index.js +18 -0
- package/dist/tokens/z-index.js.map +1 -0
- package/dist/utils/announce.js +51 -0
- package/dist/utils/announce.js.map +1 -0
- package/dist/utils/assert-collection-children.js +26 -0
- package/dist/utils/assert-collection-children.js.map +1 -0
- package/dist/utils/closed-by.d.ts +9 -0
- package/dist/utils/closed-by.js +12 -0
- package/dist/utils/closed-by.js.map +1 -0
- package/dist/utils/cn.d.ts +31 -0
- package/dist/utils/cn.js +37 -0
- package/dist/utils/cn.js.map +1 -0
- package/dist/utils/composite-keys.js +32 -0
- package/dist/utils/composite-keys.js.map +1 -0
- package/dist/utils/focus-visible.js +14 -0
- package/dist/utils/focus-visible.js.map +1 -0
- package/dist/utils/focus.js +51 -0
- package/dist/utils/focus.js.map +1 -0
- package/dist/utils/focusable-disabled.js +12 -0
- package/dist/utils/focusable-disabled.js.map +1 -0
- package/dist/utils/keep-pressed-in-place.d.ts +60 -0
- package/dist/utils/keep-pressed-in-place.js +127 -0
- package/dist/utils/keep-pressed-in-place.js.map +1 -0
- package/dist/utils/load-on-demand.js +111 -0
- package/dist/utils/load-on-demand.js.map +1 -0
- package/dist/utils/merge-data-tokens.d.ts +9 -0
- package/dist/utils/merge-data-tokens.js +15 -0
- package/dist/utils/merge-data-tokens.js.map +1 -0
- package/dist/utils/natural-size.js +53 -0
- package/dist/utils/natural-size.js.map +1 -0
- package/dist/utils/nearest-reveal.js +28 -0
- package/dist/utils/nearest-reveal.js.map +1 -0
- package/dist/utils/placement.js +14 -0
- package/dist/utils/placement.js.map +1 -0
- package/dist/utils/radio-group-keys.js +74 -0
- package/dist/utils/radio-group-keys.js.map +1 -0
- package/dist/utils/rendered-description.js +17 -0
- package/dist/utils/rendered-description.js.map +1 -0
- package/dist/utils/root-props.d.ts +103 -0
- package/dist/utils/root-props.js +51 -0
- package/dist/utils/root-props.js.map +1 -0
- package/dist/utils/search.d.ts +11 -0
- package/dist/utils/search.js +18 -0
- package/dist/utils/search.js.map +1 -0
- package/dist/utils/shortcut.js +20 -0
- package/dist/utils/shortcut.js.map +1 -0
- package/dist/utils/split-data-attributes.d.ts +12 -0
- package/dist/utils/split-data-attributes.js +20 -0
- package/dist/utils/split-data-attributes.js.map +1 -0
- package/dist/utils/toolbar-keys.js +28 -0
- package/dist/utils/toolbar-keys.js.map +1 -0
- package/dist/utils/tv.d.ts +7 -0
- package/dist/utils/tv.js +9 -0
- package/dist/utils/tv.js.map +1 -0
- package/dist/utils/typeahead.js +64 -0
- package/dist/utils/typeahead.js.map +1 -0
- package/dist/utils/warn-once.js +30 -0
- package/dist/utils/warn-once.js.map +1 -0
- package/dist/vendor/material-color-utilities/blend/blend.js +88 -0
- package/dist/vendor/material-color-utilities/blend/blend.js.map +1 -0
- package/dist/vendor/material-color-utilities/contrast/contrast.js +131 -0
- package/dist/vendor/material-color-utilities/contrast/contrast.js.map +1 -0
- package/dist/vendor/material-color-utilities/dislike/dislike_analyzer.js +58 -0
- package/dist/vendor/material-color-utilities/dislike/dislike_analyzer.js.map +1 -0
- package/dist/vendor/material-color-utilities/dynamiccolor/color_spec_2021.js +620 -0
- package/dist/vendor/material-color-utilities/dynamiccolor/color_spec_2021.js.map +1 -0
- package/dist/vendor/material-color-utilities/dynamiccolor/color_spec_2025.js +786 -0
- package/dist/vendor/material-color-utilities/dynamiccolor/color_spec_2025.js.map +1 -0
- package/dist/vendor/material-color-utilities/dynamiccolor/contrast_curve.js +59 -0
- package/dist/vendor/material-color-utilities/dynamiccolor/contrast_curve.js.map +1 -0
- package/dist/vendor/material-color-utilities/dynamiccolor/dynamic_color.js +420 -0
- package/dist/vendor/material-color-utilities/dynamiccolor/dynamic_color.js.map +1 -0
- package/dist/vendor/material-color-utilities/dynamiccolor/dynamic_scheme.js +701 -0
- package/dist/vendor/material-color-utilities/dynamiccolor/dynamic_scheme.js.map +1 -0
- package/dist/vendor/material-color-utilities/dynamiccolor/material_dynamic_colors.js +374 -0
- package/dist/vendor/material-color-utilities/dynamiccolor/material_dynamic_colors.js.map +1 -0
- package/dist/vendor/material-color-utilities/dynamiccolor/tone_delta_pair.js +65 -0
- package/dist/vendor/material-color-utilities/dynamiccolor/tone_delta_pair.js.map +1 -0
- package/dist/vendor/material-color-utilities/dynamiccolor/variant.js +38 -0
- package/dist/vendor/material-color-utilities/dynamiccolor/variant.js.map +1 -0
- package/dist/vendor/material-color-utilities/hct/cam16.js +309 -0
- package/dist/vendor/material-color-utilities/hct/cam16.js.map +1 -0
- package/dist/vendor/material-color-utilities/hct/hct.js +148 -0
- package/dist/vendor/material-color-utilities/hct/hct.js.map +1 -0
- package/dist/vendor/material-color-utilities/hct/hct_solver.js +660 -0
- package/dist/vendor/material-color-utilities/hct/hct_solver.js.map +1 -0
- package/dist/vendor/material-color-utilities/hct/viewing_conditions.js +117 -0
- package/dist/vendor/material-color-utilities/hct/viewing_conditions.js.map +1 -0
- package/dist/vendor/material-color-utilities/index.js +51 -0
- package/dist/vendor/material-color-utilities/index.js.map +1 -0
- package/dist/vendor/material-color-utilities/palettes/core_palette.js +22 -0
- package/dist/vendor/material-color-utilities/palettes/core_palette.js.map +1 -0
- package/dist/vendor/material-color-utilities/palettes/tonal_palette.js +134 -0
- package/dist/vendor/material-color-utilities/palettes/tonal_palette.js.map +1 -0
- package/dist/vendor/material-color-utilities/scheme/scheme.js +21 -0
- package/dist/vendor/material-color-utilities/scheme/scheme.js.map +1 -0
- package/dist/vendor/material-color-utilities/scheme/scheme_android.js +21 -0
- package/dist/vendor/material-color-utilities/scheme/scheme_android.js.map +1 -0
- package/dist/vendor/material-color-utilities/scheme/scheme_content.js +22 -0
- package/dist/vendor/material-color-utilities/scheme/scheme_content.js.map +1 -0
- package/dist/vendor/material-color-utilities/scheme/scheme_expressive.js +38 -0
- package/dist/vendor/material-color-utilities/scheme/scheme_expressive.js.map +1 -0
- package/dist/vendor/material-color-utilities/scheme/scheme_fidelity.js +22 -0
- package/dist/vendor/material-color-utilities/scheme/scheme_fidelity.js.map +1 -0
- package/dist/vendor/material-color-utilities/scheme/scheme_fruit_salad.js +22 -0
- package/dist/vendor/material-color-utilities/scheme/scheme_fruit_salad.js.map +1 -0
- package/dist/vendor/material-color-utilities/scheme/scheme_monochrome.js +22 -0
- package/dist/vendor/material-color-utilities/scheme/scheme_monochrome.js.map +1 -0
- package/dist/vendor/material-color-utilities/scheme/scheme_neutral.js +36 -0
- package/dist/vendor/material-color-utilities/scheme/scheme_neutral.js.map +1 -0
- package/dist/vendor/material-color-utilities/scheme/scheme_rainbow.js +22 -0
- package/dist/vendor/material-color-utilities/scheme/scheme_rainbow.js.map +1 -0
- package/dist/vendor/material-color-utilities/scheme/scheme_tonal_spot.js +41 -0
- package/dist/vendor/material-color-utilities/scheme/scheme_tonal_spot.js.map +1 -0
- package/dist/vendor/material-color-utilities/scheme/scheme_vibrant.js +39 -0
- package/dist/vendor/material-color-utilities/scheme/scheme_vibrant.js.map +1 -0
- package/dist/vendor/material-color-utilities/score/score.js +115 -0
- package/dist/vendor/material-color-utilities/score/score.js.map +1 -0
- package/dist/vendor/material-color-utilities/temperature/temperature_cache.js +227 -0
- package/dist/vendor/material-color-utilities/temperature/temperature_cache.js.map +1 -0
- package/dist/vendor/material-color-utilities/utils/color_utils.js +246 -0
- package/dist/vendor/material-color-utilities/utils/color_utils.js.map +1 -0
- package/dist/vendor/material-color-utilities/utils/image_utils.js +21 -0
- package/dist/vendor/material-color-utilities/utils/image_utils.js.map +1 -0
- package/dist/vendor/material-color-utilities/utils/math_utils.js +119 -0
- package/dist/vendor/material-color-utilities/utils/math_utils.js.map +1 -0
- package/dist/vendor/material-color-utilities/utils/string_utils.js +74 -0
- package/dist/vendor/material-color-utilities/utils/string_utils.js.map +1 -0
- package/dist/vendor/material-color-utilities/utils/theme_utils.js +24 -0
- package/dist/vendor/material-color-utilities/utils/theme_utils.js.map +1 -0
- package/package.json +114 -3
|
@@ -0,0 +1,250 @@
|
|
|
1
|
+
import { CornerRounding } from "./corner-rounding.js";
|
|
2
|
+
import { Point } from "./point.js";
|
|
3
|
+
import { RoundedPolygon } from "./rounded-polygon.js";
|
|
4
|
+
import { circle, rectangle, star } from "./shapes.js";
|
|
5
|
+
//#region src/shapes/material-shapes.ts
|
|
6
|
+
const cornerRound15 = new CornerRounding(.15);
|
|
7
|
+
const cornerRound20 = new CornerRounding(.2);
|
|
8
|
+
const cornerRound30 = new CornerRounding(.3);
|
|
9
|
+
const cornerRound50 = new CornerRounding(.5);
|
|
10
|
+
const cornerRound100 = new CornerRounding(1);
|
|
11
|
+
const toRadians = (degrees) => degrees / 360 * 2 * Math.PI;
|
|
12
|
+
/** Compose `Matrix().rotateZ(degrees)`: rotation about the origin. */
|
|
13
|
+
function rotate(degrees) {
|
|
14
|
+
const a = toRadians(degrees);
|
|
15
|
+
const c = Math.cos(a);
|
|
16
|
+
const s = Math.sin(a);
|
|
17
|
+
return (x, y) => [x * c - y * s, x * s + y * c];
|
|
18
|
+
}
|
|
19
|
+
function scale(sx, sy) {
|
|
20
|
+
return (x, y) => [x * sx, y * sy];
|
|
21
|
+
}
|
|
22
|
+
const rotateNeg45 = rotate(-45);
|
|
23
|
+
const rotateNeg90 = rotate(-90);
|
|
24
|
+
const rotateNeg135 = rotate(-135);
|
|
25
|
+
const pnr = (x, y, r = CornerRounding.Unrounded) => ({
|
|
26
|
+
o: new Point(x, y),
|
|
27
|
+
r
|
|
28
|
+
});
|
|
29
|
+
const angleDegrees = (p) => Math.atan2(p.y, p.x) * 180 / Math.PI;
|
|
30
|
+
function rotateDegrees(p, angle, center) {
|
|
31
|
+
const a = toRadians(angle);
|
|
32
|
+
const off = p.minus(center);
|
|
33
|
+
return new Point(off.x * Math.cos(a) - off.y * Math.sin(a), off.x * Math.sin(a) + off.y * Math.cos(a)).plus(center);
|
|
34
|
+
}
|
|
35
|
+
function doRepeat(points, reps, center, mirroring) {
|
|
36
|
+
const result = [];
|
|
37
|
+
if (mirroring) {
|
|
38
|
+
const angles = points.map((p) => angleDegrees(p.o.minus(center)));
|
|
39
|
+
const distances = points.map((p) => p.o.minus(center).getDistance());
|
|
40
|
+
const actualReps = reps * 2;
|
|
41
|
+
const sectionAngle = 360 / actualReps;
|
|
42
|
+
for (let it = 0; it < actualReps; it++) for (let index = 0; index < points.length; index++) {
|
|
43
|
+
const i = it % 2 === 0 ? index : points.length - 1 - index;
|
|
44
|
+
if (i > 0 || it % 2 === 0) {
|
|
45
|
+
const a = toRadians(sectionAngle * it + (it % 2 === 0 ? angles[i] : sectionAngle - angles[i] + 2 * angles[0]));
|
|
46
|
+
const finalPoint = new Point(Math.cos(a), Math.sin(a)).times(distances[i]).plus(center);
|
|
47
|
+
result.push({
|
|
48
|
+
o: finalPoint,
|
|
49
|
+
r: points[i].r
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
} else {
|
|
54
|
+
const np = points.length;
|
|
55
|
+
for (let it = 0; it < np * reps; it++) {
|
|
56
|
+
const point = rotateDegrees(points[it % np].o, Math.floor(it / np) * 360 / reps, center);
|
|
57
|
+
result.push({
|
|
58
|
+
o: point,
|
|
59
|
+
r: points[it % np].r
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
return result;
|
|
64
|
+
}
|
|
65
|
+
function customPolygon(points, reps, { center = new Point(.5, .5), mirroring = false } = {}) {
|
|
66
|
+
const actualPoints = doRepeat(points, reps, center, mirroring);
|
|
67
|
+
return RoundedPolygon.fromVertices(actualPoints.flatMap((p) => [p.o.x, p.o.y]), {
|
|
68
|
+
perVertexRounding: actualPoints.map((p) => p.r),
|
|
69
|
+
centerX: center.x,
|
|
70
|
+
centerY: center.y
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
const builders = {
|
|
74
|
+
Circle: () => circle({ numVertices: 10 }),
|
|
75
|
+
Square: () => rectangle({
|
|
76
|
+
width: 1,
|
|
77
|
+
height: 1,
|
|
78
|
+
rounding: cornerRound30
|
|
79
|
+
}),
|
|
80
|
+
Slanted: () => customPolygon([pnr(.926, .97, new CornerRounding(.189, .811)), pnr(-.021, .967, new CornerRounding(.187, .057))], 2),
|
|
81
|
+
Arch: () => RoundedPolygon.fromNumVertices(4, { perVertexRounding: [
|
|
82
|
+
cornerRound100,
|
|
83
|
+
cornerRound100,
|
|
84
|
+
cornerRound20,
|
|
85
|
+
cornerRound20
|
|
86
|
+
] }).transformed(rotateNeg135),
|
|
87
|
+
Fan: () => customPolygon([
|
|
88
|
+
pnr(1.004, 1, new CornerRounding(.148, .417)),
|
|
89
|
+
pnr(0, 1, new CornerRounding(.151)),
|
|
90
|
+
pnr(0, -.003, new CornerRounding(.148)),
|
|
91
|
+
pnr(.978, .02, new CornerRounding(.803))
|
|
92
|
+
], 1),
|
|
93
|
+
Arrow: () => customPolygon([
|
|
94
|
+
pnr(.5, .892, new CornerRounding(.313)),
|
|
95
|
+
pnr(-.216, 1.05, new CornerRounding(.207)),
|
|
96
|
+
pnr(.499, -.16, new CornerRounding(.215, 1)),
|
|
97
|
+
pnr(1.225, 1.06, new CornerRounding(.211))
|
|
98
|
+
], 1),
|
|
99
|
+
SemiCircle: () => rectangle({
|
|
100
|
+
width: 1.6,
|
|
101
|
+
height: 1,
|
|
102
|
+
perVertexRounding: [
|
|
103
|
+
cornerRound20,
|
|
104
|
+
cornerRound20,
|
|
105
|
+
cornerRound100,
|
|
106
|
+
cornerRound100
|
|
107
|
+
]
|
|
108
|
+
}),
|
|
109
|
+
Oval: () => circle().transformed(scale(1, .64)).transformed(rotateNeg45),
|
|
110
|
+
Pill: () => customPolygon([
|
|
111
|
+
pnr(.961, .039, new CornerRounding(.426)),
|
|
112
|
+
pnr(1.001, .428),
|
|
113
|
+
pnr(1, .609, new CornerRounding(1))
|
|
114
|
+
], 2, { mirroring: true }),
|
|
115
|
+
Triangle: () => RoundedPolygon.fromNumVertices(3, { rounding: cornerRound20 }).transformed(rotateNeg90),
|
|
116
|
+
Diamond: () => customPolygon([pnr(.5, 1.096, new CornerRounding(.151, .524)), pnr(.04, .5, new CornerRounding(.159))], 2),
|
|
117
|
+
ClamShell: () => customPolygon([
|
|
118
|
+
pnr(.171, .841, new CornerRounding(.159)),
|
|
119
|
+
pnr(-.02, .5, new CornerRounding(.14)),
|
|
120
|
+
pnr(.17, .159, new CornerRounding(.159))
|
|
121
|
+
], 2),
|
|
122
|
+
Pentagon: () => customPolygon([
|
|
123
|
+
pnr(.5, -.009, new CornerRounding(.172)),
|
|
124
|
+
pnr(1.03, .365, new CornerRounding(.164)),
|
|
125
|
+
pnr(.828, .97, new CornerRounding(.169))
|
|
126
|
+
], 1, { mirroring: true }),
|
|
127
|
+
Gem: () => customPolygon([
|
|
128
|
+
pnr(.499, 1.023, new CornerRounding(.241, .778)),
|
|
129
|
+
pnr(-.005, .792, new CornerRounding(.208)),
|
|
130
|
+
pnr(.073, .258, new CornerRounding(.228)),
|
|
131
|
+
pnr(.433, -0, new CornerRounding(.491))
|
|
132
|
+
], 1, { mirroring: true }),
|
|
133
|
+
Sunny: () => star(8, {
|
|
134
|
+
innerRadius: .8,
|
|
135
|
+
rounding: cornerRound15
|
|
136
|
+
}),
|
|
137
|
+
VerySunny: () => customPolygon([pnr(.5, 1.08, new CornerRounding(.085)), pnr(.358, .843, new CornerRounding(.085))], 8),
|
|
138
|
+
Cookie4Sided: () => customPolygon([pnr(1.237, 1.236, new CornerRounding(.258)), pnr(.5, .918, new CornerRounding(.233))], 4),
|
|
139
|
+
Cookie6Sided: () => customPolygon([pnr(.723, .884, new CornerRounding(.394)), pnr(.5, 1.099, new CornerRounding(.398))], 6),
|
|
140
|
+
Cookie7Sided: () => star(7, {
|
|
141
|
+
innerRadius: .75,
|
|
142
|
+
rounding: cornerRound50
|
|
143
|
+
}).transformed(rotateNeg90),
|
|
144
|
+
Cookie9Sided: () => star(9, {
|
|
145
|
+
innerRadius: .8,
|
|
146
|
+
rounding: cornerRound50
|
|
147
|
+
}).transformed(rotateNeg90),
|
|
148
|
+
Cookie12Sided: () => star(12, {
|
|
149
|
+
innerRadius: .8,
|
|
150
|
+
rounding: cornerRound50
|
|
151
|
+
}).transformed(rotateNeg90),
|
|
152
|
+
Ghostish: () => customPolygon([
|
|
153
|
+
pnr(.5, 0, new CornerRounding(1)),
|
|
154
|
+
pnr(1, 0, new CornerRounding(1)),
|
|
155
|
+
pnr(1, 1.14, new CornerRounding(.254, .106)),
|
|
156
|
+
pnr(.575, .906, new CornerRounding(.253))
|
|
157
|
+
], 1, { mirroring: true }),
|
|
158
|
+
Clover4Leaf: () => customPolygon([pnr(.5, .074), pnr(.725, -.099, new CornerRounding(.476))], 4, { mirroring: true }),
|
|
159
|
+
Clover8Leaf: () => customPolygon([pnr(.5, .036), pnr(.758, -.101, new CornerRounding(.209))], 8),
|
|
160
|
+
Burst: () => customPolygon([pnr(.5, -.006, new CornerRounding(.006)), pnr(.592, .158, new CornerRounding(.006))], 12),
|
|
161
|
+
SoftBurst: () => customPolygon([pnr(.193, .277, new CornerRounding(.053)), pnr(.176, .055, new CornerRounding(.053))], 10),
|
|
162
|
+
Boom: () => customPolygon([pnr(.457, .296, new CornerRounding(.007)), pnr(.5, -.051, new CornerRounding(.007))], 15),
|
|
163
|
+
SoftBoom: () => customPolygon([
|
|
164
|
+
pnr(.733, .454),
|
|
165
|
+
pnr(.839, .437, new CornerRounding(.532)),
|
|
166
|
+
pnr(.949, .449, new CornerRounding(.439, 1)),
|
|
167
|
+
pnr(.998, .478, new CornerRounding(.174))
|
|
168
|
+
], 16, { mirroring: true }),
|
|
169
|
+
Flower: () => customPolygon([
|
|
170
|
+
pnr(.37, .187),
|
|
171
|
+
pnr(.416, .049, new CornerRounding(.381)),
|
|
172
|
+
pnr(.479, .001, new CornerRounding(.095))
|
|
173
|
+
], 8, { mirroring: true }),
|
|
174
|
+
Puffy: () => customPolygon([
|
|
175
|
+
pnr(.5, .053),
|
|
176
|
+
pnr(.545, -.04, new CornerRounding(.405)),
|
|
177
|
+
pnr(.67, -.035, new CornerRounding(.426)),
|
|
178
|
+
pnr(.717, .066, new CornerRounding(.574)),
|
|
179
|
+
pnr(.722, .128),
|
|
180
|
+
pnr(.777, .002, new CornerRounding(.36)),
|
|
181
|
+
pnr(.914, .149, new CornerRounding(.66)),
|
|
182
|
+
pnr(.926, .289, new CornerRounding(.66)),
|
|
183
|
+
pnr(.881, .346),
|
|
184
|
+
pnr(.94, .344, new CornerRounding(.126)),
|
|
185
|
+
pnr(1.003, .437, new CornerRounding(.255))
|
|
186
|
+
], 2, { mirroring: true }).transformed(scale(1, .742)),
|
|
187
|
+
PuffyDiamond: () => customPolygon([
|
|
188
|
+
pnr(.87, .13, new CornerRounding(.146)),
|
|
189
|
+
pnr(.818, .357),
|
|
190
|
+
pnr(1, .332, new CornerRounding(.853))
|
|
191
|
+
], 4, { mirroring: true }),
|
|
192
|
+
PixelCircle: () => customPolygon([
|
|
193
|
+
pnr(.5, 0),
|
|
194
|
+
pnr(.704, 0),
|
|
195
|
+
pnr(.704, .065),
|
|
196
|
+
pnr(.843, .065),
|
|
197
|
+
pnr(.843, .148),
|
|
198
|
+
pnr(.926, .148),
|
|
199
|
+
pnr(.926, .296),
|
|
200
|
+
pnr(1, .296)
|
|
201
|
+
], 2, { mirroring: true }),
|
|
202
|
+
PixelTriangle: () => customPolygon([
|
|
203
|
+
pnr(.11, .5),
|
|
204
|
+
pnr(.113, 0),
|
|
205
|
+
pnr(.287, 0),
|
|
206
|
+
pnr(.287, .087),
|
|
207
|
+
pnr(.421, .087),
|
|
208
|
+
pnr(.421, .17),
|
|
209
|
+
pnr(.56, .17),
|
|
210
|
+
pnr(.56, .265),
|
|
211
|
+
pnr(.674, .265),
|
|
212
|
+
pnr(.675, .344),
|
|
213
|
+
pnr(.789, .344),
|
|
214
|
+
pnr(.789, .439),
|
|
215
|
+
pnr(.888, .439)
|
|
216
|
+
], 1, { mirroring: true }),
|
|
217
|
+
Bun: () => customPolygon([
|
|
218
|
+
pnr(.796, .5),
|
|
219
|
+
pnr(.853, .518, cornerRound100),
|
|
220
|
+
pnr(.992, .631, cornerRound100),
|
|
221
|
+
pnr(.968, 1, cornerRound100)
|
|
222
|
+
], 2, { mirroring: true }),
|
|
223
|
+
Heart: () => customPolygon([
|
|
224
|
+
pnr(.5, .268, new CornerRounding(.016)),
|
|
225
|
+
pnr(.792, -.066, new CornerRounding(.958)),
|
|
226
|
+
pnr(1.064, .276, new CornerRounding(1)),
|
|
227
|
+
pnr(.501, .946, new CornerRounding(.129))
|
|
228
|
+
], 1, { mirroring: true })
|
|
229
|
+
};
|
|
230
|
+
const names = Object.keys(builders);
|
|
231
|
+
const cache = /* @__PURE__ */ new Map();
|
|
232
|
+
/**
|
|
233
|
+
* The 35 Material 3 Expressive shapes, normalized to the unit square. Each shape is built
|
|
234
|
+
* on first access and cached.
|
|
235
|
+
*/
|
|
236
|
+
const MaterialShapes = Object.defineProperties({}, Object.fromEntries(names.map((name) => [name, {
|
|
237
|
+
enumerable: true,
|
|
238
|
+
get() {
|
|
239
|
+
let shape = cache.get(name);
|
|
240
|
+
if (!shape) {
|
|
241
|
+
shape = builders[name]().normalized();
|
|
242
|
+
cache.set(name, shape);
|
|
243
|
+
}
|
|
244
|
+
return shape;
|
|
245
|
+
}
|
|
246
|
+
}])));
|
|
247
|
+
//#endregion
|
|
248
|
+
export { MaterialShapes };
|
|
249
|
+
|
|
250
|
+
//# sourceMappingURL=material-shapes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"material-shapes.js","names":[],"sources":["../../src/shapes/material-shapes.ts"],"sourcesContent":["/*\n * Port of androidx.compose.material3 MaterialShapes.kt (Apache-2.0, see LICENSE-androidx.md).\n */\nimport { CornerRounding } from './corner-rounding';\nimport { Point, type PointTransformer } from './point';\nimport { RoundedPolygon } from './rounded-polygon';\nimport { circle, rectangle, star } from './shapes';\nimport type { MaterialShapeName } from './generated/material-shape-paths';\n\nexport type { MaterialShapeName };\n\nconst cornerRound15 = new CornerRounding(0.15);\nconst cornerRound20 = new CornerRounding(0.2);\nconst cornerRound30 = new CornerRounding(0.3);\nconst cornerRound50 = new CornerRounding(0.5);\nconst cornerRound100 = new CornerRounding(1);\n\nconst toRadians = (degrees: number) => (degrees / 360) * 2 * Math.PI;\n\n/** Compose `Matrix().rotateZ(degrees)`: rotation about the origin. */\nfunction rotate(degrees: number): PointTransformer {\n const a = toRadians(degrees);\n const c = Math.cos(a);\n const s = Math.sin(a);\n return (x, y) => [x * c - y * s, x * s + y * c];\n}\n\nfunction scale(sx: number, sy: number): PointTransformer {\n return (x, y) => [x * sx, y * sy];\n}\n\nconst rotateNeg45 = rotate(-45);\nconst rotateNeg90 = rotate(-90);\nconst rotateNeg135 = rotate(-135);\n\ninterface PointNRound {\n readonly o: Point;\n readonly r: CornerRounding;\n}\n\nconst pnr = (x: number, y: number, r: CornerRounding = CornerRounding.Unrounded): PointNRound => ({\n o: new Point(x, y),\n r,\n});\n\nconst angleDegrees = (p: Point) => (Math.atan2(p.y, p.x) * 180) / Math.PI;\n\nfunction rotateDegrees(p: Point, angle: number, center: Point): Point {\n const a = toRadians(angle);\n const off = p.minus(center);\n return new Point(\n off.x * Math.cos(a) - off.y * Math.sin(a),\n off.x * Math.sin(a) + off.y * Math.cos(a),\n ).plus(center);\n}\n\nfunction doRepeat(\n points: readonly PointNRound[],\n reps: number,\n center: Point,\n mirroring: boolean,\n): PointNRound[] {\n const result: PointNRound[] = [];\n if (mirroring) {\n const angles = points.map((p) => angleDegrees(p.o.minus(center)));\n const distances = points.map((p) => p.o.minus(center).getDistance());\n const actualReps = reps * 2;\n const sectionAngle = 360 / actualReps;\n for (let it = 0; it < actualReps; it++) {\n for (let index = 0; index < points.length; index++) {\n const i = it % 2 === 0 ? index : points.length - 1 - index;\n if (i > 0 || it % 2 === 0) {\n const a = toRadians(\n sectionAngle * it +\n (it % 2 === 0 ? angles[i]! : sectionAngle - angles[i]! + 2 * angles[0]!),\n );\n const finalPoint = new Point(Math.cos(a), Math.sin(a)).times(distances[i]!).plus(center);\n result.push({ o: finalPoint, r: points[i]!.r });\n }\n }\n }\n } else {\n const np = points.length;\n for (let it = 0; it < np * reps; it++) {\n const point = rotateDegrees(points[it % np]!.o, (Math.floor(it / np) * 360) / reps, center);\n result.push({ o: point, r: points[it % np]!.r });\n }\n }\n return result;\n}\n\nfunction customPolygon(\n points: readonly PointNRound[],\n reps: number,\n { center = new Point(0.5, 0.5), mirroring = false } = {},\n): RoundedPolygon {\n const actualPoints = doRepeat(points, reps, center, mirroring);\n return RoundedPolygon.fromVertices(\n actualPoints.flatMap((p) => [p.o.x, p.o.y]),\n {\n perVertexRounding: actualPoints.map((p) => p.r),\n centerX: center.x,\n centerY: center.y,\n },\n );\n}\n\nconst builders = {\n Circle: () => circle({ numVertices: 10 }),\n Square: () => rectangle({ width: 1, height: 1, rounding: cornerRound30 }),\n Slanted: () =>\n customPolygon(\n [\n pnr(0.926, 0.97, new CornerRounding(0.189, 0.811)),\n pnr(-0.021, 0.967, new CornerRounding(0.187, 0.057)),\n ],\n 2,\n ),\n Arch: () =>\n RoundedPolygon.fromNumVertices(4, {\n perVertexRounding: [cornerRound100, cornerRound100, cornerRound20, cornerRound20],\n }).transformed(rotateNeg135),\n Fan: () =>\n customPolygon(\n [\n pnr(1.004, 1.0, new CornerRounding(0.148, 0.417)),\n pnr(0.0, 1.0, new CornerRounding(0.151)),\n pnr(0.0, -0.003, new CornerRounding(0.148)),\n pnr(0.978, 0.02, new CornerRounding(0.803)),\n ],\n 1,\n ),\n Arrow: () =>\n customPolygon(\n [\n pnr(0.5, 0.892, new CornerRounding(0.313)),\n pnr(-0.216, 1.05, new CornerRounding(0.207)),\n pnr(0.499, -0.16, new CornerRounding(0.215, 1.0)),\n pnr(1.225, 1.06, new CornerRounding(0.211)),\n ],\n 1,\n ),\n SemiCircle: () =>\n rectangle({\n width: 1.6,\n height: 1,\n perVertexRounding: [cornerRound20, cornerRound20, cornerRound100, cornerRound100],\n }),\n Oval: () => circle().transformed(scale(1, 0.64)).transformed(rotateNeg45),\n Pill: () =>\n customPolygon(\n [\n pnr(0.961, 0.039, new CornerRounding(0.426)),\n pnr(1.001, 0.428),\n pnr(1.0, 0.609, new CornerRounding(1.0)),\n ],\n 2,\n { mirroring: true },\n ),\n Triangle: () =>\n RoundedPolygon.fromNumVertices(3, { rounding: cornerRound20 }).transformed(rotateNeg90),\n Diamond: () =>\n customPolygon(\n [\n pnr(0.5, 1.096, new CornerRounding(0.151, 0.524)),\n pnr(0.04, 0.5, new CornerRounding(0.159)),\n ],\n 2,\n ),\n ClamShell: () =>\n customPolygon(\n [\n pnr(0.171, 0.841, new CornerRounding(0.159)),\n pnr(-0.02, 0.5, new CornerRounding(0.14)),\n pnr(0.17, 0.159, new CornerRounding(0.159)),\n ],\n 2,\n ),\n Pentagon: () =>\n customPolygon(\n [\n pnr(0.5, -0.009, new CornerRounding(0.172)),\n pnr(1.03, 0.365, new CornerRounding(0.164)),\n pnr(0.828, 0.97, new CornerRounding(0.169)),\n ],\n 1,\n { mirroring: true },\n ),\n Gem: () =>\n customPolygon(\n [\n pnr(0.499, 1.023, new CornerRounding(0.241, 0.778)),\n pnr(-0.005, 0.792, new CornerRounding(0.208)),\n pnr(0.073, 0.258, new CornerRounding(0.228)),\n pnr(0.433, -0.0, new CornerRounding(0.491)),\n ],\n 1,\n { mirroring: true },\n ),\n Sunny: () => star(8, { innerRadius: 0.8, rounding: cornerRound15 }),\n VerySunny: () =>\n customPolygon(\n [pnr(0.5, 1.08, new CornerRounding(0.085)), pnr(0.358, 0.843, new CornerRounding(0.085))],\n 8,\n ),\n Cookie4Sided: () =>\n customPolygon(\n [pnr(1.237, 1.236, new CornerRounding(0.258)), pnr(0.5, 0.918, new CornerRounding(0.233))],\n 4,\n ),\n Cookie6Sided: () =>\n customPolygon(\n [pnr(0.723, 0.884, new CornerRounding(0.394)), pnr(0.5, 1.099, new CornerRounding(0.398))],\n 6,\n ),\n Cookie7Sided: () =>\n star(7, { innerRadius: 0.75, rounding: cornerRound50 }).transformed(rotateNeg90),\n Cookie9Sided: () =>\n star(9, { innerRadius: 0.8, rounding: cornerRound50 }).transformed(rotateNeg90),\n Cookie12Sided: () =>\n star(12, { innerRadius: 0.8, rounding: cornerRound50 }).transformed(rotateNeg90),\n Ghostish: () =>\n customPolygon(\n [\n pnr(0.5, 0, new CornerRounding(1.0)),\n pnr(1, 0, new CornerRounding(1.0)),\n pnr(1, 1.14, new CornerRounding(0.254, 0.106)),\n pnr(0.575, 0.906, new CornerRounding(0.253)),\n ],\n 1,\n { mirroring: true },\n ),\n Clover4Leaf: () =>\n customPolygon([pnr(0.5, 0.074), pnr(0.725, -0.099, new CornerRounding(0.476))], 4, {\n mirroring: true,\n }),\n Clover8Leaf: () =>\n customPolygon([pnr(0.5, 0.036), pnr(0.758, -0.101, new CornerRounding(0.209))], 8),\n Burst: () =>\n customPolygon(\n [pnr(0.5, -0.006, new CornerRounding(0.006)), pnr(0.592, 0.158, new CornerRounding(0.006))],\n 12,\n ),\n SoftBurst: () =>\n customPolygon(\n [pnr(0.193, 0.277, new CornerRounding(0.053)), pnr(0.176, 0.055, new CornerRounding(0.053))],\n 10,\n ),\n Boom: () =>\n customPolygon(\n [pnr(0.457, 0.296, new CornerRounding(0.007)), pnr(0.5, -0.051, new CornerRounding(0.007))],\n 15,\n ),\n SoftBoom: () =>\n customPolygon(\n [\n pnr(0.733, 0.454),\n pnr(0.839, 0.437, new CornerRounding(0.532)),\n pnr(0.949, 0.449, new CornerRounding(0.439, 1.0)),\n pnr(0.998, 0.478, new CornerRounding(0.174)),\n ],\n 16,\n { mirroring: true },\n ),\n Flower: () =>\n customPolygon(\n [\n pnr(0.37, 0.187),\n pnr(0.416, 0.049, new CornerRounding(0.381)),\n pnr(0.479, 0.001, new CornerRounding(0.095)),\n ],\n 8,\n { mirroring: true },\n ),\n Puffy: () =>\n customPolygon(\n [\n pnr(0.5, 0.053),\n pnr(0.545, -0.04, new CornerRounding(0.405)),\n pnr(0.67, -0.035, new CornerRounding(0.426)),\n pnr(0.717, 0.066, new CornerRounding(0.574)),\n pnr(0.722, 0.128),\n pnr(0.777, 0.002, new CornerRounding(0.36)),\n pnr(0.914, 0.149, new CornerRounding(0.66)),\n pnr(0.926, 0.289, new CornerRounding(0.66)),\n pnr(0.881, 0.346),\n pnr(0.94, 0.344, new CornerRounding(0.126)),\n pnr(1.003, 0.437, new CornerRounding(0.255)),\n ],\n 2,\n { mirroring: true },\n ).transformed(scale(1, 0.742)),\n PuffyDiamond: () =>\n customPolygon(\n [\n pnr(0.87, 0.13, new CornerRounding(0.146)),\n pnr(0.818, 0.357),\n pnr(1.0, 0.332, new CornerRounding(0.853)),\n ],\n 4,\n { mirroring: true },\n ),\n PixelCircle: () =>\n customPolygon(\n [\n pnr(0.5, 0.0),\n pnr(0.704, 0.0),\n pnr(0.704, 0.065),\n pnr(0.843, 0.065),\n pnr(0.843, 0.148),\n pnr(0.926, 0.148),\n pnr(0.926, 0.296),\n pnr(1.0, 0.296),\n ],\n 2,\n { mirroring: true },\n ),\n PixelTriangle: () =>\n customPolygon(\n [\n pnr(0.11, 0.5),\n pnr(0.113, 0.0),\n pnr(0.287, 0.0),\n pnr(0.287, 0.087),\n pnr(0.421, 0.087),\n pnr(0.421, 0.17),\n pnr(0.56, 0.17),\n pnr(0.56, 0.265),\n pnr(0.674, 0.265),\n pnr(0.675, 0.344),\n pnr(0.789, 0.344),\n pnr(0.789, 0.439),\n pnr(0.888, 0.439),\n ],\n 1,\n { mirroring: true },\n ),\n Bun: () =>\n customPolygon(\n [\n pnr(0.796, 0.5),\n pnr(0.853, 0.518, cornerRound100),\n pnr(0.992, 0.631, cornerRound100),\n pnr(0.968, 1.0, cornerRound100),\n ],\n 2,\n { mirroring: true },\n ),\n Heart: () =>\n customPolygon(\n [\n pnr(0.5, 0.268, new CornerRounding(0.016)),\n pnr(0.792, -0.066, new CornerRounding(0.958)),\n pnr(1.064, 0.276, new CornerRounding(1.0)),\n pnr(0.501, 0.946, new CornerRounding(0.129)),\n ],\n 1,\n { mirroring: true },\n ),\n} satisfies Record<MaterialShapeName, () => RoundedPolygon>;\n\n// The names tuple lives in the generated outlines module (`generated/material-shape-paths.ts`),\n// which `scripts/generate.ts` writes from these builders' keys, so static shapes can list the\n// names without loading the builders.\nconst names = Object.keys(builders) as MaterialShapeName[];\n\nconst cache = new Map<MaterialShapeName, RoundedPolygon>();\n\n/**\n * The 35 Material 3 Expressive shapes, normalized to the unit square. Each shape is built\n * on first access and cached.\n */\nexport const MaterialShapes = Object.defineProperties(\n {} as Readonly<Record<MaterialShapeName, RoundedPolygon>>,\n Object.fromEntries(\n names.map((name) => [\n name,\n {\n enumerable: true,\n get(): RoundedPolygon {\n let shape = cache.get(name);\n if (!shape) {\n shape = builders[name]().normalized();\n cache.set(name, shape);\n }\n return shape;\n },\n },\n ]),\n ),\n);\n"],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { Cubic, MutableCubic } from "./cubic.js";
|
|
2
|
+
import { RoundedPolygon } from "./rounded-polygon.js";
|
|
3
|
+
//#region src/shapes/morph.d.ts
|
|
4
|
+
/**
|
|
5
|
+
* Animates between two polygons. The outlines are matched corner to corner, and each matched
|
|
6
|
+
* pair of cubics is interpolated by `progress` (0 = `start`, 1 = `end`).
|
|
7
|
+
*/
|
|
8
|
+
export declare class Morph {
|
|
9
|
+
private readonly start;
|
|
10
|
+
private readonly end;
|
|
11
|
+
/** Matched start/end cubic pairs. */
|
|
12
|
+
readonly morphMatch: readonly (readonly [Cubic, Cubic])[];
|
|
13
|
+
constructor(start: RoundedPolygon, end: RoundedPolygon);
|
|
14
|
+
/** The bounds containing both shapes (and so every in-between shape). */
|
|
15
|
+
calculateBounds(bounds?: number[], approximate?: boolean): number[];
|
|
16
|
+
/** Bounds that contain both shapes at any rotation about their centers. */
|
|
17
|
+
calculateMaxBounds(bounds?: number[]): number[];
|
|
18
|
+
/** The in-between shape's cubics. The last anchor is snapped onto the first to close it. */
|
|
19
|
+
asCubics(progress: number): Cubic[];
|
|
20
|
+
/** Allocation-free iteration: `mutableCubic` is rewritten for every matched pair. */
|
|
21
|
+
forEachCubic(progress: number, callback: (cubic: MutableCubic) => void, mutableCubic?: MutableCubic): void;
|
|
22
|
+
static match(p1: RoundedPolygon, p2: RoundedPolygon): [Cubic, Cubic][];
|
|
23
|
+
}
|
|
24
|
+
//#endregion
|
|
25
|
+
//# sourceMappingURL=morph.d.ts.map
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import { interpolate, positiveModulo } from "./point.js";
|
|
2
|
+
import { Cubic, MutableCubic } from "./cubic.js";
|
|
3
|
+
import { featureMapper } from "./feature-mapping.js";
|
|
4
|
+
import { LengthMeasurer, MeasuredPolygon } from "./polygon-measure.js";
|
|
5
|
+
//#region src/shapes/morph.ts
|
|
6
|
+
/**
|
|
7
|
+
* Animates between two polygons. The outlines are matched corner to corner, and each matched
|
|
8
|
+
* pair of cubics is interpolated by `progress` (0 = `start`, 1 = `end`).
|
|
9
|
+
*/
|
|
10
|
+
var Morph = class Morph {
|
|
11
|
+
start;
|
|
12
|
+
end;
|
|
13
|
+
/** Matched start/end cubic pairs. */
|
|
14
|
+
morphMatch;
|
|
15
|
+
constructor(start, end) {
|
|
16
|
+
this.start = start;
|
|
17
|
+
this.end = end;
|
|
18
|
+
this.morphMatch = Morph.match(start, end);
|
|
19
|
+
}
|
|
20
|
+
/** The bounds containing both shapes (and so every in-between shape). */
|
|
21
|
+
calculateBounds(bounds = new Array(4).fill(0), approximate = true) {
|
|
22
|
+
this.start.calculateBounds(bounds, approximate);
|
|
23
|
+
const [minX, minY, maxX, maxY] = bounds;
|
|
24
|
+
this.end.calculateBounds(bounds, approximate);
|
|
25
|
+
return unionBounds(bounds, minX, minY, maxX, maxY);
|
|
26
|
+
}
|
|
27
|
+
/** Bounds that contain both shapes at any rotation about their centers. */
|
|
28
|
+
calculateMaxBounds(bounds = new Array(4).fill(0)) {
|
|
29
|
+
this.start.calculateMaxBounds(bounds);
|
|
30
|
+
const [minX, minY, maxX, maxY] = bounds;
|
|
31
|
+
this.end.calculateMaxBounds(bounds);
|
|
32
|
+
return unionBounds(bounds, minX, minY, maxX, maxY);
|
|
33
|
+
}
|
|
34
|
+
/** The in-between shape's cubics. The last anchor is snapped onto the first to close it. */
|
|
35
|
+
asCubics(progress) {
|
|
36
|
+
const result = [];
|
|
37
|
+
let firstCubic;
|
|
38
|
+
let lastCubic;
|
|
39
|
+
for (const [a, b] of this.morphMatch) {
|
|
40
|
+
const cubic = new Cubic(a.points.map((p, i) => interpolate(p, b.points[i], progress)));
|
|
41
|
+
firstCubic ??= cubic;
|
|
42
|
+
if (lastCubic) result.push(lastCubic);
|
|
43
|
+
lastCubic = cubic;
|
|
44
|
+
}
|
|
45
|
+
if (lastCubic && firstCubic) result.push(Cubic.of(lastCubic.anchor0X, lastCubic.anchor0Y, lastCubic.control0X, lastCubic.control0Y, lastCubic.control1X, lastCubic.control1Y, firstCubic.anchor0X, firstCubic.anchor0Y));
|
|
46
|
+
return result;
|
|
47
|
+
}
|
|
48
|
+
/** Allocation-free iteration: `mutableCubic` is rewritten for every matched pair. */
|
|
49
|
+
forEachCubic(progress, callback, mutableCubic = new MutableCubic()) {
|
|
50
|
+
for (const [a, b] of this.morphMatch) {
|
|
51
|
+
mutableCubic.interpolate(a, b, progress);
|
|
52
|
+
callback(mutableCubic);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
static match(p1, p2) {
|
|
56
|
+
const measuredPolygon1 = MeasuredPolygon.measurePolygon(new LengthMeasurer(), p1);
|
|
57
|
+
const measuredPolygon2 = MeasuredPolygon.measurePolygon(new LengthMeasurer(), p2);
|
|
58
|
+
const doubleMapper = featureMapper(measuredPolygon1.features, measuredPolygon2.features);
|
|
59
|
+
const polygon2CutPoint = doubleMapper.map(0);
|
|
60
|
+
const bs1 = measuredPolygon1;
|
|
61
|
+
const bs2 = measuredPolygon2.cutAndShift(polygon2CutPoint);
|
|
62
|
+
const ret = [];
|
|
63
|
+
let i1 = 0;
|
|
64
|
+
let i2 = 0;
|
|
65
|
+
let b1 = bs1.get(i1++);
|
|
66
|
+
let b2 = bs2.get(i2++);
|
|
67
|
+
while (b1 && b2) {
|
|
68
|
+
const b1a = i1 === bs1.size ? 1 : b1.endOutlineProgress;
|
|
69
|
+
const b2a = i2 === bs2.size ? 1 : doubleMapper.mapBack(positiveModulo(b2.endOutlineProgress + polygon2CutPoint, 1));
|
|
70
|
+
const minb = Math.min(b1a, b2a);
|
|
71
|
+
let seg1;
|
|
72
|
+
let newb1;
|
|
73
|
+
if (b1a > minb + 1e-6) [seg1, newb1] = b1.cutAtProgress(minb);
|
|
74
|
+
else [seg1, newb1] = [b1, bs1.get(i1++)];
|
|
75
|
+
let seg2;
|
|
76
|
+
let newb2;
|
|
77
|
+
if (b2a > minb + 1e-6) [seg2, newb2] = b2.cutAtProgress(positiveModulo(doubleMapper.map(minb) - polygon2CutPoint, 1));
|
|
78
|
+
else [seg2, newb2] = [b2, bs2.get(i2++)];
|
|
79
|
+
ret.push([seg1.cubic, seg2.cubic]);
|
|
80
|
+
b1 = newb1;
|
|
81
|
+
b2 = newb2;
|
|
82
|
+
}
|
|
83
|
+
if (b1 || b2) throw new Error("Expected both Polygon's Cubic to be fully matched");
|
|
84
|
+
return ret;
|
|
85
|
+
}
|
|
86
|
+
};
|
|
87
|
+
function unionBounds(bounds, minX, minY, maxX, maxY) {
|
|
88
|
+
bounds[0] = Math.min(minX, bounds[0]);
|
|
89
|
+
bounds[1] = Math.min(minY, bounds[1]);
|
|
90
|
+
bounds[2] = Math.max(maxX, bounds[2]);
|
|
91
|
+
bounds[3] = Math.max(maxY, bounds[3]);
|
|
92
|
+
return bounds;
|
|
93
|
+
}
|
|
94
|
+
//#endregion
|
|
95
|
+
export { Morph };
|
|
96
|
+
|
|
97
|
+
//# sourceMappingURL=morph.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"morph.js","names":[],"sources":["../../src/shapes/morph.ts"],"sourcesContent":["/*\n * Port of androidx.graphics.shapes Morph.kt (Apache-2.0, see LICENSE-androidx.md).\n */\nimport { Cubic, MutableCubic } from './cubic';\nimport { featureMapper } from './feature-mapping';\nimport { AngleEpsilon, interpolate, positiveModulo } from './point';\nimport { LengthMeasurer, MeasuredPolygon } from './polygon-measure';\nimport type { RoundedPolygon } from './rounded-polygon';\n\n/**\n * Animates between two polygons. The outlines are matched corner to corner, and each matched\n * pair of cubics is interpolated by `progress` (0 = `start`, 1 = `end`).\n */\nexport class Morph {\n /** Matched start/end cubic pairs. */\n readonly morphMatch: readonly (readonly [Cubic, Cubic])[];\n\n constructor(\n private readonly start: RoundedPolygon,\n private readonly end: RoundedPolygon,\n ) {\n this.morphMatch = Morph.match(start, end);\n }\n\n /** The bounds containing both shapes (and so every in-between shape). */\n calculateBounds(bounds: number[] = new Array(4).fill(0), approximate = true): number[] {\n this.start.calculateBounds(bounds, approximate);\n const [minX, minY, maxX, maxY] = bounds as [number, number, number, number];\n this.end.calculateBounds(bounds, approximate);\n return unionBounds(bounds, minX, minY, maxX, maxY);\n }\n\n /** Bounds that contain both shapes at any rotation about their centers. */\n calculateMaxBounds(bounds: number[] = new Array(4).fill(0)): number[] {\n this.start.calculateMaxBounds(bounds);\n const [minX, minY, maxX, maxY] = bounds as [number, number, number, number];\n this.end.calculateMaxBounds(bounds);\n return unionBounds(bounds, minX, minY, maxX, maxY);\n }\n\n /** The in-between shape's cubics. The last anchor is snapped onto the first to close it. */\n asCubics(progress: number): Cubic[] {\n const result: Cubic[] = [];\n let firstCubic: Cubic | undefined;\n let lastCubic: Cubic | undefined;\n for (const [a, b] of this.morphMatch) {\n const cubic = new Cubic(a.points.map((p, i) => interpolate(p, b.points[i]!, progress)));\n firstCubic ??= cubic;\n if (lastCubic) result.push(lastCubic);\n lastCubic = cubic;\n }\n if (lastCubic && firstCubic) {\n result.push(\n Cubic.of(\n lastCubic.anchor0X,\n lastCubic.anchor0Y,\n lastCubic.control0X,\n lastCubic.control0Y,\n lastCubic.control1X,\n lastCubic.control1Y,\n firstCubic.anchor0X,\n firstCubic.anchor0Y,\n ),\n );\n }\n return result;\n }\n\n /** Allocation-free iteration: `mutableCubic` is rewritten for every matched pair. */\n forEachCubic(\n progress: number,\n callback: (cubic: MutableCubic) => void,\n mutableCubic: MutableCubic = new MutableCubic(),\n ): void {\n for (const [a, b] of this.morphMatch) {\n mutableCubic.interpolate(a, b, progress);\n callback(mutableCubic);\n }\n }\n\n static match(p1: RoundedPolygon, p2: RoundedPolygon): [Cubic, Cubic][] {\n const measuredPolygon1 = MeasuredPolygon.measurePolygon(new LengthMeasurer(), p1);\n const measuredPolygon2 = MeasuredPolygon.measurePolygon(new LengthMeasurer(), p2);\n\n // Maps progress on either shape to the matching progress on the other.\n const doubleMapper = featureMapper(measuredPolygon1.features, measuredPolygon2.features);\n\n // Cut the second outline where progress 0 of the first one maps to, and rotate it so both\n // outlines start together.\n const polygon2CutPoint = doubleMapper.map(0);\n const bs1 = measuredPolygon1;\n const bs2 = measuredPolygon2.cutAndShift(polygon2CutPoint);\n\n const ret: [Cubic, Cubic][] = [];\n let i1 = 0;\n let i2 = 0;\n let b1 = bs1.get(i1++);\n let b2 = bs2.get(i2++);\n while (b1 && b2) {\n // Ending progress of each current cubic, from shape 1's perspective.\n const b1a = i1 === bs1.size ? 1 : b1.endOutlineProgress;\n const b2a =\n i2 === bs2.size\n ? 1\n : doubleMapper.mapBack(positiveModulo(b2.endOutlineProgress + polygon2CutPoint, 1));\n const minb = Math.min(b1a, b2a);\n // Whichever cubic extends past the one that ends first is cut there.\n let seg1;\n let newb1;\n if (b1a > minb + AngleEpsilon) [seg1, newb1] = b1.cutAtProgress(minb);\n else [seg1, newb1] = [b1, bs1.get(i1++)];\n let seg2;\n let newb2;\n if (b2a > minb + AngleEpsilon) {\n [seg2, newb2] = b2.cutAtProgress(\n positiveModulo(doubleMapper.map(minb) - polygon2CutPoint, 1),\n );\n } else {\n [seg2, newb2] = [b2, bs2.get(i2++)];\n }\n ret.push([seg1.cubic, seg2.cubic]);\n b1 = newb1;\n b2 = newb2;\n }\n if (b1 || b2) throw new Error(\"Expected both Polygon's Cubic to be fully matched\");\n return ret;\n }\n}\n\nfunction unionBounds(\n bounds: number[],\n minX: number,\n minY: number,\n maxX: number,\n maxY: number,\n): number[] {\n bounds[0] = Math.min(minX, bounds[0]!);\n bounds[1] = Math.min(minY, bounds[1]!);\n bounds[2] = Math.max(maxX, bounds[2]!);\n bounds[3] = Math.max(maxY, bounds[3]!);\n return bounds;\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { Cubic } from "./cubic.js";
|
|
2
|
+
import { RoundedPolygon } from "./rounded-polygon.js";
|
|
3
|
+
import { Morph } from "./morph.js";
|
|
4
|
+
//#region src/shapes/path.d.ts
|
|
5
|
+
export interface PathOptions {
|
|
6
|
+
/**
|
|
7
|
+
* Rotates the path about the rotation pivot so its first point sits at this angle, in
|
|
8
|
+
* degrees (clockwise from +x, as y points down). 0 leaves the path unrotated. Compose rotates
|
|
9
|
+
* about the origin and re-centers the outline afterwards; SVG has no such step, so this
|
|
10
|
+
* port rotates about the pivot directly.
|
|
11
|
+
*/
|
|
12
|
+
startAngle?: number;
|
|
13
|
+
/** Draws the outline twice before closing, for phased partial drawing. */
|
|
14
|
+
repeatPath?: boolean;
|
|
15
|
+
closePath?: boolean;
|
|
16
|
+
/** Scales the path, e.g. to map a normalized unit shape onto a viewBox. */
|
|
17
|
+
scale?: number;
|
|
18
|
+
/** Moves the path after scaling. */
|
|
19
|
+
translateX?: number;
|
|
20
|
+
translateY?: number;
|
|
21
|
+
}
|
|
22
|
+
export interface MorphPathOptions extends PathOptions {
|
|
23
|
+
rotationPivotX?: number;
|
|
24
|
+
rotationPivotY?: number;
|
|
25
|
+
}
|
|
26
|
+
/** SVG path data for a polygon, pivoting any rotation on its center. */
|
|
27
|
+
export declare function polygonToPath(polygon: RoundedPolygon, options?: PathOptions): string;
|
|
28
|
+
/** SVG path data for a morph at `progress`. */
|
|
29
|
+
export declare function morphToPath(morph: Morph, progress: number, options?: MorphPathOptions): string;
|
|
30
|
+
/** SVG path data for a list of connected cubics. */
|
|
31
|
+
export declare function cubicsToPath(cubics: readonly Cubic[], options?: MorphPathOptions): string;
|
|
32
|
+
//#endregion
|
|
33
|
+
//# sourceMappingURL=path.d.ts.map
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
//#region src/shapes/path.ts
|
|
2
|
+
/** SVG path data for a polygon, pivoting any rotation on its center. */
|
|
3
|
+
function polygonToPath(polygon, options = {}) {
|
|
4
|
+
return pathFromCubics(polygon.cubics, {
|
|
5
|
+
...options,
|
|
6
|
+
rotationPivotX: polygon.centerX,
|
|
7
|
+
rotationPivotY: polygon.centerY
|
|
8
|
+
});
|
|
9
|
+
}
|
|
10
|
+
/** SVG path data for a morph at `progress`. */
|
|
11
|
+
function morphToPath(morph, progress, options = {}) {
|
|
12
|
+
return pathFromCubics(morph.asCubics(progress), options);
|
|
13
|
+
}
|
|
14
|
+
const fmt = (n) => {
|
|
15
|
+
const r = Math.round(Number(n.toFixed(9)) * 1e4) / 1e4;
|
|
16
|
+
return Object.is(r, -0) ? "0" : String(r);
|
|
17
|
+
};
|
|
18
|
+
/** SVG path data for a list of connected cubics. */
|
|
19
|
+
function cubicsToPath(cubics, options = {}) {
|
|
20
|
+
return pathFromCubics(cubics, options);
|
|
21
|
+
}
|
|
22
|
+
function pathFromCubics(cubics, { startAngle = 0, repeatPath = false, closePath = true, scale = 1, translateX = 0, translateY = 0, rotationPivotX = 0, rotationPivotY = 0 }) {
|
|
23
|
+
if (cubics.length === 0) return "";
|
|
24
|
+
let transform = (x, y) => [x * scale + translateX, y * scale + translateY];
|
|
25
|
+
if (startAngle !== 0) {
|
|
26
|
+
const first = cubics[0];
|
|
27
|
+
const a = (-(Math.atan2(first.anchor0Y - rotationPivotY, first.anchor0X - rotationPivotX) * 180 / Math.PI) + startAngle) * Math.PI / 180;
|
|
28
|
+
const c = Math.cos(a);
|
|
29
|
+
const s = Math.sin(a);
|
|
30
|
+
transform = (x, y) => {
|
|
31
|
+
const dx = x - rotationPivotX;
|
|
32
|
+
const dy = y - rotationPivotY;
|
|
33
|
+
return [(rotationPivotX + dx * c - dy * s) * scale + translateX, (rotationPivotY + dx * s + dy * c) * scale + translateY];
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
const point = (x, y) => transform(x, y).map(fmt).join(" ");
|
|
37
|
+
const curve = (cubic) => `C${point(cubic.control0X, cubic.control0Y)} ${point(cubic.control1X, cubic.control1Y)} ${point(cubic.anchor1X, cubic.anchor1Y)}`;
|
|
38
|
+
const first = cubics[0];
|
|
39
|
+
const parts = [`M${point(first.anchor0X, first.anchor0Y)}`, ...cubics.map(curve)];
|
|
40
|
+
if (repeatPath) parts.push(`L${point(first.anchor0X, first.anchor0Y)}`, ...cubics.map(curve));
|
|
41
|
+
if (closePath) parts.push("Z");
|
|
42
|
+
return parts.join("");
|
|
43
|
+
}
|
|
44
|
+
//#endregion
|
|
45
|
+
export { cubicsToPath, morphToPath, polygonToPath };
|
|
46
|
+
|
|
47
|
+
//# sourceMappingURL=path.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"path.js","names":[],"sources":["../../src/shapes/path.ts"],"sourcesContent":["/*\n * Port of androidx.compose.material3 internal/ShapeUtil.kt (Apache-2.0, see\n * LICENSE-androidx.md), writing SVG path data instead of a Compose Path.\n */\nimport type { Cubic } from './cubic';\nimport type { Morph } from './morph';\nimport type { RoundedPolygon } from './rounded-polygon';\n\nexport interface PathOptions {\n /**\n * Rotates the path about the rotation pivot so its first point sits at this angle, in\n * degrees (clockwise from +x, as y points down). 0 leaves the path unrotated. Compose rotates\n * about the origin and re-centers the outline afterwards; SVG has no such step, so this\n * port rotates about the pivot directly.\n */\n startAngle?: number;\n /** Draws the outline twice before closing, for phased partial drawing. */\n repeatPath?: boolean;\n closePath?: boolean;\n /** Scales the path, e.g. to map a normalized unit shape onto a viewBox. */\n scale?: number;\n /** Moves the path after scaling. */\n translateX?: number;\n translateY?: number;\n}\n\nexport interface MorphPathOptions extends PathOptions {\n rotationPivotX?: number;\n rotationPivotY?: number;\n}\n\n/** SVG path data for a polygon, pivoting any rotation on its center. */\nexport function polygonToPath(polygon: RoundedPolygon, options: PathOptions = {}): string {\n return pathFromCubics(polygon.cubics, {\n ...options,\n rotationPivotX: polygon.centerX,\n rotationPivotY: polygon.centerY,\n });\n}\n\n/** SVG path data for a morph at `progress`. */\nexport function morphToPath(\n morph: Morph,\n progress: number,\n options: MorphPathOptions = {},\n): string {\n return pathFromCubics(morph.asCubics(progress), options);\n}\n\n// Four decimals stays sub-pixel even for unit-square shapes drawn large, and keeps paths short.\n// The value is first snapped to nine decimals: Node and browsers can differ in the last bits\n// of `Math.sin` / `Math.cos`, which can tip a coordinate sitting on a rounding boundary\n// (0.45625) either way, so a path rendered on the server wouldn't match the one hydrated.\nconst fmt = (n: number) => {\n const r = Math.round(Number(n.toFixed(9)) * 10000) / 10000;\n return Object.is(r, -0) ? '0' : String(r);\n};\n\n/** SVG path data for a list of connected cubics. */\nexport function cubicsToPath(cubics: readonly Cubic[], options: MorphPathOptions = {}): string {\n return pathFromCubics(cubics, options);\n}\n\nfunction pathFromCubics(\n cubics: readonly Cubic[],\n {\n startAngle = 0,\n repeatPath = false,\n closePath = true,\n scale = 1,\n translateX = 0,\n translateY = 0,\n rotationPivotX = 0,\n rotationPivotY = 0,\n }: MorphPathOptions,\n): string {\n if (cubics.length === 0) return '';\n let transform = (x: number, y: number): [number, number] => [\n x * scale + translateX,\n y * scale + translateY,\n ];\n if (startAngle !== 0) {\n const first = cubics[0]!;\n const angleToFirstCubic =\n (Math.atan2(first.anchor0Y - rotationPivotY, first.anchor0X - rotationPivotX) * 180) /\n Math.PI;\n const a = ((-angleToFirstCubic + startAngle) * Math.PI) / 180;\n const c = Math.cos(a);\n const s = Math.sin(a);\n transform = (x, y) => {\n const dx = x - rotationPivotX;\n const dy = y - rotationPivotY;\n return [\n (rotationPivotX + dx * c - dy * s) * scale + translateX,\n (rotationPivotY + dx * s + dy * c) * scale + translateY,\n ];\n };\n }\n const point = (x: number, y: number) => transform(x, y).map(fmt).join(' ');\n const curve = (cubic: Cubic) =>\n `C${point(cubic.control0X, cubic.control0Y)} ${point(cubic.control1X, cubic.control1Y)} ${point(cubic.anchor1X, cubic.anchor1Y)}`;\n\n const first = cubics[0]!;\n const parts = [`M${point(first.anchor0X, first.anchor0Y)}`, ...cubics.map(curve)];\n if (repeatPath) parts.push(`L${point(first.anchor0X, first.anchor0Y)}`, ...cubics.map(curve));\n if (closePath) parts.push('Z');\n return parts.join('');\n}\n"],"mappings":";;AAgCA,SAAgB,cAAc,SAAyB,UAAuB,CAAC,GAAW;CACxF,OAAO,eAAe,QAAQ,QAAQ;EACpC,GAAG;EACH,gBAAgB,QAAQ;EACxB,gBAAgB,QAAQ;CAC1B,CAAC;AACH;;AAGA,SAAgB,YACd,OACA,UACA,UAA4B,CAAC,GACrB;CACR,OAAO,eAAe,MAAM,SAAS,QAAQ,GAAG,OAAO;AACzD;AAMA,MAAM,OAAO,MAAc;CACzB,MAAM,IAAI,KAAK,MAAM,OAAO,EAAE,QAAQ,CAAC,CAAC,IAAI,GAAK,IAAI;CACrD,OAAO,OAAO,GAAG,GAAG,EAAE,IAAI,MAAM,OAAO,CAAC;AAC1C;;AAGA,SAAgB,aAAa,QAA0B,UAA4B,CAAC,GAAW;CAC7F,OAAO,eAAe,QAAQ,OAAO;AACvC;AAEA,SAAS,eACP,QACA,EACE,aAAa,GACb,aAAa,OACb,YAAY,MACZ,QAAQ,GACR,aAAa,GACb,aAAa,GACb,iBAAiB,GACjB,iBAAiB,KAEX;CACR,IAAI,OAAO,WAAW,GAAG,OAAO;CAChC,IAAI,aAAa,GAAW,MAAgC,CAC1D,IAAI,QAAQ,YACZ,IAAI,QAAQ,UACd;CACA,IAAI,eAAe,GAAG;EACpB,MAAM,QAAQ,OAAO;EAIrB,MAAM,KAAM,EAFT,KAAK,MAAM,MAAM,WAAW,gBAAgB,MAAM,WAAW,cAAc,IAAI,MAChF,KAAK,MAC0B,cAAc,KAAK,KAAM;EAC1D,MAAM,IAAI,KAAK,IAAI,CAAC;EACpB,MAAM,IAAI,KAAK,IAAI,CAAC;EACpB,aAAa,GAAG,MAAM;GACpB,MAAM,KAAK,IAAI;GACf,MAAM,KAAK,IAAI;GACf,OAAO,EACJ,iBAAiB,KAAK,IAAI,KAAK,KAAK,QAAQ,aAC5C,iBAAiB,KAAK,IAAI,KAAK,KAAK,QAAQ,UAC/C;EACF;CACF;CACA,MAAM,SAAS,GAAW,MAAc,UAAU,GAAG,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,KAAK,GAAG;CACzE,MAAM,SAAS,UACb,IAAI,MAAM,MAAM,WAAW,MAAM,SAAS,EAAE,GAAG,MAAM,MAAM,WAAW,MAAM,SAAS,EAAE,GAAG,MAAM,MAAM,UAAU,MAAM,QAAQ;CAEhI,MAAM,QAAQ,OAAO;CACrB,MAAM,QAAQ,CAAC,IAAI,MAAM,MAAM,UAAU,MAAM,QAAQ,KAAK,GAAG,OAAO,IAAI,KAAK,CAAC;CAChF,IAAI,YAAY,MAAM,KAAK,IAAI,MAAM,MAAM,UAAU,MAAM,QAAQ,KAAK,GAAG,OAAO,IAAI,KAAK,CAAC;CAC5F,IAAI,WAAW,MAAM,KAAK,GAAG;CAC7B,OAAO,MAAM,KAAK,EAAE;AACtB"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
//#region src/shapes/point.d.ts
|
|
2
|
+
/** An immutable 2D point or vector. */
|
|
3
|
+
export declare class Point {
|
|
4
|
+
readonly x: number;
|
|
5
|
+
readonly y: number;
|
|
6
|
+
constructor(x: number, y: number);
|
|
7
|
+
/** Distance from (0, 0). */
|
|
8
|
+
getDistance(): number;
|
|
9
|
+
getDistanceSquared(): number;
|
|
10
|
+
dotProduct(other: Point): number;
|
|
11
|
+
dotProductXY(otherX: number, otherY: number): number;
|
|
12
|
+
/** Whether `other` turns clockwise from this vector (z of the cross product > 0). */
|
|
13
|
+
clockwise(other: Point): boolean;
|
|
14
|
+
/** Unit vector in this direction. */
|
|
15
|
+
getDirection(): Point;
|
|
16
|
+
negate(): Point;
|
|
17
|
+
minus(other: Point): Point;
|
|
18
|
+
plus(other: Point): Point;
|
|
19
|
+
times(operand: number): Point;
|
|
20
|
+
div(operand: number): Point;
|
|
21
|
+
rem(operand: number): Point;
|
|
22
|
+
rotate90(): Point;
|
|
23
|
+
transformed(f: PointTransformer): Point;
|
|
24
|
+
}
|
|
25
|
+
/** Maps a point to a new point, e.g. to scale or rotate a shape. */
|
|
26
|
+
export type PointTransformer = (x: number, y: number) => readonly [number, number];
|
|
27
|
+
//#endregion
|
|
28
|
+
//# sourceMappingURL=point.d.ts.map
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
//#region src/shapes/point.ts
|
|
2
|
+
/** An immutable 2D point or vector. */
|
|
3
|
+
var Point = class Point {
|
|
4
|
+
x;
|
|
5
|
+
y;
|
|
6
|
+
constructor(x, y) {
|
|
7
|
+
this.x = x;
|
|
8
|
+
this.y = y;
|
|
9
|
+
}
|
|
10
|
+
/** Distance from (0, 0). */
|
|
11
|
+
getDistance() {
|
|
12
|
+
return Math.sqrt(this.x * this.x + this.y * this.y);
|
|
13
|
+
}
|
|
14
|
+
getDistanceSquared() {
|
|
15
|
+
return this.x * this.x + this.y * this.y;
|
|
16
|
+
}
|
|
17
|
+
dotProduct(other) {
|
|
18
|
+
return this.x * other.x + this.y * other.y;
|
|
19
|
+
}
|
|
20
|
+
dotProductXY(otherX, otherY) {
|
|
21
|
+
return this.x * otherX + this.y * otherY;
|
|
22
|
+
}
|
|
23
|
+
/** Whether `other` turns clockwise from this vector (z of the cross product > 0). */
|
|
24
|
+
clockwise(other) {
|
|
25
|
+
return this.x * other.y - this.y * other.x > 0;
|
|
26
|
+
}
|
|
27
|
+
/** Unit vector in this direction. */
|
|
28
|
+
getDirection() {
|
|
29
|
+
const d = this.getDistance();
|
|
30
|
+
if (!(d > 0)) throw new Error("Can't get the direction of a 0-length vector");
|
|
31
|
+
return this.div(d);
|
|
32
|
+
}
|
|
33
|
+
negate() {
|
|
34
|
+
return new Point(-this.x, -this.y);
|
|
35
|
+
}
|
|
36
|
+
minus(other) {
|
|
37
|
+
return new Point(this.x - other.x, this.y - other.y);
|
|
38
|
+
}
|
|
39
|
+
plus(other) {
|
|
40
|
+
return new Point(this.x + other.x, this.y + other.y);
|
|
41
|
+
}
|
|
42
|
+
times(operand) {
|
|
43
|
+
return new Point(this.x * operand, this.y * operand);
|
|
44
|
+
}
|
|
45
|
+
div(operand) {
|
|
46
|
+
return new Point(this.x / operand, this.y / operand);
|
|
47
|
+
}
|
|
48
|
+
rem(operand) {
|
|
49
|
+
return new Point(this.x % operand, this.y % operand);
|
|
50
|
+
}
|
|
51
|
+
rotate90() {
|
|
52
|
+
return new Point(-this.y, this.x);
|
|
53
|
+
}
|
|
54
|
+
transformed(f) {
|
|
55
|
+
const [x, y] = f(this.x, this.y);
|
|
56
|
+
return new Point(x, y);
|
|
57
|
+
}
|
|
58
|
+
};
|
|
59
|
+
const Zero = new Point(0, 0);
|
|
60
|
+
const DistanceEpsilon = 1e-4;
|
|
61
|
+
const AngleEpsilon = 1e-6;
|
|
62
|
+
const FloatPi = Math.PI;
|
|
63
|
+
const TwoPi = 2 * Math.PI;
|
|
64
|
+
function distance(x, y) {
|
|
65
|
+
return Math.sqrt(x * x + y * y);
|
|
66
|
+
}
|
|
67
|
+
function distanceSquared(x, y) {
|
|
68
|
+
return x * x + y * y;
|
|
69
|
+
}
|
|
70
|
+
/** Unit vector in the direction of (x, y). */
|
|
71
|
+
function directionVector(x, y) {
|
|
72
|
+
const d = distance(x, y);
|
|
73
|
+
if (!(d > 0)) throw new Error("Required distance greater than zero");
|
|
74
|
+
return new Point(x / d, y / d);
|
|
75
|
+
}
|
|
76
|
+
function directionVectorFromAngle(angleRadians) {
|
|
77
|
+
return new Point(Math.cos(angleRadians), Math.sin(angleRadians));
|
|
78
|
+
}
|
|
79
|
+
function radialToCartesian(radius, angleRadians, center = Zero) {
|
|
80
|
+
return directionVectorFromAngle(angleRadians).times(radius).plus(center);
|
|
81
|
+
}
|
|
82
|
+
function square(x) {
|
|
83
|
+
return x * x;
|
|
84
|
+
}
|
|
85
|
+
/** Linearly interpolates between `start` and `stop`. */
|
|
86
|
+
function interpolate(start, stop, fraction) {
|
|
87
|
+
return (1 - fraction) * start + fraction * stop;
|
|
88
|
+
}
|
|
89
|
+
function interpolatePoint(start, stop, fraction) {
|
|
90
|
+
return new Point(interpolate(start.x, stop.x, fraction), interpolate(start.y, stop.y, fraction));
|
|
91
|
+
}
|
|
92
|
+
/** Like `num % mod`, but always positive: positiveModulo(-4, 3) = 2. */
|
|
93
|
+
function positiveModulo(num, mod) {
|
|
94
|
+
return (num % mod + mod) % mod;
|
|
95
|
+
}
|
|
96
|
+
/** Approximates whether the corner at `current` is convex. */
|
|
97
|
+
function convex(previous, current, next) {
|
|
98
|
+
return current.minus(previous).clockwise(next.minus(current));
|
|
99
|
+
}
|
|
100
|
+
//#endregion
|
|
101
|
+
export { AngleEpsilon, DistanceEpsilon, FloatPi, Point, TwoPi, Zero, convex, directionVector, directionVectorFromAngle, distance, distanceSquared, interpolate, interpolatePoint, positiveModulo, radialToCartesian, square };
|
|
102
|
+
|
|
103
|
+
//# sourceMappingURL=point.js.map
|