mtrl 0.4.4 → 0.5.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/README.md +61 -60
- package/dist/README.md +61 -60
- package/dist/components/chips/chips.d.ts +2 -2
- package/dist/components/chips/config.d.ts +1 -1
- package/dist/components/chips/features/controller.d.ts +1 -1
- package/dist/components/chips/features/dom.d.ts +15 -0
- package/dist/components/chips/features/index.d.ts +5 -4
- package/dist/components/chips/schema.d.ts +2 -2
- package/dist/components/list/api.d.ts +82 -39
- package/dist/components/list/config.d.ts +23 -19
- package/dist/components/list/features/index.d.ts +1 -1
- package/dist/components/list/features/renderer.d.ts +9 -0
- package/dist/components/list/features/selection.d.ts +1 -1
- package/dist/components/list/list.d.ts +3 -2
- package/dist/components/list/types.d.ts +68 -121
- package/dist/components/progress/constants.d.ts +3 -3
- package/dist/components/slider/features/canvas.d.ts +2 -2
- package/dist/components/slider/features/dom.d.ts +21 -0
- package/dist/components/slider/features/index.d.ts +5 -4
- package/dist/components/slider/slider.d.ts +4 -4
- package/dist/components/textfield/api.d.ts +2 -0
- package/dist/components/textfield/features/error.d.ts +54 -0
- package/dist/components/textfield/features/index.d.ts +1 -0
- package/dist/components/textfield/features/placement.d.ts +1 -1
- package/dist/components/textfield/features/supporting-text.d.ts +1 -1
- package/dist/components/textfield/types.d.ts +7 -0
- package/dist/core/compose/features/icon.d.ts +2 -2
- package/dist/core/compose/features/index.d.ts +0 -2
- package/dist/core/compose/features/textinput.d.ts +4 -0
- package/dist/core/compose/features/textlabel.d.ts +2 -2
- package/dist/core/compose/index.d.ts +1 -5
- package/dist/core/dom/attributes.d.ts +32 -2
- package/dist/core/dom/classes.d.ts +15 -13
- package/dist/core/dom/create.d.ts +35 -87
- package/dist/core/dom/index.d.ts +6 -6
- package/dist/core/dom/utils.d.ts +1 -10
- package/dist/core/index.d.ts +18 -22
- package/dist/index.cjs +15 -15
- package/dist/index.cjs.map +36 -74
- package/dist/index.d.ts +1 -6
- package/dist/index.js +15 -15
- package/dist/index.js.map +36 -74
- package/dist/package.json +1 -1
- package/dist/styles.css +2 -2
- package/package.json +4 -3
- package/dist/components/list/features/listmanager.d.ts +0 -9
- package/dist/components/slider/schema.d.ts +0 -65
- package/dist/core/collection/adapters/base.d.ts +0 -47
- package/dist/core/collection/adapters/route.d.ts +0 -149
- package/dist/core/collection/collection.d.ts +0 -131
- package/dist/core/collection/index.d.ts +0 -10
- package/dist/core/collection/list-manager/config.d.ts +0 -29
- package/dist/core/collection/list-manager/dom-elements.d.ts +0 -30
- package/dist/core/collection/list-manager/index.d.ts +0 -61
- package/dist/core/collection/list-manager/item-measurement.d.ts +0 -91
- package/dist/core/collection/list-manager/renderer.d.ts +0 -31
- package/dist/core/collection/list-manager/scroll-tracker.d.ts +0 -20
- package/dist/core/collection/list-manager/state.d.ts +0 -60
- package/dist/core/collection/list-manager/types.d.ts +0 -361
- package/dist/core/collection/list-manager/utils/recycling.d.ts +0 -34
- package/dist/core/collection/list-manager/utils/visibility.d.ts +0 -45
- package/dist/core/compose/features/gestures/longpress.d.ts +0 -85
- package/dist/core/compose/features/gestures/pan.d.ts +0 -108
- package/dist/core/compose/features/gestures/pinch.d.ts +0 -111
- package/dist/core/compose/features/gestures/rotate.d.ts +0 -111
- package/dist/core/compose/features/gestures/swipe.d.ts +0 -149
- package/dist/core/compose/features/gestures/tap.d.ts +0 -79
- package/dist/core/compose/features/gestures.d.ts +0 -86
- package/dist/core/composition/features/dom.d.ts +0 -19
- package/dist/core/composition/features/icon.d.ts +0 -45
- package/dist/core/composition/features/index.d.ts +0 -7
- package/dist/core/composition/features/label.d.ts +0 -49
- package/dist/core/composition/features/layout.d.ts +0 -31
- package/dist/core/composition/index.d.ts +0 -16
- package/dist/core/gestures/index.d.ts +0 -12
- package/dist/core/gestures/longpress.d.ts +0 -23
- package/dist/core/gestures/manager.d.ts +0 -14
- package/dist/core/gestures/pan.d.ts +0 -12
- package/dist/core/gestures/pinch.d.ts +0 -14
- package/dist/core/gestures/rotate.d.ts +0 -14
- package/dist/core/gestures/swipe.d.ts +0 -20
- package/dist/core/gestures/tap.d.ts +0 -12
- package/dist/core/gestures/types.d.ts +0 -320
- package/dist/core/gestures/utils.d.ts +0 -57
- package/dist/core/layout/array.d.ts +0 -20
- package/dist/core/layout/config.d.ts +0 -32
- package/dist/core/layout/create.d.ts +0 -14
- package/dist/core/layout/index.d.ts +0 -13
- package/dist/core/layout/jsx.d.ts +0 -13
- package/dist/core/layout/object.d.ts +0 -14
- package/dist/core/layout/processor.d.ts +0 -28
- package/dist/core/layout/result.d.ts +0 -12
- package/dist/core/layout/template.d.ts +0 -12
- package/dist/core/layout/types.d.ts +0 -137
- package/dist/core/layout/utils.d.ts +0 -38
package/dist/index.cjs.map
CHANGED
|
@@ -1,19 +1,19 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../src/core/compose/pipe.ts", "../src/core/compose/base.ts", "../src/core/dom/attributes.ts", "../src/core/config.ts", "../src/core/dom/classes.ts", "../src/core/dom/create.ts", "../src/core/utils/mobile.ts", "../src/core/compose/component.ts", "../src/core/state/emitter.ts", "../src/core/compose/features/events.ts", "../src/core/compose/features/text.ts", "../src/core/compose/features/icon.ts", "../src/core/compose/features/variant.ts", "../src/core/compose/features/size.ts", "../src/core/compose/features/position.ts", "../src/core/compose/features/constants.ts", "../src/core/compose/features/ripple.ts", "../src/core/compose/features/input.ts", "../src/core/compose/features/checkable.ts", "../src/core/compose/features/style.ts", "../src/core/compose/utils/type-guards.ts", "../src/core/compose/features/textinput.ts", "../src/core/compose/features/textlabel.ts", "../src/core/compose/features/track.ts", "../src/core/state/events.ts", "../src/core/compose/features/withEvents.ts", "../src/core/compose/features/badge.ts", "../src/core/utils/performance.ts", "../src/core/compose/features/throttle.ts", "../src/core/compose/features/debounce.ts", "../src/core/gestures/utils.ts", "../src/core/gestures/tap.ts", "../src/core/gestures/swipe.ts", "../src/core/gestures/longpress.ts", "../src/core/gestures/pan.ts", "../src/core/gestures/pinch.ts", "../src/core/gestures/rotate.ts", "../src/core/gestures/manager.ts", "../src/core/gestures/index.ts", "../src/core/compose/features/gestures.ts", "../src/core/compose/features/disabled.ts", "../src/core/compose/features/lifecycle.ts", "../src/core/compose/features/index.ts", "../src/core/compose/features/gestures/tap.ts", "../src/core/compose/features/gestures/swipe.ts", "../src/core/compose/features/gestures/longpress.ts", "../src/core/compose/features/gestures/pan.ts", "../src/core/compose/index.ts", "../src/core/config/global.ts", "../src/core/config/component.ts", "../src/components/badge/constants.ts", "../src/components/badge/config.ts", "../src/components/badge/features.ts", "../src/components/badge/api.ts", "../src/components/badge/badge.ts", "../src/components/badge/index.ts", "../src/core/dom/events.ts", "../src/core/dom/index.ts", "../src/components/progress/constants.ts", "../src/core/utils/object.ts", "../src/core/utils/background.ts", "../src/core/utils/theme.ts", "../src/core/utils/color.ts", "../src/core/utils/index.ts", "../src/core/canvas/resize.ts", "../src/components/progress/features/circular.ts", "../src/components/progress/features/linear.ts", "../src/components/progress/features/canvas.ts", "../src/components/progress/features/state.ts", "../src/components/progress/api.ts", "../src/components/progress/config.ts", "../src/components/progress/progress.ts", "../src/components/button/features/progress.ts", "../src/core/state/store.ts", "../src/core/state/lifecycle.ts", "../src/core/state/disabled.ts", "../src/core/layout/utils.ts", "../src/core/layout/result.ts", "../src/core/layout/array.ts", "../src/core/layout/object.ts", "../src/core/layout/config.ts", "../src/core/layout/processor.ts", "../src/core/layout/create.ts", "../src/core/layout/jsx.ts", "../src/core/layout/index.ts", "../src/core/collection/collection.ts", "../src/core/collection/adapters/base.ts", "../src/core/collection/adapters/route.ts", "../src/core/collection/list-manager/config.ts", "../src/core/collection/list-manager/dom-elements.ts", "../src/core/collection/list-manager/item-measurement.ts", "../src/core/collection/list-manager/utils/visibility.ts", "../src/core/collection/list-manager/renderer.ts", "../src/core/collection/list-manager/scroll-tracker.ts", "../src/core/collection/list-manager/utils/recycling.ts", "../src/core/collection/list-manager/state.ts", "../src/core/collection/list-manager/index.ts", "../src/core/collection/index.ts", "../src/core/canvas/drawing.ts", "../src/core/canvas/animation.ts", "../src/core/canvas/utils.ts", "../src/core/canvas/index.ts", "../src/core/index.ts", "../src/components/button/api.ts", "../src/components/button/constants.ts", "../src/components/button/config.ts", "../src/components/button/button.ts", "../src/components/button/index.ts", "../src/components/list/constants.ts", "../src/components/select/constants.ts", "../src/components/index.ts", "../src/components/bottom-app-bar/bottom-app-bar.ts", "../src/components/bottom-app-bar/config.ts", "../src/components/bottom-app-bar/constants.ts", "../src/components/bottom-app-bar/index.ts", "../src/components/card/card.ts", "../src/components/card/api.ts", "../src/components/card/config.ts", "../src/components/card/content.ts", "../src/components/card/constants.ts", "../src/components/card/features.ts", "../src/components/carousel/carousel.ts", "../src/components/carousel/constants.ts", "../src/components/carousel/features/slides.ts", "../src/components/carousel/features/drag.ts", "../src/components/carousel/api.ts", "../src/components/carousel/config.ts", "../src/components/checkbox/checkbox.ts", "../src/components/checkbox/api.ts", "../src/components/checkbox/config.ts", "../src/components/checkbox/constants.ts", "../src/components/chips/chip/chip.ts", "../src/components/chips/chip/api.ts", "../src/components/chips/chip/config.ts", "../src/components/chips/chips.ts", "../src/core/composition/features/layout.ts", "../src/core/composition/features/icon.ts", "../src/core/composition/features/label.ts", "../src/core/composition/features/dom.ts", "../src/components/chips/features/container.ts", "../src/components/chips/features/chip-items.ts", "../src/components/chips/constants.ts", "../src/components/chips/features/controller.ts", "../src/components/chips/api.ts", "../src/components/chips/config.ts", "../src/components/chips/schema.ts", "../src/components/datepicker/datepicker.ts", "../src/components/datepicker/types.ts", "../src/components/datepicker/utils.ts", "../src/components/datepicker/api.ts", "../src/components/datepicker/config.ts", "../src/components/datepicker/render.ts", "../src/components/dialog/dialog.ts", "../src/components/dialog/config.ts", "../src/components/dialog/features.ts", "../src/components/divider/divider.ts", "../src/components/divider/config.ts", "../src/components/divider/features.ts", "../src/components/dialog/api.ts", "../src/components/fab/fab.ts", "../src/components/fab/api.ts", "../src/components/fab/config.ts", "../src/components/extended-fab/extended-fab.ts", "../src/components/extended-fab/api.ts", "../src/components/extended-fab/config.ts", "../src/components/menu/menu.ts", "../src/components/menu/features/controller.ts", "../src/components/menu/features/opener.ts", "../src/components/menu/features/position.ts", "../src/components/menu/features/keyboard.ts", "../src/components/menu/features/submenu.ts", "../src/components/menu/api.ts", "../src/components/menu/config.ts", "../src/components/menu/constants.ts", "../src/components/navigation/navigation.ts", "../src/components/navigation/api.ts", "../src/components/navigation/constants.ts", "../src/components/navigation/nav-item.ts", "../src/components/navigation/features/items.ts", "../src/components/navigation/types.ts", "../src/components/navigation/features/controller.ts", "../src/components/navigation/config.ts", "../src/components/radios/radios.ts", "../src/components/radios/radio.ts", "../src/components/radios/api.ts", "../src/components/radios/config.ts", "../src/components/radios/constants.ts", "../src/components/search/search.ts", "../src/components/search/features/structure.ts", "../src/components/search/features/states.ts", "../src/components/search/features/search.ts", "../src/components/search/api.ts", "../src/components/search/config.ts", "../src/components/search/constants.ts", "../src/components/segmented-button/segmented-button.ts", "../src/components/segmented-button/types.ts", "../src/components/segmented-button/config.ts", "../src/components/segmented-button/constants.ts", "../src/components/segmented-button/segment.ts", "../src/components/sheet/sheet.ts", "../src/components/sheet/types.ts", "../src/components/sheet/features/position.ts", "../src/components/sheet/features/content.ts", "../src/components/sheet/features/title.ts", "../src/components/sheet/features/state.ts", "../src/components/sheet/features/gestures.ts", "../src/components/sheet/api.ts", "../src/components/sheet/config.ts", "../src/components/sheet/constants.ts", "../src/components/slider/slider.ts", "../src/components/slider/features/range.ts", "../src/components/slider/constants.ts", "../src/components/slider/features/states.ts", "../src/components/slider/features/handlers.ts", "../src/components/slider/features/controller.ts", "../src/components/slider/features/canvas.ts", "../src/components/slider/api.ts", "../src/components/slider/config.ts", "../src/components/slider/schema.ts", "../src/components/snackbar/snackbar.ts", "../src/components/snackbar/features.ts", "../src/components/snackbar/constants.ts", "../src/components/snackbar/position.ts", "../src/components/snackbar/api.ts", "../src/components/snackbar/queue.ts", "../src/components/snackbar/config.ts", "../src/components/switch/switch.ts", "../src/components/switch/api.ts", "../src/components/switch/features.ts", "../src/components/switch/config.ts", "../src/components/switch/constants.ts", "../src/components/tabs/tabs.ts", "../src/components/tabs/tab.ts", "../src/components/tabs/constants.ts", "../src/components/tabs/config.ts", "../src/components/tabs/api.ts", "../src/components/tabs/utils.ts", "../src/components/tabs/indicator.ts", "../src/components/tabs/features.ts", "../src/components/tabs/state.ts", "../src/components/tabs/scroll-indicators.ts", "../src/components/tabs/responsive.ts", "../src/components/tabs/index.ts", "../src/components/textfield/textfield.ts", "../src/components/textfield/api.ts", "../src/components/textfield/features/leading-icon.ts", "../src/components/textfield/features/trailing-icon.ts", "../src/components/textfield/features/prefix-text.ts", "../src/components/textfield/features/suffix-text.ts", "../src/components/textfield/features/supporting-text.ts", "../src/components/textfield/features/placement.ts", "../src/components/textfield/features/density.ts", "../src/components/textfield/config.ts", "../src/components/textfield/constants.ts", "../src/components/timepicker/timepicker.ts", "../src/components/timepicker/types.ts", "../src/components/timepicker/config.ts", "../src/components/timepicker/constants.ts", "../src/components/timepicker/utils.ts", "../src/components/timepicker/clockdial.ts", "../src/components/timepicker/render.ts", "../src/components/timepicker/api.ts", "../src/components/top-app-bar/top-app-bar.ts", "../src/components/top-app-bar/config.ts", "../src/components/top-app-bar/constants.ts", "../src/components/top-app-bar/index.ts", "../src/components/tooltip/tooltip.ts", "../src/components/tooltip/types.ts", "../src/components/tooltip/api.ts", "../src/components/tooltip/config.ts", "../src/components/tooltip/constants.ts", "../src/components/list/list.ts", "../src/components/list/features/listmanager.ts", "../src/components/list/features/selection.ts", "../src/components/list/api.ts", "../src/components/list/config.ts", "../src/components/navigation/system/state.ts", "../src/components/navigation/system/core.ts", "../src/components/navigation/system/events.ts", "../src/components/navigation/system/mobile.ts", "../src/components/navigation/system/index.ts", "../src/components/progress/index.ts", "../src/components/select/select.ts", "../src/components/select/features.ts", "../src/components/select/api.ts", "../src/components/select/config.ts", "../src/index.ts", "../src/constants.ts", "../src/components/datepicker/constants.ts", "../src/components/dialog/constants.ts", "../src/components/fab/constants.ts"],
|
|
3
|
+
"sources": ["../src/core/compose/pipe.ts", "../src/core/compose/base.ts", "../src/core/dom/attributes.ts", "../src/core/config.ts", "../src/core/dom/classes.ts", "../src/core/dom/create.ts", "../src/core/utils/mobile.ts", "../src/core/compose/component.ts", "../src/core/state/emitter.ts", "../src/core/compose/features/events.ts", "../src/core/compose/features/text.ts", "../src/core/compose/features/icon.ts", "../src/core/compose/features/variant.ts", "../src/core/compose/features/size.ts", "../src/core/compose/features/position.ts", "../src/core/compose/features/constants.ts", "../src/core/compose/features/ripple.ts", "../src/core/compose/features/input.ts", "../src/core/compose/features/checkable.ts", "../src/core/compose/features/style.ts", "../src/core/compose/utils/type-guards.ts", "../src/core/compose/features/textinput.ts", "../src/core/compose/features/textlabel.ts", "../src/core/compose/features/track.ts", "../src/core/state/events.ts", "../src/core/compose/features/withEvents.ts", "../src/core/compose/features/badge.ts", "../src/core/utils/performance.ts", "../src/core/compose/features/throttle.ts", "../src/core/compose/features/debounce.ts", "../src/core/compose/features/disabled.ts", "../src/core/compose/features/lifecycle.ts", "../src/core/compose/features/index.ts", "../src/core/compose/index.ts", "../src/core/config/global.ts", "../src/core/config/component.ts", "../src/components/badge/constants.ts", "../src/components/badge/config.ts", "../src/components/badge/features.ts", "../src/components/badge/api.ts", "../src/components/badge/badge.ts", "../src/components/badge/index.ts", "../src/core/dom/events.ts", "../src/core/dom/index.ts", "../src/components/progress/constants.ts", "../src/core/utils/object.ts", "../src/core/utils/background.ts", "../src/core/utils/theme.ts", "../src/core/utils/color.ts", "../src/core/utils/index.ts", "../src/core/canvas/resize.ts", "../src/components/progress/features/circular.ts", "../src/components/progress/features/linear.ts", "../src/components/progress/features/canvas.ts", "../src/components/progress/features/state.ts", "../src/components/progress/api.ts", "../src/components/progress/config.ts", "../src/components/progress/progress.ts", "../src/components/button/features/progress.ts", "../src/core/state/store.ts", "../src/core/state/lifecycle.ts", "../src/core/state/disabled.ts", "../src/core/canvas/drawing.ts", "../src/core/canvas/animation.ts", "../src/core/canvas/utils.ts", "../src/core/canvas/index.ts", "../src/core/index.ts", "../src/components/button/api.ts", "../src/components/button/constants.ts", "../src/components/button/config.ts", "../src/components/button/button.ts", "../src/components/button/index.ts", "../src/components/list/constants.ts", "../src/components/select/constants.ts", "../src/components/index.ts", "../src/components/bottom-app-bar/bottom-app-bar.ts", "../src/components/bottom-app-bar/config.ts", "../src/components/bottom-app-bar/constants.ts", "../src/components/bottom-app-bar/index.ts", "../src/components/card/card.ts", "../src/components/card/api.ts", "../src/components/card/config.ts", "../src/components/card/content.ts", "../src/components/card/constants.ts", "../src/components/card/features.ts", "../src/components/carousel/carousel.ts", "../src/components/carousel/constants.ts", "../src/components/carousel/features/slides.ts", "../src/components/carousel/features/drag.ts", "../src/components/carousel/api.ts", "../src/components/carousel/config.ts", "../src/components/checkbox/checkbox.ts", "../src/components/checkbox/api.ts", "../src/components/checkbox/config.ts", "../src/components/checkbox/constants.ts", "../src/components/chips/chip/chip.ts", "../src/components/chips/chip/api.ts", "../src/components/chips/chip/config.ts", "../src/components/chips/chips.ts", "../src/components/chips/features/container.ts", "../src/components/chips/features/chip-items.ts", "../src/components/chips/constants.ts", "../src/components/chips/features/controller.ts", "../src/components/chips/features/dom.ts", "../src/components/chips/api.ts", "../src/components/chips/config.ts", "../src/components/datepicker/datepicker.ts", "../src/components/datepicker/types.ts", "../src/components/datepicker/utils.ts", "../src/components/datepicker/api.ts", "../src/components/datepicker/config.ts", "../src/components/datepicker/render.ts", "../src/components/dialog/dialog.ts", "../src/components/dialog/config.ts", "../src/components/dialog/features.ts", "../src/components/divider/divider.ts", "../src/components/divider/config.ts", "../src/components/divider/features.ts", "../src/components/dialog/api.ts", "../src/components/fab/fab.ts", "../src/components/fab/api.ts", "../src/components/fab/config.ts", "../src/components/extended-fab/extended-fab.ts", "../src/components/extended-fab/api.ts", "../src/components/extended-fab/config.ts", "../src/components/menu/menu.ts", "../src/components/menu/features/controller.ts", "../src/components/menu/features/opener.ts", "../src/components/menu/features/position.ts", "../src/components/menu/features/keyboard.ts", "../src/components/menu/features/submenu.ts", "../src/components/menu/api.ts", "../src/components/menu/config.ts", "../src/components/menu/constants.ts", "../src/components/navigation/navigation.ts", "../src/components/navigation/api.ts", "../src/components/navigation/constants.ts", "../src/components/navigation/nav-item.ts", "../src/components/navigation/features/items.ts", "../src/components/navigation/types.ts", "../src/components/navigation/features/controller.ts", "../src/components/navigation/config.ts", "../src/components/radios/radios.ts", "../src/components/radios/radio.ts", "../src/components/radios/api.ts", "../src/components/radios/config.ts", "../src/components/radios/constants.ts", "../src/components/search/search.ts", "../src/components/search/features/structure.ts", "../src/components/search/features/states.ts", "../src/components/search/features/search.ts", "../src/components/search/api.ts", "../src/components/search/config.ts", "../src/components/search/constants.ts", "../src/components/segmented-button/segmented-button.ts", "../src/components/segmented-button/types.ts", "../src/components/segmented-button/config.ts", "../src/components/segmented-button/constants.ts", "../src/components/segmented-button/segment.ts", "../src/components/sheet/sheet.ts", "../src/components/sheet/types.ts", "../src/components/sheet/features/position.ts", "../src/components/sheet/features/content.ts", "../src/components/sheet/features/title.ts", "../src/components/sheet/features/state.ts", "../src/components/sheet/features/gestures.ts", "../src/components/sheet/api.ts", "../src/components/sheet/config.ts", "../src/components/sheet/constants.ts", "../src/components/slider/slider.ts", "../src/components/slider/features/range.ts", "../src/components/slider/constants.ts", "../src/components/slider/features/states.ts", "../src/components/slider/features/handlers.ts", "../src/components/slider/features/controller.ts", "../src/components/slider/features/canvas.ts", "../src/components/slider/features/dom.ts", "../src/core/dom/utils.ts", "../src/components/slider/api.ts", "../src/components/slider/config.ts", "../src/components/snackbar/snackbar.ts", "../src/components/snackbar/features.ts", "../src/components/snackbar/constants.ts", "../src/components/snackbar/position.ts", "../src/components/snackbar/api.ts", "../src/components/snackbar/queue.ts", "../src/components/snackbar/config.ts", "../src/components/switch/switch.ts", "../src/components/switch/api.ts", "../src/components/switch/features.ts", "../src/components/switch/config.ts", "../src/components/switch/constants.ts", "../src/components/tabs/tabs.ts", "../src/components/tabs/tab.ts", "../src/components/tabs/constants.ts", "../src/components/tabs/config.ts", "../src/components/tabs/api.ts", "../src/components/tabs/utils.ts", "../src/components/tabs/indicator.ts", "../src/components/tabs/features.ts", "../src/components/tabs/state.ts", "../src/components/tabs/scroll-indicators.ts", "../src/components/tabs/responsive.ts", "../src/components/tabs/index.ts", "../src/components/textfield/textfield.ts", "../src/components/textfield/api.ts", "../src/components/textfield/features/leading-icon.ts", "../src/components/textfield/features/trailing-icon.ts", "../src/components/textfield/features/prefix-text.ts", "../src/components/textfield/features/suffix-text.ts", "../src/components/textfield/features/supporting-text.ts", "../src/components/textfield/features/placement.ts", "../src/components/textfield/features/density.ts", "../src/components/textfield/features/error.ts", "../src/components/textfield/config.ts", "../src/components/textfield/constants.ts", "../src/components/timepicker/timepicker.ts", "../src/components/timepicker/types.ts", "../src/components/timepicker/config.ts", "../src/components/timepicker/constants.ts", "../src/components/timepicker/utils.ts", "../src/components/timepicker/clockdial.ts", "../src/components/timepicker/render.ts", "../src/components/timepicker/api.ts", "../src/components/top-app-bar/top-app-bar.ts", "../src/components/top-app-bar/config.ts", "../src/components/top-app-bar/constants.ts", "../src/components/top-app-bar/index.ts", "../src/components/tooltip/tooltip.ts", "../src/components/tooltip/types.ts", "../src/components/tooltip/api.ts", "../src/components/tooltip/config.ts", "../src/components/tooltip/constants.ts", "../src/components/list/list.ts", "../src/components/list/features/renderer.ts", "../src/components/list/features/selection.ts", "../src/components/list/api.ts", "../src/components/list/config.ts", "../src/components/navigation/system/state.ts", "../src/components/navigation/system/core.ts", "../src/components/navigation/system/events.ts", "../src/components/navigation/system/mobile.ts", "../src/components/navigation/system/index.ts", "../src/components/progress/index.ts", "../src/components/select/select.ts", "../src/components/select/features.ts", "../src/components/select/api.ts", "../src/components/select/config.ts", "../src/index.ts", "../src/constants.ts", "../src/components/datepicker/constants.ts", "../src/components/dialog/constants.ts", "../src/components/fab/constants.ts"],
|
|
4
4
|
"sourcesContent": [
|
|
5
5
|
"// src/core/compose/pipe.ts\n/**\n * @namespace compose\n * @description Core composition utilities for creating and combining components\n */\n\n/**\n * Performs left-to-right function composition.\n * Each function takes the return value of the previous function as its input.\n *\n * @memberof compose\n * @function pipe\n * @param {...Function} fns - Functions to compose\n * @returns {Function} Composed function that passes its argument through the pipeline\n *\n * @example\n * const addOne = x => x + 1;\n * const double = x => x * 2;\n * const addOneThenDouble = pipe(addOne, double);\n * console.log(addOneThenDouble(3)); // Output: 8\n */\nexport const pipe = <T>(...fns: Array<(arg: any) => any>) => \n (x: T): any => fns.reduce((v, f) => f(v), x);\n\n/**\n * Performs right-to-left function composition.\n * This is the mathematical composition order: (f ∘ g)(x) = f(g(x))\n *\n * @memberof compose\n * @function compose\n * @param {...Function} fns - Functions to compose\n * @returns {Function} Composed function following mathematical composition order\n *\n * @example\n * const addOne = x => x + 1;\n * const double = x => x * 2;\n * const doubleTheAddOne = compose(addOne, double);\n * console.log(doubleTheAddOne(3)); // Output: 7\n */\nexport const compose = <T>(...fns: Array<(arg: any) => any>) => \n (x: T): any => fns.reduceRight((v, f) => f(v), x);\n\n/**\n * Creates a function that applies transformations to an object with shared context.\n * Useful for applying multiple transformations while maintaining a shared state.\n *\n * @memberof compose\n * @function transform\n * @param {...Function} transformers - Functions that transform the object\n * @returns {Function} Function that applies all transformations with shared context\n *\n * @example\n * const withName = (obj, context) => ({ ...obj, name: context.name });\n * const withAge = (obj, context) => ({ ...obj, age: context.age });\n * const createPerson = transform(withName, withAge);\n *\n * const person = createPerson({}, { name: 'John', age: 30 });\n * // Result: { name: 'John', age: 30 }\n */\nexport const transform = <T, C = Record<string, any>>(\n ...transformers: Array<(obj: T, context: C) => Partial<T>>\n) => (obj: T, context: C = {} as C): T => \n transformers.reduce(\n (acc, transformer) => ({\n ...acc,\n ...transformer(acc, context)\n }), \n obj\n );\n\n/**\n * @typedef {Object} TransformContext\n * @property {any} [key] - Any contextual data needed by transformers\n */",
|
|
6
6
|
"// src/core/compose/base.ts\n\n/**\n * Configuration for component creation\n */\nexport interface ComponentConfig {\n [key: string]: any;\n}\n\n/**\n * Basic component interface\n */\nexport interface Component {\n /**\n * Component element\n */\n element: HTMLElement | null;\n \n /**\n * Component configuration\n */\n config: ComponentConfig;\n \n /**\n * Setup method\n * @returns Component for chaining\n */\n setup: () => Component;\n}\n\n/**\n * Creates a basic component with minimal structure\n * \n * @param config - Component configuration\n * @returns Basic component structure\n */\nexport const createComponent = (config: ComponentConfig = {}): Component => ({\n element: null,\n config,\n setup() {\n return this;\n }\n});",
|
|
7
|
-
"// src/core/dom/attributes.ts\n/**\n * @module core/dom\n * @description DOM attribute helpers\n */\n\n/**\n *
|
|
7
|
+
"// src/core/dom/attributes.ts\n/**\n * @module core/dom\n * @description DOM attribute helpers\n */\n\n/**\n * Set attributes on an element with performance optimizations\n * Fast path for single attribute, efficient iteration for multiple\n *\n * @param {HTMLElement} element - Element to set attributes on\n * @param {Record<string, any>} attributes - Attributes to set\n * @returns {HTMLElement} The element for chaining\n */\nexport const setAttributes = (\n element: HTMLElement,\n attributes: Record<string, any> = {}\n): HTMLElement => {\n if (!attributes) return element;\n\n // Fast path: single attribute - avoid Object.keys overhead\n const keys = Object.keys(attributes);\n if (keys.length === 1) {\n const value = attributes[keys[0]];\n if (value != null) {\n element.setAttribute(keys[0], String(value));\n }\n return element;\n }\n\n // General case: multiple attributes - for...in is faster than Object.entries\n for (const key in attributes) {\n const value = attributes[key];\n if (value != null) {\n element.setAttribute(key, String(value));\n }\n }\n\n return element;\n};\n\n/**\n * Remove attributes from an element\n * Standard for loop is fastest for array iteration\n *\n * @param {HTMLElement} element - Element to remove attributes from\n * @param {string[]} attributes - Attributes to remove\n * @returns {HTMLElement} The element for chaining\n */\nexport const removeAttributes = (\n element: HTMLElement,\n attributes: string[] = []\n): HTMLElement => {\n // Standard for loop is fastest for array iteration\n for (let i = 0; i < attributes.length; i++) {\n element.removeAttribute(attributes[i]);\n }\n return element;\n};\n\n/**\n * Batch attribute operations for better performance when setting many attributes\n * Single pass through operations array for optimal performance\n *\n * @param {HTMLElement} element - Element to modify\n * @param {Array<{action: \"set\" | \"remove\", key: string, value?: any}>} operations - Array of attribute operations\n * @returns {HTMLElement} The element for chaining\n */\nexport const batchAttributes = (\n element: HTMLElement,\n operations: Array<{\n action: \"set\" | \"remove\";\n key: string;\n value?: any;\n }>\n): HTMLElement => {\n // Process all operations in a single pass for optimal performance\n for (let i = 0; i < operations.length; i++) {\n const op = operations[i];\n if (op.action === \"set\" && op.value != null) {\n element.setAttribute(op.key, String(op.value));\n } else if (op.action === \"remove\") {\n element.removeAttribute(op.key);\n }\n }\n return element;\n};\n\n/**\n * Check if element has attribute\n * @param element - Element to check\n * @param attribute - Attribute name to check\n * @returns True if element has the attribute\n */\nexport const hasAttribute = (\n element: HTMLElement,\n attribute: string\n): boolean => element.hasAttribute(attribute);\n\n/**\n * Get attribute value with default\n * @param element - Element to get attribute from\n * @param attribute - Attribute name\n * @param defaultValue - Default value if attribute doesn't exist\n * @returns Attribute value or default\n */\nexport const getAttribute = (\n element: HTMLElement,\n attribute: string,\n defaultValue: string = \"\"\n): string => element.getAttribute(attribute) ?? defaultValue;\n",
|
|
8
8
|
"// src/core/config.ts\n\n/**\n * Library prefix used for all components\n */\nexport const PREFIX = 'mtrl';\n\n/**\n * Gets a prefixed component class name\n * @param type - Component type\n * @returns Prefixed class name\n */\nexport const getComponentClass = (type: string): string => `${PREFIX}-${type}`;\n\n/**\n * Gets a BEM modifier class name\n * @param baseClass - Base class name\n * @param modifier - Modifier name\n * @returns Modifier class name\n */\nexport const getModifierClass = (baseClass: string, modifier: string): string => `${baseClass}--${modifier}`;\n\n/**\n * Gets a BEM element class name\n * @param baseClass - Base class name\n * @param element - Element name\n * @returns Element class name\n */\nexport const getElementClass = (baseClass: string, element: string): string => `${baseClass}-${element}`;\n\n/**\n * Component type identifiers\n */\nexport enum COMPONENTS {\n BUTTON = 'button',\n TEXTFIELD = 'textfield',\n CONTAINER = 'container',\n SNACKBAR = 'snackbar',\n SWITCH = 'switch'\n}\n\n/**\n * Theme configuration interface\n */\nexport interface ThemeConfig {\n /**\n * Theme name\n */\n name: string;\n \n /**\n * Theme CSS variables\n */\n variables: Record<string, string>;\n \n /**\n * Theme variants\n */\n variants: Record<string, any>;\n}\n\n/**\n * Component configuration interface\n */\nexport interface ComponentConfig {\n prefix: string;\n type: string;\n baseClass: string;\n getClass: () => string;\n getModifierClass: (modifier: string) => string;\n getElementClass: (element: string) => string;\n withTheme: (theme: string) => ThemedComponentConfig;\n withVariants: (...variants: string[]) => VariantComponentConfig;\n withStates: (...states: string[]) => StateComponentConfig;\n}\n\n/**\n * Themed component configuration interface\n */\nexport interface ThemedComponentConfig extends ComponentConfig {\n theme: string;\n getThemeClass: (variant: string) => string;\n getCssVariables: () => Record<string, string>;\n}\n\n/**\n * Variant component configuration interface\n */\nexport interface VariantComponentConfig extends ComponentConfig {\n variants: string[];\n hasVariant: (variant: string) => boolean;\n getVariantClass: (variant: string) => string | null;\n}\n\n/**\n * State component configuration interface\n */\nexport interface StateComponentConfig extends ComponentConfig {\n states: string[];\n getStateClass: (state: string) => string | null;\n}\n\n/**\n * Creates a component configuration object\n * @param type - Component type\n * @returns Component configuration interface\n */\nexport const createComponentConfig = (type: string): ComponentConfig => {\n const baseClass = `${PREFIX}-${type}`;\n\n // Create the base config object\n const config: ComponentConfig = {\n prefix: PREFIX,\n type,\n baseClass,\n\n // Class name generators\n getClass: () => baseClass,\n getModifierClass: (modifier) => `${baseClass}--${modifier}`,\n getElementClass: (element) => `${baseClass}-${element}`,\n\n // Theme support\n withTheme: (theme) => ({\n ...config,\n theme,\n getThemeClass: (variant) => `${baseClass}--theme-${theme}-${variant}`,\n getCssVariables: () => ({}) // Empty implementation as placeholder\n }),\n\n // Variant support\n withVariants: (...variants) => ({\n ...config,\n variants,\n hasVariant: (variant) => variants.includes(variant),\n getVariantClass: (variant) =>\n variants.includes(variant) ? `${baseClass}--${variant}` : null\n }),\n\n // State support\n withStates: (...states) => ({\n ...config,\n states,\n getStateClass: (state) =>\n states.includes(state) ? `${baseClass}--state-${state}` : null\n })\n };\n\n return config;\n};\n\n/**\n * Common component states\n */\nexport enum STATES {\n DISABLED = 'disabled',\n FOCUSED = 'focused',\n ACTIVE = 'active',\n LOADING = 'loading',\n ERROR = 'error'\n}\n\n/**\n * CSS class generation utilities\n */\nexport const classNames = {\n /**\n * Creates a BEM-style class name\n * @param block - Block name\n * @param element - Element name\n * @param modifier - Modifier name\n * @returns BEM class name\n */\n bem: (block: string, element?: string, modifier?: string): string => {\n let className = block;\n if (element) className += `-${element}`;\n if (modifier) className += `--${modifier}`;\n return className;\n },\n\n /**\n * Joins class names, filtering out falsy values\n * @param classes - Class names to join\n * @returns Joined class names\n */\n join: (...classes: (string | undefined | null | false)[]): string => \n classes.filter(Boolean).join(' ')\n};\n\n/**\n * Creates a themed component configuration\n * @param type - Component type\n * @param theme - Theme configuration\n * @returns Themed component configuration\n */\nexport const createThemedComponent = (type: string, theme: ThemeConfig): ThemedComponentConfig => {\n const config = createComponentConfig(type);\n\n return {\n ...config,\n theme: theme.name,\n\n // Theme-specific class generators\n getThemeClass: (variant) =>\n `${config.getClass()}--theme-${theme.name}${variant ? `-${variant}` : ''}`,\n\n // Theme CSS variables\n getCssVariables: () =>\n Object.entries(theme.variables).reduce((acc, [key, value]) => ({\n ...acc,\n [`--${PREFIX}-${type}-${key}`]: value\n }), {} as Record<string, string>)\n };\n};",
|
|
9
|
-
"// src/core/dom/classes.ts\n/**\n * @module core/dom\n * @description DOM manipulation utilities optimized for performance\n */\n\nimport { PREFIX } from '../config';\n\n// Constant for prefix with dash for better performance\nconst PREFIX_WITH_DASH = `${PREFIX}-`;\n\n\n/**\n * Normalizes class names input by handling various formats:\n * - String with space-separated classes\n * - Array of strings\n * - Mixed array of strings and space-separated classes\n * \n * @param classes - Classes to normalize\n * @returns Array of unique, non-empty class names\n */\nexport const normalizeClasses = (...classes: (string | string[])[]): string[] => {\n // Process the input classes\n const processedClasses = classes\n .flat()\n .reduce((acc: string[], cls) => {\n if (typeof cls === 'string') {\n // Split space-separated classes and add them individually\n acc.push(...cls.split(/\\s+/));\n }\n return acc;\n }, [])\n .filter(Boolean); // Remove empty strings\n \n // Create a Set and convert back to array without spread operator\n const uniqueClasses = new Set<string>();\n processedClasses.forEach(cls => uniqueClasses.add(cls));\n \n return Array.from(uniqueClasses);\n};\n\n/**\n * Adds multiple classes to an element\n * Automatically adds prefix to classes that don't already have it\n * Optimized for minimal array operations and DOM interactions\n * \n * @param {HTMLElement} element - Target element\n * @param {...(string | string[])} classes - Classes to add\n * @returns {HTMLElement} Modified element\n */\nexport const addClass = (element: HTMLElement, ...classes: (string | string[])[]): HTMLElement => {\n const normalizedClasses = normalizeClasses(...classes);\n \n // Early return for empty classes\n if (!normalizedClasses.length) return element;\n \n // Using DOMTokenList's add() with multiple arguments is faster than multiple add() calls\n // But we need to handle prefixing first\n const prefixedClasses: string[] = [];\n \n for (let i = 0; i < normalizedClasses.length; i++) {\n const cls = normalizedClasses[i];\n if (!cls) continue;\n \n prefixedClasses.push(\n cls.startsWith(PREFIX_WITH_DASH) ? cls : PREFIX_WITH_DASH + cls\n );\n }\n \n // Add all classes in a single operation if possible\n if (prefixedClasses.length) {\n element.classList.add(...prefixedClasses);\n }\n \n return element;\n};\n\n/**\n * Removes multiple classes from an element\n * Handles only exact class names as specified (no automatic prefixing)\n * For better performance, clients should know exactly which classes to remove\n * \n * @param {HTMLElement} element - Target element\n * @param {...(string | string[])} classes - Classes to remove\n * @returns {HTMLElement} Modified element\n */\nexport const removeClass = (element: HTMLElement, ...classes: (string | string[])[]): HTMLElement => {\n const normalizedClasses = normalizeClasses(...classes);\n \n // Early return for empty classes\n if (!normalizedClasses.length) return element;\n \n // Prepare prefixed class names\n const prefixedClasses: string[] = [];\n \n for (let i = 0; i < normalizedClasses.length; i++) {\n const cls = normalizedClasses[i];\n if (!cls) continue;\n \n // Only add the prefixed version\n prefixedClasses.push(\n cls.startsWith(PREFIX_WITH_DASH) ? cls : PREFIX_WITH_DASH + cls\n );\n }\n \n // Remove all classes in a single operation if possible\n if (prefixedClasses.length) {\n element.classList.remove(...prefixedClasses);\n }\n \n return element;\n};\n\n/**\n * Toggles multiple classes on an element\n * Automatically adds prefix to classes that don't already have it\n * \n * @param {HTMLElement} element - Target element\n * @param {...(string | string[])} classes - Classes to toggle\n * @returns {HTMLElement} Modified element\n */\nexport const toggleClass = (element: HTMLElement, ...classes: (string | string[])[]): HTMLElement => {\n const normalizedClasses = normalizeClasses(...classes);\n \n for (let i = 0; i < normalizedClasses.length; i++) {\n const cls = normalizedClasses[i];\n if (!cls) continue;\n \n const prefixedClass = cls.startsWith(PREFIX_WITH_DASH) ? cls : PREFIX_WITH_DASH + cls;\n element.classList.toggle(prefixedClass);\n }\n \n return element;\n};\n\n/**\n * Checks if an element has all specified classes\n * Automatically adds prefix to classes that don't already have it\n * \n * @param {HTMLElement} element - Target element\n * @param {...(string | string[])} classes - Classes to check\n * @returns {boolean} True if element has all specified classes\n */\nexport const hasClass = (element: HTMLElement, ...classes: (string | string[])[]): boolean => {\n const normalizedClasses = normalizeClasses(...classes);\n \n // Early return for empty classes (technically all are present)\n if (!normalizedClasses.length) return true;\n \n for (let i = 0; i < normalizedClasses.length; i++) {\n const cls = normalizedClasses[i];\n if (!cls) continue;\n \n const prefixedClass = cls.startsWith(PREFIX_WITH_DASH) ? cls : PREFIX_WITH_DASH + cls;\n if (!element.classList.contains(prefixedClass)) {\n return false;\n }\n }\n \n return true;\n};",
|
|
10
|
-
"// src/core/dom/create.ts\n/**\n * @module core/dom\n * @description DOM manipulation utilities\n */\n\nimport { setAttributes } from \"./attributes\";\nimport { normalizeClasses } from \"./classes\";\n\nimport { addClass } from \"./classes\"; // Import addClass\n\n/**\n * Event handler function type\n */\nexport type EventHandler = (event: Event) => void;\n\n/**\n * Event condition type - either a boolean or a function that returns a boolean\n */\nexport type EventCondition =\n | boolean\n | ((context: any, event: Event) => boolean);\n\n/**\n * Element type that can be either HTMLElement or SVGElement\n */\nexport type DOMElement = HTMLElement | SVGElement;\n\n/**\n * Options for element creation\n */\nexport interface CreateElementOptions {\n /**\n * HTML tag name\n */\n tag?: string;\n\n /**\n * Container to append element to\n */\n container?: HTMLElement | null;\n\n /**\n * Inner HTML content\n */\n html?: string;\n\n /**\n * Text content\n */\n text?: string;\n\n /**\n * Element ID\n */\n id?: string;\n\n /**\n * Element ariaLabel\n */\n ariaLabel?: string;\n\n /**\n * Dataset attributes\n */\n data?: Record<string, string>;\n\n /**\n * CSS classes (will be automatically prefixed with 'mtrl-')\n * Alias for 'className'\n */\n class?: string | string[];\n\n /**\n * CSS classes (will be automatically prefixed with 'mtrl-')\n * Alias for 'class'\n */\n className?: string | string[];\n\n /**\n * CSS classes that will NOT be prefixed\n * Added as-is to the element\n */\n rawClass?: string | string[];\n\n /**\n * HTML attributes\n */\n attributes?: Record<string, any>;\n\n /**\n * Events to forward when component has emit method\n */\n forwardEvents?: Record<string, EventCondition>;\n\n /**\n * Callback after element creation\n */\n onCreate?: (element: HTMLElement, context?: any) => void;\n\n /**\n * Component context\n */\n context?: any;\n\n /**\n * Additional attributes\n */\n [key: string]: any;\n}\n\n/**\n * Options for SVG element creation, extends regular element options\n */\nexport interface CreateSVGElementOptions\n extends Omit<CreateElementOptions, \"container\" | \"onCreate\"> {\n /**\n * Container to append element to\n */\n container?: DOMElement | null;\n\n /**\n * Callback after element creation\n */\n onCreate?: (element: SVGElement, context?: any) => void;\n}\n\n/**\n * Event handler storage to facilitate cleanup\n */\nexport interface EventHandlerStorage {\n [eventName: string]: EventHandler;\n}\n\n/**\n * List of SVG element tags to detect when to use namespaces\n */\nconst SVG_TAGS = [\n \"svg\",\n \"circle\",\n \"ellipse\",\n \"line\",\n \"path\",\n \"polygon\",\n \"polyline\",\n \"rect\",\n \"g\",\n \"text\",\n \"tspan\",\n \"textPath\",\n \"defs\",\n \"clipPath\",\n \"mask\",\n \"pattern\",\n \"marker\",\n \"linearGradient\",\n \"radialGradient\",\n \"stop\",\n \"use\",\n \"foreignObject\",\n \"desc\",\n \"title\",\n \"metadata\",\n \"symbol\",\n \"switch\",\n];\n\n/**\n * Sets up event forwarding for an element\n * @private\n * @param element - The element to set up events for\n * @param forwardEvents - Event configuration\n * @param context - Component context\n */\nconst _setupEventForwarding = (\n element: HTMLElement | SVGElement,\n forwardEvents: Record<string, EventCondition>,\n context: any\n): void => {\n if (!forwardEvents || (!context?.emit && !context?.on)) return;\n\n (element as any).__eventHandlers = {};\n\n for (const nativeEvent in forwardEvents) {\n const eventConfig = forwardEvents[nativeEvent];\n\n const handler = (event: Event) => {\n let shouldForward = true;\n\n if (typeof eventConfig === \"function\") {\n try {\n // Create a lightweight context clone\n const ctxWithElement = { ...context, element };\n shouldForward = eventConfig(ctxWithElement, event);\n } catch (error) {\n console.warn(`Error in event condition for ${nativeEvent}:`, error);\n shouldForward = false;\n }\n } else {\n shouldForward = Boolean(eventConfig);\n }\n\n if (shouldForward) {\n if (context.emit) {\n context.emit(nativeEvent, { event, element, originalEvent: event });\n } else if (context.on) {\n element.dispatchEvent(\n new CustomEvent(nativeEvent, {\n detail: { event, element, originalEvent: event },\n bubbles: true,\n cancelable: true,\n })\n );\n }\n }\n };\n\n (element as any).__eventHandlers[nativeEvent] = handler;\n element.addEventListener(nativeEvent, handler);\n }\n};\n\n/**\n * Applies common properties to an element\n * @private\n * @param element - The element to apply properties to\n * @param options - Element options\n */\nconst _applyCommonProperties = (\n element: HTMLElement | SVGElement,\n { html, text, id }: { html?: string; text?: string; id?: string }\n): void => {\n if (html) element.innerHTML = html;\n if (text) element.textContent = text;\n if (id) element.id = id;\n};\n\n/**\n * Applies classes to an element\n * @private\n * @param element - The element to apply classes to\n * @param prefixedClassSource - Classes to be prefixed\n * @param rawClass - Classes to be applied without prefix\n */\nconst _applyClasses = (\n element: HTMLElement | SVGElement,\n prefixedClassSource: string | string[] | undefined,\n rawClass: string | string[] | undefined\n): void => {\n // Handle prefixed classes\n if (prefixedClassSource) {\n // Use type assertion to make TypeScript happy\n addClass(element as HTMLElement, prefixedClassSource);\n }\n\n // Handle raw classes (no prefix)\n if (rawClass) {\n const rawClasses = normalizeClasses(rawClass);\n if (rawClasses.length) {\n element.classList.add(...rawClasses);\n }\n }\n};\n\n/**\n * Finalizes element creation by appending to container and calling onCreate\n * @private\n * @param element - The created element\n * @param container - Container to append to\n * @param onCreate - Callback after creation\n * @param context - Component context\n */\nconst _finalizeElement = <T extends HTMLElement | SVGElement>(\n element: T,\n container: HTMLElement | SVGElement | null | undefined,\n onCreate: ((element: T, context?: any) => void) | undefined,\n context: any\n): T => {\n // Append to container if provided\n if (container) container.appendChild(element);\n if (onCreate) onCreate(element, context);\n return element;\n};\n\n/**\n * Creates an HTML element with the specified options\n *\n * @param {CreateElementOptions} options - Element creation options\n * @returns {HTMLElement} Created HTML element\n */\nexport const createElement = (\n options: CreateElementOptions = {}\n): HTMLElement => {\n const {\n tag = \"div\",\n container = null,\n html = \"\",\n text = \"\",\n id = \"\",\n data = {},\n class: classOption,\n className,\n rawClass,\n attributes = {},\n forwardEvents = {},\n onCreate,\n context,\n ...rest\n } = options;\n\n // Create standard HTML element\n const element = document.createElement(tag);\n\n // Apply basic properties\n _applyCommonProperties(element, { html, text, id });\n\n // Apply classes\n _applyClasses(element, classOption || className, rawClass);\n\n // Handle data attributes directly\n for (const key in data) {\n element.dataset[key] = data[key];\n }\n\n // Handle regular attributes with setAttribute for HTML elements\n const allAttributes = { ...attributes, ...rest };\n for (const key in allAttributes) {\n const value = allAttributes[key];\n if (value != null) {\n element.setAttribute(key, String(value));\n }\n }\n\n // Handle event forwarding\n _setupEventForwarding(element, forwardEvents, context);\n\n // Finalize element (append to container, call onCreate)\n return _finalizeElement(element, container, onCreate, context);\n};\n\n/**\n * Creates an SVG element with the specified options\n *\n * @param {CreateSVGElementOptions} options - SVG element creation options\n * @returns {SVGElement} Created SVG element\n */\nexport const createSVGElement = (\n options: CreateSVGElementOptions = {}\n): SVGElement => {\n const {\n tag = \"svg\",\n container = null,\n html = \"\",\n text = \"\",\n id = \"\",\n class: classOption,\n className,\n rawClass,\n attributes = {},\n forwardEvents = {},\n onCreate,\n context,\n ...rest\n } = options;\n\n // Ensure we're using a valid SVG tag name\n if (!SVG_TAGS.includes(tag.toLowerCase())) {\n console.warn(`Warning: '${tag}' is not a standard SVG element tag.`);\n }\n\n // Create SVG element with proper namespace\n const element = document.createElementNS(\"http://www.w3.org/2000/svg\", tag);\n\n // Apply basic properties\n _applyCommonProperties(element, { html, text, id });\n\n // Apply classes\n _applyClasses(element, classOption || className, rawClass);\n\n // Handle regular attributes with setAttributeNS for SVG elements to preserve case sensitivity\n const allAttributes = { ...attributes, ...rest };\n for (const key in allAttributes) {\n const value = allAttributes[key];\n if (value != null) {\n element.setAttributeNS(null, key, String(value));\n }\n }\n\n // Handle event forwarding\n _setupEventForwarding(element, forwardEvents, context);\n\n // Finalize element (append to container, call onCreate)\n return _finalizeElement(element, container, onCreate, context);\n};\n\n/**\n * Removes event handlers from an element\n * @param element - Element to cleanup\n */\nexport const removeEventHandlers = (\n element: HTMLElement | SVGElement\n): void => {\n const handlers = (element as any).__eventHandlers;\n if (handlers) {\n for (const event in handlers) {\n element.removeEventListener(event, handlers[event]);\n }\n delete (element as any).__eventHandlers;\n }\n};\n\n/**\n * Higher-order function to add attributes to an element\n * @param {Record<string, any>} attributes - Attributes to add\n * @returns {(element: HTMLElement) => HTMLElement} Element transformer\n */\nexport const withAttributes =\n (attributes: Record<string, any>) =>\n (element: HTMLElement): HTMLElement => {\n setAttributes(element, attributes);\n return element;\n };\n\n/**\n * Higher-order function to add classes to an element\n * @param {...(string | string[])} classes - Classes to add\n * @returns {(element: HTMLElement) => HTMLElement} Element transformer\n */\nexport const withClasses =\n (...classes: (string | string[])[]) =>\n (element: HTMLElement): HTMLElement => {\n addClass(element, ...classes);\n return element;\n };\n\n/**\n * Higher-order function to add content to an element\n * @param {Node|string} content - Content to add\n * @returns {(element: HTMLElement) => HTMLElement} Element transformer\n */\nexport const withContent =\n (content: Node | string) =>\n (element: HTMLElement): HTMLElement => {\n if (content instanceof Node) element.appendChild(content);\n else element.textContent = content;\n return element;\n };\n\n// Extend interfaces to add eventHandlers property\ndeclare global {\n interface HTMLElement {\n /**\n * Storage for event handlers to enable cleanup\n */\n __eventHandlers?: EventHandlerStorage;\n }\n\n interface SVGElement {\n /**\n * Storage for event handlers to enable cleanup\n */\n __eventHandlers?: EventHandlerStorage;\n }\n}\n",
|
|
9
|
+
"// src/core/dom/classes.ts\n/**\n * @module core/dom\n * @description DOM manipulation utilities optimized for performance\n */\n\nimport { PREFIX } from \"../config\";\n\n// Constant for prefix with dash for better performance\nconst PREFIX_WITH_DASH = `${PREFIX}-`;\n\n// Cache for frequently used class combinations to avoid repeated processing\nconst classCache = new Map<string, string[]>();\nconst MAX_CACHE_SIZE = 500;\n\n/**\n * Normalize classes to array of unique strings with optimization and caching\n * - String with space-separated classes\n * - Array of strings\n * - Mixed array of strings and space-separated classes\n *\n * @param {...(string | string[])} classes - Classes to normalize\n * @returns {string[]} Array of unique, non-empty class names\n */\nexport const normalizeClasses = (\n ...classes: (string | string[])[]\n): string[] => {\n // Fast path 1: Empty input\n if (classes.length === 0) return [];\n\n // Fast path 2: Single string without spaces - most common case\n if (classes.length === 1 && typeof classes[0] === \"string\") {\n const input = classes[0];\n if (!input) return [];\n if (!input.includes(\" \")) return [input];\n\n // Check cache for single string with spaces\n if (classCache.has(input)) {\n return classCache.get(input)!;\n }\n }\n\n // Optimized processing - single pass with minimal allocations\n const seen = new Set<string>();\n const result: string[] = [];\n\n for (const cls of classes) {\n if (typeof cls === \"string\" && cls) {\n // Fast path for single class\n if (!cls.includes(\" \")) {\n if (!seen.has(cls)) {\n seen.add(cls);\n result.push(cls);\n }\n } else {\n // Split space-separated classes efficiently\n cls.split(\" \").forEach((c) => {\n const trimmed = c.trim();\n if (trimmed && !seen.has(trimmed)) {\n seen.add(trimmed);\n result.push(trimmed);\n }\n });\n }\n } else if (Array.isArray(cls)) {\n // Process array of classes\n cls.forEach((c) => {\n if (typeof c === \"string\" && c && !seen.has(c)) {\n seen.add(c);\n result.push(c);\n }\n });\n }\n }\n\n // Cache result for single string inputs to avoid repeated processing\n if (\n classes.length === 1 &&\n typeof classes[0] === \"string\" &&\n result.length <= 10\n ) {\n if (classCache.size < MAX_CACHE_SIZE) {\n classCache.set(classes[0], result);\n }\n }\n\n return result;\n};\n\n/**\n * Add prefixed classes to element with optimizations\n * Automatically adds prefix to classes that don't already have it\n * Optimized for minimal DOM interactions and single-class scenarios\n *\n * @param {HTMLElement} element - Target element\n * @param {...(string | string[])} classes - Classes to add\n * @returns {HTMLElement} Modified element for chaining\n */\nexport const addClass = (\n element: HTMLElement,\n ...classes: (string | string[])[]\n): HTMLElement => {\n // Fast path 1: Empty classes\n if (classes.length === 0) return element;\n\n // Handle the case where an array is passed directly (not spread)\n // This happens when addClass(element, [\"class1\", \"class2\"]) is called\n if (classes.length === 1 && Array.isArray(classes[0])) {\n return addClass(element, ...classes[0]);\n }\n\n // Fast path 2: Single string class - most common case\n if (classes.length === 1 && typeof classes[0] === \"string\") {\n const cls = classes[0];\n if (cls && !cls.includes(\" \")) {\n const prefixed = cls.startsWith(PREFIX_WITH_DASH)\n ? cls\n : PREFIX_WITH_DASH + cls;\n // Safety check: ensure no spaces were introduced by prefixing\n if (!prefixed.includes(\" \")) {\n element.classList.add(prefixed);\n return element;\n }\n }\n }\n\n // Full processing for complex cases\n const normalized = normalizeClasses(...classes);\n for (const cls of normalized) {\n const prefixed = cls.startsWith(PREFIX_WITH_DASH)\n ? cls\n : PREFIX_WITH_DASH + cls;\n\n // Safety check: ensure no spaces in class token (prevents DOMTokenList errors)\n if (prefixed.includes(\" \")) {\n // Split further if needed (shouldn't happen if normalizeClasses works correctly)\n prefixed.split(\" \").forEach((c) => {\n const trimmed = c.trim();\n if (trimmed) element.classList.add(trimmed);\n });\n } else {\n element.classList.add(prefixed);\n }\n }\n\n return element;\n};\n\n/**\n * Remove prefixed classes from element with optimizations\n * Handles exact class names as specified with automatic prefixing\n * Optimized for single-class scenarios and batch operations\n *\n * @param {HTMLElement} element - Target element\n * @param {...(string | string[])} classes - Classes to remove\n * @returns {HTMLElement} Modified element for chaining\n */\nexport const removeClass = (\n element: HTMLElement,\n ...classes: (string | string[])[]\n): HTMLElement => {\n // Fast path 1: Empty classes\n if (classes.length === 0) return element;\n\n // Handle the case where an array is passed directly (not spread)\n if (classes.length === 1 && Array.isArray(classes[0])) {\n return removeClass(element, ...classes[0]);\n }\n\n // Fast path 2: Single string class - most common case\n if (classes.length === 1 && typeof classes[0] === \"string\") {\n const cls = classes[0];\n if (cls && !cls.includes(\" \")) {\n const prefixed = cls.startsWith(PREFIX_WITH_DASH)\n ? cls\n : PREFIX_WITH_DASH + cls;\n // Safety check: ensure no spaces were introduced by prefixing\n if (!prefixed.includes(\" \")) {\n element.classList.remove(prefixed);\n return element;\n }\n }\n }\n\n // Full processing for complex cases\n const normalized = normalizeClasses(...classes);\n for (const cls of normalized) {\n const prefixed = cls.startsWith(PREFIX_WITH_DASH)\n ? cls\n : PREFIX_WITH_DASH + cls;\n\n // Safety check: ensure no spaces in class token\n if (prefixed.includes(\" \")) {\n prefixed.split(\" \").forEach((c) => {\n const trimmed = c.trim();\n if (trimmed) element.classList.remove(trimmed);\n });\n } else {\n element.classList.remove(prefixed);\n }\n }\n\n return element;\n};\n\n/**\n * Toggle prefixed classes on element with optimizations\n * Automatically adds prefix to classes that don't already have it\n * Optimized for single-class scenarios\n *\n * @param {HTMLElement} element - Target element\n * @param {...(string | string[])} classes - Classes to toggle\n * @returns {HTMLElement} Modified element for chaining\n */\nexport const toggleClass = (\n element: HTMLElement,\n ...classes: (string | string[])[]\n): HTMLElement => {\n // Handle the case where an array is passed directly (not spread)\n if (classes.length === 1 && Array.isArray(classes[0])) {\n return toggleClass(element, ...classes[0]);\n }\n\n // Fast path: Single string class - most common case\n if (classes.length === 1 && typeof classes[0] === \"string\") {\n const cls = classes[0];\n if (cls && !cls.includes(\" \")) {\n const prefixed = cls.startsWith(PREFIX_WITH_DASH)\n ? cls\n : PREFIX_WITH_DASH + cls;\n // Safety check: ensure no spaces were introduced by prefixing\n if (!prefixed.includes(\" \")) {\n element.classList.toggle(prefixed);\n return element;\n }\n }\n }\n\n // Full processing for complex cases\n const normalized = normalizeClasses(...classes);\n for (const cls of normalized) {\n const prefixed = cls.startsWith(PREFIX_WITH_DASH)\n ? cls\n : PREFIX_WITH_DASH + cls;\n\n // Safety check: ensure no spaces in class token\n if (prefixed.includes(\" \")) {\n prefixed.split(\" \").forEach((c) => {\n const trimmed = c.trim();\n if (trimmed) element.classList.toggle(trimmed);\n });\n } else {\n element.classList.toggle(prefixed);\n }\n }\n\n return element;\n};\n\n/**\n * Check if element has all specified prefixed classes with optimizations\n * Automatically adds prefix to classes that don't already have it\n * Returns true only if ALL specified classes are present\n *\n * @param {HTMLElement} element - Target element\n * @param {...(string | string[])} classes - Classes to check\n * @returns {boolean} True if element has all specified classes\n */\nexport const hasClass = (\n element: HTMLElement,\n ...classes: (string | string[])[]\n): boolean => {\n // Fast path: Empty classes - vacuously true\n if (classes.length === 0) return true;\n\n // Handle the case where an array is passed directly (not spread)\n if (classes.length === 1 && Array.isArray(classes[0])) {\n return hasClass(element, ...classes[0]);\n }\n\n // Fast path: Single string class - most common case\n if (classes.length === 1 && typeof classes[0] === \"string\") {\n const cls = classes[0];\n if (cls && !cls.includes(\" \")) {\n const prefixed = cls.startsWith(PREFIX_WITH_DASH)\n ? cls\n : PREFIX_WITH_DASH + cls;\n // Safety check: ensure no spaces were introduced by prefixing\n if (!prefixed.includes(\" \")) {\n return element.classList.contains(prefixed);\n }\n }\n }\n\n // Full processing for complex cases\n const normalized = normalizeClasses(...classes);\n for (const cls of normalized) {\n const prefixed = cls.startsWith(PREFIX_WITH_DASH)\n ? cls\n : PREFIX_WITH_DASH + cls;\n\n // Safety check: ensure no spaces in class token\n if (prefixed.includes(\" \")) {\n // For hasClass, all space-separated tokens must exist\n const tokens = prefixed\n .split(\" \")\n .map((c) => c.trim())\n .filter(Boolean);\n for (const token of tokens) {\n if (!element.classList.contains(token)) {\n return false;\n }\n }\n } else {\n if (!element.classList.contains(prefixed)) {\n return false;\n }\n }\n }\n\n return true;\n};\n",
|
|
10
|
+
"// src/core/dom/create.ts\n/**\n * @module core/dom\n * @description DOM manipulation utilities\n */\n\nimport { setAttributes } from \"./attributes\";\nimport { addClass } from \"./classes\";\n\n/**\n * Event handler function type\n */\nexport type EventHandler = (event: Event) => void;\n\n/**\n * Event condition type\n */\nexport type EventCondition =\n | boolean\n | ((context: any, event: Event) => boolean);\n\n/**\n * Element type that can be either HTMLElement or SVGElement\n */\nexport type DOMElement = HTMLElement | SVGElement;\n\n/**\n * Options for element creation with comprehensive configuration\n */\nexport interface CreateElementOptions {\n /** HTML tag name */\n tag?: string;\n /** Container to append element to */\n container?: HTMLElement | null;\n /** Inner HTML content */\n html?: string;\n /** Text content */\n text?: string;\n /** Element ID */\n id?: string;\n /** Element aria-label */\n ariaLabel?: string;\n /** Dataset attributes */\n data?: Record<string, string>;\n /** CSS classes (will be automatically prefixed with 'mtrl-') - alias for className */\n class?: string | string[];\n /** CSS classes (will be automatically prefixed with 'mtrl-') - alias for class */\n className?: string | string[];\n /** CSS classes that will NOT be prefixed - added as-is to the element */\n rawClass?: string | string[];\n /** HTML attributes */\n attributes?: Record<string, any>;\n /** Events to forward when component has emit method */\n forwardEvents?: Record<string, EventCondition>;\n /** Callback after element creation */\n onCreate?: (element: HTMLElement, context?: any) => void;\n /** Component context */\n context?: any;\n /** Additional attributes via spread */\n [key: string]: any;\n}\n\n/**\n * Options for SVG element creation\n */\nexport interface CreateSVGElementOptions\n extends Omit<CreateElementOptions, \"container\" | \"onCreate\"> {\n container?: DOMElement | null;\n onCreate?: (element: SVGElement, context?: any) => void;\n}\n\n/**\n * Event handler storage\n */\nexport interface EventHandlerStorage {\n [eventName: string]: EventHandler;\n}\n\n/**\n * SVG element tags\n */\nconst SVG_TAGS = [\n \"svg\",\n \"circle\",\n \"ellipse\",\n \"line\",\n \"path\",\n \"polygon\",\n \"polyline\",\n \"rect\",\n \"g\",\n \"text\",\n \"tspan\",\n \"textPath\",\n \"defs\",\n \"clipPath\",\n \"mask\",\n \"pattern\",\n \"marker\",\n \"linearGradient\",\n \"radialGradient\",\n \"stop\",\n \"use\",\n \"foreignObject\",\n];\n\n/**\n * Set up event forwarding for an element\n */\nconst setupEventForwarding = (\n element: HTMLElement | SVGElement,\n forwardEvents: Record<string, EventCondition>,\n context: any\n): void => {\n if (!forwardEvents || (!context?.emit && !context?.on)) return;\n\n (element as any).__eventHandlers = {};\n\n for (const nativeEvent in forwardEvents) {\n const eventConfig = forwardEvents[nativeEvent];\n const handler = (event: Event) => {\n let shouldForward = true;\n\n if (typeof eventConfig === \"function\") {\n try {\n shouldForward = eventConfig({ ...context, element }, event);\n } catch (error) {\n console.warn(`Error in event condition for ${nativeEvent}:`, error);\n shouldForward = false;\n }\n } else {\n shouldForward = Boolean(eventConfig);\n }\n\n if (shouldForward && context.emit) {\n context.emit(nativeEvent, { event, element, originalEvent: event });\n }\n };\n\n (element as any).__eventHandlers[nativeEvent] = handler;\n element.addEventListener(nativeEvent, handler);\n }\n};\n\n/**\n * Element pool for reusing elements\n */\nclass ElementPool {\n private pools = new Map<string, HTMLElement[]>();\n private maxSize = 20;\n\n acquire(tag: string = \"div\"): HTMLElement {\n const pool = this.pools.get(tag);\n if (pool?.length) {\n const element = pool.pop()!;\n element.className = \"\";\n element.innerHTML = \"\";\n element.removeAttribute(\"id\");\n Object.keys(element.dataset).forEach(\n (key) => delete element.dataset[key]\n );\n return element;\n }\n return document.createElement(tag);\n }\n\n release(element: HTMLElement): void {\n const tag = element.tagName.toLowerCase();\n let pool = this.pools.get(tag);\n\n if (!pool) {\n pool = [];\n this.pools.set(tag, pool);\n }\n\n if (pool.length < this.maxSize) {\n this.cleanElement(element);\n pool.push(element);\n }\n }\n\n private cleanElement(element: HTMLElement): void {\n const handlers = (element as any).__eventHandlers;\n if (handlers) {\n for (const event in handlers) {\n element.removeEventListener(event, handlers[event]);\n }\n delete (element as any).__eventHandlers;\n }\n\n element.className = \"\";\n element.innerHTML = \"\";\n element.removeAttribute(\"id\");\n Object.keys(element.dataset).forEach((key) => delete element.dataset[key]);\n element.parentNode?.removeChild(element);\n }\n}\n\nconst elementPool = new ElementPool();\n\n/**\n * Create an HTML element with comprehensive options and optimizations\n * Fast paths for common scenarios, full feature support for complex cases\n *\n * @param {CreateElementOptions} options - Element creation options\n * @returns {HTMLElement} Created HTML element\n */\nexport const createElement = (\n options: CreateElementOptions = {}\n): HTMLElement => {\n // Fast path 1: Empty options - return basic div\n if (!options || Object.keys(options).length === 0) {\n return document.createElement(\"div\");\n }\n\n // Fast path 2: String tag only (legacy support)\n if (typeof options === \"string\") {\n return document.createElement(options);\n }\n\n // Create base element\n const element = document.createElement(options.tag || \"div\");\n\n // Apply basic properties first for optimal performance\n if (options.html) element.innerHTML = options.html;\n else if (options.text) element.textContent = options.text;\n if (options.id) element.id = options.id;\n if (options.ariaLabel) element.setAttribute(\"aria-label\", options.ariaLabel);\n\n // Apply classes with automatic prefixing and raw classes\n const classSource = options.className || options.class;\n if (classSource) addClass(element, classSource);\n if (options.rawClass) {\n const classes = Array.isArray(options.rawClass)\n ? options.rawClass\n : options.rawClass.split(\" \");\n element.classList.add(...classes.filter(Boolean));\n }\n\n // Apply data attributes efficiently using Object.assign\n if (options.data) {\n Object.assign(element.dataset, options.data);\n }\n\n // Apply structured attributes\n if (options.attributes) {\n setAttributes(element, options.attributes);\n }\n\n // Apply other attributes from options spread (rest parameters)\n for (const key in options) {\n if (\n ![\n \"tag\",\n \"container\",\n \"html\",\n \"text\",\n \"id\",\n \"ariaLabel\",\n \"data\",\n \"class\",\n \"className\",\n \"rawClass\",\n \"attributes\",\n \"forwardEvents\",\n \"onCreate\",\n \"context\",\n ].includes(key)\n ) {\n const value = options[key];\n if (value != null) {\n element.setAttribute(key, String(value));\n }\n }\n }\n\n // Set up event forwarding if configured\n if (options.forwardEvents) {\n setupEventForwarding(element, options.forwardEvents, options.context);\n }\n\n // Finalize: append to container and call onCreate callback\n if (options.container) options.container.appendChild(element);\n if (options.onCreate) options.onCreate(element, options.context);\n\n return element;\n};\n\n/**\n * Create a pooled HTML element\n * @param options - Element creation options\n * @returns Created HTML element from pool\n */\nexport const createElementPooled = (\n options: CreateElementOptions = {}\n): HTMLElement => {\n const element = elementPool.acquire(options.tag || \"div\");\n\n // Apply properties similar to createElement but skip creating new element\n if (options.html) element.innerHTML = options.html;\n else if (options.text) element.textContent = options.text;\n if (options.id) element.id = options.id;\n\n const classSource = options.className || options.class;\n if (classSource) addClass(element, classSource);\n\n if (options.data) Object.assign(element.dataset, options.data);\n if (options.attributes) setAttributes(element, options.attributes);\n if (options.forwardEvents)\n setupEventForwarding(element, options.forwardEvents, options.context);\n if (options.container) options.container.appendChild(element);\n if (options.onCreate) options.onCreate(element, options.context);\n\n return element;\n};\n\n/**\n * Release an element back to the pool\n * @param element - Element to release\n */\nexport const releaseElement = (element: HTMLElement): void => {\n elementPool.release(element);\n};\n\n/**\n * Create an SVG element\n * @param options - SVG element creation options\n * @returns Created SVG element\n */\nexport const createSVGElement = (\n options: CreateSVGElementOptions = {}\n): SVGElement => {\n const element = document.createElementNS(\n \"http://www.w3.org/2000/svg\",\n options.tag || \"svg\"\n ) as SVGElement;\n\n if (options.text) element.textContent = options.text;\n if (options.id) element.id = options.id;\n if (options.attributes) setAttributes(element as any, options.attributes);\n if (options.forwardEvents)\n setupEventForwarding(element, options.forwardEvents, options.context);\n if (options.container) options.container.appendChild(element);\n if (options.onCreate) options.onCreate(element, options.context);\n\n return element;\n};\n\n/**\n * Remove event handlers from an element\n * @param element - Element to clean up\n */\nexport const removeEventHandlers = (\n element: HTMLElement | SVGElement\n): void => {\n const handlers = (element as any).__eventHandlers;\n if (handlers) {\n for (const event in handlers) {\n element.removeEventListener(event, handlers[event]);\n }\n delete (element as any).__eventHandlers;\n }\n};\n\n// Type augmentation for event handler storage\ndeclare global {\n interface HTMLElement {\n __eventHandlers?: EventHandlerStorage;\n }\n interface SVGElement {\n __eventHandlers?: EventHandlerStorage;\n }\n}\n",
|
|
11
11
|
"// src/core/utils/mobile.ts\n\n/**\n * Mobile device detection and capability checks\n * This provides a centralized way to handle mobile-specific features and behaviors\n */\n\n/**\n * Interface for normalized event properties\n */\nexport interface NormalizedEvent {\n clientX: number;\n clientY: number;\n pageX: number;\n pageY: number;\n target: EventTarget;\n preventDefault: () => void;\n stopPropagation: () => void;\n type: string;\n}\n\n/**\n * Detects if the current device is likely a mobile device\n * Uses a combination of user agent and screen size checks for reliability\n */\nexport const isMobileDevice = (): boolean => {\n const userAgent = /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(\n navigator.userAgent\n );\n const screenSize = window.innerWidth <= 768;\n return userAgent || screenSize;\n};\n\n/**\n * Options for passive event listeners\n */\nexport const PASSIVE_EVENTS: AddEventListenerOptions = { passive: true };\n\n/**\n * Configuration constants for mobile interactions\n * Following WCAG guidelines and touch interaction best practices\n */\nexport const TOUCH_CONFIG = {\n TARGET_SIZE: 44, // Minimum touch target size in pixels (WCAG standard)\n FEEDBACK_DURATION: 200, // Duration of touch feedback animation in ms\n TAP_THRESHOLD: 250, // Maximum duration for a touch to be considered a tap\n SWIPE_THRESHOLD: 50 // Minimum distance for a touch to be considered a swipe\n};\n\n/**\n * Accessibility-minded touch target sizes\n * Based on WCAG guidelines for touch targets\n */\nexport const TOUCH_TARGETS = {\n MINIMUM: 44, // Minimum recommended size in pixels\n COMFORTABLE: 48, // Comfortable touch target size\n LARGE: 56 // Large touch target for primary actions\n};\n\n/**\n * Detects if the current device supports touch events\n */\nexport const hasTouchSupport = (): boolean => {\n return 'ontouchstart' in window || navigator.maxTouchPoints > 0;\n};\n\n/**\n * Type guard for TouchEvent\n */\nfunction isTouchEvent(event: Event): event is TouchEvent {\n return 'touches' in event;\n}\n\n/**\n * Type guard for MouseEvent\n */\nfunction isMouseEvent(event: Event): event is MouseEvent {\n return 'clientX' in event && 'clientY' in event;\n}\n\n/**\n * Normalizes both mouse and touch events into a consistent format\n * This allows components to handle interactions uniformly\n */\nexport const normalizeEvent = (event: Event): NormalizedEvent => {\n // Handle TouchEvent\n if (isTouchEvent(event) && event.touches.length > 0) {\n const touch = event.touches[0];\n return {\n clientX: touch.clientX,\n clientY: touch.clientY,\n pageX: touch.pageX,\n pageY: touch.pageY,\n target: event.target as EventTarget,\n preventDefault: () => event.preventDefault(),\n stopPropagation: () => event.stopPropagation(),\n type: event.type\n };\n }\n \n // Handle MouseEvent\n if (isMouseEvent(event)) {\n return {\n clientX: event.clientX,\n clientY: event.clientY,\n pageX: event.pageX,\n pageY: event.pageY,\n target: event.target as EventTarget,\n preventDefault: () => event.preventDefault(),\n stopPropagation: () => event.stopPropagation(),\n type: event.type\n };\n }\n \n // Fallback for other event types\n return {\n clientX: 0,\n clientY: 0,\n pageX: 0,\n pageY: 0,\n target: event.target as EventTarget,\n preventDefault: () => event.preventDefault(),\n stopPropagation: () => event.stopPropagation(),\n type: event.type\n };\n};",
|
|
12
12
|
"// src/core/compose/component.ts\n/**\n * @module core/compose/component\n * @description Core utilities for component composition and creation with built-in mobile support\n */\n\nimport { createElement, CreateElementOptions, removeEventHandlers } from '../dom/create';\nimport {\n normalizeEvent,\n hasTouchSupport,\n TOUCH_CONFIG,\n PASSIVE_EVENTS\n} from '../utils/mobile';\n\n/**\n * Touch state interface to track touch interactions\n */\nexport interface TouchState {\n startTime: number;\n startPosition: { x: number; y: number };\n isTouching: boolean;\n activeTarget: EventTarget | null;\n}\n\n/**\n * Base component interface with prefix utilities\n */\nexport interface BaseComponent {\n config: Record<string, any>;\n componentName?: string;\n getClass: (name: string) => string;\n getModifierClass: (base: string, modifier: string) => string;\n getElementClass: (base: string, element: string) => string;\n touchState: TouchState;\n updateTouchState: (event: Event, status: 'start' | 'end') => void;\n}\n\n/**\n * Element component extends base with element\n */\nexport interface ElementComponent extends BaseComponent {\n element: HTMLElement;\n addClass: (...classes: string[]) => ElementComponent;\n destroy: () => void;\n}\n\n/**\n * Options for withElement enhancer\n */\nexport interface WithElementOptions {\n tag?: string;\n componentName?: string;\n attributes?: Record<string, any>;\n className?: string | string[];\n forwardEvents?: Record<string, boolean | ((component: any, event: Event) => boolean)>;\n interactive?: boolean;\n parent?: HTMLElement | string;\n}\n\n/**\n * Creates helper functions for managing CSS class names with a prefix\n * @param {string} prefix - Prefix to apply to class names\n * @returns {Object} Class name utilities\n */\nconst withPrefix = (prefix: string) => ({\n /**\n * Gets a prefixed class name\n * @param {string} name - Base class name\n * @returns {string} Prefixed class name\n */\n getClass: (name: string): string => `${prefix}-${name}`,\n \n /**\n * Gets a prefixed modifier class name\n * @param {string} base - Base class name\n * @param {string} modifier - Modifier name\n * @returns {string} Prefixed modifier class\n */\n getModifierClass: (base: string, modifier: string): string => `${base}--${modifier}`,\n \n /**\n * Gets a prefixed element class name\n * @param {string} base - Base class name\n * @param {string} element - Element name\n * @returns {string} Prefixed element class\n */\n getElementClass: (base: string, element: string): string => `${base}-${element}`\n});\n\n/**\n * Creates a base component with configuration and prefix utilities.\n * This forms the foundation for all components in the system.\n *\n * @param {Object} config - Component configuration\n * @returns {BaseComponent} Base component with prefix utilities\n */\nexport const createBase = (config: Record<string, any> = {}): BaseComponent => ({\n config,\n componentName: config.componentName,\n ...withPrefix(config.prefix || 'mtrl'),\n\n /**\n * Manages the touch interaction state for the component.\n */\n touchState: {\n startTime: 0,\n startPosition: { x: 0, y: 0 },\n isTouching: false,\n activeTarget: null\n },\n\n /**\n * Updates the component's touch state based on user interactions.\n * Tracks touch position and timing for gesture recognition.\n */\n updateTouchState(event: Event, status: 'start' | 'end'): void {\n // Cast to MouseEvent as a safe fallback when working with general Events\n const normalized = normalizeEvent(event as MouseEvent);\n\n if (status === 'start') {\n this.touchState = {\n startTime: Date.now(),\n startPosition: {\n x: normalized.clientX,\n y: normalized.clientY\n },\n isTouching: true,\n activeTarget: normalized.target\n };\n } else if (status === 'end') {\n this.touchState.isTouching = false;\n this.touchState.activeTarget = null;\n }\n }\n});\n\n/**\n * Higher-order function that adds a DOM element to a component\n * @param {WithElementOptions} options - Element creation options\n * @returns {Function} Component enhancer\n */\nexport const withElement = (options: WithElementOptions = {}) => \n <T extends BaseComponent>(component: T): T & ElementComponent => {\n /**\n * Handles the start of a touch interaction.\n */\n const handleTouchStart = (event: Event): void => {\n base.updateTouchState(event, 'start');\n element.classList.add(`${base.getClass('touch-active')}`);\n\n if (options.forwardEvents?.touchstart && 'emit' in component) {\n (component as any).emit('touchstart', normalizeEvent(event));\n }\n };\n\n /**\n * Handles the end of a touch interaction.\n */\n const handleTouchEnd = (event: Event): void => {\n if (!base.touchState.isTouching) return;\n\n const touchDuration = Date.now() - base.touchState.startTime;\n element.classList.remove(`${base.getClass('touch-active')}`);\n base.updateTouchState(event, 'end');\n\n // Emit tap event for short touches\n if (touchDuration < TOUCH_CONFIG.TAP_THRESHOLD && 'emit' in component) {\n (component as any).emit('tap', normalizeEvent(event));\n }\n\n if (options.forwardEvents?.touchend && 'emit' in component) {\n (component as any).emit('touchend', normalizeEvent(event));\n }\n };\n\n /**\n * Handles touch movement.\n */\n const handleTouchMove = (event: Event): void => {\n if (!base.touchState.isTouching) return;\n\n const normalized = normalizeEvent(event);\n const deltaX = normalized.clientX - base.touchState.startPosition.x;\n const deltaY = normalized.clientY - base.touchState.startPosition.y;\n\n // Detect and emit swipe gestures\n if (Math.abs(deltaX) > TOUCH_CONFIG.SWIPE_THRESHOLD && 'emit' in component) {\n (component as any).emit('swipe', {\n direction: deltaX > 0 ? 'right' : 'left',\n deltaX,\n deltaY\n });\n }\n\n if (options.forwardEvents?.touchmove && 'emit' in component) {\n (component as any).emit('touchmove', { ...normalized, deltaX, deltaY });\n }\n };\n\n // Get the base component for reference\n const base = component;\n\n // Check for parent in component config\n let parent = component.config.parent || options.parent;\n \n // Handle string selectors\n if (typeof parent === 'string') {\n parent = document.querySelector(parent) as HTMLElement | null;\n }\n\n // Create element options from component options\n const elementOptions: CreateElementOptions = {\n tag: options.tag || 'div',\n className: [\n base.getClass(options.componentName || base.componentName || 'component'),\n hasTouchSupport() && options.interactive ? base.getClass('interactive') : null,\n ...(Array.isArray(options.className) ? options.className : [options.className])\n ].filter(Boolean),\n attributes: options.attributes || {},\n forwardEvents: options.forwardEvents || {},\n context: component, // Pass component as context for events\n container: parent // Pass to createElement's container option (internal use)\n };\n\n // Create the element with appropriate classes\n const element = createElement(elementOptions);\n\n // Add event listeners only if touch is supported and the component is interactive\n if (hasTouchSupport() && options.interactive) {\n element.addEventListener('touchstart', handleTouchStart, PASSIVE_EVENTS);\n element.addEventListener('touchend', handleTouchEnd);\n element.addEventListener('touchmove', handleTouchMove, PASSIVE_EVENTS);\n }\n\n return {\n ...component,\n element,\n\n /**\n * Adds CSS classes to the element\n * @param {...string} classes - CSS classes to add\n * @returns {ElementComponent} Component instance for chaining\n */\n addClass(...classes: string[]): ElementComponent {\n element.classList.add(...classes.filter(Boolean));\n return this;\n },\n\n /**\n * Removes the element and cleans up event listeners.\n * Ensures proper resource cleanup when the component is destroyed.\n */\n destroy(): void {\n if (hasTouchSupport() && options.interactive) {\n element.removeEventListener('touchstart', handleTouchStart);\n element.removeEventListener('touchend', handleTouchEnd);\n element.removeEventListener('touchmove', handleTouchMove);\n }\n \n // Clean up any registered event handlers using our new utility\n removeEventHandlers(element);\n \n element.remove();\n }\n };\n };",
|
|
13
13
|
"// src/core/state/emitter.ts\n/**\n * @module core/state\n */\n\n/**\n * Type definition for event callback functions\n */\nexport type EventCallback = (...args: any[]) => void;\n\n/**\n * Interface for the event emitter\n */\nexport interface Emitter {\n /**\n * Subscribe to an event\n * @param event - Event name\n * @param callback - Event handler\n * @returns Unsubscribe function\n */\n on(event: string, callback: EventCallback): () => void;\n \n /**\n * Unsubscribe from an event\n * @param event - Event name\n * @param callback - Event handler to remove\n */\n off(event: string, callback: EventCallback): void;\n \n /**\n * Emit an event\n * @param event - Event name\n * @param args - Event arguments\n */\n emit(event: string, ...args: any[]): void;\n \n /**\n * Clear all event listeners\n */\n clear(): void;\n}\n\n/**\n * Creates an event emitter with subscription management\n * @returns Event emitter interface\n */\nexport const createEmitter = (): Emitter => {\n const events = new Map<string, EventCallback[]>();\n\n return {\n /**\n * Subscribe to an event\n * @param event - Event name\n * @param callback - Event handler\n * @returns Unsubscribe function\n */\n on: (event: string, callback: EventCallback): (() => void) => {\n const callbacks = events.get(event) || [];\n events.set(event, [...callbacks, callback]);\n\n return () => {\n const callbacks = events.get(event) || [];\n events.set(event, callbacks.filter(cb => cb !== callback));\n };\n },\n\n /**\n * Unsubscribe from an event\n * @param event - Event name \n * @param callback - Event handler to remove\n */\n off(event: string, callback: EventCallback): void {\n const callbacks = events.get(event) || [];\n events.set(event, callbacks.filter(cb => cb !== callback));\n },\n\n /**\n * Emit an event\n * @param event - Event name\n * @param args - Event arguments\n */\n emit: (event: string, ...args: any[]): void => {\n const callbacks = events.get(event) || [];\n callbacks.forEach(cb => cb(...args));\n },\n\n /**\n * Clear all event listeners\n */\n clear: (): void => {\n events.clear();\n }\n };\n};",
|
|
14
14
|
"// src/core/compose/features/events.ts\n/**\n * @module core/compose/features\n */\n\nimport { createEmitter, Emitter } from '../../state/emitter';\nimport { BaseComponent } from '../component';\n\n/**\n * Component with event capabilities\n */\nexport interface EventComponent extends BaseComponent {\n /**\n * Subscribe to an event\n * @param event - Event name\n * @param handler - Event handler\n * @returns Component instance for chaining\n */\n on(event: string, handler: (...args: any[]) => void): EventComponent;\n \n /**\n * Unsubscribe from an event\n * @param event - Event name\n * @param handler - Event handler\n * @returns Component instance for chaining\n */\n off(event: string, handler: (...args: any[]) => void): EventComponent;\n \n /**\n * Emit an event\n * @param event - Event name\n * @param data - Event data\n * @returns Component instance for chaining\n */\n emit(event: string, data?: any): EventComponent;\n}\n\n/**\n * Adds event handling capabilities to a component\n * Returns event system ready to use immediately\n * \n * @returns Function that enhances a component with event capabilities\n */\nexport const withEvents = () => \n <T extends BaseComponent>(component: T): T & EventComponent => {\n const emitter: Emitter = createEmitter();\n\n return {\n ...component,\n on(event: string, handler: (...args: any[]) => void) {\n emitter.on(event, handler);\n return this;\n },\n\n off(event: string, handler: (...args: any[]) => void) {\n emitter.off(event, handler);\n return this;\n },\n\n emit(event: string, data?: any) {\n emitter.emit(event, data);\n return this;\n }\n };\n };",
|
|
15
15
|
"// src/core/compose/features/text.ts\n\nimport { BaseComponent, ElementComponent } from '../component';\n\n/**\n * Text manager interface\n */\nexport interface TextManager {\n /**\n * Sets text content\n * @param text - Text content to set\n * @returns TextManager instance for chaining\n */\n setText: (text: string) => TextManager;\n \n /**\n * Gets current text content\n * @returns Current text\n */\n getText: () => string;\n \n /**\n * Gets text element\n * @returns Text element or null if not created\n */\n getElement: () => HTMLElement | null;\n}\n\n/**\n * Configuration for text feature\n */\nexport interface TextConfig {\n /**\n * Initial text content\n */\n text?: string;\n \n /**\n * CSS class prefix\n */\n prefix?: string;\n \n /**\n * Component name for class generation\n */\n componentName?: string;\n \n /**\n * Element to insert text before (optional)\n */\n beforeElement?: HTMLElement;\n \n /**\n * Additional configuration options\n */\n [key: string]: any;\n}\n\n/**\n * Component with text capabilities\n */\nexport interface TextComponent extends BaseComponent {\n /**\n * Text manager\n */\n text: TextManager;\n}\n\n/**\n * Creates a text manager for a component\n * \n * @param element - Parent element\n * @param config - Text configuration\n * @returns Text manager interface\n * @private\n */\nconst createText = (element: HTMLElement, config: TextConfig = {}): TextManager => {\n let textElement: HTMLElement | null = null;\n const PREFIX = config.prefix || 'mtrl';\n\n /**\n * Creates a text element with the given content\n */\n const createElement = (content: string): HTMLElement => {\n const span = document.createElement('span');\n span.className = `${PREFIX}-${config.componentName || 'component'}-text`;\n span.textContent = content;\n return span;\n };\n\n return {\n /**\n * Sets text content\n * @param text - Text content to set\n * @returns TextManager instance for chaining\n */\n setText(text: string): TextManager {\n if (!textElement && text) {\n // Create new text element\n textElement = createElement(text);\n \n // Insert at the appropriate position\n if (config.beforeElement) {\n element.insertBefore(textElement, config.beforeElement);\n } else {\n element.appendChild(textElement);\n }\n } else if (textElement) {\n // Update existing text\n textElement.textContent = text;\n }\n return this;\n },\n\n /**\n * Gets current text content\n * @returns Current text\n */\n getText(): string {\n return textElement ? textElement.textContent || '' : '';\n },\n\n /**\n * Gets text element\n * @returns Text element or null if not created\n */\n getElement(): HTMLElement | null {\n return textElement;\n }\n };\n};\n\n/**\n * Adds text management to a component\n * \n * @param config - Configuration object containing text information\n * @returns Function that enhances a component with text capabilities\n */\nexport const withText = <T extends TextConfig>(config: T) => \n <C extends ElementComponent>(component: C): C & TextComponent => {\n // Create the text manager with configuration settings\n const text = createText(component.element, {\n prefix: config.prefix,\n componentName: config.componentName || 'component'\n });\n\n // Set text if provided in config\n if (config.text) {\n text.setText(config.text);\n }\n\n // Return enhanced component with text capabilities\n return {\n ...component,\n text\n };\n };",
|
|
16
|
-
"// src/core/compose/features/icon.ts\n\nimport { BaseComponent, ElementComponent } from
|
|
16
|
+
"// src/core/compose/features/icon.ts\n\nimport { BaseComponent, ElementComponent } from \"../component\";\n\n/**\n * Icon manager interface\n */\nexport interface IconManager {\n /**\n * Sets icon HTML content\n * @param html - Icon HTML content\n * @returns IconManager instance for chaining\n */\n setIcon: (html: string) => IconManager;\n\n /**\n * Gets current icon HTML content\n * @returns Current icon HTML\n */\n getIcon: () => string;\n\n /**\n * Gets icon element\n * @returns Icon element or null if not created\n */\n getElement: () => HTMLElement | null;\n}\n\n/**\n * Configuration for icon feature\n */\nexport interface IconConfig {\n /**\n * Initial icon HTML content\n */\n icon?: string;\n\n /**\n * Icon position ('start' or 'end')\n */\n iconPosition?: \"start\" | \"end\";\n\n /**\n * Icon size variant\n */\n iconSize?: string;\n\n /**\n * CSS class prefix\n */\n prefix?: string;\n\n /**\n * Component name for class generation\n */\n componentName?: string;\n\n /**\n * Text content (for determining button styling)\n */\n text?: string;\n\n /**\n * Additional configuration options\n */\n [key: string]: any;\n}\n\n/**\n * Component with icon capabilities\n */\nexport interface IconComponent extends BaseComponent {\n /**\n * Icon manager\n */\n icon: IconManager;\n}\n\n/**\n * Creates an icon manager for a component\n *\n * @param element - Parent element\n * @param config - Icon configuration\n * @returns Icon manager interface\n * @private\n */\nconst createIcon = (\n element: HTMLElement,\n config: IconConfig = {}\n): IconManager => {\n let iconElement: HTMLElement | null = null;\n const PREFIX = config.prefix || \"mtrl\";\n\n /**\n * Creates the actual icon DOM element\n */\n const createIconElement = (html: string): HTMLElement => {\n const iconEl = document.createElement(\"span\");\n iconEl.className = `${PREFIX}-icon`;\n\n // Add component-specific class\n const componentClass = `${PREFIX}-${\n config.componentName || \"component\"\n }-icon`;\n iconEl.classList.add(componentClass);\n\n // Add position class if specified\n if (config.iconPosition) {\n iconEl.classList.add(`${componentClass}--${config.iconPosition}`);\n }\n\n // Add size class if specified\n if (config.iconSize) {\n iconEl.classList.add(`${PREFIX}-icon--${config.iconSize}`);\n }\n\n iconEl.innerHTML = html;\n return iconEl;\n };\n\n return {\n /**\n * Sets icon HTML content\n * @param html - Icon HTML content\n * @returns IconManager instance for chaining\n */\n setIcon(html: string): IconManager {\n if (!iconElement && html) {\n // Create new icon element\n iconElement = createIconElement(html);\n\n // Insert at the appropriate position\n if (config.iconPosition === \"end\") {\n element.appendChild(iconElement);\n } else {\n // For 'start' position, insert after any existing label\n const labelElement = element.querySelector(\n `[class*=\"${PREFIX}-${config.componentName || \"component\"}-label\"]`\n );\n if (labelElement) {\n // Insert after the label\n if (labelElement.nextSibling) {\n element.insertBefore(iconElement, labelElement.nextSibling);\n } else {\n element.appendChild(iconElement);\n }\n } else {\n // No label found, insert as first child\n element.insertBefore(iconElement, element.firstChild);\n }\n }\n } else if (iconElement && html) {\n // Update existing icon\n iconElement.innerHTML = html;\n }\n return this;\n },\n\n /**\n * Gets current icon HTML content\n * @returns Current icon HTML\n */\n getIcon(): string {\n return iconElement ? iconElement.innerHTML : \"\";\n },\n\n /**\n * Gets icon element\n * @returns Icon element or null if not created\n */\n getElement(): HTMLElement | null {\n return iconElement;\n },\n };\n};\n\n/**\n * Updates the component's circular style based on content\n * Adds circular class if there's an icon but no text\n * @private\n */\nconst updateCircularStyle = (\n component: ElementComponent,\n config: IconConfig\n): void => {\n const hasText = config.text;\n const hasIcon = config.icon;\n\n const circularClass = `${component.getClass(\"button\")}--circular`;\n if (!hasText && hasIcon) {\n component.element.classList.add(circularClass);\n } else {\n component.element.classList.remove(circularClass);\n }\n};\n\n/**\n * Adds icon management to a component\n *\n * @param config - Configuration object containing icon information\n * @returns Function that enhances a component with icon capabilities\n */\nexport const withIcon =\n <T extends IconConfig>(config: T) =>\n <C extends ElementComponent>(component: C): C & IconComponent => {\n // Create the icon with configuration settings\n const icon = createIcon(component.element, {\n prefix: config.prefix,\n componentName: config.componentName || \"component\",\n iconPosition: config.iconPosition,\n iconSize: config.iconSize,\n });\n\n // Set icon if provided in config\n if (config.icon) {\n icon.setIcon(config.icon);\n }\n\n // Apply button-specific styling if the component is a button\n if (component.componentName === \"button\") {\n if (!config.text) {\n updateCircularStyle(component, config);\n } else if (config.icon && config.text) {\n component.element.classList.add(\n `${component.getClass(\"button\")}--icon`\n );\n }\n }\n\n // Return enhanced component with icon capabilities\n return {\n ...component,\n icon,\n };\n };\n\n",
|
|
17
17
|
"// src/core/compose/features/variant.ts\n\nimport { ElementComponent } from \"../component\";\n\n/**\n * Configuration for variant feature\n */\nexport interface VariantConfig {\n variant?: string;\n prefix?: string;\n componentName?: string;\n [key: string]: any;\n}\n\n/**\n * Adds a variant class to a component\n *\n * @param config - Configuration object containing variant information\n * @returns Function that enhances a component with the variant class\n */\nexport const withVariant =\n <T extends VariantConfig>(config: T) =>\n <C extends ElementComponent>(component: C): C => {\n if (config.variant && component.element) {\n // Use config.componentName since we know it's there\n const className = `${config.prefix}-${config.componentName}--${config.variant}`;\n component.element.classList.add(className);\n }\n return component;\n };\n",
|
|
18
18
|
"// src/core/compose/features/size.ts\n\nimport { ElementComponent } from \"../component\";\n\n/**\n * Configuration for size feature\n */\nexport interface SizeConfig {\n size?: string;\n prefix?: string;\n componentName?: string;\n [key: string]: any;\n}\n\n/**\n * Adds a size class to a component\n *\n * @param config - Configuration object containing size information\n * @returns Function that enhances a component with the size class\n */\nexport const withSize =\n <T extends SizeConfig>(config: T) =>\n <C extends ElementComponent>(component: C): C => {\n if (config.size && component.element) {\n // Use config.componentName since we know it's there\n const className = `${config.prefix}-${config.componentName}--${config.size}`;\n component.element.classList.add(className);\n }\n return component;\n };\n",
|
|
19
19
|
"// src/core/compose/features/position.ts\n\nimport { BaseComponent, ElementComponent } from '../component';\n\n/**\n * Available position values\n */\nexport enum POSITIONS {\n LEFT = 'left',\n RIGHT = 'right',\n TOP = 'top',\n BOTTOM = 'bottom',\n START = 'start',\n END = 'end',\n CENTER = 'center'\n}\n\n/**\n * Configuration for position feature\n */\nexport interface PositionConfig {\n position?: string;\n prefix?: string;\n componentName?: string;\n [key: string]: any;\n}\n\n/**\n * Position manager interface\n */\nexport interface PositionManager {\n /**\n * Sets the component's position\n * @param newPosition - New position value\n * @returns Position manager for chaining\n */\n setPosition: (newPosition: string) => PositionManager;\n \n /**\n * Gets the current position\n * @returns Current position\n */\n getPosition: () => string;\n}\n\n/**\n * Component with position capabilities\n */\nexport interface PositionComponent extends BaseComponent {\n position: PositionManager;\n}\n\n/**\n * Adds positioning functionality to a component\n * \n * @param config - Configuration object containing position information\n * @returns Function that enhances a component with position capabilities\n */\nexport const withPosition = <T extends PositionConfig>(config: T) => \n <C extends ElementComponent>(component: C): C & PositionComponent => {\n if (!config.position || !component.element) {\n return component as C & PositionComponent;\n }\n\n // Get the position value, normalizing from enum if provided as uppercase\n const position = \n POSITIONS[config.position.toUpperCase() as keyof typeof POSITIONS] || \n config.position;\n \n const className = `${config.prefix}-${config.componentName}--${position}`;\n component.element.classList.add(className);\n\n const positionManager: PositionManager = {\n setPosition(newPosition: string) {\n const oldPosition = position;\n const oldClassName = `${config.prefix}-${config.componentName}--${oldPosition}`;\n const newClassName = `${config.prefix}-${config.componentName}--${newPosition}`;\n\n component.element.classList.remove(oldClassName);\n component.element.classList.add(newClassName);\n\n return this;\n },\n\n getPosition() {\n return position;\n }\n };\n\n return {\n ...component,\n position: positionManager\n };\n };",
|
|
@@ -23,8 +23,8 @@
|
|
|
23
23
|
"// src/core/compose/features/checkable.ts\n\nimport { BaseComponent } from \"../component\";\n\n/**\n * Configuration for checkable feature\n */\nexport interface CheckableConfig {\n checked?: boolean;\n [key: string]: any;\n}\n\n/**\n * Component with input element\n */\nexport interface InputComponent extends BaseComponent {\n element: HTMLElement;\n input: HTMLInputElement;\n emit?: (event: string, data: unknown) => InputComponent;\n on?: (event: string, handler: Function) => InputComponent;\n}\n\n/**\n * Checkable state manager interface\n */\nexport interface CheckableManager {\n /**\n * Sets the checked state to true\n * Emits change event if state changes\n * @returns CheckableManager instance for chaining\n */\n check: () => CheckableManager;\n\n /**\n * Sets the checked state to false\n * Emits change event if state changes\n * @returns CheckableManager instance for chaining\n */\n uncheck: () => CheckableManager;\n\n /**\n * Toggles the current checked state\n * Always emits change event\n * @returns CheckableManager instance for chaining\n */\n toggle: () => CheckableManager;\n\n /**\n * Gets the current checked state\n * @returns Whether component is checked\n */\n isChecked: () => boolean;\n}\n\n/**\n * Component with checkable capabilities\n */\nexport interface CheckableComponent extends BaseComponent {\n checkable: CheckableManager;\n}\n\n/**\n * Adds checked state management to a component with an input\n * Manages visual state and event emission for checked changes\n *\n * @param config - Checkable configuration\n * @returns Function that enhances a component with checkable functionality\n */\nexport const withCheckable =\n <T extends CheckableConfig>(config: T = {} as T) =>\n <C extends InputComponent>(component: C): C & CheckableComponent => {\n if (!component.input) return component as C & CheckableComponent;\n\n // Get the component name from config or component\n const componentName = component.componentName || \"component\";\n\n /**\n * Updates component classes to reflect checked state\n */\n const updateStateClasses = (): void => {\n component.element.classList.toggle(\n `${component.getClass(componentName)}--checked`,\n component.input.checked\n );\n };\n\n // Set initial state - handle both true and false explicitly\n if (config.checked !== undefined) {\n component.input.checked = config.checked;\n }\n\n // Always update classes to ensure visual state matches input state\n updateStateClasses();\n\n // Update classes whenever checked state changes\n if (component.emit) {\n component.on?.(\"change\", updateStateClasses);\n }\n\n const checkable: CheckableManager = {\n /**\n * Sets the checked state to true\n * Emits change event if state changes\n * @returns CheckableManager instance for chaining\n */\n check() {\n if (!component.input.checked) {\n component.input.checked = true;\n updateStateClasses();\n component.emit?.(\"change\", {\n checked: true,\n value: component.input.value,\n });\n }\n return this;\n },\n\n /**\n * Sets the checked state to false\n * Emits change event if state changes\n * @returns CheckableManager instance for chaining\n */\n uncheck() {\n if (component.input.checked) {\n component.input.checked = false;\n updateStateClasses();\n component.emit?.(\"change\", {\n checked: false,\n value: component.input.value,\n });\n }\n return this;\n },\n\n /**\n * Toggles the current checked state\n * Always emits change event\n * @returns CheckableManager instance for chaining\n */\n toggle() {\n component.input.checked = !component.input.checked;\n updateStateClasses();\n component.emit?.(\"change\", {\n checked: component.input.checked,\n value: component.input.value,\n });\n return this;\n },\n\n /**\n * Gets the current checked state\n * @returns Whether component is checked\n */\n isChecked() {\n return component.input.checked;\n },\n };\n\n return {\n ...component,\n checkable,\n };\n };\n",
|
|
24
24
|
"// src/core/compose/features/style.ts\n\nimport { ElementComponent } from '../component';\n\n/**\n * Configuration for style feature\n */\nexport interface StyleConfig {\n variant?: string;\n size?: string;\n [key: string]: any;\n}\n\n/**\n * Adds style classes to a component based on configuration\n * \n * @param config - Configuration object containing style information\n * @returns Function that enhances a component with style classes\n */\nexport const withStyle = <T extends StyleConfig>(config: T = {} as T) => \n <C extends ElementComponent>(component: C): C => {\n if (config.variant) {\n component.element.classList.add(`${component.getClass('button')}--${config.variant}`);\n }\n\n if (config.size) {\n component.element.classList.add(`${component.getClass('button')}--${config.size}`);\n }\n\n return component;\n };",
|
|
25
25
|
"/**\n * Utility functions for type checking component capabilities\n */\n\nimport { ElementComponent } from '../component';\n\n/**\n * Interface for components with lifecycle\n */\nexport interface ComponentWithLifecycle extends ElementComponent {\n lifecycle: {\n destroy: () => void;\n [key: string]: any;\n };\n}\n\n/**\n * Interface for components with emit method\n */\nexport interface ComponentWithEmit extends ElementComponent {\n emit: (event: string, data: any) => any;\n}\n\n/**\n * Type guard to check if component has lifecycle\n */\nexport function hasLifecycle(component: any): component is ComponentWithLifecycle {\n return 'lifecycle' in component && \n component.lifecycle && \n typeof component.lifecycle === 'object' &&\n 'destroy' in component.lifecycle &&\n typeof component.lifecycle.destroy === 'function';\n}\n\n/**\n * Type guard to check if component has emit method\n */\nexport function hasEmit(component: any): component is ComponentWithEmit {\n return 'emit' in component && typeof component.emit === 'function';\n} ",
|
|
26
|
-
"// src/core/compose/features/textinput.ts\n\nimport { ElementComponent } from \"../component\";\nimport { hasLifecycle, hasEmit } from \"../utils/type-guards\";\n\n/**\n * Configuration for text input feature\n */\nexport interface TextInputConfig {\n /**\n * Input type (text, password, etc.)\n */\n type?: string;\n\n /**\n * Whether to use textarea instead of input\n */\n multiline?: boolean;\n\n /**\n * Input name attribute\n */\n name?: string;\n\n /**\n * Whether input is required\n */\n required?: boolean;\n\n /**\n * Whether input is disabled\n */\n disabled?: boolean;\n\n /**\n * Maximum allowed length\n */\n maxLength?: number;\n\n /**\n * Input validation pattern\n */\n pattern?: string;\n\n /**\n * Autocomplete setting\n */\n autocomplete?: string;\n\n /**\n * Initial input value\n */\n value?: string;\n\n [key: string]: any;\n}\n\n/**\n * Component with text input capabilities\n */\nexport interface TextInputComponent extends ElementComponent {\n /**\n * Input element\n */\n input: HTMLInputElement | HTMLTextAreaElement;\n\n /**\n * Sets the input value\n * @param value - Value to set\n * @returns Component instance for chaining\n */\n setValue: (value: string) => TextInputComponent;\n\n /**\n * Gets the current input value\n * @returns Current value\n */\n getValue: () => string;\n\n /**\n * Sets an attribute on the input\n * @param name - Attribute name\n * @param value - Attribute value\n * @returns Component instance for chaining\n */\n setAttribute: (name: string, value: string) => TextInputComponent;\n\n /**\n * Gets an attribute from the input\n * @param name - Attribute name\n * @returns Attribute value\n */\n getAttribute: (name: string) => string | null;\n\n /**\n * Removes an attribute from the input\n * @param name - Attribute name\n * @returns Component instance for chaining\n */\n removeAttribute: (name: string) => TextInputComponent;\n\n /**\n * Event emission method if available\n */\n emit?: (event: string, data: any) => TextInputComponent;\n}\n\n/**\n * Enhances a component with text input functionality\n *\n * @param config - Text input configuration\n * @returns Function that enhances a component with text input capabilities\n */\nexport const withTextInput =\n <T extends TextInputConfig>(config: T = {} as T) =>\n <C extends ElementComponent>(component: C): C & TextInputComponent => {\n const isMultiline = config.multiline || config.type === \"multiline\";\n const input = document.createElement(isMultiline ? \"textarea\" : \"input\") as\n | HTMLInputElement\n | HTMLTextAreaElement;\n\n input.className = `${component.getClass(\"textfield\")}-input`;\n\n // Set input attributes\n const attributes: Record<string, string | number | boolean | undefined> = {\n name: config.name,\n required: config.required,\n disabled: config.disabled,\n maxLength: config.maxLength,\n pattern: config.pattern,\n autocomplete: config.autocomplete,\n value: config.value || \"\",\n };\n\n // Only set type attribute for input elements, not for textarea\n if (!isMultiline) {\n attributes.type = config.type || \"text\";\n } else {\n // For textarea, add a data attribute to identify it as multiline\n attributes[\"data-type\"] = \"multiline\";\n }\n\n Object.entries(attributes).forEach(([key, value]) => {\n if (value !== null && value !== undefined) {\n if (typeof value === \"boolean\") {\n if (value) {\n input.setAttribute(key, \"\");\n }\n } else {\n input.setAttribute(key, String(value));\n }\n }\n });\n\n // Handle input state changes\n const updateInputState = (): boolean => {\n const isEmpty = !input.value;\n component.element.classList.toggle(\n `${component.getClass(\"textfield\")}--empty`,\n isEmpty\n );\n return isEmpty;\n };\n\n // Detect autofill using input events instead of animation\n // This is more compatible with our testing environment\n const handleAutofill = (): void => {\n // Check for webkit autofill background\n const isAutofilled =\n input.matches(\":-webkit-autofill\") ||\n // For Firefox and other browsers\n window.getComputedStyle(input).backgroundColor ===\n \"rgb(250, 255, 189)\" ||\n window.getComputedStyle(input).backgroundColor === \"rgb(232, 240, 254)\";\n\n if (isAutofilled) {\n component.element.classList.remove(\n `${component.getClass(\"textfield\")}--empty`\n );\n if (hasEmit(component)) {\n component.emit(\"input\", {\n value: input.value,\n isEmpty: false,\n isAutofilled: true,\n });\n }\n }\n };\n\n // Event listeners\n input.addEventListener(\"focus\", () => {\n component.element.classList.add(\n `${component.getClass(\"textfield\")}--focused`\n );\n if (hasEmit(component)) {\n component.emit(\"focus\", { isEmpty: updateInputState() });\n }\n // Also check for autofill on focus\n setTimeout(handleAutofill, 100);\n });\n\n input.addEventListener(\"blur\", () => {\n component.element.classList.remove(\n `${component.getClass(\"textfield\")}--focused`\n );\n if (hasEmit(component)) {\n component.emit(\"blur\", { isEmpty: updateInputState() });\n }\n });\n\n input.addEventListener(\"input\", () => {\n if (hasEmit(component)) {\n component.emit(\"input\", {\n value: input.value,\n isEmpty: updateInputState(),\n isAutofilled: false,\n });\n } else {\n updateInputState();\n }\n });\n\n // Initial state\n updateInputState();\n\n // Add multiline class to the component if it's a textarea\n if (isMultiline) {\n component.element.classList.add(\n `${component.getClass(\"textfield\")}--multiline`\n );\n }\n\n component.element.appendChild(input);\n\n // Cleanup\n if (hasLifecycle(component)) {\n const originalDestroy = component.lifecycle.destroy;\n component.lifecycle.destroy = () => {\n input.remove();\n originalDestroy.call(component.lifecycle);\n };\n }\n\n return {\n ...component,\n input,\n setValue(value: string) {\n input.value = value || \"\";\n updateInputState();\n return this;\n },\n getValue() {\n return input.value;\n },\n setAttribute(name: string, value: string) {\n input.setAttribute(name, value);\n return this;\n },\n getAttribute(name: string) {\n return input.getAttribute(name);\n },\n removeAttribute(name: string) {\n input.removeAttribute(name);\n return this;\n },\n };\n };\n",
|
|
27
|
-
"// src/core/compose/features/textlabel.ts\n\nimport { BaseComponent, ElementComponent } from
|
|
26
|
+
"// src/core/compose/features/textinput.ts\n\nimport { ElementComponent } from \"../component\";\nimport { hasLifecycle, hasEmit } from \"../utils/type-guards\";\n\n/**\n * Configuration for text input feature\n */\nexport interface TextInputConfig {\n /**\n * Input type (text, password, etc.)\n */\n type?: string;\n\n /**\n * Whether to use textarea instead of input\n */\n multiline?: boolean;\n\n /**\n * Input name attribute\n */\n name?: string;\n\n /**\n * Whether input is required\n */\n required?: boolean;\n\n /**\n * Whether input is disabled\n */\n disabled?: boolean;\n\n /**\n * Maximum allowed length\n */\n maxLength?: number;\n\n /**\n * Input validation pattern\n */\n pattern?: string;\n\n /**\n * Autocomplete setting\n */\n autocomplete?: string;\n\n /**\n * Initial input value\n */\n value?: string;\n\n /**\n * Placeholder attribute\n */\n placeholder?: string;\n\n [key: string]: any;\n}\n\n/**\n * Component with text input capabilities\n */\nexport interface TextInputComponent extends ElementComponent {\n /**\n * Input element\n */\n input: HTMLInputElement | HTMLTextAreaElement;\n\n /**\n * Sets the input value\n * @param value - Value to set\n * @returns Component instance for chaining\n */\n setValue: (value: string) => TextInputComponent;\n\n /**\n * Gets the current input value\n * @returns Current value\n */\n getValue: () => string;\n\n /**\n * Sets an attribute on the input\n * @param name - Attribute name\n * @param value - Attribute value\n * @returns Component instance for chaining\n */\n setAttribute: (name: string, value: string) => TextInputComponent;\n\n /**\n * Gets an attribute from the input\n * @param name - Attribute name\n * @returns Attribute value\n */\n getAttribute: (name: string) => string | null;\n\n /**\n * Removes an attribute from the input\n * @param name - Attribute name\n * @returns Component instance for chaining\n */\n removeAttribute: (name: string) => TextInputComponent;\n\n /**\n * Event emission method if available\n */\n emit?: (event: string, data: any) => TextInputComponent;\n}\n\n/**\n * Enhances a component with text input functionality\n *\n * @param config - Text input configuration\n * @returns Function that enhances a component with text input capabilities\n */\nexport const withTextInput =\n <T extends TextInputConfig>(config: T = {} as T) =>\n <C extends ElementComponent>(component: C): C & TextInputComponent => {\n const isMultiline = config.multiline || config.type === \"multiline\";\n const input = document.createElement(isMultiline ? \"textarea\" : \"input\") as\n | HTMLInputElement\n | HTMLTextAreaElement;\n\n input.className = `${component.getClass(\"textfield\")}-input`;\n\n // Set input attributes\n const attributes: Record<string, string | number | boolean | undefined> = {\n name: config.name,\n required: config.required,\n disabled: config.disabled,\n maxLength: config.maxLength,\n pattern: config.pattern,\n autocomplete: config.autocomplete,\n value: config.value || \"\",\n placeholder: config.placeholder || \" \", // Always set placeholder (space if empty) for CSS detection\n };\n\n // Only set type attribute for input elements, not for textarea\n if (!isMultiline) {\n attributes.type = config.type || \"text\";\n } else {\n // For textarea, add a data attribute to identify it as multiline\n attributes[\"data-type\"] = \"multiline\";\n }\n\n Object.entries(attributes).forEach(([key, value]) => {\n if (value !== null && value !== undefined) {\n if (typeof value === \"boolean\") {\n if (value) {\n input.setAttribute(key, \"\");\n }\n } else {\n input.setAttribute(key, String(value));\n }\n }\n });\n\n // Handle input state changes\n const updateInputState = (): boolean => {\n const isEmpty = !input.value;\n component.element.classList.toggle(\n `${component.getClass(\"textfield\")}--empty`,\n isEmpty\n );\n return isEmpty;\n };\n\n // Enhanced autofill detection function\n const checkForAutofill = (shouldEmit: boolean = true): void => {\n // Multiple detection methods for better browser compatibility\n\n // Method 1: Check for non-empty value (most reliable)\n // This catches cases where autofill happened before our listeners\n const hasValue = input.value && input.value.length > 0;\n\n // Method 2: Check webkit autofill pseudo-class\n const hasWebkitAutofill = input.matches(\":-webkit-autofill\");\n\n // Method 3: Check computed styles for autofill background colors\n const computedStyle = window.getComputedStyle(input);\n const bgColor = computedStyle.backgroundColor;\n const isAutofillBackground =\n bgColor === \"rgb(250, 255, 189)\" || // Chrome/Edge\n bgColor === \"rgb(232, 240, 254)\" || // Firefox\n bgColor === \"rgb(250, 255, 0)\" || // Safari\n bgColor === \"rgba(255, 255, 0, 0.1)\"; // Some browsers\n\n // If any detection method indicates autofill or value present\n if (hasValue || hasWebkitAutofill || isAutofillBackground) {\n component.element.classList.remove(\n `${component.getClass(\"textfield\")}--empty`\n );\n\n // Emit event if value was autofilled (not just has value) and shouldEmit is true\n if (\n shouldEmit &&\n hasEmit(component) &&\n (hasWebkitAutofill || isAutofillBackground)\n ) {\n component.emit(\"input\", {\n value: input.value,\n isEmpty: false,\n isAutofilled: true,\n });\n }\n }\n };\n\n // Set up MutationObserver to detect attribute changes (some browsers set attributes on autofill)\n let autofillObserver: MutationObserver | null = null;\n\n // Only set up MutationObserver if it's available (not in all test environments)\n if (typeof MutationObserver !== \"undefined\") {\n autofillObserver = new MutationObserver((mutations) => {\n mutations.forEach((mutation) => {\n if (\n mutation.type === \"attributes\" &&\n (mutation.attributeName === \"value\" ||\n mutation.attributeName === \"data-autofilled\")\n ) {\n checkForAutofill(true);\n }\n });\n });\n\n // Observe the input for attribute changes\n autofillObserver.observe(input, {\n attributes: true,\n attributeFilter: [\"value\", \"data-autofilled\", \"autocomplete\"],\n });\n }\n\n // Event listeners\n input.addEventListener(\"focus\", () => {\n component.element.classList.add(\n `${component.getClass(\"textfield\")}--focused`\n );\n if (hasEmit(component)) {\n component.emit(\"focus\", { isEmpty: updateInputState() });\n }\n // Check for autofill on focus, but don't emit during focus\n checkForAutofill(false);\n });\n\n input.addEventListener(\"blur\", () => {\n component.element.classList.remove(\n `${component.getClass(\"textfield\")}--focused`\n );\n if (hasEmit(component)) {\n component.emit(\"blur\", { isEmpty: updateInputState() });\n }\n // Final check on blur, but don't emit\n checkForAutofill(false);\n });\n\n input.addEventListener(\"input\", () => {\n if (hasEmit(component)) {\n component.emit(\"input\", {\n value: input.value,\n isEmpty: updateInputState(),\n isAutofilled: false,\n });\n } else {\n updateInputState();\n }\n });\n\n // Listen for change events (some browsers fire this on autofill)\n input.addEventListener(\"change\", () => {\n const isEmpty = updateInputState();\n checkForAutofill(false);\n if (hasEmit(component)) {\n component.emit(\"change\", {\n value: input.value,\n isEmpty,\n isAutofilled: input.matches?.(\":-webkit-autofill\") || false,\n });\n }\n });\n\n // Listen for animation events that indicate autofill (webkit browsers)\n input.addEventListener(\"animationstart\", (e: AnimationEvent) => {\n if (\n e.animationName === \"onAutoFillStart\" ||\n e.animationName?.includes(\"autofill\")\n ) {\n checkForAutofill();\n }\n });\n\n // Initial state setup\n updateInputState();\n\n // Check for autofill immediately (handles pre-filled values)\n // This catches autofill that happens before component initialization\n setTimeout(() => {\n checkForAutofill(false);\n }, 0);\n\n // Add multiline class to the component if it's a textarea\n if (isMultiline) {\n component.element.classList.add(\n `${component.getClass(\"textfield\")}--multiline`\n );\n }\n\n component.element.appendChild(input);\n\n // Cleanup\n if (hasLifecycle(component)) {\n const originalDestroy = component.lifecycle.destroy;\n component.lifecycle.destroy = () => {\n // Clean up observer\n if (autofillObserver) {\n autofillObserver.disconnect();\n }\n input.remove();\n originalDestroy.call(component.lifecycle);\n };\n }\n\n return {\n ...component,\n input,\n setValue(value: string) {\n input.value = value || \"\";\n updateInputState();\n return this;\n },\n getValue() {\n return input.value;\n },\n setAttribute(name: string, value: string) {\n input.setAttribute(name, value);\n return this;\n },\n getAttribute(name: string) {\n return input.getAttribute(name);\n },\n removeAttribute(name: string) {\n input.removeAttribute(name);\n return this;\n },\n };\n };\n",
|
|
27
|
+
"// src/core/compose/features/textlabel.ts\n\nimport { BaseComponent, ElementComponent } from \"../component\";\n\n/**\n * Configuration for text label feature\n */\nexport interface TextLabelConfig {\n /**\n * Label text\n */\n label?: string;\n\n /**\n * Label position ('start' or 'end')\n */\n labelPosition?: \"start\" | \"end\";\n\n /**\n * CSS class prefix\n */\n prefix?: string;\n\n /**\n * Component name for class generation\n */\n componentName?: string;\n\n [key: string]: any;\n}\n\n/**\n * Label manager interface\n */\nexport interface LabelManager {\n /**\n * Sets the label text\n * @param text - Text to set\n * @returns LabelManager instance for chaining\n */\n setText: (text: string) => LabelManager;\n\n /**\n * Gets the current label text\n * @returns Current text\n */\n getText: () => string;\n\n /**\n * Gets the label element\n * @returns Label element\n */\n getElement: () => HTMLElement;\n}\n\n/**\n * Component with label capabilities\n */\nexport interface LabelComponent extends BaseComponent {\n label: LabelManager;\n}\n\n/**\n * Adds a text label to a component\n *\n * @param config - Configuration object containing label information\n * @returns Function that enhances a component with a label\n */\nexport const withTextLabel =\n <T extends TextLabelConfig>(config: T = {} as T) =>\n <C extends ElementComponent>(component: C): C & LabelComponent => {\n if (!config.label) return component as C & LabelComponent;\n\n const labelElement = document.createElement(\"label\");\n const position = config.labelPosition || \"start\";\n labelElement.className = `${config.prefix}-${config.componentName}-label ${config.prefix}-${config.componentName}-label--${position}`;\n labelElement.textContent = config.label;\n\n if (position === \"start\") {\n // Insert label as the first child\n if (component.element.firstChild) {\n component.element.insertBefore(\n labelElement,\n component.element.firstChild\n );\n } else {\n component.element.appendChild(labelElement);\n }\n } else {\n // Insert label at the end (default behavior)\n component.element.appendChild(labelElement);\n }\n\n if (position && component.componentName !== \"slider\") {\n component.element.classList.add(\n `${config.prefix}-${config.componentName}--label-${position}`\n );\n }\n\n const label: LabelManager = {\n setText(text: string) {\n labelElement.textContent = text;\n return this;\n },\n getText() {\n return labelElement.textContent || \"\";\n },\n getElement() {\n return labelElement;\n },\n };\n\n return {\n ...component,\n label,\n };\n };\n",
|
|
28
28
|
"// src/core/compose/features/track.ts\n/**\n * @module core/compose/features\n */\n\nimport { BaseComponent, ElementComponent } from '../component';\n\n/**\n * Configuration for track feature\n */\nexport interface TrackConfig {\n /**\n * CSS class prefix\n */\n prefix: string;\n \n /**\n * Component name for class generation\n */\n componentName: string;\n \n /**\n * Custom icon HTML or 'none'\n */\n icon?: string;\n \n [key: string]: any;\n}\n\n/**\n * Component with track and thumb elements\n */\nexport interface TrackComponent extends BaseComponent {\n /**\n * Track element\n */\n track: HTMLElement;\n \n /**\n * Thumb element\n */\n thumb: HTMLElement;\n}\n\n/**\n * Default checkmark icon SVG\n * @private\n */\nconst DEFAULT_ICON = `\n<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <polyline points=\"20 6 9 17 4 12\"></polyline>\n</svg>`;\n\n/**\n * Adds track and thumb elements to a component\n * \n * @param config - Track configuration\n * @returns Function that enhances a component with track and thumb elements\n */\nexport const withTrack = <T extends TrackConfig>(config: T) => \n <C extends ElementComponent>(component: C): C & TrackComponent => {\n const track = document.createElement('span');\n track.className = `${config.prefix}-${config.componentName}-track`;\n\n const thumb = document.createElement('span');\n thumb.className = `${config.prefix}-${config.componentName}-thumb`;\n track.appendChild(thumb);\n\n // Add icon inside thumb if provided or use default\n if (config.icon !== 'none') {\n const icon = document.createElement('span');\n icon.className = `${config.prefix}-${config.componentName}-thumb-icon`;\n icon.innerHTML = config.icon || DEFAULT_ICON;\n thumb.appendChild(icon);\n }\n\n component.element.appendChild(track);\n\n return {\n ...component,\n track,\n thumb\n };\n };",
|
|
29
29
|
"// src/core/state/events.ts\n\n/**\n * Event manager interface for handling component events\n */\nexport interface EventManagerState {\n /**\n * Adds an event listener\n * @param event - Event name\n * @param handler - Event handler\n * @returns EventManagerState instance for chaining\n */\n on: (event: string, handler: (...args: any[]) => void) => EventManagerState;\n \n /**\n * Removes an event listener\n * @param event - Event name\n * @param handler - Event handler\n * @returns EventManagerState instance for chaining\n */\n off: (event: string, handler: (...args: any[]) => void) => EventManagerState;\n \n /**\n * Removes all event listeners and cleans up\n */\n destroy: () => void;\n \n /**\n * Gets all active handlers\n * @returns Map of event names to handlers\n */\n getHandlers: () => Map<(...args: any[]) => void, string>;\n}\n\n/**\n * Creates an event manager for a component\n * Simple event handling mechanism for components\n * \n * @param element - Component's DOM element\n * @returns Event manager interface\n */\nexport const createEventManager = (element: HTMLElement): EventManagerState => {\n const handlers = new Map<(...args: any[]) => void, string>();\n\n return {\n /**\n * Adds an event listener\n * @param event - Event name\n * @param handler - Event handler\n * @returns EventManagerState instance for chaining\n */\n on(event: string, handler: (...args: any[]) => void): EventManagerState {\n element.addEventListener(event, handler as EventListener);\n handlers.set(handler, event);\n return this;\n },\n\n /**\n * Removes an event listener\n * @param event - Event name\n * @param handler - Event handler\n * @returns EventManagerState instance for chaining\n */\n off(event: string, handler: (...args: any[]) => void): EventManagerState {\n element.removeEventListener(event, handler as EventListener);\n handlers.delete(handler);\n return this;\n },\n\n /**\n * Removes all event listeners and cleans up\n */\n destroy(): void {\n handlers.forEach((event, handler) => {\n element.removeEventListener(event, handler as EventListener);\n });\n handlers.clear();\n },\n\n /**\n * Gets all active handlers\n * @returns Map of handlers to event names\n */\n getHandlers(): Map<(...args: any[]) => void, string> {\n return new Map(handlers);\n }\n };\n};",
|
|
30
30
|
"// src/core/compose/features/withEvents.ts\n\nimport { createEventManager } from \"../../state/events\";\nimport { BaseComponent, ElementComponent } from \"../component\";\nimport { hasLifecycle } from \"../utils/type-guards\";\n\n/**\n * Event manager interface\n */\nexport interface EnhancedEventManager {\n /**\n * Add an event listener\n */\n on: (event: string, handler: Function) => EnhancedEventManager;\n\n /**\n * Remove an event listener\n */\n off: (event: string, handler: Function) => EnhancedEventManager;\n\n /**\n * Add multiple event listeners at once\n */\n addListeners: (listeners: Record<string, Function>) => EnhancedEventManager;\n\n /**\n * Remove multiple event listeners at once\n */\n removeListeners: (\n listeners: Record<string, Function>\n ) => EnhancedEventManager;\n\n /**\n * One-time event handler\n */\n once: (event: string, handler: Function) => EnhancedEventManager;\n\n /**\n * Clean up all event listeners\n */\n destroy: () => void;\n}\n\n/**\n * Component with enhanced event capabilities\n */\nexport interface EnhancedEventComponent extends BaseComponent {\n events: EnhancedEventManager;\n on: (event: string, handler: Function) => EnhancedEventComponent;\n off: (event: string, handler: Function) => EnhancedEventComponent;\n}\n\n/**\n * Adds enhanced event handling capabilities to a component\n *\n * @param target - Optional custom event target\n * @returns Function that enhances a component with event capabilities\n */\nexport const withEvents =\n (target?: HTMLElement) =>\n <C extends ElementComponent>(component: C): C & EnhancedEventComponent => {\n const events = createEventManager(target || component.element);\n\n // Enhanced event methods\n const enhancedEvents: EnhancedEventManager = {\n /**\n * Add multiple event listeners at once\n * @param listeners - Map of event types to handlers\n */\n addListeners(listeners: Record<string, Function>) {\n Object.entries(listeners).forEach(([event, handler]) => {\n events.on(event, handler as any);\n });\n return this;\n },\n\n /**\n * Remove multiple event listeners at once\n * @param listeners - Map of event types to handlers\n */\n removeListeners(listeners: Record<string, Function>) {\n Object.entries(listeners).forEach(([event, handler]) => {\n events.off(event, handler as any);\n });\n return this;\n },\n\n /**\n * One-time event handler\n * @param event - Event name\n * @param handler - Event handler\n */\n once(event: string, handler: Function) {\n const wrappedHandler = (e: Event) => {\n handler(e);\n events.off(event, wrappedHandler as any);\n };\n events.on(event, wrappedHandler as any);\n return this;\n },\n\n /**\n * Add an event listener\n */\n on(event: string, handler: Function) {\n events.on(event, handler as any);\n return this;\n },\n\n /**\n * Remove an event listener\n */\n off(event: string, handler: Function) {\n events.off(event, handler as any);\n return this;\n },\n\n /**\n * Clean up all event listeners\n */\n destroy() {\n events.destroy();\n },\n };\n\n // Add lifecycle integration\n if (hasLifecycle(component)) {\n const originalDestroy = component.lifecycle.destroy;\n component.lifecycle.destroy = () => {\n events.destroy();\n originalDestroy.call(component.lifecycle);\n };\n }\n\n return {\n ...component,\n events: enhancedEvents,\n on: enhancedEvents.on.bind(enhancedEvents),\n off: enhancedEvents.off.bind(enhancedEvents),\n };\n };\n",
|
|
@@ -32,24 +32,10 @@
|
|
|
32
32
|
"// src/core/utils/performance.ts\n/**\n * @module core/utils/performance\n * @description Performance utilities for optimizing high-frequency event handlers\n */\n\n/**\n * Creates a throttled function that only invokes the provided function \n * at most once per every specified wait milliseconds.\n *\n * Throttling ensures that the function executes at a regular interval,\n * which is useful for limiting the rate of execution for expensive operations.\n *\n * @param {Function} fn - The function to throttle\n * @param {number} wait - The number of milliseconds to throttle invocations to\n * @param {Object} options - Configuration options\n * @param {boolean} options.leading - Specify invoking on the leading edge of the timeout (default: true)\n * @param {boolean} options.trailing - Specify invoking on the trailing edge of the timeout (default: true)\n * @returns {Function} The throttled function\n *\n * @example\n * // Throttle scroll handler to execute at most once every 100ms\n * const throttledScroll = throttle((e) => {\n * updateScrollPosition(window.scrollY);\n * }, 100);\n * \n * window.addEventListener('scroll', throttledScroll);\n */\nexport const throttle = <T extends (...args: any[]) => any>(\n fn: T,\n wait: number,\n options: { leading?: boolean; trailing?: boolean } = {}\n): ((...args: Parameters<T>) => void) => {\n let timeout: number | null = null;\n let previous = 0;\n const { leading = true, trailing = true } = options;\n \n return function(this: any, ...args: Parameters<T>): void {\n const now = Date.now();\n \n if (!previous && !leading) {\n previous = now;\n }\n \n const remaining = wait - (now - previous);\n \n if (remaining <= 0 || remaining > wait) {\n if (timeout) {\n clearTimeout(timeout);\n timeout = null;\n }\n \n previous = now;\n fn.apply(this, args);\n } else if (!timeout && trailing) {\n timeout = window.setTimeout(() => {\n previous = leading ? Date.now() : 0;\n timeout = null;\n fn.apply(this, args);\n }, remaining);\n }\n };\n};\n\n/**\n * Creates a debounced function that delays invoking the provided function\n * until after the specified wait milliseconds have elapsed since the last time \n * it was invoked.\n *\n * Debouncing groups multiple sequential calls into a single execution at the end,\n * which is useful for handling rapid-fire events like resize or input.\n *\n * @param {Function} fn - The function to debounce\n * @param {number} wait - The number of milliseconds to delay\n * @param {Object} options - Configuration options\n * @param {boolean} options.leading - Specify invoking on the leading edge of the timeout (default: false)\n * @param {boolean} options.maxWait - Maximum time function can be delayed before execution in milliseconds\n * @returns {Function} The debounced function\n *\n * @example\n * // Debounced search that executes 300ms after the user stops typing\n * const debouncedSearch = debounce((query) => {\n * performSearch(query);\n * }, 300);\n * \n * searchInput.addEventListener('input', (e) => {\n * debouncedSearch(e.target.value);\n * });\n */\nexport const debounce = <T extends (...args: any[]) => any>(\n fn: T,\n wait: number,\n options: { leading?: boolean; maxWait?: number } = {}\n): ((...args: Parameters<T>) => void) => {\n let timeout: number | null = null;\n let lastArgs: Parameters<T> | null = null;\n let lastThis: any = null;\n let result: ReturnType<T>;\n let lastCallTime: number | null = null;\n let lastInvokeTime = 0;\n \n const { leading = false, maxWait } = options;\n \n // Calculate if max wait specified\n const shouldInvoke = (time: number): boolean => {\n const timeSinceLastCall = time - (lastCallTime || 0);\n const timeSinceLastInvoke = time - lastInvokeTime;\n \n return (\n !lastCallTime ||\n timeSinceLastCall >= wait ||\n timeSinceLastCall < 0 ||\n (maxWait !== undefined && timeSinceLastInvoke >= maxWait)\n );\n };\n \n // Function to invoke the original function\n const invokeFunc = (time: number): ReturnType<T> => {\n const args = lastArgs as Parameters<T>;\n const thisArg = lastThis;\n \n lastArgs = lastThis = null;\n lastInvokeTime = time;\n \n result = fn.apply(thisArg, args);\n return result;\n };\n \n // Function to handle a new call\n const trailingEdge = (time: number): ReturnType<T> => {\n timeout = null;\n \n if (lastArgs) {\n return invokeFunc(time);\n }\n \n return result;\n };\n \n // Check if we should invoke immediately (leading edge)\n const leadingEdge = (time: number): ReturnType<T> => {\n lastInvokeTime = time;\n \n // Start the timeout for the trailing edge\n timeout = window.setTimeout(() => {\n trailingEdge(Date.now());\n }, wait);\n \n return leading ? invokeFunc(time) : result;\n };\n \n // Main debounced function to return\n return function(this: any, ...args: Parameters<T>): ReturnType<T> {\n const time = Date.now();\n const isInvoking = shouldInvoke(time);\n \n lastArgs = args;\n lastThis = this;\n lastCallTime = time;\n \n if (isInvoking) {\n if (timeout === null) {\n return leadingEdge(time);\n }\n \n if (maxWait !== undefined) {\n // Handle maxWait timing\n timeout = window.setTimeout(() => {\n const timeNow = Date.now();\n if (shouldInvoke(timeNow)) {\n return trailingEdge(timeNow);\n }\n }, Math.min(wait, maxWait - (time - lastInvokeTime)));\n }\n }\n \n if (timeout === null) {\n timeout = window.setTimeout(() => {\n trailingEdge(Date.now());\n }, wait);\n }\n \n return result;\n };\n};\n\n/**\n * Creates a function that is restricted to invoking the provided function once.\n * Repeat calls to the function return the value of the first invocation.\n * \n * @param {Function} fn - The function to restrict\n * @returns {Function} The restricted function\n * \n * @example\n * // Initialize app only once\n * const initApp = once(() => {\n * console.log('App initialized');\n * setupEventListeners();\n * loadInitialData();\n * });\n * \n * // Can be called multiple times, but executes only once\n * button1.addEventListener('click', initApp);\n * button2.addEventListener('click', initApp);\n */\nexport const once = <T extends (...args: any[]) => any>(\n fn: T\n): ((...args: Parameters<T>) => ReturnType<T>) => {\n let called = false;\n let result: ReturnType<T>;\n \n return function(this: any, ...args: Parameters<T>): ReturnType<T> {\n if (!called) {\n called = true;\n result = fn.apply(this, args);\n }\n \n return result;\n };\n};",
|
|
33
33
|
"// src/core/compose/features/throttle.ts\n/**\n * @module core/compose/features\n * @description Adds throttled event handling capabilities to components\n */\n\nimport { BaseComponent, ElementComponent } from \"../component\";\nimport { throttle } from \"../../utils/performance\";\nimport { hasLifecycle } from \"../utils/type-guards\";\n\n/**\n * Configuration for throttled event handlers\n */\nexport interface ThrottleConfig {\n /**\n * Event handlers with throttle settings\n */\n throttledEvents?: Record<\n string,\n {\n handler: (event: Event) => void;\n wait: number;\n options?: { leading?: boolean; trailing?: boolean };\n }\n >;\n\n [key: string]: any;\n}\n\n/**\n * Component with throttled event capabilities\n */\nexport interface ThrottleComponent extends BaseComponent {\n /**\n * Adds a throttled event listener\n * @param event - Event name\n * @param handler - Event handler\n * @param wait - Throttle interval in milliseconds\n * @param options - Throttle options\n * @returns ThrottleComponent for chaining\n */\n addThrottledEvent: (\n event: string,\n handler: (event: Event) => void,\n wait: number,\n options?: { leading?: boolean; trailing?: boolean }\n ) => ThrottleComponent;\n\n /**\n * Removes a throttled event listener\n * @param event - Event name\n * @returns ThrottleComponent for chaining\n */\n removeThrottledEvent: (event: string) => ThrottleComponent;\n}\n\n/**\n * Adds throttled event handling capabilities to a component\n *\n * @param config - Configuration object containing throttled event settings\n * @returns Function that enhances a component with throttled event handling\n *\n * @example\n * ```ts\n * // Add throttled events to a component\n * const component = pipe(\n * createBase,\n * withElement(...),\n * withThrottle({\n * throttledEvents: {\n * 'scroll': {\n * handler: (e) => updateScrollPosition(e),\n * wait: 100\n * },\n * 'mousemove': {\n * handler: handleMouseMove,\n * wait: 50,\n * options: { leading: true, trailing: false }\n * }\n * }\n * })\n * )(config);\n * ```\n */\nexport const withThrottle =\n (config: ThrottleConfig = {}) =>\n <C extends ElementComponent>(component: C): C & ThrottleComponent => {\n // Store throttled handlers for cleanup\n const throttledHandlers: Record<\n string,\n {\n original: (event: Event) => void;\n throttled: EventListener;\n }\n > = {};\n\n /**\n * Adds a throttled event listener to the component's element\n */\n const addThrottledEvent = (\n event: string,\n handler: (event: Event) => void,\n wait: number,\n options: { leading?: boolean; trailing?: boolean } = {}\n ): C & ThrottleComponent => {\n // Remove existing handler if any\n if (throttledHandlers[event]) {\n removeThrottledEvent(event);\n }\n\n // Create throttled handler\n const throttled = throttle(handler, wait, options);\n\n // Add event listener\n component.element.addEventListener(event, throttled as EventListener);\n\n // Store for later cleanup\n throttledHandlers[event] = {\n original: handler,\n throttled: throttled as EventListener,\n };\n\n return enhancedComponent;\n };\n\n /**\n * Removes a throttled event listener\n */\n const removeThrottledEvent = (event: string): C & ThrottleComponent => {\n const handler = throttledHandlers[event];\n\n if (handler) {\n component.element.removeEventListener(event, handler.throttled);\n delete throttledHandlers[event];\n }\n\n return enhancedComponent;\n };\n\n // Handle lifecycle integration if available\n if (hasLifecycle(component)) {\n const originalDestroy = component.lifecycle.destroy;\n\n component.lifecycle.destroy = () => {\n // Remove all throttled event listeners\n Object.keys(throttledHandlers).forEach((event) => {\n const handler = throttledHandlers[event];\n component.element.removeEventListener(event, handler.throttled);\n });\n\n // Call original destroy method\n originalDestroy.call(component.lifecycle);\n };\n }\n\n // Initialize with config\n if (config.throttledEvents) {\n Object.entries(config.throttledEvents).forEach(([event, settings]) => {\n addThrottledEvent(\n event,\n settings.handler,\n settings.wait,\n settings.options\n );\n });\n }\n\n // Create enhanced component\n const enhancedComponent = {\n ...component,\n addThrottledEvent,\n removeThrottledEvent,\n };\n\n return enhancedComponent;\n };\n\nexport default withThrottle;\n",
|
|
34
34
|
"// src/core/compose/features/debounce.ts\n/**\n * @module core/compose/features\n * @description Adds debounced event handling capabilities to components\n */\n\nimport { BaseComponent, ElementComponent } from '../component';\nimport { debounce } from '../../utils/performance';\n\n/**\n * Interface for components with lifecycle\n */\nexport interface ComponentWithLifecycle extends ElementComponent {\n lifecycle: {\n destroy: () => void;\n [key: string]: any;\n };\n}\n\n/**\n * Type guard to check if component has lifecycle\n */\nfunction hasLifecycle(component: any): component is ComponentWithLifecycle {\n return 'lifecycle' in component && \n component.lifecycle && \n typeof component.lifecycle === 'object' &&\n 'destroy' in component.lifecycle &&\n typeof component.lifecycle.destroy === 'function';\n}\n\n/**\n * Configuration for debounced event handlers\n */\nexport interface DebounceConfig {\n /**\n * Event handlers with debounce settings\n */\n debouncedEvents?: Record<string, {\n handler: (event: Event) => void;\n wait: number;\n options?: { leading?: boolean; maxWait?: number };\n }>;\n \n [key: string]: any;\n}\n\n/**\n * Component with debounced event capabilities\n */\nexport interface DebounceComponent extends BaseComponent {\n /**\n * Adds a debounced event listener\n * @param event - Event name\n * @param handler - Event handler\n * @param wait - Debounce delay in milliseconds\n * @param options - Debounce options\n * @returns DebounceComponent for chaining\n */\n addDebouncedEvent: (\n event: string,\n handler: (event: Event) => void,\n wait: number,\n options?: { leading?: boolean; maxWait?: number }\n ) => DebounceComponent;\n \n /**\n * Removes a debounced event listener\n * @param event - Event name\n * @returns DebounceComponent for chaining\n */\n removeDebouncedEvent: (event: string) => DebounceComponent;\n}\n\n/**\n * Adds debounced event handling capabilities to a component\n * \n * @param config - Configuration object containing debounced event settings\n * @returns Function that enhances a component with debounced event handling\n * \n * @example\n * ```ts\n * // Add debounced events to a component\n * const component = pipe(\n * createBase,\n * withElement(...),\n * withDebounce({\n * debouncedEvents: {\n * 'input': {\n * handler: handleInput,\n * wait: 300\n * },\n * 'resize': {\n * handler: handleResize,\n * wait: 200,\n * options: { maxWait: 1000 }\n * }\n * }\n * })\n * )(config);\n * ```\n */\nexport const withDebounce = (config: DebounceConfig = {}) => \n <C extends ElementComponent>(component: C): C & DebounceComponent => {\n // Store debounced handlers for cleanup\n const debouncedHandlers: Record<string, {\n original: (event: Event) => void;\n debounced: EventListener;\n }> = {};\n \n /**\n * Adds a debounced event listener to the component's element\n */\n const addDebouncedEvent = (\n event: string,\n handler: (event: Event) => void,\n wait: number,\n options: { leading?: boolean; maxWait?: number } = {}\n ): C & DebounceComponent => {\n // Remove existing handler if any\n if (debouncedHandlers[event]) {\n removeDebouncedEvent(event);\n }\n \n // Create debounced handler\n const debounced = debounce(handler, wait, options);\n \n // Add event listener\n component.element.addEventListener(event, debounced as EventListener);\n \n // Store for later cleanup\n debouncedHandlers[event] = {\n original: handler,\n debounced: debounced as EventListener\n };\n \n return enhancedComponent;\n };\n \n /**\n * Removes a debounced event listener\n */\n const removeDebouncedEvent = (event: string): C & DebounceComponent => {\n const handler = debouncedHandlers[event];\n \n if (handler) {\n component.element.removeEventListener(event, handler.debounced);\n delete debouncedHandlers[event];\n }\n \n return enhancedComponent;\n };\n \n // Handle lifecycle integration if available\n if (hasLifecycle(component)) {\n const originalDestroy = component.lifecycle.destroy;\n \n component.lifecycle.destroy = () => {\n // Remove all debounced event listeners\n Object.keys(debouncedHandlers).forEach(event => {\n const handler = debouncedHandlers[event];\n component.element.removeEventListener(event, handler.debounced);\n });\n \n // Call original destroy method\n originalDestroy.call(component.lifecycle);\n };\n }\n \n // Initialize with config\n if (config.debouncedEvents) {\n Object.entries(config.debouncedEvents).forEach(([event, settings]) => {\n addDebouncedEvent(\n event,\n settings.handler,\n settings.wait,\n settings.options\n );\n });\n }\n \n // Create enhanced component\n const enhancedComponent = {\n ...component,\n addDebouncedEvent,\n removeDebouncedEvent\n };\n \n return enhancedComponent;\n };\n\nexport default withDebounce;",
|
|
35
|
-
"// src/core/gestures/utils.ts\n/**\n * @module core/gestures\n * @description Utility functions for gesture detection\n */\n\nimport { GestureEvent, GestureState } from './types';\n\n/**\n * Calculate distance between two points\n * \n * @param x1 - X coordinate of first point\n * @param y1 - Y coordinate of first point\n * @param x2 - X coordinate of second point\n * @param y2 - Y coordinate of second point\n * @returns Distance between the points\n */\nexport function getDistance(x1: number, y1: number, x2: number, y2: number): number {\n return Math.sqrt(Math.pow(x2 - x1, 2) + Math.pow(y2 - y1, 2));\n}\n\n/**\n * Calculate angle between two points in degrees (0-360)\n * \n * @param x1 - X coordinate of first point\n * @param y1 - Y coordinate of first point\n * @param x2 - X coordinate of second point\n * @param y2 - Y coordinate of second point\n * @returns Angle in degrees\n */\nexport function getAngle(x1: number, y1: number, x2: number, y2: number): number {\n const angle = Math.atan2(y2 - y1, x2 - x1) * 180 / Math.PI;\n return (angle < 0) ? angle + 360 : angle;\n}\n\n/**\n * Create a base gesture event\n * \n * @param type - Type of gesture\n * @param originalEvent - Original DOM event\n * @param state - Current gesture state\n * @returns Base gesture event object\n */\nexport function createGestureEvent(\n type: string, \n originalEvent: Event,\n state: GestureState\n): GestureEvent {\n const endTime = Date.now();\n let defaultPrevented = false;\n \n const event: GestureEvent = {\n type,\n originalEvent,\n target: state.target || originalEvent.target,\n startTime: state.startTime,\n endTime,\n duration: endTime - state.startTime,\n defaultPrevented,\n preventDefault: () => {\n defaultPrevented = true;\n event.defaultPrevented = true;\n if (originalEvent.cancelable) {\n originalEvent.preventDefault();\n }\n },\n stopPropagation: () => {\n originalEvent.stopPropagation();\n }\n };\n \n return event;\n}\n\n/**\n * Detect if the device supports touch events\n * \n * @returns Whether touch is supported\n */\nexport function hasTouchSupport(): boolean {\n return 'ontouchstart' in window || \n (navigator.maxTouchPoints && navigator.maxTouchPoints > 0);\n}\n\n/**\n * Detect if the device supports pointer events\n * \n * @returns Whether pointer events are supported\n */\nexport function hasPointerSupport(): boolean {\n return !!window.PointerEvent;\n}\n\n/**\n * Extract normalized touch coordinates from an event\n * Works with mouse events, touch events and pointer events\n * \n * @param e - DOM event\n * @returns Object with clientX and clientY coordinates\n */\nexport function getTouchCoordinates(e: MouseEvent | TouchEvent | PointerEvent): { clientX: number, clientY: number } {\n if ('touches' in e && e.touches.length > 0) {\n return {\n clientX: e.touches[0].clientX,\n clientY: e.touches[0].clientY\n };\n }\n \n return {\n clientX: (e as MouseEvent | PointerEvent).clientX,\n clientY: (e as MouseEvent | PointerEvent).clientY\n };\n}",
|
|
36
|
-
"// src/core/gestures/tap.ts\n/**\n * @module core/gestures\n * @description Tap gesture detection\n */\n\nimport { TapEvent, GestureDetectionContext } from './types';\nimport { createGestureEvent } from './utils';\n\n/**\n * Detect tap gesture\n * \n * @param context - Gesture detection context\n * @returns Tap event or null if no tap detected\n */\nexport function detectTap(context: GestureDetectionContext): TapEvent | null {\n const { state, options, originalEvent } = context;\n \n // Calculate distance between start and current position\n const deltaX = state.currentX - state.startX;\n const deltaY = state.currentY - state.startY;\n const distance = Math.sqrt(deltaX * deltaX + deltaY * deltaY);\n \n // Check if movement is within threshold\n if (distance < options.tapDistanceThreshold) {\n // Check for double tap\n const now = Date.now();\n const isDoubleTap = now - state.lastTapTime < 300;\n \n const tapCount = isDoubleTap ? state.tapCount + 1 : 1;\n \n // Create tap event\n const tapEvent: TapEvent = {\n ...createGestureEvent('tap', originalEvent, state),\n type: 'tap',\n count: tapCount,\n x: state.currentX,\n y: state.currentY\n };\n \n return tapEvent;\n }\n \n return null;\n}",
|
|
37
|
-
"// src/core/gestures/swipe.ts\n/**\n * @module core/gestures\n * @description Swipe gesture detection\n */\n\nimport { SwipeEvent, GestureDetectionContext, SWIPE_DIRECTIONS } from './types';\nimport { createGestureEvent } from './utils';\n\n/**\n * Determine swipe direction based on delta X and Y\n * \n * @param deltaX - Distance moved in X direction\n * @param deltaY - Distance moved in Y direction\n * @returns Direction of the swipe\n */\nexport function getSwipeDirection(deltaX: number, deltaY: number): SWIPE_DIRECTIONS {\n if (Math.abs(deltaX) > Math.abs(deltaY)) {\n return deltaX > 0 ? SWIPE_DIRECTIONS.RIGHT : SWIPE_DIRECTIONS.LEFT;\n }\n return deltaY > 0 ? SWIPE_DIRECTIONS.DOWN : SWIPE_DIRECTIONS.UP;\n}\n\n/**\n * Detect swipe gesture\n * \n * @param context - Gesture detection context\n * @returns Swipe event or null if no swipe detected\n */\nexport function detectSwipe(context: GestureDetectionContext): SwipeEvent | null {\n const { state, options, originalEvent } = context;\n \n // Calculate deltas and distance\n const deltaX = state.currentX - state.startX;\n const deltaY = state.currentY - state.startY;\n const distance = Math.sqrt(deltaX * deltaX + deltaY * deltaY);\n \n // Calculate time and velocity\n const endTime = Date.now();\n const deltaTime = endTime - state.startTime;\n const velocity = distance / deltaTime;\n \n // Check if it's a swipe\n if (distance >= options.swipeThreshold && deltaTime <= options.swipeTimeThreshold) {\n const direction = getSwipeDirection(deltaX, deltaY);\n \n // Create swipe event\n const swipeEvent: SwipeEvent = {\n ...createGestureEvent('swipe', originalEvent, state),\n type: 'swipe',\n direction,\n deltaX,\n deltaY,\n distance,\n velocity,\n startX: state.startX,\n startY: state.startY,\n endX: state.currentX,\n endY: state.currentY\n };\n \n return swipeEvent;\n }\n \n return null;\n}",
|
|
38
|
-
"// src/core/gestures/longpress.ts\n/**\n * @module core/gestures\n * @description Long press gesture detection\n */\n\nimport { LongPressEvent, GestureDetectionContext } from './types';\nimport { createGestureEvent } from './utils';\n\n/**\n * Detect long press gesture\n * \n * This is slightly different from other gesture detectors as it sets up a timer\n * and returns a callback function that will be triggered when the timer completes.\n * \n * @param context - Gesture detection context\n * @param callback - Function to call when long press is detected\n * @returns Cleanup function to cancel the long press detection\n */\nexport function detectLongPress(\n context: GestureDetectionContext,\n callback: (event: LongPressEvent) => void\n): () => void {\n const { state, options, originalEvent } = context;\n \n // Set a timer for long press detection\n const timer = window.setTimeout(() => {\n // Only trigger if gesture is still active\n if (state.active) {\n // Check if movement is within threshold\n const diffX = Math.abs(state.currentX - state.startX);\n const diffY = Math.abs(state.currentY - state.startY);\n \n if (diffX < options.tapDistanceThreshold && diffY < options.tapDistanceThreshold) {\n // Create long press event\n const longPressEvent: LongPressEvent = {\n ...createGestureEvent('longpress', originalEvent, state),\n type: 'longpress',\n x: state.currentX,\n y: state.currentY\n };\n \n // Trigger callback\n callback(longPressEvent);\n }\n }\n }, options.longPressTime);\n \n // Return cleanup function\n return () => {\n clearTimeout(timer);\n };\n}\n\n/**\n * Check if movement would cancel a long press\n * \n * @param context - Gesture detection context\n * @returns Whether the long press should be canceled\n */\nexport function shouldCancelLongPress(context: GestureDetectionContext): boolean {\n const { state, options } = context;\n \n const diffX = Math.abs(state.currentX - state.startX);\n const diffY = Math.abs(state.currentY - state.startY);\n \n return diffX > options.tapDistanceThreshold || diffY > options.tapDistanceThreshold;\n}",
|
|
39
|
-
"// src/core/gestures/pan.ts\n/**\n * @module core/gestures\n * @description Pan gesture detection\n */\n\nimport { PanEvent, GestureDetectionContext } from \"./types\";\nimport { createGestureEvent } from \"./utils\";\n\n/**\n * Detect pan gesture\n *\n * @param context - Gesture detection context\n * @returns Pan event or null if no significant movement\n */\nexport function detectPan(context: GestureDetectionContext): PanEvent | null {\n const { state, originalEvent } = context;\n\n // Calculate delta from start position\n const deltaX = state.currentX - state.startX;\n const deltaY = state.currentY - state.startY;\n\n // Calculate delta from last position to determine if there's significant movement\n const moveDeltaX = state.currentX - state.lastX;\n const moveDeltaY = state.currentY - state.lastY;\n const moveDelta = Math.sqrt(\n moveDeltaX * moveDeltaX + moveDeltaY * moveDeltaY\n );\n\n // Check if movement is significant\n if (moveDelta > 0) {\n // Create pan event\n const panEvent: PanEvent = {\n ...createGestureEvent(\"pan\", originalEvent, state),\n type: \"pan\",\n deltaX,\n deltaY,\n startX: state.startX,\n startY: state.startY,\n currentX: state.currentX,\n currentY: state.currentY,\n };\n\n return panEvent;\n }\n\n return null;\n}\n",
|
|
40
|
-
"// src/core/gestures/pinch.ts\n/**\n * @module core/gestures\n * @description Pinch gesture detection\n */\n\nimport { PinchEvent, GestureDetectionContext } from \"./types\";\nimport { createGestureEvent, getDistance } from \"./utils\";\n\n/**\n * Detect pinch gesture\n *\n * @param context - Gesture detection context\n * @param touch1 - First touch point\n * @param touch2 - Second touch point\n * @returns Pinch event or null if no pinch detected\n */\nexport function detectPinch(\n context: GestureDetectionContext,\n touch1: Touch,\n touch2: Touch\n): PinchEvent | null {\n const { state, originalEvent } = context;\n\n // Calculate current distance between touch points\n const currentDistance = getDistance(\n touch1.clientX,\n touch1.clientY,\n touch2.clientX,\n touch2.clientY\n );\n\n // Minimum movement threshold for pinch detection\n const PINCH_THRESHOLD = 10;\n\n // Check if the distance change is significant\n if (Math.abs(currentDistance - state.startDistance) > PINCH_THRESHOLD) {\n // Calculate scale factor\n const scale = currentDistance / state.startDistance;\n\n // Calculate center point\n const centerX = (touch1.clientX + touch2.clientX) / 2;\n const centerY = (touch1.clientY + touch2.clientY) / 2;\n\n // Create pinch event\n const pinchEvent: PinchEvent = {\n ...createGestureEvent(\"pinch\", originalEvent, state),\n type: \"pinch\",\n scale,\n centerX,\n centerY,\n };\n\n return pinchEvent;\n }\n\n return null;\n}\n",
|
|
41
|
-
"// src/core/gestures/rotate.ts\n/**\n * @module core/gestures\n * @description Rotate gesture detection\n */\n\nimport { RotateEvent, GestureDetectionContext } from \"./types\";\nimport { createGestureEvent, getAngle } from \"./utils\";\n\n/**\n * Detect rotate gesture\n *\n * @param context - Gesture detection context\n * @param touch1 - First touch point\n * @param touch2 - Second touch point\n * @returns Rotate event or null if no rotation detected\n */\nexport function detectRotate(\n context: GestureDetectionContext,\n touch1: Touch,\n touch2: Touch\n): RotateEvent | null {\n const { state, originalEvent } = context;\n\n // Calculate current angle between touch points\n const currentAngle = getAngle(\n touch1.clientX,\n touch1.clientY,\n touch2.clientX,\n touch2.clientY\n );\n\n // Minimum rotation threshold for detection\n const ROTATION_THRESHOLD = 10;\n\n // Calculate rotation difference\n const rotationDiff = currentAngle - state.startAngle;\n\n // Check if rotation is significant\n if (Math.abs(rotationDiff) > ROTATION_THRESHOLD) {\n // Calculate center point\n const centerX = (touch1.clientX + touch2.clientX) / 2;\n const centerY = (touch1.clientY + touch2.clientY) / 2;\n\n // Create rotate event\n const rotateEvent: RotateEvent = {\n ...createGestureEvent(\"rotate\", originalEvent, state),\n type: \"rotate\",\n rotation: rotationDiff,\n centerX,\n centerY,\n };\n\n return rotateEvent;\n }\n\n return null;\n}\n",
|
|
42
|
-
"// src/core/gestures/manager.ts\n/**\n * @module core/gestures\n * @description Gesture management system for handling touch and mouse interactions\n */\n\nimport { \n GestureConfig,\n GestureManager,\n GestureState,\n GestureHandler,\n GestureDetectionContext,\n AnyGestureEvent,\n GESTURE_TYPES,\n SWIPE_DIRECTIONS\n} from './types';\n\nimport { detectTap } from './tap';\nimport { detectSwipe } from './swipe';\nimport { detectLongPress, shouldCancelLongPress } from './longpress';\nimport { detectPan } from './pan';\nimport { detectPinch } from './pinch';\nimport { detectRotate } from './rotate';\nimport { hasTouchSupport, hasPointerSupport, getTouchCoordinates } from './utils';\n\n// Re-export types and constants\nexport { GESTURE_TYPES, SWIPE_DIRECTIONS };\n\n/**\n * Creates a gesture manager for handling touch and mouse interactions\n * \n * @param element - DOM element to attach gesture recognition to\n * @param config - Configuration options\n * @returns Gesture manager instance\n */\nexport const createGestureManager = (\n element: HTMLElement,\n config: GestureConfig = {}\n): GestureManager => {\n // Default configuration\n const options: Required<GestureConfig> = {\n swipeThreshold: 30,\n swipeTimeThreshold: 300,\n longPressTime: 500,\n tapDistanceThreshold: 10,\n preventDefault: true,\n stopPropagation: false,\n ...config\n };\n \n // Event handlers storage\n const handlers: Map<string, Set<GestureHandler>> = new Map();\n \n // Gesture state\n const state: GestureState = {\n active: false,\n startTime: 0,\n startX: 0,\n startY: 0,\n lastX: 0,\n lastY: 0,\n currentX: 0,\n currentY: 0,\n touchCount: 0,\n longPressTimer: null,\n startDistance: 0,\n startAngle: 0,\n lastTapTime: 0,\n tapCount: 0,\n target: null\n };\n \n // Detect feature support\n const supportTouch = hasTouchSupport();\n const supportPointer = hasPointerSupport();\n \n const gestureSupport = {\n tap: true,\n swipe: true,\n swipeleft: true,\n swiperight: true,\n swipeup: true,\n swipedown: true,\n longpress: true,\n pan: true,\n pinch: supportTouch || supportPointer,\n rotate: supportTouch || supportPointer\n };\n \n /**\n * Dispatch a gesture event\n */\n const dispatchGesture = (event: AnyGestureEvent): void => {\n // Get handlers for this event type\n const eventHandlers = handlers.get(event.type);\n if (!eventHandlers) return;\n \n // Call each handler\n eventHandlers.forEach(handler => {\n try {\n handler(event);\n } catch (error) {\n console.error(`Error in gesture handler for ${event.type}:`, error);\n }\n });\n \n // For swipe, also dispatch direction-specific events\n if (event.type === 'swipe' && 'direction' in event) {\n const directionEvent = { ...event, type: `swipe${event.direction}` as any };\n dispatchGesture(directionEvent as any);\n }\n \n // Apply default configuration for preventDefault and stopPropagation\n if (options.preventDefault && !event.defaultPrevented) {\n event.preventDefault();\n }\n \n if (options.stopPropagation) {\n event.stopPropagation();\n }\n };\n \n // Reference to the longpress cleanup function\n let longPressCleanup: (() => void) | null = null;\n \n /**\n * Handle touch/mouse start\n */\n const handleStart = (e: TouchEvent | MouseEvent | PointerEvent): void => {\n const touch = getTouchCoordinates(e);\n const touchCount = 'touches' in e ? e.touches.length : 1;\n \n // Store gesture state\n state.active = true;\n state.startTime = Date.now();\n state.startX = state.lastX = state.currentX = touch.clientX;\n state.startY = state.lastY = state.currentY = touch.clientY;\n state.touchCount = touchCount;\n state.target = e.target;\n \n // Handle multi-touch gestures\n if (touchCount === 2 && 'touches' in e) {\n const touch1 = e.touches[0];\n const touch2 = e.touches[1];\n \n // Set initial values for pinch and rotate\n state.startDistance = Math.sqrt(\n Math.pow(touch2.clientX - touch1.clientX, 2) + \n Math.pow(touch2.clientY - touch1.clientY, 2)\n );\n \n state.startAngle = Math.atan2(\n touch2.clientY - touch1.clientY,\n touch2.clientX - touch1.clientX\n ) * 180 / Math.PI;\n \n if (state.startAngle < 0) state.startAngle += 360;\n }\n \n // Setup context for gesture detection\n const context: GestureDetectionContext = {\n state,\n options,\n originalEvent: e\n };\n \n // Start long press detection\n if (longPressCleanup) {\n longPressCleanup();\n }\n \n longPressCleanup = detectLongPress(context, (longPressEvent) => {\n dispatchGesture(longPressEvent);\n });\n };\n \n /**\n * Handle touch/mouse move\n */\n const handleMove = (e: TouchEvent | MouseEvent | PointerEvent): void => {\n if (!state.active) return;\n \n const touch = getTouchCoordinates(e);\n const touchCount = 'touches' in e ? e.touches.length : 1;\n \n // Update positions\n state.lastX = state.currentX;\n state.lastY = state.currentY;\n state.currentX = touch.clientX;\n state.currentY = touch.clientY;\n \n // Setup context for gesture detection\n const context: GestureDetectionContext = {\n state,\n options,\n originalEvent: e\n };\n \n // Check if we should cancel longpress\n if (shouldCancelLongPress(context) && longPressCleanup) {\n longPressCleanup();\n longPressCleanup = null;\n }\n \n // Detect pan gesture\n const panEvent = detectPan(context);\n if (panEvent) {\n dispatchGesture(panEvent);\n }\n \n // Multi-touch gestures\n if (touchCount === 2 && 'touches' in e) {\n const touch1 = e.touches[0];\n const touch2 = e.touches[1];\n \n // Detect pinch\n const pinchEvent = detectPinch(context, touch1, touch2);\n if (pinchEvent) {\n dispatchGesture(pinchEvent);\n }\n \n // Detect rotate\n const rotateEvent = detectRotate(context, touch1, touch2);\n if (rotateEvent) {\n dispatchGesture(rotateEvent);\n }\n }\n };\n \n /**\n * Handle touch/mouse end\n */\n const handleEnd = (e: TouchEvent | MouseEvent | PointerEvent): void => {\n if (!state.active) return;\n \n // Cancel any ongoing long press detection\n if (longPressCleanup) {\n longPressCleanup();\n longPressCleanup = null;\n }\n \n // Setup context for gesture detection\n const context: GestureDetectionContext = {\n state,\n options,\n originalEvent: e\n };\n \n // Detect tap\n const tapEvent = detectTap(context);\n if (tapEvent) {\n // Update tap count for next tap\n state.lastTapTime = Date.now();\n state.tapCount = tapEvent.count;\n \n dispatchGesture(tapEvent);\n } else {\n // Detect swipe\n const swipeEvent = detectSwipe(context);\n if (swipeEvent) {\n dispatchGesture(swipeEvent);\n }\n }\n \n // Reset state\n state.active = false;\n };\n \n /**\n * Handle touch/mouse cancel\n */\n const handleCancel = (): void => {\n // Cancel long press detection\n if (longPressCleanup) {\n longPressCleanup();\n longPressCleanup = null;\n }\n \n // Reset state\n state.active = false;\n };\n \n // Event listener references\n let eventListeners: { \n [event: string]: EventListener \n } = {};\n \n /**\n * Set up event listeners based on available APIs\n */\n const setupEventListeners = (): void => {\n if (supportPointer) {\n // Use Pointer Events API\n eventListeners = {\n pointerdown: handleStart as EventListener,\n pointermove: handleMove as EventListener,\n pointerup: handleEnd as EventListener,\n pointercancel: handleCancel as EventListener\n };\n } else if (supportTouch) {\n // Use Touch Events API\n eventListeners = {\n touchstart: handleStart as EventListener,\n touchmove: handleMove as EventListener,\n touchend: handleEnd as EventListener,\n touchcancel: handleCancel as EventListener\n };\n } else {\n // Fall back to Mouse Events API\n eventListeners = {\n mousedown: handleStart as EventListener,\n mousemove: handleMove as EventListener,\n mouseup: handleEnd as EventListener,\n mouseleave: handleCancel as EventListener\n };\n }\n \n // Add listeners to element\n Object.entries(eventListeners).forEach(([event, listener]) => {\n element.addEventListener(event, listener, { passive: !options.preventDefault });\n });\n };\n \n /**\n * Remove all event listeners\n */\n const removeEventListeners = (): void => {\n // Remove all listeners from element\n Object.entries(eventListeners).forEach(([event, listener]) => {\n element.removeEventListener(event, listener);\n });\n \n // Clear eventListeners object\n eventListeners = {};\n };\n \n // Initialize event listeners\n setupEventListeners();\n \n return {\n /**\n * Add a gesture event listener\n * @param eventType - Type of gesture to listen for\n * @param handler - Event handler function\n * @returns Gesture manager for chaining\n */\n on(eventType: string, handler: GestureHandler): GestureManager {\n if (!handlers.has(eventType)) {\n handlers.set(eventType, new Set());\n }\n \n handlers.get(eventType)!.add(handler);\n return this;\n },\n \n /**\n * Remove a gesture event listener\n * @param eventType - Type of gesture\n * @param handler - Event handler to remove\n * @returns Gesture manager for chaining\n */\n off(eventType: string, handler: GestureHandler): GestureManager {\n const eventHandlers = handlers.get(eventType);\n if (eventHandlers) {\n eventHandlers.delete(handler);\n \n if (eventHandlers.size === 0) {\n handlers.delete(eventType);\n }\n }\n return this;\n },\n \n /**\n * Check if a gesture is supported on the current device\n * @param gestureType - Type of gesture to check\n * @returns Whether the gesture is supported\n */\n isSupported(gestureType: string): boolean {\n return gestureType in gestureSupport && gestureSupport[gestureType as keyof typeof gestureSupport];\n },\n \n /**\n * Enable gesture recognition by adding event listeners\n * @returns Gesture manager for chaining\n */\n enable(): GestureManager {\n setupEventListeners();\n return this;\n },\n \n /**\n * Disable gesture recognition by removing event listeners\n * @returns Gesture manager for chaining\n */\n disable(): GestureManager {\n removeEventListeners();\n return this;\n },\n \n /**\n * Clean up event listeners and timers\n */\n destroy(): void {\n // Clean up listeners\n removeEventListeners();\n \n // Clear long press timer\n if (longPressCleanup) {\n longPressCleanup();\n longPressCleanup = null;\n }\n \n // Clear handler references\n handlers.clear();\n }\n };\n};",
|
|
43
|
-
"// src/core/gestures/index.ts\n/**\n * @module core/gestures\n * @description Modular gesture recognition system for touch and mouse interactions\n */\n\n// Export core gesture utilities and types\nexport { createGestureManager, GESTURE_TYPES, SWIPE_DIRECTIONS } from './manager';\nexport { detectTap } from './tap';\nexport { detectSwipe } from './swipe';\nexport { detectLongPress } from './longpress';\nexport { detectPinch } from './pinch';\nexport { detectRotate } from './rotate';\nexport { detectPan } from './pan';\n\n// Export types\nexport type { \n GestureManager,\n GestureConfig,\n GestureEvent,\n TapEvent,\n SwipeEvent,\n LongPressEvent,\n PinchEvent,\n RotateEvent,\n PanEvent,\n AnyGestureEvent,\n GestureHandler,\n GestureState,\n GestureDetectionContext\n} from './types';",
|
|
44
|
-
"// src/core/compose/features/gestures.ts\n/**\n * @module core/compose/features\n * @description Adds gesture recognition capabilities to components\n */\n\nimport { BaseComponent, ElementComponent } from \"../component\";\nimport {\n createGestureManager,\n GestureManager,\n GestureConfig,\n GestureHandler,\n AnyGestureEvent,\n} from \"../../gestures\";\nimport { hasLifecycle, hasEmit } from \"../utils/type-guards\";\n\n/**\n * Configuration for gestures feature\n */\nexport interface GesturesFeatureConfig extends GestureConfig {\n /**\n * Whether to enable gesture recognition immediately\n * @default true\n */\n enableGestures?: boolean;\n\n /**\n * Initial gesture event handlers\n */\n gestureHandlers?: Record<string, GestureHandler>;\n\n [key: string]: any;\n}\n\n/**\n * Component with gesture recognition capabilities\n */\nexport interface GesturesComponent extends BaseComponent {\n /**\n * Gesture manager instance\n */\n gestures: GestureManager;\n\n /**\n * Add a gesture event handler\n * @param eventType - Type of gesture event\n * @param handler - Event handler function\n * @returns GesturesComponent for chaining\n */\n onGesture: (eventType: string, handler: GestureHandler) => GesturesComponent;\n\n /**\n * Remove a gesture event handler\n * @param eventType - Type of gesture event\n * @param handler - Event handler function\n * @returns GesturesComponent for chaining\n */\n offGesture: (eventType: string, handler: GestureHandler) => GesturesComponent;\n\n /**\n * Check if a gesture type is supported on the current device\n * @param gestureType - Type of gesture to check\n * @returns Whether the gesture is supported\n */\n isGestureSupported: (gestureType: string) => boolean;\n\n /**\n * Enable gesture recognition\n * @returns GesturesComponent for chaining\n */\n enableGestures: () => GesturesComponent;\n\n /**\n * Disable gesture recognition\n * @returns GesturesComponent for chaining\n */\n disableGestures: () => GesturesComponent;\n}\n\n/**\n * Adds gesture recognition capabilities to a component.\n * This is a comprehensive gesture feature that adds support for all gesture types.\n * For more lightweight, specific gestures, use the individual gesture features.\n *\n * @param config - Configuration object containing gesture settings\n * @returns Function that enhances a component with gesture capabilities\n *\n * @example\n * ```ts\n * // Add gesture recognition to a component\n * const component = pipe(\n * createBase,\n * withElement(...),\n * withGestures({\n * swipeThreshold: 50,\n * gestureHandlers: {\n * 'tap': (e) => handleTap(e),\n * 'swipeleft': (e) => navigateForward(e),\n * 'swiperight': (e) => navigateBack(e)\n * }\n * })\n * )(config);\n * ```\n */\nexport const withGestures =\n (config: GesturesFeatureConfig = {}) =>\n <C extends ElementComponent>(component: C): C & GesturesComponent => {\n if (!component.element) {\n console.warn(\"Cannot add gesture recognition: missing element\");\n return component as C & GesturesComponent;\n }\n\n // Default configuration\n const {\n enableGestures = true,\n gestureHandlers = {},\n ...gestureConfig\n } = config;\n\n // Create gesture manager\n const gestureManager = createGestureManager(\n component.element,\n gestureConfig\n );\n\n // Add initial gesture handlers\n Object.entries(gestureHandlers).forEach(([eventType, handler]) => {\n gestureManager.on(eventType, handler);\n });\n\n // Enable/disable based on config\n if (!enableGestures) {\n gestureManager.disable();\n }\n\n // Connect with existing event system if available\n if (hasEmit(component)) {\n // Forward gesture events to the component's event system\n const forwardGestureEvents = (event: AnyGestureEvent) => {\n component.emit(event.type, event);\n };\n\n // Register forwarder for common gesture types\n [\n \"tap\",\n \"swipe\",\n \"swipeleft\",\n \"swiperight\",\n \"swipeup\",\n \"swipedown\",\n \"longpress\",\n \"pinch\",\n \"rotate\",\n \"pan\",\n ].forEach((type) => {\n gestureManager.on(type, forwardGestureEvents);\n });\n }\n\n // Handle lifecycle integration\n if (hasLifecycle(component)) {\n const originalDestroy = component.lifecycle.destroy;\n\n component.lifecycle.destroy = () => {\n // Clean up gesture manager\n gestureManager.destroy();\n\n // Call original destroy method\n originalDestroy.call(component.lifecycle);\n };\n }\n\n // Create enhanced component\n return {\n ...component,\n gestures: gestureManager,\n\n /**\n * Add a gesture event handler\n * @param eventType - Type of gesture event\n * @param handler - Event handler function\n * @returns GesturesComponent for chaining\n */\n onGesture(eventType: string, handler: GestureHandler) {\n gestureManager.on(eventType, handler);\n return this;\n },\n\n /**\n * Remove a gesture event handler\n * @param eventType - Type of gesture event\n * @param handler - Event handler function\n * @returns GesturesComponent for chaining\n */\n offGesture(eventType: string, handler: GestureHandler) {\n gestureManager.off(eventType, handler);\n return this;\n },\n\n /**\n * Check if a gesture type is supported on the current device\n * @param gestureType - Type of gesture to check\n * @returns Whether the gesture is supported\n */\n isGestureSupported(gestureType: string) {\n return gestureManager.isSupported(gestureType);\n },\n\n /**\n * Enable gesture recognition\n * @returns GesturesComponent for chaining\n */\n enableGestures() {\n gestureManager.enable();\n return this;\n },\n\n /**\n * Disable gesture recognition\n * @returns GesturesComponent for chaining\n */\n disableGestures() {\n gestureManager.disable();\n return this;\n },\n };\n };\n",
|
|
45
35
|
"// src/core/compose/features/disabled.ts\n\nimport { BaseComponent, ElementComponent } from '../component';\n\n// Interface for components with input that can be disabled\ninterface ComponentWithInput extends ElementComponent {\n input: HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement | HTMLButtonElement;\n}\n\n// Type guard to check if component has a disableable input\nfunction hasDisableableInput(component: any): component is ComponentWithInput {\n return 'input' in component && \n component.input instanceof HTMLElement &&\n ('disabled' in component.input);\n}\n\n/**\n * Configuration for disabled feature\n */\nexport interface DisabledConfig {\n disabled?: boolean;\n componentName?: string;\n [key: string]: any;\n}\n\n/**\n * Disabled state manager interface\n */\nexport interface DisabledManager {\n /**\n * Enables the component\n * @returns DisabledManager instance for chaining\n */\n enable(): DisabledManager;\n \n /**\n * Disables the component\n * @returns DisabledManager instance for chaining\n */\n disable(): DisabledManager;\n \n /**\n * Toggles the disabled state\n * @returns DisabledManager instance for chaining\n */\n toggle(): DisabledManager;\n \n /**\n * Checks if the component is disabled\n * @returns true if disabled\n */\n isDisabled(): boolean;\n}\n\n/**\n * Component with disabled state capabilities\n */\nexport interface DisabledComponent extends BaseComponent {\n disabled: DisabledManager;\n}\n\n/**\n * Adds disabled state management to a component\n * \n * @param config - Configuration object\n * @returns Function that enhances a component with disabled state management\n */\nexport const withDisabled = <T extends DisabledConfig>(config: T) => \n <C extends ElementComponent>(component: C): C & DisabledComponent => {\n // Get the disabled class based on component name\n const disabledClass = `${component.getClass(config.componentName || component.componentName || 'component')}--disabled`;\n\n // Directly implement disabled functionality\n const disabled: DisabledManager = {\n enable() {\n component.element.classList.remove(disabledClass);\n \n if (hasDisableableInput(component)) {\n component.input.disabled = false;\n component.input.removeAttribute('disabled');\n } else {\n // If component doesn't have an input, try to disable the main element\n // This only works if the element is a button, input, etc.\n const interactiveElement = component.element as HTMLButtonElement;\n if ('disabled' in interactiveElement) {\n interactiveElement.disabled = false;\n }\n component.element.removeAttribute('disabled');\n }\n \n return this;\n },\n\n disable() {\n component.element.classList.add(disabledClass);\n \n if (hasDisableableInput(component)) {\n component.input.disabled = true;\n component.input.setAttribute('disabled', 'true');\n } else {\n // If component doesn't have an input, try to disable the main element\n const interactiveElement = component.element as HTMLButtonElement;\n if ('disabled' in interactiveElement) {\n interactiveElement.disabled = true;\n }\n component.element.setAttribute('disabled', 'true');\n }\n \n return this;\n },\n\n toggle() {\n if (this.isDisabled()) {\n this.enable();\n } else {\n this.disable();\n }\n return this;\n },\n\n isDisabled() {\n if (hasDisableableInput(component)) {\n return component.input.disabled;\n }\n \n // Check if element itself is disabled\n const interactiveElement = component.element as HTMLButtonElement;\n return ('disabled' in interactiveElement) && interactiveElement.disabled;\n }\n };\n\n // Initialize disabled state if configured\n if (config.disabled) {\n // Use requestAnimationFrame to ensure DOM is ready\n requestAnimationFrame(() => {\n disabled.disable();\n });\n }\n\n return {\n ...component,\n disabled\n };\n };",
|
|
46
36
|
"// src/core/compose/features/lifecycle.ts\n\nimport { createEmitter, Emitter } from '../../state/emitter';\nimport { BaseComponent, ElementComponent } from '../component';\n\n/**\n * Component with events manager\n */\ninterface ComponentWithEvents extends ElementComponent {\n events: {\n destroy: () => void;\n [key: string]: any;\n };\n}\n\n/**\n * Component with text manager\n */\ninterface ComponentWithText extends ElementComponent {\n text: {\n getElement: () => HTMLElement | null;\n [key: string]: any;\n };\n}\n\n/**\n * Component with icon manager\n */\ninterface ComponentWithIcon extends ElementComponent {\n icon: {\n getElement: () => HTMLElement | null;\n [key: string]: any;\n };\n}\n\n/**\n * Type guards for component managers\n */\nfunction hasEvents(component: any): component is ComponentWithEvents {\n return 'events' in component && \n component.events && \n typeof component.events === 'object' &&\n 'destroy' in component.events &&\n typeof component.events.destroy === 'function';\n}\n\nfunction hasText(component: any): component is ComponentWithText {\n return 'text' in component && \n component.text && \n typeof component.text === 'object' &&\n 'getElement' in component.text &&\n typeof component.text.getElement === 'function';\n}\n\nfunction hasIcon(component: any): component is ComponentWithIcon {\n return 'icon' in component && \n component.icon && \n typeof component.icon === 'object' &&\n 'getElement' in component.icon &&\n typeof component.icon.getElement === 'function';\n}\n\n/**\n * Component managers that can be passed to lifecycle\n */\nexport interface ComponentManagers {\n events?: {\n destroy: () => void;\n };\n text?: {\n getElement: () => HTMLElement | null;\n };\n icon?: {\n getElement: () => HTMLElement | null;\n };\n [key: string]: any;\n}\n\n/**\n * Lifecycle methods interface\n */\nexport interface Lifecycle {\n /**\n * Registers a handler for mount event\n * @param handler - Function to call when component is mounted\n * @returns Unsubscribe function\n */\n onMount: (handler: () => void) => () => void;\n \n /**\n * Registers a handler for unmount event\n * @param handler - Function to call when component is unmounted\n * @returns Unsubscribe function\n */\n onUnmount: (handler: () => void) => () => void;\n \n /**\n * Mounts the component\n */\n mount: () => void;\n \n /**\n * Unmounts the component\n */\n unmount: () => void;\n \n /**\n * Checks if component is mounted\n */\n isMounted: () => boolean;\n \n /**\n * Destroys the component\n */\n destroy: () => void;\n}\n\n/**\n * Component with lifecycle capabilities\n */\nexport interface LifecycleComponent extends BaseComponent {\n lifecycle: Lifecycle;\n}\n\n/**\n * Adds lifecycle management to a component\n * \n * @returns Function that enhances a component with lifecycle management\n */\nexport const withLifecycle = () => \n <T extends ElementComponent>(component: T): T & LifecycleComponent => {\n let mounted = false;\n const emitter: Emitter = createEmitter();\n \n const lifecycle: Lifecycle = {\n // Mount/Unmount state management\n onMount: (handler: () => void) => emitter.on('mount', handler),\n onUnmount: (handler: () => void) => emitter.on('unmount', handler),\n \n mount: () => {\n if (!mounted) {\n mounted = true;\n emitter.emit('mount');\n }\n },\n\n unmount: () => {\n if (mounted) {\n mounted = false;\n emitter.emit('unmount');\n emitter.clear();\n }\n },\n\n isMounted: () => mounted,\n\n // Cleanup and destruction\n destroy() {\n // First trigger unmount\n if (mounted) {\n this.unmount();\n }\n\n // Clean up all event listeners\n if (hasEvents(component)) {\n component.events.destroy();\n }\n \n // Clean up text element\n if (hasText(component)) {\n const textElement = component.text.getElement();\n if (textElement) {\n textElement.remove();\n }\n }\n \n // Clean up icon element\n if (hasIcon(component)) {\n const iconElement = component.icon.getElement();\n if (iconElement) {\n iconElement.remove();\n }\n }\n \n // Remove the main element\n if (component.element) {\n component.element.remove();\n }\n }\n };\n\n return {\n ...component,\n lifecycle\n };\n };",
|
|
47
|
-
"// src/core/compose/features/index.ts\n\n// Core features\nexport { withEvents } from './events';\nexport { withText } from './text';\nexport { withIcon } from './icon';\nexport { withVariant } from './variant';\nexport { withSize } from './size';\nexport { withPosition } from './position';\nexport { withRipple } from './ripple';\nexport { withInput } from './input';\nexport { withCheckable } from './checkable';\nexport { withStyle } from './style';\nexport { withTextInput } from './textinput';\nexport { withTextLabel } from './textlabel';\nexport { withTrack } from './track';\nexport { withEvents as withEnhancedEvents } from './withEvents';\nexport { withBadge } from './badge';\nexport { withThrottle } from './throttle';\nexport { withDebounce } from './debounce';\
|
|
48
|
-
"// src/core/compose/
|
|
49
|
-
"// src/core/compose/features/gestures/swipe.ts\n/**\n * @module core/compose/features/gestures\n * @description Adds swipe gesture recognition to components\n */\n\nimport { BaseComponent, ElementComponent } from \"../../component\";\nimport {\n SwipeEvent,\n SWIPE_DIRECTIONS,\n GestureHandler,\n} from \"../../../gestures\";\nimport { hasLifecycle, hasEmit } from \"../../utils/type-guards\";\n\n/**\n * Configuration for swipe gesture feature\n */\nexport interface SwipeGestureConfig {\n /**\n * Minimum distance (in pixels) to recognize a swipe\n * @default 30\n */\n swipeThreshold?: number;\n\n /**\n * Maximum time (in ms) in which a swipe must be completed\n * @default 300\n */\n swipeTimeThreshold?: number;\n\n /**\n * Whether to prevent default behaviors on touch events\n * @default true\n */\n preventDefault?: boolean;\n\n /**\n * Handler for any swipe direction\n */\n onSwipe?: GestureHandler;\n\n /**\n * Handler specifically for left swipes\n */\n onSwipeLeft?: GestureHandler;\n\n /**\n * Handler specifically for right swipes\n */\n onSwipeRight?: GestureHandler;\n\n /**\n * Handler specifically for up swipes\n */\n onSwipeUp?: GestureHandler;\n\n /**\n * Handler specifically for down swipes\n */\n onSwipeDown?: GestureHandler;\n\n /**\n * Whether to enable swipe recognition immediately\n * @default true\n */\n enabled?: boolean;\n\n [key: string]: any;\n}\n\n/**\n * Component with swipe gesture recognition capabilities\n */\nexport interface SwipeGestureComponent extends BaseComponent {\n /**\n * Add a handler for any swipe direction\n * @param handler - Event handler function\n * @returns Component for chaining\n */\n onSwipe: (handler: (event: SwipeEvent) => void) => SwipeGestureComponent;\n\n /**\n * Add a handler specifically for left swipes\n * @param handler - Event handler function\n * @returns Component for chaining\n */\n onSwipeLeft: (handler: (event: SwipeEvent) => void) => SwipeGestureComponent;\n\n /**\n * Add a handler specifically for right swipes\n * @param handler - Event handler function\n * @returns Component for chaining\n */\n onSwipeRight: (handler: (event: SwipeEvent) => void) => SwipeGestureComponent;\n\n /**\n * Add a handler specifically for up swipes\n * @param handler - Event handler function\n * @returns Component for chaining\n */\n onSwipeUp: (handler: (event: SwipeEvent) => void) => SwipeGestureComponent;\n\n /**\n * Add a handler specifically for down swipes\n * @param handler - Event handler function\n * @returns Component for chaining\n */\n onSwipeDown: (handler: (event: SwipeEvent) => void) => SwipeGestureComponent;\n\n /**\n * Remove a swipe event handler for any direction\n * @param handler - Event handler function\n * @returns Component for chaining\n */\n offSwipe: (handler: (event: SwipeEvent) => void) => SwipeGestureComponent;\n\n /**\n * Remove a left swipe event handler\n * @param handler - Event handler function\n * @returns Component for chaining\n */\n offSwipeLeft: (handler: (event: SwipeEvent) => void) => SwipeGestureComponent;\n\n /**\n * Remove a right swipe event handler\n * @param handler - Event handler function\n * @returns Component for chaining\n */\n offSwipeRight: (\n handler: (event: SwipeEvent) => void\n ) => SwipeGestureComponent;\n\n /**\n * Remove an up swipe event handler\n * @param handler - Event handler function\n * @returns Component for chaining\n */\n offSwipeUp: (handler: (event: SwipeEvent) => void) => SwipeGestureComponent;\n\n /**\n * Remove a down swipe event handler\n * @param handler - Event handler function\n * @returns Component for chaining\n */\n offSwipeDown: (handler: (event: SwipeEvent) => void) => SwipeGestureComponent;\n\n /**\n * Enable swipe recognition\n * @returns Component for chaining\n */\n enableSwipe: () => SwipeGestureComponent;\n\n /**\n * Disable swipe recognition\n * @returns Component for chaining\n */\n disableSwipe: () => SwipeGestureComponent;\n}\n\n/**\n * Determine swipe direction based on delta X and Y\n *\n * @param deltaX - Distance moved in X direction\n * @param deltaY - Distance moved in Y direction\n * @returns Direction of the swipe\n */\nfunction getSwipeDirection(deltaX: number, deltaY: number): SWIPE_DIRECTIONS {\n if (Math.abs(deltaX) > Math.abs(deltaY)) {\n return deltaX > 0 ? SWIPE_DIRECTIONS.RIGHT : SWIPE_DIRECTIONS.LEFT;\n }\n return deltaY > 0 ? SWIPE_DIRECTIONS.DOWN : SWIPE_DIRECTIONS.UP;\n}\n\n/**\n * Adds swipe gesture recognition to a component.\n * This is a lightweight alternative to the full gesture system,\n * focused only on swipe detection.\n *\n * @param config - Configuration object containing swipe settings\n * @returns Function that enhances a component with swipe capabilities\n *\n * @example\n * ```ts\n * // Add swipe gesture recognition to a component\n * const component = pipe(\n * createBase,\n * withElement(...),\n * withSwipeGesture({\n * onSwipeLeft: () => showNextPage(),\n * onSwipeRight: () => showPreviousPage()\n * })\n * )(config);\n * ```\n */\nexport const withSwipeGesture =\n (config: SwipeGestureConfig = {}) =>\n <C extends ElementComponent>(component: C): C & SwipeGestureComponent => {\n if (!component.element) {\n console.warn(\"Cannot add swipe gesture recognition: missing element\");\n return component as C & SwipeGestureComponent;\n }\n\n // Default configuration\n const {\n swipeThreshold = 30,\n swipeTimeThreshold = 300,\n preventDefault = true,\n onSwipe,\n onSwipeLeft,\n onSwipeRight,\n onSwipeUp,\n onSwipeDown,\n enabled = true,\n } = config;\n\n // Event handlers storage by direction\n const handlers = {\n swipe: new Set<(event: SwipeEvent) => void>(),\n swipeleft: new Set<(event: SwipeEvent) => void>(),\n swiperight: new Set<(event: SwipeEvent) => void>(),\n swipeup: new Set<(event: SwipeEvent) => void>(),\n swipedown: new Set<(event: SwipeEvent) => void>(),\n };\n\n // Add initial handlers if provided\n if (onSwipe) handlers.swipe.add(onSwipe as (event: SwipeEvent) => void);\n if (onSwipeLeft)\n handlers.swipeleft.add(onSwipeLeft as (event: SwipeEvent) => void);\n if (onSwipeRight)\n handlers.swiperight.add(onSwipeRight as (event: SwipeEvent) => void);\n if (onSwipeUp)\n handlers.swipeup.add(onSwipeUp as (event: SwipeEvent) => void);\n if (onSwipeDown)\n handlers.swipedown.add(onSwipeDown as (event: SwipeEvent) => void);\n\n // Gesture state for tracking\n let startX = 0;\n let startY = 0;\n let active = false;\n let startTime = 0;\n let isEnabled = enabled;\n\n /**\n * Dispatch a swipe event to all registered handlers\n */\n const dispatchSwipe = (\n e: MouseEvent | TouchEvent,\n endX: number,\n endY: number\n ): void => {\n const deltaX = endX - startX;\n const deltaY = endY - startY;\n const distance = Math.sqrt(deltaX * deltaX + deltaY * deltaY);\n const endTime = Date.now();\n const duration = endTime - startTime;\n const velocity = distance / duration;\n const direction = getSwipeDirection(deltaX, deltaY);\n\n // Create the swipe event\n const swipeEvent: SwipeEvent = {\n type: \"swipe\",\n originalEvent: e,\n target: e.target!,\n startTime,\n endTime,\n duration,\n defaultPrevented: false,\n preventDefault: () => {\n swipeEvent.defaultPrevented = true;\n if (e.cancelable) {\n e.preventDefault();\n }\n },\n stopPropagation: () => {\n e.stopPropagation();\n },\n direction,\n deltaX,\n deltaY,\n distance,\n velocity,\n startX,\n startY,\n endX,\n endY,\n };\n\n // First trigger generic swipe handlers\n handlers.swipe.forEach((handler) => {\n try {\n handler(swipeEvent);\n } catch (error) {\n console.error(\"Error in swipe handler:\", error);\n }\n });\n\n // Then trigger direction-specific handlers\n const directionKey = `swipe${direction}` as keyof typeof handlers;\n handlers[directionKey].forEach((handler) => {\n try {\n handler({ ...swipeEvent, type: directionKey } as SwipeEvent);\n } catch (error) {\n console.error(`Error in ${directionKey} handler:`, error);\n }\n });\n\n // Forward to component's event system if available\n if (hasEmit(component)) {\n component.emit(\"swipe\", swipeEvent);\n component.emit(directionKey, swipeEvent);\n }\n\n // Apply preventDefault if configured\n if (preventDefault && !swipeEvent.defaultPrevented) {\n swipeEvent.preventDefault();\n }\n };\n\n /**\n * Handle touch/mouse start\n */\n const handleStart = (e: MouseEvent | TouchEvent): void => {\n if (!isEnabled) return;\n\n const touch = \"touches\" in e ? e.touches[0] : e;\n\n startX = touch.clientX;\n startY = touch.clientY;\n startTime = Date.now();\n active = true;\n };\n\n /**\n * Handle touch/mouse end\n */\n const handleEnd = (e: MouseEvent | TouchEvent): void => {\n if (!active || !isEnabled) return;\n\n const touch =\n \"changedTouches\" in e && e.changedTouches.length > 0\n ? e.changedTouches[0]\n : (e as MouseEvent);\n\n const endX = touch.clientX;\n const endY = touch.clientY;\n\n // Calculate swipe properties\n const deltaX = endX - startX;\n const deltaY = endY - startY;\n const distance = Math.sqrt(deltaX * deltaX + deltaY * deltaY);\n const duration = Date.now() - startTime;\n\n // Check if it's a swipe\n if (distance >= swipeThreshold && duration <= swipeTimeThreshold) {\n dispatchSwipe(e, endX, endY);\n }\n\n active = false;\n };\n\n /**\n * Handle touch/mouse cancel\n */\n const handleCancel = (): void => {\n active = false;\n };\n\n // Event listeners dictionary\n const eventListeners: Record<string, EventListener> = {\n mousedown: handleStart as EventListener,\n mouseup: handleEnd as EventListener,\n mouseleave: handleCancel as EventListener,\n touchstart: handleStart as EventListener,\n touchend: handleEnd as EventListener,\n touchcancel: handleCancel as EventListener,\n };\n\n /**\n * Add event listeners to element\n */\n const setupEventListeners = (): void => {\n Object.entries(eventListeners).forEach(([event, listener]) => {\n component.element.addEventListener(event, listener, {\n passive: !preventDefault,\n });\n });\n };\n\n /**\n * Remove event listeners from element\n */\n const removeEventListeners = (): void => {\n Object.entries(eventListeners).forEach(([event, listener]) => {\n component.element.removeEventListener(event, listener);\n });\n };\n\n // Setup listeners if initially enabled\n if (isEnabled) {\n setupEventListeners();\n }\n\n // Handle lifecycle integration\n if (hasLifecycle(component)) {\n const originalDestroy = component.lifecycle.destroy;\n\n component.lifecycle.destroy = () => {\n // Clean up event listeners\n removeEventListeners();\n\n // Clear handlers\n Object.values(handlers).forEach((handlerSet) => handlerSet.clear());\n\n // Call original destroy method\n originalDestroy.call(component.lifecycle);\n };\n }\n\n // Create enhanced component\n return {\n ...component,\n\n // Add handler methods\n onSwipe(handler: (event: SwipeEvent) => void) {\n handlers.swipe.add(handler);\n return this;\n },\n\n onSwipeLeft(handler: (event: SwipeEvent) => void) {\n handlers.swipeleft.add(handler);\n return this;\n },\n\n onSwipeRight(handler: (event: SwipeEvent) => void) {\n handlers.swiperight.add(handler);\n return this;\n },\n\n onSwipeUp(handler: (event: SwipeEvent) => void) {\n handlers.swipeup.add(handler);\n return this;\n },\n\n onSwipeDown(handler: (event: SwipeEvent) => void) {\n handlers.swipedown.add(handler);\n return this;\n },\n\n // Remove handler methods\n offSwipe(handler: (event: SwipeEvent) => void) {\n handlers.swipe.delete(handler);\n return this;\n },\n\n offSwipeLeft(handler: (event: SwipeEvent) => void) {\n handlers.swipeleft.delete(handler);\n return this;\n },\n\n offSwipeRight(handler: (event: SwipeEvent) => void) {\n handlers.swiperight.delete(handler);\n return this;\n },\n\n offSwipeUp(handler: (event: SwipeEvent) => void) {\n handlers.swipeup.delete(handler);\n return this;\n },\n\n offSwipeDown(handler: (event: SwipeEvent) => void) {\n handlers.swipedown.delete(handler);\n return this;\n },\n\n // Enable/disable methods\n enableSwipe() {\n if (!isEnabled) {\n isEnabled = true;\n setupEventListeners();\n }\n return this;\n },\n\n disableSwipe() {\n if (isEnabled) {\n isEnabled = false;\n removeEventListeners();\n }\n return this;\n },\n };\n };\n",
|
|
50
|
-
"// src/core/compose/features/gestures/longpress.ts\n/**\n * @module core/compose/features/gestures\n * @description Adds long press gesture recognition to components\n */\n\nimport { BaseComponent, ElementComponent } from \"../../component\";\nimport { LongPressEvent, GestureHandler } from \"../../../gestures\";\nimport { hasLifecycle, hasEmit } from \"../../utils/type-guards\";\n\n/**\n * Configuration for long press gesture feature\n */\nexport interface LongPressGestureConfig {\n /**\n * Time (in ms) to recognize a long press\n * @default 500\n */\n longPressTime?: number;\n\n /**\n * Distance threshold (in pixels) for movement that cancels long press\n * @default 10\n */\n moveThreshold?: number;\n\n /**\n * Whether to prevent default behaviors on touch events\n * @default true\n */\n preventDefault?: boolean;\n\n /**\n * Handler for long press gesture\n */\n onLongPress?: GestureHandler;\n\n /**\n * Whether to enable long press recognition immediately\n * @default true\n */\n enabled?: boolean;\n\n [key: string]: any;\n}\n\n/**\n * Component with long press gesture recognition capabilities\n */\nexport interface LongPressGestureComponent extends BaseComponent {\n /**\n * Add a long press event handler\n * @param handler - Event handler function\n * @returns Component for chaining\n */\n onLongPress: (\n handler: (event: LongPressEvent) => void\n ) => LongPressGestureComponent;\n\n /**\n * Remove a long press event handler\n * @param handler - Event handler function\n * @returns Component for chaining\n */\n offLongPress: (\n handler: (event: LongPressEvent) => void\n ) => LongPressGestureComponent;\n\n /**\n * Enable long press recognition\n * @returns Component for chaining\n */\n enableLongPress: () => LongPressGestureComponent;\n\n /**\n * Disable long press recognition\n * @returns Component for chaining\n */\n disableLongPress: () => LongPressGestureComponent;\n}\n\n/**\n * Adds long press gesture recognition to a component.\n * This is a lightweight alternative to the full gesture system,\n * focused only on long press detection.\n *\n * @param config - Configuration object containing long press settings\n * @returns Function that enhances a component with long press capabilities\n *\n * @example\n * ```ts\n * // Add long press gesture recognition to a component\n * const component = pipe(\n * createBase,\n * withElement(...),\n * withLongPressGesture({\n * longPressTime: 800,\n * onLongPress: (e) => showContextMenu(e.x, e.y)\n * })\n * )(config);\n * ```\n */\nexport const withLongPressGesture =\n (config: LongPressGestureConfig = {}) =>\n <C extends ElementComponent>(component: C): C & LongPressGestureComponent => {\n if (!component.element) {\n console.warn(\n \"Cannot add long press gesture recognition: missing element\"\n );\n return component as C & LongPressGestureComponent;\n }\n\n // Default configuration\n const {\n longPressTime = 500,\n moveThreshold = 10,\n preventDefault = true,\n onLongPress,\n enabled = true,\n } = config;\n\n // Event handlers storage\n const handlers: Set<(event: LongPressEvent) => void> = new Set();\n\n // If initial handler provided, add it\n if (onLongPress) {\n handlers.add(onLongPress as (event: LongPressEvent) => void);\n }\n\n // Gesture state for tracking\n let startX = 0;\n let startY = 0;\n let currentX = 0;\n let currentY = 0;\n let active = false;\n let startTime = 0;\n let longPressTimer: number | null = null;\n let isEnabled = enabled;\n\n /**\n * Dispatch a long press event to all handlers\n */\n const dispatchLongPress = (e: MouseEvent | TouchEvent): void => {\n // Create the long press event\n const longPressEvent: LongPressEvent = {\n type: \"longpress\",\n originalEvent: e,\n target: e.target!,\n startTime,\n endTime: Date.now(),\n duration: Date.now() - startTime,\n defaultPrevented: false,\n preventDefault: () => {\n longPressEvent.defaultPrevented = true;\n if (e.cancelable) {\n e.preventDefault();\n }\n },\n stopPropagation: () => {\n e.stopPropagation();\n },\n x: currentX,\n y: currentY,\n };\n\n // Call each handler\n handlers.forEach((handler) => {\n try {\n handler(longPressEvent);\n } catch (error) {\n console.error(\"Error in long press handler:\", error);\n }\n });\n\n // Forward to component's event system if available\n if (hasEmit(component)) {\n component.emit(\"longpress\", longPressEvent);\n }\n\n // Apply preventDefault if configured\n if (preventDefault && !longPressEvent.defaultPrevented) {\n longPressEvent.preventDefault();\n }\n };\n\n /**\n * Handle touch/mouse start\n */\n const handleStart = (e: MouseEvent | TouchEvent): void => {\n if (!isEnabled) return;\n\n const touch = \"touches\" in e ? e.touches[0] : e;\n\n startX = currentX = touch.clientX;\n startY = currentY = touch.clientY;\n startTime = Date.now();\n active = true;\n\n // Cancel any existing timer\n if (longPressTimer !== null) {\n window.clearTimeout(longPressTimer);\n }\n\n // Set up long press timer\n longPressTimer = window.setTimeout(() => {\n if (active) {\n // Check if movement was within threshold\n const deltaX = currentX - startX;\n const deltaY = currentY - startY;\n const distance = Math.sqrt(deltaX * deltaX + deltaY * deltaY);\n\n if (distance < moveThreshold) {\n dispatchLongPress(e);\n }\n }\n\n longPressTimer = null;\n }, longPressTime);\n };\n\n /**\n * Handle touch/mouse move\n */\n const handleMove = (e: MouseEvent | TouchEvent): void => {\n if (!active || !isEnabled) return;\n\n const touch = \"touches\" in e ? e.touches[0] : e;\n\n currentX = touch.clientX;\n currentY = touch.clientY;\n\n // Check if movement exceeds threshold\n const deltaX = currentX - startX;\n const deltaY = currentY - startY;\n const distance = Math.sqrt(deltaX * deltaX + deltaY * deltaY);\n\n if (distance > moveThreshold) {\n // Cancel long press if moved too much\n if (longPressTimer !== null) {\n window.clearTimeout(longPressTimer);\n longPressTimer = null;\n }\n }\n };\n\n /**\n * Handle touch/mouse end\n */\n const handleEnd = (): void => {\n if (longPressTimer !== null) {\n window.clearTimeout(longPressTimer);\n longPressTimer = null;\n }\n\n active = false;\n };\n\n /**\n * Handle touch/mouse cancel\n */\n const handleCancel = (): void => {\n if (longPressTimer !== null) {\n window.clearTimeout(longPressTimer);\n longPressTimer = null;\n }\n\n active = false;\n };\n\n // Event listeners dictionary\n const eventListeners: Record<string, EventListener> = {\n mousedown: handleStart as EventListener,\n mousemove: handleMove as EventListener,\n mouseup: handleEnd as EventListener,\n mouseleave: handleCancel as EventListener,\n touchstart: handleStart as EventListener,\n touchmove: handleMove as EventListener,\n touchend: handleEnd as EventListener,\n touchcancel: handleCancel as EventListener,\n };\n\n /**\n * Add event listeners to element\n */\n const setupEventListeners = (): void => {\n Object.entries(eventListeners).forEach(([event, listener]) => {\n component.element.addEventListener(event, listener, {\n passive: !preventDefault,\n });\n });\n };\n\n /**\n * Remove event listeners from element\n */\n const removeEventListeners = (): void => {\n Object.entries(eventListeners).forEach(([event, listener]) => {\n component.element.removeEventListener(event, listener);\n });\n };\n\n // Setup listeners if initially enabled\n if (isEnabled) {\n setupEventListeners();\n }\n\n // Handle lifecycle integration\n if (hasLifecycle(component)) {\n const originalDestroy = component.lifecycle.destroy;\n\n component.lifecycle.destroy = () => {\n // Clean up event listeners\n removeEventListeners();\n\n // Clear any timers\n if (longPressTimer !== null) {\n window.clearTimeout(longPressTimer);\n longPressTimer = null;\n }\n\n // Clear handlers\n handlers.clear();\n\n // Call original destroy method\n originalDestroy.call(component.lifecycle);\n };\n }\n\n // Create enhanced component\n return {\n ...component,\n\n /**\n * Add a long press event handler\n * @param handler - Event handler function\n * @returns Component for chaining\n */\n onLongPress(handler: (event: LongPressEvent) => void) {\n handlers.add(handler);\n return this;\n },\n\n /**\n * Remove a long press event handler\n * @param handler - Event handler function\n * @returns Component for chaining\n */\n offLongPress(handler: (event: LongPressEvent) => void) {\n handlers.delete(handler);\n return this;\n },\n\n /**\n * Enable long press recognition\n * @returns Component for chaining\n */\n enableLongPress() {\n if (!isEnabled) {\n isEnabled = true;\n setupEventListeners();\n }\n return this;\n },\n\n /**\n * Disable long press recognition\n * @returns Component for chaining\n */\n disableLongPress() {\n if (isEnabled) {\n isEnabled = false;\n removeEventListeners();\n\n // Clear any timers\n if (longPressTimer !== null) {\n window.clearTimeout(longPressTimer);\n longPressTimer = null;\n }\n }\n return this;\n },\n };\n };\n",
|
|
51
|
-
"// src/core/compose/features/gestures/pan.ts\n/**\n * @module core/compose/features/gestures\n * @description Adds pan gesture recognition to components\n */\n\nimport { BaseComponent, ElementComponent } from \"../../component\";\nimport { PanEvent, GestureHandler } from \"../../../gestures\";\nimport { hasLifecycle, hasEmit } from \"../../utils/type-guards\";\n\n/**\n * Configuration for pan gesture feature\n */\nexport interface PanGestureConfig {\n /**\n * Whether to prevent default behaviors on touch events\n * @default true\n */\n preventDefault?: boolean;\n\n /**\n * Handler for pan start (first movement)\n */\n onPanStart?: GestureHandler;\n\n /**\n * Handler for pan move (continuous updates during pan)\n */\n onPan?: GestureHandler;\n\n /**\n * Handler for pan end (touch/mouse release)\n */\n onPanEnd?: GestureHandler;\n\n /**\n * Whether to enable pan recognition immediately\n * @default true\n */\n enabled?: boolean;\n\n [key: string]: any;\n}\n\n/**\n * Extend the PanEvent interface to support our custom event types\n */\ninterface ExtendedPanEvent extends Omit<PanEvent, \"type\"> {\n type: \"pan\" | \"panstart\" | \"panend\";\n}\n\n/**\n * Component with pan gesture recognition capabilities\n */\nexport interface PanGestureComponent extends BaseComponent {\n /**\n * Add a handler for pan start\n * @param handler - Event handler function\n * @returns Component for chaining\n */\n onPanStart: (handler: (event: PanEvent) => void) => PanGestureComponent;\n\n /**\n * Add a handler for pan move (continuous updates)\n * @param handler - Event handler function\n * @returns Component for chaining\n */\n onPan: (handler: (event: PanEvent) => void) => PanGestureComponent;\n\n /**\n * Add a handler for pan end\n * @param handler - Event handler function\n * @returns Component for chaining\n */\n onPanEnd: (handler: (event: PanEvent) => void) => PanGestureComponent;\n\n /**\n * Remove a pan start handler\n * @param handler - Event handler function\n * @returns Component for chaining\n */\n offPanStart: (handler: (event: PanEvent) => void) => PanGestureComponent;\n\n /**\n * Remove a pan move handler\n * @param handler - Event handler function\n * @returns Component for chaining\n */\n offPan: (handler: (event: PanEvent) => void) => PanGestureComponent;\n\n /**\n * Remove a pan end handler\n * @param handler - Event handler function\n * @returns Component for chaining\n */\n offPanEnd: (handler: (event: PanEvent) => void) => PanGestureComponent;\n\n /**\n * Enable pan recognition\n * @returns Component for chaining\n */\n enablePan: () => PanGestureComponent;\n\n /**\n * Disable pan recognition\n * @returns Component for chaining\n */\n disablePan: () => PanGestureComponent;\n}\n\n/**\n * Adds pan gesture recognition to a component.\n * This is a lightweight alternative to the full gesture system,\n * focused only on pan detection.\n *\n * @param config - Configuration object containing pan settings\n * @returns Function that enhances a component with pan capabilities\n *\n * @example\n * ```ts\n * // Add pan gesture recognition to a component\n * const component = pipe(\n * createBase,\n * withElement(...),\n * withPanGesture({\n * onPanStart: (e) => startDrag(e),\n * onPan: (e) => updateDragPosition(e),\n * onPanEnd: (e) => endDrag(e)\n * })\n * )(config);\n * ```\n */\nexport const withPanGesture =\n (config: PanGestureConfig = {}) =>\n <C extends ElementComponent>(component: C): C & PanGestureComponent => {\n if (!component.element) {\n console.warn(\"Cannot add pan gesture recognition: missing element\");\n return component as C & PanGestureComponent;\n }\n\n // Default configuration\n const {\n preventDefault = true,\n onPanStart,\n onPan,\n onPanEnd,\n enabled = true,\n } = config;\n\n // Event handlers storage by pan phase\n const handlers = {\n panstart: new Set<(event: PanEvent) => void>(),\n pan: new Set<(event: PanEvent) => void>(),\n panend: new Set<(event: PanEvent) => void>(),\n };\n\n // Add initial handlers if provided\n if (onPanStart)\n handlers.panstart.add(onPanStart as (event: PanEvent) => void);\n if (onPan) handlers.pan.add(onPan as (event: PanEvent) => void);\n if (onPanEnd) handlers.panend.add(onPanEnd as (event: PanEvent) => void);\n\n // Gesture state for tracking\n let startX = 0;\n let startY = 0;\n let lastX = 0;\n let lastY = 0;\n let currentX = 0;\n let currentY = 0;\n let active = false;\n let isPanning = false;\n let startTime = 0;\n let isEnabled = enabled;\n\n /**\n * Create a pan event with the current state\n */\n const createPanEvent = (\n e: MouseEvent | TouchEvent,\n type: \"panstart\" | \"pan\" | \"panend\"\n ): ExtendedPanEvent => {\n const event: ExtendedPanEvent = {\n type,\n originalEvent: e,\n target: e.target!,\n startTime,\n endTime: Date.now(),\n duration: Date.now() - startTime,\n defaultPrevented: false,\n preventDefault: () => {\n event.defaultPrevented = true;\n if (e.cancelable) {\n e.preventDefault();\n }\n },\n stopPropagation: () => {\n e.stopPropagation();\n },\n deltaX: currentX - startX,\n deltaY: currentY - startY,\n startX,\n startY,\n currentX,\n currentY,\n };\n return event;\n };\n\n /**\n * Dispatch a pan event to all registered handlers\n */\n const dispatchPan = (\n e: MouseEvent | TouchEvent,\n type: \"panstart\" | \"pan\" | \"panend\"\n ): void => {\n const extendedPanEvent = createPanEvent(e, type);\n\n // Call each handler for this phase\n handlers[type].forEach((handler) => {\n try {\n // Type assertion for the handler call - we're deliberately passing our extended event\n handler(extendedPanEvent as unknown as PanEvent);\n } catch (error) {\n console.error(`Error in ${type} handler:`, error);\n }\n });\n\n // Forward to component's event system if available\n if (hasEmit(component)) {\n component.emit(type, extendedPanEvent);\n }\n\n // Apply preventDefault if configured\n if (preventDefault && !extendedPanEvent.defaultPrevented) {\n extendedPanEvent.preventDefault();\n }\n };\n\n /**\n * Handle touch/mouse start\n */\n const handleStart = (e: MouseEvent | TouchEvent): void => {\n if (!isEnabled) return;\n\n const touch = \"touches\" in e ? e.touches[0] : e;\n\n startX = lastX = currentX = touch.clientX;\n startY = lastY = currentY = touch.clientY;\n startTime = Date.now();\n active = true;\n isPanning = false;\n };\n\n /**\n * Handle touch/mouse move\n */\n const handleMove = (e: MouseEvent | TouchEvent): void => {\n if (!active || !isEnabled) return;\n\n const touch = \"touches\" in e ? e.touches[0] : e;\n\n // Update position\n lastX = currentX;\n lastY = currentY;\n currentX = touch.clientX;\n currentY = touch.clientY;\n\n // Calculate movement delta\n const moveDeltaX = currentX - lastX;\n const moveDeltaY = currentY - lastY;\n const moveDelta = Math.sqrt(\n moveDeltaX * moveDeltaX + moveDeltaY * moveDeltaY\n );\n\n // Detect significant movement\n if (moveDelta > 0) {\n // If this is the first significant movement, trigger panstart\n if (!isPanning) {\n isPanning = true;\n dispatchPan(e, \"panstart\");\n }\n\n // Then trigger the continuous pan event\n dispatchPan(e, \"pan\");\n }\n };\n\n /**\n * Handle touch/mouse end\n */\n const handleEnd = (e: MouseEvent | TouchEvent): void => {\n if (!active || !isEnabled) return;\n\n // If we were panning, trigger the panend event\n if (isPanning) {\n dispatchPan(e, \"panend\");\n }\n\n active = false;\n isPanning = false;\n };\n\n /**\n * Handle touch/mouse cancel\n */\n const handleCancel = (e: MouseEvent | TouchEvent): void => {\n if (!active || !isEnabled) return;\n\n // If we were panning, trigger the panend event\n if (isPanning) {\n dispatchPan(e, \"panend\");\n }\n\n active = false;\n isPanning = false;\n };\n\n // Event listeners dictionary\n const eventListeners: Record<string, EventListener> = {\n mousedown: handleStart as EventListener,\n mousemove: handleMove as EventListener,\n mouseup: handleEnd as EventListener,\n mouseleave: handleCancel as EventListener,\n touchstart: handleStart as EventListener,\n touchmove: handleMove as EventListener,\n touchend: handleEnd as EventListener,\n touchcancel: handleCancel as EventListener,\n };\n\n /**\n * Add event listeners to element\n */\n const setupEventListeners = (): void => {\n Object.entries(eventListeners).forEach(([event, listener]) => {\n component.element.addEventListener(event, listener, {\n passive: !preventDefault,\n });\n });\n };\n\n /**\n * Remove event listeners from element\n */\n const removeEventListeners = (): void => {\n Object.entries(eventListeners).forEach(([event, listener]) => {\n component.element.removeEventListener(event, listener);\n });\n };\n\n // Setup listeners if initially enabled\n if (isEnabled) {\n setupEventListeners();\n }\n\n // Handle lifecycle integration\n if (hasLifecycle(component)) {\n const originalDestroy = component.lifecycle.destroy;\n\n component.lifecycle.destroy = () => {\n // Clean up event listeners\n removeEventListeners();\n\n // Clear handlers\n Object.values(handlers).forEach((handlerSet) => handlerSet.clear());\n\n // Call original destroy method\n originalDestroy.call(component.lifecycle);\n };\n }\n\n // Create enhanced component\n return {\n ...component,\n\n // Add handler methods\n onPanStart(handler: (event: PanEvent) => void) {\n handlers.panstart.add(handler);\n return this;\n },\n\n onPan(handler: (event: PanEvent) => void) {\n handlers.pan.add(handler);\n return this;\n },\n\n onPanEnd(handler: (event: PanEvent) => void) {\n handlers.panend.add(handler);\n return this;\n },\n\n // Remove handler methods\n offPanStart(handler: (event: PanEvent) => void) {\n handlers.panstart.delete(handler);\n return this;\n },\n\n offPan(handler: (event: PanEvent) => void) {\n handlers.pan.delete(handler);\n return this;\n },\n\n offPanEnd(handler: (event: PanEvent) => void) {\n handlers.panend.delete(handler);\n return this;\n },\n\n // Enable/disable methods\n enablePan() {\n if (!isEnabled) {\n isEnabled = true;\n setupEventListeners();\n }\n return this;\n },\n\n disablePan() {\n if (isEnabled) {\n isEnabled = false;\n removeEventListeners();\n }\n return this;\n },\n };\n };\n",
|
|
52
|
-
"// src/core/compose/index.ts\n/**\n * @module core/compose\n * @description Core composition utilities for creating and combining components\n */\n\nexport { pipe, compose, transform } from './pipe';\nexport { createComponent } from './base';\nexport { createBase, withElement } from './component';\nexport {\n withEvents,\n withIcon,\n withSize,\n withPosition,\n withText,\n withVariant,\n withDisabled,\n withLifecycle,\n withRipple,\n withInput,\n withCheckable,\n withStyle,\n withTextInput,\n withTextLabel,\n withTrack,\n withEnhancedEvents,\n withThrottle,\n withDebounce,\n withGestures\n} from './features';\n\n// Gesture features\nexport { withTapGesture } from './features/gestures/tap';\nexport { withSwipeGesture } from './features/gestures/swipe';\nexport { withLongPressGesture } from './features/gestures/longpress';\nexport { withPanGesture } from './features/gestures/pan';\n\n// Component feature interfaces\nexport type { Component } from './base';\nexport type { \n BaseComponent, \n ElementComponent, \n TouchState,\n WithElementOptions\n} from './component';\n\nexport type {\n EventComponent,\n TextComponent,\n IconComponent,\n LifecycleComponent,\n Lifecycle,\n DisabledComponent,\n DisabledManager,\n RippleComponent,\n InputComponent,\n CheckableComponent,\n CheckableManager,\n TextInputComponent,\n LabelComponent,\n TrackComponent,\n EnhancedEventComponent,\n ThrottleComponent,\n ThrottleConfig,\n DebounceComponent,\n DebounceConfig,\n GesturesComponent,\n GesturesFeatureConfig\n} from './features';\n\n// Type guards export\nexport { \n hasLifecycle, \n hasEmit \n} from './utils/type-guards';\nexport type { \n ComponentWithLifecycle, \n ComponentWithEmit \n} from './utils/type-guards';",
|
|
37
|
+
"// src/core/compose/features/index.ts\n\n// Core features\nexport { withEvents } from './events';\nexport { withText } from './text';\nexport { withIcon } from './icon';\nexport { withVariant } from './variant';\nexport { withSize } from './size';\nexport { withPosition } from './position';\nexport { withRipple } from './ripple';\nexport { withInput } from './input';\nexport { withCheckable } from './checkable';\nexport { withStyle } from './style';\nexport { withTextInput } from './textinput';\nexport { withTextLabel } from './textlabel';\nexport { withTrack } from './track';\nexport { withEvents as withEnhancedEvents } from './withEvents';\nexport { withBadge } from './badge';\nexport { withThrottle } from './throttle';\nexport { withDebounce } from './debounce';\n\n// State management features\nexport { withDisabled } from './disabled';\nexport { withLifecycle } from './lifecycle';\n\n// Re-export interfaces for better developer experience\nexport type { EventComponent } from './events';\nexport type { TextComponent } from './text';\nexport type { IconComponent } from './icon';\nexport type { LifecycleComponent, Lifecycle } from './lifecycle';\nexport type { DisabledComponent, DisabledManager } from './disabled';\nexport type { RippleComponent } from './ripple';\nexport type { InputComponent } from './input';\nexport type { CheckableComponent, CheckableManager } from './checkable';\nexport type { TextInputComponent } from './textinput';\nexport type { LabelComponent, LabelManager } from './textlabel';\nexport type { TrackComponent } from './track';\nexport type { EnhancedEventComponent } from './withEvents';\nexport type { BadgeComponent, BadgeConfig } from './badge';\nexport type { ThrottleComponent, ThrottleConfig } from './throttle';\nexport type { DebounceComponent, DebounceConfig } from './debounce';",
|
|
38
|
+
"// src/core/compose/index.ts\n/**\n * @module core/compose\n * @description Core composition utilities for creating and combining components\n */\n\nexport { pipe, compose, transform } from './pipe';\nexport { createComponent } from './base';\nexport { createBase, withElement } from './component';\nexport {\n withEvents,\n withIcon,\n withSize,\n withPosition,\n withText,\n withVariant,\n withDisabled,\n withLifecycle,\n withRipple,\n withInput,\n withCheckable,\n withStyle,\n withTextInput,\n withTextLabel,\n withTrack,\n withEnhancedEvents,\n withThrottle,\n withDebounce\n} from './features';\n\n// Component feature interfaces\nexport type { Component } from './base';\nexport type { \n BaseComponent, \n ElementComponent, \n TouchState,\n WithElementOptions\n} from './component';\n\nexport type {\n EventComponent,\n TextComponent,\n IconComponent,\n LifecycleComponent,\n Lifecycle,\n DisabledComponent,\n DisabledManager,\n RippleComponent,\n InputComponent,\n CheckableComponent,\n CheckableManager,\n TextInputComponent,\n LabelComponent,\n TrackComponent,\n EnhancedEventComponent,\n ThrottleComponent,\n ThrottleConfig,\n DebounceComponent,\n DebounceConfig,\n GesturesComponent,\n GesturesFeatureConfig\n} from './features';\n\n// Type guards export\nexport { \n hasLifecycle, \n hasEmit \n} from './utils/type-guards';\nexport type { \n ComponentWithLifecycle, \n ComponentWithEmit \n} from './utils/type-guards';",
|
|
53
39
|
"/**\n * Lightweight Global Configuration System for mtrl\n * \n * This system allows setting default configurations for all components\n * without adding complexity or performance overhead.\n */\n\nimport { ButtonConfig } from '../../components/button/types';\nimport { TextfieldConfig } from '../../components/textfield/types';\n// Import other component configs as needed\n\n/**\n * Component configuration map\n * Add new components here as they support global config\n * \n * For components not yet integrated, use Partial<any> as a placeholder\n */\nexport interface ComponentConfigMap {\n button?: Partial<ButtonConfig>;\n textfield?: Partial<TextfieldConfig>;\n checkbox?: Partial<any>;\n switch?: Partial<any>;\n slider?: Partial<any>;\n card?: Partial<any>;\n chip?: Partial<any>;\n dialog?: Partial<any>;\n // Add other components as needed\n}\n\n/**\n * Internal storage for component configurations\n * Using a simple object for maximum performance\n */\nconst configStore: ComponentConfigMap = {};\n\n/**\n * Sets global defaults for a specific component\n * \n * @param component - Component name\n * @param config - Default configuration to apply\n * \n * @example\n * ```typescript\n * // Set all buttons to be square by default\n * setComponentDefaults('button', {\n * shape: 'square',\n * size: 'm'\n * });\n * ```\n */\nexport function setComponentDefaults<K extends keyof ComponentConfigMap>(\n component: K,\n config: ComponentConfigMap[K]\n): void {\n configStore[component] = config;\n}\n\n/**\n * Gets global defaults for a component\n * \n * @param component - Component name\n * @returns Component defaults or empty object\n */\nexport function getComponentDefaults<K extends keyof ComponentConfigMap>(\n component: K\n): ComponentConfigMap[K] {\n return configStore[component] || {} as ComponentConfigMap[K];\n}\n\n/**\n * Sets global defaults for multiple components at once\n * \n * @param configs - Map of component names to their default configs\n * \n * @example\n * ```typescript\n * setGlobalDefaults({\n * button: { shape: 'square', size: 'm' },\n * textfield: { variant: 'outlined' }\n * });\n * ```\n */\nexport function setGlobalDefaults(configs: Partial<ComponentConfigMap>): void {\n Object.assign(configStore, configs);\n}\n\n/**\n * Clears all global defaults\n */\nexport function clearGlobalDefaults(): void {\n Object.keys(configStore).forEach(key => {\n delete configStore[key as keyof ComponentConfigMap];\n });\n} ",
|
|
54
40
|
"// src/core/config/component-config.ts\nimport { PREFIX } from '../config';\nimport { getComponentDefaults } from './global';\n\n/**\n * Base component configuration interface\n * Common configuration properties shared by all components\n */\nexport interface BaseComponentConfig {\n componentName?: string;\n prefix?: string;\n class?: string | string[]; // Support both string and array\n className?: string | string[]; // Alternative to class\n rawClass?: string | string[]; // Classes that should not be prefixed\n parent?: HTMLElement | string | null; // Parent element to append to (element or selector)\n [key: string]: any;\n}\n\n/**\n * Creates a base configuration for any component\n * Automatically merges global defaults if available\n * \n * @param {BaseComponentConfig} defaults - Default configuration for the component\n * @param {BaseComponentConfig} userConfig - User provided configuration\n * @param {string} componentName - The name of the component\n * @returns {BaseComponentConfig} Complete configuration with defaults applied\n * \n * @example\n * // In button/config.ts\n * export const createBaseConfig = (config: ButtonConfig = {}) => \n * createComponentConfig(defaultConfig, config, 'button');\n */\nexport const createComponentConfig = (\n defaults: BaseComponentConfig, \n userConfig: BaseComponentConfig = {}, \n componentName: string\n): BaseComponentConfig => {\n // Get global defaults for this component (if any)\n const globalDefaults = getComponentDefaults(componentName as any);\n \n // First check for className, fall back to class\n const userClassName = userConfig.className !== undefined ? userConfig.className : userConfig.class;\n const defaultClassName = defaults.className !== undefined ? defaults.className : defaults.class;\n \n // Create a new object with proper precedence:\n // 1. Component defaults (lowest priority)\n // 2. Global defaults (medium priority)\n // 3. User config (highest priority)\n const config = {\n ...defaults,\n ...globalDefaults,\n ...userConfig,\n // Force these values to ensure consistency\n componentName,\n prefix: PREFIX,\n // Use className as the canonical property, falling back to alternatives\n className: userClassName !== undefined ? userClassName : defaultClassName\n };\n\n // Remove potentially confusing duplicate class property\n if ('class' in config && config.className !== undefined) {\n delete config.class;\n }\n\n return config;\n};\n\n/**\n * Creates a class name with proper prefixing\n * \n * @param {string} componentName - The name of the component\n * @param {string} [element] - Optional element name for BEM notation\n * @param {string} [modifier] - Optional modifier name for BEM notation\n * @returns {string} Properly formatted class name\n * \n * @example\n * // Returns 'mtrl-button'\n * createClassName('button');\n * \n * // Returns 'mtrl-button__icon'\n * createClassName('button', 'icon');\n * \n * // Returns 'mtrl-button--primary'\n * createClassName('button', null, 'primary');\n * \n * // Returns 'mtrl-button__icon--small'\n * createClassName('button', 'icon', 'small');\n */\nexport const createClassName = (\n componentName: string,\n element?: string | null,\n modifier?: string | null\n): string => {\n let className = `${PREFIX}-${componentName}`;\n \n if (element) {\n className += `__${element}`;\n }\n \n if (modifier) {\n className += `--${modifier}`;\n }\n \n return className;\n};\n\n/**\n * Processes class names for an element, handling arrays, nulls and conditional classes\n * \n * @param {string | string[] | null} classNames - Class names to process\n * @returns {string} Space-separated class names as a string\n * \n * @example\n * // Returns 'mtrl-card mtrl-card--elevated custom-class'\n * processClassNames(['mtrl-card', 'mtrl-card--elevated', 'custom-class']);\n * \n * // Returns 'mtrl-card'\n * processClassNames(['mtrl-card', null, undefined]);\n */\nexport const processClassNames = (classNames: string | string[] | null): string => {\n if (!classNames) return '';\n \n if (typeof classNames === 'string') return classNames;\n \n return classNames\n .filter(Boolean) // Remove null, undefined, empty strings\n .join(' ');\n};\n\n/**\n * Creates a configuration object for withElement HOC\n * \n * @param {BaseComponentConfig} config - Component configuration\n * @param {Object} options - Element options\n * @returns {Object} Configuration object for withElement\n */\nexport const createElementConfig = (\n config: BaseComponentConfig,\n options: {\n tag: string;\n attributes?: Record<string, any>;\n className?: string | string[] | null;\n html?: string;\n text?: string;\n forwardEvents?: Record<string, boolean | ((component: any, event: Event) => boolean)>;\n interactive?: boolean;\n }\n) => {\n // Handle class and className from both sources\n const configClasses = config.className || config.class;\n const optionsClasses = options.className;\n \n // Combine all classes\n const combinedClassNames = [\n ...(Array.isArray(configClasses) ? configClasses : [configClasses]),\n ...(Array.isArray(optionsClasses) ? optionsClasses : [optionsClasses])\n ].filter(Boolean);\n \n // Set up element attributes\n const elementAttributes = options.attributes || {};\n \n return {\n tag: options.tag,\n componentName: config.componentName,\n attributes: elementAttributes,\n className: combinedClassNames.length > 0 ? combinedClassNames : undefined,\n rawClass: config.rawClass,\n html: options.html,\n text: options.text,\n forwardEvents: options.forwardEvents || {},\n interactive: options.interactive\n };\n}",
|
|
55
41
|
"// src/components/badge/constants.ts\n\n/**\n * Badge variants\n * - SMALL: Simple dot badge (6dp diameter)\n * - LARGE: Numbered badge (16dp height)\n */\nexport const BADGE_VARIANTS = {\n SMALL: 'small',\n LARGE: 'large'\n} as const;\n\n/**\n * Badge colors\n * ERROR is the default\n */\nexport const BADGE_COLORS = {\n ERROR: 'error', // Default\n PRIMARY: 'primary',\n SECONDARY: 'secondary',\n TERTIARY: 'tertiary',\n SUCCESS: 'success',\n WARNING: 'warning',\n INFO: 'info'\n} as const;\n\n/**\n * Badge positions relative to its container\n */\nexport const BADGE_POSITIONS = {\n TOP_RIGHT: 'top-right', // Default\n TOP_LEFT: 'top-left',\n BOTTOM_RIGHT: 'bottom-right',\n BOTTOM_LEFT: 'bottom-left'\n} as const;\n\n/**\n * Maximum character count for badge labels\n */\nexport const BADGE_MAX_CHARACTERS = 4;",
|
|
@@ -59,8 +45,8 @@
|
|
|
59
45
|
"// src/components/badge/badge.ts\nimport { pipe } from '../../core/compose';\nimport { createBase, withElement } from '../../core/compose/component';\nimport {\n withEvents,\n withLifecycle\n} from '../../core/compose/features';\nimport { \n withVisibility,\n withVariant,\n withColor, \n withPosition,\n withMax,\n withAttachment\n} from './features';\nimport { withAPI } from './api';\nimport { BadgeConfig, BadgeComponent } from './types';\nimport { createBaseConfig, getElementConfig, getApiConfig } from './config';\n\n/**\n * Creates a new Badge component following Material Design 3 guidelines.\n * \n * The Badge component displays a small circle or numerical indicator to \n * draw attention to items requiring user attention, like notifications \n * or counts. Badges can be attached to any element.\n * \n * @param {BadgeConfig} config - Badge configuration object\n * @returns {BadgeComponent} Badge component instance with methods for\n * managing the badge appearance, content, and visibility\n * \n * @throws {Error} Throws an error if badge creation fails\n * \n * @category Components\n * \n * @example\n * // Create a small dot badge (notification indicator)\n * const notificationBadge = createBadge({ \n * variant: 'small',\n * color: 'error',\n * target: document.querySelector('.icon-button')\n * });\n * \n * @example\n * // Create a large badge with a count (numbered indicator)\n * const countBadge = createBadge({\n * variant: 'large',\n * label: 5,\n * color: 'primary',\n * target: document.querySelector('.notification-icon')\n * });\n * \n * @example\n * // Create a badge with a maximum value\n * const messagesBadge = createBadge({\n * variant: 'large',\n * label: 1250,\n * max: 999, // Will display \"999+\"\n * color: 'info',\n * position: 'bottom-right'\n * });\n * \n * @example\n * // Control badge visibility programmatically\n * const toggleBadge = createBadge({\n * variant: 'small',\n * color: 'success',\n * target: document.querySelector('.toggle-button')\n * });\n * \n * // Toggle badge visibility\n * function toggleNotification() {\n * if (toggleBadge.isVisible()) {\n * toggleBadge.hide();\n * } else {\n * toggleBadge.show();\n * }\n * }\n */\nconst createBadge = (config: BadgeConfig = {}): BadgeComponent => {\n const baseConfig = createBaseConfig(config);\n\n try {\n // Compose the badge component from multiple feature enhancers\n const badge = pipe(\n createBase,\n withEvents(),\n withElement(getElementConfig(baseConfig)),\n withVariant(baseConfig),\n withColor(baseConfig),\n withPosition(baseConfig),\n withMax(baseConfig),\n withVisibility(),\n withAttachment(baseConfig),\n withLifecycle(),\n comp => withAPI(getApiConfig(comp))(comp)\n )(baseConfig);\n\n return badge;\n } catch (error) {\n console.error('Badge creation error:', error);\n throw new Error(`Failed to create badge: ${(error as Error).message}`);\n }\n};\n\nexport default createBadge;",
|
|
60
46
|
"// src/components/badge/index.ts\n\n/**\n * Badge component module\n * @module components/badge\n * @description A small element that communicates status, shows a count,\n * or highlights an element requiring attention.\n */\n\nexport { default } from './badge';\n\nexport type { \n BadgeConfig, \n BadgeComponent, \n BadgeVariant, \n BadgeColor, \n BadgePosition \n} from './types';",
|
|
61
47
|
"// src/core/dom/events.ts\n/**\n * @module core/dom\n * @description DOM manipulation utilities\n */\n\n/**\n * Event manager interface for handling DOM events\n */\nexport interface EventManager {\n /**\n * Add an event listener with options\n * @param event - Event name\n * @param handler - Event handler\n * @param options - addEventListener options\n * @returns EventManager instance for chaining\n */\n on: <T extends Event>(event: string, handler: (e: T) => void, options?: AddEventListenerOptions) => EventManager;\n \n /**\n * Remove an event listener\n * @param event - Event name\n * @param handler - Event handler\n * @returns EventManager instance for chaining\n */\n off: <T extends Event>(event: string, handler: (e: T) => void) => EventManager;\n \n /**\n * Temporarily disable all event listeners\n * @returns EventManager instance for chaining\n */\n pause: () => EventManager;\n \n /**\n * Re-enable all event listeners\n * @returns EventManager instance for chaining\n */\n resume: () => EventManager;\n \n /**\n * Remove all event listeners and clean up\n */\n destroy: () => void;\n \n /**\n * Get all active handlers\n * @returns Map of active handlers\n */\n getHandlers: () => Map<string, HandlerInfo>;\n \n /**\n * Check if a specific handler exists\n * @param event - Event name\n * @param handler - Event handler\n * @returns Whether handler exists\n */\n hasHandler: <T extends Event>(event: string, handler: (e: T) => void) => boolean;\n}\n\n/**\n * Handler information\n */\ninterface HandlerInfo {\n original: EventListener;\n enhanced: EventListener;\n event: string;\n options: AddEventListenerOptions;\n}\n\n/**\n * Creates an event manager to handle DOM events with enhanced functionality.\n * Provides a robust interface for managing event listeners with error handling,\n * cleanup, and lifecycle management.\n *\n * @param element - DOM element to attach events to\n * @returns Event manager interface\n */\nexport const createEventManager = (element: HTMLElement): EventManager => {\n // Store handlers with their metadata\n const handlers = new Map<string, HandlerInfo>();\n\n /**\n * Creates a unique handler identifier\n * @param event - Event name\n * @param handler - EventListener\n * @returns Unique identifier\n */\n const createHandlerId = (event: string, handler: EventListener): string =>\n `${event}_${handler.toString()}`;\n\n /**\n * Wraps an event handler with error boundary and logging\n * @param handler - Original event handler\n * @param event - Event name for error context\n * @returns Enhanced handler with error boundary\n */\n const enhanceHandler = (handler: EventListener, event: string): EventListener => (e: Event) => {\n try {\n handler(e);\n } catch (error) {\n console.error(`Error in ${event} handler:`, error);\n }\n };\n\n /**\n * Safely removes event listener\n * @param event - Event name\n * @param handler - Event handler\n */\n const safeRemoveListener = (event: string, handler: EventListener): void => {\n try {\n element.removeEventListener(event, handler);\n } catch (error) {\n console.warn(`Failed to remove ${event} listener:`, error);\n }\n };\n\n return {\n /**\n * Adds an event listener with options\n * @param event - Event name\n * @param handler - Event handler\n * @param options - addEventListener options\n * @returns EventManager instance for chaining\n */\n on<T extends Event>(event: string, handler: (e: T) => void, options: AddEventListenerOptions = {}): EventManager {\n const enhanced = enhanceHandler(handler as EventListener, event);\n const id = createHandlerId(event, handler as EventListener);\n\n handlers.set(id, {\n original: handler as EventListener,\n enhanced,\n event,\n options\n });\n\n element.addEventListener(event, enhanced, options);\n return this;\n },\n\n /**\n * Removes an event listener\n * @param event - Event name\n * @param handler - Event handler\n * @returns EventManager instance for chaining\n */\n off<T extends Event>(event: string, handler: (e: T) => void): EventManager {\n const id = createHandlerId(event, handler as EventListener);\n const stored = handlers.get(id);\n\n if (stored) {\n safeRemoveListener(event, stored.enhanced);\n handlers.delete(id);\n }\n return this;\n },\n\n /**\n * Temporarily disables all event listeners\n * @returns EventManager instance for chaining\n */\n pause(): EventManager {\n handlers.forEach(({ enhanced, event }) => {\n safeRemoveListener(event, enhanced);\n });\n return this;\n },\n\n /**\n * Re-enables all event listeners\n * @returns EventManager instance for chaining\n */\n resume(): EventManager {\n handlers.forEach(({ enhanced, event, options }) => {\n element.addEventListener(event, enhanced, options);\n });\n return this;\n },\n\n /**\n * Removes all event listeners and cleans up\n */\n destroy(): void {\n handlers.forEach(({ enhanced, event }) => {\n safeRemoveListener(event, enhanced);\n });\n handlers.clear();\n },\n\n /**\n * Gets all active handlers\n * @returns Map of active handlers\n */\n getHandlers(): Map<string, HandlerInfo> {\n return new Map(handlers);\n },\n\n /**\n * Checks if a specific handler exists\n * @param event - Event name\n * @param handler - Event handler\n * @returns Whether handler exists\n */\n hasHandler<T extends Event>(event: string, handler: (e: T) => void): boolean {\n const id = createHandlerId(event, handler as EventListener);\n return handlers.has(id);\n }\n };\n};",
|
|
62
|
-
"// src/core/dom/index.ts\n\nexport { createElement, createSVGElement } from
|
|
63
|
-
"// src/components/progress/constants.ts\n\n/**\n * Progress component variants\n */\nexport const PROGRESS_VARIANTS = {\n /** Standard horizontal progress bar */\n LINEAR: \"linear\",\n /** Circular spinner progress indicator */\n CIRCULAR: \"circular\",\n} as const;\n\n/**\n * Progress component shapes (linear only)\n */\nexport const PROGRESS_SHAPES = {\n /** Standard flat progress */\n FLAT: \"flat\",\n /** Wavy animated progress */\n WAVY: \"wavy\",\n} as const;\n\n/**\n * Progress component events\n */\nexport const PROGRESS_EVENTS = {\n /** Fired when progress value changes */\n CHANGE: \"change\",\n /** Fired when progress reaches 100% */\n COMPLETE: \"complete\",\n} as const;\n\n/**\n * Default configuration values\n */\nexport const PROGRESS_DEFAULTS = {\n /** Default progress variant */\n VARIANT: \"linear\",\n /** Initial progress value */\n VALUE: 0,\n /** Maximum progress value */\n MAX: 100,\n /** Buffer value for linear progress with buffer */\n BUFFER: 0,\n /** Default shape for linear indeterminate progress */\n SHAPE: \"flat\",\n /** Whether to show percentage label */\n SHOW_LABEL: false,\n /** Whether progress is indeterminate */\n INDETERMINATE: false,\n} as const;\n\n/**\n * CSS classes for progress elements\n */\nexport const PROGRESS_CLASSES = {\n /** Container element class */\n CONTAINER: \"progress\",\n /** Linear variant class */\n LINEAR: \"progress--linear\",\n /** Circular variant class */\n CIRCULAR: \"progress--circular\",\n /** Track element (unfilled part) class */\n TRACK: \"progress__track\",\n /** Indicator element (filled part) class */\n INDICATOR: \"progress__indicator\",\n /** Buffer element class */\n BUFFER: \"progress__buffer\",\n /** Label element class */\n LABEL: \"progress__label\",\n /** Indeterminate state class */\n INDETERMINATE: \"progress--indeterminate\",\n /** Disabled state class */\n DISABLED: \"progress--disabled\",\n /** Test state class */\n TEST: \"progress--test\",\n TRANSITION: \"progress--transition\",\n} as const;\n\n/**\n * Progress component measurements\n */\nexport const PROGRESS_MEASUREMENTS = {\n LINEAR: {\n MIN_HEIGHT: 4,\n GAP: 4,\n STOP_INDICATOR: 4,\n HEIGHT: 4, // Added default height\n },\n CIRCULAR: {\n SIZE: 48,\n GAP: 8,\n },\n COMMON: {\n // Added common measurements\n STROKE_WIDTH: 4,\n },\n} as const;\n\n/**\n * Thickness presets for progress component\n * These are the standard thickness options following Material Design 3\n */\nexport const PROGRESS_THICKNESS = {\n /** Thin stroke width (4px) - default */\n THIN: 4,\n /** Thick stroke width (8px) */\n THICK: 8,\n} as const;\n\n/**\n * Wave animation parameters for progress components\n */\nexport const PROGRESS_WAVE = {\n /** Linear progress wave parameters */\n LINEAR: {\n /** Base amplitude of the wave in pixels */\n AMPLITUDE:
|
|
48
|
+
"// src/core/dom/index.ts\n\nexport { createElement, createSVGElement } from \"./create\";\nexport type { CreateElementOptions } from \"./create\";\n\nexport {\n setAttributes,\n removeAttributes,\n batchAttributes,\n hasAttribute,\n getAttribute,\n} from \"./attributes\";\nexport {\n addClass,\n removeClass,\n toggleClass,\n hasClass,\n normalizeClasses,\n} from \"./classes\";\n\nexport { createEventManager } from \"./events\";\nexport type { EventManager } from \"./events\";\n",
|
|
49
|
+
"// src/components/progress/constants.ts\n\n/**\n * Progress component variants\n */\nexport const PROGRESS_VARIANTS = {\n /** Standard horizontal progress bar */\n LINEAR: \"linear\",\n /** Circular spinner progress indicator */\n CIRCULAR: \"circular\",\n} as const;\n\n/**\n * Progress component shapes (linear only)\n */\nexport const PROGRESS_SHAPES = {\n /** Standard flat progress */\n FLAT: \"flat\",\n /** Wavy animated progress */\n WAVY: \"wavy\",\n} as const;\n\n/**\n * Progress component events\n */\nexport const PROGRESS_EVENTS = {\n /** Fired when progress value changes */\n CHANGE: \"change\",\n /** Fired when progress reaches 100% */\n COMPLETE: \"complete\",\n} as const;\n\n/**\n * Default configuration values\n */\nexport const PROGRESS_DEFAULTS = {\n /** Default progress variant */\n VARIANT: \"linear\",\n /** Initial progress value */\n VALUE: 0,\n /** Maximum progress value */\n MAX: 100,\n /** Buffer value for linear progress with buffer */\n BUFFER: 0,\n /** Default shape for linear indeterminate progress */\n SHAPE: \"flat\",\n /** Whether to show percentage label */\n SHOW_LABEL: false,\n /** Whether progress is indeterminate */\n INDETERMINATE: false,\n} as const;\n\n/**\n * CSS classes for progress elements\n */\nexport const PROGRESS_CLASSES = {\n /** Container element class */\n CONTAINER: \"progress\",\n /** Linear variant class */\n LINEAR: \"progress--linear\",\n /** Circular variant class */\n CIRCULAR: \"progress--circular\",\n /** Track element (unfilled part) class */\n TRACK: \"progress__track\",\n /** Indicator element (filled part) class */\n INDICATOR: \"progress__indicator\",\n /** Buffer element class */\n BUFFER: \"progress__buffer\",\n /** Label element class */\n LABEL: \"progress__label\",\n /** Indeterminate state class */\n INDETERMINATE: \"progress--indeterminate\",\n /** Disabled state class */\n DISABLED: \"progress--disabled\",\n /** Test state class */\n TEST: \"progress--test\",\n TRANSITION: \"progress--transition\",\n} as const;\n\n/**\n * Progress component measurements\n */\nexport const PROGRESS_MEASUREMENTS = {\n LINEAR: {\n MIN_HEIGHT: 4,\n GAP: 4,\n STOP_INDICATOR: 4,\n HEIGHT: 4, // Added default height\n },\n CIRCULAR: {\n SIZE: 48,\n GAP: 8,\n },\n COMMON: {\n // Added common measurements\n STROKE_WIDTH: 4,\n },\n} as const;\n\n/**\n * Thickness presets for progress component\n * These are the standard thickness options following Material Design 3\n */\nexport const PROGRESS_THICKNESS = {\n /** Thin stroke width (4px) - default */\n THIN: 4,\n /** Thick stroke width (8px) */\n THICK: 8,\n} as const;\n\n/**\n * Wave animation parameters for progress components\n */\nexport const PROGRESS_WAVE = {\n /** Linear progress wave parameters */\n LINEAR: {\n /** Base amplitude of the wave in pixels */\n AMPLITUDE: 4,\n /** Speed of wave animation in waves per second (Hz) */\n SPEED: 1,\n /** Number of complete waves per 100 pixels */\n FREQUENCY: 2,\n /** Number of complete waves per 100 pixels for indeterminate */\n INDETERMINATE_FREQUENCY: 4,\n /** Amplitude for indeterminate animation */\n INDETERMINATE_AMPLITUDE: 2,\n /** Wave shape power (lower = rounder peaks, higher = sharper) */\n POWER: 0.8,\n /** Percentage at which wave amplitude reaches full strength from start */\n START_TRANSITION_END: 0,\n /** Percentage at which wave amplitude begins to decrease near end */\n END_TRANSITION_START: 0.92,\n },\n /** Circular progress wave parameters */\n CIRCULAR: {\n /** Amplitude as percentage of radius (7 = 7%) */\n AMPLITUDE: 6,\n /** Amplitude as percentage of radius for indeterminate (4 = 4%) */\n INDETERMINATE_AMPLITUDE: 4,\n /** Speed of wave rotation in rotations per second (Hz), negative value means clockwise */\n SPEED: 1,\n /** Number of complete waves around the circle */\n FREQUENCY: 10,\n /** Number of complete waves for indeterminate animation */\n INDETERMINATE_FREQUENCY: 16,\n /** Wave shape power (lower = rounder peaks, higher = sharper) */\n POWER: 0.8,\n /** Percentage at which wave amplitude reaches full strength from start */\n START_TRANSITION_END: 0,\n /** Percentage at which wave amplitude begins to decrease near end */\n END_TRANSITION_START: 0.92,\n },\n} as const;\n",
|
|
64
50
|
"// src/core/utils/object.ts\n\n/**\n * Checks if a value is a plain object\n * @param value - The value to check\n * @returns true if the value is a plain object\n */\nexport const isObject = (value: unknown): value is Record<string, any> => {\n return Boolean(\n value &&\n typeof value === 'object' &&\n Object.getPrototypeOf(value) === Object.getPrototypeOf({})\n );\n};\n\n/**\n * Accesses a nested property of an object using a string path\n * @param obj - The object to traverse\n * @param path - The property path (e.g. 'user.address.street')\n * @returns The value at the specified path or undefined if not found\n */\nexport const byString = <T extends Record<string, any>, R = any>(obj: T, path: string): R | undefined => {\n // Convert indexes to properties\n const normalizedPath = path.replace(/\\[(\\w+)\\]/g, '.$1');\n // Strip a leading dot\n const cleanPath = normalizedPath.replace(/^\\./, '');\n const keys = cleanPath.split('.');\n \n let result: any = obj;\n \n for (let i = 0, n = keys.length; i < n; ++i) {\n const key = keys[i];\n if (key in result) {\n result = result[key];\n } else {\n return undefined;\n }\n }\n \n return result as R;\n};",
|
|
65
51
|
"/**\n * Result interface for background color lookup\n */\nexport interface BackgroundResult {\n /** The computed background color value */\n color: string;\n /** The element from which the color was obtained */\n element: HTMLElement | null;\n}\n\n/**\n * Gets the computed background color of an element or its ancestors.\n * Recursively traverses the DOM tree upward until it finds a non-transparent background.\n * Resolves CSS variables if used in background color.\n * \n * @param {HTMLElement} element - The starting element to check\n * @param {number} [maxDepth=20] - Maximum number of parent levels to check\n * @returns {BackgroundResult} Object containing the color and source element\n * \n * @example\n * // Get the inherited background color and its source element\n * const { color, element: sourceElement } = getInheritedBackground(myElement);\n * console.log(color); // 'rgb(255, 255, 255)' or '#1c2526' for dark mode\n * \n * // Observe the source element for changes\n * if (sourceElement) {\n * const observer = new MutationObserver(() => {\n * const { color } = getInheritedBackground(myElement);\n * myElement.style.backgroundColor = color;\n * });\n * \n * observer.observe(sourceElement, { attributes: true, attributeFilter: ['style', 'class'] });\n * }\n */\nexport const getInheritedBackground = (element: HTMLElement, maxDepth = 17): BackgroundResult => {\n // Safety checks\n if (!element || !(element instanceof HTMLElement)) {\n return { color: '', element: null };\n }\n\n // Prevent infinite loops\n let depth = 0;\n let currentElement: HTMLElement | null = element;\n\n while (currentElement && depth < maxDepth) {\n // Get computed style\n const computedStyle = window.getComputedStyle(currentElement);\n let bgColor = computedStyle.backgroundColor;\n\n // Resolve CSS variables\n if (bgColor.startsWith('var(')) {\n const varMatch = bgColor.match(/var\\((--[\\w-]+)\\)/);\n if (varMatch) {\n const varName = varMatch[1];\n bgColor = window.getComputedStyle(document.documentElement).getPropertyValue(varName).trim() || 'transparent';\n }\n }\n\n // Check if the background color is set and not transparent\n if (bgColor && \n bgColor !== 'transparent' && \n bgColor !== 'rgba(0, 0, 0, 0)' && \n bgColor !== 'rgba(0,0,0,0)') {\n return { color: bgColor, element: currentElement };\n }\n\n // Move up to parent element\n currentElement = currentElement.parentElement;\n depth++;\n }\n\n // Fall back to document body\n const documentBG = window.getComputedStyle(document.body).backgroundColor;\n if (documentBG !== 'transparent' && documentBG !== 'rgba(0, 0, 0, 0)') {\n return { color: documentBG, element: document.body };\n }\n\n // Default to white\n return { color: 'rgb(255, 255, 255)', element: null };\n};\n\n/**\n * For backwards compatibility\n * @deprecated Use getInheritedBackground instead\n */\nexport const getInheritedBG = (element: HTMLElement, maxDepth = 17): string => {\n return getInheritedBackground(element, maxDepth).color;\n};\n\nexport default getInheritedBackground;",
|
|
66
52
|
"import { PREFIX } from '../config';\n\n// Store callbacks for theme change notifications\ntype ThemeChangeCallback = () => void;\nconst themeChangeCallbacks = new Set<ThemeChangeCallback>();\n\n// Setup theme change observer\nlet themeObserver: MutationObserver | null = null;\n\n/**\n * Setup observer for theme changes on body element\n */\nconst setupThemeObserver = (): void => {\n if (themeObserver) return; // Already set up\n\n themeObserver = new MutationObserver((mutations) => {\n for (const mutation of mutations) {\n if (\n mutation.type === 'attributes' && \n (mutation.attributeName === 'data-theme' || mutation.attributeName === 'data-theme-mode')\n ) {\n // Notify all registered callbacks\n themeChangeCallbacks.forEach(callback => callback());\n break;\n }\n }\n });\n\n // Start observing body for theme changes\n themeObserver.observe(document.body, {\n attributes: true,\n attributeFilter: ['data-theme', 'data-theme-mode']\n });\n};\n\n/**\n * Register a callback to be notified of theme changes\n * @param callback Function to call when theme changes\n * @returns Function to unregister the callback\n */\nexport const onThemeChange = (callback: ThemeChangeCallback): (() => void) => {\n // Setup observer if not already done\n if (!themeObserver) {\n setupThemeObserver();\n }\n\n themeChangeCallbacks.add(callback);\n \n // Return function to unregister\n return () => {\n themeChangeCallbacks.delete(callback);\n };\n};\n\n/**\n * Gets a theme color from CSS variables, with optional alpha/opacity support.\n * The prefix is automatically added to the variable name.\n * Colors are retrieved from the active theme (defined on body element) if available,\n * falling back to the default theme (defined on :root) if not found.\n *\n * @param {string} varName - The CSS variable name without prefix (e.g. 'sys-color-primary' or 'sys-color-primary-rgb')\n * @param {object} [options] - Options for color retrieval\n * @param {number} [options.alpha] - Alpha value (0-1) for rgba output (only works with --*-rgb variables)\n * @param {string} [options.fallback] - Fallback color if variable is not found\n * @param {ThemeChangeCallback} [options.onThemeChange] - Optional callback for theme changes\n * @returns {string} The color value (hex, rgb, or rgba)\n *\n * @example\n * // Basic usage\n * getThemeColor('sys-color-primary') // '#006493' (from active theme)\n * \n * // With theme change notification\n * getThemeColor('sys-color-primary', {\n * onThemeChange: () => {\n * // Re-render or update component\n * component.update();\n * }\n * });\n */\nexport function getThemeColor(\n varName: string, \n options?: { \n alpha?: number, \n fallback?: string,\n onThemeChange?: ThemeChangeCallback \n }\n): string {\n const prefixedVarName = `--${PREFIX}-${varName}`;\n \n // Register theme change callback if provided\n if (options?.onThemeChange) {\n onThemeChange(options.onThemeChange);\n }\n \n // First try to get the color from the active theme (body element)\n const bodyStyles = getComputedStyle(document.body);\n let value = bodyStyles.getPropertyValue(prefixedVarName).trim();\n \n // If not found in active theme, fall back to default theme (:root)\n if (!value) {\n const rootStyles = getComputedStyle(document.documentElement);\n value = rootStyles.getPropertyValue(prefixedVarName).trim();\n }\n \n // If still not found, use fallback or return empty\n if (!value && options?.fallback) return options.fallback;\n if (!value) return '';\n\n // If alpha is requested and value is rgb (e.g. '103, 80, 164')\n if (typeof options?.alpha === 'number' && /\\d+,\\s*\\d+,\\s*\\d+/.test(value)) {\n return `rgba(${value}, ${options.alpha})`;\n }\n\n // If value is a hex color and alpha is requested, convert to rgba\n if (typeof options?.alpha === 'number' && /^#([\\da-f]{6}|[\\da-f]{3})$/i.test(value)) {\n const hex = value.replace('#', '');\n let r, g, b;\n if (hex.length === 3) {\n r = parseInt(hex[0] + hex[0], 16);\n g = parseInt(hex[1] + hex[1], 16);\n b = parseInt(hex[2] + hex[2], 16);\n } else {\n r = parseInt(hex.substring(0, 2), 16);\n g = parseInt(hex.substring(2, 4), 16);\n b = parseInt(hex.substring(4, 6), 16);\n }\n return `rgba(${r}, ${g}, ${b}, ${options.alpha})`;\n }\n\n return value;\n}\n\n// Cleanup observer when module is unloaded\nif (typeof window !== 'undefined') {\n window.addEventListener('unload', () => {\n if (themeObserver) {\n themeObserver.disconnect();\n themeObserver = null;\n }\n themeChangeCallbacks.clear();\n });\n} ",
|
|
@@ -78,33 +64,11 @@
|
|
|
78
64
|
"// src/core/state/store.ts\n\nimport { createEmitter, Emitter } from './emitter';\n\n/**\n * State store options\n */\nexport interface StoreOptions<T> {\n /**\n * Middleware functions that process state changes\n */\n middleware?: Array<(newState: T, oldState: T) => T>;\n}\n\n/**\n * State selector function type\n */\nexport type Selector<T, R> = (state: T) => R;\n\n/**\n * State computation function type for derived state\n */\nexport type Computation<T, R> = (state: T) => R;\n\n/**\n * State updater function type\n */\nexport type Updater<T> = (state: T) => T;\n\n/**\n * State store interface\n */\nexport interface Store<T> {\n /**\n * Gets current state including derived values\n * @returns Current state\n */\n getState: () => T;\n \n /**\n * Updates state\n * @param update - State update object or updater function\n */\n setState: (update: Partial<T> | Updater<T>) => void;\n \n /**\n * Subscribes to state changes\n * @param listener - Change listener\n * @returns Unsubscribe function\n */\n subscribe: (listener: (state: T, oldState: T) => void) => () => void;\n \n /**\n * Creates a derived state value\n * @param key - Derived state key\n * @param computation - Function to compute derived value\n * @returns Function to remove derived state\n */\n derive: <K extends string, R>(key: K, computation: Computation<T, R>) => () => void;\n \n /**\n * Selects a specific slice of state\n * @param selector - State selector function\n * @returns Selected state\n */\n select: <R>(selector: Selector<T, R>) => R;\n \n /**\n * Resets state to initial values\n */\n reset: () => void;\n}\n\n/**\n * Creates a state store with support for derived state and middleware\n * \n * @param initialState - Initial state object\n * @param options - Store options\n * @returns State store interface\n */\nexport const createStore = <T extends Record<string, any>>(\n initialState: T = {} as T, \n options: StoreOptions<T> = {}\n): Store<T> => {\n let state = { ...initialState };\n const emitter: Emitter = createEmitter();\n const derivedStates = new Map<string, Computation<T, any>>();\n const middleware = options.middleware || [];\n\n const notifyListeners = (newState: T, oldState: T): void => {\n emitter.emit('change', newState, oldState);\n };\n\n const applyMiddleware = (newState: T, oldState: T): T => {\n return middleware.reduce((state, fn) => fn(state, oldState), newState);\n };\n\n return {\n /**\n * Gets current state including derived values\n * @returns Current state\n */\n getState: (): T => {\n const derivedValues: Record<string, any> = {};\n derivedStates.forEach((compute, key) => {\n derivedValues[key] = compute(state);\n });\n return { ...state, ...derivedValues };\n },\n\n /**\n * Updates state\n * @param update - State update object or updater function\n */\n setState: (update: Partial<T> | Updater<T>): void => {\n const oldState = { ...state };\n const newState = typeof update === 'function' \n ? update(state)\n : { ...state, ...update };\n\n state = applyMiddleware(newState as T, oldState);\n notifyListeners(state, oldState);\n },\n\n /**\n * Subscribes to state changes\n * @param listener - Change listener\n * @returns Unsubscribe function\n */\n subscribe: (listener: (state: T, oldState: T) => void): (() => void) => \n emitter.on('change', listener),\n\n /**\n * Creates a derived state value\n * @param key - Derived state key\n * @param computation - Function to compute derived value\n * @returns Function to remove derived state\n */\n derive: <K extends string, R>(key: K, computation: Computation<T, R>): (() => void) => {\n derivedStates.set(key, computation);\n return () => {\n derivedStates.delete(key);\n };\n },\n\n /**\n * Selects a specific slice of state\n * @param selector - State selector function\n * @returns Selected state\n */\n select: <R>(selector: Selector<T, R>): R => selector(state),\n\n /**\n * Resets state to initial values\n */\n reset: (): void => {\n state = { ...initialState };\n notifyListeners(state, {} as T);\n }\n };\n};\n\n/**\n * Example middleware that logs state changes\n * \n * @param newState - New state after change\n * @param oldState - Previous state before change\n * @returns Processed state (unchanged in this middleware)\n */\nexport const loggingMiddleware = <T extends Record<string, any>>(newState: T, oldState: T): T => {\n console.log('State change:', { \n old: oldState, \n new: newState, \n diff: Object.keys(newState).reduce((acc, key) => {\n if (newState[key] !== oldState[key]) {\n acc[key] = { from: oldState[key], to: newState[key] };\n }\n return acc;\n }, {} as Record<string, { from: any; to: any }>)\n });\n return newState;\n};\n\n/**\n * Creates a derived state selector for filtering objects\n * \n * @param predicate - Filter predicate function\n * @returns Computation function for derived state\n */\nexport const deriveFiltered = <T>(predicate: (value: any, key: string) => boolean) => \n (state: Record<string, T>): Record<string, T> => \n Object.keys(state).reduce((acc, key) => {\n if (predicate(state[key], key)) {\n acc[key] = state[key];\n }\n return acc;\n }, {} as Record<string, T>);",
|
|
79
65
|
"// src/core/state/lifecycle.ts\n\nimport { createEmitter, Emitter } from './emitter';\n\n/**\n * Component managers that can be managed by the lifecycle\n */\nexport interface LifecycleManagers {\n events?: {\n destroy: () => void;\n };\n text?: {\n getElement: () => HTMLElement | null;\n };\n icon?: {\n getElement: () => HTMLElement | null;\n };\n [key: string]: any;\n}\n\n/**\n * Lifecycle manager interface\n */\nexport interface LifecycleManager {\n /**\n * Registers a handler for mount event\n * @param handler - Function to call when component is mounted\n * @returns Unsubscribe function\n */\n onMount: (handler: () => void) => () => void;\n \n /**\n * Registers a handler for unmount event\n * @param handler - Function to call when component is unmounted\n * @returns Unsubscribe function\n */\n onUnmount: (handler: () => void) => () => void;\n \n /**\n * Mounts the component\n */\n mount: () => void;\n \n /**\n * Unmounts the component\n */\n unmount: () => void;\n \n /**\n * Checks if component is mounted\n * @returns true if mounted\n */\n isMounted: () => boolean;\n \n /**\n * Destroys the component\n */\n destroy: () => void;\n}\n\n/**\n * Creates a lifecycle manager for a component\n * \n * @param element - Component's DOM element\n * @param managers - Optional component managers to integrate with lifecycle\n * @returns Lifecycle manager interface\n */\nexport const createLifecycle = (\n element: HTMLElement, \n managers: LifecycleManagers = {}\n): LifecycleManager => {\n let mounted = false;\n const emitter: Emitter = createEmitter();\n\n return {\n // Mount/Unmount state management\n onMount: (handler: () => void) => emitter.on('mount', handler),\n onUnmount: (handler: () => void) => emitter.on('unmount', handler),\n \n mount: () => {\n if (!mounted) {\n mounted = true;\n emitter.emit('mount');\n }\n },\n\n unmount: () => {\n if (mounted) {\n mounted = false;\n emitter.emit('unmount');\n emitter.clear();\n }\n },\n\n isMounted: () => mounted,\n\n // Cleanup and destruction\n destroy() {\n // First trigger unmount\n if (mounted) {\n this.unmount();\n }\n\n // Clean up all event listeners\n if (managers.events) {\n managers.events.destroy();\n }\n \n // Clean up text element\n if (managers.text) {\n const textElement = managers.text.getElement();\n if (textElement) {\n textElement.remove();\n }\n }\n \n // Clean up icon element\n if (managers.icon) {\n const iconElement = managers.icon.getElement();\n if (iconElement) {\n iconElement.remove();\n }\n }\n \n // Remove the main element\n if (element) {\n element.remove();\n }\n }\n };\n};",
|
|
80
66
|
"// src/core/state/disabled.ts\n\n/**\n * Disabled state manager interface\n */\nexport interface DisabledState {\n /**\n * Enables the element\n * @returns DisabledState instance for chaining\n */\n enable(): DisabledState;\n \n /**\n * Disables the element\n * @returns DisabledState instance for chaining\n */\n disable(): DisabledState;\n \n /**\n * Toggles the disabled state\n * @returns DisabledState instance for chaining\n */\n toggle(): DisabledState;\n \n /**\n * Checks if the element is disabled\n * @returns true if disabled\n */\n isDisabled(): boolean;\n}\n\n/**\n * Creates a controller for managing the disabled state of an element\n * \n * @param element - The element to control\n * @returns Disabled state controller\n */\nexport const createDisabled = (element: HTMLElement): DisabledState => {\n return {\n /**\n * Enables the element\n * @returns DisabledState instance for chaining\n */\n enable() {\n (element as HTMLButtonElement | HTMLInputElement).disabled = false;\n element.removeAttribute('disabled');\n return this;\n },\n\n /**\n * Disables the element\n * @returns DisabledState instance for chaining\n */\n disable() {\n (element as HTMLButtonElement | HTMLInputElement).disabled = true;\n element.setAttribute('disabled', 'true');\n return this;\n },\n\n /**\n * Toggles the disabled state\n * @returns DisabledState instance for chaining\n */\n toggle() {\n if ((element as HTMLButtonElement | HTMLInputElement).disabled) {\n this.enable();\n } else {\n this.disable();\n }\n return this;\n },\n\n /**\n * Checks if the element is disabled\n * @returns true if disabled\n */\n isDisabled() {\n return (element as HTMLButtonElement | HTMLInputElement).disabled === true;\n }\n };\n};",
|
|
81
|
-
"// src/core/layout/utils.ts (minimal fix)\n/**\n * @module core/layout\n * @description Utility functions for layout creation\n */\n\nimport { PREFIX } from \"../config\";\nimport { ComponentLike } from \"./types\";\nimport { normalizeClasses as normalizeClassesUtil } from \"../dom\";\n\n/**\n * Checks if a value is a component object (has an element property)\n *\n * @param value - Value to check\n * @returns True if the value is a component-like object\n */\nexport function isComponent(value: any): value is ComponentLike {\n return value && typeof value === \"object\" && \"element\" in value;\n}\n\n/**\n * Creates a document fragment for faster DOM operations\n *\n * @returns New DocumentFragment\n */\nexport function createFragment(): DocumentFragment {\n return document.createDocumentFragment();\n}\n\n/**\n * Normalizes class values into an array of strings\n */\nexport function normalizeClasses(...classes: (string | string[])[]): string[] {\n return normalizeClassesUtil(...classes);\n}\n\n// Constant for prefix with dash\nconst PREFIX_WITH_DASH = `${PREFIX}-`;\n\n/**\n * Processes className options to add prefix if needed\n *\n * @param options - Element options\n * @param skipPrefix - Whether to skip adding prefixes\n * @param useBEM - Whether to respect BEM naming conventions\n * @returns Updated options with prefixed classNames\n */\nexport function processClassNames(\n options: Record<string, any>,\n skipPrefix: boolean = false,\n useBEM: boolean = false\n): Record<string, any> {\n // Fast path - if no options or skipping prefix, return a new object\n if (!options || skipPrefix) return { ...options };\n\n // Avoid unnecessary clone if no class properties exist\n const hasClassProps = options.class || options.className || options.rawClass;\n if (!hasClassProps) return { ...options };\n\n // Create clone only once\n const processed = { ...options };\n\n // Unify class and className as aliases\n if (processed.className) {\n if (!processed.class) {\n // Simple transfer if only className exists\n processed.class = processed.className;\n } else {\n // Merge if both exist\n const classNames = normalizeClasses([\n processed.class,\n processed.className,\n ]);\n processed.class = classNames.join(\" \");\n }\n // Always remove className after processing\n delete processed.className;\n }\n\n // Process prefixed classes\n if (processed.class && !skipPrefix) {\n // Handle string format\n if (typeof processed.class === \"string\") {\n const classes = processed.class.split(/\\s+/).filter(Boolean);\n\n if (useBEM) {\n // Handle BEM notation with special prefixing rules\n processed.class = classes\n .map((cls) => {\n if (!cls || cls.startsWith(PREFIX_WITH_DASH)) return cls;\n\n if (cls.includes(\"__\")) {\n const [block, element] = cls.split(\"__\");\n return `${PREFIX_WITH_DASH}${block}__${element}`;\n } else if (cls.includes(\"--\")) {\n const [block, modifier] = cls.split(\"--\");\n return `${PREFIX_WITH_DASH}${block}--${modifier}`;\n }\n\n return `${PREFIX_WITH_DASH}${cls}`;\n })\n .join(\" \");\n } else {\n // Standard prefix handling\n processed.class = classes\n .map((cls) =>\n cls && !cls.startsWith(PREFIX_WITH_DASH)\n ? `${PREFIX_WITH_DASH}${cls}`\n : cls\n )\n .filter(Boolean)\n .join(\" \");\n }\n }\n // Handle array format\n else if (Array.isArray(processed.class)) {\n processed.class = processed.class\n .filter(Boolean)\n .map((cls) =>\n typeof cls === \"string\" && !cls.startsWith(PREFIX_WITH_DASH)\n ? `${PREFIX_WITH_DASH}${cls}`\n : cls\n )\n .join(\" \");\n }\n }\n\n return processed;\n}\n\n/**\n * Flattens a nested layout into a simple object with element and component references\n *\n * @param layout - Layout object\n * @returns Flattened layout with all elements and components\n */\nexport function flattenLayout(\n layout: Record<string, any>\n): Record<string, any> {\n const flattened: Record<string, any> = {};\n\n // Fast path - return empty object for empty layout\n if (!layout || typeof layout !== \"object\") return flattened;\n\n for (const key in layout) {\n const value = layout[key];\n\n // Only include components, elements, and non-functions\n if (\n value &&\n typeof value !== \"function\" &&\n (value instanceof HTMLElement ||\n (typeof SVGElement !== \"undefined\" && value instanceof SVGElement) ||\n isComponent(value))\n ) {\n flattened[key] = value;\n }\n }\n\n return flattened;\n}\n",
|
|
82
|
-
"// src/core/layout/result.ts\n/**\n * @module core/layout\n * @description Layout result creation and management\n */\n\nimport { LayoutResult } from './types';\nimport { isComponent, flattenLayout } from './utils';\n\n/**\n * Creates a result object with the layout and utility functions\n * \n * @param layout - The raw layout object\n * @returns Result object with layout and utility functions\n */\nexport function createLayoutResult(layout: Record<string, any>): LayoutResult {\n // Pre-compute flattened layout for better performance\n const flattenedComponents = flattenLayout(layout);\n \n // Create the result object with layout correctly exposed\n const result: LayoutResult = {\n // Raw layout object\n layout,\n \n // Root element reference for convenience\n element: layout.element,\n \n // Flattened component map\n component: flattenedComponents,\n\n /**\n * Gets a component by name\n * \n * @param name - Component name\n * @returns Component if found, null otherwise\n */\n get(name: string): any {\n return layout[name] ?? null;\n },\n \n /**\n * Gets all components in a flattened map\n * \n * @returns Object with all components\n */\n getAll(): Record<string, any> {\n return flattenedComponents;\n },\n \n /**\n * Destroys the layout, cleaning up all components\n */\n destroy(): void {\n // Handle root element\n const root = layout.element;\n if (root) {\n // Component with destroy method\n if (isComponent(root) && typeof root.destroy === 'function') {\n root.destroy();\n } \n // Component without destroy method\n else if (isComponent(root) && root.element?.parentNode) {\n root.element.parentNode.removeChild(root.element);\n }\n // Direct DOM element\n else if (root instanceof HTMLElement && root.parentNode) {\n root.parentNode.removeChild(root);\n }\n }\n \n // Clean up other components that have a destroy method\n for (const key in layout) {\n if (key === 'element') continue;\n \n const item = layout[key];\n if (isComponent(item) && typeof item.destroy === 'function') {\n item.destroy();\n }\n }\n }\n };\n \n return result;\n}",
|
|
83
|
-
"// src/core/layout/array.ts\n/**\n * @module core/layout\n * @description Processor for array-based layout schemas\n */\n\nimport { createElement } from \"../dom/create\";\nimport { LayoutResult, LayoutOptions } from \"./types\";\nimport { isComponent, createFragment, processClassNames } from \"./utils\";\nimport { createLayoutResult } from \"./result\";\nimport { createComponentInstance } from \"./processor\";\nimport { isObject } from \"../utils\";\n\n/**\n * Type for a component instance\n */\ntype ComponentInstance =\n | HTMLElement\n | { element: HTMLElement; [key: string]: unknown };\n\n/**\n * Interface for the layout object\n */\ninterface LayoutObject {\n element?: HTMLElement;\n components?: Array<[string, ComponentInstance]>;\n [key: string]: unknown;\n}\n\n/**\n * Type for schema items\n */\ntype SchemaItem = Function | string | Record<string, unknown> | SchemaItem[];\n\n/**\n * Processes an array-based layout definition\n *\n * @param schema - Array-based layout definition\n * @param parentElement - Optional parent element to attach layout to\n * @param level - Current recursion level\n * @param options - Layout creation options\n * @returns Layout result object\n */\nexport function processArraySchema(\n schema: SchemaItem[],\n parentElement: HTMLElement | null = null,\n level: number = 0,\n options: LayoutOptions = {}\n): LayoutResult {\n level++;\n const layout: LayoutObject = {};\n const components: Array<[string, ComponentInstance]> = [];\n const fragment = createFragment();\n let component = null;\n\n if (!Array.isArray(schema)) {\n console.error(\"Schema is not an array!\", parentElement, level, schema);\n return createLayoutResult(layout);\n }\n\n // Get default creator function from options or use createElement\n const defaultCreator = options.creator || createElement;\n\n for (let i = 0; i < schema.length; i++) {\n const item = schema[i];\n if (!item) continue;\n\n // Handle nested arrays recursively\n if (Array.isArray(item)) {\n const container = component || parentElement;\n // Use this function for recursion, not the external processSchema\n const result = processArraySchema(item, container, level, options);\n Object.assign(layout, result.layout);\n continue;\n }\n\n // Handle different item types\n let creator, name, itemOptions;\n\n // Case 1: Item is a function (component creator)\n if (typeof item === \"function\") {\n creator = item;\n\n // Check next items for name (string) and options (object)\n const nextItem = schema[i + 1];\n const afterNextItem = schema[i + 2];\n\n if (typeof nextItem === \"string\") {\n name = nextItem;\n i++; // Skip the name on next iteration\n\n // Check if options are provided after the name\n if (isObject(afterNextItem)) {\n itemOptions = afterNextItem;\n i++; // Skip the options on next iteration\n } else {\n itemOptions = {};\n }\n } else if (isObject(nextItem)) {\n // No name provided, just options\n itemOptions = nextItem;\n i++; // Skip the options on next iteration\n } else {\n // No name or options\n itemOptions = {};\n }\n }\n // Case 2: Item is a string (component name using default creator)\n else if (typeof item === \"string\") {\n creator = defaultCreator;\n name = item;\n\n // Check next item for options\n const nextItem = schema[i + 1];\n if (isObject(nextItem)) {\n itemOptions = nextItem;\n i++; // Skip the options on next iteration\n } else {\n itemOptions = {};\n }\n\n // Default to div if no tag is specified\n if (creator === createElement && !(\"tag\" in itemOptions)) {\n itemOptions.tag = \"div\";\n }\n }\n // Case 3: Item is an object (options for default creator with no name)\n else if (isObject(item)) {\n creator = defaultCreator;\n itemOptions = item;\n } else {\n // Skip unsupported item types\n console.warn(\"Skipping unsupported item type:\", item);\n continue;\n }\n\n // Check for additional options object after main options\n const maybeAdditionalOptions = schema[i + 1];\n if (\n isObject(maybeAdditionalOptions) &&\n !Array.isArray(maybeAdditionalOptions) &&\n typeof (maybeAdditionalOptions as Record<string, unknown>).prefix !==\n \"undefined\"\n ) {\n // Merge the additional options into main options\n Object.assign(itemOptions, maybeAdditionalOptions);\n i++; // Skip on next iteration\n }\n\n // Process options based on prefix setting\n const shouldApplyPrefix =\n // Use item-specific prefix setting if available\n \"prefix\" in itemOptions\n ? itemOptions.prefix\n : // Otherwise use global options prefix setting (default to true)\n options.prefix !== false;\n\n const processedOptions = shouldApplyPrefix\n ? processClassNames(itemOptions)\n : { ...itemOptions };\n\n // Add name to options if needed and not a DOM element tag\n if (\n name &&\n !(\"name\" in processedOptions) &&\n !(creator === createElement || creator.isElement)\n ) {\n processedOptions.name = name;\n }\n\n // Create and store component\n component = createComponentInstance(creator, processedOptions);\n const element = isComponent(component) ? component.element : component;\n\n if (level === 1) layout.element = element;\n if (name) {\n layout[name] = component;\n components.push([name, component]);\n }\n\n // Append to DOM\n if (component) {\n if (\"insert\" in component && typeof component.insert === \"function\") {\n component.insert(fragment);\n } else {\n fragment.appendChild(element);\n }\n\n if (parentElement) {\n component._container = parentElement;\n\n if (\n \"onInserted\" in component &&\n typeof component.onInserted === \"function\"\n ) {\n component.onInserted(parentElement);\n }\n }\n }\n }\n\n // Append fragment to parent in a single operation\n if (parentElement && fragment.hasChildNodes()) {\n const wrapper = isComponent(parentElement)\n ? parentElement.element\n : parentElement;\n wrapper.appendChild(fragment);\n }\n\n layout.components = components;\n return createLayoutResult(layout);\n}\n",
|
|
84
|
-
"// src/core/layout/object.ts\n/**\n * @module core/layout\n * @description Processor for object-based layout schemas\n */\n\nimport { createElement } from \"../dom/create\";\nimport { Schema, LayoutResult, LayoutOptions } from \"./types\";\nimport { isComponent, createFragment, processClassNames } from \"./utils\";\nimport { createLayoutResult } from \"./result\";\nimport { createComponentInstance } from \"./processor\";\n\n/**\n * Type for component or element\n */\ntype ComponentOrElement =\n | HTMLElement\n | SVGElement\n | DocumentFragment\n | {\n element: HTMLElement | SVGElement;\n [key: string]: unknown;\n };\n\n/**\n * Interface for the layout object\n */\ninterface LayoutObject {\n element?: ComponentOrElement;\n [key: string]: ComponentOrElement;\n}\n\n/**\n * Processes an object-based layout definition\n *\n * @param schema - Object-based layout definition\n * @param parentElement - Optional parent element to attach layout to\n * @param options - Layout creation options\n * @returns Layout result object\n */\nexport function processObjectSchema(\n schema: Schema,\n parentElement: HTMLElement | SVGElement | DocumentFragment | null = null,\n options: LayoutOptions = {}\n): LayoutResult {\n const layout: LayoutObject = {};\n\n // Get default creator function from options or use createElement\n const defaultCreator = options.creator || createElement;\n\n // Handle root element creation\n if (schema.element && !parentElement) {\n const elementDef = schema.element;\n const createElementFn = elementDef.creator || defaultCreator;\n\n // Process class names based on prefix option\n const elementOptions = elementDef.options || {};\n const processedOptions =\n options.prefix !== false\n ? processClassNames(elementOptions)\n : { ...elementOptions };\n\n const rootComponent = createComponentInstance(\n createElementFn,\n processedOptions\n );\n const rootElement = isComponent(rootComponent)\n ? rootComponent.element\n : rootComponent;\n\n layout.element = rootComponent;\n if (elementDef.name) layout[elementDef.name] = rootComponent;\n\n // Process children\n if (elementDef.children) {\n const fragment = createFragment();\n const childLayouts = [];\n\n for (const key in elementDef.children) {\n const childDef = elementDef.children[key];\n\n // Simple fix: Store component's key as name if not provided\n if (childDef && !childDef.name) {\n childDef.name = key;\n }\n\n const childResult = processObjectSchema(\n { [key]: childDef },\n fragment,\n options\n );\n childLayouts.push(childResult.layout);\n }\n\n rootElement.appendChild(fragment);\n\n // Merge child layouts\n for (const childLayout of childLayouts) {\n Object.assign(layout, childLayout);\n }\n }\n\n return createLayoutResult(layout);\n }\n\n // Process normal schema elements\n const fragment = parentElement ? createFragment() : null;\n const childLayouts = [];\n\n for (const key in schema) {\n const def = schema[key];\n if (!def) continue;\n\n // Use appropriate creator\n const elementCreator = def.creator || defaultCreator;\n\n // Process class names based on prefix option\n const elementOptions = def.options || {};\n const shouldApplyPrefix =\n \"prefix\" in elementOptions\n ? elementOptions.prefix\n : options.prefix !== false;\n\n const processedOptions = shouldApplyPrefix\n ? processClassNames(elementOptions)\n : { ...elementOptions };\n\n // Simple fix: Always set name property to key if not provided\n if (!def.name && key !== \"element\") {\n def.name = key;\n }\n\n // Create element\n const created = createComponentInstance(elementCreator, processedOptions);\n\n // Store in layout\n layout[key] = created;\n if (def.name && def.name !== key) layout[def.name] = created;\n\n // Handle DOM operations\n const element = isComponent(created) ? created.element : created;\n if (fragment) fragment.appendChild(element);\n\n // Process children\n if (def.children) {\n // Fix: Instead of comparing functions directly, use instanceof to check for SVG elements\n // or check a specific property in the creator function to identify its type\n const isSvgElement =\n typeof SVGElement !== \"undefined\" && element instanceof SVGElement;\n\n const childResult = processObjectSchema(def.children, element, options);\n childLayouts.push(childResult.layout);\n\n // Simple fix: For SVG elements, register all children at this level for easy access\n if (isSvgElement) {\n Object.assign(layout, childResult.layout);\n }\n }\n }\n\n // Append to parent\n if (parentElement && fragment) {\n const parentDom = isComponent(parentElement)\n ? parentElement.element\n : parentElement;\n parentDom.appendChild(fragment);\n }\n\n // Merge child layouts\n for (const childLayout of childLayouts) {\n Object.assign(layout, childLayout);\n }\n\n return createLayoutResult(layout);\n}\n",
|
|
85
|
-
"// src/core/layout/config.ts\n/**\n * @module core/layout\n * @description Layout configuration utilities\n */\n\nimport { addClass, hasClass } from \"../dom/classes\";\n\n/**\n * Helper function to clean up previous layout classes from an element\n *\n * @param element - Element to clean layout classes from\n */\nexport function cleanupLayoutClasses(element: HTMLElement): void {\n if (!element) return;\n\n // Get all classes from the element\n const classList = Array.from(element.classList);\n\n // Find and remove layout-related classes\n const layoutClasses = classList.filter(\n (cls) => cls.startsWith(\"layout--\") || cls.includes(\"-layout--\")\n );\n\n // Remove each layout class\n layoutClasses.forEach((cls) => {\n element.classList.remove(cls);\n });\n}\n\n/**\n * Helper function to get the layout type from element classes\n *\n * @param element - Element to check\n * @returns Layout type if found, empty string otherwise\n */\nexport function getLayoutType(element: HTMLElement): string {\n return hasClass(element, \"layout--stack\")\n ? \"stack\"\n : hasClass(element, \"layout--row\")\n ? \"row\"\n : hasClass(element, \"layout--grid\")\n ? \"grid\"\n : \"\";\n}\n\n/**\n * Applies layout classes based on the layout configuration\n *\n * @param element - Element to apply layout classes to\n * @param layoutConfig - Layout configuration\n * @param cleanupFirst - Whether to clean up previous layout classes first\n */\nexport function applyLayoutClasses(\n element: HTMLElement,\n layoutConfig: any,\n cleanupFirst: boolean = true\n): void {\n if (!element || !layoutConfig) return;\n\n // First remove any existing layout classes to avoid accumulation\n if (cleanupFirst) {\n cleanupLayoutClasses(element);\n }\n\n // Apply base layout type\n if (layoutConfig.type) {\n addClass(element, `layout--${layoutConfig.type}`);\n }\n\n // Apply common layout properties\n if (layoutConfig.gap !== undefined) {\n // Get current layout type for prefixed gap class\n const layoutType = layoutConfig.type || getLayoutType(element);\n\n if (layoutType) {\n // Add the new gap class\n addClass(element, `layout--${layoutType}-gap-${layoutConfig.gap}`);\n }\n }\n\n // Apply alignment properties\n if (layoutConfig.align) {\n const layoutType = layoutConfig.type || getLayoutType(element);\n\n if (layoutType) {\n addClass(element, `layout--${layoutType}-${layoutConfig.align}`);\n }\n }\n\n // Apply justification\n if (layoutConfig.justify) {\n const layoutType = layoutConfig.type || getLayoutType(element);\n\n if (layoutType) {\n addClass(\n element,\n `layout--${layoutType}-justify-${layoutConfig.justify}`\n );\n }\n }\n\n // Apply grid-specific properties\n if (layoutConfig.type === \"grid\" || getLayoutType(element) === \"grid\") {\n // Grid columns\n if (typeof layoutConfig.columns === \"number\") {\n addClass(element, `layout--grid-cols-${layoutConfig.columns}`);\n } else if (layoutConfig.columns === \"auto-fill\") {\n addClass(element, \"layout--grid-fill\");\n } else if (layoutConfig.columns === \"auto-fit\") {\n addClass(element, \"layout--grid-cols-auto-fit\");\n }\n\n // Other grid properties\n if (layoutConfig.dense) {\n addClass(element, \"layout--grid-dense\");\n }\n\n if (layoutConfig.autoHeight) {\n addClass(element, \"layout--grid-auto-height\");\n }\n }\n\n // Apply row-specific properties\n if (layoutConfig.type === \"row\" || getLayoutType(element) === \"row\") {\n // Wrap behavior\n if (layoutConfig.wrap === false || layoutConfig.wrap === \"nowrap\") {\n addClass(element, \"layout--row-nowrap\");\n } else if (layoutConfig.wrap === \"reverse\") {\n addClass(element, \"layout--row-wrap-reverse\");\n }\n\n // Mobile responsiveness\n if (layoutConfig.mobileStack) {\n addClass(element, \"layout--row-mobile-stack\");\n }\n\n if (layoutConfig.mobileScroll) {\n addClass(element, \"layout--row-mobile-scroll\");\n }\n }\n\n // No masonry, split or sidebar specific properties anymore\n\n // Add any additional custom classes\n if (layoutConfig.class) {\n layoutConfig.class\n .split(\" \")\n .filter(Boolean)\n .forEach((cls) => {\n // Don't prefix these classes as they're user-defined\n element.classList.add(cls);\n });\n }\n}\n\n/**\n * Applies layout item classes based on the configuration\n *\n * @param element - Element to apply layout item classes to\n * @param itemConfig - Layout item configuration\n */\nexport function applyLayoutItemClasses(\n element: HTMLElement,\n itemConfig: any\n): void {\n if (!element || !itemConfig) return;\n\n // Add the base layout item class\n addClass(element, \"layout__item\");\n\n // Add width classes\n if (itemConfig.width && itemConfig.width >= 1 && itemConfig.width <= 12) {\n addClass(element, `layout__item--${itemConfig.width}`);\n }\n\n // Add responsive classes\n if (itemConfig.sm) addClass(element, `layout__item--sm-${itemConfig.sm}`);\n if (itemConfig.md) addClass(element, `layout__item--md-${itemConfig.md}`);\n if (itemConfig.lg) addClass(element, `layout__item--lg-${itemConfig.lg}`);\n if (itemConfig.xl) addClass(element, `layout__item--xl-${itemConfig.xl}`);\n\n // Add grid span classes\n if (itemConfig.span)\n addClass(element, `layout__item--span-${itemConfig.span}`);\n if (itemConfig.rowSpan)\n addClass(element, `layout__item--row-span-${itemConfig.rowSpan}`);\n\n // Add ordering\n if (itemConfig.order) {\n if (typeof itemConfig.order === \"number\") {\n addClass(element, `layout__item--order-${itemConfig.order}`);\n } else {\n addClass(element, `layout__item--order-${itemConfig.order}`);\n }\n }\n\n // Add alignment\n if (itemConfig.align) {\n addClass(element, `layout__item--self-${itemConfig.align}`);\n }\n\n // Add auto class\n if (itemConfig.auto) {\n addClass(element, \"layout__item--auto\");\n }\n}\n",
|
|
86
|
-
"// src/core/layout/processor.ts\n/**\n * @module core/layout\n * @description Processor for layout creation\n */\n\nimport { LayoutResult, LayoutOptions } from \"./types\";\nimport { processArraySchema } from \"./array\";\nimport { processObjectSchema } from \"./object\";\nimport { isObject } from \"../utils\";\nimport { applyLayoutClasses, applyLayoutItemClasses } from \"./config\";\n\n/**\n * Creates a component from a constructor or factory function\n *\n * @param Component - Component constructor or factory function\n * @param options - Component creation options\n * @param layoutOptions - Global layout options\n * @returns Created component instance\n */\nexport function createComponentInstance(\n Component: any,\n options: Record<string, any> = {}\n): any {\n try {\n // Save special configs before creating component\n const layoutConfig = options.layout;\n const layoutItemConfig = options.layoutItem;\n const styleConfig = options.style;\n const attributesConfig = options.attributes;\n\n // Handle both event and events for flexibility (events is preferred)\n const eventsConfig = options.events || options.event;\n\n // Remove these special configs from options to prevent them becoming attributes\n const cleanOptions = { ...options };\n delete cleanOptions.layout;\n delete cleanOptions.layoutItem;\n // if (typeof cleanOptions.style === 'object') delete cleanOptions.style;\n // if (typeof cleanOptions.attributes === 'object') delete cleanOptions.attributes;\n delete cleanOptions.events;\n delete cleanOptions.event;\n\n // Check if Component is a class constructor\n const isClass =\n typeof Component === \"function\" &&\n Object.getOwnPropertyDescriptor(Component, \"prototype\")?.writable ===\n false;\n\n // Create the component with clean options\n const component = isClass\n ? new Component(cleanOptions)\n : Component(cleanOptions);\n\n // Apply configuration to the created component\n if (component) {\n // Get the actual DOM element\n const element =\n component.element ||\n (component instanceof HTMLElement ? component : null);\n if (element) {\n // Apply layout classes if layout config exists\n if (layoutConfig) {\n applyLayoutClasses(element, layoutConfig);\n }\n\n // Apply layout item classes if layoutItem config exists\n if (layoutItemConfig) {\n applyLayoutItemClasses(element, layoutItemConfig);\n }\n\n // Apply style if style config exists and is an object\n if (styleConfig && typeof styleConfig === \"object\") {\n Object.assign(element.style, styleConfig);\n }\n\n // Apply attributes if attributes config exists and is an object\n if (attributesConfig && typeof attributesConfig === \"object\") {\n for (const [key, value] of Object.entries(attributesConfig)) {\n if (value !== undefined && value !== null) {\n element.setAttribute(key, value.toString());\n }\n }\n }\n\n // Attach event listeners if events config exists\n if (eventsConfig) {\n // Handle object format: { click: fn, mouseover: fn }\n if (\n typeof eventsConfig === \"object\" &&\n !Array.isArray(eventsConfig)\n ) {\n for (const [eventName, handler] of Object.entries(eventsConfig)) {\n if (typeof handler === \"function\") {\n element.addEventListener(eventName, handler);\n }\n }\n }\n // Handle array format: [['click', fn], ['mouseover', fn]]\n else if (Array.isArray(eventsConfig)) {\n for (const eventDef of eventsConfig) {\n if (Array.isArray(eventDef) && eventDef.length >= 2) {\n const [eventName, handler] = eventDef;\n if (\n typeof eventName === \"string\" &&\n typeof handler === \"function\"\n ) {\n element.addEventListener(eventName, handler);\n }\n }\n }\n }\n }\n }\n }\n\n return component;\n } catch (error) {\n console.error(\"Error creating component instance:\", error);\n // Return a basic element as fallback\n return document.createElement(\"div\");\n }\n}\n\n/**\n * Determines if a schema is in JSX format (transformed by h function)\n */\nexport function isJsxSchema(schema: any): boolean {\n return (\n Array.isArray(schema) &&\n schema.length >= 3 &&\n typeof schema[0] === \"function\" &&\n typeof schema[1] === \"string\" &&\n isObject(schema[2])\n );\n}\n\n/**\n * Processes any type of layout definition (array or object)\n *\n * @param schema - Layout schema to process\n * @param parentElement - Parent element to attach to\n * @param level - Current nesting level\n * @param options - Layout creation options\n * @returns Layout result object\n */\nexport function processSchema(\n schema: any,\n parentElement: HTMLElement | null = null,\n level: number = 0,\n options: LayoutOptions = {}\n): LayoutResult {\n // Validate input to provide helpful error messages\n if (!schema) {\n console.warn(\"Empty schema provided to layout processor\");\n return {\n layout: {},\n element: document.createElement(\"div\"),\n component: {},\n get: () => null,\n getAll: () => ({}),\n destroy: () => {},\n };\n }\n\n if (isJsxSchema(schema)) {\n return processArraySchema(schema, parentElement, level, options);\n }\n\n // Process based on schema type\n return Array.isArray(schema)\n ? processArraySchema(schema, parentElement, level, options)\n : processObjectSchema(schema, parentElement, options);\n}\n",
|
|
87
|
-
"// src/core/layout/create.ts\n/**\n * @module core/layout\n * @description Main layout creation functionality\n */\n\nimport { Schema, LayoutResult, LayoutOptions } from './types';\nimport { processSchema } from './processor';\nimport { createLayoutResult } from './result';\n\n/**\n * Creates a DOM or component layout based on a layout definition\n * \n * @param schema - Layout definition (array-based, object-based, or HTML string)\n * @param parentElement - Optional parent element to attach layout to\n * @param options - Additional options for layout creation\n * @returns Object containing the layout and utility functions\n */\nexport function createLayout(\n schema: Schema | any[] | string | Function, \n parentElement: HTMLElement | null = null,\n options: LayoutOptions = {}\n): LayoutResult {\n // If schema is a function, execute it to get the actual schema\n if (typeof schema === 'function') {\n schema = schema();\n }\n \n // Parse HTML string into a layout if needed\n if (typeof schema === 'string') {\n // Create a temporary element to parse HTML\n const template = document.createElement('template');\n template.innerHTML = schema.trim();\n \n // Use the parsed DOM structure directly\n const fragment = template.content;\n \n if (parentElement && fragment.hasChildNodes()) {\n // Batch DOM operation - append all nodes at once\n parentElement.appendChild(fragment);\n }\n \n // Create a basic layout for HTML string\n const layout = { \n element: fragment.firstElementChild as HTMLElement \n };\n \n // Create layout result with HTML content\n return createLayoutResult(layout);\n }\n \n // Process the schema using our unified processor with options\n return processSchema(schema, parentElement, 0, options);\n}",
|
|
88
|
-
"// src/core/layout/jsx.ts\n/**\n * @module core/layout/jsx\n * @description Lightweight JSX implementation for the layout system\n */\n\nimport { createElement } from '../dom/create';\nimport { createLayout } from './create';\n\n// Fragment support\nexport const Fragment = Symbol('Fragment');\n\n/**\n * Convert JSX to our layout array schema\n */\nexport function h(type: string | Function | symbol, props: Record<string, any> | null, ...children: any[]): any {\n // Handle fragments (just return children)\n if (type === Fragment) {\n return children.flat(Infinity).filter(Boolean);\n }\n \n // Normalize props\n const normalizedProps = props || {};\n \n // Handle style prop - convert object to string\n if (normalizedProps.style && typeof normalizedProps.style === 'object') {\n normalizedProps.style = Object.entries(normalizedProps.style)\n .map(([key, value]) => {\n // Convert camelCase to kebab-case\n const kebabKey = key.replace(/([a-z0-9])([A-Z])/g, '$1-$2').toLowerCase();\n return `${kebabKey}: ${value}`;\n })\n .join('; ');\n }\n \n // Generate ID for the element if not provided\n const id = normalizedProps.id || normalizedProps.name || `el-${Math.floor(Math.random() * 10000)}`;\n \n // Remove special props that we'll handle separately\n const cleanProps = { ...normalizedProps };\n delete cleanProps.id;\n delete cleanProps.name;\n \n // Flatten children and convert to layout arrays\n const flatChildren = children\n .flat(Infinity)\n .filter(child => child !== null && child !== undefined && child !== false);\n \n // Convert JSX structure to array schema\n if (typeof type === 'function') {\n // Component function\n return [\n type, \n id, \n cleanProps, \n flatChildren.length > 0 ? convertChildrenToArraySchema(flatChildren) : undefined\n ].filter(Boolean);\n } else if (typeof type === 'string') {\n // HTML tag via createElement\n return [\n createElement, \n id, \n { ...cleanProps, tag: type }, \n flatChildren.length > 0 ? convertChildrenToArraySchema(flatChildren) : undefined\n ].filter(Boolean);\n }\n \n return [];\n}\n\n/**\n * Helper to convert children to array schema format\n */\nfunction convertChildrenToArraySchema(children: any[]): any[] {\n const result = [];\n \n for (const child of children) {\n if (typeof child === 'string' || typeof child === 'number' || typeof child === 'boolean') {\n // Text nodes become text options on parent or separate text nodes\n result.push(String(child));\n } else if (Array.isArray(child)) {\n // Handle arrays (like Fragment results)\n result.push(...convertChildrenToArraySchema(child));\n } else if (child && typeof child === 'object') {\n // JSX elements\n result.push(child);\n }\n }\n \n return result;\n}\n\n/**\n * Create a layout from JSX\n */\nexport function createJsxLayout(jsxElement: any, parentElement?: HTMLElement | null) {\n return createLayout(jsxElement, parentElement);\n}",
|
|
89
|
-
"// src/core/layout/index.ts\n/**\n * @module core/layout\n * @description Layout creation system with simplified API\n */\n\n// Export essential types\nexport type { \n ComponentLike, \n ElementDefinition, \n Schema, \n LayoutResult,\n LayoutOptions,\n LayoutConfig,\n LayoutItemConfig\n} from './types';\n\n// Export utility functions\nexport { isComponent, processClassNames, flattenLayout } from './utils';\n\n// Export core functionality\nexport { createLayout } from './create';\nexport { createLayoutResult } from './result';\nexport { processSchema, createComponentInstance, isJsxSchema } from './processor';\n\n// Export configuration utilities\nexport { \n applyLayoutClasses, \n applyLayoutItemClasses, \n getLayoutType,\n cleanupLayoutClasses\n} from './config';\n\n// Export JSX support\nexport { h, Fragment, createJsxLayout } from './jsx';\n\n// Default export for backward compatibility and simpler usage\nimport { createLayout } from './create';\nexport default createLayout;",
|
|
90
|
-
"// src/core/collection/collection.ts\n\n/**\n * Event types for collection changes\n */\nexport const COLLECTION_EVENTS = {\n CHANGE: \"change\",\n ADD: \"add\",\n UPDATE: \"update\",\n REMOVE: \"remove\",\n ERROR: \"error\",\n LOADING: \"loading\",\n} as const;\n\n/**\n * Collection event type\n */\nexport type CollectionEvent =\n (typeof COLLECTION_EVENTS)[keyof typeof COLLECTION_EVENTS];\n\n/**\n * Observer callback type for collection events\n */\nexport type CollectionObserver<T = unknown> = (payload: {\n event: CollectionEvent;\n data: T | readonly T[] | readonly string[] | boolean | Error | null;\n}) => void;\n\n/**\n * Query operators for filtering\n */\nexport const OPERATORS = {\n EQ: \"eq\",\n NE: \"ne\",\n GT: \"gt\",\n GTE: \"gte\",\n LT: \"lt\",\n LTE: \"lte\",\n IN: \"in\",\n NIN: \"nin\",\n CONTAINS: \"contains\",\n STARTS_WITH: \"startsWith\",\n ENDS_WITH: \"endsWith\",\n} as const;\n\n/**\n * Type for all collection items\n */\nexport interface CollectionItem {\n id: string;\n [key: string]: unknown;\n}\n\n/**\n * Collection configuration\n */\nexport interface CollectionConfig<T extends CollectionItem> {\n /**\n * Transform function for items\n */\n transform?: (item: unknown) => T;\n\n /**\n * Validation function for items\n */\n validate?: (item: unknown) => boolean;\n\n /**\n * Initial capacity for collection\n */\n initialCapacity?: number;\n}\n\n/**\n * Collection interface\n */\nexport interface Collection<T extends CollectionItem> {\n /**\n * Subscribe to collection changes\n * @param observer - Observer callback\n * @returns Unsubscribe function\n */\n subscribe: (observer: CollectionObserver) => () => void;\n\n /**\n * Get collection items based on current query and sort\n * @returns Collection items\n */\n getItems: () => readonly T[];\n\n /**\n * Get collection size\n * @returns Number of items\n */\n getSize: () => number;\n\n /**\n * Get loading state\n * @returns Loading state\n */\n isLoading: () => boolean;\n\n /**\n * Get error state\n * @returns Error object\n */\n getError: () => Error | null;\n\n /**\n * Set query filter\n * @param queryFn - Query function\n */\n query: (queryFn: ((item: T) => boolean) | null) => void;\n\n /**\n * Set sort function\n * @param sortFn - Sort function\n */\n sort: (sortFn: ((a: T, b: T) => number) | null) => void;\n\n /**\n * Add items to collection\n * @param items - Items to add\n * @returns Added items\n */\n add: (items: T | readonly T[]) => Promise<readonly T[]>;\n\n /**\n * Update items in collection\n * @param items - Items to update\n * @returns Updated items\n */\n update: (items: T | readonly T[]) => Promise<readonly T[]>;\n\n /**\n * Remove items from collection\n * @param ids - Item IDs to remove\n * @returns Removed item IDs\n */\n remove: (ids: string | readonly string[]) => Promise<readonly string[]>;\n\n /**\n * Clear all items from collection\n */\n clear: () => void;\n}\n\n/**\n * Creates a collection for managing items\n * @param config - Collection configuration\n * @returns Collection interface\n */\nexport const createCollection = <T extends CollectionItem>(\n config: CollectionConfig<T> = {}\n): Collection<T> => {\n // Core state - minimized to only what's necessary\n const data = new Map<string, T>();\n const observers = new Set<CollectionObserver<T>>();\n\n // Query and sort state\n let queryFn: ((item: T) => boolean) | null = null;\n let sortFn: ((a: T, b: T) => number) | null = null;\n\n // Cache for filtered/sorted results\n let cache: readonly T[] | null = null;\n let cacheValid = false;\n\n // Status flags\n let loading = false;\n let error: Error | null = null;\n\n // Performance optimizations\n const handlers: CollectionObserver<T>[] = [];\n const eventObj = {\n event: COLLECTION_EVENTS.CHANGE as CollectionEvent,\n data: null as T | readonly T[] | readonly string[] | boolean | Error | null,\n };\n\n // Initialize functions with fallbacks\n const transform = config.transform || ((item: unknown) => item as T);\n const validate = config.validate || (() => true);\n\n // Use a function to share notification logic\n function notifyObservers(\n eventType: CollectionEvent,\n eventData: T | readonly T[] | readonly string[] | boolean | Error | null\n ): void {\n if (observers.size === 0) return;\n\n eventObj.event = eventType;\n eventObj.data = eventData;\n\n handlers.length = 0;\n observers.forEach((fn) => handlers.push(fn));\n\n for (let i = 0; i < handlers.length; i++) {\n handlers[i](eventObj);\n }\n }\n\n // Optimized function to get items with filtering and sorting\n function getFilteredItems(): readonly T[] {\n // Return cache if valid\n if (cacheValid && cache !== null) {\n return cache;\n }\n\n // No filtering or sorting needed\n if (!queryFn && !sortFn) {\n const result = Array.from(data.values());\n cache = result;\n cacheValid = true;\n return result;\n }\n\n // Get all items as array\n const items = Array.from(data.values());\n let result = items;\n\n // Apply filtering if needed\n if (queryFn) {\n result = items.filter(queryFn);\n }\n\n // Apply sorting if needed\n if (sortFn) {\n result.sort(sortFn);\n }\n\n // Update cache and return\n cache = result;\n cacheValid = true;\n return result;\n }\n\n // Process multiple items efficiently\n function processItems(items: T | readonly T[]): T[] {\n if (!Array.isArray(items)) {\n // Single item case\n if (!validate(items)) return [];\n return [transform(items)];\n }\n\n // Empty array check\n if (items.length === 0) return [];\n\n // Process multiple items\n const result: T[] = [];\n for (let i = 0; i < items.length; i++) {\n if (validate(items[i])) {\n const transformed = transform(items[i]);\n if (transformed.id) {\n result.push(transformed);\n } else {\n throw new Error(\"Items must have an id property\");\n }\n }\n }\n\n return result;\n }\n\n // Create and return the collection interface\n return {\n // Subscription management\n subscribe(observer) {\n observers.add(observer);\n return () => {\n observers.delete(observer);\n };\n },\n\n // Data access - readonly to prevent mutation\n getItems: getFilteredItems,\n\n getSize() {\n return data.size;\n },\n\n isLoading() {\n return loading;\n },\n\n getError() {\n return error;\n },\n\n // Query and sort methods\n query(newQueryFn) {\n queryFn = newQueryFn;\n cacheValid = false;\n notifyObservers(COLLECTION_EVENTS.CHANGE, getFilteredItems());\n },\n\n sort(newSortFn) {\n sortFn = newSortFn;\n cacheValid = false;\n notifyObservers(COLLECTION_EVENTS.CHANGE, getFilteredItems());\n },\n\n // Data modification methods\n async add(items) {\n try {\n loading = true;\n notifyObservers(COLLECTION_EVENTS.LOADING, true);\n\n // Process all items at once\n const processed = processItems(items);\n\n // Early return if no valid items\n if (processed.length === 0) {\n return processed;\n }\n\n // Add all items to the map\n for (let i = 0; i < processed.length; i++) {\n data.set(processed[i].id, processed[i]);\n }\n\n // Invalidate cache\n cacheValid = false;\n\n // Notify observers\n notifyObservers(COLLECTION_EVENTS.ADD, processed);\n notifyObservers(COLLECTION_EVENTS.CHANGE, getFilteredItems());\n\n return processed;\n } catch (e) {\n error = e instanceof Error ? e : new Error(String(e));\n notifyObservers(COLLECTION_EVENTS.ERROR, error);\n throw error;\n } finally {\n loading = false;\n notifyObservers(COLLECTION_EVENTS.LOADING, false);\n }\n },\n\n async update(items) {\n try {\n loading = true;\n notifyObservers(COLLECTION_EVENTS.LOADING, true);\n\n // Convert to array if single item\n const itemsArray = Array.isArray(items) ? items : [items];\n\n // Early return if no items\n if (itemsArray.length === 0) {\n return [];\n }\n\n // Verify all items exist before updating\n for (let i = 0; i < itemsArray.length; i++) {\n if (!data.has(itemsArray[i].id)) {\n throw new Error(`Item with id ${itemsArray[i].id} not found`);\n }\n }\n\n // Process and update all items\n const processed = processItems(itemsArray);\n\n // Add to map\n for (let i = 0; i < processed.length; i++) {\n data.set(processed[i].id, processed[i]);\n }\n\n // Invalidate cache\n cacheValid = false;\n\n // Notify observers\n notifyObservers(COLLECTION_EVENTS.UPDATE, processed);\n notifyObservers(COLLECTION_EVENTS.CHANGE, getFilteredItems());\n\n return processed;\n } catch (e) {\n error = e instanceof Error ? e : new Error(String(e));\n notifyObservers(COLLECTION_EVENTS.ERROR, error);\n throw error;\n } finally {\n loading = false;\n notifyObservers(COLLECTION_EVENTS.LOADING, false);\n }\n },\n\n async remove(ids) {\n try {\n loading = true;\n notifyObservers(COLLECTION_EVENTS.LOADING, true);\n\n // Convert to array if single id\n const idsArray = Array.isArray(ids) ? ids : [ids];\n\n // Early return if no ids\n if (idsArray.length === 0) {\n return [];\n }\n\n // Verify all ids exist\n for (let i = 0; i < idsArray.length; i++) {\n if (!data.has(idsArray[i])) {\n throw new Error(`Item with id ${idsArray[i]} not found`);\n }\n }\n\n // Remove all items\n for (let i = 0; i < idsArray.length; i++) {\n data.delete(idsArray[i]);\n }\n\n // Invalidate cache\n cacheValid = false;\n\n // Notify observers\n notifyObservers(COLLECTION_EVENTS.REMOVE, idsArray);\n notifyObservers(COLLECTION_EVENTS.CHANGE, getFilteredItems());\n\n return idsArray;\n } catch (e) {\n error = e instanceof Error ? e : new Error(String(e));\n notifyObservers(COLLECTION_EVENTS.ERROR, error);\n throw error;\n } finally {\n loading = false;\n notifyObservers(COLLECTION_EVENTS.LOADING, false);\n }\n },\n\n clear() {\n // Clear data\n data.clear();\n\n // Reset state\n queryFn = null;\n sortFn = null;\n cache = null;\n cacheValid = false;\n\n // Notify observers\n notifyObservers(COLLECTION_EVENTS.CHANGE, []);\n },\n };\n};\n",
|
|
91
|
-
"// src/core/collection/adapters/base.ts\n\n/**\n * Query operators for filtering data\n */\nexport const OPERATORS = {\n EQ: 'eq',\n NE: 'ne',\n GT: 'gt',\n GTE: 'gte',\n LT: 'lt',\n LTE: 'lte',\n IN: 'in',\n NIN: 'nin',\n CONTAINS: 'contains',\n STARTS_WITH: 'startsWith',\n ENDS_WITH: 'endsWith'\n} as const;\n\n/**\n * Type for query operators\n */\nexport type Operator = keyof typeof OPERATORS;\n\n/**\n * Configuration for base adapter\n */\nexport interface BaseAdapterConfig {\n /**\n * Error handler function\n */\n onError?: (error: Error, context?: any) => void;\n}\n\n/**\n * Base adapter interface\n */\nexport interface BaseAdapter {\n /**\n * Handles errors in adapter operations\n * @param error - The error that occurred\n * @param context - Optional context information about the error\n * @throws The original error after processing\n */\n handleError(error: Error, context?: any): never;\n}\n\n/**\n * Creates a base adapter with error handling\n * @param config - Adapter configuration\n * @returns Base adapter with error handling\n */\nexport const createBaseAdapter = (config: BaseAdapterConfig = {}): BaseAdapter => {\n const handleError = (error: Error, context?: any): never => {\n config.onError?.(error, context);\n throw error;\n };\n\n return {\n handleError\n };\n};",
|
|
92
|
-
"// src/core/collection/adapters/route.ts\n\nimport { OPERATORS, createBaseAdapter } from './base';\n\nconst QUERY_PARAMS = {\n [OPERATORS.EQ]: 'eq',\n [OPERATORS.NE]: 'ne',\n [OPERATORS.GT]: 'gt',\n [OPERATORS.GTE]: 'gte',\n [OPERATORS.LT]: 'lt',\n [OPERATORS.LTE]: 'lte',\n [OPERATORS.IN]: 'in',\n [OPERATORS.NIN]: 'nin',\n [OPERATORS.CONTAINS]: 'contains',\n [OPERATORS.STARTS_WITH]: 'startsWith',\n [OPERATORS.ENDS_WITH]: 'endsWith'\n} as const;\n\n/**\n * Pagination strategies supported by the route adapter\n */\nexport type PaginationStrategy = 'cursor' | 'offset' | 'page';\n\n/**\n * Pagination configuration\n */\nexport interface PaginationConfig {\n /**\n * Pagination strategy to use\n * @default 'cursor'\n */\n strategy: PaginationStrategy;\n \n /**\n * Parameter name for pagination cursor\n * @default 'cursor'\n */\n cursorParamName?: string;\n \n /**\n * Parameter name for page number\n * @default 'page'\n */\n pageParamName?: string;\n \n /**\n * Parameter name for page size / items per page\n * @default 'per_page'\n */\n perPageParamName?: string;\n \n /**\n * Parameter name for offset\n * @default 'offset'\n */\n offsetParamName?: string;\n \n /**\n * Parameter name for limit\n * @default 'limit'\n */\n limitParamName?: string;\n \n /**\n * Default page size for pagination\n * @default 20\n */\n defaultPageSize?: number;\n}\n\n/**\n * Route adapter configuration interface\n */\nexport interface RouteAdapterConfig {\n /**\n * Base URL for API requests\n */\n base?: string;\n \n /**\n * API endpoints\n */\n endpoints?: {\n create?: string;\n list?: string;\n update?: string;\n delete?: string;\n };\n \n /**\n * HTTP headers to include with requests\n */\n headers?: Record<string, string>;\n \n /**\n * Whether to enable response caching\n */\n cache?: boolean;\n \n /**\n * Error handler function\n */\n onError?: (error: Error, context?: any) => void;\n \n /**\n * Custom adapter options\n */\n adapter?: {\n /**\n * Custom response parser\n */\n parseResponse?: (response: any) => any;\n };\n \n /**\n * Pagination configuration\n */\n pagination?: PaginationConfig;\n}\n\n/**\n * Response metadata interface\n */\nexport interface ResponseMeta {\n /**\n * Cursor for next page (cursor-based pagination)\n */\n cursor: string | null;\n \n /**\n * Whether there are more items available\n */\n hasNext: boolean;\n \n /**\n * Total number of items (if available)\n */\n total?: number;\n \n /**\n * Current page number (page-based pagination)\n */\n page?: number;\n \n /**\n * Total number of pages (page-based pagination)\n */\n pages?: number;\n \n /**\n * Current offset (offset-based pagination)\n */\n offset?: number;\n}\n\n/**\n * Parsed response interface\n */\nexport interface ParsedResponse<T = any> {\n /**\n * Items returned in the response\n */\n items: T[];\n \n /**\n * Pagination metadata\n */\n meta: ResponseMeta;\n}\n\nexport const createRouteAdapter = (config: RouteAdapterConfig = {}) => {\n const base = createBaseAdapter(config);\n let controller: AbortController | null = null;\n const cache = new Map<string, { data: any; timestamp: number }>();\n const urlCache = new Map<string, string>();\n\n // Initialize pagination config from provided configuration\n // This ensures we respect the user's desired pagination strategy\n const paginationConfig: Required<PaginationConfig> = {\n strategy: config.pagination?.strategy || 'cursor',\n cursorParamName: config.pagination?.cursorParamName || 'cursor',\n pageParamName: config.pagination?.pageParamName || 'page',\n perPageParamName: config.pagination?.perPageParamName || 'per_page',\n offsetParamName: config.pagination?.offsetParamName || 'offset',\n limitParamName: config.pagination?.limitParamName || 'limit',\n defaultPageSize: config.pagination?.defaultPageSize || 20\n };\n\n /**\n * Normalizes a base URL to ensure it can be used in URL construction\n * @param baseUrl - Base URL string to normalize\n * @returns Normalized URL that can be used with URL constructor\n */\n const normalizeBaseUrl = (baseUrl?: string): string => {\n if (!baseUrl) return 'http://localhost';\n \n // If it's already an absolute URL, return it\n if (/^https?:\\/\\//i.test(baseUrl)) {\n return baseUrl;\n }\n \n // For relative URLs starting with /, use current origin\n if (baseUrl.startsWith('/')) {\n return `${window.location.origin}${baseUrl}`;\n }\n \n // For other cases, assume http://\n return `http://${baseUrl}`;\n };\n\n const buildUrl = (endpoint: string, params: Record<string, any> = {}): string => {\n try {\n const cacheKey = endpoint + JSON.stringify(params);\n \n if (urlCache.has(cacheKey)) {\n return urlCache.get(cacheKey)!;\n }\n \n // Normalize the base URL to ensure it works with URL constructor\n const normalizedBase = normalizeBaseUrl(config.base);\n \n const url = new URL(normalizedBase + endpoint);\n \n Object.entries(params).forEach(([key, value]) => {\n if (Array.isArray(value)) {\n value.forEach(v => url.searchParams.append(key, v));\n } else if (value !== null && value !== undefined) {\n url.searchParams.append(key, String(value));\n }\n });\n \n // For relative URLs, return just the pathname and search if config.base is relative\n if (config.base && config.base.startsWith('/')) {\n const relativeUrl = `${url.pathname}${url.search}`;\n urlCache.set(cacheKey, relativeUrl);\n return relativeUrl;\n }\n \n const urlString = url.toString();\n urlCache.set(cacheKey, urlString);\n return urlString;\n } catch (error) {\n console.error('Error building URL:', error, {\n base: config.base,\n endpoint,\n params\n });\n throw error;\n }\n };\n\n const transformQuery = (query: Record<string, any>): Record<string, any> => {\n const params: Record<string, any> = {};\n Object.entries(query).forEach(([field, conditions]) => {\n if (typeof conditions === 'object') {\n Object.entries(conditions).forEach(([op, value]) => {\n const paramKey = QUERY_PARAMS[op as keyof typeof QUERY_PARAMS];\n if (paramKey) {\n params[`${field}_${paramKey}`] = value;\n }\n });\n } else {\n params[field] = conditions;\n }\n });\n return params;\n };\n\n const request = async (url: string, options: RequestInit = {}): Promise<any> => {\n if (controller) {\n controller.abort();\n }\n controller = new AbortController();\n\n try {\n const response = await fetch(url, {\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...config.headers,\n ...options.headers\n },\n signal: controller.signal\n });\n\n if (!response.ok) {\n let errorData: any;\n try {\n errorData = await response.json();\n } catch {\n errorData = { message: `HTTP error ${response.status}` };\n }\n console.error('API error response:', errorData);\n return base.handleError(new Error(errorData.message || 'API request failed'));\n }\n\n const contentType = response.headers.get('content-type');\n if (contentType && contentType.includes('application/json')) {\n const data = await response.json();\n return data;\n } else {\n const text = await response.text();\n return text;\n }\n } catch (error) {\n console.error('API request error:', error);\n if ((error as Error).name === 'AbortError') return null;\n return base.handleError(error as Error);\n } finally {\n controller = null;\n }\n };\n\n const getCache = (key: string): any | null => {\n if (!config.cache) return null;\n\n const cached = cache.get(key);\n if (!cached) return null;\n\n const { data, timestamp } = cached;\n const now = Date.now();\n\n if (now - timestamp > 5 * 60 * 1000) {\n cache.delete(key);\n return null;\n }\n\n return data;\n };\n\n const setCache = (key: string, data: any): void => {\n if (!config.cache) return;\n cache.set(key, { data, timestamp: Date.now() });\n };\n\n /**\n * Creates pagination parameters based on the configured strategy\n * @param query - Query parameters from the request\n * @param options - Additional options\n * @returns Pagination parameters for the request\n */\n const createPaginationParams = (\n query: Record<string, any> = {}, \n options: Record<string, any> = {}\n ): Record<string, any> => {\n const params: Record<string, any> = {};\n \n // Ensure we're using the correct pagination strategy\n const strategy = paginationConfig.strategy;\n \n switch (strategy) {\n case 'cursor': {\n // Cursor-based pagination\n const cursor = query.cursor || options.cursor;\n if (cursor) {\n params[paginationConfig.cursorParamName] = cursor;\n }\n \n // Add limit parameter\n const limit = query.limit || options.limit || paginationConfig.defaultPageSize;\n params[paginationConfig.limitParamName] = limit;\n break;\n }\n \n case 'offset': {\n // Offset-based pagination\n const offset = query.offset !== undefined ? query.offset : \n (options.offset !== undefined ? options.offset : 0);\n params[paginationConfig.offsetParamName] = offset;\n \n // Add limit parameter\n const limit = query.limit || options.limit || paginationConfig.defaultPageSize;\n params[paginationConfig.limitParamName] = limit;\n break;\n }\n \n case 'page': {\n // Page-based pagination\n const page = query.page !== undefined ? query.page : \n (options.page !== undefined ? options.page : \n (query.cursor ? query.cursor : 1)); // Use cursor as page if specified\n \n params[paginationConfig.pageParamName] = page;\n \n // Add page size parameter\n const perPage = query.per_page || query.perPage || query.limit || \n options.per_page || options.perPage || options.limit || \n paginationConfig.defaultPageSize;\n \n params[paginationConfig.perPageParamName] = perPage;\n break;\n }\n }\n \n return params;\n };\n\n /**\n * Parse API response, allowing for custom response format handling\n * @param response - The raw API response\n * @param query - Original query parameters\n * @param options - Original options\n * @returns Parsed response with standardized format\n */\n const parseResponse = (\n response: any, \n query: Record<string, any> = {}, \n options: Record<string, any> = {}\n ): ParsedResponse => {\n // If a custom parser is provided in config, use it\n if (config.adapter?.parseResponse) {\n return config.adapter.parseResponse(response);\n }\n \n // Handle standard response format\n if (response && response.items) {\n return response;\n }\n \n // Handle case where response is the items array directly\n if (Array.isArray(response)) {\n return {\n items: response,\n meta: { cursor: null, hasNext: false }\n };\n }\n \n // Extract common data fields from the response\n const data = response.data || response.items || response.results || response.content || [];\n const meta = response.meta || response.pagination || response.page || {};\n const total = meta.total || response.total || data.length;\n \n // Initialize metadata object\n const metadata: ResponseMeta = { \n cursor: null,\n hasNext: false,\n total: total\n };\n \n // Process metadata based on strategy\n const strategy = paginationConfig.strategy;\n \n switch (strategy) {\n case 'cursor': {\n // For cursor-based pagination\n if (meta.next || meta.nextCursor || meta.nextPage) {\n metadata.cursor = String(meta.next || meta.nextCursor || meta.nextPage);\n metadata.hasNext = true;\n } else if (meta.hasMore || meta.hasNext) {\n metadata.hasNext = Boolean(meta.hasMore || meta.hasNext);\n metadata.cursor = meta.cursor || \n (meta.page ? String(Number(meta.page) + 1) : null);\n } else {\n // Default determination based on data\n // If items returned equals limit, assume there could be more\n const limit = query.limit || options.limit || paginationConfig.defaultPageSize;\n metadata.hasNext = data.length >= limit;\n \n // Try to generate a cursor based on the last item's ID\n if (metadata.hasNext && data.length > 0) {\n const lastItem = data[data.length - 1];\n metadata.cursor = lastItem.id || lastItem._id || String(data.length);\n }\n }\n break;\n }\n \n case 'offset': {\n // For offset-based pagination\n const offset = Number(query.offset || options.offset || meta.offset || 0);\n const limit = Number(query.limit || options.limit || meta.limit || paginationConfig.defaultPageSize);\n const fetchedItems = data.length;\n \n // If total is available, use it to determine if more items exist\n if (total !== undefined) {\n metadata.hasNext = offset + fetchedItems < total;\n } else {\n // If total is not provided, assume more items if we got a full page\n metadata.hasNext = fetchedItems >= limit;\n }\n \n // Set next cursor/offset\n metadata.cursor = metadata.hasNext ? String(offset + fetchedItems) : null;\n \n // Add offset to metadata\n metadata.offset = offset;\n break;\n }\n \n case 'page': {\n // For page-based pagination\n const page = Number(query.page || options.page || meta.page || meta.current_page || 1);\n const perPage = Number(\n query.per_page || query.perPage || query.limit || \n options.per_page || options.perPage || options.limit || \n meta.per_page || meta.perPage || meta.size || meta.limit || \n paginationConfig.defaultPageSize\n );\n \n // Store page in the metadata\n metadata.page = page;\n \n // If we have total pages info\n const totalPages = Number(meta.totalPages || meta.total_pages || meta.pages || meta.pageCount || 0);\n \n if (totalPages > 0) {\n metadata.hasNext = page < totalPages;\n metadata.pages = totalPages;\n } else if (total !== undefined) {\n // Calculate if more pages exist based on total items\n const calculatedTotalPages = Math.ceil(total / perPage);\n metadata.hasNext = page < calculatedTotalPages;\n metadata.pages = calculatedTotalPages;\n } else {\n // If neither is available, assume more items if we got a full page\n metadata.hasNext = data.length >= perPage;\n }\n \n // Set next cursor to the next page number\n metadata.cursor = metadata.hasNext ? String(page + 1) : null;\n break;\n }\n }\n \n return {\n items: data,\n meta: metadata\n };\n };\n\n return {\n ...base,\n\n create: async (items: any[]): Promise<ParsedResponse> => {\n const url = buildUrl(config.endpoints?.create || '/create');\n const response = await request(url, {\n method: 'POST',\n body: JSON.stringify({ items })\n });\n return parseResponse(response);\n },\n\n read: async (query: Record<string, any> = {}, options: Record<string, any> = {}): Promise<ParsedResponse> => {\n // Filter out pagination and search params from query\n const filteredQuery = { ...query };\n ['cursor', 'page', 'offset', 'limit', 'per_page', 'perPage', 'sort', 'fields', 'search'].forEach(key => {\n delete filteredQuery[key];\n });\n \n // Transform filters\n const filterParams = transformQuery(filteredQuery);\n \n // Get pagination parameters based on configured strategy\n const paginationParams = createPaginationParams(query, options);\n \n // Add additional common parameters\n const additionalParams: Record<string, any> = {};\n \n // Add search parameter if provided\n if (query.search || options.search) {\n additionalParams.search = query.search || options.search;\n }\n \n // Add sort parameter if provided\n if (query.sort || options.sort) {\n additionalParams.sort = query.sort || options.sort;\n }\n \n // Add fields parameter if provided\n if (query.fields || options.fields) {\n additionalParams.fields = query.fields || options.fields;\n }\n \n // Combine all parameters\n const params = {\n ...filterParams,\n ...paginationParams,\n ...additionalParams\n };\n \n // Clean up undefined params\n Object.keys(params).forEach(key => {\n if (params[key] === undefined) {\n delete params[key];\n }\n });\n\n const url = buildUrl(config.endpoints?.list || '/list', params);\n const cacheKey = url.toString();\n\n const cached = getCache(cacheKey);\n if (cached) return cached;\n\n const response = await request(url);\n const parsed = parseResponse(response, query, options);\n setCache(cacheKey, parsed);\n\n return parsed;\n },\n\n update: async (items: any[]): Promise<ParsedResponse> => {\n const url = buildUrl(config.endpoints?.update || '/update');\n const response = await request(url, {\n method: 'PUT',\n body: JSON.stringify({ items })\n });\n return parseResponse(response);\n },\n\n delete: async (ids: string[]): Promise<ParsedResponse> => {\n const url = buildUrl(config.endpoints?.delete || '/delete');\n const response = await request(url, {\n method: 'DELETE',\n body: JSON.stringify({ ids })\n });\n return parseResponse(response);\n },\n\n query: async (query: Record<string, any> = {}, options: Record<string, any> = {}): Promise<ParsedResponse> => {\n // Filter out pagination and search params from query and options\n const filteredQuery = { ...query };\n const filteredOptions = { ...options };\n ['cursor', 'page', 'offset', 'limit', 'per_page', 'perPage', 'sort', 'fields', 'search'].forEach(key => {\n delete filteredQuery[key];\n delete filteredOptions[key];\n });\n \n // Transform filters\n const filterParams = transformQuery(filteredQuery);\n \n // Get pagination parameters\n const paginationParams = createPaginationParams(query, options);\n \n // Add remaining filter options\n const remainingParams = { ...filteredOptions };\n \n // Add search parameter if provided\n if (query.search || options.search) {\n remainingParams.search = query.search || options.search;\n }\n \n // Combine all parameters\n const params = {\n ...filterParams,\n ...paginationParams,\n ...remainingParams\n };\n\n const url = buildUrl(config.endpoints?.list || '/list', params);\n const response = await request(url);\n return parseResponse(response, query, options);\n },\n\n /**\n * Change the pagination strategy\n * @param strategy - New pagination strategy\n * @returns Updated adapter\n */\n setPaginationStrategy: (strategy: PaginationStrategy): void => {\n paginationConfig.strategy = strategy;\n },\n\n /**\n * Get the current pagination configuration\n * @returns Current pagination config\n */\n getPaginationConfig: (): Required<PaginationConfig> => {\n return { ...paginationConfig };\n },\n\n disconnect: () => {\n if (controller) {\n controller.abort();\n controller = null;\n }\n cache.clear();\n urlCache.clear();\n }\n };\n};",
|
|
93
|
-
"// src/core/collection/list-manager/config.ts\nimport { ListManagerConfig } from './types';\n\n/**\n * Default configuration for list manager\n */\nexport const DEFAULT_CONFIG: Partial<ListManagerConfig> = {\n // Rendering options\n renderBufferSize: 5, // Extra items to render above/below viewport\n overscanCount: 3, // Extra items to keep in DOM but invisible\n itemHeight: 48, // Default height for items in pixels\n measureItemsInitially: true, // Whether to measure initial items\n \n // Data loading options\n pageSize: 20, // Number of items per page\n loadThreshold: 0.8, // Load more when scrolled past this fraction\n \n // Performance options\n throttleMs: 16, // Throttle scroll event (ms)\n dedupeItems: true, // Remove duplicate items based on ID\n \n // Item measurement options\n dynamicItemSize: false, // Whether items can have different heights\n\n // Scroll detection strategy\n scrollStrategy: 'scroll' // 'scroll', 'intersection', or 'hybrid'\n};\n\n/**\n * Merges user configuration with default configuration\n * @param config User configuration\n * @returns Merged configuration\n */\nexport function mergeConfig(config: ListManagerConfig): ListManagerConfig {\n return { ...DEFAULT_CONFIG, ...config };\n}\n\n/**\n * Validates configuration and sets up defaults\n * @param config User configuration\n * @returns Validated configuration object\n */\nexport function validateConfig(config: ListManagerConfig): ListManagerConfig {\n if (!config.renderItem || typeof config.renderItem !== 'function') {\n throw new Error('List manager requires a renderItem function');\n }\n \n const mergedConfig = mergeConfig(config);\n \n // Add collection name default if not provided\n if (!mergedConfig.collection) {\n mergedConfig.collection = 'items';\n }\n \n // Set up transform function default\n if (!mergedConfig.transform) {\n mergedConfig.transform = (item) => item;\n }\n \n return mergedConfig;\n}\n\n/**\n * Determines if the list manager should use API mode\n * @param config User configuration\n * @returns Whether to use API mode\n */\nexport function determineApiMode(config: ListManagerConfig): boolean {\n return Boolean(config.baseUrl);\n}\n\n/**\n * Gets all static items from config\n * @param config User configuration\n * @returns Static items array or empty array\n */\nexport function getStaticItems(config: ListManagerConfig): any[] {\n // Support both staticItems (preferred) and items (legacy) properties\n return config.staticItems || config.items || [];\n}",
|
|
94
|
-
"// src/core/collection/list-manager/dom-elements.ts\nimport { ListManagerElements } from './types';\n\n/**\n * Creates and initializes the DOM elements needed by the list manager\n * @param container Container element\n * @returns Initialized DOM elements\n */\nexport function createDomElements(container: HTMLElement): ListManagerElements {\n // Set up container styles if needed\n if (getComputedStyle(container).position === 'static') {\n container.style.position = 'relative';\n }\n \n // Create content container\n const content = document.createElement('div');\n content.style.position = 'relative';\n content.style.width = '100%';\n content.style.willChange = 'transform';\n \n // Create spacer element for scroll height\n const spacer = document.createElement('div');\n spacer.style.position = 'absolute';\n spacer.style.top = '0';\n spacer.style.left = '0';\n spacer.style.width = '1px';\n spacer.style.visibility = 'hidden';\n spacer.style.pointerEvents = 'none';\n \n // Add elements to container\n container.appendChild(content);\n container.appendChild(spacer);\n \n return {\n container,\n content,\n spacer\n };\n}\n\n/**\n * Creates sentinel elements for intersection observer\n * @param elements List manager elements\n * @returns The DOM elements with sentinels added\n */\nexport function createSentinels(elements: ListManagerElements): ListManagerElements {\n // Create top sentinel\n const topSentinel = document.createElement('div');\n topSentinel.className = 'mtrl-list-sentinel mtrl-list-sentinel--top';\n topSentinel.style.position = 'absolute';\n topSentinel.style.top = '0';\n topSentinel.style.left = '0';\n topSentinel.style.width = '100%';\n topSentinel.style.height = '1px';\n topSentinel.style.pointerEvents = 'none';\n topSentinel.style.visibility = 'hidden';\n \n // Create bottom sentinel\n const bottomSentinel = document.createElement('div');\n bottomSentinel.className = 'mtrl-list-sentinel mtrl-list-sentinel--bottom';\n bottomSentinel.style.position = 'absolute';\n bottomSentinel.style.bottom = '0';\n bottomSentinel.style.left = '0';\n bottomSentinel.style.width = '100%';\n bottomSentinel.style.height = '1px';\n bottomSentinel.style.pointerEvents = 'none';\n bottomSentinel.style.visibility = 'hidden';\n \n // Add to DOM\n elements.content.appendChild(topSentinel);\n elements.content.appendChild(bottomSentinel);\n \n return {\n ...elements,\n topSentinel,\n bottomSentinel\n };\n}\n\n/**\n * Updates the position of the bottom sentinel based on total height\n * @param elements List manager elements\n * @param totalHeight Total height of list\n */\nexport function updateSentinelPositions(\n elements: ListManagerElements, \n totalHeight: number\n): void {\n if (elements.bottomSentinel && totalHeight > 0) {\n elements.bottomSentinel.style.top = `${totalHeight - 1}px`;\n }\n}\n\n/**\n * Updates the spacer element height\n * @param elements List manager elements\n * @param totalHeight Total height to set\n */\nexport function updateSpacerHeight(\n elements: ListManagerElements, \n totalHeight: number\n): void {\n elements.spacer.style.height = `${totalHeight}px`;\n}\n\n/**\n * Cleans up DOM elements\n * @param elements List manager elements\n */\nexport function cleanupDomElements(elements: ListManagerElements): void {\n // Remove content element if it exists in DOM\n if (elements.content.parentNode) {\n elements.content.parentNode.removeChild(elements.content);\n }\n \n // Remove spacer element if it exists in DOM\n if (elements.spacer.parentNode) {\n elements.spacer.parentNode.removeChild(elements.spacer);\n }\n \n // Remove sentinel elements if they exist\n if (elements.topSentinel && elements.topSentinel.parentNode) {\n elements.topSentinel.remove();\n }\n \n if (elements.bottomSentinel && elements.bottomSentinel.parentNode) {\n elements.bottomSentinel.remove();\n }\n}",
|
|
95
|
-
"// src/core/collection/list-manager/item-measurement.ts\nimport { ListManagerConfig } from './types';\n\n/**\n * Create item height measurement utilities\n * @param defaultHeight Default height for items with no measurement\n * @returns Object containing measurement functions\n */\nexport const createItemMeasurement = (defaultHeight: number = 48) => {\n // Cache of item heights\n const itemHeights = new Map<string, number>();\n // Cache of precalculated offsets for faster lookups\n const offsetCache = new Map<string, number>();\n // Flag to track if offsets are cached and up-to-date\n let offsetsCached = false;\n // Flag for using uniform heights (optimization)\n let useUniformHeight = true;\n // Track the measurement mode (auto or fixed)\n let dynamicMeasurement = false;\n \n /**\n * Gets the ID of an item, handling different item structures\n * @param item Item to get ID from\n * @returns Item ID or undefined\n */\n const getItemId = (item: any): string | undefined => {\n if (!item) return undefined;\n return item.id || (item.original && item.original.id);\n };\n \n /**\n * Calculate offsets for all items and cache the results\n * This improves scrolling performance significantly\n * @param items Array of all items\n */\n const calculateOffsets = (items: any[]): void => {\n // Skip if already up-to-date\n if (offsetsCached && offsetCache.size >= items.length) {\n return;\n }\n \n // Clear existing cache\n offsetCache.clear();\n \n // Determine if we should use uniform height optimization\n if (useUniformHeight) {\n let runningOffset = 0;\n // Use default height for all items when using uniform height\n for (let i = 0; i < items.length; i++) {\n if (items[i]) {\n const itemId = getItemId(items[i]);\n if (itemId) {\n offsetCache.set(itemId, runningOffset);\n }\n offsetCache.set(`index:${i}`, runningOffset);\n runningOffset += defaultHeight;\n }\n }\n } else {\n // Variable height calculation - more expensive\n let currentOffset = 0;\n for (let i = 0; i < items.length; i++) {\n if (items[i]) {\n const itemId = getItemId(items[i]);\n \n // Store offset by both ID and index for different lookup methods\n if (itemId) {\n offsetCache.set(itemId, currentOffset);\n }\n offsetCache.set(`index:${i}`, currentOffset);\n \n // Get height from cache or use default\n const height = itemId && itemHeights.has(itemId) \n ? itemHeights.get(itemId)! \n : defaultHeight;\n \n currentOffset += height;\n }\n }\n }\n \n offsetsCached = true;\n };\n \n /**\n * Initialize the measurement mode\n * @param config List configuration options\n */\n const initializeMode = (config?: ListManagerConfig): void => {\n if (!config) return;\n \n // Check config to determine measurement mode\n dynamicMeasurement = config.dynamicItemSize === true;\n useUniformHeight = !dynamicMeasurement;\n \n // If explicit itemHeight is provided, ensure we use it\n if (config.itemHeight) {\n defaultHeight = config.itemHeight;\n } else if (!dynamicMeasurement) {\n // When no explicit height is given and not in dynamic mode,\n // we'll still use the default (48px) but measure the first\n // rendered item to get a better default\n }\n };\n \n return {\n /**\n * Setup measurement system with configuration options\n * Should be called on initialization\n * @param config List configuration options\n */\n setup: (config?: ListManagerConfig): void => {\n initializeMode(config);\n },\n \n /**\n * Measures the height of an item using its DOM element\n * @param item Item to measure\n * @param element DOM element of the item\n * @returns The measured height\n */\n measureItemHeight: (item: any, element: HTMLElement): number => {\n if (!element || !item) return defaultHeight;\n \n // Always use default height in uniform mode (except first item if auto-detecting)\n if (useUniformHeight && itemHeights.size > 0) {\n return defaultHeight;\n }\n \n // Get item ID, handling the transformed structure\n const itemId = getItemId(item);\n if (!itemId) return defaultHeight;\n \n // Get element height and check if it's valid\n const height = element.offsetHeight;\n \n // Only apply measurements if:\n // 1. In dynamic mode, OR\n // 2. First item measurement for auto-detection, OR\n // 3. Item has a previously saved height\n if (dynamicMeasurement || itemHeights.size === 0 || itemHeights.has(itemId)) {\n // Only store if height is reasonable\n if (height > 0) {\n const previousHeight = itemHeights.get(itemId);\n const heightChanged = previousHeight !== height;\n \n // If this is the first item and we're auto-detecting height\n if (itemHeights.size === 0 && !dynamicMeasurement) {\n // Set this as the new default height\n defaultHeight = height;\n }\n \n // Store height for this item\n if (heightChanged) {\n itemHeights.set(itemId, height);\n \n // Invalidate offset cache when heights change\n if (offsetsCached && !useUniformHeight) {\n offsetsCached = false;\n }\n }\n }\n }\n \n // For initial auto-detection with no explicit height\n if (itemHeights.size === 1 && !dynamicMeasurement && element.offsetHeight > 0) {\n // First item measured, use its height as default\n return itemHeights.values().next().value;\n }\n \n // Return the appropriate height\n return dynamicMeasurement ? \n (itemHeights.get(itemId) || defaultHeight) : \n defaultHeight;\n },\n \n /**\n * Gets the height of an item, using cached value if available\n * @param item Item to get height for\n * @returns Item height in pixels\n */\n getItemHeight: (item: any): number => {\n // In uniform mode, always use the default height\n if (useUniformHeight) return defaultHeight;\n \n // Handle case when item is undefined\n if (!item) return defaultHeight;\n \n // Get the item ID\n const itemId = getItemId(item);\n if (!itemId) return defaultHeight;\n \n // Use cached height if available\n if (itemHeights.has(itemId)) {\n return itemHeights.get(itemId) || defaultHeight;\n }\n \n // Default to configured item height\n return defaultHeight;\n },\n \n /**\n * Set custom heights for specific items\n * Only applied when in dynamic measurement mode\n * @param heightsMap Map of item IDs to heights\n * @returns Whether any heights were updated\n */\n setItemHeights: (heightsMap: Record<string, number>): boolean => {\n // Don't update heights in uniform mode\n if (useUniformHeight && !dynamicMeasurement) {\n return false;\n }\n \n let updated = false;\n \n for (const [id, height] of Object.entries(heightsMap)) {\n const currentHeight = itemHeights.get(id);\n \n // Only update if different\n if (currentHeight !== height && height > 0) {\n itemHeights.set(id, height);\n updated = true;\n }\n }\n \n // Invalidate offset cache if heights were updated\n if (updated) {\n offsetsCached = false;\n }\n \n return updated;\n },\n \n /**\n * Calculates total height of all items\n * @param items Array of items\n * @returns Total height in pixels\n */\n calculateTotalHeight: (items: any[]): number => {\n // Basic sanity check\n if (!items || items.length === 0) return 0;\n \n const itemCount = items.length;\n \n // In uniform height mode, simple multiplication\n if (useUniformHeight) {\n return itemCount * defaultHeight;\n }\n \n // For dynamic height mode, calculate based on individual items\n let totalHeight = 0;\n \n // Sum up heights of all items\n for (const item of items) {\n if (!item) continue;\n \n const itemId = getItemId(item);\n totalHeight += (itemId && itemHeights.has(itemId)) \n ? itemHeights.get(itemId)! \n : defaultHeight;\n }\n \n return totalHeight;\n },\n \n /**\n * Get offset of an item from the top of the list\n * @param items List of all items\n * @param itemId ID of item to find offset for\n * @returns Offset in pixels or -1 if not found\n */\n getItemOffset: (items: any[], itemId: string): number => {\n // Try to use cached offset first\n if (offsetsCached && offsetCache.has(itemId)) {\n return offsetCache.get(itemId) || 0;\n }\n \n // Calculate offsets if not already cached\n calculateOffsets(items);\n \n // Now we should have the cached value\n if (offsetCache.has(itemId)) {\n return offsetCache.get(itemId) || 0;\n }\n \n // Fall back to direct calculation if item not found in cache\n if (useUniformHeight) {\n // With uniform height, find index and multiply\n const index = items.findIndex(item => getItemId(item) === itemId);\n if (index >= 0) {\n return index * defaultHeight;\n }\n } else {\n // For variable heights, calculate offset manually\n let offset = 0;\n for (const item of items) {\n const currItemId = getItemId(item);\n if (currItemId === itemId) {\n return offset;\n }\n \n const height = (currItemId && itemHeights.has(currItemId)) \n ? itemHeights.get(currItemId)! \n : defaultHeight;\n \n offset += height;\n }\n }\n \n return -1; // Item not found\n },\n \n /**\n * Get the offset at a specific index\n * @param index Index to get offset for\n * @returns Offset in pixels\n */\n getOffsetAtIndex: (index: number): number => {\n // Try to use cached offset first\n const cacheKey = `index:${index}`;\n if (offsetsCached && offsetCache.has(cacheKey)) {\n return offsetCache.get(cacheKey) || 0;\n }\n \n // In uniform height mode, simple calculation\n if (useUniformHeight) {\n return index * defaultHeight;\n }\n \n // For dynamic height, need to calculate from beginning\n return index * defaultHeight;\n },\n \n /**\n * Measures elements that have been marked for measurement\n * Only takes effect in dynamic measurement mode\n * @param container Container element\n * @param items List of all items\n * @returns Whether any heights were updated\n */\n measureMarkedElements: (container: HTMLElement, items: any[]): boolean => {\n // If we're measuring the first item for auto-detection, check all items\n const selector = itemHeights.size === 0 \n ? '.mtrl-list-item' \n : '[data-needs-measurement=\"true\"]';\n \n const elementsToMeasure = container.querySelectorAll(selector);\n let heightsChanged = false;\n \n if (elementsToMeasure.length > 0) {\n // Process first item for auto-detection\n if (itemHeights.size === 0 && elementsToMeasure.length > 0) {\n const firstElement = elementsToMeasure[0] as HTMLElement;\n const height = firstElement.offsetHeight;\n \n if (height > 0) {\n defaultHeight = height; // Use first item's height as default\n heightsChanged = true;\n \n // If not in dynamic mode, we're done after first element\n if (!dynamicMeasurement) {\n return true;\n }\n }\n }\n \n // Process remaining elements if in dynamic mode\n if (dynamicMeasurement) {\n for (let i = 0; i < elementsToMeasure.length; i++) {\n const el = elementsToMeasure[i] as HTMLElement;\n const id = el.getAttribute('data-id');\n \n if (id) {\n const item = items.find(item => getItemId(item) === id);\n \n if (item) {\n const height = el.offsetHeight;\n \n // Only update if height is valid and different\n if (height > 0 && itemHeights.get(id) !== height) {\n itemHeights.set(id, height);\n heightsChanged = true;\n }\n \n // Clear measurement flag\n delete el.dataset.needsMeasurement;\n }\n }\n }\n }\n \n // Invalidate offset cache if heights changed\n if (heightsChanged && !useUniformHeight) {\n offsetsCached = false;\n }\n }\n \n return heightsChanged;\n },\n \n /**\n * Check if offsets are currently cached\n * @returns Whether offsets are cached\n */\n hasCachedOffsets: (): boolean => {\n return offsetsCached;\n },\n \n /**\n * Cache offsets for all items\n * @param items Array of all items\n */\n calculateOffsets,\n \n /**\n * Clears all cached heights and offsets\n */\n clear: (): void => {\n itemHeights.clear();\n offsetCache.clear();\n offsetsCached = false;\n },\n \n /**\n * Gets all cached heights\n * @returns Map of item IDs to heights\n */\n getAllHeights: (): Map<string, number> => {\n return new Map(itemHeights);\n },\n \n /**\n * Gets current default height\n * @returns Current default height\n */\n getDefaultHeight: (): number => {\n return defaultHeight;\n },\n \n /**\n * Checks if using uniform height mode\n * @returns Whether using uniform height\n */\n isUsingUniformHeight: (): boolean => {\n return useUniformHeight;\n }\n };\n};\n\nexport type ItemMeasurement = ReturnType<typeof createItemMeasurement>;",
|
|
96
|
-
"// src/core/collection/list-manager/utils/visibility.ts\nimport { ItemMeasurement } from '../item-measurement';\nimport { VisibleRange, ListManagerConfig } from '../types';\n\n/**\n * Optimized visible range calculation for fixed height items\n * Used as a fast path when all items have the same height\n * \n * @param scrollTop Current scroll position\n * @param itemHeight Fixed item height\n * @param containerHeight Container height\n * @param totalItems Total number of items\n * @param config List manager configuration\n * @returns Visible range with start and end indices\n */\nexport function calculateVisibleRangeOptimized(\n scrollTop: number,\n itemHeight: number,\n containerHeight: number,\n totalItems: number,\n config: ListManagerConfig\n): VisibleRange {\n const { renderBufferSize = 5, overscanCount = 3 } = config;\n \n // Calculate visible range with simple math\n const startIndex = Math.floor(scrollTop / itemHeight);\n const visibleCount = Math.ceil(containerHeight / itemHeight);\n const endIndex = startIndex + visibleCount;\n \n // Add buffer and overscan\n const adjustedStart = Math.max(0, startIndex - renderBufferSize - overscanCount);\n const adjustedEnd = Math.min(totalItems, endIndex + renderBufferSize + overscanCount);\n \n return { start: adjustedStart, end: adjustedEnd };\n}\n\n/**\n * Implements binary search to quickly find the start index for large lists\n * @param scrollTop Current scroll position\n * @param items Array of items\n * @param containerHeight Container height\n * @param itemMeasurement Item measurement instance\n * @param renderBufferSize Size of render buffer\n * @param overscanCount Number of extra items to render\n * @param itemHeight Default item height\n * @returns Visible range with start and end indices\n */\nfunction binarySearchVisibleRange(\n scrollTop: number,\n items: any[],\n containerHeight: number,\n itemMeasurement: ItemMeasurement,\n renderBufferSize: number,\n overscanCount: number,\n itemHeight: number\n): VisibleRange {\n // Binary search to find approximate start position\n let low = 0;\n let high = items.length - 1;\n let bestStartIndex = 0;\n \n // Check if itemMeasurement has cached offsets\n if (typeof itemMeasurement.hasCachedOffsets === 'function' && \n itemMeasurement.hasCachedOffsets()) {\n // Use cached offsets for more efficient lookup\n while (low <= high) {\n const mid = Math.floor((low + high) / 2);\n if (!items[mid]) {\n low = mid + 1;\n continue;\n }\n \n const offset = itemMeasurement.getItemOffset(items, items[mid].id);\n \n if (offset < scrollTop) {\n bestStartIndex = mid;\n low = mid + 1;\n } else {\n high = mid - 1;\n }\n }\n } else {\n // Fall back to estimation using average height\n const allHeights = itemMeasurement.getAllHeights();\n let avgHeight = itemHeight;\n \n if (allHeights.size > 0) {\n // Calculate average without using spread operator on values iterator\n let sum = 0;\n let count = 0;\n allHeights.forEach((height) => {\n sum += height;\n count++;\n });\n avgHeight = sum / count;\n }\n \n // Estimate start index based on average height\n bestStartIndex = Math.floor(scrollTop / avgHeight);\n \n // Refine estimate with linear search in both directions\n let currentOffset = bestStartIndex * avgHeight;\n \n // Search forward if we're underestimating\n while (bestStartIndex < items.length && currentOffset < scrollTop) {\n if (items[bestStartIndex]) {\n currentOffset += itemMeasurement.getItemHeight(items[bestStartIndex]);\n }\n bestStartIndex++;\n }\n \n // Search backward if we're overestimating\n while (bestStartIndex > 0 && currentOffset > scrollTop) {\n bestStartIndex--;\n if (items[bestStartIndex]) {\n currentOffset -= itemMeasurement.getItemHeight(items[bestStartIndex]);\n }\n }\n }\n \n // Ensure bestStartIndex is valid\n bestStartIndex = Math.max(0, Math.min(bestStartIndex, items.length - 1));\n \n // Add buffer and overscan\n const startIndex = Math.max(0, bestStartIndex - renderBufferSize - overscanCount);\n \n // Calculate currentOffset at startIndex\n let currentOffset = 0;\n for (let i = 0; i < startIndex; i++) {\n if (items[i]) {\n currentOffset += itemMeasurement.getItemHeight(items[i]);\n }\n }\n \n // Find end index\n let endIndex = startIndex;\n const endThreshold = scrollTop + containerHeight + (renderBufferSize * itemHeight);\n \n while (endIndex < items.length && currentOffset < endThreshold) {\n if (items[endIndex]) {\n currentOffset += itemMeasurement.getItemHeight(items[endIndex]);\n }\n endIndex++;\n }\n \n // Add overscan to end index\n endIndex = Math.min(items.length, endIndex + overscanCount);\n \n return { start: startIndex, end: endIndex };\n}\n\n/**\n * Determines which items are visible within the viewport\n * @param scrollTop Current scroll position\n * @param items Array of items\n * @param containerHeight Container height\n * @param itemMeasurement Item measurement instance\n * @param config List manager configuration\n * @returns Visible range with start and end indices\n */\nexport function calculateVisibleRange(\n scrollTop: number,\n items: any[],\n containerHeight: number,\n itemMeasurement: ItemMeasurement,\n config: ListManagerConfig\n): VisibleRange {\n const { renderBufferSize = 5, overscanCount = 3, itemHeight = 48 } = config;\n \n // Fast path for empty or very small lists\n if (items.length === 0) {\n return { start: 0, end: 0 };\n }\n \n if (items.length < 10) {\n return { start: 0, end: items.length };\n }\n \n // Fast path for fixed height items\n const allHeights = itemMeasurement.getAllHeights();\n const uniqueHeights = new Set(allHeights.values());\n if (uniqueHeights.size <= 1 && items.length > 20) {\n return calculateVisibleRangeOptimized(\n scrollTop,\n itemHeight,\n containerHeight,\n items.length,\n config\n );\n }\n \n // For large variable height lists, use binary search approach\n if (items.length > 100) {\n return binarySearchVisibleRange(\n scrollTop,\n items,\n containerHeight,\n itemMeasurement,\n renderBufferSize,\n overscanCount,\n itemHeight\n );\n }\n \n // Original implementation for moderate-sized lists\n let currentOffset = 0;\n let startIndex = 0;\n let endIndex = 0;\n \n // Find the first visible item\n for (let i = 0; i < items.length; i++) {\n // Skip undefined items\n if (!items[i]) {\n continue;\n }\n \n const itemHeight = itemMeasurement.getItemHeight(items[i]);\n \n if (currentOffset + itemHeight > scrollTop - (renderBufferSize * config.itemHeight)) {\n startIndex = Math.max(0, i - overscanCount);\n break;\n }\n \n currentOffset += itemHeight;\n }\n \n // Find the last visible item\n currentOffset = 0;\n for (let i = 0; i < items.length; i++) {\n if (!items[i]) continue;\n \n const itemHeight = itemMeasurement.getItemHeight(items[i]);\n currentOffset += itemHeight;\n \n if (currentOffset > scrollTop + containerHeight + (renderBufferSize * config.itemHeight)) {\n endIndex = Math.min(items.length, i + overscanCount);\n break;\n }\n }\n \n // If we reached the end of the list\n if (endIndex === 0) {\n endIndex = items.length;\n }\n \n return { start: startIndex, end: endIndex };\n}\n\n/**\n * Calculate the position for each visible item\n * @param items All items\n * @param visibleRange Visible range with start and end indices\n * @param itemMeasurement Item measurement instance\n * @returns Array of positions with index, item, and offset\n */\nexport function calculateItemPositions(\n items: any[],\n visibleRange: VisibleRange,\n itemMeasurement: ItemMeasurement\n): Array<{ index: number; item: any; offset: number }> {\n // Check if we can use cached offsets\n if (typeof itemMeasurement.hasCachedOffsets === 'function' && \n itemMeasurement.hasCachedOffsets() &&\n typeof itemMeasurement.getOffsetAtIndex === 'function') {\n \n const positions: Array<{ index: number; item: any; offset: number }> = [];\n \n for (let i = visibleRange.start; i < visibleRange.end; i++) {\n if (items[i]) {\n positions.push({\n index: i,\n item: items[i],\n offset: itemMeasurement.getOffsetAtIndex(i)\n });\n }\n }\n \n return positions;\n }\n \n // Fall back to calculating offsets on the fly\n let currentOffset = 0;\n \n // Calculate offsets for items before visible range\n for (let i = 0; i < visibleRange.start; i++) {\n if (items[i]) {\n currentOffset += itemMeasurement.getItemHeight(items[i]);\n }\n }\n \n // Calculate positions for visible items\n const positions: Array<{ index: number; item: any; offset: number }> = [];\n \n for (let i = visibleRange.start; i < visibleRange.end; i++) {\n if (items[i]) {\n positions.push({\n index: i,\n item: items[i],\n offset: currentOffset\n });\n \n currentOffset += itemMeasurement.getItemHeight(items[i]);\n }\n }\n \n return positions;\n}\n\n/**\n * Checks if load threshold has been reached\n * @param scrollTop Current scroll top position\n * @param containerHeight Container height\n * @param totalHeight Total content height\n * @param loadThreshold Load threshold as fraction (0-1)\n * @returns Whether load threshold has been reached\n */\nexport function isLoadThresholdReached(\n scrollTop: number,\n containerHeight: number,\n totalHeight: number,\n loadThreshold: number\n): boolean {\n // Safety check for invalid inputs\n if (totalHeight <= 0 || containerHeight <= 0) return false;\n \n // Calculate the scroll position as a fraction of total height\n const scrollFraction = (scrollTop + containerHeight) / totalHeight;\n \n return scrollFraction > loadThreshold;\n}",
|
|
97
|
-
"// src/core/collection/list-manager/renderer.ts\nimport { ListManagerConfig, ListManagerElements, VisibleRange } from \"./types\";\nimport { RecyclingPool } from \"./utils/recycling\";\nimport { ItemMeasurement } from \"./item-measurement\";\nimport { calculateItemPositions } from \"./utils/visibility\";\n\n/**\n * Creates a renderer for list items\n * @param config List manager configuration\n * @param elements DOM elements used by the list manager\n * @param itemMeasurement Item measurement utilities\n * @param recyclePool Element recycling pool\n * @returns Renderer functions\n */\nexport const createRenderer = (\n config: ListManagerConfig,\n elements: ListManagerElements,\n itemMeasurement: ItemMeasurement,\n recyclePool: RecyclingPool\n) => {\n // State for renderer\n let renderHook: ((item: any, element: HTMLElement) => void) | null = null;\n const itemElements = new Map<string, HTMLElement>();\n let lastVisibleRange: VisibleRange = { start: 0, end: 0 };\n\n // Initialize item measurement system\n if (typeof itemMeasurement.setup === \"function\") {\n itemMeasurement.setup(config);\n }\n\n /**\n * Create a wrapped renderItem function with hooks and optimizations\n * @param item Item to render\n * @param index Index in the list\n * @returns DOM element\n */\n const createItemElement = (item: any, index: number): HTMLElement => {\n // Skip invalid items\n if (!item) {\n console.warn(\"Attempted to render undefined item at index\", index);\n const placeholder = document.createElement(\"div\");\n placeholder.style.height = `${config.itemHeight || 48}px`;\n return placeholder;\n }\n\n // Check for recycled element first\n const recycled = recyclePool.getRecycledElement(item);\n\n // Create or recycle the element using user-provided function\n const element = config.renderItem(item, index, recycled);\n\n if (!element) {\n console.warn(\"renderItem returned null or undefined for item\", item);\n // Create a placeholder element to prevent errors\n const placeholder = document.createElement(\"div\");\n placeholder.style.height = `${config.itemHeight || 48}px`;\n return placeholder;\n }\n\n // Add CSS class for easier selection\n if (!element.classList.contains(\"mtrl-list-item\")) {\n element.classList.add(\"mtrl-list-item\");\n }\n\n // Ensure element has a data-id attribute for selection targeting\n if (item.id && !element.hasAttribute(\"data-id\")) {\n element.setAttribute(\"data-id\", item.id);\n }\n\n // Set type for recycling\n if (item.type) {\n element.dataset.itemType = item.type;\n }\n\n // Add measurement flag if using dynamic sizing or for auto-detecting first item\n if (\n (config.dynamicItemSize === true || itemElements.size === 0) &&\n !element.hasAttribute(\"data-needs-measurement\")\n ) {\n element.dataset.needsMeasurement = \"true\";\n }\n\n // Apply any post-render hooks if available\n if (renderHook) {\n renderHook(item, element);\n }\n\n return element;\n };\n\n /**\n * Determine if we should do a partial update or full rerender\n * @param currentVisibleIds Set of currently visible item IDs\n * @param previousVisibleIds Set of previously visible item IDs\n * @returns Whether to do a partial update\n */\n const shouldUsePartialUpdate = (\n currentVisibleIds: Set<string>,\n previousVisibleIds: Set<string>,\n visibleRange: VisibleRange\n ): boolean => {\n // If range has changed dramatically, do a full rerender\n const rangeDifference = Math.abs(\n visibleRange.end -\n visibleRange.start -\n (lastVisibleRange.end - lastVisibleRange.start)\n );\n\n if (rangeDifference > 10) {\n return false;\n }\n\n // Count how many items are the same\n let sameItemCount = 0;\n\n // Convert Set to array and iterate\n Array.from(currentVisibleIds).forEach((id) => {\n if (previousVisibleIds.has(id)) {\n sameItemCount++;\n }\n });\n\n // If more than 50% of items are the same, do partial update\n return sameItemCount >= currentVisibleIds.size / 2;\n };\n\n return {\n /**\n * Sets a render hook function that will be called for each rendered item\n * @param hookFn Hook function\n */\n setRenderHook: (\n hookFn: (item: any, element: HTMLElement) => void\n ): void => {\n renderHook = hookFn;\n },\n\n /**\n * Renders visible items in the viewport\n * @param items All items\n * @param visibleRange Visible range with start and end indices\n * @returns Map of item IDs to rendered elements\n */\n renderVisibleItems: (\n items: any[],\n visibleRange: VisibleRange\n ): Map<string, HTMLElement> => {\n // Check if content exists\n if (!elements.content) {\n console.warn(\"Cannot render items: content element missing\");\n return new Map();\n }\n\n // Skip rendering if range hasn't changed\n if (\n visibleRange.start === lastVisibleRange.start &&\n visibleRange.end === lastVisibleRange.end\n ) {\n return itemElements;\n }\n\n // Update visible range\n lastVisibleRange = visibleRange;\n\n // Cache sentinel elements if they exist\n const topSentinel = elements.topSentinel;\n const bottomSentinel = elements.bottomSentinel;\n\n // Calculate positions for each visible item\n const positions = calculateItemPositions(\n items,\n visibleRange,\n itemMeasurement\n );\n\n // Get current visible IDs\n const currentVisibleIds = new Set(positions.map((p) => p.item.id));\n const previousVisibleIds = new Set(itemElements.keys());\n\n // Determine if we should do a partial update\n const doPartialUpdate = shouldUsePartialUpdate(\n currentVisibleIds,\n previousVisibleIds,\n visibleRange\n );\n\n if (doPartialUpdate) {\n // Partial update - only add/remove/reposition necessary items\n\n // Find items to add and remove\n const toAdd = positions.filter(\n (p) => !previousVisibleIds.has(p.item.id)\n );\n const toRemove = Array.from(itemElements.entries()).filter(\n ([id]) => !currentVisibleIds.has(id)\n );\n\n // Remove items that are no longer visible\n toRemove.forEach(([id, element]) => {\n recyclePool.recycleElement(element);\n itemElements.delete(id);\n element.remove();\n });\n\n // Add new items\n if (toAdd.length > 0) {\n const fragment = document.createDocumentFragment();\n\n toAdd.forEach(({ index, item, offset }) => {\n const element = createItemElement(item, index);\n\n element.style.position = \"absolute\";\n element.style.top = `${offset}px`;\n element.style.left = \"0\";\n element.style.width = \"100%\";\n\n fragment.appendChild(element);\n itemElements.set(item.id, element);\n });\n\n elements.content.appendChild(fragment);\n }\n\n // Reposition existing items\n positions.forEach(({ item, offset }) => {\n if (itemElements.has(item.id)) {\n const element = itemElements.get(item.id)!;\n if (parseInt(element.style.top, 10) !== offset) {\n element.style.top = `${offset}px`;\n }\n }\n });\n } else {\n // Full rerender - replace all elements\n\n // Save references to existing elements for recycling\n const existingElements = new Map<string, HTMLElement>();\n Array.from(elements.content.children).forEach((child) => {\n if (child === topSentinel || child === bottomSentinel) return;\n\n const id = (child as HTMLElement).getAttribute(\"data-id\");\n if (id) {\n existingElements.set(id, child as HTMLElement);\n child.remove(); // Remove but keep reference\n }\n });\n\n // Create document fragment for batch DOM updates\n const fragment = document.createDocumentFragment();\n\n // Clear the item elements map before adding new elements\n itemElements.clear();\n\n // Render visible items\n positions.forEach(({ index, item, offset }) => {\n let element: HTMLElement;\n\n // Reuse existing element if available\n if (existingElements.has(item.id)) {\n element = existingElements.get(item.id)!;\n existingElements.delete(item.id);\n\n // Update position\n element.style.top = `${offset}px`;\n\n // Check if it needs measurement (first item or dynamic sizing)\n if (config.dynamicItemSize === true || itemElements.size === 0) {\n element.dataset.needsMeasurement = \"true\";\n }\n } else {\n element = createItemElement(item, index);\n\n // Position the element absolutely\n element.style.position = \"absolute\";\n element.style.top = `${offset}px`;\n element.style.left = \"0\";\n element.style.width = \"100%\";\n }\n\n // Add to fragment\n fragment.appendChild(element);\n\n // Store the element reference\n itemElements.set(item.id, element);\n });\n\n // Recycle any remaining elements\n existingElements.forEach((element) => {\n recyclePool.recycleElement(element);\n });\n\n // Batch DOM update\n elements.content.innerHTML = \"\";\n elements.content.appendChild(fragment);\n }\n\n // Add sentinel elements back if they exist\n if (topSentinel && !topSentinel.parentNode) {\n elements.content.insertBefore(topSentinel, elements.content.firstChild);\n }\n\n if (bottomSentinel && !bottomSentinel.parentNode) {\n elements.content.appendChild(bottomSentinel);\n }\n\n return itemElements;\n },\n\n /**\n * Gets all currently rendered item elements\n * @returns Map of item IDs to elements\n */\n getItemElements: (): Map<string, HTMLElement> => {\n return new Map(itemElements);\n },\n };\n};\n\nexport type Renderer = ReturnType<typeof createRenderer>;\n",
|
|
98
|
-
"// src/core/collection/list-manager/scroll-tracker.ts\nimport { ListManagerElements, ListManagerConfig } from \"./types\";\nimport { createSentinels } from \"./dom-elements\";\n\n/**\n * Common interface for scroll tracking strategies\n */\nexport interface ScrollTracker {\n setup(): () => void;\n getScrollTop(): number;\n}\n\n/**\n * Factory to create the appropriate scroll tracker based on strategy\n * @param container Container element\n * @param elements DOM elements\n * @param config List manager configuration\n * @param callbacks Callbacks for scroll events\n * @returns ScrollTracker implementation\n */\nexport function createScrollTracker(\n container: HTMLElement,\n elements: ListManagerElements,\n config: ListManagerConfig,\n callbacks: {\n onScroll: (scrollTop: number) => void;\n onLoadMore: () => void;\n }\n): ScrollTracker {\n const { scrollStrategy = \"scroll\" } = config;\n\n switch (scrollStrategy) {\n case \"intersection\":\n return createIntersectionScrollTracker(container, elements, callbacks);\n\n case \"hybrid\":\n return createHybridScrollTracker(container, elements, callbacks);\n\n case \"scroll\":\n default:\n return createTraditionalScrollTracker(container, config, callbacks);\n }\n}\n\n/**\n * Creates a scroll tracker using traditional scroll events\n */\nfunction createTraditionalScrollTracker(\n container: HTMLElement,\n config: ListManagerConfig,\n callbacks: { onScroll: (scrollTop: number) => void; onLoadMore: () => void }\n): ScrollTracker {\n let scrollRAF: number | null = null;\n let lastScrollTop = 0;\n const scrollThreshold = 5; // Only process changes larger than this\n const throttleMs = config.throttleMs || 16; // Default to 16ms (~60fps)\n\n // Calculate how often we need to process scroll events\n // based on the configured throttle value\n let lastProcessTime = 0;\n\n return {\n /**\n * Set up scroll tracking\n * @returns Cleanup function\n */\n setup: (): (() => void) => {\n // Create optimized handler function\n const scrollHandler = (e: Event): void => {\n const currentScrollTop = (e.target as HTMLElement).scrollTop;\n\n // Skip processing if scroll amount is too small\n if (Math.abs(currentScrollTop - lastScrollTop) < scrollThreshold) {\n return;\n }\n\n // Apply throttling based on time\n const now = Date.now();\n if (now - lastProcessTime < throttleMs) {\n // If we're already waiting for a frame, don't schedule another one\n if (scrollRAF) return;\n\n // Schedule processing on next frame\n scrollRAF = requestAnimationFrame(() => {\n lastScrollTop = currentScrollTop;\n lastProcessTime = Date.now();\n callbacks.onScroll(currentScrollTop);\n scrollRAF = null;\n });\n\n return;\n }\n\n // Process immediately if enough time has passed\n lastScrollTop = currentScrollTop;\n lastProcessTime = now;\n callbacks.onScroll(currentScrollTop);\n };\n\n // Add listener with passive option for better performance\n container.addEventListener(\"scroll\", scrollHandler, { passive: true });\n\n // Return cleanup function\n return () => {\n container.removeEventListener(\"scroll\", scrollHandler);\n\n if (scrollRAF) {\n cancelAnimationFrame(scrollRAF);\n scrollRAF = null;\n }\n };\n },\n\n /**\n * Gets current scroll position\n */\n getScrollTop: (): number => {\n return container.scrollTop;\n },\n };\n}\n\n/**\n * Creates a scroll tracker using IntersectionObserver\n */\nfunction createIntersectionScrollTracker(\n container: HTMLElement,\n elements: ListManagerElements,\n callbacks: { onScroll: (scrollTop: number) => void; onLoadMore: () => void }\n): ScrollTracker {\n let intersectionObserver: IntersectionObserver | null = null;\n let throttledScrollHandler: ((e: Event) => void) | null = null;\n let scrollTimeout: number | null = null;\n let isIntersecting = false;\n\n return {\n /**\n * Set up intersection observer for scroll tracking\n * @returns Cleanup function\n */\n setup: (): (() => void) => {\n // Fall back to scroll events if IntersectionObserver not supported\n if (!(\"IntersectionObserver\" in window)) {\n console.warn(\n \"IntersectionObserver not supported, falling back to scroll events\"\n );\n // Create a minimal config with the required renderItem property\n const minimalConfig: ListManagerConfig = {\n renderItem: () => document.createElement(\"div\"),\n };\n const tracker = createTraditionalScrollTracker(\n container,\n minimalConfig,\n callbacks\n );\n return tracker.setup();\n }\n\n // Add sentinel elements if not already present\n if (!elements.topSentinel || !elements.bottomSentinel) {\n Object.assign(elements, createSentinels(elements));\n }\n\n // Create intersection observer\n intersectionObserver = new IntersectionObserver(\n (entries) => {\n // Early exit if we're already handling an intersection\n if (isIntersecting) return;\n\n isIntersecting = true;\n\n let needsUpdate = false;\n let bottomVisible = false;\n\n entries.forEach((entry) => {\n // Top sentinel handles scrolling up\n if (entry.target === elements.topSentinel && entry.isIntersecting) {\n needsUpdate = true;\n }\n\n // Bottom sentinel handles loading more content\n if (\n entry.target === elements.bottomSentinel &&\n entry.isIntersecting\n ) {\n bottomVisible = true;\n needsUpdate = true;\n }\n });\n\n // Load more content if bottom is visible\n if (bottomVisible) {\n // Debounce load more operations\n if (scrollTimeout !== null) {\n clearTimeout(scrollTimeout);\n }\n\n scrollTimeout = window.setTimeout(() => {\n callbacks.onLoadMore();\n scrollTimeout = null;\n }, 100);\n }\n\n // Update visible items if needed\n if (needsUpdate) {\n callbacks.onScroll(container.scrollTop);\n }\n\n // Reset flag after a short delay\n setTimeout(() => {\n isIntersecting = false;\n }, 100);\n },\n {\n root: container,\n // Use a large margin to trigger earlier\n rootMargin: \"400px 0px 400px 0px\",\n threshold: 0,\n }\n );\n\n // Start observing\n if (elements.topSentinel) {\n intersectionObserver.observe(elements.topSentinel);\n }\n\n if (elements.bottomSentinel) {\n intersectionObserver.observe(elements.bottomSentinel);\n }\n\n // We still need minimal scroll handling for position updates\n // but much less frequent than full scroll handler\n const lightScrollHandler = () => {\n // Only update if we're not already handling an intersection\n if (!isIntersecting) {\n callbacks.onScroll(container.scrollTop);\n }\n };\n\n // Use a throttled scroll event for position updates\n let lastTime = 0;\n throttledScrollHandler = () => {\n const now = Date.now();\n if (now - lastTime < 200) return; // 5fps for background updates\n\n lastTime = now;\n lightScrollHandler();\n };\n\n container.addEventListener(\"scroll\", throttledScrollHandler, {\n passive: true,\n });\n\n // Return cleanup function\n return () => {\n if (intersectionObserver) {\n intersectionObserver.disconnect();\n intersectionObserver = null;\n }\n\n if (throttledScrollHandler) {\n container.removeEventListener(\"scroll\", throttledScrollHandler);\n throttledScrollHandler = null;\n }\n\n if (scrollTimeout !== null) {\n clearTimeout(scrollTimeout);\n scrollTimeout = null;\n }\n };\n },\n\n /**\n * Gets current scroll position\n */\n getScrollTop: (): number => {\n return container.scrollTop;\n },\n };\n}\n\n/**\n * Creates a hybrid scroll tracker using both traditional and intersection approaches\n * This approach is optimized to use the best of both worlds:\n * - Intersection observer for detecting when to load more and large scroll changes\n * - Regular scroll events (at low frequency) for smooth position updates\n */\nfunction createHybridScrollTracker(\n container: HTMLElement,\n elements: ListManagerElements,\n callbacks: { onScroll: (scrollTop: number) => void; onLoadMore: () => void }\n): ScrollTracker {\n // Configure a highly optimized scroll tracker for regular updates\n const scrollConfig: ListManagerConfig = {\n throttleMs: 32, // ~30fps for regular scroll updates\n renderItem: () => document.createElement(\"div\"), // Required field\n };\n\n const scrollTracker = createTraditionalScrollTracker(\n container,\n scrollConfig,\n {\n // Smooth scroll updates from the traditional tracker\n onScroll: callbacks.onScroll,\n // Never trigger load more from scroll events in hybrid mode\n onLoadMore: () => {},\n }\n );\n\n // Configure intersection observer for load-more detection only\n const intersectionTracker = createIntersectionScrollTracker(\n container,\n elements,\n {\n // Minimal scroll updates from intersection events\n onScroll: (scrollTop) => {\n // Only update on major position changes\n const currentScrollTop = container.scrollTop;\n if (Math.abs(currentScrollTop - scrollTop) > 50) {\n callbacks.onScroll(currentScrollTop);\n }\n },\n // Always use intersection observer for load more\n onLoadMore: callbacks.onLoadMore,\n }\n );\n\n let cleanupFunctions: (() => void)[] = [];\n\n return {\n /**\n * Set up both scroll tracking mechanisms\n * @returns Cleanup function\n */\n setup: (): (() => void) => {\n // Use both methods simultaneously\n cleanupFunctions.push(scrollTracker.setup());\n cleanupFunctions.push(intersectionTracker.setup());\n\n return () => {\n cleanupFunctions.forEach((cleanup) => cleanup());\n cleanupFunctions = [];\n };\n },\n\n /**\n * Gets current scroll position\n */\n getScrollTop: (): number => {\n return scrollTracker.getScrollTop();\n },\n };\n}\n",
|
|
99
|
-
"// src/core/collection/list-manager/utils/recycling.ts\n\n/**\n * Creates a recycling pool manager for better performance\n * Reduces DOM creation by reusing elements\n */\nexport const createRecyclingPool = () => {\n const pools = new Map<string, HTMLElement[]>();\n const poolSizeLimit = 50; // Limit pool size to prevent memory leaks\n \n return {\n /**\n * Gets a recycled element of the appropriate type if available\n * @param item Item to get recycled element for\n * @returns Recycled element or null if none available\n */\n getRecycledElement: (item: any): HTMLElement | null => {\n // Get type info from item or use 'default'\n const itemType = item.type || 'default';\n \n if (!pools.has(itemType)) {\n pools.set(itemType, []);\n return null;\n }\n \n const pool = pools.get(itemType)!;\n return pool.length > 0 ? pool.pop()! : null;\n },\n \n /**\n * Adds an element to the recycling pool\n * @param element Element to recycle\n * @param forceRecycle Whether to force recycling even for small elements\n */\n recycleElement: (element: HTMLElement, forceRecycle = false): void => {\n if (!element) return;\n \n // Skip recycling for simple elements unless forced\n if (!forceRecycle && element.innerHTML.length < 100) return;\n \n const itemType = element.dataset.itemType || 'default';\n \n if (!pools.has(itemType)) {\n pools.set(itemType, []);\n }\n \n const pool = pools.get(itemType)!;\n \n // Limit pool size to prevent memory bloat\n if (pool.length < poolSizeLimit) {\n // Clear internal state to prevent memory leaks\n element.style.display = 'none';\n element.style.top = '-9999px';\n \n // Remove any data-* attributes except itemType\n for (const key in element.dataset) {\n if (key !== 'itemType') {\n delete element.dataset[key];\n }\n }\n \n pool.push(element);\n }\n },\n \n /**\n * Get all recycled elements in a pool\n * @param itemType Type of items to get\n * @returns Array of recycled elements\n */\n getPool: (itemType: string): HTMLElement[] => {\n return pools.get(itemType) || [];\n },\n \n /**\n * Clears all recycling pools\n */\n clear: (): void => {\n pools.forEach(pool => {\n pool.length = 0;\n });\n pools.clear();\n },\n \n /**\n * Gets the total number of recycled elements\n * @returns Total count of recycled elements\n */\n getSize: (): number => {\n let count = 0;\n pools.forEach(pool => {\n count += pool.length;\n });\n return count;\n }\n };\n};\n\nexport type RecyclingPool = ReturnType<typeof createRecyclingPool>;",
|
|
100
|
-
"// src/core/collection/list-manager/state.ts\nimport { ListManagerState, ListManagerConfig } from './types';\n\n/**\n * Creates the initial state for a list manager\n * @param config List manager configuration\n * @returns Initialized state object\n */\nexport function createInitialState(config: ListManagerConfig): ListManagerState {\n // Determine API mode\n const useApi = Boolean(config.baseUrl);\n const useStatic = !useApi;\n \n // Get initial static items\n const initialItems = useStatic ? (config.staticItems || config.items || []) : [];\n \n // Get pagination strategy if provided\n const paginationStrategy = config.pagination?.strategy || 'cursor';\n \n // Create more efficient initial state\n return {\n items: initialItems, // Start with initial items for static mode\n visibleItems: [],\n visibleRange: { start: 0, end: 0 },\n totalHeight: 0,\n totalHeightDirty: true,\n itemHeights: new Map<string, number>(),\n loading: false,\n cursor: null,\n page: paginationStrategy === 'page' ? 1 : undefined, // Initialize page for page-based pagination\n paginationStrategy, // Store the pagination strategy\n hasNext: useApi, // If using API, assume there might be data to load\n itemElements: new Map<string, HTMLElement>(),\n scrollTop: 0,\n containerHeight: 0,\n scrollRAF: null,\n resizeRAF: null, // For resize handling\n mounted: false,\n itemCount: initialItems.length, // Initialize with correct count\n useStatic: useStatic,\n renderHook: null\n };\n}\n\n/**\n * Updates the state after a load operation\n * @param state Current state\n * @param newItems New items array\n * @param meta Pagination metadata\n * @param dedupe Whether to deduplicate items\n * @returns Updated state\n */\nexport function updateStateAfterLoad(\n state: ListManagerState,\n newItems: any[],\n meta: { cursor?: string | null; hasNext?: boolean; total?: number; page?: number },\n dedupe: boolean = true\n): Partial<ListManagerState> {\n // Process metadata\n const cursor = meta.cursor ?? null;\n const hasNext = meta.hasNext ?? false;\n \n // Update page based on response or cursor\n let page = state.page;\n if (meta.page !== undefined) {\n page = meta.page;\n } else if (cursor && /^\\d+$/.test(cursor)) {\n // If cursor is numeric and we're using page-based pagination,\n // the current page is (cursor - 1) since cursor points to next page\n page = parseInt(cursor, 10) - 1;\n }\n \n // Important: when using page-based pagination, always use page number from state\n // that was incremented in loadMore unless we got a specific page from the API\n if (state.paginationStrategy === 'page' && meta.page === undefined && !cursor) {\n page = state.page;\n }\n \n // Log for debugging\n // console.log('Updated state after load:', { \n // page, \n // cursor, \n // hasNext, \n // strategy: state.paginationStrategy,\n // newItemsCount: newItems.length\n // });\n \n // Determine if we should replace or append items based on pagination strategy\n let updatedItems: any[];\n \n if (state.paginationStrategy === 'page' && state.page === 1) {\n // For page 1 in page-based pagination, replace all items\n updatedItems = [...newItems];\n } else {\n // Default behavior - append items (possibly with deduplication)\n let itemsToAdd = newItems;\n if (dedupe && newItems.length > 0 && state.items.length > 0) {\n // Use a Set for faster lookup with large arrays\n const existingIds = new Set<string>();\n \n // Only build the id cache if we have items and need to dedupe\n for (let i = 0; i < state.items.length; i++) {\n const item = state.items[i];\n if (item && item.id) {\n existingIds.add(item.id);\n }\n }\n \n // Filter out items that already exist in the collection\n itemsToAdd = newItems.filter(item => item && item.id && !existingIds.has(item.id));\n }\n \n updatedItems = [...state.items, ...itemsToAdd];\n }\n \n // Calculate item count - use meta.total if provided, otherwise use item count\n const itemCount = meta.total !== undefined ? meta.total : updatedItems.length;\n \n // Return only changed properties\n return {\n items: updatedItems,\n cursor,\n page,\n hasNext,\n totalHeightDirty: true,\n itemCount\n };\n}\n\n/**\n * Updates the visible items in state\n * @param state Current state\n * @param visibleItems New visible items array\n * @param visibleRange New visible range\n * @returns Updated state\n */\nexport function updateVisibleItems(\n state: ListManagerState,\n visibleItems: any[],\n visibleRange: { start: number; end: number }\n): Partial<ListManagerState> {\n return {\n visibleItems,\n visibleRange\n };\n}\n\n/**\n * Updates total height in state\n * @param state Current state\n * @param totalHeight New total height\n * @returns Updated state\n */\nexport function updateTotalHeight(\n state: ListManagerState,\n totalHeight: number\n): Partial<ListManagerState> {\n return {\n totalHeight,\n totalHeightDirty: false\n };\n}\n\n/**\n * Updates loading state\n * @param state Current state\n * @param loading New loading state\n * @returns Updated state\n */\nexport function updateLoadingState(\n state: ListManagerState,\n loading: boolean\n): Partial<ListManagerState> {\n return { loading };\n}\n\n/**\n * Resets the state for a refresh operation\n * @param state Current state\n * @param initialItems Initial items array for static mode\n * @returns Reset state\n */\nexport function resetState(\n state: ListManagerState,\n initialItems: any[] = []\n): Partial<ListManagerState> {\n return {\n items: state.useStatic ? [...initialItems] : [],\n visibleItems: [],\n visibleRange: { start: 0, end: 0 },\n itemElements: new Map<string, HTMLElement>(),\n cursor: null,\n page: state.paginationStrategy === 'page' ? 1 : undefined, // Reset page for page-based pagination\n hasNext: !state.useStatic, // Reset hasNext based on data type\n totalHeightDirty: true,\n itemCount: state.useStatic ? initialItems.length : 0\n };\n}\n\n/**\n * Creates load params for the next page based on pagination strategy\n * @param state Current state\n * @param paginationStrategy Optional pagination strategy override\n * @returns Load parameters object\n */\nexport function createLoadParams(\n state: ListManagerState,\n paginationStrategy?: string\n): Record<string, any> {\n const loadParams: Record<string, any> = {};\n \n // Get pagination strategy from either parameter or stored config\n const strategy = paginationStrategy || state.paginationStrategy || 'cursor';\n \n // Handle different pagination strategies\n switch (strategy) {\n case 'page': {\n // For page-based pagination, use page numbers\n if (state.cursor && /^\\d+$/.test(state.cursor)) {\n // If cursor is a number, it's a page number\n loadParams.page = parseInt(state.cursor, 10);\n } else if (state.page !== undefined) {\n // Use stored page number if available\n loadParams.page = state.page;\n } else {\n // If no page info available, default to page 1\n loadParams.page = 1;\n }\n break;\n }\n \n case 'offset': {\n // For offset-based pagination\n if (state.cursor && /^\\d+$/.test(state.cursor)) {\n // If cursor is a number, it's an offset\n loadParams.offset = parseInt(state.cursor, 10);\n } else {\n // Default to zero offset\n loadParams.offset = 0;\n }\n break;\n }\n \n case 'cursor':\n default: {\n // For cursor-based pagination, use cursor directly\n if (state.cursor) {\n loadParams.cursor = state.cursor;\n }\n \n // Add page param if cursor is numeric (might help with some APIs)\n if (state.cursor && /^\\d+$/.test(state.cursor)) {\n loadParams.page = parseInt(state.cursor, 10);\n }\n break;\n }\n }\n \n return loadParams;\n}",
|
|
101
|
-
"// src/core/collection/list-manager/index.ts\nimport { createCollection, COLLECTION_EVENTS } from \"../collection\";\nimport { createRouteAdapter } from \"../adapters/route\";\nimport {\n ListManagerConfig,\n ListManager,\n PaginationMeta,\n LoadStatus,\n ScrollToPosition,\n} from \"./types\";\nimport { validateConfig, determineApiMode, getStaticItems } from \"./config\";\nimport {\n createDomElements,\n updateSpacerHeight,\n cleanupDomElements,\n} from \"./dom-elements\";\nimport { createItemMeasurement } from \"./item-measurement\";\nimport { createRenderer } from \"./renderer\";\nimport { createScrollTracker } from \"./scroll-tracker\";\nimport { createRecyclingPool } from \"./utils/recycling\";\nimport {\n calculateVisibleRange,\n isLoadThresholdReached,\n} from \"./utils/visibility\";\nimport {\n createInitialState,\n updateStateAfterLoad,\n updateVisibleItems as updateStateVisibleItems,\n updateTotalHeight,\n updateLoadingState,\n resetState,\n createLoadParams,\n} from \"./state\";\n\n// Params types\ninterface LoadParams {\n page?: number;\n cursor?: string;\n limit?: number;\n offset?: number;\n [key: string]: any;\n}\n\n/**\n * Creates a list manager for a specific collection\n * @param {string} collection - Collection name\n * @param {HTMLElement} container - Container element\n * @param {ListManagerConfig} config - Configuration options\n * @returns {ListManager} List manager methods\n */\nexport const createListManager = (\n collection: string,\n container: HTMLElement,\n config: ListManagerConfig\n): ListManager => {\n // Add collection name to config\n config.collection = collection;\n\n // Validate and merge configuration\n const validatedConfig = validateConfig(config);\n\n if (!container || !(container instanceof HTMLElement)) {\n throw new Error(\"List manager requires a valid container element\");\n }\n\n // Determine API mode and get static items\n const useApi = determineApiMode(validatedConfig);\n const useStatic = !useApi;\n\n // Get initial static items (only if we're in static mode)\n const initialItems = useStatic ? getStaticItems(validatedConfig) : [];\n\n // Initialize state\n const state = createInitialState(validatedConfig);\n state.useStatic = useStatic;\n\n // Create DOM elements\n const elements = createDomElements(container);\n\n // Initialize tools and utilities\n const itemMeasurement = createItemMeasurement(validatedConfig.itemHeight);\n const recyclePool = createRecyclingPool();\n const renderer = createRenderer(\n validatedConfig,\n elements,\n itemMeasurement,\n recyclePool\n );\n\n // Initialize collection for data management\n const itemsCollection = createCollection({\n transform: validatedConfig.transform,\n initialCapacity: useStatic ? initialItems.length : 50, // Optimize initial capacity\n });\n\n // Initialize route adapter (only if in API mode)\n const adapter = useApi\n ? createRouteAdapter({\n base: validatedConfig.baseUrl!,\n endpoints: {\n list: `/${collection}`,\n },\n headers: {\n \"Content-Type\": \"application/json\",\n },\n cache: true, // Enable caching for API requests\n // Pass the pagination configuration if provided\n pagination: validatedConfig.pagination\n ? {\n strategy: validatedConfig.pagination.strategy || \"cursor\",\n ...validatedConfig.pagination,\n }\n : { strategy: \"cursor\" },\n })\n : null;\n\n // Track cleanup functions\n const cleanupFunctions: (() => void)[] = [];\n\n /**\n * Load items with cursor pagination or from static data\n * @param {LoadParams} params - Query parameters\n * @returns {Promise<Object>} Response with items and pagination metadata\n */\n const loadItems = async (\n params: LoadParams = {}\n ): Promise<{ items: any[]; meta: PaginationMeta }> => {\n try {\n // Update loading state\n Object.assign(state, updateLoadingState(state, true));\n\n // For static data, simulate loading by returning available items\n if (state.useStatic) {\n return {\n items: [...state.items],\n meta: {\n cursor: null,\n hasNext: false, // Static data has no \"next\" page\n },\n };\n }\n\n // For API-connected lists, use the adapter\n if (!adapter) {\n throw new Error(\"Cannot load items: API adapter not initialized\");\n }\n\n // Debug log for parameters being sent to API\n // console.log('Loading items with params:', params, 'Strategy:', state.paginationStrategy);\n\n const response = await adapter.read(params);\n\n // Debug log for response from API\n // console.log('API response:', {\n // items: response.items?.length,\n // meta: response.meta\n // });\n\n // Process items\n const items = Array.isArray(response.items)\n ? response.items.map(validatedConfig.transform!)\n : [];\n\n // Update state with new items\n Object.assign(\n state,\n updateStateAfterLoad(\n state,\n items,\n response.meta,\n validatedConfig.dedupeItems\n )\n );\n\n // For page-based pagination, don't add to collection if it's page 1 (replace instead)\n if (state.paginationStrategy === \"page\" && params.page === 1) {\n // Clear existing collection\n await itemsCollection.clear();\n // Add all items from page 1\n if (items.length > 0) {\n await itemsCollection.add(items);\n }\n } else {\n // Add to collection, skipping items that already exist if deduplication is enabled\n if (validatedConfig.dedupeItems) {\n const existingIds = new Set(\n state.items.map((item) => item.id).filter(Boolean)\n );\n const newItems = items.filter((item) => !existingIds.has(item.id));\n if (newItems.length > 0) {\n await itemsCollection.add(newItems);\n }\n } else {\n // Add all items regardless of duplication\n await itemsCollection.add(items);\n }\n }\n\n // Set totalHeight as dirty to trigger recalculation\n state.totalHeightDirty = true;\n\n // Call afterLoad callback if provided\n if (validatedConfig.afterLoad) {\n // Create a read-only copy of the items array to prevent mutation\n const itemsCopy = [...state.items] as any[];\n\n const loadData: LoadStatus = {\n loading: false,\n hasNext: state.hasNext,\n hasPrev: !!params.cursor || (params.page && params.page > 1),\n items: [...items] as any[], // Use type assertion to satisfy the mutable array requirement\n allItems: itemsCopy,\n };\n\n validatedConfig.afterLoad(loadData);\n }\n\n // For cursor-based pagination, we need to track cursor\n if (state.paginationStrategy === \"cursor\" && response.meta?.cursor) {\n state.cursor = response.meta.cursor;\n } else if (state.paginationStrategy === \"page\" && params.page) {\n state.page = params.page;\n }\n\n // Don't update state.items directly - it should be handled by updateStateAfterLoad\n // state.items = [...state.items, ...items] as any[];\n // state.allItems was incorrectly added and doesn't exist in ListManagerState\n\n return {\n items,\n meta: response.meta,\n };\n } catch (error) {\n console.error(`Error loading ${collection}:`, error);\n // Return empty result on error\n return {\n items: [],\n meta: {\n cursor: null,\n hasNext: false,\n },\n };\n } finally {\n // Reset loading state\n Object.assign(state, updateLoadingState(state, false));\n }\n };\n\n /**\n * Pre-bound update visible items function to avoid recreation\n * @param {number} scrollTop Current scroll position\n */\n const updateVisibleItems = (scrollTop = state.scrollTop): void => {\n if (!state.mounted) return;\n\n // Get current container dimensions if not available\n if (state.containerHeight === 0) {\n state.containerHeight = container.clientHeight;\n }\n\n // Update scroll position\n state.scrollTop = scrollTop;\n\n // Calculate which items should be visible\n const visibleRange = calculateVisibleRange(\n scrollTop,\n state.items,\n state.containerHeight,\n itemMeasurement,\n validatedConfig\n );\n\n // Early return if range hasn't changed\n if (\n visibleRange.start === state.visibleRange.start &&\n visibleRange.end === state.visibleRange.end\n ) {\n return;\n }\n\n // Update state with new visible range\n Object.assign(\n state,\n updateStateVisibleItems(\n state,\n state.items.slice(visibleRange.start, visibleRange.end).filter(Boolean),\n visibleRange\n )\n );\n\n // Ensure offsets are cached for efficient access\n if (typeof itemMeasurement.calculateOffsets === \"function\") {\n itemMeasurement.calculateOffsets(state.items);\n }\n\n // Calculate total height if needed\n if (state.totalHeightDirty) {\n const totalHeight = itemMeasurement.calculateTotalHeight(state.items);\n Object.assign(state, updateTotalHeight(state, totalHeight));\n\n // Update DOM elements with new height\n updateSpacerHeight(elements, totalHeight);\n }\n\n // Render visible items\n renderer.renderVisibleItems(state.items, visibleRange);\n\n // Now measure elements that needed measurement\n const heightsChanged = itemMeasurement.measureMarkedElements(\n elements.content,\n state.items\n );\n\n // Recalculate total height after measurements if needed\n if (heightsChanged) {\n const totalHeight = itemMeasurement.calculateTotalHeight(state.items);\n Object.assign(state, updateTotalHeight(state, totalHeight));\n updateSpacerHeight(elements, totalHeight);\n }\n\n // Check if we need to load more data\n checkLoadMore(scrollTop);\n };\n\n /**\n * Checks if we need to load more data based on scroll position\n * @param {number} scrollTop - Current scroll position\n */\n const checkLoadMore = (scrollTop: number): void => {\n if (state.loading || !state.hasNext) return;\n\n const shouldLoadMore = isLoadThresholdReached(\n scrollTop,\n state.containerHeight,\n state.totalHeight,\n validatedConfig.loadThreshold!\n );\n\n if (shouldLoadMore) {\n loadMore();\n }\n };\n\n /**\n * Loads more items using appropriate pagination strategy\n * @returns {Promise<Object>} Load result\n */\n const loadMore = async (): Promise<{ hasNext: boolean; items: any[] }> => {\n if (state.loading || !state.hasNext) {\n return { hasNext: state.hasNext, items: [] };\n }\n\n // If using static data, there are no more items to load\n if (state.useStatic) {\n return { hasNext: false, items: [] };\n }\n\n // Get pagination strategy from configuration\n const paginationStrategy = validatedConfig.pagination?.strategy || \"cursor\";\n\n // Store the pagination strategy in state for future use\n state.paginationStrategy = paginationStrategy;\n\n // For page-based pagination, we need to increment the page number\n if (paginationStrategy === \"page\") {\n // If we have a numeric cursor, use that to determine the next page\n if (state.cursor && /^\\d+$/.test(state.cursor)) {\n state.page = parseInt(state.cursor, 10);\n }\n // Otherwise increment the current page\n else if (state.page !== undefined) {\n state.page += 1;\n }\n // If no page set yet, start with page 1\n else {\n state.page = 1;\n }\n\n // console.log(`Loading page ${state.page}`);\n }\n\n // Create load params for pagination\n const loadParams = createLoadParams(state, paginationStrategy);\n\n // Add pageSize/limit regardless of strategy\n if (!loadParams.limit && !loadParams.per_page) {\n if (paginationStrategy === \"page\") {\n // For page-based, use perPage parameter\n const perPageParam =\n validatedConfig.pagination?.perPageParamName || \"per_page\";\n loadParams[perPageParam] = validatedConfig.pageSize || 20;\n } else {\n // For other strategies, use limit parameter\n const limitParam =\n validatedConfig.pagination?.limitParamName || \"limit\";\n loadParams[limitParam] = validatedConfig.pageSize || 20;\n }\n }\n\n // Log the params to help with debugging\n // console.log(`Pagination strategy: ${paginationStrategy}, Load params:`, loadParams);\n\n const result = await loadItems(loadParams);\n updateVisibleItems(state.scrollTop);\n\n return {\n hasNext: state.hasNext,\n items: result.items,\n };\n };\n\n /**\n * Refresh the list with the latest data\n * @returns {Promise<void>}\n */\n const refresh = async (): Promise<void> => {\n // Reset state\n Object.assign(state, resetState(state, initialItems));\n\n // Clear recycling pools\n recyclePool.clear();\n\n // Clear collection\n itemsCollection.clear();\n\n // For static data, re-add the original items\n if (state.useStatic && initialItems && initialItems.length > 0) {\n state.items = [...initialItems];\n await itemsCollection.add(initialItems);\n } else {\n // Load initial data from API\n await loadItems();\n }\n\n // Update view\n updateVisibleItems(0); // Reset scroll position to top\n };\n\n /**\n * Scroll to a specific item by ID\n * @param {string} itemId - Item ID to scroll to\n * @param {string} position - Position ('start', 'center', 'end')\n */\n const scrollToItem = (\n itemId: string,\n position: ScrollToPosition = \"start\"\n ): void => {\n // Ensure offsets are cached\n if (typeof itemMeasurement.calculateOffsets === \"function\") {\n itemMeasurement.calculateOffsets(state.items);\n }\n\n const offset = itemMeasurement.getItemOffset(state.items, itemId);\n if (offset === -1) return;\n\n let scrollPosition = offset;\n\n // Adjust position based on requested alignment\n if (position === \"center\") {\n scrollPosition = offset - state.containerHeight / 2;\n } else if (position === \"end\") {\n const itemIndex = state.items.findIndex(\n (item) => item && item.id === itemId\n );\n if (itemIndex === -1) return;\n\n const itemHeight = itemMeasurement.getItemHeight(state.items[itemIndex]);\n scrollPosition = offset - state.containerHeight + itemHeight;\n }\n\n container.scrollTo({\n top: Math.max(0, scrollPosition),\n behavior: \"smooth\",\n });\n };\n\n /**\n * Initialize the virtual list\n */\n const initialize = (): (() => void) => {\n // Set mounted flag\n state.mounted = true;\n\n // Set up scroll tracking with callbacks\n const scrollTracker = createScrollTracker(\n container,\n elements,\n validatedConfig,\n {\n onScroll: updateVisibleItems,\n onLoadMore: loadMore,\n }\n );\n\n const scrollTrackingCleanup = scrollTracker.setup();\n cleanupFunctions.push(scrollTrackingCleanup);\n\n // Subscribe to collection changes\n const unsubscribe = itemsCollection.subscribe(({ event }) => {\n if (event === COLLECTION_EVENTS.CHANGE) {\n // Mark total height as dirty to trigger recalculation\n state.totalHeightDirty = true;\n\n // Use rAF to delay update to next frame for better performance\n requestAnimationFrame(() => {\n updateVisibleItems(state.scrollTop);\n });\n }\n });\n\n cleanupFunctions.push(unsubscribe);\n\n // If using static items, add them to the collection right away\n if (state.useStatic && initialItems && initialItems.length > 0) {\n itemsCollection\n .add(initialItems)\n .then(() => {\n // Force an update after adding items\n requestAnimationFrame(() => {\n updateVisibleItems(state.scrollTop);\n });\n })\n .catch((err) => {\n console.error(\"Error adding static items to collection:\", err);\n });\n } else if (!state.useStatic) {\n // Initial load for API data\n loadItems()\n .then(() => {\n requestAnimationFrame(() => {\n updateVisibleItems(state.scrollTop);\n });\n })\n .catch((err) => {\n console.error(\"Error loading items:\", err);\n });\n }\n\n // Handle resize events with ResizeObserver if available\n if (\"ResizeObserver\" in window) {\n const resizeObserver = new ResizeObserver((entries) => {\n // Only update if container dimensions changed\n for (const entry of entries) {\n if (entry.target === container) {\n const newHeight = container.clientHeight;\n if (newHeight !== state.containerHeight) {\n state.containerHeight = newHeight;\n\n // Debounce resize handling\n if (state.resizeRAF) {\n cancelAnimationFrame(state.resizeRAF);\n }\n\n state.resizeRAF = requestAnimationFrame(() => {\n updateVisibleItems(state.scrollTop);\n state.resizeRAF = null;\n });\n }\n }\n }\n });\n\n resizeObserver.observe(container);\n\n cleanupFunctions.push(() => {\n resizeObserver.disconnect();\n\n if (state.resizeRAF) {\n cancelAnimationFrame(state.resizeRAF);\n state.resizeRAF = null;\n }\n });\n } else {\n // Fallback to window resize event\n let resizeTimeout: number | null = null;\n\n const handleResize = () => {\n // Debounce resize event\n if (resizeTimeout) {\n clearTimeout(resizeTimeout);\n }\n\n resizeTimeout = window.setTimeout(() => {\n const newHeight = container.clientHeight;\n if (newHeight !== state.containerHeight) {\n state.containerHeight = newHeight;\n updateVisibleItems(state.scrollTop);\n }\n\n resizeTimeout = null;\n }, 100);\n };\n\n // Use 'as any' to bypass TypeScript error with window.addEventListener\n (window as any).addEventListener(\"resize\", handleResize, {\n passive: true,\n });\n\n cleanupFunctions.push(() => {\n (window as any).removeEventListener(\"resize\", handleResize);\n\n if (resizeTimeout) {\n clearTimeout(resizeTimeout);\n resizeTimeout = null;\n }\n });\n }\n\n // Return cleanup function\n return () => {\n // Run all cleanup functions\n cleanupFunctions.forEach((fn) => fn());\n cleanupFunctions.length = 0;\n\n // Clear mounted flag\n state.mounted = false;\n };\n };\n\n // Initialize on creation\n const cleanup = initialize();\n\n // Return public API\n return {\n // Data loading methods\n loadItems,\n loadMore,\n refresh,\n\n // View methods\n updateVisibleItems,\n scrollToItem,\n setItemHeights: (heightsMap) => {\n const updated = itemMeasurement.setItemHeights(heightsMap);\n if (updated) {\n state.totalHeightDirty = true;\n updateVisibleItems(state.scrollTop);\n }\n return updated; // Return whether heights were updated\n },\n\n // Collection access\n getCollection: () => itemsCollection,\n\n // State accessors\n getVisibleItems: () => state.visibleItems,\n getAllItems: () => state.items,\n isLoading: () => state.loading,\n hasNextPage: () => state.hasNext,\n isApiMode: () => useApi,\n\n // Hook for external code to affect rendering\n setRenderHook: (hookFn) => {\n renderer.setRenderHook(hookFn);\n // Rerender visible items to apply the hook\n updateVisibleItems(state.scrollTop);\n },\n\n // Cleanup method\n destroy: () => {\n cleanup();\n\n // Clear all data\n itemsCollection.clear();\n\n // Clear cached state\n if (typeof itemMeasurement.clear === \"function\") {\n itemMeasurement.clear();\n }\n\n // Empty recycling pools\n recyclePool.clear();\n\n // Clear DOM content\n if (elements.content) {\n elements.content.innerHTML = \"\";\n }\n\n // Remove DOM elements\n cleanupDomElements(elements);\n\n // Disconnect adapter if exists\n if (adapter && typeof adapter.disconnect === \"function\") {\n adapter.disconnect();\n }\n },\n };\n};\n\n/**\n * Utility to create a cursor-based page loader\n * @param list List interface\n * @param listManager List manager instance\n * @param config Page loader configuration\n * @returns Page loader interface\n */\nexport const createPageLoader = (\n list: { setItems: (items: any[]) => void },\n listManager: ReturnType<typeof createListManager>,\n config: { onLoad?: (status: LoadStatus) => void; pageSize?: number } = {}\n) => {\n let currentCursor: string | null = null;\n let loading = false;\n const pageHistory: (string | null)[] = [];\n const pageSize = config.pageSize || 20;\n\n // Use a throttle to prevent rapid load calls\n let loadThrottleTimer: number | null = null;\n const throttleMs = 200; // Minimum time between load operations\n\n const load = async (cursor = null, addToHistory = true) => {\n // Prevent concurrent load operations\n if (loading) return;\n\n // Apply throttling to prevent rapid load operations\n if (loadThrottleTimer !== null) {\n clearTimeout(loadThrottleTimer);\n }\n\n loading = true;\n config.onLoad?.({\n loading: true,\n hasNext: false,\n hasPrev: pageHistory.length > 0,\n items: [],\n allItems: listManager.getAllItems(),\n });\n\n try {\n const result = await listManager.loadItems({\n limit: pageSize,\n cursor,\n });\n\n if (addToHistory && cursor) {\n pageHistory.push(currentCursor);\n }\n currentCursor = result.meta.cursor;\n\n // Update the list with the new items\n list.setItems(result.items);\n\n // Notify about load completion\n config.onLoad?.({\n loading: false,\n hasNext: result.meta.hasNext,\n hasPrev: pageHistory.length > 0,\n items: result.items,\n allItems: listManager.getAllItems(),\n });\n\n return {\n hasNext: result.meta.hasNext,\n hasPrev: pageHistory.length > 0,\n };\n } finally {\n // Set timer to prevent rapid consecutive loads\n loadThrottleTimer = window.setTimeout(() => {\n loading = false;\n loadThrottleTimer = null;\n }, throttleMs);\n }\n };\n\n const loadNext = () => load(currentCursor);\n\n const loadPrev = () => {\n const previousCursor = pageHistory.pop();\n return load(previousCursor, false);\n };\n\n return {\n load,\n loadNext,\n loadPrev,\n get loading() {\n return loading;\n },\n get cursor() {\n return currentCursor;\n },\n };\n};\n\n/**\n * Transform functions for common collections\n */\nexport const transforms = {\n track: (track) => ({\n id: track._id,\n headline: track.title || \"Untitled\",\n supportingText: track.artist || \"Unknown Artist\",\n meta: track.year?.toString() || \"\",\n }),\n\n playlist: (playlist) => ({\n id: playlist._id,\n headline: playlist.name || \"Untitled Playlist\",\n supportingText: `${playlist.tracks?.length || 0} tracks`,\n meta: playlist.creator || \"\",\n }),\n\n country: (country) => ({\n id: country._id,\n headline: country.name || country.code,\n supportingText: country.continent || \"\",\n meta: country.code || \"\",\n }),\n};\n\n// Re-export types\nexport * from \"./types\";\n",
|
|
102
|
-
"// src/core/collection/index.ts\n\n// Export collection factory and types\nexport { createCollection } from './collection';\nexport { COLLECTION_EVENTS } from './collection';\nexport { OPERATORS as COLLECTION_OPERATORS } from './collection';\n\nexport type { \n CollectionItem, \n CollectionConfig, \n CollectionEvent, \n CollectionObserver,\n Collection\n} from './collection';\n\n// Export list manager\nexport { \n createListManager, \n transforms \n} from './list-manager';\n\nexport type { \n ListManager,\n ListManagerConfig,\n ListItem,\n List,\n PageLoader,\n PageLoaderConfig,\n LoadStatus,\n PaginationMeta\n} from './list-manager';\n\n// Export adapters\nexport { \n createBaseAdapter, \n OPERATORS \n} from './adapters/base';\n\nexport type { \n BaseAdapter, \n BaseAdapterConfig,\n Operator\n} from './adapters/base';\n\nexport { \n createRouteAdapter \n} from './adapters/route';\n\nexport type { \n RouteAdapterConfig,\n ParsedResponse\n} from './adapters/route';",
|
|
103
67
|
"/**\n * Canvas drawing utilities\n * Provides common drawing functions for canvas operations\n */\n\n/**\n * Creates a rounded rectangle path\n * @param ctx - Canvas 2D rendering context\n * @param x - X coordinate\n * @param y - Y coordinate\n * @param width - Rectangle width\n * @param height - Rectangle height\n * @param radius - Corner radius (can be a number or array of radii)\n */\nexport const createRoundedRectPath = (\n ctx: CanvasRenderingContext2D,\n x: number,\n y: number,\n width: number,\n height: number,\n radius: number | [number, number, number, number]\n): void => {\n if (width < 0 || height < 0) return;\n \n // Handle single radius or array of radii [topLeft, topRight, bottomRight, bottomLeft]\n const radii = typeof radius === 'number' \n ? [radius, radius, radius, radius] \n : radius;\n \n const [tl, tr, br, bl] = radii;\n \n ctx.beginPath();\n ctx.moveTo(x + tl, y);\n ctx.lineTo(x + width - tr, y);\n ctx.quadraticCurveTo(x + width, y, x + width, y + tr);\n ctx.lineTo(x + width, y + height - br);\n ctx.quadraticCurveTo(x + width, y + height, x + width - br, y + height);\n ctx.lineTo(x + bl, y + height);\n ctx.quadraticCurveTo(x, y + height, x, y + height - bl);\n ctx.lineTo(x, y + tl);\n ctx.quadraticCurveTo(x, y, x + tl, y);\n ctx.closePath();\n};\n\n/**\n * Draws a filled rounded rectangle\n * @param ctx - Canvas 2D rendering context\n * @param x - X coordinate\n * @param y - Y coordinate\n * @param width - Rectangle width\n * @param height - Rectangle height\n * @param radius - Corner radius\n * @param fillStyle - Fill color/style\n */\nexport const fillRoundedRect = (\n ctx: CanvasRenderingContext2D,\n x: number,\n y: number,\n width: number,\n height: number,\n radius: number | [number, number, number, number],\n fillStyle?: string | CanvasGradient | CanvasPattern\n): void => {\n ctx.save();\n if (fillStyle) ctx.fillStyle = fillStyle;\n createRoundedRectPath(ctx, x, y, width, height, radius);\n ctx.fill();\n ctx.restore();\n};\n\n/**\n * Creates a clipping region with rounded corners\n * @param ctx - Canvas 2D rendering context\n * @param x - X coordinate\n * @param y - Y coordinate\n * @param width - Rectangle width\n * @param height - Rectangle height\n * @param radius - Corner radius\n * @returns Function to restore the canvas state\n */\nexport const clipRoundedRect = (\n ctx: CanvasRenderingContext2D,\n x: number,\n y: number,\n width: number,\n height: number,\n radius: number | [number, number, number, number]\n): (() => void) => {\n ctx.save();\n createRoundedRectPath(ctx, x, y, width, height, radius);\n ctx.clip();\n \n // Return restore function\n return () => ctx.restore();\n};\n\n/**\n * Draws a rounded rectangle with different left and right radii\n * Useful for track segments that connect to other elements\n * @param ctx - Canvas 2D rendering context\n * @param x - X coordinate\n * @param y - Y coordinate\n * @param width - Rectangle width\n * @param height - Rectangle height\n * @param leftRadius - Left side radius\n * @param rightRadius - Right side radius\n * @param fillStyle - Fill color/style\n */\nexport const fillRoundedRectLR = (\n ctx: CanvasRenderingContext2D,\n x: number,\n y: number,\n width: number,\n height: number,\n leftRadius: number,\n rightRadius: number,\n fillStyle?: string | CanvasGradient | CanvasPattern\n): void => {\n if (width < 0 || height < 0) return;\n \n ctx.save();\n if (fillStyle) ctx.fillStyle = fillStyle;\n \n ctx.beginPath();\n // Top edge\n ctx.moveTo(x + leftRadius, y);\n ctx.lineTo(x + width - rightRadius, y);\n // Top right corner\n ctx.quadraticCurveTo(x + width, y, x + width, y + rightRadius);\n // Right edge\n ctx.lineTo(x + width, y + height - rightRadius);\n // Bottom right corner\n ctx.quadraticCurveTo(x + width, y + height, x + width - rightRadius, y + height);\n // Bottom edge\n ctx.lineTo(x + leftRadius, y + height);\n // Bottom left corner\n ctx.quadraticCurveTo(x, y + height, x, y + height - leftRadius);\n // Left edge\n ctx.lineTo(x, y + leftRadius);\n // Top left corner\n ctx.quadraticCurveTo(x, y, x + leftRadius, y);\n ctx.closePath();\n \n ctx.fill();\n ctx.restore();\n};\n\n/**\n * Clears a canvas with optional background color\n * @param ctx - Canvas 2D rendering context\n * @param width - Canvas width\n * @param height - Canvas height\n * @param backgroundColor - Optional background color\n */\nexport const clearCanvas = (\n ctx: CanvasRenderingContext2D,\n width: number,\n height: number,\n backgroundColor?: string\n): void => {\n if (backgroundColor) {\n ctx.fillStyle = backgroundColor;\n ctx.fillRect(0, 0, width, height);\n } else {\n ctx.clearRect(0, 0, width, height);\n }\n}; ",
|
|
104
68
|
"/**\n * Easing function for smooth animations (Material Design standard)\n * Implements cubic-bezier(0.4, 0, 0.2, 1)\n * \n * @param t Progress value between 0 and 1\n * @returns Eased progress value between 0 and 1\n */\nexport const easeOutCubic = (t: number): number => {\n // Material Design standard easing curve\n // This is an approximation of cubic-bezier(0.4, 0, 0.2, 1)\n // For exact match, we need to solve the cubic bezier\n const p1x = 0.4, p1y = 0;\n const p2x = 0.2, p2y = 1;\n \n // Newton-Raphson method to solve for the bezier curve\n let x = t;\n for (let i = 0; i < 4; i++) {\n const cx = 3 * p1x;\n const bx = 3 * (p2x - p1x) - cx;\n const ax = 1 - cx - bx;\n \n const x2 = x * x;\n const x3 = x2 * x;\n \n const f = ax * x3 + bx * x2 + cx * x - t;\n const df = 3 * ax * x2 + 2 * bx * x + cx;\n \n if (Math.abs(f) < 0.00001) break;\n x = x - f / df;\n }\n \n // Calculate y from x\n const cy = 3 * p1y;\n const by = 3 * (p2y - p1y) - cy;\n const ay = 1 - cy - by;\n \n const x2 = x * x;\n const x3 = x2 * x;\n \n return ay * x3 + by * x2 + cy * x;\n};\n\n/**\n * Standard Material Design animation durations\n */\nexport const ANIMATION_DURATIONS = {\n SHORT: 100,\n MEDIUM: 225,\n LONG: 375,\n EXTRA_LONG: 500\n};\n\n/**\n * Common easing functions\n */\nexport const EASING_FUNCTIONS = {\n linear: (t: number) => t,\n easeIn: (t: number) => t * t,\n easeOut: (t: number) => t * (2 - t),\n easeInOut: (t: number) => t < 0.5 ? 2 * t * t : -1 + (4 - 2 * t) * t,\n materialStandard: easeOutCubic\n}; ",
|
|
105
69
|
"import { getThemeColor } from '../utils';\n\n/**\n * Common canvas context interface used by components\n */\nexport interface CanvasContext {\n canvas: HTMLCanvasElement;\n ctx: CanvasRenderingContext2D;\n width: number;\n height: number;\n pixelRatio: number;\n}\n\n/**\n * Creates and initializes a canvas context with proper pixel ratio handling\n * \n * @param canvas - The canvas element\n * @param width - Canvas width\n * @param height - Canvas height\n * @returns Initialized canvas context\n */\nexport const createCanvasContext = (\n canvas: HTMLCanvasElement, \n width: number, \n height: number\n): CanvasContext => {\n const pixelRatio = window.devicePixelRatio || 1;\n const ctx = canvas.getContext('2d')!;\n \n // Set display size\n canvas.style.width = `${width}px`;\n canvas.style.height = `${height}px`;\n \n // Set actual size with pixel ratio\n canvas.width = Math.round(width * pixelRatio);\n canvas.height = Math.round(height * pixelRatio);\n \n // Scale context to match pixel ratio\n ctx.setTransform(1, 0, 0, 1, 0, 0);\n ctx.scale(pixelRatio, pixelRatio);\n \n return {\n canvas,\n ctx,\n width,\n height,\n pixelRatio\n };\n};\n\n/**\n * Updates canvas dimensions while preserving pixel ratio\n * \n * @param context - The canvas context to update\n * @param width - New width\n * @param height - New height\n */\nexport const updateCanvasDimensions = (\n context: CanvasContext,\n width: number,\n height: number\n): void => {\n const { canvas, ctx, pixelRatio } = context;\n \n // Update display size\n canvas.style.width = `${width}px`;\n canvas.style.height = `${height}px`;\n \n // Update actual size with pixel ratio\n canvas.width = Math.round(width * pixelRatio);\n canvas.height = Math.round(height * pixelRatio);\n \n // Update context dimensions\n context.width = width;\n context.height = height;\n \n // Reapply scale transform\n ctx.setTransform(1, 0, 0, 1, 0, 0);\n ctx.scale(pixelRatio, pixelRatio);\n};\n\n/**\n * Tries to initialize a canvas with retry mechanism\n * \n * @param initFn - Function that performs initialization\n * @param onSuccess - Optional callback on successful initialization\n * @returns Whether initialization was immediately successful\n */\nexport const initializeCanvasWithRetry = (\n initFn: () => boolean,\n onSuccess?: () => void\n): boolean => {\n // Try to initialize immediately\n if (initFn()) {\n onSuccess?.();\n return true;\n }\n \n // Retry with requestAnimationFrame\n requestAnimationFrame(() => {\n if (initFn()) {\n onSuccess?.();\n } else {\n // Final retry with setTimeout\n setTimeout(() => {\n if (initFn()) {\n onSuccess?.();\n }\n }, 100);\n }\n });\n \n return false;\n};\n\n/**\n * Creates a theme observer that triggers a callback on theme changes\n * \n * @param color - The theme color to observe (e.g., 'primary', 'secondary')\n * @param callback - Function to call when theme changes\n * @returns Cleanup function or null\n */\nexport const createCanvasThemeObserver = (\n color: string,\n callback: () => void\n): (() => void) | null => {\n const cleanup = getThemeColor(`sys-color-${color}`, { \n onThemeChange: callback \n });\n return typeof cleanup === 'function' ? cleanup : null;\n};\n\n/**\n * Standard animation frame manager for components\n */\nexport class AnimationFrameManager {\n private animationId: number | null = null;\n \n /**\n * Starts an animation loop\n * @param callback - Animation callback receiving timestamp\n */\n start(callback: (timestamp: number) => void): void {\n this.stop();\n \n const animate = (timestamp: number) => {\n callback(timestamp);\n this.animationId = requestAnimationFrame(animate);\n };\n \n this.animationId = requestAnimationFrame(animate);\n }\n \n /**\n * Stops the animation loop\n */\n stop(): void {\n if (this.animationId !== null) {\n cancelAnimationFrame(this.animationId);\n this.animationId = null;\n }\n }\n \n /**\n * Whether animation is currently running\n */\n get isRunning(): boolean {\n return this.animationId !== null;\n }\n}\n\n/**\n * Manages multiple cleanup functions for components\n */\nexport class CleanupManager {\n private cleanupFunctions: Array<() => void> = [];\n \n /**\n * Adds a cleanup function\n */\n add(cleanup: (() => void) | null | undefined): void {\n if (cleanup) {\n this.cleanupFunctions.push(cleanup);\n }\n }\n \n /**\n * Runs all cleanup functions and clears the list\n */\n cleanup(): void {\n this.cleanupFunctions.forEach(fn => fn());\n this.cleanupFunctions = [];\n }\n}\n\n/**\n * Creates a standard canvas element with common styles\n * \n * @param className - CSS class name for the canvas\n * @param additionalStyles - Additional styles to apply\n * @returns Canvas element\n */\nexport const createStyledCanvas = (\n className: string,\n additionalStyles: Partial<CSSStyleDeclaration> = {}\n): HTMLCanvasElement => {\n const canvas = document.createElement('canvas');\n canvas.className = className;\n \n Object.assign(canvas.style, {\n position: 'absolute',\n width: '100%',\n height: '100%',\n pointerEvents: 'none',\n ...additionalStyles\n });\n \n return canvas;\n}; ",
|
|
106
70
|
"/**\n * Canvas utilities for high-performance rendering\n * Provides tools for drawing, animation, and resize handling\n */\n\nexport * from './drawing';\nexport * from './resize';\nexport * from './animation';\nexport * from './utils'; ",
|
|
107
|
-
"// src/core/index.ts\n/**\n * @module core\n * @description Core utilities and building blocks for the component system\n
|
|
71
|
+
"// src/core/index.ts\n/**\n * @module core\n * @description Core utilities and building blocks for the component system\n *\n * This module provides the foundational elements used to build components\n * in a functional, composable way.\n *\n * @packageDocumentation\n */\n\n// Re-export core modules by category\n// This makes imports cleaner for library users while maintaining an organized codebase\n\n// 1. Component composition system\nexport * from \"./compose\";\n\n// 2. DOM manipulation utilities\nexport * from \"./dom\";\n\n// 3. State management\n// Explicit re-exports to avoid ambiguity\nexport { createEmitter } from \"./state/emitter\";\nexport type { Emitter, EventCallback } from \"./state/emitter\";\n\nexport { createStore, loggingMiddleware, deriveFiltered } from \"./state/store\";\nexport type {\n Store,\n StoreOptions,\n Selector,\n Computation,\n Updater,\n} from \"./state/store\";\n\nexport { createLifecycle } from \"./state/lifecycle\";\nexport type { LifecycleManager, LifecycleManagers } from \"./state/lifecycle\";\n\nexport { createDisabled } from \"./state/disabled\";\nexport type { DisabledState } from \"./state/disabled\";\n\n// Renamed to avoid conflict with DOM's createEventManager\nexport { createEventManager as createStateEventManager } from \"./state/events\";\nexport type { EventManagerState } from \"./state/events\";\n\n\n// Canvas utilities\nexport * from \"./canvas\";\n\n// Config and constants\nexport {\n PREFIX,\n COMPONENTS,\n STATES,\n classNames,\n getComponentClass,\n getModifierClass,\n getElementClass,\n} from \"./config\";\n\n// Export global configuration system\nexport {\n setComponentDefaults,\n getComponentDefaults,\n setGlobalDefaults,\n clearGlobalDefaults,\n type ComponentConfigMap,\n} from \"./config/global\";\n\n// Utility functions\nexport {\n when,\n classNames as joinClasses,\n isObject,\n byString,\n hasTouchSupport,\n normalizeEvent,\n throttle,\n debounce,\n once,\n getInheritedBackground,\n} from \"./utils\";\n\n// Type re-exports for better developer experience\nexport type {\n ThemeConfig,\n ComponentConfig,\n ThemedComponentConfig,\n VariantComponentConfig,\n StateComponentConfig,\n} from \"./config\";\n\nexport type { NormalizedEvent } from \"./utils/mobile\";\n\n// Re-export useful TypeScript types\n",
|
|
108
72
|
"// src/components/button/api.ts\nimport { ButtonComponent } from \"./types\";\nimport { addClass, removeClass } from \"../../core\";\nimport { ProgressComponent } from \"../progress/types\";\n\n/**\n * API configuration options for button component\n * @category Components\n * @internal\n */\ninterface ApiOptions {\n disabled: {\n enable: () => void;\n disable: () => void;\n isDisabled: () => boolean;\n };\n lifecycle: {\n destroy: () => void;\n };\n}\n\n/**\n * Component with required elements and methods for API enhancement\n * @category Components\n * @internal\n */\ninterface ComponentWithElements {\n element: HTMLElement;\n text: {\n setText: (content: string) => void;\n getText: () => string;\n getElement: () => HTMLElement | null;\n };\n icon: {\n setIcon: (html: string) => void;\n getIcon: () => string;\n getElement: () => HTMLElement | null;\n };\n getClass: (name: string) => string;\n componentName?: string;\n on?: (event: string, handler: Function) => ComponentWithElements;\n off?: (event: string, handler: Function) => ComponentWithElements;\n addClass?: (...classes: string[]) => ComponentWithElements;\n\n // Progress methods (if withProgress was applied)\n progress?: ProgressComponent;\n showProgress?: () => Promise<ComponentWithElements>;\n showProgressSync?: () => ComponentWithElements;\n hideProgress?: () => Promise<ComponentWithElements>;\n hideProgressSync?: () => ComponentWithElements;\n setProgress?: (value: number) => Promise<ComponentWithElements>;\n setProgressSync?: (value: number) => ComponentWithElements;\n setIndeterminate?: (indeterminate: boolean) => Promise<ComponentWithElements>;\n setIndeterminateSync?: (indeterminate: boolean) => ComponentWithElements;\n setLoading?: (\n loading: boolean,\n text?: string\n ) => Promise<ComponentWithElements>;\n setLoadingSync?: (loading: boolean, text?: string) => ComponentWithElements;\n}\n\n/**\n * Enhances a button component with API methods.\n * This follows the higher-order function pattern to add public API methods\n * to the component, making them available to the end user.\n *\n * @param {ApiOptions} options - API configuration options\n * @returns {Function} Higher-order function that adds API methods to component\n * @category Components\n * @internal This is an internal utility for the Button component\n */\nexport const withAPI =\n ({ disabled, lifecycle }: ApiOptions) =>\n (component: ComponentWithElements): ButtonComponent => {\n // Create wrapper objects that match the expected API interfaces\n const textAPI = {\n setText: (content: string) => {\n component.text.setText(content);\n return textAPI;\n },\n getText: () => component.text.getText(),\n getElement: () => component.text.getElement(),\n };\n\n const iconAPI = {\n setIcon: (html: string) => {\n component.icon.setIcon(html);\n return iconAPI;\n },\n getIcon: () => component.icon.getIcon(),\n getElement: () => component.icon.getElement(),\n };\n\n const buttonComponent: ButtonComponent = {\n element: component.element as HTMLButtonElement,\n text: textAPI,\n icon: iconAPI,\n disabled,\n lifecycle,\n getClass: component.getClass,\n\n on: (event: string, handler: Function) => {\n if (component.on) {\n component.on(event, handler);\n }\n return buttonComponent;\n },\n\n off: (event: string, handler: Function) => {\n if (component.off) {\n component.off(event, handler);\n }\n return buttonComponent;\n },\n\n addClass: (...classes: string[]) => {\n if (component.addClass) {\n component.addClass(...classes);\n } else {\n addClass(component.element, ...classes);\n }\n return buttonComponent;\n },\n\n /**\n * Gets the button's value attribute\n * @returns Current value of the button\n */\n getValue: () => (component.element as HTMLButtonElement).value,\n\n /**\n * Sets the button's value attribute\n * @param value - New value to set\n * @returns Button component for method chaining\n */\n setValue(value: string) {\n (component.element as HTMLButtonElement).value = value;\n return buttonComponent;\n },\n\n /**\n * Enables the button, making it interactive\n * @returns Button component for method chaining\n */\n enable() {\n disabled.enable();\n return buttonComponent;\n },\n\n /**\n * Disables the button, making it non-interactive\n * @returns Button component for method chaining\n */\n disable() {\n disabled.disable();\n return buttonComponent;\n },\n\n /**\n * Sets the button's text content\n * @param content - Text content to display\n * @returns Button component for method chaining\n */\n setText(content: string) {\n component.text.setText(content);\n buttonComponent.updateCircularStyle();\n return buttonComponent;\n },\n\n /**\n * Gets the button's current text content\n * @returns Current text content\n */\n getText() {\n return component.text.getText();\n },\n\n /**\n * Checks if the button has an icon\n * @returns True if the button has an icon, false otherwise\n */\n hasIcon() {\n const iconElement = component.icon.getElement();\n return (\n !!iconElement &&\n !!iconElement.innerHTML.trim() &&\n !!iconElement.parentNode\n );\n },\n\n /**\n * Sets the button's icon HTML content\n * If empty string is provided, completely removes the icon\n * @param icon - HTML string for the icon, or empty string to remove\n * @returns Button component for method chaining\n */\n setIcon(icon: string) {\n const compName = component.componentName || \"button\";\n const buttonClass = component.getClass(compName);\n if (!icon) {\n // Remove the icon if it exists\n const iconElement = component.icon.getElement();\n if (iconElement && iconElement.parentNode) {\n iconElement.parentNode.removeChild(iconElement);\n\n // Override getElement to return null for removed icon\n component.icon.getElement = () => null;\n component.icon.getIcon = () => \"\";\n }\n\n component.element.classList.remove(`${buttonClass}--icon`);\n } else if (!buttonComponent.hasIcon()) {\n // Create new icon element when re-adding\n const newIconElement = document.createElement(\"span\");\n newIconElement.className = `${component.getClass(\"button-icon\")}`;\n newIconElement.innerHTML = icon;\n\n // Insert at the beginning of button\n if (component.element.firstChild) {\n component.element.insertBefore(\n newIconElement,\n component.element.firstChild\n );\n } else {\n component.element.appendChild(newIconElement);\n }\n\n // Update component's reference to the new element\n component.icon.getElement = () => newIconElement;\n component.icon.getIcon = () => icon;\n component.element.classList.add(`${buttonClass}--icon`);\n } else {\n // Update existing icon without creating a new one\n const iconElement = component.icon.getElement();\n if (iconElement) {\n iconElement.innerHTML = icon;\n }\n }\n\n buttonComponent.updateCircularStyle();\n return buttonComponent;\n },\n\n /**\n * Gets the button's current icon HTML content\n * @returns Current icon HTML or empty string if removed\n */\n getIcon() {\n return buttonComponent.hasIcon() ? component.icon.getIcon() : \"\";\n },\n\n /**\n * Sets the button's variant (visual style)\n * @param variant - New variant to apply ('filled', 'outlined', 'text', etc.)\n * @returns Button component for method chaining\n */\n setVariant(variant: string) {\n const compName = component.componentName || \"button\";\n const buttonClass = component.getClass(compName);\n\n // First remove all existing variant classes\n const variantClasses = [\n \"filled\",\n \"tonal\",\n \"outlined\",\n \"elevated\",\n \"text\",\n ].map((v) => `${buttonClass}--${v}`);\n\n variantClasses.forEach((cls) => {\n component.element.classList.remove(cls);\n });\n\n component.element.classList.add(`${buttonClass}--${variant}`);\n return buttonComponent;\n },\n\n /**\n * Gets the button's current variant\n * @returns Current variant name ('filled', 'outlined', etc.)\n */\n getVariant() {\n const compName = component.componentName || \"button\";\n const buttonClass = component.getClass(compName);\n const variants = [\"filled\", \"tonal\", \"outlined\", \"elevated\", \"text\"];\n\n // Check which variant class is present on the element\n for (const variant of variants) {\n if (\n component.element.classList.contains(`${buttonClass}--${variant}`)\n ) {\n return variant;\n }\n }\n\n // If no variant class is found, return the default variant\n return \"filled\";\n },\n\n /**\n * Gets the button's current size\n * @returns Current size name ('xs', 's', 'm', 'l', 'xl')\n */\n getSize() {\n const compName = component.componentName || \"button\";\n const buttonClass = component.getClass(compName);\n const sizes = [\"xs\", \"s\", \"m\", \"l\", \"xl\"];\n\n // Check which size class is present on the element\n for (const size of sizes) {\n if (component.element.classList.contains(`${buttonClass}--${size}`)) {\n return size;\n }\n }\n\n // If no size class is found, return the default size\n return \"s\";\n },\n\n /**\n * Sets the button's size\n * @param size - New size to apply ('xs', 's', 'm', 'l', 'xl')\n * @returns Button component for method chaining\n */\n setSize(size: string) {\n const compName = component.componentName || \"button\";\n const buttonClass = component.getClass(compName);\n\n // First remove all existing size classes\n const sizeClasses = [\"xs\", \"s\", \"m\", \"l\", \"xl\"].map(\n (s) => `${buttonClass}--${s}`\n );\n\n sizeClasses.forEach((cls) => {\n component.element.classList.remove(cls);\n });\n\n component.element.classList.add(`${buttonClass}--${size}`);\n return buttonComponent;\n },\n\n /**\n * Gets the button's current shape\n * @returns Current shape name ('round', 'square')\n */\n getShape() {\n const compName = component.componentName || \"button\";\n const buttonClass = component.getClass(compName);\n const shapes = [\"round\", \"square\"];\n\n // Check which shape class is present on the element\n for (const shape of shapes) {\n if (\n component.element.classList.contains(`${buttonClass}--${shape}`)\n ) {\n return shape;\n }\n }\n\n // If no shape class is found, return the default shape\n return \"round\";\n },\n\n /**\n * Sets the button's shape\n * @param shape - New shape to apply ('round', 'square')\n * @returns Button component for method chaining\n */\n setShape(shape: string) {\n const compName = component.componentName || \"button\";\n const buttonClass = component.getClass(compName);\n\n // First remove all existing shape classes\n const shapeClasses = [\"round\", \"square\"].map(\n (s) => `${buttonClass}--${s}`\n );\n\n shapeClasses.forEach((cls) => {\n component.element.classList.remove(cls);\n });\n\n component.element.classList.add(`${buttonClass}--${shape}`);\n return buttonComponent;\n },\n\n /**\n * Sets the active state of the button\n * Used to visually indicate the button's active state, such as when it has a menu open\n *\n * @param active - Whether the button should appear active\n * @returns Button component for method chaining\n */\n setActive(active: boolean) {\n if (active) {\n component.element.classList.add(\n `${component.getClass(\"button\")}--active`\n );\n } else {\n component.element.classList.remove(\n `${component.getClass(\"button\")}--active`\n );\n }\n return buttonComponent;\n },\n\n /**\n * Sets the button's aria-label attribute for accessibility\n * @param label - Accessible label text\n * @returns Button component for method chaining\n */\n setAriaLabel(label: string) {\n component.element.setAttribute(\"aria-label\", label);\n return buttonComponent;\n },\n\n /**\n * Destroys the button component and cleans up resources\n */\n destroy() {\n lifecycle.destroy();\n },\n\n /**\n * Updates the button's circular style based on content.\n * If the button has an icon but no text, it will be styled as circular.\n * @internal\n */\n updateCircularStyle() {\n const hasText = component.text.getText() !== \"\";\n const hasIcon = buttonComponent.hasIcon();\n\n if (!hasText) {\n addClass(component.element, \"button--circular\");\n removeClass(component.element, \"button--icon\");\n } else {\n removeClass(component.element, \"button--circular\");\n }\n\n if (hasIcon && hasText) {\n addClass(component.element, \"button--icon\");\n }\n },\n };\n\n // Forward progress methods if they exist\n if (component.progress) {\n buttonComponent.progress = component.progress;\n }\n\n if (component.showProgress) {\n buttonComponent.showProgress = async () => {\n await component.showProgress!();\n return buttonComponent;\n };\n }\n\n if (component.showProgressSync) {\n buttonComponent.showProgressSync = () => {\n component.showProgressSync!();\n return buttonComponent;\n };\n }\n\n if (component.hideProgress) {\n buttonComponent.hideProgress = async () => {\n await component.hideProgress!();\n return buttonComponent;\n };\n }\n\n if (component.hideProgressSync) {\n buttonComponent.hideProgressSync = () => {\n component.hideProgressSync!();\n return buttonComponent;\n };\n }\n\n if (component.setProgress) {\n buttonComponent.setProgress = async (value: number) => {\n await component.setProgress!(value);\n return buttonComponent;\n };\n }\n\n if (component.setProgressSync) {\n buttonComponent.setProgressSync = (value: number) => {\n component.setProgressSync!(value);\n return buttonComponent;\n };\n }\n\n if (component.setIndeterminate) {\n buttonComponent.setIndeterminate = async (indeterminate: boolean) => {\n await component.setIndeterminate!(indeterminate);\n return buttonComponent;\n };\n }\n\n if (component.setIndeterminateSync) {\n buttonComponent.setIndeterminateSync = (indeterminate: boolean) => {\n component.setIndeterminateSync!(indeterminate);\n return buttonComponent;\n };\n }\n\n if (component.setLoading) {\n buttonComponent.setLoading = async (loading: boolean, text?: string) => {\n await component.setLoading!(loading, text);\n return buttonComponent;\n };\n }\n\n if (component.setLoadingSync) {\n buttonComponent.setLoadingSync = (loading: boolean, text?: string) => {\n component.setLoadingSync!(loading, text);\n return buttonComponent;\n };\n }\n\n return buttonComponent;\n };\n",
|
|
109
73
|
"// src/components/button/constants.ts\n\n/**\n * Button variants\n */\nexport const BUTTON_VARIANTS = {\n /** Primary action button with solid background (high emphasis) */\n FILLED: 'filled',\n /** Secondary action button with medium emphasis */\n TONAL: 'tonal',\n /** Button with outline border and transparent background */\n OUTLINED: 'outlined',\n /** Button with slight elevation/shadow */\n ELEVATED: 'elevated',\n /** Button that appears as text without background or border (low emphasis) */\n TEXT: 'text'\n} as const;\n\n/**\n * Available button size variants matching MD3 specifications\n * @category Components\n */\nexport const BUTTON_SIZES = {\n /** Extra small size - 32px height */\n XS: 'xs',\n /** Small size - 40px height (default) */\n S: 's',\n /** Medium size - 56px height */\n M: 'm',\n /** Large size - 96px height */\n L: 'l',\n /** Extra large size - 136px height */\n XL: 'xl'\n} as const;\n\n/**\n * Button size type\n * @category Components\n */\nexport type ButtonSize = keyof typeof BUTTON_SIZES;\n\n/**\n * Available button shape variants\n * @category Components\n */\nexport const BUTTON_SHAPES = {\n /** Round shape - pill-shaped buttons (default) */\n ROUND: 'round',\n /** Square shape - buttons with size-specific corner radius */\n SQUARE: 'square'\n} as const;\n\n/**\n * Button shape type\n * @category Components\n */\nexport type ButtonShape = keyof typeof BUTTON_SHAPES;\n\n/**\n * Default button types\n */\nexport const BUTTON_TYPES = {\n BUTTON: 'button',\n SUBMIT: 'submit',\n RESET: 'reset'\n} as const;\n\n/**\n * CSS classes used by the button component\n */\nexport const BUTTON_CLASSES = {\n ROOT: 'button',\n ICON: 'button-icon',\n TEXT: 'button-text',\n CIRCULAR: 'button-circular',\n ACTIVE: 'button-active',\n DISABLED: 'button-disabled'\n} as const;\n\n/**\n * Default ripple effect configuration\n * Enhanced for better visibility\n */\nexport const DEFAULT_RIPPLE_CONFIG = {\n DURATION: 450, // Duration in ms (slightly increased)\n TIMING: 'cubic-bezier(0.4, 0.0, 0.2, 1)', // Material Design timing function\n OPACITY: ['0.7', '0'] // Increased initial opacity for better visibility\n} as const;",
|
|
110
74
|
"// src/components/button/config.ts\nimport {\n createComponentConfig,\n createElementConfig,\n} from \"../../core/config/component\";\nimport { ButtonConfig } from \"./types\";\nimport {\n BUTTON_VARIANTS,\n BUTTON_TYPES,\n DEFAULT_RIPPLE_CONFIG,\n BUTTON_SIZES,\n BUTTON_SHAPES,\n} from \"./constants\";\n\n/**\n * Default configuration for the Button component.\n * These values will be used when not explicitly specified by the user.\n *\n * @category Components\n */\nexport const defaultConfig: ButtonConfig = {\n variant: BUTTON_VARIANTS.FILLED,\n size: BUTTON_SIZES.S,\n shape: BUTTON_SHAPES.ROUND,\n disabled: false,\n type: BUTTON_TYPES.BUTTON,\n ripple: true, // Explicitly enable ripple effects by default\n rippleConfig: {\n duration: DEFAULT_RIPPLE_CONFIG.DURATION,\n timing: DEFAULT_RIPPLE_CONFIG.TIMING,\n opacity: DEFAULT_RIPPLE_CONFIG.OPACITY as [string, string],\n },\n};\n\n/**\n * Creates the base configuration for Button component by merging user-provided\n * config with default values. Global configuration is automatically applied\n * by createComponentConfig.\n *\n * @param {ButtonConfig} config - User provided configuration\n * @returns {ButtonConfig} Complete configuration with defaults applied\n * @category Components\n * @internal\n */\nexport const createBaseConfig = (config: ButtonConfig = {}): ButtonConfig =>\n createComponentConfig(defaultConfig, config, \"button\") as ButtonConfig;\n\n/**\n * Generates element configuration for the Button component.\n * This function creates the necessary attributes and configuration\n * for the DOM element creation process.\n *\n * @param {ButtonConfig} config - Button configuration\n * @returns {Object} Element configuration object for withElement\n * @category Components\n * @internal\n */\nexport const getElementConfig = (config: ButtonConfig) => {\n // Create the attributes object\n const attributes: Record<string, string | boolean | undefined> = {\n type: config.type || \"button\",\n };\n\n // Only add disabled attribute if it's explicitly true\n if (config.disabled === true) {\n attributes.disabled = true;\n }\n\n // Add value attribute only if it exists\n if (config.value !== undefined) {\n attributes.value = config.value;\n }\n\n // Add aria-label attribute for accessibility\n if (config.ariaLabel) {\n attributes[\"aria-label\"] = config.ariaLabel;\n }\n\n return createElementConfig(config, {\n tag: \"button\",\n attributes,\n className: config.class,\n forwardEvents: {\n click: (component: { element: HTMLButtonElement }) =>\n !component.element.disabled,\n focus: true,\n blur: true,\n },\n });\n};\n\n/**\n * Creates API configuration for the Button component.\n * This connects the core component features (like disabled state)\n * to the public API methods exposed to users.\n *\n * @param {Object} comp - Component with disabled and lifecycle features\n * @returns {Object} API configuration object\n * @category Components\n * @internal\n */\nexport const getApiConfig = (comp: {\n disabled: {\n enable: () => void;\n disable: () => void;\n isDisabled: () => boolean;\n };\n lifecycle: { destroy: () => void };\n}) => ({\n disabled: {\n enable: () => comp.disabled.enable(),\n disable: () => comp.disabled.disable(),\n isDisabled: () => comp.disabled.isDisabled(),\n },\n lifecycle: {\n destroy: () => comp.lifecycle.destroy(),\n },\n});\n\nexport default defaultConfig;\n",
|
|
@@ -136,18 +100,14 @@
|
|
|
136
100
|
"// src/components/chips/chip/chip.ts\nimport { pipe } from \"../../../core/compose\";\nimport { createBase, withElement } from \"../../../core/compose/component\";\nimport {\n withEvents,\n withVariant,\n withRipple,\n withDisabled,\n withLifecycle,\n} from \"../../../core/compose/features\";\nimport { withAPI } from \"./api\";\nimport { ChipConfig, ChipComponent } from \"../types\";\nimport { createBaseConfig, getElementConfig, getApiConfig } from \"./config\";\n\n/**\n * Creates a new Chip component\n * @param {ChipConfig} config - Chip configuration\n * @returns {ChipComponent} Chip component instance\n */\nconst createChip = (config: ChipConfig = {}): ChipComponent => {\n const baseConfig = createBaseConfig(config);\n\n try {\n // Create base component with core features\n const chip = pipe(\n createBase,\n withEvents(),\n withElement(getElementConfig(baseConfig)),\n withVariant(baseConfig),\n withDisabled(baseConfig),\n withRipple(baseConfig),\n withLifecycle()\n )(baseConfig);\n\n // Create a container for the chip content to ensure proper ordering\n const contentContainer = document.createElement(\"div\");\n contentContainer.className = `${chip.getClass(\"chip\")}-content`;\n contentContainer.style.display = \"flex\";\n contentContainer.style.alignItems = \"center\";\n contentContainer.style.gap = \"8px\";\n contentContainer.style.width = \"100%\";\n chip.element.appendChild(contentContainer);\n\n // Add leading icon if provided\n if (config.leadingIcon || config.icon) {\n const leadingIconElement = document.createElement(\"span\");\n leadingIconElement.className = `${chip.getClass(\"chip\")}-leading-icon`;\n leadingIconElement.innerHTML = config.leadingIcon || config.icon || \"\";\n contentContainer.appendChild(leadingIconElement);\n }\n\n // Add text element if provided\n if (config.text) {\n const textElement = document.createElement(\"span\");\n textElement.className = `${chip.getClass(\"chip\")}-text`;\n textElement.textContent = config.text;\n contentContainer.appendChild(textElement);\n }\n\n // Add trailing icon if provided\n if (config.trailingIcon) {\n const trailingIconElement = document.createElement(\"span\");\n trailingIconElement.className = `${chip.getClass(\"chip\")}-trailing-icon`;\n trailingIconElement.innerHTML = config.trailingIcon;\n\n // Add click handler for trailing icon\n if (config.onTrailingIconClick) {\n trailingIconElement.addEventListener(\"click\", (e) => {\n e.stopPropagation(); // Prevent chip click event\n config.onTrailingIconClick(chip as unknown as ChipComponent);\n });\n }\n\n contentContainer.appendChild(trailingIconElement);\n }\n\n // Add selected class if needed\n if (config.selected) {\n chip.element.classList.add(`${chip.getClass(\"chip\")}--selected`);\n chip.element.setAttribute(\"aria-selected\", \"true\");\n }\n\n // Set data-value attribute if provided\n if (config.value) {\n chip.element.setAttribute(\"data-value\", config.value);\n }\n\n // Add API methods to the component\n const enhancedChip = withAPI(getApiConfig(chip))(chip);\n\n // Initialize value if not already set\n if (!chip.element.hasAttribute(\"data-value\") && config.text) {\n enhancedChip.getValue(); // This will trigger the automatic value generation in our fixed API\n }\n\n // Add click handler for selection toggle\n if (\n config.variant === \"filter\" ||\n config.variant === \"assist\" ||\n config.variant === \"suggestion\" ||\n config.selectable\n ) {\n chip.element.addEventListener(\"click\", () => {\n if (enhancedChip.isDisabled()) return;\n\n const wasSelected = enhancedChip.isSelected();\n enhancedChip.toggleSelected();\n const isNowSelected = enhancedChip.isSelected();\n\n // Call onChange with correct parameters\n if (config.onChange && wasSelected !== isNowSelected) {\n config.onChange(isNowSelected, enhancedChip);\n }\n\n // Call onSelect with consistent parameters\n if (config.onSelect) {\n config.onSelect(enhancedChip);\n }\n });\n }\n\n return enhancedChip as unknown as ChipComponent;\n } catch (error) {\n console.error(\"Chip creation error:\", error);\n throw new Error(`Failed to create chip: ${(error as Error).message}`);\n }\n};\n\nexport default createChip;\n",
|
|
137
101
|
"// src/components/chip/api.ts\nimport { ApiOptions, ChipComponent } from './types'\n\ninterface ComponentWithElements {\n element: HTMLElement;\n text?: {\n setText: (content: string) => any;\n getText: () => string;\n getElement: () => HTMLElement | null;\n };\n icon?: {\n setIcon: (html: string) => any;\n getIcon: () => string;\n getElement: () => HTMLElement | null;\n };\n getClass: (name: string) => string;\n}\n\n/**\n * Enhances a chip component with API methods\n * @param {ApiOptions} options - API configuration options\n * @returns {Function} Higher-order function that adds API methods to component\n * @internal This is an internal utility for the Chip component\n */\nexport const withAPI = ({ disabled, lifecycle }: ApiOptions) => \n (component: ComponentWithElements): ChipComponent => {\n // Track selected state internally\n let isSelected = component.element.classList.contains(`${component.getClass('chip')}--selected`);\n \n // Store the value internally as well to ensure reliability\n let chipValue = component.element.getAttribute('data-value') || null;\n \n return {\n ...component as any,\n element: component.element,\n \n getValue() {\n // First try to get from the element's attribute\n const attrValue = component.element.getAttribute('data-value');\n \n // If we have an attribute value, update our internal value and return it\n if (attrValue !== null) {\n chipValue = attrValue;\n return attrValue;\n }\n \n // If we have an internal value, set it on the element and return it\n if (chipValue !== null) {\n component.element.setAttribute('data-value', chipValue);\n return chipValue;\n }\n \n // If we have text content, derive a value from it\n const textElement = component.element.querySelector(`.${component.getClass('chip')}-text`);\n if (textElement && textElement.textContent) {\n // Convert text like \"Ocean Theme\" to \"ocean\"\n const text = textElement.textContent;\n if (text.includes(' Theme')) {\n chipValue = text.replace(' Theme', '').toLowerCase();\n } else {\n chipValue = text.toLowerCase().replace(/\\s+/g, '-');\n }\n \n // Set the derived value on the element\n component.element.setAttribute('data-value', chipValue);\n return chipValue;\n }\n \n return null;\n },\n \n setValue(value: string) {\n if (value !== null && value !== undefined) {\n chipValue = value;\n component.element.setAttribute('data-value', value);\n } else {\n chipValue = null;\n component.element.removeAttribute('data-value');\n }\n return this;\n },\n \n isDisabled() {\n return component.element.getAttribute('aria-disabled') === 'true';\n },\n \n enable() {\n disabled.enable();\n component.element.classList.remove(`${component.getClass('chip')}--disabled`);\n component.element.setAttribute('aria-disabled', 'false');\n component.element.setAttribute('tabindex', '0');\n return this;\n },\n \n disable() {\n disabled.disable();\n component.element.classList.add(`${component.getClass('chip')}--disabled`);\n component.element.setAttribute('aria-disabled', 'true');\n component.element.setAttribute('tabindex', '-1');\n return this;\n },\n \n setText(content: string) {\n const containerSelector = `.${component.getClass('chip')}-content`;\n const contentContainer = component.element.querySelector(containerSelector) || component.element;\n \n const textSelector = `.${component.getClass('chip')}-text`;\n let textElement = component.element.querySelector(textSelector);\n \n if (!textElement && content) {\n textElement = document.createElement('span');\n textElement.className = `${component.getClass('chip')}-text`;\n \n // Find the right position to insert (after leading icon if present, or as first child)\n const leadingIcon = component.element.querySelector(`.${component.getClass('chip')}-leading-icon`);\n if (leadingIcon) {\n contentContainer.insertBefore(textElement, leadingIcon.nextSibling);\n } else {\n contentContainer.insertBefore(textElement, contentContainer.firstChild);\n }\n }\n \n if (textElement) {\n textElement.textContent = content || '';\n \n // Remove the element if content is empty\n if (!content && textElement.parentNode) {\n textElement.parentNode.removeChild(textElement);\n }\n }\n \n return this;\n },\n \n getText() {\n const textElement = component.element.querySelector(`.${component.getClass('chip')}-text`);\n return textElement ? textElement.textContent || '' : '';\n },\n \n setIcon(icon: string) {\n return this.setLeadingIcon(icon);\n },\n \n getIcon() {\n const iconElement = component.element.querySelector(`.${component.getClass('chip')}-leading-icon`);\n return iconElement ? iconElement.innerHTML : '';\n },\n \n setLeadingIcon(icon: string) {\n const contentContainer = component.element.querySelector(`.${component.getClass('chip')}-content`) || component.element;\n const leadingIconSelector = `.${component.getClass('chip')}-leading-icon`;\n let leadingIconElement = component.element.querySelector(leadingIconSelector);\n \n if (!leadingIconElement && icon) {\n leadingIconElement = document.createElement('span');\n leadingIconElement.className = `${component.getClass('chip')}-leading-icon`;\n \n // Insert as first child of the content container\n contentContainer.insertBefore(leadingIconElement, contentContainer.firstChild);\n }\n \n if (leadingIconElement) {\n leadingIconElement.innerHTML = icon || '';\n \n // Remove the element if icon is empty\n if (!icon && leadingIconElement.parentNode) {\n leadingIconElement.parentNode.removeChild(leadingIconElement);\n }\n }\n \n return this;\n },\n \n setTrailingIcon(icon: string, onClick?: (chip: ChipComponent) => void) {\n const contentContainer = component.element.querySelector(`.${component.getClass('chip')}-content`) || component.element;\n const trailingIconSelector = `.${component.getClass('chip')}-trailing-icon`;\n let trailingIconElement = component.element.querySelector(trailingIconSelector);\n \n if (!trailingIconElement && icon) {\n trailingIconElement = document.createElement('span');\n trailingIconElement.className = `${component.getClass('chip')}-trailing-icon`;\n \n // Add as last child of content container\n contentContainer.appendChild(trailingIconElement);\n \n // Add click handler if provided\n if (onClick) {\n trailingIconElement.addEventListener('click', (e) => {\n e.stopPropagation(); // Prevent chip click event\n onClick(this as unknown as ChipComponent);\n });\n }\n }\n \n if (trailingIconElement) {\n trailingIconElement.innerHTML = icon || '';\n \n // Remove the element if icon is empty\n if (!icon && trailingIconElement.parentNode) {\n trailingIconElement.parentNode.removeChild(trailingIconElement);\n }\n }\n \n return this;\n },\n \n isSelected() {\n return isSelected;\n },\n \n setSelected(selected: boolean) {\n isSelected = !!selected;\n \n if (selected) {\n component.element.classList.add(`${component.getClass('chip')}--selected`);\n component.element.setAttribute('aria-selected', 'true');\n } else {\n component.element.classList.remove(`${component.getClass('chip')}--selected`);\n component.element.setAttribute('aria-selected', 'false');\n }\n \n return this;\n },\n \n toggleSelected() {\n return this.setSelected(!isSelected);\n },\n \n destroy() {\n lifecycle.destroy();\n }\n } as unknown as ChipComponent;\n };",
|
|
138
102
|
"// src/components/chips/chip/config.ts\nimport {\n createComponentConfig,\n createElementConfig,\n} from \"../../../core/config/component\";\n\nimport { ChipConfig } from \"../types\";\n\n/**\n * Component with required elements and methods\n * @internal\n */\ninterface BaseComponent {\n element: HTMLElement;\n disabled?: {\n enable: () => any;\n disable: () => any;\n };\n lifecycle?: {\n destroy: () => void;\n };\n [key: string]: any;\n}\n\n/**\n * Default configuration for the Chip component\n */\nexport const defaultConfig: ChipConfig = {\n variant: \"filled\",\n ripple: true,\n};\n\n/**\n * Creates the base configuration for Chip component\n * @param {ChipConfig} config - User provided configuration\n * @returns {ChipConfig} Complete configuration with defaults applied\n */\nexport const createBaseConfig = (config: ChipConfig = {}): ChipConfig =>\n createComponentConfig(defaultConfig, config, \"chip\") as ChipConfig;\n\n/**\n * Generates element configuration for the Chip component\n * @param {ChipConfig} config - Chip configuration\n * @returns {Object} Element configuration object for withElement\n */\nexport const getElementConfig = (config: ChipConfig) => {\n // Create the attributes object\n const attributes: Record<string, any> = {\n role: \"button\",\n tabindex: \"0\",\n };\n\n // Only add aria-disabled attribute if needed\n if (config.disabled === true) {\n attributes[\"aria-disabled\"] = \"true\";\n }\n\n // Add aria-selected if specified\n if (config.selected === true) {\n attributes[\"aria-selected\"] = \"true\";\n } else if (config.selected === false) {\n attributes[\"aria-selected\"] = \"false\";\n }\n\n // Define additional classes\n const className = [\n config.class,\n config.selected ? `${config.prefix}-chip--selected` : null,\n ];\n\n return createElementConfig(config, {\n tag: \"div\",\n attributes,\n className,\n forwardEvents: {\n click: (component: BaseComponent) =>\n component.element.getAttribute(\"aria-disabled\") !== \"true\",\n keydown: (component: BaseComponent, event: KeyboardEvent) => {\n // Handle space and enter key for accessibility\n if (event.key === \" \" || event.key === \"Enter\") {\n event.preventDefault();\n component.element.click();\n return true;\n }\n return false;\n },\n focus: true,\n blur: true,\n },\n });\n};\n\n/**\n * Creates API configuration for the Chip component\n * @param {BaseComponent} comp - Component with disabled and lifecycle features\n * @returns {Object} API configuration object\n */\nexport const getApiConfig = (comp: BaseComponent) => ({\n disabled: {\n enable: () => comp.disabled?.enable(),\n disable: () => comp.disabled?.disable(),\n },\n lifecycle: {\n destroy: () => comp.lifecycle?.destroy?.(),\n },\n});\n\nexport default defaultConfig;\n",
|
|
139
|
-
"// src/components/chips/chips.ts\nimport { pipe } from \"../../core/compose/pipe\";\nimport { createBase } from \"../../core/compose/component\";\nimport { withEvents, withLifecycle } from \"../../core/compose/features\";\nimport {\n
|
|
140
|
-
"// src/core/composition/features/layout.ts\n\n/**\n * Configuration that includes a component schema\n */\nexport interface LayoutConfig {\n /**\n * Component schema definition\n */\n schema?: any;\n \n [key: string]: any;\n}\n\n/**\n * Adds schema definition to component without creating DOM\n * This establishes the blueprint for the component's layout\n * before materializing it with withDom\n * \n * @param config Configuration containing schema definition\n * @returns Component enhancer with schema definition\n * \n * @example\n * ```ts\n * // Add layout to a component\n * const component = pipe(\n * createBase,\n * withLayout(config),\n * withIcon(config),\n * withLabel(config),\n * withDom()\n * )(config);\n * ```\n */\nexport const withLayout = (config: LayoutConfig) => component => {\n // Use the schema definition from the config\n if (!config.schema) {\n console.warn('No schema definition found in component config');\n return component;\n }\n \n // Return enhanced component with schema definition\n return {\n ...component,\n schema: config.schema\n };\n};",
|
|
141
|
-
"// src/core/composition/features/icon.ts\nimport { createElement } from '../../dom/create';\n\n/**\n * Configuration for icon feature\n */\nexport interface IconConfig {\n /**\n * Icon HTML content\n */\n icon?: string;\n \n /**\n * Position of the icon ('start' or 'end')\n */\n iconPosition?: 'start' | 'end';\n \n /**\n * Size variant for the icon\n */\n iconSize?: string;\n \n /**\n * CSS class prefix\n */\n prefix?: string;\n \n /**\n * Component name for class generation\n */\n componentName?: string;\n \n [key: string]: any;\n}\n\n/**\n * Enhances component schema with an icon element\n * Unlike the traditional withIcon, this modifies the schema\n * without creating actual DOM elements.\n * \n * @param config Configuration containing icon information\n * @returns Component enhancer that adds icon to schema\n * \n * @example\n * ```ts\n * // Add icon to a component schema\n * const component = pipe(\n * createBase,\n * withLayout(config),\n * withIcon(config)\n * )(config);\n * ```\n */\nexport const withIcon = (config: IconConfig) => component => {\n // If no icon or missing schema, return unmodified\n if (!config.icon || !component.schema) {\n return component;\n }\n \n try {\n // Get component details for class names\n const prefix = config.prefix || component.config?.prefix || 'mtrl';\n const componentName = config.componentName || component.componentName || 'component';\n \n // Clone the schema\n const schema = JSON.parse(JSON.stringify(component.schema));\n \n // Determine icon position\n const position = config.iconPosition || 'start';\n \n // Add the --icon modifier class to the main element\n const elementClasses = schema.element.options.className || [];\n const iconModifierClass = `${prefix}-${componentName}--icon`;\n \n if (Array.isArray(elementClasses)) {\n if (!elementClasses.includes(iconModifierClass)) {\n elementClasses.push(iconModifierClass);\n }\n } else if (typeof elementClasses === 'string') {\n if (!elementClasses.includes(iconModifierClass)) {\n schema.element.options.className = `${elementClasses} ${iconModifierClass}`.trim();\n }\n } else {\n schema.element.options.className = [iconModifierClass];\n }\n \n // Create icon element definition with component-specific class\n const iconDef = {\n name: 'icon',\n creator: createElement,\n options: {\n tag: 'span',\n className: [\n `${prefix}-${componentName}-icon`,\n `${prefix}-${componentName}-icon--${position}`\n ],\n html: config.icon\n }\n };\n \n // Add size class if specified\n if (config.iconSize) {\n const classes = iconDef.options.className;\n if (Array.isArray(classes)) {\n classes.push(`${prefix}-${componentName}-icon--${config.iconSize}`);\n }\n }\n \n // Add icon directly to the main element's children\n if (position === 'start') {\n // Create new children object with icon first\n const existingChildren = { ...schema.element.children };\n schema.element.children = {\n icon: iconDef,\n ...existingChildren\n };\n } else {\n // Add icon after existing children\n schema.element.children.icon = iconDef;\n }\n \n // Return component with updated schema\n return {\n ...component,\n schema\n };\n } catch (error) {\n console.warn('Error enhancing schema with icon:', error);\n return component;\n }\n};",
|
|
142
|
-
"// src/core/composition/features/label.ts\nimport { createElement } from \"../../dom/create\";\nimport { ElementDefinition } from \"../../layout/types\";\n\n/**\n * Configuration for label feature\n */\nexport interface LabelConfig {\n /**\n * Label text content\n */\n label?: string;\n\n /**\n * Position of the label ('start', 'end', 'top', or 'bottom')\n */\n labelPosition?: \"start\" | \"end\" | \"top\" | \"bottom\";\n\n /**\n * CSS class prefix\n */\n prefix?: string;\n\n /**\n * Component name for class generation\n */\n componentName?: string;\n\n /**\n * ID for the input element this label is associated with\n */\n id?: string;\n\n /**\n * Whether the labeled element is required\n */\n required?: boolean;\n\n [key: string]: any;\n}\n\n/**\n * Enhances component schema with a label element\n * Unlike the traditional withLabel, this modifies the schema\n * without creating actual DOM elements.\n *\n * @param config Configuration containing label information\n * @returns Component enhancer that adds label to schema\n *\n * @example\n * ```ts\n * // Add label to a component schema\n * const component = pipe(\n * createBase,\n * withLayout(config),\n * withLabel(config)\n * )(config);\n * ```\n */\nexport const withLabel = (config: LabelConfig) => (component) => {\n // If no label or missing schema, return unmodified\n if (!config.label || !component.schema) {\n return component;\n }\n\n try {\n // Get component details\n const prefix = config.prefix || component.config?.prefix || \"mtrl\";\n const componentName =\n config.componentName || component.componentName || \"component\";\n\n // Clone the schema\n const schema = JSON.parse(JSON.stringify(component.schema));\n\n // Determine position (default to 'start')\n const position = config.labelPosition || \"start\";\n\n // Create the label element definition\n let labelContent = config.label;\n let labelChildren = null;\n\n // Add required indicator if specified\n if (config.required) {\n // For schema we need to define a child element\n labelChildren = {\n requiredIndicator: {\n name: \"requiredIndicator\",\n creator: createElement,\n options: {\n tag: \"span\",\n className: `${prefix}-${componentName}-label-required`,\n text: \"*\",\n attributes: {\n \"aria-hidden\": \"true\",\n },\n },\n },\n };\n\n // Clear the content since we'll use children instead\n labelContent = config.label;\n }\n\n // Create label element definition\n const labelDef: ElementDefinition = {\n name: \"label\",\n creator: createElement,\n options: {\n tag: \"label\",\n className: [\n `${prefix}-${componentName}-label`,\n `${prefix}-${componentName}-label--${position}`,\n ],\n attributes: {\n for: config.id, // Optional connection to input by ID\n },\n text: labelContent,\n },\n };\n\n // Add children if we have them\n if (labelChildren) {\n labelDef.children = labelChildren;\n }\n\n // Add label to root element's children\n if (position === \"end\" || position === \"bottom\") {\n // Add at end of root element\n schema.element.children.label = labelDef;\n } else {\n // Add at beginning of root element (start/top)\n const existingChildren = { ...schema.element.children };\n schema.element.children = {\n label: labelDef,\n ...existingChildren,\n };\n }\n\n // Return component with updated schema\n return {\n ...component,\n schema,\n };\n } catch (error) {\n console.warn(\"Error enhancing schema with label:\", error);\n return component;\n }\n};\n",
|
|
143
|
-
"// src/core/composition/features/dom.ts\nimport createLayout from '../../layout';\n\n/**\n * Creates DOM elements from component schema using the core createLayout utility\n * This is a key feature that bridges the gap between declarative schema and actual DOM\n * \n * @returns Component enhancer that creates DOM structure from schema\n * \n * @example\n * ```ts\n * // Materialize component schema into DOM\n * const component = pipe(\n * createBase,\n * withLayout(config),\n * withIcon(config),\n * withLabel(config),\n * withDom()\n * )(config);\n * ```\n */\nexport const withDom = () => component => {\n // Return unmodified component if no schema\n if (!component.schema) {\n return component;\n }\n \n try {\n // Use the createLayout function to build the DOM from schema\n const layout = createLayout(component.schema);\n \n // Use the layout's utility functions to get components\n const components = layout.getAll();\n \n // Check for parent in component config\n let parent = component.config?.parent;\n \n // Handle string selectors\n if (typeof parent === 'string') {\n parent = document.querySelector(parent) as HTMLElement | null;\n }\n \n // Append to parent if provided\n if (parent && layout.element) {\n parent.appendChild(layout.element);\n }\n\n // Return enhanced component with DOM layout\n return {\n ...component,\n element: layout.element, // Root element\n components // All component elements\n };\n } catch (error) {\n console.error('Failed to create DOM structure:', error);\n throw new Error(`Failed to create component DOM: ${error.message}`);\n }\n};",
|
|
103
|
+
"// src/components/chips/chips.ts\nimport { pipe } from \"../../core/compose/pipe\";\nimport { createBase, withElement } from \"../../core/compose/component\";\nimport { withEvents, withLifecycle } from \"../../core/compose/features\";\nimport {\n withContainer,\n withChipItems,\n withController,\n withDom,\n} from \"./features\";\nimport { withAPI } from \"./api\";\nimport { ChipsConfig, ChipsComponent } from \"./types\";\nimport { createBaseConfig, getElementConfig, getApiConfig } from \"./config\";\n\n/**\n * Creates a chips container for grouping related chips\n *\n * Chips follows a clear architectural pattern:\n * 1. Base component - Creates the foundation with event system\n * 2. Feature enhancement - Adds specific capabilities (container, items, etc.)\n * 3. DOM creation - Creates DOM elements directly using optimized createElement\n * 4. Controller - Manages behavior, events, and UI rendering\n * 5. Lifecycle - Handles component lifecycle events\n * 6. Public API - Exposes a clean, consistent API\n *\n * @param {ChipsConfig} config - Chips configuration object\n * @returns {ChipsComponent} Chips component instance\n */\nconst createChips = (config: ChipsConfig = {}): ChipsComponent => {\n // Process configuration with defaults\n const baseConfig = createBaseConfig(config);\n\n try {\n // Create the component by composing features in a specific order\n const component = pipe(\n // Base component with event system\n createBase,\n withEvents(),\n\n // Create the main chips element using standard withElement\n withElement(getElementConfig(baseConfig)),\n\n withContainer(baseConfig),\n withChipItems(baseConfig),\n\n // Create inner DOM elements (label, container)\n withDom(baseConfig),\n\n // Add state management and behavior\n withController(baseConfig),\n withLifecycle()\n )(baseConfig);\n\n // Generate the API configuration based on the enhanced component\n const apiOptions = getApiConfig(component);\n\n // Apply the public API layer\n const chips = withAPI(apiOptions)(component);\n\n // Register event handlers from config for convenience\n if (baseConfig.on && typeof chips.on === \"function\") {\n Object.entries(baseConfig.on).forEach(([event, handler]) => {\n if (typeof handler === \"function\") {\n chips.on(event, handler);\n }\n });\n }\n\n return chips;\n } catch (error) {\n console.error(\"Chips creation error:\", error);\n throw new Error(`Failed to create chip: ${(error as Error).message}`);\n }\n};\n\nexport default createChips;\n",
|
|
144
104
|
"// src/components/chips/features/container.ts\nimport { ChipsConfig } from '../types';\n\n/**\n * Adds container layout features to chips component\n * \n * @param config Chips configuration\n * @returns Component enhancer that adds container layout functionality\n */\nexport const withContainer = (config: ChipsConfig) => component => {\n // Track current layout state\n const state = {\n scrollable: config.scrollable === true,\n vertical: config.vertical === true\n };\n \n return {\n ...component,\n \n // Layout management API\n layout: {\n /**\n * Sets the scrollable state of the chips container\n * @param {boolean} isScrollable - Whether the chips container should be scrollable\n * @returns Layout controller for chaining\n */\n setScrollable(isScrollable: boolean) {\n state.scrollable = isScrollable;\n \n if (component.element) {\n if (isScrollable) {\n component.element.classList.add(`${component.getClass('chips')}--scrollable`);\n } else {\n component.element.classList.remove(`${component.getClass('chips')}--scrollable`);\n }\n }\n \n return this;\n },\n \n /**\n * Gets the scrollable state\n * @returns {boolean} Whether the container is scrollable\n */\n isScrollable() {\n return state.scrollable;\n },\n \n /**\n * Sets the vertical layout state\n * @param {boolean} isVertical - Whether the chips container should be vertically stacked\n * @returns Layout controller for chaining\n */\n setVertical(isVertical: boolean) {\n state.vertical = isVertical;\n \n if (component.element) {\n if (isVertical) {\n component.element.classList.add(`${component.getClass('chips')}--vertical`);\n } else {\n component.element.classList.remove(`${component.getClass('chips')}--vertical`);\n }\n }\n \n return this;\n },\n \n /**\n * Gets the vertical state\n * @returns {boolean} Whether the container has vertical layout\n */\n isVertical() {\n return state.vertical;\n }\n }\n };\n};",
|
|
145
105
|
"// src/components/chips/features/chip-items.ts\nimport { ChipsConfig } from \"../types\";\n\n/**\n * Adds chip item management to chips component\n *\n * @param config Chips configuration\n * @returns Component enhancer that adds chip items functionality\n */\nexport const withChipItems = (config: ChipsConfig) => (component) => {\n // Chip instances stored in component state\n const chipInstances = [];\n\n return {\n ...component,\n chipInstances,\n\n // When DOM is created, add initial chips\n onCreated() {\n if (typeof component.onCreated === \"function\") {\n component.onCreated();\n }\n\n // Initialize with provided chips\n if (Array.isArray(config.chips) && config.chips.length > 0) {\n config.chips.forEach((chipConfig) => {\n this.chips?.addChip?.(chipConfig);\n });\n }\n },\n };\n};\n",
|
|
146
106
|
"// src/components/chips/constants.ts\n\n/**\n * Available variants for the Chip component\n * @enum {string}\n */\nexport const CHIP_VARIANTS = {\n /** Standard filled chip with solid background */\n FILLED: 'filled',\n\n /** Outlined chip with transparent background and border */\n OUTLINED: 'outlined',\n\n /** Elevated chip with shadow */\n ELEVATED: 'elevated',\n\n /** Assist chip for suggesting actions */\n ASSIST: 'assist',\n\n /** Filter chip for filtering content */\n FILTER: 'filter',\n\n /** Input chip for representing user input */\n INPUT: 'input',\n\n /** Suggestion chip for presenting options */\n SUGGESTION: 'suggestion'\n};\n\n/**\n * Available event types for Chip component\n * @enum {string}\n */\nexport const CHIP_EVENTS = {\n /** Fired when chip selection state changes */\n CHANGE: 'change',\n \n /** Fired when chip is selected */\n SELECT: 'select',\n \n /** Fired when chip is deselected */\n DESELECT: 'deselect',\n \n /** Fired when chip is about to be removed */\n REMOVE: 'remove'\n};\n\n/**\n * Available event types for Chips container component\n * @enum {string}\n */\nexport const CHIPS_EVENTS = {\n /** Fired when any chip selection changes */\n CHANGE: 'change',\n \n /** Fired when a chip is added to the container */\n ADD: 'add',\n \n /** Fired when a chip is removed from the container */\n REMOVE: 'remove'\n};",
|
|
147
|
-
"// src/components/chips/features/controller.ts\nimport { ChipsConfig, ChipComponent } from '../types';\nimport createChip from '../chip/chip';\nimport { CHIPS_EVENTS } from '../constants';\n\n/**\n * Add controller functionality to chips component\n * Manages state, events, user interactions, and UI rendering\n * \n * @param config Chips configuration\n * @returns Component enhancer with chips controller functionality\n */\nexport const withController = (config: ChipsConfig) => component => {\n // Ensure component has required properties\n if (!component.element || !component.components) {\n console.warn('Cannot initialize chips controller: missing element or components');\n return component;\n }\n \n // Store event listeners\n const eventListeners = {\n change: [],\n add: [],\n remove: []\n };\n \n // Track current focused chip index for keyboard navigation\n let focusedChipIndex = -1;\n \n /**\n * Dispatches custom events to registered handlers\n * @param {string} eventName - Name of the event to trigger\n * @param {any[]} args - Arguments to pass to the handlers\n */\n const dispatchEvent = (eventName, ...args) => {\n if (eventListeners[eventName]) {\n eventListeners[eventName].forEach(handler => handler(...args));\n }\n };\n\n const handleSelection = (selectedChip: ChipComponent) => {\n // Always ensure the chip's class is set correctly\n if (selectedChip.isSelected()) {\n selectedChip.element.classList.add(`${component.getClass('chip')}--selected`);\n selectedChip.element.setAttribute('aria-selected', 'true');\n } else {\n selectedChip.element.classList.remove(`${component.getClass('chip')}--selected`);\n selectedChip.element.setAttribute('aria-selected', 'false');\n }\n\n if (!config.multiSelect) {\n // Single selection mode - deselect all other chips\n component.chipInstances.forEach((chip: ChipComponent) => {\n if (chip !== selectedChip && chip.isSelected()) {\n chip.setSelected(false);\n chip.element.classList.remove(`${component.getClass('chip')}--selected`);\n chip.element.setAttribute('aria-selected', 'false');\n }\n });\n \n // If this was a deselection, and it's the only selected chip in single-select mode,\n // prevent deselection (keep it selected)\n if (!selectedChip.isSelected() && getSelectedChips().length === 0) {\n selectedChip.setSelected(true);\n selectedChip.element.classList.add(`${component.getClass('chip')}--selected`);\n selectedChip.element.setAttribute('aria-selected', 'true');\n }\n } else {\n // In multi-select mode, we allow deselection of all chips\n // No need to enforce at least one selection\n }\n\n // Get all currently selected chips and their values\n const selectedChips = component.chipInstances.filter(chip => chip.isSelected());\n const selectedValues = selectedChips.map(chip => chip.getValue());\n const changedValue = selectedChip ? selectedChip.getValue() : null;\n \n // Call onChange callback if provided\n if (typeof config.onChange === 'function') {\n config.onChange(selectedValues, changedValue);\n }\n \n // Dispatch change event to all registered handlers\n dispatchEvent(CHIPS_EVENTS.CHANGE, selectedValues, changedValue);\n };\n \n /**\n * Handles keyboard navigation between chips\n * @param {KeyboardEvent} event - Keyboard event\n */\n const handleKeyboardNavigation = (event) => {\n if (component.chipInstances.length === 0) return;\n\n // Only handle arrow keys, Enter, and Space\n if (!['ArrowLeft', 'ArrowRight', 'ArrowUp', 'ArrowDown', 'Enter', ' '].includes(event.key)) {\n return;\n }\n\n // Handle enter and space for activation/selection\n if (event.key === 'Enter' || event.key === ' ') {\n if (focusedChipIndex >= 0 && focusedChipIndex < component.chipInstances.length) {\n event.preventDefault();\n const chip = component.chipInstances[focusedChipIndex];\n if (!chip.isDisabled()) {\n chip.toggleSelected();\n \n // Ensure selection state is reflected in the DOM\n if (chip.isSelected()) {\n chip.element.classList.add(`${component.getClass('chip')}--selected`);\n chip.element.setAttribute('aria-selected', 'true');\n } else {\n chip.element.classList.remove(`${component.getClass('chip')}--selected`);\n chip.element.setAttribute('aria-selected', 'false');\n }\n \n handleSelection(chip);\n }\n return;\n }\n }\n\n // Handle navigation keys\n if (['ArrowLeft', 'ArrowRight', 'ArrowUp', 'ArrowDown'].includes(event.key)) {\n event.preventDefault();\n const isVertical = component.layout && component.layout.isVertical();\n let newIndex = focusedChipIndex;\n\n // If no chip is focused, start with the first one\n if (focusedChipIndex === -1) {\n newIndex = 0;\n } else {\n // Move based on key and layout direction\n if ((isVertical && event.key === 'ArrowUp') || (!isVertical && event.key === 'ArrowLeft')) {\n newIndex = Math.max(0, focusedChipIndex - 1);\n } else if ((isVertical && event.key === 'ArrowDown') || (!isVertical && event.key === 'ArrowRight')) {\n newIndex = Math.min(component.chipInstances.length - 1, focusedChipIndex + 1);\n }\n }\n\n // Update focus if changed\n if (newIndex !== focusedChipIndex) {\n // Remove focus from current chip\n if (focusedChipIndex >= 0 && focusedChipIndex < component.chipInstances.length) {\n component.chipInstances[focusedChipIndex].element.blur();\n }\n\n // Focus new chip\n focusedChipIndex = newIndex;\n component.chipInstances[focusedChipIndex].element.focus();\n \n // If scrollable, ensure the focused chip is visible\n if (component.layout && component.layout.isScrollable()) {\n scrollToChip(focusedChipIndex);\n }\n }\n }\n };\n \n /**\n * Scrolls the chips container to make a specific chip visible\n * @param {ChipComponent|number} chipOrIndex - Chip instance or index to scroll to\n */\n const scrollToChip = (chipOrIndex) => {\n const isScrollable = component.layout && component.layout.isScrollable();\n if (!isScrollable) return;\n \n const index = typeof chipOrIndex === 'number'\n ? chipOrIndex\n : component.chipInstances.indexOf(chipOrIndex);\n \n if (index >= 0 && index < component.chipInstances.length) {\n const chipElement = component.chipInstances[index].element;\n const container = component.components.chipContainer || component.element;\n \n // Calculate scroll position to center the chip\n const containerRect = container.getBoundingClientRect();\n const chipRect = chipElement.getBoundingClientRect();\n \n const isVertical = component.layout && component.layout.isVertical();\n \n if (isVertical) {\n // For vertical scroll\n const scrollTop = chipElement.offsetTop - container.offsetTop - \n (containerRect.height / 2) + (chipRect.height / 2);\n \n container.scrollTo({\n top: Math.max(0, scrollTop),\n behavior: 'smooth'\n });\n } else {\n // For horizontal scroll\n const scrollLeft = chipElement.offsetLeft - container.offsetLeft - \n (containerRect.width / 2) + (chipRect.width / 2);\n \n container.scrollTo({\n left: Math.max(0, scrollLeft),\n behavior: 'smooth'\n });\n }\n }\n };\n \n /**\n * Adds a chip to the chips container\n * @param {Object} chipConfig - Configuration for the chip\n * @returns {ChipComponent} The created chip instance\n */\n const addChip = (chipConfig) => {\n // CHANGE: Remove the onSelect handler that calls handleSelection\n const chipInstance = createChip({\n ...chipConfig,\n // Only pass through the user's onSelect handler, don't create a path to handleSelection\n onSelect: chipConfig.onSelect\n });\n\n // Get the container element to append to\n const container = component.components.chipContainer || component.element;\n \n // Use DocumentFragment for better performance\n const fragment = document.createDocumentFragment();\n fragment.appendChild(chipInstance.element);\n container.appendChild(fragment);\n \n component.chipInstances.push(chipInstance);\n\n // This click handler is the ONLY path to handleSelection\n chipInstance.element.addEventListener('click', () => {\n if (!chipInstance.isDisabled()) {\n chipInstance.toggleSelected();\n \n // Explicitly ensure selected state reflects in the DOM\n if (chipInstance.isSelected()) {\n chipInstance.element.classList.add(`${component.getClass('chip')}--selected`);\n chipInstance.element.setAttribute('aria-selected', 'true');\n } else {\n chipInstance.element.classList.remove(`${component.getClass('chip')}--selected`);\n chipInstance.element.setAttribute('aria-selected', 'false');\n }\n \n handleSelection(chipInstance);\n \n // Update focus tracking\n focusedChipIndex = component.chipInstances.indexOf(chipInstance);\n }\n });\n\n chipInstance.element.addEventListener('keydown', handleKeyboardNavigation);\n\n // Dispatch add event\n dispatchEvent(CHIPS_EVENTS.ADD, chipInstance);\n\n return chipInstance;\n };\n \n /**\n * Removes a chip from the chips container\n * @param {ChipComponent|number} chipOrIndex - Chip instance or index to remove\n */\n const removeChip = (chipOrIndex) => {\n const index = typeof chipOrIndex === 'number'\n ? chipOrIndex\n : component.chipInstances.indexOf(chipOrIndex);\n\n if (index >= 0 && index < component.chipInstances.length) {\n const chip = component.chipInstances[index];\n \n // Dispatch remove event before actual removal\n dispatchEvent(CHIPS_EVENTS.REMOVE, chip);\n \n chip.destroy();\n component.chipInstances.splice(index, 1);\n \n // Update focused index if needed\n if (index === focusedChipIndex) {\n focusedChipIndex = -1;\n } else if (index < focusedChipIndex) {\n focusedChipIndex--;\n }\n }\n };\n \n /**\n * Gets all chip instances in the container\n * @returns {ChipComponent[]} Array of chip instances\n */\n const getChips = () => {\n return [...component.chipInstances];\n };\n \n /**\n * Gets currently selected chips\n * @returns {ChipComponent[]} Array of selected chip instances\n */\n const getSelectedChips = () => {\n return component.chipInstances.filter((chip: ChipComponent) => chip.isSelected());\n };\n \n /**\n * Gets the values of selected chips\n * @returns {(string|null)[]} Array of selected chip values\n */\n const getSelectedValues = () => {\n return getSelectedChips().map((chip: ChipComponent) => chip.getValue());\n };\n \n /**\n * Selects chips by their values\n * @param {string|string[]} values - Value or array of values to select\n * @param {boolean} triggerEvent - Whether to trigger change event (default: true)\n */\n const selectByValue = (values, triggerEvent = true, exclusive = !config.multiSelect) => {\n const valueArray = Array.isArray(values) ? values : [values];\n let selectionChanged = false;\n\n if (exclusive) {\n // First handle deselection if exclusive mode\n component.chipInstances.forEach((chip: ChipComponent) => {\n const shouldSelect = valueArray.includes(chip.getValue());\n if (!shouldSelect && chip.isSelected()) {\n chip.setSelected(false);\n chip.element.classList.remove(`${component.getClass('chip')}--selected`);\n chip.element.setAttribute('aria-selected', 'false');\n selectionChanged = true;\n }\n });\n }\n\n // Then handle selection\n component.chipInstances.forEach((chip: ChipComponent) => {\n const shouldSelect = valueArray.includes(chip.getValue());\n if (shouldSelect && !chip.isSelected()) {\n chip.setSelected(true);\n chip.element.classList.add(`${component.getClass('chip')}--selected`);\n chip.element.setAttribute('aria-selected', 'true');\n selectionChanged = true;\n }\n });\n\n \n // Dispatch change event if any chip selection has changed AND if triggerEvent is true\n if (selectionChanged && triggerEvent) {\n const selectedValues = getSelectedValues();\n dispatchEvent(CHIPS_EVENTS.CHANGE, selectedValues, null);\n }\n };\n \n /**\n * Clears all selections\n * @param {boolean} triggerEvent - Whether to trigger change event (default: true)\n */\n const clearSelection = (triggerEvent = true) => {\n const selectedValues = getSelectedValues();\n const hadSelectedChips = selectedValues.length > 0;\n \n component.chipInstances.forEach((chip: ChipComponent) => {\n chip.setSelected(false);\n chip.element.classList.remove(`${component.getClass('chip')}--selected`);\n chip.element.setAttribute('aria-selected', 'false');\n });\n \n // Only dispatch if there were actually chips deselected AND triggerEvent is true\n if (hadSelectedChips && triggerEvent) {\n dispatchEvent(CHIPS_EVENTS.CHANGE, [], null);\n }\n };\n \n /**\n * Enables keyboard navigation between chips in the container\n */\n const enableKeyboardNavigation = () => {\n // Add keyboard event listener to the chips container\n component.chipInstances.forEach((chip: ChipComponent) => {\n chip.element.addEventListener('keydown', handleKeyboardNavigation);\n });\n };\n \n /**\n * Disables keyboard navigation\n */\n const disableKeyboardNavigation = () => {\n component.chipInstances.forEach((chip: ChipComponent) => {\n chip.element.removeEventListener('keydown', handleKeyboardNavigation);\n });\n };\n \n // Initialize keyboard navigation\n enableKeyboardNavigation();\n \n // Setup event listeners when element is available\n if (component.element) {\n component.element.addEventListener('keydown', handleKeyboardNavigation);\n }\n \n // Setup lifecycle cleanup\n if (component.lifecycle) {\n const originalDestroy = component.lifecycle.destroy || (() => {});\n \n component.lifecycle.destroy = () => {\n // Clean up event listeners\n component.chipInstances.forEach((chip: ChipComponent) => {\n chip.element.removeEventListener('keydown', handleKeyboardNavigation);\n });\n \n // Clean up all chip instances\n component.chipInstances.forEach((chip: ChipComponent) => chip.destroy());\n component.chipInstances.length = 0;\n \n // Clear all event listeners\n Object.keys(eventListeners).forEach(event => {\n eventListeners[event] = [];\n });\n \n // Call original destroy\n originalDestroy();\n };\n }\n \n return {\n ...component,\n // Add chips controller feature\n chips: {\n addChip,\n removeChip,\n getChips,\n getSelectedChips,\n getSelectedValues,\n selectByValue,\n clearSelection,\n scrollToChip\n },\n // Add keyboard navigation feature\n keyboard: {\n enable: enableKeyboardNavigation,\n disable: disableKeyboardNavigation\n },\n // Event management\n on(event, handler) {\n if (!eventListeners[event]) {\n eventListeners[event] = [];\n }\n \n eventListeners[event].push(handler);\n return this;\n },\n off(event, handler) {\n if (eventListeners[event]) {\n const index = eventListeners[event].indexOf(handler);\n if (index !== -1) {\n eventListeners[event].splice(index, 1);\n }\n }\n return this;\n }\n };\n};",
|
|
107
|
+
"// src/components/chips/features/controller.ts\nimport { ChipsConfig, ChipComponent } from \"../types\";\nimport createChip from \"../chip/chip\";\nimport { CHIPS_EVENTS } from \"../constants\";\n\n/**\n * Add controller functionality to chips component\n * Manages state, events, user interactions, and UI rendering\n *\n * @param config Chips configuration\n * @returns Component enhancer with chips controller functionality\n */\nexport const withController = (config: ChipsConfig) => (component) => {\n // Ensure component has required properties\n if (!component.element) {\n console.warn(\"Cannot initialize chips controller: missing element\");\n return component;\n }\n\n // Store event listeners\n const eventListeners = {\n change: [],\n add: [],\n remove: [],\n };\n\n // Track current focused chip index for keyboard navigation\n let focusedChipIndex = -1;\n\n /**\n * Dispatches custom events to registered handlers\n * @param {string} eventName - Name of the event to trigger\n * @param {any[]} args - Arguments to pass to the handlers\n */\n const dispatchEvent = (eventName, ...args) => {\n if (eventListeners[eventName]) {\n eventListeners[eventName].forEach((handler) => handler(...args));\n }\n };\n\n const handleSelection = (selectedChip: ChipComponent) => {\n // Always ensure the chip's class is set correctly\n if (selectedChip.isSelected()) {\n selectedChip.element.classList.add(\n `${component.getClass(\"chip\")}--selected`\n );\n selectedChip.element.setAttribute(\"aria-selected\", \"true\");\n } else {\n selectedChip.element.classList.remove(\n `${component.getClass(\"chip\")}--selected`\n );\n selectedChip.element.setAttribute(\"aria-selected\", \"false\");\n }\n\n if (!config.multiSelect) {\n // Single selection mode - deselect all other chips\n component.chipInstances.forEach((chip: ChipComponent) => {\n if (chip !== selectedChip && chip.isSelected()) {\n chip.setSelected(false);\n chip.element.classList.remove(\n `${component.getClass(\"chip\")}--selected`\n );\n chip.element.setAttribute(\"aria-selected\", \"false\");\n }\n });\n\n // If this was a deselection, and it's the only selected chip in single-select mode,\n // prevent deselection (keep it selected)\n if (!selectedChip.isSelected() && getSelectedChips().length === 0) {\n selectedChip.setSelected(true);\n selectedChip.element.classList.add(\n `${component.getClass(\"chip\")}--selected`\n );\n selectedChip.element.setAttribute(\"aria-selected\", \"true\");\n }\n } else {\n // In multi-select mode, we allow deselection of all chips\n // No need to enforce at least one selection\n }\n\n // Get all currently selected chips and their values\n const selectedChips = component.chipInstances.filter((chip) =>\n chip.isSelected()\n );\n const selectedValues = selectedChips.map((chip) => chip.getValue());\n const changedValue = selectedChip ? selectedChip.getValue() : null;\n\n // Call onChange callback if provided\n if (typeof config.onChange === \"function\") {\n config.onChange(selectedValues, changedValue);\n }\n\n // Dispatch change event to all registered handlers\n dispatchEvent(CHIPS_EVENTS.CHANGE, selectedValues, changedValue);\n };\n\n /**\n * Handles keyboard navigation between chips\n * @param {KeyboardEvent} event - Keyboard event\n */\n const handleKeyboardNavigation = (event) => {\n if (component.chipInstances.length === 0) return;\n\n // Only handle arrow keys, Enter, and Space\n if (\n ![\n \"ArrowLeft\",\n \"ArrowRight\",\n \"ArrowUp\",\n \"ArrowDown\",\n \"Enter\",\n \" \",\n ].includes(event.key)\n ) {\n return;\n }\n\n // Handle enter and space for activation/selection\n if (event.key === \"Enter\" || event.key === \" \") {\n if (\n focusedChipIndex >= 0 &&\n focusedChipIndex < component.chipInstances.length\n ) {\n event.preventDefault();\n const chip = component.chipInstances[focusedChipIndex];\n if (!chip.isDisabled()) {\n chip.toggleSelected();\n\n // Ensure selection state is reflected in the DOM\n if (chip.isSelected()) {\n chip.element.classList.add(\n `${component.getClass(\"chip\")}--selected`\n );\n chip.element.setAttribute(\"aria-selected\", \"true\");\n } else {\n chip.element.classList.remove(\n `${component.getClass(\"chip\")}--selected`\n );\n chip.element.setAttribute(\"aria-selected\", \"false\");\n }\n\n handleSelection(chip);\n }\n return;\n }\n }\n\n // Handle navigation keys\n if (\n [\"ArrowLeft\", \"ArrowRight\", \"ArrowUp\", \"ArrowDown\"].includes(event.key)\n ) {\n event.preventDefault();\n const isVertical = component.layout && component.layout.isVertical();\n let newIndex = focusedChipIndex;\n\n // If no chip is focused, start with the first one\n if (focusedChipIndex === -1) {\n newIndex = 0;\n } else {\n // Move based on key and layout direction\n if (\n (isVertical && event.key === \"ArrowUp\") ||\n (!isVertical && event.key === \"ArrowLeft\")\n ) {\n newIndex = Math.max(0, focusedChipIndex - 1);\n } else if (\n (isVertical && event.key === \"ArrowDown\") ||\n (!isVertical && event.key === \"ArrowRight\")\n ) {\n newIndex = Math.min(\n component.chipInstances.length - 1,\n focusedChipIndex + 1\n );\n }\n }\n\n // Update focus if changed\n if (newIndex !== focusedChipIndex) {\n // Remove focus from current chip\n if (\n focusedChipIndex >= 0 &&\n focusedChipIndex < component.chipInstances.length\n ) {\n component.chipInstances[focusedChipIndex].element.blur();\n }\n\n // Focus new chip\n focusedChipIndex = newIndex;\n component.chipInstances[focusedChipIndex].element.focus();\n\n // If scrollable, ensure the focused chip is visible\n if (component.layout && component.layout.isScrollable()) {\n scrollToChip(focusedChipIndex);\n }\n }\n }\n };\n\n /**\n * Scrolls the chips container to make a specific chip visible\n * @param {ChipComponent|number} chipOrIndex - Chip instance or index to scroll to\n */\n const scrollToChip = (chipOrIndex) => {\n const isScrollable = component.layout && component.layout.isScrollable();\n if (!isScrollable) return;\n\n const index =\n typeof chipOrIndex === \"number\"\n ? chipOrIndex\n : component.chipInstances.indexOf(chipOrIndex);\n\n if (index >= 0 && index < component.chipInstances.length) {\n const chipElement = component.chipInstances[index].element;\n const container = component.chipContainer || component.element;\n\n // Calculate scroll position to center the chip\n const containerRect = container.getBoundingClientRect();\n const chipRect = chipElement.getBoundingClientRect();\n\n const isVertical = component.layout && component.layout.isVertical();\n\n if (isVertical) {\n // For vertical scroll\n const scrollTop =\n chipElement.offsetTop -\n container.offsetTop -\n containerRect.height / 2 +\n chipRect.height / 2;\n\n container.scrollTo({\n top: Math.max(0, scrollTop),\n behavior: \"smooth\",\n });\n } else {\n // For horizontal scroll\n const scrollLeft =\n chipElement.offsetLeft -\n container.offsetLeft -\n containerRect.width / 2 +\n chipRect.width / 2;\n\n container.scrollTo({\n left: Math.max(0, scrollLeft),\n behavior: \"smooth\",\n });\n }\n }\n };\n\n /**\n * Adds a chip to the chips container\n * @param {Object} chipConfig - Configuration for the chip\n * @returns {ChipComponent} The created chip instance\n */\n const addChip = (chipConfig) => {\n // CHANGE: Remove the onSelect handler that calls handleSelection\n const chipInstance = createChip({\n ...chipConfig,\n // Only pass through the user's onSelect handler, don't create a path to handleSelection\n onSelect: chipConfig.onSelect,\n });\n\n // Get the container element to append to\n const container = component.chipContainer || component.element;\n\n // Use DocumentFragment for better performance\n const fragment = document.createDocumentFragment();\n fragment.appendChild(chipInstance.element);\n container.appendChild(fragment);\n\n component.chipInstances.push(chipInstance);\n\n // This click handler is the ONLY path to handleSelection\n chipInstance.element.addEventListener(\"click\", () => {\n if (!chipInstance.isDisabled()) {\n chipInstance.toggleSelected();\n\n // Explicitly ensure selected state reflects in the DOM\n if (chipInstance.isSelected()) {\n chipInstance.element.classList.add(\n `${component.getClass(\"chip\")}--selected`\n );\n chipInstance.element.setAttribute(\"aria-selected\", \"true\");\n } else {\n chipInstance.element.classList.remove(\n `${component.getClass(\"chip\")}--selected`\n );\n chipInstance.element.setAttribute(\"aria-selected\", \"false\");\n }\n\n handleSelection(chipInstance);\n\n // Update focus tracking\n focusedChipIndex = component.chipInstances.indexOf(chipInstance);\n }\n });\n\n chipInstance.element.addEventListener(\"keydown\", handleKeyboardNavigation);\n\n // Dispatch add event\n dispatchEvent(CHIPS_EVENTS.ADD, chipInstance);\n\n return chipInstance;\n };\n\n /**\n * Removes a chip from the chips container\n * @param {ChipComponent|number} chipOrIndex - Chip instance or index to remove\n */\n const removeChip = (chipOrIndex) => {\n const index =\n typeof chipOrIndex === \"number\"\n ? chipOrIndex\n : component.chipInstances.indexOf(chipOrIndex);\n\n if (index >= 0 && index < component.chipInstances.length) {\n const chip = component.chipInstances[index];\n\n // Dispatch remove event before actual removal\n dispatchEvent(CHIPS_EVENTS.REMOVE, chip);\n\n chip.destroy();\n component.chipInstances.splice(index, 1);\n\n // Update focused index if needed\n if (index === focusedChipIndex) {\n focusedChipIndex = -1;\n } else if (index < focusedChipIndex) {\n focusedChipIndex--;\n }\n }\n };\n\n /**\n * Gets all chip instances in the container\n * @returns {ChipComponent[]} Array of chip instances\n */\n const getChips = () => {\n return [...component.chipInstances];\n };\n\n /**\n * Gets currently selected chips\n * @returns {ChipComponent[]} Array of selected chip instances\n */\n const getSelectedChips = () => {\n return component.chipInstances.filter((chip: ChipComponent) =>\n chip.isSelected()\n );\n };\n\n /**\n * Gets the values of selected chips\n * @returns {(string|null)[]} Array of selected chip values\n */\n const getSelectedValues = () => {\n return getSelectedChips().map((chip: ChipComponent) => chip.getValue());\n };\n\n /**\n * Selects chips by their values\n * @param {string|string[]} values - Value or array of values to select\n * @param {boolean} triggerEvent - Whether to trigger change event (default: true)\n */\n const selectByValue = (\n values,\n triggerEvent = true,\n exclusive = !config.multiSelect\n ) => {\n const valueArray = Array.isArray(values) ? values : [values];\n let selectionChanged = false;\n\n if (exclusive) {\n // First handle deselection if exclusive mode\n component.chipInstances.forEach((chip: ChipComponent) => {\n const shouldSelect = valueArray.includes(chip.getValue());\n if (!shouldSelect && chip.isSelected()) {\n chip.setSelected(false);\n chip.element.classList.remove(\n `${component.getClass(\"chip\")}--selected`\n );\n chip.element.setAttribute(\"aria-selected\", \"false\");\n selectionChanged = true;\n }\n });\n }\n\n // Then handle selection\n component.chipInstances.forEach((chip: ChipComponent) => {\n const shouldSelect = valueArray.includes(chip.getValue());\n if (shouldSelect && !chip.isSelected()) {\n chip.setSelected(true);\n chip.element.classList.add(`${component.getClass(\"chip\")}--selected`);\n chip.element.setAttribute(\"aria-selected\", \"true\");\n selectionChanged = true;\n }\n });\n\n // Dispatch change event if any chip selection has changed AND if triggerEvent is true\n if (selectionChanged && triggerEvent) {\n const selectedValues = getSelectedValues();\n dispatchEvent(CHIPS_EVENTS.CHANGE, selectedValues, null);\n }\n };\n\n /**\n * Clears all selections\n * @param {boolean} triggerEvent - Whether to trigger change event (default: true)\n */\n const clearSelection = (triggerEvent = true) => {\n const selectedValues = getSelectedValues();\n const hadSelectedChips = selectedValues.length > 0;\n\n component.chipInstances.forEach((chip: ChipComponent) => {\n chip.setSelected(false);\n chip.element.classList.remove(`${component.getClass(\"chip\")}--selected`);\n chip.element.setAttribute(\"aria-selected\", \"false\");\n });\n\n // Only dispatch if there were actually chips deselected AND triggerEvent is true\n if (hadSelectedChips && triggerEvent) {\n dispatchEvent(CHIPS_EVENTS.CHANGE, [], null);\n }\n };\n\n /**\n * Enables keyboard navigation between chips in the container\n */\n const enableKeyboardNavigation = () => {\n // Add keyboard event listener to the chips container\n component.chipInstances.forEach((chip: ChipComponent) => {\n chip.element.addEventListener(\"keydown\", handleKeyboardNavigation);\n });\n };\n\n /**\n * Disables keyboard navigation\n */\n const disableKeyboardNavigation = () => {\n component.chipInstances.forEach((chip: ChipComponent) => {\n chip.element.removeEventListener(\"keydown\", handleKeyboardNavigation);\n });\n };\n\n // Initialize keyboard navigation\n enableKeyboardNavigation();\n\n // Setup event listeners when element is available\n if (component.element) {\n component.element.addEventListener(\"keydown\", handleKeyboardNavigation);\n }\n\n // Setup lifecycle cleanup\n if (component.lifecycle) {\n const originalDestroy = component.lifecycle.destroy || (() => {});\n\n component.lifecycle.destroy = () => {\n // Clean up event listeners\n component.chipInstances.forEach((chip: ChipComponent) => {\n chip.element.removeEventListener(\"keydown\", handleKeyboardNavigation);\n });\n\n // Clean up all chip instances\n component.chipInstances.forEach((chip: ChipComponent) => chip.destroy());\n component.chipInstances.length = 0;\n\n // Clear all event listeners\n Object.keys(eventListeners).forEach((event) => {\n eventListeners[event] = [];\n });\n\n // Call original destroy\n originalDestroy();\n };\n }\n\n return {\n ...component,\n // Add chips controller feature\n chips: {\n addChip,\n removeChip,\n getChips,\n getSelectedChips,\n getSelectedValues,\n selectByValue,\n clearSelection,\n scrollToChip,\n },\n // Add keyboard navigation feature\n keyboard: {\n enable: enableKeyboardNavigation,\n disable: disableKeyboardNavigation,\n },\n // Event management\n on(event, handler) {\n if (!eventListeners[event]) {\n eventListeners[event] = [];\n }\n\n eventListeners[event].push(handler);\n return this;\n },\n off(event, handler) {\n if (eventListeners[event]) {\n const index = eventListeners[event].indexOf(handler);\n if (index !== -1) {\n eventListeners[event].splice(index, 1);\n }\n }\n return this;\n },\n };\n};\n",
|
|
108
|
+
"import { createElement } from \"../../../core/dom/create\";\nimport { ChipsConfig } from \"../types\";\nimport { ElementComponent } from \"../../../core/compose/component\";\n\n/**\n * Creates the inner chips DOM structure using optimized createElement\n * This works alongside withElement to create chips-specific inner elements\n *\n * @param config Chips configuration\n * @returns Component enhancement function\n */\nexport const withDom =\n (config: ChipsConfig) =>\n <T extends ElementComponent>(\n component: T\n ): T & {\n chipContainer: HTMLElement;\n label?: HTMLElement;\n getChipContainer: () => HTMLElement;\n getLabel: () => HTMLElement | null;\n } => {\n // Get prefixed class names\n const getClass = (className: string) => component.getClass(className);\n\n // Set default values\n const hasLabel = config.label && config.label.trim().length > 0;\n const labelPosition = config.labelPosition || \"start\";\n\n // Create optional label element\n let label: HTMLElement | undefined;\n if (hasLabel) {\n label = createElement({\n tag: \"label\",\n className: getClass(\"chips-label\"),\n text: config.label,\n container: component.element,\n });\n }\n\n // Create the chips container where individual chips will be added\n const chipContainer = createElement({\n tag: \"div\",\n className: getClass(\"chips-container\"),\n container: component.element,\n });\n\n // Return enhanced component with inner elements\n return {\n ...component,\n chipContainer,\n label,\n\n // Add DOM query methods for compatibility\n getChipContainer: () => chipContainer,\n getLabel: () => label || null,\n };\n };\n",
|
|
148
109
|
"// src/components/chips/api.ts\nimport { ChipsComponent, ChipComponent } from './types';\n\n/**\n * API options interface - structured by feature area\n */\ninterface ApiOptions {\n chips: {\n addChip: (chipConfig: any) => ChipComponent;\n removeChip: (chipOrIndex: ChipComponent | number) => void;\n getChips: () => ChipComponent[];\n getSelectedChips: () => ChipComponent[];\n getSelectedValues: () => (string | null)[];\n selectByValue: (values: string | string[], triggerEvent?: boolean) => void;\n clearSelection: () => void;\n scrollToChip: (chipOrIndex: ChipComponent | number) => void;\n };\n layout: {\n setScrollable: (isScrollable: boolean) => any;\n isScrollable: () => boolean;\n setVertical: (isVertical: boolean) => any;\n isVertical: () => boolean;\n };\n label: {\n setText: (text: string) => any;\n getText: () => string;\n setPosition: (position: 'start' | 'end') => any;\n getPosition: () => string;\n };\n keyboard: {\n enableKeyboardNavigation: () => void;\n disableKeyboardNavigation: () => void;\n };\n events: {\n on: (event: string, handler: Function) => void;\n off: (event: string, handler: Function) => void;\n };\n lifecycle: {\n destroy: () => void;\n };\n}\n\n/**\n * Enhances a chips component with a streamlined API\n * @param {ApiOptions} options - API configuration options\n * @returns {Function} Higher-order function that adds API methods to component\n * @internal This is an internal utility for the Chips component\n */\nexport const withAPI = (options: ApiOptions) => \n (component: { element: HTMLElement }): ChipsComponent => {\n return {\n ...component as any,\n \n // Element access\n element: component.element,\n \n // Chip management\n addChip(chipConfig) {\n if (options.chips && typeof options.chips.addChip === 'function') {\n options.chips.addChip(chipConfig);\n }\n return this;\n },\n \n removeChip(chipOrIndex) {\n if (options.chips && typeof options.chips.removeChip === 'function') {\n options.chips.removeChip(chipOrIndex);\n }\n return this;\n },\n \n getChips() {\n if (options.chips && typeof options.chips.getChips === 'function') {\n return options.chips.getChips();\n }\n return [];\n },\n \n getSelectedChips() {\n if (options.chips && typeof options.chips.getSelectedChips === 'function') {\n return options.chips.getSelectedChips();\n }\n return [];\n },\n \n getSelectedValues() {\n if (options.chips && typeof options.chips.getSelectedValues === 'function') {\n return options.chips.getSelectedValues();\n }\n return [];\n },\n \n /**\n * Selects chips by their values\n * @param values - Value or array of values to select\n * @param triggerEvent - Whether to trigger change event (default: true)\n * @returns The chips instance for chaining\n */\n selectByValue(values, triggerEvent = true) {\n if (options.chips && typeof options.chips.selectByValue === 'function') {\n options.chips.selectByValue(values, triggerEvent);\n }\n return this;\n },\n \n clearSelection() {\n if (options.chips && typeof options.chips.clearSelection === 'function') {\n options.chips.clearSelection();\n }\n return this;\n },\n \n // Layout management\n setScrollable(isScrollable) {\n if (options.layout && typeof options.layout.setScrollable === 'function') {\n options.layout.setScrollable(isScrollable);\n }\n return this;\n },\n \n setVertical(isVertical) {\n if (options.layout && typeof options.layout.setVertical === 'function') {\n options.layout.setVertical(isVertical);\n }\n return this;\n },\n \n // Label management\n setLabel(text) {\n if (options.label && typeof options.label.setText === 'function') {\n options.label.setText(text);\n }\n return this;\n },\n \n getLabel() {\n if (options.label && typeof options.label.getText === 'function') {\n return options.label.getText();\n }\n return '';\n },\n \n setLabelPosition(position) {\n if (options.label && typeof options.label.setPosition === 'function') {\n options.label.setPosition(position);\n }\n return this;\n },\n \n getLabelPosition() {\n if (options.label && typeof options.label.getPosition === 'function') {\n return options.label.getPosition();\n }\n return 'start';\n },\n \n // Navigation\n scrollToChip(chipOrIndex) {\n if (options.chips && typeof options.chips.scrollToChip === 'function') {\n options.chips.scrollToChip(chipOrIndex);\n }\n return this;\n },\n \n enableKeyboardNavigation() {\n if (options.keyboard && typeof options.keyboard.enableKeyboardNavigation === 'function') {\n options.keyboard.enableKeyboardNavigation();\n }\n return this;\n },\n \n // Event management\n on(event, handler) {\n if (options.events && typeof options.events.on === 'function') {\n options.events.on(event, handler);\n }\n return this;\n },\n \n off(event, handler) {\n if (options.events && typeof options.events.off === 'function') {\n options.events.off(event, handler);\n }\n return this;\n },\n \n // Lifecycle management\n destroy() {\n if (options.lifecycle && typeof options.lifecycle.destroy === 'function') {\n options.lifecycle.destroy();\n }\n }\n };\n };",
|
|
149
|
-
"// src/components/chips/config.ts\nimport {
|
|
150
|
-
"// src/components/chips/schema.ts\nimport { ChipsConfig } from './types';\n\n/**\n * Creates the base chips structure definition\n * \n * @param component Component for class name generation\n * @param config Chips configuration\n * @returns Structure schema object\n */\nexport function createChipsSchema(component, config: ChipsConfig) {\n // Get prefixed class names\n const getClass = (className) => component.getClass(className);\n\n // Set default values\n const scrollable = config.scrollable === true;\n const vertical = config.vertical === true;\n const isMultiSelect = config.multiSelect === true;\n const hasLabel = config.label && config.label.trim().length > 0;\n const labelPosition = config.labelPosition || 'start';\n \n // Return base structure definition formatted for createStructure\n return {\n element: {\n options: {\n className: [\n getClass('chips'),\n scrollable ? getClass('chips--scrollable') : null,\n vertical ? getClass('chips--vertical') : null,\n hasLabel ? getClass('chips--with-label') : null,\n hasLabel && labelPosition === 'end' ? getClass('chips--label-end') : null,\n config.class\n ].filter(Boolean),\n attributes: {\n // tabindex: '0',\n role: 'group',\n 'aria-multiselectable': isMultiSelect ? 'true' : 'false'\n }\n },\n children: {\n // Label element if provided\n ...(hasLabel ? {\n label: {\n options: {\n tag: 'label',\n className: getClass('chips-label'),\n text: config.label\n }\n }\n } : {}),\n \n // Chips container where chip instances will be inserted\n chipContainer: {\n options: {\n className: getClass('chips-container')\n }\n }\n }\n }\n };\n}",
|
|
110
|
+
"// src/components/chips/config.ts\nimport {\n createComponentConfig,\n createElementConfig,\n} from \"../../core/config/component\";\nimport { ChipsConfig } from \"./types\";\n\n/**\n * Default configuration for the Chips component\n */\nexport const defaultConfig: ChipsConfig = {\n chips: [],\n scrollable: false,\n vertical: false,\n multiSelect: false,\n onChange: null,\n selector: null,\n labelPosition: \"start\",\n};\n\n/**\n * Creates the base configuration for Chips component\n * @param {ChipsConfig} config - User provided configuration\n * @returns {ChipsConfig} Complete configuration with defaults applied\n */\nexport const createBaseConfig = (config: ChipsConfig = {}): ChipsConfig => {\n // Create the base config with defaults applied\n const baseConfig = createComponentConfig(\n defaultConfig,\n config,\n \"chips\"\n ) as ChipsConfig;\n\n return baseConfig;\n};\n\n/**\n * Generates element configuration for the Chips component\n * @param {ChipsConfig} config - Chips configuration\n * @returns {Object} Element configuration object for withElement\n */\nexport const getElementConfig = (config: ChipsConfig) => {\n // Set default values\n const scrollable = config.scrollable === true;\n const vertical = config.vertical === true;\n const isMultiSelect = config.multiSelect === true;\n const hasLabel = config.label && config.label.trim().length > 0;\n const labelPosition = config.labelPosition || \"start\";\n\n const classes = [\n \"chips\",\n config.class,\n scrollable ? \"chips--scrollable\" : \"\",\n vertical ? \"chips--vertical\" : \"\",\n hasLabel ? \"chips--with-label\" : \"\",\n hasLabel && labelPosition === \"end\" ? \"chips--label-end\" : \"\",\n ]\n .filter(Boolean)\n .join(\" \");\n\n return createElementConfig(config, {\n tag: \"div\",\n attributes: {\n role: \"group\",\n \"aria-multiselectable\": isMultiSelect ? \"true\" : \"false\",\n },\n className: classes,\n });\n};\n\n/**\n * Creates API configuration for the Chips component\n * @param {Object} comp - Component with chips features\n * @returns {Object} API configuration object\n */\nexport const getApiConfig = (comp) => ({\n chips: {\n addChip: function (chipConfig) {\n if (comp.chips && typeof comp.chips.addChip === \"function\") {\n return comp.chips.addChip(chipConfig);\n }\n return null;\n },\n removeChip: (chipOrIndex) => comp.chips?.removeChip?.(chipOrIndex),\n getChips: () => comp.chips?.getChips?.() ?? [],\n getSelectedChips: () => comp.chips?.getSelectedChips?.() ?? [],\n getSelectedValues: () => comp.chips?.getSelectedValues?.() ?? [],\n selectByValue: (values) => comp.chips?.selectByValue?.(values),\n clearSelection: () => comp.chips?.clearSelection?.(),\n scrollToChip: (chipOrIndex) => comp.chips?.scrollToChip?.(chipOrIndex),\n },\n layout: {\n setScrollable: (isScrollable) => comp.layout?.setScrollable?.(isScrollable),\n isScrollable: () => comp.layout?.isScrollable?.() ?? false,\n setVertical: (isVertical) => comp.layout?.setVertical?.(isVertical),\n isVertical: () => comp.layout?.isVertical?.() ?? false,\n },\n label: {\n setText: (t) => comp.label?.setText?.(t),\n getText: () => comp.label?.getText?.() ?? \"\",\n setPosition: (p) => comp.label?.setPosition?.(p),\n getPosition: () => comp.label?.getPosition?.() ?? \"start\",\n },\n keyboard: {\n enableKeyboardNavigation: () => comp.keyboard?.enable?.(),\n disableKeyboardNavigation: () => comp.keyboard?.disable?.(),\n },\n events: {\n on: (e, h) => comp.on?.(e, h),\n off: (e, h) => comp.off?.(e, h),\n },\n lifecycle: {\n destroy: () => comp.lifecycle?.destroy?.(),\n },\n});\n",
|
|
151
111
|
"// src/components/datepicker/datepicker.ts\nimport { PREFIX } from \"../../core/config\";\nimport { pipe } from \"../../core/compose\";\nimport { createBase, withElement } from \"../../core/compose/component\";\nimport {\n withEvents,\n withDisabled,\n withLifecycle,\n} from \"../../core/compose/features\";\n\nimport { withAPI } from \"./api\";\nimport { DatePickerConfig, DatePickerComponent } from \"./types\";\nimport {\n createBaseConfig,\n getContainerConfig,\n getInputConfig,\n getCalendarConfig,\n getApiConfig,\n} from \"./config\";\nimport { formatDate, parseDate } from \"./utils\";\nimport { renderCalendar } from \"./render\";\nimport { createElement } from \"../../core/dom/create\";\n\n/**\n * Creates a new DatePicker component\n * @param {DatePickerConfig} config - DatePicker configuration object\n * @returns {DatePickerComponent} DatePicker component instance\n */\nconst createDatePicker = (\n config: DatePickerConfig = {}\n): DatePickerComponent => {\n const baseConfig = createBaseConfig(config);\n\n try {\n // Initialize state\n const state: any = {\n isOpen: false,\n selectedDate: null,\n rangeEndDate: null,\n currentView: baseConfig.initialView,\n currentMonth: new Date().getMonth(),\n currentYear: new Date().getFullYear(),\n minDate: baseConfig.minDate ? parseDate(baseConfig.minDate) : null,\n maxDate: baseConfig.maxDate ? parseDate(baseConfig.maxDate) : null,\n dateFormat: baseConfig.dateFormat,\n variant: baseConfig.variant,\n selectionMode: baseConfig.selectionMode,\n closeOnSelect: baseConfig.closeOnSelect,\n prefix: baseConfig.prefix || PREFIX,\n calendarElement: null,\n input: null,\n\n updateInputValue(): void {\n if (!this.input) return;\n\n if (!this.selectedDate) {\n this.input.value = \"\";\n return;\n }\n\n // Format for range selection\n if (this.selectionMode === \"range\" && this.rangeEndDate) {\n const startStr = formatDate(this.selectedDate, this.dateFormat);\n const endStr = formatDate(this.rangeEndDate, this.dateFormat);\n this.input.value = `${startStr} - ${endStr}`;\n return;\n }\n\n // Format for single selection\n this.input.value = formatDate(this.selectedDate, this.dateFormat);\n },\n\n updateCalendar(): void {\n if (!this.isOpen || !this.calendarElement) return;\n\n // Clear existing content\n this.calendarElement.innerHTML = \"\";\n\n // Render calendar content\n const calendar = renderCalendar(this, (event, data) => {\n switch (event) {\n case \"dateSelected\":\n this.handleDateSelection(data.date);\n break;\n\n case \"monthSelected\":\n this.currentMonth = data.month;\n this.currentView = \"day\";\n this.updateCalendar();\n break;\n\n case \"yearSelected\":\n this.currentYear = data.year;\n this.currentView = \"month\";\n this.updateCalendar();\n break;\n\n case \"viewChange\":\n this.currentView = data.view;\n this.updateCalendar();\n break;\n\n case \"prevMonth\":\n this.prevMonth();\n break;\n\n case \"nextMonth\":\n this.nextMonth();\n break;\n\n case \"prevYear\":\n this.prevYear();\n break;\n\n case \"nextYear\":\n this.nextYear();\n break;\n\n case \"prevYearRange\":\n this.currentYear -= 20;\n this.updateCalendar();\n break;\n\n case \"nextYearRange\":\n this.currentYear += 20;\n this.updateCalendar();\n break;\n\n case \"cancel\":\n this.isOpen = false;\n this.render();\n break;\n\n case \"confirm\":\n this.isOpen = false;\n this.render();\n break;\n }\n });\n\n this.calendarElement.appendChild(calendar);\n },\n\n handleDateSelection(date: Date): void {\n // Range selection\n if (this.selectionMode === \"range\") {\n // If no date is selected yet or both dates are already selected, start a new range\n if (!this.selectedDate || (this.selectedDate && this.rangeEndDate)) {\n this.selectedDate = date;\n this.rangeEndDate = null;\n }\n // If start date is selected but not end date\n else {\n // If selected date is before the start date, swap them\n if (date < this.selectedDate) {\n this.rangeEndDate = this.selectedDate;\n this.selectedDate = date;\n } else {\n this.rangeEndDate = date;\n }\n\n // Close if needed\n if (this.closeOnSelect) {\n this.isOpen = false;\n }\n }\n }\n // Single date selection\n else {\n this.selectedDate = date;\n\n // Close if needed\n if (this.closeOnSelect) {\n this.isOpen = false;\n }\n }\n\n // Update the input value\n this.updateInputValue();\n\n // Update the calendar view\n this.updateCalendar();\n\n // Emit change event\n component.emit(\"change\", {\n value: this.selectedDate,\n rangeEndDate: this.rangeEndDate,\n formattedValue: this.input.value,\n });\n },\n\n prevMonth(): void {\n if (this.currentMonth === 0) {\n this.currentMonth = 11;\n this.currentYear--;\n } else {\n this.currentMonth--;\n }\n this.updateCalendar();\n },\n\n nextMonth(): void {\n if (this.currentMonth === 11) {\n this.currentMonth = 0;\n this.currentYear++;\n } else {\n this.currentMonth++;\n }\n this.updateCalendar();\n },\n\n prevYear(): void {\n this.currentYear--;\n this.updateCalendar();\n },\n\n nextYear(): void {\n this.currentYear++;\n this.updateCalendar();\n },\n\n render(): void {\n // Show/hide calendar\n if (this.calendarElement) {\n if (this.isOpen) {\n this.calendarElement.style.display = \"block\";\n this.updateCalendar();\n\n // Focus on the calendar\n setTimeout(() => {\n this.calendarElement.focus();\n }, 10);\n } else {\n this.calendarElement.style.display = \"none\";\n }\n }\n },\n };\n\n // Initialize with provided value if any\n if (baseConfig.value) {\n if (\n Array.isArray(baseConfig.value) &&\n baseConfig.selectionMode === \"range\"\n ) {\n const start = parseDate(baseConfig.value[0]);\n const end = parseDate(baseConfig.value[1]);\n\n if (start && end) {\n state.selectedDate = start;\n state.rangeEndDate = end;\n\n // Set current month/year to selected date\n state.currentMonth = start.getMonth();\n state.currentYear = start.getFullYear();\n }\n } else {\n const date = parseDate(baseConfig.value as Date | string);\n if (date) {\n state.selectedDate = date;\n state.currentMonth = date.getMonth();\n state.currentYear = date.getFullYear();\n }\n }\n }\n\n // Create the component\n const component = pipe(\n createBase,\n withEvents(),\n withElement(getContainerConfig(baseConfig)),\n withDisabled(baseConfig),\n withLifecycle()\n )(baseConfig);\n\n // Create input element\n const inputComponent = pipe(\n createBase,\n withElement(getInputConfig(baseConfig))\n )(baseConfig);\n\n state.input = inputComponent.element;\n component.element.appendChild(state.input);\n\n // Update input value\n state.updateInputValue();\n\n // Create calendar element\n const calendarConfig = getCalendarConfig(baseConfig);\n state.calendarElement = createElement({\n tag: \"div\",\n className: calendarConfig.className,\n attributes: calendarConfig.attributes,\n });\n\n // Initially hide calendar\n state.calendarElement.style.display = \"none\";\n\n // Add calendar to container\n component.element.appendChild(state.calendarElement);\n\n // Add event listeners\n state.input.addEventListener(\"click\", () => {\n if (!component.element.classList.contains(\"disabled\")) {\n state.isOpen = !state.isOpen;\n state.render();\n\n if (state.isOpen) {\n component.emit(\"open\", { value: state.selectedDate });\n } else {\n component.emit(\"close\", { value: state.selectedDate });\n }\n }\n });\n\n // BUGFIX: Prevent calendar close when clicking inside the calendar\n state.calendarElement.addEventListener(\"click\", (event) => {\n // Stop propagation to prevent the document click handler from closing the calendar\n event.stopPropagation();\n });\n\n // Handle outside clicks\n document.addEventListener(\"click\", (event) => {\n if (state.isOpen && !component.element.contains(event.target as Node)) {\n state.isOpen = false;\n state.render();\n component.emit(\"close\", { value: state.selectedDate });\n }\n });\n\n // Enhance with API\n return withAPI(state, getApiConfig(component))(component);\n } catch (error) {\n console.error(\"DatePicker creation error:\", error);\n throw new Error(`Failed to create DatePicker: ${(error as Error).message}`);\n }\n};\n\nexport default createDatePicker;\n",
|
|
152
112
|
"// src/components/datepicker/types.ts\n\n/**\n * DatePicker variant types\n * @category Components\n */\nexport type DatePickerVariant = 'docked' | 'modal' | 'modal-input';\n\n/**\n * DatePicker view types\n * @category Components\n */\nexport type DatePickerView = 'day' | 'month' | 'year';\n\n/**\n * DatePicker selection mode types\n * @category Components\n */\nexport type DatePickerSelectionMode = 'single' | 'range';\n\n/**\n * Day names for the calendar\n * @internal\n */\nexport const DAY_NAMES = ['S', 'M', 'T', 'W', 'T', 'F', 'S'];\n\n/**\n * Month names for the calendar\n * @internal\n */\nexport const MONTH_NAMES = [\n 'January', 'February', 'March', 'April', \n 'May', 'June', 'July', 'August',\n 'September', 'October', 'November', 'December'\n];\n\n/**\n * Month names abbreviated\n * @internal\n */\nexport const MONTH_NAMES_SHORT = [\n 'Jan', 'Feb', 'Mar', 'Apr', \n 'May', 'Jun', 'Jul', 'Aug',\n 'Sep', 'Oct', 'Nov', 'Dec'\n];\n\n/**\n * Default format for displaying dates\n * @internal\n */\nexport const DEFAULT_DATE_FORMAT = 'MM/DD/YYYY';\n\n/**\n * CSS class name for today's date\n * @internal\n */\nexport const TODAY_CLASS = 'today';\n\n/**\n * CSS class name for selected date\n * @internal\n */\nexport const SELECTED_CLASS = 'selected';\n\n/**\n * CSS class name for dates outside the current month\n * @internal\n */\nexport const OUTSIDE_MONTH_CLASS = 'outside-month';\n\n/**\n * CSS class for the first date in a range\n * @internal\n */\nexport const RANGE_START_CLASS = 'range-start';\n\n/**\n * CSS class for the last date in a range\n * @internal\n */\nexport const RANGE_END_CLASS = 'range-end';\n\n/**\n * CSS class for dates between start and end in a range\n * @internal\n */\nexport const RANGE_MIDDLE_CLASS = 'range-middle';\n\n/**\n * Configuration interface for the DatePicker component\n * @category Components\n */\nexport interface DatePickerConfig {\n /** \n * DatePicker variant that determines display style\n * @default 'docked'\n */\n variant?: DatePickerVariant | string;\n \n /** \n * Whether the datepicker is initially disabled\n * @default false\n */\n disabled?: boolean;\n \n /** \n * Initial view to display (day, month, year)\n * @default 'day'\n */\n initialView?: DatePickerView | string;\n \n /** \n * Selection mode for the datepicker (single or range)\n * @default 'single'\n */\n selectionMode?: DatePickerSelectionMode | string;\n \n /** \n * Initial selected date(s)\n * Accepts a Date object, Date string, or two dates for range selection\n */\n value?: Date | string | [Date | string, Date | string];\n \n /** \n * Minimum selectable date\n */\n minDate?: Date | string;\n \n /** \n * Maximum selectable date\n */\n maxDate?: Date | string;\n \n /** \n * Format for displaying dates\n * @default 'MM/DD/YYYY'\n */\n dateFormat?: string;\n \n /** \n * Label text for the datepicker\n * @example 'Select Date'\n */\n label?: string;\n \n /** \n * Placeholder text for the input field\n * @example 'MM/DD/YYYY'\n */\n placeholder?: string;\n \n /** \n * Additional CSS classes to add to the datepicker\n * @example 'form-field event-date'\n */\n class?: string;\n \n /** \n * Component prefix for class names\n * @default 'mtrl'\n */\n prefix?: string;\n \n /**\n * Component name used in class generation\n */\n componentName?: string;\n \n /**\n * Whether to enable animation effects\n * @default true\n */\n animate?: boolean;\n\n /**\n * Whether to close the picker when a date is selected\n * @default true for modal variants, false for docked\n */\n closeOnSelect?: boolean;\n\n /**\n * Array of dates to highlight or disable\n */\n specialDates?: Array<{\n date: Date | string;\n highlight?: boolean;\n disabled?: boolean;\n tooltip?: string;\n }>;\n}\n\n/**\n * Date object with additional properties for rendering\n * @internal\n */\nexport interface CalendarDate {\n /** JavaScript Date object */\n date: Date;\n \n /** Day of the month (1-31) */\n day: number;\n \n /** Whether the date is in the current month being displayed */\n isCurrentMonth: boolean;\n \n /** Whether the date is today */\n isToday: boolean;\n \n /** Whether the date is selected */\n isSelected: boolean;\n \n /** Whether the date is disabled */\n isDisabled: boolean;\n \n /** Whether the date is the first date in a range */\n isRangeStart?: boolean;\n \n /** Whether the date is the last date in a range */\n isRangeEnd?: boolean;\n \n /** Whether the date is between start and end in a range */\n isRangeMiddle?: boolean;\n}\n\n/**\n * Calendar API interface for managing calendar navigation\n * @category Components\n */\nexport interface CalendarAPI {\n /** Updates the calendar view to display a specific month/year */\n goToDate: (date: Date) => void;\n \n /** Moves to the next month */\n nextMonth: () => void;\n \n /** Moves to the previous month */\n prevMonth: () => void;\n \n /** Moves to the next year */\n nextYear: () => void;\n \n /** Moves to the previous year */\n prevYear: () => void;\n \n /** Switches to day selection view */\n showDayView: () => void;\n \n /** Switches to month selection view */\n showMonthView: () => void;\n \n /** Switches to year selection view */\n showYearView: () => void;\n \n /** Gets the current calendar view */\n getCurrentView: () => string;\n}\n\n/**\n * DatePicker component interface\n * @category Components\n */\nexport interface DatePickerComponent {\n /** The datepicker's main DOM element */\n element: HTMLElement;\n \n /** The input field DOM element */\n input: HTMLInputElement;\n \n /** API for managing calendar and selected dates */\n calendar: CalendarAPI;\n \n /** API for managing disabled state */\n disabled: {\n /** Enables the datepicker */\n enable: () => void;\n /** Disables the datepicker */\n disable: () => void;\n /** Checks if the datepicker is disabled */\n isDisabled: () => boolean;\n };\n \n /** API for managing component lifecycle */\n lifecycle: {\n /** Destroys the component and cleans up resources */\n destroy: () => void;\n };\n \n /**\n * Gets a class name with the component's prefix\n * @param name - Base class name\n * @returns Prefixed class name\n */\n getClass: (name: string) => string;\n \n /**\n * Opens the datepicker dropdown/modal\n * @returns The datepicker component for chaining\n */\n open: () => DatePickerComponent;\n \n /**\n * Closes the datepicker dropdown/modal\n * @returns The datepicker component for chaining\n */\n close: () => DatePickerComponent;\n \n /**\n * Gets the selected date(s)\n * @returns Date object, array of two Date objects for range, or null if none selected\n */\n getValue: () => Date | [Date, Date] | null;\n \n /**\n * Sets the selected date(s)\n * @param value - Date, string, or array of dates for range selection\n * @returns The datepicker component for chaining\n */\n setValue: (value: Date | string | [Date | string, Date | string]) => DatePickerComponent;\n \n /**\n * Gets the formatted date string based on the selected date(s)\n * @returns Formatted date string or empty string if none selected\n */\n getFormattedValue: () => string;\n \n /**\n * Clears the selected date(s)\n * @returns The datepicker component for chaining\n */\n clear: () => DatePickerComponent;\n \n /**\n * Enables the datepicker\n * @returns The datepicker component for chaining\n */\n enable: () => DatePickerComponent;\n \n /**\n * Disables the datepicker\n * @returns The datepicker component for chaining\n */\n disable: () => DatePickerComponent;\n \n /**\n * Sets the minimum selectable date\n * @param date - Date object or string\n * @returns The datepicker component for chaining\n */\n setMinDate: (date: Date | string) => DatePickerComponent;\n \n /**\n * Sets the maximum selectable date\n * @param date - Date object or string\n * @returns The datepicker component for chaining\n */\n setMaxDate: (date: Date | string) => DatePickerComponent;\n \n /**\n * Destroys the datepicker component and cleans up resources\n */\n destroy: () => void;\n \n /**\n * Adds an event listener to the datepicker\n * @param event - Event name ('change', 'open', 'close', etc.)\n * @param handler - Event handler function\n * @returns The datepicker component for chaining\n */\n on: (event: string, handler: Function) => DatePickerComponent;\n \n /**\n * Removes an event listener from the datepicker\n * @param event - Event name\n * @param handler - Event handler function\n * @returns The datepicker component for chaining\n */\n off: (event: string, handler: Function) => DatePickerComponent;\n}\n\n/**\n * API options interface for withAPI function\n * @internal\n */\nexport interface ApiOptions {\n disabled: {\n enable: () => void;\n disable: () => void;\n };\n lifecycle: {\n destroy: () => void;\n };\n events: {\n on: (event: string, handler: Function) => any;\n off: (event: string, handler: Function) => any;\n emit: (event: string, data: any) => any;\n };\n}",
|
|
153
113
|
"// src/components/datepicker/utils.ts\nimport { CalendarDate, MONTH_NAMES, MONTH_NAMES_SHORT } from './types';\n\n/**\n * Parses a date from various input types\n * @param date - Date string, Date object, or null\n * @returns Valid Date object or null if invalid\n */\nexport const parseDate = (date: Date | string | null): Date | null => {\n if (!date) return null;\n \n // Already a Date object\n if (date instanceof Date) {\n return isNaN(date.getTime()) ? null : date;\n }\n \n // String date\n if (typeof date === 'string') {\n // Try to parse the string\n const parsedDate = new Date(date);\n return isNaN(parsedDate.getTime()) ? null : parsedDate;\n }\n \n return null;\n};\n\n/**\n * Formats a date according to the specified format using a parser-based approach\n * This avoids string replacement issues by building the output string from scratch\n * \n * @param date - Date to format\n * @param format - Format string (MM/DD/YYYY, etc.)\n * @returns Formatted date string\n */\nexport const formatDate = (date: Date | null, format: string = 'MM/DD/YYYY'): string => {\n if (!date || !(date instanceof Date) || isNaN(date.getTime())) {\n return '';\n }\n \n let result = '';\n let i = 0;\n \n while (i < format.length) {\n // Check for month name patterns\n if (format.substring(i, i+4) === 'MMMM') {\n // Full month name\n result += MONTH_NAMES[date.getMonth()];\n i += 4;\n } \n else if (format.substring(i, i+3) === 'MMM') {\n // Abbreviated month name\n result += MONTH_NAMES_SHORT[date.getMonth()];\n i += 3;\n }\n else if (format.substring(i, i+2) === 'MM') {\n // Two-digit month\n result += (date.getMonth() + 1).toString().padStart(2, '0');\n i += 2;\n }\n else if (format.substring(i, i+1) === 'M') {\n // Single-digit month\n result += (date.getMonth() + 1);\n i += 1;\n }\n else if (format.substring(i, i+4) === 'YYYY') {\n // 4-digit year\n result += date.getFullYear();\n i += 4;\n }\n else if (format.substring(i, i+2) === 'YY') {\n // 2-digit year\n result += date.getFullYear().toString().slice(-2);\n i += 2;\n }\n else if (format.substring(i, i+2) === 'DD') {\n // Two-digit day\n result += date.getDate().toString().padStart(2, '0');\n i += 2;\n }\n else if (format.substring(i, i+1) === 'D') {\n // Single-digit day\n result += date.getDate();\n i += 1;\n }\n else {\n // Any other character is copied as-is\n result += format[i];\n i += 1;\n }\n }\n \n return result;\n};\n\n/**\n * Gets the days in a month\n * @param year - Year\n * @param month - Month (0-11)\n * @returns Number of days in the month\n */\nexport const getDaysInMonth = (year: number, month: number): number => {\n return new Date(year, month + 1, 0).getDate();\n};\n\n/**\n * Gets the first day of the month\n * @param year - Year\n * @param month - Month (0-11)\n * @returns Day of the week (0-6, where 0 is Sunday)\n */\nexport const getFirstDayOfMonth = (year: number, month: number): number => {\n return new Date(year, month, 1).getDay();\n};\n\n/**\n * Checks if two dates are the same day\n * @param date1 - First date\n * @param date2 - Second date\n * @returns True if same day, false otherwise\n */\nexport const isSameDay = (date1: Date, date2: Date): boolean => {\n return (\n date1.getDate() === date2.getDate() &&\n date1.getMonth() === date2.getMonth() &&\n date1.getFullYear() === date2.getFullYear()\n );\n};\n\n/**\n * Checks if a date is between two other dates (inclusive)\n * @param date - Date to check\n * @param startDate - Start date\n * @param endDate - End date\n * @returns True if date is between start and end, false otherwise\n */\nexport const isDateInRange = (date: Date, startDate: Date, endDate: Date): boolean => {\n const timestamp = date.getTime();\n return timestamp >= startDate.getTime() && timestamp <= endDate.getTime();\n};\n\n/**\n * Generates calendar dates for a month\n * @param year - Year\n * @param month - Month (0-11)\n * @param selectedDate - Currently selected date\n * @param rangeEndDate - End date if range selection\n * @param minDate - Minimum selectable date\n * @param maxDate - Maximum selectable date\n * @returns Array of calendar dates\n */\nexport const generateCalendarDates = (\n year: number,\n month: number,\n selectedDate: Date | null = null,\n rangeEndDate: Date | null = null,\n minDate: Date | null = null,\n maxDate: Date | null = null\n): CalendarDate[] => {\n const today = new Date();\n today.setHours(0, 0, 0, 0);\n \n const result: CalendarDate[] = [];\n \n // Calculate days needed from previous month\n const firstDay = getFirstDayOfMonth(year, month);\n const daysInPrevMonth = getDaysInMonth(year, month - 1);\n \n // Add days from previous month\n for (let i = firstDay - 1; i >= 0; i--) {\n const date = new Date(year, month - 1, daysInPrevMonth - i);\n const isDisabled = \n (minDate && date < minDate) || \n (maxDate && date > maxDate);\n \n result.push({\n date,\n day: date.getDate(),\n isCurrentMonth: false,\n isToday: isSameDay(date, today),\n isSelected: selectedDate ? isSameDay(date, selectedDate) : false,\n isDisabled\n });\n }\n \n // Add days from current month\n const daysInMonth = getDaysInMonth(year, month);\n for (let i = 1; i <= daysInMonth; i++) {\n const date = new Date(year, month, i);\n const isSelected = selectedDate ? isSameDay(date, selectedDate) : false;\n const isDisabled = \n (minDate && date < minDate) || \n (maxDate && date > maxDate);\n \n const calendarDate: CalendarDate = {\n date,\n day: i,\n isCurrentMonth: true,\n isToday: isSameDay(date, today),\n isSelected,\n isDisabled\n };\n \n // Handle range selection\n if (selectedDate && rangeEndDate) {\n calendarDate.isRangeStart = isSameDay(date, selectedDate);\n calendarDate.isRangeEnd = isSameDay(date, rangeEndDate);\n calendarDate.isRangeMiddle = isDateInRange(date, selectedDate, rangeEndDate) && \n !calendarDate.isRangeStart && !calendarDate.isRangeEnd;\n }\n \n result.push(calendarDate);\n }\n \n // Add days from next month to complete the calendar grid (6 rows × 7 columns)\n const totalDaysNeeded = 42; // 6 rows × 7 columns\n const remainingDays = totalDaysNeeded - result.length;\n \n for (let i = 1; i <= remainingDays; i++) {\n const date = new Date(year, month + 1, i);\n const isDisabled = \n (minDate && date < minDate) || \n (maxDate && date > maxDate);\n \n result.push({\n date,\n day: i,\n isCurrentMonth: false,\n isToday: isSameDay(date, today),\n isSelected: selectedDate ? isSameDay(date, selectedDate) : false,\n isDisabled\n });\n }\n \n return result;\n};\n\n/**\n * Generates an array of years for year selection\n * @param currentYear - Center year for the range\n * @param range - Number of years before and after current year\n * @returns Array of years\n */\nexport const generateYearRange = (currentYear: number, range: number = 10): number[] => {\n const years: number[] = [];\n const startYear = currentYear - range;\n const endYear = currentYear + range;\n \n for (let year = startYear; year <= endYear; year++) {\n years.push(year);\n }\n \n return years;\n};\n\n/**\n * Adds days to a date\n * @param date - Base date\n * @param days - Number of days to add\n * @returns New date with days added\n */\nexport const addDays = (date: Date, days: number): Date => {\n const result = new Date(date);\n result.setDate(result.getDate() + days);\n return result;\n};\n\n/**\n * Adds months to a date\n * @param date - Base date\n * @param months - Number of months to add\n * @returns New date with months added\n */\nexport const addMonths = (date: Date, months: number): Date => {\n const result = new Date(date);\n result.setMonth(result.getMonth() + months);\n return result;\n};\n\n/**\n * Adds years to a date\n * @param date - Base date\n * @param years - Number of years to add\n * @returns New date with years added\n */\nexport const addYears = (date: Date, years: number): Date => {\n const result = new Date(date);\n result.setFullYear(result.getFullYear() + years);\n return result;\n};",
|
|
@@ -211,16 +171,17 @@
|
|
|
211
171
|
"// src/components/sheet/api.ts\nimport { SheetComponent } from './types';\n\ninterface ApiOptions {\n state: {\n open: () => void;\n close: () => void;\n };\n lifecycle: {\n destroy: () => void;\n };\n}\n\ninterface ComponentWithElements {\n element: HTMLElement;\n container: HTMLElement;\n content: {\n setContent: (html: string) => any;\n getContent: () => string;\n getElement: () => HTMLElement | null;\n };\n title: {\n setTitle: (text: string) => any;\n getTitle: () => string;\n getElement: () => HTMLElement | null;\n };\n getClass: (name: string) => string;\n dragHandle?: {\n setVisible: (visible: boolean) => any;\n };\n initialize?: () => void;\n}\n\n/**\n * Enhances a sheet component with API methods\n * @param {ApiOptions} options - API configuration options\n * @returns {Function} Higher-order function that adds API methods to component\n * @internal This is an internal utility for the Sheet component\n */\nexport const withAPI = ({ state, lifecycle }: ApiOptions) => \n (component: ComponentWithElements): SheetComponent => ({\n ...component as any,\n element: component.element,\n container: component.container,\n \n open() {\n state.open();\n return this;\n },\n \n close() {\n state.close();\n return this;\n },\n \n setContent(html: string) {\n component.content.setContent(html);\n return this;\n },\n \n getContent() {\n return component.content.getContent();\n },\n \n setTitle(text: string) {\n component.title.setTitle(text);\n return this;\n },\n \n getTitle() {\n return component.title.getTitle();\n },\n \n setDragHandle(enabled: boolean) {\n if (component.dragHandle) {\n component.dragHandle.setVisible(enabled);\n }\n return this;\n },\n \n setMaxHeight(height: string) {\n component.container.style.maxHeight = height;\n return this;\n },\n \n destroy() {\n lifecycle.destroy();\n },\n \n initialize() {\n if (component.initialize) {\n component.initialize();\n }\n return this;\n }\n });",
|
|
212
172
|
"// src/components/sheet/config.ts\nimport {\n createComponentConfig,\n createElementConfig,\n} from \"../../core/config/component\";\nimport { SheetConfig } from \"./types\";\nimport { SHEET_VARIANTS, SHEET_POSITIONS, SHEET_DEFAULTS } from \"./constants\";\n\n/**\n * Default configuration for the Sheet component\n */\nexport const defaultConfig: SheetConfig = {\n variant: SHEET_VARIANTS.STANDARD,\n position: SHEET_POSITIONS.BOTTOM,\n open: SHEET_DEFAULTS.OPEN,\n dismissible: SHEET_DEFAULTS.DISMISSIBLE,\n dragHandle: SHEET_DEFAULTS.DRAG_HANDLE,\n elevation: SHEET_DEFAULTS.ELEVATION,\n enableGestures: SHEET_DEFAULTS.ENABLE_GESTURES,\n};\n\n/**\n * Creates the base configuration for Sheet component\n * @param {SheetConfig} config - User provided configuration\n * @returns {SheetConfig} Complete configuration with defaults applied\n */\nexport const createBaseConfig = (config: SheetConfig = {}): SheetConfig =>\n createComponentConfig(defaultConfig, config, \"sheet\") as SheetConfig;\n\n/**\n * Generates element configuration for the Sheet component\n * @param {SheetConfig} config - Sheet configuration\n * @returns {Object} Element configuration object for withElement\n */\nexport const getElementConfig = (config: SheetConfig) => {\n return createElementConfig(config, {\n tag: \"div\",\n attributes: {\n role: \"dialog\",\n \"aria-modal\": config.variant === SHEET_VARIANTS.MODAL ? \"true\" : \"false\",\n },\n className: config.class,\n forwardEvents: {\n click: true,\n keydown: true,\n },\n });\n};\n\n/**\n * Creates API configuration for the Sheet component\n * @param {Object} comp - Component with state and lifecycle features\n * @returns {Object} API configuration object\n */\nexport const getApiConfig = (comp) => ({\n state: {\n open: () => comp.state.open(),\n close: () => comp.state.close(),\n },\n lifecycle: {\n destroy: () => comp.lifecycle.destroy(),\n },\n});\n\nexport default defaultConfig;\n",
|
|
213
173
|
"// src/components/sheet/constants.ts\n\n/**\n * Sheet variants\n */\nexport const SHEET_VARIANTS = {\n /** Standard sheet with light elevation */\n STANDARD: 'standard',\n /** Modal sheet with overlay scrim */\n MODAL: 'modal',\n /** Expanded sheet that takes full screen */\n EXPANDED: 'expanded'\n} as const;\n\n/**\n * Sheet positions\n */\nexport const SHEET_POSITIONS = {\n /** Sheet appears from the bottom of the screen */\n BOTTOM: 'bottom',\n /** Sheet appears from the top of the screen */\n TOP: 'top',\n /** Sheet appears from the left of the screen */\n LEFT: 'left',\n /** Sheet appears from the right of the screen */\n RIGHT: 'right'\n} as const;\n\n/**\n * Sheet events\n */\nexport const SHEET_EVENTS = {\n /** Fired when sheet is opened */\n OPEN: 'open',\n /** Fired when sheet is closed */\n CLOSE: 'close',\n /** Fired when user starts dragging sheet */\n DRAG_START: 'dragstart',\n /** Fired when user finishes dragging sheet */\n DRAG_END: 'dragend'\n} as const;\n\n/**\n * Sheet elevation levels\n */\nexport const SHEET_ELEVATION = {\n /** Subtle elevation with minimal shadow */\n LEVEL_1: 1,\n /** Light elevation with small shadow */\n LEVEL_2: 2,\n /** Medium elevation with noticeable shadow */\n LEVEL_3: 3,\n /** High elevation with prominent shadow */\n LEVEL_4: 4,\n /** Maximum elevation with strong shadow */\n LEVEL_5: 5\n} as const;\n\n/**\n * Sheet default values\n */\nexport const SHEET_DEFAULTS = {\n /** Default sheet variant */\n VARIANT: SHEET_VARIANTS.STANDARD,\n /** Default position */\n POSITION: SHEET_POSITIONS.BOTTOM,\n /** Whether sheet is open by default */\n OPEN: false,\n /** Whether sheet can be dismissed by clicking outside */\n DISMISSIBLE: true,\n /** Whether to show drag handle by default */\n DRAG_HANDLE: true,\n /** Default elevation level */\n ELEVATION: SHEET_ELEVATION.LEVEL_3,\n /** Default title */\n TITLE: '',\n /** Default content */\n CONTENT: '',\n /** Default max height */\n MAX_HEIGHT: '80%',\n /** Whether gestures are enabled by default */\n ENABLE_GESTURES: true\n} as const;\n\n/**\n * Sheet animation timing values\n */\nexport const SHEET_ANIMATION = {\n /** Animation duration in milliseconds */\n DURATION: 300,\n /** Animation timing function */\n TIMING: 'cubic-bezier(0.4, 0, 0.2, 1)',\n /** Animation delay in milliseconds */\n DELAY: 0\n} as const;\n\n/**\n * Sheet gesture thresholds\n */\nexport const SHEET_GESTURE = {\n /** Minimum velocity to trigger a swipe */\n MIN_VELOCITY: 0.3,\n /** Minimum distance to trigger a swipe */\n MIN_DISTANCE: 30,\n /** Percentage of height/width to dismiss sheet */\n DISMISS_THRESHOLD: 0.3\n} as const;\n\n/**\n * CSS classes for sheet elements\n */\nexport const SHEET_CLASSES = {\n /** Container element */\n CONTAINER: 'sheet',\n /** Overlay scrim */\n SCRIM: 'sheet__scrim',\n /** Main sheet panel */\n PANEL: 'sheet__panel',\n /** Drag handle */\n DRAG_HANDLE: 'sheet__drag-handle',\n /** Title container */\n TITLE: 'sheet__title',\n /** Content container */\n CONTENT: 'sheet__content',\n /** Standard variant */\n STANDARD: 'sheet--standard',\n /** Modal variant */\n MODAL: 'sheet--modal',\n /** Expanded variant */\n EXPANDED: 'sheet--expanded',\n /** Bottom position */\n BOTTOM: 'sheet--bottom',\n /** Top position */\n TOP: 'sheet--top',\n /** Left position */\n LEFT: 'sheet--left',\n /** Right position */\n RIGHT: 'sheet--right',\n /** Open state */\n OPEN: 'sheet--open',\n /** Dragging state */\n DRAGGING: 'sheet--dragging',\n /** Elevation modifier (sheet--elevation-1) */\n ELEVATION_PREFIX: 'sheet--elevation-'\n} as const;",
|
|
214
|
-
"// src/components/slider/slider.ts\nimport { pipe } from
|
|
174
|
+
"// src/components/slider/slider.ts\nimport { pipe } from \"../../core/compose/pipe\";\nimport { createBase, withElement } from \"../../core/compose/component\";\nimport {\n withEvents,\n withLifecycle,\n withIcon,\n withTextLabel,\n} from \"../../core/compose/features\";\nimport {\n withRange,\n withStates,\n withController,\n withCanvas,\n withDom,\n} from \"./features\";\nimport { withAPI } from \"./api\";\nimport { SliderConfig, SliderComponent, SliderEventType } from \"./types\";\nimport { createBaseConfig, getElementConfig, getApiConfig } from \"./config\";\n\n/**\n * Creates a new Slider component\n *\n * Slider follows a clear architectural pattern:\n * 1. Base component - Creates the foundation with event system\n * 2. Feature enhancement - Adds specific capabilities (range, icons)\n * 3. DOM creation - Creates DOM elements directly using optimized createElement\n * 4. Canvas rendering - Uses canvas for visual elements, keeping handles as DOM\n * 5. State management - Handles visual states and appearance\n * 6. Controller - Manages behavior, events, and UI rendering\n * 7. Lifecycle - Handles component lifecycle events\n * 8. Public API - Exposes a clean, consistent API\n *\n * @param {SliderConfig} config - Slider configuration object\n * @returns {SliderComponent} Slider component instance\n */\nconst createSlider = (config: SliderConfig = {}): SliderComponent => {\n // Process configuration with defaults\n const baseConfig = createBaseConfig(config);\n\n try {\n // Create the component by composing features in a specific order\n const component = pipe(\n // Base component with event system\n createBase,\n withEvents(),\n\n // Create the main slider element using standard withElement\n withElement(getElementConfig(baseConfig)),\n\n // Add range configuration\n withRange(baseConfig),\n\n // Create inner DOM elements (container, handle, valueBubble)\n withDom(baseConfig),\n\n // Add text/label and icon features that need DOM elements\n withTextLabel(baseConfig),\n withIcon(baseConfig),\n\n // Add canvas rendering for tracks and ticks\n withCanvas(baseConfig),\n\n // Add state management and behavior\n withStates(baseConfig),\n withController(baseConfig),\n withLifecycle()\n )(baseConfig);\n\n // Generate the API configuration based on the enhanced component\n const apiOptions = getApiConfig(component);\n\n // Apply the public API layer\n const slider = withAPI(apiOptions)(component);\n\n // Register event handlers from config for convenience\n if (baseConfig.on && typeof slider.on === \"function\") {\n Object.entries(baseConfig.on).forEach(([event, handler]) => {\n if (typeof handler === \"function\") {\n slider.on(event as SliderEventType, handler);\n }\n });\n }\n\n return slider;\n } catch (error) {\n console.error(\"Slider creation error:\", error);\n throw new Error(`Failed to create slider: ${(error as Error).message}`);\n }\n};\n\nexport default createSlider;\n",
|
|
215
175
|
"// src/components/slider/features/range.ts\nimport { SliderConfig } from '../types';\nimport { createElement } from '../../../core/dom/create';\n\n/**\n * Enhances structure definition with range slider elements\n * \n * @param config Slider configuration\n * @returns Component enhancer that adds range slider to structure\n */\nexport const withRange = (config: SliderConfig) => component => {\n // If not a range slider or missing structure definition, return unmodified\n if (!config.range || !config.secondValue || !component.schema) {\n return component;\n }\n \n try {\n // Calculate values for second handle\n const min = config.min || 0;\n const max = config.max || 100;\n const secondValue = config.secondValue;\n const secondValuePercent = ((secondValue - min) / (max - min)) * 100;\n const formatter = config.valueFormatter || (val => val.toString());\n const isDisabled = config.disabled === true;\n const getClass = component.getClass;\n \n // Clone the structure definition (deep copy)\n const schema = JSON.parse(JSON.stringify(component.schema));\n \n // Add range class to root element\n const rootClasses = schema.element.options.className || [];\n if (Array.isArray(rootClasses)) {\n rootClasses.push(getClass('slider--range'));\n } else {\n schema.element.options.className = `${rootClasses} ${getClass('slider--range')}`.trim();\n }\n \n // Canvas will handle all track rendering, so we don't add any DOM track elements\n \n // Add second handle to container children\n const containerChildren = schema.element.children.container.children;\n containerChildren.secondHandle = {\n name: 'secondHandle',\n creator: createElement,\n options: {\n tag: 'div',\n className: getClass('slider-handle'),\n attributes: {\n role: 'slider',\n 'aria-valuemin': String(min),\n 'aria-valuemax': String(max),\n 'aria-valuenow': String(secondValue),\n 'aria-orientation': 'horizontal',\n tabindex: isDisabled ? '-1' : '0',\n 'aria-disabled': isDisabled ? 'true' : 'false',\n 'data-value': String(secondValue),\n 'data-handle-index': '1'\n },\n style: {\n left: `${secondValuePercent}%`\n }\n }\n };\n \n // Add second value bubble to container children\n containerChildren.secondValueBubble = {\n name: 'secondValueBubble',\n creator: createElement,\n options: {\n tag: 'div',\n className: getClass('slider-value'),\n attributes: {\n 'aria-hidden': 'true',\n 'data-handle-index': '1'\n },\n text: formatter(secondValue),\n style: {\n left: `${secondValuePercent}%`\n }\n }\n };\n \n // Return component with updated structure definition\n return {\n ...component,\n schema\n };\n } catch (error) {\n console.warn('Error enhancing structure with range functionality:', error);\n return component;\n }\n};",
|
|
216
176
|
"// src/components/slider/constants.ts\n\n/**\n * Available slider color variants\n * @category Components\n */\nexport const SLIDER_COLORS = {\n /** Primary color variant */\n PRIMARY: 'primary',\n /** Secondary color variant */\n SECONDARY: 'secondary',\n /** Tertiary color variant */\n TERTIARY: 'tertiary',\n /** Error color variant */\n ERROR: 'error'\n} as const;\n\n/**\n * Available slider size variants\n * @category Components\n */\nexport const SLIDER_SIZES = {\n /** Extra small size (default) - 16px track height */\n XS: 16,\n /** Small size - 24px track height */\n S: 24,\n /** Medium size - 40px track height */\n M: 40,\n /** Large size - 56px track height */\n L: 56,\n /** Extra large size - 96px track height */\n XL: 80\n} as const;\n\n/**\n * Slider component size type\n * @category Components\n */\nexport type SliderSize = keyof typeof SLIDER_SIZES | number;\n\n/**\n * Slider component measurements\n * @category Components\n */\nexport const SLIDER_MEASUREMENTS = {\n /** Handle size in pixels */\n HANDLE_SIZE: 16,\n /** Handle height for XS and S sizes in pixels */\n SMALL_HANDLE_HEIGHT: 48,\n /** Handle height offset for M, L, XL sizes (added to track height) */\n HANDLE_HEIGHT_OFFSET: 16,\n /** Minimum container height in pixels */\n MIN_HEIGHT: 40,\n /** Track border radius in pixels */\n TRACK_RADIUS: 3,\n /** External track radius for XS and S sizes in pixels */\n SMALL_TRACK_EXTERNAL_RADIUS: 10,\n /** External track radius ratio for M, L, XL sizes (multiplied by track height) */\n LARGE_TRACK_RADIUS_RATIO: 0.35,\n /** Tick size in pixels */\n TICK_SIZE: 4,\n /** Dot size in pixels */\n DOT_SIZE: 4,\n /** Handle gap pixels */\n HANDLE_GAP: 8,\n /** Handle gap reduction when pressed in pixels */\n HANDLE_GAP_PRESSED_REDUCTION: 2,\n /** Center gap pixels for centered sliders */\n CENTER_GAP: 4,\n /** Edge padding in pixels */\n EDGE_PADDING: 7\n} as const;\n\n/**\n * Available slider events\n * @category Components\n */\nexport const SLIDER_EVENTS = {\n /** Fired when slider value changes and interaction completes */\n CHANGE: 'change',\n /** Fired during dragging as value changes */\n INPUT: 'input',\n /** Fired when slider receives focus */\n FOCUS: 'focus',\n /** Fired when slider loses focus */\n BLUR: 'blur',\n /** Fired when interaction starts */\n START: 'start',\n /** Fired when interaction ends */\n END: 'end'\n} as const;\n\n/**\n * Position options for slider label and icon\n * @category Components\n */\nexport const SLIDER_POSITIONS = {\n /** Position at the start */\n START: 'start',\n /** Position at the end */\n END: 'end'\n} as const;\n\n/**\n * Default slider configuration values\n * @category Components\n */\nexport const SLIDER_DEFAULTS = {\n /** Minimum value */\n MIN: 0,\n /** Maximum value */\n MAX: 100,\n /** Starting value */\n VALUE: 0,\n /** Step increment size */\n STEP: 1,\n /** Whether slider is disabled */\n DISABLED: false,\n /** Default color variant */\n COLOR: SLIDER_COLORS.PRIMARY,\n /** Default size variant */\n SIZE: 'XS',\n /** Whether to show tick marks */\n TICKS: false,\n /** Whether to show value while dragging */\n SHOW_VALUE: true,\n /** Whether to snap to steps during dragging */\n SNAP_TO_STEPS: true,\n /** Whether slider is a range slider (two handles) */\n RANGE: false,\n /** Whether slider is a centered slider (active track from center) */\n CENTERED: false,\n /** Default icon position */\n ICON_POSITION: SLIDER_POSITIONS.START,\n /** Default label position */\n LABEL_POSITION: SLIDER_POSITIONS.START\n} as const;\n\n/**\n * CSS class names used by the slider component\n * @category Components\n */\nexport const SLIDER_CLASSES = {\n /** Root element class */\n ROOT: 'slider',\n /** Container for slider track and handles */\n CONTAINER: 'slider__container',\n /** Filled track portion class */\n FILL: 'slider__fill',\n /** Handle element class */\n HANDLE: 'slider__handle',\n /** Second handle element class (for range slider) */\n HANDLE_SECOND: 'slider__handle--second',\n /** Tick marks container class */\n LABEL: 'slider__label',\n /** Value display class */\n VALUE: 'slider__value',\n /** Icon container class */\n ICON: 'slider__icon',\n /** Disabled state class */\n DISABLED: 'slider--disabled',\n /** Focused state class */\n FOCUSED: 'slider--focused',\n /** Dragging state class */\n DRAGGING: 'slider--dragging',\n /** Range slider variant class */\n RANGE: 'slider--range',\n /** Primary color variant class */\n PRIMARY: 'slider--primary',\n /** Secondary color variant class */\n SECONDARY: 'slider--secondary',\n /** Tertiary color variant class */\n TERTIARY: 'slider--tertiary',\n /** Error color variant class */\n ERROR: 'slider--error'\n} as const;",
|
|
217
177
|
"// src/components/slider/features/states.ts\nimport { SLIDER_COLORS, SliderColor } from \"../types\";\nimport { SLIDER_SIZES, SliderSize } from \"../constants\";\nimport { SliderConfig } from \"../types\";\n\n/**\n * Add state management features to slider component\n * Combines appearance and disabled functionality into a single feature\n *\n * @param config Slider configuration\n * @returns Component enhancer with state management features\n */\nexport const withStates = (config: SliderConfig) => (component) => {\n // Track initial disabled state\n const isDisabled = config.disabled === true;\n\n // Apply initial disabled state if needed\n if (isDisabled) {\n setTimeout(() => {\n disableComponent();\n }, 0);\n }\n\n /**\n * Disables the component\n */\n function disableComponent() {\n component.element.classList.add(\n `${component.getClass(\"slider\")}--disabled`\n );\n component.element.setAttribute(\"aria-disabled\", \"true\");\n\n // Ensure handles cannot receive focus when disabled\n if (component.structure?.handle) {\n component.structure.handle.tabIndex = -1;\n component.structure.handle.setAttribute(\"aria-disabled\", \"true\");\n }\n\n if (config.range && component.structure?.secondHandle) {\n component.structure.secondHandle.tabIndex = -1;\n component.structure.secondHandle.setAttribute(\"aria-disabled\", \"true\");\n }\n\n // Redraw canvas with disabled colors\n if (component.drawCanvas) {\n component.drawCanvas();\n }\n }\n\n /**\n * Enables the component\n */\n function enableComponent() {\n component.element.classList.remove(\n `${component.getClass(\"slider\")}--disabled`\n );\n component.element.setAttribute(\"aria-disabled\", \"false\");\n\n // Re-enable focus on handles\n if (component.structure?.handle) {\n component.structure.handle.tabIndex = 0;\n component.structure.handle.setAttribute(\"aria-disabled\", \"false\");\n }\n\n if (config.range && component.structure?.secondHandle) {\n component.structure.secondHandle.tabIndex = 0;\n component.structure.secondHandle.setAttribute(\"aria-disabled\", \"false\");\n }\n\n // Redraw canvas with enabled colors\n if (component.drawCanvas) {\n component.drawCanvas();\n }\n }\n\n /**\n * Gets the active color class\n */\n function getActiveColor() {\n return (\n Object.values(SLIDER_COLORS).find((colorName) =>\n component.element.classList.contains(\n `${component.getClass(\"slider\")}--${colorName}`\n )\n ) || SLIDER_COLORS.PRIMARY\n );\n }\n\n /**\n * Gets the active size class\n */\n function getActiveSize() {\n // Check for size class names on the element\n const sizeKeys = Object.keys(SLIDER_SIZES) as Array<\n keyof typeof SLIDER_SIZES\n >;\n const foundKey = sizeKeys.find((sizeKey) =>\n component.element.classList.contains(\n `${component.getClass(\"slider\")}--${sizeKey.toLowerCase()}`\n )\n );\n return foundKey || \"XS\"; // Default to 'XS' (extra small)\n }\n\n // Return enhanced component\n return {\n ...component,\n\n // Disabled state management\n disabled: {\n /**\n * Enables the component\n * @returns Disabled manager for chaining\n */\n enable() {\n enableComponent();\n return this;\n },\n\n /**\n * Disables the component\n * @returns Disabled manager for chaining\n */\n disable() {\n disableComponent();\n return this;\n },\n\n /**\n * Checks if component is disabled\n * @returns True if disabled\n */\n isDisabled() {\n return component.element.classList.contains(\n `${component.getClass(\"slider\")}--disabled`\n );\n },\n },\n\n // Appearance management\n appearance: {\n /**\n * Sets slider color\n * @param color Color variant\n * @returns Appearance manager for chaining\n */\n setColor(color: SliderColor) {\n // Remove existing color classes\n Object.values(SLIDER_COLORS).forEach((colorName) => {\n component.element.classList.remove(\n `${component.getClass(\"slider\")}--${colorName}`\n );\n });\n\n // Add new color class if not primary (default)\n if (color !== SLIDER_COLORS.PRIMARY) {\n component.element.classList.add(\n `${component.getClass(\"slider\")}--${color}`\n );\n }\n\n return this;\n },\n\n /**\n * Gets slider color\n * @returns Current color name\n */\n getColor() {\n return getActiveColor();\n },\n\n /**\n * Sets slider size\n * @param size Size variant\n * @returns Appearance manager for chaining\n */\n setSize(size: SliderSize) {\n // Remove existing size classes\n const sizeKeys = Object.keys(SLIDER_SIZES) as Array<\n keyof typeof SLIDER_SIZES\n >;\n sizeKeys.forEach((sizeKey) => {\n component.element.classList.remove(\n `${component.getClass(\"slider\")}--${sizeKey.toLowerCase()}`\n );\n });\n\n // Determine the size key to use\n let sizeKey: string;\n if (typeof size === \"string\" && size in SLIDER_SIZES) {\n sizeKey = size;\n } else if (typeof size === \"number\") {\n // Find the key that matches this value\n const entry = Object.entries(SLIDER_SIZES).find(\n ([, value]) => value === size\n );\n sizeKey = entry ? entry[0] : \"XS\";\n } else {\n sizeKey = \"XS\"; // Default\n }\n\n // Add new size class\n component.element.classList.add(\n `${component.getClass(\"slider\")}--${sizeKey.toLowerCase()}`\n );\n\n return this;\n },\n\n /**\n * Gets slider size\n * @returns Current size name\n */\n getSize() {\n return getActiveSize();\n },\n\n /**\n * Shows or hides tick marks\n * @param show Whether to show ticks\n * @returns Appearance manager for chaining\n */\n showTicks(show: boolean) {\n config.ticks = show;\n\n // Regenerate ticks if slider is initialized\n if (component.slider) {\n component.slider.regenerateTicks();\n }\n\n return this;\n },\n\n /**\n * Shows or hides current value bubble during interaction\n * @param show Whether to show value bubble\n * @returns Appearance manager for chaining\n */\n showCurrentValue(show: boolean) {\n config.showValue = show;\n return this;\n },\n },\n };\n};\n",
|
|
218
|
-
"// src/components/slider/features/handlers.ts\nimport { SLIDER_EVENTS } from \"../types\";\nimport { SliderConfig } from \"../types\";\n\n/**\n * Create consolidated event handlers for slider component (mouse, touch, keyboard)\n *\n * @param config Slider configuration\n * @param state Slider state object\n * @param uiRenderer UI renderer interface from controller\n * @param eventHelpers Event helper methods\n * @returns Event handlers for all slider interactions\n */\nexport const createHandlers = (\n config: SliderConfig,\n state,\n uiRenderer,\n eventHelpers\n) => {\n // Get required elements from structure (with fallbacks)\n const components = state.component?.components || {};\n\n // Extract needed components\n const {\n container = null,\n handle = null,\n valueBubble = null,\n secondHandle = null,\n secondValueBubble = null,\n } = components;\n\n // Get required helper methods (with fallbacks)\n const {\n getValueFromPosition = () => 0,\n roundToStep = (value) => value,\n clamp = (value) => value,\n showValueBubble = () => {},\n render = () => {},\n } = uiRenderer;\n\n const { triggerEvent = () => ({ defaultPrevented: false }) } = eventHelpers;\n\n // Track whether a real drag has started\n let hasActualDragStarted = false;\n let initialX = 0;\n const DRAG_THRESHOLD = 3;\n\n // Last focused handle tracker for keyboard navigation\n let lastFocusedHandle = null;\n\n // Bubble management\n const clearBubbleHideTimer = () => {\n if (state.valueHideTimer) {\n clearTimeout(state.valueHideTimer);\n state.valueHideTimer = null;\n }\n };\n\n const hideAllBubbles = () => {\n clearBubbleHideTimer();\n if (valueBubble) showValueBubble(valueBubble, false);\n if (secondValueBubble) showValueBubble(secondValueBubble, false);\n };\n\n const showActiveBubble = (bubble) => {\n hideAllBubbles();\n if (bubble && config.showValue) showValueBubble(bubble, true);\n };\n\n const hideActiveBubble = (bubble, delay = 0) => {\n clearBubbleHideTimer();\n if (!bubble || !config.showValue) return;\n\n if (delay > 0) {\n state.valueHideTimer = setTimeout(() => {\n showValueBubble(bubble, false);\n }, delay);\n } else {\n showValueBubble(bubble, false);\n }\n };\n\n // Focus management\n const clearKeyboardFocus = () => {\n // Clear local focus indicators\n if (handle)\n handle.classList.remove(\n `${state.component.getClass(\"slider-handle\")}--focused`\n );\n if (secondHandle)\n secondHandle.classList.remove(\n `${state.component.getClass(\"slider-handle\")}--focused`\n );\n\n // Clear global focus indicators\n try {\n const focusClass = state.component.getClass(\"slider-handle--focused\");\n document.querySelectorAll(`.${focusClass}`).forEach((el) => {\n el.classList.remove(focusClass);\n });\n\n if (\n document.activeElement?.classList.contains(\n state.component.getClass(\"slider-handle\")\n )\n ) {\n (document.activeElement as HTMLElement).blur();\n }\n } catch (error) {\n console.warn(\"Error clearing keyboard focus:\", error);\n }\n };\n\n /**\n * Handle mouse/touch down on a handle\n */\n const handleHandleMouseDown = (e, isSecondHandle = false) => {\n // Check if disabled\n if (\n !state.component ||\n (state.component.disabled && state.component.disabled.isDisabled())\n ) {\n return;\n }\n\n e.preventDefault();\n e.stopPropagation();\n\n hideAllBubbles();\n clearKeyboardFocus();\n\n // Capture initial position\n initialX = e.type.includes(\"touch\") ? e.touches[0].clientX : e.clientX;\n\n // Setup drag state\n state.dragging = false;\n state.pressed = true; // Set pressed state immediately\n hasActualDragStarted = false;\n state.activeHandle = isSecondHandle ? \"second\" : \"first\"; // Track which handle\n state.activeBubble = isSecondHandle ? secondValueBubble : valueBubble;\n\n // Show bubble immediately\n showActiveBubble(state.activeBubble);\n\n // Add global event listeners\n document.addEventListener(\"mousemove\", handleMouseMove);\n document.addEventListener(\"mouseup\", handleMouseUp);\n document.addEventListener(\"touchmove\", handleMouseMove, { passive: false });\n document.addEventListener(\"touchend\", handleMouseUp);\n\n render();\n triggerEvent(SLIDER_EVENTS.START, e);\n };\n\n /**\n * Handle mouse/touch down on the track\n */\n const handleTrackMouseDown = (e) => {\n // Check if disabled\n if (\n !state.component ||\n (state.component.disabled && state.component.disabled.isDisabled()) ||\n !container\n ) {\n return;\n }\n\n e.preventDefault();\n hideAllBubbles();\n clearKeyboardFocus();\n\n // Determine which handle to move\n let isSecondHandle = false;\n\n try {\n const position = e.type.includes(\"touch\")\n ? e.touches[0].clientX\n : e.clientX;\n\n // Calculate value at click position and apply constraints\n let newValue = getValueFromPosition(position);\n if (config.snapToSteps && state.step > 0)\n newValue = roundToStep(newValue);\n newValue = clamp(newValue, state.min, state.max);\n\n if (config.range && state.secondValue !== null) {\n // For range slider, move the closest handle\n const distToFirst = Math.abs(newValue - state.value);\n const distToSecond = Math.abs(newValue - state.secondValue);\n\n isSecondHandle = distToSecond < distToFirst;\n isSecondHandle\n ? (state.secondValue = newValue)\n : (state.value = newValue);\n } else {\n // Single handle slider - use setValue API for centered sliders to ensure animation\n if (\n config.centered &&\n state.component.slider &&\n state.component.slider.setValue\n ) {\n // Use the API method which handles previousValue tracking and animation\n state.component.slider.setValue(newValue, false); // false to not trigger event yet\n } else {\n // Regular slider - direct update\n state.value = newValue;\n }\n }\n\n // Update UI and trigger events\n render();\n triggerEvent(SLIDER_EVENTS.INPUT, e);\n } catch (error) {\n console.warn(\"Error handling track click:\", error);\n }\n\n // Set active elements\n state.activeHandle = isSecondHandle ? \"second\" : \"first\";\n state.activeBubble = isSecondHandle ? secondValueBubble : valueBubble;\n\n // Store the initial position\n initialX = e.type.includes(\"touch\") ? e.touches[0].clientX : e.clientX;\n\n // For centered sliders, delay starting drag to allow animation\n if (config.centered && !config.range) {\n // Show bubble\n showActiveBubble(state.activeBubble);\n\n // Add event listeners but don't start dragging yet\n document.addEventListener(\"mousemove\", handleMouseMove);\n document.addEventListener(\"mouseup\", handleMouseUp);\n document.addEventListener(\"touchmove\", handleMouseMove, {\n passive: false,\n });\n document.addEventListener(\"touchend\", handleMouseUp);\n\n // Don't set pressed state for track clicks\n state.pressed = false;\n\n triggerEvent(SLIDER_EVENTS.START, e);\n } else {\n // For non-centered sliders, start drag but don't set pressed since it's a track click\n state.dragging = false;\n state.pressed = false; // Don't set pressed for track clicks\n hasActualDragStarted = false;\n\n // Show bubble\n showActiveBubble(state.activeBubble);\n\n // Add event listeners\n document.addEventListener(\"mousemove\", handleMouseMove);\n document.addEventListener(\"mouseup\", handleMouseUp);\n document.addEventListener(\"touchmove\", handleMouseMove, {\n passive: false,\n });\n document.addEventListener(\"touchend\", handleMouseUp);\n\n render();\n triggerEvent(SLIDER_EVENTS.START, e);\n }\n };\n\n /**\n * Handle mouse/touch move during drag\n */\n const handleMouseMove = (e) => {\n if (!state.activeHandle || !container) return;\n e.preventDefault();\n\n try {\n // Get current position\n const currentX = e.type.includes(\"touch\")\n ? e.touches[0].clientX\n : e.clientX;\n\n // Determine if we've started a real drag\n if (\n !hasActualDragStarted &&\n Math.abs(currentX - initialX) >= DRAG_THRESHOLD\n ) {\n hasActualDragStarted = true;\n state.dragging = true;\n state.component.element.classList.add(\n `${state.component.getClass(\"slider\")}--dragging`\n );\n }\n\n // Calculate new value and apply constraints\n let newValue = getValueFromPosition(currentX);\n if (config.snapToSteps && state.step > 0)\n newValue = roundToStep(newValue);\n newValue = clamp(newValue, state.min, state.max);\n\n // Handle crossing points and handle swapping for range sliders\n const isSecondHandle = state.activeHandle === \"second\";\n\n if (config.range && state.secondValue !== null) {\n if (isSecondHandle) {\n // Second handle is active\n if (newValue >= state.value) {\n state.secondValue = newValue;\n } else {\n // Handles are crossed, swap them\n hideActiveBubble(state.activeBubble, 0);\n state.secondValue = state.value;\n state.value = newValue;\n state.activeHandle = \"first\";\n state.activeBubble = valueBubble;\n showActiveBubble(state.activeBubble);\n }\n } else {\n // First handle is active\n if (newValue <= state.secondValue) {\n state.value = newValue;\n } else {\n // Handles are crossed, swap them\n hideActiveBubble(state.activeBubble, 0);\n state.value = state.secondValue;\n state.secondValue = newValue;\n state.activeHandle = \"second\";\n state.activeBubble = secondValueBubble;\n showActiveBubble(state.activeBubble);\n }\n }\n } else {\n // Regular slider - update previousValue for centered sliders\n if (config.centered) {\n state.previousValue = state.value;\n }\n state.value = newValue;\n }\n\n render();\n triggerEvent(SLIDER_EVENTS.INPUT, e);\n } catch (error) {\n console.warn(\"Error during slider drag:\", error);\n }\n };\n\n /**\n * Handle mouse/touch up after drag\n */\n const handleMouseUp = (e) => {\n if (!state.activeHandle) return;\n e.preventDefault();\n\n // Reset drag states\n state.dragging = false;\n state.pressed = false; // Clear pressed state\n hasActualDragStarted = false;\n state.component.element.classList.remove(\n `${state.component.getClass(\"slider\")}--dragging`\n );\n\n // Hide bubble with delay\n hideActiveBubble(state.activeBubble, 1000);\n\n // Remove global event listeners\n document.removeEventListener(\"mousemove\", handleMouseMove);\n document.removeEventListener(\"mouseup\", handleMouseUp);\n document.removeEventListener(\"touchmove\", handleMouseMove);\n document.removeEventListener(\"touchend\", handleMouseUp);\n\n // Reset active handle and update UI\n state.activeHandle = null;\n render();\n\n // Trigger events\n triggerEvent(SLIDER_EVENTS.CHANGE, e);\n triggerEvent(SLIDER_EVENTS.END, e);\n };\n\n /**\n * Handle keyboard input\n */\n const handleKeyDown = (e, isSecondHandle = false) => {\n if (state.component.disabled && state.component.disabled.isDisabled())\n return;\n\n const step = state.step || 1;\n let newValue = isSecondHandle ? state.secondValue : state.value;\n const stepSize = e.shiftKey ? step * 10 : step;\n\n // Handle tab key separately\n if (e.key === \"Tab\") return;\n\n let valueChanged = false;\n\n switch (e.key) {\n case \"ArrowRight\":\n case \"ArrowUp\":\n e.preventDefault();\n newValue = Math.min(newValue + stepSize, state.max);\n valueChanged = true;\n break;\n\n case \"ArrowLeft\":\n case \"ArrowDown\":\n e.preventDefault();\n newValue = Math.max(newValue - stepSize, state.min);\n valueChanged = true;\n break;\n\n case \"Home\":\n e.preventDefault();\n newValue = state.min;\n valueChanged = true;\n break;\n\n case \"End\":\n e.preventDefault();\n newValue = state.max;\n valueChanged = true;\n break;\n\n case \"PageUp\":\n e.preventDefault();\n newValue = Math.min(newValue + step * 10, state.max);\n valueChanged = true;\n break;\n\n case \"PageDown\":\n e.preventDefault();\n newValue = Math.max(newValue - step * 10, state.min);\n valueChanged = true;\n break;\n\n default:\n return; // Exit if not a handled key\n }\n\n if (!valueChanged) return;\n\n // Update active bubble reference\n state.activeBubble = isSecondHandle ? secondValueBubble : valueBubble;\n\n // Show value bubble during keyboard interaction\n showActiveBubble(state.activeBubble);\n\n // Update the value\n if (isSecondHandle) {\n state.secondValue = newValue;\n } else {\n // Track previousValue for centered sliders\n if (config.centered) {\n state.previousValue = state.value;\n }\n state.value = newValue;\n }\n\n // Update UI and trigger events\n render();\n triggerEvent(SLIDER_EVENTS.INPUT, e);\n triggerEvent(SLIDER_EVENTS.CHANGE, e);\n };\n\n /**\n * Handle focus events\n */\n const handleFocus = (e, isSecondHandle = false) => {\n if (state.component.disabled && state.component.disabled.isDisabled())\n return;\n\n // Track the currently focused handle\n const currentHandle = isSecondHandle ? secondHandle : handle;\n\n // Hide previous bubble if switching between handles\n if (lastFocusedHandle && lastFocusedHandle !== currentHandle) {\n hideAllBubbles();\n }\n\n lastFocusedHandle = currentHandle;\n\n // Add focus class and show bubble\n currentHandle.classList.add(\n `${state.component.getClass(\"slider-handle\")}--focused`\n );\n showActiveBubble(isSecondHandle ? secondValueBubble : valueBubble);\n state.activeBubble = isSecondHandle ? secondValueBubble : valueBubble;\n\n triggerEvent(SLIDER_EVENTS.FOCUS, e);\n };\n\n /**\n * Handle blur events\n */\n const handleBlur = (e, isSecondHandle = false) => {\n const handleElement = isSecondHandle ? secondHandle : handle;\n handleElement.classList.remove(\n `${state.component.getClass(\"slider-handle\")}--focused`\n );\n\n // Only hide bubble if not tabbing to another handle\n const relatedTarget = e.relatedTarget;\n const otherHandle = isSecondHandle ? handle : secondHandle;\n\n if (!relatedTarget || relatedTarget !== otherHandle) {\n hideActiveBubble(isSecondHandle ? secondValueBubble : valueBubble, 200);\n }\n\n triggerEvent(SLIDER_EVENTS.BLUR, e);\n };\n\n /**\n * Set up all event listeners\n */\n const setupEventListeners = () => {\n if (!state.component || !state.component.components) {\n console.warn(\n \"Cannot set up event listeners: missing component structure\"\n );\n return;\n }\n\n // Use container for track events instead of track for better UX\n container.addEventListener(\"mousedown\", handleTrackMouseDown);\n container.addEventListener(\"touchstart\", handleTrackMouseDown, {\n passive: false,\n });\n\n // Handle events\n handle.addEventListener(\"mousedown\", (e) =>\n handleHandleMouseDown(e, false)\n );\n handle.addEventListener(\n \"touchstart\",\n (e) => handleHandleMouseDown(e, false),\n { passive: false }\n );\n handle.addEventListener(\"keydown\", (e) => handleKeyDown(e, false));\n handle.addEventListener(\"focus\", (e) => handleFocus(e, false));\n handle.addEventListener(\"blur\", (e) => handleBlur(e, false));\n\n // Second handle events for range slider\n if (config.range && secondHandle) {\n secondHandle.addEventListener(\"mousedown\", (e) =>\n handleHandleMouseDown(e, true)\n );\n secondHandle.addEventListener(\n \"touchstart\",\n (e) => handleHandleMouseDown(e, true),\n { passive: false }\n );\n secondHandle.addEventListener(\"keydown\", (e) => handleKeyDown(e, true));\n secondHandle.addEventListener(\"focus\", (e) => handleFocus(e, true));\n secondHandle.addEventListener(\"blur\", (e) => handleBlur(e, true));\n }\n };\n\n /**\n * Clean up all event listeners\n */\n const cleanupEventListeners = () => {\n if (!state.component || !state.component.components) return;\n\n // Clean up container listeners\n if (container) {\n container.removeEventListener(\"mousedown\", handleTrackMouseDown);\n container.removeEventListener(\"touchstart\", handleTrackMouseDown);\n }\n\n // Clean up handle listeners\n if (handle) {\n handle.removeEventListener(\"mousedown\", (e) =>\n handleHandleMouseDown(e, false)\n );\n handle.removeEventListener(\"touchstart\", (e) =>\n handleHandleMouseDown(e, false)\n );\n handle.removeEventListener(\"keydown\", (e) => handleKeyDown(e, false));\n handle.removeEventListener(\"focus\", (e) => handleFocus(e, false));\n handle.removeEventListener(\"blur\", (e) => handleBlur(e, false));\n }\n\n // Clean up second handle listeners\n if (config.range && secondHandle) {\n secondHandle.removeEventListener(\"mousedown\", (e) =>\n handleHandleMouseDown(e, true)\n );\n secondHandle.removeEventListener(\"touchstart\", (e) =>\n handleHandleMouseDown(e, true)\n );\n secondHandle.removeEventListener(\"keydown\", (e) =>\n handleKeyDown(e, true)\n );\n secondHandle.removeEventListener(\"focus\", (e) => handleFocus(e, true));\n secondHandle.removeEventListener(\"blur\", (e) => handleBlur(e, true));\n }\n\n // Clean up document listeners\n document.removeEventListener(\"mousemove\", handleMouseMove);\n document.removeEventListener(\"mouseup\", handleMouseUp);\n document.removeEventListener(\"touchmove\", handleMouseMove);\n document.removeEventListener(\"touchend\", handleMouseUp);\n };\n\n // Return consolidated handlers\n return {\n // Mouse/Touch handlers\n handleHandleMouseDown,\n handleTrackMouseDown,\n handleMouseMove,\n handleMouseUp,\n\n // Keyboard handlers\n handleKeyDown,\n handleFocus,\n handleBlur,\n\n // Event management\n setupEventListeners,\n cleanupEventListeners,\n\n // Bubble management\n showActiveBubble,\n hideActiveBubble,\n hideAllBubbles,\n clearKeyboardFocus,\n };\n};\n",
|
|
219
|
-
"// src/components/slider/features/controller.ts\nimport { SLIDER_EVENTS } from \"../types\";\nimport { SliderConfig } from \"../types\";\nimport { SLIDER_MEASUREMENTS } from \"../constants\";\nimport { createHandlers } from \"./handlers\";\n\n/**\n * Add controller functionality to slider component\n * Manages state, events, user interactions, and UI rendering\n *\n * @param config Slider configuration\n * @returns Component enhancer with slider controller functionality\n */\nexport const withController = (config: SliderConfig) => (component) => {\n // Ensure component has required properties\n if (!component.element || !component.components) {\n console.warn(\n \"Cannot initialize slider controller: missing element or components\"\n );\n return component;\n }\n\n // Initialize state with current config\n const state = {\n component,\n value: config.value !== undefined ? config.value : 0,\n secondValue: config.secondValue !== undefined ? config.secondValue : null,\n min: config.min !== undefined ? config.min : 0,\n max: config.max !== undefined ? config.max : 100,\n step: config.step !== undefined ? config.step : 1,\n dragging: false,\n pressed: false, // Track if handle is pressed (mouse down)\n activeHandle: null, // Track which handle is active (null, 'first', 'second')\n activeBubble: null,\n valueHideTimer: null,\n };\n\n // Create event helpers\n const eventHelpers = {\n triggerEvent(eventName, originalEvent = null) {\n const eventData = {\n slider: state.component,\n value: state.value,\n secondValue: state.secondValue,\n originalEvent,\n preventDefault: () => {\n eventData.defaultPrevented = true;\n },\n defaultPrevented: false,\n };\n\n state.component.emit(eventName, eventData);\n return eventData;\n },\n };\n\n //=============================================================================\n // UI RENDERING FUNCTIONS\n //=============================================================================\n\n /**\n * Gets required components from state, safely handling missing components\n */\n const getComponents = () => {\n // Return empty object if component or components are missing\n if (!state.component?.components) {\n return {};\n }\n\n // Get flattened components\n return state.component.components;\n };\n\n /**\n * Calculates percentage position for a value\n * Maps from value space (min-max) to percentage space (0-100)\n */\n const getPercentage = (value) => {\n const range = state.max - state.min;\n return range === 0 ? 0 : ((value - state.min) / range) * 100;\n };\n\n /**\n * Gets track dimensions and constraints for positioning calculations\n * Handles edge constraints and padding for proper handle positioning\n */\n const getTrackDimensions = () => {\n const components = getComponents();\n const { handle, container } = components;\n\n if (!handle || !container) return null;\n\n try {\n const handleRect = handle.getBoundingClientRect();\n const containerRect = container.getBoundingClientRect();\n const handleSize = handleRect.width || SLIDER_MEASUREMENTS.HANDLE_SIZE;\n const trackSize = containerRect.width;\n\n // Use EDGE_PADDING for consistent edge constraints\n const edgeConstraint =\n (SLIDER_MEASUREMENTS.EDGE_PADDING / trackSize) * 100;\n const paddingPixels = state.activeHandle ? 6 : 8;\n const paddingPercent = (paddingPixels / trackSize) * 100;\n\n return { handleSize, trackSize, edgeConstraint, paddingPercent };\n } catch (error) {\n console.warn(\"Error calculating track dimensions:\", error);\n return {\n handleSize: SLIDER_MEASUREMENTS.HANDLE_SIZE,\n trackSize: 200,\n edgeConstraint: 3, // 6px / 200px * 100\n paddingPercent: 4,\n };\n }\n };\n\n /**\n * Maps value percentage to visual position with edge constraints\n * Ensures handles stay within the visible track area\n */\n const mapValueToVisualPercent = (valuePercent, trackSize = 200) => {\n // Calculate edge constraint using EDGE_PADDING\n const edgeConstraint = (SLIDER_MEASUREMENTS.EDGE_PADDING / trackSize) * 100;\n const minEdge = edgeConstraint;\n const maxEdge = 100 - edgeConstraint;\n const visualRange = maxEdge - minEdge;\n\n if (valuePercent <= 0) return minEdge;\n if (valuePercent >= 100) return maxEdge;\n return minEdge + (valuePercent / 100) * visualRange;\n };\n\n /**\n * Gets slider value from a position on the track\n * Maps from pixel position to slider value\n */\n const getValueFromPosition = (position) => {\n const components = getComponents();\n const { handle, container } = components;\n\n if (!handle || !container) return state.min;\n\n try {\n const containerRect = container.getBoundingClientRect();\n const range = state.max - state.min;\n\n // Use EDGE_PADDING for consistent edge constraints\n const leftEdge = containerRect.left + SLIDER_MEASUREMENTS.EDGE_PADDING;\n const rightEdge = containerRect.right - SLIDER_MEASUREMENTS.EDGE_PADDING;\n const effectiveWidth = rightEdge - leftEdge;\n\n const adjustedPosition = Math.max(\n leftEdge,\n Math.min(rightEdge, position)\n );\n const percentageFromLeft = (adjustedPosition - leftEdge) / effectiveWidth;\n\n return state.min + percentageFromLeft * range;\n } catch (error) {\n console.warn(\"Error calculating value from position:\", error);\n return state.min;\n }\n };\n\n /**\n * Rounds a value to the nearest step\n * Used for discrete sliders\n */\n const roundToStep = (value) => {\n const step = state.step;\n if (!step || step <= 0) return value;\n\n const steps = Math.round((value - state.min) / step);\n return state.min + steps * step;\n };\n\n /**\n * Clamps a value between min and max\n * Ensures values stay within valid range\n */\n const clamp = (value, min, max) => Math.min(Math.max(value, min), max);\n\n /**\n * Updates handle and bubble positions\n * Positions elements according to current state values\n */\n const updateHandlePositions = () => {\n const components = getComponents();\n const { handle, container, valueBubble, secondHandle, secondValueBubble } =\n components;\n\n if (!handle || !container) return;\n\n const dims = getTrackDimensions();\n if (!dims) return;\n\n const { trackSize } = dims;\n\n // Update main handle position\n const percent = getPercentage(state.value);\n const adjustedPercent = mapValueToVisualPercent(percent, trackSize);\n\n handle.style.left = `${adjustedPercent}%`;\n handle.style.transform = \"translate(-50%, -50%)\";\n\n if (valueBubble) {\n valueBubble.style.left = `${adjustedPercent}%`;\n valueBubble.style.transform = \"translateX(-50%)\";\n }\n\n // Update second handle if range slider\n if (config.range && secondHandle && state.secondValue !== null) {\n const secondPercent = getPercentage(state.secondValue);\n const adjustedSecondPercent = mapValueToVisualPercent(\n secondPercent,\n trackSize\n );\n\n secondHandle.style.left = `${adjustedSecondPercent}%`;\n secondHandle.style.transform = \"translate(-50%, -50%)\";\n\n if (secondValueBubble) {\n secondValueBubble.style.left = `${adjustedSecondPercent}%`;\n secondValueBubble.style.transform = \"translateX(-50%)\";\n }\n }\n\n // Update ARIA attributes\n if (handle) {\n handle.setAttribute(\"aria-valuenow\", String(state.value));\n }\n };\n\n /**\n * Updates value bubble content\n * Applies formatting to displayed values\n */\n const updateValueBubbles = () => {\n const components = getComponents();\n const { valueBubble, secondValueBubble } = components;\n\n if (!valueBubble) return;\n\n const formatter = config.valueFormatter || ((value) => value.toString());\n valueBubble.textContent = formatter(state.value);\n\n if (config.range && secondValueBubble && state.secondValue !== null) {\n secondValueBubble.textContent = formatter(state.secondValue);\n }\n };\n\n /**\n * Shows or hides value bubble\n * Controls visibility for value indicators\n */\n const showValueBubble = (bubbleElement, show) => {\n if (!bubbleElement || !config.showValue) return;\n\n const bubbleClass = state.component.getClass(\"slider-value\");\n bubbleElement.classList[show ? \"add\" : \"remove\"](`${bubbleClass}--visible`);\n };\n\n /**\n * Generates tick marks\n * NOTE: Ticks are now rendered via canvas, this just clears any DOM ticks\n */\n const generateTicks = () => {\n // Canvas handles tick rendering - no DOM manipulation needed\n };\n\n /**\n * Updates active state of tick marks\n * NOTE: Ticks are now rendered via canvas, so this is no longer needed\n */\n const updateTicks = () => {\n // Canvas handles tick rendering - no DOM manipulation needed\n };\n\n /**\n * Renders all UI elements to match current state\n * Central method for keeping UI in sync with state\n */\n const render = () => {\n try {\n updateHandlePositions();\n updateValueBubbles();\n\n // Trigger canvas redraw if available\n if (component.drawCanvas) {\n // Pass the current state directly to canvas\n component.drawCanvas(state);\n }\n } catch (error) {\n console.warn(\"Error rendering UI:\", error);\n }\n };\n\n // Create UI renderer interface for event handlers\n const uiRenderer = {\n getPercentage,\n getValueFromPosition,\n roundToStep,\n clamp,\n showValueBubble,\n updateUi: render, // For backward compatibility\n render,\n };\n\n // Create event handlers with our renderer\n const handlers = createHandlers(config, state, uiRenderer, eventHelpers);\n\n // Initialize slider controller\n const initController = () => {\n try {\n // Verify we have the necessary components\n if (!component.components || !component.components.handle) {\n console.warn(\n \"Cannot initialize slider controller: missing required components\"\n );\n return;\n }\n\n // Set ARIA attributes\n component.element.setAttribute(\"aria-valuemin\", String(state.min));\n component.element.setAttribute(\"aria-valuemax\", String(state.max));\n component.element.setAttribute(\"aria-valuenow\", String(state.value));\n\n const { handle, secondHandle } = component.components;\n\n // Set handle attributes\n if (handle) {\n handle.setAttribute(\"aria-valuemin\", String(state.min));\n handle.setAttribute(\"aria-valuemax\", String(state.max));\n handle.setAttribute(\"aria-valuenow\", String(state.value));\n\n if (config.range && secondHandle && state.secondValue !== null) {\n secondHandle.setAttribute(\"aria-valuemin\", String(state.min));\n secondHandle.setAttribute(\"aria-valuemax\", String(state.max));\n secondHandle.setAttribute(\"aria-valuenow\", String(state.secondValue));\n }\n }\n\n // Setup event listeners\n handlers.setupEventListeners();\n\n // Initial UI update\n render();\n } catch (error) {\n console.error(\"Error initializing slider controller:\", error);\n }\n };\n\n // Register with lifecycle if available\n if (component.lifecycle) {\n const originalDestroy = component.lifecycle.destroy || (() => {});\n component.lifecycle.destroy = () => {\n handlers.cleanupEventListeners();\n originalDestroy();\n };\n }\n\n // Schedule initialization after current execution completes\n setTimeout(() => {\n initController();\n }, 0);\n\n // Return enhanced component\n return {\n ...component,\n // Provide controller API under 'slider' property for backward compatibility\n slider: {\n /**\n * Sets slider value\n * @param value New value\n * @param triggerEvent Whether to trigger change event\n * @returns Slider controller for chaining\n */\n setValue(value, triggerEvent = true) {\n const newValue = clamp(value, state.min, state.max);\n\n state.value = newValue;\n render();\n\n if (triggerEvent) {\n eventHelpers.triggerEvent(SLIDER_EVENTS.CHANGE);\n }\n\n return this;\n },\n\n /**\n * Gets slider value\n * @returns Current value\n */\n getValue() {\n return state.value;\n },\n\n /**\n * Sets secondary slider value (for range slider)\n * @param value New secondary value\n * @param triggerEvent Whether to trigger change event\n * @returns Slider controller for chaining\n */\n setSecondValue(value, triggerEvent = true) {\n if (!config.range) return this;\n\n const newValue = clamp(value, state.min, state.max);\n state.secondValue = newValue;\n render();\n\n if (triggerEvent) {\n eventHelpers.triggerEvent(SLIDER_EVENTS.CHANGE);\n }\n\n return this;\n },\n\n /**\n * Gets secondary slider value\n * @returns Current secondary value or null\n */\n getSecondValue() {\n return config.range ? state.secondValue : null;\n },\n\n /**\n * Sets slider minimum value\n * @param min New minimum value\n * @returns Slider controller for chaining\n */\n setMin(min) {\n state.min = min;\n\n // Update ARIA attributes if elements exist\n component.element.setAttribute(\"aria-valuemin\", String(min));\n if (component.components?.handle) {\n component.components.handle.setAttribute(\n \"aria-valuemin\",\n String(min)\n );\n }\n\n if (config.range && component.components?.secondHandle) {\n component.components.secondHandle.setAttribute(\n \"aria-valuemin\",\n String(min)\n );\n }\n\n // Clamp values to new min\n if (state.value < min) state.value = min;\n if (\n config.range &&\n state.secondValue !== null &&\n state.secondValue < min\n ) {\n state.secondValue = min;\n }\n\n // Regenerate ticks if needed\n if (config.ticks || config.tickLabels) {\n generateTicks();\n }\n\n render();\n return this;\n },\n\n /**\n * Gets slider minimum value\n * @returns Current minimum value\n */\n getMin() {\n return state.min;\n },\n\n /**\n * Sets slider maximum value\n * @param max New maximum value\n * @returns Slider controller for chaining\n */\n setMax(max) {\n state.max = max;\n\n // Update ARIA attributes if elements exist\n component.element.setAttribute(\"aria-valuemax\", String(max));\n if (component.components?.handle) {\n component.components.handle.setAttribute(\n \"aria-valuemax\",\n String(max)\n );\n }\n\n if (config.range && component.components?.secondHandle) {\n component.components.secondHandle.setAttribute(\n \"aria-valuemax\",\n String(max)\n );\n }\n\n // Clamp values to new max\n if (state.value > max) state.value = max;\n if (\n config.range &&\n state.secondValue !== null &&\n state.secondValue > max\n ) {\n state.secondValue = max;\n }\n\n // Regenerate ticks if needed\n if (config.ticks || config.tickLabels) {\n generateTicks();\n }\n\n render();\n return this;\n },\n\n /**\n * Gets slider maximum value\n * @returns Current maximum value\n */\n getMax() {\n return state.max;\n },\n\n /**\n * Sets slider step size\n * @param step New step size\n * @returns Slider controller for chaining\n */\n setStep(step) {\n state.step = step;\n\n // Add or remove discrete class\n component.element.classList[step > 0 ? \"add\" : \"remove\"](\n `${component.getClass(\"slider\")}--discrete`\n );\n\n // Regenerate ticks if needed\n if (config.ticks || config.tickLabels) {\n generateTicks();\n updateTicks();\n }\n\n return this;\n },\n\n /**\n * Gets slider step size\n * @returns Current step size\n */\n getStep() {\n return state.step;\n },\n\n /**\n * Regenerate tick marks and labels\n * NOTE: Canvas handles tick rendering, this just triggers a redraw\n * @returns Slider controller for chaining\n */\n regenerateTicks() {\n render(); // Canvas will redraw ticks based on current state\n return this;\n },\n\n /**\n * Update all UI elements\n * @returns Slider controller for chaining\n */\n updateUi() {\n render();\n return this;\n },\n },\n };\n};\n",
|
|
220
|
-
"import { SliderConfig, SliderColor } from '../types';\nimport { getThemeColor, colorToRGBA } from '../../../core/utils';\nimport { \n observeCanvasResize, \n clipRoundedRect, \n fillRoundedRectLR, \n clearCanvas, \n easeOutCubic, \n ANIMATION_DURATIONS,\n CanvasContext,\n createCanvasContext,\n updateCanvasDimensions as updateCanvasDims,\n initializeCanvasWithRetry,\n createStyledCanvas,\n createCanvasThemeObserver\n} from '../../../core/canvas';\nimport { SLIDER_SIZES, SLIDER_MEASUREMENTS, SliderSize } from '../constants';\n\n/**\n * Animation state for smooth transitions\n */\ninterface AnimationState {\n // Current animated values\n animatedValue: number;\n animatedSecondValue: number | null;\n \n // Target values\n targetValue: number;\n targetSecondValue: number | null;\n \n // Start values for current animation\n startValue: number;\n startSecondValue: number | null;\n \n // Animation timing\n startTime: number;\n duration: number;\n animationFrame: number | null;\n}\n\n/**\n * Component with canvas capabilities\n */\ninterface CanvasSliderComponent {\n element: HTMLElement;\n canvas: HTMLCanvasElement;\n ctx: CanvasRenderingContext2D;\n getClass: (name: string) => string;\n drawCanvas: (state?: any) => void;\n resize: () => void;\n animationState?: AnimationState;\n [key: string]: any;\n}\n\n/**\n * Checks if component is disabled\n */\nconst isDisabled = (component?: any): boolean => \n component?.disabled?.isDisabled?.() || \n component?.element?.classList?.contains?.(`${component?.getClass?.('slider')}--disabled`) ||\n false;\n\n/**\n * Gets colors based on state and element type\n */\nconst getColors = (config: SliderConfig, component?: any, elementType: 'track' | 'tick' | 'dot' = 'track') => {\n const disabled = isDisabled(component);\n const variant = config.color || 'primary';\n \n if (disabled) {\n const onSurfaceColor = getThemeColor('sys-color-on-surface', { fallback: '#000000' });\n return {\n primary: colorToRGBA(onSurfaceColor, 0.38),\n secondary: colorToRGBA(onSurfaceColor, 0.12)\n };\n }\n \n if (elementType === 'tick') {\n return {\n primary: getThemeColor(`sys-color-on-${variant}`, { fallback: '#ffffff' }),\n secondary: getThemeColor(`sys-color-${variant}`, { fallback: '#1976d2' })\n };\n }\n \n const primaryColor = getThemeColor(`sys-color-${variant}`, { fallback: '#1976d2' });\n return {\n primary: primaryColor,\n secondary: colorToRGBA(primaryColor, 0.24)\n };\n};\n\n/**\n * Calculates value percentage\n */\nconst getValuePercent = (value: number, min: number, max: number): number => \n ((value - min) / (max - min)) * 100;\n\n/**\n * Draws a track segment if width > 0\n */\nconst drawTrackSegment = (\n ctx: CanvasRenderingContext2D,\n x: number,\n y: number,\n width: number,\n height: number,\n radius: number,\n color: string\n) => {\n if (width > 0) {\n fillRoundedRectLR(ctx, x, y, width, height, radius, radius, color);\n }\n};\n\n/**\n * Gets the track height value from the size config\n */\nexport const getTrackHeight = (size?: SliderSize): number => {\n if (typeof size === 'number') {\n return Math.max(size, SLIDER_SIZES.XS);\n }\n \n if (typeof size === 'string' && size in SLIDER_SIZES) {\n return SLIDER_SIZES[size as keyof typeof SLIDER_SIZES];\n }\n \n return SLIDER_SIZES.XS; // Default to XS\n};\n\n/**\n * Gets the handle height based on the slider size\n */\nexport const getHandleHeight = (size?: SliderSize): number => {\n const trackHeight = getTrackHeight(size);\n \n // For XS and S sizes, use SMALL_HANDLE_HEIGHT constant\n if (trackHeight <= SLIDER_SIZES.S) {\n return SLIDER_MEASUREMENTS.SMALL_HANDLE_HEIGHT;\n }\n \n // For M, L, XL sizes, handle height is larger than track by HANDLE_HEIGHT_OFFSET\n return trackHeight + SLIDER_MEASUREMENTS.HANDLE_HEIGHT_OFFSET;\n};\n\n/**\n * Gets the external track radius based on the slider size\n */\nexport const getExternalTrackRadius = (size?: SliderSize): number => {\n const trackHeight = getTrackHeight(size);\n \n // For XS and S sizes, use SMALL_TRACK_EXTERNAL_RADIUS constant\n if (trackHeight <= SLIDER_SIZES.S) {\n return SLIDER_MEASUREMENTS.SMALL_TRACK_EXTERNAL_RADIUS;\n }\n \n // For M, L, XL sizes, use track height multiplied by ratio\n return trackHeight * SLIDER_MEASUREMENTS.LARGE_TRACK_RADIUS_RATIO;\n};\n\n/**\n * Updates canvas dimensions based on current size\n */\nconst updateCanvasDimensions = (\n canvas: HTMLCanvasElement,\n context: CanvasContext,\n config?: SliderConfig\n): void => {\n const trackHeight = getTrackHeight(config?.size);\n const handleHeight = getHandleHeight(config?.size);\n \n const sliderElement = canvas.parentElement;\n if (!sliderElement) return;\n \n const width = Math.max(sliderElement.getBoundingClientRect().width || sliderElement.offsetWidth, 200);\n const height = Math.max(handleHeight + 20, trackHeight + 32, SLIDER_MEASUREMENTS.MIN_HEIGHT);\n \n // Update container height\n sliderElement.style.height = `${height}px`;\n \n // Use shared utility to update canvas dimensions\n updateCanvasDims(context, width, height);\n};\n\n/**\n * Sets up canvas with proper pixel ratio and dimensions\n */\nconst setupCanvas = (canvas: HTMLCanvasElement, config?: SliderConfig): CanvasContext => {\n const sliderElement = canvas.parentElement;\n if (!sliderElement) {\n throw new Error('Canvas must have a parent element');\n }\n \n const trackHeight = getTrackHeight(config?.size);\n const handleHeight = getHandleHeight(config?.size);\n const width = Math.max(sliderElement.getBoundingClientRect().width || sliderElement.offsetWidth, 200);\n const height = Math.max(handleHeight + 20, trackHeight + 32, SLIDER_MEASUREMENTS.MIN_HEIGHT);\n \n // Update container height\n sliderElement.style.height = `${height}px`;\n \n // Use shared utility to create canvas context\n return createCanvasContext(canvas, width, height);\n};\n\n/**\n * Maps value percentage to visual position with edge constraints\n */\nconst mapValueToVisualPercent = (valuePercent: number, trackWidth: number): number => {\n const edgeConstraint = SLIDER_MEASUREMENTS.EDGE_PADDING / trackWidth * 100;\n const minEdge = edgeConstraint;\n const maxEdge = 100 - edgeConstraint;\n const visualRange = maxEdge - minEdge;\n \n if (valuePercent <= 0) return minEdge;\n if (valuePercent >= 100) return maxEdge;\n return minEdge + (valuePercent / 100) * visualRange;\n};\n\n/**\n * Draws track segments on canvas\n */\nconst drawTracks = (\n ctx: CanvasRenderingContext2D,\n width: number,\n height: number,\n config: SliderConfig,\n state: any,\n component?: any\n) => {\n const trackY = height / 2;\n const trackHeight = getTrackHeight(config.size);\n const containerRadius = getExternalTrackRadius(config.size); // Container radius for clipping\n const trackRadius = SLIDER_MEASUREMENTS.TRACK_RADIUS; // Uniform 2px radius for all tracks\n \n // Create clipping region with container radius (mimics CSS overflow: hidden with border-radius)\n const restoreClip = clipRoundedRect(\n ctx, \n 0, \n trackY - trackHeight/2, \n width, \n trackHeight, \n containerRadius\n );\n \n // Get colors based on state\n const { primary: primaryColor, secondary: inactiveColor } = getColors(config, component);\n \n // Get value percentages\n const valuePercent = getValuePercent(state.value, state.min, state.max);\n const adjustedPercent = mapValueToVisualPercent(valuePercent, width);\n \n // Fixed pixel gaps - instantly reduce by HANDLE_GAP_PRESSED_REDUCTION when pressed\n const gapReduction = state.pressed ? SLIDER_MEASUREMENTS.HANDLE_GAP_PRESSED_REDUCTION : 0;\n const handleGapPixels = SLIDER_MEASUREMENTS.HANDLE_GAP - gapReduction;\n const centerGapPixels = SLIDER_MEASUREMENTS.CENTER_GAP;\n const halfCenterGapPercent = (centerGapPixels / 2 / width) * 100;\n const paddingPercent = (handleGapPixels / width) * 100;\n \n if (config.centered) {\n // Calculate center position\n const zeroPercent = getValuePercent(0, state.min, state.max);\n const adjustedZeroPercent = mapValueToVisualPercent(zeroPercent, width);\n \n // Check if handle is near center\n const handleNearCenter = Math.abs(adjustedPercent - adjustedZeroPercent) < paddingPercent;\n const isPositive = state.value >= 0;\n \n if (handleNearCenter) {\n // Handle at center - draw start and remaining tracks only\n \n // Start track (left side)\n const startWidth = (adjustedPercent - paddingPercent) / 100 * width;\n if (startWidth > 0) {\n drawTrackSegment(ctx, 0, trackY - trackHeight/2, startWidth, trackHeight, trackRadius, inactiveColor);\n }\n \n // Remaining track (right side)\n const remainingX = (adjustedPercent + paddingPercent) / 100 * width;\n const remainingWidth = width - remainingX;\n if (remainingWidth > 0) {\n drawTrackSegment(ctx, remainingX, trackY - trackHeight/2, remainingWidth, trackHeight, trackRadius, inactiveColor);\n }\n } else if (isPositive) {\n // Positive value - active track from center to handle\n \n // Start track (from minimum to center)\n const startWidth = (adjustedZeroPercent - halfCenterGapPercent) / 100 * width;\n if (startWidth > 0) {\n drawTrackSegment(ctx, 0, trackY - trackHeight/2, startWidth, trackHeight, trackRadius, inactiveColor);\n }\n \n // Active track (from center to handle)\n const activeX = (adjustedZeroPercent + halfCenterGapPercent) / 100 * width;\n const activeWidth = (adjustedPercent - paddingPercent) / 100 * width - activeX;\n if (activeWidth > 0) {\n drawTrackSegment(ctx, activeX, trackY - trackHeight/2, activeWidth, trackHeight, trackRadius, primaryColor);\n }\n \n // Remaining track (from handle to maximum)\n const remainingX = (adjustedPercent + paddingPercent) / 100 * width;\n const remainingWidth = width - remainingX;\n if (remainingWidth > 0) {\n drawTrackSegment(ctx, remainingX, trackY - trackHeight/2, remainingWidth, trackHeight, trackRadius, inactiveColor);\n }\n } else {\n // Negative value - active track from handle to center\n \n // Start track (from minimum to handle)\n const startWidth = (adjustedPercent - paddingPercent) / 100 * width;\n if (startWidth > 0) {\n drawTrackSegment(ctx, 0, trackY - trackHeight/2, startWidth, trackHeight, trackRadius, inactiveColor);\n }\n \n // Active track (from handle to center)\n const activeX = (adjustedPercent + paddingPercent) / 100 * width;\n const activeWidth = (adjustedZeroPercent - halfCenterGapPercent) / 100 * width - activeX;\n if (activeWidth > 0) {\n drawTrackSegment(ctx, activeX, trackY - trackHeight/2, activeWidth, trackHeight, trackRadius, primaryColor);\n }\n \n // Remaining track (from center to maximum)\n const remainingX = (adjustedZeroPercent + halfCenterGapPercent) / 100 * width;\n const remainingWidth = width - remainingX;\n if (remainingWidth > 0) {\n drawTrackSegment(ctx, remainingX, trackY - trackHeight/2, remainingWidth, trackHeight, trackRadius, inactiveColor);\n }\n }\n } else if (config.range && state.secondValue !== null) {\n // Range slider\n const secondPercent = getValuePercent(state.secondValue, state.min, state.max);\n const adjustedSecondPercent = mapValueToVisualPercent(secondPercent, width);\n \n const lowerPercent = Math.min(adjustedPercent, adjustedSecondPercent);\n const higherPercent = Math.max(adjustedPercent, adjustedSecondPercent);\n \n // Determine which handle is at lower/higher position\n const firstHandleIsLower = adjustedPercent <= adjustedSecondPercent;\n \n // Apply gap reduction only to the active handle\n const firstHandleGapReduction = (state.pressed && state.activeHandle === 'first') ? SLIDER_MEASUREMENTS.HANDLE_GAP_PRESSED_REDUCTION : 0;\n const secondHandleGapReduction = (state.pressed && state.activeHandle === 'second') ? SLIDER_MEASUREMENTS.HANDLE_GAP_PRESSED_REDUCTION : 0;\n \n const firstHandleGapPixels = SLIDER_MEASUREMENTS.HANDLE_GAP - firstHandleGapReduction;\n const secondHandleGapPixels = SLIDER_MEASUREMENTS.HANDLE_GAP - secondHandleGapReduction;\n \n const lowerHandleGapPercent = firstHandleIsLower \n ? (firstHandleGapPixels / width) * 100 \n : (secondHandleGapPixels / width) * 100;\n \n const higherHandleGapPercent = firstHandleIsLower \n ? (secondHandleGapPixels / width) * 100 \n : (firstHandleGapPixels / width) * 100;\n \n // Inactive track before first handle\n const startWidth = (lowerPercent - lowerHandleGapPercent) / 100 * width;\n if (startWidth > 0) {\n drawTrackSegment(ctx, 0, trackY - trackHeight/2, startWidth, trackHeight, trackRadius, inactiveColor);\n }\n \n // Active track between handles\n const activeX = (lowerPercent + lowerHandleGapPercent) / 100 * width;\n const activeWidth = (higherPercent - higherHandleGapPercent) / 100 * width - activeX;\n \n if (activeWidth > trackHeight) { // Only show if handles aren't too close\n drawTrackSegment(ctx, activeX, trackY - trackHeight/2, activeWidth, trackHeight, trackRadius, primaryColor);\n }\n \n // Inactive track after second handle\n const remainingX = (higherPercent + higherHandleGapPercent) / 100 * width;\n const remainingWidth = width - remainingX;\n if (remainingWidth > 0) {\n drawTrackSegment(ctx, remainingX, trackY - trackHeight/2, remainingWidth, trackHeight, trackRadius, inactiveColor);\n }\n } else {\n // Single handle slider\n \n // Active track (from start to handle)\n const activeWidth = (adjustedPercent - paddingPercent) / 100 * width;\n if (activeWidth > 0) {\n drawTrackSegment(ctx, 0, trackY - trackHeight/2, activeWidth, trackHeight, trackRadius, primaryColor);\n }\n \n // Remaining track (from handle to end)\n const remainingX = (adjustedPercent + paddingPercent) / 100 * width;\n const remainingWidth = width - remainingX;\n if (remainingWidth > 0) {\n drawTrackSegment(ctx, remainingX, trackY - trackHeight/2, remainingWidth, trackHeight, trackRadius, inactiveColor);\n }\n }\n \n // Restore canvas state (removes clipping)\n restoreClip();\n};\n\n/**\n * Draws tick marks on canvas\n */\nconst drawTicks = (\n ctx: CanvasRenderingContext2D,\n width: number,\n height: number,\n config: SliderConfig,\n state: any,\n component?: any\n) => {\n if (!config.ticks) return;\n \n const tickSize = SLIDER_MEASUREMENTS.TICK_SIZE;\n const y = height / 2;\n \n // Get colors based on state\n const { primary: tickActiveColor, secondary: tickInactiveColor } = getColors(config, component, 'tick');\n \n // Calculate tick values\n const numSteps = Math.floor((state.max - state.min) / state.step);\n \n for (let i = 0; i <= numSteps; i++) {\n const value = state.min + (i * state.step);\n if (value > state.max) continue;\n \n // Get position with edge constraints\n const percent = getValuePercent(value, state.min, state.max);\n const adjustedPercent = mapValueToVisualPercent(percent, width);\n const x = adjustedPercent / 100 * width;\n \n // Skip tick if it's at handle position\n const isAtHandle = Math.abs(value - state.value) < state.step * 0.1;\n const isAtSecondHandle = config.range && state.secondValue !== null && \n Math.abs(value - state.secondValue) < state.step * 0.1;\n \n if (isAtHandle || isAtSecondHandle) continue;\n \n // Determine if tick is active\n let isActive = false;\n \n if (config.centered) {\n isActive = state.value >= 0 \n ? (value >= 0 && value <= state.value)\n : (value >= state.value && value <= 0);\n } else if (config.range && state.secondValue !== null) {\n const lowerValue = Math.min(state.value, state.secondValue);\n const higherValue = Math.max(state.value, state.secondValue);\n isActive = value >= lowerValue && value <= higherValue;\n } else {\n isActive = value <= state.value;\n }\n \n // Draw tick\n ctx.fillStyle = isActive ? tickActiveColor : tickInactiveColor;\n ctx.globalAlpha = isActive ? 1 : 0.5;\n ctx.beginPath();\n ctx.arc(x, y, tickSize / 2, 0, Math.PI * 2);\n ctx.fill();\n }\n \n ctx.globalAlpha = 1;\n};\n\n/**\n * Draws dots at track ends\n */\nconst drawDots = (\n ctx: CanvasRenderingContext2D,\n width: number,\n height: number,\n config: SliderConfig,\n component?: any\n) => {\n // Don't draw dots for discrete sliders (sliders with ticks)\n if (config.ticks) return;\n \n const dotSize = SLIDER_MEASUREMENTS.DOT_SIZE;\n const y = height / 2;\n const padding = SLIDER_MEASUREMENTS.EDGE_PADDING;\n \n // Get colors based on state\n const { primary: dotColor } = getColors(config, component, 'dot');\n \n // For continuous sliders, only draw end dot\n ctx.fillStyle = dotColor;\n ctx.beginPath();\n ctx.arc(width - padding, y, dotSize / 2, 0, Math.PI * 2);\n ctx.fill();\n};\n\n/**\n * Main drawing function\n */\nconst draw = (\n context: CanvasContext,\n config: SliderConfig,\n state: any,\n component?: any\n): void => {\n const { ctx, width, height } = context;\n \n // Skip drawing if canvas has no dimensions\n if (width === 0 || height === 0) return;\n \n // Clear canvas\n clearCanvas(ctx, width, height);\n \n // Draw in order: dots, tracks, ticks\n drawDots(ctx, width, height, config, component);\n drawTracks(ctx, width, height, config, state, component);\n drawTicks(ctx, width, height, config, state, component);\n};\n\n/**\n * Updates handle sizes based on slider size\n */\nconst updateHandleSizes = (component: any, size: SliderSize): void => {\n const handleHeight = getHandleHeight(size);\n const { handle, secondHandle } = component.components || {};\n \n if (handle) handle.style.height = `${handleHeight}px`;\n if (secondHandle) secondHandle.style.height = `${handleHeight}px`;\n};\n\n/**\n * Creates state object from various sources\n */\nconst createState = (controllerState?: any, component?: any, lastKnownState?: any): any => {\n if (controllerState) {\n return {\n value: controllerState.value,\n secondValue: controllerState.secondValue,\n min: controllerState.min,\n max: controllerState.max,\n step: controllerState.step,\n pressed: controllerState.pressed || false,\n activeHandle: controllerState.activeHandle || null\n };\n }\n \n if (component?.slider) {\n return {\n value: component.slider.getValue(),\n secondValue: component.slider.getSecondValue(),\n min: component.slider.getMin(),\n max: component.slider.getMax(),\n step: component.slider.getStep(),\n pressed: false,\n activeHandle: null\n };\n }\n \n return lastKnownState || { \n value: 0, \n secondValue: null, \n min: 0, \n max: 100, \n step: 1, \n pressed: false, \n activeHandle: null \n };\n};\n\n/**\n * Adds canvas functionality for slider visuals\n * Keeps handle and value bubble as DOM elements for accessibility\n */\nexport const withCanvas = (config: SliderConfig) => \n (component: any): CanvasSliderComponent => {\n // Create canvas element using shared utility\n const canvas = createStyledCanvas(\n `${component.getClass('slider-canvas')}`,\n { zIndex: '1' } // Ensure canvas is above track but below handle\n );\n \n // Insert canvas as first child (behind interactive elements)\n const container = component.components?.container;\n if (container) {\n container.insertBefore(canvas, container.firstChild);\n } else {\n component.element.appendChild(canvas);\n }\n \n // Setup canvas context\n let canvasContext: CanvasContext | null = null;\n let resizeCleanup: (() => void) | null = null;\n let themeCleanup: (() => void) | null = null;\n \n // Current size - managed by API\n let currentSize = config.size || 'XS';\n \n // Store last known state for theme changes\n let lastKnownState = createState(null, component, {\n value: config.value || 0,\n secondValue: config.secondValue || null,\n min: config.min || 0,\n max: config.max || 100,\n step: config.step || 1,\n pressed: false,\n activeHandle: null\n });\n \n // Initialize animation state\n const animationState: AnimationState = {\n animatedValue: lastKnownState.value,\n animatedSecondValue: lastKnownState.secondValue,\n targetValue: lastKnownState.value,\n targetSecondValue: lastKnownState.secondValue,\n startValue: lastKnownState.value,\n startSecondValue: lastKnownState.secondValue,\n startTime: 0,\n duration: ANIMATION_DURATIONS.MEDIUM,\n animationFrame: null\n };\n \n component.animationState = animationState;\n \n // Initialize canvas with retry mechanism\n initializeCanvasWithRetry(\n () => {\n try {\n canvasContext = setupCanvas(canvas, {\n ...config,\n size: currentSize\n });\n component.ctx = canvasContext.ctx;\n return true;\n } catch (error) {\n console.warn('Slider canvas initialization failed:', error);\n return false;\n }\n },\n () => {\n // Set initial handle sizes after successful initialization\n updateHandleSizes(component, currentSize);\n }\n );\n \n // Add color class to component element if not primary\n if (config.color && config.color !== 'primary') {\n component.element.classList.add(`${component.getClass('slider')}--${config.color}`);\n }\n \n // Store canvas reference\n component.canvas = canvas;\n \n // Helper to draw with current animated state\n const drawAnimatedState = () => {\n if (!canvasContext) return;\n draw(canvasContext, {\n ...config,\n size: currentSize\n }, {\n ...lastKnownState,\n value: animationState.animatedValue,\n secondValue: animationState.animatedSecondValue\n }, component);\n };\n \n // Animation loop function\n const animate = (currentTime?: number): void => {\n if (!canvasContext) return;\n \n // If no currentTime provided, use performance.now()\n const now = currentTime || performance.now();\n const elapsed = now - animationState.startTime;\n const progress = Math.min(elapsed / animationState.duration, 1);\n const easedProgress = easeOutCubic(progress);\n \n // Update animated values\n const startValue = animationState.startValue;\n const targetValue = animationState.targetValue;\n animationState.animatedValue = startValue + (targetValue - startValue) * easedProgress;\n \n if (animationState.targetSecondValue !== null && animationState.animatedSecondValue !== null) {\n const startSecondValue = animationState.startSecondValue;\n const targetSecondValue = animationState.targetSecondValue;\n animationState.animatedSecondValue = startSecondValue + (targetSecondValue - startSecondValue) * easedProgress;\n }\n \n // Draw with animated values\n drawAnimatedState();\n \n // Continue animation if not complete\n if (progress < 1) {\n animationState.animationFrame = requestAnimationFrame((time) => animate(time));\n } else {\n animationState.animationFrame = null;\n }\n };\n \n // Drawing function\n const drawCanvas = (controllerState?: any): void => {\n if (!canvasContext) {\n console.warn('Canvas context not ready');\n return;\n }\n \n // Update dimensions in case size changed\n updateCanvasDimensions(canvas, canvasContext, {\n ...config,\n size: currentSize\n });\n \n // Get current state - prefer passed state, then slider API, then last known state\n let state;\n let isDragging = false;\n \n if (controllerState) {\n // Use state passed from controller and update last known state\n state = {\n value: controllerState.value,\n secondValue: controllerState.secondValue,\n min: controllerState.min,\n max: controllerState.max,\n step: controllerState.step,\n pressed: controllerState.pressed || false,\n activeHandle: controllerState.activeHandle || null\n };\n isDragging = controllerState.dragging || false;\n lastKnownState = { ...state };\n } else if (component.slider) {\n // Fallback to slider API and update last known state\n state = {\n value: component.slider.getValue(),\n secondValue: component.slider.getSecondValue(),\n min: component.slider.getMin(),\n max: component.slider.getMax(),\n step: component.slider.getStep()\n };\n lastKnownState = { ...state };\n } else {\n // Use last known state as fallback\n state = { ...lastKnownState };\n }\n \n // Check if we need to animate (skip animation when dragging)\n const valueChanged = state.value !== animationState.targetValue;\n const secondValueChanged = state.secondValue !== animationState.targetSecondValue;\n \n if ((valueChanged || secondValueChanged) && !isDragging) {\n // Capture start values before updating targets\n animationState.startValue = animationState.animatedValue;\n animationState.startSecondValue = animationState.animatedSecondValue;\n \n // Update target values\n animationState.targetValue = state.value;\n animationState.targetSecondValue = state.secondValue;\n \n // Cancel any existing animation\n if (animationState.animationFrame) {\n cancelAnimationFrame(animationState.animationFrame);\n }\n \n // Start new animation\n animationState.startTime = performance.now();\n \n // Draw first frame immediately to sync with handle movement\n animate();\n } else if (isDragging) {\n // When dragging, update values immediately without animation\n animationState.animatedValue = state.value;\n animationState.animatedSecondValue = state.secondValue;\n animationState.targetValue = state.value;\n animationState.targetSecondValue = state.secondValue;\n animationState.startValue = state.value;\n animationState.startSecondValue = state.secondValue;\n \n // Cancel any ongoing animation\n if (animationState.animationFrame) {\n cancelAnimationFrame(animationState.animationFrame);\n animationState.animationFrame = null;\n }\n \n // Draw immediately\n draw(canvasContext, {\n ...config,\n size: currentSize\n }, controllerState || state, component);\n } else {\n // No animation needed, draw current state\n draw(canvasContext, {\n ...config,\n size: currentSize\n }, controllerState || state, component);\n }\n };\n \n // Resize function\n const resize = (): void => {\n if (!canvasContext) return;\n \n try {\n const newContext = setupCanvas(canvas, {\n ...config,\n size: currentSize\n });\n component.ctx = newContext.ctx;\n Object.assign(canvasContext, newContext);\n \n // Redraw with current animated values\n drawAnimatedState();\n } catch (error) {\n console.warn('Slider canvas resize failed:', error);\n }\n };\n \n // Setup observers\n resizeCleanup = observeCanvasResize(component.element, canvas, resize);\n \n // Observe theme changes\n const onThemeChange = () => drawAnimatedState();\n \n themeCleanup = createCanvasThemeObserver(config.color || 'primary', onThemeChange);\n \n // Initial draw\n requestAnimationFrame(() => {\n drawCanvas();\n });\n \n // Extend component with canvas methods\n component.drawCanvas = drawCanvas;\n component.resize = resize;\n \n // Add setSize method\n component.setSize = (size: SliderSize) => {\n currentSize = size;\n if (canvasContext) {\n updateCanvasDimensions(canvas, canvasContext, {\n ...config,\n size: currentSize\n });\n // Redraw with current animated values\n drawAnimatedState();\n }\n \n // Update handle sizes\n updateHandleSizes(component, currentSize);\n };\n \n // Add getSize method\n component.getSize = () => currentSize;\n \n // Update color method\n const originalSetColor = component.appearance?.setColor;\n if (originalSetColor) {\n component.appearance.setColor = (color: SliderColor) => {\n originalSetColor(color);\n \n // Remove old color class if not primary\n if (config.color && config.color !== 'primary') {\n component.element.classList.remove(`${component.getClass('slider')}--${config.color}`);\n }\n \n // Add new color class if not primary\n if (color && color !== 'primary') {\n component.element.classList.add(`${component.getClass('slider')}--${color}`);\n }\n \n config.color = color;\n \n // Clean up old theme observer\n if (themeCleanup) {\n themeCleanup();\n themeCleanup = null;\n }\n \n // Set up new theme observer for the new color\n themeCleanup = createCanvasThemeObserver(color, onThemeChange);\n \n // Redraw with new color\n drawCanvas();\n };\n }\n \n // Clean up on destroy\n if (component.lifecycle) {\n const originalDestroy = component.lifecycle.destroy || (() => {});\n component.lifecycle.destroy = () => {\n if (resizeCleanup) resizeCleanup();\n if (themeCleanup) themeCleanup();\n if (animationState.animationFrame) {\n cancelAnimationFrame(animationState.animationFrame);\n }\n originalDestroy();\n };\n }\n \n return component as CanvasSliderComponent;\n }; ",
|
|
178
|
+
"// src/components/slider/features/handlers.ts\nimport { SLIDER_EVENTS } from \"../types\";\nimport { SliderConfig } from \"../types\";\n\n/**\n * Create consolidated event handlers for slider component (mouse, touch, keyboard)\n *\n * @param config Slider configuration\n * @param state Slider state object\n * @param uiRenderer UI renderer interface from controller\n * @param eventHelpers Event helper methods\n * @returns Event handlers for all slider interactions\n */\nexport const createHandlers = (\n config: SliderConfig,\n state,\n uiRenderer,\n eventHelpers\n) => {\n // Get required elements from structure (with fallbacks)\n // Check both direct component properties (from withDom) and components object (legacy)\n const components = state.component?.components || {};\n const component = state.component || {};\n\n // Extract needed components from both locations for backward compatibility\n const container = component.container || components.container || null;\n const handle = component.handle || components.handle || null;\n const valueBubble = component.valueBubble || components.valueBubble || null;\n const secondHandle =\n component.secondHandle || components.secondHandle || null;\n const secondValueBubble =\n component.secondValueBubble || components.secondValueBubble || null;\n\n // Get required helper methods (with fallbacks)\n const {\n getValueFromPosition = () => 0,\n roundToStep = (value) => value,\n clamp = (value) => value,\n showValueBubble = () => {},\n render = () => {},\n } = uiRenderer;\n\n const { triggerEvent = () => ({ defaultPrevented: false }) } = eventHelpers;\n\n // Track whether a real drag has started\n let hasActualDragStarted = false;\n let initialX = 0;\n const DRAG_THRESHOLD = 3;\n\n // Last focused handle tracker for keyboard navigation\n let lastFocusedHandle = null;\n\n // Bubble management\n const clearBubbleHideTimer = () => {\n if (state.valueHideTimer) {\n clearTimeout(state.valueHideTimer);\n state.valueHideTimer = null;\n }\n };\n\n const hideAllBubbles = () => {\n clearBubbleHideTimer();\n if (valueBubble) showValueBubble(valueBubble, false);\n if (secondValueBubble) showValueBubble(secondValueBubble, false);\n };\n\n const showActiveBubble = (bubble) => {\n hideAllBubbles();\n if (bubble && config.showValue) showValueBubble(bubble, true);\n };\n\n const hideActiveBubble = (bubble, delay = 0) => {\n clearBubbleHideTimer();\n if (!bubble || !config.showValue) return;\n\n if (delay > 0) {\n state.valueHideTimer = setTimeout(() => {\n showValueBubble(bubble, false);\n }, delay);\n } else {\n showValueBubble(bubble, false);\n }\n };\n\n // Focus management\n const clearKeyboardFocus = () => {\n // Clear local focus indicators\n if (handle)\n handle.classList.remove(\n `${state.component.getClass(\"slider-handle\")}--focused`\n );\n if (secondHandle)\n secondHandle.classList.remove(\n `${state.component.getClass(\"slider-handle\")}--focused`\n );\n\n // Clear global focus indicators\n try {\n const focusClass = state.component.getClass(\"slider-handle--focused\");\n document.querySelectorAll(`.${focusClass}`).forEach((el) => {\n el.classList.remove(focusClass);\n });\n\n if (\n document.activeElement?.classList.contains(\n state.component.getClass(\"slider-handle\")\n )\n ) {\n (document.activeElement as HTMLElement).blur();\n }\n } catch (error) {\n console.warn(\"Error clearing keyboard focus:\", error);\n }\n };\n\n /**\n * Handle mouse/touch down on a handle\n */\n const handleHandleMouseDown = (e, isSecondHandle = false) => {\n // Check if disabled\n if (\n !state.component ||\n (state.component.disabled && state.component.disabled.isDisabled())\n ) {\n return;\n }\n\n e.preventDefault();\n e.stopPropagation();\n\n hideAllBubbles();\n clearKeyboardFocus();\n\n // Capture initial position\n initialX = e.type.includes(\"touch\") ? e.touches[0].clientX : e.clientX;\n\n // Setup drag state\n state.dragging = false;\n state.pressed = true; // Set pressed state immediately\n hasActualDragStarted = false;\n state.activeHandle = isSecondHandle ? \"second\" : \"first\"; // Track which handle\n state.activeBubble = isSecondHandle ? secondValueBubble : valueBubble;\n\n // Show bubble immediately\n showActiveBubble(state.activeBubble);\n\n // Add global event listeners\n document.addEventListener(\"mousemove\", handleMouseMove);\n document.addEventListener(\"mouseup\", handleMouseUp);\n document.addEventListener(\"touchmove\", handleMouseMove, { passive: false });\n document.addEventListener(\"touchend\", handleMouseUp);\n\n render();\n triggerEvent(SLIDER_EVENTS.START, e);\n };\n\n /**\n * Handle mouse/touch down on the track\n */\n const handleTrackMouseDown = (e) => {\n // Check if disabled\n if (\n !state.component ||\n (state.component.disabled && state.component.disabled.isDisabled()) ||\n !container\n ) {\n return;\n }\n\n e.preventDefault();\n hideAllBubbles();\n clearKeyboardFocus();\n\n // Determine which handle to move\n let isSecondHandle = false;\n\n try {\n const position = e.type.includes(\"touch\")\n ? e.touches[0].clientX\n : e.clientX;\n\n // Calculate value at click position and apply constraints\n let newValue = getValueFromPosition(position);\n if (config.snapToSteps && state.step > 0)\n newValue = roundToStep(newValue);\n newValue = clamp(newValue, state.min, state.max);\n\n if (config.range && state.secondValue !== null) {\n // For range slider, move the closest handle\n const distToFirst = Math.abs(newValue - state.value);\n const distToSecond = Math.abs(newValue - state.secondValue);\n\n isSecondHandle = distToSecond < distToFirst;\n isSecondHandle\n ? (state.secondValue = newValue)\n : (state.value = newValue);\n } else {\n // Single handle slider - use setValue API for centered sliders to ensure animation\n if (\n config.centered &&\n state.component.slider &&\n state.component.slider.setValue\n ) {\n // Use the API method which handles previousValue tracking and animation\n state.component.slider.setValue(newValue, false); // false to not trigger event yet\n } else {\n // Regular slider - direct update\n state.value = newValue;\n }\n }\n\n // Update UI and trigger events\n render();\n triggerEvent(SLIDER_EVENTS.INPUT, e);\n } catch (error) {\n console.warn(\"Error handling track click:\", error);\n }\n\n // Set active elements\n state.activeHandle = isSecondHandle ? \"second\" : \"first\";\n state.activeBubble = isSecondHandle ? secondValueBubble : valueBubble;\n\n // Store the initial position\n initialX = e.type.includes(\"touch\") ? e.touches[0].clientX : e.clientX;\n\n // For centered sliders, delay starting drag to allow animation\n if (config.centered && !config.range) {\n // Show bubble\n showActiveBubble(state.activeBubble);\n\n // Add event listeners but don't start dragging yet\n document.addEventListener(\"mousemove\", handleMouseMove);\n document.addEventListener(\"mouseup\", handleMouseUp);\n document.addEventListener(\"touchmove\", handleMouseMove, {\n passive: false,\n });\n document.addEventListener(\"touchend\", handleMouseUp);\n\n // Don't set pressed state for track clicks\n state.pressed = false;\n\n triggerEvent(SLIDER_EVENTS.START, e);\n } else {\n // For non-centered sliders, start drag but don't set pressed since it's a track click\n state.dragging = false;\n state.pressed = false; // Don't set pressed for track clicks\n hasActualDragStarted = false;\n\n // Show bubble\n showActiveBubble(state.activeBubble);\n\n // Add event listeners\n document.addEventListener(\"mousemove\", handleMouseMove);\n document.addEventListener(\"mouseup\", handleMouseUp);\n document.addEventListener(\"touchmove\", handleMouseMove, {\n passive: false,\n });\n document.addEventListener(\"touchend\", handleMouseUp);\n\n render();\n triggerEvent(SLIDER_EVENTS.START, e);\n }\n };\n\n /**\n * Handle mouse/touch move during drag\n */\n const handleMouseMove = (e) => {\n if (!state.activeHandle || !container) return;\n e.preventDefault();\n\n try {\n // Get current position\n const currentX = e.type.includes(\"touch\")\n ? e.touches[0].clientX\n : e.clientX;\n\n // Determine if we've started a real drag\n if (\n !hasActualDragStarted &&\n Math.abs(currentX - initialX) >= DRAG_THRESHOLD\n ) {\n hasActualDragStarted = true;\n state.dragging = true;\n state.component.element.classList.add(\n `${state.component.getClass(\"slider\")}--dragging`\n );\n }\n\n // Calculate new value and apply constraints\n let newValue = getValueFromPosition(currentX);\n if (config.snapToSteps && state.step > 0)\n newValue = roundToStep(newValue);\n newValue = clamp(newValue, state.min, state.max);\n\n // Handle crossing points and handle swapping for range sliders\n const isSecondHandle = state.activeHandle === \"second\";\n\n if (config.range && state.secondValue !== null) {\n if (isSecondHandle) {\n // Second handle is active\n if (newValue >= state.value) {\n state.secondValue = newValue;\n } else {\n // Handles are crossed, swap them\n hideActiveBubble(state.activeBubble, 0);\n state.secondValue = state.value;\n state.value = newValue;\n state.activeHandle = \"first\";\n state.activeBubble = valueBubble;\n showActiveBubble(state.activeBubble);\n }\n } else {\n // First handle is active\n if (newValue <= state.secondValue) {\n state.value = newValue;\n } else {\n // Handles are crossed, swap them\n hideActiveBubble(state.activeBubble, 0);\n state.value = state.secondValue;\n state.secondValue = newValue;\n state.activeHandle = \"second\";\n state.activeBubble = secondValueBubble;\n showActiveBubble(state.activeBubble);\n }\n }\n } else {\n // Regular slider - update previousValue for centered sliders\n if (config.centered) {\n state.previousValue = state.value;\n }\n state.value = newValue;\n }\n\n render();\n triggerEvent(SLIDER_EVENTS.INPUT, e);\n } catch (error) {\n console.warn(\"Error during slider drag:\", error);\n }\n };\n\n /**\n * Handle mouse/touch up after drag\n */\n const handleMouseUp = (e) => {\n if (!state.activeHandle) return;\n e.preventDefault();\n\n // Reset drag states\n state.dragging = false;\n state.pressed = false; // Clear pressed state\n hasActualDragStarted = false;\n state.component.element.classList.remove(\n `${state.component.getClass(\"slider\")}--dragging`\n );\n\n // Hide bubble with delay\n hideActiveBubble(state.activeBubble, 1000);\n\n // Remove global event listeners\n document.removeEventListener(\"mousemove\", handleMouseMove);\n document.removeEventListener(\"mouseup\", handleMouseUp);\n document.removeEventListener(\"touchmove\", handleMouseMove);\n document.removeEventListener(\"touchend\", handleMouseUp);\n\n // Reset active handle and update UI\n state.activeHandle = null;\n render();\n\n // Trigger events\n triggerEvent(SLIDER_EVENTS.CHANGE, e);\n triggerEvent(SLIDER_EVENTS.END, e);\n };\n\n /**\n * Handle keyboard input\n */\n const handleKeyDown = (e, isSecondHandle = false) => {\n if (state.component.disabled && state.component.disabled.isDisabled())\n return;\n\n const step = state.step || 1;\n let newValue = isSecondHandle ? state.secondValue : state.value;\n const stepSize = e.shiftKey ? step * 10 : step;\n\n // Handle tab key separately\n if (e.key === \"Tab\") return;\n\n let valueChanged = false;\n\n switch (e.key) {\n case \"ArrowRight\":\n case \"ArrowUp\":\n e.preventDefault();\n newValue = Math.min(newValue + stepSize, state.max);\n valueChanged = true;\n break;\n\n case \"ArrowLeft\":\n case \"ArrowDown\":\n e.preventDefault();\n newValue = Math.max(newValue - stepSize, state.min);\n valueChanged = true;\n break;\n\n case \"Home\":\n e.preventDefault();\n newValue = state.min;\n valueChanged = true;\n break;\n\n case \"End\":\n e.preventDefault();\n newValue = state.max;\n valueChanged = true;\n break;\n\n case \"PageUp\":\n e.preventDefault();\n newValue = Math.min(newValue + step * 10, state.max);\n valueChanged = true;\n break;\n\n case \"PageDown\":\n e.preventDefault();\n newValue = Math.max(newValue - step * 10, state.min);\n valueChanged = true;\n break;\n\n default:\n return; // Exit if not a handled key\n }\n\n if (!valueChanged) return;\n\n // Update active bubble reference\n state.activeBubble = isSecondHandle ? secondValueBubble : valueBubble;\n\n // Show value bubble during keyboard interaction\n showActiveBubble(state.activeBubble);\n\n // Update the value\n if (isSecondHandle) {\n state.secondValue = newValue;\n } else {\n // Track previousValue for centered sliders\n if (config.centered) {\n state.previousValue = state.value;\n }\n state.value = newValue;\n }\n\n // Update UI and trigger events\n render();\n triggerEvent(SLIDER_EVENTS.INPUT, e);\n triggerEvent(SLIDER_EVENTS.CHANGE, e);\n };\n\n /**\n * Handle focus events\n */\n const handleFocus = (e, isSecondHandle = false) => {\n if (state.component.disabled && state.component.disabled.isDisabled())\n return;\n\n // Track the currently focused handle\n const currentHandle = isSecondHandle ? secondHandle : handle;\n\n // Hide previous bubble if switching between handles\n if (lastFocusedHandle && lastFocusedHandle !== currentHandle) {\n hideAllBubbles();\n }\n\n lastFocusedHandle = currentHandle;\n\n // Add focus class and show bubble\n currentHandle.classList.add(\n `${state.component.getClass(\"slider-handle\")}--focused`\n );\n showActiveBubble(isSecondHandle ? secondValueBubble : valueBubble);\n state.activeBubble = isSecondHandle ? secondValueBubble : valueBubble;\n\n triggerEvent(SLIDER_EVENTS.FOCUS, e);\n };\n\n /**\n * Handle blur events\n */\n const handleBlur = (e, isSecondHandle = false) => {\n const handleElement = isSecondHandle ? secondHandle : handle;\n handleElement.classList.remove(\n `${state.component.getClass(\"slider-handle\")}--focused`\n );\n\n // Only hide bubble if not tabbing to another handle\n const relatedTarget = e.relatedTarget;\n const otherHandle = isSecondHandle ? handle : secondHandle;\n\n if (!relatedTarget || relatedTarget !== otherHandle) {\n hideActiveBubble(isSecondHandle ? secondValueBubble : valueBubble, 200);\n }\n\n triggerEvent(SLIDER_EVENTS.BLUR, e);\n };\n\n /**\n * Set up all event listeners\n */\n const setupEventListeners = () => {\n if (!state.component || !handle) {\n console.warn(\n \"Cannot set up event listeners: missing component or handle\"\n );\n return;\n }\n\n // Use container for track events instead of track for better UX\n container.addEventListener(\"mousedown\", handleTrackMouseDown);\n container.addEventListener(\"touchstart\", handleTrackMouseDown, {\n passive: false,\n });\n\n // Handle events\n handle.addEventListener(\"mousedown\", (e) =>\n handleHandleMouseDown(e, false)\n );\n handle.addEventListener(\n \"touchstart\",\n (e) => handleHandleMouseDown(e, false),\n { passive: false }\n );\n handle.addEventListener(\"keydown\", (e) => handleKeyDown(e, false));\n handle.addEventListener(\"focus\", (e) => handleFocus(e, false));\n handle.addEventListener(\"blur\", (e) => handleBlur(e, false));\n\n // Second handle events for range slider\n if (config.range && secondHandle) {\n secondHandle.addEventListener(\"mousedown\", (e) =>\n handleHandleMouseDown(e, true)\n );\n secondHandle.addEventListener(\n \"touchstart\",\n (e) => handleHandleMouseDown(e, true),\n { passive: false }\n );\n secondHandle.addEventListener(\"keydown\", (e) => handleKeyDown(e, true));\n secondHandle.addEventListener(\"focus\", (e) => handleFocus(e, true));\n secondHandle.addEventListener(\"blur\", (e) => handleBlur(e, true));\n }\n };\n\n /**\n * Clean up all event listeners\n */\n const cleanupEventListeners = () => {\n if (!state.component) return;\n\n // Clean up container listeners\n if (container) {\n container.removeEventListener(\"mousedown\", handleTrackMouseDown);\n container.removeEventListener(\"touchstart\", handleTrackMouseDown);\n }\n\n // Clean up handle listeners\n if (handle) {\n handle.removeEventListener(\"mousedown\", (e) =>\n handleHandleMouseDown(e, false)\n );\n handle.removeEventListener(\"touchstart\", (e) =>\n handleHandleMouseDown(e, false)\n );\n handle.removeEventListener(\"keydown\", (e) => handleKeyDown(e, false));\n handle.removeEventListener(\"focus\", (e) => handleFocus(e, false));\n handle.removeEventListener(\"blur\", (e) => handleBlur(e, false));\n }\n\n // Clean up second handle listeners\n if (config.range && secondHandle) {\n secondHandle.removeEventListener(\"mousedown\", (e) =>\n handleHandleMouseDown(e, true)\n );\n secondHandle.removeEventListener(\"touchstart\", (e) =>\n handleHandleMouseDown(e, true)\n );\n secondHandle.removeEventListener(\"keydown\", (e) =>\n handleKeyDown(e, true)\n );\n secondHandle.removeEventListener(\"focus\", (e) => handleFocus(e, true));\n secondHandle.removeEventListener(\"blur\", (e) => handleBlur(e, true));\n }\n\n // Clean up document listeners\n document.removeEventListener(\"mousemove\", handleMouseMove);\n document.removeEventListener(\"mouseup\", handleMouseUp);\n document.removeEventListener(\"touchmove\", handleMouseMove);\n document.removeEventListener(\"touchend\", handleMouseUp);\n };\n\n // Return consolidated handlers\n return {\n // Mouse/Touch handlers\n handleHandleMouseDown,\n handleTrackMouseDown,\n handleMouseMove,\n handleMouseUp,\n\n // Keyboard handlers\n handleKeyDown,\n handleFocus,\n handleBlur,\n\n // Event management\n setupEventListeners,\n cleanupEventListeners,\n\n // Bubble management\n showActiveBubble,\n hideActiveBubble,\n hideAllBubbles,\n clearKeyboardFocus,\n };\n};\n",
|
|
179
|
+
"// src/components/slider/features/controller.ts\nimport { SLIDER_EVENTS } from \"../types\";\nimport { SliderConfig } from \"../types\";\nimport { SLIDER_MEASUREMENTS } from \"../constants\";\nimport { createHandlers } from \"./handlers\";\n\n/**\n * Add controller functionality to slider component\n * Manages state, events, user interactions, and UI rendering\n *\n * @param config Slider configuration\n * @returns Component enhancer with slider controller functionality\n */\nexport const withController = (config: SliderConfig) => (component) => {\n // Ensure component has required properties\n if (!component.element) {\n console.warn(\"Cannot initialize slider controller: missing element\");\n return component;\n }\n\n // Initialize state with current config\n const state = {\n component,\n value: config.value !== undefined ? config.value : 0,\n secondValue: config.secondValue !== undefined ? config.secondValue : null,\n min: config.min !== undefined ? config.min : 0,\n max: config.max !== undefined ? config.max : 100,\n step: config.step !== undefined ? config.step : 1,\n dragging: false,\n pressed: false, // Track if handle is pressed (mouse down)\n activeHandle: null, // Track which handle is active (null, 'first', 'second')\n activeBubble: null,\n valueHideTimer: null,\n };\n\n // Create event helpers\n const eventHelpers = {\n triggerEvent(eventName, originalEvent = null) {\n const eventData = {\n slider: state.component,\n value: state.value,\n secondValue: state.secondValue,\n originalEvent,\n preventDefault: () => {\n eventData.defaultPrevented = true;\n },\n defaultPrevented: false,\n };\n\n state.component.emit(eventName, eventData);\n return eventData;\n },\n };\n\n //=============================================================================\n // UI RENDERING FUNCTIONS\n //=============================================================================\n\n /**\n * Gets required components from state, safely handling missing components\n */\n const getComponents = () => {\n // Return empty object if component is missing\n if (!state.component) {\n return {};\n }\n\n // Get components from both direct properties (withDom) and components object (legacy)\n const components = state.component.components || {};\n const component = state.component;\n\n return {\n container: component.container || components.container,\n handle: component.handle || components.handle,\n valueBubble: component.valueBubble || components.valueBubble,\n secondHandle: component.secondHandle || components.secondHandle,\n secondValueBubble:\n component.secondValueBubble || components.secondValueBubble,\n // Include any other components that might exist\n ...components,\n };\n };\n\n /**\n * Calculates percentage position for a value\n * Maps from value space (min-max) to percentage space (0-100)\n */\n const getPercentage = (value) => {\n const range = state.max - state.min;\n return range === 0 ? 0 : ((value - state.min) / range) * 100;\n };\n\n /**\n * Gets track dimensions and constraints for positioning calculations\n * Handles edge constraints and padding for proper handle positioning\n */\n const getTrackDimensions = () => {\n const components = getComponents();\n const { handle, container } = components;\n\n if (!handle || !container) return null;\n\n try {\n const handleRect = handle.getBoundingClientRect();\n const containerRect = container.getBoundingClientRect();\n const handleSize = handleRect.width || SLIDER_MEASUREMENTS.HANDLE_SIZE;\n const trackSize = containerRect.width;\n\n // Use EDGE_PADDING for consistent edge constraints\n const edgeConstraint =\n (SLIDER_MEASUREMENTS.EDGE_PADDING / trackSize) * 100;\n const paddingPixels = state.activeHandle ? 6 : 8;\n const paddingPercent = (paddingPixels / trackSize) * 100;\n\n return { handleSize, trackSize, edgeConstraint, paddingPercent };\n } catch (error) {\n console.warn(\"Error calculating track dimensions:\", error);\n return {\n handleSize: SLIDER_MEASUREMENTS.HANDLE_SIZE,\n trackSize: 200,\n edgeConstraint: 3, // 6px / 200px * 100\n paddingPercent: 4,\n };\n }\n };\n\n /**\n * Maps value percentage to visual position with edge constraints\n * Ensures handles stay within the visible track area\n */\n const mapValueToVisualPercent = (valuePercent, trackSize = 200) => {\n // Calculate edge constraint using EDGE_PADDING\n const edgeConstraint = (SLIDER_MEASUREMENTS.EDGE_PADDING / trackSize) * 100;\n const minEdge = edgeConstraint;\n const maxEdge = 100 - edgeConstraint;\n const visualRange = maxEdge - minEdge;\n\n if (valuePercent <= 0) return minEdge;\n if (valuePercent >= 100) return maxEdge;\n return minEdge + (valuePercent / 100) * visualRange;\n };\n\n /**\n * Gets slider value from a position on the track\n * Maps from pixel position to slider value\n */\n const getValueFromPosition = (position) => {\n const components = getComponents();\n const { handle, container } = components;\n\n if (!handle || !container) return state.min;\n\n try {\n const containerRect = container.getBoundingClientRect();\n const range = state.max - state.min;\n\n // Use EDGE_PADDING for consistent edge constraints\n const leftEdge = containerRect.left + SLIDER_MEASUREMENTS.EDGE_PADDING;\n const rightEdge = containerRect.right - SLIDER_MEASUREMENTS.EDGE_PADDING;\n const effectiveWidth = rightEdge - leftEdge;\n\n const adjustedPosition = Math.max(\n leftEdge,\n Math.min(rightEdge, position)\n );\n const percentageFromLeft = (adjustedPosition - leftEdge) / effectiveWidth;\n\n return state.min + percentageFromLeft * range;\n } catch (error) {\n console.warn(\"Error calculating value from position:\", error);\n return state.min;\n }\n };\n\n /**\n * Rounds a value to the nearest step\n * Used for discrete sliders\n */\n const roundToStep = (value) => {\n const step = state.step;\n if (!step || step <= 0) return value;\n\n const steps = Math.round((value - state.min) / step);\n return state.min + steps * step;\n };\n\n /**\n * Clamps a value between min and max\n * Ensures values stay within valid range\n */\n const clamp = (value, min, max) => Math.min(Math.max(value, min), max);\n\n /**\n * Updates handle and bubble positions\n * Positions elements according to current state values\n */\n const updateHandlePositions = () => {\n const components = getComponents();\n const { handle, container, valueBubble, secondHandle, secondValueBubble } =\n components;\n\n if (!handle || !container) return;\n\n const dims = getTrackDimensions();\n if (!dims) return;\n\n const { trackSize } = dims;\n\n // Update main handle position\n const percent = getPercentage(state.value);\n const adjustedPercent = mapValueToVisualPercent(percent, trackSize);\n\n handle.style.left = `${adjustedPercent}%`;\n handle.style.transform = \"translate(-50%, -50%)\";\n\n if (valueBubble) {\n valueBubble.style.left = `${adjustedPercent}%`;\n valueBubble.style.transform = \"translateX(-50%)\";\n }\n\n // Update second handle if range slider\n if (config.range && secondHandle && state.secondValue !== null) {\n const secondPercent = getPercentage(state.secondValue);\n const adjustedSecondPercent = mapValueToVisualPercent(\n secondPercent,\n trackSize\n );\n\n secondHandle.style.left = `${adjustedSecondPercent}%`;\n secondHandle.style.transform = \"translate(-50%, -50%)\";\n\n if (secondValueBubble) {\n secondValueBubble.style.left = `${adjustedSecondPercent}%`;\n secondValueBubble.style.transform = \"translateX(-50%)\";\n }\n }\n\n // Update ARIA attributes\n if (handle) {\n handle.setAttribute(\"aria-valuenow\", String(state.value));\n }\n };\n\n /**\n * Updates value bubble content\n * Applies formatting to displayed values\n */\n const updateValueBubbles = () => {\n const components = getComponents();\n const { valueBubble, secondValueBubble } = components;\n\n if (!valueBubble) return;\n\n const formatter = config.valueFormatter || ((value) => value.toString());\n valueBubble.textContent = formatter(state.value);\n\n if (config.range && secondValueBubble && state.secondValue !== null) {\n secondValueBubble.textContent = formatter(state.secondValue);\n }\n };\n\n /**\n * Shows or hides value bubble\n * Controls visibility for value indicators\n */\n const showValueBubble = (bubbleElement, show) => {\n if (!bubbleElement || !config.showValue) return;\n\n const bubbleClass = state.component.getClass(\"slider-value\");\n bubbleElement.classList[show ? \"add\" : \"remove\"](`${bubbleClass}--visible`);\n };\n\n /**\n * Generates tick marks\n * NOTE: Ticks are now rendered via canvas, this just clears any DOM ticks\n */\n const generateTicks = () => {\n // Canvas handles tick rendering - no DOM manipulation needed\n };\n\n /**\n * Updates active state of tick marks\n * NOTE: Ticks are now rendered via canvas, so this is no longer needed\n */\n const updateTicks = () => {\n // Canvas handles tick rendering - no DOM manipulation needed\n };\n\n /**\n * Renders all UI elements to match current state\n * Central method for keeping UI in sync with state\n */\n const render = () => {\n try {\n updateHandlePositions();\n updateValueBubbles();\n\n // Trigger canvas redraw if available\n if (component.drawCanvas) {\n // Pass the current state directly to canvas\n component.drawCanvas(state);\n }\n } catch (error) {\n console.warn(\"Error rendering UI:\", error);\n }\n };\n\n // Create UI renderer interface for event handlers\n const uiRenderer = {\n getPercentage,\n getValueFromPosition,\n roundToStep,\n clamp,\n showValueBubble,\n updateUi: render, // For backward compatibility\n render,\n };\n\n // Create event handlers with our renderer\n const handlers = createHandlers(config, state, uiRenderer, eventHelpers);\n\n // Initialize slider controller\n const initController = () => {\n try {\n // Verify we have the necessary components\n const components = getComponents();\n\n if (!components.handle) {\n console.warn(\n \"Cannot initialize slider controller: missing required handle component\"\n );\n return;\n }\n\n // Set ARIA attributes\n component.element.setAttribute(\"aria-valuemin\", String(state.min));\n component.element.setAttribute(\"aria-valuemax\", String(state.max));\n component.element.setAttribute(\"aria-valuenow\", String(state.value));\n\n const { handle, secondHandle } = components;\n\n // Set handle attributes\n if (handle) {\n handle.setAttribute(\"aria-valuemin\", String(state.min));\n handle.setAttribute(\"aria-valuemax\", String(state.max));\n handle.setAttribute(\"aria-valuenow\", String(state.value));\n\n if (config.range && secondHandle && state.secondValue !== null) {\n secondHandle.setAttribute(\"aria-valuemin\", String(state.min));\n secondHandle.setAttribute(\"aria-valuemax\", String(state.max));\n secondHandle.setAttribute(\"aria-valuenow\", String(state.secondValue));\n }\n }\n\n // Setup event listeners\n handlers.setupEventListeners();\n\n // Initial UI update\n render();\n } catch (error) {\n console.error(\"Error initializing slider controller:\", error);\n }\n };\n\n // Register with lifecycle if available\n if (component.lifecycle) {\n const originalDestroy = component.lifecycle.destroy || (() => {});\n component.lifecycle.destroy = () => {\n handlers.cleanupEventListeners();\n originalDestroy();\n };\n }\n\n // Schedule initialization after current execution completes\n setTimeout(() => {\n initController();\n }, 0);\n\n // Return enhanced component\n return {\n ...component,\n // Provide controller API under 'slider' property for backward compatibility\n slider: {\n /**\n * Sets slider value\n * @param value New value\n * @param triggerEvent Whether to trigger change event\n * @returns Slider controller for chaining\n */\n setValue(value, triggerEvent = true) {\n const newValue = clamp(value, state.min, state.max);\n\n state.value = newValue;\n render();\n\n if (triggerEvent) {\n eventHelpers.triggerEvent(SLIDER_EVENTS.CHANGE);\n }\n\n return this;\n },\n\n /**\n * Gets slider value\n * @returns Current value\n */\n getValue() {\n return state.value;\n },\n\n /**\n * Sets secondary slider value (for range slider)\n * @param value New secondary value\n * @param triggerEvent Whether to trigger change event\n * @returns Slider controller for chaining\n */\n setSecondValue(value, triggerEvent = true) {\n if (!config.range) return this;\n\n const newValue = clamp(value, state.min, state.max);\n state.secondValue = newValue;\n render();\n\n if (triggerEvent) {\n eventHelpers.triggerEvent(SLIDER_EVENTS.CHANGE);\n }\n\n return this;\n },\n\n /**\n * Gets secondary slider value\n * @returns Current secondary value or null\n */\n getSecondValue() {\n return config.range ? state.secondValue : null;\n },\n\n /**\n * Sets slider minimum value\n * @param min New minimum value\n * @returns Slider controller for chaining\n */\n setMin(min) {\n state.min = min;\n\n // Update ARIA attributes if elements exist\n component.element.setAttribute(\"aria-valuemin\", String(min));\n const components = getComponents();\n if (components.handle) {\n components.handle.setAttribute(\"aria-valuemin\", String(min));\n }\n\n if (config.range && components.secondHandle) {\n components.secondHandle.setAttribute(\"aria-valuemin\", String(min));\n }\n\n // Clamp values to new min\n if (state.value < min) state.value = min;\n if (\n config.range &&\n state.secondValue !== null &&\n state.secondValue < min\n ) {\n state.secondValue = min;\n }\n\n // Regenerate ticks if needed\n if (config.ticks || config.tickLabels) {\n generateTicks();\n }\n\n render();\n return this;\n },\n\n /**\n * Gets slider minimum value\n * @returns Current minimum value\n */\n getMin() {\n return state.min;\n },\n\n /**\n * Sets slider maximum value\n * @param max New maximum value\n * @returns Slider controller for chaining\n */\n setMax(max) {\n state.max = max;\n\n // Update ARIA attributes if elements exist\n component.element.setAttribute(\"aria-valuemax\", String(max));\n const components = getComponents();\n if (components.handle) {\n components.handle.setAttribute(\"aria-valuemax\", String(max));\n }\n\n if (config.range && components.secondHandle) {\n components.secondHandle.setAttribute(\"aria-valuemax\", String(max));\n }\n\n // Clamp values to new max\n if (state.value > max) state.value = max;\n if (\n config.range &&\n state.secondValue !== null &&\n state.secondValue > max\n ) {\n state.secondValue = max;\n }\n\n // Regenerate ticks if needed\n if (config.ticks || config.tickLabels) {\n generateTicks();\n }\n\n render();\n return this;\n },\n\n /**\n * Gets slider maximum value\n * @returns Current maximum value\n */\n getMax() {\n return state.max;\n },\n\n /**\n * Sets slider step size\n * @param step New step size\n * @returns Slider controller for chaining\n */\n setStep(step) {\n state.step = step;\n\n // Add or remove discrete class\n component.element.classList[step > 0 ? \"add\" : \"remove\"](\n `${component.getClass(\"slider\")}--discrete`\n );\n\n // Regenerate ticks if needed\n if (config.ticks || config.tickLabels) {\n generateTicks();\n updateTicks();\n }\n\n return this;\n },\n\n /**\n * Gets slider step size\n * @returns Current step size\n */\n getStep() {\n return state.step;\n },\n\n /**\n * Regenerate tick marks and labels\n * NOTE: Canvas handles tick rendering, this just triggers a redraw\n * @returns Slider controller for chaining\n */\n regenerateTicks() {\n render(); // Canvas will redraw ticks based on current state\n return this;\n },\n\n /**\n * Update all UI elements\n * @returns Slider controller for chaining\n */\n updateUi() {\n render();\n return this;\n },\n },\n };\n};\n",
|
|
180
|
+
"import { SliderConfig, SliderColor } from \"../types\";\nimport { getThemeColor, colorToRGBA } from \"../../../core/utils\";\nimport {\n observeCanvasResize,\n clipRoundedRect,\n fillRoundedRectLR,\n clearCanvas,\n easeOutCubic,\n ANIMATION_DURATIONS,\n CanvasContext,\n createCanvasContext,\n updateCanvasDimensions as updateCanvasDims,\n initializeCanvasWithRetry,\n createStyledCanvas,\n createCanvasThemeObserver,\n} from \"../../../core/canvas\";\nimport { SLIDER_SIZES, SLIDER_MEASUREMENTS, SliderSize } from \"../constants\";\n\n/**\n * Animation state for smooth transitions\n */\ninterface AnimationState {\n // Current animated values\n animatedValue: number;\n animatedSecondValue: number | null;\n\n // Target values\n targetValue: number;\n targetSecondValue: number | null;\n\n // Start values for current animation\n startValue: number;\n startSecondValue: number | null;\n\n // Animation timing\n startTime: number;\n duration: number;\n animationFrame: number | null;\n}\n\n/**\n * Component with canvas capabilities\n */\ninterface CanvasSliderComponent {\n element: HTMLElement;\n canvas: HTMLCanvasElement;\n ctx: CanvasRenderingContext2D;\n getClass: (name: string) => string;\n drawCanvas: (state?: any) => void;\n resize: () => void;\n animationState?: AnimationState;\n [key: string]: any;\n}\n\n/**\n * Checks if component is disabled\n */\nconst isDisabled = (component?: any): boolean =>\n component?.disabled?.isDisabled?.() ||\n component?.element?.classList?.contains?.(\n `${component?.getClass?.(\"slider\")}--disabled`\n ) ||\n false;\n\n/**\n * Gets colors based on state and element type\n */\nconst getColors = (\n config: SliderConfig,\n component?: any,\n elementType: \"track\" | \"tick\" | \"dot\" = \"track\"\n) => {\n const disabled = isDisabled(component);\n const variant = config.color || \"primary\";\n\n if (disabled) {\n const onSurfaceColor = getThemeColor(\"sys-color-on-surface\", {\n fallback: \"#000000\",\n });\n return {\n primary: colorToRGBA(onSurfaceColor, 0.38),\n secondary: colorToRGBA(onSurfaceColor, 0.12),\n };\n }\n\n if (elementType === \"tick\") {\n return {\n primary: getThemeColor(`sys-color-on-${variant}`, {\n fallback: \"#ffffff\",\n }),\n secondary: getThemeColor(`sys-color-${variant}`, { fallback: \"#1976d2\" }),\n };\n }\n\n const primaryColor = getThemeColor(`sys-color-${variant}`, {\n fallback: \"#1976d2\",\n });\n return {\n primary: primaryColor,\n secondary: colorToRGBA(primaryColor, 0.24),\n };\n};\n\n/**\n * Calculates value percentage\n */\nconst getValuePercent = (value: number, min: number, max: number): number =>\n ((value - min) / (max - min)) * 100;\n\n/**\n * Draws a track segment if width > 0\n */\nconst drawTrackSegment = (\n ctx: CanvasRenderingContext2D,\n x: number,\n y: number,\n width: number,\n height: number,\n radius: number,\n color: string\n) => {\n if (width > 0) {\n fillRoundedRectLR(ctx, x, y, width, height, radius, radius, color);\n }\n};\n\n/**\n * Gets the track height value from the size config\n */\nexport const getTrackHeight = (size?: SliderSize): number => {\n if (typeof size === \"number\") {\n return Math.max(size, SLIDER_SIZES.XS);\n }\n\n if (typeof size === \"string\" && size in SLIDER_SIZES) {\n return SLIDER_SIZES[size as keyof typeof SLIDER_SIZES];\n }\n\n return SLIDER_SIZES.XS; // Default to XS\n};\n\n/**\n * Gets the handle height based on the slider size\n */\nexport const getHandleHeight = (size?: SliderSize): number => {\n const trackHeight = getTrackHeight(size);\n\n // For XS and S sizes, use SMALL_HANDLE_HEIGHT constant\n if (trackHeight <= SLIDER_SIZES.S) {\n return SLIDER_MEASUREMENTS.SMALL_HANDLE_HEIGHT;\n }\n\n // For M, L, XL sizes, handle height is larger than track by HANDLE_HEIGHT_OFFSET\n return trackHeight + SLIDER_MEASUREMENTS.HANDLE_HEIGHT_OFFSET;\n};\n\n/**\n * Gets the external track radius based on the slider size\n */\nexport const getExternalTrackRadius = (size?: SliderSize): number => {\n const trackHeight = getTrackHeight(size);\n\n // For XS and S sizes, use SMALL_TRACK_EXTERNAL_RADIUS constant\n if (trackHeight <= SLIDER_SIZES.S) {\n return SLIDER_MEASUREMENTS.SMALL_TRACK_EXTERNAL_RADIUS;\n }\n\n // For M, L, XL sizes, use track height multiplied by ratio\n return trackHeight * SLIDER_MEASUREMENTS.LARGE_TRACK_RADIUS_RATIO;\n};\n\n/**\n * Updates canvas dimensions based on current size\n */\nconst updateCanvasDimensions = (\n canvas: HTMLCanvasElement,\n context: CanvasContext,\n config?: SliderConfig\n): void => {\n const trackHeight = getTrackHeight(config?.size);\n const handleHeight = getHandleHeight(config?.size);\n\n const sliderElement = canvas.parentElement;\n if (!sliderElement) return;\n\n const width = Math.max(\n sliderElement.getBoundingClientRect().width || sliderElement.offsetWidth,\n 200\n );\n const height = Math.max(\n handleHeight + 20,\n trackHeight + 32,\n SLIDER_MEASUREMENTS.MIN_HEIGHT\n );\n\n // Update container height\n sliderElement.style.height = `${height}px`;\n\n // Use shared utility to update canvas dimensions\n updateCanvasDims(context, width, height);\n};\n\n/**\n * Sets up canvas with proper pixel ratio and dimensions\n */\nconst setupCanvas = (\n canvas: HTMLCanvasElement,\n config?: SliderConfig\n): CanvasContext => {\n const sliderElement = canvas.parentElement;\n if (!sliderElement) {\n throw new Error(\"Canvas must have a parent element\");\n }\n\n const trackHeight = getTrackHeight(config?.size);\n const handleHeight = getHandleHeight(config?.size);\n const width = Math.max(\n sliderElement.getBoundingClientRect().width || sliderElement.offsetWidth,\n 200\n );\n const height = Math.max(\n handleHeight + 20,\n trackHeight + 32,\n SLIDER_MEASUREMENTS.MIN_HEIGHT\n );\n\n // Update container height\n sliderElement.style.height = `${height}px`;\n\n // Use shared utility to create canvas context\n return createCanvasContext(canvas, width, height);\n};\n\n/**\n * Maps value percentage to visual position with edge constraints\n */\nconst mapValueToVisualPercent = (\n valuePercent: number,\n trackWidth: number\n): number => {\n const edgeConstraint = (SLIDER_MEASUREMENTS.EDGE_PADDING / trackWidth) * 100;\n const minEdge = edgeConstraint;\n const maxEdge = 100 - edgeConstraint;\n const visualRange = maxEdge - minEdge;\n\n if (valuePercent <= 0) return minEdge;\n if (valuePercent >= 100) return maxEdge;\n return minEdge + (valuePercent / 100) * visualRange;\n};\n\n/**\n * Draws track segments on canvas\n */\nconst drawTracks = (\n ctx: CanvasRenderingContext2D,\n width: number,\n height: number,\n config: SliderConfig,\n state: any,\n component?: any\n) => {\n const trackY = height / 2;\n const trackHeight = getTrackHeight(config.size);\n const containerRadius = getExternalTrackRadius(config.size); // Container radius for clipping\n const trackRadius = SLIDER_MEASUREMENTS.TRACK_RADIUS; // Uniform 2px radius for all tracks\n\n // Create clipping region with container radius (mimics CSS overflow: hidden with border-radius)\n const restoreClip = clipRoundedRect(\n ctx,\n 0,\n trackY - trackHeight / 2,\n width,\n trackHeight,\n containerRadius\n );\n\n // Get colors based on state\n const { primary: primaryColor, secondary: inactiveColor } = getColors(\n config,\n component\n );\n\n // Get value percentages\n const valuePercent = getValuePercent(state.value, state.min, state.max);\n const adjustedPercent = mapValueToVisualPercent(valuePercent, width);\n\n // Fixed pixel gaps - instantly reduce by HANDLE_GAP_PRESSED_REDUCTION when pressed\n const gapReduction = state.pressed\n ? SLIDER_MEASUREMENTS.HANDLE_GAP_PRESSED_REDUCTION\n : 0;\n const handleGapPixels = SLIDER_MEASUREMENTS.HANDLE_GAP - gapReduction;\n const centerGapPixels = SLIDER_MEASUREMENTS.CENTER_GAP;\n const halfCenterGapPercent = (centerGapPixels / 2 / width) * 100;\n const paddingPercent = (handleGapPixels / width) * 100;\n\n if (config.centered) {\n // Calculate center position\n const zeroPercent = getValuePercent(0, state.min, state.max);\n const adjustedZeroPercent = mapValueToVisualPercent(zeroPercent, width);\n\n // Check if handle is near center\n const handleNearCenter =\n Math.abs(adjustedPercent - adjustedZeroPercent) < paddingPercent;\n const isPositive = state.value >= 0;\n\n if (handleNearCenter) {\n // Handle at center - draw start and remaining tracks only\n\n // Start track (left side)\n const startWidth = ((adjustedPercent - paddingPercent) / 100) * width;\n if (startWidth > 0) {\n drawTrackSegment(\n ctx,\n 0,\n trackY - trackHeight / 2,\n startWidth,\n trackHeight,\n trackRadius,\n inactiveColor\n );\n }\n\n // Remaining track (right side)\n const remainingX = ((adjustedPercent + paddingPercent) / 100) * width;\n const remainingWidth = width - remainingX;\n if (remainingWidth > 0) {\n drawTrackSegment(\n ctx,\n remainingX,\n trackY - trackHeight / 2,\n remainingWidth,\n trackHeight,\n trackRadius,\n inactiveColor\n );\n }\n } else if (isPositive) {\n // Positive value - active track from center to handle\n\n // Start track (from minimum to center)\n const startWidth =\n ((adjustedZeroPercent - halfCenterGapPercent) / 100) * width;\n if (startWidth > 0) {\n drawTrackSegment(\n ctx,\n 0,\n trackY - trackHeight / 2,\n startWidth,\n trackHeight,\n trackRadius,\n inactiveColor\n );\n }\n\n // Active track (from center to handle)\n const activeX =\n ((adjustedZeroPercent + halfCenterGapPercent) / 100) * width;\n const activeWidth =\n ((adjustedPercent - paddingPercent) / 100) * width - activeX;\n if (activeWidth > 0) {\n drawTrackSegment(\n ctx,\n activeX,\n trackY - trackHeight / 2,\n activeWidth,\n trackHeight,\n trackRadius,\n primaryColor\n );\n }\n\n // Remaining track (from handle to maximum)\n const remainingX = ((adjustedPercent + paddingPercent) / 100) * width;\n const remainingWidth = width - remainingX;\n if (remainingWidth > 0) {\n drawTrackSegment(\n ctx,\n remainingX,\n trackY - trackHeight / 2,\n remainingWidth,\n trackHeight,\n trackRadius,\n inactiveColor\n );\n }\n } else {\n // Negative value - active track from handle to center\n\n // Start track (from minimum to handle)\n const startWidth = ((adjustedPercent - paddingPercent) / 100) * width;\n if (startWidth > 0) {\n drawTrackSegment(\n ctx,\n 0,\n trackY - trackHeight / 2,\n startWidth,\n trackHeight,\n trackRadius,\n inactiveColor\n );\n }\n\n // Active track (from handle to center)\n const activeX = ((adjustedPercent + paddingPercent) / 100) * width;\n const activeWidth =\n ((adjustedZeroPercent - halfCenterGapPercent) / 100) * width - activeX;\n if (activeWidth > 0) {\n drawTrackSegment(\n ctx,\n activeX,\n trackY - trackHeight / 2,\n activeWidth,\n trackHeight,\n trackRadius,\n primaryColor\n );\n }\n\n // Remaining track (from center to maximum)\n const remainingX =\n ((adjustedZeroPercent + halfCenterGapPercent) / 100) * width;\n const remainingWidth = width - remainingX;\n if (remainingWidth > 0) {\n drawTrackSegment(\n ctx,\n remainingX,\n trackY - trackHeight / 2,\n remainingWidth,\n trackHeight,\n trackRadius,\n inactiveColor\n );\n }\n }\n } else if (config.range && state.secondValue !== null) {\n // Range slider\n const secondPercent = getValuePercent(\n state.secondValue,\n state.min,\n state.max\n );\n const adjustedSecondPercent = mapValueToVisualPercent(secondPercent, width);\n\n const lowerPercent = Math.min(adjustedPercent, adjustedSecondPercent);\n const higherPercent = Math.max(adjustedPercent, adjustedSecondPercent);\n\n // Determine which handle is at lower/higher position\n const firstHandleIsLower = adjustedPercent <= adjustedSecondPercent;\n\n // Apply gap reduction only to the active handle\n const firstHandleGapReduction =\n state.pressed && state.activeHandle === \"first\"\n ? SLIDER_MEASUREMENTS.HANDLE_GAP_PRESSED_REDUCTION\n : 0;\n const secondHandleGapReduction =\n state.pressed && state.activeHandle === \"second\"\n ? SLIDER_MEASUREMENTS.HANDLE_GAP_PRESSED_REDUCTION\n : 0;\n\n const firstHandleGapPixels =\n SLIDER_MEASUREMENTS.HANDLE_GAP - firstHandleGapReduction;\n const secondHandleGapPixels =\n SLIDER_MEASUREMENTS.HANDLE_GAP - secondHandleGapReduction;\n\n const lowerHandleGapPercent = firstHandleIsLower\n ? (firstHandleGapPixels / width) * 100\n : (secondHandleGapPixels / width) * 100;\n\n const higherHandleGapPercent = firstHandleIsLower\n ? (secondHandleGapPixels / width) * 100\n : (firstHandleGapPixels / width) * 100;\n\n // Inactive track before first handle\n const startWidth = ((lowerPercent - lowerHandleGapPercent) / 100) * width;\n if (startWidth > 0) {\n drawTrackSegment(\n ctx,\n 0,\n trackY - trackHeight / 2,\n startWidth,\n trackHeight,\n trackRadius,\n inactiveColor\n );\n }\n\n // Active track between handles\n const activeX = ((lowerPercent + lowerHandleGapPercent) / 100) * width;\n const activeWidth =\n ((higherPercent - higherHandleGapPercent) / 100) * width - activeX;\n\n if (activeWidth > trackHeight) {\n // Only show if handles aren't too close\n drawTrackSegment(\n ctx,\n activeX,\n trackY - trackHeight / 2,\n activeWidth,\n trackHeight,\n trackRadius,\n primaryColor\n );\n }\n\n // Inactive track after second handle\n const remainingX = ((higherPercent + higherHandleGapPercent) / 100) * width;\n const remainingWidth = width - remainingX;\n if (remainingWidth > 0) {\n drawTrackSegment(\n ctx,\n remainingX,\n trackY - trackHeight / 2,\n remainingWidth,\n trackHeight,\n trackRadius,\n inactiveColor\n );\n }\n } else {\n // Single handle slider\n\n // Active track (from start to handle)\n const activeWidth = ((adjustedPercent - paddingPercent) / 100) * width;\n if (activeWidth > 0) {\n drawTrackSegment(\n ctx,\n 0,\n trackY - trackHeight / 2,\n activeWidth,\n trackHeight,\n trackRadius,\n primaryColor\n );\n }\n\n // Remaining track (from handle to end)\n const remainingX = ((adjustedPercent + paddingPercent) / 100) * width;\n const remainingWidth = width - remainingX;\n if (remainingWidth > 0) {\n drawTrackSegment(\n ctx,\n remainingX,\n trackY - trackHeight / 2,\n remainingWidth,\n trackHeight,\n trackRadius,\n inactiveColor\n );\n }\n }\n\n // Restore canvas state (removes clipping)\n restoreClip();\n};\n\n/**\n * Draws tick marks on canvas\n */\nconst drawTicks = (\n ctx: CanvasRenderingContext2D,\n width: number,\n height: number,\n config: SliderConfig,\n state: any,\n component?: any\n) => {\n if (!config.ticks) return;\n\n const tickSize = SLIDER_MEASUREMENTS.TICK_SIZE;\n const y = height / 2;\n\n // Get colors based on state\n const { primary: tickActiveColor, secondary: tickInactiveColor } = getColors(\n config,\n component,\n \"tick\"\n );\n\n // Calculate tick values\n const numSteps = Math.floor((state.max - state.min) / state.step);\n\n for (let i = 0; i <= numSteps; i++) {\n const value = state.min + i * state.step;\n if (value > state.max) continue;\n\n // Get position with edge constraints\n const percent = getValuePercent(value, state.min, state.max);\n const adjustedPercent = mapValueToVisualPercent(percent, width);\n const x = (adjustedPercent / 100) * width;\n\n // Skip tick if it's at handle position\n const isAtHandle = Math.abs(value - state.value) < state.step * 0.1;\n const isAtSecondHandle =\n config.range &&\n state.secondValue !== null &&\n Math.abs(value - state.secondValue) < state.step * 0.1;\n\n if (isAtHandle || isAtSecondHandle) continue;\n\n // Determine if tick is active\n let isActive = false;\n\n if (config.centered) {\n isActive =\n state.value >= 0\n ? value >= 0 && value <= state.value\n : value >= state.value && value <= 0;\n } else if (config.range && state.secondValue !== null) {\n const lowerValue = Math.min(state.value, state.secondValue);\n const higherValue = Math.max(state.value, state.secondValue);\n isActive = value >= lowerValue && value <= higherValue;\n } else {\n isActive = value <= state.value;\n }\n\n // Draw tick\n ctx.fillStyle = isActive ? tickActiveColor : tickInactiveColor;\n ctx.globalAlpha = isActive ? 1 : 0.5;\n ctx.beginPath();\n ctx.arc(x, y, tickSize / 2, 0, Math.PI * 2);\n ctx.fill();\n }\n\n ctx.globalAlpha = 1;\n};\n\n/**\n * Draws dots at track ends\n */\nconst drawDots = (\n ctx: CanvasRenderingContext2D,\n width: number,\n height: number,\n config: SliderConfig,\n component?: any\n) => {\n // Don't draw dots for discrete sliders (sliders with ticks)\n if (config.ticks) return;\n\n const dotSize = SLIDER_MEASUREMENTS.DOT_SIZE;\n const y = height / 2;\n const padding = SLIDER_MEASUREMENTS.EDGE_PADDING;\n\n // Get colors based on state\n const { primary: dotColor } = getColors(config, component, \"dot\");\n\n // For continuous sliders, only draw end dot\n ctx.fillStyle = dotColor;\n ctx.beginPath();\n ctx.arc(width - padding, y, dotSize / 2, 0, Math.PI * 2);\n ctx.fill();\n};\n\n/**\n * Main drawing function\n */\nconst draw = (\n context: CanvasContext,\n config: SliderConfig,\n state: any,\n component?: any\n): void => {\n const { ctx, width, height } = context;\n\n // Skip drawing if canvas has no dimensions\n if (width === 0 || height === 0) return;\n\n // Clear canvas\n clearCanvas(ctx, width, height);\n\n // Draw in order: dots, tracks, ticks\n drawDots(ctx, width, height, config, component);\n drawTracks(ctx, width, height, config, state, component);\n drawTicks(ctx, width, height, config, state, component);\n};\n\n/**\n * Updates handle sizes based on slider size\n */\nconst updateHandleSizes = (component: any, size: SliderSize): void => {\n const handleHeight = getHandleHeight(size);\n\n // Check both component.handle (from withDom) and component.components.handle (legacy)\n const handle = component.handle || component.components?.handle;\n const secondHandle =\n component.secondHandle || component.components?.secondHandle;\n\n if (handle) {\n handle.style.height = `${handleHeight}px`;\n handle.style.transform = \"translate(-50%, -50%)\";\n }\n if (secondHandle) {\n secondHandle.style.height = `${handleHeight}px`;\n secondHandle.style.transform = \"translate(-50%, -50%)\";\n }\n};\n\n/**\n * Creates state object from various sources\n */\nconst createState = (\n controllerState?: any,\n component?: any,\n lastKnownState?: any\n): any => {\n if (controllerState) {\n return {\n value: controllerState.value,\n secondValue: controllerState.secondValue,\n min: controllerState.min,\n max: controllerState.max,\n step: controllerState.step,\n pressed: controllerState.pressed || false,\n activeHandle: controllerState.activeHandle || null,\n };\n }\n\n if (component?.slider) {\n return {\n value: component.slider.getValue(),\n secondValue: component.slider.getSecondValue(),\n min: component.slider.getMin(),\n max: component.slider.getMax(),\n step: component.slider.getStep(),\n pressed: false,\n activeHandle: null,\n };\n }\n\n return (\n lastKnownState || {\n value: 0,\n secondValue: null,\n min: 0,\n max: 100,\n step: 1,\n pressed: false,\n activeHandle: null,\n }\n );\n};\n\n/**\n * Adds canvas functionality for slider visuals\n * Keeps handle and value bubble as DOM elements for accessibility\n */\nexport const withCanvas =\n (config: SliderConfig) =>\n (component: any): CanvasSliderComponent => {\n // Create canvas element using shared utility\n const canvas = createStyledCanvas(\n `${component.getClass(\"slider-canvas\")}`,\n { zIndex: \"1\" } // Ensure canvas is above track but below handle\n );\n\n // Insert canvas as first child (behind interactive elements)\n const container = component.container || component.components?.container;\n if (container) {\n container.insertBefore(canvas, container.firstChild);\n } else {\n component.element.appendChild(canvas);\n }\n\n // Setup canvas context\n let canvasContext: CanvasContext | null = null;\n let resizeCleanup: (() => void) | null = null;\n let themeCleanup: (() => void) | null = null;\n\n // Current size - managed by API\n let currentSize = config.size || \"XS\";\n\n // Store last known state for theme changes\n let lastKnownState = createState(null, component, {\n value: config.value || 0,\n secondValue: config.secondValue || null,\n min: config.min || 0,\n max: config.max || 100,\n step: config.step || 1,\n pressed: false,\n activeHandle: null,\n });\n\n // Initialize animation state\n const animationState: AnimationState = {\n animatedValue: lastKnownState.value,\n animatedSecondValue: lastKnownState.secondValue,\n targetValue: lastKnownState.value,\n targetSecondValue: lastKnownState.secondValue,\n startValue: lastKnownState.value,\n startSecondValue: lastKnownState.secondValue,\n startTime: 0,\n duration: ANIMATION_DURATIONS.MEDIUM,\n animationFrame: null,\n };\n\n component.animationState = animationState;\n\n // Initialize canvas with retry mechanism\n initializeCanvasWithRetry(\n () => {\n try {\n canvasContext = setupCanvas(canvas, {\n ...config,\n size: currentSize,\n });\n component.ctx = canvasContext.ctx;\n return true;\n } catch (error) {\n console.warn(\"Slider canvas initialization failed:\", error);\n return false;\n }\n },\n () => {\n // Set initial handle sizes after successful initialization\n updateHandleSizes(component, currentSize);\n }\n );\n\n // Add color class to component element if not primary\n if (config.color && config.color !== \"primary\") {\n component.element.classList.add(\n `${component.getClass(\"slider\")}--${config.color}`\n );\n }\n\n // Store canvas reference\n component.canvas = canvas;\n\n // Helper to draw with current animated state\n const drawAnimatedState = () => {\n if (!canvasContext) return;\n draw(\n canvasContext,\n {\n ...config,\n size: currentSize,\n },\n {\n ...lastKnownState,\n value: animationState.animatedValue,\n secondValue: animationState.animatedSecondValue,\n },\n component\n );\n };\n\n // Animation loop function\n const animate = (currentTime?: number): void => {\n if (!canvasContext) return;\n\n // If no currentTime provided, use performance.now()\n const now = currentTime || performance.now();\n const elapsed = now - animationState.startTime;\n const progress = Math.min(elapsed / animationState.duration, 1);\n const easedProgress = easeOutCubic(progress);\n\n // Update animated values\n const startValue = animationState.startValue;\n const targetValue = animationState.targetValue;\n animationState.animatedValue =\n startValue + (targetValue - startValue) * easedProgress;\n\n if (\n animationState.targetSecondValue !== null &&\n animationState.animatedSecondValue !== null\n ) {\n const startSecondValue = animationState.startSecondValue;\n const targetSecondValue = animationState.targetSecondValue;\n animationState.animatedSecondValue =\n startSecondValue +\n (targetSecondValue - startSecondValue) * easedProgress;\n }\n\n // Draw with animated values\n drawAnimatedState();\n\n // Continue animation if not complete\n if (progress < 1) {\n animationState.animationFrame = requestAnimationFrame((time) =>\n animate(time)\n );\n } else {\n animationState.animationFrame = null;\n }\n };\n\n // Drawing function\n const drawCanvas = (controllerState?: any): void => {\n if (!canvasContext) {\n console.warn(\"Canvas context not ready\");\n return;\n }\n\n // Update dimensions in case size changed\n updateCanvasDimensions(canvas, canvasContext, {\n ...config,\n size: currentSize,\n });\n\n // Get current state - prefer passed state, then slider API, then last known state\n let state;\n let isDragging = false;\n\n if (controllerState) {\n // Use state passed from controller and update last known state\n state = {\n value: controllerState.value,\n secondValue: controllerState.secondValue,\n min: controllerState.min,\n max: controllerState.max,\n step: controllerState.step,\n pressed: controllerState.pressed || false,\n activeHandle: controllerState.activeHandle || null,\n };\n isDragging = controllerState.dragging || false;\n lastKnownState = { ...state };\n } else if (component.slider) {\n // Fallback to slider API and update last known state\n state = {\n value: component.slider.getValue(),\n secondValue: component.slider.getSecondValue(),\n min: component.slider.getMin(),\n max: component.slider.getMax(),\n step: component.slider.getStep(),\n };\n lastKnownState = { ...state };\n } else {\n // Use last known state as fallback\n state = { ...lastKnownState };\n }\n\n // Check if we need to animate (skip animation when dragging)\n const valueChanged = state.value !== animationState.targetValue;\n const secondValueChanged =\n state.secondValue !== animationState.targetSecondValue;\n\n if ((valueChanged || secondValueChanged) && !isDragging) {\n // Capture start values before updating targets\n animationState.startValue = animationState.animatedValue;\n animationState.startSecondValue = animationState.animatedSecondValue;\n\n // Update target values\n animationState.targetValue = state.value;\n animationState.targetSecondValue = state.secondValue;\n\n // Cancel any existing animation\n if (animationState.animationFrame) {\n cancelAnimationFrame(animationState.animationFrame);\n }\n\n // Start new animation\n animationState.startTime = performance.now();\n\n // Draw first frame immediately to sync with handle movement\n animate();\n } else if (isDragging) {\n // When dragging, update values immediately without animation\n animationState.animatedValue = state.value;\n animationState.animatedSecondValue = state.secondValue;\n animationState.targetValue = state.value;\n animationState.targetSecondValue = state.secondValue;\n animationState.startValue = state.value;\n animationState.startSecondValue = state.secondValue;\n\n // Cancel any ongoing animation\n if (animationState.animationFrame) {\n cancelAnimationFrame(animationState.animationFrame);\n animationState.animationFrame = null;\n }\n\n // Draw immediately\n draw(\n canvasContext,\n {\n ...config,\n size: currentSize,\n },\n controllerState || state,\n component\n );\n } else {\n // No animation needed, draw current state\n draw(\n canvasContext,\n {\n ...config,\n size: currentSize,\n },\n controllerState || state,\n component\n );\n }\n };\n\n // Resize function\n const resize = (): void => {\n if (!canvasContext) return;\n\n try {\n const newContext = setupCanvas(canvas, {\n ...config,\n size: currentSize,\n });\n component.ctx = newContext.ctx;\n Object.assign(canvasContext, newContext);\n\n // Redraw with current animated values\n drawAnimatedState();\n } catch (error) {\n console.warn(\"Slider canvas resize failed:\", error);\n }\n };\n\n // Setup observers\n resizeCleanup = observeCanvasResize(component.element, canvas, resize);\n\n // Observe theme changes\n const onThemeChange = () => drawAnimatedState();\n\n themeCleanup = createCanvasThemeObserver(\n config.color || \"primary\",\n onThemeChange\n );\n\n // Initial draw\n requestAnimationFrame(() => {\n drawCanvas();\n });\n\n // Extend component with canvas methods\n component.drawCanvas = drawCanvas;\n component.resize = resize;\n\n // Add setSize method\n component.setSize = (size: SliderSize) => {\n currentSize = size;\n if (canvasContext) {\n updateCanvasDimensions(canvas, canvasContext, {\n ...config,\n size: currentSize,\n });\n // Redraw with current animated values\n drawAnimatedState();\n }\n\n // Update handle sizes\n updateHandleSizes(component, currentSize);\n };\n\n // Add getSize method\n component.getSize = () => currentSize;\n\n // Update color method\n const originalSetColor = component.appearance?.setColor;\n if (originalSetColor) {\n component.appearance.setColor = (color: SliderColor) => {\n originalSetColor(color);\n\n // Remove old color class if not primary\n if (config.color && config.color !== \"primary\") {\n component.element.classList.remove(\n `${component.getClass(\"slider\")}--${config.color}`\n );\n }\n\n // Add new color class if not primary\n if (color && color !== \"primary\") {\n component.element.classList.add(\n `${component.getClass(\"slider\")}--${color}`\n );\n }\n\n config.color = color;\n\n // Clean up old theme observer\n if (themeCleanup) {\n themeCleanup();\n themeCleanup = null;\n }\n\n // Set up new theme observer for the new color\n themeCleanup = createCanvasThemeObserver(color, onThemeChange);\n\n // Redraw with new color\n drawCanvas();\n };\n }\n\n // Clean up on destroy\n if (component.lifecycle) {\n const originalDestroy = component.lifecycle.destroy || (() => {});\n component.lifecycle.destroy = () => {\n if (resizeCleanup) resizeCleanup();\n if (themeCleanup) themeCleanup();\n if (animationState.animationFrame) {\n cancelAnimationFrame(animationState.animationFrame);\n }\n originalDestroy();\n };\n }\n\n return component as CanvasSliderComponent;\n };\n",
|
|
181
|
+
"import { createElement } from \"../../../core/dom/create\";\nimport { setStyles } from \"../../../core/dom/utils\";\nimport { SliderConfig } from \"../types\";\nimport { ElementComponent } from \"../../../core/compose/component\";\n\n/**\n * Creates the inner slider DOM structure using optimized createElement\n * This works alongside withElement to create slider-specific inner elements\n *\n * @param config Slider configuration\n * @returns Component enhancement function\n */\nexport const withDom =\n (config: SliderConfig) =>\n <T extends ElementComponent>(\n component: T\n ): T & {\n container: HTMLElement;\n handle: HTMLElement;\n valueBubble: HTMLElement;\n secondHandle?: HTMLElement;\n secondValueBubble?: HTMLElement;\n getContainer: () => HTMLElement;\n getHandle: () => HTMLElement;\n getValueBubble: () => HTMLElement;\n getSecondHandle?: () => HTMLElement | null;\n getSecondValueBubble?: () => HTMLElement | null;\n } => {\n // Get prefixed class names\n const getClass = (className: string) => component.getClass(className);\n\n // Set default values\n const min = config.min || 0;\n const max = config.max || 100;\n const value = config.value !== undefined ? config.value : min;\n const isDisabled = config.disabled === true;\n const formatter = config.valueFormatter || ((val) => val.toString());\n\n // Calculate initial position\n const valuePercent = ((value - min) / (max - min)) * 100;\n\n // Create the slider container inside the main element\n const container = createElement({\n tag: \"div\",\n className: getClass(\"slider-container\"),\n container: component.element,\n });\n\n // Apply styles using setStyles\n setStyles(container, {\n position: \"relative\", // For canvas absolute positioning\n });\n\n // Create the main handle (kept as DOM for accessibility)\n const handle = createElement({\n tag: \"div\",\n className: getClass(\"slider-handle\"),\n attributes: {\n role: \"slider\",\n \"aria-valuemin\": String(min),\n \"aria-valuemax\": String(max),\n \"aria-valuenow\": String(value),\n \"aria-orientation\": \"horizontal\",\n tabindex: isDisabled ? \"-1\" : \"0\",\n \"aria-disabled\": isDisabled ? \"true\" : \"false\",\n \"data-value\": String(value),\n \"data-handle-index\": \"0\",\n },\n container: container,\n });\n\n // Apply handle positioning\n setStyles(handle, {\n left: `${valuePercent}%`,\n });\n\n // Create the value bubble (kept as DOM for text rendering)\n const valueBubble = createElement({\n tag: \"div\",\n className: getClass(\"slider-value\"),\n attributes: {\n \"aria-hidden\": \"true\",\n \"data-handle-index\": \"0\",\n },\n text: formatter(value),\n container: container,\n });\n\n // Apply value bubble positioning\n setStyles(valueBubble, {\n left: `${valuePercent}%`,\n });\n\n // Create second handle and value bubble for range sliders\n let secondHandle: HTMLElement | undefined;\n let secondValueBubble: HTMLElement | undefined;\n\n if (config.range) {\n const secondValue =\n config.secondValue !== undefined ? config.secondValue : max;\n const secondValuePercent = ((secondValue - min) / (max - min)) * 100;\n\n // Create the second handle\n secondHandle = createElement({\n tag: \"div\",\n className: getClass(\"slider-handle\"),\n attributes: {\n role: \"slider\",\n \"aria-valuemin\": String(min),\n \"aria-valuemax\": String(max),\n \"aria-valuenow\": String(secondValue),\n \"aria-orientation\": \"horizontal\",\n tabindex: isDisabled ? \"-1\" : \"0\",\n \"aria-disabled\": isDisabled ? \"true\" : \"false\",\n \"data-value\": String(secondValue),\n \"data-handle-index\": \"1\",\n },\n container: container,\n });\n\n // Apply second handle positioning\n setStyles(secondHandle, {\n left: `${secondValuePercent}%`,\n });\n\n // Create the second value bubble\n secondValueBubble = createElement({\n tag: \"div\",\n className: getClass(\"slider-value\"),\n attributes: {\n \"aria-hidden\": \"true\",\n \"data-handle-index\": \"1\",\n },\n text: formatter(secondValue),\n container: container,\n });\n\n // Apply second value bubble positioning\n setStyles(secondValueBubble, {\n left: `${secondValuePercent}%`,\n });\n }\n\n // Return enhanced component with inner elements\n return {\n ...component,\n container,\n handle,\n valueBubble,\n secondHandle,\n secondValueBubble,\n\n // Add DOM query methods for compatibility\n getContainer: () => container,\n getHandle: () => handle,\n getValueBubble: () => valueBubble,\n getSecondHandle: () => secondHandle || null,\n getSecondValueBubble: () => secondValueBubble || null,\n };\n };\n",
|
|
182
|
+
"// src/core/dom/utils.ts\n\n// Import optimized normalizeClasses from classes module\nexport { normalizeClasses } from \"./classes\";\n\n/**\n * Creates a DOM element with attributes\n *\n * @param tag - Element tag name\n * @param attributes - Element attributes\n * @returns Created element\n */\nexport const createElement = <T extends HTMLElement>(\n tag: string,\n attributes: Record<string, any> = {}\n): T => {\n const element = document.createElement(tag) as T;\n\n Object.entries(attributes).forEach(([key, value]) => {\n if (key === \"className\") {\n element.className = value;\n } else if (key === \"style\" && typeof value === \"object\") {\n Object.assign(element.style, value);\n } else if (key === \"data\" && typeof value === \"object\") {\n Object.entries(value).forEach(([dataKey, dataValue]) => {\n element.dataset[dataKey] = String(dataValue);\n });\n } else if (key === \"children\" && Array.isArray(value)) {\n value.forEach((child) => {\n if (child instanceof Node) {\n element.appendChild(child);\n } else if (child != null) {\n element.appendChild(document.createTextNode(String(child)));\n }\n });\n } else if (key.startsWith(\"on\") && typeof value === \"function\") {\n const eventName = key.slice(2).toLowerCase();\n element.addEventListener(eventName, value);\n } else if (value !== null && value !== undefined) {\n element.setAttribute(key, String(value));\n }\n });\n\n return element;\n};\n\n/**\n * Sets inline styles on an element\n *\n * @param element - Target element\n * @param styles - Styles to set\n * @returns Modified element\n */\nexport const setStyles = <T extends HTMLElement>(\n element: T,\n styles: Partial<CSSStyleDeclaration>\n): T => {\n Object.assign(element.style, styles);\n return element;\n};\n\n/**\n * Checks if an element matches a selector\n *\n * @param element - Element to check\n * @param selector - CSS selector\n * @returns Whether element matches selector\n */\nexport const matches = (element: Element, selector: string): boolean => {\n return element.matches(selector);\n};\n\n/**\n * Finds the closest ancestor matching a selector\n *\n * @param element - Starting element\n * @param selector - CSS selector\n * @returns Matching ancestor or null\n */\nexport const closest = <T extends HTMLElement>(\n element: Element,\n selector: string\n): T | null => {\n return element.closest(selector) as T | null;\n};\n",
|
|
221
183
|
"// src/components/slider/api.ts\nimport { SliderComponent, SliderEvent } from \"./types\";\nimport { SLIDER_COLORS, SLIDER_EVENTS } from \"./types\";\nimport { SliderSize } from \"./constants\";\n\n/**\n * API options interface - structured by feature area\n */\ninterface ApiOptions {\n slider: {\n setValue: (value: number, triggerEvent?: boolean) => any;\n getValue: () => number;\n setSecondValue: (value: number, triggerEvent?: boolean) => any;\n getSecondValue: () => number | null;\n setMin: (min: number) => any;\n getMin: () => number;\n setMax: (max: number) => any;\n getMax: () => number;\n setStep: (step: number) => any;\n getStep: () => number;\n regenerateTicks: () => any;\n };\n disabled: {\n enable: () => void;\n disable: () => void;\n isDisabled: () => boolean;\n };\n appearance: {\n setColor: (color: string) => void;\n getColor: () => string;\n setSize: (size: SliderSize) => void;\n getSize: () => string;\n showTicks: (show: boolean) => void;\n showCurrentValue: (show: boolean) => void;\n };\n text: {\n setText: (text: string) => void;\n getText: () => string;\n };\n icon: {\n setIcon: (html: string) => void;\n getIcon: () => string;\n };\n events: {\n on: (event: string, handler: Function) => void;\n off: (event: string, handler: Function) => void;\n };\n lifecycle: {\n destroy: () => void;\n };\n}\n\n/**\n * Enhances a slider component with a streamlined API\n * @param {ApiOptions} options - API configuration options\n * @returns {Function} Higher-order function that adds API methods to component\n * @internal This is an internal utility for the Slider component\n */\nexport const withAPI =\n (options: ApiOptions) =>\n (component: { element: HTMLElement }): SliderComponent => {\n return {\n ...(component as any),\n\n // Element access\n element: component.element,\n\n // Value management\n setValue(value: number, triggerEvent: boolean = true) {\n options.slider.setValue(value, triggerEvent);\n return this;\n },\n\n getValue() {\n return options.slider.getValue();\n },\n\n setSecondValue(value: number, triggerEvent: boolean = true) {\n options.slider.setSecondValue(value, triggerEvent);\n return this;\n },\n\n getSecondValue() {\n return options.slider.getSecondValue();\n },\n\n // Range management\n setMin(min: number) {\n options.slider.setMin(min);\n return this;\n },\n\n getMin() {\n return options.slider.getMin();\n },\n\n setMax(max: number) {\n options.slider.setMax(max);\n return this;\n },\n\n getMax() {\n return options.slider.getMax();\n },\n\n setStep(step: number) {\n options.slider.setStep(step);\n return this;\n },\n\n getStep() {\n return options.slider.getStep();\n },\n\n // State management\n enable() {\n options.disabled.enable();\n return this;\n },\n\n disable() {\n options.disabled.disable();\n return this;\n },\n\n isDisabled() {\n return options.disabled.isDisabled();\n },\n\n // Appearance management\n setColor(\n color:\n | keyof typeof SLIDER_COLORS\n | (typeof SLIDER_COLORS)[keyof typeof SLIDER_COLORS]\n ) {\n options.appearance.setColor(color);\n return this;\n },\n\n getColor() {\n return options.appearance.getColor();\n },\n\n setSize(size: SliderSize) {\n options.appearance.setSize(size);\n return this;\n },\n\n getSize() {\n return options.appearance.getSize();\n },\n\n showTicks(show: boolean) {\n options.appearance.showTicks(show);\n return this;\n },\n\n showCurrentValue(show: boolean) {\n options.appearance.showCurrentValue(show);\n return this;\n },\n\n // Label and icon management\n setLabel(text: string) {\n if (options.text?.setText) options.text.setText(text);\n return this;\n },\n\n getLabel() {\n return options.text?.getText ? options.text.getText() : \"\";\n },\n\n setIcon(iconHtml: string) {\n if (options.icon?.setIcon) options.icon.setIcon(iconHtml);\n return this;\n },\n\n getIcon() {\n return options.icon?.getIcon ? options.icon.getIcon() : \"\";\n },\n\n // Event management\n on(\n event:\n | keyof typeof SLIDER_EVENTS\n | (typeof SLIDER_EVENTS)[keyof typeof SLIDER_EVENTS],\n handler: (event: SliderEvent) => void\n ) {\n if (options.events?.on) options.events.on(event, handler);\n return this;\n },\n\n off(\n event:\n | keyof typeof SLIDER_EVENTS\n | (typeof SLIDER_EVENTS)[keyof typeof SLIDER_EVENTS],\n handler: (event: SliderEvent) => void\n ) {\n if (options.events?.off) options.events.off(event, handler);\n return this;\n },\n\n // Lifecycle management\n destroy() {\n if (options.lifecycle?.destroy) options.lifecycle.destroy();\n },\n };\n };\n",
|
|
222
|
-
"// src/components/slider/config.ts\nimport {\n createComponentConfig,\n createElementConfig,\n} from \"../../core/config/component\";\nimport { SliderConfig } from \"./types\";\nimport { SLIDER_DEFAULTS } from \"./constants\";\
|
|
223
|
-
"// src/components/slider/structure.ts\nimport { SliderConfig } from './types';\n\n/**\n * Creates the base slider structure definition\n * When using canvas mode, only handle and value bubble are DOM elements\n * \n * @param component Component for class name generation\n * @param config Slider configuration\n * @returns Structure schema object\n */\nexport function createSliderSchema(component, config: SliderConfig) {\n // Get prefixed class names\n const getClass = (className) => component.getClass(className);\n\n // Set default values\n const min = config.min || 0;\n const max = config.max || 100;\n const value = config.value !== undefined ? config.value : min;\n const isDisabled = config.disabled === true;\n const formatter = config.valueFormatter || (val => val.toString());\n \n // Calculate initial position\n const valuePercent = ((value - min) / (max - min)) * 100;\n \n // Return base structure definition formatted for createLayout\n return {\n element: {\n options: {\n className: [getClass('slider'), config.class].filter(Boolean),\n attributes: {\n tabindex: '-1',\n role: 'none',\n 'aria-disabled': isDisabled ? 'true' : 'false'\n }\n },\n children: {\n // Container with all slider elements\n container: {\n options: {\n className: getClass('slider-container'),\n style: {\n position: 'relative' // For canvas absolute positioning\n }\n },\n children: {\n // Main handle (kept as DOM for accessibility)\n handle: {\n options: {\n className: getClass('slider-handle'),\n attributes: {\n role: 'slider',\n 'aria-valuemin': String(min),\n 'aria-valuemax': String(max),\n 'aria-valuenow': String(value),\n 'aria-orientation': 'horizontal',\n tabindex: isDisabled ? '-1' : '0',\n 'aria-disabled': isDisabled ? 'true' : 'false',\n 'data-value': String(value),\n 'data-handle-index': '0'\n },\n style: {\n left: `${valuePercent}%`\n }\n }\n }, \n \n // Main value bubble (kept as DOM for text rendering)\n valueBubble: {\n options: {\n className: getClass('slider-value'),\n attributes: {\n 'aria-hidden': 'true',\n 'data-handle-index': '0'\n },\n text: formatter(value),\n style: {\n left: `${valuePercent}%`\n }\n }\n }\n }\n }\n }\n }\n };\n}",
|
|
184
|
+
"// src/components/slider/config.ts\nimport {\n createComponentConfig,\n createElementConfig,\n} from \"../../core/config/component\";\nimport { SliderConfig } from \"./types\";\nimport { SLIDER_DEFAULTS } from \"./constants\";\n\n/**\n * Default configuration for the Slider component\n */\nexport const defaultConfig: SliderConfig = {\n min: SLIDER_DEFAULTS.MIN,\n max: SLIDER_DEFAULTS.MAX,\n value: SLIDER_DEFAULTS.VALUE,\n step: SLIDER_DEFAULTS.STEP,\n disabled: SLIDER_DEFAULTS.DISABLED,\n color: SLIDER_DEFAULTS.COLOR,\n size: SLIDER_DEFAULTS.SIZE,\n ticks: SLIDER_DEFAULTS.TICKS,\n showValue: SLIDER_DEFAULTS.SHOW_VALUE,\n snapToSteps: SLIDER_DEFAULTS.SNAP_TO_STEPS,\n range: SLIDER_DEFAULTS.RANGE,\n centered: SLIDER_DEFAULTS.CENTERED,\n iconPosition: SLIDER_DEFAULTS.ICON_POSITION,\n labelPosition: SLIDER_DEFAULTS.LABEL_POSITION,\n valueFormatter: (value) => value.toString(),\n};\n\n/**\n * Creates the base configuration for Slider component\n * @param {SliderConfig} config - User provided configuration\n * @returns {SliderConfig} Complete configuration with defaults applied\n */\nexport const createBaseConfig = (config: SliderConfig = {}): SliderConfig => {\n // Create the base config with defaults applied\n const baseConfig = createComponentConfig(\n defaultConfig,\n config,\n \"slider\"\n ) as SliderConfig;\n\n // Schema is no longer needed as we use direct DOM creation\n\n return baseConfig;\n};\n\n/**\n * Generates element configuration for the Slider component\n * @param {SliderConfig} config - Slider configuration\n * @returns {Object} Element configuration object for withElement\n */\nexport const getElementConfig = (config: SliderConfig) => {\n const classes = [\n \"slider\",\n config.class,\n config.disabled ? \"slider--disabled\" : \"\",\n config.size && config.size !== \"XS\"\n ? `slider--${\n typeof config.size === \"string\"\n ? config.size.toLowerCase()\n : config.size\n }`\n : \"\",\n config.color && config.color !== \"primary\" ? `slider--${config.color}` : \"\",\n config.range ? \"slider--range\" : \"\",\n config.centered ? \"slider--centered\" : \"\",\n config.icon ? \"slider--icon\" : \"\",\n ]\n .filter(Boolean)\n .join(\" \");\n\n // Add aria attributes for the slider\n const attributes: Record<string, string> = {\n tabindex: \"-1\",\n role: \"none\",\n \"aria-disabled\": config.disabled ? \"true\" : \"false\",\n \"aria-valuemin\": String(config.min || 0),\n \"aria-valuemax\": String(config.max || 100),\n \"aria-valuenow\": String(config.value || config.min || 0),\n };\n\n return createElementConfig(config, {\n tag: \"div\",\n attributes,\n className: classes,\n forwardEvents: {\n click: true,\n keydown: true,\n touchstart: true,\n touchmove: true,\n touchend: true,\n mousedown: true,\n mousemove: true,\n mouseup: true,\n },\n interactive: true,\n });\n};\n\n/**\n * Creates API configuration for the Slider component\n * @param {Object} comp - Component with slider features\n * @returns {Object} API configuration object\n */\nexport const getApiConfig = (comp) => ({\n slider: {\n setValue: (v, t) => comp.slider?.setValue(v, t),\n getValue: () => comp.slider?.getValue() ?? 0,\n setSecondValue: (v, t) => comp.slider?.setSecondValue(v, t),\n getSecondValue: () => comp.slider?.getSecondValue() ?? null,\n setMin: (m) => comp.slider?.setMin(m),\n getMin: () => comp.slider?.getMin() ?? 0,\n setMax: (m) => comp.slider?.setMax(m),\n getMax: () => comp.slider?.getMax() ?? 100,\n setStep: (s) => comp.slider?.setStep(s),\n getStep: () => comp.slider?.getStep() ?? 1,\n regenerateTicks: () => comp.slider?.regenerateTicks?.(),\n },\n disabled: {\n enable: () => comp.disabled?.enable?.(),\n disable: () => comp.disabled?.disable?.(),\n isDisabled: () => comp.disabled?.isDisabled?.() ?? false,\n },\n appearance: {\n setColor: (c) => comp.appearance?.setColor?.(c),\n getColor: () => comp.appearance?.getColor?.() ?? \"primary\",\n setSize: (s) => comp.setSize?.(s),\n getSize: () => comp.getSize?.() ?? \"XS\",\n showTicks: (s) => comp.appearance?.showTicks?.(s),\n showCurrentValue: (s) => comp.appearance?.showCurrentValue?.(s),\n },\n text: {\n setText: (t) => comp.label?.setText?.(t),\n getText: () => comp.label?.getText?.() ?? \"\",\n },\n icon: {\n setIcon: (h) => comp.icon?.setIcon?.(h),\n getIcon: () => comp.icon?.getIcon?.() ?? \"\",\n },\n events: {\n on: (e, h) => comp.on?.(e, h),\n off: (e, h) => comp.off?.(e, h),\n },\n lifecycle: {\n destroy: () => comp.lifecycle?.destroy?.(),\n },\n});\n",
|
|
224
185
|
"// src/components/snackbar/snackbar.ts\nimport { pipe } from '../../core/compose';\nimport { createBase, withElement } from '../../core/compose/component';\nimport { withActionButton, withDismissTimer } from './features';\nimport { withPosition } from './position';\nimport {\n withEvents,\n withText,\n withVariant,\n withLifecycle\n} from '../../core/compose/features';\nimport { withAPI } from './api';\nimport { createSnackbarQueue } from './queue';\nimport { SnackbarConfig, SnackbarComponent, SnackbarQueue } from './types';\nimport {\n createBaseConfig,\n getElementConfig,\n getTextConfig,\n getApiConfig\n} from './config';\n\n// Create a single queue instance to be shared across all snackbars\nconst queue: SnackbarQueue = createSnackbarQueue();\n\n/**\n * Creates a new Snackbar component\n * @param {SnackbarConfig} config - Snackbar configuration\n * @returns {SnackbarComponent} Snackbar component instance\n */\nconst createSnackbar = (config: SnackbarConfig): SnackbarComponent => {\n if (!config.message) {\n throw new Error('Snackbar message is required');\n }\n\n const baseConfig = createBaseConfig(config);\n\n try {\n const snackbar = pipe(\n createBase,\n withEvents(),\n withElement(getElementConfig(baseConfig)),\n withVariant(baseConfig),\n withPosition(baseConfig),\n withText(getTextConfig(baseConfig)),\n withActionButton(baseConfig),\n withLifecycle(),\n // First apply timer\n withDismissTimer(baseConfig),\n // Then apply API which needs timer\n comp => withAPI(getApiConfig(comp, queue))(comp)\n )(baseConfig);\n\n return snackbar as SnackbarComponent;\n } catch (error) {\n console.error('Snackbar creation error:', error instanceof Error ? error.message : String(error));\n throw new Error(`Failed to create snackbar: ${error instanceof Error ? error.message : String(error)}`);\n }\n};\n\nexport default createSnackbar;",
|
|
225
186
|
"// src/components/snackbar/features.ts\nimport { BaseComponent, SnackbarConfig, SnackbarTimer } from './types';\n\n/**\n * Adds action button to snackbar\n * @param {SnackbarConfig} config - Component configuration\n * @returns {Function} Higher-order function that adds action button\n */\nexport const withActionButton = (config: SnackbarConfig) => \n (component: BaseComponent): BaseComponent => {\n if (!config.action) return component;\n\n const button = document.createElement('button');\n button.className = `${config.prefix}-snackbar-action`;\n button.textContent = config.action;\n\n component.element.appendChild(button);\n\n return {\n ...component,\n actionButton: button\n };\n };\n\n/**\n * Adds auto-dismiss timer functionality\n * @param {SnackbarConfig} config - Component configuration\n * @returns {Function} Higher-order function that adds timer features\n */\nexport const withDismissTimer = (config: SnackbarConfig) => \n (component: BaseComponent): BaseComponent => {\n let timeoutId: number | null = null;\n\n const startTimer = (): void => {\n // Clear any existing timer\n if (timeoutId) {\n clearTimeout(timeoutId);\n timeoutId = null;\n }\n\n // Only start timer if duration is positive and numeric\n if (typeof config.duration === 'number' && config.duration > 0) {\n timeoutId = window.setTimeout(() => {\n if (component.element && component.emit) {\n component.emit('dismiss');\n }\n }, config.duration);\n }\n };\n\n const stopTimer = (): void => {\n if (timeoutId) {\n clearTimeout(timeoutId);\n timeoutId = null;\n }\n };\n\n // Clean up on destroy\n const originalDestroy = component.lifecycle?.destroy;\n if (component.lifecycle) {\n component.lifecycle.destroy = () => {\n stopTimer();\n if (originalDestroy) {\n originalDestroy.call(component.lifecycle);\n }\n };\n }\n\n return {\n ...component,\n timer: {\n start: startTimer,\n stop: stopTimer\n } as SnackbarTimer\n };\n };",
|
|
226
187
|
"// src/components/snackbar/constants.ts\n\n/**\n * Snackbar visual variants\n * @category Components\n */\nexport const SNACKBAR_VARIANTS = {\n /** Basic snackbar with just text */\n BASIC: 'basic',\n /** Snackbar with an action button */\n ACTION: 'action'\n} as const;\n\n/**\n * Snackbar display positions\n * @category Components\n */\nexport const SNACKBAR_POSITIONS = {\n /** Centered position (default) */\n CENTER: 'center',\n /** Start-aligned position */\n START: 'start',\n /** End-aligned position */\n END: 'end'\n} as const;\n\n/**\n * Snackbar visibility states\n * @category Components\n */\nexport const SNACKBAR_STATES = {\n /** Snackbar is visible */\n VISIBLE: 'visible',\n /** Snackbar is hidden */\n HIDDEN: 'hidden'\n} as const;\n\n/**\n * Snackbar event types\n * @category Components\n */\nexport const SNACKBAR_EVENTS = {\n /** Fired when snackbar opens */\n OPEN: 'open',\n /** Fired when snackbar closes */\n CLOSE: 'close',\n /** Fired when action button is clicked */\n ACTION: 'action',\n /** Fired when auto-dismiss timer completes */\n DISMISS: 'dismiss'\n} as const;\n\n/**\n * Default configuration values for snackbar\n * @category Components\n */\nexport const SNACKBAR_DEFAULTS = {\n /** Default visual variant */\n VARIANT: SNACKBAR_VARIANTS.BASIC,\n /** Default display position */\n POSITION: SNACKBAR_POSITIONS.CENTER,\n /** Default display duration in milliseconds (4 seconds) */\n DURATION: 4000,\n /** Default z-index for snackbars */\n Z_INDEX: 1000,\n /** Default animation duration in milliseconds */\n ANIMATION_DURATION: 300\n} as const;\n\n/**\n * CSS class names used by the snackbar component\n * @category Components\n */\nexport const SNACKBAR_CLASSES = {\n /** Root element class */\n ROOT: 'snackbar',\n /** Basic variant class */\n BASIC: 'snackbar--basic',\n /** Action variant class */\n ACTION: 'snackbar--action',\n /** Center position class */\n CENTER: 'snackbar--center',\n /** Start position class */\n START: 'snackbar--start',\n /** End position class */\n END: 'snackbar--end',\n /** Visible state class */\n VISIBLE: 'snackbar--visible',\n /** Hidden state class */\n HIDDEN: 'snackbar--hidden',\n /** Message text class */\n MESSAGE: 'snackbar__message',\n /** Action button class */\n ACTION_BUTTON: 'snackbar__action'\n} as const;",
|
|
@@ -245,15 +206,16 @@
|
|
|
245
206
|
"// src/components/tabs/scroll-indicators.ts\nimport { TabsComponent } from './types';\n\n/**\n * Configuration for scroll indicators\n */\nexport interface ScrollIndicatorConfig {\n /** Whether to show scroll indicators */\n enabled?: boolean;\n /** Whether to add scroll buttons */\n showButtons?: boolean;\n /** Scroll indicator appearance */\n appearance?: 'fade' | 'shadow';\n}\n\n/**\n * Adds scroll indicators to a tabs component\n * @param tabs - Tabs component to enhance\n * @param config - Scroll indicator configuration\n */\nexport const addScrollIndicators = (\n tabs: TabsComponent,\n config: ScrollIndicatorConfig = {}\n): void => {\n const { \n enabled = true, \n showButtons = false, \n appearance = 'fade' \n } = config;\n \n if (!enabled) return;\n \n // Find scroll container\n const scrollContainer = tabs.element.querySelector(`.${tabs.getClass('tabs')}-scroll`);\n if (!scrollContainer) return;\n \n // Add indicator elements\n const leftIndicator = document.createElement('div');\n leftIndicator.className = `${tabs.getClass('tabs')}-scroll-indicator ${tabs.getClass('tabs')}-scroll-indicator--left`;\n leftIndicator.classList.add(`${tabs.getClass('tabs')}-scroll-indicator--${appearance}`);\n \n const rightIndicator = document.createElement('div');\n rightIndicator.className = `${tabs.getClass('tabs')}-scroll-indicator ${tabs.getClass('tabs')}-scroll-indicator--right`;\n rightIndicator.classList.add(`${tabs.getClass('tabs')}-scroll-indicator--${appearance}`);\n \n tabs.element.appendChild(leftIndicator);\n tabs.element.appendChild(rightIndicator);\n \n // Add buttons if requested\n if (showButtons) {\n const leftButton = document.createElement('button');\n leftButton.className = `${tabs.getClass('tabs')}-scroll-button ${tabs.getClass('tabs')}-scroll-button--left`;\n leftButton.setAttribute('aria-label', 'Scroll tabs left');\n leftButton.innerHTML = '<svg viewBox=\"0 0 24 24\"><path d=\"M15.41 7.41L14 6l-6 6 6 6 1.41-1.41L10.83 12z\"/></svg>';\n \n const rightButton = document.createElement('button');\n rightButton.className = `${tabs.getClass('tabs')}-scroll-button ${tabs.getClass('tabs')}-scroll-button--right`;\n rightButton.setAttribute('aria-label', 'Scroll tabs right');\n rightButton.innerHTML = '<svg viewBox=\"0 0 24 24\"><path d=\"M10 6L8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z\"/></svg>';\n \n tabs.element.appendChild(leftButton);\n tabs.element.appendChild(rightButton);\n \n // Add button click handlers\n leftButton.addEventListener('click', () => {\n scrollContainer.scrollBy({\n left: -100,\n behavior: 'smooth'\n });\n });\n \n rightButton.addEventListener('click', () => {\n scrollContainer.scrollBy({\n left: 100,\n behavior: 'smooth'\n });\n });\n }\n \n /**\n * Updates indicator visibility based on scroll position\n */\n const updateIndicators = (): void => {\n const { scrollLeft, scrollWidth, clientWidth } = scrollContainer as HTMLElement;\n \n // Show left indicator only when scrolled right\n leftIndicator.classList.toggle('visible', scrollLeft > 0);\n \n // Show right indicator only when more content is available to scroll\n rightIndicator.classList.toggle('visible', scrollLeft + clientWidth < scrollWidth - 1);\n \n // Update button states if present\n if (showButtons) {\n const leftButton = tabs.element.querySelector(`.${tabs.getClass('tabs')}-scroll-button--left`) as HTMLButtonElement;\n const rightButton = tabs.element.querySelector(`.${tabs.getClass('tabs')}-scroll-button--right`) as HTMLButtonElement;\n \n if (leftButton) {\n leftButton.disabled = scrollLeft <= 0;\n }\n \n if (rightButton) {\n rightButton.disabled = scrollLeft + clientWidth >= scrollWidth - 1;\n }\n }\n };\n \n // Initial update\n updateIndicators();\n \n // Add scroll listener\n scrollContainer.addEventListener('scroll', updateIndicators);\n \n // Add resize observer to update on container size changes\n const resizeObserver = new ResizeObserver(updateIndicators);\n resizeObserver.observe(scrollContainer as Element);\n \n // Add cleanup to component destroy method\n const originalDestroy = tabs.destroy;\n tabs.destroy = function() {\n if (resizeObserver) {\n resizeObserver.disconnect();\n }\n \n scrollContainer.removeEventListener('scroll', updateIndicators);\n \n if (leftIndicator.parentNode) {\n leftIndicator.parentNode.removeChild(leftIndicator);\n }\n \n if (rightIndicator.parentNode) {\n rightIndicator.parentNode.removeChild(rightIndicator);\n }\n \n if (showButtons) {\n const leftButton = tabs.element.querySelector(`.${tabs.getClass('tabs')}-scroll-button--left`);\n const rightButton = tabs.element.querySelector(`.${tabs.getClass('tabs')}-scroll-button--right`);\n \n if (leftButton && leftButton.parentNode) {\n leftButton.parentNode.removeChild(leftButton);\n }\n \n if (rightButton && rightButton.parentNode) {\n rightButton.parentNode.removeChild(rightButton);\n }\n }\n \n originalDestroy.call(this);\n };\n};",
|
|
246
207
|
"// src/components/tabs/responsive.ts\nimport { TabsComponent, TabComponent } from './types';\n\n/**\n * Breakpoints for responsive behavior\n */\nexport const RESPONSIVE_BREAKPOINTS = {\n /** Small screens (mobile) */\n SMALL: 600,\n /** Medium screens (tablet) */\n MEDIUM: 904,\n /** Large screens (desktop) */\n LARGE: 1240\n};\n\n/**\n * Configuration for responsive behavior\n */\nexport interface ResponsiveConfig {\n /** Whether to enable responsive behavior */\n responsive?: boolean;\n /** Options for small screens */\n smallScreen?: {\n /** Layout to use on small screens */\n layout?: 'icon-only' | 'text-only' | 'icon-and-text';\n /** Maximum tabs to show before scrolling */\n maxVisibleTabs?: number;\n };\n /** Custom breakpoint values */\n breakpoints?: {\n small?: number;\n medium?: number;\n large?: number;\n };\n}\n\n/**\n * Enhances tabs with responsive behavior\n * @param tabs - The tabs component to enhance\n * @param config - Responsive configuration\n */\nexport const setupResponsiveBehavior = (\n tabs: TabsComponent, \n config: ResponsiveConfig = {}\n): void => {\n if (config.responsive === false) return;\n \n // Merge custom breakpoints with defaults\n const breakpoints = {\n small: config.breakpoints?.small || RESPONSIVE_BREAKPOINTS.SMALL,\n medium: config.breakpoints?.medium || RESPONSIVE_BREAKPOINTS.MEDIUM,\n large: config.breakpoints?.large || RESPONSIVE_BREAKPOINTS.LARGE\n };\n \n // Default small screen configuration\n const smallScreen = {\n layout: config.smallScreen?.layout || 'icon-only',\n maxVisibleTabs: config.smallScreen?.maxVisibleTabs || 4\n };\n \n // Store original tab layouts to restore later\n const originalLayouts = new Map<TabComponent, string>();\n \n // Get all tabs\n const allTabs = tabs.getTabs();\n \n // Save original layouts\n allTabs.forEach(tab => {\n // Determine current layout\n let layout = 'text-only';\n if (tab.getIcon() && tab.getText()) {\n layout = 'icon-and-text';\n } else if (tab.getIcon()) {\n layout = 'icon-only';\n }\n \n originalLayouts.set(tab, layout);\n });\n \n /**\n * Update tabs layout based on screen size\n */\n const updateLayout = (): void => {\n const width = window.innerWidth;\n \n if (width < breakpoints.small) {\n // Small screen behavior\n allTabs.forEach(tab => {\n // Skip if tab has no icon but we want icon-only\n if (smallScreen.layout === 'icon-only' && !tab.getIcon()) {\n return;\n }\n \n // Apply layout according to small screen config\n if (smallScreen.layout === 'icon-only' && tab.getIcon()) {\n // Keep text for accessibility but visually show only icon\n tab.element.classList.remove(`${tab.getClass('tab')}--icon-and-text`);\n tab.element.classList.remove(`${tab.getClass('tab')}--text-only`);\n tab.element.classList.add(`${tab.getClass('tab')}--icon-only`);\n } else if (smallScreen.layout === 'text-only') {\n tab.element.classList.remove(`${tab.getClass('tab')}--icon-and-text`);\n tab.element.classList.remove(`${tab.getClass('tab')}--icon-only`);\n tab.element.classList.add(`${tab.getClass('tab')}--text-only`);\n }\n });\n \n // Add responsive class\n tabs.element.classList.add(`${tabs.getClass('tabs')}--responsive-small`);\n } else {\n // Restore original layouts for medium and large screens\n allTabs.forEach(tab => {\n const originalLayout = originalLayouts.get(tab) || 'text-only';\n \n tab.element.classList.remove(`${tab.getClass('tab')}--icon-only`);\n tab.element.classList.remove(`${tab.getClass('tab')}--text-only`);\n tab.element.classList.remove(`${tab.getClass('tab')}--icon-and-text`);\n \n tab.element.classList.add(`${tab.getClass('tab')}--${originalLayout}`);\n });\n \n // Remove responsive class\n tabs.element.classList.remove(`${tabs.getClass('tabs')}--responsive-small`);\n }\n };\n \n // Initial layout update\n updateLayout();\n \n // Set up resize listener\n const resizeObserver = new ResizeObserver(updateLayout);\n resizeObserver.observe(document.body);\n \n // Store the observer on the component for cleanup\n (tabs as any)._resizeObserver = resizeObserver;\n \n // Enhance destroy method to clean up observer\n const originalDestroy = tabs.destroy;\n tabs.destroy = function() {\n if ((this as any)._resizeObserver) {\n (this as any)._resizeObserver.disconnect();\n }\n originalDestroy.call(this);\n };\n};",
|
|
247
208
|
"// src/components/tabs/index.ts\nimport createTabs from \"./tabs\";\nimport { addScrollIndicators } from \"./scroll-indicators\";\nimport { setupResponsiveBehavior } from \"./responsive\";\nimport { createTabsState } from \"./state\";\nimport { createTabIndicator } from \"./indicator\";\nimport { updateTabPanels, setupKeyboardNavigation } from \"./utils\";\n\n// Export constants\nexport {\n TAB_VARIANTS,\n TAB_STATES,\n TAB_INDICATOR_WIDTH_STRATEGIES,\n TAB_EVENTS,\n TABS_EVENTS,\n TABS_DEFAULTS,\n TABS_CLASSES,\n TAB_CLASSES,\n} from \"./constants\";\n\nexport {\n // Types\n TabsConfig,\n TabsComponent,\n TabComponent,\n TabConfig,\n TabChangeEventData,\n IndicatorConfig,\n} from \"./types\";\n\n// Export enhancers and utilities\nexport {\n addScrollIndicators,\n setupResponsiveBehavior,\n createTabsState,\n createTabIndicator,\n updateTabPanels,\n setupKeyboardNavigation,\n};\n\n// Export features\nexport {\n withTabsManagement,\n withScrollable,\n withDivider,\n withIndicator,\n TabsManagementConfig,\n TabsManagementComponent,\n ScrollableConfig,\n ScrollableComponent,\n DividerConfig,\n IndicatorFeatureConfig,\n IndicatorComponent,\n} from \"./features\";\n\n// Default export\nexport default createTabs;\n",
|
|
248
|
-
"// src/components/textfield/textfield.ts\nimport { pipe } from \"../../core/compose\";\nimport { createBase, withElement } from \"../../core/compose/component\";\nimport {\n withEvents,\n withDisabled,\n withLifecycle,\n withVariant,\n withTextInput,\n withTextLabel,\n} from \"../../core/compose/features\";\nimport { withAPI } from \"./api\";\nimport {\n withLeadingIcon,\n withTrailingIcon,\n withSupportingText,\n withPrefixText,\n withSuffixText,\n withPlacement,\n withDensity,\n} from \"./features\";\nimport { TextfieldConfig, TextfieldComponent } from \"./types\";\nimport { createBaseConfig, getElementConfig, getApiConfig } from \"./config\";\n\n/**\n * Creates a new Textfield component\n *\n * Textfields allow users to enter text into a UI. They typically appear in forms and dialogs.\n * This implementation follows Material Design 3 guidelines for accessible, customizable textfields.\n *\n * @param {TextfieldConfig} config - Textfield configuration options\n * @returns {TextfieldComponent} A fully configured textfield component instance\n * @throws {Error} Throws an error if textfield creation fails\n *\n * @example\n * // Create a basic text field\n * const textfield = createTextfield({\n * label: 'Username',\n * name: 'username'\n * });\n *\n * document.querySelector('.form').appendChild(textfield.element);\n *\n * @example\n * // Create a text field with prefix and suffix\n * const currencyField = createTextfield({\n * label: 'Amount',\n * type: 'number',\n * prefixText: '$',\n * suffixText: 'USD'\n * });\n *\n * // Add event listener\n * currencyField.on('input', (e) => {\n * console.log('Amount entered:', e.target.value);\n * });\n */\nconst createTextfield = (config: TextfieldConfig = {}): TextfieldComponent => {\n const baseConfig = createBaseConfig(config);\n\n try {\n // Build textfield through functional composition\n // Each function in the pipe adds specific capabilities\n const textfield = pipe(\n createBase, // Base component structure\n withEvents(), // Event handling system\n withElement(getElementConfig(baseConfig)), // Create DOM element\n withVariant(baseConfig), // Apply variant styling (filled/outlined)\n withDensity(baseConfig), // Apply density level\n withTextInput(baseConfig), // Add input element\n withTextLabel(baseConfig), // Add text label\n withLeadingIcon(baseConfig), // Add leading icon (if specified)\n withTrailingIcon(baseConfig), // Add trailing icon (if specified)\n withPrefixText(baseConfig), // Add prefix text (if specified)\n withSuffixText(baseConfig), // Add suffix text (if specified)\n withSupportingText(baseConfig), // Add supporting/helper text (if specified)\n withDisabled(baseConfig), // Add disabled state management\n withLifecycle(), // Add lifecycle management\n withPlacement(), // Add dynamic positioning for elements\n (comp) => withAPI(getApiConfig(comp))(comp) // Add public API\n )(baseConfig);\n\n return textfield as TextfieldComponent;\n } catch (error) {\n console.error(\n \"Textfield creation error:\",\n error instanceof Error ? error.message : String(error)\n );\n throw new Error(\n `Failed to create textfield: ${\n error instanceof Error ? error.message : String(error)\n }`\n );\n }\n};\n\nexport default createTextfield;\n",
|
|
249
|
-
"// src/components/textfield/api.ts\nimport {\n BaseComponent,\n TextfieldComponent,\n ApiOptions,\n TextfieldVariant,\n} from \"./types\";\n\n/**\n * Component interface with density feature\n */\ntype ComponentWithDensity = BaseComponent & {\n density?: {\n current: string;\n set: (density: string) => void;\n };\n updateElementPositions?: () => void;\n};\n\n/**\n * Enhances textfield component with API methods\n * @param {ApiOptions} options - API configuration\n * @returns {Function} Higher-order function that adds API methods to component\n */\nexport const withAPI =\n ({ disabled, lifecycle }: ApiOptions) =>\n (component: ComponentWithDensity): TextfieldComponent => ({\n element: component.element,\n input: component.input as HTMLInputElement | HTMLTextAreaElement,\n\n // Value management\n getValue: component.getValue || (() => \"\"),\n setValue(value: string): TextfieldComponent {\n component.setValue?.(value);\n return this;\n },\n\n // Attributes API\n setAttribute(name: string, value: string): TextfieldComponent {\n component.setAttribute?.(name, value);\n return this;\n },\n\n getAttribute(name: string): string | null {\n return component.getAttribute?.(name) || null;\n },\n\n removeAttribute(name: string): TextfieldComponent {\n component.removeAttribute?.(name);\n return this;\n },\n\n // Variant management\n setVariant(variant: TextfieldVariant): TextfieldComponent {\n const PREFIX = component.config?.prefix || \"mtrl\";\n const COMPONENT = component.config?.componentName || \"textfield\";\n\n // Remove existing variant classes\n component.element.classList.remove(\n `${PREFIX}-${COMPONENT}--filled`,\n `${PREFIX}-${COMPONENT}--outlined`\n );\n\n // Add the new variant class\n component.element.classList.add(`${PREFIX}-${COMPONENT}--${variant}`);\n\n // Update positioning after variant change\n if (component.updateElementPositions) {\n setTimeout(() => component.updateElementPositions(), 10);\n }\n\n return this;\n },\n\n getVariant(): TextfieldVariant {\n const PREFIX = component.config?.prefix || \"mtrl\";\n const COMPONENT = component.config?.componentName || \"textfield\";\n\n if (\n component.element.classList.contains(`${PREFIX}-${COMPONENT}--outlined`)\n ) {\n return \"outlined\";\n }\n\n return \"filled\"; // Default to filled if no class found\n },\n\n // Label management\n setLabel(text: string): TextfieldComponent {\n component.label?.setText(text);\n // Update positions after changing label\n if (component.updateElementPositions) {\n setTimeout(() => component.updateElementPositions(), 10);\n }\n return this;\n },\n\n getLabel(): string {\n return component.label?.getText() || \"\";\n },\n\n // Leading icon management (if present)\n leadingIcon: component.leadingIcon || null,\n setLeadingIcon(html: string): TextfieldComponent {\n if (component.setLeadingIcon) {\n component.setLeadingIcon(html);\n // Update positions after changing icon\n if (component.updateElementPositions) {\n setTimeout(() => component.updateElementPositions(), 10);\n }\n }\n return this;\n },\n\n removeLeadingIcon(): TextfieldComponent {\n if (component.removeLeadingIcon) {\n component.removeLeadingIcon();\n // Update positions after removing icon\n if (component.updateElementPositions) {\n setTimeout(() => component.updateElementPositions(), 10);\n }\n }\n return this;\n },\n\n // Trailing icon management (if present)\n trailingIcon: component.trailingIcon || null,\n setTrailingIcon(html: string): TextfieldComponent {\n if (component.setTrailingIcon) {\n component.setTrailingIcon(html);\n // Update positions after changing icon\n if (component.updateElementPositions) {\n setTimeout(() => component.updateElementPositions(), 10);\n }\n }\n return this;\n },\n\n removeTrailingIcon(): TextfieldComponent {\n if (component.removeTrailingIcon) {\n component.removeTrailingIcon();\n // Update positions after removing icon\n if (component.updateElementPositions) {\n setTimeout(() => component.updateElementPositions(), 10);\n }\n }\n return this;\n },\n\n // Supporting text management (if present)\n supportingTextElement: component.supportingTextElement || null,\n setSupportingText(text: string, isError?: boolean): TextfieldComponent {\n if (component.setSupportingText) {\n component.setSupportingText(text, isError);\n }\n return this;\n },\n\n removeSupportingText(): TextfieldComponent {\n if (component.removeSupportingText) {\n component.removeSupportingText();\n }\n return this;\n },\n\n // Prefix text management (if present)\n prefixTextElement: component.prefixTextElement || null,\n setPrefixText(text: string): TextfieldComponent {\n if (component.setPrefixText) {\n component.setPrefixText(text);\n // Update positions after changing prefix\n if (component.updateElementPositions) {\n setTimeout(() => component.updateElementPositions(), 10);\n }\n }\n return this;\n },\n\n removePrefixText(): TextfieldComponent {\n if (component.removePrefixText) {\n component.removePrefixText();\n // Update positions after removing prefix\n if (component.updateElementPositions) {\n setTimeout(() => component.updateElementPositions(), 10);\n }\n }\n return this;\n },\n\n // Suffix text management (if present)\n suffixTextElement: component.suffixTextElement || null,\n setSuffixText(text: string): TextfieldComponent {\n if (component.setSuffixText) {\n component.setSuffixText(text);\n // Update positions after changing suffix\n if (component.updateElementPositions) {\n setTimeout(() => component.updateElementPositions(), 10);\n }\n }\n return this;\n },\n\n removeSuffixText(): TextfieldComponent {\n if (component.removeSuffixText) {\n component.removeSuffixText();\n // Update positions after removing suffix\n if (component.updateElementPositions) {\n setTimeout(() => component.updateElementPositions(), 10);\n }\n }\n return this;\n },\n\n // Update positioning manually (useful after DOM updates)\n updatePositions(): TextfieldComponent {\n if (component.updateElementPositions) {\n component.updateElementPositions();\n }\n return this;\n },\n\n // Density management\n setDensity(density: string): TextfieldComponent {\n if (component.density?.set) {\n component.density.set(density);\n }\n return this;\n },\n\n getDensity(): string {\n return component.density?.current || \"default\";\n },\n\n // Event handling\n on(event: string, handler: Function): TextfieldComponent {\n component.on?.(event, handler);\n return this;\n },\n\n off(event: string, handler: Function): TextfieldComponent {\n component.off?.(event, handler);\n return this;\n },\n\n // State management\n enable(): TextfieldComponent {\n disabled.enable();\n return this;\n },\n\n disable(): TextfieldComponent {\n disabled.disable();\n return this;\n },\n\n destroy(): void {\n lifecycle.destroy();\n },\n });\n",
|
|
209
|
+
"// src/components/textfield/textfield.ts\nimport { pipe } from \"../../core/compose\";\nimport { createBase, withElement } from \"../../core/compose/component\";\nimport {\n withEvents,\n withDisabled,\n withLifecycle,\n withVariant,\n withTextInput,\n withTextLabel,\n} from \"../../core/compose/features\";\nimport { withAPI } from \"./api\";\nimport {\n withLeadingIcon,\n withTrailingIcon,\n withSupportingText,\n withPrefixText,\n withSuffixText,\n withPlacement,\n withDensity,\n withError,\n} from \"./features\";\nimport { TextfieldConfig, TextfieldComponent } from \"./types\";\nimport { createBaseConfig, getElementConfig, getApiConfig } from \"./config\";\n\n/**\n * Creates a new Textfield component\n *\n * Textfields allow users to enter text into a UI. They typically appear in forms and dialogs.\n * This implementation follows Material Design 3 guidelines for accessible, customizable textfields.\n *\n * @param {TextfieldConfig} config - Textfield configuration options\n * @returns {TextfieldComponent} A fully configured textfield component instance\n * @throws {Error} Throws an error if textfield creation fails\n *\n * @example\n * // Create a basic text field\n * const textfield = createTextfield({\n * label: 'Username',\n * name: 'username'\n * });\n *\n * document.querySelector('.form').appendChild(textfield.element);\n *\n * @example\n * // Create a text field with prefix and suffix\n * const currencyField = createTextfield({\n * label: 'Amount',\n * type: 'number',\n * prefixText: '$',\n * suffixText: 'USD'\n * });\n *\n * // Add event listener\n * currencyField.on('input', (e) => {\n * console.log('Amount entered:', e.target.value);\n * });\n */\nconst createTextfield = (config: TextfieldConfig = {}): TextfieldComponent => {\n const baseConfig = createBaseConfig(config);\n\n try {\n // Build textfield through functional composition\n // Each function in the pipe adds specific capabilities\n const textfield = pipe(\n createBase, // Base component structure\n withEvents(), // Event handling system\n withElement(getElementConfig(baseConfig)), // Create DOM element\n withVariant(baseConfig), // Apply variant styling (filled/outlined)\n withDensity(baseConfig), // Apply density level\n withTextInput(baseConfig), // Add input element\n withTextLabel(baseConfig), // Add text label\n withLeadingIcon(baseConfig), // Add leading icon (if specified)\n withTrailingIcon(baseConfig), // Add trailing icon (if specified)\n withPrefixText(baseConfig), // Add prefix text (if specified)\n withSuffixText(baseConfig), // Add suffix text (if specified)\n withSupportingText(baseConfig), // Add supporting/helper text (if specified)\n withError(baseConfig), // Add error state management\n withDisabled(baseConfig), // Add disabled state management\n withLifecycle(), // Add lifecycle management\n withPlacement(), // Add dynamic positioning for elements\n (comp) => withAPI(getApiConfig(comp))(comp) // Add public API\n )(baseConfig);\n\n return textfield as TextfieldComponent;\n } catch (error) {\n console.error(\n \"Textfield creation error:\",\n error instanceof Error ? error.message : String(error)\n );\n throw new Error(\n `Failed to create textfield: ${\n error instanceof Error ? error.message : String(error)\n }`\n );\n }\n};\n\nexport default createTextfield;\n",
|
|
210
|
+
"// src/components/textfield/api.ts\nimport {\n BaseComponent,\n TextfieldComponent,\n ApiOptions,\n TextfieldVariant,\n} from \"./types\";\n\n/**\n * Component interface with density feature\n */\ntype ComponentWithDensity = BaseComponent & {\n density?: {\n current: string;\n set: (density: string) => void;\n };\n updateElementPositions?: () => void;\n setError?: (error: boolean, message?: string) => any;\n isError?: () => boolean;\n};\n\n/**\n * Enhances textfield component with API methods\n * @param {ApiOptions} options - API configuration\n * @returns {Function} Higher-order function that adds API methods to component\n */\nexport const withAPI =\n ({ disabled, lifecycle }: ApiOptions) =>\n (component: ComponentWithDensity): TextfieldComponent => ({\n element: component.element,\n input: component.input as HTMLInputElement | HTMLTextAreaElement,\n\n // Value management\n getValue: component.getValue || (() => \"\"),\n setValue(value: string): TextfieldComponent {\n component.setValue?.(value);\n return this;\n },\n\n // Attributes API\n setAttribute(name: string, value: string): TextfieldComponent {\n component.setAttribute?.(name, value);\n return this;\n },\n\n getAttribute(name: string): string | null {\n return component.getAttribute?.(name) || null;\n },\n\n removeAttribute(name: string): TextfieldComponent {\n component.removeAttribute?.(name);\n return this;\n },\n\n // Variant management\n setVariant(variant: TextfieldVariant): TextfieldComponent {\n const PREFIX = component.config?.prefix || \"mtrl\";\n const COMPONENT = component.config?.componentName || \"textfield\";\n\n // Remove existing variant classes\n component.element.classList.remove(\n `${PREFIX}-${COMPONENT}--filled`,\n `${PREFIX}-${COMPONENT}--outlined`\n );\n\n // Add the new variant class\n component.element.classList.add(`${PREFIX}-${COMPONENT}--${variant}`);\n\n // Update positioning after variant change\n if (component.updateElementPositions) {\n setTimeout(() => component.updateElementPositions(), 10);\n }\n\n return this;\n },\n\n getVariant(): TextfieldVariant {\n const PREFIX = component.config?.prefix || \"mtrl\";\n const COMPONENT = component.config?.componentName || \"textfield\";\n\n if (\n component.element.classList.contains(`${PREFIX}-${COMPONENT}--outlined`)\n ) {\n return \"outlined\";\n }\n\n return \"filled\"; // Default to filled if no class found\n },\n\n // Label management\n setLabel(text: string): TextfieldComponent {\n component.label?.setText(text);\n // Update positions after changing label\n if (component.updateElementPositions) {\n setTimeout(() => component.updateElementPositions(), 10);\n }\n return this;\n },\n\n getLabel(): string {\n return component.label?.getText() || \"\";\n },\n\n // Leading icon management (if present)\n leadingIcon: component.leadingIcon || null,\n setLeadingIcon(html: string): TextfieldComponent {\n if (component.setLeadingIcon) {\n component.setLeadingIcon(html);\n // Update positions after changing icon\n if (component.updateElementPositions) {\n setTimeout(() => component.updateElementPositions(), 10);\n }\n }\n return this;\n },\n\n removeLeadingIcon(): TextfieldComponent {\n if (component.removeLeadingIcon) {\n component.removeLeadingIcon();\n // Update positions after removing icon\n if (component.updateElementPositions) {\n setTimeout(() => component.updateElementPositions(), 10);\n }\n }\n return this;\n },\n\n // Trailing icon management (if present)\n trailingIcon: component.trailingIcon || null,\n setTrailingIcon(html: string): TextfieldComponent {\n if (component.setTrailingIcon) {\n component.setTrailingIcon(html);\n // Update positions after changing icon\n if (component.updateElementPositions) {\n setTimeout(() => component.updateElementPositions(), 10);\n }\n }\n return this;\n },\n\n removeTrailingIcon(): TextfieldComponent {\n if (component.removeTrailingIcon) {\n component.removeTrailingIcon();\n // Update positions after removing icon\n if (component.updateElementPositions) {\n setTimeout(() => component.updateElementPositions(), 10);\n }\n }\n return this;\n },\n\n // Supporting text management (if present)\n supportingTextElement: component.supportingTextElement || null,\n setSupportingText(text: string, isError?: boolean): TextfieldComponent {\n if (component.setSupportingText) {\n component.setSupportingText(text, isError);\n }\n return this;\n },\n\n removeSupportingText(): TextfieldComponent {\n if (component.removeSupportingText) {\n component.removeSupportingText();\n }\n return this;\n },\n\n // Prefix text management (if present)\n prefixTextElement: component.prefixTextElement || null,\n setPrefixText(text: string): TextfieldComponent {\n if (component.setPrefixText) {\n component.setPrefixText(text);\n // Update positions after changing prefix\n if (component.updateElementPositions) {\n setTimeout(() => component.updateElementPositions(), 10);\n }\n }\n return this;\n },\n\n removePrefixText(): TextfieldComponent {\n if (component.removePrefixText) {\n component.removePrefixText();\n // Update positions after removing prefix\n if (component.updateElementPositions) {\n setTimeout(() => component.updateElementPositions(), 10);\n }\n }\n return this;\n },\n\n // Suffix text management (if present)\n suffixTextElement: component.suffixTextElement || null,\n setSuffixText(text: string): TextfieldComponent {\n if (component.setSuffixText) {\n component.setSuffixText(text);\n // Update positions after changing suffix\n if (component.updateElementPositions) {\n setTimeout(() => component.updateElementPositions(), 10);\n }\n }\n return this;\n },\n\n removeSuffixText(): TextfieldComponent {\n if (component.removeSuffixText) {\n component.removeSuffixText();\n // Update positions after removing suffix\n if (component.updateElementPositions) {\n setTimeout(() => component.updateElementPositions(), 10);\n }\n }\n return this;\n },\n\n // Update positioning manually (useful after DOM updates)\n updatePositions(): TextfieldComponent {\n // Check for autofill before updating positions\n if (component.input && component.element) {\n const hasValue =\n component.input.value && component.input.value.length > 0;\n const isAutofilled =\n component.input.matches?.(\":-webkit-autofill\") || false;\n\n // Update empty state based on value or autofill\n if (hasValue || isAutofilled) {\n component.element.classList.remove(\n `${component.config?.prefix || \"mtrl\"}-textfield--empty`\n );\n } else {\n component.element.classList.add(\n `${component.config?.prefix || \"mtrl\"}-textfield--empty`\n );\n }\n }\n\n if (component.updateElementPositions) {\n component.updateElementPositions();\n }\n return this;\n },\n\n // Error state management\n setError(error: boolean, message?: string): TextfieldComponent {\n if (component.setError) {\n component.setError(error, message);\n }\n return this;\n },\n\n isError(): boolean {\n return component.isError?.() || false;\n },\n\n // Density management\n setDensity(density: string): TextfieldComponent {\n if (component.density?.set) {\n component.density.set(density);\n }\n return this;\n },\n\n getDensity(): string {\n return component.density?.current || \"default\";\n },\n\n // Event handling\n on(event: string, handler: Function): TextfieldComponent {\n component.on?.(event, handler);\n return this;\n },\n\n off(event: string, handler: Function): TextfieldComponent {\n component.off?.(event, handler);\n return this;\n },\n\n // State management\n enable(): TextfieldComponent {\n disabled.enable();\n return this;\n },\n\n disable(): TextfieldComponent {\n disabled.disable();\n return this;\n },\n\n destroy(): void {\n lifecycle.destroy();\n },\n });\n",
|
|
250
211
|
"// src/components/textfield/features/leading-icon.ts\n\nimport { BaseComponent, ElementComponent } from '../../../core/compose/component';\n\n/**\n * Extended element component with input field\n */\ninterface InputElementComponent extends ElementComponent {\n input?: HTMLInputElement | HTMLTextAreaElement;\n lifecycle?: {\n destroy: () => void;\n };\n}\n\n/**\n * Configuration for leading icon feature\n */\nexport interface LeadingIconConfig {\n /**\n * Leading icon HTML content\n */\n leadingIcon?: string;\n \n /**\n * CSS class prefix\n */\n prefix?: string;\n \n /**\n * Component name\n */\n componentName?: string;\n \n [key: string]: any;\n}\n\n/**\n * Component with leading icon capabilities\n */\nexport interface LeadingIconComponent extends BaseComponent {\n /**\n * Leading icon element\n */\n leadingIcon: HTMLElement | null;\n \n /**\n * Sets leading icon content\n * @param html - HTML content for the icon\n * @returns Component instance for chaining\n */\n setLeadingIcon: (html: string) => LeadingIconComponent;\n \n /**\n * Removes leading icon\n * @returns Component instance for chaining\n */\n removeLeadingIcon: () => LeadingIconComponent;\n}\n\n/**\n * Adds leading icon to a textfield component\n * @param config - Configuration with leading icon settings\n * @returns Function that enhances a component with leading icon\n */\nexport const withLeadingIcon = <T extends LeadingIconConfig>(config: T) => \n <C extends InputElementComponent>(component: C): C & LeadingIconComponent => {\n if (!config.leadingIcon) {\n return component as any;\n }\n \n // Create icon element\n const PREFIX = config.prefix || 'mtrl';\n const iconElement = document.createElement('span');\n iconElement.className = `${PREFIX}-${config.componentName || 'textfield'}-leading-icon`;\n iconElement.innerHTML = config.leadingIcon;\n \n // Add leading icon to the component\n component.element.appendChild(iconElement);\n \n // Add leading-icon class to the component\n component.element.classList.add(`${PREFIX}-${config.componentName || 'textfield'}--with-leading-icon`);\n \n // When there's a leading icon, adjust input padding\n if (component.input) {\n component.input.classList.add(`${PREFIX}-${config.componentName || 'textfield'}-input--with-leading-icon`);\n }\n \n // Add lifecycle integration if available\n if ('lifecycle' in component && component.lifecycle?.destroy) {\n const originalDestroy = component.lifecycle.destroy;\n component.lifecycle.destroy = () => {\n iconElement.remove();\n originalDestroy.call(component.lifecycle);\n };\n }\n \n // Update label position based on icon\n setTimeout(() => {\n const labelEl = component.element.querySelector(`.${PREFIX}-${config.componentName || 'textfield'}-label`);\n if (labelEl) {\n if (!component.element.classList.contains(`${PREFIX}-${config.componentName || 'textfield'}--with-prefix`)) {\n (labelEl as HTMLElement).style.left = '44px';\n }\n }\n }, 10);\n\n return {\n ...component,\n leadingIcon: iconElement,\n \n setLeadingIcon(html: string) {\n iconElement.innerHTML = html;\n return this;\n },\n \n removeLeadingIcon() {\n if (iconElement.parentNode) {\n iconElement.remove();\n component.element.classList.remove(`${PREFIX}-${config.componentName || 'textfield'}--with-leading-icon`);\n if (component.input) {\n component.input.classList.remove(`${PREFIX}-${config.componentName || 'textfield'}-input--with-leading-icon`);\n }\n \n // Reset label position if no prefix\n if (!component.element.classList.contains(`${PREFIX}-${config.componentName || 'textfield'}--with-prefix`)) {\n const labelEl = component.element.querySelector(`.${PREFIX}-${config.componentName || 'textfield'}-label`);\n if (labelEl) {\n (labelEl as HTMLElement).style.left = '';\n }\n }\n \n this.leadingIcon = null;\n }\n return this;\n }\n };\n };",
|
|
251
212
|
"// src/components/textfield/features/trailing-icon.ts\n\nimport { BaseComponent, ElementComponent } from '../../../core/compose/component';\n\n/**\n * Extended element component with input field\n */\ninterface InputElementComponent extends ElementComponent {\n input?: HTMLInputElement | HTMLTextAreaElement;\n lifecycle?: {\n destroy: () => void;\n };\n}\n\n/**\n * Configuration for trailing icon feature\n */\nexport interface TrailingIconConfig {\n /**\n * Trailing icon HTML content\n */\n trailingIcon?: string;\n \n /**\n * CSS class prefix\n */\n prefix?: string;\n \n /**\n * Component name\n */\n componentName?: string;\n \n [key: string]: any;\n}\n\n/**\n * Component with trailing icon capabilities\n */\nexport interface TrailingIconComponent extends BaseComponent {\n /**\n * Trailing icon element\n */\n trailingIcon: HTMLElement | null;\n \n /**\n * Sets trailing icon content\n * @param html - HTML content for the icon\n * @returns Component instance for chaining\n */\n setTrailingIcon: (html: string) => TrailingIconComponent;\n \n /**\n * Removes trailing icon\n * @returns Component instance for chaining\n */\n removeTrailingIcon: () => TrailingIconComponent;\n}\n\n/**\n * Adds trailing icon to a textfield component\n * @param config - Configuration with trailing icon settings\n * @returns Function that enhances a component with trailing icon\n */\nexport const withTrailingIcon = <T extends TrailingIconConfig>(config: T) => \n <C extends InputElementComponent>(component: C): C & TrailingIconComponent => {\n if (!config.trailingIcon) {\n return component as any;\n }\n \n // Create icon element\n const PREFIX = config.prefix || 'mtrl';\n const iconElement = document.createElement('span');\n iconElement.className = `${PREFIX}-${config.componentName || 'textfield'}-trailing-icon`;\n iconElement.innerHTML = config.trailingIcon;\n \n // Add trailing icon to the component\n component.element.appendChild(iconElement);\n \n // Add trailing-icon class to the component\n component.element.classList.add(`${PREFIX}-${config.componentName || 'textfield'}--with-trailing-icon`);\n \n // When there's a trailing icon, adjust input padding\n if (component.input) {\n component.input.classList.add(`${PREFIX}-${config.componentName || 'textfield'}-input--with-trailing-icon`);\n }\n \n // Add lifecycle integration if available\n if ('lifecycle' in component && component.lifecycle?.destroy) {\n const originalDestroy = component.lifecycle.destroy;\n component.lifecycle.destroy = () => {\n iconElement.remove();\n originalDestroy.call(component.lifecycle);\n };\n }\n\n return {\n ...component,\n trailingIcon: iconElement,\n \n setTrailingIcon(html: string) {\n iconElement.innerHTML = html;\n return this;\n },\n \n removeTrailingIcon() {\n if (iconElement.parentNode) {\n iconElement.remove();\n component.element.classList.remove(`${PREFIX}-${config.componentName || 'textfield'}--with-trailing-icon`);\n if (component.input) {\n component.input.classList.remove(`${PREFIX}-${config.componentName || 'textfield'}-input--with-trailing-icon`);\n }\n this.trailingIcon = null;\n }\n return this;\n }\n };\n };",
|
|
252
213
|
"// src/components/textfield/features/prefix-text.ts\n\nimport { BaseComponent, ElementComponent } from '../../../core/compose/component';\n\n/**\n * Extended element component with lifecycle\n */\ninterface LifecycleElementComponent extends ElementComponent {\n lifecycle?: {\n destroy: () => void;\n };\n}\n\n/**\n * Configuration for prefix text feature\n */\nexport interface PrefixTextConfig {\n /**\n * Prefix text content to display before the input\n */\n prefixText?: string;\n \n /**\n * CSS class prefix\n */\n prefix?: string;\n \n /**\n * Component name\n */\n componentName?: string;\n \n [key: string]: any;\n}\n\n/**\n * Component with prefix text capabilities\n */\nexport interface PrefixTextComponent extends BaseComponent {\n /**\n * Prefix text element\n */\n prefixTextElement: HTMLElement | null;\n \n /**\n * Sets prefix text content\n * @param text - Text content to display before the input\n * @returns Component instance for chaining\n */\n setPrefixText: (text: string) => PrefixTextComponent;\n \n /**\n * Removes prefix text\n * @returns Component instance for chaining\n */\n removePrefixText: () => PrefixTextComponent;\n}\n\n/**\n * Adds prefix text to a textfield component\n * @param config - Configuration with prefix text settings\n * @returns Function that enhances a component with prefix text\n */\nexport const withPrefixText = <T extends PrefixTextConfig>(config: T) => \n <C extends LifecycleElementComponent>(component: C): C & PrefixTextComponent => {\n if (!config.prefixText) {\n return component as any;\n }\n \n // Create prefix text element\n const PREFIX = config.prefix || 'mtrl';\n const prefixElement = document.createElement('span');\n prefixElement.className = `${PREFIX}-${config.componentName || 'textfield'}-prefix`;\n prefixElement.textContent = config.prefixText;\n \n // Add prefix text to the component\n component.element.appendChild(prefixElement);\n \n // Add prefix class to the component\n component.element.classList.add(`${PREFIX}-${config.componentName || 'textfield'}--with-prefix`);\n \n // Add lifecycle integration\n if ('lifecycle' in component && component.lifecycle?.destroy) {\n const originalDestroy = component.lifecycle.destroy as Function;\n component.lifecycle.destroy = () => {\n prefixElement.remove();\n originalDestroy.call(component.lifecycle);\n };\n }\n\n return {\n ...component,\n prefixTextElement: prefixElement,\n \n setPrefixText(text: string) {\n prefixElement.textContent = text;\n return this;\n },\n \n removePrefixText() {\n if (prefixElement.parentNode) {\n prefixElement.remove();\n component.element.classList.remove(`${PREFIX}-${config.componentName || 'textfield'}--with-prefix`);\n \n // Reset label position if no prefix\n const labelEl = component.element.querySelector(`.${PREFIX}-${config.componentName || 'textfield'}-label`);\n if (labelEl) {\n (labelEl as HTMLElement).style.left = '';\n }\n \n this.prefixTextElement = null;\n }\n return this;\n }\n };\n };",
|
|
253
214
|
"// src/components/textfield/features/suffix-text.ts\n\nimport { BaseComponent, ElementComponent } from '../../../core/compose/component';\n\n/**\n * Extended element component with lifecycle\n */\ninterface LifecycleElementComponent extends ElementComponent {\n lifecycle?: {\n destroy: () => void;\n };\n}\n\n/**\n * Configuration for suffix text feature\n */\nexport interface SuffixTextConfig {\n /**\n * Suffix text content to display after the input\n */\n suffixText?: string;\n \n /**\n * CSS class prefix\n */\n prefix?: string;\n \n /**\n * Component name\n */\n componentName?: string;\n \n [key: string]: any;\n}\n\n/**\n * Component with suffix text capabilities\n */\nexport interface SuffixTextComponent extends BaseComponent {\n /**\n * Suffix text element\n */\n suffixTextElement: HTMLElement | null;\n \n /**\n * Sets suffix text content\n * @param text - Text content to display after the input\n * @returns Component instance for chaining\n */\n setSuffixText: (text: string) => SuffixTextComponent;\n \n /**\n * Removes suffix text\n * @returns Component instance for chaining\n */\n removeSuffixText: () => SuffixTextComponent;\n}\n\n/**\n * Adds suffix text to a textfield component\n * @param config - Configuration with suffix text settings\n * @returns Function that enhances a component with suffix text\n */\nexport const withSuffixText = <T extends SuffixTextConfig>(config: T) => \n <C extends LifecycleElementComponent>(component: C): C & SuffixTextComponent => {\n if (!config.suffixText) {\n return component as any;\n }\n \n // Create suffix text element\n const PREFIX = config.prefix || 'mtrl';\n const suffixElement = document.createElement('span');\n suffixElement.className = `${PREFIX}-${config.componentName || 'textfield'}-suffix`;\n suffixElement.textContent = config.suffixText;\n \n // Add suffix text to the component\n component.element.appendChild(suffixElement);\n \n // Add suffix class to the component\n component.element.classList.add(`${PREFIX}-${config.componentName || 'textfield'}--with-suffix`);\n \n // Add lifecycle integration\n if ('lifecycle' in component && component.lifecycle?.destroy) {\n const originalDestroy = component.lifecycle.destroy as Function;\n component.lifecycle.destroy = () => {\n suffixElement.remove();\n originalDestroy.call(component.lifecycle);\n };\n }\n\n return {\n ...component,\n suffixTextElement: suffixElement,\n \n setSuffixText(text: string) {\n suffixElement.textContent = text;\n return this;\n },\n \n removeSuffixText() {\n if (suffixElement.parentNode) {\n suffixElement.remove();\n component.element.classList.remove(`${PREFIX}-${config.componentName || 'textfield'}--with-suffix`);\n this.suffixTextElement = null;\n }\n return this;\n }\n };\n };",
|
|
254
|
-
"// src/components/textfield/features/supporting-text.ts\n\nimport {
|
|
255
|
-
"import { BaseComponent, ElementComponent } from '../../../core/compose/component';\nimport { getInheritedBackground } from '../../../core/utils/background';\n\n/**\n * Extended element component with input field\n */\ninterface InputElementComponent extends ElementComponent {\n input?: HTMLInputElement | HTMLTextAreaElement;\n lifecycle?: {\n destroy: () => void;\n };\n}\n\n/**\n * Component with placement management capabilities\n */\nexport interface PlacementComponent extends BaseComponent {\n /**\n * Updates positions of all elements in the textfield\n * @returns The component instance for chaining\n */\n updateElementPositions: () => PlacementComponent;\n}\n\n/**\n * Handles dynamic positioning of textfield elements (label, prefix, suffix)\n * This feature should be added last in the pipe to ensure all elements exist\n * \n * @returns Function that enhances a component with dynamic positioning\n */\nexport const withPlacement = () => \n <C extends InputElementComponent>(component: C): C & PlacementComponent => {\n const PREFIX = component.config.prefix || 'mtrl';\n const COMPONENT = component.config.componentName || 'textfield';\n \n // Use WeakMaps to store observers without extending HTMLElement\n const bgSourceObservers = new WeakMap<HTMLElement, MutationObserver>();\n const parentObservers = new WeakMap<HTMLElement, MutationObserver[]>();\n const themeChangeHandlers = new WeakMap<HTMLElement, EventListener>();\n \n /**\n * Updates positions of labels and adjusts input padding\n * to accommodate prefix/suffix elements\n */\n const updateElementPositions = () => {\n if (!component.element || !component.element.isConnected) return component as any;\n \n // Get necessary elements\n const labelEl = component.element.querySelector(`.${PREFIX}-${COMPONENT}-label`) as HTMLElement;\n const prefixEl = component.element.querySelector(`.${PREFIX}-${COMPONENT}-prefix`);\n const suffixEl = component.element.querySelector(`.${PREFIX}-${COMPONENT}-suffix`);\n \n // Get component states\n const isOutlined = component.element.classList.contains(`${PREFIX}-${COMPONENT}--outlined`);\n const isFocused = component.element.classList.contains(`${PREFIX}-${COMPONENT}--focused`);\n const isEmpty = component.element.classList.contains(`${PREFIX}-${COMPONENT}--empty`);\n const hasLeadingIcon = component.element.classList.contains(`${PREFIX}-${COMPONENT}--with-leading-icon`);\n \n // For outlined variant, set the label background color to match parent\n if (isOutlined && labelEl) {\n // Get the inherited background color and its source element\n const { color: parentBgColor, element: bgSourceElement } = getInheritedBackground(component.element);\n \n // Apply the background color to the label (only in focus/filled state)\n if (isFocused || !isEmpty) {\n labelEl.style.backgroundColor = parentBgColor;\n \n // Add padding to create the proper \"floating label\" appearance\n labelEl.style.paddingLeft = '4px';\n labelEl.style.paddingRight = '4px';\n \n // Set up observer for background source element if not already done\n if (bgSourceElement && !bgSourceObservers.has(component.element)) {\n const observer = new MutationObserver(() => {\n // Update label background when source element changes\n const { color } = getInheritedBackground(component.element);\n labelEl.style.backgroundColor = color;\n });\n \n observer.observe(bgSourceElement, { \n attributes: true, \n attributeFilter: ['style', 'class']\n });\n \n // Store the observer in our WeakMap\n bgSourceObservers.set(component.element, observer);\n \n // Observe parent nodes to catch theme changes, including dark mode\n let parent = bgSourceElement.parentElement;\n const observers: MutationObserver[] = [];\n \n while (parent && parent !== document.documentElement) {\n const parentObserver = new MutationObserver(() => {\n // Update label background when parent attributes change\n const { color: newColor } = getInheritedBackground(component.element);\n labelEl.style.backgroundColor = newColor;\n });\n \n parentObserver.observe(parent, {\n attributes: true,\n attributeFilter: ['style', 'class', 'data-theme', 'data-theme-mode']\n });\n \n observers.push(parentObserver);\n parent = parent.parentElement;\n }\n \n // Store parent observers\n if (observers.length) {\n parentObservers.set(component.element, observers);\n }\n }\n \n // Set up theme change listener if not already done\n if (!themeChangeHandlers.has(component.element)) {\n const themeChangeHandler = () => {\n // Update label background on theme change\n const { color } = getInheritedBackground(component.element);\n if (isFocused || !isEmpty) {\n labelEl.style.backgroundColor = color;\n }\n };\n \n // Only listen for themechange, as it's the event dispatched by theme-manager.js\n document.addEventListener('themechange', themeChangeHandler);\n \n themeChangeHandlers.set(component.element, themeChangeHandler);\n }\n } else {\n // Reset background when not floating\n labelEl.style.backgroundColor = '';\n labelEl.style.padding = '';\n }\n }\n \n // Handle prefix positioning and input padding\n if (prefixEl && component.input) {\n const prefixWidth = prefixEl.getBoundingClientRect().width + 4; // 4px spacing\n const inputPadding = prefixWidth + 12; // 12px additional padding\n \n // Update input left padding\n component.input.style.paddingLeft = `${inputPadding}px`;\n \n // Update label position if present\n if (labelEl) {\n let labelPosition = inputPadding;\n \n // Account for leading icon if present\n if (hasLeadingIcon) {\n labelPosition = Math.max(labelPosition, 44);\n }\n \n // Different positioning strategy based on variant and state\n if (!isFocused && isEmpty) {\n // When unfocused and empty, align with prefix/input\n labelEl.style.left = `${labelPosition}px`;\n } else {\n // When focused or filled, move to default position\n labelEl.style.left = '12px';\n }\n }\n } else if (hasLeadingIcon && labelEl) {\n // Handle case with leading icon but no prefix\n if (isOutlined) {\n if (!isFocused && isEmpty) {\n // When unfocused and empty, align with icon\n labelEl.style.left = '44px';\n } else {\n // When focused or filled, move to default position\n labelEl.style.left = '12px';\n }\n }\n // For filled variant, the CSS handles this\n }\n \n // Handle suffix positioning and input padding\n if (suffixEl && component.input) {\n const suffixWidth = suffixEl.getBoundingClientRect().width + 4; // 4px spacing\n const inputPadding = suffixWidth + 12; // 12px additional padding\n \n // Update input right padding\n component.input.style.paddingRight = `${inputPadding}px`;\n }\n \n return component as any;\n };\n \n // Set up event listeners for dynamic positioning\n const setupEventListeners = () => {\n if (component.input) {\n // Update positions when focus state changes\n component.input.addEventListener('focus', () => {\n component.element.classList.add(`${PREFIX}-${COMPONENT}--focused`);\n setTimeout(updateElementPositions, 10);\n });\n \n component.input.addEventListener('blur', () => {\n component.element.classList.remove(`${PREFIX}-${COMPONENT}--focused`);\n setTimeout(updateElementPositions, 10);\n });\n \n // Update positions when empty state changes\n component.input.addEventListener('input', () => {\n const isEmpty = !component.input.value;\n component.element.classList.toggle(`${PREFIX}-${COMPONENT}--empty`, isEmpty);\n setTimeout(updateElementPositions, 10);\n });\n \n // Set initial empty state\n if (!component.input.value) {\n component.element.classList.add(`${PREFIX}-${COMPONENT}--empty`);\n }\n }\n \n // Update positions on window resize\n window.addEventListener('resize', updateElementPositions);\n \n // Update positions when element is connected to DOM\n const domObserver = new MutationObserver(() => {\n if (component.element.isConnected) {\n updateElementPositions();\n }\n });\n domObserver.observe(document.body, { childList: true, subtree: true });\n };\n \n // Perform initial setup\n setTimeout(() => {\n setupEventListeners();\n updateElementPositions();\n }, 0);\n \n // Add lifecycle integration\n if ('lifecycle' in component && component.lifecycle?.destroy) {\n const originalDestroy = component.lifecycle.destroy;\n component.lifecycle.destroy = () => {\n window.removeEventListener('resize', updateElementPositions);\n \n // Disconnect background source observer\n const bgObserver = bgSourceObservers.get(component.element);\n if (bgObserver) {\n bgObserver.disconnect();\n bgSourceObservers.delete(component.element);\n }\n \n // Disconnect parent observers\n const observers = parentObservers.get(component.element);\n if (observers) {\n observers.forEach(observer => observer.disconnect());\n parentObservers.delete(component.element);\n }\n \n // Remove theme change listener\n const themeHandler = themeChangeHandlers.get(component.element);\n if (themeHandler) {\n document.removeEventListener('themechange', themeHandler);\n themeChangeHandlers.delete(component.element);\n }\n \n originalDestroy.call(component.lifecycle);\n };\n }\n \n return {\n ...component,\n updateElementPositions: () => {\n updateElementPositions();\n return component as unknown as C & PlacementComponent;\n }\n };\n };",
|
|
215
|
+
"// src/components/textfield/features/supporting-text.ts\n\nimport {\n BaseComponent,\n ElementComponent,\n} from \"../../../core/compose/component\";\n\n/**\n * Extended element component with lifecycle\n */\ninterface LifecycleElementComponent extends ElementComponent {\n lifecycle?: {\n destroy: () => void;\n };\n}\n\n/**\n * Configuration for supporting text feature\n */\nexport interface SupportingTextConfig {\n /**\n * Supporting text content\n */\n supportingText?: string;\n\n /**\n * Whether supporting text indicates an error\n */\n error?: boolean;\n\n /**\n * CSS class prefix\n */\n prefix?: string;\n\n /**\n * Component name\n */\n componentName?: string;\n\n [key: string]: any;\n}\n\n/**\n * Component with supporting text capabilities\n */\nexport interface SupportingTextComponent extends BaseComponent {\n /**\n * Supporting text element\n */\n supportingTextElement: HTMLElement | null;\n\n /**\n * Sets supporting text content\n * @param text - Text content\n * @param isError - Whether text represents an error\n * @returns Component instance for chaining\n */\n setSupportingText: (\n text: string,\n isError?: boolean\n ) => SupportingTextComponent;\n\n /**\n * Removes supporting text\n * @returns Component instance for chaining\n */\n removeSupportingText: () => SupportingTextComponent;\n}\n\n/**\n * Adds supporting text to a textfield component\n * @param config - Configuration with supporting text settings\n * @returns Function that enhances a component with supporting text\n */\nexport const withSupportingText =\n <T extends SupportingTextConfig>(config: T) =>\n <C extends LifecycleElementComponent>(\n component: C\n ): C & SupportingTextComponent => {\n const PREFIX = config.prefix || \"mtrl\";\n const COMPONENT = config.componentName || \"textfield\";\n let supportingElement: HTMLElement | null = null;\n\n // Helper function to create supporting text element\n const createSupportingElement = (\n text: string,\n isError = false\n ): HTMLElement => {\n const element = document.createElement(\"div\");\n element.className = `${PREFIX}-${COMPONENT}-helper`;\n element.textContent = text;\n\n if (isError) {\n element.classList.add(`${PREFIX}-${COMPONENT}-helper--error`);\n component.element.classList.add(`${PREFIX}-${COMPONENT}--error`);\n }\n\n return element;\n };\n\n // Create initial supporting text element if provided\n if (config.supportingText) {\n supportingElement = createSupportingElement(\n config.supportingText,\n config.error\n );\n component.element.appendChild(supportingElement);\n }\n\n // Add lifecycle integration if available\n if (\"lifecycle\" in component && component.lifecycle?.destroy) {\n const originalDestroy = component.lifecycle.destroy as Function;\n component.lifecycle.destroy = () => {\n if (supportingElement) {\n supportingElement.remove();\n }\n originalDestroy.call(component.lifecycle);\n };\n }\n\n return {\n ...component,\n supportingTextElement: supportingElement,\n\n setSupportingText(text: string, isError = false) {\n // Remove existing element if present\n if (supportingElement) {\n supportingElement.remove();\n component.element.classList.remove(`${PREFIX}-${COMPONENT}--error`);\n }\n\n // Create new element if text is provided\n if (text) {\n supportingElement = createSupportingElement(text, isError);\n component.element.appendChild(supportingElement);\n this.supportingTextElement = supportingElement;\n } else {\n supportingElement = null;\n this.supportingTextElement = null;\n component.element.classList.remove(`${PREFIX}-${COMPONENT}--error`);\n }\n\n return this;\n },\n\n removeSupportingText() {\n if (supportingElement) {\n supportingElement.remove();\n supportingElement = null;\n this.supportingTextElement = null;\n component.element.classList.remove(`${PREFIX}-${COMPONENT}--error`);\n }\n return this;\n },\n };\n };\n",
|
|
216
|
+
"import {\n BaseComponent,\n ElementComponent,\n} from \"../../../core/compose/component\";\nimport { getInheritedBackground } from \"../../../core/utils/background\";\n\n/**\n * Extended element component with input field\n */\ninterface InputElementComponent extends ElementComponent {\n input?: HTMLInputElement | HTMLTextAreaElement;\n lifecycle?: {\n destroy: () => void;\n };\n}\n\n/**\n * Component with placement management capabilities\n */\nexport interface PlacementComponent extends BaseComponent {\n /**\n * Updates positions of all elements in the textfield\n * @returns The component instance for chaining\n */\n updateElementPositions: () => PlacementComponent;\n}\n\n/**\n * Handles dynamic positioning of textfield elements (label, prefix, suffix)\n * This feature should be added last in the pipe to ensure all elements exist\n *\n * @returns Function that enhances a component with dynamic positioning\n */\nexport const withPlacement =\n () =>\n <C extends InputElementComponent>(component: C): C & PlacementComponent => {\n const PREFIX = component.config.prefix || \"mtrl\";\n const COMPONENT = component.config.componentName || \"textfield\";\n\n // Use WeakMaps to store observers without extending HTMLElement\n const bgSourceObservers = new WeakMap<HTMLElement, MutationObserver>();\n const parentObservers = new WeakMap<HTMLElement, MutationObserver[]>();\n const themeChangeHandlers = new WeakMap<HTMLElement, EventListener>();\n const classObservers = new WeakMap<HTMLElement, MutationObserver>();\n\n /**\n * Updates positions of labels and adjusts input padding\n * to accommodate prefix/suffix elements\n */\n const updateElementPositions = () => {\n if (!component.element || !component.element.isConnected)\n return component as any;\n\n // Get necessary elements\n const labelEl = component.element.querySelector(\n `.${PREFIX}-${COMPONENT}-label`\n ) as HTMLElement;\n const prefixEl = component.element.querySelector(\n `.${PREFIX}-${COMPONENT}-prefix`\n );\n const suffixEl = component.element.querySelector(\n `.${PREFIX}-${COMPONENT}-suffix`\n );\n\n // Get component states\n const isOutlined = component.element.classList.contains(\n `${PREFIX}-${COMPONENT}--outlined`\n );\n const isFocused = component.element.classList.contains(\n `${PREFIX}-${COMPONENT}--focused`\n );\n const isEmpty = component.element.classList.contains(\n `${PREFIX}-${COMPONENT}--empty`\n );\n const hasLeadingIcon = component.element.classList.contains(\n `${PREFIX}-${COMPONENT}--with-leading-icon`\n );\n\n // For outlined variant, set the label background color to match parent\n if (isOutlined && labelEl) {\n // Get the inherited background color and its source element\n const { color: parentBgColor, element: bgSourceElement } =\n getInheritedBackground(component.element);\n\n // Apply the background color to the label (only in focus/filled state)\n if (isFocused || !isEmpty) {\n labelEl.style.backgroundColor = parentBgColor;\n\n // Add padding to create the proper \"floating label\" appearance\n labelEl.style.paddingLeft = \"4px\";\n labelEl.style.paddingRight = \"4px\";\n\n // Set up observer for background source element if not already done\n if (bgSourceElement && !bgSourceObservers.has(component.element)) {\n const observer = new MutationObserver(() => {\n // Update label background when source element changes\n const { color } = getInheritedBackground(component.element);\n labelEl.style.backgroundColor = color;\n });\n\n observer.observe(bgSourceElement, {\n attributes: true,\n attributeFilter: [\"style\", \"class\"],\n });\n\n // Store the observer in our WeakMap\n bgSourceObservers.set(component.element, observer);\n\n // Observe parent nodes to catch theme changes, including dark mode\n let parent = bgSourceElement.parentElement;\n const observers: MutationObserver[] = [];\n\n while (parent && parent !== document.documentElement) {\n const parentObserver = new MutationObserver(() => {\n // Update label background when parent attributes change\n const { color: newColor } = getInheritedBackground(\n component.element\n );\n labelEl.style.backgroundColor = newColor;\n });\n\n parentObserver.observe(parent, {\n attributes: true,\n attributeFilter: [\n \"style\",\n \"class\",\n \"data-theme\",\n \"data-theme-mode\",\n ],\n });\n\n observers.push(parentObserver);\n parent = parent.parentElement;\n }\n\n // Store parent observers\n if (observers.length) {\n parentObservers.set(component.element, observers);\n }\n }\n\n // Set up theme change listener if not already done\n if (!themeChangeHandlers.has(component.element)) {\n const themeChangeHandler = () => {\n // Update label background on theme change\n const { color } = getInheritedBackground(component.element);\n if (isFocused || !isEmpty) {\n labelEl.style.backgroundColor = color;\n }\n };\n\n // Only listen for themechange, as it's the event dispatched by theme-manager.js\n document.addEventListener(\"themechange\", themeChangeHandler);\n\n themeChangeHandlers.set(component.element, themeChangeHandler);\n }\n } else {\n // Reset background when not floating\n labelEl.style.backgroundColor = \"\";\n labelEl.style.padding = \"\";\n }\n }\n\n // Handle prefix positioning and input padding\n if (prefixEl && component.input) {\n const prefixWidth = prefixEl.getBoundingClientRect().width + 4; // 4px spacing\n const inputPadding = prefixWidth + 12; // 12px additional padding\n\n // Update input left padding\n component.input.style.paddingLeft = `${inputPadding}px`;\n\n // Update label position if present\n if (labelEl) {\n let labelPosition = inputPadding;\n\n // Account for leading icon if present\n if (hasLeadingIcon) {\n labelPosition = Math.max(labelPosition, 44);\n }\n\n // Different positioning strategy based on variant and state\n if (!isFocused && isEmpty) {\n // When unfocused and empty, align with prefix/input\n labelEl.style.left = `${labelPosition}px`;\n } else {\n // When focused or filled, move to default position\n labelEl.style.left = \"12px\";\n }\n }\n } else if (hasLeadingIcon && labelEl) {\n // Handle case with leading icon but no prefix\n if (isOutlined) {\n if (!isFocused && isEmpty) {\n // When unfocused and empty, align with icon\n labelEl.style.left = \"44px\";\n } else {\n // When focused or filled, move to default position\n labelEl.style.left = \"12px\";\n }\n }\n // For filled variant, the CSS handles this\n }\n\n // Handle suffix positioning and input padding\n if (suffixEl && component.input) {\n const suffixWidth = suffixEl.getBoundingClientRect().width + 4; // 4px spacing\n const inputPadding = suffixWidth + 12; // 12px additional padding\n\n // Update input right padding\n component.input.style.paddingRight = `${inputPadding}px`;\n }\n\n return component as any;\n };\n\n // Set up event listeners for dynamic positioning\n const setupEventListeners = () => {\n // Watch for class changes on the component element\n // This ensures we update positions when state changes (empty, focused, etc.)\n const classObserver = new MutationObserver((mutations) => {\n mutations.forEach((mutation) => {\n if (\n mutation.type === \"attributes\" &&\n mutation.attributeName === \"class\"\n ) {\n // Debounce the update to avoid excessive recalculations\n setTimeout(updateElementPositions, 10);\n }\n });\n });\n\n // Observe class changes on the component element\n classObserver.observe(component.element, {\n attributes: true,\n attributeFilter: [\"class\"],\n });\n\n // Update positions on window resize\n window.addEventListener(\"resize\", updateElementPositions);\n\n // Store the observer for cleanup\n classObservers.set(component.element, classObserver);\n };\n\n // Perform initial setup\n setTimeout(() => {\n setupEventListeners();\n updateElementPositions();\n }, 0);\n\n // Add lifecycle integration\n if (\"lifecycle\" in component && component.lifecycle?.destroy) {\n const originalDestroy = component.lifecycle.destroy;\n component.lifecycle.destroy = () => {\n window.removeEventListener(\"resize\", updateElementPositions);\n\n // Disconnect class observer\n const classObserver = classObservers.get(component.element);\n if (classObserver) {\n classObserver.disconnect();\n classObservers.delete(component.element);\n }\n\n // Disconnect background source observer\n const bgObserver = bgSourceObservers.get(component.element);\n if (bgObserver) {\n bgObserver.disconnect();\n bgSourceObservers.delete(component.element);\n }\n\n // Disconnect parent observers\n const observers = parentObservers.get(component.element);\n if (observers) {\n observers.forEach((observer) => observer.disconnect());\n parentObservers.delete(component.element);\n }\n\n // Remove theme change listener\n const themeHandler = themeChangeHandlers.get(component.element);\n if (themeHandler) {\n document.removeEventListener(\"themechange\", themeHandler);\n themeChangeHandlers.delete(component.element);\n }\n\n originalDestroy.call(component.lifecycle);\n };\n }\n\n return {\n ...component,\n updateElementPositions: () => {\n updateElementPositions();\n return component as unknown as C & PlacementComponent;\n },\n };\n };\n",
|
|
256
217
|
"import { TextfieldConfig, TextfieldDensity } from \"../types\";\n\n/**\n * Configuration for density feature\n */\ninterface DensityConfig extends TextfieldConfig {\n density?: TextfieldDensity | string;\n prefix?: string;\n componentName?: string;\n}\n\n/**\n * Component with density feature\n */\ninterface DensityComponent {\n element: HTMLElement;\n input?: HTMLInputElement | HTMLTextAreaElement;\n density?: {\n current: string;\n set: (density: string) => void;\n };\n updateElementPositions?: () => void;\n}\n\n/**\n * Adds density support to textfield component\n * @param {DensityConfig} config - Configuration with density option\n * @returns {Function} Higher-order function that adds density capabilities\n */\nexport const withDensity =\n (config: DensityConfig) =>\n (component: DensityComponent): DensityComponent => {\n const PREFIX = config.prefix || \"mtrl\";\n const COMPONENT = config.componentName || \"textfield\";\n const density = config.density || \"default\";\n\n // Apply initial density class\n if (density !== \"default\") {\n component.element.classList.add(\n `${PREFIX}-${COMPONENT}--density-${density}`\n );\n }\n\n // Set data attribute for styling hooks\n component.element.setAttribute(\"data-density\", density);\n\n // Apply density-specific styles to input if present\n if (component.input) {\n applyDensityStyles(component.input, density);\n }\n\n /**\n * Applies density-specific inline styles\n * @param {HTMLElement} element - Element to apply styles to\n * @param {string} density - Density level\n */\n function applyDensityStyles(element: HTMLElement, density: string) {\n // These are applied as data attributes for CSS to use\n // The actual styling happens in SCSS\n element.setAttribute(\"data-density\", density);\n }\n\n /**\n * Updates the component's density\n * @param {string} newDensity - New density level\n */\n const setDensity = (newDensity: string) => {\n // Remove existing density classes\n [\"default\", \"compact\"].forEach((d) => {\n component.element.classList.remove(\n `${PREFIX}-${COMPONENT}--density-${d}`\n );\n });\n\n // Add new density class if not default\n if (newDensity !== \"default\") {\n component.element.classList.add(\n `${PREFIX}-${COMPONENT}--density-${newDensity}`\n );\n }\n\n // Update data attribute\n component.element.setAttribute(\"data-density\", newDensity);\n\n // Update input if present\n if (component.input) {\n component.input.setAttribute(\"data-density\", newDensity);\n }\n\n // Update current density value\n if (component.density) {\n component.density.current = newDensity;\n }\n\n // Trigger position update if available\n if (component.updateElementPositions) {\n // Small delay to ensure styles are applied\n setTimeout(() => component.updateElementPositions!(), 10);\n }\n };\n\n // Add density feature to component\n component.density = {\n current: density,\n set: setDensity,\n };\n\n return component;\n };\n",
|
|
218
|
+
"import {\n BaseComponent,\n ElementComponent,\n} from \"../../../core/compose/component\";\n\n/**\n * Configuration for error feature\n */\nexport interface ErrorConfig {\n /**\n * Initial error state\n */\n error?: boolean;\n\n /**\n * CSS class prefix\n */\n prefix?: string;\n\n /**\n * Component name\n */\n componentName?: string;\n\n [key: string]: any;\n}\n\n/**\n * Component with supporting text capabilities (if available)\n */\ninterface ComponentWithSupportingText extends ElementComponent {\n setSupportingText?: (text: string, isError?: boolean) => void;\n supportingTextElement?: HTMLElement | null;\n}\n\n/**\n * Component with error state capabilities\n */\nexport interface ErrorComponent extends BaseComponent {\n /**\n * Current error state\n */\n errorState: boolean;\n\n /**\n * Sets error state\n * @param error - Whether to show error state\n * @param message - Optional error message to display\n * @returns Component instance for chaining\n */\n setError: (error: boolean, message?: string) => ErrorComponent;\n\n /**\n * Gets current error state\n * @returns Whether component is in error state\n */\n isError: () => boolean;\n}\n\n/**\n * Adds error state management to a component\n * @param config - Configuration with error settings\n * @returns Function that enhances a component with error state\n */\nexport const withError =\n <T extends ErrorConfig>(config: T) =>\n <C extends ComponentWithSupportingText>(component: C): C & ErrorComponent => {\n const PREFIX = config.prefix || \"mtrl\";\n const COMPONENT = config.componentName || \"textfield\";\n\n // Track error state\n let errorState = config.error || false;\n\n // Apply initial error state if configured\n if (errorState) {\n component.element.classList.add(`${PREFIX}-${COMPONENT}--error`);\n }\n\n return {\n ...component,\n errorState,\n\n setError(error: boolean, message?: string) {\n errorState = error;\n\n // Toggle error class on the component\n component.element.classList.toggle(\n `${PREFIX}-${COMPONENT}--error`,\n error\n );\n\n // If message is provided and component has supporting text capability\n if (message !== undefined && component.setSupportingText) {\n if (message) {\n component.setSupportingText(message, error);\n } else if (!error) {\n // Clear supporting text if removing error with empty message\n component.setSupportingText(\"\", false);\n }\n } else if (\n component.supportingTextElement &&\n component.setSupportingText\n ) {\n // If no message but component has existing supporting text, update its error state\n const currentText = component.supportingTextElement.textContent || \"\";\n if (currentText) {\n component.setSupportingText(currentText, error);\n }\n }\n\n return this;\n },\n\n isError() {\n return errorState;\n },\n };\n };\n",
|
|
257
219
|
"// src/components/textfield/config.ts\nimport {\n createComponentConfig,\n createElementConfig,\n} from \"../../core/config/component\";\nimport { TextfieldConfig, BaseComponent, ApiOptions } from \"./types\";\nimport { TEXTFIELD_DEFAULTS } from \"./constants\";\n\n/**\n * Default configuration for the Textfield component\n */\nexport const defaultConfig: TextfieldConfig = {\n type: TEXTFIELD_DEFAULTS.TYPE,\n variant: TEXTFIELD_DEFAULTS.VARIANT,\n};\n\n/**\n * Creates the base configuration for Textfield component\n * @param {TextfieldConfig} config - User provided configuration\n * @returns {TextfieldConfig} Complete configuration with defaults applied\n */\nexport const createBaseConfig = (\n config: TextfieldConfig = {}\n): TextfieldConfig =>\n createComponentConfig(defaultConfig, config, \"textfield\") as TextfieldConfig;\n\n/**\n * Generates element configuration for the Textfield component\n * @param {TextfieldConfig} config - Textfield configuration\n * @returns {Object} Element configuration object for withElement\n */\nexport const getElementConfig = (config: TextfieldConfig) =>\n createElementConfig(config, {\n tag: \"div\",\n className: config.class,\n });\n\n/**\n * Creates API configuration for the Textfield component\n * @param {BaseComponent} comp - Component with disabled and lifecycle features\n * @returns {ApiOptions} API configuration object\n */\nexport const getApiConfig = (comp: BaseComponent): ApiOptions => ({\n disabled: {\n enable: comp.disabled?.enable,\n disable: comp.disabled?.disable,\n },\n lifecycle: {\n destroy: comp.lifecycle?.destroy,\n },\n});\n\nexport default defaultConfig;\n",
|
|
258
220
|
"// src/components/textfield/constants.ts\n\n/**\n * Textfield variant constants\n * @category Components\n */\nexport const TEXTFIELD_VARIANTS = {\n /** Filled variant with background and animated label */\n FILLED: \"filled\",\n /** Outlined variant with border and animated label */\n OUTLINED: \"outlined\",\n} as const;\n\n/**\n * Textfield state constants\n * @category Components\n */\nexport const TEXTFIELD_STATES = {\n /** Textfield is active (focused) */\n ACTIVE: \"active\",\n /** Textfield is inactive (not focused) */\n INACTIVE: \"inactive\",\n /** Textfield is disabled */\n DISABLED: \"disabled\",\n} as const;\n\n/**\n * Textfield type constants\n * @category Components\n */\nexport const TEXTFIELD_TYPES = {\n /** Standard text input */\n TEXT: \"text\",\n /** Password input with obscured characters */\n PASSWORD: \"password\",\n /** Email input with email validation */\n EMAIL: \"email\",\n /** Numeric input */\n NUMBER: \"number\",\n /** Telephone number input */\n TEL: \"tel\",\n /** URL input with URL validation */\n URL: \"url\",\n /** Search input */\n SEARCH: \"search\",\n /** Multiline text input (textarea) */\n MULTILINE: \"multiline\",\n} as const;\n\n/**\n * Textfield event constants\n * @category Components\n */\nexport const TEXTFIELD_EVENTS = {\n /** Fired when textfield value changes */\n CHANGE: \"change\",\n /** Fired during input */\n INPUT: \"input\",\n /** Fired when textfield receives focus */\n FOCUS: \"focus\",\n /** Fired when textfield loses focus */\n BLUR: \"blur\",\n /** Fired when enter key is pressed */\n ENTER: \"enter\",\n /** Fired when a key is pressed down */\n KEYDOWN: \"keydown\",\n /** Fired when a key is released */\n KEYUP: \"keyup\",\n} as const;\n\n/**\n * Textfield density constants\n * @category Components\n */\nexport const TEXTFIELD_DENSITY = {\n /** Default density (56px height) */\n DEFAULT: \"default\",\n /** Compact density (40px height) */\n COMPACT: \"compact\",\n} as const;\n\n/**\n * Default textfield configuration values\n * @category Components\n */\nexport const TEXTFIELD_DEFAULTS = {\n /** Default input type */\n TYPE: TEXTFIELD_TYPES.TEXT,\n /** Default visual variant */\n VARIANT: TEXTFIELD_VARIANTS.FILLED,\n /** Default density level */\n DENSITY: TEXTFIELD_DENSITY.DEFAULT,\n /** Default disabled state */\n DISABLED: false,\n /** Default required state */\n REQUIRED: false,\n /** Default error state */\n ERROR: false,\n /** Default label floating behavior (always floats on focus) */\n FLOAT_LABEL: true,\n /** Default animation duration in milliseconds */\n ANIMATION_DURATION: 150,\n} as const;\n\n/**\n * CSS class names used by the textfield component\n * @category Components\n */\nexport const TEXTFIELD_CLASSES = {\n /** Root element class */\n ROOT: \"textfield\",\n /** Input element class */\n INPUT: \"textfield-input\",\n /** Label element class */\n LABEL: \"textfield-label\",\n /** Container element class */\n CONTAINER: \"textfield-container\",\n /** Filled variant class */\n FILLED: \"textfield--filled\",\n /** Outlined variant class */\n OUTLINED: \"textfield--outlined\",\n /** Focused state class */\n FOCUSED: \"textfield--focused\",\n /** Disabled state class */\n DISABLED: \"textfield--disabled\",\n /** Error state class */\n ERROR: \"textfield--error\",\n /** Required indicator class */\n REQUIRED: \"textfield--required\",\n /** Floating label class */\n LABEL_FLOATING: \"textfield-label--floating\",\n /** Supporting text class */\n SUPPORTING_TEXT: \"textfield-supporting-text\",\n /** Supporting text error class */\n SUPPORTING_TEXT_ERROR: \"textfield-supporting-text--error\",\n /** Leading icon class */\n LEADING_ICON: \"textfield-leading-icon\",\n /** Trailing icon class */\n TRAILING_ICON: \"textfield-trailing-icon\",\n /** Prefix text class */\n PREFIX_TEXT: \"textfield-prefix-text\",\n /** Suffix text class */\n SUFFIX_TEXT: \"textfield-suffix-text\",\n /** Outline element class (for outlined variant) */\n OUTLINE: \"textfield-outline\",\n /** Multiline class */\n MULTILINE: \"textfield--multiline\",\n} as const;\n",
|
|
259
221
|
"// src/components/timepicker/timePicker.ts\n\nimport { PREFIX } from \"../../core/config\";\nimport { pipe } from \"../../core/compose\";\nimport { createBase, withElement } from \"../../core/compose/component\";\nimport { withEvents, withLifecycle } from \"../../core/compose/features\";\nimport {\n TimePickerConfig,\n TimePickerComponent,\n TimeValue,\n TIME_PERIOD,\n} from \"./types\";\nimport { createBaseConfig, getContainerConfig, getApiConfig } from \"./config\";\nimport { TIMEPICKER_Z_INDEX as Z_INDEX } from \"./constants\";\nimport { createTimePickerAPI } from \"./api\";\nimport { renderTimePicker } from \"./render\";\nimport { parseTime } from \"./utils\";\n\n/**\n * Creates a new TimePicker component\n * @param {TimePickerConfig} config - TimePicker configuration object\n * @returns {TimePickerComponent} TimePicker component instance\n */\nconst createTimePicker = (\n config: TimePickerConfig = {}\n): TimePickerComponent => {\n const baseConfig = createBaseConfig(config);\n\n try {\n // Create base component with container element\n const baseComponent = pipe(\n createBase,\n withEvents(),\n withElement(getContainerConfig(baseConfig)),\n withLifecycle()\n )(baseConfig);\n\n // Create modal element\n const modalElement = document.createElement(\"div\");\n modalElement.className = `${PREFIX}-time-picker-modal`;\n modalElement.style.display = \"none\";\n modalElement.style.position = \"fixed\";\n modalElement.style.top = \"0\";\n modalElement.style.left = \"0\";\n modalElement.style.width = \"100%\";\n modalElement.style.height = \"100%\";\n modalElement.style.backgroundColor = \"rgba(0, 0, 0, 0.4)\";\n modalElement.style.zIndex = Z_INDEX.MODAL.toString();\n modalElement.setAttribute(\"role\", \"presentation\");\n\n // Create dialog element\n const dialogElement = document.createElement(\"div\");\n dialogElement.className = [\n `${PREFIX}-time-picker-dialog`,\n `${PREFIX}-time-picker-dialog--${baseConfig.type}`,\n `${PREFIX}-time-picker-dialog--${baseConfig.orientation}`,\n `${PREFIX}-time-picker-dialog--${baseConfig.format}`,\n ].join(\" \");\n dialogElement.style.position = \"absolute\";\n dialogElement.style.top = \"50%\";\n dialogElement.style.left = \"50%\";\n dialogElement.style.transform = \"translate(-50%, -50%)\";\n dialogElement.style.zIndex = Z_INDEX.DIALOG.toString();\n\n // Append dialog to modal\n modalElement.appendChild(dialogElement);\n\n // Append modal to container (document.body by default)\n const container =\n typeof baseConfig.container === \"string\"\n ? document.querySelector(baseConfig.container) || document.body\n : baseConfig.container || document.body;\n\n container.appendChild(modalElement);\n\n // Parse initial time value\n let timeValue: TimeValue;\n if (baseConfig.value) {\n timeValue = parseTime(baseConfig.value, baseConfig.format);\n } else {\n // Default to current time\n const now = new Date();\n timeValue = {\n hours: now.getHours(),\n minutes: now.getMinutes(),\n seconds: baseConfig.showSeconds ? now.getSeconds() : 0,\n period: now.getHours() >= 12 ? TIME_PERIOD.PM : TIME_PERIOD.AM,\n };\n }\n\n // Render initial time picker content\n renderTimePicker(dialogElement, timeValue, baseConfig);\n\n // Create time picker API\n const timePicker = createTimePickerAPI(\n baseComponent,\n modalElement,\n dialogElement,\n timeValue,\n baseConfig,\n getApiConfig(baseComponent)\n );\n\n // Open time picker if initially open\n if (baseConfig.isOpen) {\n setTimeout(() => timePicker.open(), 0);\n }\n\n return timePicker;\n } catch (error) {\n console.error(\"TimePicker creation error:\", error);\n throw new Error(\n `Failed to create time picker: ${(error as Error).message}`\n );\n }\n};\n\nexport default createTimePicker;\n",
|
|
@@ -273,11 +235,11 @@
|
|
|
273
235
|
"// src/components/tooltip/api.ts\nimport {\n TooltipComponent,\n TOOLTIP_POSITIONS,\n TooltipPosition,\n DEFAULT_OFFSET,\n} from \"./types\";\n\ninterface ApiOptions {\n lifecycle: {\n destroy: () => void;\n };\n}\n\ninterface ComponentWithElements {\n element: HTMLElement;\n getClass: (name: string) => string;\n}\n\n/**\n * Enhances a tooltip component with API methods\n * @param {ApiOptions} options - API configuration options\n * @returns {Function} Higher-order function that adds API methods to component\n * @internal This is an internal utility for the Tooltip component\n */\nexport const withAPI =\n ({ lifecycle }: ApiOptions) =>\n (component: ComponentWithElements): TooltipComponent => {\n // Set up internal state\n let target: HTMLElement | null = null;\n let position: TooltipPosition = TOOLTIP_POSITIONS.BOTTOM;\n let isVisible = false;\n let showTimer: number | null = null;\n let hideTimer: number | null = null;\n const showDelay = 300;\n const hideDelay = 100;\n const showOnFocus = true;\n const showOnHover = true;\n\n // Create arrow element\n const arrowElement = document.createElement(\"div\");\n arrowElement.className = `${component.getClass(\"tooltip\")}__arrow`;\n component.element.appendChild(arrowElement);\n\n // Add to body (but hidden initially)\n document.body.appendChild(component.element);\n component.element.setAttribute(\"aria-hidden\", \"true\");\n\n /**\n * Calculate position based on target element and desired position\n */\n const calculatePosition = (): {\n top: number;\n left: number;\n arrowPosition?: string;\n } => {\n if (!target) return { top: 0, left: 0 };\n\n const tooltipRect = component.element.getBoundingClientRect();\n const targetRect = target.getBoundingClientRect();\n const scrollY = window.scrollY || window.pageYOffset;\n const scrollX = window.scrollX || window.pageXOffset;\n\n // Default offset\n const offset = DEFAULT_OFFSET;\n\n let top = 0;\n let left = 0;\n let arrowPosition: string | undefined;\n\n // Calculate position based on position value\n switch (position) {\n case TOOLTIP_POSITIONS.TOP:\n top = targetRect.top + scrollY - tooltipRect.height - offset;\n left =\n targetRect.left +\n scrollX +\n targetRect.width / 2 -\n tooltipRect.width / 2;\n arrowPosition = \"bottom\";\n break;\n\n case TOOLTIP_POSITIONS.TOP_START:\n top = targetRect.top + scrollY - tooltipRect.height - offset;\n left = targetRect.left + scrollX;\n arrowPosition = \"bottom-start\";\n break;\n\n case TOOLTIP_POSITIONS.TOP_END:\n top = targetRect.top + scrollY - tooltipRect.height - offset;\n left =\n targetRect.left + scrollX + targetRect.width - tooltipRect.width;\n arrowPosition = \"bottom-end\";\n break;\n\n case TOOLTIP_POSITIONS.RIGHT:\n top =\n targetRect.top +\n scrollY +\n targetRect.height / 2 -\n tooltipRect.height / 2;\n left = targetRect.left + scrollX + targetRect.width + offset;\n arrowPosition = \"left\";\n break;\n\n case TOOLTIP_POSITIONS.RIGHT_START:\n top = targetRect.top + scrollY;\n left = targetRect.left + scrollX + targetRect.width + offset;\n arrowPosition = \"left-start\";\n break;\n\n case TOOLTIP_POSITIONS.RIGHT_END:\n top =\n targetRect.top + scrollY + targetRect.height - tooltipRect.height;\n left = targetRect.left + scrollX + targetRect.width + offset;\n arrowPosition = \"left-end\";\n break;\n\n case TOOLTIP_POSITIONS.BOTTOM:\n top = targetRect.top + scrollY + targetRect.height + offset;\n left =\n targetRect.left +\n scrollX +\n targetRect.width / 2 -\n tooltipRect.width / 2;\n arrowPosition = \"top\";\n break;\n\n case TOOLTIP_POSITIONS.BOTTOM_START:\n top = targetRect.top + scrollY + targetRect.height + offset;\n left = targetRect.left + scrollX;\n arrowPosition = \"top-start\";\n break;\n\n case TOOLTIP_POSITIONS.BOTTOM_END:\n top = targetRect.top + scrollY + targetRect.height + offset;\n left =\n targetRect.left + scrollX + targetRect.width - tooltipRect.width;\n arrowPosition = \"top-end\";\n break;\n\n case TOOLTIP_POSITIONS.LEFT:\n top =\n targetRect.top +\n scrollY +\n targetRect.height / 2 -\n tooltipRect.height / 2;\n left = targetRect.left + scrollX - tooltipRect.width - offset;\n arrowPosition = \"right\";\n break;\n\n case TOOLTIP_POSITIONS.LEFT_START:\n top = targetRect.top + scrollY;\n left = targetRect.left + scrollX - tooltipRect.width - offset;\n arrowPosition = \"right-start\";\n break;\n\n case TOOLTIP_POSITIONS.LEFT_END:\n top =\n targetRect.top + scrollY + targetRect.height - tooltipRect.height;\n left = targetRect.left + scrollX - tooltipRect.width - offset;\n arrowPosition = \"right-end\";\n break;\n\n default:\n top = targetRect.top + scrollY + targetRect.height + offset;\n left =\n targetRect.left +\n scrollX +\n targetRect.width / 2 -\n tooltipRect.width / 2;\n arrowPosition = \"top\";\n }\n\n // Constrain to window boundaries\n const windowWidth = window.innerWidth;\n\n // Adjust horizontal position\n if (left < 0) {\n left = 0;\n } else if (left + tooltipRect.width > windowWidth) {\n left = windowWidth - tooltipRect.width;\n }\n\n return { top, left, arrowPosition };\n };\n\n /**\n * Handle events on target element\n */\n const addTargetEvents = (targetEl: HTMLElement) => {\n if (showOnHover) {\n targetEl.addEventListener(\"mouseenter\", handleTargetMouseEnter);\n targetEl.addEventListener(\"mouseleave\", handleTargetMouseLeave);\n }\n\n if (showOnFocus) {\n targetEl.addEventListener(\"focus\", handleTargetFocus);\n targetEl.addEventListener(\"blur\", handleTargetBlur);\n }\n };\n\n const removeTargetEvents = (targetEl: HTMLElement) => {\n if (targetEl) {\n targetEl.removeEventListener(\"mouseenter\", handleTargetMouseEnter);\n targetEl.removeEventListener(\"mouseleave\", handleTargetMouseLeave);\n targetEl.removeEventListener(\"focus\", handleTargetFocus);\n targetEl.removeEventListener(\"blur\", handleTargetBlur);\n }\n };\n\n // Event handlers\n const handleTargetMouseEnter = () => api.show();\n const handleTargetMouseLeave = () => api.hide();\n const handleTargetFocus = () => api.show();\n const handleTargetBlur = () => api.hide();\n\n // Create the API object\n const api: TooltipComponent = {\n element: component.element,\n target,\n lifecycle,\n\n getClass: component.getClass,\n\n setText(text) {\n // Create a text node\n const contentNode = document.createTextNode(text);\n\n // Clear existing content\n while (component.element.firstChild !== arrowElement) {\n component.element.removeChild(component.element.firstChild);\n }\n\n // Add new content before the arrow\n component.element.insertBefore(contentNode, arrowElement);\n\n // Update position if visible\n if (isVisible) {\n this.updatePosition();\n }\n\n return this;\n },\n\n getText() {\n // Return text content excluding the arrow element\n const clone = component.element.cloneNode(true) as HTMLElement;\n const arrowClone = clone.querySelector(\n `.${component.getClass(\"tooltip\")}__arrow`\n );\n if (arrowClone) {\n arrowClone.remove();\n }\n return clone.textContent || \"\";\n },\n\n setPosition(newPosition) {\n // Update position value\n position = newPosition;\n\n // Update position class\n const baseClass = component.getClass(\"tooltip\");\n\n // Remove existing position classes\n const positionClasses = Object.values(TOOLTIP_POSITIONS).map(\n (p) => `${baseClass}--${p}`\n );\n component.element.classList.remove(...positionClasses);\n\n // Add new position class\n component.element.classList.add(`${baseClass}--${newPosition}`);\n\n // Update position if visible\n if (isVisible) {\n this.updatePosition();\n }\n\n return this;\n },\n\n getPosition() {\n return position;\n },\n\n setTarget(newTarget) {\n // Remove events from old target\n if (target) {\n removeTargetEvents(target);\n }\n\n // Set new target\n target = newTarget;\n this.target = newTarget;\n\n // Set target's aria attributes\n target.setAttribute(\"aria-describedby\", component.element.id);\n\n // Add events to new target\n addTargetEvents(target);\n\n // Update position if visible\n if (isVisible) {\n this.updatePosition();\n }\n\n return this;\n },\n\n show(immediate = false) {\n // Clear any existing timers\n if (showTimer !== null) {\n window.clearTimeout(showTimer);\n showTimer = null;\n }\n\n if (hideTimer !== null) {\n window.clearTimeout(hideTimer);\n hideTimer = null;\n }\n\n const showTooltip = () => {\n if (!target) return this;\n\n // Show the tooltip\n component.element.setAttribute(\"aria-hidden\", \"false\");\n component.element.classList.add(\n `${component.getClass(\"tooltip\")}--visible`\n );\n isVisible = true;\n\n // Update position\n this.updatePosition();\n\n // Add resize listener\n window.addEventListener(\"resize\", handleWindowResize);\n window.addEventListener(\"scroll\", handleWindowScroll);\n };\n\n if (immediate) {\n showTooltip();\n } else {\n showTimer = window.setTimeout(showTooltip, showDelay);\n }\n\n return this;\n },\n\n hide(immediate = false) {\n // Clear any existing timers\n if (hideTimer !== null) {\n window.clearTimeout(hideTimer);\n hideTimer = null;\n }\n\n if (showTimer !== null) {\n window.clearTimeout(showTimer);\n showTimer = null;\n }\n\n const hideTooltip = () => {\n // Hide the tooltip\n component.element.setAttribute(\"aria-hidden\", \"true\");\n component.element.classList.remove(\n `${component.getClass(\"tooltip\")}--visible`\n );\n isVisible = false;\n\n // Remove resize and scroll listeners\n window.removeEventListener(\"resize\", handleWindowResize);\n window.removeEventListener(\"scroll\", handleWindowScroll);\n };\n\n if (immediate) {\n hideTooltip();\n } else {\n hideTimer = window.setTimeout(hideTooltip, hideDelay);\n }\n\n return this;\n },\n\n isVisible() {\n return isVisible;\n },\n\n updatePosition() {\n if (!target) return this;\n\n // Calculate position\n const { top, left, arrowPosition } = calculatePosition();\n\n // Update tooltip position\n component.element.style.top = `${Math.round(top)}px`;\n component.element.style.left = `${Math.round(left)}px`;\n\n // Update arrow position\n if (arrowPosition) {\n // Remove existing arrow position classes\n arrowElement.className = `${component.getClass(\"tooltip\")}__arrow`;\n // Add new position class\n arrowElement.classList.add(\n `${component.getClass(\"tooltip\")}__arrow--${arrowPosition}`\n );\n }\n\n return this;\n },\n\n destroy() {\n // Clear timers\n if (showTimer !== null) {\n window.clearTimeout(showTimer);\n }\n\n if (hideTimer !== null) {\n window.clearTimeout(hideTimer);\n }\n\n // Remove target events\n if (target) {\n removeTargetEvents(target);\n target.removeAttribute(\"aria-describedby\");\n }\n\n // Remove window events\n window.removeEventListener(\"resize\", handleWindowResize);\n window.removeEventListener(\"scroll\", handleWindowScroll);\n\n // Remove from DOM\n if (component.element.parentNode) {\n component.element.parentNode.removeChild(component.element);\n }\n\n // Call lifecycle destroy\n lifecycle.destroy();\n },\n };\n\n // Window event handlers\n const handleWindowResize = () => {\n api.updatePosition();\n };\n\n const handleWindowScroll = () => {\n api.updatePosition();\n };\n\n return api;\n };\n\nexport default withAPI;\n",
|
|
274
236
|
"// src/components/tooltip/config.ts\nimport {\n createComponentConfig,\n createElementConfig,\n} from \"../../core/config/component\";\nimport { TooltipConfig } from \"./types\";\nimport { TOOLTIP_DEFAULTS } from \"./constants\";\n\n/**\n * Default configuration for the Tooltip component\n */\nexport const defaultConfig: TooltipConfig = {\n position: TOOLTIP_DEFAULTS.POSITION,\n variant: TOOLTIP_DEFAULTS.VARIANT,\n visible: TOOLTIP_DEFAULTS.VISIBLE,\n showDelay: TOOLTIP_DEFAULTS.SHOW_DELAY,\n hideDelay: TOOLTIP_DEFAULTS.HIDE_DELAY,\n showOnFocus: TOOLTIP_DEFAULTS.SHOW_ON_FOCUS,\n showOnHover: TOOLTIP_DEFAULTS.SHOW_ON_HOVER,\n rich: TOOLTIP_DEFAULTS.RICH,\n};\n\n/**\n * Creates the base configuration for Tooltip component\n * @param {TooltipConfig} config - User provided configuration\n * @returns {TooltipConfig} Complete configuration with defaults applied\n */\nexport const createBaseConfig = (config: TooltipConfig = {}): TooltipConfig =>\n createComponentConfig(defaultConfig, config, \"tooltip\") as TooltipConfig;\n\n/**\n * Generates element configuration for the Tooltip component\n * @param {TooltipConfig} config - Tooltip configuration\n * @returns {Object} Element configuration object for withElement\n */\nexport const getElementConfig = (config: TooltipConfig) => {\n // Create the attributes object\n const attributes: Record<string, any> = {\n role: \"tooltip\",\n \"aria-hidden\": \"true\",\n };\n\n // Add z-index if provided\n if (config.zIndex !== undefined) {\n attributes[\"style\"] = `z-index: ${config.zIndex};`;\n }\n\n return createElementConfig(config, {\n tag: \"div\",\n attributes,\n className: [\n config.class,\n `${config.prefix}-tooltip--${config.position}`,\n `${config.prefix}-tooltip--${config.variant}`,\n ],\n text: config.text || \"\",\n });\n};\n\n/**\n * Creates API configuration for the Tooltip component\n * @param {Object} comp - Component with lifecycle feature\n * @returns {Object} API configuration object\n */\nexport const getApiConfig = (comp) => ({\n lifecycle: {\n destroy: () => comp.lifecycle.destroy(),\n },\n});\n\nexport default defaultConfig;\n",
|
|
275
237
|
"// src/components/tooltip/constants.ts\n\n/**\n * Tooltip positions\n * @category Components\n */\nexport const TOOLTIP_POSITIONS = {\n /** Position above the target element */\n TOP: 'top',\n /** Position to the right of the target element */\n RIGHT: 'right',\n /** Position below the target element */\n BOTTOM: 'bottom',\n /** Position to the left of the target element */\n LEFT: 'left',\n /** Position above and aligned to the start of the target */\n TOP_START: 'top-start',\n /** Position above and aligned to the end of the target */\n TOP_END: 'top-end',\n /** Position to the right and aligned to the start of the target */\n RIGHT_START: 'right-start',\n /** Position to the right and aligned to the end of the target */\n RIGHT_END: 'right-end',\n /** Position below and aligned to the start of the target */\n BOTTOM_START: 'bottom-start',\n /** Position below and aligned to the end of the target */\n BOTTOM_END: 'bottom-end',\n /** Position to the left and aligned to the start of the target */\n LEFT_START: 'left-start',\n /** Position to the left and aligned to the end of the target */\n LEFT_END: 'left-end'\n} as const;\n\n/**\n * Tooltip visual variants\n * @category Components\n */\nexport const TOOLTIP_VARIANTS = {\n /** Standard tooltip with background and arrow */\n DEFAULT: 'default',\n /** Rich tooltip with support for HTML content */\n RICH: 'rich',\n /** Plain text tooltip with minimal styling */\n PLAIN: 'plain'\n} as const;\n\n/**\n * Tooltip events\n * @category Components\n */\nexport const TOOLTIP_EVENTS = {\n /** Fired when tooltip becomes visible */\n SHOW: 'show',\n /** Fired when tooltip becomes hidden */\n HIDE: 'hide',\n /** Fired when mouse enters target element */\n ENTER: 'enter',\n /** Fired when mouse leaves target element */\n LEAVE: 'leave'\n} as const;\n\n/**\n * Default configuration values for tooltip\n * @category Components\n */\nexport const TOOLTIP_DEFAULTS = {\n /** Default tooltip position */\n POSITION: TOOLTIP_POSITIONS.BOTTOM,\n /** Default visual variant */\n VARIANT: TOOLTIP_VARIANTS.DEFAULT,\n /** Default visibility state */\n VISIBLE: false,\n /** Default show delay in milliseconds */\n SHOW_DELAY: 300,\n /** Default hide delay in milliseconds */\n HIDE_DELAY: 100,\n /** Default offset from target in pixels */\n OFFSET: 8,\n /** Default arrow size in pixels */\n ARROW_SIZE: 8,\n /** Whether to show tooltip on focus by default */\n SHOW_ON_FOCUS: true,\n /** Whether to show tooltip on hover by default */\n SHOW_ON_HOVER: true,\n /** Whether to allow rich HTML content by default */\n RICH: false\n} as const;\n\n/**\n * CSS class names used by the tooltip component\n * @category Components\n */\nexport const TOOLTIP_CLASSES = {\n /** Root element class */\n ROOT: 'tooltip',\n /** Container for the tooltip content */\n CONTAINER: 'tooltip-container',\n /** Arrow element class */\n ARROW: 'tooltip-arrow',\n /** Content element class */\n CONTENT: 'tooltip-content',\n /** Visible state class */\n VISIBLE: 'tooltip--visible',\n /** Hidden state class */\n HIDDEN: 'tooltip--hidden',\n /** Default variant class */\n DEFAULT: 'tooltip--default',\n /** Rich variant class */\n RICH: 'tooltip--rich',\n /** Plain variant class */\n PLAIN: 'tooltip--plain',\n /** Position prefix - append position name (e.g. tooltip--top) */\n POSITION_PREFIX: 'tooltip--'\n} as const;",
|
|
276
|
-
"// src/components/list/list.ts\n\nimport { pipe } from
|
|
277
|
-
"// src/components/list/features/
|
|
278
|
-
"// src/components/list/features/selection.ts\n\nimport { LIST_CLASSES, LIST_EVENTS } from \"../constants\";\nimport { addClass, hasClass, removeClass } from \"../../../core/dom\";\nimport { PREFIX } from \"../../../core\";\n\n/**\n * Adds selection management capabilities to a list component\n *
|
|
279
|
-
"// src/components/list/api.
|
|
280
|
-
"// src/components/list/config.ts\n\nimport {
|
|
238
|
+
"// src/components/list/list.ts\n\nimport { pipe } from \"../../core/compose/pipe\";\nimport { createBase, withElement } from \"../../core/compose/component\";\nimport { withEvents, withLifecycle } from \"../../core/compose/features\";\nimport { withRenderer, withSelection } from \"./features\";\nimport { withAPI } from \"./api\";\nimport { createBaseConfig, getElementConfig, getApiConfig } from \"./config\";\n\n/**\n * Creates a new List component\n *\n * The List component provides a simple way to render static arrays of data\n * with built-in selection capabilities. For virtual scrolling and complex\n * data management, use the VirtualList component from mtrl-addons.\n *\n * @param {Object} config - Configuration options for the list\n * @returns {Object} List component instance\n */\nconst createList = (config = {}) => {\n try {\n // Process the configuration with defaults\n const baseConfig = createBaseConfig(config);\n\n console.log(`📋 Creating list with ${baseConfig.items?.length || 0} items`);\n\n // Create the component through functional composition\n const component = pipe(\n createBase,\n withEvents(),\n withElement(getElementConfig(baseConfig)),\n withRenderer(baseConfig), // Item rendering\n withSelection(baseConfig), // Selection capabilities\n withLifecycle(),\n (comp) => withAPI(getApiConfig(comp, baseConfig))(comp) // Apply public API\n )(baseConfig);\n\n return component;\n } catch (error) {\n console.error(\"List creation error:\", error);\n throw new Error(`Failed to create list: ${error.message}`);\n }\n};\n\nexport default createList;",
|
|
239
|
+
"// src/components/list/features/renderer.ts\n\nimport { LIST_CLASSES, LIST_EVENTS } from '../constants';\n\n/**\n * Adds item rendering capabilities to a component\n * Renders static data directly without virtual scrolling or complex management\n * \n * @param config - Configuration options\n * @returns Function that enhances a component with item rendering capabilities\n */\nexport const withRenderer = (config) => component => {\n if (!component.element) {\n console.warn('Cannot initialize list renderer: missing element');\n return component;\n }\n\n const items = config.items || [];\n const userRenderItem = config.renderItem;\n \n // Create container for list items\n const listContainer = document.createElement('div');\n listContainer.className = 'mtrl-list-content';\n listContainer.setAttribute('role', 'list');\n \n component.element.appendChild(listContainer);\n\n /**\n * Default item renderer when none is provided\n */\n function renderDefaultItem(item, index) {\n const element = document.createElement('div');\n element.className = LIST_CLASSES.ITEM;\n element.setAttribute('role', 'listitem');\n \n // Create content wrapper\n const content = document.createElement('div');\n content.className = 'mtrl-list-item-content';\n \n const text = document.createElement('div');\n text.className = 'mtrl-list-item-text';\n text.textContent = item.text || item.title || item.headline || item.name || item.id || String(item);\n \n content.appendChild(text);\n element.appendChild(content);\n \n return element;\n }\n\n /**\n * Renders all items directly\n */\n const renderAllItems = () => {\n // Clear existing content\n listContainer.innerHTML = '';\n \n if (!items || items.length === 0) {\n listContainer.innerHTML = '<div class=\"mtrl-list-empty\">No items</div>';\n return;\n }\n \n // Create document fragment for efficient DOM manipulation\n const fragment = document.createDocumentFragment();\n \n items.forEach((item, index) => {\n if (item == null) return;\n \n // Create the item element\n const element = userRenderItem \n ? userRenderItem(item, index)\n : renderDefaultItem(item, index);\n \n if (!element) return;\n \n // Ensure element has proper classes and attributes\n if (!element.classList.contains(LIST_CLASSES.ITEM)) {\n element.classList.add(LIST_CLASSES.ITEM);\n }\n \n if (!element.hasAttribute('role')) {\n element.setAttribute('role', 'listitem');\n }\n \n // Add data-id for selection targeting (use index as fallback)\n const itemId = item?.id || String(index);\n if (!element.hasAttribute('data-id')) {\n element.setAttribute('data-id', itemId);\n }\n \n fragment.appendChild(element);\n });\n \n listContainer.appendChild(fragment);\n \n // Emit load event for consistency\n component.emit?.(LIST_EVENTS.LOAD, {\n items,\n loading: false,\n hasNext: false,\n hasPrev: false,\n component\n });\n \n console.log(`📋 Rendered ${items.length} items directly`);\n };\n\n /**\n * Scroll to a specific item by ID\n */\n const scrollToItem = (itemId, position = 'start', animate = false) => {\n const element = listContainer.querySelector(`[data-id=\"${itemId}\"]`);\n if (element) {\n element.scrollIntoView({ \n behavior: animate ? 'smooth' : 'auto', \n block: position === 'center' ? 'center' : position === 'end' ? 'end' : 'start'\n });\n }\n };\n\n /**\n * Scroll to a specific index\n */\n const scrollToIndex = (index, position = 'start', animate = false) => {\n if (index < 0 || index >= items.length) return;\n \n const element = listContainer.children[index];\n if (element) {\n element.scrollIntoView({ \n behavior: animate ? 'smooth' : 'auto', \n block: position === 'center' ? 'center' : position === 'end' ? 'end' : 'start'\n });\n }\n };\n\n // Initial render\n renderAllItems();\n\n // Clean up on destruction\n if (component.lifecycle?.destroy) {\n const originalDestroy = component.lifecycle.destroy;\n component.lifecycle.destroy = () => {\n listContainer.innerHTML = '';\n originalDestroy();\n };\n }\n\n // Return component with list renderer API\n return {\n ...component,\n list: {\n // Core methods\n getItems: () => items,\n getAllItems: () => items,\n getVisibleItems: () => items, // All items are \"visible\" in rendered lists\n refresh: renderAllItems,\n \n // Scrolling methods\n scrollToItem,\n scrollToIndex,\n \n // Compatibility methods (no-ops for rendered lists)\n loadNext: () => Promise.resolve({ hasNext: false, items: [] }),\n loadPage: () => Promise.resolve({ hasNext: false, items: [] }),\n loadPrevious: () => Promise.resolve({ hasPrev: false, items: [] }),\n scrollNext: () => Promise.resolve({ hasNext: false, items: [] }),\n scrollPrevious: () => Promise.resolve({ hasPrev: false, items: [] }),\n scrollToItemById: (itemId, position, animate) => {\n scrollToItem(itemId, position, animate);\n return Promise.resolve();\n },\n onCollectionChange: () => () => {}, // No-op unsubscribe\n onPageChange: () => () => {}, // No-op unsubscribe\n getCurrentPage: () => 1,\n getPageSize: () => items.length,\n getCollection: () => null,\n isApiMode: () => false,\n isLoading: () => false,\n hasNextPage: () => false,\n }\n };\n};\n\nexport default withRenderer;",
|
|
240
|
+
"// src/components/list/features/selection.ts\n\nimport { LIST_CLASSES, LIST_EVENTS } from \"../constants\";\nimport { addClass, hasClass, removeClass } from \"../../../core/dom\";\nimport { PREFIX } from \"../../../core\";\n\n/**\n * Adds selection management capabilities to a list component\n * Simplified implementation for rendered lists\n *\n * @param config - Configuration options\n * @returns Function that enhances a component with selection management\n */\nexport const withSelection = (config) => (component) => {\n if (!component.element || !config.trackSelection) {\n return {\n ...component,\n // Return no-op methods when selection is disabled\n getSelectedItems: () => [],\n getSelectedItemIds: () => [],\n isItemSelected: () => false,\n selectItem: () => component,\n deselectItem: () => component,\n clearSelection: () => component,\n setSelection: () => component,\n };\n }\n\n // Track selected items\n const selectedItems = new Set();\n\n // Initialize from initialSelection if provided\n if (Array.isArray(config.initialSelection)) {\n config.initialSelection.forEach((id) => selectedItems.add(String(id)));\n }\n\n // Initialize from items marked as selected\n if (Array.isArray(config.items)) {\n config.items.forEach((item, index) => {\n if (item?.selected) {\n const itemId = item.id || String(index);\n selectedItems.add(String(itemId));\n }\n });\n }\n\n /**\n * Apply selection state to visible elements\n */\n const applySelectionState = () => {\n const itemElements = component.element?.querySelectorAll(\"[data-id]\") || [];\n itemElements.forEach((el) => {\n const itemId = el.getAttribute(\"data-id\");\n const isSelected = selectedItems.has(itemId);\n\n if (isSelected && !hasClass(el as HTMLElement, LIST_CLASSES.SELECTED)) {\n addClass(el as HTMLElement, LIST_CLASSES.SELECTED);\n } else if (!isSelected && hasClass(el as HTMLElement, LIST_CLASSES.SELECTED)) {\n removeClass(el as HTMLElement, LIST_CLASSES.SELECTED);\n }\n });\n };\n\n /**\n * Handle item clicks for selection\n */\n const handleItemClick = (e) => {\n const itemElement = e.target.closest(\"[data-id]\");\n if (!itemElement) return;\n\n const itemId = itemElement.getAttribute(\"data-id\");\n if (!itemId) return;\n\n // Find the item data\n const items = component.list?.getItems() || [];\n let item = items.find((i) => String(i?.id) === itemId);\n \n // If no ID match, try by index\n if (!item) {\n const index = parseInt(itemId, 10);\n if (!isNaN(index) && index >= 0 && index < items.length) {\n item = items[index];\n }\n }\n\n if (!item) {\n console.warn(`Item not found for ID: ${itemId}`);\n return;\n }\n\n // Create selection event data\n const selectionEvent = {\n item,\n element: itemElement,\n originalEvent: e,\n component,\n preventDefault: () => {\n selectionEvent.defaultPrevented = true;\n },\n defaultPrevented: false,\n };\n\n // Emit event before modifying selection\n component.emit?.(LIST_EVENTS.SELECT, selectionEvent);\n\n // Exit if default was prevented\n if (selectionEvent.defaultPrevented) return;\n\n // Toggle selection based on mode\n if (config.multiSelect) {\n if (selectedItems.has(itemId)) {\n selectedItems.delete(itemId);\n removeClass(itemElement as HTMLElement, LIST_CLASSES.SELECTED);\n } else {\n selectedItems.add(itemId);\n addClass(itemElement as HTMLElement, LIST_CLASSES.SELECTED);\n }\n } else {\n // Single-select mode\n const isCurrentlySelected = hasClass(itemElement as HTMLElement, LIST_CLASSES.SELECTED);\n\n // Clear all previous selections\n const prevSelected = component.element.querySelectorAll(`.${PREFIX}-${LIST_CLASSES.SELECTED}`);\n prevSelected.forEach((el) => removeClass(el as HTMLElement, LIST_CLASSES.SELECTED));\n selectedItems.clear();\n\n // Add new selection if not already selected\n if (!isCurrentlySelected) {\n selectedItems.add(itemId);\n addClass(itemElement as HTMLElement, LIST_CLASSES.SELECTED);\n }\n }\n };\n\n /**\n * Update item selection state\n */\n const updateItemState = (itemId, selected) => {\n const stringId = String(itemId);\n \n if (selected) {\n selectedItems.add(stringId);\n } else {\n selectedItems.delete(stringId);\n }\n\n // Update DOM if element is visible\n const itemElement = component.element.querySelector(`[data-id=\"${stringId}\"]`);\n if (itemElement) {\n if (selected && !hasClass(itemElement as HTMLElement, LIST_CLASSES.SELECTED)) {\n addClass(itemElement as HTMLElement, LIST_CLASSES.SELECTED);\n } else if (!selected && hasClass(itemElement as HTMLElement, LIST_CLASSES.SELECTED)) {\n removeClass(itemElement as HTMLElement, LIST_CLASSES.SELECTED);\n }\n }\n };\n\n // Add event listener\n component.element.addEventListener(\"click\", handleItemClick);\n\n // Apply initial selection state after a brief delay to ensure DOM is ready\n setTimeout(applySelectionState, 10);\n\n // Clean up on destruction\n if (component.lifecycle?.destroy) {\n const originalDestroy = component.lifecycle.destroy;\n component.lifecycle.destroy = () => {\n component.element.removeEventListener(\"click\", handleItemClick);\n originalDestroy();\n };\n }\n\n // Return component with selection capabilities\n return {\n ...component,\n getSelectedItems: () => {\n const items = component.list?.getItems() || [];\n return items.filter((item, index) => {\n const itemId = item?.id || String(index);\n return selectedItems.has(String(itemId));\n });\n },\n getSelectedItemIds: () => Array.from(selectedItems),\n isItemSelected: (itemId) => selectedItems.has(String(itemId)),\n selectItem: (itemId) => {\n updateItemState(itemId, true);\n return component;\n },\n deselectItem: (itemId) => {\n updateItemState(itemId, false);\n return component;\n },\n clearSelection: () => {\n if (selectedItems.size > 0) {\n selectedItems.clear();\n component.element\n .querySelectorAll(`.${PREFIX}-${LIST_CLASSES.SELECTED}`)\n .forEach((el) => removeClass(el as HTMLElement, LIST_CLASSES.SELECTED));\n }\n return component;\n },\n setSelection: (itemIds) => {\n selectedItems.clear();\n if (Array.isArray(itemIds)) {\n itemIds.forEach((itemId) => selectedItems.add(String(itemId)));\n }\n applySelectionState();\n return component;\n },\n };\n};\n\nexport default withSelection;",
|
|
241
|
+
"// src/components/list/api.ts\n\n/**\n * API configuration options for List component\n */\ninterface ApiOptions {\n list: {\n refresh: () => void;\n getItems: () => any[];\n getAllItems: () => any[];\n getVisibleItems: () => any[];\n scrollToItem: (\n itemId: string | number,\n position?: \"start\" | \"center\" | \"end\",\n animate?: boolean\n ) => void;\n scrollToIndex: (\n index: number,\n position?: \"start\" | \"center\" | \"end\",\n animate?: boolean\n ) => void;\n isLoading: () => boolean;\n hasNextPage: () => boolean;\n };\n selection: {\n getSelectedItems: () => any[];\n getSelectedItemIds: () => string[];\n isItemSelected: (itemId: string | number) => boolean;\n selectItem: (itemId: string | number) => any;\n deselectItem: (itemId: string | number) => any;\n clearSelection: () => any;\n setSelection: (itemIds: (string | number)[]) => any;\n };\n events: {\n on: (event: string, handler: Function) => any;\n off: (event: string, handler: Function) => any;\n };\n lifecycle: {\n destroy: () => void;\n };\n config: {\n animate?: boolean;\n };\n}\n\n/**\n * Component with required elements and methods for API enhancement\n */\ninterface ComponentWithElements {\n element: HTMLElement;\n on?: (event: string, handler: Function) => any;\n off?: (event: string, handler: Function) => any;\n}\n\n/**\n * Enhances a List component with API methods\n * @param {ApiOptions} options - API configuration options\n * @returns {Function} Higher-order function that adds API methods to component\n */\nexport const withAPI =\n ({ list, selection, events, lifecycle, config }: ApiOptions) =>\n (component: ComponentWithElements) => ({\n ...component,\n element: component.element,\n\n /**\n * Refreshes the list display\n * @returns {Promise<Object>} Promise that resolves with component\n */\n refresh: async () => {\n list.refresh();\n return component;\n },\n\n /**\n * Gets all items in the list\n * @returns {Array} All items\n */\n getAllItems: () => list.getAllItems(),\n\n /**\n * Gets all visible items (same as getAllItems for rendered lists)\n * @returns {Array} Visible items\n */\n getVisibleItems: () => list.getVisibleItems(),\n\n /**\n * Scrolls to a specific item by ID\n * @param {string|number} itemId - Item ID to scroll to\n * @param {string} position - Position ('start', 'center', 'end')\n * @param {boolean} animate - Whether to animate the scroll\n * @returns {Object} Component instance for chaining\n */\n scrollToItem: (\n itemId: string | number,\n position?: \"start\" | \"center\" | \"end\",\n animate?: boolean\n ) => {\n const shouldAnimate = animate !== undefined ? animate : config?.animate || false;\n list.scrollToItem(itemId, position, shouldAnimate);\n return component;\n },\n\n /**\n * Scrolls to a specific index\n * @param {number} index - Index to scroll to\n * @param {string} position - Position ('start', 'center', 'end')\n * @param {boolean} animate - Whether to animate the scroll\n * @returns {Promise<Object>} Promise that resolves when scroll is complete\n */\n scrollToIndex: async (\n index: number,\n position?: \"start\" | \"center\" | \"end\",\n animate?: boolean\n ) => {\n const shouldAnimate = animate !== undefined ? animate : config?.animate || false;\n list.scrollToIndex(index, position, shouldAnimate);\n return component;\n },\n\n /**\n * Checks if the list is currently loading (always false for rendered lists)\n * @returns {boolean} Always false\n */\n isLoading: () => list.isLoading(),\n\n /**\n * Checks if the list has more items to load (always false for rendered lists)\n * @returns {boolean} Always false\n */\n hasNextPage: () => list.hasNextPage(),\n\n /**\n * Gets the currently selected items\n * @returns {Array} Selected items\n */\n getSelectedItems: () => selection.getSelectedItems(),\n\n /**\n * Gets the IDs of currently selected items\n * @returns {Array} Selected item IDs\n */\n getSelectedItemIds: () => selection.getSelectedItemIds(),\n\n /**\n * Checks if an item is selected\n * @param {string|number} itemId - Item ID to check\n * @returns {boolean} True if item is selected\n */\n isItemSelected: (itemId: string | number) => selection.isItemSelected(itemId),\n\n /**\n * Selects an item\n * @param {string|number} itemId - Item ID to select\n * @returns {Object} Component instance for chaining\n */\n selectItem: (itemId: string | number) => {\n selection.selectItem(itemId);\n return component;\n },\n\n /**\n * Deselects an item\n * @param {string|number} itemId - Item ID to deselect\n * @returns {Object} Component instance for chaining\n */\n deselectItem: (itemId: string | number) => {\n selection.deselectItem(itemId);\n return component;\n },\n\n /**\n * Clears all selections\n * @returns {Object} Component instance for chaining\n */\n clearSelection: () => {\n selection.clearSelection();\n return component;\n },\n\n /**\n * Sets the selection to the specified item IDs\n * @param {Array} itemIds - Item IDs to select\n * @returns {Object} Component instance for chaining\n */\n setSelection: (itemIds: (string | number)[]) => {\n selection.setSelection(itemIds);\n return component;\n },\n\n /**\n * Adds an event listener to the list\n * @param {string} event - Event name\n * @param {Function} handler - Event handler\n * @returns {Object} Component instance for chaining\n */\n on: (event, handler) => {\n events.on(event, handler);\n return component;\n },\n\n /**\n * Removes an event listener from the list\n * @param {string} event - Event name\n * @param {Function} handler - Event handler\n * @returns {Object} Component instance for chaining\n */\n off: (event, handler) => {\n events.off(event, handler);\n return component;\n },\n\n /**\n * Destroys the component and cleans up resources\n */\n destroy: () => {\n lifecycle.destroy();\n },\n });\n\nexport default withAPI;",
|
|
242
|
+
"// src/components/list/config.ts\n\nimport {\n createComponentConfig,\n createElementConfig as coreCreateElementConfig,\n} from \"../../core/config/component\";\nimport { LIST_CLASSES } from \"./constants\";\nimport { ListConfig } from \"./types\";\n\n/**\n * Default configuration for the List component\n */\nexport const defaultConfig: Partial<ListConfig> = {\n // Static data\n items: [],\n\n // Behavior settings\n trackSelection: true,\n multiSelect: false,\n animate: false,\n};\n\n/**\n * Creates the base configuration for List component\n * @param {ListConfig} config - User provided configuration\n * @returns {Object} Complete configuration with defaults applied\n */\nexport const createBaseConfig = (config: Partial<ListConfig> = {}) => {\n // Validate required props\n if (!Array.isArray(config.items) && !config.renderItem) {\n throw new Error(\"List requires either items array or renderItem function\");\n }\n\n // If items are provided but no renderItem, create a default renderer\n if (Array.isArray(config.items) && config.items.length > 0 && !config.renderItem) {\n config.renderItem = (item) => {\n const element = document.createElement(\"div\");\n element.className = \"mtrl-list-item\";\n element.textContent =\n item.text || item.title || item.headline || item.name || item.id || String(item);\n return element;\n };\n }\n\n // Create component config with defaults\n return createComponentConfig(defaultConfig, config, \"list\");\n};\n\n/**\n * Generates element configuration for the List component\n * @param {Object} config - List configuration\n * @returns {Object} Element configuration object for withElement\n */\nexport const getElementConfig = (config) => {\n const attributes = {\n role: \"list\",\n tabindex: \"0\",\n };\n\n // Add ARIA attributes for accessibility\n if (config.ariaLabel) {\n attributes[\"aria-label\"] = config.ariaLabel;\n }\n\n // Create element config\n return coreCreateElementConfig(config, {\n tag: \"div\",\n attrs: attributes,\n className: [LIST_CLASSES.CONTAINER, config.class],\n forwardEvents: {\n scroll: true,\n keydown: true,\n },\n });\n};\n\n/**\n * Creates API configuration for the List component\n * @param {Object} component - Component with list features\n * @param {Object} config - Base configuration\n * @returns {Object} API configuration object\n */\nexport const getApiConfig = (component, config) => ({\n list: {\n refresh: component.list?.refresh,\n getItems: component.list?.getItems,\n getAllItems: component.list?.getAllItems,\n getVisibleItems: component.list?.getVisibleItems,\n scrollToItem: component.list?.scrollToItem,\n scrollToIndex: component.list?.scrollToIndex,\n isLoading: () => false, // Simple lists are never loading\n hasNextPage: () => false, // Simple lists don't paginate\n },\n selection: {\n getSelectedItems: component.getSelectedItems,\n getSelectedItemIds: component.getSelectedItemIds,\n isItemSelected: component.isItemSelected,\n selectItem: component.selectItem,\n deselectItem: component.deselectItem,\n clearSelection: component.clearSelection,\n setSelection: component.setSelection,\n },\n events: {\n on: component.on,\n off: component.off,\n },\n lifecycle: {\n destroy: component.lifecycle?.destroy,\n },\n config: {\n animate: config?.animate,\n },\n});\n\nexport default defaultConfig;",
|
|
281
243
|
"// src/components/navigation/system/state.ts\n\nimport { NavigationSystemConfig, NavigationSystemState } from './types';\n\n/**\n * Create the initial state for the navigation system\n * \n * @param options - Configuration options\n * @returns Initial system state\n */\nexport const createInitialState = (options: NavigationSystemConfig = {}): NavigationSystemState => {\n return {\n rail: null,\n drawer: null,\n activeSection: options.activeSection || null,\n activeSubsection: options.activeSubsection || null,\n items: options.items || {},\n mouseInDrawer: false,\n mouseInRail: false,\n hoverTimer: null,\n closeTimer: null,\n processingChange: false,\n isMobile: false,\n overlayElement: null,\n closeButtonElement: null,\n resizeObserver: null,\n outsideClickHandler: null,\n outsideClickHandlerSet: false\n };\n};\n\n/**\n * Create default configuration with sensible defaults\n * \n * @param options - User-provided configuration\n * @returns Complete configuration with defaults\n */\nexport const createConfig = (options: NavigationSystemConfig = {}): Required<Pick<NavigationSystemConfig, \n 'animateDrawer' | 'showLabelsOnRail' | 'hideDrawerOnClick' | 'expanded' | \n 'hoverDelay' | 'closeDelay' | 'railOptions' | 'drawerOptions'>> => {\n return {\n // Display options\n animateDrawer: options.animateDrawer !== false,\n showLabelsOnRail: options.showLabelsOnRail !== false,\n hideDrawerOnClick: options.hideDrawerOnClick || false,\n expanded: options.expanded === true,\n \n // Timing options (ms)\n hoverDelay: options.hoverDelay || 200,\n closeDelay: options.closeDelay || 100,\n \n // Component options\n railOptions: options.railOptions || {},\n drawerOptions: options.drawerOptions || {}\n };\n};\n\n/**\n * Create mobile configuration with defaults\n * \n * @param options - User-provided configuration\n * @returns Mobile-specific configuration\n */\nexport const createMobileConfig = (options: NavigationSystemConfig = {}): Required<Pick<NavigationSystemConfig, \n 'breakpoint' | 'lockBodyScroll' | 'hideOnClickOutside' | 'enableSwipeGestures' | \n 'optimizeForTouch' | 'overlayClass' | 'closeButtonClass' | 'bodyLockClass'>> => {\n return {\n breakpoint: options.breakpoint || 960,\n lockBodyScroll: options.lockBodyScroll !== false,\n hideOnClickOutside: options.hideOnClickOutside !== false,\n enableSwipeGestures: options.enableSwipeGestures !== false,\n optimizeForTouch: options.optimizeForTouch !== false,\n overlayClass: options.overlayClass || 'mtrl-nav-overlay',\n closeButtonClass: options.closeButtonClass || 'mtrl-nav-close-btn',\n bodyLockClass: options.bodyLockClass || 'mtrl-body-drawer-open'\n };\n};",
|
|
282
244
|
"// src/components/navigation/system/core.ts\n\nimport { NavigationSystemState, NavigationItem } from \"./types\";\nimport { isMobileDevice } from \"../../../core/utils/mobile\";\nimport createNavigation from \"../navigation\";\n\n/**\n * Update drawer content for a specific section WITHOUT changing visibility\n *\n * @param state - System state\n * @param sectionId - Section ID to display\n * @param showDrawer - Function to show the drawer\n * @param hideDrawer - Function to hide the drawer\n */\nexport const updateDrawerContent = (\n state: NavigationSystemState,\n sectionId: string,\n showDrawer: () => void,\n hideDrawer: () => void\n): void => {\n if (!state.drawer || !sectionId || !state.items[sectionId]) {\n return;\n }\n\n // Get section items\n const sectionData = state.items[sectionId];\n const items = sectionData.items || [];\n\n // If no items, hide drawer and exit\n if (items.length === 0) {\n hideDrawer();\n return;\n }\n\n // Clear existing drawer items first using the API\n const currentItems = state.drawer.getAllItems();\n if (currentItems?.length > 0) {\n currentItems.forEach((item: any) => {\n state.drawer.removeItem(item.config.id);\n });\n }\n\n // Add new items to drawer through the API\n items.forEach((item: NavigationItem) => {\n state.drawer.addItem(item);\n });\n\n // Show the drawer\n showDrawer();\n};\n\n/**\n * Creates the rail navigation component\n *\n * @param state - System state\n * @param config - System configuration\n * @returns Rail navigation component\n */\nexport const createRailNavigation = (\n state: NavigationSystemState,\n config: any\n): any => {\n // Build rail items from sections\n const railItems = Object.keys(state.items || {}).map((sectionId) => ({\n id: sectionId,\n label: state.items[sectionId]?.label || sectionId,\n icon: state.items[sectionId]?.icon || \"\",\n active: sectionId === state.activeSection,\n }));\n\n // Create the rail component\n const rail = createNavigation({\n variant: \"rail\",\n position: \"left\",\n showLabels: config.showLabelsOnRail,\n items: railItems,\n ...config.railOptions,\n });\n\n document.body.appendChild(rail.element);\n return rail;\n};\n\n/**\n * Creates the drawer navigation component\n *\n * @param state - System state\n * @param config - System configuration\n * @returns Drawer navigation component\n */\nexport const createDrawerNavigation = (\n state: NavigationSystemState,\n config: any\n): any => {\n // Create the drawer component (initially empty)\n const drawer = createNavigation({\n variant: \"drawer\",\n position: \"left\",\n items: [], // Start empty\n ...config.drawerOptions,\n });\n\n document.body.appendChild(drawer.element);\n\n // Mark drawer with identifier\n drawer.element.dataset.id = \"drawer\";\n\n // IMPORTANT: Make drawer initially hidden unless explicitly expanded\n if (!config.expanded) {\n drawer.element.classList.add(\"mtrl-nav--hidden\");\n drawer.element.setAttribute(\"aria-hidden\", \"true\");\n }\n\n return drawer;\n};\n\n/**\n * Shows the drawer with mobile-specific behaviors\n *\n * @param state - System state\n * @param mobileConfig - Mobile configuration\n */\nexport const showDrawer = (\n state: NavigationSystemState,\n mobileConfig: any\n): void => {\n if (!state.drawer) return;\n\n state.drawer.element.classList.remove(\"mtrl-nav--hidden\");\n state.drawer.element.setAttribute(\"aria-hidden\", \"false\");\n\n // Apply mobile-specific behaviors\n if (state.isMobile) {\n if (state.overlayElement) {\n state.overlayElement.classList.add(\"active\");\n state.overlayElement.setAttribute(\"aria-hidden\", \"false\");\n }\n\n // Lock body scroll if enabled\n if (mobileConfig.lockBodyScroll) {\n document.body.classList.add(mobileConfig.bodyLockClass);\n }\n\n // Ensure close button is visible\n if (state.closeButtonElement) {\n state.closeButtonElement.style.display = \"flex\";\n }\n }\n};\n\n/**\n * Hides the drawer with mobile-specific behaviors\n *\n * @param state - System state\n * @param mobileConfig - Mobile configuration\n */\nexport const hideDrawer = (\n state: NavigationSystemState,\n mobileConfig: any\n): void => {\n if (!state.drawer) return;\n\n state.drawer.element.classList.add(\"mtrl-nav--hidden\");\n state.drawer.element.setAttribute(\"aria-hidden\", \"true\");\n\n // Remove mobile-specific effects\n if (state.overlayElement) {\n state.overlayElement.classList.remove(\"active\");\n state.overlayElement.setAttribute(\"aria-hidden\", \"true\");\n }\n\n // Unlock body scroll\n if (mobileConfig.lockBodyScroll) {\n document.body.classList.remove(mobileConfig.bodyLockClass);\n }\n};\n\n/**\n * Checks if drawer is visible\n *\n * @param state - System state\n * @returns true if drawer is visible\n */\nexport const isDrawerVisible = (state: NavigationSystemState): boolean => {\n if (!state.drawer) return false;\n return !state.drawer.element.classList.contains(\"mtrl-nav--hidden\");\n};\n\n/**\n * Checks and updates the mobile state\n *\n * @param state - System state\n * @param mobileConfig - Mobile configuration\n * @param setupMobileMode - Function to set up mobile mode\n * @param teardownMobileMode - Function to tear down mobile mode\n * @param systemApi - Reference to the public system API\n */\nexport const checkMobileState = (\n state: NavigationSystemState,\n mobileConfig: any,\n setupMobileMode: () => void,\n teardownMobileMode: () => void,\n systemApi: any\n): void => {\n const prevState = state.isMobile;\n state.isMobile =\n window.innerWidth <= mobileConfig.breakpoint || isMobileDevice();\n\n // If state changed, adjust UI\n if (prevState !== state.isMobile) {\n if (state.isMobile) {\n // Switched to mobile mode\n setupMobileMode();\n } else {\n // Switched to desktop mode\n teardownMobileMode();\n }\n\n // Emit a view change event\n if (systemApi.onViewChange) {\n systemApi.onViewChange({\n mobile: state.isMobile,\n previousMobile: prevState,\n width: window.innerWidth,\n });\n }\n }\n};\n\n/**\n * Clean up resources when the system is destroyed\n *\n * @param state - System state\n */\nexport const cleanupResources = (state: NavigationSystemState): void => {\n // Clean up overlay\n if (state.overlayElement && state.overlayElement.parentNode) {\n state.overlayElement.parentNode.removeChild(state.overlayElement);\n state.overlayElement = null;\n }\n\n // Destroy components\n if (state.rail) {\n state.rail.destroy();\n state.rail = null;\n }\n\n if (state.drawer) {\n state.drawer.destroy();\n state.drawer = null;\n }\n\n // Reset state\n state.activeSection = null;\n state.activeSubsection = null;\n state.mouseInDrawer = false;\n state.mouseInRail = false;\n state.processingChange = false;\n state.isMobile = false;\n};\n\n/**\n * Navigate to a specific section and subsection\n *\n * @param state - System state\n * @param section - Section ID\n * @param subsection - Subsection ID (optional)\n * @param silent - Whether to suppress change events\n */\nexport const navigateTo = (\n state: NavigationSystemState,\n section: string,\n subsection?: string,\n silent?: boolean\n): void => {\n // Skip if section doesn't exist\n if (!section || !state.items[section]) {\n return;\n }\n\n // Check if we're already on this section and subsection\n if (\n state.activeSection === section &&\n state.activeSubsection === subsection\n ) {\n return;\n }\n\n // Update active section\n state.activeSection = section;\n\n // Update rail if it exists\n if (state.rail) {\n state.rail.setActive(section, silent);\n }\n\n // Update active subsection if specified\n if (subsection && state.drawer) {\n state.activeSubsection = subsection;\n state.drawer.setActive(subsection, silent);\n }\n};\n",
|
|
283
245
|
"// src/components/navigation/system/events.ts\n\nimport { NavigationSystemState } from \"./types\";\n\n/**\n * Registers rail navigation event handlers\n *\n * @param state - System state\n * @param config - System configuration\n * @param updateDrawerContent - Function to update drawer content\n * @param showDrawer - Function to show the drawer\n * @param hideDrawer - Function to hide the drawer\n * @param systemApi - Reference to the public system API\n */\nexport const registerRailEvents = (\n state: NavigationSystemState,\n config: any,\n updateDrawerContent: (sectionId: string) => void,\n showDrawer: () => void,\n hideDrawer: () => void,\n systemApi: any\n): void => {\n const rail = state.rail;\n if (!rail) return;\n\n // Register for change events - will listen for when rail items are clicked\n rail.on(\"change\", (event: any) => {\n // Extract ID from event data\n const id = event?.id;\n\n if (!id || state.processingChange) {\n return;\n }\n\n // Check if this is a user action\n const isUserAction = event?.source === \"userAction\";\n\n // Set processing flag to prevent loops\n state.processingChange = true;\n\n // Update active section\n state.activeSection = id;\n\n // Handle internally first - update drawer content\n updateDrawerContent(id);\n\n // Then notify external handlers\n if (systemApi.onSectionChange && isUserAction) {\n systemApi.onSectionChange(id, {\n source: isUserAction ? \"userClick\" : \"programmatic\",\n });\n }\n\n // Clear the processing flag after a delay\n setTimeout(() => {\n state.processingChange = false;\n }, 50);\n });\n\n rail.on(\"mouseover\", (event: any) => {\n const id = event?.id;\n\n // Set rail mouse state\n state.mouseInRail = true;\n\n // Clear any existing hover timer\n clearTimeout(state.hoverTimer as number);\n state.hoverTimer = null;\n\n // Only schedule drawer operations if there's an ID\n if (id) {\n // Check if this section has items\n if (state.items[id]?.items?.length > 0) {\n // Has items - schedule drawer opening\n state.hoverTimer = window.setTimeout(() => {\n updateDrawerContent(id);\n }, config.hoverDelay) as unknown as number;\n } else {\n // No items - hide drawer after a delay to prevent flickering\n state.closeTimer = window.setTimeout(() => {\n // Only hide if we're still in the rail but not in the drawer\n if (state.mouseInRail && !state.mouseInDrawer) {\n hideDrawer();\n }\n }, config.hoverDelay) as unknown as number;\n }\n }\n });\n\n rail.on(\"mouseenter\", () => {\n state.mouseInRail = true;\n\n // Clear any pending drawer close timer when entering rail\n clearTimeout(state.closeTimer as number);\n state.closeTimer = null;\n });\n\n rail.on(\"mouseleave\", () => {\n state.mouseInRail = false;\n\n // Clear any existing hover timer\n clearTimeout(state.hoverTimer as number);\n state.hoverTimer = null;\n\n // Only set timer to hide drawer if we're not in drawer either\n if (!state.mouseInDrawer) {\n state.closeTimer = window.setTimeout(() => {\n // Double-check we're still not in rail or drawer before hiding\n if (!state.mouseInRail && !state.mouseInDrawer) {\n hideDrawer();\n }\n }, config.closeDelay) as unknown as number;\n }\n });\n};\n\n/**\n * Registers drawer navigation event handlers\n *\n * @param state - System state\n * @param config - System configuration\n * @param hideDrawer - Function to hide the drawer\n * @param systemApi - Reference to the public system API\n */\nexport const registerDrawerEvents = (\n state: NavigationSystemState,\n config: any,\n hideDrawer: () => void,\n systemApi: any\n): void => {\n const drawer = state.drawer;\n if (!drawer) return;\n\n // Use the component's native event system\n if (typeof drawer.on === \"function\") {\n // Handle item selection\n drawer.on(\"change\", (event: any) => {\n const id = event.id;\n\n state.activeSubsection = id;\n\n // If configuration specifies to hide drawer on click, do so\n if (config.hideDrawerOnClick) {\n hideDrawer();\n }\n\n // Emit item selection event\n if (systemApi.onItemSelect) {\n systemApi.onItemSelect(event);\n }\n });\n\n // Handle mouseenter/mouseleave for drawer\n drawer.on(\"mouseenter\", () => {\n state.mouseInDrawer = true;\n\n // Clear any hover and close timers\n clearTimeout(state.hoverTimer as number);\n clearTimeout(state.closeTimer as number);\n state.hoverTimer = null;\n state.closeTimer = null;\n });\n\n drawer.on(\"mouseleave\", () => {\n state.mouseInDrawer = false;\n\n // Only set timer to hide drawer if we're not in rail\n if (!state.mouseInRail) {\n state.closeTimer = window.setTimeout(() => {\n // Double-check we're still not in drawer or rail before hiding\n if (!state.mouseInDrawer && !state.mouseInRail) {\n hideDrawer();\n }\n }, config.closeDelay) as unknown as number;\n }\n });\n }\n};\n\n/**\n * Sets up window resize and orientation change handling\n *\n * @param state - System state\n * @param checkMobileState - Function to check and update mobile state\n */\nexport const setupResponsiveHandling = (\n state: NavigationSystemState,\n checkMobileState: () => void\n): void => {\n // Setup responsive behavior\n if (window.ResizeObserver) {\n // Use ResizeObserver for better performance\n state.resizeObserver = new ResizeObserver(() => {\n checkMobileState();\n });\n state.resizeObserver.observe(document.body);\n } else {\n // Fallback to window resize event\n window.addEventListener(\"resize\", checkMobileState);\n }\n\n // Listen for orientation changes on mobile\n window.addEventListener(\"orientationchange\", () => {\n // Small delay to ensure dimensions have updated\n setTimeout(checkMobileState, 100);\n });\n};\n\n/**\n * Cleans up all event handlers and resources\n *\n * @param state - System state\n * @param checkMobileState - Function reference to remove event handlers\n */\nexport const cleanupEvents = (\n state: NavigationSystemState,\n checkMobileState: () => void\n): void => {\n // Clean up resize observer\n if (state.resizeObserver) {\n state.resizeObserver.disconnect();\n state.resizeObserver = null;\n } else {\n window.removeEventListener(\"resize\", checkMobileState);\n }\n\n // Remove orientation change listener\n window.removeEventListener(\"orientationchange\", checkMobileState);\n\n // Remove outside click handler\n if (state.outsideClickHandler) {\n const eventType = \"ontouchend\" in window ? \"touchend\" : \"click\";\n document.removeEventListener(eventType, state.outsideClickHandler);\n }\n\n // Clear timers\n clearTimeout(state.hoverTimer as number);\n clearTimeout(state.closeTimer as number);\n state.hoverTimer = null;\n state.closeTimer = null;\n};\n",
|
|
@@ -288,13 +250,13 @@
|
|
|
288
250
|
"// src/components/select/features.ts\nimport createTextfield from \"../textfield\";\nimport createMenu from \"../menu\";\nimport { MenuItem, MenuContent, MenuPosition } from \"../menu/types\";\nimport { SelectOption, SelectConfig, BaseComponent } from \"./types\";\n\n/**\n * Creates a textfield for the select component\n * @param config - Select configuration\n * @returns Function that enhances a component with textfield functionality\n */\nexport const withTextfield =\n (config: SelectConfig) =>\n (component: BaseComponent): BaseComponent => {\n // Get option text from value if provided\n let initialText = \"\";\n if (config.value) {\n const option = (config.options || []).find(\n (opt) => opt.id === config.value\n );\n if (option) {\n initialText = option.text;\n }\n }\n\n // Create dropdown icon for the textfield\n const dropdownIcon =\n '<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 0 24 24\" width=\"24px\" fill=\"currentColor\"><path d=\"M0 0h24v24H0V0z\" fill=\"none\"/><path d=\"M7 10l5 5 5-5H7z\"/></svg>';\n\n // Create textfield component\n const textfield = createTextfield({\n label: config.label,\n variant: config.variant || \"filled\",\n density: config.density || \"default\",\n value: initialText,\n name: config.name,\n disabled: config.disabled,\n required: config.required,\n supportingText: config.supportingText,\n error: config.error,\n trailingIcon: dropdownIcon,\n readonly: true, // Make readonly since selection happens via menu\n });\n\n // Add select-specific class\n textfield.element.classList.add(`${config.prefix || \"mtrl\"}-select`);\n\n return {\n ...component,\n element: textfield.element,\n textfield,\n };\n };\n\n/**\n * Recursively processes select options to create menu items\n * Ensures all items have proper data structure\n * @param options The options to process\n * @returns Properly structured menu items\n */\nconst processMenuItems = (options): MenuContent[] => {\n return options.map((option) => {\n if (\"type\" in option && option.type === \"divider\") {\n return option; // Just pass dividers through\n }\n\n // Create a basic menu item\n const menuItem: MenuItem = {\n id: option.id.toString(), // Convert to string to match MenuItem type\n text: option.text,\n icon: option.icon,\n disabled: option.disabled,\n hasSubmenu: false,\n data: option,\n };\n\n // If this option has a submenu, process those items recursively\n if (option.hasSubmenu && Array.isArray(option.submenu)) {\n menuItem.hasSubmenu = true;\n menuItem.submenu = processMenuItems(option.submenu) as MenuItem[];\n }\n\n return menuItem;\n });\n};\n\n/**\n * Creates a menu for the select component\n * @param config - Select configuration\n * @returns Function that enhances a component with menu functionality\n */\nexport const withMenu =\n (config: SelectConfig) =>\n (component: BaseComponent): BaseComponent => {\n if (!component.textfield) {\n console.warn(\"Cannot add menu: textfield not found\");\n return component;\n }\n\n // Initialize state\n const state = {\n options: config.options || [],\n selectedOption: null as SelectOption,\n };\n\n // Find initial selected option\n if (config.value) {\n state.selectedOption = state.options.find(\n (opt) => opt.id === config.value\n );\n }\n\n // Convert options to menu items with proper recursive processing\n const menuItems = processMenuItems(state.options);\n\n // Create menu component - pass the entire textfield component as opener\n // This is crucial - passing the whole component instead of just its element\n const menu = createMenu({\n opener: component.textfield, // Pass the entire textfield component\n items: menuItems,\n position: (config.placement || \"bottom-start\") as MenuPosition,\n width: \"100%\", // Match width of textfield\n class: \"select-menu\",\n closeOnSelect: true,\n closeOnClickOutside: true,\n closeOnEscape: true,\n offset: 0, // Set offset to 0 to eliminate gap between textfield and menu\n });\n\n // Handle menu selection\n menu.on(\"select\", (event) => {\n // Safely access data properties with proper type checking\n if (!event.item || event.item.hasSubmenu) {\n return; // Skip processing for submenu items\n }\n\n // Safely extract the option data and validate it\n const option = event.item.data;\n if (!option || !(\"id\" in option) || !(\"text\" in option)) {\n console.warn(\n \"Invalid menu selection: missing required data properties\"\n );\n return;\n }\n\n state.selectedOption = option;\n\n // Update textfield\n component.textfield.setValue(option.text);\n\n // Update the selected state in the menu\n menu.setSelected(option.id);\n\n // Emit change event\n if (component.emit) {\n component.emit(\"change\", {\n select: component,\n value: option.id,\n text: option.text,\n option,\n originalEvent: event.originalEvent,\n preventDefault: () => {\n event.defaultPrevented = true;\n },\n defaultPrevented: false,\n });\n }\n });\n\n // Add keyboard event listener for textfield\n component.textfield.element.addEventListener(\"keydown\", (e) => {\n if (component.textfield.input.disabled) return;\n\n // Handle keyboard-based open\n if (\n (e.key === \"Enter\" || e.key === \" \" || e.key === \"ArrowDown\") &&\n !menu.isOpen()\n ) {\n e.preventDefault();\n\n // Open menu with keyboard interaction\n menu.open(e, \"keyboard\");\n\n // Emit open event\n if (component.emit) {\n component.emit(\"open\", {\n select: component,\n originalEvent: e,\n preventDefault: () => {},\n defaultPrevented: false,\n });\n }\n } else if (e.key === \"Escape\" && menu.isOpen()) {\n e.preventDefault();\n menu.close(e);\n }\n });\n\n // Update textfield styling when menu opens/closes\n menu.on(\"open\", () => {\n // Add open class to the select component\n component.textfield.element.classList.add(\n `${config.prefix || \"mtrl\"}-select--open`\n );\n\n // Add focused class to the textfield\n const PREFIX = config.prefix || \"mtrl\";\n component.textfield.element.classList.add(`${PREFIX}-textfield--focused`);\n\n // If using the filled variant, we need to add focus styles\n if (\n component.textfield.element.classList.contains(\n `${PREFIX}-textfield--filled`\n )\n ) {\n component.textfield.element.classList.add(\n `${PREFIX}-textfield--filled-focused`\n );\n }\n });\n\n menu.on(\"close\", (event) => {\n // Remove open class from the select component\n component.textfield.element.classList.remove(\n `${config.prefix || \"mtrl\"}-select--open`\n );\n\n // Let focus restoration happen naturally via the anchor component\n // Just update styling based on actual focus state with a small delay\n setTimeout(() => {\n const PREFIX = config.prefix || \"mtrl\";\n const isFocused =\n document.activeElement === component.textfield.input ||\n component.textfield.element.contains(document.activeElement);\n\n // Update styling based on actual focus state\n if (isFocused) {\n component.textfield.element.classList.add(\n `${PREFIX}-textfield--focused`\n );\n if (\n component.textfield.element.classList.contains(\n `${PREFIX}-textfield--filled`\n )\n ) {\n component.textfield.element.classList.add(\n `${PREFIX}-textfield--filled-focused`\n );\n }\n } else {\n component.textfield.element.classList.remove(\n `${PREFIX}-textfield--focused`\n );\n if (\n component.textfield.element.classList.contains(\n `${PREFIX}-textfield--filled`\n )\n ) {\n component.textfield.element.classList.remove(\n `${PREFIX}-textfield--filled-focused`\n );\n }\n }\n }, 10);\n\n // Emit close event\n if (component.emit) {\n component.emit(\"close\", {\n select: component,\n originalEvent: event.originalEvent,\n preventDefault: () => {},\n defaultPrevented: false,\n });\n }\n });\n\n // Handle special case for showing selected item in menu\n const markSelectedMenuItem = () => {\n if (!state.selectedOption) return;\n menu.setSelected(state.selectedOption.id);\n };\n\n // Mark selected item when menu opens\n menu.on(\"open\", () => {\n setTimeout(markSelectedMenuItem, 50);\n });\n\n // Expose select API\n return {\n ...component,\n menu,\n\n // Select controller\n select: {\n getValue: () => state.selectedOption?.id || null,\n\n setValue: (value) => {\n const option = state.options.find(\n (opt) => \"id\" in opt && opt.id === value\n );\n if (option && \"text\" in option) {\n state.selectedOption = option;\n component.textfield.setValue(option.text);\n menu.setSelected(option.id);\n }\n return component;\n },\n\n getText: () => state.selectedOption?.text || \"\",\n\n getSelectedOption: () => state.selectedOption,\n\n getOptions: () => [...state.options],\n\n setOptions: (options) => {\n state.options = options;\n\n const menuItems = processMenuItems(options);\n menu.setItems(menuItems);\n\n // If previously selected option is no longer available, clear selection\n if (\n state.selectedOption &&\n !options.find(\n (opt) => \"id\" in opt && opt.id === state.selectedOption.id\n )\n ) {\n state.selectedOption = null;\n component.textfield.setValue(\"\");\n }\n\n return component;\n },\n\n open: (\n event?: Event,\n interactionType: \"mouse\" | \"keyboard\" = \"mouse\"\n ) => {\n menu.open(event, interactionType);\n return component;\n },\n\n close: (event?: Event) => {\n menu.close(event);\n return component;\n },\n\n isOpen: () => menu.isOpen(),\n },\n };\n };\n",
|
|
289
251
|
"// src/components/select/api.ts\nimport { SelectComponent, ApiOptions, SelectOption } from \"./types\";\n\n/**\n * Enhances a select component with API methods\n * @param options - API configuration options\n * @returns Higher-order function that adds API methods to component\n * @internal\n */\nexport const withAPI =\n (options: ApiOptions) =>\n (component: any): SelectComponent => ({\n ...component,\n element: component.element,\n textfield: component.textfield,\n menu: component.menu,\n\n getValue: options.select.getValue,\n\n setValue(value: string): SelectComponent {\n options.select.setValue(value);\n return this;\n },\n\n getText: options.select.getText,\n\n getSelectedOption: options.select.getSelectedOption,\n\n getOptions: options.select.getOptions,\n\n setOptions(newOptions: SelectOption[]): SelectComponent {\n options.select.setOptions(newOptions);\n return this;\n },\n\n open(interactionType: \"mouse\" | \"keyboard\" = \"mouse\"): SelectComponent {\n if (component.menu && typeof component.menu.open === \"function\") {\n component.menu.open(undefined, interactionType);\n } else {\n options.select.open();\n }\n return this;\n },\n\n close(): SelectComponent {\n options.select.close();\n return this;\n },\n\n isOpen: options.select.isOpen,\n\n setDensity(density: string): SelectComponent {\n // Delegate to the textfield's setDensity method\n if (component.textfield?.setDensity) {\n component.textfield.setDensity(density);\n }\n return this;\n },\n\n getDensity(): string {\n // Delegate to the textfield's getDensity method\n if (component.textfield?.getDensity) {\n return component.textfield.getDensity();\n }\n return \"default\";\n },\n\n on(event, handler) {\n if (options.events?.on) {\n options.events.on(event, handler);\n } else if (component.on) {\n component.on(event, handler);\n }\n return this;\n },\n\n off(event, handler) {\n if (options.events?.off) {\n options.events.off(event, handler);\n } else if (component.off) {\n component.off(event, handler);\n }\n return this;\n },\n\n enable(): SelectComponent {\n options.disabled.enable();\n return this;\n },\n\n disable(): SelectComponent {\n options.disabled.disable();\n return this;\n },\n\n destroy() {\n options.lifecycle.destroy();\n },\n });\n",
|
|
290
252
|
"// src/components/select/config.ts\n\nimport { createComponentConfig } from \"../../core/config/component\";\nimport { SelectConfig, BaseComponent, ApiOptions } from \"./types\";\nimport { SELECT_DEFAULTS } from \"./constants\";\n\n/**\n * Default configuration for the Select component\n */\nexport const defaultConfig: SelectConfig = {\n options: [],\n variant: SELECT_DEFAULTS.VARIANT,\n placement: SELECT_DEFAULTS.PLACEMENT,\n};\n\n/**\n * Creates the base configuration for Select component\n * @param {SelectConfig} config - User provided configuration\n * @returns {SelectConfig} Complete configuration with defaults applied\n */\nexport const createBaseConfig = (\n config: SelectConfig = { options: [] }\n): SelectConfig =>\n createComponentConfig(defaultConfig, config, \"select\") as SelectConfig;\n\n/**\n * Creates API configuration for the Select component\n * @param {BaseComponent} comp - Component with select features\n * @returns {ApiOptions} API configuration object\n */\nexport const getApiConfig = (comp: BaseComponent): ApiOptions => ({\n select: {\n getValue: comp.select?.getValue || (() => null),\n setValue: comp.select?.setValue || (() => comp),\n getText: comp.select?.getText || (() => \"\"),\n getSelectedOption: comp.select?.getSelectedOption || (() => null),\n getOptions: comp.select?.getOptions || (() => []),\n setOptions: comp.select?.setOptions || (() => comp),\n open: comp.select?.open || (() => comp),\n close: comp.select?.close || (() => comp),\n isOpen: comp.select?.isOpen || (() => false),\n },\n events: {\n on: comp.on || (() => comp),\n off: comp.off || (() => comp),\n },\n disabled: {\n enable: () => {\n if (comp.textfield?.enable) {\n comp.textfield.enable();\n }\n return comp;\n },\n disable: () => {\n if (comp.textfield?.disable) {\n comp.textfield.disable();\n }\n return comp;\n },\n },\n lifecycle: {\n destroy: () => {\n if (comp.textfield?.destroy) {\n comp.textfield.destroy();\n }\n if (comp.menu?.destroy) {\n comp.menu.destroy();\n }\n if (comp.lifecycle?.destroy) {\n comp.lifecycle.destroy();\n }\n },\n },\n});\n\nexport default defaultConfig;\n",
|
|
291
|
-
"// src/index.ts\n/**\n * Main mtrl library exports\n *\n * @packageDocumentation\n */\n\nexport * from \"./components\";\nexport * from \"./core\";\n\n// Import from core\nimport {\n addClass,\n removeClass,\n hasClass,\n toggleClass,\n throttle,\n debounce,\n once,\n PREFIX,\n setComponentDefaults,\n getComponentDefaults,\n setGlobalDefaults,\n clearGlobalDefaults,\n} from \"./core\";\n\
|
|
253
|
+
"// src/index.ts\n/**\n * Main mtrl library exports\n *\n * @packageDocumentation\n */\n\nexport * from \"./components\";\nexport * from \"./core\";\n\n// Import from core\nimport {\n addClass,\n removeClass,\n hasClass,\n toggleClass,\n throttle,\n debounce,\n once,\n PREFIX,\n setComponentDefaults,\n getComponentDefaults,\n setGlobalDefaults,\n clearGlobalDefaults,\n} from \"./core\";\n\n// Export all \"create*\" functions\nexport {\n addClass,\n removeClass,\n hasClass,\n toggleClass,\n throttle,\n debounce,\n once,\n PREFIX,\n // Global configuration functions\n setComponentDefaults,\n getComponentDefaults,\n setGlobalDefaults,\n clearGlobalDefaults,\n};\n\n// Export constants individually to avoid naming conflicts\nexport {\n // Badge related constants\n BADGE_VARIANTS,\n BADGE_COLORS,\n BADGE_POSITIONS,\n BADGE_MAX_CHARACTERS,\n\n // Button related constants\n BUTTON_VARIANTS,\n BUTTON_TYPES,\n BUTTON_CLASSES,\n BUTTON_SIZES,\n BUTTON_SHAPES,\n DEFAULT_RIPPLE_CONFIG,\n\n // Card related constants\n CARD_VARIANTS,\n CARD_ELEVATIONS,\n CARD_WIDTHS,\n CARD_ASPECT_RATIOS,\n\n // Checkbox related constants\n CHECKBOX_VARIANTS,\n CHECKBOX_LABEL_POSITION,\n\n // Chip related constants\n CHIP_VARIANTS,\n CHIP_EVENTS,\n CHIPS_EVENTS,\n\n // Datepicker related constants\n DATEPICKER_VARIANTS,\n DATEPICKER_VIEWS,\n DATEPICKER_SELECTION_MODES,\n DAY_NAMES,\n MONTH_NAMES,\n MONTH_NAMES_SHORT,\n DEFAULT_DATE_FORMAT,\n\n // Dialog related constants\n DIALOG_SIZES,\n DIALOG_ANIMATIONS,\n DIALOG_FOOTER_ALIGNMENTS,\n DIALOG_BUTTON_VARIANTS,\n DEFAULT_CONFIRM_BUTTON_TEXT,\n DEFAULT_CANCEL_BUTTON_TEXT,\n\n // FAB related constants\n FAB_VARIANTS,\n FAB_SIZES,\n FAB_POSITIONS,\n\n // Sheet related constants\n SHEET_VARIANTS,\n SHEET_POSITIONS,\n\n // Tab related constants\n TAB_VARIANTS,\n TAB_STATES,\n TABS_EVENTS,\n\n // Textfield related constants\n TEXTFIELD_VARIANTS,\n} from \"./constants\";\n",
|
|
292
254
|
"// src/constants.ts\n\n// Import component constants\nimport {\n BADGE_VARIANTS,\n BADGE_COLORS,\n BADGE_POSITIONS,\n BADGE_MAX_CHARACTERS,\n} from \"./components/badge/constants\";\n\nimport {\n FAB_POSITIONS as BOTTOM_APP_BAR_FAB_POSITIONS,\n BOTTOM_APP_BAR_CLASSES,\n DEFAULT_TRANSITION_DURATION,\n} from \"./components/bottom-app-bar/constants\";\n\nimport {\n BUTTON_VARIANTS,\n BUTTON_TYPES,\n BUTTON_CLASSES,\n BUTTON_SIZES,\n BUTTON_SHAPES,\n DEFAULT_RIPPLE_CONFIG,\n} from \"./components/button/constants\";\n\nimport {\n CARD_VARIANTS,\n CARD_ELEVATIONS,\n CARD_WIDTHS,\n CARD_CORNER_RADIUS,\n CARD_ASPECT_RATIOS,\n CARD_ACTION_ALIGNMENT,\n CARD_MEDIA_POSITION,\n CARD_CLASSES,\n} from \"./components/card/constants\";\n\nimport {\n CHECKBOX_VARIANTS,\n CHECKBOX_LABEL_POSITION,\n CHECKBOX_STATES,\n CHECKBOX_CLASSES,\n} from \"./components/checkbox/constants\";\n\nimport {\n CHIP_VARIANTS,\n CHIP_EVENTS,\n CHIPS_EVENTS,\n} from \"./components/chips/constants\";\n\nimport { CHIP_CLASSES, CHIP_STATES } from \"./components/chips/chip/constants\";\n\nimport {\n DATEPICKER_VARIANTS,\n DATEPICKER_VIEWS,\n DATEPICKER_SELECTION_MODES,\n DAY_NAMES,\n MONTH_NAMES,\n MONTH_NAMES_SHORT,\n DEFAULT_DATE_FORMAT,\n DATEPICKER_CLASSES,\n DATEPICKER_EVENTS,\n} from \"./components/datepicker/constants\";\n\nimport {\n DIALOG_SIZES,\n DIALOG_ANIMATIONS,\n DIALOG_FOOTER_ALIGNMENTS,\n DIALOG_EVENTS,\n DIALOG_CLASSES,\n DEFAULT_ANIMATION_DURATION,\n DEFAULT_Z_INDEX,\n DIALOG_BUTTON_VARIANTS,\n DEFAULT_CONFIRM_BUTTON_TEXT,\n DEFAULT_CANCEL_BUTTON_TEXT,\n} from \"./components/dialog/constants\";\n\nimport {\n DIVIDER_ORIENTATIONS,\n DIVIDER_VARIANTS,\n DEFAULT_DIVIDER_THICKNESS,\n DEFAULT_INSET_VALUE,\n DIVIDER_CLASSES,\n} from \"./components/divider/constants\";\n\nimport {\n EXTENDED_FAB_VARIANTS,\n EXTENDED_FAB_WIDTH,\n EXTENDED_FAB_POSITIONS,\n EXTENDED_FAB_ICON_POSITIONS,\n EXTENDED_FAB_CLASSES,\n EXTENDED_FAB_TYPES,\n EXTENDED_FAB_ANIMATIONS,\n} from \"./components/extended-fab/constants\";\n\nimport {\n FAB_VARIANTS,\n FAB_SIZES,\n FAB_POSITIONS,\n FAB_CLASSES,\n FAB_TYPES,\n FAB_ICON_SIZES,\n FAB_ANIMATIONS,\n} from \"./components/fab/constants\";\n\nimport {\n LIST_DEFAULTS,\n LIST_TYPES,\n LIST_SELECTION_MODES,\n LIST_EVENTS,\n LIST_SCROLL_POSITIONS,\n LIST_CLASSES,\n} from \"./components/list/constants\";\n\nimport {\n MENU_POSITION,\n MENU_DEFAULTS,\n MENU_INTERACTION_TYPES,\n MENU_ITEM_TYPES,\n MENU_EVENTS,\n MENU_CLASSES,\n} from \"./components/menu/constants\";\n\nimport {\n NAV_VARIANTS,\n NAV_POSITIONS,\n NAV_BEHAVIORS,\n NAV_ITEM_STATES,\n NAV_EVENTS,\n NAV_DEFAULTS,\n NAV_CLASSES,\n} from \"./components/navigation/constants\";\n\nimport {\n PROGRESS_VARIANTS,\n PROGRESS_EVENTS,\n PROGRESS_DEFAULTS,\n PROGRESS_CLASSES,\n} from \"./components/progress/constants\";\n\nimport {\n RADIO_STATES,\n RADIO_DIRECTIONS,\n RADIO_VARIANTS,\n RADIO_LABEL_POSITIONS,\n RADIO_SIZES,\n RADIO_EVENTS,\n RADIO_DEFAULTS,\n RADIO_CLASSES,\n} from \"./components/radios/constants\";\n\nimport {\n SEARCH_VARIANTS,\n SEARCH_STATES,\n SEARCH_EVENTS,\n SEARCH_ICONS,\n SEARCH_DEFAULTS,\n SEARCH_CLASSES,\n} from \"./components/search/constants\";\n\nimport {\n SEGMENTED_BUTTON_MODES,\n SEGMENTED_BUTTON_DENSITY,\n SEGMENTED_BUTTON_EVENTS,\n SEGMENTED_BUTTON_DEFAULTS,\n SEGMENTED_BUTTON_ICONS,\n SEGMENTED_BUTTON_CLASSES,\n} from \"./components/segmented-button/constants\";\n\nimport {\n SELECT_VARIANTS,\n SELECT_PLACEMENT,\n SELECT_INTERACTION,\n SELECT_EVENTS,\n SELECT_ICONS,\n SELECT_DEFAULTS,\n SELECT_CLASSES,\n} from \"./components/select/constants\";\n\nimport {\n SHEET_VARIANTS,\n SHEET_POSITIONS,\n SHEET_EVENTS,\n SHEET_ELEVATION,\n SHEET_DEFAULTS,\n SHEET_ANIMATION,\n SHEET_GESTURE,\n SHEET_CLASSES,\n} from \"./components/sheet/constants\";\n\nimport {\n SLIDER_COLORS,\n SLIDER_SIZES,\n SLIDER_EVENTS,\n SLIDER_POSITIONS,\n SLIDER_DEFAULTS,\n SLIDER_CLASSES,\n} from \"./components/slider/constants\";\n\nimport {\n SNACKBAR_VARIANTS,\n SNACKBAR_POSITIONS,\n SNACKBAR_STATES,\n SNACKBAR_EVENTS,\n SNACKBAR_DEFAULTS,\n SNACKBAR_CLASSES,\n} from \"./components/snackbar/constants\";\n\nimport {\n SWITCH_LABEL_POSITIONS,\n SWITCH_STATES,\n SWITCH_EVENTS,\n SWITCH_DEFAULTS,\n SWITCH_CLASSES,\n} from \"./components/switch/constants\";\n\nimport {\n TAB_VARIANTS,\n TAB_STATES,\n TAB_INDICATOR_WIDTH_STRATEGIES,\n TAB_EVENTS,\n TABS_EVENTS,\n TABS_DEFAULTS,\n TABS_CLASSES,\n TAB_CLASSES,\n} from \"./components/tabs/constants\";\n\nimport {\n TEXTFIELD_VARIANTS,\n TEXTFIELD_STATES,\n TEXTFIELD_TYPES,\n TEXTFIELD_EVENTS,\n TEXTFIELD_DEFAULTS,\n TEXTFIELD_CLASSES,\n} from \"./components/textfield/constants\";\n\nimport {\n TIMEPICKER_TYPES,\n TIMEPICKER_ORIENTATIONS,\n TIMEPICKER_FORMATS,\n TIMEPICKER_PERIODS,\n TIMEPICKER_EVENTS,\n TIMEPICKER_DIAL,\n TIMEPICKER_VALUES,\n TIMEPICKER_Z_INDEX,\n TIMEPICKER_DEFAULTS,\n TIMEPICKER_CLASSES,\n} from \"./components/timepicker/constants\";\n\nimport {\n TOOLTIP_POSITIONS,\n TOOLTIP_VARIANTS,\n TOOLTIP_EVENTS,\n TOOLTIP_DEFAULTS,\n TOOLTIP_CLASSES,\n} from \"./components/tooltip/constants\";\n\nimport {\n TOP_APP_BAR_TYPES,\n TOP_APP_BAR_STATES,\n TOP_APP_BAR_DEFAULTS,\n TOP_APP_BAR_CLASSES,\n} from \"./components/top-app-bar/constants\";\n\n// Re-export all constants\nexport {\n // Badge\n BADGE_VARIANTS,\n BADGE_COLORS,\n BADGE_POSITIONS,\n BADGE_MAX_CHARACTERS,\n\n // Bottom App Bar\n BOTTOM_APP_BAR_FAB_POSITIONS,\n BOTTOM_APP_BAR_CLASSES,\n DEFAULT_TRANSITION_DURATION,\n\n // Button\n BUTTON_VARIANTS,\n BUTTON_TYPES,\n BUTTON_CLASSES,\n BUTTON_SIZES,\n BUTTON_SHAPES,\n DEFAULT_RIPPLE_CONFIG,\n\n // Card\n CARD_VARIANTS,\n CARD_ELEVATIONS,\n CARD_WIDTHS,\n CARD_CORNER_RADIUS,\n CARD_ASPECT_RATIOS,\n CARD_ACTION_ALIGNMENT,\n CARD_MEDIA_POSITION,\n CARD_CLASSES,\n\n // Checkbox\n CHECKBOX_VARIANTS,\n CHECKBOX_LABEL_POSITION,\n CHECKBOX_STATES,\n CHECKBOX_CLASSES,\n\n // Chips\n CHIP_VARIANTS,\n CHIP_EVENTS,\n CHIPS_EVENTS,\n CHIP_CLASSES,\n CHIP_STATES,\n\n // DatePicker\n DATEPICKER_VARIANTS,\n DATEPICKER_VIEWS,\n DATEPICKER_SELECTION_MODES,\n DAY_NAMES,\n MONTH_NAMES,\n MONTH_NAMES_SHORT,\n DEFAULT_DATE_FORMAT,\n DATEPICKER_CLASSES,\n DATEPICKER_EVENTS,\n\n // Dialog\n DIALOG_SIZES,\n DIALOG_ANIMATIONS,\n DIALOG_FOOTER_ALIGNMENTS,\n DIALOG_EVENTS,\n DIALOG_CLASSES,\n DEFAULT_ANIMATION_DURATION,\n DEFAULT_Z_INDEX,\n DIALOG_BUTTON_VARIANTS,\n DEFAULT_CONFIRM_BUTTON_TEXT,\n DEFAULT_CANCEL_BUTTON_TEXT,\n\n // Divider\n DIVIDER_ORIENTATIONS,\n DIVIDER_VARIANTS,\n DEFAULT_DIVIDER_THICKNESS,\n DEFAULT_INSET_VALUE,\n DIVIDER_CLASSES,\n\n // Extended FAB\n EXTENDED_FAB_VARIANTS,\n EXTENDED_FAB_WIDTH,\n EXTENDED_FAB_POSITIONS,\n EXTENDED_FAB_ICON_POSITIONS,\n EXTENDED_FAB_CLASSES,\n EXTENDED_FAB_TYPES,\n EXTENDED_FAB_ANIMATIONS,\n\n // FAB\n FAB_VARIANTS,\n FAB_SIZES,\n FAB_POSITIONS,\n FAB_CLASSES,\n FAB_TYPES,\n FAB_ICON_SIZES,\n FAB_ANIMATIONS,\n\n // List\n LIST_DEFAULTS,\n LIST_TYPES,\n LIST_SELECTION_MODES,\n LIST_EVENTS,\n LIST_SCROLL_POSITIONS,\n LIST_CLASSES,\n\n // Menu\n MENU_POSITION,\n MENU_DEFAULTS,\n MENU_INTERACTION_TYPES,\n MENU_ITEM_TYPES,\n MENU_EVENTS,\n MENU_CLASSES,\n\n // Navigation\n NAV_VARIANTS,\n NAV_POSITIONS,\n NAV_BEHAVIORS,\n NAV_ITEM_STATES,\n NAV_EVENTS,\n NAV_DEFAULTS,\n NAV_CLASSES,\n\n // Progress\n PROGRESS_VARIANTS,\n PROGRESS_EVENTS,\n PROGRESS_DEFAULTS,\n PROGRESS_CLASSES,\n\n // Radio\n RADIO_STATES,\n RADIO_DIRECTIONS,\n RADIO_VARIANTS,\n RADIO_LABEL_POSITIONS,\n RADIO_SIZES,\n RADIO_EVENTS,\n RADIO_DEFAULTS,\n RADIO_CLASSES,\n\n // Search\n SEARCH_VARIANTS,\n SEARCH_STATES,\n SEARCH_EVENTS,\n SEARCH_ICONS,\n SEARCH_DEFAULTS,\n SEARCH_CLASSES,\n\n // Segmented Button\n SEGMENTED_BUTTON_MODES,\n SEGMENTED_BUTTON_DENSITY,\n SEGMENTED_BUTTON_EVENTS,\n SEGMENTED_BUTTON_DEFAULTS,\n SEGMENTED_BUTTON_ICONS,\n SEGMENTED_BUTTON_CLASSES,\n\n // Select\n SELECT_VARIANTS,\n SELECT_PLACEMENT,\n SELECT_INTERACTION,\n SELECT_EVENTS,\n SELECT_ICONS,\n SELECT_DEFAULTS,\n SELECT_CLASSES,\n\n // Sheet\n SHEET_VARIANTS,\n SHEET_POSITIONS,\n SHEET_EVENTS,\n SHEET_ELEVATION,\n SHEET_DEFAULTS,\n SHEET_ANIMATION,\n SHEET_GESTURE,\n SHEET_CLASSES,\n\n // Slider\n SLIDER_COLORS,\n SLIDER_SIZES,\n SLIDER_EVENTS,\n SLIDER_POSITIONS,\n SLIDER_DEFAULTS,\n SLIDER_CLASSES,\n\n // Snackbar\n SNACKBAR_VARIANTS,\n SNACKBAR_POSITIONS,\n SNACKBAR_STATES,\n SNACKBAR_EVENTS,\n SNACKBAR_DEFAULTS,\n SNACKBAR_CLASSES,\n\n // Switch\n SWITCH_LABEL_POSITIONS,\n SWITCH_STATES,\n SWITCH_EVENTS,\n SWITCH_DEFAULTS,\n SWITCH_CLASSES,\n\n // Tabs\n TAB_VARIANTS,\n TAB_STATES,\n TAB_INDICATOR_WIDTH_STRATEGIES,\n TAB_EVENTS,\n TABS_EVENTS,\n TABS_DEFAULTS,\n TABS_CLASSES,\n TAB_CLASSES,\n\n // Textfield\n TEXTFIELD_VARIANTS,\n TEXTFIELD_STATES,\n TEXTFIELD_TYPES,\n TEXTFIELD_EVENTS,\n TEXTFIELD_DEFAULTS,\n TEXTFIELD_CLASSES,\n\n // Timepicker\n TIMEPICKER_TYPES,\n TIMEPICKER_ORIENTATIONS,\n TIMEPICKER_FORMATS,\n TIMEPICKER_PERIODS,\n TIMEPICKER_EVENTS,\n TIMEPICKER_DIAL,\n TIMEPICKER_VALUES,\n TIMEPICKER_Z_INDEX,\n TIMEPICKER_DEFAULTS,\n TIMEPICKER_CLASSES,\n\n // Tooltip\n TOOLTIP_POSITIONS,\n TOOLTIP_VARIANTS,\n TOOLTIP_EVENTS,\n TOOLTIP_DEFAULTS,\n TOOLTIP_CLASSES,\n\n // Top App Bar\n TOP_APP_BAR_TYPES,\n TOP_APP_BAR_STATES,\n TOP_APP_BAR_DEFAULTS,\n TOP_APP_BAR_CLASSES,\n};\n",
|
|
293
255
|
"// src/components/datepicker/constants.ts\n\n/**\n * DatePicker variants\n */\nexport const DATEPICKER_VARIANTS = {\n /** Docked datepicker appears inline on the page */\n DOCKED: 'docked',\n /** Modal datepicker appears in a dialog overlay */\n MODAL: 'modal',\n /** Modal with input field for entering dates */\n MODAL_INPUT: 'modal-input'\n} as const;\n\n/**\n * DatePicker views\n */\nexport const DATEPICKER_VIEWS = {\n /** Daily calendar grid view */\n DAY: 'day',\n /** Month selection view */\n MONTH: 'month',\n /** Year selection view */\n YEAR: 'year'\n} as const;\n\n/**\n * DatePicker selection modes\n */\nexport const DATEPICKER_SELECTION_MODES = {\n /** Select a single date */\n SINGLE: 'single',\n /** Select a date range */\n RANGE: 'range'\n} as const;\n\n/**\n * Day names for the calendar\n */\nexport const DAY_NAMES = ['S', 'M', 'T', 'W', 'T', 'F', 'S'];\n\n/**\n * Month names for the calendar\n */\nexport const MONTH_NAMES = [\n 'January', 'February', 'March', 'April', \n 'May', 'June', 'July', 'August',\n 'September', 'October', 'November', 'December'\n];\n\n/**\n * Month names abbreviated\n */\nexport const MONTH_NAMES_SHORT = [\n 'Jan', 'Feb', 'Mar', 'Apr', \n 'May', 'Jun', 'Jul', 'Aug',\n 'Sep', 'Oct', 'Nov', 'Dec'\n];\n\n/**\n * Default format for displaying dates\n */\nexport const DEFAULT_DATE_FORMAT = 'MM/DD/YYYY';\n\n/**\n * DatePicker CSS class names\n */\nexport const DATEPICKER_CLASSES = {\n /** Root container class */\n ROOT: 'datepicker',\n /** Class for the input field */\n INPUT: 'datepicker-input',\n /** Class for the calendar container */\n CALENDAR: 'datepicker-calendar',\n /** Class for the header section */\n HEADER: 'datepicker-header',\n /** Class for the month/year navigation */\n NAVIGATION: 'datepicker-navigation',\n /** Class for the day names row */\n WEEKDAYS: 'datepicker-weekdays',\n /** Class for the days grid */\n DAYS: 'datepicker-days',\n /** Class for individual day cells */\n DAY: 'datepicker-day',\n /** Class for today's date */\n TODAY: 'today',\n /** Class for selected date */\n SELECTED: 'selected',\n /** Class for disabled dates */\n DISABLED: 'disabled',\n /** Class for dates outside the current month */\n OUTSIDE_MONTH: 'outside-month',\n /** Class for first date in a range */\n RANGE_START: 'range-start',\n /** Class for last date in a range */\n RANGE_END: 'range-end',\n /** Class for dates between start and end in a range */\n RANGE_MIDDLE: 'range-middle'\n} as const;\n\n/**\n * DatePicker events\n */\nexport const DATEPICKER_EVENTS = {\n /** Fired when the selected date changes */\n CHANGE: 'change',\n /** Fired when the datepicker opens */\n OPEN: 'open',\n /** Fired when the datepicker closes */\n CLOSE: 'close',\n /** Fired when a day is clicked/focused */\n SELECT: 'select',\n /** Fired when the view changes (day/month/year) */\n VIEW_CHANGE: 'viewChange'\n} as const;",
|
|
294
256
|
"// src/components/dialog/constants.ts\n\n/**\n * Dialog sizes\n */\nexport const DIALOG_SIZES = {\n /** 320px width, for simple messages or choices */\n SMALL: 'small',\n /** 560px width, for standard forms or content (default) */\n MEDIUM: 'medium',\n /** 800px width, for complex forms or rich content */\n LARGE: 'large',\n /** Spans the full width of the viewport with margins */\n FULLWIDTH: 'fullwidth',\n /** Takes up the entire viewport (similar to a new page) */\n FULLSCREEN: 'fullscreen'\n} as const;\n\n/**\n * Dialog animation types\n */\nexport const DIALOG_ANIMATIONS = {\n /** Scale up/down animation from center (default) */\n SCALE: 'scale',\n /** Slide in from bottom, slide out to bottom */\n SLIDE_UP: 'slide-up',\n /** Slide in from top, slide out to top */\n SLIDE_DOWN: 'slide-down',\n /** Simple fade in/out animation */\n FADE: 'fade'\n} as const;\n\n/**\n * Footer alignment options\n */\nexport const DIALOG_FOOTER_ALIGNMENTS = {\n /** Align buttons to the right (default, follows Material Design guidelines) */\n RIGHT: 'right',\n /** Align buttons to the left */\n LEFT: 'left',\n /** Center buttons in footer */\n CENTER: 'center',\n /** Space buttons evenly, with first button at left, last at right */\n SPACE_BETWEEN: 'space-between'\n} as const;\n\n/**\n * Dialog events\n */\nexport const DIALOG_EVENTS = {\n /** Fired when the dialog begins opening */\n OPEN: 'open',\n /** Fired when the dialog begins closing */\n CLOSE: 'close',\n /** Fired before the dialog starts opening (can be prevented) */\n BEFORE_OPEN: 'beforeopen',\n /** Fired before the dialog starts closing (can be prevented) */\n BEFORE_CLOSE: 'beforeclose',\n /** Fired after the dialog has fully opened (animation complete) */\n AFTER_OPEN: 'afteropen',\n /** Fired after the dialog has fully closed (animation complete) */\n AFTER_CLOSE: 'afterclose'\n} as const;\n\n/**\n * Dialog CSS classes\n */\nexport const DIALOG_CLASSES = {\n /** Root dialog element */\n ROOT: 'dialog',\n /** Overlay background */\n OVERLAY: 'dialog-overlay',\n /** Dialog container */\n CONTAINER: 'dialog-container',\n /** Dialog header */\n HEADER: 'dialog-header',\n /** Dialog title */\n TITLE: 'dialog-title',\n /** Dialog subtitle */\n SUBTITLE: 'dialog-subtitle',\n /** Close button */\n CLOSE_BUTTON: 'dialog-close-button',\n /** Dialog content */\n CONTENT: 'dialog-content',\n /** Dialog footer */\n FOOTER: 'dialog-footer',\n /** Dialog divider */\n DIVIDER: 'dialog-divider',\n /** Added when dialog is open */\n OPEN: 'dialog--open',\n /** Added when dialog is animating */\n ANIMATING: 'dialog--animating'\n} as const;\n\n/**\n * Default animation duration in milliseconds\n */\nexport const DEFAULT_ANIMATION_DURATION = 300;\n\n/**\n * Default z-index for dialogs\n */\nexport const DEFAULT_Z_INDEX = 1000;\n\n/**\n * Button variants for dialog buttons following Material Design 3\n */\nexport const DIALOG_BUTTON_VARIANTS = {\n /** Text button (low emphasis) */\n TEXT: 'text',\n /** Filled button (high emphasis) */\n FILLED: 'filled',\n /** Outlined button (medium emphasis) */\n OUTLINED: 'outlined',\n /** Tonal button (medium emphasis) */\n TONAL: 'tonal'\n} as const;\n\n/**\n * Default button text for confirmation dialogs\n */\nexport const DEFAULT_CONFIRM_BUTTON_TEXT = 'Yes';\n\n/**\n * Default button text for cancellation in dialogs\n */\nexport const DEFAULT_CANCEL_BUTTON_TEXT = 'No';",
|
|
295
257
|
"// src/components/fab/constants.ts\n\n/**\n * FAB variants following Material Design 3 guidelines\n */\nexport const FAB_VARIANTS = {\n /** Uses the primary color, highest emphasis (default) */\n PRIMARY: 'primary',\n /** Uses the secondary color, medium emphasis */\n SECONDARY: 'secondary',\n /** Uses the tertiary color, lower emphasis */\n TERTIARY: 'tertiary',\n /** Uses the surface color with an outline, lowest emphasis */\n SURFACE: 'surface'\n} as const;\n\n/**\n * FAB size variants\n */\nexport const FAB_SIZES = {\n /** 40px diameter, for compact interfaces or secondary actions */\n SMALL: 'small',\n /** 56px diameter, for standard primary actions (default) */\n DEFAULT: 'default',\n /** 96px diameter, for emphasis or touch-focused interfaces */\n LARGE: 'large'\n} as const;\n\n/**\n * FAB position options\n */\nexport const FAB_POSITIONS = {\n /** Position in the top-right corner */\n TOP_RIGHT: 'top-right',\n /** Position in the top-left corner */\n TOP_LEFT: 'top-left',\n /** Position in the bottom-right corner (most common for primary actions) */\n BOTTOM_RIGHT: 'bottom-right',\n /** Position in the bottom-left corner */\n BOTTOM_LEFT: 'bottom-left'\n} as const;\n\n/**\n * FAB CSS classes\n */\nexport const FAB_CLASSES = {\n /** Root element class */\n ROOT: 'fab',\n /** Class for the icon container */\n ICON: 'fab-icon',\n /** Applied when FAB is lowered (pressed state) */\n LOWERED: 'fab--lowered',\n /** Applied to small FABs */\n SMALL: 'fab--small',\n /** Applied to large FABs */\n LARGE: 'fab--large'\n} as const;\n\n/**\n * Button types for FAB\n */\nexport const FAB_TYPES = {\n BUTTON: 'button',\n SUBMIT: 'submit',\n RESET: 'reset'\n} as const;\n\n/**\n * Default icon sizes based on FAB size\n */\nexport const FAB_ICON_SIZES = {\n SMALL: '20px',\n DEFAULT: '24px',\n LARGE: '36px'\n} as const;\n\n/**\n * Default animations for FAB\n */\nexport const FAB_ANIMATIONS = {\n /** Entrance animation duration in milliseconds */\n ENTRANCE_DURATION: 250\n} as const;"
|
|
296
258
|
],
|
|
297
|
-
"mappings": "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",
|
|
298
|
-
"debugId": "
|
|
259
|
+
"mappings": "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",
|
|
260
|
+
"debugId": "705B358629DBAB9364756E2164756E21",
|
|
299
261
|
"names": []
|
|
300
262
|
}
|