@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,219 @@
|
|
|
1
|
+
.g9-picker__value {
|
|
2
|
+
flex-direction: row;
|
|
3
|
+
align-items: center;
|
|
4
|
+
height: 100%;
|
|
5
|
+
display: flex;
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
.g9-picker__text {
|
|
9
|
+
color: var(--g9-text-primary);
|
|
10
|
+
flex-shrink: 1;
|
|
11
|
+
font-size: 15px;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
.g9-picker__text--placeholder {
|
|
15
|
+
color: var(--g9-text-tertiary);
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
.g9-picker__swatch {
|
|
19
|
+
margin-right: 8px;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
.g9-dir-rtl .g9-picker__swatch {
|
|
23
|
+
margin-left: 8px;
|
|
24
|
+
margin-right: 0;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
.g9-picker__icon {
|
|
28
|
+
margin-right: 8px;
|
|
29
|
+
display: flex;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
.g9-dir-rtl .g9-picker__icon {
|
|
33
|
+
margin-left: 8px;
|
|
34
|
+
margin-right: 0;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
.g9-combo__chip .g9-picker__icon {
|
|
38
|
+
margin-right: 6px;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
.g9-dir-rtl .g9-combo__chip .g9-picker__icon {
|
|
42
|
+
margin-left: 6px;
|
|
43
|
+
margin-right: 0;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
.g9-combo__value {
|
|
47
|
+
flex-direction: row;
|
|
48
|
+
align-items: center;
|
|
49
|
+
height: 100%;
|
|
50
|
+
display: flex;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
.g9-combo__chips {
|
|
54
|
+
flex-direction: row;
|
|
55
|
+
align-items: center;
|
|
56
|
+
display: flex;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
.g9-combo__chip {
|
|
60
|
+
background-color: var(--g9-primary);
|
|
61
|
+
border-radius: 6px;
|
|
62
|
+
flex-direction: row;
|
|
63
|
+
align-items: center;
|
|
64
|
+
height: 28px;
|
|
65
|
+
margin-right: 6px;
|
|
66
|
+
padding-left: 9px;
|
|
67
|
+
padding-right: 9px;
|
|
68
|
+
display: flex;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
.g9-dir-rtl .g9-combo__chip {
|
|
72
|
+
margin-left: 6px;
|
|
73
|
+
margin-right: 0;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
.g9-combo__chip--more {
|
|
77
|
+
background: var(--g9-surface-variant);
|
|
78
|
+
border-style: solid;
|
|
79
|
+
border-width: 1px;
|
|
80
|
+
border-color: var(--g9-outline-variant);
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
.g9-combo__chip-text {
|
|
84
|
+
color: var(--g9-on-primary);
|
|
85
|
+
font-size: 13px;
|
|
86
|
+
font-weight: 700;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
.g9-combo__chip--more .g9-combo__chip-text {
|
|
90
|
+
color: var(--g9-text-secondary);
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
.g9-picker-sheet {
|
|
94
|
+
background-color: var(--g9-surface);
|
|
95
|
+
flex-direction: column;
|
|
96
|
+
padding-bottom: 10px;
|
|
97
|
+
display: flex;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
.g9-picker-sheet__header {
|
|
101
|
+
flex-direction: row;
|
|
102
|
+
align-items: center;
|
|
103
|
+
height: 52px;
|
|
104
|
+
padding-left: 8px;
|
|
105
|
+
padding-right: 8px;
|
|
106
|
+
display: flex;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
.g9-picker-sheet__action {
|
|
110
|
+
justify-content: center;
|
|
111
|
+
align-items: center;
|
|
112
|
+
min-width: 64px;
|
|
113
|
+
height: 40px;
|
|
114
|
+
display: flex;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
.g9-picker-sheet__action-text {
|
|
118
|
+
color: var(--g9-text-secondary);
|
|
119
|
+
font-size: 15px;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
.g9-picker-sheet__action-text--done {
|
|
123
|
+
color: var(--g9-primary);
|
|
124
|
+
font-weight: 700;
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
.g9-picker-sheet__title {
|
|
128
|
+
text-align: center;
|
|
129
|
+
color: var(--g9-on-surface);
|
|
130
|
+
flex: 1;
|
|
131
|
+
font-size: 16.2px;
|
|
132
|
+
font-weight: 700;
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
.g9-picker-sheet__preview {
|
|
136
|
+
text-align: center;
|
|
137
|
+
color: var(--g9-text-secondary);
|
|
138
|
+
margin-bottom: 8px;
|
|
139
|
+
font-size: 14px;
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
.g9-picker-sheet__today {
|
|
143
|
+
background-color: var(--g9-primary-container);
|
|
144
|
+
border-radius: 15px;
|
|
145
|
+
justify-content: center;
|
|
146
|
+
align-self: center;
|
|
147
|
+
align-items: center;
|
|
148
|
+
height: 30px;
|
|
149
|
+
margin-bottom: 8px;
|
|
150
|
+
padding-left: 14px;
|
|
151
|
+
padding-right: 14px;
|
|
152
|
+
display: flex;
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
.g9-picker-sheet__today-text {
|
|
156
|
+
color: var(--g9-on-primary-container);
|
|
157
|
+
font-size: 13px;
|
|
158
|
+
font-weight: 700;
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
.g9-picker-sheet__wheels {
|
|
162
|
+
flex-direction: row;
|
|
163
|
+
padding-left: 8px;
|
|
164
|
+
padding-right: 8px;
|
|
165
|
+
display: flex;
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
.g9-picker-sheet__wheels.g9-dir-rtl {
|
|
169
|
+
direction: ltr;
|
|
170
|
+
flex-direction: row-reverse;
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
.g9-wheel {
|
|
174
|
+
flex-direction: column;
|
|
175
|
+
flex: 1;
|
|
176
|
+
display: flex;
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
.g9-wheel__label {
|
|
180
|
+
text-align: center;
|
|
181
|
+
color: var(--g9-text-tertiary);
|
|
182
|
+
margin-bottom: 4px;
|
|
183
|
+
font-size: 12px;
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
.g9-wheel__viewport {
|
|
187
|
+
position: relative;
|
|
188
|
+
overflow: hidden;
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
.g9-wheel__band {
|
|
192
|
+
border-style: solid;
|
|
193
|
+
border-width: 1.5px;
|
|
194
|
+
border-color: var(--g9-primary);
|
|
195
|
+
background-color: var(--g9-primary-container);
|
|
196
|
+
border-radius: 10px;
|
|
197
|
+
position: absolute;
|
|
198
|
+
left: 4px;
|
|
199
|
+
right: 4px;
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
.g9-wheel__row {
|
|
203
|
+
justify-content: center;
|
|
204
|
+
align-items: center;
|
|
205
|
+
display: flex;
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
.g9-wheel__text {
|
|
209
|
+
color: var(--g9-text-secondary);
|
|
210
|
+
font-size: 16px;
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
.g9-wheel__row--selected .g9-wheel__text {
|
|
214
|
+
color: var(--g9-primary);
|
|
215
|
+
font-weight: 700;
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
|
|
219
|
+
/*# sourceMappingURL=pickers.css.map */
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["webpack://./src/pickers/pickers.css"],"names":[],"mappings":"AAAA;EACE,mBAAmB;EACnB,mBAAmB;EACnB,YAAY;EACZ,aAAa;AACf;;AAEA;EACE,6BAA6B;EAC7B,cAAc;EACd,eAAe;AACjB;;AAEA;EACE,8BAA8B;AAChC;;AAGA;EAAE,iBAAiB;AACnB;;AAGA;EAAE,gBAAgB;EAChB,eAAe;AACjB;;AAGA;EAAE,iBAAiB;EACjB,aAAa;AACf;;AAGA;EAAE,gBAAgB;EAChB,eAAe;AACjB;;AAGA;EAAE,iBAAiB;AACnB;;AAGA;EAAE,gBAAgB;EAChB,eAAe;AACjB;;AAGA;EAAE,mBAAmB;EACnB,mBAAmB;EACnB,YAAY;EACZ,aAAa;AACf;;AAGA;EAAE,mBAAmB;EACnB,mBAAmB;EACnB,aAAa;AACf;;AAGA;EAAE,mCAAmC;EACnC,kBAAkB;EAClB,mBAAmB;EACnB,mBAAmB;EACnB,YAAY;EACZ,iBAAiB;EACjB,iBAAiB;EACjB,kBAAkB;EAClB,aAAa;AACf;;AAGA;EAAE,gBAAgB;EAChB,eAAe;AACjB;;AAGA;EAAE,qCAAqC;EACrC,mBAAmB;EACnB,iBAAiB;EACjB,uCAAuC;AACzC;;AAGA;EAAE,2BAA2B;EAC3B,eAAe;EACf,gBAAgB;AAClB;;AAGA;EAAE,+BAA+B;AACjC;;AAGA;EAAE,mCAAmC;EACnC,sBAAsB;EACtB,oBAAoB;EACpB,aAAa;AACf;;AAGA;EAAE,mBAAmB;EACnB,mBAAmB;EACnB,YAAY;EACZ,iBAAiB;EACjB,kBAAkB;EAClB,aAAa;AACf;;AAGA;EAAE,uBAAuB;EACvB,mBAAmB;EACnB,eAAe;EACf,YAAY;EACZ,aAAa;AACf;;AAGA;EAAE,+BAA+B;EAC/B,eAAe;AACjB;;AAGA;EAAE,wBAAwB;EACxB,gBAAgB;AAClB;;AAGA;EAAE,kBAAkB;EAClB,2BAA2B;EAC3B,OAAO;EACP,iBAAiB;EACjB,gBAAgB;AAClB;;AAGA;EAAE,kBAAkB;EAClB,+BAA+B;EAC/B,kBAAkB;EAClB,eAAe;AACjB;;AAGA;EAAE,6CAA6C;EAC7C,mBAAmB;EACnB,uBAAuB;EACvB,kBAAkB;EAClB,mBAAmB;EACnB,YAAY;EACZ,kBAAkB;EAClB,kBAAkB;EAClB,mBAAmB;EACnB,aAAa;AACf;;AAGA;EAAE,qCAAqC;EACrC,eAAe;EACf,gBAAgB;AAClB;;AAGA;EAAE,mBAAmB;EACnB,iBAAiB;EACjB,kBAAkB;EAClB,aAAa;AACf;;AAKA;EAFE,cAAc;EACd,2BAA2B;AAC7B;;AAKA;EAFE,sBAAsB;EACtB,OAAO;EACP,aAAa;AACf;;AAKA;EAFE,kBAAkB;EAClB,8BAA8B;EAC9B,kBAAkB;EAClB,eAAe;AACjB;;AAKA;EAFE,kBAAkB;EAClB,gBAAgB;AAClB;;AAKA;EAFE,mBAAmB;EACnB,mBAAmB;EACnB,+BAA+B;EAC/B,6CAA6C;EAC7C,mBAAmB;EACnB,kBAAkB;EAClB,SAAS;EACT,UAAU;AACZ;;AAKA;EAFE,uBAAuB;EACvB,mBAAmB;EACnB,aAAa;AACf;;AAKA;EAFE,+BAA+B;EAC/B,eAAe;AACjB;;AAKA;EAFE,wBAAwB;EACxB,gBAAgB;AAClB","sourcesContent":[".g9-picker__value {\n display: flex;\n flex-direction: row;\n align-items: center;\n height: 100%;\n}\n\n.g9-picker__text {\n font-size: 15px;\n color: var(--g9-text-primary);\n flex-shrink: 1;\n}\n\n.g9-picker__text--placeholder {\n color: var(--g9-text-tertiary);\n}\n\n/* Gap after the swatch on the reading side (logical margins are dropped by the Lynx encoder, specs/02 §7). */\n.g9-picker__swatch {\n margin-right: 8px;\n}\n\n.g9-dir-rtl .g9-picker__swatch {\n margin-right: 0px;\n margin-left: 8px;\n}\n\n.g9-picker__icon {\n display: flex;\n margin-right: 8px;\n}\n\n.g9-dir-rtl .g9-picker__icon {\n margin-right: 0px;\n margin-left: 8px;\n}\n\n.g9-combo__chip .g9-picker__icon {\n margin-right: 6px;\n}\n\n.g9-dir-rtl .g9-combo__chip .g9-picker__icon {\n margin-right: 0px;\n margin-left: 6px;\n}\n\n.g9-combo__value {\n display: flex;\n flex-direction: row;\n align-items: center;\n height: 100%;\n}\n\n.g9-combo__chips {\n display: flex;\n flex-direction: row;\n align-items: center;\n}\n\n.g9-combo__chip {\n display: flex;\n flex-direction: row;\n align-items: center;\n height: 28px;\n padding-left: 9px;\n padding-right: 9px;\n margin-right: 6px;\n border-radius: 6px;\n background-color: var(--g9-primary);\n}\n\n.g9-dir-rtl .g9-combo__chip {\n margin-right: 0px;\n margin-left: 6px;\n}\n\n.g9-combo__chip--more {\n background: var(--g9-surface-variant);\n border-width: 1px;\n border-style: solid;\n border-color: var(--g9-outline-variant);\n}\n\n.g9-combo__chip-text {\n font-size: 13px;\n font-weight: 700;\n color: var(--g9-on-primary);\n}\n\n.g9-combo__chip--more .g9-combo__chip-text {\n color: var(--g9-text-secondary);\n}\n\n.g9-picker-sheet {\n display: flex;\n flex-direction: column;\n padding-bottom: 10px;\n background-color: var(--g9-surface);\n}\n\n.g9-picker-sheet__header {\n display: flex;\n flex-direction: row;\n align-items: center;\n height: 52px;\n padding-left: 8px;\n padding-right: 8px;\n}\n\n.g9-picker-sheet__action {\n min-width: 64px;\n height: 40px;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.g9-picker-sheet__action-text {\n font-size: 15px;\n color: var(--g9-text-secondary);\n}\n\n.g9-picker-sheet__action-text--done {\n color: var(--g9-primary);\n font-weight: 700;\n}\n\n.g9-picker-sheet__title {\n flex: 1;\n text-align: center;\n font-size: 16.2px;\n font-weight: 700;\n color: var(--g9-on-surface);\n}\n\n.g9-picker-sheet__preview {\n text-align: center;\n font-size: 14px;\n color: var(--g9-text-secondary);\n margin-bottom: 8px;\n}\n\n.g9-picker-sheet__today {\n align-self: center;\n height: 30px;\n padding-left: 14px;\n padding-right: 14px;\n border-radius: 15px;\n display: flex;\n align-items: center;\n justify-content: center;\n margin-bottom: 8px;\n background-color: var(--g9-primary-container);\n}\n\n.g9-picker-sheet__today-text {\n font-size: 13px;\n font-weight: 700;\n color: var(--g9-on-primary-container);\n}\n\n.g9-picker-sheet__wheels {\n display: flex;\n flex-direction: row;\n padding-left: 8px;\n padding-right: 8px;\n}\n\n/* Mirrored explicitly; the row's own direction stays ltr so an engine that honours `direction` does not reverse it\n again (Lynxtron ignores `direction`, E22). */\n.g9-picker-sheet__wheels.g9-dir-rtl {\n direction: ltr;\n flex-direction: row-reverse;\n}\n\n.g9-wheel {\n flex: 1;\n display: flex;\n flex-direction: column;\n}\n\n.g9-wheel__label {\n text-align: center;\n font-size: 12px;\n color: var(--g9-text-tertiary);\n margin-bottom: 4px;\n}\n\n.g9-wheel__viewport {\n position: relative;\n overflow: hidden;\n}\n\n.g9-wheel__band {\n position: absolute;\n left: 4px;\n right: 4px;\n border-radius: 10px;\n border-width: 1.5px;\n border-style: solid;\n border-color: var(--g9-primary);\n background-color: var(--g9-primary-container);\n}\n\n.g9-wheel__row {\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.g9-wheel__text {\n font-size: 16px;\n color: var(--g9-text-secondary);\n}\n\n.g9-wheel__row--selected .g9-wheel__text {\n color: var(--g9-primary);\n font-weight: 700;\n}\n"],"sourceRoot":""}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import './pickers.css';
|
|
2
|
+
import { type G9Culture } from '@g9tm/lynxcontrols-foundation';
|
|
3
|
+
import { type ReactNode } from '@lynx-js/react';
|
|
4
|
+
import { G9TimeSpanPickerMode } from './timespan.js';
|
|
5
|
+
import { type G9PickerFieldProps } from './trigger.js';
|
|
6
|
+
/** Props of {@link G9TimeSpanPicker}. */
|
|
7
|
+
export interface G9TimeSpanPickerProps extends G9PickerFieldProps {
|
|
8
|
+
/** Duration in milliseconds (MAUI `SelectedTimeSpan`); `null` = none. Controlled with `onValueChange`. */
|
|
9
|
+
readonly value?: number | null;
|
|
10
|
+
readonly defaultValue?: number | null;
|
|
11
|
+
readonly onValueChange?: (ms: number | null) => void;
|
|
12
|
+
/** Which drums show. Default `'yearsMonthsDays'`. */
|
|
13
|
+
readonly mode?: G9TimeSpanPickerMode;
|
|
14
|
+
/** Caption of the seconds drum (there is no localized key for it). Default `'s'`. */
|
|
15
|
+
readonly secondsLabel?: string;
|
|
16
|
+
/** Done confirmed a duration (MAUI `TimeSpanSelected`). */
|
|
17
|
+
readonly onTimeSpanSelected?: (ms: number) => void;
|
|
18
|
+
}
|
|
19
|
+
/** The duration drum sheet body (MAUI `G9TimeSpanPickerSheet`, plus the hours/minutes/seconds drums). */
|
|
20
|
+
export declare function TimeSpanSheetBody(props: {
|
|
21
|
+
readonly title: string;
|
|
22
|
+
readonly initial: number;
|
|
23
|
+
readonly mode: G9TimeSpanPickerMode;
|
|
24
|
+
readonly culture: G9Culture;
|
|
25
|
+
readonly secondsLabel: string;
|
|
26
|
+
readonly done: (ms: number) => void;
|
|
27
|
+
readonly cancel: () => void;
|
|
28
|
+
}): ReactNode;
|
|
29
|
+
/**
|
|
30
|
+
* A duration in an outlined box (MAUI `G9TimeSpanPicker`): a tap opens the drum sheet; Done writes the value and
|
|
31
|
+
* fires `onTimeSpanSelected`, Cancel and dismissals write nothing. Years/months/days follow the 365/30 convention;
|
|
32
|
+
* the hours/minutes/seconds modes add those drums (MAUI accepted the modes but never showed them). Must be inside a
|
|
33
|
+
* `G9Host`.
|
|
34
|
+
*/
|
|
35
|
+
export declare function G9TimeSpanPicker(props: G9TimeSpanPickerProps): ReactNode;
|
|
36
|
+
//# sourceMappingURL=timespan-picker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"timespan-picker.d.ts","sourceRoot":"","sources":["../../src/pickers/timespan-picker.tsx"],"names":[],"mappings":"AAAA,OAAO,eAAe,CAAC;AACvB,OAAO,EAAE,KAAK,SAAS,EAA+B,MAAM,+BAA+B,CAAC;AAC5F,OAAO,EAAE,KAAK,SAAS,EAAoB,MAAM,gBAAgB,CAAC;AAMlE,OAAO,EAIL,oBAAoB,EAKrB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,KAAK,kBAAkB,EAA8B,MAAM,WAAW,CAAC;AAGhF,yCAAyC;AACzC,MAAM,WAAW,qBAAsB,SAAQ,kBAAkB;IAC/D,0GAA0G;IAC1G,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtC,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IACrD,qDAAqD;IACrD,QAAQ,CAAC,IAAI,CAAC,EAAE,oBAAoB,CAAC;IACrC,qFAAqF;IACrF,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,2DAA2D;IAC3D,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;CACpD;AAQD,yGAAyG;AACzG,wBAAgB,iBAAiB,CAAC,KAAK,EAAE;IACvC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAE,oBAAoB,CAAC;IACpC,QAAQ,CAAC,OAAO,EAAE,SAAS,CAAC;IAC5B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC,QAAQ,CAAC,MAAM,EAAE,MAAM,IAAI,CAAC;CAC7B,GAAG,SAAS,CAoEZ;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,qBAAqB,GAAG,SAAS,CA2CxE"}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import "./pickers.css";
|
|
2
|
+
import { G9StringKey, toNativeDigits } from "@g9tm/lynxcontrols-foundation";
|
|
3
|
+
import { useRef, useState } from "@lynx-js/react";
|
|
4
|
+
import { useControllableState } from "../base/use-controllable-state.jsx";
|
|
5
|
+
import { useG9Culture, useG9Settings, useG9Strings } from "../provider/hooks.jsx";
|
|
6
|
+
import { useG9Sheets } from "../sheet/service.jsx";
|
|
7
|
+
import { PickerSheetHeader, showPickerSheet } from "./picker-sheet.jsx";
|
|
8
|
+
import { G9TimeSpanPickerMode, composeTimeSpan, formatTimeSpan, g9TimeSpanDefaultMaxDays, g9TimeSpanMaxYears, timeSpanDepth, timeSpanParts } from "./timespan.jsx";
|
|
9
|
+
import { PickerField, usePickerOpen } from "./trigger.jsx";
|
|
10
|
+
import { G9WheelColumn } from "./wheel-column.jsx";
|
|
11
|
+
const range = (from, to, culture, width)=>Array.from({
|
|
12
|
+
length: to - from + 1
|
|
13
|
+
}, (_, i)=>({
|
|
14
|
+
value: from + i,
|
|
15
|
+
text: toNativeDigits(String(from + i).padStart(width, '0'), culture.numberingSystem)
|
|
16
|
+
}));
|
|
17
|
+
function TimeSpanSheetBody(props) {
|
|
18
|
+
const strings = useG9Strings();
|
|
19
|
+
const { culture } = props;
|
|
20
|
+
const depth = timeSpanDepth(props.mode);
|
|
21
|
+
const [parts, setParts] = useState(()=>timeSpanParts(props.initial, props.mode));
|
|
22
|
+
const latest = useRef(parts);
|
|
23
|
+
const change = (patch)=>{
|
|
24
|
+
latest.current = {
|
|
25
|
+
...latest.current,
|
|
26
|
+
...patch
|
|
27
|
+
};
|
|
28
|
+
setParts(latest.current);
|
|
29
|
+
};
|
|
30
|
+
return <view className="g9-picker-sheet">
|
|
31
|
+
<PickerSheetHeader title={props.title} onCancel={props.cancel} onDone={()=>props.done(composeTimeSpan(latest.current))}/>
|
|
32
|
+
<view className={`g9-picker-sheet__wheels g9-dir-${culture.direction}`}>
|
|
33
|
+
<G9WheelColumn label={strings.get(G9StringKey.Year)} items={range(0, g9TimeSpanMaxYears, culture, 2)} value={parts.years} onValueChange={(years)=>change({
|
|
34
|
+
years
|
|
35
|
+
})}/>
|
|
36
|
+
<G9WheelColumn label={strings.get(G9StringKey.Month)} items={range(0, 11, culture, 2)} value={parts.months} onValueChange={(months)=>change({
|
|
37
|
+
months
|
|
38
|
+
})}/>
|
|
39
|
+
{depth >= 1 ? <G9WheelColumn label={strings.get(G9StringKey.Day)} items={range(0, Math.max(g9TimeSpanDefaultMaxDays, parts.days), culture, 2)} value={parts.days} onValueChange={(days)=>change({
|
|
40
|
+
days
|
|
41
|
+
})}/> : null}
|
|
42
|
+
{depth >= 2 ? <G9WheelColumn label={strings.get(G9StringKey.Hour)} items={range(0, 23, culture, 2)} value={parts.hours} onValueChange={(hours)=>change({
|
|
43
|
+
hours
|
|
44
|
+
})}/> : null}
|
|
45
|
+
{depth >= 3 ? <G9WheelColumn label={strings.get(G9StringKey.Minute)} items={range(0, 59, culture, 2)} value={parts.minutes} onValueChange={(minutes)=>change({
|
|
46
|
+
minutes
|
|
47
|
+
})}/> : null}
|
|
48
|
+
{depth >= 4 ? <G9WheelColumn label={props.secondsLabel} items={range(0, 59, culture, 2)} value={parts.seconds} onValueChange={(seconds)=>change({
|
|
49
|
+
seconds
|
|
50
|
+
})}/> : null}
|
|
51
|
+
</view>
|
|
52
|
+
</view>;
|
|
53
|
+
}
|
|
54
|
+
function G9TimeSpanPicker(props) {
|
|
55
|
+
var _props_mode, _props_defaultValue, _props_placeholder;
|
|
56
|
+
const sheets = useG9Sheets();
|
|
57
|
+
const culture = useG9Culture();
|
|
58
|
+
const strings = useG9Strings();
|
|
59
|
+
const glyphs = useG9Settings().glyphs;
|
|
60
|
+
const open = usePickerOpen();
|
|
61
|
+
const mode = null != (_props_mode = props.mode) ? _props_mode : G9TimeSpanPickerMode.YearsMonthsDays;
|
|
62
|
+
const [value, setValue] = useControllableState({
|
|
63
|
+
value: props.value,
|
|
64
|
+
defaultValue: null != (_props_defaultValue = props.defaultValue) ? _props_defaultValue : null,
|
|
65
|
+
onChange: props.onValueChange,
|
|
66
|
+
name: 'G9TimeSpanPicker.value'
|
|
67
|
+
});
|
|
68
|
+
const latest = useRef({
|
|
69
|
+
props,
|
|
70
|
+
value
|
|
71
|
+
});
|
|
72
|
+
latest.current = {
|
|
73
|
+
props,
|
|
74
|
+
value
|
|
75
|
+
};
|
|
76
|
+
const onOpen = ()=>open(async (isCurrent)=>{
|
|
77
|
+
var _p_label, _latest_current_props_onTimeSpanSelected, _latest_current_props;
|
|
78
|
+
const p = latest.current.props;
|
|
79
|
+
const title = (null == (_p_label = p.label) ? void 0 : _p_label.trim()) ? p.label : strings.get(G9StringKey.SelectDuration);
|
|
80
|
+
const result = await showPickerSheet(sheets, ({ done, cancel })=>{
|
|
81
|
+
var _latest_current_value, _p_secondsLabel;
|
|
82
|
+
return <TimeSpanSheetBody title={title} initial={null != (_latest_current_value = latest.current.value) ? _latest_current_value : 0} mode={mode} culture={culture} secondsLabel={null != (_p_secondsLabel = p.secondsLabel) ? _p_secondsLabel : 's'} done={done} cancel={cancel}/>;
|
|
83
|
+
});
|
|
84
|
+
if (!isCurrent() || null === result) return;
|
|
85
|
+
setValue(result);
|
|
86
|
+
null == (_latest_current_props_onTimeSpanSelected = (_latest_current_props = latest.current.props).onTimeSpanSelected) || _latest_current_props_onTimeSpanSelected.call(_latest_current_props, result);
|
|
87
|
+
});
|
|
88
|
+
return <PickerField field={{
|
|
89
|
+
trailingIcon: glyphs.dateRange,
|
|
90
|
+
...props
|
|
91
|
+
}} hasValue={null !== value} onOpen={onOpen}>
|
|
92
|
+
<text className={`g9-picker__text${null !== value ? '' : ' g9-picker__text--placeholder'}`} text-maxline="1">
|
|
93
|
+
{null !== value ? formatTimeSpan(value, mode, strings, culture) : props.label ? '' : null != (_props_placeholder = props.placeholder) ? _props_placeholder : ''}
|
|
94
|
+
</text>
|
|
95
|
+
</PickerField>;
|
|
96
|
+
}
|
|
97
|
+
export { G9TimeSpanPicker, TimeSpanSheetBody };
|
|
98
|
+
|
|
99
|
+
//# sourceMappingURL=timespan-picker.jsx.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pickers/timespan-picker.jsx","sources":["../../src/pickers/timespan-picker.tsx"],"sourcesContent":["import './pickers.css';\nimport { type G9Culture, G9StringKey, toNativeDigits } from '@g9tm/lynxcontrols-foundation';\nimport { type ReactNode, useRef, useState } from '@lynx-js/react';\nimport { useControllableState } from '../base/use-controllable-state';\nimport { useG9Culture, useG9Settings, useG9Strings } from '../provider/hooks';\nimport { useG9Sheets } from '../sheet/service';\nimport type { G9WheelItem } from './date-time';\nimport { PickerSheetHeader, showPickerSheet } from './picker-sheet';\nimport {\n composeTimeSpan,\n formatTimeSpan,\n type G9TimeSpanParts,\n G9TimeSpanPickerMode,\n g9TimeSpanDefaultMaxDays,\n g9TimeSpanMaxYears,\n timeSpanDepth,\n timeSpanParts,\n} from './timespan';\nimport { type G9PickerFieldProps, PickerField, usePickerOpen } from './trigger';\nimport { G9WheelColumn } from './wheel-column';\n\n/** Props of {@link G9TimeSpanPicker}. */\nexport interface G9TimeSpanPickerProps extends G9PickerFieldProps {\n /** Duration in milliseconds (MAUI `SelectedTimeSpan`); `null` = none. Controlled with `onValueChange`. */\n readonly value?: number | null;\n readonly defaultValue?: number | null;\n readonly onValueChange?: (ms: number | null) => void;\n /** Which drums show. Default `'yearsMonthsDays'`. */\n readonly mode?: G9TimeSpanPickerMode;\n /** Caption of the seconds drum (there is no localized key for it). Default `'s'`. */\n readonly secondsLabel?: string;\n /** Done confirmed a duration (MAUI `TimeSpanSelected`). */\n readonly onTimeSpanSelected?: (ms: number) => void;\n}\n\nconst range = (from: number, to: number, culture: G9Culture, width: number): G9WheelItem[] =>\n Array.from({ length: to - from + 1 }, (_, i) => ({\n value: from + i,\n text: toNativeDigits(String(from + i).padStart(width, '0'), culture.numberingSystem),\n }));\n\n/** The duration drum sheet body (MAUI `G9TimeSpanPickerSheet`, plus the hours/minutes/seconds drums). */\nexport function TimeSpanSheetBody(props: {\n readonly title: string;\n readonly initial: number;\n readonly mode: G9TimeSpanPickerMode;\n readonly culture: G9Culture;\n readonly secondsLabel: string;\n readonly done: (ms: number) => void;\n readonly cancel: () => void;\n}): ReactNode {\n const strings = useG9Strings();\n const { culture } = props;\n const depth = timeSpanDepth(props.mode);\n // What Done returns is what the drums show, also when nothing is touched (MAUI fix).\n const [parts, setParts] = useState<G9TimeSpanParts>(() => timeSpanParts(props.initial, props.mode));\n // The latest drums, written synchronously: Done can be tapped before the re-render binds a handler that closes over\n // the new parts, and returned the old duration (Windows CI agent, Azure build 541). See DateTimeSheetBody.\n const latest = useRef(parts);\n const change = (patch: Partial<G9TimeSpanParts>) => {\n latest.current = { ...latest.current, ...patch };\n setParts(latest.current);\n };\n return (\n <view className=\"g9-picker-sheet\">\n <PickerSheetHeader\n title={props.title}\n onCancel={props.cancel}\n onDone={() => props.done(composeTimeSpan(latest.current))}\n />\n <view className={`g9-picker-sheet__wheels g9-dir-${culture.direction}`}>\n <G9WheelColumn\n label={strings.get(G9StringKey.Year)}\n items={range(0, g9TimeSpanMaxYears, culture, 2)}\n value={parts.years}\n onValueChange={(years) => change({ years })}\n />\n <G9WheelColumn\n label={strings.get(G9StringKey.Month)}\n items={range(0, 11, culture, 2)}\n value={parts.months}\n onValueChange={(months) => change({ months })}\n />\n {depth >= 1 ? (\n <G9WheelColumn\n label={strings.get(G9StringKey.Day)}\n items={range(0, Math.max(g9TimeSpanDefaultMaxDays, parts.days), culture, 2)}\n value={parts.days}\n onValueChange={(days) => change({ days })}\n />\n ) : null}\n {depth >= 2 ? (\n <G9WheelColumn\n label={strings.get(G9StringKey.Hour)}\n items={range(0, 23, culture, 2)}\n value={parts.hours}\n onValueChange={(hours) => change({ hours })}\n />\n ) : null}\n {depth >= 3 ? (\n <G9WheelColumn\n label={strings.get(G9StringKey.Minute)}\n items={range(0, 59, culture, 2)}\n value={parts.minutes}\n onValueChange={(minutes) => change({ minutes })}\n />\n ) : null}\n {depth >= 4 ? (\n <G9WheelColumn\n label={props.secondsLabel}\n items={range(0, 59, culture, 2)}\n value={parts.seconds}\n onValueChange={(seconds) => change({ seconds })}\n />\n ) : null}\n </view>\n </view>\n );\n}\n\n/**\n * A duration in an outlined box (MAUI `G9TimeSpanPicker`): a tap opens the drum sheet; Done writes the value and\n * fires `onTimeSpanSelected`, Cancel and dismissals write nothing. Years/months/days follow the 365/30 convention;\n * the hours/minutes/seconds modes add those drums (MAUI accepted the modes but never showed them). Must be inside a\n * `G9Host`.\n */\nexport function G9TimeSpanPicker(props: G9TimeSpanPickerProps): ReactNode {\n const sheets = useG9Sheets();\n const culture = useG9Culture();\n const strings = useG9Strings();\n const glyphs = useG9Settings().glyphs;\n const open = usePickerOpen();\n const mode = props.mode ?? G9TimeSpanPickerMode.YearsMonthsDays;\n const [value, setValue] = useControllableState<number | null>({\n value: props.value,\n defaultValue: props.defaultValue ?? null,\n onChange: props.onValueChange,\n name: 'G9TimeSpanPicker.value',\n });\n const latest = useRef({ props, value });\n latest.current = { props, value };\n\n const onOpen = () =>\n open(async (isCurrent) => {\n const p = latest.current.props;\n const title = p.label?.trim() ? p.label : strings.get(G9StringKey.SelectDuration);\n const result = await showPickerSheet<number>(sheets, ({ done, cancel }) => (\n <TimeSpanSheetBody\n title={title}\n initial={latest.current.value ?? 0}\n mode={mode}\n culture={culture}\n secondsLabel={p.secondsLabel ?? 's'}\n done={done}\n cancel={cancel}\n />\n ));\n if (!isCurrent() || result === null) return;\n setValue(result);\n latest.current.props.onTimeSpanSelected?.(result);\n });\n\n return (\n <PickerField field={{ trailingIcon: glyphs.dateRange, ...props }} hasValue={value !== null} onOpen={onOpen}>\n <text className={`g9-picker__text${value !== null ? '' : ' g9-picker__text--placeholder'}`} text-maxline=\"1\">\n {value !== null ? formatTimeSpan(value, mode, strings, culture) : props.label ? '' : (props.placeholder ?? '')}\n </text>\n </PickerField>\n );\n}\n"],"names":["range","from","to","culture","width","Array","_","i","toNativeDigits","String","TimeSpanSheetBody","props","strings","useG9Strings","depth","timeSpanDepth","parts","setParts","useState","timeSpanParts","latest","useRef","change","patch","view","PickerSheetHeader","composeTimeSpan","G9WheelColumn","G9StringKey","g9TimeSpanMaxYears","years","months","Math","g9TimeSpanDefaultMaxDays","days","hours","minutes","seconds","G9TimeSpanPicker","_props_mode","_props_defaultValue","_props_placeholder","sheets","useG9Sheets","useG9Culture","glyphs","useG9Settings","open","usePickerOpen","mode","G9TimeSpanPickerMode","value","setValue","useControllableState","onOpen","isCurrent","_p_label","_latest_current_props","p","title","result","showPickerSheet","done","cancel","_latest_current_value","_p_secondsLabel","PickerField","text","formatTimeSpan"],"mappings":";;;;;;;;;;AAmCA,MAAMA,QAAQ,CAACC,MAAcC,IAAYC,SAAoBC,QAC3DC,MAAM,IAAI,CAAC;QAAE,QAAQH,KAAKD,OAAO;IAAE,GAAG,CAACK,GAAGC,IAAO;YAC/C,OAAON,OAAOM;YACd,MAAMC,eAAeC,OAAOR,OAAOM,GAAG,QAAQ,CAACH,OAAO,MAAMD,QAAQ,eAAe;QACrF;AAGK,SAASO,kBAAkBC,KAQjC;IACC,MAAMC,UAAUC;IAChB,MAAM,EAAEV,OAAO,EAAE,GAAGQ;IACpB,MAAMG,QAAQC,cAAcJ,MAAM,IAAI;IAEtC,MAAM,CAACK,OAAOC,SAAS,GAAGC,SAA0B,IAAMC,cAAcR,MAAM,OAAO,EAAEA,MAAM,IAAI;IAGjG,MAAMS,SAASC,OAAOL;IACtB,MAAMM,SAAS,CAACC;QACdH,OAAO,OAAO,GAAG;YAAE,GAAGA,OAAO,OAAO;YAAE,GAAGG,KAAK;QAAC;QAC/CN,SAASG,OAAO,OAAO;IACzB;IACA,QACGI,KAAK,UAAU,kBAAkB;MAChC,CAACC,kBACC,OAAOd,MAAM,KAAK,EAClB,UAAUA,MAAM,MAAM,EACtB,QAAQ,IAAMA,MAAM,IAAI,CAACe,gBAAgBN,OAAO,OAAO,KACvD;MACF,CAACI,KAAK,WAAW,CAAC,+BAA+B,EAAErB,QAAQ,SAAS,EAAE,EAAE;QACtE,CAACwB,cACC,OAAOf,QAAQ,GAAG,CAACgB,YAAY,IAAI,GACnC,OAAO5B,MAAM,GAAG6B,oBAAoB1B,SAAS,IAC7C,OAAOa,MAAM,KAAK,EAClB,eAAe,CAACc,QAAUR,OAAO;YAAEQ;QAAM,KACzC;QACF,CAACH,cACC,OAAOf,QAAQ,GAAG,CAACgB,YAAY,KAAK,GACpC,OAAO5B,MAAM,GAAG,IAAIG,SAAS,IAC7B,OAAOa,MAAM,MAAM,EACnB,eAAe,CAACe,SAAWT,OAAO;YAAES;QAAO,KAC3C;QACF,CAACjB,SAAS,KACPa,cACC,OAAOf,QAAQ,GAAG,CAACgB,YAAY,GAAG,GAClC,OAAO5B,MAAM,GAAGgC,KAAK,GAAG,CAACC,0BAA0BjB,MAAM,IAAI,GAAGb,SAAS,IACzE,OAAOa,MAAM,IAAI,EACjB,eAAe,CAACkB,OAASZ,OAAO;YAAEY;QAAK,QAEvC,KAAK;QACT,CAACpB,SAAS,KACPa,cACC,OAAOf,QAAQ,GAAG,CAACgB,YAAY,IAAI,GACnC,OAAO5B,MAAM,GAAG,IAAIG,SAAS,IAC7B,OAAOa,MAAM,KAAK,EAClB,eAAe,CAACmB,QAAUb,OAAO;YAAEa;QAAM,QAEzC,KAAK;QACT,CAACrB,SAAS,KACPa,cACC,OAAOf,QAAQ,GAAG,CAACgB,YAAY,MAAM,GACrC,OAAO5B,MAAM,GAAG,IAAIG,SAAS,IAC7B,OAAOa,MAAM,OAAO,EACpB,eAAe,CAACoB,UAAYd,OAAO;YAAEc;QAAQ,QAE7C,KAAK;QACT,CAACtB,SAAS,KACPa,cACC,OAAOhB,MAAM,YAAY,EACzB,OAAOX,MAAM,GAAG,IAAIG,SAAS,IAC7B,OAAOa,MAAM,OAAO,EACpB,eAAe,CAACqB,UAAYf,OAAO;YAAEe;QAAQ,QAE7C,KAAK;MACX,EAAEb,KAAK;IACT,EAAEA;AAEN;AAQO,SAASc,iBAAiB3B,KAA4B;QAM9C4B,aAGGC,qBA8B4EC;IAtC5F,MAAMC,SAASC;IACf,MAAMxC,UAAUyC;IAChB,MAAMhC,UAAUC;IAChB,MAAMgC,SAASC,gBAAgB,MAAM;IACrC,MAAMC,OAAOC;IACb,MAAMC,OAAO,QAAAV,CAAAA,cAAAA,MAAM,IAAI,AAAD,IAATA,cAAcW,qBAAqB,eAAe;IAC/D,MAAM,CAACC,OAAOC,SAAS,GAAGC,qBAAoC;QAC5D,OAAO1C,MAAM,KAAK;QAClB,cAAc,QAAA6B,CAAAA,sBAAAA,MAAM,YAAY,AAAD,IAAjBA,sBAAsB;QACpC,UAAU7B,MAAM,aAAa;QAC7B,MAAM;IACR;IACA,MAAMS,SAASC,OAAO;QAAEV;QAAOwC;IAAM;IACrC/B,OAAO,OAAO,GAAG;QAAET;QAAOwC;IAAM;IAEhC,MAAMG,SAAS,IACbP,KAAK,OAAOQ;gBAEIC,UAcdC,0CAAAA;YAfA,MAAMC,IAAItC,OAAO,OAAO,CAAC,KAAK;YAC9B,MAAMuC,QAAQH,AAAAA,SAAAA,CAAAA,WAAAA,EAAE,KAAK,AAAD,IAANA,KAAAA,IAAAA,SAAS,IAAI,EAAC,IAAIE,EAAE,KAAK,GAAG9C,QAAQ,GAAG,CAACgB,YAAY,cAAc;YAChF,MAAMgC,SAAS,MAAMC,gBAAwBnB,QAAQ,CAAC,EAAEoB,IAAI,EAAEC,MAAM,EAAE;oBAGzDC,uBAGKC;wBALfvD,kBACC,OAAOiD,OACP,SAAS,QAAAK,CAAAA,wBAAAA,OAAO,OAAO,CAAC,KAAK,AAAD,IAAnBA,wBAAwB,GACjC,MAAMf,MACN,SAAS9C,SACT,cAAc,QAAA8D,CAAAA,kBAAAA,EAAE,YAAY,AAAD,IAAbA,kBAAkB,KAChC,MAAMH,MACN,QAAQC;;YAGZ,IAAI,CAACR,eAAeK,AAAW,SAAXA,QAAiB;YACrCR,SAASQ;oBACTH,CAAAA,2CAAAA,AAAAA,CAAAA,wBAAAA,OAAO,OAAO,CAAC,KAAK,AAAD,EAAE,kBAAkB,AAAD,KAAtCA,yCAAAA,IAAAA,CAAAA,uBAA0CG;QAC5C;IAEF,QACGM,YAAY,OAAO;QAAE,cAAcrB,OAAO,SAAS;QAAE,GAAGlC,KAAK;IAAC,GAAG,UAAUwC,AAAU,SAAVA,OAAgB,QAAQG,QAAQ;MAC1G,CAACa,KAAK,WAAW,CAAC,eAAe,EAAEhB,AAAU,SAAVA,QAAiB,KAAK,iCAAiC,EAAE,aAAa,IAAI;QAC3G,CAACA,AAAU,SAAVA,QAAiBiB,eAAejB,OAAOF,MAAMrC,SAAST,WAAWQ,MAAM,KAAK,GAAG,KAAK,QAAC8B,CAAAA,qBAAAA,MAAM,WAAW,AAAD,IAAhBA,qBAAqB,GAAI;MACjH,EAAE0B,KAAK;IACT,EAAED;AAEN"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { type G9Culture, type G9Strings } from '@g9tm/lynxcontrols-foundation';
|
|
2
|
+
/** Which drums the duration picker shows (MAUI `G9TimeSpanPickerMode`). */
|
|
3
|
+
export declare const G9TimeSpanPickerMode: {
|
|
4
|
+
readonly YearsMonths: "yearsMonths";
|
|
5
|
+
readonly YearsMonthsDays: "yearsMonthsDays";
|
|
6
|
+
readonly YearsMonthsDaysHours: "yearsMonthsDaysHours";
|
|
7
|
+
readonly YearsMonthsDaysHoursMinutes: "yearsMonthsDaysHoursMinutes";
|
|
8
|
+
readonly YearsMonthsDaysHoursMinutesSeconds: "yearsMonthsDaysHoursMinutesSeconds";
|
|
9
|
+
};
|
|
10
|
+
export type G9TimeSpanPickerMode = (typeof G9TimeSpanPickerMode)[keyof typeof G9TimeSpanPickerMode];
|
|
11
|
+
/** The number of drums after years and months a mode shows (0 = none … 4 = days, hours, minutes, seconds). */
|
|
12
|
+
export declare function timeSpanDepth(mode: G9TimeSpanPickerMode): number;
|
|
13
|
+
/** Most years the years drum shows (MAUI `MaxYears`). */
|
|
14
|
+
export declare const g9TimeSpanMaxYears = 100;
|
|
15
|
+
/** Default last row of the days drum (MAUI `DefaultMaxDays`); the 365-day remainder can need up to 34. */
|
|
16
|
+
export declare const g9TimeSpanDefaultMaxDays = 30;
|
|
17
|
+
/** The parts a duration shows on the drums. */
|
|
18
|
+
export interface G9TimeSpanParts {
|
|
19
|
+
readonly years: number;
|
|
20
|
+
readonly months: number;
|
|
21
|
+
readonly days: number;
|
|
22
|
+
readonly hours: number;
|
|
23
|
+
readonly minutes: number;
|
|
24
|
+
readonly seconds: number;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Splits a duration (ms) into the drum parts of a mode (MAUI sheet constructor): whole days decompose with the
|
|
28
|
+
* 365/30 rule, years are pinned to 100, parts the mode does not show are dropped, sub-second remainders too.
|
|
29
|
+
*/
|
|
30
|
+
export declare function timeSpanParts(ms: number, mode: G9TimeSpanPickerMode): G9TimeSpanParts;
|
|
31
|
+
/** Joins drum parts into a duration in milliseconds (MAUI `ComposeSelection`, plus the time drums). */
|
|
32
|
+
export declare function composeTimeSpan(parts: G9TimeSpanParts): number;
|
|
33
|
+
/**
|
|
34
|
+
* The field text (MAUI `FormatValue`): non-zero years, months and (with days) days in the localized `{0}y {0}m {0}d`
|
|
35
|
+
* formats, `0d` when all are zero; time modes append `HH:mm[:ss]` when it is not zero. Digits follow the culture.
|
|
36
|
+
*/
|
|
37
|
+
export declare function formatTimeSpan(ms: number, mode: G9TimeSpanPickerMode, strings: G9Strings, culture: G9Culture): string;
|
|
38
|
+
//# sourceMappingURL=timespan.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"timespan.d.ts","sourceRoot":"","sources":["../../src/pickers/timespan.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,SAAS,EAEd,KAAK,SAAS,EAGf,MAAM,+BAA+B,CAAC;AAMvC,2EAA2E;AAC3E,eAAO,MAAM,oBAAoB;;;;;;CAMvB,CAAC;AACX,MAAM,MAAM,oBAAoB,GAAG,CAAC,OAAO,oBAAoB,CAAC,CAAC,MAAM,OAAO,oBAAoB,CAAC,CAAC;AAIpG,8GAA8G;AAC9G,wBAAgB,aAAa,CAAC,IAAI,EAAE,oBAAoB,GAAG,MAAM,CAEhE;AAED,yDAAyD;AACzD,eAAO,MAAM,kBAAkB,MAAM,CAAC;AACtC,0GAA0G;AAC1G,eAAO,MAAM,wBAAwB,KAAK,CAAC;AAE3C,+CAA+C;AAC/C,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,oBAAoB,GAAG,eAAe,CAcrF;AAED,uGAAuG;AACvG,wBAAgB,eAAe,CAAC,KAAK,EAAE,eAAe,GAAG,MAAM,CAO9D;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,oBAAoB,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,GAAG,MAAM,CAerH"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { G9StringKey, MS_PER_DAY, composeDays, decomposeDays, toNativeDigits } from "@g9tm/lynxcontrols-foundation";
|
|
2
|
+
const G9TimeSpanPickerMode = {
|
|
3
|
+
YearsMonths: 'yearsMonths',
|
|
4
|
+
YearsMonthsDays: 'yearsMonthsDays',
|
|
5
|
+
YearsMonthsDaysHours: 'yearsMonthsDaysHours',
|
|
6
|
+
YearsMonthsDaysHoursMinutes: 'yearsMonthsDaysHoursMinutes',
|
|
7
|
+
YearsMonthsDaysHoursMinutesSeconds: 'yearsMonthsDaysHoursMinutesSeconds'
|
|
8
|
+
};
|
|
9
|
+
const ORDER = Object.values(G9TimeSpanPickerMode);
|
|
10
|
+
function timeSpanDepth(mode) {
|
|
11
|
+
return Math.max(0, ORDER.indexOf(mode));
|
|
12
|
+
}
|
|
13
|
+
const g9TimeSpanMaxYears = 100;
|
|
14
|
+
const g9TimeSpanDefaultMaxDays = 30;
|
|
15
|
+
function timeSpanParts(ms, mode) {
|
|
16
|
+
const total = Number.isFinite(ms) ? Math.max(0, 1000 * Math.floor(ms / 1000)) : 0;
|
|
17
|
+
const wholeDays = Math.floor(total / MS_PER_DAY);
|
|
18
|
+
const d = decomposeDays(wholeDays);
|
|
19
|
+
const depth = timeSpanDepth(mode);
|
|
20
|
+
const rest = total - wholeDays * MS_PER_DAY;
|
|
21
|
+
return {
|
|
22
|
+
years: Math.min(d.years, g9TimeSpanMaxYears),
|
|
23
|
+
months: d.months,
|
|
24
|
+
days: depth >= 1 ? d.days : 0,
|
|
25
|
+
hours: depth >= 2 ? Math.floor(rest / 3600000) : 0,
|
|
26
|
+
minutes: depth >= 3 ? Math.floor(rest % 3600000 / 60000) : 0,
|
|
27
|
+
seconds: depth >= 4 ? Math.floor(rest % 60000 / 1000) : 0
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
function composeTimeSpan(parts) {
|
|
31
|
+
return composeDays(parts.years, parts.months, parts.days) * MS_PER_DAY + 3600000 * parts.hours + 60000 * parts.minutes + 1000 * parts.seconds;
|
|
32
|
+
}
|
|
33
|
+
function formatTimeSpan(ms, mode, strings, culture) {
|
|
34
|
+
const p = timeSpanParts(ms, mode);
|
|
35
|
+
const depth = timeSpanDepth(mode);
|
|
36
|
+
const parts = [];
|
|
37
|
+
if (p.years > 0) parts.push(strings.format(G9StringKey.TimeSpanYearsFormat, p.years));
|
|
38
|
+
if (p.months > 0) parts.push(strings.format(G9StringKey.TimeSpanMonthsFormat, p.months));
|
|
39
|
+
if (depth >= 1 && p.days > 0) parts.push(strings.format(G9StringKey.TimeSpanDaysFormat, p.days));
|
|
40
|
+
if (depth >= 2 && (p.hours > 0 || p.minutes > 0 || p.seconds > 0)) {
|
|
41
|
+
const two = (v)=>toNativeDigits(String(v).padStart(2, '0'), culture.numberingSystem);
|
|
42
|
+
parts.push(depth >= 4 ? `${two(p.hours)}:${two(p.minutes)}:${two(p.seconds)}` : `${two(p.hours)}:${two(p.minutes)}`);
|
|
43
|
+
}
|
|
44
|
+
if (0 === parts.length) return strings.format(G9StringKey.TimeSpanDaysFormat, 0);
|
|
45
|
+
return parts.join(' ');
|
|
46
|
+
}
|
|
47
|
+
export { G9TimeSpanPickerMode, composeTimeSpan, formatTimeSpan, g9TimeSpanDefaultMaxDays, g9TimeSpanMaxYears, timeSpanDepth, timeSpanParts };
|
|
48
|
+
|
|
49
|
+
//# sourceMappingURL=timespan.jsx.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pickers/timespan.jsx","sources":["../../src/pickers/timespan.ts"],"sourcesContent":["import {\n composeDays,\n decomposeDays,\n type G9Culture,\n G9StringKey,\n type G9Strings,\n MS_PER_DAY,\n toNativeDigits,\n} from '@g9tm/lynxcontrols-foundation';\n\n// Duration math of the duration picker (MAUI `G9TimeSpanPicker` + `G9TimeSpanPickerSheet`). Days use the foundation\n// convention (year = 365 days, month = 30, months 0–11); the time drums are new in G9 Lynx: MAUI accepted the\n// hours/minutes/seconds modes but only ever showed years, months and days.\n\n/** Which drums the duration picker shows (MAUI `G9TimeSpanPickerMode`). */\nexport const G9TimeSpanPickerMode = {\n YearsMonths: 'yearsMonths',\n YearsMonthsDays: 'yearsMonthsDays',\n YearsMonthsDaysHours: 'yearsMonthsDaysHours',\n YearsMonthsDaysHoursMinutes: 'yearsMonthsDaysHoursMinutes',\n YearsMonthsDaysHoursMinutesSeconds: 'yearsMonthsDaysHoursMinutesSeconds',\n} as const;\nexport type G9TimeSpanPickerMode = (typeof G9TimeSpanPickerMode)[keyof typeof G9TimeSpanPickerMode];\n\nconst ORDER: readonly G9TimeSpanPickerMode[] = Object.values(G9TimeSpanPickerMode);\n\n/** The number of drums after years and months a mode shows (0 = none … 4 = days, hours, minutes, seconds). */\nexport function timeSpanDepth(mode: G9TimeSpanPickerMode): number {\n return Math.max(0, ORDER.indexOf(mode));\n}\n\n/** Most years the years drum shows (MAUI `MaxYears`). */\nexport const g9TimeSpanMaxYears = 100;\n/** Default last row of the days drum (MAUI `DefaultMaxDays`); the 365-day remainder can need up to 34. */\nexport const g9TimeSpanDefaultMaxDays = 30;\n\n/** The parts a duration shows on the drums. */\nexport interface G9TimeSpanParts {\n readonly years: number;\n readonly months: number;\n readonly days: number;\n readonly hours: number;\n readonly minutes: number;\n readonly seconds: number;\n}\n\n/**\n * Splits a duration (ms) into the drum parts of a mode (MAUI sheet constructor): whole days decompose with the\n * 365/30 rule, years are pinned to 100, parts the mode does not show are dropped, sub-second remainders too.\n */\nexport function timeSpanParts(ms: number, mode: G9TimeSpanPickerMode): G9TimeSpanParts {\n const total = Number.isFinite(ms) ? Math.max(0, Math.floor(ms / 1000) * 1000) : 0;\n const wholeDays = Math.floor(total / MS_PER_DAY);\n const d = decomposeDays(wholeDays);\n const depth = timeSpanDepth(mode);\n const rest = total - wholeDays * MS_PER_DAY;\n return {\n years: Math.min(d.years, g9TimeSpanMaxYears),\n months: d.months,\n days: depth >= 1 ? d.days : 0,\n hours: depth >= 2 ? Math.floor(rest / 3_600_000) : 0,\n minutes: depth >= 3 ? Math.floor((rest % 3_600_000) / 60_000) : 0,\n seconds: depth >= 4 ? Math.floor((rest % 60_000) / 1000) : 0,\n };\n}\n\n/** Joins drum parts into a duration in milliseconds (MAUI `ComposeSelection`, plus the time drums). */\nexport function composeTimeSpan(parts: G9TimeSpanParts): number {\n return (\n composeDays(parts.years, parts.months, parts.days) * MS_PER_DAY +\n parts.hours * 3_600_000 +\n parts.minutes * 60_000 +\n parts.seconds * 1000\n );\n}\n\n/**\n * The field text (MAUI `FormatValue`): non-zero years, months and (with days) days in the localized `{0}y {0}m {0}d`\n * formats, `0d` when all are zero; time modes append `HH:mm[:ss]` when it is not zero. Digits follow the culture.\n */\nexport function formatTimeSpan(ms: number, mode: G9TimeSpanPickerMode, strings: G9Strings, culture: G9Culture): string {\n const p = timeSpanParts(ms, mode);\n const depth = timeSpanDepth(mode);\n const parts: string[] = [];\n if (p.years > 0) parts.push(strings.format(G9StringKey.TimeSpanYearsFormat, p.years));\n if (p.months > 0) parts.push(strings.format(G9StringKey.TimeSpanMonthsFormat, p.months));\n if (depth >= 1 && p.days > 0) parts.push(strings.format(G9StringKey.TimeSpanDaysFormat, p.days));\n if (depth >= 2 && (p.hours > 0 || p.minutes > 0 || p.seconds > 0)) {\n const two = (v: number) => toNativeDigits(String(v).padStart(2, '0'), culture.numberingSystem);\n parts.push(\n depth >= 4 ? `${two(p.hours)}:${two(p.minutes)}:${two(p.seconds)}` : `${two(p.hours)}:${two(p.minutes)}`,\n );\n }\n if (parts.length === 0) return strings.format(G9StringKey.TimeSpanDaysFormat, 0);\n return parts.join(' ');\n}\n"],"names":["G9TimeSpanPickerMode","ORDER","Object","timeSpanDepth","mode","Math","g9TimeSpanMaxYears","g9TimeSpanDefaultMaxDays","timeSpanParts","ms","total","Number","wholeDays","MS_PER_DAY","d","decomposeDays","depth","rest","composeTimeSpan","parts","composeDays","formatTimeSpan","strings","culture","p","G9StringKey","two","v","toNativeDigits","String"],"mappings":";AAeO,MAAMA,uBAAuB;IAClC,aAAa;IACb,iBAAiB;IACjB,sBAAsB;IACtB,6BAA6B;IAC7B,oCAAoC;AACtC;AAGA,MAAMC,QAAyCC,OAAO,MAAM,CAACF;AAGtD,SAASG,cAAcC,IAA0B;IACtD,OAAOC,KAAK,GAAG,CAAC,GAAGJ,MAAM,OAAO,CAACG;AACnC;AAGO,MAAME,qBAAqB;AAE3B,MAAMC,2BAA2B;AAgBjC,SAASC,cAAcC,EAAU,EAAEL,IAA0B;IAClE,MAAMM,QAAQC,OAAO,QAAQ,CAACF,MAAMJ,KAAK,GAAG,CAAC,GAAGA,AAAwB,OAAxBA,KAAK,KAAK,CAACI,KAAK,SAAgB;IAChF,MAAMG,YAAYP,KAAK,KAAK,CAACK,QAAQG;IACrC,MAAMC,IAAIC,cAAcH;IACxB,MAAMI,QAAQb,cAAcC;IAC5B,MAAMa,OAAOP,QAAQE,YAAYC;IACjC,OAAO;QACL,OAAOR,KAAK,GAAG,CAACS,EAAE,KAAK,EAAER;QACzB,QAAQQ,EAAE,MAAM;QAChB,MAAME,SAAS,IAAIF,EAAE,IAAI,GAAG;QAC5B,OAAOE,SAAS,IAAIX,KAAK,KAAK,CAACY,OAAO,WAAa;QACnD,SAASD,SAAS,IAAIX,KAAK,KAAK,CAAEY,OAAO,UAAa,SAAU;QAChE,SAASD,SAAS,IAAIX,KAAK,KAAK,CAAEY,OAAO,QAAU,QAAQ;IAC7D;AACF;AAGO,SAASC,gBAAgBC,KAAsB;IACpD,OACEC,YAAYD,MAAM,KAAK,EAAEA,MAAM,MAAM,EAAEA,MAAM,IAAI,IAAIN,aACrDM,AAAc,UAAdA,MAAM,KAAK,GACXA,AAAgB,QAAhBA,MAAM,OAAO,GACbA,AAAgB,OAAhBA,MAAM,OAAO;AAEjB;AAMO,SAASE,eAAeZ,EAAU,EAAEL,IAA0B,EAAEkB,OAAkB,EAAEC,OAAkB;IAC3G,MAAMC,IAAIhB,cAAcC,IAAIL;IAC5B,MAAMY,QAAQb,cAAcC;IAC5B,MAAMe,QAAkB,EAAE;IAC1B,IAAIK,EAAE,KAAK,GAAG,GAAGL,MAAM,IAAI,CAACG,QAAQ,MAAM,CAACG,YAAY,mBAAmB,EAAED,EAAE,KAAK;IACnF,IAAIA,EAAE,MAAM,GAAG,GAAGL,MAAM,IAAI,CAACG,QAAQ,MAAM,CAACG,YAAY,oBAAoB,EAAED,EAAE,MAAM;IACtF,IAAIR,SAAS,KAAKQ,EAAE,IAAI,GAAG,GAAGL,MAAM,IAAI,CAACG,QAAQ,MAAM,CAACG,YAAY,kBAAkB,EAAED,EAAE,IAAI;IAC9F,IAAIR,SAAS,KAAMQ,CAAAA,EAAE,KAAK,GAAG,KAAKA,EAAE,OAAO,GAAG,KAAKA,EAAE,OAAO,GAAG,IAAI;QACjE,MAAME,MAAM,CAACC,IAAcC,eAAeC,OAAOF,GAAG,QAAQ,CAAC,GAAG,MAAMJ,QAAQ,eAAe;QAC7FJ,MAAM,IAAI,CACRH,SAAS,IAAI,GAAGU,IAAIF,EAAE,KAAK,EAAE,CAAC,EAAEE,IAAIF,EAAE,OAAO,EAAE,CAAC,EAAEE,IAAIF,EAAE,OAAO,GAAG,GAAG,GAAGE,IAAIF,EAAE,KAAK,EAAE,CAAC,EAAEE,IAAIF,EAAE,OAAO,GAAG;IAE5G;IACA,IAAIL,AAAiB,MAAjBA,MAAM,MAAM,EAAQ,OAAOG,QAAQ,MAAM,CAACG,YAAY,kBAAkB,EAAE;IAC9E,OAAON,MAAM,IAAI,CAAC;AACpB"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import './pickers.css';
|
|
2
|
+
import type { G9TextInputDirection } from '@g9tm/lynxcontrols-foundation';
|
|
3
|
+
import { type ReactNode } from '@lynx-js/react';
|
|
4
|
+
import type { G9SelectionItem } from '../base/selection-item.js';
|
|
5
|
+
import { type G9OutlinedFieldProps, type G9TrailingAffordance } from '../fields/outlined-field.js';
|
|
6
|
+
/**
|
|
7
|
+
* Opens a picker sheet at most once at a time and drops results that arrive after the field unmounted (MAUI
|
|
8
|
+
* `_isOpening` + `Unloaded`). `open(run)` runs `run(isCurrent)`; `isCurrent()` is false once a newer open started or
|
|
9
|
+
* the field is gone, so a stale result applies nothing. Errors go to the provider's diagnostics.
|
|
10
|
+
*/
|
|
11
|
+
export declare function usePickerOpen(): (run: (isCurrent: () => boolean) => Promise<void>) => void;
|
|
12
|
+
/** The reading direction of a value written with a `G9TextInputDirection` (internal). */
|
|
13
|
+
export declare function valueDirection(direction: G9TextInputDirection | undefined, culture: 'ltr' | 'rtl'): 'ltr' | 'rtl';
|
|
14
|
+
/** The physical direction class of a value written with a `G9TextInputDirection`. */
|
|
15
|
+
export declare function valueDirectionClass(direction: G9TextInputDirection | undefined, culture: 'ltr' | 'rtl'): string;
|
|
16
|
+
/** The leading icon (or colour swatch) of a selected item inside the trigger (MAUI `CreateValueIcon`, 18 px). */
|
|
17
|
+
export declare function SelectionValueIcon(props: {
|
|
18
|
+
readonly item: G9SelectionItem;
|
|
19
|
+
readonly color?: string;
|
|
20
|
+
}): ReactNode;
|
|
21
|
+
/** Props shared by every picker trigger: the outlined field props (label, helper, error, icons, read-only, …). */
|
|
22
|
+
export type G9PickerFieldProps = G9OutlinedFieldProps;
|
|
23
|
+
/**
|
|
24
|
+
* The tap-to-open outlined box every picker uses (MAUI `G9OutlinedFieldBase` with a tap recognizer): no keyboard,
|
|
25
|
+
* the label floats while there is a value, a tap on the box opens the sheet unless disabled or read-only.
|
|
26
|
+
*/
|
|
27
|
+
export declare function PickerField(props: {
|
|
28
|
+
readonly field: G9PickerFieldProps;
|
|
29
|
+
readonly hasValue: boolean;
|
|
30
|
+
readonly onOpen: () => void;
|
|
31
|
+
readonly trailingAffordance?: G9TrailingAffordance | null;
|
|
32
|
+
readonly children?: ReactNode;
|
|
33
|
+
}): ReactNode;
|
|
34
|
+
//# sourceMappingURL=trigger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trigger.d.ts","sourceRoot":"","sources":["../../src/pickers/trigger.tsx"],"names":[],"mappings":"AAAA,OAAO,eAAe,CAAC;AACvB,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AAC1E,OAAO,EAAE,KAAK,SAAS,EAAqB,MAAM,gBAAgB,CAAC;AAEnE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAmB,KAAK,oBAAoB,EAAE,KAAK,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAKjH;;;;GAIG;AACH,wBAAgB,aAAa,IAAI,CAAC,GAAG,EAAE,CAAC,SAAS,EAAE,MAAM,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,KAAK,IAAI,CAwB1F;AAED,yFAAyF;AACzF,wBAAgB,cAAc,CAAC,SAAS,EAAE,oBAAoB,GAAG,SAAS,EAAE,OAAO,EAAE,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,CAEjH;AAED,qFAAqF;AACrF,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,oBAAoB,GAAG,SAAS,EAAE,OAAO,EAAE,KAAK,GAAG,KAAK,GAAG,MAAM,CAE/G;AAED,iHAAiH;AACjH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE;IAAE,QAAQ,CAAC,IAAI,EAAE,eAAe,CAAC;IAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CAoBhH;AAED,kHAAkH;AAClH,MAAM,MAAM,kBAAkB,GAAG,oBAAoB,CAAC;AAEtD;;;GAGG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE;IACjC,QAAQ,CAAC,KAAK,EAAE,kBAAkB,CAAC;IACnC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,MAAM,EAAE,MAAM,IAAI,CAAC;IAC5B,QAAQ,CAAC,kBAAkB,CAAC,EAAE,oBAAoB,GAAG,IAAI,CAAC;IAC1D,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,CAAC;CAC/B,GAAG,SAAS,CAqBZ"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import "./pickers.css";
|
|
2
|
+
import { useEffect, useRef } from "@lynx-js/react";
|
|
3
|
+
import { g9RowStyle } from "../base/control.jsx";
|
|
4
|
+
import { G9OutlinedField } from "../fields/outlined-field.jsx";
|
|
5
|
+
import { G9IconSlot, hasIconSlot } from "../icon/slot.jsx";
|
|
6
|
+
import { G9Swatch } from "../icon/swatch.jsx";
|
|
7
|
+
import { useG9Diagnostics, useG9Direction } from "../provider/hooks.jsx";
|
|
8
|
+
function usePickerOpen() {
|
|
9
|
+
const opening = useRef(false);
|
|
10
|
+
const generation = useRef(0);
|
|
11
|
+
const diagnostics = useG9Diagnostics();
|
|
12
|
+
useEffect(()=>()=>{
|
|
13
|
+
generation.current += 1;
|
|
14
|
+
}, []);
|
|
15
|
+
return (run)=>{
|
|
16
|
+
if (opening.current) return;
|
|
17
|
+
opening.current = true;
|
|
18
|
+
const mine = ++generation.current;
|
|
19
|
+
(async ()=>{
|
|
20
|
+
try {
|
|
21
|
+
await run(()=>generation.current === mine);
|
|
22
|
+
} catch (error) {
|
|
23
|
+
diagnostics.log({
|
|
24
|
+
level: 'error',
|
|
25
|
+
message: 'Picker failed.',
|
|
26
|
+
source: 'G9Picker',
|
|
27
|
+
error
|
|
28
|
+
});
|
|
29
|
+
} finally{
|
|
30
|
+
opening.current = false;
|
|
31
|
+
}
|
|
32
|
+
})();
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
function valueDirection(direction, culture) {
|
|
36
|
+
return 'leftToRight' === direction ? 'ltr' : 'rightToLeft' === direction ? 'rtl' : culture;
|
|
37
|
+
}
|
|
38
|
+
function valueDirectionClass(direction, culture) {
|
|
39
|
+
return `g9-dir-${valueDirection(direction, culture)}`;
|
|
40
|
+
}
|
|
41
|
+
function SelectionValueIcon(props) {
|
|
42
|
+
var _item_emoji, _item_iconPath, _item_iconImage;
|
|
43
|
+
var _item_swatchFirstColor, _item_swatchSecondColor;
|
|
44
|
+
const { item } = props;
|
|
45
|
+
const icon = {
|
|
46
|
+
emoji: null != (_item_emoji = item.emoji) ? _item_emoji : null,
|
|
47
|
+
icon: item.icon,
|
|
48
|
+
imagePath: null != (_item_iconPath = item.iconPath) ? _item_iconPath : null,
|
|
49
|
+
image: null != (_item_iconImage = item.iconImage) ? _item_iconImage : null
|
|
50
|
+
};
|
|
51
|
+
if (hasIconSlot(icon)) {
|
|
52
|
+
var _ref, _item_iconTintColor;
|
|
53
|
+
return <view className="g9-picker__icon">
|
|
54
|
+
<G9IconSlot {...icon} size={18} color={null != (_ref = null != (_item_iconTintColor = item.iconTintColor) ? _item_iconTintColor : props.color) ? _ref : 'var(--g9-on-surface-variant)'}/>
|
|
55
|
+
</view>;
|
|
56
|
+
}
|
|
57
|
+
if ((null == (_item_swatchFirstColor = item.swatchFirstColor) ? void 0 : _item_swatchFirstColor.trim()) || (null == (_item_swatchSecondColor = item.swatchSecondColor) ? void 0 : _item_swatchSecondColor.trim())) return <G9Swatch first={item.swatchFirstColor} second={item.swatchSecondColor} className="g9-picker__swatch"/>;
|
|
58
|
+
return null;
|
|
59
|
+
}
|
|
60
|
+
function PickerField(props) {
|
|
61
|
+
var _ref, _field_label;
|
|
62
|
+
const direction = useG9Direction();
|
|
63
|
+
const { field } = props;
|
|
64
|
+
const blocked = true === field.disabled || true === field.readOnly;
|
|
65
|
+
return <G9OutlinedField {...field} className={`g9-picker${field.className ? ` ${field.className}` : ''}`} focused={false} hasValue={props.hasValue} {...void 0 !== props.trailingAffordance ? {
|
|
66
|
+
trailingAffordance: props.trailingAffordance
|
|
67
|
+
} : {}} onFocusRequest={()=>{
|
|
68
|
+
if (!blocked) props.onOpen();
|
|
69
|
+
}} accessibilityLabel={null != (_ref = null != (_field_label = field.label) ? _field_label : field.placeholder) ? _ref : ''}>
|
|
70
|
+
<view className={`g9-picker__value g9-dir-${direction}`} style={g9RowStyle(direction)}>
|
|
71
|
+
{props.children}
|
|
72
|
+
</view>
|
|
73
|
+
</G9OutlinedField>;
|
|
74
|
+
}
|
|
75
|
+
export { PickerField, SelectionValueIcon, usePickerOpen, valueDirection, valueDirectionClass };
|
|
76
|
+
|
|
77
|
+
//# sourceMappingURL=trigger.jsx.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pickers/trigger.jsx","sources":["../../src/pickers/trigger.tsx"],"sourcesContent":["import './pickers.css';\nimport type { G9TextInputDirection } from '@g9tm/lynxcontrols-foundation';\nimport { type ReactNode, useEffect, useRef } from '@lynx-js/react';\nimport { g9RowStyle } from '../base/control';\nimport type { G9SelectionItem } from '../base/selection-item';\nimport { G9OutlinedField, type G9OutlinedFieldProps, type G9TrailingAffordance } from '../fields/outlined-field';\nimport { G9IconSlot, hasIconSlot } from '../icon/slot';\nimport { G9Swatch } from '../icon/swatch';\nimport { useG9Diagnostics, useG9Direction } from '../provider/hooks';\n\n/**\n * Opens a picker sheet at most once at a time and drops results that arrive after the field unmounted (MAUI\n * `_isOpening` + `Unloaded`). `open(run)` runs `run(isCurrent)`; `isCurrent()` is false once a newer open started or\n * the field is gone, so a stale result applies nothing. Errors go to the provider's diagnostics.\n */\nexport function usePickerOpen(): (run: (isCurrent: () => boolean) => Promise<void>) => void {\n const opening = useRef(false);\n const generation = useRef(0);\n const diagnostics = useG9Diagnostics();\n useEffect(\n () => () => {\n generation.current += 1;\n },\n [],\n );\n return (run) => {\n if (opening.current) return;\n opening.current = true;\n const mine = ++generation.current;\n void (async () => {\n try {\n await run(() => generation.current === mine);\n } catch (error) {\n diagnostics.log({ level: 'error', message: 'Picker failed.', source: 'G9Picker', error });\n } finally {\n opening.current = false;\n }\n })();\n };\n}\n\n/** The reading direction of a value written with a `G9TextInputDirection` (internal). */\nexport function valueDirection(direction: G9TextInputDirection | undefined, culture: 'ltr' | 'rtl'): 'ltr' | 'rtl' {\n return direction === 'leftToRight' ? 'ltr' : direction === 'rightToLeft' ? 'rtl' : culture;\n}\n\n/** The physical direction class of a value written with a `G9TextInputDirection`. */\nexport function valueDirectionClass(direction: G9TextInputDirection | undefined, culture: 'ltr' | 'rtl'): string {\n return `g9-dir-${valueDirection(direction, culture)}`;\n}\n\n/** The leading icon (or colour swatch) of a selected item inside the trigger (MAUI `CreateValueIcon`, 18 px). */\nexport function SelectionValueIcon(props: { readonly item: G9SelectionItem; readonly color?: string }): ReactNode {\n const { item } = props;\n const icon = {\n emoji: item.emoji ?? null,\n icon: item.icon,\n imagePath: item.iconPath ?? null,\n image: item.iconImage ?? null,\n };\n if (hasIconSlot(icon)) {\n // MAUI keeps 8 px between the value icon and its text (6 px inside a combo chip): pickers.css.\n return (\n <view className=\"g9-picker__icon\">\n <G9IconSlot {...icon} size={18} color={item.iconTintColor ?? props.color ?? 'var(--g9-on-surface-variant)'} />\n </view>\n );\n }\n if (item.swatchFirstColor?.trim() || item.swatchSecondColor?.trim()) {\n return <G9Swatch first={item.swatchFirstColor} second={item.swatchSecondColor} className=\"g9-picker__swatch\" />;\n }\n return null;\n}\n\n/** Props shared by every picker trigger: the outlined field props (label, helper, error, icons, read-only, …). */\nexport type G9PickerFieldProps = G9OutlinedFieldProps;\n\n/**\n * The tap-to-open outlined box every picker uses (MAUI `G9OutlinedFieldBase` with a tap recognizer): no keyboard,\n * the label floats while there is a value, a tap on the box opens the sheet unless disabled or read-only.\n */\nexport function PickerField(props: {\n readonly field: G9PickerFieldProps;\n readonly hasValue: boolean;\n readonly onOpen: () => void;\n readonly trailingAffordance?: G9TrailingAffordance | null;\n readonly children?: ReactNode;\n}): ReactNode {\n const direction = useG9Direction();\n const { field } = props;\n const blocked = field.disabled === true || field.readOnly === true;\n return (\n <G9OutlinedField\n {...field}\n className={`g9-picker${field.className ? ` ${field.className}` : ''}`}\n focused={false}\n hasValue={props.hasValue}\n {...(props.trailingAffordance !== undefined ? { trailingAffordance: props.trailingAffordance } : {})}\n onFocusRequest={() => {\n if (!blocked) props.onOpen();\n }}\n accessibilityLabel={field.label ?? field.placeholder ?? ''}\n >\n <view className={`g9-picker__value g9-dir-${direction}`} style={g9RowStyle(direction)}>\n {props.children}\n </view>\n </G9OutlinedField>\n );\n}\n"],"names":["usePickerOpen","opening","useRef","generation","diagnostics","useG9Diagnostics","useEffect","run","mine","error","valueDirection","direction","culture","valueDirectionClass","SelectionValueIcon","props","_item_emoji","_item_iconPath","_item_iconImage","_item_swatchFirstColor","_item_swatchSecondColor","item","icon","hasIconSlot","_ref","view","G9IconSlot","G9Swatch","PickerField","useG9Direction","field","blocked","G9OutlinedField","undefined","g9RowStyle"],"mappings":";;;;;;;AAeO,SAASA;IACd,MAAMC,UAAUC,OAAO;IACvB,MAAMC,aAAaD,OAAO;IAC1B,MAAME,cAAcC;IACpBC,UACE,IAAM;YACJH,WAAW,OAAO,IAAI;QACxB,GACA,EAAE;IAEJ,OAAO,CAACI;QACN,IAAIN,QAAQ,OAAO,EAAE;QACrBA,QAAQ,OAAO,GAAG;QAClB,MAAMO,OAAO,EAAEL,WAAW,OAAO;QAC3B;YACJ,IAAI;gBACF,MAAMI,IAAI,IAAMJ,WAAW,OAAO,KAAKK;YACzC,EAAE,OAAOC,OAAO;gBACdL,YAAY,GAAG,CAAC;oBAAE,OAAO;oBAAS,SAAS;oBAAkB,QAAQ;oBAAYK;gBAAM;YACzF,SAAU;gBACRR,QAAQ,OAAO,GAAG;YACpB;QACF;IACF;AACF;AAGO,SAASS,eAAeC,SAA2C,EAAEC,OAAsB;IAChG,OAAOD,AAAc,kBAAdA,YAA8B,QAAQA,AAAc,kBAAdA,YAA8B,QAAQC;AACrF;AAGO,SAASC,oBAAoBF,SAA2C,EAAEC,OAAsB;IACrG,OAAO,CAAC,OAAO,EAAEF,eAAeC,WAAWC,UAAU;AACvD;AAGO,SAASE,mBAAmBC,KAAkE;QAG1FC,aAEIC,gBACJC;QAULC,wBAAiCC;IAfrC,MAAM,EAAEC,IAAI,EAAE,GAAGN;IACjB,MAAMO,OAAO;QACX,OAAO,QAAAN,CAAAA,cAAAA,KAAK,KAAK,AAAD,IAATA,cAAc;QACrB,MAAMK,KAAK,IAAI;QACf,WAAW,QAAAJ,CAAAA,iBAAAA,KAAK,QAAQ,AAAD,IAAZA,iBAAiB;QAC5B,OAAO,QAAAC,CAAAA,kBAAAA,KAAK,SAAS,AAAD,IAAbA,kBAAkB;IAC3B;IACA,IAAIK,YAAYD,OAAO;YAIsBE,MAAAA;QAF3C,QACGC,KAAK,UAAU,kBAAkB;QAChC,CAACC,YAAY,GAAGJ,IAAI,EAAE,MAAM,IAAI,OAAO,QAAAE,CAAAA,OAAAA,QAAAA,CAAAA,sBAAAA,KAAK,aAAa,AAAD,IAAjBA,sBAAsBT,MAAM,KAAK,AAAD,IAAhCS,OAAqC,iCAAkC;MAChH,EAAEC;IAEN;IACA,IAAIN,AAAAA,SAAAA,CAAAA,yBAAAA,KAAK,gBAAgB,AAAD,IAApBA,KAAAA,IAAAA,uBAAuB,IAAI,EAAC,KAAD,SAAMC,CAAAA,0BAAAA,KAAK,iBAAiB,AAAD,IAArBA,KAAAA,IAAAA,wBAAwB,IAAI,EAAC,GAChE,QAAQO,SAAS,OAAON,KAAK,gBAAgB,EAAE,QAAQA,KAAK,iBAAiB,EAAE,UAAU;IAE3F,OAAO;AACT;AASO,SAASO,YAAYb,KAM3B;QAcyBS,MAAAA;IAbxB,MAAMb,YAAYkB;IAClB,MAAM,EAAEC,KAAK,EAAE,GAAGf;IAClB,MAAMgB,UAAUD,AAAmB,SAAnBA,MAAM,QAAQ,IAAaA,AAAmB,SAAnBA,MAAM,QAAQ;IACzD,QACGE,iBACE,GAAGF,KAAK,EACT,WAAW,CAAC,SAAS,EAAEA,MAAM,SAAS,GAAG,CAAC,CAAC,EAAEA,MAAM,SAAS,EAAE,GAAG,IAAI,EACrE,SAAS,OACT,UAAUf,MAAM,QAAQ,GACvB,GAAIA,AAA6BkB,WAA7BlB,MAAM,kBAAkB,GAAiB;QAAE,oBAAoBA,MAAM,kBAAkB;IAAC,IAAI,CAAC,CAAC,EACnG,gBAAgB;QACd,IAAI,CAACgB,SAAShB,MAAM,MAAM;IAC5B,GACA,oBAAoB,QAAAS,CAAAA,OAAAA,QAAAA,CAAAA,eAAAA,MAAM,KAAK,AAAD,IAAVA,eAAeM,MAAM,WAAW,AAAD,IAA/BN,OAAoC,IACzD;MACC,CAACC,KAAK,WAAW,CAAC,wBAAwB,EAAEd,WAAW,EAAE,OAAOuB,WAAWvB,YAAY;QACrF,CAACI,MAAM,QAAQ,CAAC;MAClB,EAAEU,KAAK;IACT,EAAEO;AAEN"}
|