@g9tm/lynxcontrols 0.0.0-stage → 1.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +22 -2
- package/dist/.tsbuildinfo +1 -0
- package/dist/base/base.css +16 -0
- package/dist/base/base.css.map +1 -0
- package/dist/base/control.d.ts +44 -0
- package/dist/base/control.d.ts.map +1 -0
- package/dist/base/control.jsx +24 -0
- package/dist/base/control.jsx.map +1 -0
- package/dist/base/corner-badge.d.ts +35 -0
- package/dist/base/corner-badge.d.ts.map +1 -0
- package/dist/base/corner-badge.jsx +45 -0
- package/dist/base/corner-badge.jsx.map +1 -0
- package/dist/base/disposer.d.ts +28 -0
- package/dist/base/disposer.d.ts.map +1 -0
- package/dist/base/disposer.jsx +61 -0
- package/dist/base/disposer.jsx.map +1 -0
- package/dist/base/index.d.ts +10 -0
- package/dist/base/index.d.ts.map +1 -0
- package/dist/base/index.jsx +9 -0
- package/dist/base/press.d.ts +38 -0
- package/dist/base/press.d.ts.map +1 -0
- package/dist/base/press.jsx +73 -0
- package/dist/base/press.jsx.map +1 -0
- package/dist/base/pressable.d.ts +25 -0
- package/dist/base/pressable.d.ts.map +1 -0
- package/dist/base/pressable.jsx +38 -0
- package/dist/base/pressable.jsx.map +1 -0
- package/dist/base/selection-item.d.ts +29 -0
- package/dist/base/selection-item.d.ts.map +1 -0
- package/dist/base/selection-item.jsx +6 -0
- package/dist/base/selection-item.jsx.map +1 -0
- package/dist/base/timers.d.ts +7 -0
- package/dist/base/timers.d.ts.map +1 -0
- package/dist/base/timers.jsx +10 -0
- package/dist/base/timers.jsx.map +1 -0
- package/dist/base/use-controllable-state.d.ts +30 -0
- package/dist/base/use-controllable-state.d.ts.map +1 -0
- package/dist/base/use-controllable-state.jsx +49 -0
- package/dist/base/use-controllable-state.jsx.map +1 -0
- package/dist/base/use-stable-callback.d.ts +8 -0
- package/dist/base/use-stable-callback.d.ts.map +1 -0
- package/dist/base/use-stable-callback.jsx +12 -0
- package/dist/base/use-stable-callback.jsx.map +1 -0
- package/dist/button/button.css +162 -0
- package/dist/button/button.css.map +1 -0
- package/dist/button/button.d.ts +52 -0
- package/dist/button/button.d.ts.map +1 -0
- package/dist/button/button.jsx +87 -0
- package/dist/button/button.jsx.map +1 -0
- package/dist/button/header-action-button.d.ts +34 -0
- package/dist/button/header-action-button.d.ts.map +1 -0
- package/dist/button/header-action-button.jsx +51 -0
- package/dist/button/header-action-button.jsx.map +1 -0
- package/dist/button/icon-button.d.ts +46 -0
- package/dist/button/icon-button.d.ts.map +1 -0
- package/dist/button/icon-button.jsx +69 -0
- package/dist/button/icon-button.jsx.map +1 -0
- package/dist/button/index.d.ts +9 -0
- package/dist/button/index.d.ts.map +1 -0
- package/dist/button/index.jsx +8 -0
- package/dist/button/nav-card.d.ts +58 -0
- package/dist/button/nav-card.d.ts.map +1 -0
- package/dist/button/nav-card.jsx +95 -0
- package/dist/button/nav-card.jsx.map +1 -0
- package/dist/button/safe-tap.d.ts +27 -0
- package/dist/button/safe-tap.d.ts.map +1 -0
- package/dist/button/safe-tap.jsx +46 -0
- package/dist/button/safe-tap.jsx.map +1 -0
- package/dist/button/safe.d.ts +84 -0
- package/dist/button/safe.d.ts.map +1 -0
- package/dist/button/safe.jsx +116 -0
- package/dist/button/safe.jsx.map +1 -0
- package/dist/button/vertical-icon-text-button.d.ts +18 -0
- package/dist/button/vertical-icon-text-button.d.ts.map +1 -0
- package/dist/button/vertical-icon-text-button.jsx +21 -0
- package/dist/button/vertical-icon-text-button.jsx.map +1 -0
- package/dist/button/visuals.d.ts +53 -0
- package/dist/button/visuals.d.ts.map +1 -0
- package/dist/button/visuals.jsx +92 -0
- package/dist/button/visuals.jsx.map +1 -0
- package/dist/cascade/cascade-panel.d.ts +80 -0
- package/dist/cascade/cascade-panel.d.ts.map +1 -0
- package/dist/cascade/cascade-panel.jsx +179 -0
- package/dist/cascade/cascade-panel.jsx.map +1 -0
- package/dist/cascade/cascade.css +70 -0
- package/dist/cascade/cascade.css.map +1 -0
- package/dist/cascade/index.d.ts +3 -0
- package/dist/cascade/index.d.ts.map +1 -0
- package/dist/cascade/index.jsx +2 -0
- package/dist/cascade/model.d.ts +68 -0
- package/dist/cascade/model.d.ts.map +1 -0
- package/dist/cascade/model.jsx +161 -0
- package/dist/cascade/model.jsx.map +1 -0
- package/dist/deferred/deferred-content.d.ts +82 -0
- package/dist/deferred/deferred-content.d.ts.map +1 -0
- package/dist/deferred/deferred-content.jsx +263 -0
- package/dist/deferred/deferred-content.jsx.map +1 -0
- package/dist/deferred/deferred.css +62 -0
- package/dist/deferred/deferred.css.map +1 -0
- package/dist/deferred/index.d.ts +3 -0
- package/dist/deferred/index.d.ts.map +1 -0
- package/dist/deferred/index.jsx +2 -0
- package/dist/deferred/readiness-signal.d.ts +16 -0
- package/dist/deferred/readiness-signal.d.ts.map +1 -0
- package/dist/deferred/readiness-signal.jsx +29 -0
- package/dist/deferred/readiness-signal.jsx.map +1 -0
- package/dist/display/activity-indicator.d.ts +21 -0
- package/dist/display/activity-indicator.d.ts.map +1 -0
- package/dist/display/activity-indicator.jsx +22 -0
- package/dist/display/activity-indicator.jsx.map +1 -0
- package/dist/display/culture-date-time-label.d.ts +64 -0
- package/dist/display/culture-date-time-label.d.ts.map +1 -0
- package/dist/display/culture-date-time-label.jsx +71 -0
- package/dist/display/culture-date-time-label.jsx.map +1 -0
- package/dist/display/display.css +217 -0
- package/dist/display/display.css.map +1 -0
- package/dist/display/index.d.ts +7 -0
- package/dist/display/index.d.ts.map +1 -0
- package/dist/display/index.jsx +6 -0
- package/dist/display/progress-bar.d.ts +38 -0
- package/dist/display/progress-bar.d.ts.map +1 -0
- package/dist/display/progress-bar.jsx +57 -0
- package/dist/display/progress-bar.jsx.map +1 -0
- package/dist/display/separator.d.ts +30 -0
- package/dist/display/separator.d.ts.map +1 -0
- package/dist/display/separator.jsx +55 -0
- package/dist/display/separator.jsx.map +1 -0
- package/dist/display/shimmer.d.ts +41 -0
- package/dist/display/shimmer.d.ts.map +1 -0
- package/dist/display/shimmer.jsx +41 -0
- package/dist/display/shimmer.jsx.map +1 -0
- package/dist/display/title-with-line.d.ts +13 -0
- package/dist/display/title-with-line.d.ts.map +1 -0
- package/dist/display/title-with-line.jsx +21 -0
- package/dist/display/title-with-line.jsx.map +1 -0
- package/dist/edge-panel/edge-panel.css +132 -0
- package/dist/edge-panel/edge-panel.css.map +1 -0
- package/dist/edge-panel/edge-panel.d.ts +87 -0
- package/dist/edge-panel/edge-panel.d.ts.map +1 -0
- package/dist/edge-panel/edge-panel.jsx +326 -0
- package/dist/edge-panel/edge-panel.jsx.map +1 -0
- package/dist/edge-panel/helper.d.ts +27 -0
- package/dist/edge-panel/helper.d.ts.map +1 -0
- package/dist/edge-panel/helper.jsx +118 -0
- package/dist/edge-panel/helper.jsx.map +1 -0
- package/dist/edge-panel/index.d.ts +4 -0
- package/dist/edge-panel/index.d.ts.map +1 -0
- package/dist/edge-panel/index.jsx +3 -0
- package/dist/edge-panel/types.d.ts +155 -0
- package/dist/edge-panel/types.d.ts.map +1 -0
- package/dist/edge-panel/types.jsx +139 -0
- package/dist/edge-panel/types.jsx.map +1 -0
- package/dist/expander/expander.css +54 -0
- package/dist/expander/expander.css.map +1 -0
- package/dist/expander/expander.d.ts +46 -0
- package/dist/expander/expander.d.ts.map +1 -0
- package/dist/expander/expander.jsx +110 -0
- package/dist/expander/expander.jsx.map +1 -0
- package/dist/expander/index.d.ts +2 -0
- package/dist/expander/index.d.ts.map +1 -0
- package/dist/expander/index.jsx +1 -0
- package/dist/fields/dictation.d.ts +43 -0
- package/dist/fields/dictation.d.ts.map +1 -0
- package/dist/fields/dictation.jsx +124 -0
- package/dist/fields/dictation.jsx.map +1 -0
- package/dist/fields/editor.d.ts +26 -0
- package/dist/fields/editor.d.ts.map +1 -0
- package/dist/fields/editor.jsx +46 -0
- package/dist/fields/editor.jsx.map +1 -0
- package/dist/fields/fields.css +156 -0
- package/dist/fields/fields.css.map +1 -0
- package/dist/fields/index.d.ts +12 -0
- package/dist/fields/index.d.ts.map +1 -0
- package/dist/fields/index.jsx +11 -0
- package/dist/fields/input-policy.d.ts +48 -0
- package/dist/fields/input-policy.d.ts.map +1 -0
- package/dist/fields/input-policy.jsx +215 -0
- package/dist/fields/input-policy.jsx.map +1 -0
- package/dist/fields/outlined-field.d.ts +146 -0
- package/dist/fields/outlined-field.d.ts.map +1 -0
- package/dist/fields/outlined-field.jsx +196 -0
- package/dist/fields/outlined-field.jsx.map +1 -0
- package/dist/fields/pin-entry.d.ts +63 -0
- package/dist/fields/pin-entry.d.ts.map +1 -0
- package/dist/fields/pin-entry.jsx +293 -0
- package/dist/fields/pin-entry.jsx.map +1 -0
- package/dist/fields/search-entry.d.ts +35 -0
- package/dist/fields/search-entry.d.ts.map +1 -0
- package/dist/fields/search-entry.jsx +118 -0
- package/dist/fields/search-entry.jsx.map +1 -0
- package/dist/fields/slot-layout.d.ts +33 -0
- package/dist/fields/slot-layout.d.ts.map +1 -0
- package/dist/fields/slot-layout.jsx +33 -0
- package/dist/fields/slot-layout.jsx.map +1 -0
- package/dist/fields/text-entry.d.ts +62 -0
- package/dist/fields/text-entry.d.ts.map +1 -0
- package/dist/fields/text-entry.jsx +72 -0
- package/dist/fields/text-entry.jsx.map +1 -0
- package/dist/fields/use-dictation.d.ts +34 -0
- package/dist/fields/use-dictation.d.ts.map +1 -0
- package/dist/fields/use-dictation.jsx +80 -0
- package/dist/fields/use-dictation.jsx.map +1 -0
- package/dist/fields/use-text-input.d.ts +150 -0
- package/dist/fields/use-text-input.d.ts.map +1 -0
- package/dist/fields/use-text-input.jsx +237 -0
- package/dist/fields/use-text-input.jsx.map +1 -0
- package/dist/fields/validator.d.ts +14 -0
- package/dist/fields/validator.d.ts.map +1 -0
- package/dist/fields/validator.jsx +20 -0
- package/dist/fields/validator.jsx.map +1 -0
- package/dist/host/back.d.ts +42 -0
- package/dist/host/back.d.ts.map +1 -0
- package/dist/host/back.jsx +47 -0
- package/dist/host/back.jsx.map +1 -0
- package/dist/host/hooks.d.ts +85 -0
- package/dist/host/hooks.d.ts.map +1 -0
- package/dist/host/hooks.jsx +163 -0
- package/dist/host/hooks.jsx.map +1 -0
- package/dist/host/host.css +81 -0
- package/dist/host/host.css.map +1 -0
- package/dist/host/host.d.ts +70 -0
- package/dist/host/host.d.ts.map +1 -0
- package/dist/host/host.jsx +229 -0
- package/dist/host/host.jsx.map +1 -0
- package/dist/host/index.d.ts +9 -0
- package/dist/host/index.d.ts.map +1 -0
- package/dist/host/index.jsx +8 -0
- package/dist/host/keyboard.d.ts +24 -0
- package/dist/host/keyboard.d.ts.map +1 -0
- package/dist/host/keyboard.jsx +28 -0
- package/dist/host/keyboard.jsx.map +1 -0
- package/dist/host/layers.d.ts +69 -0
- package/dist/host/layers.d.ts.map +1 -0
- package/dist/host/layers.jsx +111 -0
- package/dist/host/layers.jsx.map +1 -0
- package/dist/host/page-loading-overlay.d.ts +17 -0
- package/dist/host/page-loading-overlay.d.ts.map +1 -0
- package/dist/host/page-loading-overlay.jsx +16 -0
- package/dist/host/page-loading-overlay.jsx.map +1 -0
- package/dist/host/readiness.d.ts +57 -0
- package/dist/host/readiness.d.ts.map +1 -0
- package/dist/host/readiness.jsx +138 -0
- package/dist/host/readiness.jsx.map +1 -0
- package/dist/host/registry.d.ts +106 -0
- package/dist/host/registry.d.ts.map +1 -0
- package/dist/host/registry.jsx +93 -0
- package/dist/host/registry.jsx.map +1 -0
- package/dist/icon/icon.css +39 -0
- package/dist/icon/icon.css.map +1 -0
- package/dist/icon/icon.d.ts +57 -0
- package/dist/icon/icon.d.ts.map +1 -0
- package/dist/icon/icon.jsx +115 -0
- package/dist/icon/icon.jsx.map +1 -0
- package/dist/icon/index.d.ts +4 -0
- package/dist/icon/index.d.ts.map +1 -0
- package/dist/icon/index.jsx +3 -0
- package/dist/icon/slot.d.ts +45 -0
- package/dist/icon/slot.d.ts.map +1 -0
- package/dist/icon/slot.jsx +61 -0
- package/dist/icon/slot.jsx.map +1 -0
- package/dist/icon/swatch.d.ts +29 -0
- package/dist/icon/swatch.d.ts.map +1 -0
- package/dist/icon/swatch.jsx +25 -0
- package/dist/icon/swatch.jsx.map +1 -0
- package/dist/index.d.ts +23 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.jsx +1 -0
- package/dist/pickers/combo-box.d.ts +42 -0
- package/dist/pickers/combo-box.d.ts.map +1 -0
- package/dist/pickers/combo-box.jsx +129 -0
- package/dist/pickers/combo-box.jsx.map +1 -0
- package/dist/pickers/date-time-picker.d.ts +63 -0
- package/dist/pickers/date-time-picker.d.ts.map +1 -0
- package/dist/pickers/date-time-picker.jsx +141 -0
- package/dist/pickers/date-time-picker.jsx.map +1 -0
- package/dist/pickers/date-time.d.ts +82 -0
- package/dist/pickers/date-time.d.ts.map +1 -0
- package/dist/pickers/date-time.jsx +130 -0
- package/dist/pickers/date-time.jsx.map +1 -0
- package/dist/pickers/index.d.ts +10 -0
- package/dist/pickers/index.d.ts.map +1 -0
- package/dist/pickers/index.jsx +9 -0
- package/dist/pickers/picker-sheet.d.ts +21 -0
- package/dist/pickers/picker-sheet.d.ts.map +1 -0
- package/dist/pickers/picker-sheet.jsx +61 -0
- package/dist/pickers/picker-sheet.jsx.map +1 -0
- package/dist/pickers/picker.d.ts +32 -0
- package/dist/pickers/picker.d.ts.map +1 -0
- package/dist/pickers/picker.jsx +72 -0
- package/dist/pickers/picker.jsx.map +1 -0
- package/dist/pickers/pickers.css +219 -0
- package/dist/pickers/pickers.css.map +1 -0
- package/dist/pickers/timespan-picker.d.ts +36 -0
- package/dist/pickers/timespan-picker.d.ts.map +1 -0
- package/dist/pickers/timespan-picker.jsx +99 -0
- package/dist/pickers/timespan-picker.jsx.map +1 -0
- package/dist/pickers/timespan.d.ts +38 -0
- package/dist/pickers/timespan.d.ts.map +1 -0
- package/dist/pickers/timespan.jsx +49 -0
- package/dist/pickers/timespan.jsx.map +1 -0
- package/dist/pickers/trigger.d.ts +34 -0
- package/dist/pickers/trigger.d.ts.map +1 -0
- package/dist/pickers/trigger.jsx +77 -0
- package/dist/pickers/trigger.jsx.map +1 -0
- package/dist/pickers/wheel-column.d.ts +32 -0
- package/dist/pickers/wheel-column.d.ts.map +1 -0
- package/dist/pickers/wheel-column.jsx +99 -0
- package/dist/pickers/wheel-column.jsx.map +1 -0
- package/dist/plus-button/index.d.ts +3 -0
- package/dist/plus-button/index.d.ts.map +1 -0
- package/dist/plus-button/index.jsx +2 -0
- package/dist/plus-button/model.d.ts +65 -0
- package/dist/plus-button/model.d.ts.map +1 -0
- package/dist/plus-button/model.jsx +86 -0
- package/dist/plus-button/model.jsx.map +1 -0
- package/dist/plus-button/plus-button.css +67 -0
- package/dist/plus-button/plus-button.css.map +1 -0
- package/dist/plus-button/plus-button.d.ts +38 -0
- package/dist/plus-button/plus-button.d.ts.map +1 -0
- package/dist/plus-button/plus-button.jsx +155 -0
- package/dist/plus-button/plus-button.jsx.map +1 -0
- package/dist/popup/frame.d.ts +101 -0
- package/dist/popup/frame.d.ts.map +1 -0
- package/dist/popup/frame.jsx +244 -0
- package/dist/popup/frame.jsx.map +1 -0
- package/dist/popup/index.d.ts +8 -0
- package/dist/popup/index.d.ts.map +1 -0
- package/dist/popup/index.jsx +7 -0
- package/dist/popup/input-form.d.ts +35 -0
- package/dist/popup/input-form.d.ts.map +1 -0
- package/dist/popup/input-form.jsx +160 -0
- package/dist/popup/input-form.jsx.map +1 -0
- package/dist/popup/input.d.ts +175 -0
- package/dist/popup/input.d.ts.map +1 -0
- package/dist/popup/input.jsx +176 -0
- package/dist/popup/input.jsx.map +1 -0
- package/dist/popup/popup-view.d.ts +25 -0
- package/dist/popup/popup-view.d.ts.map +1 -0
- package/dist/popup/popup-view.jsx +67 -0
- package/dist/popup/popup-view.jsx.map +1 -0
- package/dist/popup/popup.css +203 -0
- package/dist/popup/popup.css.map +1 -0
- package/dist/popup/queue.d.ts +90 -0
- package/dist/popup/queue.d.ts.map +1 -0
- package/dist/popup/queue.jsx +309 -0
- package/dist/popup/queue.jsx.map +1 -0
- package/dist/popup/service.d.ts +60 -0
- package/dist/popup/service.d.ts.map +1 -0
- package/dist/popup/service.jsx +342 -0
- package/dist/popup/service.jsx.map +1 -0
- package/dist/popup/types.d.ts +211 -0
- package/dist/popup/types.d.ts.map +1 -0
- package/dist/popup/types.jsx +218 -0
- package/dist/popup/types.jsx.map +1 -0
- package/dist/provider/contexts.d.ts +41 -0
- package/dist/provider/contexts.d.ts.map +1 -0
- package/dist/provider/contexts.jsx +11 -0
- package/dist/provider/contexts.jsx.map +1 -0
- package/dist/provider/global-events.d.ts +8 -0
- package/dist/provider/global-events.d.ts.map +1 -0
- package/dist/provider/global-events.jsx +17 -0
- package/dist/provider/global-events.jsx.map +1 -0
- package/dist/provider/hooks.d.ts +49 -0
- package/dist/provider/hooks.d.ts.map +1 -0
- package/dist/provider/hooks.jsx +72 -0
- package/dist/provider/hooks.jsx.map +1 -0
- package/dist/provider/index.d.ts +5 -0
- package/dist/provider/index.d.ts.map +1 -0
- package/dist/provider/index.jsx +3 -0
- package/dist/provider/provider.css +18 -0
- package/dist/provider/provider.css.map +1 -0
- package/dist/provider/provider.d.ts +51 -0
- package/dist/provider/provider.d.ts.map +1 -0
- package/dist/provider/provider.jsx +290 -0
- package/dist/provider/provider.jsx.map +1 -0
- package/dist/provider/settings.d.ts +99 -0
- package/dist/provider/settings.d.ts.map +1 -0
- package/dist/provider/settings.jsx +45 -0
- package/dist/provider/settings.jsx.map +1 -0
- package/dist/provider/theme-css.d.ts +12 -0
- package/dist/provider/theme-css.d.ts.map +1 -0
- package/dist/provider/theme-css.jsx +19 -0
- package/dist/provider/theme-css.jsx.map +1 -0
- package/dist/provider/theme-root.d.ts +10 -0
- package/dist/provider/theme-root.d.ts.map +1 -0
- package/dist/provider/theme-root.jsx +24 -0
- package/dist/provider/theme-root.jsx.map +1 -0
- package/dist/provider/theme.css +473 -0
- package/dist/provider/theme.css.map +1 -0
- package/dist/range-slider/index.d.ts +3 -0
- package/dist/range-slider/index.d.ts.map +1 -0
- package/dist/range-slider/index.jsx +2 -0
- package/dist/range-slider/math.d.ts +23 -0
- package/dist/range-slider/math.d.ts.map +1 -0
- package/dist/range-slider/math.jsx +71 -0
- package/dist/range-slider/math.jsx.map +1 -0
- package/dist/range-slider/range-slider.css +90 -0
- package/dist/range-slider/range-slider.css.map +1 -0
- package/dist/range-slider/range-slider.d.ts +52 -0
- package/dist/range-slider/range-slider.d.ts.map +1 -0
- package/dist/range-slider/range-slider.jsx +159 -0
- package/dist/range-slider/range-slider.jsx.map +1 -0
- package/dist/selection/index.d.ts +5 -0
- package/dist/selection/index.d.ts.map +1 -0
- package/dist/selection/index.jsx +3 -0
- package/dist/selection/model.d.ts +53 -0
- package/dist/selection/model.d.ts.map +1 -0
- package/dist/selection/model.jsx +69 -0
- package/dist/selection/model.jsx.map +1 -0
- package/dist/selection/selection-sheet.d.ts +80 -0
- package/dist/selection/selection-sheet.d.ts.map +1 -0
- package/dist/selection/selection-sheet.jsx +362 -0
- package/dist/selection/selection-sheet.jsx.map +1 -0
- package/dist/selection/selection.css +75 -0
- package/dist/selection/selection.css.map +1 -0
- package/dist/selection/use-selection-model.d.ts +9 -0
- package/dist/selection/use-selection-model.d.ts.map +1 -0
- package/dist/selection/use-selection-model.jsx +22 -0
- package/dist/selection/use-selection-model.jsx.map +1 -0
- package/dist/sheet/frame.d.ts +45 -0
- package/dist/sheet/frame.d.ts.map +1 -0
- package/dist/sheet/frame.jsx +205 -0
- package/dist/sheet/frame.jsx.map +1 -0
- package/dist/sheet/header.d.ts +35 -0
- package/dist/sheet/header.d.ts.map +1 -0
- package/dist/sheet/header.jsx +145 -0
- package/dist/sheet/header.jsx.map +1 -0
- package/dist/sheet/height-memo.d.ts +47 -0
- package/dist/sheet/height-memo.d.ts.map +1 -0
- package/dist/sheet/height-memo.jsx +100 -0
- package/dist/sheet/height-memo.jsx.map +1 -0
- package/dist/sheet/index.d.ts +11 -0
- package/dist/sheet/index.d.ts.map +1 -0
- package/dist/sheet/index.jsx +10 -0
- package/dist/sheet/loadable.d.ts +35 -0
- package/dist/sheet/loadable.d.ts.map +1 -0
- package/dist/sheet/loadable.jsx +65 -0
- package/dist/sheet/loadable.jsx.map +1 -0
- package/dist/sheet/options.d.ts +220 -0
- package/dist/sheet/options.d.ts.map +1 -0
- package/dist/sheet/options.jsx +91 -0
- package/dist/sheet/options.jsx.map +1 -0
- package/dist/sheet/processing.d.ts +22 -0
- package/dist/sheet/processing.d.ts.map +1 -0
- package/dist/sheet/processing.jsx +66 -0
- package/dist/sheet/processing.jsx.map +1 -0
- package/dist/sheet/service.d.ts +55 -0
- package/dist/sheet/service.d.ts.map +1 -0
- package/dist/sheet/service.jsx +143 -0
- package/dist/sheet/service.jsx.map +1 -0
- package/dist/sheet/sheet.css +195 -0
- package/dist/sheet/sheet.css.map +1 -0
- package/dist/sheet/sheet.d.ts +19 -0
- package/dist/sheet/sheet.d.ts.map +1 -0
- package/dist/sheet/sheet.jsx +40 -0
- package/dist/sheet/sheet.jsx.map +1 -0
- package/dist/sheet/sizing.d.ts +69 -0
- package/dist/sheet/sizing.d.ts.map +1 -0
- package/dist/sheet/sizing.jsx +146 -0
- package/dist/sheet/sizing.jsx.map +1 -0
- package/dist/sheet/stack.d.ts +161 -0
- package/dist/sheet/stack.d.ts.map +1 -0
- package/dist/sheet/stack.jsx +378 -0
- package/dist/sheet/stack.jsx.map +1 -0
- package/dist/swipe/index.d.ts +3 -0
- package/dist/swipe/index.d.ts.map +1 -0
- package/dist/swipe/index.jsx +2 -0
- package/dist/swipe/model.d.ts +72 -0
- package/dist/swipe/model.d.ts.map +1 -0
- package/dist/swipe/model.jsx +66 -0
- package/dist/swipe/model.jsx.map +1 -0
- package/dist/swipe/swipe-view.d.ts +40 -0
- package/dist/swipe/swipe-view.d.ts.map +1 -0
- package/dist/swipe/swipe-view.jsx +163 -0
- package/dist/swipe/swipe-view.jsx.map +1 -0
- package/dist/swipe/swipe.css +34 -0
- package/dist/swipe/swipe.css.map +1 -0
- package/dist/tab-bar/index.d.ts +4 -0
- package/dist/tab-bar/index.d.ts.map +1 -0
- package/dist/tab-bar/index.jsx +3 -0
- package/dist/tab-bar/metrics.d.ts +230 -0
- package/dist/tab-bar/metrics.d.ts.map +1 -0
- package/dist/tab-bar/metrics.jsx +221 -0
- package/dist/tab-bar/metrics.jsx.map +1 -0
- package/dist/tab-bar/model.d.ts +170 -0
- package/dist/tab-bar/model.d.ts.map +1 -0
- package/dist/tab-bar/model.jsx +349 -0
- package/dist/tab-bar/model.jsx.map +1 -0
- package/dist/tab-bar/tab-bar.css +173 -0
- package/dist/tab-bar/tab-bar.css.map +1 -0
- package/dist/tab-bar/tab-bar.d.ts +56 -0
- package/dist/tab-bar/tab-bar.d.ts.map +1 -0
- package/dist/tab-bar/tab-bar.jsx +343 -0
- package/dist/tab-bar/tab-bar.jsx.map +1 -0
- package/dist/tabs/index.d.ts +3 -0
- package/dist/tabs/index.d.ts.map +1 -0
- package/dist/tabs/index.jsx +2 -0
- package/dist/tabs/model.d.ts +83 -0
- package/dist/tabs/model.d.ts.map +1 -0
- package/dist/tabs/model.jsx +113 -0
- package/dist/tabs/model.jsx.map +1 -0
- package/dist/tabs/tab-view.d.ts +47 -0
- package/dist/tabs/tab-view.d.ts.map +1 -0
- package/dist/tabs/tab-view.jsx +227 -0
- package/dist/tabs/tab-view.jsx.map +1 -0
- package/dist/tabs/tabs.css +182 -0
- package/dist/tabs/tabs.css.map +1 -0
- package/dist/toast/index.d.ts +3 -0
- package/dist/toast/index.d.ts.map +1 -0
- package/dist/toast/index.jsx +2 -0
- package/dist/toast/service.d.ts +48 -0
- package/dist/toast/service.d.ts.map +1 -0
- package/dist/toast/service.jsx +201 -0
- package/dist/toast/service.jsx.map +1 -0
- package/dist/toast/store.d.ts +174 -0
- package/dist/toast/store.d.ts.map +1 -0
- package/dist/toast/store.jsx +353 -0
- package/dist/toast/store.jsx.map +1 -0
- package/dist/toast/toast.css +152 -0
- package/dist/toast/toast.css.map +1 -0
- package/dist/toggle/checkbox-math.d.ts +52 -0
- package/dist/toggle/checkbox-math.d.ts.map +1 -0
- package/dist/toggle/checkbox-math.jsx +111 -0
- package/dist/toggle/checkbox-math.jsx.map +1 -0
- package/dist/toggle/checkbox.d.ts +56 -0
- package/dist/toggle/checkbox.d.ts.map +1 -0
- package/dist/toggle/checkbox.jsx +152 -0
- package/dist/toggle/checkbox.jsx.map +1 -0
- package/dist/toggle/chip-group.d.ts +50 -0
- package/dist/toggle/chip-group.d.ts.map +1 -0
- package/dist/toggle/chip-group.jsx +107 -0
- package/dist/toggle/chip-group.jsx.map +1 -0
- package/dist/toggle/index.d.ts +5 -0
- package/dist/toggle/index.d.ts.map +1 -0
- package/dist/toggle/index.jsx +4 -0
- package/dist/toggle/switch.d.ts +52 -0
- package/dist/toggle/switch.d.ts.map +1 -0
- package/dist/toggle/switch.jsx +192 -0
- package/dist/toggle/switch.jsx.map +1 -0
- package/dist/toggle/toggle.css +189 -0
- package/dist/toggle/toggle.css.map +1 -0
- package/package.json +155 -4
- package/rspeedy/index.d.ts +21 -0
- package/rspeedy/index.mjs +75 -0
- package/rspeedy/index.test.mjs +52 -0
|
@@ -0,0 +1,378 @@
|
|
|
1
|
+
function _define_property(obj, key, value) {
|
|
2
|
+
if (key in obj) Object.defineProperty(obj, key, {
|
|
3
|
+
value: value,
|
|
4
|
+
enumerable: true,
|
|
5
|
+
configurable: true,
|
|
6
|
+
writable: true
|
|
7
|
+
});
|
|
8
|
+
else obj[key] = value;
|
|
9
|
+
return obj;
|
|
10
|
+
}
|
|
11
|
+
const g9SheetShowThrottleMs = 369;
|
|
12
|
+
const g9SheetCloseGraceMs = 48;
|
|
13
|
+
class G9SheetStack {
|
|
14
|
+
getSnapshot() {
|
|
15
|
+
return this.snapshot;
|
|
16
|
+
}
|
|
17
|
+
subscribe(listener) {
|
|
18
|
+
this.listeners.add(listener);
|
|
19
|
+
return ()=>{
|
|
20
|
+
this.listeners.delete(listener);
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
openCount() {
|
|
24
|
+
return this.entries.filter((e)=>'opening' === e.status || 'open' === e.status).length;
|
|
25
|
+
}
|
|
26
|
+
top() {
|
|
27
|
+
const open = this.live();
|
|
28
|
+
return open.length > 0 ? this.view(open[open.length - 1]) : null;
|
|
29
|
+
}
|
|
30
|
+
show(content, options = {}, throttle = true) {
|
|
31
|
+
if (this.disposed) return null;
|
|
32
|
+
if (throttle && !this.passThrottle()) return null;
|
|
33
|
+
const entry = this.create(content, options);
|
|
34
|
+
const live = this.live();
|
|
35
|
+
if (options.replaceCurrentSheet && 1 === live.length && this.config.stageBeforeShow()) {
|
|
36
|
+
var _this_config_preOpenMaxHoldMs, _this_config;
|
|
37
|
+
const old = live[0];
|
|
38
|
+
old.handingOff = true;
|
|
39
|
+
entry.successorOf = old.id;
|
|
40
|
+
this.push(entry);
|
|
41
|
+
const hold = null == (_this_config_preOpenMaxHoldMs = (_this_config = this.config).preOpenMaxHoldMs) ? void 0 : _this_config_preOpenMaxHoldMs.call(_this_config);
|
|
42
|
+
if (void 0 !== hold) this.config.setTimer(()=>{
|
|
43
|
+
if (entry.successorOf === old.id && 'opening' === entry.status) this.beginClose(old, 'replaced');
|
|
44
|
+
}, hold);
|
|
45
|
+
return entry.handle;
|
|
46
|
+
}
|
|
47
|
+
if (live.length > 0) {
|
|
48
|
+
this.push(entry);
|
|
49
|
+
return entry.handle;
|
|
50
|
+
}
|
|
51
|
+
if (this.entries.some((e)=>'closing' === e.status)) {
|
|
52
|
+
if (this.pending) this.finish(this.pending, 'displaced', false);
|
|
53
|
+
entry.status = 'queued';
|
|
54
|
+
this.pending = entry;
|
|
55
|
+
for (const e of this.entries)if ('closing' === e.status) this.hurry(e);
|
|
56
|
+
this.emit();
|
|
57
|
+
return entry.handle;
|
|
58
|
+
}
|
|
59
|
+
this.push(entry);
|
|
60
|
+
return entry.handle;
|
|
61
|
+
}
|
|
62
|
+
replace(content, options = {}) {
|
|
63
|
+
if (this.disposed) return null;
|
|
64
|
+
if (!this.passThrottle()) return null;
|
|
65
|
+
const live = this.live();
|
|
66
|
+
const current = 1 === live.length ? live[0] : null;
|
|
67
|
+
const fit = (o)=>'fitToContent' === o.sizeMode;
|
|
68
|
+
const modal = (o)=>false !== o.isModal;
|
|
69
|
+
if (current && fit(current.options) && modal(current.options) && fit(options) && modal(options) && !options.useFullScreenLoadingPlaceholder) {
|
|
70
|
+
const entry = this.create(content, {
|
|
71
|
+
...options,
|
|
72
|
+
deferContent: false
|
|
73
|
+
});
|
|
74
|
+
entry.frameKey = current.frameKey;
|
|
75
|
+
entry.version = current.version + 1;
|
|
76
|
+
entry.status = 'open';
|
|
77
|
+
const index = this.entries.indexOf(current);
|
|
78
|
+
this.entries[index] = entry;
|
|
79
|
+
this.clearTimer(current);
|
|
80
|
+
current.status = 'closed';
|
|
81
|
+
current.settle({
|
|
82
|
+
reason: 'replaced'
|
|
83
|
+
});
|
|
84
|
+
this.emit();
|
|
85
|
+
this.safe(()=>{
|
|
86
|
+
var _options_onOpened;
|
|
87
|
+
return null == (_options_onOpened = options.onOpened) ? void 0 : _options_onOpened.call(options);
|
|
88
|
+
});
|
|
89
|
+
return entry.handle;
|
|
90
|
+
}
|
|
91
|
+
const top = live[live.length - 1];
|
|
92
|
+
if (top) {
|
|
93
|
+
top.quickClose = true;
|
|
94
|
+
this.requestBack(top.id, 'toolbarButton');
|
|
95
|
+
}
|
|
96
|
+
return this.show(content, options, false);
|
|
97
|
+
}
|
|
98
|
+
closeTop() {
|
|
99
|
+
const top = this.live().pop();
|
|
100
|
+
if (top) this.requestBack(top.id, 'toolbarButton');
|
|
101
|
+
}
|
|
102
|
+
closeAll() {
|
|
103
|
+
const live = this.live();
|
|
104
|
+
for(let i = live.length - 1; i >= 0; i--)this.beginClose(live[i], 'closeAll');
|
|
105
|
+
if (this.pending) this.finish(this.pending, 'displaced', false);
|
|
106
|
+
this.pending = null;
|
|
107
|
+
}
|
|
108
|
+
handleHardwareBack() {
|
|
109
|
+
const top = this.live().pop();
|
|
110
|
+
if (!top) return false;
|
|
111
|
+
this.requestBack(top.id, 'hardwareButton');
|
|
112
|
+
return true;
|
|
113
|
+
}
|
|
114
|
+
async requestBack(id, source) {
|
|
115
|
+
const entry = this.entries.find((e)=>e.id === id);
|
|
116
|
+
if (!entry || 'open' !== entry.status && 'opening' !== entry.status || entry.backBusy) return false;
|
|
117
|
+
const o = entry.options;
|
|
118
|
+
if (('overlayTap' === source || 'drag' === source) && false === o.isCancelable) return false;
|
|
119
|
+
let close;
|
|
120
|
+
if (o.onBackRequested) {
|
|
121
|
+
entry.backBusy = true;
|
|
122
|
+
let action = 'doNothing';
|
|
123
|
+
try {
|
|
124
|
+
action = await o.onBackRequested(source);
|
|
125
|
+
} catch (error) {
|
|
126
|
+
var _this_config_onError, _this_config;
|
|
127
|
+
null == (_this_config_onError = (_this_config = this.config).onError) || _this_config_onError.call(_this_config, error);
|
|
128
|
+
} finally{
|
|
129
|
+
entry.backBusy = false;
|
|
130
|
+
}
|
|
131
|
+
close = 'close' === action;
|
|
132
|
+
} else close = 'hardwareButton' !== source || false !== o.hardwareBackCloses;
|
|
133
|
+
if (!close) return false;
|
|
134
|
+
const reason = 'toolbarButton' === source ? 'toolbarButton' : 'hardwareButton' === source ? 'hardwareButton' : 'overlayTap' === source ? 'overlayTap' : 'drag';
|
|
135
|
+
return this.beginClose(entry, reason);
|
|
136
|
+
}
|
|
137
|
+
update(id, content, options) {
|
|
138
|
+
const entry = this.entries.find((e)=>e.id === id);
|
|
139
|
+
if (!entry || 'closed' === entry.status) return;
|
|
140
|
+
entry.content = content;
|
|
141
|
+
if (options) entry.options = options;
|
|
142
|
+
this.emit();
|
|
143
|
+
}
|
|
144
|
+
close(id, reason = 'closed') {
|
|
145
|
+
var _this_entries_find;
|
|
146
|
+
var _this_pending;
|
|
147
|
+
const entry = null != (_this_entries_find = this.entries.find((e)=>e.id === id)) ? _this_entries_find : (null == (_this_pending = this.pending) ? void 0 : _this_pending.id) === id ? this.pending : void 0;
|
|
148
|
+
if (!entry) return false;
|
|
149
|
+
if (entry === this.pending) {
|
|
150
|
+
this.pending = null;
|
|
151
|
+
this.finish(entry, reason, false);
|
|
152
|
+
return true;
|
|
153
|
+
}
|
|
154
|
+
return this.beginClose(entry, reason);
|
|
155
|
+
}
|
|
156
|
+
markOpened(id) {
|
|
157
|
+
const entry = this.entries.find((e)=>e.id === id);
|
|
158
|
+
if ((null == entry ? void 0 : entry.status) !== 'opening') return;
|
|
159
|
+
this.clearTimer(entry);
|
|
160
|
+
entry.status = 'open';
|
|
161
|
+
this.emit();
|
|
162
|
+
this.safe(()=>{
|
|
163
|
+
var _entry_options_onOpened, _entry_options;
|
|
164
|
+
return null == (_entry_options_onOpened = (_entry_options = entry.options).onOpened) ? void 0 : _entry_options_onOpened.call(_entry_options);
|
|
165
|
+
});
|
|
166
|
+
if (null !== entry.successorOf) {
|
|
167
|
+
const old = this.entries.find((e)=>e.id === entry.successorOf);
|
|
168
|
+
if (old) this.beginClose(old, 'replaced');
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
markClosed(id) {
|
|
172
|
+
const entry = this.entries.find((e)=>e.id === id);
|
|
173
|
+
if ((null == entry ? void 0 : entry.status) !== 'closing') return;
|
|
174
|
+
this.clearTimer(entry);
|
|
175
|
+
entry.timer = this.config.setTimer(()=>this.remove(entry), g9SheetCloseGraceMs);
|
|
176
|
+
}
|
|
177
|
+
dispose() {
|
|
178
|
+
if (this.disposed) return;
|
|
179
|
+
this.disposed = true;
|
|
180
|
+
if (this.pending) this.finish(this.pending, 'unmount', false);
|
|
181
|
+
this.pending = null;
|
|
182
|
+
for (const entry of [
|
|
183
|
+
...this.entries
|
|
184
|
+
]){
|
|
185
|
+
this.clearTimer(entry);
|
|
186
|
+
if ('closed' !== entry.status) {
|
|
187
|
+
var _entry_reason;
|
|
188
|
+
if (!entry.closingStarted) this.safe(()=>{
|
|
189
|
+
var _entry_options_onClosing, _entry_options;
|
|
190
|
+
return null == (_entry_options_onClosing = (_entry_options = entry.options).onClosing) ? void 0 : _entry_options_onClosing.call(_entry_options);
|
|
191
|
+
});
|
|
192
|
+
this.finish(entry, null != (_entry_reason = entry.reason) ? _entry_reason : 'unmount', true);
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
this.entries = [];
|
|
196
|
+
this.emit();
|
|
197
|
+
}
|
|
198
|
+
live() {
|
|
199
|
+
return this.entries.filter((e)=>'opening' === e.status || 'open' === e.status);
|
|
200
|
+
}
|
|
201
|
+
passThrottle() {
|
|
202
|
+
const now = this.config.now();
|
|
203
|
+
if (now - this.lastShow < g9SheetShowThrottleMs) return false;
|
|
204
|
+
this.lastShow = now;
|
|
205
|
+
return true;
|
|
206
|
+
}
|
|
207
|
+
create(content, options) {
|
|
208
|
+
const id = this.nextId++;
|
|
209
|
+
let settle;
|
|
210
|
+
const result = new Promise((resolve)=>{
|
|
211
|
+
settle = resolve;
|
|
212
|
+
});
|
|
213
|
+
const entry = {
|
|
214
|
+
id,
|
|
215
|
+
frameKey: id,
|
|
216
|
+
content,
|
|
217
|
+
options,
|
|
218
|
+
status: 'opening',
|
|
219
|
+
version: 0,
|
|
220
|
+
receded: false,
|
|
221
|
+
quickClose: false,
|
|
222
|
+
handingOff: false,
|
|
223
|
+
reason: null,
|
|
224
|
+
settle,
|
|
225
|
+
timer: null,
|
|
226
|
+
successorOf: null,
|
|
227
|
+
closingStarted: false,
|
|
228
|
+
backBusy: false,
|
|
229
|
+
handle: {
|
|
230
|
+
id,
|
|
231
|
+
result,
|
|
232
|
+
get isOpen () {
|
|
233
|
+
return 'opening' === entry.status || 'open' === entry.status || 'queued' === entry.status;
|
|
234
|
+
},
|
|
235
|
+
close: ()=>{
|
|
236
|
+
this.close(id);
|
|
237
|
+
},
|
|
238
|
+
closeAsync: async ()=>{
|
|
239
|
+
this.close(id);
|
|
240
|
+
await result;
|
|
241
|
+
},
|
|
242
|
+
show: (c, o)=>this.show(c, o),
|
|
243
|
+
closeTop: ()=>this.closeTop()
|
|
244
|
+
}
|
|
245
|
+
};
|
|
246
|
+
return entry;
|
|
247
|
+
}
|
|
248
|
+
push(entry) {
|
|
249
|
+
const parent = this.live().pop();
|
|
250
|
+
if (parent && null === entry.successorOf && false !== entry.options.recedeParentOnStack && !this.isFullScreen(parent)) parent.receded = true;
|
|
251
|
+
entry.status = 'opening';
|
|
252
|
+
this.entries.push(entry);
|
|
253
|
+
this.safe(()=>{
|
|
254
|
+
var _entry_options_onOpening, _entry_options;
|
|
255
|
+
return null == (_entry_options_onOpening = (_entry_options = entry.options).onOpening) ? void 0 : _entry_options_onOpening.call(_entry_options);
|
|
256
|
+
});
|
|
257
|
+
entry.timer = this.config.setTimer(()=>this.markOpened(entry.id), this.config.durations(entry.options).open);
|
|
258
|
+
this.emit();
|
|
259
|
+
}
|
|
260
|
+
isFullScreen(entry) {
|
|
261
|
+
const states = entry.options.states;
|
|
262
|
+
return 'fitToContent' !== entry.options.sizeMode && !!states && 1 === states.length && 'large' === states[0];
|
|
263
|
+
}
|
|
264
|
+
beginClose(entry, reason) {
|
|
265
|
+
if ('closing' === entry.status || 'closed' === entry.status) return false;
|
|
266
|
+
if ('queued' === entry.status) {
|
|
267
|
+
this.finish(entry, reason, false);
|
|
268
|
+
return true;
|
|
269
|
+
}
|
|
270
|
+
this.clearTimer(entry);
|
|
271
|
+
entry.status = 'closing';
|
|
272
|
+
entry.reason = reason;
|
|
273
|
+
entry.closingStarted = true;
|
|
274
|
+
this.safe(()=>{
|
|
275
|
+
var _entry_options_onClosing, _entry_options;
|
|
276
|
+
return null == (_entry_options_onClosing = (_entry_options = entry.options).onClosing) ? void 0 : _entry_options_onClosing.call(_entry_options);
|
|
277
|
+
});
|
|
278
|
+
for (const e of this.entries)if (e.successorOf === entry.id && 'closed' !== e.status) e.successorOf = null;
|
|
279
|
+
entry.handingOff = false;
|
|
280
|
+
const close = this.config.durations(entry.options).close * (entry.quickClose ? 0.5 : 1);
|
|
281
|
+
entry.timer = this.config.setTimer(()=>this.remove(entry), close + g9SheetCloseGraceMs);
|
|
282
|
+
this.restoreParent(entry);
|
|
283
|
+
this.emit();
|
|
284
|
+
return true;
|
|
285
|
+
}
|
|
286
|
+
hurry(entry) {
|
|
287
|
+
if (entry.quickClose) return;
|
|
288
|
+
entry.quickClose = true;
|
|
289
|
+
this.clearTimer(entry);
|
|
290
|
+
const close = 0.5 * this.config.durations(entry.options).close;
|
|
291
|
+
entry.timer = this.config.setTimer(()=>this.remove(entry), close + g9SheetCloseGraceMs);
|
|
292
|
+
}
|
|
293
|
+
restoreParent(closing) {
|
|
294
|
+
const index = this.entries.indexOf(closing);
|
|
295
|
+
const parents = this.entries.slice(0, index).filter((e)=>'opening' === e.status || 'open' === e.status);
|
|
296
|
+
const parent = parents[parents.length - 1];
|
|
297
|
+
const stillAbove = this.entries.slice(index + 1).some((e)=>'opening' === e.status || 'open' === e.status);
|
|
298
|
+
if (parent && !stillAbove) parent.receded = false;
|
|
299
|
+
}
|
|
300
|
+
remove(entry) {
|
|
301
|
+
var _entry_reason;
|
|
302
|
+
this.clearTimer(entry);
|
|
303
|
+
const index = this.entries.indexOf(entry);
|
|
304
|
+
if (index >= 0) this.entries.splice(index, 1);
|
|
305
|
+
this.finish(entry, null != (_entry_reason = entry.reason) ? _entry_reason : 'closed', true);
|
|
306
|
+
if (this.pending && !this.entries.some((e)=>'closing' === e.status) && 0 === this.live().length) {
|
|
307
|
+
const next = this.pending;
|
|
308
|
+
this.pending = null;
|
|
309
|
+
this.push(next);
|
|
310
|
+
return;
|
|
311
|
+
}
|
|
312
|
+
this.emit();
|
|
313
|
+
}
|
|
314
|
+
finish(entry, reason, runClosed) {
|
|
315
|
+
var _entry_reason;
|
|
316
|
+
if ('closed' === entry.status) return;
|
|
317
|
+
entry.status = 'closed';
|
|
318
|
+
entry.reason = null != (_entry_reason = entry.reason) ? _entry_reason : reason;
|
|
319
|
+
if (runClosed) this.safe(()=>{
|
|
320
|
+
var _entry_options_onClosed, _entry_options;
|
|
321
|
+
return null == (_entry_options_onClosed = (_entry_options = entry.options).onClosed) ? void 0 : _entry_options_onClosed.call(_entry_options);
|
|
322
|
+
});
|
|
323
|
+
entry.settle({
|
|
324
|
+
reason: entry.reason
|
|
325
|
+
});
|
|
326
|
+
}
|
|
327
|
+
clearTimer(entry) {
|
|
328
|
+
if (null !== entry.timer) this.config.clearTimer(entry.timer);
|
|
329
|
+
entry.timer = null;
|
|
330
|
+
}
|
|
331
|
+
safe(action) {
|
|
332
|
+
try {
|
|
333
|
+
action();
|
|
334
|
+
} catch (error) {
|
|
335
|
+
var _this_config_onError, _this_config;
|
|
336
|
+
null == (_this_config_onError = (_this_config = this.config).onError) || _this_config_onError.call(_this_config, error);
|
|
337
|
+
}
|
|
338
|
+
}
|
|
339
|
+
view(entry) {
|
|
340
|
+
return {
|
|
341
|
+
id: entry.id,
|
|
342
|
+
frameKey: entry.frameKey,
|
|
343
|
+
content: entry.content,
|
|
344
|
+
options: entry.options,
|
|
345
|
+
status: entry.status,
|
|
346
|
+
version: entry.version,
|
|
347
|
+
receded: entry.receded,
|
|
348
|
+
quickClose: entry.quickClose,
|
|
349
|
+
handingOff: entry.handingOff,
|
|
350
|
+
reason: entry.reason
|
|
351
|
+
};
|
|
352
|
+
}
|
|
353
|
+
emit() {
|
|
354
|
+
this.snapshot = this.entries.map((e)=>this.view(e));
|
|
355
|
+
for (const listener of [
|
|
356
|
+
...this.listeners
|
|
357
|
+
])listener();
|
|
358
|
+
}
|
|
359
|
+
handleOf(id) {
|
|
360
|
+
var _ref;
|
|
361
|
+
var _this_entries_find;
|
|
362
|
+
return null != (_ref = null == (_this_entries_find = this.entries.find((e)=>e.id === id)) ? void 0 : _this_entries_find.handle) ? _ref : null;
|
|
363
|
+
}
|
|
364
|
+
constructor(config){
|
|
365
|
+
_define_property(this, "config", void 0);
|
|
366
|
+
_define_property(this, "entries", []);
|
|
367
|
+
_define_property(this, "pending", null);
|
|
368
|
+
_define_property(this, "lastShow", -1 / 0);
|
|
369
|
+
_define_property(this, "nextId", 1);
|
|
370
|
+
_define_property(this, "listeners", new Set());
|
|
371
|
+
_define_property(this, "snapshot", []);
|
|
372
|
+
_define_property(this, "disposed", false);
|
|
373
|
+
this.config = config;
|
|
374
|
+
}
|
|
375
|
+
}
|
|
376
|
+
export { G9SheetStack, g9SheetCloseGraceMs, g9SheetShowThrottleMs };
|
|
377
|
+
|
|
378
|
+
//# sourceMappingURL=stack.jsx.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sheet/stack.jsx","sources":["../../src/sheet/stack.ts"],"sourcesContent":["import type { ReactNode } from '@lynx-js/react';\nimport type { G9SheetBackAction, G9SheetBackSource, G9SheetOptions } from './options';\n\n// The sheet stack (MAUI G9BottomSheetHelper's stacking, replace, hand-off, back routing and lifecycle), independent\n// of rendering so it can be model-tested. The frame component reports motion ends (`markOpened`, `markClosed`); timer\n// fallbacks make every transition finish even when no motion event arrives.\n\n/** Why a sheet's result settled. Every sheet settles exactly once. */\nexport type G9SheetCloseReason =\n /** `handle.close()` / `closeAsync()`. */\n | 'closed'\n /** `closeAll()` (MAUI `CloseG9BottomSheet`). */\n | 'closeAll'\n /** The header back/close button or `closeTop()`. */\n | 'toolbarButton'\n /** Hardware back / desktop Escape. */\n | 'hardwareButton'\n /** A tap on the scrim. */\n | 'overlayTap'\n /** Dragged closed. */\n | 'drag'\n /** Replaced in place or handed off to a successor. */\n | 'replaced'\n /** A queued request displaced by a newer one before it opened. */\n | 'displaced'\n /** The host unmounted. */\n | 'unmount';\n\n/** The result of one sheet. */\nexport interface G9SheetResult {\n readonly reason: G9SheetCloseReason;\n}\n\n/** What a sheet shows: a node, or a factory built after the open motion (deferred content). */\nexport type G9SheetContent = ReactNode | (() => ReactNode);\n\n/** Lifecycle status of an entry. */\nexport type G9SheetStatus = 'queued' | 'opening' | 'open' | 'closing' | 'closed';\n\n/** One sheet of the stack (read-only snapshot for rendering). */\nexport interface G9SheetEntry {\n readonly id: number;\n /** Identity of the rendered frame; kept by an in-place replace. */\n readonly frameKey: number;\n readonly content: G9SheetContent;\n readonly options: G9SheetOptions;\n readonly status: G9SheetStatus;\n /** Bumped by an in-place replace (the frame cross-fades its body). */\n readonly version: number;\n /** The sheet above this one recedes it. */\n readonly receded: boolean;\n /** Close motion runs at half duration (replace fallback). */\n readonly quickClose: boolean;\n /** The entry is handing its dim to a successor (its scrim is transparent). */\n readonly handingOff: boolean;\n /** Closing without a visible motion (whole-stack teardown keeps recede links static). */\n readonly reason: G9SheetCloseReason | null;\n}\n\n/** A handle to one sheet (MAUI `IG9BottomSheetHandle`, sheet-scoped). */\nexport interface G9SheetHandle {\n readonly id: number;\n /** Settles once with the close reason, after the sheet left the screen. */\n readonly result: Promise<G9SheetResult>;\n /** `true` until the sheet started closing. */\n readonly isOpen: boolean;\n /** Closes this sheet (MAUI owned-handle `Close`). */\n close(): void;\n /** Closes this sheet and resolves when it is gone (MAUI `CloseAsync`). */\n closeAsync(): Promise<void>;\n /** Opens another sheet on top (MAUI `Show`, auto-stacking). */\n show(content: G9SheetContent, options?: G9SheetOptions): G9SheetHandle | null;\n /** Back-routes the top sheet (MAUI `CloseTop`). */\n closeTop(): void;\n}\n\n/** Timing and policy the stack needs from its host. */\nexport interface G9SheetStackConfig {\n /** Monotonic ms. */\n now(): number;\n setTimer(callback: () => void, ms: number): unknown;\n clearTimer(handle: unknown): void;\n /** Open/close durations (ms) for an entry's fallback timers. */\n durations(options: G9SheetOptions): { open: number; close: number };\n /** Hand-off needs the staged pipeline (`settings.stageBeforeShow`). */\n stageBeforeShow(): boolean;\n /**\n * Longest a hand-off waits for its successor to report open before the predecessor closes anyway (ms; MAUI\n * `PreOpenMaxHoldMs`). Default: only the successor's open fallback timer bounds it.\n */\n preOpenMaxHoldMs?(): number;\n /** A lifecycle callback threw. */\n onError?(error: unknown): void;\n}\n\n/** MAUI `G9SafeCommand` throttle window shared by show and replace. */\nexport const g9SheetShowThrottleMs = 369;\n/** Grace after the close motion before cleanup (MAUI page-side reset). */\nexport const g9SheetCloseGraceMs = 48;\n\ninterface MutableEntry {\n id: number;\n frameKey: number;\n content: G9SheetContent;\n options: G9SheetOptions;\n status: G9SheetStatus;\n version: number;\n receded: boolean;\n quickClose: boolean;\n handingOff: boolean;\n reason: G9SheetCloseReason | null;\n settle: (result: G9SheetResult) => void;\n handle: G9SheetHandle;\n timer: unknown;\n successorOf: number | null;\n closingStarted: boolean;\n backBusy: boolean;\n}\n\n/** The stack of one host. */\nexport class G9SheetStack {\n private readonly config: G9SheetStackConfig;\n private entries: MutableEntry[] = [];\n private pending: MutableEntry | null = null;\n private lastShow = Number.NEGATIVE_INFINITY;\n private nextId = 1;\n private readonly listeners = new Set<() => void>();\n private snapshot: ReadonlyArray<G9SheetEntry> = [];\n private disposed = false;\n\n constructor(config: G9SheetStackConfig) {\n this.config = config;\n }\n\n // ---- observation ---------------------------------------------------------------------------------------------\n\n /** Entries bottom first (closing ones included until removed). The same array until something changes. */\n getSnapshot(): ReadonlyArray<G9SheetEntry> {\n return this.snapshot;\n }\n\n subscribe(listener: () => void): () => void {\n this.listeners.add(listener);\n return () => {\n this.listeners.delete(listener);\n };\n }\n\n /** Open sheets (MAUI `GetOpenSheetCount`): not closing, not queued. */\n openCount(): number {\n return this.entries.filter((e) => e.status === 'opening' || e.status === 'open').length;\n }\n\n /** The top open sheet, or `null`. */\n top(): G9SheetEntry | null {\n const open = this.live();\n return open.length > 0 ? this.view(open[open.length - 1] as MutableEntry) : null;\n }\n\n // ---- entry points (MAUI helper) ------------------------------------------------------------------------------\n\n /**\n * Shows a sheet (MAUI `ShowG9BottomSheet`): stacks on an open sheet, hands off with `replaceCurrentSheet`, queues\n * behind a closing primary (one pending request; a newer one displaces it), else opens as primary. Returns `null`\n * when throttled (a second show/replace within 369 ms).\n */\n show(content: G9SheetContent, options: G9SheetOptions = {}, throttle = true): G9SheetHandle | null {\n if (this.disposed) return null;\n if (throttle && !this.passThrottle()) return null;\n const entry = this.create(content, options);\n const live = this.live();\n if (options.replaceCurrentSheet && live.length === 1 && this.config.stageBeforeShow()) {\n const old = live[0] as MutableEntry;\n old.handingOff = true;\n entry.successorOf = old.id;\n this.push(entry);\n const hold = this.config.preOpenMaxHoldMs?.();\n if (hold !== undefined) {\n this.config.setTimer(() => {\n if (entry.successorOf === old.id && entry.status === 'opening') this.beginClose(old, 'replaced');\n }, hold);\n }\n return entry.handle;\n }\n if (live.length > 0) {\n this.push(entry);\n return entry.handle;\n }\n if (this.entries.some((e) => e.status === 'closing')) {\n if (this.pending) this.finish(this.pending, 'displaced', false);\n entry.status = 'queued';\n this.pending = entry;\n for (const e of this.entries) if (e.status === 'closing') this.hurry(e);\n this.emit();\n return entry.handle;\n }\n this.push(entry);\n return entry.handle;\n }\n\n /**\n * Replaces the open sheet (MAUI `ReplaceG9BottomSheet`): in place (same frame, body cross-fade, old lifecycle not\n * run) when one fit, modal sheet is open and the new one is fit and modal without a full-screen placeholder;\n * otherwise the top sheet quick-closes through its back route and the new one opens. Throttled like `show`.\n */\n replace(content: G9SheetContent, options: G9SheetOptions = {}): G9SheetHandle | null {\n if (this.disposed) return null;\n if (!this.passThrottle()) return null;\n const live = this.live();\n const current = live.length === 1 ? (live[0] as MutableEntry) : null;\n const fit = (o: G9SheetOptions) => o.sizeMode === 'fitToContent';\n const modal = (o: G9SheetOptions) => o.isModal !== false;\n if (\n current &&\n fit(current.options) &&\n modal(current.options) &&\n fit(options) &&\n modal(options) &&\n !options.useFullScreenLoadingPlaceholder\n ) {\n const entry = this.create(content, { ...options, deferContent: false });\n entry.frameKey = current.frameKey;\n entry.version = current.version + 1;\n entry.status = 'open';\n const index = this.entries.indexOf(current);\n this.entries[index] = entry;\n this.clearTimer(current);\n current.status = 'closed';\n current.settle({ reason: 'replaced' });\n this.emit();\n this.safe(() => options.onOpened?.());\n return entry.handle;\n }\n const top = live[live.length - 1];\n if (top) {\n top.quickClose = true;\n void this.requestBack(top.id, 'toolbarButton');\n }\n return this.show(content, options, false);\n }\n\n /** Back-routes the top sheet as the toolbar button would (MAUI `CloseTopG9BottomSheet`). */\n closeTop(): void {\n const top = this.live().pop();\n if (top) void this.requestBack(top.id, 'toolbarButton');\n }\n\n /** Closes every sheet, stacked ones first (MAUI `CloseG9BottomSheet`). */\n closeAll(): void {\n const live = this.live();\n for (let i = live.length - 1; i >= 0; i--) this.beginClose(live[i] as MutableEntry, 'closeAll');\n if (this.pending) this.finish(this.pending, 'displaced', false);\n this.pending = null;\n }\n\n /** Hardware back (MAUI `HandleHardwareBackPressed`): `false` when no sheet is open, else routes it and `true`. */\n handleHardwareBack(): boolean {\n const top = this.live().pop();\n if (!top) return false;\n void this.requestBack(top.id, 'hardwareButton');\n return true;\n }\n\n /**\n * A back request for one sheet (MAUI `HandleBackRequest`): an overlay tap on a non-cancelable sheet is ignored;\n * `onBackRequested` decides when set; otherwise hardware back closes only with `hardwareBackCloses`, every other\n * source closes. Resolves `true` when the sheet closes.\n */\n async requestBack(id: number, source: G9SheetBackSource): Promise<boolean> {\n const entry = this.entries.find((e) => e.id === id);\n if (!entry || (entry.status !== 'open' && entry.status !== 'opening') || entry.backBusy) return false;\n const o = entry.options;\n if ((source === 'overlayTap' || source === 'drag') && o.isCancelable === false) return false;\n let close: boolean;\n if (o.onBackRequested) {\n entry.backBusy = true;\n let action: G9SheetBackAction = 'doNothing';\n try {\n action = await o.onBackRequested(source);\n } catch (error) {\n this.config.onError?.(error);\n } finally {\n entry.backBusy = false;\n }\n close = action === 'close';\n } else {\n close = source !== 'hardwareButton' || o.hardwareBackCloses !== false;\n }\n if (!close) return false;\n const reason: G9SheetCloseReason =\n source === 'toolbarButton'\n ? 'toolbarButton'\n : source === 'hardwareButton'\n ? 'hardwareButton'\n : source === 'overlayTap'\n ? 'overlayTap'\n : 'drag';\n return this.beginClose(entry, reason);\n }\n\n /** Updates the content (and options) of an open sheet in place, without any transition (declarative sheets). */\n update(id: number, content: G9SheetContent, options?: G9SheetOptions): void {\n const entry = this.entries.find((e) => e.id === id);\n if (!entry || entry.status === 'closed') return;\n entry.content = content;\n if (options) entry.options = options;\n this.emit();\n }\n\n /** Closes one sheet (owned handle `Close`). */\n close(id: number, reason: G9SheetCloseReason = 'closed'): boolean {\n const entry = this.entries.find((e) => e.id === id) ?? (this.pending?.id === id ? this.pending : undefined);\n if (!entry) return false;\n if (entry === this.pending) {\n this.pending = null;\n this.finish(entry, reason, false);\n return true;\n }\n return this.beginClose(entry, reason);\n }\n\n // ---- frame reports ---------------------------------------------------------------------------------------------\n\n /** The frame finished its open motion. */\n markOpened(id: number): void {\n const entry = this.entries.find((e) => e.id === id);\n if (entry?.status !== 'opening') return;\n this.clearTimer(entry);\n entry.status = 'open';\n this.emit();\n this.safe(() => entry.options.onOpened?.());\n if (entry.successorOf !== null) {\n const old = this.entries.find((e) => e.id === entry.successorOf);\n if (old) this.beginClose(old, 'replaced');\n }\n }\n\n /** The frame finished its close motion. */\n markClosed(id: number): void {\n const entry = this.entries.find((e) => e.id === id);\n if (entry?.status !== 'closing') return;\n this.clearTimer(entry);\n entry.timer = this.config.setTimer(() => this.remove(entry), g9SheetCloseGraceMs);\n }\n\n /** Host unmount: every sheet settles with `'unmount'`; nothing opens afterwards. */\n dispose(): void {\n if (this.disposed) return;\n this.disposed = true;\n if (this.pending) this.finish(this.pending, 'unmount', false);\n this.pending = null;\n for (const entry of [...this.entries]) {\n this.clearTimer(entry);\n if (entry.status !== 'closed') {\n if (!entry.closingStarted) this.safe(() => entry.options.onClosing?.());\n this.finish(entry, entry.reason ?? 'unmount', true);\n }\n }\n this.entries = [];\n this.emit();\n }\n\n // ---- internals -------------------------------------------------------------------------------------------------\n\n private live(): MutableEntry[] {\n return this.entries.filter((e) => e.status === 'opening' || e.status === 'open');\n }\n\n private passThrottle(): boolean {\n const now = this.config.now();\n if (now - this.lastShow < g9SheetShowThrottleMs) return false;\n this.lastShow = now;\n return true;\n }\n\n private create(content: G9SheetContent, options: G9SheetOptions): MutableEntry {\n const id = this.nextId++;\n let settle!: (result: G9SheetResult) => void;\n const result = new Promise<G9SheetResult>((resolve) => {\n settle = resolve;\n });\n const entry: MutableEntry = {\n id,\n frameKey: id,\n content,\n options,\n status: 'opening',\n version: 0,\n receded: false,\n quickClose: false,\n handingOff: false,\n reason: null,\n settle,\n timer: null,\n successorOf: null,\n closingStarted: false,\n backBusy: false,\n handle: {\n id,\n result,\n get isOpen() {\n return entry.status === 'opening' || entry.status === 'open' || entry.status === 'queued';\n },\n close: () => {\n this.close(id);\n },\n closeAsync: async () => {\n this.close(id);\n await result;\n },\n show: (c, o) => this.show(c, o),\n closeTop: () => this.closeTop(),\n },\n };\n return entry;\n }\n\n private push(entry: MutableEntry): void {\n const parent = this.live().pop();\n if (\n parent &&\n entry.successorOf === null &&\n entry.options.recedeParentOnStack !== false &&\n !this.isFullScreen(parent)\n ) {\n parent.receded = true;\n }\n entry.status = 'opening';\n this.entries.push(entry);\n this.safe(() => entry.options.onOpening?.());\n entry.timer = this.config.setTimer(() => this.markOpened(entry.id), this.config.durations(entry.options).open);\n this.emit();\n }\n\n private isFullScreen(entry: MutableEntry): boolean {\n const states = entry.options.states;\n return entry.options.sizeMode !== 'fitToContent' && !!states && states.length === 1 && states[0] === 'large';\n }\n\n private beginClose(entry: MutableEntry, reason: G9SheetCloseReason): boolean {\n if (entry.status === 'closing' || entry.status === 'closed') return false;\n if (entry.status === 'queued') {\n this.finish(entry, reason, false);\n return true;\n }\n this.clearTimer(entry);\n entry.status = 'closing';\n entry.reason = reason;\n entry.closingStarted = true;\n this.safe(() => entry.options.onClosing?.());\n // A successor still staging hands the primary back.\n for (const e of this.entries) if (e.successorOf === entry.id && e.status !== 'closed') e.successorOf = null;\n entry.handingOff = false;\n const close = this.config.durations(entry.options).close * (entry.quickClose ? 0.5 : 1);\n entry.timer = this.config.setTimer(() => this.remove(entry), close + g9SheetCloseGraceMs);\n this.restoreParent(entry);\n this.emit();\n return true;\n }\n\n /** Quick close of an entry already closing: its removal comes at half the close duration from now. */\n private hurry(entry: MutableEntry): void {\n if (entry.quickClose) return;\n entry.quickClose = true;\n this.clearTimer(entry);\n const close = this.config.durations(entry.options).close * 0.5;\n entry.timer = this.config.setTimer(() => this.remove(entry), close + g9SheetCloseGraceMs);\n }\n\n private restoreParent(closing: MutableEntry): void {\n const index = this.entries.indexOf(closing);\n const parents = this.entries.slice(0, index).filter((e) => e.status === 'opening' || e.status === 'open');\n const parent = parents[parents.length - 1];\n const stillAbove = this.entries.slice(index + 1).some((e) => e.status === 'opening' || e.status === 'open');\n if (parent && !stillAbove) parent.receded = false;\n }\n\n private remove(entry: MutableEntry): void {\n this.clearTimer(entry);\n const index = this.entries.indexOf(entry);\n if (index >= 0) this.entries.splice(index, 1);\n this.finish(entry, entry.reason ?? 'closed', true);\n if (this.pending && !this.entries.some((e) => e.status === 'closing') && this.live().length === 0) {\n const next = this.pending;\n this.pending = null;\n this.push(next);\n return;\n }\n this.emit();\n }\n\n private finish(entry: MutableEntry, reason: G9SheetCloseReason, runClosed: boolean): void {\n if (entry.status === 'closed') return;\n entry.status = 'closed';\n entry.reason = entry.reason ?? reason;\n if (runClosed) this.safe(() => entry.options.onClosed?.());\n entry.settle({ reason: entry.reason });\n }\n\n private clearTimer(entry: MutableEntry): void {\n if (entry.timer !== null) this.config.clearTimer(entry.timer);\n entry.timer = null;\n }\n\n private safe(action: () => void): void {\n try {\n action();\n } catch (error) {\n this.config.onError?.(error);\n }\n }\n\n private view(entry: MutableEntry): G9SheetEntry {\n return {\n id: entry.id,\n frameKey: entry.frameKey,\n content: entry.content,\n options: entry.options,\n status: entry.status,\n version: entry.version,\n receded: entry.receded,\n quickClose: entry.quickClose,\n handingOff: entry.handingOff,\n reason: entry.reason,\n };\n }\n\n private emit(): void {\n this.snapshot = this.entries.map((e) => this.view(e));\n for (const listener of [...this.listeners]) listener();\n }\n\n /** The handle of an entry (frames inject it into their content). */\n handleOf(id: number): G9SheetHandle | null {\n return this.entries.find((e) => e.id === id)?.handle ?? null;\n }\n}\n"],"names":["g9SheetShowThrottleMs","g9SheetCloseGraceMs","G9SheetStack","listener","e","open","content","options","throttle","entry","live","_this_config","old","hold","undefined","current","fit","o","modal","index","top","i","id","source","close","action","error","reason","_this_entries_find","_this_pending","_entry_options","_entry_reason","now","settle","result","Promise","resolve","c","parent","states","closing","parents","stillAbove","next","runClosed","config","Number","Set"],"mappings":"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"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export { createSwipeGroup, type G9SwipeAction, type G9SwipeGroupStore, g9SwipeDefaultActionWidth, g9SwipeDefaultCornerRadius, g9SwipeSnapMs, swipeActionColors, swipePaneWidth, swipePhysicalWidths, swipeSnap, swipeSnapMT, } from './model.js';
|
|
2
|
+
export { G9SwipeGroup, G9SwipeView, type G9SwipeViewProps } from './swipe-view.js';
|
|
3
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/swipe/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,gBAAgB,EAChB,KAAK,aAAa,EAClB,KAAK,iBAAiB,EACtB,yBAAyB,EACzB,0BAA0B,EAC1B,aAAa,EACb,iBAAiB,EACjB,cAAc,EACd,mBAAmB,EACnB,SAAS,EACT,WAAW,GACZ,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,KAAK,gBAAgB,EAAE,MAAM,cAAc,CAAC"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import type { G9IconInput } from '../icon/icon.js';
|
|
2
|
+
/** Pane width when an action sets none (MAUI `G9SwipeView.DefaultActionWidth`). */
|
|
3
|
+
export declare const g9SwipeDefaultActionWidth = 88;
|
|
4
|
+
/** Outer card radius (MAUI `G9SwipeView.CornerRadius` default, `RadiusMd`). */
|
|
5
|
+
export declare const g9SwipeDefaultCornerRadius = 14;
|
|
6
|
+
/** Snap animation after a release or a programmatic open / close. */
|
|
7
|
+
export declare const g9SwipeSnapMs = 200;
|
|
8
|
+
/** One action pane of a swipe row (MAUI `G9SwipeAction`). Change a field and re-render to update it in place. */
|
|
9
|
+
export interface G9SwipeAction {
|
|
10
|
+
/** Label under the icon; localize before assigning. */
|
|
11
|
+
readonly text?: string | null;
|
|
12
|
+
readonly icon?: G9IconInput;
|
|
13
|
+
/** Pane fill. Default primary, or error when `isDestructive`. */
|
|
14
|
+
readonly background?: string | null;
|
|
15
|
+
/** Icon and label colour. Default on-primary, or on-error when `isDestructive`. */
|
|
16
|
+
readonly foreground?: string | null;
|
|
17
|
+
readonly isDestructive?: boolean;
|
|
18
|
+
/** Hidden panes keep their place in the list but take no width. Default true. */
|
|
19
|
+
readonly isVisible?: boolean;
|
|
20
|
+
/** A disabled pane ignores taps without dimming. Default true. */
|
|
21
|
+
readonly isEnabled?: boolean;
|
|
22
|
+
/** Icon size. Default 22. */
|
|
23
|
+
readonly iconSize?: number;
|
|
24
|
+
/** Pane width. Default {@link g9SwipeDefaultActionWidth}. */
|
|
25
|
+
readonly widthRequest?: number;
|
|
26
|
+
/** Runs on a tap with `commandParameter`; an async command runs once until it settles (MAUI `Command`). */
|
|
27
|
+
readonly command?: (parameter: unknown) => void | Promise<void>;
|
|
28
|
+
readonly commandParameter?: unknown;
|
|
29
|
+
/** Raised on a tap, before the command (MAUI `Invoked`). */
|
|
30
|
+
readonly onInvoked?: (action: G9SwipeAction) => void;
|
|
31
|
+
}
|
|
32
|
+
/** Colours of a pane (MAUI theme resolution with the destructive shortcut; explicit colours win). */
|
|
33
|
+
export declare function swipeActionColors(action: G9SwipeAction): {
|
|
34
|
+
readonly background: string;
|
|
35
|
+
readonly foreground: string;
|
|
36
|
+
};
|
|
37
|
+
/** Total width of the visible panes on one edge. */
|
|
38
|
+
export declare function swipePaneWidth(actions: readonly G9SwipeAction[] | null | undefined): number;
|
|
39
|
+
/**
|
|
40
|
+
* Physical pane widths: leading actions sit on the reading-start edge (left in LTR, right in RTL), so a positive
|
|
41
|
+
* translation (body moved right) reveals the physical-left pane.
|
|
42
|
+
*/
|
|
43
|
+
export declare function swipePhysicalWidths(leading: number, trailing: number, rtl: boolean): {
|
|
44
|
+
readonly left: number;
|
|
45
|
+
readonly right: number;
|
|
46
|
+
};
|
|
47
|
+
/**
|
|
48
|
+
* Where a released body settles (MAUI Windows drag: past half the pane snaps open, else closed). `translate` is the
|
|
49
|
+
* body's x offset; returns `leftWidth` (left pane open), `-rightWidth` (right pane open) or 0.
|
|
50
|
+
*/
|
|
51
|
+
export declare function swipeSnap(translate: number, leftWidth: number, rightWidth: number): number;
|
|
52
|
+
/** Main-thread twin of {@link swipeSnap} (plan/specs/02 §3). */
|
|
53
|
+
export declare function swipeSnapMT(translate: number, leftWidth: number, rightWidth: number): number;
|
|
54
|
+
/**
|
|
55
|
+
* The single-open policy shared by the rows of a list (one open row at a time): opening a row closes the one open
|
|
56
|
+
* before it. Rows use the nearest {@link G9SwipeGroup} context, else one default group.
|
|
57
|
+
*/
|
|
58
|
+
export interface G9SwipeGroupStore {
|
|
59
|
+
/** Marks `id` open; closes the previously open row. */
|
|
60
|
+
opened(id: string, close: () => void): void;
|
|
61
|
+
/** Marks `id` closed (no-op when another row is the open one). */
|
|
62
|
+
closed(id: string): void;
|
|
63
|
+
/** Closes the open row, if any. */
|
|
64
|
+
closeAll(): void;
|
|
65
|
+
readonly openId: string | null;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* A swipe group: at most one row of the group is open; opening another closes the previous one (MAUI
|
|
69
|
+
* `G9SwipeGroup`). `<G9SwipeGroup>` creates one; create your own to share it across lists.
|
|
70
|
+
*/
|
|
71
|
+
export declare function createSwipeGroup(): G9SwipeGroupStore;
|
|
72
|
+
//# sourceMappingURL=model.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../../src/swipe/model.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAEhD,mFAAmF;AACnF,eAAO,MAAM,yBAAyB,KAAK,CAAC;AAC5C,+EAA+E;AAC/E,eAAO,MAAM,0BAA0B,KAAK,CAAC;AAC7C,qEAAqE;AACrE,eAAO,MAAM,aAAa,MAAM,CAAC;AAEjC,iHAAiH;AACjH,MAAM,WAAW,aAAa;IAC5B,uDAAuD;IACvD,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,QAAQ,CAAC,IAAI,CAAC,EAAE,WAAW,CAAC;IAC5B,iEAAiE;IACjE,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,mFAAmF;IACnF,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,CAAC;IACjC,iFAAiF;IACjF,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC;IAC7B,kEAAkE;IAClE,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC;IAC7B,6BAA6B;IAC7B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,6DAA6D;IAC7D,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,2GAA2G;IAC3G,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,OAAO,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAChE,QAAQ,CAAC,gBAAgB,CAAC,EAAE,OAAO,CAAC;IACpC,4DAA4D;IAC5D,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,aAAa,KAAK,IAAI,CAAC;CACtD;AAED,qGAAqG;AACrG,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,aAAa,GAAG;IAAE,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;CAAE,CAMrH;AAED,oDAAoD;AACpD,wBAAgB,cAAc,CAAC,OAAO,EAAE,SAAS,aAAa,EAAE,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,CAO3F;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,GAAG,EAAE,OAAO,GACX;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAEnD;AAED;;;GAGG;AACH,wBAAgB,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAI1F;AAED,gEAAgE;AAChE,wBAAgB,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAK5F;AAED;;;GAGG;AACH,MAAM,WAAW,iBAAiB;IAChC,uDAAuD;IACvD,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,IAAI,GAAG,IAAI,CAAC;IAC5C,kEAAkE;IAClE,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,mCAAmC;IACnC,QAAQ,IAAI,IAAI,CAAC;IACjB,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CAChC;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,IAAI,iBAAiB,CAmBpD"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
const g9SwipeDefaultActionWidth = 88;
|
|
2
|
+
const g9SwipeDefaultCornerRadius = 14;
|
|
3
|
+
const g9SwipeSnapMs = 200;
|
|
4
|
+
function swipeActionColors(action) {
|
|
5
|
+
var _action_background, _action_foreground;
|
|
6
|
+
const destructive = true === action.isDestructive;
|
|
7
|
+
return {
|
|
8
|
+
background: null != (_action_background = action.background) ? _action_background : destructive ? 'var(--g9-error)' : 'var(--g9-primary)',
|
|
9
|
+
foreground: null != (_action_foreground = action.foreground) ? _action_foreground : destructive ? 'var(--g9-on-error)' : 'var(--g9-on-primary)'
|
|
10
|
+
};
|
|
11
|
+
}
|
|
12
|
+
function swipePaneWidth(actions) {
|
|
13
|
+
let width = 0;
|
|
14
|
+
for (const action of null != actions ? actions : []){
|
|
15
|
+
var _action_widthRequest;
|
|
16
|
+
if (false !== action.isVisible) width += null != (_action_widthRequest = action.widthRequest) ? _action_widthRequest : g9SwipeDefaultActionWidth;
|
|
17
|
+
}
|
|
18
|
+
return width;
|
|
19
|
+
}
|
|
20
|
+
function swipePhysicalWidths(leading, trailing, rtl) {
|
|
21
|
+
return rtl ? {
|
|
22
|
+
left: trailing,
|
|
23
|
+
right: leading
|
|
24
|
+
} : {
|
|
25
|
+
left: leading,
|
|
26
|
+
right: trailing
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
function swipeSnap(translate, leftWidth, rightWidth) {
|
|
30
|
+
if (translate > 0 && leftWidth > 0 && translate > leftWidth / 2) return leftWidth;
|
|
31
|
+
if (translate < 0 && rightWidth > 0 && -translate > rightWidth / 2) return -rightWidth;
|
|
32
|
+
return 0;
|
|
33
|
+
}
|
|
34
|
+
function swipeSnapMT(translate, leftWidth, rightWidth) {
|
|
35
|
+
'main thread';
|
|
36
|
+
if (translate > 0 && leftWidth > 0 && translate > leftWidth / 2) return leftWidth;
|
|
37
|
+
if (translate < 0 && rightWidth > 0 && -translate > rightWidth / 2) return -rightWidth;
|
|
38
|
+
return 0;
|
|
39
|
+
}
|
|
40
|
+
function createSwipeGroup() {
|
|
41
|
+
let open = null;
|
|
42
|
+
return {
|
|
43
|
+
opened (id, close) {
|
|
44
|
+
if (open && open.id !== id) open.close();
|
|
45
|
+
open = {
|
|
46
|
+
id,
|
|
47
|
+
close
|
|
48
|
+
};
|
|
49
|
+
},
|
|
50
|
+
closed (id) {
|
|
51
|
+
if ((null == open ? void 0 : open.id) === id) open = null;
|
|
52
|
+
},
|
|
53
|
+
closeAll () {
|
|
54
|
+
const current = open;
|
|
55
|
+
open = null;
|
|
56
|
+
null == current || current.close();
|
|
57
|
+
},
|
|
58
|
+
get openId () {
|
|
59
|
+
var _ref;
|
|
60
|
+
return null != (_ref = null == open ? void 0 : open.id) ? _ref : null;
|
|
61
|
+
}
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
export { createSwipeGroup, g9SwipeDefaultActionWidth, g9SwipeDefaultCornerRadius, g9SwipeSnapMs, swipeActionColors, swipePaneWidth, swipePhysicalWidths, swipeSnap, swipeSnapMT };
|
|
65
|
+
|
|
66
|
+
//# sourceMappingURL=model.jsx.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"swipe/model.jsx","sources":["../../src/swipe/model.ts"],"sourcesContent":["import type { G9IconInput } from '../icon/icon';\n\n/** Pane width when an action sets none (MAUI `G9SwipeView.DefaultActionWidth`). */\nexport const g9SwipeDefaultActionWidth = 88;\n/** Outer card radius (MAUI `G9SwipeView.CornerRadius` default, `RadiusMd`). */\nexport const g9SwipeDefaultCornerRadius = 14;\n/** Snap animation after a release or a programmatic open / close. */\nexport const g9SwipeSnapMs = 200;\n\n/** One action pane of a swipe row (MAUI `G9SwipeAction`). Change a field and re-render to update it in place. */\nexport interface G9SwipeAction {\n /** Label under the icon; localize before assigning. */\n readonly text?: string | null;\n readonly icon?: G9IconInput;\n /** Pane fill. Default primary, or error when `isDestructive`. */\n readonly background?: string | null;\n /** Icon and label colour. Default on-primary, or on-error when `isDestructive`. */\n readonly foreground?: string | null;\n readonly isDestructive?: boolean;\n /** Hidden panes keep their place in the list but take no width. Default true. */\n readonly isVisible?: boolean;\n /** A disabled pane ignores taps without dimming. Default true. */\n readonly isEnabled?: boolean;\n /** Icon size. Default 22. */\n readonly iconSize?: number;\n /** Pane width. Default {@link g9SwipeDefaultActionWidth}. */\n readonly widthRequest?: number;\n /** Runs on a tap with `commandParameter`; an async command runs once until it settles (MAUI `Command`). */\n readonly command?: (parameter: unknown) => void | Promise<void>;\n readonly commandParameter?: unknown;\n /** Raised on a tap, before the command (MAUI `Invoked`). */\n readonly onInvoked?: (action: G9SwipeAction) => void;\n}\n\n/** Colours of a pane (MAUI theme resolution with the destructive shortcut; explicit colours win). */\nexport function swipeActionColors(action: G9SwipeAction): { readonly background: string; readonly foreground: string } {\n const destructive = action.isDestructive === true;\n return {\n background: action.background ?? (destructive ? 'var(--g9-error)' : 'var(--g9-primary)'),\n foreground: action.foreground ?? (destructive ? 'var(--g9-on-error)' : 'var(--g9-on-primary)'),\n };\n}\n\n/** Total width of the visible panes on one edge. */\nexport function swipePaneWidth(actions: readonly G9SwipeAction[] | null | undefined): number {\n let width = 0;\n for (const action of actions ?? []) {\n if (action.isVisible === false) continue;\n width += action.widthRequest ?? g9SwipeDefaultActionWidth;\n }\n return width;\n}\n\n/**\n * Physical pane widths: leading actions sit on the reading-start edge (left in LTR, right in RTL), so a positive\n * translation (body moved right) reveals the physical-left pane.\n */\nexport function swipePhysicalWidths(\n leading: number,\n trailing: number,\n rtl: boolean,\n): { readonly left: number; readonly right: number } {\n return rtl ? { left: trailing, right: leading } : { left: leading, right: trailing };\n}\n\n/**\n * Where a released body settles (MAUI Windows drag: past half the pane snaps open, else closed). `translate` is the\n * body's x offset; returns `leftWidth` (left pane open), `-rightWidth` (right pane open) or 0.\n */\nexport function swipeSnap(translate: number, leftWidth: number, rightWidth: number): number {\n if (translate > 0 && leftWidth > 0 && translate > leftWidth / 2) return leftWidth;\n if (translate < 0 && rightWidth > 0 && -translate > rightWidth / 2) return -rightWidth;\n return 0;\n}\n\n/** Main-thread twin of {@link swipeSnap} (plan/specs/02 §3). */\nexport function swipeSnapMT(translate: number, leftWidth: number, rightWidth: number): number {\n 'main thread';\n if (translate > 0 && leftWidth > 0 && translate > leftWidth / 2) return leftWidth;\n if (translate < 0 && rightWidth > 0 && -translate > rightWidth / 2) return -rightWidth;\n return 0;\n}\n\n/**\n * The single-open policy shared by the rows of a list (one open row at a time): opening a row closes the one open\n * before it. Rows use the nearest {@link G9SwipeGroup} context, else one default group.\n */\nexport interface G9SwipeGroupStore {\n /** Marks `id` open; closes the previously open row. */\n opened(id: string, close: () => void): void;\n /** Marks `id` closed (no-op when another row is the open one). */\n closed(id: string): void;\n /** Closes the open row, if any. */\n closeAll(): void;\n readonly openId: string | null;\n}\n\n/**\n * A swipe group: at most one row of the group is open; opening another closes the previous one (MAUI\n * `G9SwipeGroup`). `<G9SwipeGroup>` creates one; create your own to share it across lists.\n */\nexport function createSwipeGroup(): G9SwipeGroupStore {\n let open: { id: string; close: () => void } | null = null;\n return {\n opened(id, close) {\n if (open && open.id !== id) open.close();\n open = { id, close };\n },\n closed(id) {\n if (open?.id === id) open = null;\n },\n closeAll() {\n const current = open;\n open = null;\n current?.close();\n },\n get openId() {\n return open?.id ?? null;\n },\n };\n}\n"],"names":["g9SwipeDefaultActionWidth","g9SwipeDefaultCornerRadius","g9SwipeSnapMs","swipeActionColors","action","_action_background","_action_foreground","destructive","swipePaneWidth","actions","width","_action_widthRequest","swipePhysicalWidths","leading","trailing","rtl","swipeSnap","translate","leftWidth","rightWidth","swipeSnapMT","createSwipeGroup","open","id","close","current"],"mappings":"AAGO,MAAMA,4BAA4B;AAElC,MAAMC,6BAA6B;AAEnC,MAAMC,gBAAgB;AA4BtB,SAASC,kBAAkBC,MAAqB;QAGvCC,oBACAC;IAHd,MAAMC,cAAcH,AAAyB,SAAzBA,OAAO,aAAa;IACxC,OAAO;QACL,YAAY,QAAAC,CAAAA,qBAAAA,OAAO,UAAU,AAAD,IAAhBA,qBAAsBE,cAAc,oBAAoB;QACpE,YAAY,QAAAD,CAAAA,qBAAAA,OAAO,UAAU,AAAD,IAAhBA,qBAAsBC,cAAc,uBAAuB;IACzE;AACF;AAGO,SAASC,eAAeC,OAAoD;IACjF,IAAIC,QAAQ;IACZ,KAAK,MAAMN,UAAUK,QAAAA,UAAAA,UAAW,EAAE,CAAE;YAEzBE;QADT,IAAIP,AAAqB,UAArBA,OAAO,SAAS,EACpBM,SAAS,QAAAC,CAAAA,uBAAAA,OAAO,YAAY,AAAD,IAAlBA,uBAAuBX;IAClC;IACA,OAAOU;AACT;AAMO,SAASE,oBACdC,OAAe,EACfC,QAAgB,EAChBC,GAAY;IAEZ,OAAOA,MAAM;QAAE,MAAMD;QAAU,OAAOD;IAAQ,IAAI;QAAE,MAAMA;QAAS,OAAOC;IAAS;AACrF;AAMO,SAASE,UAAUC,SAAiB,EAAEC,SAAiB,EAAEC,UAAkB;IAChF,IAAIF,YAAY,KAAKC,YAAY,KAAKD,YAAYC,YAAY,GAAG,OAAOA;IACxE,IAAID,YAAY,KAAKE,aAAa,KAAK,CAACF,YAAYE,aAAa,GAAG,OAAO,CAACA;IAC5E,OAAO;AACT;AAGO,SAASC,YAAYH,SAAiB,EAAEC,SAAiB,EAAEC,UAAkB;IAClF;IACA,IAAIF,YAAY,KAAKC,YAAY,KAAKD,YAAYC,YAAY,GAAG,OAAOA;IACxE,IAAID,YAAY,KAAKE,aAAa,KAAK,CAACF,YAAYE,aAAa,GAAG,OAAO,CAACA;IAC5E,OAAO;AACT;AAoBO,SAASE;IACd,IAAIC,OAAiD;IACrD,OAAO;QACL,QAAOC,EAAE,EAAEC,KAAK;YACd,IAAIF,QAAQA,KAAK,EAAE,KAAKC,IAAID,KAAK,KAAK;YACtCA,OAAO;gBAAEC;gBAAIC;YAAM;QACrB;QACA,QAAOD,EAAE;YACP,IAAID,AAAAA,CAAAA,QAAAA,OAAAA,KAAAA,IAAAA,KAAM,EAAE,AAAD,MAAMC,IAAID,OAAO;QAC9B;QACA;YACE,MAAMG,UAAUH;YAChBA,OAAO;YACPG,QAAAA,WAAAA,QAAS,KAAK;QAChB;QACA,IAAI;;YACF,OAAO,QAAP,QAAOH,QAAAA,OAAAA,KAAAA,IAAAA,KAAM,EAAE,AAAD,IAAC,OAAI;QACrB;IACF;AACF"}
|