@svelte-atoms/core 1.0.0-alpha.41 → 1.0.0-alpha.44
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -21
- package/README.md +67 -197
- package/dist/attachments/clickout.svelte.d.ts +4 -1
- package/dist/attachments/clickout.svelte.js +2 -1
- package/dist/components/accordion/accordion-root.svelte +61 -66
- package/dist/components/accordion/accordion-root.svelte.d.ts +2 -2
- package/dist/components/accordion/bond.svelte.d.ts +11 -10
- package/dist/components/accordion/bond.svelte.js +26 -16
- package/dist/components/accordion/item/accordion-item-body.svelte +3 -1
- package/dist/components/accordion/item/accordion-item-header.svelte +1 -1
- package/dist/components/accordion/item/accordion-item-indicator.svelte +1 -1
- package/dist/components/accordion/item/accordion-item-root.svelte +3 -2
- package/dist/components/accordion/item/bond.svelte.d.ts +32 -18
- package/dist/components/accordion/item/bond.svelte.js +88 -64
- package/dist/components/accordion/item/types.d.ts +4 -24
- package/dist/components/accordion/types.d.ts +5 -9
- package/dist/components/alert/alert-root.svelte +68 -68
- package/dist/components/alert/types.d.ts +12 -46
- package/dist/components/atom/html-atom.svelte +84 -95
- package/dist/components/atom/html-atom.svelte.d.ts +1 -2
- package/dist/components/atom/index.d.ts +1 -0
- package/dist/components/atom/index.js +1 -0
- package/dist/components/atom/types.d.ts +52 -10
- package/dist/components/atom/types.js +1 -1
- package/dist/components/atom/utils.d.ts +10 -3
- package/dist/components/atom/utils.js +112 -45
- package/dist/components/avatar/types.d.ts +1 -6
- package/dist/components/badge/index.d.ts +1 -0
- package/dist/components/badge/types.d.ts +4 -7
- package/dist/components/button/button.svelte +31 -31
- package/dist/components/button/types.d.ts +9 -6
- package/dist/components/calendar/calendar-body.svelte +0 -1
- package/dist/components/calendar/calendar-day.svelte +99 -99
- package/dist/components/calendar/calendar-header.svelte +1 -1
- package/dist/components/calendar/calendar-root.svelte +206 -206
- package/dist/components/calendar/calendar-root.svelte.d.ts +1 -1
- package/dist/components/calendar/calendar-week-day.svelte +33 -33
- package/dist/components/calendar/types.d.ts +7 -10
- package/dist/components/card/card-root.svelte +92 -92
- package/dist/components/card/types.d.ts +12 -51
- package/dist/components/checkbox/checkbox.svelte +65 -55
- package/dist/components/checkbox/checkbox.svelte.d.ts +1 -3
- package/dist/components/checkbox/index.d.ts +2 -0
- package/dist/components/checkbox/index.js +1 -0
- package/dist/components/checkbox/motion.d.ts +17 -0
- package/dist/components/checkbox/motion.js +34 -0
- package/dist/components/checkbox/types.d.ts +14 -7
- package/dist/components/chip/chip-close-button.svelte +33 -0
- package/dist/components/chip/chip-close-button.svelte.d.ts +4 -0
- package/dist/components/chip/chip.svelte +34 -41
- package/dist/components/chip/chip.svelte.d.ts +1 -3
- package/dist/components/chip/index.d.ts +2 -0
- package/dist/components/chip/index.js +2 -0
- package/dist/components/chip/types.d.ts +15 -8
- package/dist/components/collapsible/bond.svelte.d.ts +34 -24
- package/dist/components/collapsible/bond.svelte.js +73 -60
- package/dist/components/collapsible/collapsible-body.svelte +1 -1
- package/dist/components/collapsible/collapsible-header.svelte +1 -1
- package/dist/components/collapsible/collapsible-indicator.svelte +1 -1
- package/dist/components/collapsible/collapsible-root.svelte +67 -67
- package/dist/components/collapsible/types.d.ts +10 -22
- package/dist/components/combobox/bond.svelte.d.ts +13 -8
- package/dist/components/combobox/bond.svelte.js +30 -20
- package/dist/components/combobox/combobox-control.svelte +66 -66
- package/dist/components/combobox/combobox-item.svelte +62 -62
- package/dist/components/combobox/combobox-root.svelte +65 -65
- package/dist/components/combobox/combobox-root.svelte.d.ts +2 -2
- package/dist/components/combobox/combobox-selections.svelte +17 -17
- package/dist/components/combobox/combobox-trigger.svelte +34 -34
- package/dist/components/combobox/types.d.ts +6 -10
- package/dist/components/container/index.d.ts +1 -0
- package/dist/components/container/types.d.ts +6 -12
- package/dist/components/context-menu/atoms.d.ts +4 -0
- package/dist/components/context-menu/atoms.js +4 -0
- package/dist/components/context-menu/context-menu-content.svelte +52 -0
- package/dist/components/context-menu/context-menu-content.svelte.d.ts +27 -0
- package/dist/components/context-menu/context-menu-root.svelte +8 -0
- package/dist/components/context-menu/context-menu-root.svelte.d.ts +4 -0
- package/dist/components/context-menu/context-menu-trigger.svelte +59 -0
- package/dist/components/context-menu/context-menu-trigger.svelte.d.ts +27 -0
- package/dist/components/context-menu/index.d.ts +2 -0
- package/dist/components/context-menu/index.js +2 -0
- package/dist/components/{contextmenu → context-menu}/types.d.ts +1 -6
- package/dist/components/datagrid/atoms.d.ts +11 -5
- package/dist/components/datagrid/atoms.js +11 -5
- package/dist/components/datagrid/bond.svelte.d.ts +29 -14
- package/dist/components/datagrid/bond.svelte.js +45 -33
- package/dist/components/datagrid/cell/bond.svelte.d.ts +29 -0
- package/dist/components/datagrid/cell/bond.svelte.js +42 -0
- package/dist/components/datagrid/cell/datagrid-cell.svelte +49 -0
- package/dist/components/datagrid/cell/datagrid-cell.svelte.d.ts +26 -0
- package/dist/components/datagrid/cell/index.d.ts +4 -0
- package/dist/components/datagrid/cell/index.js +4 -0
- package/dist/components/datagrid/col/index.d.ts +4 -0
- package/dist/components/datagrid/col/index.js +4 -0
- package/dist/components/datagrid/column/bond.svelte.d.ts +45 -0
- package/dist/components/datagrid/column/bond.svelte.js +76 -0
- package/dist/components/datagrid/{th/datagrid-th-sort-icon.svelte → column/datagrid-column-sort-icon.svelte} +3 -3
- package/dist/components/datagrid/{th/datagrid-th-sort-icon.svelte.d.ts → column/datagrid-column-sort-icon.svelte.d.ts} +3 -3
- package/dist/components/datagrid/{th/datagrid-th.svelte → column/datagrid-column.svelte} +27 -36
- package/dist/components/datagrid/column/datagrid-column.svelte.d.ts +26 -0
- package/dist/components/datagrid/column/index.d.ts +4 -0
- package/dist/components/datagrid/column/index.js +4 -0
- package/dist/components/datagrid/context.d.ts +2 -29
- package/dist/components/datagrid/context.js +4 -18
- package/dist/components/datagrid/datagrid-body.svelte +7 -20
- package/dist/components/datagrid/datagrid-body.svelte.d.ts +8 -15
- package/dist/components/datagrid/datagrid-checkbox.svelte +60 -63
- package/dist/components/datagrid/datagrid-checkbox.svelte.d.ts +1 -3
- package/dist/components/datagrid/datagrid-footer.svelte +27 -34
- package/dist/components/datagrid/datagrid-footer.svelte.d.ts +12 -12
- package/dist/components/datagrid/datagrid-header.svelte +10 -17
- package/dist/components/datagrid/datagrid-header.svelte.d.ts +12 -12
- package/dist/components/datagrid/datagrid-root.svelte +49 -59
- package/dist/components/datagrid/datagrid-root.svelte.d.ts +15 -14
- package/dist/components/datagrid/row/bond.svelte.d.ts +42 -0
- package/dist/components/datagrid/row/bond.svelte.js +72 -0
- package/dist/components/datagrid/{tr/datagrid-tr.css → row/datagrid-row.css} +1 -1
- package/dist/components/datagrid/row/datagrid-row.svelte +64 -0
- package/dist/components/datagrid/row/datagrid-row.svelte.d.ts +27 -0
- package/dist/components/datagrid/row/index.d.ts +4 -0
- package/dist/components/datagrid/row/index.js +4 -0
- package/dist/components/datagrid/types.d.ts +56 -116
- package/dist/components/date-picker/bond.svelte.d.ts +0 -12
- package/dist/components/date-picker/date-picker-calendar.svelte +58 -58
- package/dist/components/date-picker/date-picker-months.svelte +1 -1
- package/dist/components/date-picker/date-picker-root.svelte +96 -96
- package/dist/components/date-picker/date-picker-root.svelte.d.ts +1 -1
- package/dist/components/date-picker/date-picker-years.svelte +1 -1
- package/dist/components/date-picker/types.d.ts +6 -3
- package/dist/components/dialog/atoms.d.ts +1 -1
- package/dist/components/dialog/atoms.js +1 -1
- package/dist/components/dialog/bond.svelte.d.ts +66 -28
- package/dist/components/dialog/bond.svelte.js +136 -117
- package/dist/components/dialog/dialog-body.svelte +1 -1
- package/dist/components/dialog/dialog-close.svelte +58 -0
- package/dist/components/dialog/dialog-close.svelte.d.ts +26 -0
- package/dist/components/dialog/dialog-content.svelte +2 -2
- package/dist/components/dialog/dialog-description.svelte +1 -1
- package/dist/components/dialog/dialog-footer.svelte +1 -1
- package/dist/components/dialog/dialog-header.svelte +1 -1
- package/dist/components/dialog/dialog-root.svelte +102 -82
- package/dist/components/dialog/dialog-title.svelte +1 -1
- package/dist/components/dialog/motion.svelte.js +68 -26
- package/dist/components/dialog/types.d.ts +16 -51
- package/dist/components/divider/types.d.ts +1 -6
- package/dist/components/drawer/bond.svelte.d.ts +61 -36
- package/dist/components/drawer/bond.svelte.js +149 -121
- package/dist/components/drawer/drawer-backdrop.svelte +2 -1
- package/dist/components/drawer/drawer-body.svelte +1 -1
- package/dist/components/drawer/drawer-content.svelte +5 -5
- package/dist/components/drawer/drawer-content.svelte.d.ts +4 -1
- package/dist/components/drawer/drawer-description.svelte +1 -1
- package/dist/components/drawer/drawer-footer.svelte +1 -1
- package/dist/components/drawer/drawer-header.svelte +1 -1
- package/dist/components/drawer/drawer-root.svelte +96 -87
- package/dist/components/drawer/drawer-title.svelte +1 -1
- package/dist/components/drawer/motion.d.ts +59 -5
- package/dist/components/drawer/motion.js +133 -15
- package/dist/components/drawer/types.d.ts +15 -24
- package/dist/components/dropdown/atoms.d.ts +4 -8
- package/dist/components/dropdown/atoms.js +4 -9
- package/dist/components/dropdown/bond.svelte.d.ts +4 -53
- package/dist/components/dropdown/bond.svelte.js +4 -89
- package/dist/components/dropdown/dropdown-query.svelte +43 -43
- package/dist/components/dropdown/dropdown-root.svelte +79 -79
- package/dist/components/dropdown/dropdown-root.svelte.d.ts +4 -4
- package/dist/components/dropdown/dropdown-selection.svelte +55 -55
- package/dist/components/dropdown/dropdown-selections.svelte +70 -70
- package/dist/components/dropdown/dropdown-trigger.svelte +30 -30
- package/dist/components/dropdown/index.d.ts +43 -7
- package/dist/components/dropdown/index.js +34 -6
- package/dist/components/dropdown/item/bond.svelte.d.ts +36 -0
- package/dist/components/dropdown/item/bond.svelte.js +85 -0
- package/dist/components/dropdown/item/controller.svelte.d.ts +1 -1
- package/dist/components/dropdown/item/dropdown-item.svelte +81 -107
- package/dist/components/dropdown/item/index.d.ts +11 -3
- package/dist/components/dropdown/item/index.js +10 -3
- package/dist/components/dropdown/types.d.ts +2 -67
- package/dist/components/dropdown-menu/atoms.d.ts +9 -0
- package/dist/components/dropdown-menu/atoms.js +9 -0
- package/dist/components/dropdown-menu/attachments.svelte.d.ts +2 -0
- package/dist/components/dropdown-menu/attachments.svelte.js +5 -0
- package/dist/components/dropdown-menu/bond.svelte.d.ts +72 -0
- package/dist/components/dropdown-menu/bond.svelte.js +173 -0
- package/dist/components/dropdown-menu/dropdown-menu-content.svelte +40 -0
- package/dist/components/dropdown-menu/dropdown-menu-content.svelte.d.ts +37 -0
- package/dist/components/dropdown-menu/dropdown-menu-root.svelte +14 -0
- package/dist/components/dropdown-menu/dropdown-menu-root.svelte.d.ts +4 -0
- package/dist/components/dropdown-menu/index.d.ts +7 -0
- package/dist/components/dropdown-menu/index.js +6 -0
- package/dist/components/dropdown-menu/item/bond.svelte.d.ts +26 -0
- package/dist/components/dropdown-menu/item/bond.svelte.js +54 -0
- package/dist/components/dropdown-menu/item/controller.svelte.d.ts +39 -0
- package/dist/components/dropdown-menu/item/controller.svelte.js +73 -0
- package/dist/components/dropdown-menu/item/dropdown-menu-item.svelte +75 -0
- package/dist/components/dropdown-menu/item/dropdown-menu-item.svelte.d.ts +32 -0
- package/dist/components/dropdown-menu/item/index.d.ts +3 -0
- package/dist/components/dropdown-menu/item/index.js +3 -0
- package/dist/components/dropdown-menu/item/types.d.ts +57 -0
- package/dist/components/dropdown-menu/item/types.js +1 -0
- package/dist/components/dropdown-menu/types.d.ts +3 -0
- package/dist/components/dropdown-menu/types.js +1 -0
- package/dist/components/element/html-element.svelte +114 -85
- package/dist/components/element/html-element.svelte.d.ts +1 -1
- package/dist/components/element/svg-element.svelte +88 -88
- package/dist/components/element/types.d.ts +32 -20
- package/dist/components/form/field/atoms.d.ts +1 -1
- package/dist/components/form/field/atoms.js +1 -1
- package/dist/components/form/field/bond.svelte.js +0 -6
- package/dist/components/form/field/field-control.svelte +30 -9
- package/dist/components/form/field/field-control.svelte.d.ts +12 -22
- package/dist/components/form/field/field-helper-text.svelte +23 -0
- package/dist/components/form/field/field-helper-text.svelte.d.ts +26 -0
- package/dist/components/form/field/field-label.svelte +5 -7
- package/dist/components/form/field/field-label.svelte.d.ts +2 -2
- package/dist/components/form/field/field-root.svelte +17 -8
- package/dist/components/form/form-root.svelte +66 -66
- package/dist/components/form/types.d.ts +34 -58
- package/dist/components/icon/icon.svelte +40 -40
- package/dist/components/icon/types.d.ts +4 -7
- package/dist/components/image/index.d.ts +2 -0
- package/dist/components/image/index.js +2 -1
- package/dist/components/index.d.ts +11 -0
- package/dist/components/index.js +11 -0
- package/dist/components/input/atoms.d.ts +19 -1
- package/dist/components/input/atoms.js +19 -1
- package/dist/components/input/color/color-control.svelte +197 -0
- package/dist/components/input/color/color-control.svelte.d.ts +4 -0
- package/dist/components/input/color/index.d.ts +5 -0
- package/dist/components/input/color/index.js +5 -0
- package/dist/components/input/color/segment.svelte +240 -0
- package/dist/components/input/color/segment.svelte.d.ts +6 -0
- package/dist/components/input/color/shared.d.ts +23 -0
- package/dist/components/input/color/shared.js +349 -0
- package/dist/components/input/color/swatch.svelte +23 -0
- package/dist/components/input/color/swatch.svelte.d.ts +8 -0
- package/dist/components/input/color/types.d.ts +56 -0
- package/dist/components/input/color/types.js +2 -0
- package/dist/components/input/index.d.ts +1 -0
- package/dist/components/input/index.js +1 -0
- package/dist/components/input/input-control.svelte +3 -1
- package/dist/components/input/input-currency-control.svelte +189 -0
- package/dist/components/input/input-currency-control.svelte.d.ts +4 -0
- package/dist/components/input/input-email-control.svelte +128 -0
- package/dist/components/input/input-email-control.svelte.d.ts +4 -0
- package/dist/components/input/input-file-control.svelte +127 -0
- package/dist/components/input/input-file-control.svelte.d.ts +4 -0
- package/dist/components/input/input-icon.svelte.d.ts +1 -1
- package/dist/components/input/input-location.svelte +335 -0
- package/dist/components/input/input-location.svelte.d.ts +4 -0
- package/dist/components/input/input-number-control.svelte +114 -0
- package/dist/components/input/input-number-control.svelte.d.ts +6 -0
- package/dist/components/input/input-otp-control.svelte +206 -0
- package/dist/components/input/input-otp-control.svelte.d.ts +4 -0
- package/dist/components/input/input-password-control.svelte +91 -0
- package/dist/components/input/input-password-control.svelte.d.ts +3 -0
- package/dist/components/input/input-phone-control.svelte +394 -0
- package/dist/components/input/input-phone-control.svelte.d.ts +4 -0
- package/dist/components/input/input-placeholder.svelte.d.ts +1 -1
- package/dist/components/input/input-root.svelte +74 -74
- package/dist/components/input/input-text-control.svelte +59 -0
- package/dist/components/input/input-text-control.svelte.d.ts +4 -0
- package/dist/components/input/input-url-control.svelte +218 -0
- package/dist/components/input/input-url-control.svelte.d.ts +4 -0
- package/dist/components/input/time/datetime-control.svelte +281 -0
- package/dist/components/input/time/datetime-control.svelte.d.ts +5 -0
- package/dist/components/input/time/index.d.ts +6 -0
- package/dist/components/input/time/index.js +6 -0
- package/dist/components/input/time/segment.svelte +143 -0
- package/dist/components/input/time/segment.svelte.d.ts +6 -0
- package/dist/components/input/time/shared.d.ts +29 -0
- package/dist/components/input/time/shared.js +150 -0
- package/dist/components/input/time/time-control.svelte +237 -0
- package/dist/components/input/time/time-control.svelte.d.ts +3 -0
- package/dist/components/input/time/types.d.ts +34 -0
- package/dist/components/input/time/types.js +4 -0
- package/dist/components/input/types.d.ts +355 -17
- package/dist/components/label/types.d.ts +4 -7
- package/dist/components/layer/bond.svelte.d.ts +2 -2
- package/dist/components/layer/bond.svelte.js +1 -1
- package/dist/components/layer/index.d.ts +1 -0
- package/dist/components/layer/layer-inner.svelte.d.ts +1 -1
- package/dist/components/layer/layer-root.svelte +65 -65
- package/dist/components/layer/layer-root.svelte.d.ts +1 -1
- package/dist/components/layer/types.d.ts +6 -6
- package/dist/components/lazy/index.d.ts +1 -0
- package/dist/components/lazy/lazy.svelte +29 -29
- package/dist/components/lazy/types.d.ts +4 -4
- package/dist/components/link/index.d.ts +1 -0
- package/dist/components/link/types.d.ts +5 -6
- package/dist/components/list/index.d.ts +1 -0
- package/dist/components/list/types.d.ts +5 -6
- package/dist/components/menu/atoms.d.ts +2 -7
- package/dist/components/menu/atoms.js +2 -7
- package/dist/components/menu/bond.svelte.d.ts +9 -23
- package/dist/components/menu/bond.svelte.js +6 -0
- package/dist/components/menu/index.d.ts +40 -4
- package/dist/components/menu/index.js +26 -3
- package/dist/components/menu/item/bond.svelte.d.ts +27 -0
- package/dist/components/menu/item/bond.svelte.js +54 -0
- package/dist/components/menu/item/controller.svelte.d.ts +1 -1
- package/dist/components/menu/item/index.d.ts +5 -2
- package/dist/components/menu/item/index.js +4 -2
- package/dist/components/menu/item/menu-item.svelte +87 -103
- package/dist/components/menu/item/menu-item.svelte.d.ts +15 -14
- package/dist/components/menu/item/types.d.ts +5 -12
- package/dist/components/menu/menu-content.svelte +40 -40
- package/dist/components/menu/menu-root.svelte +15 -15
- package/dist/components/menu/menu-root.svelte.d.ts +1 -1
- package/dist/components/menu/types.d.ts +2 -6
- package/dist/components/popover/bond.svelte.d.ts +67 -39
- package/dist/components/popover/bond.svelte.js +159 -197
- package/dist/components/popover/index.d.ts +3 -1
- package/dist/components/popover/index.js +3 -1
- package/dist/components/popover/motion.d.ts +29 -1
- package/dist/components/popover/motion.js +128 -50
- package/dist/components/popover/popover-arrow.svelte +97 -110
- package/dist/components/popover/popover-arrow.svelte.d.ts +1 -2
- package/dist/components/popover/popover-content.svelte +159 -123
- package/dist/components/popover/popover-engine.svelte +118 -0
- package/dist/components/popover/popover-engine.svelte.d.ts +3 -0
- package/dist/components/popover/popover-indicator.svelte +2 -13
- package/dist/components/popover/popover-indicator.svelte.d.ts +0 -6
- package/dist/components/popover/popover-root.svelte +87 -49
- package/dist/components/popover/popover-root.svelte.d.ts +2 -1
- package/dist/components/popover/popover-trigger.svelte +35 -35
- package/dist/components/popover/strategies/floating.svelte +109 -0
- package/dist/components/popover/strategies/floating.svelte.d.ts +3 -0
- package/dist/components/popover/strategies/index.d.ts +1 -0
- package/dist/components/popover/strategies/index.js +1 -0
- package/dist/components/popover/strategy-types.d.ts +40 -0
- package/dist/components/popover/strategy-types.js +1 -0
- package/dist/components/popover/types.d.ts +10 -36
- package/dist/components/portal/active-portal.svelte +5 -4
- package/dist/components/portal/bond.svelte.d.ts +12 -8
- package/dist/components/portal/bond.svelte.js +25 -27
- package/dist/components/portal/index.d.ts +1 -0
- package/dist/components/portal/index.js +1 -0
- package/dist/components/portal/portal-inner.svelte +1 -1
- package/dist/components/portal/portal-inner.svelte.d.ts +1 -1
- package/dist/components/portal/portal-root.svelte +76 -76
- package/dist/components/portal/portal-root.svelte.d.ts +1 -1
- package/dist/components/portal/portals/bond.svelte.d.ts +2 -2
- package/dist/components/portal/portals/bond.svelte.js +2 -2
- package/dist/components/portal/teleport.svelte +47 -49
- package/dist/components/portal/teleport.svelte.d.ts +1 -2
- package/dist/components/portal/types.d.ts +7 -25
- package/dist/components/portal/utils.js +3 -3
- package/dist/components/portal/zlayer.svelte.d.ts +16 -0
- package/dist/components/portal/zlayer.svelte.js +25 -0
- package/dist/components/radio/index.d.ts +2 -0
- package/dist/components/radio/index.js +1 -0
- package/dist/components/radio/motion.d.ts +24 -0
- package/dist/components/radio/motion.js +59 -0
- package/dist/components/radio/radio.svelte +22 -12
- package/dist/components/radio/types.d.ts +5 -14
- package/dist/components/root/bond.svelte.d.ts +2 -2
- package/dist/components/root/bond.svelte.js +1 -1
- package/dist/components/root/root.svelte +82 -92
- package/dist/components/root/root.svelte.d.ts +2 -2
- package/dist/components/root/types.d.ts +4 -15
- package/dist/components/scrollable/atoms.d.ts +1 -0
- package/dist/components/scrollable/atoms.js +1 -0
- package/dist/components/scrollable/bond.svelte.d.ts +73 -189
- package/dist/components/scrollable/bond.svelte.js +195 -371
- package/dist/components/scrollable/scrollable-container.css +22 -22
- package/dist/components/scrollable/scrollable-container.svelte +66 -61
- package/dist/components/scrollable/scrollable-container.svelte.d.ts +12 -12
- package/dist/components/scrollable/scrollable-content.svelte +22 -17
- package/dist/components/scrollable/scrollable-content.svelte.d.ts +12 -12
- package/dist/components/scrollable/scrollable-root.svelte +106 -101
- package/dist/components/scrollable/scrollable-root.svelte.d.ts +12 -12
- package/dist/components/scrollable/scrollable-thumb.svelte +21 -45
- package/dist/components/scrollable/scrollable-thumb.svelte.d.ts +12 -12
- package/dist/components/scrollable/scrollable-track.svelte +21 -22
- package/dist/components/scrollable/scrollable-track.svelte.d.ts +12 -12
- package/dist/components/scrollable/types.d.ts +15 -38
- package/dist/components/select/atoms.d.ts +8 -0
- package/dist/components/select/atoms.js +8 -0
- package/dist/components/select/attachments.svelte.d.ts +2 -0
- package/dist/components/select/attachments.svelte.js +5 -0
- package/dist/components/select/bond.svelte.d.ts +56 -0
- package/dist/components/select/bond.svelte.js +112 -0
- package/dist/components/select/index.d.ts +11 -0
- package/dist/components/select/index.js +10 -0
- package/dist/components/select/item/attachments.svelte.d.ts +3 -0
- package/dist/components/select/item/attachments.svelte.js +6 -0
- package/dist/components/select/item/bond.svelte.d.ts +33 -0
- package/dist/components/select/item/bond.svelte.js +77 -0
- package/dist/components/select/item/controller.svelte.d.ts +39 -0
- package/dist/components/select/item/controller.svelte.js +105 -0
- package/dist/components/select/item/index.d.ts +5 -0
- package/dist/components/select/item/index.js +5 -0
- package/dist/components/select/item/select-item.svelte +81 -0
- package/dist/components/select/item/select-item.svelte.d.ts +25 -0
- package/dist/components/select/item/types.d.ts +29 -0
- package/dist/components/select/item/types.js +1 -0
- package/dist/components/select/runes.svelte.d.ts +10 -0
- package/dist/components/select/runes.svelte.js +15 -0
- package/dist/components/select/select-placeholder.svelte +40 -0
- package/dist/components/select/select-placeholder.svelte.d.ts +34 -0
- package/dist/components/select/select-root.svelte +80 -0
- package/dist/components/select/select-root.svelte.d.ts +30 -0
- package/dist/components/select/select-selection.svelte +55 -0
- package/dist/components/select/select-selection.svelte.d.ts +26 -0
- package/dist/components/select/select-selections.svelte +70 -0
- package/dist/components/select/select-selections.svelte.d.ts +5 -0
- package/dist/components/select/select-trigger.svelte +30 -0
- package/dist/components/select/select-trigger.svelte.d.ts +26 -0
- package/dist/components/select/types.d.ts +61 -0
- package/dist/components/select/types.js +1 -0
- package/dist/components/sidebar/bond.svelte.d.ts +10 -7
- package/dist/components/sidebar/bond.svelte.js +20 -15
- package/dist/components/sidebar/sidebar-content.svelte +1 -1
- package/dist/components/sidebar/sidebar-root.svelte +50 -41
- package/dist/components/sidebar/types.d.ts +10 -15
- package/dist/components/slider/index.d.ts +2 -0
- package/dist/components/slider/index.js +2 -0
- package/dist/components/slider/slider.svelte +164 -0
- package/dist/components/slider/slider.svelte.d.ts +6 -0
- package/dist/components/slider/types.d.ts +78 -0
- package/dist/components/slider/types.js +1 -0
- package/dist/components/stack/bond.svelte.d.ts +50 -0
- package/dist/components/stack/bond.svelte.js +174 -0
- package/dist/components/stack/index.d.ts +2 -0
- package/dist/components/stack/index.js +2 -0
- package/dist/components/stack/stack-item.svelte +40 -4
- package/dist/components/stack/stack-item.svelte.d.ts +6 -5
- package/dist/components/stack/stack-root.svelte +33 -4
- package/dist/components/stack/stack-root.svelte.d.ts +14 -5
- package/dist/components/stack/types.d.ts +11 -10
- package/dist/components/stepper/bond.svelte.d.ts +8 -7
- package/dist/components/stepper/bond.svelte.js +14 -11
- package/dist/components/stepper/step/README.md +97 -97
- package/dist/components/stepper/step/bond.svelte.d.ts +74 -63
- package/dist/components/stepper/step/bond.svelte.js +105 -69
- package/dist/components/stepper/step/step-body.svelte +39 -39
- package/dist/components/stepper/step/step-description.svelte +33 -33
- package/dist/components/stepper/step/step-header.svelte +34 -34
- package/dist/components/stepper/step/step-indicator.svelte +62 -62
- package/dist/components/stepper/step/step-root.svelte +42 -42
- package/dist/components/stepper/step/step-separator.svelte +48 -48
- package/dist/components/stepper/step/step-title.svelte +33 -33
- package/dist/components/stepper/step/types.d.ts +13 -57
- package/dist/components/stepper/stepper-body.svelte +31 -43
- package/dist/components/stepper/stepper-content.svelte +45 -45
- package/dist/components/stepper/stepper-footer.svelte +31 -31
- package/dist/components/stepper/stepper-header.svelte +27 -39
- package/dist/components/stepper/stepper-root.svelte +55 -61
- package/dist/components/stepper/types.d.ts +10 -36
- package/dist/components/swatch/index.d.ts +1 -0
- package/dist/components/swatch/index.js +1 -0
- package/dist/components/swatch/swatch.svelte +57 -0
- package/dist/components/swatch/swatch.svelte.d.ts +9 -0
- package/dist/components/switch/index.d.ts +2 -0
- package/dist/components/switch/index.js +2 -0
- package/dist/components/switch/switch.svelte +76 -0
- package/dist/components/switch/switch.svelte.d.ts +6 -0
- package/dist/components/switch/types.d.ts +43 -0
- package/dist/components/switch/types.js +1 -0
- package/dist/components/tabs/bond.svelte.d.ts +38 -19
- package/dist/components/tabs/bond.svelte.js +53 -46
- package/dist/components/tabs/tab/attachments.svelte.d.ts +5 -2
- package/dist/components/tabs/tab/attachments.svelte.js +4 -3
- package/dist/components/tabs/tab/bond.svelte.d.ts +35 -23
- package/dist/components/tabs/tab/bond.svelte.js +81 -56
- package/dist/components/tabs/tab/tab-body.svelte +61 -43
- package/dist/components/tabs/tab/tab-description.svelte +33 -33
- package/dist/components/tabs/tab/tab-header.svelte +61 -61
- package/dist/components/tabs/tab/tab-root.svelte +49 -50
- package/dist/components/tabs/tab/tab-root.svelte.d.ts +13 -35
- package/dist/components/tabs/tabs-body.svelte +39 -35
- package/dist/components/tabs/tabs-body.svelte.d.ts +1 -1
- package/dist/components/tabs/tabs-content.svelte +32 -51
- package/dist/components/tabs/tabs-header.svelte +32 -32
- package/dist/components/tabs/tabs-root.svelte +56 -56
- package/dist/components/tabs/types.d.ts +20 -37
- package/dist/components/textarea/types.d.ts +6 -12
- package/dist/components/toast/atoms.d.ts +1 -0
- package/dist/components/toast/atoms.js +1 -0
- package/dist/components/toast/index.d.ts +1 -0
- package/dist/components/toast/index.js +1 -0
- package/dist/components/toast/manager.svelte.d.ts +38 -0
- package/dist/components/toast/manager.svelte.js +82 -0
- package/dist/components/toast/toast-description.svelte.d.ts +1 -1
- package/dist/components/toast/toast-root-managed.svelte +64 -0
- package/dist/components/toast/toast-root-managed.svelte.d.ts +7 -0
- package/dist/components/toast/toast-root.svelte.d.ts +1 -1
- package/dist/components/toast/toast-title.svelte.d.ts +1 -1
- package/dist/components/toast/toast-toaster.svelte +42 -0
- package/dist/components/toast/toast-toaster.svelte.d.ts +4 -0
- package/dist/components/toast/types.d.ts +22 -31
- package/dist/components/tooltip/index.d.ts +1 -0
- package/dist/components/tooltip/tooltip-trigger.svelte +39 -39
- package/dist/components/tooltip/types.d.ts +5 -8
- package/dist/components/tree/bond.svelte.d.ts +28 -19
- package/dist/components/tree/bond.svelte.js +62 -53
- package/dist/components/tree/tree-body.svelte +1 -1
- package/dist/components/tree/tree-header.svelte +1 -1
- package/dist/components/tree/tree-header.svelte.d.ts +1 -1
- package/dist/components/tree/tree-indicator.svelte +1 -1
- package/dist/components/tree/tree-root.svelte +66 -66
- package/dist/components/tree/types.d.ts +4 -28
- package/dist/components/virtual/index.d.ts +2 -0
- package/dist/components/virtual/index.js +2 -0
- package/dist/components/virtual/types.d.ts +1 -6
- package/dist/constants/motion.d.ts +9 -0
- package/dist/constants/motion.js +9 -0
- package/dist/context/index.d.ts +1 -1
- package/dist/context/preset.svelte.d.ts +169 -2
- package/dist/runes/color-scheme.svelte.js +17 -5
- package/dist/shared/bond.svelte.d.ts +29 -3
- package/dist/shared/bond.svelte.js +126 -4
- package/dist/shared/index.d.ts +1 -1
- package/dist/shared/index.js +1 -1
- package/dist/shared/motion.d.ts +1 -0
- package/dist/shared/motion.js +2 -8
- package/dist/types/index.d.ts +4 -0
- package/dist/utils/index.d.ts +1 -1
- package/dist/utils/index.js +1 -1
- package/dist/utils/promise.svelte.d.ts +5 -0
- package/dist/utils/promise.svelte.js +17 -0
- package/dist/utils/variant.d.ts +10 -1
- package/dist/utils/variant.js +11 -1
- package/package.json +171 -48
- package/dist/components/accordion/accordion.stories.svelte +0 -70
- package/dist/components/accordion/accordion.stories.svelte.d.ts +0 -18
- package/dist/components/alert/alert.stories.svelte +0 -400
- package/dist/components/alert/alert.stories.svelte.d.ts +0 -3
- package/dist/components/avatar/avatar.stories.svelte +0 -22
- package/dist/components/avatar/avatar.stories.svelte.d.ts +0 -26
- package/dist/components/badge/badge.stories.svelte +0 -12
- package/dist/components/badge/badge.stories.svelte.d.ts +0 -26
- package/dist/components/breadcrumb/breadcrumb.stories.svelte +0 -16
- package/dist/components/breadcrumb/breadcrumb.stories.svelte.d.ts +0 -26
- package/dist/components/button/button.stories.svelte +0 -27
- package/dist/components/button/button.stories.svelte.d.ts +0 -18
- package/dist/components/calendar/calendar.stories.svelte +0 -26
- package/dist/components/calendar/calendar.stories.svelte.d.ts +0 -26
- package/dist/components/card/card.stories.svelte +0 -133
- package/dist/components/card/card.stories.svelte.d.ts +0 -19
- package/dist/components/checkbox/checkbox.stories.svelte +0 -22
- package/dist/components/checkbox/checkbox.stories.svelte.d.ts +0 -6
- package/dist/components/collapsible/collapsible.stories.svelte +0 -172
- package/dist/components/collapsible/collapsible.stories.svelte.d.ts +0 -18
- package/dist/components/combobox/combobox.stories.svelte +0 -63
- package/dist/components/combobox/combobox.stories.svelte.d.ts +0 -3
- package/dist/components/container/container.stories.svelte +0 -20
- package/dist/components/container/container.stories.svelte.d.ts +0 -26
- package/dist/components/contextmenu/atoms.d.ts +0 -0
- package/dist/components/contextmenu/atoms.js +0 -1
- package/dist/components/contextmenu/contextmenu-trigger.svelte +0 -0
- package/dist/components/contextmenu/contextmenu-trigger.svelte.d.ts +0 -26
- package/dist/components/contextmenu/indext.d.ts +0 -0
- package/dist/components/contextmenu/indext.js +0 -1
- package/dist/components/datagrid/datagrid.stories.svelte +0 -72
- package/dist/components/datagrid/datagrid.stories.svelte.d.ts +0 -6
- package/dist/components/datagrid/td/bond.svelte.d.ts +0 -28
- package/dist/components/datagrid/td/bond.svelte.js +0 -40
- package/dist/components/datagrid/td/datagrid-td.svelte +0 -66
- package/dist/components/datagrid/td/datagrid-td.svelte.d.ts +0 -30
- package/dist/components/datagrid/td/index.d.ts +0 -2
- package/dist/components/datagrid/td/index.js +0 -2
- package/dist/components/datagrid/th/bond.svelte.d.ts +0 -38
- package/dist/components/datagrid/th/bond.svelte.js +0 -66
- package/dist/components/datagrid/th/datagrid-th.svelte.d.ts +0 -26
- package/dist/components/datagrid/th/index.d.ts +0 -2
- package/dist/components/datagrid/th/index.js +0 -2
- package/dist/components/datagrid/tr/bond.svelte.d.ts +0 -37
- package/dist/components/datagrid/tr/bond.svelte.js +0 -72
- package/dist/components/datagrid/tr/datagrid-tr.svelte +0 -90
- package/dist/components/datagrid/tr/datagrid-tr.svelte.d.ts +0 -28
- package/dist/components/datagrid/tr/index.d.ts +0 -2
- package/dist/components/datagrid/tr/index.js +0 -2
- package/dist/components/date-picker/date-picker.stories.svelte +0 -35
- package/dist/components/date-picker/date-picker.stories.svelte.d.ts +0 -3
- package/dist/components/dialog/dialog.stories.svelte +0 -64
- package/dist/components/dialog/dialog.stories.svelte.d.ts +0 -3
- package/dist/components/drawer/drawer.stories.svelte +0 -141
- package/dist/components/drawer/drawer.stories.svelte.d.ts +0 -3
- package/dist/components/dropdown/dropdown.stories.svelte +0 -127
- package/dist/components/dropdown/dropdown.stories.svelte.d.ts +0 -3
- package/dist/components/element/element.stories.svelte +0 -37
- package/dist/components/element/element.stories.svelte.d.ts +0 -3
- package/dist/components/form/field/field-errors.svelte +0 -9
- package/dist/components/form/field/field-errors.svelte.d.ts +0 -11
- package/dist/components/form/form.stories.svelte +0 -96
- package/dist/components/form/form.stories.svelte.d.ts +0 -18
- package/dist/components/image/image.stories.svelte +0 -20
- package/dist/components/image/image.stories.svelte.d.ts +0 -26
- package/dist/components/input/input.stories.svelte +0 -35
- package/dist/components/input/input.stories.svelte.d.ts +0 -18
- package/dist/components/label/label.stories.svelte +0 -15
- package/dist/components/label/label.stories.svelte.d.ts +0 -26
- package/dist/components/lazy/lazy.stories.svelte +0 -28
- package/dist/components/lazy/lazy.stories.svelte.d.ts +0 -19
- package/dist/components/link/link.stories.svelte +0 -15
- package/dist/components/link/link.stories.svelte.d.ts +0 -26
- package/dist/components/menu/menu.stories.svelte +0 -33
- package/dist/components/menu/menu.stories.svelte.d.ts +0 -3
- package/dist/components/popover/popover.stories.svelte +0 -37
- package/dist/components/popover/popover.stories.svelte.d.ts +0 -3
- package/dist/components/qr-code/qr-code.stories.svelte +0 -18
- package/dist/components/qr-code/qr-code.stories.svelte.d.ts +0 -26
- package/dist/components/radio/radio-group.stories.svelte +0 -41
- package/dist/components/radio/radio-group.stories.svelte.d.ts +0 -6
- package/dist/components/radio/radio.stories.svelte +0 -17
- package/dist/components/radio/radio.stories.svelte.d.ts +0 -6
- package/dist/components/root/l0-portal.svelte +0 -8
- package/dist/components/root/l0-portal.svelte.d.ts +0 -26
- package/dist/components/root/l1-portal.svelte +0 -7
- package/dist/components/root/l1-portal.svelte.d.ts +0 -26
- package/dist/components/root/toasts-portal.svelte +0 -7
- package/dist/components/root/toasts-portal.svelte.d.ts +0 -26
- package/dist/components/scrollable/scrollable.stories.svelte +0 -116
- package/dist/components/scrollable/scrollable.stories.svelte.d.ts +0 -26
- package/dist/components/sidebar/sidebar.stories.svelte +0 -43
- package/dist/components/sidebar/sidebar.stories.svelte.d.ts +0 -3
- package/dist/components/stepper/stepper.stories.svelte +0 -264
- package/dist/components/stepper/stepper.stories.svelte.d.ts +0 -4
- package/dist/components/tabs/tabs.stories.svelte +0 -70
- package/dist/components/tabs/tabs.stories.svelte.d.ts +0 -3
- package/dist/components/tooltip/tooltip.stories.svelte +0 -32
- package/dist/components/tooltip/tooltip.stories.svelte.d.ts +0 -3
- package/dist/components/tree/tree.stories.svelte +0 -142
- package/dist/components/tree/tree.stories.svelte.d.ts +0 -3
- /package/dist/components/{contextmenu → context-menu}/types.js +0 -0
|
@@ -1,369 +1,159 @@
|
|
|
1
|
+
import { getContext, setContext, untrack } from 'svelte';
|
|
1
2
|
import { createAttachmentKey } from 'svelte/attachments';
|
|
2
|
-
import {
|
|
3
|
-
|
|
3
|
+
import { Bond, BondState, BondAtom } from '../../shared/bond.svelte';
|
|
4
|
+
// ============================================================================
|
|
5
|
+
// BondAtom Classes
|
|
6
|
+
// ============================================================================
|
|
4
7
|
/**
|
|
5
|
-
*
|
|
6
|
-
* Extends the base Bond class with scrollable-specific functionality
|
|
8
|
+
* Root atom for the scrollable component
|
|
7
9
|
*/
|
|
8
|
-
export class
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
/** Reference to parent scrollable bond (for nested scrollable areas) */
|
|
12
|
-
#parent;
|
|
13
|
-
/**
|
|
14
|
-
* Creates a new scrollable bond instance
|
|
15
|
-
* @param state - The scrollable state instance to manage
|
|
16
|
-
*/
|
|
17
|
-
constructor(state) {
|
|
18
|
-
super(state);
|
|
19
|
-
// Capture any existing scrollable context as parent
|
|
20
|
-
this.#parent = ScrollableBond.get();
|
|
21
|
-
}
|
|
22
|
-
/**
|
|
23
|
-
* Gets the parent scrollable bond if this is a nested scrollable
|
|
24
|
-
* @returns The parent bond or undefined if this is the root scrollable
|
|
25
|
-
*/
|
|
26
|
-
get parent() {
|
|
27
|
-
return this.#parent;
|
|
28
|
-
}
|
|
29
|
-
/**
|
|
30
|
-
* Shares this bond instance through the context system
|
|
31
|
-
* Makes this bond available to child components
|
|
32
|
-
* @returns This bond instance for chaining
|
|
33
|
-
*/
|
|
34
|
-
share() {
|
|
35
|
-
ScrollableBond.set(this);
|
|
36
|
-
return this;
|
|
37
|
-
}
|
|
38
|
-
/**
|
|
39
|
-
* Retrieves the current scrollable bond from context
|
|
40
|
-
* @returns The active scrollable bond or undefined if none exists
|
|
41
|
-
*/
|
|
42
|
-
static get() {
|
|
43
|
-
return getContext(ScrollableBond.CONTEXT_KEY);
|
|
44
|
-
}
|
|
45
|
-
/**
|
|
46
|
-
* Sets the scrollable bond in context for child components
|
|
47
|
-
* @param bond - The bond instance to set in context
|
|
48
|
-
* @returns The bond that was set
|
|
49
|
-
*/
|
|
50
|
-
static set(bond) {
|
|
51
|
-
return setContext(ScrollableBond.CONTEXT_KEY, bond);
|
|
10
|
+
export class ScrollableRootAtom extends BondAtom {
|
|
11
|
+
constructor(bond) {
|
|
12
|
+
super(bond, 'root');
|
|
52
13
|
}
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
* The root element contains the entire scrollable interface but doesn't scroll itself
|
|
56
|
-
* @param props - Additional props to merge with the generated props
|
|
57
|
-
* @returns Object containing all necessary props for the root element
|
|
58
|
-
*/
|
|
59
|
-
root(props = {}) {
|
|
14
|
+
get attrs() {
|
|
15
|
+
const props = untrack(() => this.bond.state.props);
|
|
60
16
|
return {
|
|
61
|
-
|
|
62
|
-
'data-
|
|
63
|
-
'data-
|
|
64
|
-
'data-open': this.state.props.open,
|
|
65
|
-
...props,
|
|
66
|
-
// Attach the root DOM element
|
|
67
|
-
[createAttachmentKey()]: (node) => {
|
|
68
|
-
this.elements.root = node;
|
|
69
|
-
}
|
|
17
|
+
...super.attrs,
|
|
18
|
+
'data-disabled': props.disabled,
|
|
19
|
+
'data-open': props.open
|
|
70
20
|
};
|
|
71
21
|
}
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Container atom for the scrollable area
|
|
25
|
+
*/
|
|
26
|
+
export class ScrollableContainerAtom extends BondAtom {
|
|
27
|
+
constructor(bond) {
|
|
28
|
+
super(bond, 'container');
|
|
29
|
+
}
|
|
30
|
+
get handlers() {
|
|
79
31
|
return {
|
|
80
|
-
'data-atom': this.id ?? '',
|
|
81
|
-
'data-kind': 'scrollable-container',
|
|
82
|
-
// Handle scroll events and update internal state
|
|
83
32
|
onscroll: (e) => {
|
|
84
|
-
this.updateScrollState();
|
|
85
|
-
if ('onscroll' in props && typeof props.onscroll === 'function') {
|
|
86
|
-
props.onscroll(e);
|
|
87
|
-
}
|
|
88
|
-
},
|
|
89
|
-
...props,
|
|
90
|
-
// Attach the container DOM element and initialize scroll state
|
|
91
|
-
[createAttachmentKey()]: (node) => {
|
|
92
|
-
this.elements.container = node;
|
|
93
|
-
this.updateScrollState();
|
|
33
|
+
this.bond.updateScrollState();
|
|
94
34
|
}
|
|
95
35
|
};
|
|
96
36
|
}
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
* This element defines the boundaries and size of the scrollable content
|
|
100
|
-
* @param props - Additional props to merge with the generated props
|
|
101
|
-
* @returns Object containing all necessary props for the content element
|
|
102
|
-
*/
|
|
103
|
-
content(props = {}) {
|
|
104
|
-
return {
|
|
105
|
-
'data-atom': this.id ?? '',
|
|
106
|
-
'data-kind': 'scrollable-content',
|
|
107
|
-
...props,
|
|
108
|
-
// Attach the content DOM element for measurement and interaction
|
|
109
|
-
[createAttachmentKey()]: (node) => {
|
|
110
|
-
this.elements.content = node;
|
|
111
|
-
}
|
|
112
|
-
};
|
|
37
|
+
onmount(node) {
|
|
38
|
+
this.bond.updateScrollState();
|
|
113
39
|
}
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Content atom for the scrollable content wrapper
|
|
43
|
+
*/
|
|
44
|
+
export class ScrollableContentAtom extends BondAtom {
|
|
45
|
+
constructor(bond) {
|
|
46
|
+
super(bond, 'content');
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Track atom for scrollbar tracks (horizontal or vertical)
|
|
51
|
+
*/
|
|
52
|
+
export class ScrollableTrackAtom extends BondAtom {
|
|
53
|
+
#axis;
|
|
54
|
+
constructor(bond, axis) {
|
|
55
|
+
super(bond, axis === 'x' ? 'trackX' : 'trackY');
|
|
56
|
+
this.#axis = axis;
|
|
57
|
+
}
|
|
58
|
+
get attrs() {
|
|
59
|
+
const canScroll = this.#axis === 'x' ? this.bond.canScrollX : this.bond.canScrollY;
|
|
121
60
|
return {
|
|
122
|
-
|
|
123
|
-
'data-
|
|
124
|
-
'data-
|
|
125
|
-
...props,
|
|
126
|
-
// Handle click-to-scroll on the horizontal track
|
|
127
|
-
onclick: (e) => {
|
|
128
|
-
this.handleTrackClick(e, 'x');
|
|
129
|
-
if ('onclick' in props && typeof props.onclick === 'function') {
|
|
130
|
-
props.onclick(e);
|
|
131
|
-
}
|
|
132
|
-
},
|
|
133
|
-
// Attach the horizontal track DOM element
|
|
134
|
-
[createAttachmentKey()]: (node) => {
|
|
135
|
-
this.elements.trackX = node;
|
|
136
|
-
}
|
|
61
|
+
...super.attrs,
|
|
62
|
+
'data-visible': canScroll,
|
|
63
|
+
'data-direction': this.#axis === 'x' ? 'horizontal' : 'vertical'
|
|
137
64
|
};
|
|
138
65
|
}
|
|
139
|
-
|
|
140
|
-
* Creates props for the vertical scrollbar track element
|
|
141
|
-
* Provides click-to-scroll functionality for vertical navigation
|
|
142
|
-
* @param props - Additional props to merge with the generated props
|
|
143
|
-
* @returns Object containing all necessary props for the vertical track element
|
|
144
|
-
*/
|
|
145
|
-
trackY(props = {}) {
|
|
66
|
+
get handlers() {
|
|
146
67
|
return {
|
|
147
|
-
'data-atom': this.id ?? '',
|
|
148
|
-
'data-kind': 'scrollable-track-y',
|
|
149
|
-
'data-visible': this.canScrollY,
|
|
150
|
-
...props,
|
|
151
|
-
// Handle click-to-scroll on the vertical track
|
|
152
68
|
onclick: (e) => {
|
|
153
|
-
this.handleTrackClick(e,
|
|
154
|
-
if ('onclick' in props && typeof props.onclick === 'function') {
|
|
155
|
-
props.onclick(e);
|
|
156
|
-
}
|
|
157
|
-
},
|
|
158
|
-
// Attach the vertical track DOM element
|
|
159
|
-
[createAttachmentKey()]: (node) => {
|
|
160
|
-
this.elements.trackY = node;
|
|
69
|
+
this.bond.handleTrackClick(e, this.#axis);
|
|
161
70
|
}
|
|
162
71
|
};
|
|
163
72
|
}
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Thumb atom for scrollbar thumbs (horizontal or vertical)
|
|
76
|
+
*/
|
|
77
|
+
export class ScrollableThumbAtom extends BondAtom {
|
|
78
|
+
#axis;
|
|
79
|
+
constructor(bond, axis) {
|
|
80
|
+
super(bond, axis === 'x' ? 'thumbX' : 'thumbY');
|
|
81
|
+
this.#axis = axis;
|
|
82
|
+
}
|
|
83
|
+
get attrs() {
|
|
84
|
+
const position = this.#axis === 'x' ? this.bond.getThumbXPosition() : this.bond.getThumbYPosition();
|
|
85
|
+
const size = this.#axis === 'x' ? this.bond.getThumbXSize() : this.bond.getThumbYSize();
|
|
86
|
+
const styleProperty = this.#axis === 'x' ? 'left' : 'top';
|
|
87
|
+
const sizeProperty = this.#axis === 'x' ? 'width' : 'height';
|
|
171
88
|
return {
|
|
172
|
-
|
|
173
|
-
'data-
|
|
174
|
-
|
|
175
|
-
// Dynamically position and size the thumb based on scroll state
|
|
176
|
-
style: `left: ${this.getThumbXPosition()}%; width: ${this.getThumbXSize()}%;`,
|
|
177
|
-
// Handle drag-to-scroll interaction
|
|
178
|
-
onmousedown: (e) => {
|
|
179
|
-
this.handleThumbDrag(e, 'x');
|
|
180
|
-
if ('onmousedown' in props && typeof props.onmousedown === 'function') {
|
|
181
|
-
props.onmousedown(e);
|
|
182
|
-
}
|
|
183
|
-
},
|
|
184
|
-
// Attach the horizontal thumb DOM element
|
|
185
|
-
[createAttachmentKey()]: (node) => {
|
|
186
|
-
this.elements.thumbX = node;
|
|
187
|
-
}
|
|
89
|
+
...super.attrs,
|
|
90
|
+
'data-direction': this.#axis === 'x' ? 'horizontal' : 'vertical',
|
|
91
|
+
style: `${styleProperty}: ${position}%; ${sizeProperty}: ${size}%;`
|
|
188
92
|
};
|
|
189
93
|
}
|
|
190
|
-
|
|
191
|
-
* Creates props for the vertical scrollbar thumb element
|
|
192
|
-
* Provides drag-to-scroll functionality and automatic positioning/sizing
|
|
193
|
-
* @param props - Additional props to merge with the generated props
|
|
194
|
-
* @returns Object containing all necessary props for the vertical thumb element
|
|
195
|
-
*/
|
|
196
|
-
thumbY(props = {}) {
|
|
94
|
+
get handlers() {
|
|
197
95
|
return {
|
|
198
|
-
'data-atom': this.id ?? '',
|
|
199
|
-
'data-kind': 'scrollable-thumb-y',
|
|
200
|
-
...props,
|
|
201
|
-
// Dynamically position and size the thumb based on scroll state
|
|
202
|
-
style: `top: ${this.getThumbYPosition()}%; height: ${this.getThumbYSize()}%;`,
|
|
203
|
-
// Handle drag-to-scroll interaction
|
|
204
96
|
onmousedown: (e) => {
|
|
205
|
-
this.handleThumbDrag(e,
|
|
206
|
-
if ('onmousedown' in props && typeof props.onmousedown === 'function') {
|
|
207
|
-
props.onmousedown(e);
|
|
208
|
-
}
|
|
209
|
-
},
|
|
210
|
-
// Attach the vertical thumb DOM element
|
|
211
|
-
[createAttachmentKey()]: (node) => {
|
|
212
|
-
this.elements.thumbY = node;
|
|
97
|
+
this.bond.handleThumbDrag(e, this.#axis);
|
|
213
98
|
}
|
|
214
99
|
};
|
|
215
100
|
}
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
'data-visible': isHorizontal ? this.canScrollX : this.canScrollY,
|
|
230
|
-
...props,
|
|
231
|
-
// Handle click-to-scroll based on orientation
|
|
232
|
-
onclick: (e) => {
|
|
233
|
-
this.handleTrackClick(e, isHorizontal ? 'x' : 'y');
|
|
234
|
-
if ('onclick' in props && typeof props.onclick === 'function') {
|
|
235
|
-
props.onclick(e);
|
|
236
|
-
}
|
|
237
|
-
},
|
|
238
|
-
[createAttachmentKey()]: (node) => {
|
|
239
|
-
// Set both the unified track reference and the specific axis reference
|
|
240
|
-
if (isHorizontal) {
|
|
241
|
-
this.elements.trackX = node;
|
|
242
|
-
}
|
|
243
|
-
else {
|
|
244
|
-
this.elements.trackY = node;
|
|
245
|
-
}
|
|
246
|
-
}
|
|
247
|
-
};
|
|
101
|
+
}
|
|
102
|
+
// ============================================================================
|
|
103
|
+
// ScrollableBond Class
|
|
104
|
+
// ============================================================================
|
|
105
|
+
/**
|
|
106
|
+
* Main bond class that manages scrollable state and DOM element interactions
|
|
107
|
+
*/
|
|
108
|
+
export class ScrollableBond extends Bond {
|
|
109
|
+
static CONTEXT_KEY = '@atoms/context/scrollable';
|
|
110
|
+
#parent;
|
|
111
|
+
constructor(state) {
|
|
112
|
+
super(state);
|
|
113
|
+
this.#parent = ScrollableBond.get();
|
|
248
114
|
}
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
* This method provides a single interface for both horizontal and vertical thumbs
|
|
252
|
-
* @param orientation - The thumb orientation ('horizontal' or 'vertical')
|
|
253
|
-
* @param props - Additional props to merge with the generated props
|
|
254
|
-
* @returns Object containing all necessary props for the thumb element
|
|
255
|
-
*/
|
|
256
|
-
thumb(orientation, props = {}) {
|
|
257
|
-
const isHorizontal = orientation === 'horizontal';
|
|
258
|
-
// Calculate position and size based on orientation
|
|
259
|
-
// const position = isHorizontal ? this.getThumbXPosition() : this.getThumbYPosition();
|
|
260
|
-
// const size = isHorizontal ? this.getThumbXSize() : this.getThumbYSize();
|
|
261
|
-
// const styleProperty = isHorizontal ? 'left' : 'top';
|
|
262
|
-
// const sizeProperty = isHorizontal ? 'width' : 'height';
|
|
263
|
-
return {
|
|
264
|
-
'data-atom': this.id ?? '',
|
|
265
|
-
'data-kind': `scrollable-thumb-${isHorizontal ? 'x' : 'y'}`,
|
|
266
|
-
'data-direction': orientation,
|
|
267
|
-
...props,
|
|
268
|
-
// Handle drag-to-scroll based on orientation
|
|
269
|
-
onmousedown: (e) => {
|
|
270
|
-
this.handleThumbDrag(e, isHorizontal ? 'x' : 'y');
|
|
271
|
-
if ('onmousedown' in props && typeof props.onmousedown === 'function') {
|
|
272
|
-
props.onmousedown(e);
|
|
273
|
-
}
|
|
274
|
-
},
|
|
275
|
-
[createAttachmentKey()]: (node) => {
|
|
276
|
-
// Set both the unified thumb reference and the specific axis reference
|
|
277
|
-
if (isHorizontal) {
|
|
278
|
-
this.elements.thumbX = node;
|
|
279
|
-
}
|
|
280
|
-
else {
|
|
281
|
-
this.elements.thumbY = node;
|
|
282
|
-
}
|
|
283
|
-
}
|
|
284
|
-
};
|
|
115
|
+
get parent() {
|
|
116
|
+
return this.#parent;
|
|
285
117
|
}
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
* @param e - The mouse event from the track click
|
|
290
|
-
* @param axis - The scroll axis ('x' for horizontal, 'y' for vertical)
|
|
291
|
-
*/
|
|
292
|
-
handleTrackClick(e, axis) {
|
|
293
|
-
const container = this.elements.container;
|
|
294
|
-
const track = axis === 'x' ? this.elements.trackX : this.elements.trackY;
|
|
295
|
-
if (!container || !track)
|
|
296
|
-
return;
|
|
297
|
-
// Calculate click position relative to track boundaries
|
|
298
|
-
const rect = track.getBoundingClientRect();
|
|
299
|
-
const clickPosition = axis === 'x' ? e.clientX - rect.left : e.clientY - rect.top;
|
|
300
|
-
const trackSize = axis === 'x' ? rect.width : rect.height;
|
|
301
|
-
const percentage = clickPosition / trackSize;
|
|
302
|
-
// Apply scroll based on calculated percentage
|
|
303
|
-
if (axis === 'x') {
|
|
304
|
-
const maxScrollX = container.scrollWidth - container.clientWidth;
|
|
305
|
-
container.scrollLeft = percentage * maxScrollX;
|
|
306
|
-
}
|
|
307
|
-
else {
|
|
308
|
-
const maxScrollY = container.scrollHeight - container.clientHeight;
|
|
309
|
-
container.scrollTop = percentage * maxScrollY;
|
|
310
|
-
}
|
|
118
|
+
share() {
|
|
119
|
+
ScrollableBond.set(this);
|
|
120
|
+
return this;
|
|
311
121
|
}
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
const currentPos = axis === 'x' ? moveE.clientX : moveE.clientY;
|
|
336
|
-
const delta = currentPos - startPos;
|
|
337
|
-
const trackSize = axis === 'x' ? trackRect.width : trackRect.height;
|
|
338
|
-
// Apply proportional scrolling based on thumb movement
|
|
339
|
-
if (axis === 'x') {
|
|
340
|
-
const maxScrollX = container.scrollWidth - container.clientWidth;
|
|
341
|
-
const scrollDelta = (delta / trackSize) * maxScrollX;
|
|
342
|
-
container.scrollLeft = Math.max(0, Math.min(maxScrollX, startScroll + scrollDelta));
|
|
343
|
-
}
|
|
344
|
-
else {
|
|
345
|
-
const maxScrollY = container.scrollHeight - container.clientHeight;
|
|
346
|
-
const scrollDelta = (delta / trackSize) * maxScrollY;
|
|
347
|
-
container.scrollTop = Math.max(0, Math.min(maxScrollY, startScroll + scrollDelta));
|
|
348
|
-
}
|
|
349
|
-
};
|
|
350
|
-
/**
|
|
351
|
-
* Cleans up mouse event listeners when drag ends
|
|
352
|
-
*/
|
|
353
|
-
const onMouseUp = () => {
|
|
354
|
-
// Set scrolling state to true
|
|
355
|
-
this.state.props.isScrolling = false;
|
|
356
|
-
document.removeEventListener('mousemove', onMouseMove);
|
|
357
|
-
document.removeEventListener('mouseup', onMouseUp);
|
|
358
|
-
};
|
|
359
|
-
// Set up global mouse event listeners for drag interaction
|
|
360
|
-
document.addEventListener('mousemove', onMouseMove);
|
|
361
|
-
document.addEventListener('mouseup', onMouseUp);
|
|
122
|
+
static get() {
|
|
123
|
+
return getContext(ScrollableBond.CONTEXT_KEY);
|
|
124
|
+
}
|
|
125
|
+
static set(bond) {
|
|
126
|
+
return setContext(ScrollableBond.CONTEXT_KEY, bond);
|
|
127
|
+
}
|
|
128
|
+
// ============================================================================
|
|
129
|
+
// Atom Helpers
|
|
130
|
+
// ============================================================================
|
|
131
|
+
root() {
|
|
132
|
+
return this.atom('root', () => new ScrollableRootAtom(this));
|
|
133
|
+
}
|
|
134
|
+
container() {
|
|
135
|
+
return this.atom('container', () => new ScrollableContainerAtom(this));
|
|
136
|
+
}
|
|
137
|
+
content() {
|
|
138
|
+
return this.atom('content', () => new ScrollableContentAtom(this));
|
|
139
|
+
}
|
|
140
|
+
trackX() {
|
|
141
|
+
return this.atom('trackX', () => new ScrollableTrackAtom(this, 'x'));
|
|
142
|
+
}
|
|
143
|
+
trackY() {
|
|
144
|
+
return this.atom('trackY', () => new ScrollableTrackAtom(this, 'y'));
|
|
362
145
|
}
|
|
146
|
+
thumbX() {
|
|
147
|
+
return this.atom('thumbX', () => new ScrollableThumbAtom(this, 'x'));
|
|
148
|
+
}
|
|
149
|
+
thumbY() {
|
|
150
|
+
return this.atom('thumbY', () => new ScrollableThumbAtom(this, 'y'));
|
|
151
|
+
}
|
|
152
|
+
// ============================================================================
|
|
153
|
+
// Public API Methods
|
|
154
|
+
// ============================================================================
|
|
363
155
|
/**
|
|
364
|
-
* Scrolls to an absolute position
|
|
365
|
-
* @param x - The horizontal scroll position in pixels
|
|
366
|
-
* @param y - The vertical scroll position in pixels
|
|
156
|
+
* Scrolls to an absolute position
|
|
367
157
|
*/
|
|
368
158
|
scrollTo(x, y) {
|
|
369
159
|
const container = this.elements.container;
|
|
@@ -372,9 +162,7 @@ export class ScrollableBond extends Bond {
|
|
|
372
162
|
}
|
|
373
163
|
}
|
|
374
164
|
/**
|
|
375
|
-
* Scrolls by a relative amount
|
|
376
|
-
* @param x - The horizontal scroll delta in pixels
|
|
377
|
-
* @param y - The vertical scroll delta in pixels
|
|
165
|
+
* Scrolls by a relative amount
|
|
378
166
|
*/
|
|
379
167
|
scrollBy(x, y) {
|
|
380
168
|
const container = this.elements.container;
|
|
@@ -383,9 +171,7 @@ export class ScrollableBond extends Bond {
|
|
|
383
171
|
}
|
|
384
172
|
}
|
|
385
173
|
/**
|
|
386
|
-
* Scrolls an element into view
|
|
387
|
-
* @param element - The element to scroll into view
|
|
388
|
-
* @param options - Optional scroll behavior configuration
|
|
174
|
+
* Scrolls an element into view
|
|
389
175
|
*/
|
|
390
176
|
scrollIntoView(element, options) {
|
|
391
177
|
const container = this.elements.container;
|
|
@@ -395,8 +181,6 @@ export class ScrollableBond extends Bond {
|
|
|
395
181
|
}
|
|
396
182
|
/**
|
|
397
183
|
* Updates the internal scroll state based on current DOM measurements
|
|
398
|
-
* This method should be called when the scroll position or content size changes
|
|
399
|
-
* TODO: Implement reactive binding updates for scroll properties
|
|
400
184
|
*/
|
|
401
185
|
updateScrollState() {
|
|
402
186
|
const container = this.elements.container;
|
|
@@ -409,72 +193,112 @@ export class ScrollableBond extends Bond {
|
|
|
409
193
|
this.state.props.clientWidth = container.clientWidth;
|
|
410
194
|
this.state.props.clientHeight = container.clientHeight;
|
|
411
195
|
}
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
*/
|
|
196
|
+
// ============================================================================
|
|
197
|
+
// Scroll Calculations
|
|
198
|
+
// ============================================================================
|
|
416
199
|
getThumbXPosition() {
|
|
417
200
|
const { scrollX, clientWidth, scrollWidth } = this.state.props;
|
|
418
201
|
if (scrollWidth <= clientWidth)
|
|
419
202
|
return 0;
|
|
420
|
-
|
|
203
|
+
const thumbSize = this.getThumbXSize();
|
|
204
|
+
const maxPosition = 100 - thumbSize;
|
|
205
|
+
const scrollPercentage = scrollX / (scrollWidth - clientWidth);
|
|
206
|
+
return scrollPercentage * maxPosition;
|
|
421
207
|
}
|
|
422
|
-
/**
|
|
423
|
-
* Calculates the vertical thumb position as a percentage
|
|
424
|
-
* @returns The top position of the vertical thumb (0-100%)
|
|
425
|
-
*/
|
|
426
208
|
getThumbYPosition() {
|
|
427
209
|
const { scrollY, clientHeight, scrollHeight } = this.state.props;
|
|
428
210
|
if (scrollHeight <= clientHeight)
|
|
429
211
|
return 0;
|
|
430
|
-
|
|
212
|
+
const thumbSize = this.getThumbYSize();
|
|
213
|
+
const maxPosition = 100 - thumbSize;
|
|
214
|
+
const scrollPercentage = scrollY / (scrollHeight - clientHeight);
|
|
215
|
+
return scrollPercentage * maxPosition;
|
|
431
216
|
}
|
|
432
|
-
/**
|
|
433
|
-
* Calculates the horizontal thumb size as a percentage
|
|
434
|
-
* @returns The width of the horizontal thumb (0-100%)
|
|
435
|
-
*/
|
|
436
217
|
getThumbXSize() {
|
|
437
218
|
const { clientWidth, scrollWidth } = this.state.props;
|
|
438
219
|
if (scrollWidth <= clientWidth)
|
|
439
220
|
return 100;
|
|
440
221
|
return (clientWidth / scrollWidth) * 100;
|
|
441
222
|
}
|
|
442
|
-
/**
|
|
443
|
-
* Calculates the vertical thumb size as a percentage
|
|
444
|
-
* @returns The height of the vertical thumb (0-100%)
|
|
445
|
-
*/
|
|
446
223
|
getThumbYSize() {
|
|
447
224
|
const { clientHeight, scrollHeight } = this.state.props;
|
|
448
225
|
if (scrollHeight <= clientHeight)
|
|
449
226
|
return 100;
|
|
450
227
|
return (clientHeight / scrollHeight) * 100;
|
|
451
228
|
}
|
|
452
|
-
/**
|
|
453
|
-
* Determines if horizontal scrolling is possible
|
|
454
|
-
* @returns True if content width exceeds visible area width
|
|
455
|
-
*/
|
|
456
229
|
get canScrollX() {
|
|
457
230
|
const { scrollWidth, clientWidth } = this.state.props;
|
|
458
231
|
return scrollWidth > clientWidth;
|
|
459
232
|
}
|
|
460
|
-
/**
|
|
461
|
-
* Determines if vertical scrolling is possible
|
|
462
|
-
* @returns True if content height exceeds visible area height
|
|
463
|
-
*/
|
|
464
233
|
get canScrollY() {
|
|
465
234
|
const { scrollHeight, clientHeight } = this.state.props;
|
|
466
235
|
return scrollHeight > clientHeight;
|
|
467
236
|
}
|
|
237
|
+
// ============================================================================
|
|
238
|
+
// Event Handlers
|
|
239
|
+
// ============================================================================
|
|
240
|
+
/**
|
|
241
|
+
* Handles click events on scrollbar tracks
|
|
242
|
+
*/
|
|
243
|
+
handleTrackClick(e, axis) {
|
|
244
|
+
const container = this.elements.container;
|
|
245
|
+
const track = axis === 'x' ? this.elements.trackX : this.elements.trackY;
|
|
246
|
+
if (!container || !track)
|
|
247
|
+
return;
|
|
248
|
+
const rect = track.getBoundingClientRect();
|
|
249
|
+
const clickPosition = axis === 'x' ? e.clientX - rect.left : e.clientY - rect.top;
|
|
250
|
+
const trackSize = axis === 'x' ? rect.width : rect.height;
|
|
251
|
+
const percentage = clickPosition / trackSize;
|
|
252
|
+
if (axis === 'x') {
|
|
253
|
+
const maxScrollX = container.scrollWidth - container.clientWidth;
|
|
254
|
+
container.scrollLeft = percentage * maxScrollX;
|
|
255
|
+
}
|
|
256
|
+
else {
|
|
257
|
+
const maxScrollY = container.scrollHeight - container.clientHeight;
|
|
258
|
+
container.scrollTop = percentage * maxScrollY;
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
/**
|
|
262
|
+
* Handles mouse drag events on scrollbar thumbs
|
|
263
|
+
*/
|
|
264
|
+
handleThumbDrag(e, axis) {
|
|
265
|
+
e.preventDefault();
|
|
266
|
+
this.state.props.isScrolling = true;
|
|
267
|
+
const container = this.elements.container;
|
|
268
|
+
const track = axis === 'x' ? this.elements.trackX : this.elements.trackY;
|
|
269
|
+
if (!container || !track)
|
|
270
|
+
return;
|
|
271
|
+
const trackRect = track.getBoundingClientRect();
|
|
272
|
+
const startPos = axis === 'x' ? e.clientX : e.clientY;
|
|
273
|
+
const startScroll = axis === 'x' ? container.scrollLeft : container.scrollTop;
|
|
274
|
+
const onMouseMove = (moveE) => {
|
|
275
|
+
const currentPos = axis === 'x' ? moveE.clientX : moveE.clientY;
|
|
276
|
+
const delta = currentPos - startPos;
|
|
277
|
+
const trackSize = axis === 'x' ? trackRect.width : trackRect.height;
|
|
278
|
+
if (axis === 'x') {
|
|
279
|
+
const maxScrollX = container.scrollWidth - container.clientWidth;
|
|
280
|
+
const scrollDelta = (delta / trackSize) * maxScrollX;
|
|
281
|
+
container.scrollLeft = Math.max(0, Math.min(maxScrollX, startScroll + scrollDelta));
|
|
282
|
+
}
|
|
283
|
+
else {
|
|
284
|
+
const maxScrollY = container.scrollHeight - container.clientHeight;
|
|
285
|
+
const scrollDelta = (delta / trackSize) * maxScrollY;
|
|
286
|
+
container.scrollTop = Math.max(0, Math.min(maxScrollY, startScroll + scrollDelta));
|
|
287
|
+
}
|
|
288
|
+
};
|
|
289
|
+
const onMouseUp = () => {
|
|
290
|
+
this.state.props.isScrolling = false;
|
|
291
|
+
document.removeEventListener('mousemove', onMouseMove);
|
|
292
|
+
document.removeEventListener('mouseup', onMouseUp);
|
|
293
|
+
};
|
|
294
|
+
document.addEventListener('mousemove', onMouseMove);
|
|
295
|
+
document.addEventListener('mouseup', onMouseUp);
|
|
296
|
+
}
|
|
468
297
|
}
|
|
469
298
|
/**
|
|
470
299
|
* Reactive state container for scrollable component properties
|
|
471
|
-
* Extends BondState to provide typed access to scroll-related data
|
|
472
300
|
*/
|
|
473
301
|
export class ScrollableState extends BondState {
|
|
474
|
-
/**
|
|
475
|
-
* Creates a new scrollable state instance
|
|
476
|
-
* @param props - Function that returns the current state properties
|
|
477
|
-
*/
|
|
478
302
|
constructor(props) {
|
|
479
303
|
super(props);
|
|
480
304
|
}
|