mtrl 0.3.8 → 0.3.9
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/dist/LICENSE +21 -0
- package/dist/README.md +324 -0
- package/dist/components/badge/api.d.ts +48 -0
- package/{src/components/badge/badge.ts → dist/components/badge/badge.d.ts} +14 -57
- package/dist/components/badge/config.d.ts +79 -0
- package/dist/components/badge/constants.d.ts +35 -0
- package/dist/components/badge/features.d.ts +36 -0
- package/dist/components/badge/index.d.ts +8 -0
- package/dist/components/badge/types.d.ts +256 -0
- package/dist/components/bottom-app-bar/bottom-app-bar.d.ts +12 -0
- package/dist/components/bottom-app-bar/config.d.ts +16 -0
- package/dist/components/bottom-app-bar/constants.d.ts +22 -0
- package/{src/components/bottom-app-bar/index.ts → dist/components/bottom-app-bar/index.d.ts} +0 -9
- package/dist/components/bottom-app-bar/types.d.ts +96 -0
- package/dist/components/button/api.d.ts +47 -0
- package/dist/components/button/button.d.ts +25 -0
- package/dist/components/button/config.d.ts +59 -0
- package/dist/components/button/constants.d.ts +43 -0
- package/dist/components/button/index.d.ts +6 -0
- package/dist/components/button/types.d.ts +265 -0
- package/dist/components/card/api.d.ts +11 -0
- package/{src/components/card/card.ts → dist/components/card/card.d.ts} +10 -58
- package/dist/components/card/config.d.ts +105 -0
- package/dist/components/card/constants.d.ts +85 -0
- package/dist/components/card/content.d.ts +92 -0
- package/dist/components/card/features.d.ts +131 -0
- package/{src/components/card/index.ts → dist/components/card/index.d.ts} +13 -74
- package/dist/components/card/types.d.ts +471 -0
- package/dist/components/carousel/api.d.ts +33 -0
- package/dist/components/carousel/carousel.d.ts +75 -0
- package/dist/components/carousel/config.d.ts +45 -0
- package/dist/components/carousel/constants.d.ts +165 -0
- package/dist/components/carousel/features/drag.d.ts +8 -0
- package/{src/components/carousel/features/index.ts → dist/components/carousel/features/index.d.ts} +1 -4
- package/dist/components/carousel/features/slides.d.ts +8 -0
- package/{src/components/carousel/index.ts → dist/components/carousel/index.d.ts} +10 -29
- package/dist/components/carousel/types.d.ts +276 -0
- package/dist/components/checkbox/api.d.ts +7 -0
- package/dist/components/checkbox/checkbox.d.ts +65 -0
- package/dist/components/checkbox/config.d.ts +44 -0
- package/dist/components/checkbox/constants.d.ts +63 -0
- package/{src/components/checkbox/index.ts → dist/components/checkbox/index.d.ts} +8 -25
- package/dist/components/checkbox/types.d.ts +242 -0
- package/dist/components/chips/api.d.ts +49 -0
- package/dist/components/chips/chip/api.d.ts +23 -0
- package/dist/components/chips/chip/chip.d.ts +8 -0
- package/dist/components/chips/chip/config.d.ts +57 -0
- package/dist/components/chips/chip/constants.d.ts +38 -0
- package/dist/components/chips/chip/index.d.ts +2 -0
- package/dist/components/chips/chip/types.d.ts +11 -0
- package/dist/components/chips/chips.d.ts +17 -0
- package/dist/components/chips/config.d.ts +67 -0
- package/dist/components/chips/constants.d.ts +46 -0
- package/dist/components/chips/features/chip-items.d.ts +8 -0
- package/dist/components/chips/features/container.d.ts +8 -0
- package/dist/components/chips/features/controller.d.ts +9 -0
- package/{src/components/chips/features/index.ts → dist/components/chips/features/index.d.ts} +1 -2
- package/dist/components/chips/features/label.d.ts +8 -0
- package/dist/components/chips/index.d.ts +4 -0
- package/dist/components/chips/schema.d.ts +34 -0
- package/dist/components/chips/types.d.ts +398 -0
- package/dist/components/datepicker/api.d.ts +9 -0
- package/dist/components/datepicker/config.d.ts +79 -0
- package/dist/components/datepicker/constants.d.ts +97 -0
- package/dist/components/datepicker/datepicker.d.ts +8 -0
- package/dist/components/datepicker/index.d.ts +3 -0
- package/dist/components/datepicker/render.d.ts +43 -0
- package/dist/components/datepicker/types.d.ts +321 -0
- package/dist/components/datepicker/utils.d.ts +84 -0
- package/dist/components/dialog/api.d.ts +59 -0
- package/dist/components/dialog/config.d.ts +91 -0
- package/dist/components/dialog/constants.d.ts +116 -0
- package/{src/components/dialog/dialog.ts → dist/components/dialog/dialog.d.ts} +16 -69
- package/dist/components/dialog/features.d.ts +37 -0
- package/dist/components/dialog/index.d.ts +14 -0
- package/dist/components/dialog/types.d.ts +483 -0
- package/dist/components/divider/config.d.ts +143 -0
- package/dist/components/divider/constants.d.ts +45 -0
- package/{src/components/divider/divider.ts → dist/components/divider/divider.d.ts} +9 -37
- package/dist/components/divider/features.d.ts +50 -0
- package/{src/components/divider/index.ts → dist/components/divider/index.d.ts} +6 -12
- package/dist/components/divider/types.d.ts +124 -0
- package/dist/components/extended-fab/api.d.ts +83 -0
- package/dist/components/extended-fab/config.d.ts +75 -0
- package/dist/components/extended-fab/constants.d.ts +82 -0
- package/dist/components/extended-fab/extended-fab.d.ts +61 -0
- package/{src/components/extended-fab/index.ts → dist/components/extended-fab/index.d.ts} +6 -15
- package/dist/components/extended-fab/types.d.ts +703 -0
- package/dist/components/fab/api.d.ts +64 -0
- package/dist/components/fab/config.d.ts +71 -0
- package/dist/components/fab/constants.d.ts +75 -0
- package/{src/components/fab/fab.ts → dist/components/fab/fab.d.ts} +10 -46
- package/{src/components/fab/index.ts → dist/components/fab/index.d.ts} +6 -15
- package/dist/components/fab/types.d.ts +577 -0
- package/dist/components/index.d.ts +76 -0
- package/dist/components/list/api.d.ts +106 -0
- package/dist/components/list/config.d.ts +61 -0
- package/dist/components/list/constants.d.ts +76 -0
- package/dist/components/list/features/index.d.ts +2 -0
- package/dist/components/list/features/listmanager.d.ts +9 -0
- package/dist/components/list/features/selection.d.ts +9 -0
- package/dist/components/list/index.d.ts +12 -0
- package/dist/components/list/list.d.ts +11 -0
- package/dist/components/list/types.d.ts +294 -0
- package/dist/components/menu/api.d.ts +58 -0
- package/dist/components/menu/config.d.ts +78 -0
- package/dist/components/menu/constants.d.ts +106 -0
- package/dist/components/menu/features/controller.d.ts +10 -0
- package/dist/components/menu/features/index.d.ts +6 -0
- package/dist/components/menu/features/keyboard.d.ts +26 -0
- package/dist/components/menu/features/opener.d.ts +10 -0
- package/dist/components/menu/features/position.d.ts +18 -0
- package/dist/components/menu/features/submenu.d.ts +10 -0
- package/{src/components/menu/index.ts → dist/components/menu/index.d.ts} +11 -27
- package/dist/components/menu/menu.d.ts +29 -0
- package/dist/components/menu/types.d.ts +338 -0
- package/dist/components/navigation/api.d.ts +8 -0
- package/dist/components/navigation/config.d.ts +34 -0
- package/dist/components/navigation/constants.d.ts +137 -0
- package/dist/components/navigation/features/controller.d.ts +30 -0
- package/dist/components/navigation/features/items.d.ts +32 -0
- package/dist/components/navigation/index.d.ts +3 -0
- package/dist/components/navigation/nav-item.d.ts +30 -0
- package/dist/components/navigation/navigation.d.ts +8 -0
- package/dist/components/navigation/system/core.d.ts +72 -0
- package/dist/components/navigation/system/events.d.ts +35 -0
- package/dist/components/navigation/system/index.d.ts +10 -0
- package/dist/components/navigation/system/mobile.d.ts +52 -0
- package/dist/components/navigation/system/state.d.ts +22 -0
- package/dist/components/navigation/system/types.d.ts +305 -0
- package/dist/components/navigation/types.d.ts +216 -0
- package/dist/components/progress/api.d.ts +46 -0
- package/dist/components/progress/config.d.ts +63 -0
- package/dist/components/progress/constants.d.ts +58 -0
- package/dist/components/progress/index.d.ts +3 -0
- package/dist/components/progress/progress.d.ts +24 -0
- package/dist/components/progress/types.d.ts +199 -0
- package/dist/components/radios/api.d.ts +37 -0
- package/dist/components/radios/config.d.ts +42 -0
- package/dist/components/radios/constants.d.ts +114 -0
- package/dist/components/radios/index.d.ts +3 -0
- package/dist/components/radios/radio.d.ts +8 -0
- package/dist/components/radios/radios.d.ts +8 -0
- package/dist/components/radios/types.d.ts +189 -0
- package/dist/components/search/api.d.ts +55 -0
- package/dist/components/search/config.d.ts +73 -0
- package/dist/components/search/constants.d.ts +128 -0
- package/{src/components/search/features/index.ts → dist/components/search/features/index.d.ts} +1 -2
- package/dist/components/search/features/search.d.ts +7 -0
- package/dist/components/search/features/states.d.ts +8 -0
- package/dist/components/search/features/structure.d.ts +7 -0
- package/dist/components/search/index.d.ts +3 -0
- package/dist/components/search/search.d.ts +8 -0
- package/dist/components/search/types.d.ts +132 -0
- package/dist/components/segmented-button/config.d.ts +65 -0
- package/dist/components/segmented-button/constants.d.ts +85 -0
- package/dist/components/segmented-button/index.d.ts +4 -0
- package/dist/components/segmented-button/segment.d.ts +15 -0
- package/dist/components/segmented-button/segmented-button.d.ts +49 -0
- package/dist/components/segmented-button/types.d.ts +257 -0
- package/dist/components/select/api.d.ts +8 -0
- package/dist/components/select/config.d.ts +18 -0
- package/dist/components/select/constants.d.ts +113 -0
- package/dist/components/select/features.d.ts +13 -0
- package/{src/components/select/index.ts → dist/components/select/index.d.ts} +7 -20
- package/dist/components/select/select.d.ts +36 -0
- package/dist/components/select/types.d.ts +302 -0
- package/dist/components/sheet/api.d.ts +37 -0
- package/dist/components/sheet/config.d.ts +42 -0
- package/dist/components/sheet/constants.d.ts +136 -0
- package/dist/components/sheet/features/content.d.ts +6 -0
- package/dist/components/sheet/features/gestures.d.ts +6 -0
- package/{src/components/sheet/features/index.ts → dist/components/sheet/features/index.d.ts} +1 -2
- package/dist/components/sheet/features/position.d.ts +7 -0
- package/dist/components/sheet/features/state.d.ts +6 -0
- package/dist/components/sheet/features/title.d.ts +6 -0
- package/dist/components/sheet/index.d.ts +3 -0
- package/dist/components/sheet/sheet.d.ts +8 -0
- package/dist/components/sheet/types.d.ts +250 -0
- package/dist/components/slider/api.d.ts +57 -0
- package/dist/components/slider/config.d.ts +75 -0
- package/dist/components/slider/constants.d.ts +138 -0
- package/dist/components/slider/features/controller.d.ts +9 -0
- package/dist/components/slider/features/handlers.d.ts +25 -0
- package/dist/components/slider/features/index.d.ts +3 -0
- package/dist/components/slider/features/range.d.ts +8 -0
- package/dist/components/slider/features/states.d.ts +9 -0
- package/dist/components/slider/index.d.ts +3 -0
- package/dist/components/slider/schema.d.ts +108 -0
- package/dist/components/slider/slider.d.ts +18 -0
- package/dist/components/slider/types.d.ts +170 -0
- package/dist/components/snackbar/api.d.ts +7 -0
- package/dist/components/snackbar/config.d.ts +55 -0
- package/dist/components/snackbar/constants.d.ts +88 -0
- package/dist/components/snackbar/features.d.ts +13 -0
- package/dist/components/snackbar/index.d.ts +3 -0
- package/dist/components/snackbar/position.d.ts +15 -0
- package/dist/components/snackbar/queue.d.ts +7 -0
- package/dist/components/snackbar/snackbar.d.ts +8 -0
- package/dist/components/snackbar/types.d.ts +172 -0
- package/dist/components/switch/api.d.ts +7 -0
- package/dist/components/switch/config.d.ts +34 -0
- package/dist/components/switch/constants.d.ts +88 -0
- package/dist/components/switch/features.d.ts +59 -0
- package/dist/components/switch/index.d.ts +4 -0
- package/dist/components/switch/switch.d.ts +8 -0
- package/dist/components/switch/types.d.ts +131 -0
- package/dist/components/tabs/api.d.ts +52 -0
- package/dist/components/tabs/config.d.ts +39 -0
- package/dist/components/tabs/constants.d.ts +142 -0
- package/dist/components/tabs/features.d.ts +133 -0
- package/dist/components/tabs/index.d.ts +11 -0
- package/dist/components/tabs/indicator.d.ts +49 -0
- package/dist/components/tabs/responsive.d.ts +38 -0
- package/dist/components/tabs/scroll-indicators.d.ts +18 -0
- package/dist/components/tabs/state.d.ts +53 -0
- package/dist/components/tabs/tab-api.d.ts +43 -0
- package/dist/components/tabs/tab.d.ts +7 -0
- package/dist/components/tabs/tabs.d.ts +27 -0
- package/dist/components/tabs/types.d.ts +390 -0
- package/dist/components/tabs/utils.d.ts +17 -0
- package/dist/components/textfield/api.d.ts +8 -0
- package/dist/components/textfield/config.d.ts +34 -0
- package/dist/components/textfield/constants.d.ts +148 -0
- package/{src/components/textfield/features/index.ts → dist/components/textfield/features/index.d.ts} +1 -6
- package/dist/components/textfield/features/leading-icon.d.ts +55 -0
- package/dist/components/textfield/features/placement.d.ts +28 -0
- package/dist/components/textfield/features/prefix-text.d.ts +54 -0
- package/dist/components/textfield/features/suffix-text.d.ts +54 -0
- package/dist/components/textfield/features/supporting-text.d.ts +59 -0
- package/dist/components/textfield/features/trailing-icon.d.ts +55 -0
- package/dist/components/textfield/index.d.ts +3 -0
- package/dist/components/textfield/textfield.d.ts +36 -0
- package/dist/components/textfield/types.d.ts +217 -0
- package/dist/components/timepicker/api.d.ts +24 -0
- package/dist/components/timepicker/clockdial.d.ts +34 -0
- package/dist/components/timepicker/config.d.ts +75 -0
- package/dist/components/timepicker/constants.d.ts +266 -0
- package/dist/components/timepicker/index.d.ts +4 -0
- package/dist/components/timepicker/render.d.ts +9 -0
- package/dist/components/timepicker/timepicker.d.ts +8 -0
- package/dist/components/timepicker/types.d.ts +284 -0
- package/dist/components/timepicker/utils.d.ts +74 -0
- package/dist/components/tooltip/api.d.ts +18 -0
- package/dist/components/tooltip/config.d.ts +38 -0
- package/dist/components/tooltip/constants.d.ts +108 -0
- package/dist/components/tooltip/index.d.ts +3 -0
- package/dist/components/tooltip/tooltip.d.ts +8 -0
- package/dist/components/tooltip/types.d.ts +188 -0
- package/dist/components/top-app-bar/config.d.ts +16 -0
- package/dist/components/top-app-bar/constants.d.ts +74 -0
- package/{src/components/top-app-bar/index.ts → dist/components/top-app-bar/index.d.ts} +2 -4
- package/dist/components/top-app-bar/top-app-bar.d.ts +68 -0
- package/dist/components/top-app-bar/types.d.ts +118 -0
- package/dist/constants.d.ts +30 -0
- package/dist/core/collection/adapters/base.d.ts +47 -0
- package/dist/core/collection/adapters/route.d.ts +149 -0
- package/dist/core/collection/collection.d.ts +131 -0
- package/dist/core/collection/index.d.ts +10 -0
- package/dist/core/collection/list-manager/config.d.ts +29 -0
- package/dist/core/collection/list-manager/dom-elements.d.ts +30 -0
- package/dist/core/collection/list-manager/index.d.ts +61 -0
- package/dist/core/collection/list-manager/item-measurement.d.ts +91 -0
- package/dist/core/collection/list-manager/renderer.d.ts +31 -0
- package/dist/core/collection/list-manager/scroll-tracker.d.ts +20 -0
- package/dist/core/collection/list-manager/state.d.ts +60 -0
- package/dist/core/collection/list-manager/types.d.ts +361 -0
- package/dist/core/collection/list-manager/utils/recycling.d.ts +34 -0
- package/dist/core/collection/list-manager/utils/visibility.d.ts +45 -0
- package/dist/core/compose/base.d.ts +31 -0
- package/dist/core/compose/component.d.ts +61 -0
- package/dist/core/compose/features/badge.d.ts +43 -0
- package/dist/core/compose/features/checkable.d.ts +59 -0
- package/dist/core/compose/features/constants.d.ts +45 -0
- package/dist/core/compose/features/debounce.d.ts +84 -0
- package/dist/core/compose/features/disabled.d.ts +47 -0
- package/dist/core/compose/features/events.d.ts +37 -0
- package/dist/core/compose/features/gestures/longpress.d.ts +85 -0
- package/dist/core/compose/features/gestures/pan.d.ts +108 -0
- package/dist/core/compose/features/gestures/pinch.d.ts +111 -0
- package/dist/core/compose/features/gestures/rotate.d.ts +111 -0
- package/dist/core/compose/features/gestures/swipe.d.ts +149 -0
- package/dist/core/compose/features/gestures/tap.d.ts +79 -0
- package/dist/core/compose/features/gestures.d.ts +86 -0
- package/dist/core/compose/features/icon.d.ts +71 -0
- package/{src/core/compose/features/index.ts → dist/core/compose/features/index.d.ts} +7 -8
- package/dist/core/compose/features/input.d.ts +71 -0
- package/dist/core/compose/features/lifecycle.d.ts +61 -0
- package/dist/core/compose/features/position.d.ts +51 -0
- package/dist/core/compose/features/ripple.d.ts +61 -0
- package/dist/core/compose/features/size.d.ts +17 -0
- package/dist/core/compose/features/style.d.ts +16 -0
- package/dist/core/compose/features/text.d.ts +63 -0
- package/dist/core/compose/features/textinput.d.ts +93 -0
- package/dist/core/compose/features/textlabel.d.ts +57 -0
- package/dist/core/compose/features/throttle.d.ts +75 -0
- package/dist/core/compose/features/track.d.ts +42 -0
- package/dist/core/compose/features/variant.d.ts +17 -0
- package/dist/core/compose/features/withEvents.d.ts +45 -0
- package/dist/core/compose/index.d.ts +17 -0
- package/{src/core/compose/pipe.ts → dist/core/compose/pipe.d.ts} +4 -20
- package/dist/core/compose/utils/type-guards.d.ts +27 -0
- package/dist/core/composition/features/dom.d.ts +19 -0
- package/dist/core/composition/features/icon.d.ts +45 -0
- package/{src/core/composition/features/index.ts → dist/core/composition/features/index.d.ts} +1 -6
- package/dist/core/composition/features/label.d.ts +49 -0
- package/{src/core/composition/features/layout.ts → dist/core/composition/features/layout.d.ts} +8 -24
- package/{src/core/composition/index.ts → dist/core/composition/index.d.ts} +4 -14
- package/{src/core/config/component-config.ts → dist/core/config/component.d.ts} +34 -82
- package/dist/core/config.d.ts +130 -0
- package/{src/core/dom/attributes.ts → dist/core/dom/attributes.d.ts} +2 -13
- package/dist/core/dom/classes.d.ts +42 -0
- package/dist/core/dom/create.d.ts +124 -0
- package/dist/core/dom/events.d.ts +69 -0
- package/{src/core/dom/index.ts → dist/core/dom/index.d.ts} +1 -5
- package/dist/core/dom/utils.d.ts +42 -0
- package/dist/core/gestures/index.d.ts +12 -0
- package/dist/core/gestures/longpress.d.ts +23 -0
- package/dist/core/gestures/manager.d.ts +14 -0
- package/dist/core/gestures/pan.d.ts +12 -0
- package/dist/core/gestures/pinch.d.ts +14 -0
- package/dist/core/gestures/rotate.d.ts +14 -0
- package/dist/core/gestures/swipe.d.ts +20 -0
- package/dist/core/gestures/tap.d.ts +12 -0
- package/dist/core/gestures/types.d.ts +320 -0
- package/dist/core/gestures/utils.d.ts +57 -0
- package/dist/core/index.d.ts +29 -0
- package/dist/core/layout/array.d.ts +15 -0
- package/dist/core/layout/config.d.ts +32 -0
- package/dist/core/layout/create.d.ts +14 -0
- package/dist/core/layout/index.d.ts +13 -0
- package/dist/core/layout/jsx.d.ts +13 -0
- package/dist/core/layout/object.d.ts +14 -0
- package/dist/core/layout/processor.d.ts +28 -0
- package/dist/core/layout/result.d.ts +12 -0
- package/dist/core/layout/template.d.ts +12 -0
- package/dist/core/layout/types.d.ts +137 -0
- package/dist/core/layout/utils.d.ts +38 -0
- package/dist/core/state/disabled.d.ts +32 -0
- package/dist/core/state/emitter.d.ts +40 -0
- package/dist/core/state/events.d.ts +36 -0
- package/{src/core/state/index.ts → dist/core/state/index.d.ts} +1 -7
- package/dist/core/state/lifecycle.d.ts +57 -0
- package/dist/core/state/store.d.ts +82 -0
- package/dist/core/utils/background.d.ts +40 -0
- package/dist/core/utils/index.d.ts +23 -0
- package/dist/core/utils/mobile.d.ts +54 -0
- package/dist/core/utils/object.d.ts +13 -0
- package/dist/core/utils/performance.d.ts +79 -0
- package/dist/core/utils/validate.d.ts +73 -0
- package/dist/index.cjs +64 -0
- package/dist/index.cjs.map +285 -0
- package/dist/index.d.ts +15 -0
- package/dist/index.js +53 -14854
- package/dist/index.js.map +285 -0
- package/dist/package.json +39 -0
- package/dist/styles.css +7 -0
- package/package.json +23 -4
- package/.env +0 -15
- package/.typedocignore +0 -11
- package/CONTRIBUTING.md +0 -218
- package/DOCS.md +0 -153
- package/TESTING.md +0 -214
- package/git-user-stats.js +0 -545
- package/index.ts +0 -10
- package/src/components/badge/api.ts +0 -313
- package/src/components/badge/config.ts +0 -153
- package/src/components/badge/features.ts +0 -194
- package/src/components/badge/index.ts +0 -90
- package/src/components/badge/types.ts +0 -279
- package/src/components/bottom-app-bar/bottom-app-bar.ts +0 -154
- package/src/components/bottom-app-bar/config.ts +0 -29
- package/src/components/bottom-app-bar/types.ts +0 -114
- package/src/components/button/api.ts +0 -172
- package/src/components/button/button.ts +0 -112
- package/src/components/button/config.ts +0 -96
- package/src/components/button/index.ts +0 -37
- package/src/components/button/types.ts +0 -290
- package/src/components/card/api.ts +0 -222
- package/src/components/card/config.ts +0 -304
- package/src/components/card/content.ts +0 -343
- package/src/components/card/features.ts +0 -407
- package/src/components/card/types.ts +0 -497
- package/src/components/carousel/api.ts +0 -147
- package/src/components/carousel/carousel.ts +0 -242
- package/src/components/carousel/config.ts +0 -91
- package/src/components/carousel/constants.ts +0 -181
- package/src/components/carousel/features/drag.ts +0 -388
- package/src/components/carousel/features/slides.ts +0 -682
- package/src/components/carousel/types.ts +0 -327
- package/src/components/checkbox/api.ts +0 -82
- package/src/components/checkbox/checkbox.ts +0 -142
- package/src/components/checkbox/config.ts +0 -89
- package/src/components/checkbox/types.ts +0 -342
- package/src/components/chips/api.ts +0 -194
- package/src/components/chips/chip/api.ts +0 -233
- package/src/components/chips/chip/chip.ts +0 -131
- package/src/components/chips/chip/config.ts +0 -91
- package/src/components/chips/chip/index.ts +0 -3
- package/src/components/chips/chips.md +0 -481
- package/src/components/chips/chips.ts +0 -75
- package/src/components/chips/config.ts +0 -109
- package/src/components/chips/constants.ts +0 -61
- package/src/components/chips/features/chip-items.ts +0 -33
- package/src/components/chips/features/container.ts +0 -77
- package/src/components/chips/features/controller.ts +0 -448
- package/src/components/chips/features/label.ts +0 -108
- package/src/components/chips/index.ts +0 -11
- package/src/components/chips/schema.ts +0 -61
- package/src/components/chips/types.ts +0 -469
- package/src/components/datepicker/api.ts +0 -265
- package/src/components/datepicker/config.ts +0 -141
- package/src/components/datepicker/datepicker.ts +0 -341
- package/src/components/datepicker/index.ts +0 -12
- package/src/components/datepicker/render.ts +0 -450
- package/src/components/datepicker/types.ts +0 -397
- package/src/components/datepicker/utils.ts +0 -289
- package/src/components/dialog/api.ts +0 -317
- package/src/components/dialog/config.ts +0 -116
- package/src/components/dialog/features.ts +0 -907
- package/src/components/dialog/index.ts +0 -141
- package/src/components/dialog/types.ts +0 -553
- package/src/components/divider/config.ts +0 -165
- package/src/components/divider/features.ts +0 -233
- package/src/components/divider/types.ts +0 -132
- package/src/components/extended-fab/api.ts +0 -193
- package/src/components/extended-fab/config.ts +0 -140
- package/src/components/extended-fab/extended-fab.ts +0 -153
- package/src/components/extended-fab/types.ts +0 -749
- package/src/components/fab/api.ts +0 -137
- package/src/components/fab/config.ts +0 -121
- package/src/components/fab/types.ts +0 -615
- package/src/components/list/api.ts +0 -82
- package/src/components/list/config.ts +0 -63
- package/src/components/list/features.ts +0 -229
- package/src/components/list/index.ts +0 -67
- package/src/components/list/list-item.ts +0 -163
- package/src/components/list/list.ts +0 -108
- package/src/components/list/types.ts +0 -396
- package/src/components/list/utils.ts +0 -98
- package/src/components/menu/api.ts +0 -230
- package/src/components/menu/config.ts +0 -127
- package/src/components/menu/features/anchor.ts +0 -394
- package/src/components/menu/features/controller.ts +0 -1423
- package/src/components/menu/features/index.ts +0 -13
- package/src/components/menu/features/position.ts +0 -353
- package/src/components/menu/menu.ts +0 -121
- package/src/components/menu/types.ts +0 -392
- package/src/components/navigation/api.ts +0 -142
- package/src/components/navigation/config.ts +0 -73
- package/src/components/navigation/features/controller.ts +0 -273
- package/src/components/navigation/features/items.ts +0 -353
- package/src/components/navigation/index.ts +0 -11
- package/src/components/navigation/nav-item.ts +0 -196
- package/src/components/navigation/navigation.ts +0 -115
- package/src/components/navigation/system/core.ts +0 -302
- package/src/components/navigation/system/events.ts +0 -240
- package/src/components/navigation/system/index.ts +0 -184
- package/src/components/navigation/system/mobile.ts +0 -278
- package/src/components/navigation/system/state.ts +0 -77
- package/src/components/navigation/system/types.ts +0 -364
- package/src/components/navigation/types.ts +0 -292
- package/src/components/progress/api.ts +0 -178
- package/src/components/progress/config.ts +0 -122
- package/src/components/progress/index.ts +0 -4
- package/src/components/progress/progress.ts +0 -159
- package/src/components/progress/types.ts +0 -255
- package/src/components/radios/api.ts +0 -125
- package/src/components/radios/config.ts +0 -59
- package/src/components/radios/constants.ts +0 -19
- package/src/components/radios/index.ts +0 -3
- package/src/components/radios/radio.ts +0 -292
- package/src/components/radios/radios.ts +0 -43
- package/src/components/radios/types.ts +0 -219
- package/src/components/search/api.ts +0 -203
- package/src/components/search/config.ts +0 -86
- package/src/components/search/features/search.ts +0 -717
- package/src/components/search/features/states.ts +0 -169
- package/src/components/search/features/structure.ts +0 -197
- package/src/components/search/index.ts +0 -7
- package/src/components/search/search.ts +0 -52
- package/src/components/search/types.ts +0 -175
- package/src/components/segmented-button/config.ts +0 -119
- package/src/components/segmented-button/index.ts +0 -4
- package/src/components/segmented-button/segment.ts +0 -108
- package/src/components/segmented-button/segmented-button.ts +0 -361
- package/src/components/segmented-button/types.ts +0 -306
- package/src/components/select/api.ts +0 -78
- package/src/components/select/config.ts +0 -76
- package/src/components/select/features.ts +0 -331
- package/src/components/select/select.ts +0 -73
- package/src/components/select/types.ts +0 -355
- package/src/components/sheet/api.ts +0 -96
- package/src/components/sheet/config.ts +0 -65
- package/src/components/sheet/features/content.ts +0 -51
- package/src/components/sheet/features/gestures.ts +0 -177
- package/src/components/sheet/features/position.ts +0 -41
- package/src/components/sheet/features/state.ts +0 -116
- package/src/components/sheet/features/title.ts +0 -86
- package/src/components/sheet/index.ts +0 -12
- package/src/components/sheet/sheet.ts +0 -56
- package/src/components/sheet/types.ts +0 -294
- package/src/components/slider/accessibility.md +0 -59
- package/src/components/slider/api.ts +0 -192
- package/src/components/slider/config.ts +0 -118
- package/src/components/slider/features/controller.ts +0 -737
- package/src/components/slider/features/handlers.ts +0 -497
- package/src/components/slider/features/index.ts +0 -5
- package/src/components/slider/features/range.ts +0 -104
- package/src/components/slider/features/states.ts +0 -195
- package/src/components/slider/index.ts +0 -17
- package/src/components/slider/schema.ts +0 -141
- package/src/components/slider/slider.ts +0 -76
- package/src/components/slider/types.ts +0 -223
- package/src/components/snackbar/api.ts +0 -162
- package/src/components/snackbar/config.ts +0 -61
- package/src/components/snackbar/features.ts +0 -76
- package/src/components/snackbar/index.ts +0 -9
- package/src/components/snackbar/position.ts +0 -79
- package/src/components/snackbar/queue.ts +0 -76
- package/src/components/snackbar/snackbar.ts +0 -60
- package/src/components/snackbar/types.ts +0 -159
- package/src/components/switch/api.ts +0 -93
- package/src/components/switch/config.ts +0 -56
- package/src/components/switch/features.ts +0 -198
- package/src/components/switch/index.ts +0 -8
- package/src/components/switch/switch.ts +0 -52
- package/src/components/switch/types.ts +0 -168
- package/src/components/tabs/api.ts +0 -221
- package/src/components/tabs/config.ts +0 -73
- package/src/components/tabs/features.ts +0 -403
- package/src/components/tabs/index.ts +0 -46
- package/src/components/tabs/indicator.ts +0 -285
- package/src/components/tabs/responsive.ts +0 -144
- package/src/components/tabs/scroll-indicators.ts +0 -149
- package/src/components/tabs/state.ts +0 -186
- package/src/components/tabs/tab-api.ts +0 -266
- package/src/components/tabs/tab.ts +0 -267
- package/src/components/tabs/tabs.ts +0 -71
- package/src/components/tabs/types.ts +0 -461
- package/src/components/tabs/utils.ts +0 -107
- package/src/components/textfield/api.ts +0 -197
- package/src/components/textfield/config.ts +0 -52
- package/src/components/textfield/features/leading-icon.ts +0 -127
- package/src/components/textfield/features/placement.ts +0 -149
- package/src/components/textfield/features/prefix-text.ts +0 -107
- package/src/components/textfield/features/suffix-text.ts +0 -100
- package/src/components/textfield/features/supporting-text.ts +0 -113
- package/src/components/textfield/features/trailing-icon.ts +0 -108
- package/src/components/textfield/index.ts +0 -9
- package/src/components/textfield/textfield.ts +0 -92
- package/src/components/textfield/types.ts +0 -265
- package/src/components/timepicker/README.md +0 -277
- package/src/components/timepicker/api.ts +0 -632
- package/src/components/timepicker/clockdial.ts +0 -479
- package/src/components/timepicker/config.ts +0 -228
- package/src/components/timepicker/index.ts +0 -3
- package/src/components/timepicker/render.ts +0 -613
- package/src/components/timepicker/timepicker.ts +0 -117
- package/src/components/timepicker/types.ts +0 -336
- package/src/components/timepicker/utils.ts +0 -241
- package/src/components/tooltip/api.ts +0 -415
- package/src/components/tooltip/config.ts +0 -80
- package/src/components/tooltip/index.ts +0 -12
- package/src/components/tooltip/tooltip.ts +0 -60
- package/src/components/tooltip/types.ts +0 -223
- package/src/components/top-app-bar/config.ts +0 -83
- package/src/components/top-app-bar/top-app-bar.ts +0 -316
- package/src/components/top-app-bar/types.ts +0 -140
- package/src/core/build/constants.ts +0 -48
- package/src/core/build/icon.ts +0 -137
- package/src/core/build/ripple.ts +0 -193
- package/src/core/build/text.ts +0 -91
- package/src/core/collection/adapters/base.ts +0 -62
- package/src/core/collection/adapters/route.ts +0 -201
- package/src/core/collection/collection.ts +0 -300
- package/src/core/collection/index.ts +0 -57
- package/src/core/collection/list-manager.ts +0 -333
- package/src/core/compose/base.ts +0 -43
- package/src/core/compose/component.ts +0 -255
- package/src/core/compose/features/badge.ts +0 -79
- package/src/core/compose/features/checkable.ts +0 -155
- package/src/core/compose/features/disabled.ts +0 -116
- package/src/core/compose/features/events.ts +0 -65
- package/src/core/compose/features/icon.ts +0 -71
- package/src/core/compose/features/input.ts +0 -174
- package/src/core/compose/features/lifecycle.ts +0 -139
- package/src/core/compose/features/position.ts +0 -94
- package/src/core/compose/features/ripple.ts +0 -58
- package/src/core/compose/features/size.ts +0 -29
- package/src/core/compose/features/style.ts +0 -31
- package/src/core/compose/features/text.ts +0 -44
- package/src/core/compose/features/textinput.ts +0 -238
- package/src/core/compose/features/textlabel.ts +0 -113
- package/src/core/compose/features/track.ts +0 -84
- package/src/core/compose/features/variant.ts +0 -29
- package/src/core/compose/features/withEvents.ts +0 -137
- package/src/core/compose/index.ts +0 -54
- package/src/core/composition/features/dom.ts +0 -45
- package/src/core/composition/features/icon.ts +0 -131
- package/src/core/composition/features/label.ts +0 -155
- package/src/core/config.ts +0 -211
- package/src/core/dom/classes.ts +0 -132
- package/src/core/dom/create.ts +0 -273
- package/src/core/dom/events.ts +0 -209
- package/src/core/dom/utils.ts +0 -97
- package/src/core/index.ts +0 -111
- package/src/core/layout/README.md +0 -715
- package/src/core/layout/array.ts +0 -180
- package/src/core/layout/config.ts +0 -193
- package/src/core/layout/create.ts +0 -54
- package/src/core/layout/index.ts +0 -36
- package/src/core/layout/object.ts +0 -123
- package/src/core/layout/processor.ts +0 -106
- package/src/core/layout/result.ts +0 -84
- package/src/core/layout/types.ts +0 -180
- package/src/core/layout/utils.ts +0 -144
- package/src/core/state/disabled.ts +0 -81
- package/src/core/state/emitter.ts +0 -94
- package/src/core/state/events.ts +0 -88
- package/src/core/state/lifecycle.ts +0 -131
- package/src/core/state/store.ts +0 -197
- package/src/core/utils/index.ts +0 -45
- package/src/core/utils/mobile.ts +0 -98
- package/src/core/utils/object.ts +0 -41
- package/src/core/utils/validate.ts +0 -234
- package/src/index.ts +0 -90
- package/src/styles/abstract/_base.scss +0 -2
- package/src/styles/abstract/_config.scss +0 -28
- package/src/styles/abstract/_functions.scss +0 -124
- package/src/styles/abstract/_mixins.scss +0 -352
- package/src/styles/abstract/_theme.scss +0 -269
- package/src/styles/abstract/_variables.scss +0 -305
- package/src/styles/base/_reset.scss +0 -86
- package/src/styles/base/_typography.scss +0 -155
- package/src/styles/components/_badge.scss +0 -182
- package/src/styles/components/_bottom-app-bar.scss +0 -103
- package/src/styles/components/_button.scss +0 -224
- package/src/styles/components/_card.scss +0 -401
- package/src/styles/components/_carousel.scss +0 -645
- package/src/styles/components/_checkbox.scss +0 -231
- package/src/styles/components/_chips.scss +0 -638
- package/src/styles/components/_datepicker.scss +0 -358
- package/src/styles/components/_dialog.scss +0 -259
- package/src/styles/components/_divider.scss +0 -57
- package/src/styles/components/_extended-fab.scss +0 -267
- package/src/styles/components/_fab.scss +0 -225
- package/src/styles/components/_list.scss +0 -248
- package/src/styles/components/_menu.scss +0 -242
- package/src/styles/components/_navigation-mobile.scss +0 -244
- package/src/styles/components/_navigation-system.scss +0 -151
- package/src/styles/components/_navigation.scss +0 -407
- package/src/styles/components/_progress.scss +0 -151
- package/src/styles/components/_radios.scss +0 -187
- package/src/styles/components/_search.scss +0 -306
- package/src/styles/components/_segmented-button.scss +0 -227
- package/src/styles/components/_select.scss +0 -272
- package/src/styles/components/_sheet.scss +0 -236
- package/src/styles/components/_slider.scss +0 -489
- package/src/styles/components/_snackbar.scss +0 -211
- package/src/styles/components/_switch.scss +0 -298
- package/src/styles/components/_tabs.scss +0 -416
- package/src/styles/components/_textfield.scss +0 -773
- package/src/styles/components/_timepicker.scss +0 -451
- package/src/styles/components/_tooltip.scss +0 -241
- package/src/styles/components/_top-app-bar.scss +0 -225
- package/src/styles/main.scss +0 -175
- package/src/styles/themes/_autumn.scss +0 -105
- package/src/styles/themes/_base-theme.scss +0 -85
- package/src/styles/themes/_baseline.scss +0 -173
- package/src/styles/themes/_bluekhaki.scss +0 -125
- package/src/styles/themes/_brownbeige.scss +0 -125
- package/src/styles/themes/_browngreen.scss +0 -125
- package/src/styles/themes/_forest.scss +0 -77
- package/src/styles/themes/_greenbeige.scss +0 -125
- package/src/styles/themes/_index.scss +0 -6
- package/src/styles/themes/_material.scss +0 -125
- package/src/styles/themes/_ocean.scss +0 -77
- package/src/styles/themes/_sageivory.scss +0 -125
- package/src/styles/themes/_spring.scss +0 -77
- package/src/styles/themes/_summer.scss +0 -87
- package/src/styles/themes/_sunset.scss +0 -60
- package/src/styles/themes/_tealcaramel.scss +0 -125
- package/src/styles/themes/_winter.scss +0 -77
- package/src/styles/utilities/_colors.scss +0 -154
- package/src/styles/utilities/_flexbox.scss +0 -194
- package/src/styles/utilities/_layout.scss +0 -665
- package/src/styles/utilities/_ripple.scss +0 -79
- package/src/styles/utilities/_spacing.scss +0 -139
- package/src/styles/utilities/_typography.scss +0 -178
- package/src/styles/utilities/_visibility.scss +0 -142
|
@@ -1,127 +0,0 @@
|
|
|
1
|
-
// src/components/menu/config.ts
|
|
2
|
-
|
|
3
|
-
import {
|
|
4
|
-
createComponentConfig,
|
|
5
|
-
createElementConfig,
|
|
6
|
-
BaseComponentConfig
|
|
7
|
-
} from '../../core/config/component-config';
|
|
8
|
-
import { MenuConfig, MENU_POSITION } from './types';
|
|
9
|
-
|
|
10
|
-
/**
|
|
11
|
-
* Default configuration for the Menu component
|
|
12
|
-
* These values will be used when not explicitly specified by the user.
|
|
13
|
-
*
|
|
14
|
-
* @category Components
|
|
15
|
-
*/
|
|
16
|
-
export const defaultConfig: MenuConfig = {
|
|
17
|
-
items: [],
|
|
18
|
-
position: MENU_POSITION.BOTTOM_START,
|
|
19
|
-
closeOnSelect: true,
|
|
20
|
-
closeOnClickOutside: true,
|
|
21
|
-
closeOnEscape: true,
|
|
22
|
-
openSubmenuOnHover: true,
|
|
23
|
-
offset: 0,
|
|
24
|
-
autoFlip: true,
|
|
25
|
-
visible: false
|
|
26
|
-
};
|
|
27
|
-
|
|
28
|
-
/**
|
|
29
|
-
* Creates the base configuration for Menu component by merging user-provided
|
|
30
|
-
* config with default values.
|
|
31
|
-
*
|
|
32
|
-
* @param {MenuConfig} config - User provided configuration
|
|
33
|
-
* @returns {MenuConfig} Complete configuration with defaults applied
|
|
34
|
-
* @category Components
|
|
35
|
-
* @internal
|
|
36
|
-
*/
|
|
37
|
-
export const createBaseConfig = (config: MenuConfig): MenuConfig => {
|
|
38
|
-
// First, ensure we have an anchor element
|
|
39
|
-
if (!config.anchor) {
|
|
40
|
-
throw new Error('Menu component requires an anchor element or selector');
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
// Apply default configuration
|
|
44
|
-
return createComponentConfig(defaultConfig, config, 'menu') as MenuConfig;
|
|
45
|
-
};
|
|
46
|
-
|
|
47
|
-
/**
|
|
48
|
-
* Generates element configuration for the Menu component.
|
|
49
|
-
* This function creates the necessary attributes and configuration
|
|
50
|
-
* for the DOM element creation process.
|
|
51
|
-
*
|
|
52
|
-
* @param {MenuConfig} config - Menu configuration
|
|
53
|
-
* @returns {Object} Element configuration object for withElement
|
|
54
|
-
* @category Components
|
|
55
|
-
* @internal
|
|
56
|
-
*/
|
|
57
|
-
export const getElementConfig = (config: MenuConfig) => {
|
|
58
|
-
// Custom styles based on configuration
|
|
59
|
-
const styles: Record<string, string> = {};
|
|
60
|
-
|
|
61
|
-
if (config.width) {
|
|
62
|
-
styles.width = config.width;
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
if (config.maxHeight) {
|
|
66
|
-
styles.maxHeight = config.maxHeight;
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
// Element attributes
|
|
70
|
-
const attrs: Record<string, any> = {
|
|
71
|
-
role: 'menu',
|
|
72
|
-
tabindex: '-1',
|
|
73
|
-
'aria-hidden': (!config.visible).toString(),
|
|
74
|
-
style: Object.entries(styles)
|
|
75
|
-
.map(([key, value]) => `${key}: ${value}`)
|
|
76
|
-
.join(';')
|
|
77
|
-
};
|
|
78
|
-
|
|
79
|
-
return createElementConfig(config, {
|
|
80
|
-
tag: 'div',
|
|
81
|
-
attrs,
|
|
82
|
-
className: [
|
|
83
|
-
config.visible ? 'menu--visible' : null,
|
|
84
|
-
config.class
|
|
85
|
-
].filter(Boolean),
|
|
86
|
-
forwardEvents: {
|
|
87
|
-
keydown: true
|
|
88
|
-
}
|
|
89
|
-
});
|
|
90
|
-
};
|
|
91
|
-
|
|
92
|
-
/**
|
|
93
|
-
* Creates API configuration for the Menu component.
|
|
94
|
-
* This connects the core component features to the public API.
|
|
95
|
-
*
|
|
96
|
-
* @param {Object} component - Component with menu features
|
|
97
|
-
* @returns {Object} API configuration object
|
|
98
|
-
* @category Components
|
|
99
|
-
* @internal
|
|
100
|
-
*/
|
|
101
|
-
export const getApiConfig = (component) => ({
|
|
102
|
-
menu: {
|
|
103
|
-
open: (event, interactionType) => component.menu?.open(event, interactionType),
|
|
104
|
-
close: (event, restoreFocus, skipAnimation) => component.menu?.close(event, restoreFocus, skipAnimation),
|
|
105
|
-
toggle: (event, interactionType) => component.menu?.toggle(event, interactionType),
|
|
106
|
-
isOpen: () => component.menu?.isOpen() || false,
|
|
107
|
-
setItems: (items) => component.menu?.setItems(items),
|
|
108
|
-
getItems: () => component.menu?.getItems() || [],
|
|
109
|
-
setPosition: (position) => component.menu?.setPosition(position),
|
|
110
|
-
getPosition: () => component.menu?.getPosition(),
|
|
111
|
-
setSelected: (itemId) => component.menu?.setSelected(itemId),
|
|
112
|
-
getSelected: () => component.menu?.getSelected()
|
|
113
|
-
},
|
|
114
|
-
anchor: {
|
|
115
|
-
setAnchor: (anchor) => component.anchor?.setAnchor(anchor),
|
|
116
|
-
getAnchor: () => component.anchor?.getAnchor()
|
|
117
|
-
},
|
|
118
|
-
events: {
|
|
119
|
-
on: (event, handler) => component.on?.(event, handler),
|
|
120
|
-
off: (event, handler) => component.off?.(event, handler)
|
|
121
|
-
},
|
|
122
|
-
lifecycle: {
|
|
123
|
-
destroy: () => component.lifecycle?.destroy()
|
|
124
|
-
}
|
|
125
|
-
});
|
|
126
|
-
|
|
127
|
-
export default defaultConfig;
|
|
@@ -1,394 +0,0 @@
|
|
|
1
|
-
// src/components/menu/features/anchor.ts
|
|
2
|
-
|
|
3
|
-
import { MenuConfig } from '../types';
|
|
4
|
-
|
|
5
|
-
/**
|
|
6
|
-
* Adds anchor functionality to menu component
|
|
7
|
-
* Manages the relationship between menu and its anchor element
|
|
8
|
-
*
|
|
9
|
-
* @param config - Menu configuration
|
|
10
|
-
* @returns Component enhancer with anchor management functionality
|
|
11
|
-
*/
|
|
12
|
-
const withAnchor = (config: MenuConfig) => component => {
|
|
13
|
-
if (!component.element) {
|
|
14
|
-
console.warn('Cannot initialize menu anchor: missing element');
|
|
15
|
-
return component;
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
// Track keyboard navigation state
|
|
19
|
-
let isTabNavigation = false;
|
|
20
|
-
|
|
21
|
-
// Add an event listener to detect Tab key navigation
|
|
22
|
-
document.addEventListener('keydown', (e: KeyboardEvent) => {
|
|
23
|
-
// Set flag when Tab key is pressed
|
|
24
|
-
isTabNavigation = e.key === 'Tab';
|
|
25
|
-
|
|
26
|
-
// Reset flag after a short delay
|
|
27
|
-
setTimeout(() => {
|
|
28
|
-
isTabNavigation = false;
|
|
29
|
-
}, 100);
|
|
30
|
-
});
|
|
31
|
-
|
|
32
|
-
// Track anchor state
|
|
33
|
-
const state = {
|
|
34
|
-
anchorElement: null as HTMLElement,
|
|
35
|
-
anchorComponent: null as any,
|
|
36
|
-
activeClass: '' // Store the appropriate active class based on element type
|
|
37
|
-
};
|
|
38
|
-
|
|
39
|
-
/**
|
|
40
|
-
* Resolves the anchor element from string, direct reference, or component
|
|
41
|
-
*/
|
|
42
|
-
const resolveAnchor = (anchor: HTMLElement | string | { element: HTMLElement }): HTMLElement => {
|
|
43
|
-
if (!anchor) return null;
|
|
44
|
-
|
|
45
|
-
// Handle string selector
|
|
46
|
-
if (typeof anchor === 'string') {
|
|
47
|
-
const element = document.querySelector(anchor);
|
|
48
|
-
if (!element) {
|
|
49
|
-
console.warn(`Menu anchor not found: ${anchor}`);
|
|
50
|
-
return null;
|
|
51
|
-
}
|
|
52
|
-
return element as HTMLElement;
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
// Handle component with element property
|
|
56
|
-
if (typeof anchor === 'object' && anchor !== null && 'element' in anchor) {
|
|
57
|
-
return anchor.element;
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
// Handle direct HTML element
|
|
61
|
-
return anchor as HTMLElement;
|
|
62
|
-
};
|
|
63
|
-
|
|
64
|
-
/**
|
|
65
|
-
* Determine the appropriate active class based on element type
|
|
66
|
-
*/
|
|
67
|
-
const determineActiveClass = (element: HTMLElement): string => {
|
|
68
|
-
// Check if this is one of our component types
|
|
69
|
-
const classPrefix = component.getClass('').split('-')[0];
|
|
70
|
-
|
|
71
|
-
// Check element tag and classes to determine appropriate active class
|
|
72
|
-
if (element.tagName === 'BUTTON') {
|
|
73
|
-
return `${classPrefix}-button--active`;
|
|
74
|
-
} else if (element.classList.contains(`${classPrefix}-chip`)) {
|
|
75
|
-
return `${classPrefix}-chip--selected`;
|
|
76
|
-
} else if (element.classList.contains(`${classPrefix}-textfield`) ||
|
|
77
|
-
element.classList.contains(`${classPrefix}-select`)) {
|
|
78
|
-
return `${classPrefix}-textfield--focused`;
|
|
79
|
-
} else {
|
|
80
|
-
// Default active class for other elements
|
|
81
|
-
return `${classPrefix}-menu-anchor--active`;
|
|
82
|
-
}
|
|
83
|
-
};
|
|
84
|
-
|
|
85
|
-
/**
|
|
86
|
-
* Sets up anchor click handler for toggling menu
|
|
87
|
-
*/
|
|
88
|
-
const setupAnchorEvents = (anchorElement: HTMLElement, originalAnchor?: any): void => {
|
|
89
|
-
if (!anchorElement) return;
|
|
90
|
-
|
|
91
|
-
// Remove previously attached event if any
|
|
92
|
-
if (state.anchorElement && state.anchorElement !== anchorElement) {
|
|
93
|
-
cleanup();
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
// Store references
|
|
97
|
-
state.anchorElement = anchorElement;
|
|
98
|
-
|
|
99
|
-
// Store reference to component if it was provided
|
|
100
|
-
if (originalAnchor && typeof originalAnchor === 'object' && 'element' in originalAnchor) {
|
|
101
|
-
state.anchorComponent = originalAnchor;
|
|
102
|
-
} else {
|
|
103
|
-
state.anchorComponent = null;
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
// Determine the appropriate active class for this anchor
|
|
107
|
-
state.activeClass = determineActiveClass(anchorElement);
|
|
108
|
-
|
|
109
|
-
// Add click handler
|
|
110
|
-
anchorElement.addEventListener('click', handleAnchorClick);
|
|
111
|
-
|
|
112
|
-
// Add keyboard handlers
|
|
113
|
-
anchorElement.addEventListener('keydown', handleAnchorKeydown);
|
|
114
|
-
|
|
115
|
-
// Add blur/focusout handler to close menu when anchor loses focus
|
|
116
|
-
anchorElement.addEventListener('blur', handleAnchorBlur);
|
|
117
|
-
|
|
118
|
-
// Add ARIA attributes
|
|
119
|
-
anchorElement.setAttribute('aria-haspopup', 'true');
|
|
120
|
-
anchorElement.setAttribute('aria-expanded', 'false');
|
|
121
|
-
|
|
122
|
-
// Get menu ID or generate one
|
|
123
|
-
let menuId = component.element.id;
|
|
124
|
-
if (!menuId) {
|
|
125
|
-
menuId = `menu-${Date.now()}-${Math.floor(Math.random() * 1000)}`;
|
|
126
|
-
component.element.id = menuId;
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
// Connect menu and anchor with ARIA
|
|
130
|
-
anchorElement.setAttribute('aria-controls', menuId);
|
|
131
|
-
};
|
|
132
|
-
|
|
133
|
-
/**
|
|
134
|
-
* Applies active visual state to anchor
|
|
135
|
-
*/
|
|
136
|
-
const setAnchorActive = (active: boolean): void => {
|
|
137
|
-
if (!state.anchorElement) return;
|
|
138
|
-
|
|
139
|
-
// For component with setActive method (our button component has this)
|
|
140
|
-
if (state.anchorComponent && typeof state.anchorComponent.setActive === 'function') {
|
|
141
|
-
state.anchorComponent.setActive(active);
|
|
142
|
-
}
|
|
143
|
-
// For component with .selected property (like our chip component)
|
|
144
|
-
else if (state.anchorComponent && 'selected' in state.anchorComponent) {
|
|
145
|
-
state.anchorComponent.selected = active;
|
|
146
|
-
}
|
|
147
|
-
// Standard DOM element fallback
|
|
148
|
-
else if (state.anchorElement.classList) {
|
|
149
|
-
if (active) {
|
|
150
|
-
// Add the appropriate active class
|
|
151
|
-
state.anchorElement.classList.add(state.activeClass);
|
|
152
|
-
} else {
|
|
153
|
-
// Remove active class
|
|
154
|
-
state.anchorElement.classList.remove(state.activeClass);
|
|
155
|
-
}
|
|
156
|
-
}
|
|
157
|
-
};
|
|
158
|
-
|
|
159
|
-
/**
|
|
160
|
-
* Handles anchor element click
|
|
161
|
-
*/
|
|
162
|
-
const handleAnchorClick = (e: MouseEvent): void => {
|
|
163
|
-
e.preventDefault();
|
|
164
|
-
|
|
165
|
-
// Toggle menu visibility with mouse interaction type
|
|
166
|
-
if (component.menu) {
|
|
167
|
-
const isOpen = component.menu.isOpen();
|
|
168
|
-
|
|
169
|
-
if (isOpen) {
|
|
170
|
-
component.menu.close(e);
|
|
171
|
-
} else {
|
|
172
|
-
component.menu.open(e, 'mouse');
|
|
173
|
-
}
|
|
174
|
-
}
|
|
175
|
-
};
|
|
176
|
-
|
|
177
|
-
/**
|
|
178
|
-
* Handles keyboard events on the anchor element
|
|
179
|
-
*/
|
|
180
|
-
const handleAnchorKeydown = (e: KeyboardEvent): void => {
|
|
181
|
-
// Only handle events if we have a menu controller
|
|
182
|
-
if (!component.menu) return;
|
|
183
|
-
|
|
184
|
-
// Determine if menu is currently open
|
|
185
|
-
const isOpen = component.menu.isOpen();
|
|
186
|
-
|
|
187
|
-
switch (e.key) {
|
|
188
|
-
case 'Enter':
|
|
189
|
-
case ' ': // Space
|
|
190
|
-
case 'ArrowDown':
|
|
191
|
-
case 'Down':
|
|
192
|
-
// Prevent default browser behavior
|
|
193
|
-
e.preventDefault();
|
|
194
|
-
|
|
195
|
-
// Open menu if closed, with keyboard interaction type
|
|
196
|
-
if (!isOpen) {
|
|
197
|
-
component.menu.open(e, 'keyboard');
|
|
198
|
-
}
|
|
199
|
-
break;
|
|
200
|
-
|
|
201
|
-
case 'Escape':
|
|
202
|
-
// Close the menu if it's open
|
|
203
|
-
if (isOpen) {
|
|
204
|
-
e.preventDefault();
|
|
205
|
-
component.menu.close(e);
|
|
206
|
-
}
|
|
207
|
-
break;
|
|
208
|
-
|
|
209
|
-
case 'ArrowUp':
|
|
210
|
-
case 'Up':
|
|
211
|
-
e.preventDefault();
|
|
212
|
-
|
|
213
|
-
// Special case: open menu with focus on last item
|
|
214
|
-
if (!isOpen) {
|
|
215
|
-
component.menu.open(e, 'keyboard');
|
|
216
|
-
|
|
217
|
-
// Wait for menu to open and grab the last item
|
|
218
|
-
setTimeout(() => {
|
|
219
|
-
const items = component.element.querySelectorAll(
|
|
220
|
-
`.${component.getClass('menu-item')}:not(.${component.getClass('menu-item--disabled')})`
|
|
221
|
-
) as NodeListOf<HTMLElement>;
|
|
222
|
-
|
|
223
|
-
if (items.length > 0) {
|
|
224
|
-
// Reset tabindex for all items
|
|
225
|
-
items.forEach(item => item.setAttribute('tabindex', '-1'));
|
|
226
|
-
|
|
227
|
-
// Set the last item as active
|
|
228
|
-
const lastItem = items[items.length - 1];
|
|
229
|
-
lastItem.setAttribute('tabindex', '0');
|
|
230
|
-
lastItem.focus();
|
|
231
|
-
}
|
|
232
|
-
}, 100);
|
|
233
|
-
}
|
|
234
|
-
break;
|
|
235
|
-
}
|
|
236
|
-
};
|
|
237
|
-
|
|
238
|
-
/**
|
|
239
|
-
* Handles anchor blur/focusout events
|
|
240
|
-
*/
|
|
241
|
-
const handleAnchorBlur = (e: FocusEvent): void => {
|
|
242
|
-
// Only handle events if we have a menu controller and menu is open
|
|
243
|
-
if (!component.menu || !component.menu.isOpen()) return;
|
|
244
|
-
|
|
245
|
-
// Get the related target (element receiving focus)
|
|
246
|
-
const relatedTarget = e.relatedTarget as HTMLElement;
|
|
247
|
-
|
|
248
|
-
// If this is tab navigation, always close the menu regardless of next focus target
|
|
249
|
-
if (isTabNavigation) {
|
|
250
|
-
setTimeout(() => {
|
|
251
|
-
// Verify menu is still open (may have been closed in the meantime)
|
|
252
|
-
if (component.menu && component.menu.isOpen()) {
|
|
253
|
-
// Close the menu but don't restore focus
|
|
254
|
-
component.menu.close(e, false);
|
|
255
|
-
}
|
|
256
|
-
}, 10);
|
|
257
|
-
return;
|
|
258
|
-
}
|
|
259
|
-
|
|
260
|
-
// For non-tab navigation (like mouse clicks):
|
|
261
|
-
// Don't close if focus is moving to any of these:
|
|
262
|
-
// 1. To the menu itself
|
|
263
|
-
// 2. To a child of the menu
|
|
264
|
-
// 3. To another menu button/anchor
|
|
265
|
-
if (relatedTarget) {
|
|
266
|
-
// Check if focus moved to menu or its children
|
|
267
|
-
if (component.element.contains(relatedTarget)) {
|
|
268
|
-
return;
|
|
269
|
-
}
|
|
270
|
-
|
|
271
|
-
// Check if focus moved to another menu button/anchor (has aria-haspopup)
|
|
272
|
-
if (relatedTarget.getAttribute('aria-haspopup') === 'true' ||
|
|
273
|
-
relatedTarget.closest('[aria-haspopup="true"]')) {
|
|
274
|
-
return;
|
|
275
|
-
}
|
|
276
|
-
}
|
|
277
|
-
|
|
278
|
-
// Wait a brief moment to ensure we're not in the middle of another operation
|
|
279
|
-
// This helps prevent conflicts with click handlers
|
|
280
|
-
setTimeout(() => {
|
|
281
|
-
// Verify menu is still open (may have been closed in the meantime)
|
|
282
|
-
if (component.menu && component.menu.isOpen()) {
|
|
283
|
-
// Close the menu but don't restore focus since focus has moved elsewhere
|
|
284
|
-
component.menu.close(e, false);
|
|
285
|
-
}
|
|
286
|
-
}, 50);
|
|
287
|
-
};
|
|
288
|
-
|
|
289
|
-
/**
|
|
290
|
-
* Removes event listeners from anchor
|
|
291
|
-
*/
|
|
292
|
-
const cleanup = (): void => {
|
|
293
|
-
if (state.anchorElement) {
|
|
294
|
-
state.anchorElement.removeEventListener('click', handleAnchorClick);
|
|
295
|
-
state.anchorElement.removeEventListener('keydown', handleAnchorKeydown);
|
|
296
|
-
state.anchorElement.removeEventListener('blur', handleAnchorBlur);
|
|
297
|
-
state.anchorElement.removeAttribute('aria-haspopup');
|
|
298
|
-
state.anchorElement.removeAttribute('aria-expanded');
|
|
299
|
-
state.anchorElement.removeAttribute('aria-controls');
|
|
300
|
-
|
|
301
|
-
// Clean up active state if present
|
|
302
|
-
setAnchorActive(false);
|
|
303
|
-
}
|
|
304
|
-
|
|
305
|
-
// Reset state
|
|
306
|
-
state.anchorComponent = null;
|
|
307
|
-
state.activeClass = '';
|
|
308
|
-
};
|
|
309
|
-
|
|
310
|
-
// Initialize with provided anchor
|
|
311
|
-
const initialAnchor = config.anchor;
|
|
312
|
-
const initialElement = resolveAnchor(initialAnchor);
|
|
313
|
-
setupAnchorEvents(initialElement, initialAnchor);
|
|
314
|
-
|
|
315
|
-
// Register with lifecycle if available
|
|
316
|
-
if (component.lifecycle) {
|
|
317
|
-
const originalDestroy = component.lifecycle.destroy || (() => {});
|
|
318
|
-
component.lifecycle.destroy = () => {
|
|
319
|
-
cleanup();
|
|
320
|
-
originalDestroy();
|
|
321
|
-
};
|
|
322
|
-
}
|
|
323
|
-
|
|
324
|
-
// Listen for menu state changes to update anchor
|
|
325
|
-
component.on('open', () => {
|
|
326
|
-
if (state.anchorElement) {
|
|
327
|
-
state.anchorElement.setAttribute('aria-expanded', 'true');
|
|
328
|
-
setAnchorActive(true);
|
|
329
|
-
}
|
|
330
|
-
});
|
|
331
|
-
|
|
332
|
-
/**
|
|
333
|
-
* Update the event listener for menu close event to ensure focus restoration
|
|
334
|
-
*/
|
|
335
|
-
component.on('close', (event) => {
|
|
336
|
-
if (state.anchorElement) {
|
|
337
|
-
// Always update ARIA attributes
|
|
338
|
-
state.anchorElement.setAttribute('aria-expanded', 'false');
|
|
339
|
-
setAnchorActive(false);
|
|
340
|
-
|
|
341
|
-
// Only handle focus restoration for Escape key cases
|
|
342
|
-
// Do NOT restore focus if:
|
|
343
|
-
// 1. It's a tab navigation event, OR
|
|
344
|
-
// 2. There's a next focus element waiting to be focused
|
|
345
|
-
const isTabNavigation = event.isTabNavigation || window._menuNextFocusElement !== null;
|
|
346
|
-
|
|
347
|
-
if (event.originalEvent?.key === 'Escape' && !isTabNavigation) {
|
|
348
|
-
// Only in this case, restore focus to anchor
|
|
349
|
-
requestAnimationFrame(() => {
|
|
350
|
-
state.anchorElement.focus();
|
|
351
|
-
});
|
|
352
|
-
}
|
|
353
|
-
}
|
|
354
|
-
});
|
|
355
|
-
|
|
356
|
-
// Return enhanced component
|
|
357
|
-
return {
|
|
358
|
-
...component,
|
|
359
|
-
anchor: {
|
|
360
|
-
/**
|
|
361
|
-
* Sets a new anchor element
|
|
362
|
-
* @param anchor - New anchor element, selector, or component
|
|
363
|
-
* @returns Component for chaining
|
|
364
|
-
*/
|
|
365
|
-
setAnchor(anchor: HTMLElement | string | { element: HTMLElement }) {
|
|
366
|
-
const newElement = resolveAnchor(anchor);
|
|
367
|
-
if (newElement) {
|
|
368
|
-
setupAnchorEvents(newElement, anchor);
|
|
369
|
-
}
|
|
370
|
-
return component;
|
|
371
|
-
},
|
|
372
|
-
|
|
373
|
-
/**
|
|
374
|
-
* Gets the current anchor element
|
|
375
|
-
* @returns Current anchor element
|
|
376
|
-
*/
|
|
377
|
-
getAnchor() {
|
|
378
|
-
return state.anchorElement;
|
|
379
|
-
},
|
|
380
|
-
|
|
381
|
-
/**
|
|
382
|
-
* Sets the active state of the anchor
|
|
383
|
-
* @param active - Whether anchor should appear active
|
|
384
|
-
* @returns Component for chaining
|
|
385
|
-
*/
|
|
386
|
-
setActive(active: boolean) {
|
|
387
|
-
setAnchorActive(active);
|
|
388
|
-
return component;
|
|
389
|
-
}
|
|
390
|
-
}
|
|
391
|
-
};
|
|
392
|
-
};
|
|
393
|
-
|
|
394
|
-
export default withAnchor;
|