@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,205 @@
|
|
|
1
|
+
import "./sheet.css";
|
|
2
|
+
import { createAbortController, formatColor, tryParseColor, withAlpha } from "@g9tm/lynxcontrols-foundation";
|
|
3
|
+
import { SheetContent, SheetHandle, SheetRoot, SheetView } from "@lynx-js/lynx-ui-sheet";
|
|
4
|
+
import { createContext, useContext, useEffect, useRef, useState } from "@lynx-js/react";
|
|
5
|
+
import { startTimer, stopTimer } from "../base/timers.jsx";
|
|
6
|
+
import { G9ActivityIndicator } from "../display/activity-indicator.jsx";
|
|
7
|
+
import { G9SheetSkeleton } from "../display/shimmer.jsx";
|
|
8
|
+
import { G9SheetFooter, G9SheetHeader, g9SheetHeaderMetrics } from "./header.jsx";
|
|
9
|
+
import { clampFitHeight, currentPlatform, g9SheetDragCloseThreshold, g9SheetFitLoadingMinHeight, parentRecedeOffset, platformSheetConstraints, resolveSheetLayout, scaledSheetDuration, sheetOverlayOpacity, sheetTopPadding } from "./sizing.jsx";
|
|
10
|
+
const SheetContext = createContext(null);
|
|
11
|
+
function useG9SheetContext() {
|
|
12
|
+
return useContext(SheetContext);
|
|
13
|
+
}
|
|
14
|
+
function scrimColor(entry, settings, opacity) {
|
|
15
|
+
const explicit = entry.options.windowBackgroundColor;
|
|
16
|
+
const parsed = tryParseColor(null != explicit ? explicit : settings.modalOverlayColor);
|
|
17
|
+
if (!parsed) return null != explicit ? explicit : settings.modalOverlayColor;
|
|
18
|
+
return formatColor(withAlpha(parsed, explicit ? parsed.a : opacity));
|
|
19
|
+
}
|
|
20
|
+
function G9SheetFrame(props) {
|
|
21
|
+
var _ref, _o_deferredLoadingPlaceholderHeight, _o_loadingSkeletonRowCount, _ratios_layout_initialSnap, _o_openAnimationDurationMs, _o_closeAnimationDurationMs, _o_cornerRadius, _o_backgroundColor, _o_padding;
|
|
22
|
+
var _props_memo;
|
|
23
|
+
const { entry, stack, settings } = props;
|
|
24
|
+
const o = entry.options;
|
|
25
|
+
const layout = resolveSheetLayout(o, props.hostHeight);
|
|
26
|
+
const showing = 'opening' === entry.status || 'open' === entry.status;
|
|
27
|
+
const closing = 'closing' === entry.status;
|
|
28
|
+
const handle = stack.handleOf(entry.id);
|
|
29
|
+
const controller = useRef(null);
|
|
30
|
+
if (null === controller.current) controller.current = createAbortController();
|
|
31
|
+
useEffect(()=>{
|
|
32
|
+
var _controller_current;
|
|
33
|
+
if (closing || 'closed' === entry.status) null == (_controller_current = controller.current) || _controller_current.abort();
|
|
34
|
+
}, [
|
|
35
|
+
closing,
|
|
36
|
+
entry.status
|
|
37
|
+
]);
|
|
38
|
+
useEffect(()=>()=>{
|
|
39
|
+
var _controller_current;
|
|
40
|
+
return null == (_controller_current = controller.current) ? void 0 : _controller_current.abort();
|
|
41
|
+
}, []);
|
|
42
|
+
const factory = 'function' == typeof entry.content;
|
|
43
|
+
const deferred = (factory || settings.deferPrebuiltContent) && false !== o.deferContent;
|
|
44
|
+
const [revealed, setRevealed] = useState(!deferred);
|
|
45
|
+
const [covering, setCovering] = useState(false);
|
|
46
|
+
const timer = useRef(null);
|
|
47
|
+
const coverTimer = useRef(null);
|
|
48
|
+
useEffect(()=>()=>{
|
|
49
|
+
if (null !== coverTimer.current) stopTimer(coverTimer.current);
|
|
50
|
+
}, []);
|
|
51
|
+
useEffect(()=>{
|
|
52
|
+
var _o_loadDelayMs, _o_loadDelayMs1;
|
|
53
|
+
if (!deferred || revealed || 'open' !== entry.status) return;
|
|
54
|
+
const delay = layout.fullScreen ? Math.max(null != (_o_loadDelayMs = o.loadDelayMs) ? _o_loadDelayMs : 369, settings.openAnimationDurationMs + 32) : null != (_o_loadDelayMs1 = o.loadDelayMs) ? _o_loadDelayMs1 : 369;
|
|
55
|
+
timer.current = startTimer(()=>{
|
|
56
|
+
setRevealed(true);
|
|
57
|
+
if (false !== o.fadeDeferredContentIn) {
|
|
58
|
+
setCovering(true);
|
|
59
|
+
coverTimer.current = startTimer(()=>setCovering(false), 220);
|
|
60
|
+
}
|
|
61
|
+
}, delay);
|
|
62
|
+
return ()=>{
|
|
63
|
+
if (null !== timer.current) stopTimer(timer.current);
|
|
64
|
+
};
|
|
65
|
+
}, [
|
|
66
|
+
deferred,
|
|
67
|
+
revealed,
|
|
68
|
+
entry.status
|
|
69
|
+
]);
|
|
70
|
+
const memoKey = o.heightMemoKey ? `${o.heightMemoKey}|w${Math.round(props.hostWidth)}|${props.culture}|fs1` : null;
|
|
71
|
+
const placeholderHeight = o.useFullScreenLoadingPlaceholder ? props.hostHeight : null != (_ref = null != (_o_deferredLoadingPlaceholderHeight = o.deferredLoadingPlaceholderHeight) ? _o_deferredLoadingPlaceholderHeight : memoKey ? null == (_props_memo = props.memo) ? void 0 : _props_memo.lookup(memoKey) : void 0) ? _ref : g9SheetFitLoadingMinHeight;
|
|
72
|
+
const [bodyHeight, setBodyHeight] = useState(0);
|
|
73
|
+
const onBodyLayout = (e)=>{
|
|
74
|
+
var _ref;
|
|
75
|
+
var _e_detail, _props_memo;
|
|
76
|
+
const h = null != (_ref = null == (_e_detail = e.detail) ? void 0 : _e_detail.height) ? _ref : 0;
|
|
77
|
+
if (h <= 0) return;
|
|
78
|
+
setBodyHeight(h);
|
|
79
|
+
if (memoKey && revealed && !covering) null == (_props_memo = props.memo) || _props_memo.record(memoKey, h);
|
|
80
|
+
};
|
|
81
|
+
const placeholder = o.loadingSkeleton && 'none' !== o.loadingSkeleton ? <view className="g9-sheet__placeholder" style={{
|
|
82
|
+
height: `${placeholderHeight}px`
|
|
83
|
+
}}>
|
|
84
|
+
<G9SheetSkeleton skeleton={o.loadingSkeleton} rowCount={null != (_o_loadingSkeletonRowCount = o.loadingSkeletonRowCount) ? _o_loadingSkeletonRowCount : 0}/>
|
|
85
|
+
</view> : <view className="g9-sheet__placeholder g9-sheet__placeholder--spinner" style={{
|
|
86
|
+
height: `${placeholderHeight}px`
|
|
87
|
+
}}>
|
|
88
|
+
<G9ActivityIndicator running size={32}/>
|
|
89
|
+
</view>;
|
|
90
|
+
const body = revealed ? factory ? entry.content() : entry.content : null;
|
|
91
|
+
const maxBody = layout.fitMaxHeight;
|
|
92
|
+
const contextValue = {
|
|
93
|
+
handle,
|
|
94
|
+
signal: controller.current.signal,
|
|
95
|
+
opened: 'open' === entry.status,
|
|
96
|
+
closing,
|
|
97
|
+
maxBodyHeight: maxBody
|
|
98
|
+
};
|
|
99
|
+
const ratios = layout.snapPoints.map((p)=>'number' == typeof p ? p / Math.max(1, props.hostHeight) : 'fit' === p ? 0.5 : Number.parseFloat(p) / 100);
|
|
100
|
+
const restingRatio = null != (_ratios_layout_initialSnap = ratios[layout.initialSnap]) ? _ratios_layout_initialSnap : 1;
|
|
101
|
+
const opacity = entry.handingOff ? 0 : sheetOverlayOpacity(restingRatio, ratios, settings.modalOverlayMinimumOpacity, settings.modalOverlayMaximumOpacity);
|
|
102
|
+
const modal = false !== o.isModal;
|
|
103
|
+
const recede = entry.receded ? {
|
|
104
|
+
transform: `translateY(${parentRecedeOffset(bodyHeight || 0.5 * props.hostHeight)}px)`,
|
|
105
|
+
opacity: 0
|
|
106
|
+
} : {
|
|
107
|
+
transform: 'translateY(0px)',
|
|
108
|
+
opacity: 1
|
|
109
|
+
};
|
|
110
|
+
const topPadding = layout.fullScreen ? sheetTopPadding(o, props.topInset) : 0;
|
|
111
|
+
const platform = currentPlatform();
|
|
112
|
+
const openMs = null != (_o_openAnimationDurationMs = o.openAnimationDurationMs) ? _o_openAnimationDurationMs : settings.openAnimationDurationMs;
|
|
113
|
+
const closeMs = null != (_o_closeAnimationDurationMs = o.closeAnimationDurationMs) ? _o_closeAnimationDurationMs : settings.closeAnimationDurationMs;
|
|
114
|
+
const corner = 'android' === platform && true === o.androidShouldRemoveExpandedCorners && layout.fullScreen ? 0 : null != (_o_cornerRadius = o.cornerRadius) ? _o_cornerRadius : 12;
|
|
115
|
+
const easeOut = (t)=>1 - (1 - t) ** 3;
|
|
116
|
+
const timed = 'timed' === settings.motionStyle || null != o.openAnimationDurationMs || null != o.closeAnimationDurationMs;
|
|
117
|
+
const enterMs = scaledSheetDuration(openMs, restingRatio, settings.sizeScaledAnimationDuration);
|
|
118
|
+
const exitMs = scaledSheetDuration(closeMs, restingRatio, settings.sizeScaledAnimationDuration);
|
|
119
|
+
const motion = timed ? {
|
|
120
|
+
enterAnimation: {
|
|
121
|
+
type: 'tween',
|
|
122
|
+
duration: enterMs / 1000,
|
|
123
|
+
ease: easeOut
|
|
124
|
+
},
|
|
125
|
+
exitAnimation: {
|
|
126
|
+
type: 'tween',
|
|
127
|
+
duration: exitMs / 1000,
|
|
128
|
+
ease: easeOut
|
|
129
|
+
},
|
|
130
|
+
snapAnimation: {
|
|
131
|
+
type: 'tween',
|
|
132
|
+
duration: openMs / 1000,
|
|
133
|
+
ease: easeOut
|
|
134
|
+
}
|
|
135
|
+
} : {};
|
|
136
|
+
return <SheetRoot show={showing} snapPoints={layout.snapPoints} initialSnap={layout.initialSnap} screenHeight={props.hostHeight} dragDisabled={layout.dragDisabled} enableDragToClose={layout.enableDragToClose} dismissThreshold={g9SheetDragCloseThreshold} handleOnly={false === o.scrollingExpandsSheet} onShowChange={(open)=>{
|
|
137
|
+
if (!open) stack.requestBack(entry.id, 'drag');
|
|
138
|
+
}} onSnapChange={(index, value)=>{
|
|
139
|
+
var _ordered_index;
|
|
140
|
+
var _props_onRest, _o_onStateChanged;
|
|
141
|
+
const detents = (o.states && o.states.length > 0 ? o.states : [
|
|
142
|
+
'medium',
|
|
143
|
+
'large'
|
|
144
|
+
]).filter((d)=>d);
|
|
145
|
+
const ordered = [
|
|
146
|
+
'peek',
|
|
147
|
+
'medium',
|
|
148
|
+
'large'
|
|
149
|
+
].filter((d)=>detents.includes(d));
|
|
150
|
+
null == (_props_onRest = props.onRest) || _props_onRest.call(props, value);
|
|
151
|
+
null == (_o_onStateChanged = o.onStateChanged) || _o_onStateChanged.call(o, layout.fit ? 'fit' : null != (_ordered_index = ordered[index]) ? _ordered_index : 'large', value);
|
|
152
|
+
}} onOpen={()=>stack.markOpened(entry.id)} onClose={()=>stack.markClosed(entry.id)}>
|
|
153
|
+
{}
|
|
154
|
+
<SheetView className="g9-sheet__view" nativeProps={{
|
|
155
|
+
'event-through': true
|
|
156
|
+
}}>
|
|
157
|
+
{modal ? <view event-through={false} className={`g9-sheet__scrim${props.isTop && !closing ? '' : ' g9-sheet__scrim--covered'}`} style={{
|
|
158
|
+
backgroundColor: scrimColor(entry, settings, opacity),
|
|
159
|
+
transition: 'ios' === platform && false === o.animateOverlayToColorOnIos ? 'none' : `background-color ${closing ? closeMs : openMs}ms`
|
|
160
|
+
}} bindtap={()=>{
|
|
161
|
+
if (layout.closeOnOverlayTap) stack.requestBack(entry.id, 'overlayTap');
|
|
162
|
+
}}/> : null}
|
|
163
|
+
<SheetContent className={`g9-sheet g9-sheet--${entry.status}${layout.fit ? ' g9-sheet--fit' : ''}`} style={{
|
|
164
|
+
backgroundColor: null != (_o_backgroundColor = o.backgroundColor) ? _o_backgroundColor : 'var(--g9-surface-container)',
|
|
165
|
+
borderTopLeftRadius: `${corner}px`,
|
|
166
|
+
borderTopRightRadius: `${corner}px`,
|
|
167
|
+
transition: 'transform 220ms ease-out, opacity 220ms ease-out',
|
|
168
|
+
...recede,
|
|
169
|
+
...platformSheetConstraints(o)
|
|
170
|
+
}} innerStyle={{
|
|
171
|
+
paddingTop: `${topPadding}px`
|
|
172
|
+
}} {...motion}>
|
|
173
|
+
<SheetContext.Provider value={contextValue}>
|
|
174
|
+
{layout.showHandle || layout.fullScreen && o.showToolbar && false !== o.showFullScreenDragHandle && !layout.dragDisabled ? <SheetHandle className="g9-sheet__grabber-area">
|
|
175
|
+
<view className="g9-sheet__grabber"/>
|
|
176
|
+
</SheetHandle> : null}
|
|
177
|
+
<G9SheetHeader options={o} onBack={()=>void stack.requestBack(entry.id, 'toolbarButton')}/>
|
|
178
|
+
{o.showToolbar && false !== o.useStandardBodyTopGap ? <view className="g9-sheet__body-gap" style={{
|
|
179
|
+
height: `${g9SheetHeaderMetrics.bodyTopGap}px`
|
|
180
|
+
}}/> : null}
|
|
181
|
+
<scroll-view className={`g9-sheet__body${layout.fullScreen ? ' g9-sheet__body--fill' : ''}`} scroll-orientation="vertical" style={{
|
|
182
|
+
padding: `${null != (_o_padding = o.padding) ? _o_padding : 0}px`,
|
|
183
|
+
...null !== maxBody ? {
|
|
184
|
+
maxHeight: `${maxBody}px`
|
|
185
|
+
} : {}
|
|
186
|
+
}}>
|
|
187
|
+
<view className="g9-sheet__content" key={entry.version} bindlayoutchange={onBodyLayout}>
|
|
188
|
+
{body}
|
|
189
|
+
{!revealed ? placeholder : null}
|
|
190
|
+
{covering ? <view className="g9-sheet__cover" style={{
|
|
191
|
+
height: `${clampFitHeight(placeholderHeight, props.hostHeight, true)}px`
|
|
192
|
+
}}>
|
|
193
|
+
{placeholder}
|
|
194
|
+
</view> : null}
|
|
195
|
+
</view>
|
|
196
|
+
</scroll-view>
|
|
197
|
+
<G9SheetFooter options={o}/>
|
|
198
|
+
</SheetContext.Provider>
|
|
199
|
+
</SheetContent>
|
|
200
|
+
</SheetView>
|
|
201
|
+
</SheetRoot>;
|
|
202
|
+
}
|
|
203
|
+
export { G9SheetFrame, useG9SheetContext };
|
|
204
|
+
|
|
205
|
+
//# sourceMappingURL=frame.jsx.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sheet/frame.jsx","sources":["../../src/sheet/frame.tsx"],"sourcesContent":["import './sheet.css';\nimport {\n createAbortController,\n formatColor,\n type G9AbortController,\n type G9AbortSignal,\n tryParseColor,\n withAlpha,\n} from '@g9tm/lynxcontrols-foundation';\nimport { SheetContent, SheetHandle, SheetRoot, SheetView } from '@lynx-js/lynx-ui-sheet';\nimport { createContext, type ReactNode, useContext, useEffect, useRef, useState } from '@lynx-js/react';\nimport { type G9TimerHandle, startTimer, stopTimer } from '../base/timers';\nimport { G9ActivityIndicator } from '../display/activity-indicator';\nimport { G9SheetSkeleton } from '../display/shimmer';\nimport { G9SheetFooter, G9SheetHeader, g9SheetHeaderMetrics } from './header';\nimport type { G9SheetHeightMemo } from './height-memo';\nimport type { G9SheetSettings } from './options';\nimport {\n clampFitHeight,\n currentPlatform,\n g9SheetDragCloseThreshold,\n g9SheetFitLoadingMinHeight,\n parentRecedeOffset,\n platformSheetConstraints,\n resolveSheetLayout,\n scaledSheetDuration,\n sheetOverlayOpacity,\n sheetTopPadding,\n} from './sizing';\nimport type { G9SheetEntry, G9SheetHandle, G9SheetStack } from './stack';\n\n/** What content inside a sheet can read (MAUI `IG9BottomSheetAwareView` + deferred load signals). */\nexport interface G9SheetContextValue {\n /** The sheet-scoped handle: `close()` closes only this sheet. */\n readonly handle: G9SheetHandle;\n /** Aborted when the sheet starts closing (cancel loads with it). */\n readonly signal: G9AbortSignal;\n /** The open motion has finished. */\n readonly opened: boolean;\n /** The sheet is closing. */\n readonly closing: boolean;\n /** Resting body cap of a fit sheet (px), else `null`. */\n readonly maxBodyHeight: number | null;\n}\n\nconst SheetContext = createContext<G9SheetContextValue | null>(null);\n\n/** The enclosing sheet, or `null` outside one. */\nexport function useG9SheetContext(): G9SheetContextValue | null {\n return useContext(SheetContext);\n}\n\n/** Props of {@link G9SheetFrame}. */\nexport interface G9SheetFrameProps {\n readonly entry: G9SheetEntry;\n readonly stack: G9SheetStack;\n /** Host height (px): percentage detents and caps resolve against it. */\n readonly hostHeight: number;\n readonly hostWidth: number;\n readonly topInset: number;\n readonly settings: Required<G9SheetSettings>;\n readonly memo: G9SheetHeightMemo | null;\n /** Culture tag of the memo key. */\n readonly culture: string;\n /** The sheet is the top of the stack (receives scrim input). */\n readonly isTop: boolean;\n /** The sheet came to rest at a new height (px); drives the page recede threshold. */\n readonly onRest?: (heightPx: number) => void;\n}\n\nfunction scrimColor(entry: G9SheetEntry, settings: Required<G9SheetSettings>, opacity: number): string {\n const explicit = entry.options.windowBackgroundColor;\n const parsed = tryParseColor(explicit ?? settings.modalOverlayColor);\n if (!parsed) return explicit ?? settings.modalOverlayColor;\n return formatColor(withAlpha(parsed, explicit ? parsed.a : opacity));\n}\n\n/**\n * One sheet of the stack on lynx-ui `SheetRoot` (motion, drag, snap points from lynx-ui; G9 adds detent mapping,\n * scrim, header/footer, deferred content, recede and results). Rendered by the sheet service in the host's sheets\n * layer; use `useG9Sheets()` to open sheets.\n */\nexport function G9SheetFrame(props: G9SheetFrameProps): ReactNode {\n const { entry, stack, settings } = props;\n const o = entry.options;\n const layout = resolveSheetLayout(o, props.hostHeight);\n const showing = entry.status === 'opening' || entry.status === 'open';\n const closing = entry.status === 'closing';\n const handle = stack.handleOf(entry.id) as G9SheetHandle;\n\n const controller = useRef<G9AbortController | null>(null);\n if (controller.current === null) controller.current = createAbortController();\n useEffect(() => {\n if (closing || entry.status === 'closed') controller.current?.abort();\n }, [closing, entry.status]);\n useEffect(() => () => controller.current?.abort(), []);\n\n // Deferred (factory) content: placeholder until the open motion ended + loadDelayMs, then the body.\n const factory = typeof entry.content === 'function';\n const deferred = (factory || settings.deferPrebuiltContent) && o.deferContent !== false;\n const [revealed, setRevealed] = useState(!deferred);\n const [covering, setCovering] = useState(false);\n const timer = useRef<G9TimerHandle | null>(null);\n const coverTimer = useRef<G9TimerHandle | null>(null);\n useEffect(\n () => () => {\n if (coverTimer.current !== null) stopTimer(coverTimer.current);\n },\n [],\n );\n useEffect(() => {\n if (!deferred || revealed || entry.status !== 'open') return;\n const delay = layout.fullScreen\n ? Math.max(o.loadDelayMs ?? 369, settings.openAnimationDurationMs + 32)\n : (o.loadDelayMs ?? 369);\n timer.current = startTimer(() => {\n setRevealed(true);\n if (o.fadeDeferredContentIn !== false) {\n setCovering(true);\n coverTimer.current = startTimer(() => setCovering(false), 220);\n }\n }, delay);\n return () => {\n if (timer.current !== null) stopTimer(timer.current);\n };\n }, [deferred, revealed, entry.status]);\n\n const memoKey = o.heightMemoKey ? `${o.heightMemoKey}|w${Math.round(props.hostWidth)}|${props.culture}|fs1` : null;\n const placeholderHeight = o.useFullScreenLoadingPlaceholder\n ? props.hostHeight\n : (o.deferredLoadingPlaceholderHeight ??\n (memoKey ? props.memo?.lookup(memoKey) : undefined) ??\n g9SheetFitLoadingMinHeight);\n\n const [bodyHeight, setBodyHeight] = useState(0);\n const onBodyLayout = (e: { detail?: { height?: number } }) => {\n const h = e.detail?.height ?? 0;\n if (h <= 0) return;\n setBodyHeight(h);\n if (memoKey && revealed && !covering) props.memo?.record(memoKey, h);\n };\n\n const placeholder =\n o.loadingSkeleton && o.loadingSkeleton !== 'none' ? (\n <view className=\"g9-sheet__placeholder\" style={{ height: `${placeholderHeight}px` }}>\n <G9SheetSkeleton skeleton={o.loadingSkeleton} rowCount={o.loadingSkeletonRowCount ?? 0} />\n </view>\n ) : (\n <view\n className=\"g9-sheet__placeholder g9-sheet__placeholder--spinner\"\n style={{ height: `${placeholderHeight}px` }}\n >\n <G9ActivityIndicator running size={32} />\n </view>\n );\n const body = revealed ? (factory ? (entry.content as () => ReactNode)() : (entry.content as ReactNode)) : null;\n\n const maxBody = layout.fitMaxHeight;\n const contextValue: G9SheetContextValue = {\n handle,\n signal: (controller.current as G9AbortController).signal,\n opened: entry.status === 'open',\n closing,\n maxBodyHeight: maxBody,\n };\n\n // Scrim: the resting dim of the detent (one detent → max; several → interpolated at the initial detent).\n const ratios = layout.snapPoints.map((p) =>\n typeof p === 'number' ? p / Math.max(1, props.hostHeight) : p === 'fit' ? 0.5 : Number.parseFloat(p) / 100,\n );\n const restingRatio = ratios[layout.initialSnap] ?? 1;\n const opacity = entry.handingOff\n ? 0\n : sheetOverlayOpacity(\n restingRatio,\n ratios,\n settings.modalOverlayMinimumOpacity,\n settings.modalOverlayMaximumOpacity,\n );\n const modal = o.isModal !== false;\n const recede = entry.receded\n ? { transform: `translateY(${parentRecedeOffset(bodyHeight || props.hostHeight * 0.5)}px)`, opacity: 0 }\n : { transform: 'translateY(0px)', opacity: 1 };\n const topPadding = layout.fullScreen ? sheetTopPadding(o, props.topInset) : 0;\n const platform = currentPlatform();\n const openMs = o.openAnimationDurationMs ?? settings.openAnimationDurationMs;\n const closeMs = o.closeAnimationDurationMs ?? settings.closeAnimationDurationMs;\n const corner =\n platform === 'android' && o.androidShouldRemoveExpandedCorners === true && layout.fullScreen\n ? 0\n : (o.cornerRadius ?? 12);\n // Motion: lynx-ui's native spring by default; tweens of the configured durations for the timed style or a per-sheet\n // duration (MAUI `MotionStyle.Timed`, `Open/CloseAnimationDurationMs`).\n const easeOut = (t: number) => 1 - (1 - t) ** 3;\n const timed =\n settings.motionStyle === 'timed' || o.openAnimationDurationMs != null || o.closeAnimationDurationMs != null;\n // Size-scaled: a sheet resting below full height travels (and takes) the matching slice of the duration.\n const enterMs = scaledSheetDuration(openMs, restingRatio, settings.sizeScaledAnimationDuration);\n const exitMs = scaledSheetDuration(closeMs, restingRatio, settings.sizeScaledAnimationDuration);\n const motion = timed\n ? {\n enterAnimation: { type: 'tween' as const, duration: enterMs / 1000, ease: easeOut },\n exitAnimation: { type: 'tween' as const, duration: exitMs / 1000, ease: easeOut },\n snapAnimation: { type: 'tween' as const, duration: openMs / 1000, ease: easeOut },\n }\n : {};\n return (\n <SheetRoot\n show={showing}\n snapPoints={layout.snapPoints}\n initialSnap={layout.initialSnap}\n screenHeight={props.hostHeight}\n dragDisabled={layout.dragDisabled}\n enableDragToClose={layout.enableDragToClose}\n dismissThreshold={g9SheetDragCloseThreshold}\n handleOnly={o.scrollingExpandsSheet === false}\n onShowChange={(open) => {\n if (!open) void stack.requestBack(entry.id, 'drag');\n }}\n onSnapChange={(index, value) => {\n const detents = (o.states && o.states.length > 0 ? o.states : ['medium', 'large']).filter((d) => d);\n const ordered = (['peek', 'medium', 'large'] as const).filter((d) => detents.includes(d));\n props.onRest?.(value);\n o.onStateChanged?.(layout.fit ? 'fit' : (ordered[index] ?? 'large'), value);\n }}\n onOpen={() => stack.markOpened(entry.id)}\n onClose={() => stack.markClosed(entry.id)}\n >\n {/* The view is `position: fixed` without a size; lynx-ui places the sheet at its `top: 100%` and the backdrop at\n its 100 %. Unsized it is 0 × 0 (Lynxtron), so the sheet slid in above the screen: give it the viewport.\n event-through lets taps reach the page around a non-modal sheet; the scrim and the sheet take theirs. */}\n <SheetView className=\"g9-sheet__view\" nativeProps={{ 'event-through': true }}>\n {modal ? (\n <view\n event-through={false}\n className={`g9-sheet__scrim${props.isTop && !closing ? '' : ' g9-sheet__scrim--covered'}`}\n style={{\n backgroundColor: scrimColor(entry, settings, opacity),\n transition:\n platform === 'ios' && o.animateOverlayToColorOnIos === false\n ? 'none'\n : `background-color ${closing ? closeMs : openMs}ms`,\n }}\n bindtap={() => {\n if (layout.closeOnOverlayTap) void stack.requestBack(entry.id, 'overlayTap');\n }}\n />\n ) : null}\n <SheetContent\n className={`g9-sheet g9-sheet--${entry.status}${layout.fit ? ' g9-sheet--fit' : ''}`}\n style={{\n backgroundColor: o.backgroundColor ?? 'var(--g9-surface-container)',\n borderTopLeftRadius: `${corner}px`,\n borderTopRightRadius: `${corner}px`,\n transition: 'transform 220ms ease-out, opacity 220ms ease-out',\n ...recede,\n ...platformSheetConstraints(o),\n }}\n innerStyle={{ paddingTop: `${topPadding}px` }}\n {...motion}\n >\n <SheetContext.Provider value={contextValue}>\n {layout.showHandle ||\n (layout.fullScreen && o.showToolbar && o.showFullScreenDragHandle !== false && !layout.dragDisabled) ? (\n <SheetHandle className=\"g9-sheet__grabber-area\">\n <view className=\"g9-sheet__grabber\" />\n </SheetHandle>\n ) : null}\n <G9SheetHeader options={o} onBack={() => void stack.requestBack(entry.id, 'toolbarButton')} />\n {o.showToolbar && o.useStandardBodyTopGap !== false ? (\n <view className=\"g9-sheet__body-gap\" style={{ height: `${g9SheetHeaderMetrics.bodyTopGap}px` }} />\n ) : null}\n <scroll-view\n className={`g9-sheet__body${layout.fullScreen ? ' g9-sheet__body--fill' : ''}`}\n scroll-orientation=\"vertical\"\n style={{\n padding: `${o.padding ?? 0}px`,\n ...(maxBody !== null ? { maxHeight: `${maxBody}px` } : {}),\n }}\n >\n <view className=\"g9-sheet__content\" key={entry.version} bindlayoutchange={onBodyLayout}>\n {body}\n {!revealed ? placeholder : null}\n {covering ? (\n <view\n className=\"g9-sheet__cover\"\n style={{ height: `${clampFitHeight(placeholderHeight, props.hostHeight, true)}px` }}\n >\n {placeholder}\n </view>\n ) : null}\n </view>\n </scroll-view>\n <G9SheetFooter options={o} />\n </SheetContext.Provider>\n </SheetContent>\n </SheetView>\n </SheetRoot>\n );\n}\n"],"names":["SheetContext","createContext","useG9SheetContext","useContext","scrimColor","entry","settings","opacity","explicit","parsed","tryParseColor","formatColor","withAlpha","G9SheetFrame","props","_ref","_o_loadingSkeletonRowCount","_ratios_layout_initialSnap","_o_openAnimationDurationMs","_o_closeAnimationDurationMs","_o_cornerRadius","_o_backgroundColor","_o_padding","_props_memo","stack","o","layout","resolveSheetLayout","showing","closing","handle","controller","useRef","createAbortController","useEffect","_controller_current","factory","deferred","revealed","setRevealed","useState","covering","setCovering","timer","coverTimer","stopTimer","_o_loadDelayMs","_o_loadDelayMs1","delay","Math","startTimer","memoKey","placeholderHeight","undefined","g9SheetFitLoadingMinHeight","bodyHeight","setBodyHeight","onBodyLayout","e","_e_detail","h","placeholder","view","G9SheetSkeleton","G9ActivityIndicator","body","maxBody","contextValue","ratios","p","Number","restingRatio","sheetOverlayOpacity","modal","recede","parentRecedeOffset","topPadding","sheetTopPadding","platform","currentPlatform","openMs","closeMs","corner","easeOut","t","timed","enterMs","scaledSheetDuration","exitMs","motion","SheetRoot","g9SheetDragCloseThreshold","open","index","value","_ordered_index","detents","d","ordered","SheetView","SheetContent","platformSheetConstraints","SheetHandle","G9SheetHeader","g9SheetHeaderMetrics","scroll-view","clampFitHeight","G9SheetFooter"],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { type ReactNode } from '@lynx-js/react';
|
|
2
|
+
import type { G9SheetOptions } from './options.js';
|
|
3
|
+
/** Header metrics (MAUI `G9LayoutMetrics` sheet header values). */
|
|
4
|
+
export declare const g9SheetHeaderMetrics: Readonly<{
|
|
5
|
+
minHeight: 64;
|
|
6
|
+
verticalGap: 10;
|
|
7
|
+
bodyTopGap: 10;
|
|
8
|
+
backButton: 30;
|
|
9
|
+
backGlyph: 24;
|
|
10
|
+
backHitSlop: 7;
|
|
11
|
+
titleSize: 16.2;
|
|
12
|
+
footerMaxButtonsPerRow: 3;
|
|
13
|
+
}>;
|
|
14
|
+
/** Props of {@link G9SheetHeader}. */
|
|
15
|
+
export interface G9SheetHeaderProps {
|
|
16
|
+
readonly options: G9SheetOptions;
|
|
17
|
+
/** The leading button (MAUI back request with source `toolbarButton`). */
|
|
18
|
+
readonly onBack: () => void;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* The three-slot sheet header (MAUI header template): leading back/close button (RTL-aware arrow, or × with
|
|
22
|
+
* `useCloseIcon`), the title (centre or near the back button), the trailing toolbar items; slot overrides
|
|
23
|
+
* `headerView` > `headerLeadingAndTitleView` > `headerTitleAndTrailingView` > per-slot views > defaults. A hairline
|
|
24
|
+
* closes the band. Rendered only with `showToolbar`.
|
|
25
|
+
*/
|
|
26
|
+
export declare function G9SheetHeader(props: G9SheetHeaderProps): ReactNode;
|
|
27
|
+
/** Props of {@link G9SheetFooter}. */
|
|
28
|
+
export interface G9SheetFooterProps {
|
|
29
|
+
readonly options: G9SheetOptions;
|
|
30
|
+
}
|
|
31
|
+
/** Rows of footer buttons: equal-width columns, wrapping every `perRow` (MAUI footer template). */
|
|
32
|
+
export declare function footerRows<T>(buttons: ReadonlyArray<T>, perRow: number): T[][];
|
|
33
|
+
/** The sheet footer: `footerView`, else `footerButtons` in equal columns (3 per row by default), with a divider. */
|
|
34
|
+
export declare function G9SheetFooter(props: G9SheetFooterProps): ReactNode;
|
|
35
|
+
//# sourceMappingURL=header.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"header.d.ts","sourceRoot":"","sources":["../../src/sheet/header.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,SAAS,EAAY,MAAM,gBAAgB,CAAC;AAM1D,OAAO,KAAK,EAAE,cAAc,EAAsB,MAAM,WAAW,CAAC;AAEpE,mEAAmE;AACnE,eAAO,MAAM,oBAAoB;;;;;;;;;EAS/B,CAAC;AAiCH,sCAAsC;AACtC,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,OAAO,EAAE,cAAc,CAAC;IACjC,0EAA0E;IAC1E,QAAQ,CAAC,MAAM,EAAE,MAAM,IAAI,CAAC;CAC7B;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,kBAAkB,GAAG,SAAS,CA0GlE;AAED,sCAAsC;AACtC,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,OAAO,EAAE,cAAc,CAAC;CAClC;AAED,mGAAmG;AACnG,wBAAgB,UAAU,CAAC,CAAC,EAAE,OAAO,EAAE,aAAa,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,GAAG,CAAC,EAAE,EAAE,CAK9E;AAED,oHAAoH;AACpH,wBAAgB,aAAa,CAAC,KAAK,EAAE,kBAAkB,GAAG,SAAS,CAmBlE"}
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
import { G9StringKey } from "@g9tm/lynxcontrols-foundation";
|
|
2
|
+
import { useState } from "@lynx-js/react";
|
|
3
|
+
import { g9RowStyle } from "../base/control.jsx";
|
|
4
|
+
import { useG9Press } from "../base/press.jsx";
|
|
5
|
+
import { G9HeaderActionButton } from "../button/header-action-button.jsx";
|
|
6
|
+
import { G9IconSlot } from "../icon/slot.jsx";
|
|
7
|
+
import { useG9Direction, useG9Settings, useG9Strings } from "../provider/hooks.jsx";
|
|
8
|
+
const g9SheetHeaderMetrics = Object.freeze({
|
|
9
|
+
minHeight: 64,
|
|
10
|
+
verticalGap: 10,
|
|
11
|
+
bodyTopGap: 10,
|
|
12
|
+
backButton: 30,
|
|
13
|
+
backGlyph: 24,
|
|
14
|
+
backHitSlop: 7,
|
|
15
|
+
titleSize: 16.2,
|
|
16
|
+
footerMaxButtonsPerRow: 3
|
|
17
|
+
});
|
|
18
|
+
function ToolbarItemButton(props) {
|
|
19
|
+
const { item } = props;
|
|
20
|
+
const [running, setRunning] = useState(false);
|
|
21
|
+
const busy = true === item.isBusy || running;
|
|
22
|
+
const onPress = ()=>{
|
|
23
|
+
var _item_onPress;
|
|
24
|
+
if (busy && false !== item.disableWhileBusy) return;
|
|
25
|
+
const result = null == (_item_onPress = item.onPress) ? void 0 : _item_onPress.call(item);
|
|
26
|
+
if (result && 'function' == typeof result.then) {
|
|
27
|
+
setRunning(true);
|
|
28
|
+
result.then(()=>setRunning(false), ()=>setRunning(false));
|
|
29
|
+
}
|
|
30
|
+
};
|
|
31
|
+
return <G9HeaderActionButton {...void 0 !== item.icon ? {
|
|
32
|
+
icon: item.icon
|
|
33
|
+
} : {}} {...item.text ? {
|
|
34
|
+
buttonText: item.text
|
|
35
|
+
} : {}} isBusy={busy && true === item.showBusyIndicator} isActive={true === item.isActive} showActiveBadge={true === item.showActiveBadge} animatePress={false !== item.animatePress} {...item.iconSize ? {
|
|
36
|
+
iconSize: item.iconSize
|
|
37
|
+
} : {}} {...item.accessibilityLabel ? {
|
|
38
|
+
accessibilityLabel: item.accessibilityLabel
|
|
39
|
+
} : {}} disabled={busy && false !== item.disableWhileBusy && true !== item.showBusyIndicator} onPress={onPress}/>;
|
|
40
|
+
}
|
|
41
|
+
function G9SheetHeader(props) {
|
|
42
|
+
var _o_headerLeadingView, _o_headerTitleView, _ref, _o_toolbarItems, _o_headerTrailingView, _o_headerTitlePlacement;
|
|
43
|
+
var _o_toolbarItemsFactory;
|
|
44
|
+
const o = props.options;
|
|
45
|
+
const direction = useG9Direction();
|
|
46
|
+
const glyphs = useG9Settings().glyphs;
|
|
47
|
+
const strings = useG9Strings();
|
|
48
|
+
const back = useG9Press(props.onBack, {
|
|
49
|
+
source: 'G9SheetHeader'
|
|
50
|
+
});
|
|
51
|
+
if (true !== o.showToolbar) return null;
|
|
52
|
+
if (void 0 !== o.headerView && null !== o.headerView) return <view className="g9-sheet-header g9-sheet-header--custom">{o.headerView}</view>;
|
|
53
|
+
const m = g9SheetHeaderMetrics;
|
|
54
|
+
const leading = null != (_o_headerLeadingView = o.headerLeadingView) ? _o_headerLeadingView : o.showCloseButton ? <view className="g9-sheet-header__back" style={{
|
|
55
|
+
width: `${m.backButton}px`,
|
|
56
|
+
height: `${m.backButton}px`
|
|
57
|
+
}} accessibility-element={true} accessibility-traits="button" accessibility-label={o.useCloseIcon ? strings.get(G9StringKey.Close) : strings.get(G9StringKey.Back)} hit-slop={{
|
|
58
|
+
top: `${m.backHitSlop}px`,
|
|
59
|
+
left: `${m.backHitSlop}px`,
|
|
60
|
+
right: `${m.backHitSlop}px`,
|
|
61
|
+
bottom: `${m.backHitSlop}px`
|
|
62
|
+
}} bindtap={back}>
|
|
63
|
+
<G9IconSlot icon={o.useCloseIcon ? glyphs.clear : 'rtl' === direction ? glyphs.arrowForward : glyphs.arrowBack} size={m.backGlyph} color="var(--g9-on-surface)"/>
|
|
64
|
+
</view> : null;
|
|
65
|
+
const title = null != (_o_headerTitleView = o.headerTitleView) ? _o_headerTitleView : o.title ? <text className="g9-sheet-header__title" text-maxline="1" style={{
|
|
66
|
+
fontSize: `${m.titleSize}px`
|
|
67
|
+
}}>
|
|
68
|
+
{o.title}
|
|
69
|
+
</text> : null;
|
|
70
|
+
const items = null != (_ref = null != (_o_toolbarItems = o.toolbarItems) ? _o_toolbarItems : null == (_o_toolbarItemsFactory = o.toolbarItemsFactory) ? void 0 : _o_toolbarItemsFactory.call(o)) ? _ref : [];
|
|
71
|
+
const trailing = null != (_o_headerTrailingView = o.headerTrailingView) ? _o_headerTrailingView : items.length > 0 ? <view className="g9-sheet-header__items" style={g9RowStyle(direction)}>
|
|
72
|
+
{items.map((item, i)=>{
|
|
73
|
+
var _item_key;
|
|
74
|
+
return <ToolbarItemButton key={null != (_item_key = item.key) ? _item_key : String(i)} item={item}/>;
|
|
75
|
+
})}
|
|
76
|
+
</view> : null;
|
|
77
|
+
const spanned = null != o.headerLeadingAndTitleView || null != o.headerTitleAndTrailingView;
|
|
78
|
+
const center = (null != (_o_headerTitlePlacement = o.headerTitlePlacement) ? _o_headerTitlePlacement : 'center') === 'center' && false !== o.reserveEmptyHeaderSlots && !spanned;
|
|
79
|
+
let slots;
|
|
80
|
+
slots = null != o.headerLeadingAndTitleView ? [
|
|
81
|
+
<view key="lt" className="g9-sheet-header__grow">
|
|
82
|
+
{o.headerLeadingAndTitleView}
|
|
83
|
+
</view>,
|
|
84
|
+
<view key="t" className="g9-sheet-header__end">
|
|
85
|
+
{trailing}
|
|
86
|
+
</view>
|
|
87
|
+
] : null != o.headerTitleAndTrailingView ? [
|
|
88
|
+
<view key="l" className="g9-sheet-header__start">
|
|
89
|
+
{leading}
|
|
90
|
+
</view>,
|
|
91
|
+
<view key="tt" className="g9-sheet-header__grow">
|
|
92
|
+
{o.headerTitleAndTrailingView}
|
|
93
|
+
</view>
|
|
94
|
+
] : center ? [
|
|
95
|
+
<view key="l" className="g9-sheet-header__side g9-sheet-header__start">
|
|
96
|
+
{leading}
|
|
97
|
+
</view>,
|
|
98
|
+
<view key="t" className="g9-sheet-header__title-slot">
|
|
99
|
+
{title}
|
|
100
|
+
</view>,
|
|
101
|
+
<view key="r" className="g9-sheet-header__side g9-sheet-header__end">
|
|
102
|
+
{trailing}
|
|
103
|
+
</view>
|
|
104
|
+
] : [
|
|
105
|
+
<view key="l" className="g9-sheet-header__start">
|
|
106
|
+
{leading}
|
|
107
|
+
</view>,
|
|
108
|
+
<view key="t" className="g9-sheet-header__grow g9-sheet-header__title-near">
|
|
109
|
+
{title}
|
|
110
|
+
</view>,
|
|
111
|
+
<view key="r" className="g9-sheet-header__end">
|
|
112
|
+
{trailing}
|
|
113
|
+
</view>
|
|
114
|
+
];
|
|
115
|
+
return <view className={`g9-sheet-header g9-dir-${direction}`} style={{
|
|
116
|
+
minHeight: `${m.minHeight}px`,
|
|
117
|
+
...g9RowStyle(direction)
|
|
118
|
+
}}>
|
|
119
|
+
{slots}
|
|
120
|
+
</view>;
|
|
121
|
+
}
|
|
122
|
+
function footerRows(buttons, perRow) {
|
|
123
|
+
const n = Math.max(1, Math.floor(perRow));
|
|
124
|
+
const rows = [];
|
|
125
|
+
for(let i = 0; i < buttons.length; i += n)rows.push(buttons.slice(i, i + n));
|
|
126
|
+
return rows;
|
|
127
|
+
}
|
|
128
|
+
function G9SheetFooter(props) {
|
|
129
|
+
var _o_footerButtons, _o_footerMaxButtonsPerRow;
|
|
130
|
+
const direction = useG9Direction();
|
|
131
|
+
const o = props.options;
|
|
132
|
+
if (null != o.footerView) return <view className="g9-sheet-footer">{o.footerView}</view>;
|
|
133
|
+
const buttons = null != (_o_footerButtons = o.footerButtons) ? _o_footerButtons : [];
|
|
134
|
+
if (0 === buttons.length) return null;
|
|
135
|
+
return <view className="g9-sheet-footer">
|
|
136
|
+
{footerRows(buttons, null != (_o_footerMaxButtonsPerRow = o.footerMaxButtonsPerRow) ? _o_footerMaxButtonsPerRow : g9SheetHeaderMetrics.footerMaxButtonsPerRow).map((row, r)=><view key={r} className="g9-sheet-footer__row" style={g9RowStyle(direction)}>
|
|
137
|
+
{row.map((button, i)=><view key={i} className="g9-sheet-footer__cell">
|
|
138
|
+
{button}
|
|
139
|
+
</view>)}
|
|
140
|
+
</view>)}
|
|
141
|
+
</view>;
|
|
142
|
+
}
|
|
143
|
+
export { G9SheetFooter, G9SheetHeader, footerRows, g9SheetHeaderMetrics };
|
|
144
|
+
|
|
145
|
+
//# sourceMappingURL=header.jsx.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sheet/header.jsx","sources":["../../src/sheet/header.tsx"],"sourcesContent":["import { G9StringKey } from '@g9tm/lynxcontrols-foundation';\nimport { type ReactNode, useState } from '@lynx-js/react';\nimport { g9RowStyle } from '../base/control';\nimport { useG9Press } from '../base/press';\nimport { G9HeaderActionButton } from '../button/header-action-button';\nimport { G9IconSlot } from '../icon/slot';\nimport { useG9Direction, useG9Settings, useG9Strings } from '../provider/hooks';\nimport type { G9SheetOptions, G9SheetToolbarItem } from './options';\n\n/** Header metrics (MAUI `G9LayoutMetrics` sheet header values). */\nexport const g9SheetHeaderMetrics = Object.freeze({\n minHeight: 64,\n verticalGap: 10,\n bodyTopGap: 10,\n backButton: 30,\n backGlyph: 24,\n backHitSlop: 7,\n titleSize: 16.2,\n footerMaxButtonsPerRow: 3,\n});\n\nfunction ToolbarItemButton(props: { readonly item: G9SheetToolbarItem }): ReactNode {\n const { item } = props;\n const [running, setRunning] = useState(false);\n const busy = item.isBusy === true || running;\n const onPress = () => {\n if (busy && item.disableWhileBusy !== false) return;\n const result = item.onPress?.();\n if (result && typeof (result as PromiseLike<unknown>).then === 'function') {\n setRunning(true);\n (result as PromiseLike<unknown>).then(\n () => setRunning(false),\n () => setRunning(false),\n );\n }\n };\n return (\n <G9HeaderActionButton\n {...(item.icon !== undefined ? { icon: item.icon } : {})}\n {...(item.text ? { buttonText: item.text } : {})}\n isBusy={busy && item.showBusyIndicator === true}\n isActive={item.isActive === true}\n showActiveBadge={item.showActiveBadge === true}\n animatePress={item.animatePress !== false}\n {...(item.iconSize ? { iconSize: item.iconSize } : {})}\n {...(item.accessibilityLabel ? { accessibilityLabel: item.accessibilityLabel } : {})}\n disabled={busy && item.disableWhileBusy !== false && item.showBusyIndicator !== true}\n onPress={onPress}\n />\n );\n}\n\n/** Props of {@link G9SheetHeader}. */\nexport interface G9SheetHeaderProps {\n readonly options: G9SheetOptions;\n /** The leading button (MAUI back request with source `toolbarButton`). */\n readonly onBack: () => void;\n}\n\n/**\n * The three-slot sheet header (MAUI header template): leading back/close button (RTL-aware arrow, or × with\n * `useCloseIcon`), the title (centre or near the back button), the trailing toolbar items; slot overrides\n * `headerView` > `headerLeadingAndTitleView` > `headerTitleAndTrailingView` > per-slot views > defaults. A hairline\n * closes the band. Rendered only with `showToolbar`.\n */\nexport function G9SheetHeader(props: G9SheetHeaderProps): ReactNode {\n const o = props.options;\n const direction = useG9Direction();\n const glyphs = useG9Settings().glyphs;\n const strings = useG9Strings();\n const back = useG9Press(props.onBack, { source: 'G9SheetHeader' });\n if (o.showToolbar !== true) return null;\n if (o.headerView !== undefined && o.headerView !== null) {\n return <view className=\"g9-sheet-header g9-sheet-header--custom\">{o.headerView}</view>;\n }\n const m = g9SheetHeaderMetrics;\n const leading =\n o.headerLeadingView ??\n (o.showCloseButton ? (\n <view\n className=\"g9-sheet-header__back\"\n style={{ width: `${m.backButton}px`, height: `${m.backButton}px` }}\n accessibility-element={true}\n accessibility-traits=\"button\"\n accessibility-label={o.useCloseIcon ? strings.get(G9StringKey.Close) : strings.get(G9StringKey.Back)}\n hit-slop={{\n top: `${m.backHitSlop}px`,\n left: `${m.backHitSlop}px`,\n right: `${m.backHitSlop}px`,\n bottom: `${m.backHitSlop}px`,\n }}\n bindtap={back}\n >\n <G9IconSlot\n icon={o.useCloseIcon ? glyphs.clear : direction === 'rtl' ? glyphs.arrowForward : glyphs.arrowBack}\n size={m.backGlyph}\n color=\"var(--g9-on-surface)\"\n />\n </view>\n ) : null);\n const title =\n o.headerTitleView ??\n (o.title ? (\n <text className=\"g9-sheet-header__title\" text-maxline=\"1\" style={{ fontSize: `${m.titleSize}px` }}>\n {o.title}\n </text>\n ) : null);\n const items = o.toolbarItems ?? o.toolbarItemsFactory?.() ?? [];\n const trailing =\n o.headerTrailingView ??\n (items.length > 0 ? (\n <view className=\"g9-sheet-header__items\" style={g9RowStyle(direction)}>\n {items.map((item, i) => (\n <ToolbarItemButton key={item.key ?? String(i)} item={item} />\n ))}\n </view>\n ) : null);\n const spanned = o.headerLeadingAndTitleView != null || o.headerTitleAndTrailingView != null;\n const center = (o.headerTitlePlacement ?? 'center') === 'center' && o.reserveEmptyHeaderSlots !== false && !spanned;\n let slots: ReactNode;\n if (o.headerLeadingAndTitleView != null) {\n slots = [\n <view key=\"lt\" className=\"g9-sheet-header__grow\">\n {o.headerLeadingAndTitleView}\n </view>,\n <view key=\"t\" className=\"g9-sheet-header__end\">\n {trailing}\n </view>,\n ];\n } else if (o.headerTitleAndTrailingView != null) {\n slots = [\n <view key=\"l\" className=\"g9-sheet-header__start\">\n {leading}\n </view>,\n <view key=\"tt\" className=\"g9-sheet-header__grow\">\n {o.headerTitleAndTrailingView}\n </view>,\n ];\n } else if (center) {\n slots = [\n <view key=\"l\" className=\"g9-sheet-header__side g9-sheet-header__start\">\n {leading}\n </view>,\n <view key=\"t\" className=\"g9-sheet-header__title-slot\">\n {title}\n </view>,\n <view key=\"r\" className=\"g9-sheet-header__side g9-sheet-header__end\">\n {trailing}\n </view>,\n ];\n } else {\n slots = [\n <view key=\"l\" className=\"g9-sheet-header__start\">\n {leading}\n </view>,\n <view key=\"t\" className=\"g9-sheet-header__grow g9-sheet-header__title-near\">\n {title}\n </view>,\n <view key=\"r\" className=\"g9-sheet-header__end\">\n {trailing}\n </view>,\n ];\n }\n return (\n <view\n className={`g9-sheet-header g9-dir-${direction}`}\n style={{ minHeight: `${m.minHeight}px`, ...g9RowStyle(direction) }}\n >\n {slots}\n </view>\n );\n}\n\n/** Props of {@link G9SheetFooter}. */\nexport interface G9SheetFooterProps {\n readonly options: G9SheetOptions;\n}\n\n/** Rows of footer buttons: equal-width columns, wrapping every `perRow` (MAUI footer template). */\nexport function footerRows<T>(buttons: ReadonlyArray<T>, perRow: number): T[][] {\n const n = Math.max(1, Math.floor(perRow));\n const rows: T[][] = [];\n for (let i = 0; i < buttons.length; i += n) rows.push(buttons.slice(i, i + n));\n return rows;\n}\n\n/** The sheet footer: `footerView`, else `footerButtons` in equal columns (3 per row by default), with a divider. */\nexport function G9SheetFooter(props: G9SheetFooterProps): ReactNode {\n const direction = useG9Direction();\n const o = props.options;\n if (o.footerView != null) return <view className=\"g9-sheet-footer\">{o.footerView}</view>;\n const buttons = o.footerButtons ?? [];\n if (buttons.length === 0) return null;\n return (\n <view className=\"g9-sheet-footer\">\n {footerRows(buttons, o.footerMaxButtonsPerRow ?? g9SheetHeaderMetrics.footerMaxButtonsPerRow).map((row, r) => (\n <view key={r} className=\"g9-sheet-footer__row\" style={g9RowStyle(direction)}>\n {row.map((button, i) => (\n <view key={i} className=\"g9-sheet-footer__cell\">\n {button}\n </view>\n ))}\n </view>\n ))}\n </view>\n );\n}\n"],"names":["g9SheetHeaderMetrics","Object","ToolbarItemButton","props","item","running","setRunning","useState","busy","onPress","result","G9HeaderActionButton","undefined","G9SheetHeader","_o_headerLeadingView","_o_headerTitleView","_ref","_o_headerTrailingView","_o_headerTitlePlacement","o","direction","useG9Direction","glyphs","useG9Settings","strings","useG9Strings","back","useG9Press","view","m","leading","G9StringKey","G9IconSlot","title","text","items","trailing","g9RowStyle","i","_item_key","String","spanned","center","slots","footerRows","buttons","perRow","n","Math","rows","G9SheetFooter","_o_footerButtons","_o_footerMaxButtonsPerRow","row","r","button"],"mappings":"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"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/** Most learned heights kept (MAUI 64). */
|
|
2
|
+
export declare const g9SheetHeightMemoLimit = 64;
|
|
3
|
+
/** Preference key of the persisted memo. */
|
|
4
|
+
export declare const g9SheetHeightMemoPreferenceKey = "sheet-heights";
|
|
5
|
+
/** The memo key of a sheet body. */
|
|
6
|
+
export declare function sheetHeightMemoKey(identity: string, width: number, culture: string, fontScale: number): string;
|
|
7
|
+
/** Compiled-in first-open heights (MAUI `G9BottomSheetHeightSeeds`); never persisted. */
|
|
8
|
+
export interface G9SheetHeightSeeds {
|
|
9
|
+
/** Sets (or replaces) the seed of a memo key or bare identity; blank keys and heights ≤ 0 are ignored. */
|
|
10
|
+
seed(key: string, bodyHeight: number): void;
|
|
11
|
+
/** Exact key first, then the identity alone (the last three `|` segments stripped). */
|
|
12
|
+
tryGet(key: string): number | undefined;
|
|
13
|
+
reset(): void;
|
|
14
|
+
}
|
|
15
|
+
/** Creates a seed table. */
|
|
16
|
+
export declare function createSheetHeightSeeds(): G9SheetHeightSeeds;
|
|
17
|
+
/** The learned heights (MAUI `G9BottomSheetHeightMemoStore`). */
|
|
18
|
+
export interface G9SheetHeightMemo {
|
|
19
|
+
/** Learned height, else the seed. */
|
|
20
|
+
lookup(key: string): number | undefined;
|
|
21
|
+
/** Records a real body measurement; ≤ 0 is ignored, a change < 0.5 is skipped; the oldest key is evicted at 64. */
|
|
22
|
+
record(key: string, bodyHeight: number): void;
|
|
23
|
+
/** Forgets every learned height (theme/font change). */
|
|
24
|
+
invalidate(): void;
|
|
25
|
+
readonly size: number;
|
|
26
|
+
/** Writes the memo to preferences now. */
|
|
27
|
+
flush(): void;
|
|
28
|
+
}
|
|
29
|
+
/** The synchronous preference reads/writes the memo needs (`useG9Preferences()` provides them). */
|
|
30
|
+
export interface G9SheetMemoPreferences {
|
|
31
|
+
getString(key: string, defaultValue?: string | null): string | null;
|
|
32
|
+
setString(key: string, value: string): unknown;
|
|
33
|
+
}
|
|
34
|
+
/** Options of {@link createSheetHeightMemo}. */
|
|
35
|
+
export interface G9SheetHeightMemoOptions {
|
|
36
|
+
readonly seeds?: G9SheetHeightSeeds;
|
|
37
|
+
/** Persists under {@link g9SheetHeightMemoPreferenceKey}; a different `appVersion` discards the stored memo. */
|
|
38
|
+
readonly preferences?: G9SheetMemoPreferences;
|
|
39
|
+
readonly appVersion?: string;
|
|
40
|
+
/** Debounced flush (ms). Default 3000. */
|
|
41
|
+
readonly flushDelayMs?: number;
|
|
42
|
+
readonly setTimer?: (callback: () => void, ms: number) => unknown;
|
|
43
|
+
readonly clearTimer?: (handle: unknown) => void;
|
|
44
|
+
}
|
|
45
|
+
/** Creates a height memo (lazy load from preferences on first use, debounced flush). */
|
|
46
|
+
export declare function createSheetHeightMemo(options?: G9SheetHeightMemoOptions): G9SheetHeightMemo;
|
|
47
|
+
//# sourceMappingURL=height-memo.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"height-memo.d.ts","sourceRoot":"","sources":["../../src/sheet/height-memo.ts"],"names":[],"mappings":"AAIA,2CAA2C;AAC3C,eAAO,MAAM,sBAAsB,KAAK,CAAC;AACzC,4CAA4C;AAC5C,eAAO,MAAM,8BAA8B,kBAAkB,CAAC;AAE9D,oCAAoC;AACpC,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAE9G;AAED,yFAAyF;AACzF,MAAM,WAAW,kBAAkB;IACjC,0GAA0G;IAC1G,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5C,uFAAuF;IACvF,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;IACxC,KAAK,IAAI,IAAI,CAAC;CACf;AAED,4BAA4B;AAC5B,wBAAgB,sBAAsB,IAAI,kBAAkB,CAkB3D;AAED,iEAAiE;AACjE,MAAM,WAAW,iBAAiB;IAChC,qCAAqC;IACrC,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;IACxC,mHAAmH;IACnH,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9C,wDAAwD;IACxD,UAAU,IAAI,IAAI,CAAC;IACnB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,0CAA0C;IAC1C,KAAK,IAAI,IAAI,CAAC;CACf;AAED,mGAAmG;AACnG,MAAM,WAAW,sBAAsB;IACrC,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI,CAAC;IACpE,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;CAChD;AAED,gDAAgD;AAChD,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,KAAK,CAAC,EAAE,kBAAkB,CAAC;IACpC,gHAAgH;IAChH,QAAQ,CAAC,WAAW,CAAC,EAAE,sBAAsB,CAAC;IAC9C,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,0CAA0C;IAC1C,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,IAAI,EAAE,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC;IAClE,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;CACjD;AAED,wFAAwF;AACxF,wBAAgB,qBAAqB,CAAC,OAAO,GAAE,wBAA6B,GAAG,iBAAiB,CA4D/F"}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
const g9SheetHeightMemoLimit = 64;
|
|
2
|
+
const g9SheetHeightMemoPreferenceKey = 'sheet-heights';
|
|
3
|
+
function sheetHeightMemoKey(identity, width, culture, fontScale) {
|
|
4
|
+
return `${identity}|w${Math.round(width)}|${culture}|fs${fontScale}`;
|
|
5
|
+
}
|
|
6
|
+
function createSheetHeightSeeds() {
|
|
7
|
+
const seeds = new Map();
|
|
8
|
+
return {
|
|
9
|
+
seed (key, bodyHeight) {
|
|
10
|
+
if (!key || '' === key.trim() || !(bodyHeight > 0)) return;
|
|
11
|
+
seeds.set(key, bodyHeight);
|
|
12
|
+
},
|
|
13
|
+
tryGet (key) {
|
|
14
|
+
const exact = seeds.get(key);
|
|
15
|
+
if (void 0 !== exact) return exact;
|
|
16
|
+
const parts = key.split('|');
|
|
17
|
+
if (parts.length < 4) return;
|
|
18
|
+
return seeds.get(parts.slice(0, parts.length - 3).join('|'));
|
|
19
|
+
},
|
|
20
|
+
reset () {
|
|
21
|
+
seeds.clear();
|
|
22
|
+
}
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
function createSheetHeightMemo(options = {}) {
|
|
26
|
+
var _options_appVersion;
|
|
27
|
+
const entries = new Map();
|
|
28
|
+
const header = `v1\t${null != (_options_appVersion = options.appVersion) ? _options_appVersion : '0'}`;
|
|
29
|
+
let loaded = false;
|
|
30
|
+
let timer = null;
|
|
31
|
+
const prefs = options.preferences;
|
|
32
|
+
const load = ()=>{
|
|
33
|
+
var _prefs_getString;
|
|
34
|
+
if (loaded) return;
|
|
35
|
+
loaded = true;
|
|
36
|
+
if (!prefs) return;
|
|
37
|
+
const blob = null != (_prefs_getString = prefs.getString(g9SheetHeightMemoPreferenceKey, '')) ? _prefs_getString : '';
|
|
38
|
+
const lines = blob.split('\n');
|
|
39
|
+
if (lines[0] !== header) return;
|
|
40
|
+
for (const line of lines.slice(1)){
|
|
41
|
+
const tab = line.lastIndexOf('\t');
|
|
42
|
+
if (tab <= 0) continue;
|
|
43
|
+
const height = Number(line.slice(tab + 1));
|
|
44
|
+
if (height > 0) entries.set(line.slice(0, tab), height);
|
|
45
|
+
}
|
|
46
|
+
};
|
|
47
|
+
const flush = ()=>{
|
|
48
|
+
var _options_clearTimer;
|
|
49
|
+
if (null !== timer) null == (_options_clearTimer = options.clearTimer) || _options_clearTimer.call(options, timer);
|
|
50
|
+
timer = null;
|
|
51
|
+
if (!prefs) return;
|
|
52
|
+
const body = [
|
|
53
|
+
...entries
|
|
54
|
+
].map(([k, h])=>`${k}\t${Math.round(10 * h) / 10}`);
|
|
55
|
+
prefs.setString(g9SheetHeightMemoPreferenceKey, [
|
|
56
|
+
header,
|
|
57
|
+
...body
|
|
58
|
+
].join('\n'));
|
|
59
|
+
};
|
|
60
|
+
const schedule = ()=>{
|
|
61
|
+
var _options_flushDelayMs;
|
|
62
|
+
var _options_clearTimer;
|
|
63
|
+
if (!prefs || !options.setTimer) return;
|
|
64
|
+
if (null !== timer) null == (_options_clearTimer = options.clearTimer) || _options_clearTimer.call(options, timer);
|
|
65
|
+
timer = options.setTimer(flush, null != (_options_flushDelayMs = options.flushDelayMs) ? _options_flushDelayMs : 3000);
|
|
66
|
+
};
|
|
67
|
+
return {
|
|
68
|
+
lookup (key) {
|
|
69
|
+
var _entries_get;
|
|
70
|
+
var _options_seeds;
|
|
71
|
+
load();
|
|
72
|
+
return null != (_entries_get = entries.get(key)) ? _entries_get : null == (_options_seeds = options.seeds) ? void 0 : _options_seeds.tryGet(key);
|
|
73
|
+
},
|
|
74
|
+
record (key, bodyHeight) {
|
|
75
|
+
load();
|
|
76
|
+
if (!(bodyHeight > 0)) return;
|
|
77
|
+
const old = entries.get(key);
|
|
78
|
+
if (void 0 !== old && Math.abs(old - bodyHeight) < 0.5) return;
|
|
79
|
+
if (void 0 === old && entries.size >= g9SheetHeightMemoLimit) {
|
|
80
|
+
const first = entries.keys().next().value;
|
|
81
|
+
entries.delete(first);
|
|
82
|
+
}
|
|
83
|
+
entries.set(key, bodyHeight);
|
|
84
|
+
schedule();
|
|
85
|
+
},
|
|
86
|
+
invalidate () {
|
|
87
|
+
load();
|
|
88
|
+
entries.clear();
|
|
89
|
+
schedule();
|
|
90
|
+
},
|
|
91
|
+
get size () {
|
|
92
|
+
load();
|
|
93
|
+
return entries.size;
|
|
94
|
+
},
|
|
95
|
+
flush
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
export { createSheetHeightMemo, createSheetHeightSeeds, g9SheetHeightMemoLimit, g9SheetHeightMemoPreferenceKey, sheetHeightMemoKey };
|
|
99
|
+
|
|
100
|
+
//# sourceMappingURL=height-memo.jsx.map
|