mtrl 0.3.8 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/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 +72 -0
- package/dist/components/progress/constants.d.ts +139 -0
- package/dist/components/progress/features/canvas.d.ts +32 -0
- package/dist/components/progress/features/circular.d.ts +9 -0
- package/dist/components/progress/features/index.d.ts +8 -0
- package/dist/components/progress/features/linear.d.ts +9 -0
- package/dist/components/progress/features/resize-observer.d.ts +5 -0
- package/dist/components/progress/features/state.d.ts +38 -0
- package/dist/components/progress/features.d.ts +40 -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 +272 -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/canvas/index.d.ts +5 -0
- package/dist/core/canvas/resize.d.ts +14 -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} +35 -83
- package/dist/core/config.d.ts +130 -0
- package/dist/core/dom/attributes.d.ts +20 -0
- package/dist/core/dom/classes.d.ts +52 -0
- package/dist/core/dom/create.d.ts +154 -0
- package/dist/core/dom/events.d.ts +69 -0
- package/dist/core/dom/index.d.ts +6 -0
- 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 +18 -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/theme.d.ts +38 -0
- package/dist/core/utils/validate.d.ts +73 -0
- package/dist/index.cjs +64 -0
- package/dist/index.cjs.map +291 -0
- package/dist/index.d.ts +15 -0
- package/dist/index.js +53 -14854
- package/dist/index.js.map +291 -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/attributes.ts +0 -33
- 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/index.ts +0 -10
- 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,13 +0,0 @@
|
|
|
1
|
-
// src/components/menu/features/index.ts
|
|
2
|
-
|
|
3
|
-
// Individual feature imports
|
|
4
|
-
import withController from './controller';
|
|
5
|
-
import withAnchor from './anchor';
|
|
6
|
-
import withPosition from './position';
|
|
7
|
-
|
|
8
|
-
// Export features
|
|
9
|
-
export {
|
|
10
|
-
withController,
|
|
11
|
-
withAnchor,
|
|
12
|
-
withPosition
|
|
13
|
-
};
|
|
@@ -1,353 +0,0 @@
|
|
|
1
|
-
// src/components/menu/features/position.ts
|
|
2
|
-
|
|
3
|
-
import { MenuConfig } from '../types';
|
|
4
|
-
|
|
5
|
-
/**
|
|
6
|
-
* Menu position helper
|
|
7
|
-
* Provides functions for positioning menus and submenus
|
|
8
|
-
*/
|
|
9
|
-
export const createPositioner = (component, config: MenuConfig) => {
|
|
10
|
-
/**
|
|
11
|
-
* Positions the menu relative to its anchor
|
|
12
|
-
* Ensures the menu maintains proper spacing from viewport edges
|
|
13
|
-
* Makes sure the menu stays attached to anchor during scrolling
|
|
14
|
-
*
|
|
15
|
-
* @param menuElement - The menu element to position
|
|
16
|
-
* @param anchorElement - The element to anchor against
|
|
17
|
-
* @param preferredPosition - The preferred position
|
|
18
|
-
* @param isSubmenu - Whether this is a submenu (affects positioning logic)
|
|
19
|
-
*/
|
|
20
|
-
const positionElement = (
|
|
21
|
-
menuElement: HTMLElement,
|
|
22
|
-
anchorElement: HTMLElement,
|
|
23
|
-
preferredPosition: string,
|
|
24
|
-
isSubmenu = false
|
|
25
|
-
): void => {
|
|
26
|
-
if (!menuElement || !anchorElement) return;
|
|
27
|
-
|
|
28
|
-
// Ensure menu is positioned absolutely for proper scroll behavior
|
|
29
|
-
menuElement.style.position = 'absolute';
|
|
30
|
-
|
|
31
|
-
// Get current scroll position - critical for absolute positioning that tracks anchor
|
|
32
|
-
const scrollX = window.pageXOffset || document.documentElement.scrollLeft;
|
|
33
|
-
const scrollY = window.pageYOffset || document.documentElement.scrollTop;
|
|
34
|
-
|
|
35
|
-
// Make a copy of the menu for measurement without affecting the real menu
|
|
36
|
-
const tempMenu = menuElement.cloneNode(true) as HTMLElement;
|
|
37
|
-
|
|
38
|
-
// Make the temp menu visible but not displayed for measurement
|
|
39
|
-
tempMenu.style.visibility = 'hidden';
|
|
40
|
-
tempMenu.style.display = 'block';
|
|
41
|
-
tempMenu.style.position = 'absolute';
|
|
42
|
-
tempMenu.style.top = '0';
|
|
43
|
-
tempMenu.style.left = '0';
|
|
44
|
-
tempMenu.style.transform = 'none';
|
|
45
|
-
tempMenu.style.opacity = '0';
|
|
46
|
-
tempMenu.style.pointerEvents = 'none';
|
|
47
|
-
tempMenu.classList.add(`${component.getClass('menu--visible')}`); // Add visible class for proper dimensions
|
|
48
|
-
|
|
49
|
-
// Add it to the DOM temporarily
|
|
50
|
-
document.body.appendChild(tempMenu);
|
|
51
|
-
|
|
52
|
-
// Get measurements
|
|
53
|
-
const anchorRect = anchorElement.getBoundingClientRect();
|
|
54
|
-
const menuRect = tempMenu.getBoundingClientRect();
|
|
55
|
-
const viewportWidth = window.innerWidth;
|
|
56
|
-
const viewportHeight = window.innerHeight;
|
|
57
|
-
|
|
58
|
-
// Remove the temp element after measurements
|
|
59
|
-
document.body.removeChild(tempMenu);
|
|
60
|
-
|
|
61
|
-
// Get values needed for calculations
|
|
62
|
-
const offset = config.offset !== undefined ? config.offset : 8;
|
|
63
|
-
|
|
64
|
-
// Calculate position based on position
|
|
65
|
-
let top = 0;
|
|
66
|
-
let left = 0;
|
|
67
|
-
let calculatedPosition = preferredPosition;
|
|
68
|
-
|
|
69
|
-
// Different positioning logic for main menu vs submenu
|
|
70
|
-
if (isSubmenu) {
|
|
71
|
-
// Default position is to the right of parent
|
|
72
|
-
calculatedPosition = preferredPosition || 'right-start';
|
|
73
|
-
|
|
74
|
-
// Check if this would push the submenu out of the viewport
|
|
75
|
-
if (calculatedPosition.startsWith('right') && anchorRect.right + menuRect.width + offset > viewportWidth - 16) {
|
|
76
|
-
// Flip to the left side if it doesn't fit on the right
|
|
77
|
-
calculatedPosition = calculatedPosition.replace('right', 'left');
|
|
78
|
-
} else if (calculatedPosition.startsWith('left') && anchorRect.left - menuRect.width - offset < 16) {
|
|
79
|
-
// Flip to the right side if it doesn't fit on the left
|
|
80
|
-
calculatedPosition = calculatedPosition.replace('left', 'right');
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
// Check vertical positioning as well for submenus
|
|
84
|
-
// If submenu would extend beyond the bottom of the viewport, adjust positioning
|
|
85
|
-
if (anchorRect.top + menuRect.height > viewportHeight - 16) {
|
|
86
|
-
if (calculatedPosition === 'right-start') {
|
|
87
|
-
calculatedPosition = 'right-end';
|
|
88
|
-
} else if (calculatedPosition === 'left-start') {
|
|
89
|
-
calculatedPosition = 'left-end';
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
} else {
|
|
93
|
-
// For main menu, follow the standard position calculation
|
|
94
|
-
// First determine correct position based on original position
|
|
95
|
-
switch (preferredPosition) {
|
|
96
|
-
case 'top-start':
|
|
97
|
-
case 'top':
|
|
98
|
-
case 'top-end':
|
|
99
|
-
// Check if enough space above
|
|
100
|
-
if (anchorRect.top < menuRect.height + offset + 16) {
|
|
101
|
-
// Not enough space above, flip to bottom
|
|
102
|
-
calculatedPosition = preferredPosition.replace('top', 'bottom');
|
|
103
|
-
}
|
|
104
|
-
break;
|
|
105
|
-
|
|
106
|
-
case 'bottom-start':
|
|
107
|
-
case 'bottom':
|
|
108
|
-
case 'bottom-end':
|
|
109
|
-
// Check if enough space below
|
|
110
|
-
if (anchorRect.bottom + menuRect.height + offset + 16 > viewportHeight) {
|
|
111
|
-
// Not enough space below, check if more space above
|
|
112
|
-
if (anchorRect.top > (viewportHeight - anchorRect.bottom)) {
|
|
113
|
-
// More space above, flip to top
|
|
114
|
-
calculatedPosition = preferredPosition.replace('bottom', 'top');
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
|
-
break;
|
|
118
|
-
|
|
119
|
-
// Specifically handle right-start, right, left-start, and left positions
|
|
120
|
-
case 'right-start':
|
|
121
|
-
case 'right':
|
|
122
|
-
case 'left-start':
|
|
123
|
-
case 'left':
|
|
124
|
-
// Check if enough space below for these side positions
|
|
125
|
-
if (anchorRect.bottom + menuRect.height > viewportHeight - 16) {
|
|
126
|
-
// Not enough space below, shift the menu upward
|
|
127
|
-
if (preferredPosition === 'right-start') {
|
|
128
|
-
calculatedPosition = 'right-end';
|
|
129
|
-
} else if (preferredPosition === 'left-start') {
|
|
130
|
-
calculatedPosition = 'left-end';
|
|
131
|
-
} else if (preferredPosition === 'right') {
|
|
132
|
-
// For center aligned, shift up by half menu height plus some spacing
|
|
133
|
-
top = anchorRect.top - (menuRect.height - anchorRect.height) - offset;
|
|
134
|
-
} else if (preferredPosition === 'left') {
|
|
135
|
-
// For center aligned, shift up by half menu height plus some spacing
|
|
136
|
-
top = anchorRect.top - (menuRect.height - anchorRect.height) - offset;
|
|
137
|
-
}
|
|
138
|
-
}
|
|
139
|
-
break;
|
|
140
|
-
}
|
|
141
|
-
}
|
|
142
|
-
|
|
143
|
-
// Reset any existing position classes
|
|
144
|
-
const positionClasses = [
|
|
145
|
-
'position-top', 'position-bottom', 'position-right', 'position-left'
|
|
146
|
-
];
|
|
147
|
-
|
|
148
|
-
positionClasses.forEach(posClass => {
|
|
149
|
-
menuElement.classList.remove(`${component.getClass('menu')}--${posClass}`);
|
|
150
|
-
});
|
|
151
|
-
|
|
152
|
-
// Determine transform origin based on vertical position
|
|
153
|
-
// Start by checking the calculated position to determine transform origin
|
|
154
|
-
const menuAppearsAboveAnchor =
|
|
155
|
-
calculatedPosition.startsWith('top') ||
|
|
156
|
-
calculatedPosition === 'right-end' ||
|
|
157
|
-
calculatedPosition === 'left-end' ||
|
|
158
|
-
(calculatedPosition === 'right' && top < anchorRect.top) ||
|
|
159
|
-
(calculatedPosition === 'left' && top < anchorRect.top);
|
|
160
|
-
|
|
161
|
-
if (menuAppearsAboveAnchor) {
|
|
162
|
-
menuElement.classList.add(`${component.getClass('menu')}--position-top`);
|
|
163
|
-
} else if (calculatedPosition.startsWith('left')) {
|
|
164
|
-
menuElement.classList.add(`${component.getClass('menu')}--position-left`);
|
|
165
|
-
} else if (calculatedPosition.startsWith('right')) {
|
|
166
|
-
menuElement.classList.add(`${component.getClass('menu')}--position-right`);
|
|
167
|
-
} else {
|
|
168
|
-
menuElement.classList.add(`${component.getClass('menu')}--position-bottom`);
|
|
169
|
-
}
|
|
170
|
-
|
|
171
|
-
// Position calculation - important: getBoundingClientRect() returns values relative to viewport
|
|
172
|
-
// We need to add scroll position to get absolute position
|
|
173
|
-
switch (calculatedPosition) {
|
|
174
|
-
case 'top-start':
|
|
175
|
-
top = anchorRect.top + scrollY - menuRect.height - offset;
|
|
176
|
-
left = anchorRect.left + scrollX;
|
|
177
|
-
break;
|
|
178
|
-
case 'top':
|
|
179
|
-
top = anchorRect.top + scrollY - menuRect.height - offset;
|
|
180
|
-
left = anchorRect.left + scrollX + (anchorRect.width / 2) - (menuRect.width / 2);
|
|
181
|
-
break;
|
|
182
|
-
case 'top-end':
|
|
183
|
-
top = anchorRect.top + scrollY - menuRect.height - offset;
|
|
184
|
-
left = anchorRect.right + scrollX - menuRect.width;
|
|
185
|
-
break;
|
|
186
|
-
case 'right-start':
|
|
187
|
-
top = anchorRect.top + scrollY;
|
|
188
|
-
left = anchorRect.right + scrollX + offset;
|
|
189
|
-
break;
|
|
190
|
-
case 'right':
|
|
191
|
-
// Custom top position might be set above; only set if not already defined
|
|
192
|
-
if (top === 0) {
|
|
193
|
-
top = anchorRect.top + scrollY + (anchorRect.height / 2) - (menuRect.height / 2);
|
|
194
|
-
} else {
|
|
195
|
-
top += scrollY;
|
|
196
|
-
}
|
|
197
|
-
left = anchorRect.right + scrollX + offset;
|
|
198
|
-
break;
|
|
199
|
-
case 'right-end':
|
|
200
|
-
top = anchorRect.bottom + scrollY - menuRect.height;
|
|
201
|
-
left = anchorRect.right + scrollX + offset;
|
|
202
|
-
break;
|
|
203
|
-
case 'bottom-start':
|
|
204
|
-
top = anchorRect.bottom + scrollY + offset;
|
|
205
|
-
left = anchorRect.left + scrollX;
|
|
206
|
-
break;
|
|
207
|
-
case 'bottom':
|
|
208
|
-
top = anchorRect.bottom + scrollY + offset;
|
|
209
|
-
left = anchorRect.left + scrollX + (anchorRect.width / 2) - (menuRect.width / 2);
|
|
210
|
-
break;
|
|
211
|
-
case 'bottom-end':
|
|
212
|
-
top = anchorRect.bottom + scrollY + offset;
|
|
213
|
-
left = anchorRect.right + scrollX - menuRect.width;
|
|
214
|
-
break;
|
|
215
|
-
case 'left-start':
|
|
216
|
-
top = anchorRect.top + scrollY;
|
|
217
|
-
left = anchorRect.left + scrollX - menuRect.width - offset;
|
|
218
|
-
break;
|
|
219
|
-
case 'left':
|
|
220
|
-
// Custom top position might be set above; only set if not already defined
|
|
221
|
-
if (top === 0) {
|
|
222
|
-
top = anchorRect.top + scrollY + (anchorRect.height / 2) - (menuRect.height / 2);
|
|
223
|
-
} else {
|
|
224
|
-
top += scrollY;
|
|
225
|
-
}
|
|
226
|
-
left = anchorRect.left + scrollX - menuRect.width - offset;
|
|
227
|
-
break;
|
|
228
|
-
case 'left-end':
|
|
229
|
-
top = anchorRect.bottom + scrollY - menuRect.height;
|
|
230
|
-
left = anchorRect.left + scrollX - menuRect.width - offset;
|
|
231
|
-
break;
|
|
232
|
-
}
|
|
233
|
-
|
|
234
|
-
// Ensure the menu has proper spacing from viewport edges
|
|
235
|
-
|
|
236
|
-
// Top edge spacing - ensure the menu doesn't go above the viewport + padding
|
|
237
|
-
const minTopSpacing = 16; // Minimum distance from top of viewport
|
|
238
|
-
if (top - scrollY < minTopSpacing) {
|
|
239
|
-
top = minTopSpacing + scrollY;
|
|
240
|
-
}
|
|
241
|
-
|
|
242
|
-
// Bottom edge spacing - ensure the menu doesn't go below the viewport - padding
|
|
243
|
-
const viewportBottomMargin = 16; // Minimum space from bottom of viewport
|
|
244
|
-
const bottomEdge = (top - scrollY) + menuRect.height;
|
|
245
|
-
|
|
246
|
-
if (bottomEdge > viewportHeight - viewportBottomMargin) {
|
|
247
|
-
// Option 1: We could adjust the top position
|
|
248
|
-
// top = scrollY + viewportHeight - viewportBottomMargin - menuRect.height;
|
|
249
|
-
|
|
250
|
-
// Option 2: Instead of moving the menu, adjust its height to fit (better UX)
|
|
251
|
-
const availableHeight = viewportHeight - (top - scrollY) - viewportBottomMargin;
|
|
252
|
-
|
|
253
|
-
// Set a minimum height to prevent tiny menus
|
|
254
|
-
const minMenuHeight = Math.min(menuRect.height, 100);
|
|
255
|
-
const newMaxHeight = Math.max(availableHeight, minMenuHeight);
|
|
256
|
-
|
|
257
|
-
// Update maxHeight to fit within viewport
|
|
258
|
-
menuElement.style.maxHeight = `${newMaxHeight}px`;
|
|
259
|
-
|
|
260
|
-
// If user has explicitly set a maxHeight, respect it if smaller
|
|
261
|
-
if (config.maxHeight) {
|
|
262
|
-
const configMaxHeight = parseInt(config.maxHeight, 10);
|
|
263
|
-
if (!isNaN(configMaxHeight) && configMaxHeight < parseInt(menuElement.style.maxHeight || '0', 10)) {
|
|
264
|
-
menuElement.style.maxHeight = config.maxHeight;
|
|
265
|
-
}
|
|
266
|
-
}
|
|
267
|
-
} else {
|
|
268
|
-
// If there's plenty of space, use the config's maxHeight (if provided)
|
|
269
|
-
if (config.maxHeight) {
|
|
270
|
-
menuElement.style.maxHeight = config.maxHeight;
|
|
271
|
-
}
|
|
272
|
-
}
|
|
273
|
-
|
|
274
|
-
// For 'width: 100%' configuration, match the anchor width
|
|
275
|
-
if (config.width === '100%' && !isSubmenu) {
|
|
276
|
-
menuElement.style.width = `${anchorRect.width}px`;
|
|
277
|
-
}
|
|
278
|
-
|
|
279
|
-
// Apply final positions, ensuring menu stays within viewport
|
|
280
|
-
// The position is absolute, not fixed, so it must account for scroll
|
|
281
|
-
menuElement.style.top = `${Math.max(minTopSpacing + scrollY, top)}px`;
|
|
282
|
-
menuElement.style.left = `${Math.max(16 + scrollX, left)}px`;
|
|
283
|
-
|
|
284
|
-
// Make sure menu doesn't extend past right edge
|
|
285
|
-
if ((left - scrollX) + menuRect.width > viewportWidth - 16) {
|
|
286
|
-
// If we're going past the right edge, set right with fixed distance from edge
|
|
287
|
-
menuElement.style.left = 'auto';
|
|
288
|
-
menuElement.style.right = '16px';
|
|
289
|
-
}
|
|
290
|
-
};
|
|
291
|
-
|
|
292
|
-
/**
|
|
293
|
-
* Positions the main menu relative to its anchor
|
|
294
|
-
*/
|
|
295
|
-
const positionMenu = (anchorElement: HTMLElement): void => {
|
|
296
|
-
if (!anchorElement || !component.element) return;
|
|
297
|
-
positionElement(component.element, anchorElement, config.position, false);
|
|
298
|
-
};
|
|
299
|
-
|
|
300
|
-
/**
|
|
301
|
-
* Positions a submenu relative to its parent menu item
|
|
302
|
-
* For deeply nested submenus, alternates side placement (right/left)
|
|
303
|
-
* @param submenuElement - The submenu element to position
|
|
304
|
-
* @param parentItemElement - The parent menu item element
|
|
305
|
-
* @param level - Nesting level for calculating position
|
|
306
|
-
*/
|
|
307
|
-
const positionSubmenu = (
|
|
308
|
-
submenuElement: HTMLElement,
|
|
309
|
-
parentItemElement: HTMLElement,
|
|
310
|
-
level: number = 1
|
|
311
|
-
): void => {
|
|
312
|
-
if (!submenuElement || !parentItemElement) return;
|
|
313
|
-
|
|
314
|
-
// Alternate between right and left positioning for deeper nesting levels
|
|
315
|
-
// This helps prevent menus from cascading off the screen
|
|
316
|
-
const prefPosition = level % 2 === 1 ? 'right-start' : 'left-start';
|
|
317
|
-
|
|
318
|
-
// Use higher z-index for deeper nested menus to ensure proper layering
|
|
319
|
-
submenuElement.style.zIndex = `${1000 + (level * 10)}`;
|
|
320
|
-
|
|
321
|
-
positionElement(submenuElement, parentItemElement, prefPosition, true);
|
|
322
|
-
};
|
|
323
|
-
|
|
324
|
-
return {
|
|
325
|
-
positionMenu,
|
|
326
|
-
positionSubmenu,
|
|
327
|
-
positionElement
|
|
328
|
-
};
|
|
329
|
-
};
|
|
330
|
-
|
|
331
|
-
/**
|
|
332
|
-
* Adds positioning functionality to the menu component
|
|
333
|
-
*
|
|
334
|
-
* @param config - Menu configuration options
|
|
335
|
-
* @returns Component enhancer with positioning functionality
|
|
336
|
-
*/
|
|
337
|
-
const withPosition = (config: MenuConfig) => component => {
|
|
338
|
-
// Do nothing if no element
|
|
339
|
-
if (!component.element) {
|
|
340
|
-
return component;
|
|
341
|
-
}
|
|
342
|
-
|
|
343
|
-
// Create the positioner
|
|
344
|
-
const positioner = createPositioner(component, config);
|
|
345
|
-
|
|
346
|
-
// Return enhanced component
|
|
347
|
-
return {
|
|
348
|
-
...component,
|
|
349
|
-
position: positioner
|
|
350
|
-
};
|
|
351
|
-
};
|
|
352
|
-
|
|
353
|
-
export default withPosition;
|
|
@@ -1,121 +0,0 @@
|
|
|
1
|
-
// src/components/menu/menu.ts
|
|
2
|
-
|
|
3
|
-
import { pipe } from '../../core/compose';
|
|
4
|
-
import { createBase, withElement } from '../../core/compose/component';
|
|
5
|
-
import { withEvents, withLifecycle } from '../../core/compose/features';
|
|
6
|
-
// Import withController directly from the file
|
|
7
|
-
import withController from './features/controller';
|
|
8
|
-
import withAnchor from './features/anchor';
|
|
9
|
-
import withPosition from './features/position';
|
|
10
|
-
import { withAPI } from './api';
|
|
11
|
-
import { MenuConfig, MenuComponent } from './types';
|
|
12
|
-
import { createBaseConfig, getElementConfig, getApiConfig } from './config';
|
|
13
|
-
|
|
14
|
-
/**
|
|
15
|
-
* Creates a new Menu component with the specified configuration.
|
|
16
|
-
*
|
|
17
|
-
* The Menu component implements the Material Design 3 menu specifications,
|
|
18
|
-
* providing a flexible dropdown menu system with support for nested menus,
|
|
19
|
-
* keyboard navigation, and ARIA accessibility.
|
|
20
|
-
*
|
|
21
|
-
* Menus are built using a functional composition pattern, applying various
|
|
22
|
-
* features through the pipe function for a modular architecture.
|
|
23
|
-
*
|
|
24
|
-
* The menu element is not added to the DOM until it's opened, and it's removed
|
|
25
|
-
* from the DOM when closed, following best practices for dropdown menus.
|
|
26
|
-
*
|
|
27
|
-
* @param {MenuConfig} config - Configuration options for the menu
|
|
28
|
-
* This must include an anchor element or selector, and an array of menu items.
|
|
29
|
-
* See {@link MenuConfig} for all available options.
|
|
30
|
-
*
|
|
31
|
-
* @returns {MenuComponent} A fully configured menu component instance with
|
|
32
|
-
* all requested features applied. The returned component has methods for
|
|
33
|
-
* menu manipulation, event handling, and lifecycle management.
|
|
34
|
-
*
|
|
35
|
-
* @throws {Error} Throws an error if menu creation fails or if required
|
|
36
|
-
* configuration (like anchor) is missing.
|
|
37
|
-
*
|
|
38
|
-
* @category Components
|
|
39
|
-
*
|
|
40
|
-
* @example
|
|
41
|
-
* // Create a simple menu anchored to a button
|
|
42
|
-
* const menuButton = document.getElementById('menu-button');
|
|
43
|
-
* const menu = createMenu({
|
|
44
|
-
* anchor: menuButton,
|
|
45
|
-
* items: [
|
|
46
|
-
* { id: 'item1', text: 'Option 1' },
|
|
47
|
-
* { id: 'item2', text: 'Option 2' },
|
|
48
|
-
* { type: 'divider' },
|
|
49
|
-
* { id: 'item3', text: 'Option 3' }
|
|
50
|
-
* ]
|
|
51
|
-
* });
|
|
52
|
-
*
|
|
53
|
-
* // Add event listener for item selection
|
|
54
|
-
* menu.on('select', (event) => {
|
|
55
|
-
* console.log('Selected item:', event.itemId);
|
|
56
|
-
* });
|
|
57
|
-
*
|
|
58
|
-
* // Menu will be added to the DOM when opened and removed when closed
|
|
59
|
-
* menuButton.addEventListener('click', () => menu.toggle());
|
|
60
|
-
*
|
|
61
|
-
* @example
|
|
62
|
-
* // Create a menu with nested submenus
|
|
63
|
-
* const menu = createMenu({
|
|
64
|
-
* anchor: '#more-button',
|
|
65
|
-
* items: [
|
|
66
|
-
* { id: 'edit', text: 'Edit', icon: '<svg>...</svg>' },
|
|
67
|
-
* {
|
|
68
|
-
* id: 'share',
|
|
69
|
-
* text: 'Share',
|
|
70
|
-
* hasSubmenu: true,
|
|
71
|
-
* submenu: [
|
|
72
|
-
* { id: 'email', text: 'Email' },
|
|
73
|
-
* { id: 'link', text: 'Copy link' }
|
|
74
|
-
* ]
|
|
75
|
-
* },
|
|
76
|
-
* { type: 'divider' },
|
|
77
|
-
* { id: 'delete', text: 'Delete', icon: '<svg>...</svg>' }
|
|
78
|
-
* ],
|
|
79
|
-
* position: 'bottom-end'
|
|
80
|
-
* });
|
|
81
|
-
*
|
|
82
|
-
* @example
|
|
83
|
-
* // Specify a custom position for the menu
|
|
84
|
-
* const filterMenu = createMenu({
|
|
85
|
-
* anchor: filterButton,
|
|
86
|
-
* items: filterOptions,
|
|
87
|
-
* position: MENU_POSITION.TOP_START,
|
|
88
|
-
* width: '240px',
|
|
89
|
-
* maxHeight: '400px'
|
|
90
|
-
* });
|
|
91
|
-
*
|
|
92
|
-
* // Update the menu's position programmatically
|
|
93
|
-
* filterMenu.setPosition(MENU_POSITION.BOTTOM_END);
|
|
94
|
-
*/
|
|
95
|
-
const createMenu = (config: MenuConfig): MenuComponent => {
|
|
96
|
-
try {
|
|
97
|
-
// Validate and create the base configuration
|
|
98
|
-
const baseConfig = createBaseConfig(config);
|
|
99
|
-
|
|
100
|
-
// Create the component through functional composition
|
|
101
|
-
const menu = pipe(
|
|
102
|
-
createBase, // Base component
|
|
103
|
-
withEvents(), // Event handling
|
|
104
|
-
withElement(getElementConfig(baseConfig)), // DOM element
|
|
105
|
-
withPosition(baseConfig), // Position management
|
|
106
|
-
withController(baseConfig), // Menu controller
|
|
107
|
-
withAnchor(baseConfig), // Anchor management
|
|
108
|
-
withLifecycle(), // Lifecycle management
|
|
109
|
-
comp => withAPI(getApiConfig(comp))(comp) // Public API
|
|
110
|
-
)(baseConfig);
|
|
111
|
-
|
|
112
|
-
// The menu will be added to the DOM when opened and removed when closed
|
|
113
|
-
|
|
114
|
-
return menu;
|
|
115
|
-
} catch (error) {
|
|
116
|
-
console.error('Menu creation error:', error);
|
|
117
|
-
throw new Error(`Failed to create menu: ${(error as Error).message}`);
|
|
118
|
-
}
|
|
119
|
-
};
|
|
120
|
-
|
|
121
|
-
export default createMenu;
|