@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,349 @@
|
|
|
1
|
+
import { g9TabBarMetrics, g9TabBarStyleMetrics, tabBarCradleDesign } from "./metrics.jsx";
|
|
2
|
+
function g9TabBarItem(text = '', icon = 'check', extra = {}) {
|
|
3
|
+
return {
|
|
4
|
+
text,
|
|
5
|
+
icon,
|
|
6
|
+
angleDegrees: 0 / 0,
|
|
7
|
+
...extra
|
|
8
|
+
};
|
|
9
|
+
}
|
|
10
|
+
function tabBarHasOverflow(itemCount) {
|
|
11
|
+
return itemCount > g9TabBarMetrics.maxVisibleBottomItems;
|
|
12
|
+
}
|
|
13
|
+
const tabBarOverflowSlot = g9TabBarMetrics.maxVisibleBottomItems - 1;
|
|
14
|
+
function resolveTabBarFabIndex(fabIndex, itemCount) {
|
|
15
|
+
if (fabIndex < 0 || fabIndex >= itemCount) return -1;
|
|
16
|
+
if (tabBarHasOverflow(itemCount) && fabIndex >= tabBarOverflowSlot) return -1;
|
|
17
|
+
return fabIndex;
|
|
18
|
+
}
|
|
19
|
+
function tabBarSlots(itemCount) {
|
|
20
|
+
const overflow = tabBarHasOverflow(itemCount);
|
|
21
|
+
const visible = overflow ? tabBarOverflowSlot : itemCount;
|
|
22
|
+
const slots = [];
|
|
23
|
+
for(let i = 0; i < visible; i++)slots.push({
|
|
24
|
+
kind: 'item',
|
|
25
|
+
index: i
|
|
26
|
+
});
|
|
27
|
+
if (overflow) slots.push({
|
|
28
|
+
kind: 'overflow'
|
|
29
|
+
});
|
|
30
|
+
return slots;
|
|
31
|
+
}
|
|
32
|
+
function tabBarOverflowIndices(itemCount) {
|
|
33
|
+
const out = [];
|
|
34
|
+
if (!tabBarHasOverflow(itemCount)) return out;
|
|
35
|
+
for(let i = tabBarOverflowSlot; i < itemCount; i++)out.push(i);
|
|
36
|
+
return out;
|
|
37
|
+
}
|
|
38
|
+
const withState = (state, patch)=>({
|
|
39
|
+
...state,
|
|
40
|
+
...patch
|
|
41
|
+
});
|
|
42
|
+
function initialTabBarState(config, defaultSelectedIndex) {
|
|
43
|
+
const base = {
|
|
44
|
+
selectedIndex: 0,
|
|
45
|
+
isCenterFloating: false,
|
|
46
|
+
isFabOpen: false,
|
|
47
|
+
isOverflowOpen: false
|
|
48
|
+
};
|
|
49
|
+
if (config.itemCount <= 0) return base;
|
|
50
|
+
const index = Math.min(Math.max(defaultSelectedIndex, 0), config.itemCount - 1);
|
|
51
|
+
const fab = resolveTabBarFabIndex(config.fabIndex, config.itemCount);
|
|
52
|
+
return {
|
|
53
|
+
...base,
|
|
54
|
+
selectedIndex: index,
|
|
55
|
+
isCenterFloating: fab >= 0 && index === fab
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
function tabBarItemTap(state, config, index) {
|
|
59
|
+
if (index < 0 || index >= config.itemCount) return {
|
|
60
|
+
state,
|
|
61
|
+
effect: null
|
|
62
|
+
};
|
|
63
|
+
let next = withState(state, {
|
|
64
|
+
isOverflowOpen: false
|
|
65
|
+
});
|
|
66
|
+
const fab = resolveTabBarFabIndex(config.fabIndex, config.itemCount);
|
|
67
|
+
if (fab >= 0 && index === fab) {
|
|
68
|
+
next = withState(next, {
|
|
69
|
+
selectedIndex: index
|
|
70
|
+
});
|
|
71
|
+
next = next.isCenterFloating ? withState(next, {
|
|
72
|
+
isFabOpen: !next.isFabOpen
|
|
73
|
+
}) : withState(next, {
|
|
74
|
+
isCenterFloating: true,
|
|
75
|
+
isFabOpen: false
|
|
76
|
+
});
|
|
77
|
+
return {
|
|
78
|
+
state: next,
|
|
79
|
+
effect: {
|
|
80
|
+
index,
|
|
81
|
+
isSubMenuItem: false
|
|
82
|
+
}
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
next = withState(next, {
|
|
86
|
+
selectedIndex: index,
|
|
87
|
+
isFabOpen: false
|
|
88
|
+
});
|
|
89
|
+
if (config.resetCenterOnMenuSelection) next = withState(next, {
|
|
90
|
+
isCenterFloating: false
|
|
91
|
+
});
|
|
92
|
+
return {
|
|
93
|
+
state: next,
|
|
94
|
+
effect: {
|
|
95
|
+
index,
|
|
96
|
+
isSubMenuItem: false
|
|
97
|
+
}
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
function tabBarFabTap(state, config) {
|
|
101
|
+
let next = withState(state, {
|
|
102
|
+
isOverflowOpen: false
|
|
103
|
+
});
|
|
104
|
+
const fab = resolveTabBarFabIndex(config.fabIndex, config.itemCount);
|
|
105
|
+
if (fab >= 0) next = withState(next, {
|
|
106
|
+
selectedIndex: fab
|
|
107
|
+
});
|
|
108
|
+
if (!next.isCenterFloating) return {
|
|
109
|
+
state: withState(next, {
|
|
110
|
+
isCenterFloating: true,
|
|
111
|
+
isFabOpen: false
|
|
112
|
+
}),
|
|
113
|
+
effect: null
|
|
114
|
+
};
|
|
115
|
+
return {
|
|
116
|
+
state: withState(next, {
|
|
117
|
+
isFabOpen: !next.isFabOpen
|
|
118
|
+
}),
|
|
119
|
+
effect: null
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
function tabBarSubMenuTap(state, config, index) {
|
|
123
|
+
if (index < 0 || index >= config.subMenuCount) return {
|
|
124
|
+
state,
|
|
125
|
+
effect: null
|
|
126
|
+
};
|
|
127
|
+
return {
|
|
128
|
+
state: withState(state, {
|
|
129
|
+
isFabOpen: false
|
|
130
|
+
}),
|
|
131
|
+
effect: {
|
|
132
|
+
index,
|
|
133
|
+
isSubMenuItem: true
|
|
134
|
+
}
|
|
135
|
+
};
|
|
136
|
+
}
|
|
137
|
+
function tabBarOverflowTriggerTap(state, config) {
|
|
138
|
+
if (!tabBarHasOverflow(config.itemCount)) return {
|
|
139
|
+
state,
|
|
140
|
+
effect: null
|
|
141
|
+
};
|
|
142
|
+
return {
|
|
143
|
+
state: withState(state, {
|
|
144
|
+
isFabOpen: false,
|
|
145
|
+
isOverflowOpen: !state.isOverflowOpen
|
|
146
|
+
}),
|
|
147
|
+
effect: null
|
|
148
|
+
};
|
|
149
|
+
}
|
|
150
|
+
function tabBarOverflowItemTap(state, config, index) {
|
|
151
|
+
if (index < 0 || index >= config.itemCount) return {
|
|
152
|
+
state,
|
|
153
|
+
effect: null
|
|
154
|
+
};
|
|
155
|
+
let next = withState(state, {
|
|
156
|
+
selectedIndex: index,
|
|
157
|
+
isOverflowOpen: false,
|
|
158
|
+
isFabOpen: false
|
|
159
|
+
});
|
|
160
|
+
if (config.resetCenterOnMenuSelection) next = withState(next, {
|
|
161
|
+
isCenterFloating: false
|
|
162
|
+
});
|
|
163
|
+
return {
|
|
164
|
+
state: next,
|
|
165
|
+
effect: {
|
|
166
|
+
index,
|
|
167
|
+
isSubMenuItem: false
|
|
168
|
+
}
|
|
169
|
+
};
|
|
170
|
+
}
|
|
171
|
+
function tabBarBackdropTap(state, config) {
|
|
172
|
+
const fab = resolveTabBarFabIndex(config.fabIndex, config.itemCount);
|
|
173
|
+
let next = withState(state, {
|
|
174
|
+
isFabOpen: false,
|
|
175
|
+
isOverflowOpen: false
|
|
176
|
+
});
|
|
177
|
+
if (next.isCenterFloating && config.resetCenterOnMenuSelection && fab < 0) next = withState(next, {
|
|
178
|
+
isCenterFloating: false
|
|
179
|
+
});
|
|
180
|
+
return next;
|
|
181
|
+
}
|
|
182
|
+
function reconcileTabBarState(state, config) {
|
|
183
|
+
const fab = resolveTabBarFabIndex(config.fabIndex, config.itemCount);
|
|
184
|
+
let next = state;
|
|
185
|
+
if (config.itemCount > 0) {
|
|
186
|
+
const clamped = Math.min(Math.max(next.selectedIndex, 0), config.itemCount - 1);
|
|
187
|
+
if (clamped !== next.selectedIndex) next = withState(next, {
|
|
188
|
+
selectedIndex: clamped
|
|
189
|
+
});
|
|
190
|
+
}
|
|
191
|
+
if (!tabBarHasOverflow(config.itemCount) && next.isOverflowOpen) next = withState(next, {
|
|
192
|
+
isOverflowOpen: false
|
|
193
|
+
});
|
|
194
|
+
if (fab < 0) return next.isCenterFloating || next.isFabOpen ? withState(next, {
|
|
195
|
+
isCenterFloating: false,
|
|
196
|
+
isFabOpen: false
|
|
197
|
+
}) : next;
|
|
198
|
+
if (next.selectedIndex === fab) return next.isCenterFloating ? next : withState(next, {
|
|
199
|
+
isCenterFloating: true,
|
|
200
|
+
isFabOpen: false
|
|
201
|
+
});
|
|
202
|
+
if (!config.resetCenterOnMenuSelection) return next;
|
|
203
|
+
return next.isCenterFloating || next.isFabOpen ? withState(next, {
|
|
204
|
+
isCenterFloating: false,
|
|
205
|
+
isFabOpen: false
|
|
206
|
+
}) : next;
|
|
207
|
+
}
|
|
208
|
+
function tabBarIndicatorSlot(state, config) {
|
|
209
|
+
if (config.itemCount <= 0) return -1;
|
|
210
|
+
const fab = resolveTabBarFabIndex(config.fabIndex, config.itemCount);
|
|
211
|
+
if (fab >= 0 && state.selectedIndex === fab && state.isCenterFloating) return -1;
|
|
212
|
+
if (tabBarHasOverflow(config.itemCount) && state.selectedIndex >= tabBarOverflowSlot) return tabBarOverflowSlot;
|
|
213
|
+
return state.selectedIndex;
|
|
214
|
+
}
|
|
215
|
+
function tabBarReservedHeight(state, config) {
|
|
216
|
+
const m = g9TabBarStyleMetrics["for"](config.barStyle);
|
|
217
|
+
if (state.isOverflowOpen && tabBarHasOverflow(config.itemCount)) {
|
|
218
|
+
const count = config.itemCount - tabBarOverflowSlot;
|
|
219
|
+
return g9TabBarMetrics.barBottomGap + m.barHeight + g9TabBarMetrics.overflowAboveBarGap + count * (g9TabBarMetrics.overflowItemSize + g9TabBarMetrics.overflowItemSpacing) + g9TabBarMetrics.chromeShadowPadding;
|
|
220
|
+
}
|
|
221
|
+
if (state.isFabOpen) return m.computeOpenControlHeight(config.subMenuCount);
|
|
222
|
+
if (state.isCenterFloating && resolveTabBarFabIndex(config.fabIndex, config.itemCount) >= 0) return m.floatingControlHeight;
|
|
223
|
+
return m.compactControlHeight;
|
|
224
|
+
}
|
|
225
|
+
function tabBarSlotCenterX(slot, slotCount, width, rtl, itemsHorizontalPadding = 0) {
|
|
226
|
+
const left = g9TabBarMetrics.barHorizontalGap + itemsHorizontalPadding;
|
|
227
|
+
const inner = Math.max(width - 2 * left, 0);
|
|
228
|
+
const visual = rtl ? slotCount - 1 - slot : slot;
|
|
229
|
+
return left + (visual + 0.5) * inner / Math.max(slotCount, 1);
|
|
230
|
+
}
|
|
231
|
+
function clampTabBarNotchCenter(style, barLeft, barRight, centerX, progress = 1) {
|
|
232
|
+
const m = g9TabBarStyleMetrics["for"](style);
|
|
233
|
+
const half = m.notchHalfWidth * Math.min(Math.max(progress, 0), 1);
|
|
234
|
+
const min = barLeft + half + m.barTopRadius + 2;
|
|
235
|
+
const max = barRight - half - m.barTopRadius - 2;
|
|
236
|
+
return min < max ? Math.min(Math.max(centerX, min), max) : centerX;
|
|
237
|
+
}
|
|
238
|
+
function tabBarFabCenterX(fabIndex, slotCount, width, rtl, style = 'classic') {
|
|
239
|
+
const m = g9TabBarStyleMetrics["for"](style);
|
|
240
|
+
const raw = tabBarSlotCenterX(fabIndex, slotCount, width, rtl, m.itemsHorizontalPadding);
|
|
241
|
+
return clampTabBarNotchCenter(style, g9TabBarMetrics.barHorizontalGap, width - g9TabBarMetrics.barHorizontalGap, raw);
|
|
242
|
+
}
|
|
243
|
+
function centerOutwardRank(index, count) {
|
|
244
|
+
const distance = Math.abs(index - (count - 1) / 2);
|
|
245
|
+
return Math.round(count % 2 === 0 ? distance - 0.5 : distance);
|
|
246
|
+
}
|
|
247
|
+
function subMenuRowLayout(count, fabCenterX, width) {
|
|
248
|
+
const size = g9TabBarMetrics.subMenuRowItemSize;
|
|
249
|
+
const rowWidth = count * size + Math.max(count - 1, 0) * g9TabBarMetrics.subMenuRowSpacing;
|
|
250
|
+
const max = width - g9TabBarMetrics.subMenuRowEdgeGuard - rowWidth;
|
|
251
|
+
const left = Math.max(g9TabBarMetrics.subMenuRowEdgeGuard, Math.min(fabCenterX - rowWidth / 2, max));
|
|
252
|
+
const cells = [];
|
|
253
|
+
for(let i = 0; i < count; i++){
|
|
254
|
+
const fraction = Math.min(centerOutwardRank(i, count) * g9TabBarMetrics.subMenuRowStaggerStep, g9TabBarMetrics.subMenuRowStaggerCap);
|
|
255
|
+
cells.push({
|
|
256
|
+
x: i * (size + g9TabBarMetrics.subMenuRowSpacing),
|
|
257
|
+
delayMs: Math.round(fraction * g9TabBarMetrics.openStateDurationMs)
|
|
258
|
+
});
|
|
259
|
+
}
|
|
260
|
+
return {
|
|
261
|
+
left,
|
|
262
|
+
cells
|
|
263
|
+
};
|
|
264
|
+
}
|
|
265
|
+
function overflowColumnLayout(count, triggerCenterX, width, style = 'classic') {
|
|
266
|
+
const size = g9TabBarMetrics.overflowItemSize;
|
|
267
|
+
const barHeight = g9TabBarStyleMetrics["for"](style).barHeight;
|
|
268
|
+
const left = Math.max(g9TabBarMetrics.overflowEdgeGuard, Math.min(triggerCenterX - size / 2, width - g9TabBarMetrics.overflowEdgeGuard - size));
|
|
269
|
+
const items = [];
|
|
270
|
+
for(let k = 0; k < count; k++){
|
|
271
|
+
const fraction = Math.min(k * g9TabBarMetrics.overflowRevealStaggerStep, g9TabBarMetrics.overflowRevealStaggerCap);
|
|
272
|
+
items.push({
|
|
273
|
+
bottom: g9TabBarMetrics.barBottomGap + barHeight + g9TabBarMetrics.overflowAboveBarGap + k * (size + g9TabBarMetrics.overflowItemSpacing),
|
|
274
|
+
delayMs: Math.round(fraction * g9TabBarMetrics.overflowStateDurationMs)
|
|
275
|
+
});
|
|
276
|
+
}
|
|
277
|
+
return {
|
|
278
|
+
left,
|
|
279
|
+
items
|
|
280
|
+
};
|
|
281
|
+
}
|
|
282
|
+
const n = (value)=>Number(value.toFixed(2));
|
|
283
|
+
function sculptedOutline(width, height, notchCenterX, progress, ox = 0, oy = 0) {
|
|
284
|
+
const m = g9TabBarStyleMetrics.sculpted;
|
|
285
|
+
const p = Math.min(Math.max(progress, 0), 1);
|
|
286
|
+
const topR = m.barTopRadius;
|
|
287
|
+
const botR = m.barBottomRadius;
|
|
288
|
+
const x = (v)=>n(ox + v);
|
|
289
|
+
const y = (v)=>n(oy + v);
|
|
290
|
+
const parts = [
|
|
291
|
+
`M ${x(0)} ${y(topR)}`,
|
|
292
|
+
`Q ${x(0)} ${y(0)} ${x(topR)} ${y(0)}`
|
|
293
|
+
];
|
|
294
|
+
if (null !== notchCenterX && p > 0.001) {
|
|
295
|
+
const cx = clampTabBarNotchCenter('sculpted', 0, width, notchCenterX, p);
|
|
296
|
+
const k = p * m.cradleScale;
|
|
297
|
+
const d = tabBarCradleDesign;
|
|
298
|
+
const X = (dx)=>x(cx + dx * k);
|
|
299
|
+
const Y = (dy)=>y(dy * k);
|
|
300
|
+
parts.push(`L ${X(-d.halfWidth)} ${y(0)}`, `C ${X(-d.shoulderHandleX)} ${y(0)} ${X(-d.shoulderInnerX)} ${Y(d.shoulderInnerY)} ${X(-d.shoulderEndX)} ${Y(d.shoulderEndY)}`, `C ${X(-d.bowlHandleX)} ${Y(d.bowlHandleY)} ${X(d.bowlHandleX)} ${Y(d.bowlHandleY)} ${X(d.shoulderEndX)} ${Y(d.shoulderEndY)}`, `C ${X(d.shoulderInnerX)} ${Y(d.shoulderInnerY)} ${X(d.shoulderHandleX)} ${y(0)} ${X(d.halfWidth)} ${y(0)}`);
|
|
301
|
+
}
|
|
302
|
+
parts.push(`L ${x(width - topR)} ${y(0)}`, `Q ${x(width)} ${y(0)} ${x(width)} ${y(topR)}`, `L ${x(width)} ${y(height - botR)}`, `Q ${x(width)} ${y(height)} ${x(width - botR)} ${y(height)}`, `L ${x(botR)} ${y(height)}`, `Q ${x(0)} ${y(height)} ${x(0)} ${y(height - botR)}`, 'Z');
|
|
303
|
+
return parts.join(' ');
|
|
304
|
+
}
|
|
305
|
+
function tabBarChromePath(width, height, notchCenterX, notchDepth = 1, style = 'classic') {
|
|
306
|
+
if ('sculpted' === style) return sculptedOutline(width, height, notchCenterX, notchDepth);
|
|
307
|
+
const r = Math.min(g9TabBarMetrics.barTopRadius, height / 2, width / 2);
|
|
308
|
+
const rb = Math.min(g9TabBarMetrics.barBottomRadius, height / 2, width / 2);
|
|
309
|
+
const parts = [
|
|
310
|
+
`M ${n(r)} 0`
|
|
311
|
+
];
|
|
312
|
+
if (null !== notchCenterX && notchDepth > 0) {
|
|
313
|
+
const R = g9TabBarMetrics.notchCircleRadius;
|
|
314
|
+
const cx = Math.max(r + R, Math.min(notchCenterX, width - r - R));
|
|
315
|
+
parts.push(`L ${n(cx - R)} 0`, `A ${n(R)} ${n(R * Math.min(notchDepth, 1))} 0 0 0 ${n(cx + R)} 0`);
|
|
316
|
+
}
|
|
317
|
+
parts.push(`L ${n(width - r)} 0`, `A ${n(r)} ${n(r)} 0 0 1 ${n(width)} ${n(r)}`, `L ${n(width)} ${n(height - rb)}`, `A ${n(rb)} ${n(rb)} 0 0 1 ${n(width - rb)} ${n(height)}`, `L ${n(rb)} ${n(height)}`, `A ${n(rb)} ${n(rb)} 0 0 1 0 ${n(height - rb)}`, `L 0 ${n(r)}`, `A ${n(r)} ${n(r)} 0 0 1 ${n(r)} 0`, 'Z');
|
|
318
|
+
return parts.join(' ');
|
|
319
|
+
}
|
|
320
|
+
const svgDoc = (w, h, body)=>`<svg xmlns="http://www.w3.org/2000/svg" width="${n(w)}" height="${n(h)}" viewBox="0 0 ${n(w)} ${n(h)}">${body}</svg>`;
|
|
321
|
+
const blurFilter = (sigma)=>`<defs><filter id="g9tb-shadow" x="-25%" y="-50%" width="150%" height="200%"><feGaussianBlur stdDeviation="${sigma}"/></filter></defs>`;
|
|
322
|
+
function tabBarChromeSvg(width, height, notchCenterX, fill, stroke, style = 'classic') {
|
|
323
|
+
if ('sculpted' === style) {
|
|
324
|
+
const shadow = g9TabBarStyleMetrics.sculpted.shadow;
|
|
325
|
+
const pad = g9TabBarMetrics.chromeShadowPadding;
|
|
326
|
+
const halo = sculptedOutline(width, height, notchCenterX, 1, pad, pad + shadow.offsetY);
|
|
327
|
+
const body = sculptedOutline(width, height, notchCenterX, 1, pad, pad);
|
|
328
|
+
return svgDoc(width + 2 * pad, height + 2 * pad, `${blurFilter(shadow.blurSigma)}<path d="${halo}" fill="#000000" fill-opacity="${shadow.alpha}" filter="url(#g9tb-shadow)"/><path d="${body}" fill="${fill}"/>`);
|
|
329
|
+
}
|
|
330
|
+
const d = tabBarChromePath(width, height, notchCenterX);
|
|
331
|
+
return svgDoc(width, height, `<path d="${d}" fill="${fill}" stroke="${stroke}" stroke-width="${g9TabBarMetrics.barTopHighlightStrokeSize}"/>`);
|
|
332
|
+
}
|
|
333
|
+
function tabBarFabShadowSvg(style = 'classic') {
|
|
334
|
+
const m = g9TabBarStyleMetrics["for"](style);
|
|
335
|
+
if (!m.shadow) return null;
|
|
336
|
+
const pad = g9TabBarMetrics.chromeShadowPadding;
|
|
337
|
+
const size = m.fabSize + 2 * pad;
|
|
338
|
+
const c = size / 2;
|
|
339
|
+
return svgDoc(size, size, `${blurFilter(m.shadow.blurSigma)}<circle cx="${n(c)}" cy="${n(c + m.shadow.offsetY + m.shadow.fabOffsetY)}" r="${n(m.shadow.fabDiameter / 2)}" fill="#000000" fill-opacity="${m.shadow.fabAlpha}" filter="url(#g9tb-shadow)"/>`);
|
|
340
|
+
}
|
|
341
|
+
function tabBarFabPlusSvg(size, armRatio, strokeRatio, color) {
|
|
342
|
+
const c = size / 2;
|
|
343
|
+
const arm = size * armRatio;
|
|
344
|
+
const stroke = Math.max(2, size * strokeRatio);
|
|
345
|
+
return svgDoc(size, size, `<path d="M ${n(c - arm)} ${n(c)} L ${n(c + arm)} ${n(c)} M ${n(c)} ${n(c - arm)} L ${n(c)} ${n(c + arm)}" fill="none" stroke="${color}" stroke-width="${n(stroke)}" stroke-linecap="round" stroke-linejoin="round"/>`);
|
|
346
|
+
}
|
|
347
|
+
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 };
|
|
348
|
+
|
|
349
|
+
//# sourceMappingURL=model.jsx.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tab-bar/model.jsx","sources":["../../src/tab-bar/model.ts"],"sourcesContent":["import type { G9IconInput } from '../icon/icon';\nimport {\n type G9TabBarStyle,\n type G9TabBarStyleMetrics,\n g9TabBarStyleMetrics,\n g9TabBarMetrics as M,\n tabBarCradleDesign,\n} from './metrics';\n\n/** One bar, sub-menu or overflow item (MAUI `G9TabBarItem`). */\nexport interface G9TabBarItem {\n readonly text?: string;\n /** Default `'check'` (MAUI `G9Glyph.Check`). */\n readonly icon?: G9IconInput;\n /**\n * The icon while this item is the selected tab, typically the filled twin of an outline `icon` (MAUI 1.4.0\n * `SelectedIcon`). Used by the `'sculpted'` style, whose selected state is \"filled icon + primary colour\"; Classic\n * ignores it (its pill already marks the selection). Unset keeps `icon` in both states.\n */\n readonly selectedIcon?: G9IconInput;\n /** Runs first on a tap (MAUI `Clicked`). */\n readonly onClick?: (context: G9TabBarClickContext) => void;\n /** Runs after `onClick` with `commandParameter` unless `canExecute` is false (MAUI `Command`). */\n readonly command?: (parameter: unknown) => void;\n readonly canExecute?: boolean;\n readonly commandParameter?: unknown;\n /** Test identifier, set as the item's `id` (MAUI `AutomationId`). */\n readonly automationId?: string;\n /** Legacy radial-menu polar angle; the row layout ignores it, kept so old item lists still type-check. */\n readonly angleDegrees?: number;\n}\n\n/**\n * Builds an item (MAUI `new G9TabBarItem()` / `new G9TabBarItem(text, icon)` / `new G9TabBarItem(text, icon,\n * selectedIcon)`: pass `{ selectedIcon }` in `extra`).\n */\nexport function g9TabBarItem(text = '', icon: G9IconInput = 'check', extra: Partial<G9TabBarItem> = {}): G9TabBarItem {\n return { text, icon, angleDegrees: Number.NaN, ...extra };\n}\n\n/** What a tapped item learns (MAUI `G9TabBarClickContext`). */\nexport interface G9TabBarClickContext {\n readonly index: number;\n readonly item: G9TabBarItem;\n readonly isSubMenuItem: boolean;\n}\n\n/** Payload of `onItemSelected` (MAUI `G9TabBarSelectionChangedEventArgs`). */\nexport type G9TabBarSelectionChangedEventArgs = G9TabBarClickContext;\n\n/** Payload of `onFabTapped`, raised before any state changes (MAUI `G9TabBarFabTappedEventArgs`). */\nexport interface G9TabBarFabTappedEventArgs {\n /** Set `true` to suppress the built-in fan-out for this tap. */\n handled: boolean;\n}\n\n/** The four bits of bar state (MAUI `SelectedIndex`, `IsCenterFloating`, `IsFabOpen`, `IsOverflowOpen`). */\nexport interface G9TabBarState {\n readonly selectedIndex: number;\n readonly isCenterFloating: boolean;\n readonly isFabOpen: boolean;\n readonly isOverflowOpen: boolean;\n}\n\n/** Inputs the transitions depend on. */\nexport interface G9TabBarConfig {\n readonly itemCount: number;\n readonly subMenuCount: number;\n readonly fabIndex: number;\n readonly resetCenterOnMenuSelection: boolean;\n /** The style whose heights apply (`tabBarReservedHeight`). Default `'classic'`. */\n readonly barStyle?: G9TabBarStyle;\n}\n\n/** Something to run after a transition: an item's callbacks and the `onItemSelected` event. */\nexport interface G9TabBarEffect {\n readonly index: number;\n readonly isSubMenuItem: boolean;\n}\n\n/** The result of one tab-bar input: the next state and what to run as a consequence (pure; see `tabBarItemTap`). */\nexport interface G9TabBarTransition {\n readonly state: G9TabBarState;\n /** The item to execute and report as selected, if any. */\n readonly effect: G9TabBarEffect | null;\n}\n\n/** More items than slots: the extras collapse behind a More trigger in the last slot. */\nexport function tabBarHasOverflow(itemCount: number): boolean {\n return itemCount > M.maxVisibleBottomItems;\n}\n\n/** Slot of the overflow trigger (the last visible slot). */\nexport const tabBarOverflowSlot = M.maxVisibleBottomItems - 1;\n\n/** The FAB index honoured at runtime: -1 when unset, out of range, or folded into the overflow (MAUI `ResolvedFabIndex`). */\nexport function resolveTabBarFabIndex(fabIndex: number, itemCount: number): number {\n if (fabIndex < 0 || fabIndex >= itemCount) return -1;\n if (tabBarHasOverflow(itemCount) && fabIndex >= tabBarOverflowSlot) return -1;\n return fabIndex;\n}\n\n/** A visible slot: a bar item, or the More trigger. */\nexport type G9TabBarSlot = { readonly kind: 'item'; readonly index: number } | { readonly kind: 'overflow' };\n\n/** The visible slots in logical order. */\nexport function tabBarSlots(itemCount: number): G9TabBarSlot[] {\n const overflow = tabBarHasOverflow(itemCount);\n const visible = overflow ? tabBarOverflowSlot : itemCount;\n const slots: G9TabBarSlot[] = [];\n for (let i = 0; i < visible; i++) slots.push({ kind: 'item', index: i });\n if (overflow) slots.push({ kind: 'overflow' });\n return slots;\n}\n\n/** Source indices behind the More trigger. */\nexport function tabBarOverflowIndices(itemCount: number): number[] {\n const out: number[] = [];\n if (!tabBarHasOverflow(itemCount)) return out;\n for (let i = tabBarOverflowSlot; i < itemCount; i++) out.push(i);\n return out;\n}\n\nconst withState = (state: G9TabBarState, patch: Partial<G9TabBarState>): G9TabBarState => ({ ...state, ...patch });\n\n/** Initial state from `defaultSelectedIndex` (MAUI `ApplyDefaultSelectedIndex`). */\nexport function initialTabBarState(config: G9TabBarConfig, defaultSelectedIndex: number): G9TabBarState {\n const base: G9TabBarState = { selectedIndex: 0, isCenterFloating: false, isFabOpen: false, isOverflowOpen: false };\n if (config.itemCount <= 0) return base;\n const index = Math.min(Math.max(defaultSelectedIndex, 0), config.itemCount - 1);\n const fab = resolveTabBarFabIndex(config.fabIndex, config.itemCount);\n return { ...base, selectedIndex: index, isCenterFloating: fab >= 0 && index === fab };\n}\n\n/** A tap on a bar slot item (MAUI `OnBottomItemTapped`). */\nexport function tabBarItemTap(state: G9TabBarState, config: G9TabBarConfig, index: number): G9TabBarTransition {\n if (index < 0 || index >= config.itemCount) return { state, effect: null };\n let next = withState(state, { isOverflowOpen: false });\n const fab = resolveTabBarFabIndex(config.fabIndex, config.itemCount);\n if (fab >= 0 && index === fab) {\n next = withState(next, { selectedIndex: index });\n next = next.isCenterFloating\n ? withState(next, { isFabOpen: !next.isFabOpen })\n : withState(next, { isCenterFloating: true, isFabOpen: false });\n return { state: next, effect: { index, isSubMenuItem: false } };\n }\n next = withState(next, { selectedIndex: index, isFabOpen: false });\n if (config.resetCenterOnMenuSelection) next = withState(next, { isCenterFloating: false });\n return { state: next, effect: { index, isSubMenuItem: false } };\n}\n\n/** A tap on the floating FAB that nobody handled (MAUI `OnFabTapped` after `FabTapped`). */\nexport function tabBarFabTap(state: G9TabBarState, config: G9TabBarConfig): G9TabBarTransition {\n let next = withState(state, { isOverflowOpen: false });\n const fab = resolveTabBarFabIndex(config.fabIndex, config.itemCount);\n if (fab >= 0) next = withState(next, { selectedIndex: fab });\n if (!next.isCenterFloating)\n return { state: withState(next, { isCenterFloating: true, isFabOpen: false }), effect: null };\n return { state: withState(next, { isFabOpen: !next.isFabOpen }), effect: null };\n}\n\n/** A tap on a sub-menu cell (MAUI `OnSubMenuItemTapped`): runs it and closes the row; the selection stays. */\nexport function tabBarSubMenuTap(state: G9TabBarState, config: G9TabBarConfig, index: number): G9TabBarTransition {\n if (index < 0 || index >= config.subMenuCount) return { state, effect: null };\n return { state: withState(state, { isFabOpen: false }), effect: { index, isSubMenuItem: true } };\n}\n\n/** A tap on the More trigger (MAUI `OnOverflowTriggerTapped`): toggles the column, closing the FAB row. */\nexport function tabBarOverflowTriggerTap(state: G9TabBarState, config: G9TabBarConfig): G9TabBarTransition {\n if (!tabBarHasOverflow(config.itemCount)) return { state, effect: null };\n return { state: withState(state, { isFabOpen: false, isOverflowOpen: !state.isOverflowOpen }), effect: null };\n}\n\n/** A tap on an overflow item (MAUI `OnOverflowItemTapped`): selects its source index and closes everything. */\nexport function tabBarOverflowItemTap(state: G9TabBarState, config: G9TabBarConfig, index: number): G9TabBarTransition {\n if (index < 0 || index >= config.itemCount) return { state, effect: null };\n let next = withState(state, { selectedIndex: index, isOverflowOpen: false, isFabOpen: false });\n if (config.resetCenterOnMenuSelection) next = withState(next, { isCenterFloating: false });\n return { state: next, effect: { index, isSubMenuItem: false } };\n}\n\n/** A tap on the backdrop (MAUI `OnBackdropTapped`): closes both menus; the selection stays. */\nexport function tabBarBackdropTap(state: G9TabBarState, config: G9TabBarConfig): G9TabBarState {\n const fab = resolveTabBarFabIndex(config.fabIndex, config.itemCount);\n let next = withState(state, { isFabOpen: false, isOverflowOpen: false });\n if (next.isCenterFloating && config.resetCenterOnMenuSelection && fab < 0) {\n next = withState(next, { isCenterFloating: false });\n }\n return next;\n}\n\n/**\n * A selection written in code brings the FAB state with it (MAUI `ReconcileFabStateWithSelection`): the FAB tab\n * selected floats the FAB (closed); another tab returns it to the bar when `resetCenterOnMenuSelection`. With no FAB\n * (index -1, out of range, folded into the overflow) nothing floats (MAUI `ResetFabStateIfNoFab`).\n */\nexport function reconcileTabBarState(state: G9TabBarState, config: G9TabBarConfig): G9TabBarState {\n const fab = resolveTabBarFabIndex(config.fabIndex, config.itemCount);\n let next = state;\n if (config.itemCount > 0) {\n const clamped = Math.min(Math.max(next.selectedIndex, 0), config.itemCount - 1);\n if (clamped !== next.selectedIndex) next = withState(next, { selectedIndex: clamped });\n }\n if (!tabBarHasOverflow(config.itemCount) && next.isOverflowOpen) next = withState(next, { isOverflowOpen: false });\n if (fab < 0) {\n return next.isCenterFloating || next.isFabOpen\n ? withState(next, { isCenterFloating: false, isFabOpen: false })\n : next;\n }\n if (next.selectedIndex === fab) {\n return next.isCenterFloating ? next : withState(next, { isCenterFloating: true, isFabOpen: false });\n }\n if (!config.resetCenterOnMenuSelection) return next;\n return next.isCenterFloating || next.isFabOpen\n ? withState(next, { isCenterFloating: false, isFabOpen: false })\n : next;\n}\n\n/** Slot the selection pill sits on: the More trigger for an overflow selection; -1 while the FAB carries it. */\nexport function tabBarIndicatorSlot(state: G9TabBarState, config: G9TabBarConfig): number {\n if (config.itemCount <= 0) return -1;\n const fab = resolveTabBarFabIndex(config.fabIndex, config.itemCount);\n if (fab >= 0 && state.selectedIndex === fab && state.isCenterFloating) return -1;\n if (tabBarHasOverflow(config.itemCount) && state.selectedIndex >= tabBarOverflowSlot) return tabBarOverflowSlot;\n return state.selectedIndex;\n}\n\n/** Reserved control height for the state (compact, floating FAB, open sub-menu row), in the config's style. */\nexport function tabBarReservedHeight(state: G9TabBarState, config: G9TabBarConfig): number {\n const m = g9TabBarStyleMetrics.for(config.barStyle);\n if (state.isOverflowOpen && tabBarHasOverflow(config.itemCount)) {\n const count = config.itemCount - tabBarOverflowSlot;\n return (\n M.barBottomGap +\n m.barHeight +\n M.overflowAboveBarGap +\n count * (M.overflowItemSize + M.overflowItemSpacing) +\n M.chromeShadowPadding\n );\n }\n if (state.isFabOpen) return m.computeOpenControlHeight(config.subMenuCount);\n if (state.isCenterFloating && resolveTabBarFabIndex(config.fabIndex, config.itemCount) >= 0) {\n return m.floatingControlHeight;\n }\n return m.compactControlHeight;\n}\n\n/**\n * Centre x of a logical slot inside a control `width` wide (RTL mirrors). The slots share the drawn bar minus the\n * style's `itemsHorizontalPadding` (MAUI `ResolveSlotSpan`), so items, the FAB and the overflow column agree.\n */\nexport function tabBarSlotCenterX(\n slot: number,\n slotCount: number,\n width: number,\n rtl: boolean,\n itemsHorizontalPadding = 0,\n): number {\n const left = M.barHorizontalGap + itemsHorizontalPadding;\n const inner = Math.max(width - left * 2, 0);\n const visual = rtl ? slotCount - 1 - slot : slot;\n return left + ((visual + 0.5) * inner) / Math.max(slotCount, 1);\n}\n\n/**\n * Clamps a notch centre so the whole notch (and the corner radius beside it) fits on the bar `[barLeft, barRight]`\n * (MAUI `G9TabBarOutline.ClampNotchCenter`); unchanged when the bar is too narrow to clamp. `progress` (0..1) scales the\n * notch's half-width.\n */\nexport function clampTabBarNotchCenter(\n style: G9TabBarStyle,\n barLeft: number,\n barRight: number,\n centerX: number,\n progress = 1,\n): number {\n const m = g9TabBarStyleMetrics.for(style);\n const half = m.notchHalfWidth * Math.min(Math.max(progress, 0), 1);\n const min = barLeft + half + m.barTopRadius + 2;\n const max = barRight - half - m.barTopRadius - 2;\n return min < max ? Math.min(Math.max(centerX, min), max) : centerX;\n}\n\n/**\n * Centre x of the FAB (MAUI `ResolveFabCenterX`): its slot's centre, clamped exactly as the notch is, so the FAB and its\n * notch can never part company near the bar's ends.\n */\nexport function tabBarFabCenterX(\n fabIndex: number,\n slotCount: number,\n width: number,\n rtl: boolean,\n style: G9TabBarStyle = 'classic',\n): number {\n const m = g9TabBarStyleMetrics.for(style);\n const raw = tabBarSlotCenterX(fabIndex, slotCount, width, rtl, m.itemsHorizontalPadding);\n return clampTabBarNotchCenter(style, M.barHorizontalGap, width - M.barHorizontalGap, raw);\n}\n\n/** Stagger rank from the centre outward (0 for the middle cell(s)). */\nexport function centerOutwardRank(index: number, count: number): number {\n const distance = Math.abs(index - (count - 1) / 2);\n return Math.round(count % 2 === 0 ? distance - 0.5 : distance);\n}\n\n/** Layout of the sub-menu row: left edge of the row and per-cell x and reveal delay, edge-guarded inside `width`. */\nexport function subMenuRowLayout(\n count: number,\n fabCenterX: number,\n width: number,\n): { readonly left: number; readonly cells: ReadonlyArray<{ readonly x: number; readonly delayMs: number }> } {\n const size = M.subMenuRowItemSize;\n const rowWidth = count * size + Math.max(count - 1, 0) * M.subMenuRowSpacing;\n const max = width - M.subMenuRowEdgeGuard - rowWidth;\n const left = Math.max(M.subMenuRowEdgeGuard, Math.min(fabCenterX - rowWidth / 2, max));\n const cells: Array<{ x: number; delayMs: number }> = [];\n for (let i = 0; i < count; i++) {\n const fraction = Math.min(centerOutwardRank(i, count) * M.subMenuRowStaggerStep, M.subMenuRowStaggerCap);\n cells.push({ x: i * (size + M.subMenuRowSpacing), delayMs: Math.round(fraction * M.openStateDurationMs) });\n }\n return { left, cells };\n}\n\n/** Overflow column: centre x (edge-guarded) and per-item bottom offset and delay, closest to the trigger first. */\nexport function overflowColumnLayout(\n count: number,\n triggerCenterX: number,\n width: number,\n style: G9TabBarStyle = 'classic',\n): { readonly left: number; readonly items: ReadonlyArray<{ readonly bottom: number; readonly delayMs: number }> } {\n const size = M.overflowItemSize;\n const barHeight = g9TabBarStyleMetrics.for(style).barHeight;\n const left = Math.max(M.overflowEdgeGuard, Math.min(triggerCenterX - size / 2, width - M.overflowEdgeGuard - size));\n const items: Array<{ bottom: number; delayMs: number }> = [];\n for (let k = 0; k < count; k++) {\n const fraction = Math.min(k * M.overflowRevealStaggerStep, M.overflowRevealStaggerCap);\n items.push({\n bottom: M.barBottomGap + barHeight + M.overflowAboveBarGap + k * (size + M.overflowItemSpacing),\n delayMs: Math.round(fraction * M.overflowStateDurationMs),\n });\n }\n return { left, items };\n}\n\nconst n = (value: number) => Number(value.toFixed(2));\n\n/**\n * The Sculpted outline (MAUI `G9TabBarOutline.Build` with the cradle notch), traced exactly as MAUI traces it:\n * quadratic corners, and the cradle's three cubics (shoulder, bowl, shoulder) scaled by `progress × cradleScale` from\n * the clamped notch centre, so at 0 it collapses onto a flat top edge. `ox`/`oy` move the whole outline (the shadow\n * padding of the SVG).\n */\nfunction sculptedOutline(\n width: number,\n height: number,\n notchCenterX: number | null,\n progress: number,\n ox = 0,\n oy = 0,\n): string {\n const m = g9TabBarStyleMetrics.sculpted;\n const p = Math.min(Math.max(progress, 0), 1);\n const topR = m.barTopRadius;\n const botR = m.barBottomRadius;\n const x = (v: number) => n(ox + v);\n const y = (v: number) => n(oy + v);\n const parts = [`M ${x(0)} ${y(topR)}`, `Q ${x(0)} ${y(0)} ${x(topR)} ${y(0)}`];\n if (notchCenterX !== null && p > 0.001) {\n const cx = clampTabBarNotchCenter('sculpted', 0, width, notchCenterX, p);\n const k = p * m.cradleScale;\n const d = tabBarCradleDesign;\n const X = (dx: number) => x(cx + dx * k);\n const Y = (dy: number) => y(dy * k);\n parts.push(\n `L ${X(-d.halfWidth)} ${y(0)}`,\n `C ${X(-d.shoulderHandleX)} ${y(0)} ${X(-d.shoulderInnerX)} ${Y(d.shoulderInnerY)} ${X(-d.shoulderEndX)} ${Y(d.shoulderEndY)}`,\n `C ${X(-d.bowlHandleX)} ${Y(d.bowlHandleY)} ${X(d.bowlHandleX)} ${Y(d.bowlHandleY)} ${X(d.shoulderEndX)} ${Y(d.shoulderEndY)}`,\n `C ${X(d.shoulderInnerX)} ${Y(d.shoulderInnerY)} ${X(d.shoulderHandleX)} ${y(0)} ${X(d.halfWidth)} ${y(0)}`,\n );\n }\n parts.push(\n `L ${x(width - topR)} ${y(0)}`,\n `Q ${x(width)} ${y(0)} ${x(width)} ${y(topR)}`,\n `L ${x(width)} ${y(height - botR)}`,\n `Q ${x(width)} ${y(height)} ${x(width - botR)} ${y(height)}`,\n `L ${x(botR)} ${y(height)}`,\n `Q ${x(0)} ${y(height)} ${x(0)} ${y(height - botR)}`,\n 'Z',\n );\n return parts.join(' ');\n}\n\n/**\n * The bar outline as an SVG path, in the bar's own coordinates (MAUI `G9TabBarChromeDrawable` / `G9TabBarOutline`).\n * Classic: a rounded rectangle with a semicircular notch of radius `notchCircleRadius` around `notchCenterX` when set;\n * `notchDepth` (0..1) scales its depth. Sculpted: 24 px quadratic corners and the S-shouldered cradle, clamped like the\n * FAB (`clampTabBarNotchCenter`); `notchDepth` grows the cradle from its centre, as MAUI's notch progress does.\n */\nexport function tabBarChromePath(\n width: number,\n height: number,\n notchCenterX: number | null,\n notchDepth = 1,\n style: G9TabBarStyle = 'classic',\n): string {\n if (style === 'sculpted') return sculptedOutline(width, height, notchCenterX, notchDepth);\n const r = Math.min(M.barTopRadius, height / 2, width / 2);\n const rb = Math.min(M.barBottomRadius, height / 2, width / 2);\n const parts = [`M ${n(r)} 0`];\n if (notchCenterX !== null && notchDepth > 0) {\n const R = M.notchCircleRadius;\n const cx = Math.max(r + R, Math.min(notchCenterX, width - r - R));\n parts.push(`L ${n(cx - R)} 0`, `A ${n(R)} ${n(R * Math.min(notchDepth, 1))} 0 0 0 ${n(cx + R)} 0`);\n }\n parts.push(\n `L ${n(width - r)} 0`,\n `A ${n(r)} ${n(r)} 0 0 1 ${n(width)} ${n(r)}`,\n `L ${n(width)} ${n(height - rb)}`,\n `A ${n(rb)} ${n(rb)} 0 0 1 ${n(width - rb)} ${n(height)}`,\n `L ${n(rb)} ${n(height)}`,\n `A ${n(rb)} ${n(rb)} 0 0 1 0 ${n(height - rb)}`,\n `L 0 ${n(r)}`,\n `A ${n(r)} ${n(r)} 0 0 1 ${n(r)} 0`,\n 'Z',\n );\n return parts.join(' ');\n}\n\nconst svgDoc = (w: number, h: number, body: string) =>\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"${n(w)}\" height=\"${n(h)}\" viewBox=\"0 0 ${n(w)} ${n(h)}\">${body}</svg>`;\n\n/** The blur filter of a shadow recipe: a Gaussian of the recipe's sigma over a region wide enough for its halo. */\nconst blurFilter = (sigma: number) =>\n `<defs><filter id=\"g9tb-shadow\" x=\"-25%\" y=\"-50%\" width=\"150%\" height=\"200%\"><feGaussianBlur stdDeviation=\"${sigma}\"/></filter></defs>`;\n\n/**\n * The chrome as an `<svg content>` document. Classic (`width` × `height`): the fill plus the 1 px top-edge glass\n * highlight. Sculpted: the opaque fill without a highlight, over the bar's own outline blurred into its shadow\n * (MAUI's Skia recipe, `g9TabBarStyleMetrics.sculpted.shadow`); the document is `chromeShadowPadding` larger on every\n * side so the halo is not clipped, and is placed that far up and left of the bar.\n */\nexport function tabBarChromeSvg(\n width: number,\n height: number,\n notchCenterX: number | null,\n fill: string,\n stroke: string,\n style: G9TabBarStyle = 'classic',\n): string {\n if (style === 'sculpted') {\n const shadow = g9TabBarStyleMetrics.sculpted.shadow as NonNullable<G9TabBarStyleMetrics['shadow']>;\n const pad = M.chromeShadowPadding;\n const halo = sculptedOutline(width, height, notchCenterX, 1, pad, pad + shadow.offsetY);\n const body = sculptedOutline(width, height, notchCenterX, 1, pad, pad);\n return svgDoc(\n width + pad * 2,\n height + pad * 2,\n `${blurFilter(shadow.blurSigma)}<path d=\"${halo}\" fill=\"#000000\" fill-opacity=\"${shadow.alpha}\" filter=\"url(#g9tb-shadow)\"/><path d=\"${body}\" fill=\"${fill}\"/>`,\n );\n }\n const d = tabBarChromePath(width, height, notchCenterX);\n return svgDoc(\n width,\n height,\n `<path d=\"${d}\" fill=\"${fill}\" stroke=\"${stroke}\" stroke-width=\"${M.barTopHighlightStrokeSize}\"/>`,\n );\n}\n\n/**\n * The FAB disc's shadow as an `<svg content>` document `fabSize + 2 × chromeShadowPadding` square, placed that far up\n * 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\n * and visibility). `null` when the style paints no shadow.\n */\nexport function tabBarFabShadowSvg(style: G9TabBarStyle = 'classic'): string | null {\n const m = g9TabBarStyleMetrics.for(style);\n if (!m.shadow) return null;\n const pad = M.chromeShadowPadding;\n const size = m.fabSize + pad * 2;\n const c = size / 2;\n return svgDoc(\n size,\n size,\n `${blurFilter(m.shadow.blurSigma)}<circle cx=\"${n(c)}\" cy=\"${n(c + m.shadow.offsetY + m.shadow.fabOffsetY)}\" r=\"${n(m.shadow.fabDiameter / 2)}\" fill=\"#000000\" fill-opacity=\"${m.shadow.fabAlpha}\" filter=\"url(#g9tb-shadow)\"/>`,\n );\n}\n\n/**\n * The FAB's plus (MAUI `G9FabPlusIconDrawable`) as an `<svg content>` document `size` square: two round-capped bars,\n * each arm `size × armRatio` from the centre, `max(2, size × strokeRatio)` thick, in `color` (a literal colour).\n */\nexport function tabBarFabPlusSvg(size: number, armRatio: number, strokeRatio: number, color: string): string {\n const c = size / 2;\n const arm = size * armRatio;\n const stroke = Math.max(2, size * strokeRatio);\n return svgDoc(\n size,\n size,\n `<path d=\"M ${n(c - arm)} ${n(c)} L ${n(c + arm)} ${n(c)} M ${n(c)} ${n(c - arm)} L ${n(c)} ${n(c + arm)}\" fill=\"none\" stroke=\"${color}\" stroke-width=\"${n(stroke)}\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>`,\n );\n}\n"],"names":["g9TabBarItem","text","icon","extra","Number","tabBarHasOverflow","itemCount","M","tabBarOverflowSlot","resolveTabBarFabIndex","fabIndex","tabBarSlots","overflow","visible","slots","i","tabBarOverflowIndices","out","withState","state","patch","initialTabBarState","config","defaultSelectedIndex","base","index","Math","fab","tabBarItemTap","next","tabBarFabTap","tabBarSubMenuTap","tabBarOverflowTriggerTap","tabBarOverflowItemTap","tabBarBackdropTap","reconcileTabBarState","clamped","tabBarIndicatorSlot","tabBarReservedHeight","m","g9TabBarStyleMetrics","count","tabBarSlotCenterX","slot","slotCount","width","rtl","itemsHorizontalPadding","left","inner","visual","clampTabBarNotchCenter","style","barLeft","barRight","centerX","progress","half","min","max","tabBarFabCenterX","raw","centerOutwardRank","distance","subMenuRowLayout","fabCenterX","size","rowWidth","cells","fraction","overflowColumnLayout","triggerCenterX","barHeight","items","k","n","value","sculptedOutline","height","notchCenterX","ox","oy","p","topR","botR","x","v","y","parts","cx","d","tabBarCradleDesign","X","dx","Y","dy","tabBarChromePath","notchDepth","r","rb","R","svgDoc","w","h","body","blurFilter","sigma","tabBarChromeSvg","fill","stroke","shadow","pad","halo","tabBarFabShadowSvg","c","tabBarFabPlusSvg","armRatio","strokeRatio","color","arm"],"mappings":"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"}
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
.g9-tab-bar {
|
|
2
|
+
width: 100%;
|
|
3
|
+
position: relative;
|
|
4
|
+
overflow: visible;
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
.g9-tab-bar__backdrop {
|
|
8
|
+
position: absolute;
|
|
9
|
+
bottom: 0;
|
|
10
|
+
left: 0;
|
|
11
|
+
right: 0;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
.g9-tab-bar__chrome {
|
|
15
|
+
height: 62px;
|
|
16
|
+
position: absolute;
|
|
17
|
+
bottom: 14px;
|
|
18
|
+
left: 14px;
|
|
19
|
+
right: 14px;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
.g9-tab-bar__chrome-flat, .g9-tab-bar__chrome-notched {
|
|
23
|
+
width: 100%;
|
|
24
|
+
height: 62px;
|
|
25
|
+
position: absolute;
|
|
26
|
+
top: 0;
|
|
27
|
+
left: 0;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
.g9-tab-bar__slots {
|
|
31
|
+
flex-direction: row;
|
|
32
|
+
display: flex;
|
|
33
|
+
position: absolute;
|
|
34
|
+
top: 0;
|
|
35
|
+
bottom: 0;
|
|
36
|
+
left: 0;
|
|
37
|
+
right: 0;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
.g9-tab-bar__indicator {
|
|
41
|
+
background-color: var(--g9-primary-container);
|
|
42
|
+
border-radius: 13px;
|
|
43
|
+
width: 48px;
|
|
44
|
+
height: 32px;
|
|
45
|
+
margin-left: -24px;
|
|
46
|
+
position: absolute;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
.g9-tab-bar__slot {
|
|
50
|
+
flex: 1;
|
|
51
|
+
justify-content: center;
|
|
52
|
+
align-items: center;
|
|
53
|
+
padding: 0 6px;
|
|
54
|
+
display: flex;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
.g9-tab-bar__slot-body {
|
|
58
|
+
flex-direction: column;
|
|
59
|
+
justify-content: center;
|
|
60
|
+
align-items: center;
|
|
61
|
+
display: flex;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
.g9-tab-bar__label {
|
|
65
|
+
text-align: center;
|
|
66
|
+
text-overflow: ellipsis;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
.g9-tab-bar__fab {
|
|
70
|
+
background-color: var(--g9-surface-container-high);
|
|
71
|
+
border: 1px solid var(--g9-outline-variant);
|
|
72
|
+
border-radius: 36px;
|
|
73
|
+
justify-content: center;
|
|
74
|
+
align-items: center;
|
|
75
|
+
width: 72px;
|
|
76
|
+
height: 72px;
|
|
77
|
+
display: flex;
|
|
78
|
+
position: absolute;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
.g9-tab-bar__fab-inner {
|
|
82
|
+
background-color: var(--g9-primary);
|
|
83
|
+
border-radius: 28px;
|
|
84
|
+
justify-content: center;
|
|
85
|
+
align-items: center;
|
|
86
|
+
width: 56px;
|
|
87
|
+
height: 56px;
|
|
88
|
+
display: flex;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
.g9-tab-bar__fab-icon {
|
|
92
|
+
justify-content: center;
|
|
93
|
+
align-items: center;
|
|
94
|
+
display: flex;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
.g9-tab-bar__fab-shadow {
|
|
98
|
+
position: absolute;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
.g9-tab-bar__chrome-flat, .g9-tab-bar__chrome-notched, .g9-tab-bar__fab-shadow {
|
|
102
|
+
pointer-events: none;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
.g9-tab-bar__submenu {
|
|
106
|
+
position: absolute;
|
|
107
|
+
overflow: visible;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
.g9-tab-bar__overflow {
|
|
111
|
+
width: 56px;
|
|
112
|
+
position: absolute;
|
|
113
|
+
top: 0;
|
|
114
|
+
bottom: 0;
|
|
115
|
+
overflow: visible;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
.g9-tab-bar__submenu-cell, .g9-tab-bar__overflow-item {
|
|
119
|
+
background-color: var(--g9-surface-container-high);
|
|
120
|
+
border: 1px solid var(--g9-outline-variant);
|
|
121
|
+
border-radius: 18px;
|
|
122
|
+
flex-direction: column;
|
|
123
|
+
justify-content: center;
|
|
124
|
+
align-items: center;
|
|
125
|
+
display: flex;
|
|
126
|
+
position: absolute;
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
.g9-tab-bar__overflow-item--selected {
|
|
130
|
+
background-color: var(--g9-primary);
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
.g9-tab-bar__cell-accent {
|
|
134
|
+
background-color: var(--g9-primary-container);
|
|
135
|
+
border-radius: 22px;
|
|
136
|
+
justify-content: center;
|
|
137
|
+
align-items: center;
|
|
138
|
+
width: 44px;
|
|
139
|
+
height: 44px;
|
|
140
|
+
display: flex;
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
.g9-tab-bar__overflow-item .g9-tab-bar__cell-accent {
|
|
144
|
+
background-color: #0000;
|
|
145
|
+
width: 32px;
|
|
146
|
+
height: 32px;
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
.g9-tab-bar__cell-label {
|
|
150
|
+
text-align: center;
|
|
151
|
+
text-overflow: ellipsis;
|
|
152
|
+
margin-top: 1px;
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
.g9-tab-bar--sculpted .g9-tab-bar__chrome, .g9-tab-bar--sculpted .g9-tab-bar__fab {
|
|
156
|
+
overflow: visible;
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
.g9-tab-bar--sculpted .g9-tab-bar__fab {
|
|
160
|
+
background-color: #0000;
|
|
161
|
+
border-width: 0;
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
.g9-tab-bar--sculpted .g9-tab-bar__submenu-cell, .g9-tab-bar--sculpted .g9-tab-bar__overflow-item {
|
|
165
|
+
background-color: var(--g9-card-background);
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
.g9-tab-bar--sculpted .g9-tab-bar__overflow-item--selected, .g9-tab-bar--sculpted .g9-tab-bar__submenu-cell .g9-tab-bar__cell-accent {
|
|
169
|
+
background-color: var(--g9-primary);
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
|
|
173
|
+
/*# sourceMappingURL=tab-bar.css.map */
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["webpack://./src/tab-bar/tab-bar.css"],"names":[],"mappings":"AAGA;EAFE,WAAW;EACX,kBAAkB;EAClB,iBAAiB;AACnB;;AAKA;EAFE,kBAAkB;EAClB,SAAS;EACT,OAAO;EACP,QAAQ;AACV;;AAKA;EAFE,YAAY;EACZ,kBAAkB;EAClB,YAAY;EACZ,UAAU;EACV,WAAW;AACb;;AAKA;EAFE,WAAW;EACX,YAAY;EACZ,kBAAkB;EAClB,MAAM;EACN,OAAO;AACT;;AAMA;EAHE,mBAAmB;EACnB,aAAa;EACb,kBAAkB;EAClB,MAAM;EACN,SAAS;EACT,OAAO;EACP,QAAQ;AACV;;AAMA;EAHE,6CAA6C;EAC7C,mBAAmB;EACnB,WAAW;EACX,YAAY;EACZ,kBAAkB;EAClB,kBAAkB;AACpB;;AAMA;EAHE,OAAO;EACP,uBAAuB;EACvB,mBAAmB;EACnB,cAAc;EACd,aAAa;AACf;;AAMA;EAHE,sBAAsB;EACtB,uBAAuB;EACvB,mBAAmB;EACnB,aAAa;AACf;;AAMA;EAHE,kBAAkB;EAClB,uBAAuB;AACzB;;AAMA;EAHE,kDAAkD;EAClD,2CAA2C;EAC3C,mBAAmB;EACnB,uBAAuB;EACvB,mBAAmB;EACnB,WAAW;EACX,YAAY;EACZ,aAAa;EACb,kBAAkB;AACpB;;AAMA;EAHE,mCAAmC;EACnC,mBAAmB;EACnB,uBAAuB;EACvB,mBAAmB;EACnB,WAAW;EACX,YAAY;EACZ,aAAa;AACf;;AAMA;EAHE,uBAAuB;EACvB,mBAAmB;EACnB,aAAa;AACf;;AAOA;EAJE,kBAAkB;AACpB;;AASA;EANE,oBAAoB;AACtB;;AAWA;EARE,kBAAkB;EAClB,iBAAiB;AACnB;;AAWA;EARE,WAAW;EACX,kBAAkB;EAClB,MAAM;EACN,SAAS;EACT,iBAAiB;AACnB;;AAWA;EARE,kDAAkD;EAClD,2CAA2C;EAC3C,mBAAmB;EACnB,sBAAsB;EACtB,uBAAuB;EACvB,mBAAmB;EACnB,aAAa;EACb,kBAAkB;AACpB;;AAYA;EATE,mCAAmC;AACrC;;AAYA;EATE,6CAA6C;EAC7C,mBAAmB;EACnB,uBAAuB;EACvB,mBAAmB;EACnB,WAAW;EACX,YAAY;EACZ,aAAa;AACf;;AAYA;EATE,uBAAuB;EACvB,WAAW;EACX,YAAY;AACd;;AAYA;EATE,kBAAkB;EAClB,uBAAuB;EACvB,eAAe;AACjB;;AAcA;EAXE,iBAAiB;AACnB;;AAeA;EAZE,uBAAuB;EACvB,eAAe;AACjB;;AAeA;EAZE,2CAA2C;AAC7C;;AAgBA;EAbE,mCAAmC;AACrC","sourcesContent":["/* G9TabBar (MAUI G9TabBar): chrome with a notch, floating FAB, sub-menu row, overflow column. Classic: flat glass,\n no shadow. Sculpted (g9-tab-bar--sculpted): the shadow is painted inside the chrome and FAB SVGs, never box-shadow\n (plan/specs/02 §2). Sizes that differ per style are set inline from g9TabBarStyleMetrics. */\n.g9-tab-bar {\n position: relative;\n width: 100%;\n overflow: visible;\n}\n\n.g9-tab-bar__backdrop {\n position: absolute;\n left: 0;\n right: 0;\n bottom: 0;\n}\n\n.g9-tab-bar__chrome {\n position: absolute;\n left: 14px;\n right: 14px;\n bottom: 14px;\n height: 62px;\n}\n\n.g9-tab-bar__chrome-flat,\n.g9-tab-bar__chrome-notched {\n position: absolute;\n left: 0;\n top: 0;\n width: 100%;\n height: 62px;\n}\n\n.g9-tab-bar__slots {\n position: absolute;\n left: 0;\n right: 0;\n top: 0;\n bottom: 0;\n display: flex;\n flex-direction: row;\n}\n\n.g9-tab-bar__indicator {\n position: absolute;\n width: 48px;\n height: 32px;\n margin-left: -24px;\n border-radius: 13px;\n background-color: var(--g9-primary-container);\n}\n\n.g9-tab-bar__slot {\n flex: 1;\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 0 6px;\n}\n\n.g9-tab-bar__slot-body {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n}\n\n.g9-tab-bar__label {\n text-align: center;\n text-overflow: ellipsis;\n}\n\n.g9-tab-bar__fab {\n position: absolute;\n width: 72px;\n height: 72px;\n border-radius: 36px;\n display: flex;\n align-items: center;\n justify-content: center;\n background-color: var(--g9-surface-container-high);\n border: 1px solid var(--g9-outline-variant);\n}\n\n.g9-tab-bar__fab-inner {\n width: 56px;\n height: 56px;\n border-radius: 28px;\n display: flex;\n align-items: center;\n justify-content: center;\n background-color: var(--g9-primary);\n}\n\n.g9-tab-bar__fab-icon {\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n/* The FAB disc's shadow: painted first, so the disc covers it; larger than the FAB box on every side. */\n.g9-tab-bar__fab-shadow {\n position: absolute;\n}\n\n/* Paint only: the chrome and shadow SVGs never take a touch (the Sculpted ones reach 14 px past their boxes, where a\n tap belongs to the backdrop or the page). Items, the FAB box and the backdrop handle every tap. */\n.g9-tab-bar__chrome-flat,\n.g9-tab-bar__chrome-notched,\n.g9-tab-bar__fab-shadow {\n pointer-events: none;\n}\n\n.g9-tab-bar__submenu {\n position: absolute;\n overflow: visible;\n}\n\n.g9-tab-bar__overflow {\n position: absolute;\n top: 0;\n bottom: 0;\n width: 56px;\n overflow: visible;\n}\n\n.g9-tab-bar__submenu-cell,\n.g9-tab-bar__overflow-item {\n position: absolute;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n border-radius: 18px;\n background-color: var(--g9-surface-container-high);\n border: 1px solid var(--g9-outline-variant);\n}\n\n.g9-tab-bar__overflow-item--selected {\n background-color: var(--g9-primary);\n}\n\n.g9-tab-bar__cell-accent {\n width: 44px;\n height: 44px;\n border-radius: 22px;\n display: flex;\n align-items: center;\n justify-content: center;\n background-color: var(--g9-primary-container);\n}\n\n.g9-tab-bar__overflow-item .g9-tab-bar__cell-accent {\n width: 32px;\n height: 32px;\n background-color: transparent;\n}\n\n.g9-tab-bar__cell-label {\n margin-top: 1px;\n text-align: center;\n text-overflow: ellipsis;\n}\n\n/* Sculpted (MAUI 1.4.0): the chrome and FAB SVGs carry their shadows past their boxes; the FAB box is a transparent\n tap target around the flat primary disc; menu cells use the opaque bar surface, sub-menu accents are solid primary. */\n.g9-tab-bar--sculpted .g9-tab-bar__chrome,\n.g9-tab-bar--sculpted .g9-tab-bar__fab {\n overflow: visible;\n}\n\n.g9-tab-bar--sculpted .g9-tab-bar__fab {\n background-color: transparent;\n border-width: 0;\n}\n\n.g9-tab-bar--sculpted .g9-tab-bar__submenu-cell,\n.g9-tab-bar--sculpted .g9-tab-bar__overflow-item {\n background-color: var(--g9-card-background);\n}\n\n.g9-tab-bar--sculpted .g9-tab-bar__overflow-item--selected {\n background-color: var(--g9-primary);\n}\n\n.g9-tab-bar--sculpted .g9-tab-bar__submenu-cell .g9-tab-bar__cell-accent {\n background-color: var(--g9-primary);\n}\n"],"sourceRoot":""}
|