@g9tm/lynxcontrols 0.0.0-stage → 1.4.2
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 +29 -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 +68 -0
- package/dist/base/control.d.ts.map +1 -0
- package/dist/base/control.jsx +36 -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 +88 -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 +96 -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 +73 -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 +112 -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 +164 -0
- package/dist/fields/fields.css.map +1 -0
- package/dist/fields/index.d.ts +13 -0
- package/dist/fields/index.d.ts.map +1 -0
- package/dist/fields/index.jsx +12 -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/notch.d.ts +10 -0
- package/dist/fields/notch.d.ts.map +1 -0
- package/dist/fields/notch.jsx +9 -0
- package/dist/fields/notch.jsx.map +1 -0
- package/dist/fields/outlined-field.d.ts +152 -0
- package/dist/fields/outlined-field.d.ts.map +1 -0
- package/dist/fields/outlined-field.jsx +199 -0
- package/dist/fields/outlined-field.jsx.map +1 -0
- package/dist/fields/pin-entry.d.ts +65 -0
- package/dist/fields/pin-entry.d.ts.map +1 -0
- package/dist/fields/pin-entry.jsx +294 -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 +82 -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 +247 -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 +90 -0
- package/dist/host/hooks.d.ts.map +1 -0
- package/dist/host/hooks.jsx +166 -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 +252 -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 +350 -0
- package/dist/popup/service.jsx.map +1 -0
- package/dist/popup/types.d.ts +222 -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 +366 -0
- package/dist/selection/selection-sheet.jsx.map +1 -0
- package/dist/selection/selection.css +76 -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 +47 -0
- package/dist/sheet/frame.d.ts.map +1 -0
- package/dist/sheet/frame.jsx +270 -0
- package/dist/sheet/frame.jsx.map +1 -0
- package/dist/sheet/gesture.d.ts +51 -0
- package/dist/sheet/gesture.d.ts.map +1 -0
- package/dist/sheet/gesture.jsx +107 -0
- package/dist/sheet/gesture.jsx.map +1 -0
- package/dist/sheet/handoff.d.ts +32 -0
- package/dist/sheet/handoff.d.ts.map +1 -0
- package/dist/sheet/handoff.jsx +33 -0
- package/dist/sheet/handoff.jsx.map +1 -0
- package/dist/sheet/header.d.ts +46 -0
- package/dist/sheet/header.d.ts.map +1 -0
- package/dist/sheet/header.jsx +158 -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 +12 -0
- package/dist/sheet/index.d.ts.map +1 -0
- package/dist/sheet/index.jsx +11 -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/motion.d.ts +59 -0
- package/dist/sheet/motion.d.ts.map +1 -0
- package/dist/sheet/motion.jsx +59 -0
- package/dist/sheet/motion.jsx.map +1 -0
- package/dist/sheet/options.d.ts +252 -0
- package/dist/sheet/options.d.ts.map +1 -0
- package/dist/sheet/options.jsx +92 -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 +246 -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 +87 -0
- package/dist/sheet/sizing.d.ts.map +1 -0
- package/dist/sheet/sizing.jsx +159 -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 +61 -0
- package/dist/tab-bar/tab-bar.d.ts.map +1 -0
- package/dist/tab-bar/tab-bar.jsx +346 -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 +238 -0
- package/dist/toast/service.jsx.map +1 -0
- package/dist/toast/store.d.ts +176 -0
- package/dist/toast/store.d.ts.map +1 -0
- package/dist/toast/store.jsx +355 -0
- package/dist/toast/store.jsx.map +1 -0
- package/dist/toast/toast.css +159 -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 +188 -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,40 @@
|
|
|
1
|
+
import './swipe.css';
|
|
2
|
+
import { type ReactNode } from '@lynx-js/react';
|
|
3
|
+
import { type G9SwipeAction, type G9SwipeGroupStore } from './model.js';
|
|
4
|
+
/** Scopes the one-open-row policy to a list (rows outside any group share one default group). */
|
|
5
|
+
export declare function G9SwipeGroup(props: {
|
|
6
|
+
readonly group?: G9SwipeGroupStore;
|
|
7
|
+
readonly children?: ReactNode;
|
|
8
|
+
}): ReactNode;
|
|
9
|
+
/** Props of {@link G9SwipeView} (MAUI bindable properties). */
|
|
10
|
+
export interface G9SwipeViewProps {
|
|
11
|
+
/** Revealed on the leading edge: left in LTR, right in RTL (MAUI `LeftActions`). */
|
|
12
|
+
readonly leftActions?: readonly G9SwipeAction[];
|
|
13
|
+
/** Revealed on the trailing edge: right in LTR, left in RTL (MAUI `RightActions`). */
|
|
14
|
+
readonly rightActions?: readonly G9SwipeAction[];
|
|
15
|
+
/** The card body (MAUI `CardContent`); `children` works too. Give it an opaque, square, strokeless fill. */
|
|
16
|
+
readonly cardContent?: ReactNode;
|
|
17
|
+
readonly children?: ReactNode;
|
|
18
|
+
/** Outer card radius; the panes are clipped to it. Default 14. */
|
|
19
|
+
readonly cornerRadius?: number;
|
|
20
|
+
readonly cardBackground?: string | null;
|
|
21
|
+
readonly cardStroke?: string | null;
|
|
22
|
+
readonly cardStrokeThickness?: number;
|
|
23
|
+
/**
|
|
24
|
+
* The item this row shows. When it changes (a recycled `<list>` row rebound to another item) the row closes
|
|
25
|
+
* instantly, so a reused row never shows the previous item's open pane.
|
|
26
|
+
*/
|
|
27
|
+
readonly itemKey?: string | number;
|
|
28
|
+
/** Told when the row opens a side or closes. */
|
|
29
|
+
readonly onOpenChange?: (side: 'leading' | 'trailing' | null) => void;
|
|
30
|
+
readonly className?: string;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* A card row with swipe-to-reveal action panes on both edges (MAUI `G9SwipeView`). The panes sit behind the body, so
|
|
34
|
+
* the body must be opaque (MAUI's "flat but opaque" rule). The drag lives in lynx-ui
|
|
35
|
+
* `Draggable` (touch and mouse, so desktop works like MAUI's Windows drag); release snaps open past half a pane, else
|
|
36
|
+
* closed (`swipeSnapMT` on the main thread, `swipeSnap` on the background, the same rule). One open row at a time per
|
|
37
|
+
* {@link G9SwipeGroup}; a tap on a pane runs its action once and closes; a tap on an open body closes it.
|
|
38
|
+
*/
|
|
39
|
+
export declare function G9SwipeView(props: G9SwipeViewProps): ReactNode;
|
|
40
|
+
//# sourceMappingURL=swipe-view.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"swipe-view.d.ts","sourceRoot":"","sources":["../../src/swipe/swipe-view.tsx"],"names":[],"mappings":"AAAA,OAAO,aAAa,CAAC;AAErB,OAAO,EAEL,KAAK,SAAS,EAOf,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EAEL,KAAK,aAAa,EAClB,KAAK,iBAAiB,EAQvB,MAAM,SAAS,CAAC;AAMjB,iGAAiG;AACjG,wBAAgB,YAAY,CAAC,KAAK,EAAE;IAAE,QAAQ,CAAC,KAAK,CAAC,EAAE,iBAAiB,CAAC;IAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,CAAA;CAAE,GAAG,SAAS,CAIpH;AAED,+DAA+D;AAC/D,MAAM,WAAW,gBAAgB;IAC/B,oFAAoF;IACpF,QAAQ,CAAC,WAAW,CAAC,EAAE,SAAS,aAAa,EAAE,CAAC;IAChD,sFAAsF;IACtF,QAAQ,CAAC,YAAY,CAAC,EAAE,SAAS,aAAa,EAAE,CAAC;IACjD,4GAA4G;IAC5G,QAAQ,CAAC,WAAW,CAAC,EAAE,SAAS,CAAC;IACjC,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,CAAC;IAC9B,kEAAkE;IAClE,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxC,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,QAAQ,CAAC,mBAAmB,CAAC,EAAE,MAAM,CAAC;IACtC;;;OAGG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACnC,gDAAgD;IAChD,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,SAAS,GAAG,UAAU,GAAG,IAAI,KAAK,IAAI,CAAC;IACtE,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,gBAAgB,GAAG,SAAS,CAwJ9D"}
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
import "./swipe.css";
|
|
2
|
+
import { Draggable } from "@lynx-js/lynx-ui-draggable";
|
|
3
|
+
import { createContext, runOnMainThread, useContext, useEffect, useMainThreadRef, useRef, useState } from "@lynx-js/react";
|
|
4
|
+
import { G9Icon } from "../icon/icon.jsx";
|
|
5
|
+
import { useG9Diagnostics, useG9Direction } from "../provider/hooks.jsx";
|
|
6
|
+
import { createSwipeGroup, g9SwipeDefaultCornerRadius, g9SwipeSnapMs, swipeActionColors, swipePaneWidth, swipePhysicalWidths, swipeSnap, swipeSnapMT } from "./model.jsx";
|
|
7
|
+
const defaultGroup = createSwipeGroup();
|
|
8
|
+
let rowSequence = 0;
|
|
9
|
+
const SwipeGroupContext = createContext(defaultGroup);
|
|
10
|
+
function G9SwipeGroup(props) {
|
|
11
|
+
var _props_group, _props_group1;
|
|
12
|
+
const own = useRef(null);
|
|
13
|
+
if (null === own.current) own.current = null != (_props_group = props.group) ? _props_group : createSwipeGroup();
|
|
14
|
+
return <SwipeGroupContext.Provider value={null != (_props_group1 = props.group) ? _props_group1 : own.current}>{props.children}</SwipeGroupContext.Provider>;
|
|
15
|
+
}
|
|
16
|
+
function G9SwipeView(props) {
|
|
17
|
+
var _props_leftActions, _props_rightActions, _props_cornerRadius, _props_cardStrokeThickness, _props_className, _props_cardBackground, _props_cardContent;
|
|
18
|
+
const idRef = useRef(null);
|
|
19
|
+
if (null === idRef.current) {
|
|
20
|
+
rowSequence += 1;
|
|
21
|
+
idRef.current = `g9-swipe-${rowSequence}`;
|
|
22
|
+
}
|
|
23
|
+
const id = idRef.current;
|
|
24
|
+
const group = useContext(SwipeGroupContext);
|
|
25
|
+
const diagnostics = useG9Diagnostics();
|
|
26
|
+
const rtl = 'rtl' === useG9Direction();
|
|
27
|
+
const leading = (null != (_props_leftActions = props.leftActions) ? _props_leftActions : []).filter((a)=>false !== a.isVisible);
|
|
28
|
+
const trailing = (null != (_props_rightActions = props.rightActions) ? _props_rightActions : []).filter((a)=>false !== a.isVisible);
|
|
29
|
+
const widths = swipePhysicalWidths(swipePaneWidth(leading), swipePaneWidth(trailing), rtl);
|
|
30
|
+
const leftActions = rtl ? trailing : leading;
|
|
31
|
+
const rightActions = rtl ? leading : trailing;
|
|
32
|
+
const [offset, setOffset] = useState(0);
|
|
33
|
+
const offsetRef = useRef(0);
|
|
34
|
+
offsetRef.current = offset;
|
|
35
|
+
const dragRef = useMainThreadRef(null);
|
|
36
|
+
const running = useRef(new Set());
|
|
37
|
+
const latest = useRef(props);
|
|
38
|
+
latest.current = props;
|
|
39
|
+
const moveMT = (x, animated)=>{
|
|
40
|
+
'main thread';
|
|
41
|
+
var _dragRef_current, _dragRef_current1;
|
|
42
|
+
null == (_dragRef_current = dragRef.current) || _dragRef_current.MTSSetOtherStyles({
|
|
43
|
+
transition: animated ? `transform ${g9SwipeSnapMs}ms ease-out` : 'none'
|
|
44
|
+
});
|
|
45
|
+
null == (_dragRef_current1 = dragRef.current) || _dragRef_current1.MTSSetTransform(x, 0);
|
|
46
|
+
};
|
|
47
|
+
const report = (next)=>{
|
|
48
|
+
var _latest_current_onOpenChange, _latest_current;
|
|
49
|
+
const side = 0 === next ? null : next > 0 !== rtl ? 'leading' : 'trailing';
|
|
50
|
+
null == (_latest_current_onOpenChange = (_latest_current = latest.current).onOpenChange) || _latest_current_onOpenChange.call(_latest_current, side);
|
|
51
|
+
};
|
|
52
|
+
const settle = (next, animated, fromDrag)=>{
|
|
53
|
+
if (!fromDrag) runOnMainThread(moveMT)(next, animated);
|
|
54
|
+
if (next === offsetRef.current) return;
|
|
55
|
+
offsetRef.current = next;
|
|
56
|
+
setOffset(next);
|
|
57
|
+
if (0 === next) group.closed(id);
|
|
58
|
+
else group.opened(id, ()=>settle(0, true, false));
|
|
59
|
+
report(next);
|
|
60
|
+
};
|
|
61
|
+
const boundKey = useRef(props.itemKey);
|
|
62
|
+
useEffect(()=>{
|
|
63
|
+
if (boundKey.current === props.itemKey) return;
|
|
64
|
+
boundKey.current = props.itemKey;
|
|
65
|
+
settle(0, false, false);
|
|
66
|
+
}, [
|
|
67
|
+
props.itemKey
|
|
68
|
+
]);
|
|
69
|
+
useEffect(()=>()=>group.closed(id), []);
|
|
70
|
+
const leftWidth = widths.left;
|
|
71
|
+
const rightWidth = widths.right;
|
|
72
|
+
const onMTSDragStart = ()=>{
|
|
73
|
+
'main thread';
|
|
74
|
+
var _dragRef_current;
|
|
75
|
+
null == (_dragRef_current = dragRef.current) || _dragRef_current.MTSSetOtherStyles({
|
|
76
|
+
transition: 'none'
|
|
77
|
+
});
|
|
78
|
+
};
|
|
79
|
+
const onMTSDragEnd = (translate)=>{
|
|
80
|
+
'main thread';
|
|
81
|
+
var _dragRef_current, _dragRef_current1;
|
|
82
|
+
const target = swipeSnapMT(translate.x, leftWidth, rightWidth);
|
|
83
|
+
null == (_dragRef_current = dragRef.current) || _dragRef_current.MTSSetOtherStyles({
|
|
84
|
+
transition: `transform ${g9SwipeSnapMs}ms ease-out`
|
|
85
|
+
});
|
|
86
|
+
null == (_dragRef_current1 = dragRef.current) || _dragRef_current1.MTSSetTransform(target, 0);
|
|
87
|
+
};
|
|
88
|
+
const onDragEnd = (translate)=>{
|
|
89
|
+
settle(swipeSnap(translate.x, leftWidth, rightWidth), true, true);
|
|
90
|
+
};
|
|
91
|
+
const invoke = (action)=>{
|
|
92
|
+
if (false === action.isEnabled || running.current.has(action)) return;
|
|
93
|
+
settle(0, true, false);
|
|
94
|
+
try {
|
|
95
|
+
var _action_onInvoked, _action_command;
|
|
96
|
+
null == (_action_onInvoked = action.onInvoked) || _action_onInvoked.call(action, action);
|
|
97
|
+
const result = null == (_action_command = action.command) ? void 0 : _action_command.call(action, action.commandParameter);
|
|
98
|
+
if (result && 'function' == typeof result.then) {
|
|
99
|
+
running.current.add(action);
|
|
100
|
+
result.then(()=>running.current.delete(action), (error)=>{
|
|
101
|
+
running.current.delete(action);
|
|
102
|
+
diagnostics.log({
|
|
103
|
+
level: 'error',
|
|
104
|
+
message: 'G9SwipeView: action failed.',
|
|
105
|
+
source: 'G9SwipeView',
|
|
106
|
+
error
|
|
107
|
+
});
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
} catch (error) {
|
|
111
|
+
diagnostics.log({
|
|
112
|
+
level: 'error',
|
|
113
|
+
message: 'G9SwipeView: action failed.',
|
|
114
|
+
source: 'G9SwipeView',
|
|
115
|
+
error
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
};
|
|
119
|
+
const pane = (actions, side)=>actions.length > 0 ? <view className={`g9-swipe__pane g9-swipe__pane--${side}`} style={{
|
|
120
|
+
[side]: '0px'
|
|
121
|
+
}}>
|
|
122
|
+
{actions.map((action, i)=>{
|
|
123
|
+
var _action_widthRequest, _action_text, _action_iconSize;
|
|
124
|
+
const colors = swipeActionColors(action);
|
|
125
|
+
return <view key={`${side}-${i}`} className="g9-swipe__action" style={{
|
|
126
|
+
width: `${null != (_action_widthRequest = action.widthRequest) ? _action_widthRequest : 88}px`,
|
|
127
|
+
backgroundColor: colors.background
|
|
128
|
+
}} accessibility-element accessibility-traits="button" accessibility-label={null != (_action_text = action.text) ? _action_text : ''} bindtap={()=>invoke(action)}>
|
|
129
|
+
{action.icon ? <G9Icon icon={action.icon} size={null != (_action_iconSize = action.iconSize) ? _action_iconSize : 22} color={colors.foreground}/> : null}
|
|
130
|
+
{action.text ? <text className="g9-swipe__action-text" text-maxline="1" style={{
|
|
131
|
+
color: colors.foreground
|
|
132
|
+
}}>
|
|
133
|
+
{action.text}
|
|
134
|
+
</text> : null}
|
|
135
|
+
</view>;
|
|
136
|
+
})}
|
|
137
|
+
</view> : null;
|
|
138
|
+
const radius = null != (_props_cornerRadius = props.cornerRadius) ? _props_cornerRadius : g9SwipeDefaultCornerRadius;
|
|
139
|
+
const thickness = null != (_props_cardStrokeThickness = props.cardStrokeThickness) ? _props_cardStrokeThickness : 0;
|
|
140
|
+
return <view className={`g9-swipe${0 !== offset ? ' g9-swipe--open' : ''} ${null != (_props_className = props.className) ? _props_className : ''}`} style={{
|
|
141
|
+
borderRadius: `${radius}px`,
|
|
142
|
+
backgroundColor: null != (_props_cardBackground = props.cardBackground) ? _props_cardBackground : 'transparent',
|
|
143
|
+
...props.cardStroke && thickness > 0 ? {
|
|
144
|
+
borderWidth: `${thickness}px`,
|
|
145
|
+
borderStyle: 'solid',
|
|
146
|
+
borderColor: props.cardStroke
|
|
147
|
+
} : {}
|
|
148
|
+
}}>
|
|
149
|
+
{pane(leftActions, 'left')}
|
|
150
|
+
{pane(rightActions, 'right')}
|
|
151
|
+
<Draggable className="g9-swipe__body" MTSRef={dragRef} trigger="immediate" allowedDirection={[
|
|
152
|
+
'left',
|
|
153
|
+
'right'
|
|
154
|
+
]} enableDragging={leftWidth > 0 || rightWidth > 0} minTranslateX={-rightWidth} maxTranslateX={leftWidth} minTranslateY={0} maxTranslateY={0} resetOnEnd={false} onMTSDragStart={onMTSDragStart} onMTSDragEnd={onMTSDragEnd} onDragEnd={onDragEnd} draggableProps={{
|
|
155
|
+
bindtap: 0 !== offset ? ()=>settle(0, true, false) : void 0
|
|
156
|
+
}}>
|
|
157
|
+
{null != (_props_cardContent = props.cardContent) ? _props_cardContent : props.children}
|
|
158
|
+
</Draggable>
|
|
159
|
+
</view>;
|
|
160
|
+
}
|
|
161
|
+
export { G9SwipeGroup, G9SwipeView };
|
|
162
|
+
|
|
163
|
+
//# sourceMappingURL=swipe-view.jsx.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"swipe/swipe-view.jsx","sources":["../../src/swipe/swipe-view.tsx"],"sourcesContent":["import './swipe.css';\nimport { Draggable, type DraggableRef } from '@lynx-js/lynx-ui-draggable';\nimport {\n createContext,\n type ReactNode,\n runOnMainThread,\n useContext,\n useEffect,\n useMainThreadRef,\n useRef,\n useState,\n} from '@lynx-js/react';\nimport { G9Icon } from '../icon/icon';\nimport { useG9Diagnostics, useG9Direction } from '../provider/hooks';\nimport {\n createSwipeGroup,\n type G9SwipeAction,\n type G9SwipeGroupStore,\n g9SwipeDefaultCornerRadius,\n g9SwipeSnapMs,\n swipeActionColors,\n swipePaneWidth,\n swipePhysicalWidths,\n swipeSnap,\n swipeSnapMT,\n} from './model';\n\nconst defaultGroup = createSwipeGroup();\nlet rowSequence = 0;\nconst SwipeGroupContext = createContext<G9SwipeGroupStore>(defaultGroup);\n\n/** Scopes the one-open-row policy to a list (rows outside any group share one default group). */\nexport function G9SwipeGroup(props: { readonly group?: G9SwipeGroupStore; readonly children?: ReactNode }): ReactNode {\n const own = useRef<G9SwipeGroupStore | null>(null);\n if (own.current === null) own.current = props.group ?? createSwipeGroup();\n return <SwipeGroupContext.Provider value={props.group ?? own.current}>{props.children}</SwipeGroupContext.Provider>;\n}\n\n/** Props of {@link G9SwipeView} (MAUI bindable properties). */\nexport interface G9SwipeViewProps {\n /** Revealed on the leading edge: left in LTR, right in RTL (MAUI `LeftActions`). */\n readonly leftActions?: readonly G9SwipeAction[];\n /** Revealed on the trailing edge: right in LTR, left in RTL (MAUI `RightActions`). */\n readonly rightActions?: readonly G9SwipeAction[];\n /** The card body (MAUI `CardContent`); `children` works too. Give it an opaque, square, strokeless fill. */\n readonly cardContent?: ReactNode;\n readonly children?: ReactNode;\n /** Outer card radius; the panes are clipped to it. Default 14. */\n readonly cornerRadius?: number;\n readonly cardBackground?: string | null;\n readonly cardStroke?: string | null;\n readonly cardStrokeThickness?: number;\n /**\n * The item this row shows. When it changes (a recycled `<list>` row rebound to another item) the row closes\n * instantly, so a reused row never shows the previous item's open pane.\n */\n readonly itemKey?: string | number;\n /** Told when the row opens a side or closes. */\n readonly onOpenChange?: (side: 'leading' | 'trailing' | null) => void;\n readonly className?: string;\n}\n\n/**\n * A card row with swipe-to-reveal action panes on both edges (MAUI `G9SwipeView`). The panes sit behind the body, so\n * the body must be opaque (MAUI's \"flat but opaque\" rule). The drag lives in lynx-ui\n * `Draggable` (touch and mouse, so desktop works like MAUI's Windows drag); release snaps open past half a pane, else\n * closed (`swipeSnapMT` on the main thread, `swipeSnap` on the background, the same rule). One open row at a time per\n * {@link G9SwipeGroup}; a tap on a pane runs its action once and closes; a tap on an open body closes it.\n */\nexport function G9SwipeView(props: G9SwipeViewProps): ReactNode {\n const idRef = useRef<string | null>(null);\n if (idRef.current === null) {\n rowSequence += 1;\n idRef.current = `g9-swipe-${rowSequence}`;\n }\n const id = idRef.current;\n const group = useContext(SwipeGroupContext);\n const diagnostics = useG9Diagnostics();\n const rtl = useG9Direction() === 'rtl';\n const leading = (props.leftActions ?? []).filter((a) => a.isVisible !== false);\n const trailing = (props.rightActions ?? []).filter((a) => a.isVisible !== false);\n const widths = swipePhysicalWidths(swipePaneWidth(leading), swipePaneWidth(trailing), rtl);\n const leftActions = rtl ? trailing : leading;\n const rightActions = rtl ? leading : trailing;\n const [offset, setOffset] = useState(0);\n const offsetRef = useRef(0);\n offsetRef.current = offset;\n const dragRef = useMainThreadRef<DraggableRef | null>(null);\n const running = useRef(new Set<G9SwipeAction>());\n const latest = useRef(props);\n latest.current = props;\n\n const moveMT = (x: number, animated: boolean) => {\n 'main thread';\n dragRef.current?.MTSSetOtherStyles({ transition: animated ? `transform ${g9SwipeSnapMs}ms ease-out` : 'none' });\n dragRef.current?.MTSSetTransform(x, 0);\n };\n const report = (next: number) => {\n const side = next === 0 ? null : next > 0 !== rtl ? 'leading' : 'trailing';\n latest.current.onOpenChange?.(side);\n };\n const settle = (next: number, animated: boolean, fromDrag: boolean) => {\n if (!fromDrag) void runOnMainThread(moveMT)(next, animated);\n if (next === offsetRef.current) return;\n offsetRef.current = next;\n setOffset(next);\n if (next === 0) group.closed(id);\n else group.opened(id, () => settle(0, true, false));\n report(next);\n };\n\n // A recycled row bound to another item starts closed, without animation.\n const boundKey = useRef(props.itemKey);\n useEffect(() => {\n if (boundKey.current === props.itemKey) return;\n boundKey.current = props.itemKey;\n settle(0, false, false);\n }, [props.itemKey]);\n useEffect(() => () => group.closed(id), []);\n\n const leftWidth = widths.left;\n const rightWidth = widths.right;\n const onMTSDragStart = () => {\n 'main thread';\n dragRef.current?.MTSSetOtherStyles({ transition: 'none' });\n };\n const onMTSDragEnd = (translate: { x: number }) => {\n 'main thread';\n const target = swipeSnapMT(translate.x, leftWidth, rightWidth);\n dragRef.current?.MTSSetOtherStyles({ transition: `transform ${g9SwipeSnapMs}ms ease-out` });\n dragRef.current?.MTSSetTransform(target, 0);\n };\n const onDragEnd = (translate: { x: number }) => {\n settle(swipeSnap(translate.x, leftWidth, rightWidth), true, true);\n };\n\n const invoke = (action: G9SwipeAction) => {\n if (action.isEnabled === false || running.current.has(action)) return;\n settle(0, true, false);\n try {\n action.onInvoked?.(action);\n const result = action.command?.(action.commandParameter);\n if (result && typeof (result as Promise<void>).then === 'function') {\n running.current.add(action);\n (result as Promise<void>).then(\n () => running.current.delete(action),\n (error: unknown) => {\n running.current.delete(action);\n diagnostics.log({ level: 'error', message: 'G9SwipeView: action failed.', source: 'G9SwipeView', error });\n },\n );\n }\n } catch (error) {\n diagnostics.log({ level: 'error', message: 'G9SwipeView: action failed.', source: 'G9SwipeView', error });\n }\n };\n\n const pane = (actions: readonly G9SwipeAction[], side: 'left' | 'right') =>\n actions.length > 0 ? (\n <view className={`g9-swipe__pane g9-swipe__pane--${side}`} style={{ [side]: '0px' }}>\n {actions.map((action, i) => {\n const colors = swipeActionColors(action);\n return (\n <view\n key={`${side}-${i}`}\n className=\"g9-swipe__action\"\n style={{ width: `${action.widthRequest ?? 88}px`, backgroundColor: colors.background }}\n accessibility-element\n accessibility-traits=\"button\"\n accessibility-label={action.text ?? ''}\n bindtap={() => invoke(action)}\n >\n {action.icon ? (\n <G9Icon icon={action.icon} size={action.iconSize ?? 22} color={colors.foreground} />\n ) : null}\n {action.text ? (\n <text className=\"g9-swipe__action-text\" text-maxline=\"1\" style={{ color: colors.foreground }}>\n {action.text}\n </text>\n ) : null}\n </view>\n );\n })}\n </view>\n ) : null;\n\n const radius = props.cornerRadius ?? g9SwipeDefaultCornerRadius;\n const thickness = props.cardStrokeThickness ?? 0;\n return (\n <view\n className={`g9-swipe${offset !== 0 ? ' g9-swipe--open' : ''} ${props.className ?? ''}`}\n style={{\n borderRadius: `${radius}px`,\n backgroundColor: props.cardBackground ?? 'transparent',\n ...(props.cardStroke && thickness > 0\n ? { borderWidth: `${thickness}px`, borderStyle: 'solid', borderColor: props.cardStroke }\n : {}),\n }}\n >\n {pane(leftActions, 'left')}\n {pane(rightActions, 'right')}\n <Draggable\n className=\"g9-swipe__body\"\n MTSRef={dragRef}\n trigger=\"immediate\"\n allowedDirection={['left', 'right']}\n enableDragging={leftWidth > 0 || rightWidth > 0}\n minTranslateX={-rightWidth}\n maxTranslateX={leftWidth}\n minTranslateY={0}\n maxTranslateY={0}\n resetOnEnd={false}\n onMTSDragStart={onMTSDragStart}\n onMTSDragEnd={onMTSDragEnd}\n onDragEnd={onDragEnd}\n draggableProps={{ bindtap: offset !== 0 ? () => settle(0, true, false) : undefined }}\n >\n {props.cardContent ?? props.children}\n </Draggable>\n </view>\n );\n}\n"],"names":["defaultGroup","createSwipeGroup","rowSequence","SwipeGroupContext","createContext","G9SwipeGroup","props","_props_group","_props_group1","own","useRef","G9SwipeView","_props_leftActions","_props_rightActions","_props_cornerRadius","_props_cardStrokeThickness","_props_className","_props_cardBackground","_props_cardContent","idRef","id","group","useContext","diagnostics","useG9Diagnostics","rtl","useG9Direction","leading","a","trailing","widths","swipePhysicalWidths","swipePaneWidth","leftActions","rightActions","offset","setOffset","useState","offsetRef","dragRef","useMainThreadRef","running","Set","latest","moveMT","x","animated","_dragRef_current","_dragRef_current1","g9SwipeSnapMs","report","next","_latest_current","side","settle","fromDrag","runOnMainThread","boundKey","useEffect","leftWidth","rightWidth","onMTSDragStart","onMTSDragEnd","translate","target","swipeSnapMT","onDragEnd","swipeSnap","invoke","action","result","error","pane","actions","view","i","_action_widthRequest","_action_text","_action_iconSize","colors","swipeActionColors","G9Icon","text","radius","g9SwipeDefaultCornerRadius","thickness","Draggable","undefined"],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
.g9-swipe {
|
|
2
|
+
width: 100%;
|
|
3
|
+
position: relative;
|
|
4
|
+
overflow: hidden;
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
.g9-swipe__pane {
|
|
8
|
+
flex-direction: row;
|
|
9
|
+
display: flex;
|
|
10
|
+
position: absolute;
|
|
11
|
+
top: 0;
|
|
12
|
+
bottom: 0;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
.g9-swipe__action {
|
|
16
|
+
flex-direction: column;
|
|
17
|
+
justify-content: center;
|
|
18
|
+
align-items: center;
|
|
19
|
+
gap: 4px;
|
|
20
|
+
height: 100%;
|
|
21
|
+
display: flex;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
.g9-swipe__action-text {
|
|
25
|
+
font-size: 12px;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
.g9-swipe__body {
|
|
29
|
+
width: 100%;
|
|
30
|
+
position: relative;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
/*# sourceMappingURL=swipe.css.map */
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["webpack://./src/swipe/swipe.css"],"names":[],"mappings":"AACA;EAAE,WAAW;EACX,kBAAkB;EAClB,gBAAgB;AAClB;;AAGA;EAAE,mBAAmB;EACnB,aAAa;EACb,kBAAkB;EAClB,MAAM;EACN,SAAS;AACX;;AAGA;EAAE,sBAAsB;EACtB,uBAAuB;EACvB,mBAAmB;EACnB,QAAQ;EACR,YAAY;EACZ,aAAa;AACf;;AAGA;EAAE,eAAe;AACjB;;AAGA;EAAE,WAAW;EACX,kBAAkB;AACpB","sourcesContent":["/* G9SwipeView (MAUI G9SwipeView): a clipped card; action panes behind an opaque body that slides. */\n.g9-swipe {\n position: relative;\n overflow: hidden;\n width: 100%;\n}\n\n.g9-swipe__pane {\n position: absolute;\n top: 0;\n bottom: 0;\n display: flex;\n flex-direction: row;\n}\n\n.g9-swipe__action {\n height: 100%;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: 4px;\n}\n\n.g9-swipe__action-text {\n font-size: 12px;\n}\n\n.g9-swipe__body {\n position: relative;\n width: 100%;\n}\n"],"sourceRoot":""}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export { easeOutBackCss, type G9TabBarShadowRecipe, type G9TabBarStyle, type G9TabBarStyleMetrics, g9TabBarMetrics, g9TabBarStyleMetrics, } from './metrics.js';
|
|
2
|
+
export { centerOutwardRank, clampTabBarNotchCenter, type G9TabBarClickContext, type G9TabBarConfig, type G9TabBarEffect, type G9TabBarFabTappedEventArgs, type G9TabBarItem, type G9TabBarSelectionChangedEventArgs, type G9TabBarSlot, type G9TabBarState, type G9TabBarTransition, g9TabBarItem, initialTabBarState, overflowColumnLayout, reconcileTabBarState, resolveTabBarFabIndex, subMenuRowLayout, tabBarBackdropTap, tabBarChromePath, tabBarChromeSvg, tabBarFabCenterX, tabBarFabPlusSvg, tabBarFabShadowSvg, tabBarFabTap, tabBarHasOverflow, tabBarIndicatorSlot, tabBarItemTap, tabBarOverflowIndices, tabBarOverflowItemTap, tabBarOverflowSlot, tabBarOverflowTriggerTap, tabBarReservedHeight, tabBarSlotCenterX, tabBarSlots, tabBarSubMenuTap, } from './model.js';
|
|
3
|
+
export { G9TabBar, type G9TabBarProps } from './tab-bar.js';
|
|
4
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tab-bar/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EACd,KAAK,oBAAoB,EACzB,KAAK,aAAa,EAClB,KAAK,oBAAoB,EACzB,eAAe,EACf,oBAAoB,GACrB,MAAM,WAAW,CAAC;AACnB,OAAO,EACL,iBAAiB,EACjB,sBAAsB,EACtB,KAAK,oBAAoB,EACzB,KAAK,cAAc,EACnB,KAAK,cAAc,EACnB,KAAK,0BAA0B,EAC/B,KAAK,YAAY,EACjB,KAAK,iCAAiC,EACtC,KAAK,YAAY,EACjB,KAAK,aAAa,EAClB,KAAK,kBAAkB,EACvB,YAAY,EACZ,kBAAkB,EAClB,oBAAoB,EACpB,oBAAoB,EACpB,qBAAqB,EACrB,gBAAgB,EAChB,iBAAiB,EACjB,gBAAgB,EAChB,eAAe,EACf,gBAAgB,EAChB,gBAAgB,EAChB,kBAAkB,EAClB,YAAY,EACZ,iBAAiB,EACjB,mBAAmB,EACnB,aAAa,EACb,qBAAqB,EACrB,qBAAqB,EACrB,kBAAkB,EAClB,wBAAwB,EACxB,oBAAoB,EACpB,iBAAiB,EACjB,WAAW,EACX,gBAAgB,GACjB,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,QAAQ,EAAE,KAAK,aAAa,EAAE,MAAM,WAAW,CAAC"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export { easeOutBackCss, g9TabBarMetrics, g9TabBarStyleMetrics } from "./metrics.jsx";
|
|
2
|
+
export { centerOutwardRank, clampTabBarNotchCenter, g9TabBarItem, initialTabBarState, overflowColumnLayout, reconcileTabBarState, resolveTabBarFabIndex, subMenuRowLayout, tabBarBackdropTap, tabBarChromePath, tabBarChromeSvg, tabBarFabCenterX, tabBarFabPlusSvg, tabBarFabShadowSvg, tabBarFabTap, tabBarHasOverflow, tabBarIndicatorSlot, tabBarItemTap, tabBarOverflowIndices, tabBarOverflowItemTap, tabBarOverflowSlot, tabBarOverflowTriggerTap, tabBarReservedHeight, tabBarSlotCenterX, tabBarSlots, tabBarSubMenuTap } from "./model.jsx";
|
|
3
|
+
export { G9TabBar } from "./tab-bar.jsx";
|
|
@@ -0,0 +1,230 @@
|
|
|
1
|
+
/** Reserved control height while the FAB sub-menu row is open (MAUI `ComputeOpenControlHeight`). */
|
|
2
|
+
declare function computeOpenControlHeight(subMenuItemCount: number): number;
|
|
3
|
+
/** Every size, gap and timing of the tab bar (MAUI `G9TabBar` constants), in px and ms. */
|
|
4
|
+
export declare const g9TabBarMetrics: Readonly<{
|
|
5
|
+
defaultFabIndex: 2;
|
|
6
|
+
barHeight: 62;
|
|
7
|
+
chromeShadowPadding: 14;
|
|
8
|
+
barBottomGap: 14;
|
|
9
|
+
barHorizontalGap: 14;
|
|
10
|
+
compactControlHeight: number;
|
|
11
|
+
floatingControlHeight: number;
|
|
12
|
+
bottomItemHeight: 62;
|
|
13
|
+
computeOpenControlHeight: typeof computeOpenControlHeight;
|
|
14
|
+
fabSize: 72;
|
|
15
|
+
fabIconSize: 44;
|
|
16
|
+
fabRotationOpenDegrees: 135;
|
|
17
|
+
fabIdleScaleMin: 0.72;
|
|
18
|
+
fabFloatingScaleBoost: 0.28;
|
|
19
|
+
fabIdleVerticalOffset: 20;
|
|
20
|
+
fabFloatingOverlapRatio: 0.5;
|
|
21
|
+
fabHideInvisibleAtCenterProgress: 0.58;
|
|
22
|
+
fabInnerSizeRatio: 0.78;
|
|
23
|
+
fabInnerSize: number;
|
|
24
|
+
fabPlusArmRatio: 0.34;
|
|
25
|
+
fabPlusStrokeRatio: 0.14;
|
|
26
|
+
subMenuItemFabRatio: 0.95;
|
|
27
|
+
subMenuRowItemSize: number;
|
|
28
|
+
subMenuItemInnerRatio: 0.62;
|
|
29
|
+
subMenuRowItemInnerSize: number;
|
|
30
|
+
subMenuRowOuterCornerRadius: 18;
|
|
31
|
+
subMenuRowLabelHeight: 14;
|
|
32
|
+
subMenuRowLabelGap: 1;
|
|
33
|
+
subMenuRowTopPadding: 4;
|
|
34
|
+
subMenuRowBottomPadding: 7;
|
|
35
|
+
subMenuRowCellHeight: number;
|
|
36
|
+
notchGap: 5;
|
|
37
|
+
notchCircleRadius: number;
|
|
38
|
+
circleArcKappa: 0.55228475;
|
|
39
|
+
barTopRadius: 18;
|
|
40
|
+
barBottomRadius: 18;
|
|
41
|
+
barShadowOffsetY: 0;
|
|
42
|
+
barShadowBlur: 0;
|
|
43
|
+
barShadowAlpha: 0;
|
|
44
|
+
barStrokeSize: 0;
|
|
45
|
+
barTopHighlightStrokeSize: 1;
|
|
46
|
+
bottomIconSize: 24;
|
|
47
|
+
bottomLabelFontSize: 11;
|
|
48
|
+
slotItemMaxWidth: 86;
|
|
49
|
+
slotItemMinWidth: 56;
|
|
50
|
+
slotItemHorizontalPadding: 6;
|
|
51
|
+
selectedItemTranslationY: 0;
|
|
52
|
+
centerItemHiddenTranslationY: 8;
|
|
53
|
+
centerItemHiddenScaleAmount: 0.14;
|
|
54
|
+
centerItemFadeInputThreshold: 0.35;
|
|
55
|
+
selectedReturnRevealStartOpacity: 0.64;
|
|
56
|
+
selectedReturnRevealStartScale: 0.96;
|
|
57
|
+
selectedReturnRevealTranslationY: 6;
|
|
58
|
+
subMenuRowSpacing: 10;
|
|
59
|
+
subMenuRowAboveFabGap: 4;
|
|
60
|
+
subMenuRowRevealTravelX: 18;
|
|
61
|
+
subMenuRowRevealTravelY: 10;
|
|
62
|
+
subMenuRowStaggerStep: 0.07;
|
|
63
|
+
subMenuRowStaggerCap: 0.28;
|
|
64
|
+
subMenuRowActivationThreshold: 0.72;
|
|
65
|
+
subMenuRowEdgeGuard: 8;
|
|
66
|
+
subMenuRowIconSizeMax: 26;
|
|
67
|
+
subMenuRowFontSizeMax: 9.5;
|
|
68
|
+
indicatorWidth: 48;
|
|
69
|
+
indicatorHeight: 32;
|
|
70
|
+
indicatorCornerRadius: 13;
|
|
71
|
+
indicatorTopOffset: 5;
|
|
72
|
+
selectedIndicatorDownNudgeY: 4;
|
|
73
|
+
indicatorMaxStretch: 0.22;
|
|
74
|
+
indicatorStretchDistanceDivisor: 240;
|
|
75
|
+
hiddenVisibilityThreshold: 0.001;
|
|
76
|
+
maxVisibleBottomItems: 5;
|
|
77
|
+
overflowItemSize: 56;
|
|
78
|
+
overflowItemSpacing: 8;
|
|
79
|
+
overflowAboveBarGap: 14;
|
|
80
|
+
overflowEdgeGuard: 10;
|
|
81
|
+
overflowItemIconSize: 22;
|
|
82
|
+
overflowItemFontSize: 9.5;
|
|
83
|
+
overflowRevealTravelY: 14;
|
|
84
|
+
overflowRevealStaggerStep: 0.08;
|
|
85
|
+
overflowRevealStaggerCap: 0.55;
|
|
86
|
+
overflowActivationThreshold: 0.72;
|
|
87
|
+
overflowStateDurationMs: 280;
|
|
88
|
+
centerStateDurationMs: 240;
|
|
89
|
+
centerStateBouncyDurationMs: 420;
|
|
90
|
+
fabPopBackCoefficient: 1.70158;
|
|
91
|
+
notchPopBackCoefficient: 3.2;
|
|
92
|
+
openStateDurationMs: 300;
|
|
93
|
+
indicatorMoveDurationMs: 320;
|
|
94
|
+
selectedReturnRevealDurationMs: 210;
|
|
95
|
+
animationFrameRate: 16;
|
|
96
|
+
startupSelectionRevealEnabled: true;
|
|
97
|
+
startupSelectionRevealDelayMs: 369;
|
|
98
|
+
reservedHeightShrinkDelayMs: 110;
|
|
99
|
+
defaultRestScale: 1;
|
|
100
|
+
defaultRestOpacity: 1;
|
|
101
|
+
itemHoveredOpacity: 0.86;
|
|
102
|
+
itemPressedOpacity: 0.78;
|
|
103
|
+
touchAnimationDurationMs: 110;
|
|
104
|
+
backdropZIndex: 1;
|
|
105
|
+
backdropTopInset: 0;
|
|
106
|
+
centerStateAnimationName: "G9TabBar.CenterState";
|
|
107
|
+
notchBounceAnimationName: "G9TabBar.NotchBounce";
|
|
108
|
+
openAnimationName: "G9TabBar.Open";
|
|
109
|
+
indicatorAnimationName: "G9TabBar.Indicator";
|
|
110
|
+
bottomSelectionRevealAnimationName: "G9TabBar.BottomSelectionReveal";
|
|
111
|
+
overflowAnimationName: "G9TabBar.Overflow";
|
|
112
|
+
}>;
|
|
113
|
+
/**
|
|
114
|
+
* The visual style a `G9TabBar` draws itself in (MAUI `G9TabBarStyle`, 1.4.0). Behaviour (selection, the FAB slot,
|
|
115
|
+
* the sub-menu row, overflow, every event) is identical in both; only the surface, the notch, the FAB and the item
|
|
116
|
+
* states differ.
|
|
117
|
+
* - `'classic'` (default): the glass bar with 18 px corners and a lit top edge, a semicircular notch under a 72 px FAB
|
|
118
|
+
* whose centre sits on the bar's top edge, and a pill behind the selected item.
|
|
119
|
+
* - `'sculpted'` («Bottom Navigation / Sculpted»): an opaque 68 px bar with 24 px corners and a soft shadow, a wide
|
|
120
|
+
* S-shouldered cradle, a flat 66 px primary disc sunk 9 px into the bar, and no pill: the selected item switches to
|
|
121
|
+
* its `selectedIcon` and the primary colour.
|
|
122
|
+
*/
|
|
123
|
+
export type G9TabBarStyle = 'classic' | 'sculpted';
|
|
124
|
+
/**
|
|
125
|
+
* The shadow painted under the bar and under the FAB disc (MAUI `G9TabBarShadowView`): the bar's own outline, notch
|
|
126
|
+
* included, filled black at `alpha`, blurred with a Gaussian of `blurSigma` (SVG `feGaussianBlur stdDeviation` is the
|
|
127
|
+
* same sigma Skia's `SKMaskFilter.CreateBlur` takes) and dropped `offsetY`; the FAB gets a blurred circle of
|
|
128
|
+
* `fabDiameter` at `fabAlpha`, dropped `offsetY + fabOffsetY`, that fades and scales with the FAB. Drawn inside the
|
|
129
|
+
* `<svg content>` the chrome already is, never as `box-shadow` (plan/specs/02 §2).
|
|
130
|
+
*/
|
|
131
|
+
export interface G9TabBarShadowRecipe {
|
|
132
|
+
readonly alpha: number;
|
|
133
|
+
readonly blurSigma: number;
|
|
134
|
+
readonly offsetY: number;
|
|
135
|
+
readonly fabDiameter: number;
|
|
136
|
+
readonly fabAlpha: number;
|
|
137
|
+
readonly fabOffsetY: number;
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* The geometry that differs between the two {@link G9TabBarStyle}s (MAUI `G9TabBarStyleMetrics`, 1.4.0). What the
|
|
141
|
+
* styles share (the insets around the bar, the sub-menu row, the overflow column, the timings) stays in
|
|
142
|
+
* `g9TabBarMetrics`. Public for the same reason: a host that reserves the bar's height under its content reads
|
|
143
|
+
* `barHeight` from the style it shows (`g9TabBarStyleMetrics.for(style).barHeight`), not the Classic
|
|
144
|
+
* `g9TabBarMetrics.barHeight`, which is 6 px short of a Sculpted bar.
|
|
145
|
+
*/
|
|
146
|
+
export interface G9TabBarStyleMetrics {
|
|
147
|
+
readonly style: G9TabBarStyle;
|
|
148
|
+
/** Height of the visible bar: what a host reserves under its scrolling content. */
|
|
149
|
+
readonly barHeight: number;
|
|
150
|
+
readonly barTopRadius: number;
|
|
151
|
+
readonly barBottomRadius: number;
|
|
152
|
+
/** Inset between the bar's side edges and the first/last item slot. */
|
|
153
|
+
readonly itemsHorizontalPadding: number;
|
|
154
|
+
/** The FAB's tap box (Classic: also its glass shell; Sculpted: transparent). */
|
|
155
|
+
readonly fabSize: number;
|
|
156
|
+
/** The coloured disc that carries the plus. */
|
|
157
|
+
readonly fabInnerSize: number;
|
|
158
|
+
/**
|
|
159
|
+
* The plus box. Classic draws the built-in `plus` glyph at 70 % of it (the port made at MAUI 1.2.0); Sculpted draws
|
|
160
|
+
* MAUI's plus.
|
|
161
|
+
*/
|
|
162
|
+
readonly fabIconSize: number;
|
|
163
|
+
/** Each arm of the plus, as a fraction of `fabIconSize` (round caps add half a stroke at each end). */
|
|
164
|
+
readonly fabPlusArmRatio: number;
|
|
165
|
+
/** The plus stroke as a fraction of `fabIconSize` (at least 2 px). */
|
|
166
|
+
readonly fabPlusStrokeRatio: number;
|
|
167
|
+
/** How far below the bar's top edge the floating FAB's centre sits (Classic 0: on the edge; Sculpted 9). */
|
|
168
|
+
readonly fabCenterBelowBarTop: number;
|
|
169
|
+
/** How far the floating FAB's box rises above the bar's top edge (`fabSize / 2 − fabCenterBelowBarTop`). */
|
|
170
|
+
readonly fabProtrusionAboveBar: number;
|
|
171
|
+
/** Room reserved above the bar while the FAB floats. */
|
|
172
|
+
readonly floatingHeadroom: number;
|
|
173
|
+
/** The shape carved under a floating FAB: a semicircle (Classic) or the S-shouldered cradle (Sculpted). */
|
|
174
|
+
readonly notchShape: 'semicircle' | 'cradle';
|
|
175
|
+
/** Multiplier on the cradle's design path (drawn around a 48 px disc); 1 for Classic. */
|
|
176
|
+
readonly cradleScale: number;
|
|
177
|
+
/** Half the notch's opening along the top edge. */
|
|
178
|
+
readonly notchHalfWidth: number;
|
|
179
|
+
readonly bottomIconSize: number;
|
|
180
|
+
readonly bottomLabelFontSize: number;
|
|
181
|
+
/** Gap between an item's icon and its label. */
|
|
182
|
+
readonly bottomContentSpacing: number;
|
|
183
|
+
/** Classic paints a pill behind the selected item; Sculpted does not. */
|
|
184
|
+
readonly showsSelectionIndicator: boolean;
|
|
185
|
+
/** How far the selection pill sits below its default top (Classic 4, Sculpted 0). */
|
|
186
|
+
readonly selectedItemNudgeY: number;
|
|
187
|
+
/** Classic draws the 1 px lit top edge; the opaque Sculpted bar does not. */
|
|
188
|
+
readonly drawsTopHighlight: boolean;
|
|
189
|
+
/**
|
|
190
|
+
* The shadow recipe, or `null` for none. Classic keeps the flat chrome of the port made at MAUI 1.2.0 (MAUI paints
|
|
191
|
+
* a 50 % Skia halo there, see the migration table); Sculpted paints MAUI's 12 % bar and 30 % disc shadow, because
|
|
192
|
+
* its opaque bar has no other separation from the page.
|
|
193
|
+
*/
|
|
194
|
+
readonly shadow: G9TabBarShadowRecipe | null;
|
|
195
|
+
/** Control height while the FAB rests inline: `barHeight` + the two shadow insets. */
|
|
196
|
+
readonly compactControlHeight: number;
|
|
197
|
+
/** Control height while the FAB floats. */
|
|
198
|
+
readonly floatingControlHeight: number;
|
|
199
|
+
/** Control height while the FAB's sub-menu row is open. */
|
|
200
|
+
computeOpenControlHeight(subMenuItemCount: number): number;
|
|
201
|
+
}
|
|
202
|
+
/**
|
|
203
|
+
* The two styles' geometry (MAUI `G9TabBarStyleMetrics.Classic` / `.Sculpted` / `.For(style)` / `CradleHalfWidth`).
|
|
204
|
+
* `classic` reproduces `g9TabBarMetrics` exactly. `sculpted` is the Figma «Bottom Navigation / Sculpted» component
|
|
205
|
+
* after the owner's two device reviews (2026-10-05): a 68 px bar (Figma 64), the cradle path × 56/48, a 66 px disc in a
|
|
206
|
+
* 74 px tap box with a 30 px plus, its centre 9 px below the bar's top edge (5.8 px from the bowl at its tightest).
|
|
207
|
+
*/
|
|
208
|
+
export declare const g9TabBarStyleMetrics: Readonly<{
|
|
209
|
+
classic: G9TabBarStyleMetrics;
|
|
210
|
+
sculpted: G9TabBarStyleMetrics;
|
|
211
|
+
/** Half the cradle's opening along the top edge in design px, before `cradleScale` (MAUI `CradleHalfWidth`). */
|
|
212
|
+
cradleHalfWidth: 57;
|
|
213
|
+
/** The metrics of `style` (MAUI `G9TabBarStyleMetrics.For`); anything but `'sculpted'` is Classic. */
|
|
214
|
+
for: (style: G9TabBarStyle | null | undefined) => G9TabBarStyleMetrics;
|
|
215
|
+
}>;
|
|
216
|
+
/** The Sculpted cradle in design px from the notch centre (x) and the top edge (y); multiplied by `cradleScale`. */
|
|
217
|
+
export declare const tabBarCradleDesign: Readonly<{
|
|
218
|
+
halfWidth: 57;
|
|
219
|
+
shoulderHandleX: 42;
|
|
220
|
+
shoulderInnerX: 39;
|
|
221
|
+
shoulderInnerY: 10;
|
|
222
|
+
shoulderEndX: 32;
|
|
223
|
+
shoulderEndY: 23;
|
|
224
|
+
bowlHandleX: 19;
|
|
225
|
+
bowlHandleY: 47;
|
|
226
|
+
}>;
|
|
227
|
+
/** CSS `cubic-bezier` for MAUI's ease-out-back with coefficient `c` (1.70158 is the standard back curve). */
|
|
228
|
+
export declare function easeOutBackCss(c: number): string;
|
|
229
|
+
export {};
|
|
230
|
+
//# sourceMappingURL=metrics.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metrics.d.ts","sourceRoot":"","sources":["../../src/tab-bar/metrics.ts"],"names":[],"mappings":"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"}
|