@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,221 @@
|
|
|
1
|
+
const barHeight = 62;
|
|
2
|
+
const chromeShadowPadding = 14;
|
|
3
|
+
const barBottomGap = 14;
|
|
4
|
+
const fabSize = 72;
|
|
5
|
+
const fabFloatingOverlapRatio = 0.5;
|
|
6
|
+
const subMenuRowAboveFabGap = 4;
|
|
7
|
+
const subMenuItemFabRatio = 0.95;
|
|
8
|
+
const subMenuItemInnerRatio = 0.62;
|
|
9
|
+
const subMenuRowLabelHeight = 14;
|
|
10
|
+
const subMenuRowLabelGap = 1;
|
|
11
|
+
const subMenuRowTopPadding = 4;
|
|
12
|
+
const subMenuRowBottomPadding = 7;
|
|
13
|
+
const fabInnerSizeRatio = 0.78;
|
|
14
|
+
const notchGap = 5;
|
|
15
|
+
const subMenuRowItemInnerSize = fabSize * subMenuItemInnerRatio;
|
|
16
|
+
const subMenuRowCellHeight = subMenuRowTopPadding + subMenuRowItemInnerSize + subMenuRowLabelGap + subMenuRowLabelHeight + subMenuRowBottomPadding;
|
|
17
|
+
const metrics_floatingControlHeight = 106 + chromeShadowPadding + barBottomGap;
|
|
18
|
+
function computeOpenControlHeight(subMenuItemCount) {
|
|
19
|
+
if (subMenuItemCount <= 0) return metrics_floatingControlHeight;
|
|
20
|
+
const fabProtrusion = fabSize * fabFloatingOverlapRatio;
|
|
21
|
+
return barHeight + fabProtrusion + subMenuRowAboveFabGap + subMenuRowCellHeight + 8 + chromeShadowPadding + barBottomGap;
|
|
22
|
+
}
|
|
23
|
+
const g9TabBarMetrics = Object.freeze({
|
|
24
|
+
defaultFabIndex: 2,
|
|
25
|
+
barHeight: barHeight,
|
|
26
|
+
chromeShadowPadding: chromeShadowPadding,
|
|
27
|
+
barBottomGap: barBottomGap,
|
|
28
|
+
barHorizontalGap: 14,
|
|
29
|
+
compactControlHeight: barHeight + chromeShadowPadding + barBottomGap,
|
|
30
|
+
floatingControlHeight: metrics_floatingControlHeight,
|
|
31
|
+
bottomItemHeight: barHeight,
|
|
32
|
+
computeOpenControlHeight: computeOpenControlHeight,
|
|
33
|
+
fabSize: fabSize,
|
|
34
|
+
fabIconSize: 44,
|
|
35
|
+
fabRotationOpenDegrees: 135,
|
|
36
|
+
fabIdleScaleMin: 0.72,
|
|
37
|
+
fabFloatingScaleBoost: 0.28,
|
|
38
|
+
fabIdleVerticalOffset: 20,
|
|
39
|
+
fabFloatingOverlapRatio: fabFloatingOverlapRatio,
|
|
40
|
+
fabHideInvisibleAtCenterProgress: 0.58,
|
|
41
|
+
fabInnerSizeRatio: fabInnerSizeRatio,
|
|
42
|
+
fabInnerSize: fabSize * fabInnerSizeRatio,
|
|
43
|
+
fabPlusArmRatio: 0.34,
|
|
44
|
+
fabPlusStrokeRatio: 0.14,
|
|
45
|
+
subMenuItemFabRatio: subMenuItemFabRatio,
|
|
46
|
+
subMenuRowItemSize: fabSize * subMenuItemFabRatio,
|
|
47
|
+
subMenuItemInnerRatio: subMenuItemInnerRatio,
|
|
48
|
+
subMenuRowItemInnerSize: subMenuRowItemInnerSize,
|
|
49
|
+
subMenuRowOuterCornerRadius: 18,
|
|
50
|
+
subMenuRowLabelHeight: subMenuRowLabelHeight,
|
|
51
|
+
subMenuRowLabelGap: subMenuRowLabelGap,
|
|
52
|
+
subMenuRowTopPadding: subMenuRowTopPadding,
|
|
53
|
+
subMenuRowBottomPadding: subMenuRowBottomPadding,
|
|
54
|
+
subMenuRowCellHeight: subMenuRowCellHeight,
|
|
55
|
+
notchGap: notchGap,
|
|
56
|
+
notchCircleRadius: fabSize / 2 + notchGap,
|
|
57
|
+
circleArcKappa: 0.55228475,
|
|
58
|
+
barTopRadius: 18,
|
|
59
|
+
barBottomRadius: 18,
|
|
60
|
+
barShadowOffsetY: 0,
|
|
61
|
+
barShadowBlur: 0,
|
|
62
|
+
barShadowAlpha: 0,
|
|
63
|
+
barStrokeSize: 0,
|
|
64
|
+
barTopHighlightStrokeSize: 1,
|
|
65
|
+
bottomIconSize: 24,
|
|
66
|
+
bottomLabelFontSize: 11,
|
|
67
|
+
slotItemMaxWidth: 86,
|
|
68
|
+
slotItemMinWidth: 56,
|
|
69
|
+
slotItemHorizontalPadding: 6,
|
|
70
|
+
selectedItemTranslationY: 0,
|
|
71
|
+
centerItemHiddenTranslationY: 8,
|
|
72
|
+
centerItemHiddenScaleAmount: 0.14,
|
|
73
|
+
centerItemFadeInputThreshold: 0.35,
|
|
74
|
+
selectedReturnRevealStartOpacity: 0.64,
|
|
75
|
+
selectedReturnRevealStartScale: 0.96,
|
|
76
|
+
selectedReturnRevealTranslationY: 6,
|
|
77
|
+
subMenuRowSpacing: 10,
|
|
78
|
+
subMenuRowAboveFabGap: subMenuRowAboveFabGap,
|
|
79
|
+
subMenuRowRevealTravelX: 18,
|
|
80
|
+
subMenuRowRevealTravelY: 10,
|
|
81
|
+
subMenuRowStaggerStep: 0.07,
|
|
82
|
+
subMenuRowStaggerCap: 0.28,
|
|
83
|
+
subMenuRowActivationThreshold: 0.72,
|
|
84
|
+
subMenuRowEdgeGuard: 8,
|
|
85
|
+
subMenuRowIconSizeMax: 26,
|
|
86
|
+
subMenuRowFontSizeMax: 9.5,
|
|
87
|
+
indicatorWidth: 48,
|
|
88
|
+
indicatorHeight: 32,
|
|
89
|
+
indicatorCornerRadius: 13,
|
|
90
|
+
indicatorTopOffset: 5,
|
|
91
|
+
selectedIndicatorDownNudgeY: 4,
|
|
92
|
+
indicatorMaxStretch: 0.22,
|
|
93
|
+
indicatorStretchDistanceDivisor: 240,
|
|
94
|
+
hiddenVisibilityThreshold: 0.001,
|
|
95
|
+
maxVisibleBottomItems: 5,
|
|
96
|
+
overflowItemSize: 56,
|
|
97
|
+
overflowItemSpacing: 8,
|
|
98
|
+
overflowAboveBarGap: 14,
|
|
99
|
+
overflowEdgeGuard: 10,
|
|
100
|
+
overflowItemIconSize: 22,
|
|
101
|
+
overflowItemFontSize: 9.5,
|
|
102
|
+
overflowRevealTravelY: 14,
|
|
103
|
+
overflowRevealStaggerStep: 0.08,
|
|
104
|
+
overflowRevealStaggerCap: 0.55,
|
|
105
|
+
overflowActivationThreshold: 0.72,
|
|
106
|
+
overflowStateDurationMs: 280,
|
|
107
|
+
centerStateDurationMs: 240,
|
|
108
|
+
centerStateBouncyDurationMs: 420,
|
|
109
|
+
fabPopBackCoefficient: 1.70158,
|
|
110
|
+
notchPopBackCoefficient: 3.2,
|
|
111
|
+
openStateDurationMs: 300,
|
|
112
|
+
indicatorMoveDurationMs: 320,
|
|
113
|
+
selectedReturnRevealDurationMs: 210,
|
|
114
|
+
animationFrameRate: 16,
|
|
115
|
+
startupSelectionRevealEnabled: true,
|
|
116
|
+
startupSelectionRevealDelayMs: 369,
|
|
117
|
+
reservedHeightShrinkDelayMs: 110,
|
|
118
|
+
defaultRestScale: 1,
|
|
119
|
+
defaultRestOpacity: 1,
|
|
120
|
+
itemHoveredOpacity: 0.86,
|
|
121
|
+
itemPressedOpacity: 0.78,
|
|
122
|
+
touchAnimationDurationMs: 110,
|
|
123
|
+
backdropZIndex: 1,
|
|
124
|
+
backdropTopInset: 0,
|
|
125
|
+
centerStateAnimationName: 'G9TabBar.CenterState',
|
|
126
|
+
notchBounceAnimationName: 'G9TabBar.NotchBounce',
|
|
127
|
+
openAnimationName: 'G9TabBar.Open',
|
|
128
|
+
indicatorAnimationName: 'G9TabBar.Indicator',
|
|
129
|
+
bottomSelectionRevealAnimationName: 'G9TabBar.BottomSelectionReveal',
|
|
130
|
+
overflowAnimationName: 'G9TabBar.Overflow'
|
|
131
|
+
});
|
|
132
|
+
function styleMetrics(values) {
|
|
133
|
+
const fabProtrusionAboveBar = values.fabSize / 2 - values.fabCenterBelowBarTop;
|
|
134
|
+
const floatingControlHeight = values.barHeight + values.floatingHeadroom + chromeShadowPadding + barBottomGap;
|
|
135
|
+
return Object.freeze({
|
|
136
|
+
...values,
|
|
137
|
+
fabProtrusionAboveBar,
|
|
138
|
+
compactControlHeight: values.barHeight + chromeShadowPadding + barBottomGap,
|
|
139
|
+
floatingControlHeight,
|
|
140
|
+
computeOpenControlHeight: (subMenuItemCount)=>subMenuItemCount <= 0 ? floatingControlHeight : values.barHeight + fabProtrusionAboveBar + subMenuRowAboveFabGap + subMenuRowCellHeight + 8 + chromeShadowPadding + barBottomGap
|
|
141
|
+
});
|
|
142
|
+
}
|
|
143
|
+
const sculptedFabDisc = 66;
|
|
144
|
+
const sculptedCradleScale = 56 / 48;
|
|
145
|
+
const cradleHalfWidth = 57;
|
|
146
|
+
const g9TabBarStyleMetrics = Object.freeze({
|
|
147
|
+
classic: styleMetrics({
|
|
148
|
+
style: 'classic',
|
|
149
|
+
barHeight: barHeight,
|
|
150
|
+
barTopRadius: 18,
|
|
151
|
+
barBottomRadius: 18,
|
|
152
|
+
itemsHorizontalPadding: 0,
|
|
153
|
+
fabSize: fabSize,
|
|
154
|
+
fabInnerSize: fabSize * fabInnerSizeRatio,
|
|
155
|
+
fabIconSize: 44,
|
|
156
|
+
fabPlusArmRatio: 0.34,
|
|
157
|
+
fabPlusStrokeRatio: 0.14,
|
|
158
|
+
fabCenterBelowBarTop: 0,
|
|
159
|
+
floatingHeadroom: 44,
|
|
160
|
+
notchShape: 'semicircle',
|
|
161
|
+
cradleScale: 1,
|
|
162
|
+
notchHalfWidth: fabSize / 2 + notchGap,
|
|
163
|
+
bottomIconSize: 24,
|
|
164
|
+
bottomLabelFontSize: 11,
|
|
165
|
+
bottomContentSpacing: 3,
|
|
166
|
+
showsSelectionIndicator: true,
|
|
167
|
+
selectedItemNudgeY: 4,
|
|
168
|
+
drawsTopHighlight: true,
|
|
169
|
+
shadow: null
|
|
170
|
+
}),
|
|
171
|
+
sculpted: styleMetrics({
|
|
172
|
+
style: 'sculpted',
|
|
173
|
+
barHeight: 68,
|
|
174
|
+
barTopRadius: 24,
|
|
175
|
+
barBottomRadius: 24,
|
|
176
|
+
itemsHorizontalPadding: 8,
|
|
177
|
+
fabSize: sculptedFabDisc + 8,
|
|
178
|
+
fabInnerSize: sculptedFabDisc,
|
|
179
|
+
fabIconSize: 30,
|
|
180
|
+
fabPlusArmRatio: 0.444,
|
|
181
|
+
fabPlusStrokeRatio: 0.1125,
|
|
182
|
+
fabCenterBelowBarTop: 9,
|
|
183
|
+
floatingHeadroom: 37,
|
|
184
|
+
notchShape: 'cradle',
|
|
185
|
+
cradleScale: sculptedCradleScale,
|
|
186
|
+
notchHalfWidth: cradleHalfWidth * sculptedCradleScale,
|
|
187
|
+
bottomIconSize: 24,
|
|
188
|
+
bottomLabelFontSize: 12,
|
|
189
|
+
bottomContentSpacing: 4,
|
|
190
|
+
showsSelectionIndicator: false,
|
|
191
|
+
selectedItemNudgeY: 0,
|
|
192
|
+
drawsTopHighlight: false,
|
|
193
|
+
shadow: Object.freeze({
|
|
194
|
+
alpha: 0.12,
|
|
195
|
+
blurSigma: 4,
|
|
196
|
+
offsetY: 1,
|
|
197
|
+
fabDiameter: sculptedFabDisc,
|
|
198
|
+
fabAlpha: 0.3,
|
|
199
|
+
fabOffsetY: 2
|
|
200
|
+
})
|
|
201
|
+
}),
|
|
202
|
+
cradleHalfWidth: cradleHalfWidth,
|
|
203
|
+
for: (style)=>'sculpted' === style ? g9TabBarStyleMetrics.sculpted : g9TabBarStyleMetrics.classic
|
|
204
|
+
});
|
|
205
|
+
const tabBarCradleDesign = Object.freeze({
|
|
206
|
+
halfWidth: cradleHalfWidth,
|
|
207
|
+
shoulderHandleX: 42,
|
|
208
|
+
shoulderInnerX: 39,
|
|
209
|
+
shoulderInnerY: 10,
|
|
210
|
+
shoulderEndX: 32,
|
|
211
|
+
shoulderEndY: 23,
|
|
212
|
+
bowlHandleX: 19,
|
|
213
|
+
bowlHandleY: 47
|
|
214
|
+
});
|
|
215
|
+
function easeOutBackCss(c) {
|
|
216
|
+
const y1 = 1 + 0.329 * c;
|
|
217
|
+
return `cubic-bezier(0.34, ${y1.toFixed(2)}, 0.64, 1)`;
|
|
218
|
+
}
|
|
219
|
+
export { easeOutBackCss, g9TabBarMetrics, g9TabBarStyleMetrics, tabBarCradleDesign };
|
|
220
|
+
|
|
221
|
+
//# sourceMappingURL=metrics.jsx.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tab-bar/metrics.jsx","sources":["../../src/tab-bar/metrics.ts"],"sourcesContent":["/**\n * The tab bar's layout constants (MAUI `G9TabBarMetrics`), public for the same reason as in MAUI: `barHeight +\n * barBottomGap` is the bottom inset a page needs so its last row clears a floating bar. Values are the MAUI ones; the\n * shadow-related entries stay for parity but G9 paints no shadows (plan/specs/02 §2), so they are all 0 here as there.\n */\nconst barHeight = 62;\nconst chromeShadowPadding = 14;\nconst barBottomGap = 14;\nconst fabSize = 72;\nconst fabFloatingOverlapRatio = 0.5;\nconst subMenuRowAboveFabGap = 4;\nconst subMenuItemFabRatio = 0.95;\nconst subMenuItemInnerRatio = 0.62;\nconst subMenuRowLabelHeight = 14;\nconst subMenuRowLabelGap = 1;\nconst subMenuRowTopPadding = 4;\nconst subMenuRowBottomPadding = 7;\nconst fabInnerSizeRatio = 0.78;\nconst notchGap = 5;\n\nconst subMenuRowItemInnerSize = fabSize * subMenuItemInnerRatio;\nconst subMenuRowCellHeight =\n subMenuRowTopPadding + subMenuRowItemInnerSize + subMenuRowLabelGap + subMenuRowLabelHeight + subMenuRowBottomPadding;\nconst floatingControlHeight = 106 + chromeShadowPadding + barBottomGap;\n\n/** Reserved control height while the FAB sub-menu row is open (MAUI `ComputeOpenControlHeight`). */\nfunction computeOpenControlHeight(subMenuItemCount: number): number {\n if (subMenuItemCount <= 0) return floatingControlHeight;\n const fabProtrusion = fabSize * fabFloatingOverlapRatio;\n return (\n barHeight + fabProtrusion + subMenuRowAboveFabGap + subMenuRowCellHeight + 8 + chromeShadowPadding + barBottomGap\n );\n}\n\n/** Every size, gap and timing of the tab bar (MAUI `G9TabBar` constants), in px and ms. */\nexport const g9TabBarMetrics = Object.freeze({\n defaultFabIndex: 2,\n // Heights\n barHeight,\n chromeShadowPadding,\n barBottomGap,\n barHorizontalGap: 14,\n compactControlHeight: barHeight + chromeShadowPadding + barBottomGap,\n floatingControlHeight,\n bottomItemHeight: barHeight,\n computeOpenControlHeight,\n // FAB\n fabSize,\n fabIconSize: 44,\n fabRotationOpenDegrees: 135,\n fabIdleScaleMin: 0.72,\n fabFloatingScaleBoost: 0.28,\n fabIdleVerticalOffset: 20,\n fabFloatingOverlapRatio,\n fabHideInvisibleAtCenterProgress: 0.58,\n fabInnerSizeRatio,\n fabInnerSize: fabSize * fabInnerSizeRatio,\n fabPlusArmRatio: 0.34,\n fabPlusStrokeRatio: 0.14,\n // Sub-menu cells\n subMenuItemFabRatio,\n subMenuRowItemSize: fabSize * subMenuItemFabRatio,\n subMenuItemInnerRatio,\n subMenuRowItemInnerSize,\n subMenuRowOuterCornerRadius: 18,\n subMenuRowLabelHeight,\n subMenuRowLabelGap,\n subMenuRowTopPadding,\n subMenuRowBottomPadding,\n subMenuRowCellHeight,\n // Notch: a semicircle derived from the FAB\n notchGap,\n notchCircleRadius: fabSize / 2 + notchGap,\n circleArcKappa: 0.55228475,\n barTopRadius: 18,\n barBottomRadius: 18,\n barShadowOffsetY: 0,\n barShadowBlur: 0,\n barShadowAlpha: 0,\n barStrokeSize: 0,\n barTopHighlightStrokeSize: 1,\n // Bottom items\n bottomIconSize: 24,\n bottomLabelFontSize: 11,\n slotItemMaxWidth: 86,\n slotItemMinWidth: 56,\n slotItemHorizontalPadding: 6,\n selectedItemTranslationY: 0,\n centerItemHiddenTranslationY: 8,\n centerItemHiddenScaleAmount: 0.14,\n centerItemFadeInputThreshold: 0.35,\n selectedReturnRevealStartOpacity: 0.64,\n selectedReturnRevealStartScale: 0.96,\n selectedReturnRevealTranslationY: 6,\n // Sub-menu row\n subMenuRowSpacing: 10,\n subMenuRowAboveFabGap,\n subMenuRowRevealTravelX: 18,\n subMenuRowRevealTravelY: 10,\n subMenuRowStaggerStep: 0.07,\n subMenuRowStaggerCap: 0.28,\n subMenuRowActivationThreshold: 0.72,\n subMenuRowEdgeGuard: 8,\n subMenuRowIconSizeMax: 26,\n subMenuRowFontSizeMax: 9.5,\n // Indicator\n indicatorWidth: 48,\n indicatorHeight: 32,\n indicatorCornerRadius: 13,\n indicatorTopOffset: 5,\n selectedIndicatorDownNudgeY: 4,\n indicatorMaxStretch: 0.22,\n indicatorStretchDistanceDivisor: 240,\n hiddenVisibilityThreshold: 0.001,\n // Overflow (> 5 items)\n maxVisibleBottomItems: 5,\n overflowItemSize: 56,\n overflowItemSpacing: 8,\n overflowAboveBarGap: 14,\n overflowEdgeGuard: 10,\n overflowItemIconSize: 22,\n overflowItemFontSize: 9.5,\n overflowRevealTravelY: 14,\n overflowRevealStaggerStep: 0.08,\n overflowRevealStaggerCap: 0.55,\n overflowActivationThreshold: 0.72,\n overflowStateDurationMs: 280,\n // Animation\n centerStateDurationMs: 240,\n centerStateBouncyDurationMs: 420,\n fabPopBackCoefficient: 1.70158,\n notchPopBackCoefficient: 3.2,\n openStateDurationMs: 300,\n indicatorMoveDurationMs: 320,\n selectedReturnRevealDurationMs: 210,\n animationFrameRate: 16,\n startupSelectionRevealEnabled: true,\n startupSelectionRevealDelayMs: 369,\n reservedHeightShrinkDelayMs: 110,\n // Touch\n defaultRestScale: 1,\n defaultRestOpacity: 1,\n itemHoveredOpacity: 0.86,\n itemPressedOpacity: 0.78,\n touchAnimationDurationMs: 110,\n // Backdrop (outside tap closes)\n backdropZIndex: 1,\n backdropTopInset: 0,\n // Animation names (MAUI animation handles; G9 uses them as CSS transition tags in diagnostics only)\n centerStateAnimationName: 'G9TabBar.CenterState',\n notchBounceAnimationName: 'G9TabBar.NotchBounce',\n openAnimationName: 'G9TabBar.Open',\n indicatorAnimationName: 'G9TabBar.Indicator',\n bottomSelectionRevealAnimationName: 'G9TabBar.BottomSelectionReveal',\n overflowAnimationName: 'G9TabBar.Overflow',\n});\n\n/**\n * The visual style a `G9TabBar` draws itself in (MAUI `G9TabBarStyle`, 1.4.0). Behaviour (selection, the FAB slot,\n * the sub-menu row, overflow, every event) is identical in both; only the surface, the notch, the FAB and the item\n * states differ.\n * - `'classic'` (default): the glass bar with 18 px corners and a lit top edge, a semicircular notch under a 72 px FAB\n * whose centre sits on the bar's top edge, and a pill behind the selected item.\n * - `'sculpted'` («Bottom Navigation / Sculpted»): an opaque 68 px bar with 24 px corners and a soft shadow, a wide\n * S-shouldered cradle, a flat 66 px primary disc sunk 9 px into the bar, and no pill: the selected item switches to\n * its `selectedIcon` and the primary colour.\n */\nexport type G9TabBarStyle = 'classic' | 'sculpted';\n\n/**\n * The shadow painted under the bar and under the FAB disc (MAUI `G9TabBarShadowView`): the bar's own outline, notch\n * included, filled black at `alpha`, blurred with a Gaussian of `blurSigma` (SVG `feGaussianBlur stdDeviation` is the\n * same sigma Skia's `SKMaskFilter.CreateBlur` takes) and dropped `offsetY`; the FAB gets a blurred circle of\n * `fabDiameter` at `fabAlpha`, dropped `offsetY + fabOffsetY`, that fades and scales with the FAB. Drawn inside the\n * `<svg content>` the chrome already is, never as `box-shadow` (plan/specs/02 §2).\n */\nexport interface G9TabBarShadowRecipe {\n readonly alpha: number;\n readonly blurSigma: number;\n readonly offsetY: number;\n readonly fabDiameter: number;\n readonly fabAlpha: number;\n readonly fabOffsetY: number;\n}\n\n/**\n * The geometry that differs between the two {@link G9TabBarStyle}s (MAUI `G9TabBarStyleMetrics`, 1.4.0). What the\n * styles share (the insets around the bar, the sub-menu row, the overflow column, the timings) stays in\n * `g9TabBarMetrics`. Public for the same reason: a host that reserves the bar's height under its content reads\n * `barHeight` from the style it shows (`g9TabBarStyleMetrics.for(style).barHeight`), not the Classic\n * `g9TabBarMetrics.barHeight`, which is 6 px short of a Sculpted bar.\n */\nexport interface G9TabBarStyleMetrics {\n readonly style: G9TabBarStyle;\n /** Height of the visible bar: what a host reserves under its scrolling content. */\n readonly barHeight: number;\n readonly barTopRadius: number;\n readonly barBottomRadius: number;\n /** Inset between the bar's side edges and the first/last item slot. */\n readonly itemsHorizontalPadding: number;\n /** The FAB's tap box (Classic: also its glass shell; Sculpted: transparent). */\n readonly fabSize: number;\n /** The coloured disc that carries the plus. */\n readonly fabInnerSize: number;\n /**\n * The plus box. Classic draws the built-in `plus` glyph at 70 % of it (the port made at MAUI 1.2.0); Sculpted draws\n * MAUI's plus.\n */\n readonly fabIconSize: number;\n /** Each arm of the plus, as a fraction of `fabIconSize` (round caps add half a stroke at each end). */\n readonly fabPlusArmRatio: number;\n /** The plus stroke as a fraction of `fabIconSize` (at least 2 px). */\n readonly fabPlusStrokeRatio: number;\n /** How far below the bar's top edge the floating FAB's centre sits (Classic 0: on the edge; Sculpted 9). */\n readonly fabCenterBelowBarTop: number;\n /** How far the floating FAB's box rises above the bar's top edge (`fabSize / 2 − fabCenterBelowBarTop`). */\n readonly fabProtrusionAboveBar: number;\n /** Room reserved above the bar while the FAB floats. */\n readonly floatingHeadroom: number;\n /** The shape carved under a floating FAB: a semicircle (Classic) or the S-shouldered cradle (Sculpted). */\n readonly notchShape: 'semicircle' | 'cradle';\n /** Multiplier on the cradle's design path (drawn around a 48 px disc); 1 for Classic. */\n readonly cradleScale: number;\n /** Half the notch's opening along the top edge. */\n readonly notchHalfWidth: number;\n readonly bottomIconSize: number;\n readonly bottomLabelFontSize: number;\n /** Gap between an item's icon and its label. */\n readonly bottomContentSpacing: number;\n /** Classic paints a pill behind the selected item; Sculpted does not. */\n readonly showsSelectionIndicator: boolean;\n /** How far the selection pill sits below its default top (Classic 4, Sculpted 0). */\n readonly selectedItemNudgeY: number;\n /** Classic draws the 1 px lit top edge; the opaque Sculpted bar does not. */\n readonly drawsTopHighlight: boolean;\n /**\n * The shadow recipe, or `null` for none. Classic keeps the flat chrome of the port made at MAUI 1.2.0 (MAUI paints\n * a 50 % Skia halo there, see the migration table); Sculpted paints MAUI's 12 % bar and 30 % disc shadow, because\n * its opaque bar has no other separation from the page.\n */\n readonly shadow: G9TabBarShadowRecipe | null;\n /** Control height while the FAB rests inline: `barHeight` + the two shadow insets. */\n readonly compactControlHeight: number;\n /** Control height while the FAB floats. */\n readonly floatingControlHeight: number;\n /** Control height while the FAB's sub-menu row is open. */\n computeOpenControlHeight(subMenuItemCount: number): number;\n}\n\nfunction styleMetrics(\n values: Omit<\n G9TabBarStyleMetrics,\n 'fabProtrusionAboveBar' | 'compactControlHeight' | 'floatingControlHeight' | 'computeOpenControlHeight'\n >,\n): G9TabBarStyleMetrics {\n const fabProtrusionAboveBar = values.fabSize / 2 - values.fabCenterBelowBarTop;\n const floatingControlHeight = values.barHeight + values.floatingHeadroom + chromeShadowPadding + barBottomGap;\n return Object.freeze({\n ...values,\n fabProtrusionAboveBar,\n compactControlHeight: values.barHeight + chromeShadowPadding + barBottomGap,\n floatingControlHeight,\n computeOpenControlHeight: (subMenuItemCount: number) =>\n subMenuItemCount <= 0\n ? floatingControlHeight\n : values.barHeight +\n fabProtrusionAboveBar +\n subMenuRowAboveFabGap +\n subMenuRowCellHeight +\n 8 +\n chromeShadowPadding +\n barBottomGap,\n });\n}\n\n// The Sculpted disc, and how much larger than Figma's the cradle is drawn (its path was drawn around a 48 px disc).\n// Independent on purpose (MAUI ADR-0030, amended 2026-10-05): change the disc to change the gap around it, the scale\n// to change the cradle; never the cradle's design constants.\nconst sculptedFabDisc = 66;\nconst sculptedCradleScale = 56 / 48;\nconst cradleHalfWidth = 57;\n\n/**\n * The two styles' geometry (MAUI `G9TabBarStyleMetrics.Classic` / `.Sculpted` / `.For(style)` / `CradleHalfWidth`).\n * `classic` reproduces `g9TabBarMetrics` exactly. `sculpted` is the Figma «Bottom Navigation / Sculpted» component\n * 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\n * 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).\n */\nexport const g9TabBarStyleMetrics = Object.freeze({\n classic: styleMetrics({\n style: 'classic',\n barHeight,\n barTopRadius: 18,\n barBottomRadius: 18,\n itemsHorizontalPadding: 0,\n fabSize,\n fabInnerSize: fabSize * fabInnerSizeRatio,\n fabIconSize: 44,\n fabPlusArmRatio: 0.34,\n fabPlusStrokeRatio: 0.14,\n fabCenterBelowBarTop: 0,\n floatingHeadroom: 44,\n notchShape: 'semicircle',\n cradleScale: 1,\n notchHalfWidth: fabSize / 2 + notchGap,\n bottomIconSize: 24,\n bottomLabelFontSize: 11,\n bottomContentSpacing: 3,\n showsSelectionIndicator: true,\n selectedItemNudgeY: 4,\n drawsTopHighlight: true,\n shadow: null,\n }),\n sculpted: styleMetrics({\n style: 'sculpted',\n barHeight: 68,\n barTopRadius: 24,\n barBottomRadius: 24,\n itemsHorizontalPadding: 8,\n // The tap box is the disc plus 4 px all round, as in the component (48 in 56).\n fabSize: sculptedFabDisc + 8,\n fabInnerSize: sculptedFabDisc,\n fabIconSize: 30,\n // The design's plus is two 24 × 2.7 bars; round caps add half a stroke at each end.\n fabPlusArmRatio: 0.444,\n fabPlusStrokeRatio: 0.1125,\n fabCenterBelowBarTop: 9,\n floatingHeadroom: 37,\n notchShape: 'cradle',\n cradleScale: sculptedCradleScale,\n notchHalfWidth: cradleHalfWidth * sculptedCradleScale,\n bottomIconSize: 24,\n bottomLabelFontSize: 12,\n bottomContentSpacing: 4,\n showsSelectionIndicator: false,\n selectedItemNudgeY: 0,\n drawsTopHighlight: false,\n // Figma DROP_SHADOW blur 8, y 1, black 12 % (a Gaussian sigma is about half the CSS-style blur); the disc's own\n // lift is darker and dropped 2 px further, traced around the DISC (its box is transparent).\n shadow: Object.freeze({\n alpha: 0.12,\n blurSigma: 4,\n offsetY: 1,\n fabDiameter: sculptedFabDisc,\n fabAlpha: 0.3,\n fabOffsetY: 2,\n }),\n }),\n /** Half the cradle's opening along the top edge in design px, before `cradleScale` (MAUI `CradleHalfWidth`). */\n cradleHalfWidth,\n /** The metrics of `style` (MAUI `G9TabBarStyleMetrics.For`); anything but `'sculpted'` is Classic. */\n for: (style: G9TabBarStyle | null | undefined): G9TabBarStyleMetrics =>\n style === 'sculpted' ? g9TabBarStyleMetrics.sculpted : g9TabBarStyleMetrics.classic,\n});\n\n/** The Sculpted cradle in design px from the notch centre (x) and the top edge (y); multiplied by `cradleScale`. */\nexport const tabBarCradleDesign = Object.freeze({\n halfWidth: cradleHalfWidth,\n shoulderHandleX: 42,\n shoulderInnerX: 39,\n shoulderInnerY: 10,\n shoulderEndX: 32,\n shoulderEndY: 23,\n bowlHandleX: 19,\n bowlHandleY: 47,\n});\n\n/** CSS `cubic-bezier` for MAUI's ease-out-back with coefficient `c` (1.70158 is the standard back curve). */\nexport function easeOutBackCss(c: number): string {\n // Matches easeOutBack's overshoot: y1 grows with the coefficient (1.70158 → 1.56, the usual 0.34,1.56,0.64,1).\n const y1 = 1 + c * 0.329;\n return `cubic-bezier(0.34, ${y1.toFixed(2)}, 0.64, 1)`;\n}\n"],"names":["barHeight","chromeShadowPadding","barBottomGap","fabSize","fabFloatingOverlapRatio","subMenuRowAboveFabGap","subMenuItemFabRatio","subMenuItemInnerRatio","subMenuRowLabelHeight","subMenuRowLabelGap","subMenuRowTopPadding","subMenuRowBottomPadding","fabInnerSizeRatio","notchGap","subMenuRowItemInnerSize","subMenuRowCellHeight","floatingControlHeight","computeOpenControlHeight","subMenuItemCount","fabProtrusion","g9TabBarMetrics","Object","styleMetrics","values","fabProtrusionAboveBar","sculptedFabDisc","sculptedCradleScale","cradleHalfWidth","g9TabBarStyleMetrics","style","tabBarCradleDesign","easeOutBackCss","c","y1"],"mappings":"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"}
|
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
import type { G9IconInput } from '../icon/icon.js';
|
|
2
|
+
import { type G9TabBarStyle } from './metrics.js';
|
|
3
|
+
/** One bar, sub-menu or overflow item (MAUI `G9TabBarItem`). */
|
|
4
|
+
export interface G9TabBarItem {
|
|
5
|
+
readonly text?: string;
|
|
6
|
+
/** Default `'check'` (MAUI `G9Glyph.Check`). */
|
|
7
|
+
readonly icon?: G9IconInput;
|
|
8
|
+
/**
|
|
9
|
+
* The icon while this item is the selected tab, typically the filled twin of an outline `icon` (MAUI 1.4.0
|
|
10
|
+
* `SelectedIcon`). Used by the `'sculpted'` style, whose selected state is "filled icon + primary colour"; Classic
|
|
11
|
+
* ignores it (its pill already marks the selection). Unset keeps `icon` in both states.
|
|
12
|
+
*/
|
|
13
|
+
readonly selectedIcon?: G9IconInput;
|
|
14
|
+
/** Runs first on a tap (MAUI `Clicked`). */
|
|
15
|
+
readonly onClick?: (context: G9TabBarClickContext) => void;
|
|
16
|
+
/** Runs after `onClick` with `commandParameter` unless `canExecute` is false (MAUI `Command`). */
|
|
17
|
+
readonly command?: (parameter: unknown) => void;
|
|
18
|
+
readonly canExecute?: boolean;
|
|
19
|
+
readonly commandParameter?: unknown;
|
|
20
|
+
/** Test identifier, set as the item's `id` (MAUI `AutomationId`). */
|
|
21
|
+
readonly automationId?: string;
|
|
22
|
+
/** Legacy radial-menu polar angle; the row layout ignores it, kept so old item lists still type-check. */
|
|
23
|
+
readonly angleDegrees?: number;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Builds an item (MAUI `new G9TabBarItem()` / `new G9TabBarItem(text, icon)` / `new G9TabBarItem(text, icon,
|
|
27
|
+
* selectedIcon)`: pass `{ selectedIcon }` in `extra`).
|
|
28
|
+
*/
|
|
29
|
+
export declare function g9TabBarItem(text?: string, icon?: G9IconInput, extra?: Partial<G9TabBarItem>): G9TabBarItem;
|
|
30
|
+
/** What a tapped item learns (MAUI `G9TabBarClickContext`). */
|
|
31
|
+
export interface G9TabBarClickContext {
|
|
32
|
+
readonly index: number;
|
|
33
|
+
readonly item: G9TabBarItem;
|
|
34
|
+
readonly isSubMenuItem: boolean;
|
|
35
|
+
}
|
|
36
|
+
/** Payload of `onItemSelected` (MAUI `G9TabBarSelectionChangedEventArgs`). */
|
|
37
|
+
export type G9TabBarSelectionChangedEventArgs = G9TabBarClickContext;
|
|
38
|
+
/** Payload of `onFabTapped`, raised before any state changes (MAUI `G9TabBarFabTappedEventArgs`). */
|
|
39
|
+
export interface G9TabBarFabTappedEventArgs {
|
|
40
|
+
/** Set `true` to suppress the built-in fan-out for this tap. */
|
|
41
|
+
handled: boolean;
|
|
42
|
+
}
|
|
43
|
+
/** The four bits of bar state (MAUI `SelectedIndex`, `IsCenterFloating`, `IsFabOpen`, `IsOverflowOpen`). */
|
|
44
|
+
export interface G9TabBarState {
|
|
45
|
+
readonly selectedIndex: number;
|
|
46
|
+
readonly isCenterFloating: boolean;
|
|
47
|
+
readonly isFabOpen: boolean;
|
|
48
|
+
readonly isOverflowOpen: boolean;
|
|
49
|
+
}
|
|
50
|
+
/** Inputs the transitions depend on. */
|
|
51
|
+
export interface G9TabBarConfig {
|
|
52
|
+
readonly itemCount: number;
|
|
53
|
+
readonly subMenuCount: number;
|
|
54
|
+
readonly fabIndex: number;
|
|
55
|
+
readonly resetCenterOnMenuSelection: boolean;
|
|
56
|
+
/** The style whose heights apply (`tabBarReservedHeight`). Default `'classic'`. */
|
|
57
|
+
readonly barStyle?: G9TabBarStyle;
|
|
58
|
+
}
|
|
59
|
+
/** Something to run after a transition: an item's callbacks and the `onItemSelected` event. */
|
|
60
|
+
export interface G9TabBarEffect {
|
|
61
|
+
readonly index: number;
|
|
62
|
+
readonly isSubMenuItem: boolean;
|
|
63
|
+
}
|
|
64
|
+
/** The result of one tab-bar input: the next state and what to run as a consequence (pure; see `tabBarItemTap`). */
|
|
65
|
+
export interface G9TabBarTransition {
|
|
66
|
+
readonly state: G9TabBarState;
|
|
67
|
+
/** The item to execute and report as selected, if any. */
|
|
68
|
+
readonly effect: G9TabBarEffect | null;
|
|
69
|
+
}
|
|
70
|
+
/** More items than slots: the extras collapse behind a More trigger in the last slot. */
|
|
71
|
+
export declare function tabBarHasOverflow(itemCount: number): boolean;
|
|
72
|
+
/** Slot of the overflow trigger (the last visible slot). */
|
|
73
|
+
export declare const tabBarOverflowSlot: number;
|
|
74
|
+
/** The FAB index honoured at runtime: -1 when unset, out of range, or folded into the overflow (MAUI `ResolvedFabIndex`). */
|
|
75
|
+
export declare function resolveTabBarFabIndex(fabIndex: number, itemCount: number): number;
|
|
76
|
+
/** A visible slot: a bar item, or the More trigger. */
|
|
77
|
+
export type G9TabBarSlot = {
|
|
78
|
+
readonly kind: 'item';
|
|
79
|
+
readonly index: number;
|
|
80
|
+
} | {
|
|
81
|
+
readonly kind: 'overflow';
|
|
82
|
+
};
|
|
83
|
+
/** The visible slots in logical order. */
|
|
84
|
+
export declare function tabBarSlots(itemCount: number): G9TabBarSlot[];
|
|
85
|
+
/** Source indices behind the More trigger. */
|
|
86
|
+
export declare function tabBarOverflowIndices(itemCount: number): number[];
|
|
87
|
+
/** Initial state from `defaultSelectedIndex` (MAUI `ApplyDefaultSelectedIndex`). */
|
|
88
|
+
export declare function initialTabBarState(config: G9TabBarConfig, defaultSelectedIndex: number): G9TabBarState;
|
|
89
|
+
/** A tap on a bar slot item (MAUI `OnBottomItemTapped`). */
|
|
90
|
+
export declare function tabBarItemTap(state: G9TabBarState, config: G9TabBarConfig, index: number): G9TabBarTransition;
|
|
91
|
+
/** A tap on the floating FAB that nobody handled (MAUI `OnFabTapped` after `FabTapped`). */
|
|
92
|
+
export declare function tabBarFabTap(state: G9TabBarState, config: G9TabBarConfig): G9TabBarTransition;
|
|
93
|
+
/** A tap on a sub-menu cell (MAUI `OnSubMenuItemTapped`): runs it and closes the row; the selection stays. */
|
|
94
|
+
export declare function tabBarSubMenuTap(state: G9TabBarState, config: G9TabBarConfig, index: number): G9TabBarTransition;
|
|
95
|
+
/** A tap on the More trigger (MAUI `OnOverflowTriggerTapped`): toggles the column, closing the FAB row. */
|
|
96
|
+
export declare function tabBarOverflowTriggerTap(state: G9TabBarState, config: G9TabBarConfig): G9TabBarTransition;
|
|
97
|
+
/** A tap on an overflow item (MAUI `OnOverflowItemTapped`): selects its source index and closes everything. */
|
|
98
|
+
export declare function tabBarOverflowItemTap(state: G9TabBarState, config: G9TabBarConfig, index: number): G9TabBarTransition;
|
|
99
|
+
/** A tap on the backdrop (MAUI `OnBackdropTapped`): closes both menus; the selection stays. */
|
|
100
|
+
export declare function tabBarBackdropTap(state: G9TabBarState, config: G9TabBarConfig): G9TabBarState;
|
|
101
|
+
/**
|
|
102
|
+
* A selection written in code brings the FAB state with it (MAUI `ReconcileFabStateWithSelection`): the FAB tab
|
|
103
|
+
* selected floats the FAB (closed); another tab returns it to the bar when `resetCenterOnMenuSelection`. With no FAB
|
|
104
|
+
* (index -1, out of range, folded into the overflow) nothing floats (MAUI `ResetFabStateIfNoFab`).
|
|
105
|
+
*/
|
|
106
|
+
export declare function reconcileTabBarState(state: G9TabBarState, config: G9TabBarConfig): G9TabBarState;
|
|
107
|
+
/** Slot the selection pill sits on: the More trigger for an overflow selection; -1 while the FAB carries it. */
|
|
108
|
+
export declare function tabBarIndicatorSlot(state: G9TabBarState, config: G9TabBarConfig): number;
|
|
109
|
+
/** Reserved control height for the state (compact, floating FAB, open sub-menu row), in the config's style. */
|
|
110
|
+
export declare function tabBarReservedHeight(state: G9TabBarState, config: G9TabBarConfig): number;
|
|
111
|
+
/**
|
|
112
|
+
* Centre x of a logical slot inside a control `width` wide (RTL mirrors). The slots share the drawn bar minus the
|
|
113
|
+
* style's `itemsHorizontalPadding` (MAUI `ResolveSlotSpan`), so items, the FAB and the overflow column agree.
|
|
114
|
+
*/
|
|
115
|
+
export declare function tabBarSlotCenterX(slot: number, slotCount: number, width: number, rtl: boolean, itemsHorizontalPadding?: number): number;
|
|
116
|
+
/**
|
|
117
|
+
* Clamps a notch centre so the whole notch (and the corner radius beside it) fits on the bar `[barLeft, barRight]`
|
|
118
|
+
* (MAUI `G9TabBarOutline.ClampNotchCenter`); unchanged when the bar is too narrow to clamp. `progress` (0..1) scales the
|
|
119
|
+
* notch's half-width.
|
|
120
|
+
*/
|
|
121
|
+
export declare function clampTabBarNotchCenter(style: G9TabBarStyle, barLeft: number, barRight: number, centerX: number, progress?: number): number;
|
|
122
|
+
/**
|
|
123
|
+
* Centre x of the FAB (MAUI `ResolveFabCenterX`): its slot's centre, clamped exactly as the notch is, so the FAB and its
|
|
124
|
+
* notch can never part company near the bar's ends.
|
|
125
|
+
*/
|
|
126
|
+
export declare function tabBarFabCenterX(fabIndex: number, slotCount: number, width: number, rtl: boolean, style?: G9TabBarStyle): number;
|
|
127
|
+
/** Stagger rank from the centre outward (0 for the middle cell(s)). */
|
|
128
|
+
export declare function centerOutwardRank(index: number, count: number): number;
|
|
129
|
+
/** Layout of the sub-menu row: left edge of the row and per-cell x and reveal delay, edge-guarded inside `width`. */
|
|
130
|
+
export declare function subMenuRowLayout(count: number, fabCenterX: number, width: number): {
|
|
131
|
+
readonly left: number;
|
|
132
|
+
readonly cells: ReadonlyArray<{
|
|
133
|
+
readonly x: number;
|
|
134
|
+
readonly delayMs: number;
|
|
135
|
+
}>;
|
|
136
|
+
};
|
|
137
|
+
/** Overflow column: centre x (edge-guarded) and per-item bottom offset and delay, closest to the trigger first. */
|
|
138
|
+
export declare function overflowColumnLayout(count: number, triggerCenterX: number, width: number, style?: G9TabBarStyle): {
|
|
139
|
+
readonly left: number;
|
|
140
|
+
readonly items: ReadonlyArray<{
|
|
141
|
+
readonly bottom: number;
|
|
142
|
+
readonly delayMs: number;
|
|
143
|
+
}>;
|
|
144
|
+
};
|
|
145
|
+
/**
|
|
146
|
+
* The bar outline as an SVG path, in the bar's own coordinates (MAUI `G9TabBarChromeDrawable` / `G9TabBarOutline`).
|
|
147
|
+
* Classic: a rounded rectangle with a semicircular notch of radius `notchCircleRadius` around `notchCenterX` when set;
|
|
148
|
+
* `notchDepth` (0..1) scales its depth. Sculpted: 24 px quadratic corners and the S-shouldered cradle, clamped like the
|
|
149
|
+
* FAB (`clampTabBarNotchCenter`); `notchDepth` grows the cradle from its centre, as MAUI's notch progress does.
|
|
150
|
+
*/
|
|
151
|
+
export declare function tabBarChromePath(width: number, height: number, notchCenterX: number | null, notchDepth?: number, style?: G9TabBarStyle): string;
|
|
152
|
+
/**
|
|
153
|
+
* The chrome as an `<svg content>` document. Classic (`width` × `height`): the fill plus the 1 px top-edge glass
|
|
154
|
+
* highlight. Sculpted: the opaque fill without a highlight, over the bar's own outline blurred into its shadow
|
|
155
|
+
* (MAUI's Skia recipe, `g9TabBarStyleMetrics.sculpted.shadow`); the document is `chromeShadowPadding` larger on every
|
|
156
|
+
* side so the halo is not clipped, and is placed that far up and left of the bar.
|
|
157
|
+
*/
|
|
158
|
+
export declare function tabBarChromeSvg(width: number, height: number, notchCenterX: number | null, fill: string, stroke: string, style?: G9TabBarStyle): string;
|
|
159
|
+
/**
|
|
160
|
+
* The FAB disc's shadow as an `<svg content>` document `fabSize + 2 × chromeShadowPadding` square, placed that far up
|
|
161
|
+
* and left of the FAB box so it scales and fades with the FAB (MAUI draws it in the shadow view with the FAB's scale
|
|
162
|
+
* and visibility). `null` when the style paints no shadow.
|
|
163
|
+
*/
|
|
164
|
+
export declare function tabBarFabShadowSvg(style?: G9TabBarStyle): string | null;
|
|
165
|
+
/**
|
|
166
|
+
* The FAB's plus (MAUI `G9FabPlusIconDrawable`) as an `<svg content>` document `size` square: two round-capped bars,
|
|
167
|
+
* each arm `size × armRatio` from the centre, `max(2, size × strokeRatio)` thick, in `color` (a literal colour).
|
|
168
|
+
*/
|
|
169
|
+
export declare function tabBarFabPlusSvg(size: number, armRatio: number, strokeRatio: number, color: string): string;
|
|
170
|
+
//# sourceMappingURL=model.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../../src/tab-bar/model.ts"],"names":[],"mappings":"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"}
|