@g9tm/lynxcontrols 0.0.0-stage → 1.4.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +29 -2
- package/dist/.tsbuildinfo +1 -0
- package/dist/base/base.css +16 -0
- package/dist/base/base.css.map +1 -0
- package/dist/base/control.d.ts +68 -0
- package/dist/base/control.d.ts.map +1 -0
- package/dist/base/control.jsx +36 -0
- package/dist/base/control.jsx.map +1 -0
- package/dist/base/corner-badge.d.ts +35 -0
- package/dist/base/corner-badge.d.ts.map +1 -0
- package/dist/base/corner-badge.jsx +45 -0
- package/dist/base/corner-badge.jsx.map +1 -0
- package/dist/base/disposer.d.ts +28 -0
- package/dist/base/disposer.d.ts.map +1 -0
- package/dist/base/disposer.jsx +61 -0
- package/dist/base/disposer.jsx.map +1 -0
- package/dist/base/index.d.ts +10 -0
- package/dist/base/index.d.ts.map +1 -0
- package/dist/base/index.jsx +9 -0
- package/dist/base/press.d.ts +38 -0
- package/dist/base/press.d.ts.map +1 -0
- package/dist/base/press.jsx +73 -0
- package/dist/base/press.jsx.map +1 -0
- package/dist/base/pressable.d.ts +25 -0
- package/dist/base/pressable.d.ts.map +1 -0
- package/dist/base/pressable.jsx +38 -0
- package/dist/base/pressable.jsx.map +1 -0
- package/dist/base/selection-item.d.ts +29 -0
- package/dist/base/selection-item.d.ts.map +1 -0
- package/dist/base/selection-item.jsx +6 -0
- package/dist/base/selection-item.jsx.map +1 -0
- package/dist/base/timers.d.ts +7 -0
- package/dist/base/timers.d.ts.map +1 -0
- package/dist/base/timers.jsx +10 -0
- package/dist/base/timers.jsx.map +1 -0
- package/dist/base/use-controllable-state.d.ts +30 -0
- package/dist/base/use-controllable-state.d.ts.map +1 -0
- package/dist/base/use-controllable-state.jsx +49 -0
- package/dist/base/use-controllable-state.jsx.map +1 -0
- package/dist/base/use-stable-callback.d.ts +8 -0
- package/dist/base/use-stable-callback.d.ts.map +1 -0
- package/dist/base/use-stable-callback.jsx +12 -0
- package/dist/base/use-stable-callback.jsx.map +1 -0
- package/dist/button/button.css +162 -0
- package/dist/button/button.css.map +1 -0
- package/dist/button/button.d.ts +52 -0
- package/dist/button/button.d.ts.map +1 -0
- package/dist/button/button.jsx +88 -0
- package/dist/button/button.jsx.map +1 -0
- package/dist/button/header-action-button.d.ts +34 -0
- package/dist/button/header-action-button.d.ts.map +1 -0
- package/dist/button/header-action-button.jsx +51 -0
- package/dist/button/header-action-button.jsx.map +1 -0
- package/dist/button/icon-button.d.ts +46 -0
- package/dist/button/icon-button.d.ts.map +1 -0
- package/dist/button/icon-button.jsx +69 -0
- package/dist/button/icon-button.jsx.map +1 -0
- package/dist/button/index.d.ts +9 -0
- package/dist/button/index.d.ts.map +1 -0
- package/dist/button/index.jsx +8 -0
- package/dist/button/nav-card.d.ts +58 -0
- package/dist/button/nav-card.d.ts.map +1 -0
- package/dist/button/nav-card.jsx +96 -0
- package/dist/button/nav-card.jsx.map +1 -0
- package/dist/button/safe-tap.d.ts +27 -0
- package/dist/button/safe-tap.d.ts.map +1 -0
- package/dist/button/safe-tap.jsx +46 -0
- package/dist/button/safe-tap.jsx.map +1 -0
- package/dist/button/safe.d.ts +84 -0
- package/dist/button/safe.d.ts.map +1 -0
- package/dist/button/safe.jsx +116 -0
- package/dist/button/safe.jsx.map +1 -0
- package/dist/button/vertical-icon-text-button.d.ts +18 -0
- package/dist/button/vertical-icon-text-button.d.ts.map +1 -0
- package/dist/button/vertical-icon-text-button.jsx +21 -0
- package/dist/button/vertical-icon-text-button.jsx.map +1 -0
- package/dist/button/visuals.d.ts +53 -0
- package/dist/button/visuals.d.ts.map +1 -0
- package/dist/button/visuals.jsx +92 -0
- package/dist/button/visuals.jsx.map +1 -0
- package/dist/cascade/cascade-panel.d.ts +80 -0
- package/dist/cascade/cascade-panel.d.ts.map +1 -0
- package/dist/cascade/cascade-panel.jsx +179 -0
- package/dist/cascade/cascade-panel.jsx.map +1 -0
- package/dist/cascade/cascade.css +70 -0
- package/dist/cascade/cascade.css.map +1 -0
- package/dist/cascade/index.d.ts +3 -0
- package/dist/cascade/index.d.ts.map +1 -0
- package/dist/cascade/index.jsx +2 -0
- package/dist/cascade/model.d.ts +68 -0
- package/dist/cascade/model.d.ts.map +1 -0
- package/dist/cascade/model.jsx +161 -0
- package/dist/cascade/model.jsx.map +1 -0
- package/dist/deferred/deferred-content.d.ts +82 -0
- package/dist/deferred/deferred-content.d.ts.map +1 -0
- package/dist/deferred/deferred-content.jsx +263 -0
- package/dist/deferred/deferred-content.jsx.map +1 -0
- package/dist/deferred/deferred.css +62 -0
- package/dist/deferred/deferred.css.map +1 -0
- package/dist/deferred/index.d.ts +3 -0
- package/dist/deferred/index.d.ts.map +1 -0
- package/dist/deferred/index.jsx +2 -0
- package/dist/deferred/readiness-signal.d.ts +16 -0
- package/dist/deferred/readiness-signal.d.ts.map +1 -0
- package/dist/deferred/readiness-signal.jsx +29 -0
- package/dist/deferred/readiness-signal.jsx.map +1 -0
- package/dist/display/activity-indicator.d.ts +21 -0
- package/dist/display/activity-indicator.d.ts.map +1 -0
- package/dist/display/activity-indicator.jsx +22 -0
- package/dist/display/activity-indicator.jsx.map +1 -0
- package/dist/display/culture-date-time-label.d.ts +64 -0
- package/dist/display/culture-date-time-label.d.ts.map +1 -0
- package/dist/display/culture-date-time-label.jsx +73 -0
- package/dist/display/culture-date-time-label.jsx.map +1 -0
- package/dist/display/display.css +217 -0
- package/dist/display/display.css.map +1 -0
- package/dist/display/index.d.ts +7 -0
- package/dist/display/index.d.ts.map +1 -0
- package/dist/display/index.jsx +6 -0
- package/dist/display/progress-bar.d.ts +38 -0
- package/dist/display/progress-bar.d.ts.map +1 -0
- package/dist/display/progress-bar.jsx +57 -0
- package/dist/display/progress-bar.jsx.map +1 -0
- package/dist/display/separator.d.ts +30 -0
- package/dist/display/separator.d.ts.map +1 -0
- package/dist/display/separator.jsx +55 -0
- package/dist/display/separator.jsx.map +1 -0
- package/dist/display/shimmer.d.ts +41 -0
- package/dist/display/shimmer.d.ts.map +1 -0
- package/dist/display/shimmer.jsx +41 -0
- package/dist/display/shimmer.jsx.map +1 -0
- package/dist/display/title-with-line.d.ts +13 -0
- package/dist/display/title-with-line.d.ts.map +1 -0
- package/dist/display/title-with-line.jsx +21 -0
- package/dist/display/title-with-line.jsx.map +1 -0
- package/dist/edge-panel/edge-panel.css +132 -0
- package/dist/edge-panel/edge-panel.css.map +1 -0
- package/dist/edge-panel/edge-panel.d.ts +87 -0
- package/dist/edge-panel/edge-panel.d.ts.map +1 -0
- package/dist/edge-panel/edge-panel.jsx +326 -0
- package/dist/edge-panel/edge-panel.jsx.map +1 -0
- package/dist/edge-panel/helper.d.ts +27 -0
- package/dist/edge-panel/helper.d.ts.map +1 -0
- package/dist/edge-panel/helper.jsx +118 -0
- package/dist/edge-panel/helper.jsx.map +1 -0
- package/dist/edge-panel/index.d.ts +4 -0
- package/dist/edge-panel/index.d.ts.map +1 -0
- package/dist/edge-panel/index.jsx +3 -0
- package/dist/edge-panel/types.d.ts +155 -0
- package/dist/edge-panel/types.d.ts.map +1 -0
- package/dist/edge-panel/types.jsx +139 -0
- package/dist/edge-panel/types.jsx.map +1 -0
- package/dist/expander/expander.css +54 -0
- package/dist/expander/expander.css.map +1 -0
- package/dist/expander/expander.d.ts +46 -0
- package/dist/expander/expander.d.ts.map +1 -0
- package/dist/expander/expander.jsx +112 -0
- package/dist/expander/expander.jsx.map +1 -0
- package/dist/expander/index.d.ts +2 -0
- package/dist/expander/index.d.ts.map +1 -0
- package/dist/expander/index.jsx +1 -0
- package/dist/fields/dictation.d.ts +43 -0
- package/dist/fields/dictation.d.ts.map +1 -0
- package/dist/fields/dictation.jsx +124 -0
- package/dist/fields/dictation.jsx.map +1 -0
- package/dist/fields/editor.d.ts +26 -0
- package/dist/fields/editor.d.ts.map +1 -0
- package/dist/fields/editor.jsx +46 -0
- package/dist/fields/editor.jsx.map +1 -0
- package/dist/fields/fields.css +164 -0
- package/dist/fields/fields.css.map +1 -0
- package/dist/fields/index.d.ts +13 -0
- package/dist/fields/index.d.ts.map +1 -0
- package/dist/fields/index.jsx +12 -0
- package/dist/fields/input-policy.d.ts +48 -0
- package/dist/fields/input-policy.d.ts.map +1 -0
- package/dist/fields/input-policy.jsx +215 -0
- package/dist/fields/input-policy.jsx.map +1 -0
- package/dist/fields/notch.d.ts +10 -0
- package/dist/fields/notch.d.ts.map +1 -0
- package/dist/fields/notch.jsx +9 -0
- package/dist/fields/notch.jsx.map +1 -0
- package/dist/fields/outlined-field.d.ts +152 -0
- package/dist/fields/outlined-field.d.ts.map +1 -0
- package/dist/fields/outlined-field.jsx +199 -0
- package/dist/fields/outlined-field.jsx.map +1 -0
- package/dist/fields/pin-entry.d.ts +65 -0
- package/dist/fields/pin-entry.d.ts.map +1 -0
- package/dist/fields/pin-entry.jsx +294 -0
- package/dist/fields/pin-entry.jsx.map +1 -0
- package/dist/fields/search-entry.d.ts +35 -0
- package/dist/fields/search-entry.d.ts.map +1 -0
- package/dist/fields/search-entry.jsx +118 -0
- package/dist/fields/search-entry.jsx.map +1 -0
- package/dist/fields/slot-layout.d.ts +33 -0
- package/dist/fields/slot-layout.d.ts.map +1 -0
- package/dist/fields/slot-layout.jsx +33 -0
- package/dist/fields/slot-layout.jsx.map +1 -0
- package/dist/fields/text-entry.d.ts +62 -0
- package/dist/fields/text-entry.d.ts.map +1 -0
- package/dist/fields/text-entry.jsx +82 -0
- package/dist/fields/text-entry.jsx.map +1 -0
- package/dist/fields/use-dictation.d.ts +34 -0
- package/dist/fields/use-dictation.d.ts.map +1 -0
- package/dist/fields/use-dictation.jsx +80 -0
- package/dist/fields/use-dictation.jsx.map +1 -0
- package/dist/fields/use-text-input.d.ts +150 -0
- package/dist/fields/use-text-input.d.ts.map +1 -0
- package/dist/fields/use-text-input.jsx +247 -0
- package/dist/fields/use-text-input.jsx.map +1 -0
- package/dist/fields/validator.d.ts +14 -0
- package/dist/fields/validator.d.ts.map +1 -0
- package/dist/fields/validator.jsx +20 -0
- package/dist/fields/validator.jsx.map +1 -0
- package/dist/host/back.d.ts +42 -0
- package/dist/host/back.d.ts.map +1 -0
- package/dist/host/back.jsx +47 -0
- package/dist/host/back.jsx.map +1 -0
- package/dist/host/hooks.d.ts +90 -0
- package/dist/host/hooks.d.ts.map +1 -0
- package/dist/host/hooks.jsx +166 -0
- package/dist/host/hooks.jsx.map +1 -0
- package/dist/host/host.css +81 -0
- package/dist/host/host.css.map +1 -0
- package/dist/host/host.d.ts +70 -0
- package/dist/host/host.d.ts.map +1 -0
- package/dist/host/host.jsx +229 -0
- package/dist/host/host.jsx.map +1 -0
- package/dist/host/index.d.ts +9 -0
- package/dist/host/index.d.ts.map +1 -0
- package/dist/host/index.jsx +8 -0
- package/dist/host/keyboard.d.ts +24 -0
- package/dist/host/keyboard.d.ts.map +1 -0
- package/dist/host/keyboard.jsx +28 -0
- package/dist/host/keyboard.jsx.map +1 -0
- package/dist/host/layers.d.ts +69 -0
- package/dist/host/layers.d.ts.map +1 -0
- package/dist/host/layers.jsx +111 -0
- package/dist/host/layers.jsx.map +1 -0
- package/dist/host/page-loading-overlay.d.ts +17 -0
- package/dist/host/page-loading-overlay.d.ts.map +1 -0
- package/dist/host/page-loading-overlay.jsx +16 -0
- package/dist/host/page-loading-overlay.jsx.map +1 -0
- package/dist/host/readiness.d.ts +57 -0
- package/dist/host/readiness.d.ts.map +1 -0
- package/dist/host/readiness.jsx +138 -0
- package/dist/host/readiness.jsx.map +1 -0
- package/dist/host/registry.d.ts +106 -0
- package/dist/host/registry.d.ts.map +1 -0
- package/dist/host/registry.jsx +93 -0
- package/dist/host/registry.jsx.map +1 -0
- package/dist/icon/icon.css +39 -0
- package/dist/icon/icon.css.map +1 -0
- package/dist/icon/icon.d.ts +57 -0
- package/dist/icon/icon.d.ts.map +1 -0
- package/dist/icon/icon.jsx +115 -0
- package/dist/icon/icon.jsx.map +1 -0
- package/dist/icon/index.d.ts +4 -0
- package/dist/icon/index.d.ts.map +1 -0
- package/dist/icon/index.jsx +3 -0
- package/dist/icon/slot.d.ts +45 -0
- package/dist/icon/slot.d.ts.map +1 -0
- package/dist/icon/slot.jsx +61 -0
- package/dist/icon/slot.jsx.map +1 -0
- package/dist/icon/swatch.d.ts +29 -0
- package/dist/icon/swatch.d.ts.map +1 -0
- package/dist/icon/swatch.jsx +25 -0
- package/dist/icon/swatch.jsx.map +1 -0
- package/dist/index.d.ts +23 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.jsx +1 -0
- package/dist/pickers/combo-box.d.ts +42 -0
- package/dist/pickers/combo-box.d.ts.map +1 -0
- package/dist/pickers/combo-box.jsx +129 -0
- package/dist/pickers/combo-box.jsx.map +1 -0
- package/dist/pickers/date-time-picker.d.ts +63 -0
- package/dist/pickers/date-time-picker.d.ts.map +1 -0
- package/dist/pickers/date-time-picker.jsx +141 -0
- package/dist/pickers/date-time-picker.jsx.map +1 -0
- package/dist/pickers/date-time.d.ts +82 -0
- package/dist/pickers/date-time.d.ts.map +1 -0
- package/dist/pickers/date-time.jsx +130 -0
- package/dist/pickers/date-time.jsx.map +1 -0
- package/dist/pickers/index.d.ts +10 -0
- package/dist/pickers/index.d.ts.map +1 -0
- package/dist/pickers/index.jsx +9 -0
- package/dist/pickers/picker-sheet.d.ts +21 -0
- package/dist/pickers/picker-sheet.d.ts.map +1 -0
- package/dist/pickers/picker-sheet.jsx +61 -0
- package/dist/pickers/picker-sheet.jsx.map +1 -0
- package/dist/pickers/picker.d.ts +32 -0
- package/dist/pickers/picker.d.ts.map +1 -0
- package/dist/pickers/picker.jsx +72 -0
- package/dist/pickers/picker.jsx.map +1 -0
- package/dist/pickers/pickers.css +219 -0
- package/dist/pickers/pickers.css.map +1 -0
- package/dist/pickers/timespan-picker.d.ts +36 -0
- package/dist/pickers/timespan-picker.d.ts.map +1 -0
- package/dist/pickers/timespan-picker.jsx +99 -0
- package/dist/pickers/timespan-picker.jsx.map +1 -0
- package/dist/pickers/timespan.d.ts +38 -0
- package/dist/pickers/timespan.d.ts.map +1 -0
- package/dist/pickers/timespan.jsx +49 -0
- package/dist/pickers/timespan.jsx.map +1 -0
- package/dist/pickers/trigger.d.ts +34 -0
- package/dist/pickers/trigger.d.ts.map +1 -0
- package/dist/pickers/trigger.jsx +77 -0
- package/dist/pickers/trigger.jsx.map +1 -0
- package/dist/pickers/wheel-column.d.ts +32 -0
- package/dist/pickers/wheel-column.d.ts.map +1 -0
- package/dist/pickers/wheel-column.jsx +99 -0
- package/dist/pickers/wheel-column.jsx.map +1 -0
- package/dist/plus-button/index.d.ts +3 -0
- package/dist/plus-button/index.d.ts.map +1 -0
- package/dist/plus-button/index.jsx +2 -0
- package/dist/plus-button/model.d.ts +65 -0
- package/dist/plus-button/model.d.ts.map +1 -0
- package/dist/plus-button/model.jsx +86 -0
- package/dist/plus-button/model.jsx.map +1 -0
- package/dist/plus-button/plus-button.css +67 -0
- package/dist/plus-button/plus-button.css.map +1 -0
- package/dist/plus-button/plus-button.d.ts +38 -0
- package/dist/plus-button/plus-button.d.ts.map +1 -0
- package/dist/plus-button/plus-button.jsx +155 -0
- package/dist/plus-button/plus-button.jsx.map +1 -0
- package/dist/popup/frame.d.ts +101 -0
- package/dist/popup/frame.d.ts.map +1 -0
- package/dist/popup/frame.jsx +252 -0
- package/dist/popup/frame.jsx.map +1 -0
- package/dist/popup/index.d.ts +8 -0
- package/dist/popup/index.d.ts.map +1 -0
- package/dist/popup/index.jsx +7 -0
- package/dist/popup/input-form.d.ts +35 -0
- package/dist/popup/input-form.d.ts.map +1 -0
- package/dist/popup/input-form.jsx +160 -0
- package/dist/popup/input-form.jsx.map +1 -0
- package/dist/popup/input.d.ts +175 -0
- package/dist/popup/input.d.ts.map +1 -0
- package/dist/popup/input.jsx +176 -0
- package/dist/popup/input.jsx.map +1 -0
- package/dist/popup/popup-view.d.ts +25 -0
- package/dist/popup/popup-view.d.ts.map +1 -0
- package/dist/popup/popup-view.jsx +67 -0
- package/dist/popup/popup-view.jsx.map +1 -0
- package/dist/popup/popup.css +203 -0
- package/dist/popup/popup.css.map +1 -0
- package/dist/popup/queue.d.ts +90 -0
- package/dist/popup/queue.d.ts.map +1 -0
- package/dist/popup/queue.jsx +309 -0
- package/dist/popup/queue.jsx.map +1 -0
- package/dist/popup/service.d.ts +60 -0
- package/dist/popup/service.d.ts.map +1 -0
- package/dist/popup/service.jsx +350 -0
- package/dist/popup/service.jsx.map +1 -0
- package/dist/popup/types.d.ts +222 -0
- package/dist/popup/types.d.ts.map +1 -0
- package/dist/popup/types.jsx +218 -0
- package/dist/popup/types.jsx.map +1 -0
- package/dist/provider/contexts.d.ts +41 -0
- package/dist/provider/contexts.d.ts.map +1 -0
- package/dist/provider/contexts.jsx +11 -0
- package/dist/provider/contexts.jsx.map +1 -0
- package/dist/provider/global-events.d.ts +8 -0
- package/dist/provider/global-events.d.ts.map +1 -0
- package/dist/provider/global-events.jsx +17 -0
- package/dist/provider/global-events.jsx.map +1 -0
- package/dist/provider/hooks.d.ts +49 -0
- package/dist/provider/hooks.d.ts.map +1 -0
- package/dist/provider/hooks.jsx +72 -0
- package/dist/provider/hooks.jsx.map +1 -0
- package/dist/provider/index.d.ts +5 -0
- package/dist/provider/index.d.ts.map +1 -0
- package/dist/provider/index.jsx +3 -0
- package/dist/provider/provider.css +18 -0
- package/dist/provider/provider.css.map +1 -0
- package/dist/provider/provider.d.ts +51 -0
- package/dist/provider/provider.d.ts.map +1 -0
- package/dist/provider/provider.jsx +290 -0
- package/dist/provider/provider.jsx.map +1 -0
- package/dist/provider/settings.d.ts +99 -0
- package/dist/provider/settings.d.ts.map +1 -0
- package/dist/provider/settings.jsx +45 -0
- package/dist/provider/settings.jsx.map +1 -0
- package/dist/provider/theme-css.d.ts +12 -0
- package/dist/provider/theme-css.d.ts.map +1 -0
- package/dist/provider/theme-css.jsx +19 -0
- package/dist/provider/theme-css.jsx.map +1 -0
- package/dist/provider/theme-root.d.ts +10 -0
- package/dist/provider/theme-root.d.ts.map +1 -0
- package/dist/provider/theme-root.jsx +24 -0
- package/dist/provider/theme-root.jsx.map +1 -0
- package/dist/provider/theme.css +473 -0
- package/dist/provider/theme.css.map +1 -0
- package/dist/range-slider/index.d.ts +3 -0
- package/dist/range-slider/index.d.ts.map +1 -0
- package/dist/range-slider/index.jsx +2 -0
- package/dist/range-slider/math.d.ts +23 -0
- package/dist/range-slider/math.d.ts.map +1 -0
- package/dist/range-slider/math.jsx +71 -0
- package/dist/range-slider/math.jsx.map +1 -0
- package/dist/range-slider/range-slider.css +90 -0
- package/dist/range-slider/range-slider.css.map +1 -0
- package/dist/range-slider/range-slider.d.ts +52 -0
- package/dist/range-slider/range-slider.d.ts.map +1 -0
- package/dist/range-slider/range-slider.jsx +159 -0
- package/dist/range-slider/range-slider.jsx.map +1 -0
- package/dist/selection/index.d.ts +5 -0
- package/dist/selection/index.d.ts.map +1 -0
- package/dist/selection/index.jsx +3 -0
- package/dist/selection/model.d.ts +53 -0
- package/dist/selection/model.d.ts.map +1 -0
- package/dist/selection/model.jsx +69 -0
- package/dist/selection/model.jsx.map +1 -0
- package/dist/selection/selection-sheet.d.ts +80 -0
- package/dist/selection/selection-sheet.d.ts.map +1 -0
- package/dist/selection/selection-sheet.jsx +366 -0
- package/dist/selection/selection-sheet.jsx.map +1 -0
- package/dist/selection/selection.css +76 -0
- package/dist/selection/selection.css.map +1 -0
- package/dist/selection/use-selection-model.d.ts +9 -0
- package/dist/selection/use-selection-model.d.ts.map +1 -0
- package/dist/selection/use-selection-model.jsx +22 -0
- package/dist/selection/use-selection-model.jsx.map +1 -0
- package/dist/sheet/frame.d.ts +47 -0
- package/dist/sheet/frame.d.ts.map +1 -0
- package/dist/sheet/frame.jsx +270 -0
- package/dist/sheet/frame.jsx.map +1 -0
- package/dist/sheet/gesture.d.ts +51 -0
- package/dist/sheet/gesture.d.ts.map +1 -0
- package/dist/sheet/gesture.jsx +107 -0
- package/dist/sheet/gesture.jsx.map +1 -0
- package/dist/sheet/handoff.d.ts +32 -0
- package/dist/sheet/handoff.d.ts.map +1 -0
- package/dist/sheet/handoff.jsx +33 -0
- package/dist/sheet/handoff.jsx.map +1 -0
- package/dist/sheet/header.d.ts +46 -0
- package/dist/sheet/header.d.ts.map +1 -0
- package/dist/sheet/header.jsx +158 -0
- package/dist/sheet/header.jsx.map +1 -0
- package/dist/sheet/height-memo.d.ts +47 -0
- package/dist/sheet/height-memo.d.ts.map +1 -0
- package/dist/sheet/height-memo.jsx +100 -0
- package/dist/sheet/height-memo.jsx.map +1 -0
- package/dist/sheet/index.d.ts +12 -0
- package/dist/sheet/index.d.ts.map +1 -0
- package/dist/sheet/index.jsx +11 -0
- package/dist/sheet/loadable.d.ts +35 -0
- package/dist/sheet/loadable.d.ts.map +1 -0
- package/dist/sheet/loadable.jsx +65 -0
- package/dist/sheet/loadable.jsx.map +1 -0
- package/dist/sheet/motion.d.ts +59 -0
- package/dist/sheet/motion.d.ts.map +1 -0
- package/dist/sheet/motion.jsx +59 -0
- package/dist/sheet/motion.jsx.map +1 -0
- package/dist/sheet/options.d.ts +252 -0
- package/dist/sheet/options.d.ts.map +1 -0
- package/dist/sheet/options.jsx +92 -0
- package/dist/sheet/options.jsx.map +1 -0
- package/dist/sheet/processing.d.ts +22 -0
- package/dist/sheet/processing.d.ts.map +1 -0
- package/dist/sheet/processing.jsx +66 -0
- package/dist/sheet/processing.jsx.map +1 -0
- package/dist/sheet/service.d.ts +55 -0
- package/dist/sheet/service.d.ts.map +1 -0
- package/dist/sheet/service.jsx +143 -0
- package/dist/sheet/service.jsx.map +1 -0
- package/dist/sheet/sheet.css +246 -0
- package/dist/sheet/sheet.css.map +1 -0
- package/dist/sheet/sheet.d.ts +19 -0
- package/dist/sheet/sheet.d.ts.map +1 -0
- package/dist/sheet/sheet.jsx +40 -0
- package/dist/sheet/sheet.jsx.map +1 -0
- package/dist/sheet/sizing.d.ts +87 -0
- package/dist/sheet/sizing.d.ts.map +1 -0
- package/dist/sheet/sizing.jsx +159 -0
- package/dist/sheet/sizing.jsx.map +1 -0
- package/dist/sheet/stack.d.ts +161 -0
- package/dist/sheet/stack.d.ts.map +1 -0
- package/dist/sheet/stack.jsx +378 -0
- package/dist/sheet/stack.jsx.map +1 -0
- package/dist/swipe/index.d.ts +3 -0
- package/dist/swipe/index.d.ts.map +1 -0
- package/dist/swipe/index.jsx +2 -0
- package/dist/swipe/model.d.ts +72 -0
- package/dist/swipe/model.d.ts.map +1 -0
- package/dist/swipe/model.jsx +66 -0
- package/dist/swipe/model.jsx.map +1 -0
- package/dist/swipe/swipe-view.d.ts +40 -0
- package/dist/swipe/swipe-view.d.ts.map +1 -0
- package/dist/swipe/swipe-view.jsx +163 -0
- package/dist/swipe/swipe-view.jsx.map +1 -0
- package/dist/swipe/swipe.css +34 -0
- package/dist/swipe/swipe.css.map +1 -0
- package/dist/tab-bar/index.d.ts +4 -0
- package/dist/tab-bar/index.d.ts.map +1 -0
- package/dist/tab-bar/index.jsx +3 -0
- package/dist/tab-bar/metrics.d.ts +230 -0
- package/dist/tab-bar/metrics.d.ts.map +1 -0
- package/dist/tab-bar/metrics.jsx +221 -0
- package/dist/tab-bar/metrics.jsx.map +1 -0
- package/dist/tab-bar/model.d.ts +170 -0
- package/dist/tab-bar/model.d.ts.map +1 -0
- package/dist/tab-bar/model.jsx +349 -0
- package/dist/tab-bar/model.jsx.map +1 -0
- package/dist/tab-bar/tab-bar.css +173 -0
- package/dist/tab-bar/tab-bar.css.map +1 -0
- package/dist/tab-bar/tab-bar.d.ts +61 -0
- package/dist/tab-bar/tab-bar.d.ts.map +1 -0
- package/dist/tab-bar/tab-bar.jsx +346 -0
- package/dist/tab-bar/tab-bar.jsx.map +1 -0
- package/dist/tabs/index.d.ts +3 -0
- package/dist/tabs/index.d.ts.map +1 -0
- package/dist/tabs/index.jsx +2 -0
- package/dist/tabs/model.d.ts +83 -0
- package/dist/tabs/model.d.ts.map +1 -0
- package/dist/tabs/model.jsx +113 -0
- package/dist/tabs/model.jsx.map +1 -0
- package/dist/tabs/tab-view.d.ts +47 -0
- package/dist/tabs/tab-view.d.ts.map +1 -0
- package/dist/tabs/tab-view.jsx +227 -0
- package/dist/tabs/tab-view.jsx.map +1 -0
- package/dist/tabs/tabs.css +182 -0
- package/dist/tabs/tabs.css.map +1 -0
- package/dist/toast/index.d.ts +3 -0
- package/dist/toast/index.d.ts.map +1 -0
- package/dist/toast/index.jsx +2 -0
- package/dist/toast/service.d.ts +48 -0
- package/dist/toast/service.d.ts.map +1 -0
- package/dist/toast/service.jsx +238 -0
- package/dist/toast/service.jsx.map +1 -0
- package/dist/toast/store.d.ts +176 -0
- package/dist/toast/store.d.ts.map +1 -0
- package/dist/toast/store.jsx +355 -0
- package/dist/toast/store.jsx.map +1 -0
- package/dist/toast/toast.css +159 -0
- package/dist/toast/toast.css.map +1 -0
- package/dist/toggle/checkbox-math.d.ts +52 -0
- package/dist/toggle/checkbox-math.d.ts.map +1 -0
- package/dist/toggle/checkbox-math.jsx +111 -0
- package/dist/toggle/checkbox-math.jsx.map +1 -0
- package/dist/toggle/checkbox.d.ts +56 -0
- package/dist/toggle/checkbox.d.ts.map +1 -0
- package/dist/toggle/checkbox.jsx +152 -0
- package/dist/toggle/checkbox.jsx.map +1 -0
- package/dist/toggle/chip-group.d.ts +50 -0
- package/dist/toggle/chip-group.d.ts.map +1 -0
- package/dist/toggle/chip-group.jsx +107 -0
- package/dist/toggle/chip-group.jsx.map +1 -0
- package/dist/toggle/index.d.ts +5 -0
- package/dist/toggle/index.d.ts.map +1 -0
- package/dist/toggle/index.jsx +4 -0
- package/dist/toggle/switch.d.ts +52 -0
- package/dist/toggle/switch.d.ts.map +1 -0
- package/dist/toggle/switch.jsx +192 -0
- package/dist/toggle/switch.jsx.map +1 -0
- package/dist/toggle/toggle.css +188 -0
- package/dist/toggle/toggle.css.map +1 -0
- package/package.json +155 -4
- package/rspeedy/index.d.ts +21 -0
- package/rspeedy/index.mjs +75 -0
- package/rspeedy/index.test.mjs +52 -0
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
import { G9StringKey, createAbortController } from "@g9tm/lynxcontrols-foundation";
|
|
2
|
+
function _define_property(obj, key, value) {
|
|
3
|
+
if (key in obj) Object.defineProperty(obj, key, {
|
|
4
|
+
value: value,
|
|
5
|
+
enumerable: true,
|
|
6
|
+
configurable: true,
|
|
7
|
+
writable: true
|
|
8
|
+
});
|
|
9
|
+
else obj[key] = value;
|
|
10
|
+
return obj;
|
|
11
|
+
}
|
|
12
|
+
class G9VoiceDictation {
|
|
13
|
+
update(options) {
|
|
14
|
+
this.options = options;
|
|
15
|
+
}
|
|
16
|
+
get isListening() {
|
|
17
|
+
return this.listening;
|
|
18
|
+
}
|
|
19
|
+
get hasSession() {
|
|
20
|
+
return null !== this.session;
|
|
21
|
+
}
|
|
22
|
+
toggle() {
|
|
23
|
+
return this.listening ? this.stop() : this.start();
|
|
24
|
+
}
|
|
25
|
+
async start() {
|
|
26
|
+
var _this_options_readText;
|
|
27
|
+
var _o_onStateChanged, _this_options_onListeningStarted, _this_options, _this_options_onStateChanged, _this_options1;
|
|
28
|
+
if (this.session) return;
|
|
29
|
+
const o = this.options;
|
|
30
|
+
const speech = o.speech;
|
|
31
|
+
if (!speech) {
|
|
32
|
+
var _o_onFailed;
|
|
33
|
+
null == (_o_onFailed = o.onFailed) || _o_onFailed.call(o, o.strings().get(G9StringKey.SpeechRecognitionUnavailable));
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
const session = {
|
|
37
|
+
controller: createAbortController(),
|
|
38
|
+
baseText: ''
|
|
39
|
+
};
|
|
40
|
+
this.session = session;
|
|
41
|
+
null == (_o_onStateChanged = o.onStateChanged) || _o_onStateChanged.call(o);
|
|
42
|
+
try {
|
|
43
|
+
const status = await speech.requestPermission();
|
|
44
|
+
if ('granted' !== status) {
|
|
45
|
+
var _this_options_onFailed, _this_options2;
|
|
46
|
+
if (this.session === session) null == (_this_options_onFailed = (_this_options2 = this.options).onFailed) || _this_options_onFailed.call(_this_options2, this.text(G9StringKey.MicrophonePermissionDenied));
|
|
47
|
+
this.end(session);
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
} catch (error) {
|
|
51
|
+
if (this.session === session) {
|
|
52
|
+
var _this_options_onFailed1, _this_options3;
|
|
53
|
+
null == (_this_options_onFailed1 = (_this_options3 = this.options).onFailed) || _this_options_onFailed1.call(_this_options3, this.options.strings().format(G9StringKey.PermissionErrorFormat, messageOf(error)));
|
|
54
|
+
}
|
|
55
|
+
this.end(session);
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
if (this.session !== session) return;
|
|
59
|
+
this.listening = true;
|
|
60
|
+
session.baseText = null != (_this_options_readText = this.options.readText()) ? _this_options_readText : '';
|
|
61
|
+
null == (_this_options_onListeningStarted = (_this_options = this.options).onListeningStarted) || _this_options_onListeningStarted.call(_this_options);
|
|
62
|
+
null == (_this_options_onStateChanged = (_this_options1 = this.options).onStateChanged) || _this_options_onStateChanged.call(_this_options1);
|
|
63
|
+
try {
|
|
64
|
+
const result = await speech.listen({
|
|
65
|
+
locale: this.options.locale(),
|
|
66
|
+
signal: session.controller.signal,
|
|
67
|
+
onPartialResult: (text)=>this.apply(session, text)
|
|
68
|
+
});
|
|
69
|
+
if (this.session === session) {
|
|
70
|
+
if ('recognized' === result.status) {
|
|
71
|
+
if (result.text) this.apply(session, result.text);
|
|
72
|
+
} else if ('denied' === result.status) {
|
|
73
|
+
var _this_options_onFailed2, _this_options4;
|
|
74
|
+
null == (_this_options_onFailed2 = (_this_options4 = this.options).onFailed) || _this_options_onFailed2.call(_this_options4, this.text(G9StringKey.MicrophonePermissionDenied));
|
|
75
|
+
} else if ('no-match' === result.status) {
|
|
76
|
+
var _this_options_onFailed3, _this_options5;
|
|
77
|
+
null == (_this_options_onFailed3 = (_this_options5 = this.options).onFailed) || _this_options_onFailed3.call(_this_options5, this.text(G9StringKey.VoiceRecognitionFailed));
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
} catch (error) {
|
|
81
|
+
var _this_options_onFailed4, _this_options6;
|
|
82
|
+
if (this.session === session && !session.controller.signal.aborted) null == (_this_options_onFailed4 = (_this_options6 = this.options).onFailed) || _this_options_onFailed4.call(_this_options6, messageOf(error));
|
|
83
|
+
} finally{
|
|
84
|
+
this.end(session);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
async stop() {
|
|
88
|
+
const session = this.session;
|
|
89
|
+
if (!session) return;
|
|
90
|
+
try {
|
|
91
|
+
session.controller.abort();
|
|
92
|
+
} catch {}
|
|
93
|
+
this.end(session);
|
|
94
|
+
}
|
|
95
|
+
text(key) {
|
|
96
|
+
return this.options.strings().get(key);
|
|
97
|
+
}
|
|
98
|
+
apply(session, transcript) {
|
|
99
|
+
if (this.session !== session) return;
|
|
100
|
+
const base = session.baseText;
|
|
101
|
+
this.options.writeText(base ? `${base} ${transcript}`.replace(/\s+$/, '') : transcript);
|
|
102
|
+
}
|
|
103
|
+
end(session) {
|
|
104
|
+
var _this_options_onListeningEnded, _this_options, _this_options_onStateChanged, _this_options1;
|
|
105
|
+
if (this.session !== session) return;
|
|
106
|
+
this.session = null;
|
|
107
|
+
const wasListening = this.listening;
|
|
108
|
+
this.listening = false;
|
|
109
|
+
if (wasListening) null == (_this_options_onListeningEnded = (_this_options = this.options).onListeningEnded) || _this_options_onListeningEnded.call(_this_options);
|
|
110
|
+
null == (_this_options_onStateChanged = (_this_options1 = this.options).onStateChanged) || _this_options_onStateChanged.call(_this_options1);
|
|
111
|
+
}
|
|
112
|
+
constructor(options){
|
|
113
|
+
_define_property(this, "session", null);
|
|
114
|
+
_define_property(this, "listening", false);
|
|
115
|
+
_define_property(this, "options", void 0);
|
|
116
|
+
this.options = options;
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
function messageOf(error) {
|
|
120
|
+
return error instanceof Error ? error.message : String(error);
|
|
121
|
+
}
|
|
122
|
+
export { G9VoiceDictation };
|
|
123
|
+
|
|
124
|
+
//# sourceMappingURL=dictation.jsx.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fields/dictation.jsx","sources":["../../src/fields/dictation.ts"],"sourcesContent":["import {\n createAbortController,\n type G9AbortController,\n type G9SpeechToText,\n G9StringKey,\n type G9Strings,\n} from '@g9tm/lynxcontrols-foundation';\n\n// MAUI `G9VoiceDictation` (Localization/G9VoiceDictation.cs): one dictation session per field. Everything a session\n// owns (its base text and its cancellation) lives on one object, and every path that writes or ends for a session\n// first checks it is still the current one: a second tap while the permission prompt is up cannot start a second\n// session over the first, and a partial result delivered after its session ended is dropped.\n\n/** What a {@link G9VoiceDictation} reads and writes. */\nexport interface G9VoiceDictationOptions {\n /** The recogniser (`services.speech`); `undefined` makes every start fail with `speechRecognitionUnavailable`. */\n readonly speech: G9SpeechToText | undefined;\n /** Reads the field's current text (the session's base text). */\n readonly readText: () => string | null | undefined;\n /** Writes recognised text into the field (`base + ' ' + transcript`). */\n readonly writeText: (text: string) => void;\n /** Called whenever `isListening` or the session changes (re-render). */\n readonly onStateChanged?: () => void;\n /** Strings for the failure messages. */\n readonly strings: () => Pick<G9Strings, 'get' | 'format'>;\n /** The locale to listen for (MAUI `Culture ?? G9Culture.CurrentCulture`). */\n readonly locale: () => string;\n readonly onListeningStarted?: () => void;\n readonly onListeningEnded?: () => void;\n /** A failure message the user should see (unavailable, permission denied, recogniser error). */\n readonly onFailed?: (message: string) => void;\n}\n\ninterface Session {\n readonly controller: G9AbortController;\n baseText: string;\n}\n\n/** A field's dictation session owner (MAUI `G9VoiceDictation`). Create one per field; see `useDictation`. */\nexport class G9VoiceDictation {\n private session: Session | null = null;\n private listening = false;\n private options: G9VoiceDictationOptions;\n\n constructor(options: G9VoiceDictationOptions) {\n this.options = options;\n }\n\n /** Replaces the callbacks (the hook passes the latest props on every render). */\n update(options: G9VoiceDictationOptions): void {\n this.options = options;\n }\n\n /** `true` while a session is listening (not while it waits for permission). */\n get isListening(): boolean {\n return this.listening;\n }\n\n /** `true` from a start until its session ends, the permission prompt included. */\n get hasSession(): boolean {\n return this.session !== null;\n }\n\n /** Stops a running session, starts one otherwise. */\n toggle(): Promise<void> {\n return this.listening ? this.stop() : this.start();\n }\n\n /** Starts a session. A second start while one exists (listening or awaiting permission) is ignored. */\n async start(): Promise<void> {\n if (this.session) return;\n const o = this.options;\n const speech = o.speech;\n if (!speech) {\n o.onFailed?.(o.strings().get(G9StringKey.SpeechRecognitionUnavailable));\n return;\n }\n const session: Session = { controller: createAbortController(), baseText: '' };\n this.session = session;\n o.onStateChanged?.();\n try {\n // Always re-checked: the permission may have been revoked between sessions.\n const status = await speech.requestPermission();\n if (status !== 'granted') {\n if (this.session === session) this.options.onFailed?.(this.text(G9StringKey.MicrophonePermissionDenied));\n this.end(session);\n return;\n }\n } catch (error) {\n if (this.session === session) {\n this.options.onFailed?.(this.options.strings().format(G9StringKey.PermissionErrorFormat, messageOf(error)));\n }\n this.end(session);\n return;\n }\n // Stopped (or replaced) while the prompt was up.\n if (this.session !== session) return;\n\n this.listening = true;\n session.baseText = this.options.readText() ?? '';\n this.options.onListeningStarted?.();\n this.options.onStateChanged?.();\n try {\n const result = await speech.listen({\n locale: this.options.locale(),\n signal: session.controller.signal,\n onPartialResult: (text) => this.apply(session, text),\n });\n if (this.session === session) {\n if (result.status === 'recognized') {\n if (result.text) this.apply(session, result.text);\n } else if (result.status === 'denied') {\n this.options.onFailed?.(this.text(G9StringKey.MicrophonePermissionDenied));\n } else if (result.status === 'no-match') {\n this.options.onFailed?.(this.text(G9StringKey.VoiceRecognitionFailed));\n }\n }\n } catch (error) {\n // A stop aborts the session; the recogniser may reject for that. Not a failure.\n if (this.session === session && !session.controller.signal.aborted) this.options.onFailed?.(messageOf(error));\n } finally {\n this.end(session);\n }\n }\n\n /** Stops the current session (cancels the prompt or the recogniser). Best effort; always ends the session. */\n async stop(): Promise<void> {\n const session = this.session;\n if (!session) return;\n try {\n session.controller.abort();\n } catch {\n // A listener that throws on abort must not leave the field stuck in its listening visual.\n }\n this.end(session);\n }\n\n private text(key: G9StringKey): string {\n return this.options.strings().get(key);\n }\n\n private apply(session: Session, transcript: string): void {\n if (this.session !== session) return;\n const base = session.baseText;\n this.options.writeText(base ? `${base} ${transcript}`.replace(/\\s+$/, '') : transcript);\n }\n\n private end(session: Session): void {\n if (this.session !== session) return;\n this.session = null;\n const wasListening = this.listening;\n this.listening = false;\n if (wasListening) this.options.onListeningEnded?.();\n this.options.onStateChanged?.();\n }\n}\n\nfunction messageOf(error: unknown): string {\n return error instanceof Error ? error.message : String(error);\n}\n"],"names":["G9VoiceDictation","options","_this_options_readText","o","_this_options","_this_options1","speech","G9StringKey","session","createAbortController","status","_this_options2","error","_this_options3","messageOf","result","text","_this_options4","_this_options5","_this_options6","key","transcript","base","wasListening","Error","String"],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { type G9TextInputHandle, type G9TextInputProps } from './use-text-input.js';
|
|
2
|
+
/** How the editor grows (MAUI `EditorAutoSizeOption`). */
|
|
3
|
+
export type G9EditorAutoSize = 'disabled' | 'textChanges';
|
|
4
|
+
/** Props of {@link G9Editor} (MAUI `G9Editor`). */
|
|
5
|
+
export interface G9EditorProps extends G9TextInputProps {
|
|
6
|
+
/** Minimum height of the text area. Default 96. */
|
|
7
|
+
readonly minimumEditorHeight?: number;
|
|
8
|
+
/** Maximum height while growing; `0` (default) means unbounded. */
|
|
9
|
+
readonly maxEditorHeight?: number;
|
|
10
|
+
/** `'textChanges'` (default) grows with the text; `'disabled'` keeps `minimumEditorHeight`. */
|
|
11
|
+
readonly autoSize?: G9EditorAutoSize;
|
|
12
|
+
/** Spell checking (iOS `ios-spell-check`). Default true. */
|
|
13
|
+
readonly isSpellCheckEnabled?: boolean;
|
|
14
|
+
/** Word prediction / autocorrect (iOS `ios-auto-correct`). Default true. */
|
|
15
|
+
readonly isTextPredictionEnabled?: boolean;
|
|
16
|
+
}
|
|
17
|
+
/** Imperative handle of {@link G9Editor}. */
|
|
18
|
+
export type G9EditorHandle = G9TextInputHandle;
|
|
19
|
+
/**
|
|
20
|
+
* Multi-line outlined text area (MAUI `G9Editor`): the text-entry behaviour on a `<textarea>`, a microphone pinned to
|
|
21
|
+
* the bottom-end corner whenever dictation is available, height from `minimumEditorHeight`/`maxEditorHeight`/
|
|
22
|
+
* `autoSize`. Validates on blur only for email/url/custom types (no `validator`, as in MAUI). Requires the host's
|
|
23
|
+
* `xelement-input` registration.
|
|
24
|
+
*/
|
|
25
|
+
export declare const G9Editor: import("react").ForwardRefExoticComponent<G9EditorProps & import("react").RefAttributes<G9TextInputHandle>>;
|
|
26
|
+
//# sourceMappingURL=editor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"editor.d.ts","sourceRoot":"","sources":["../../src/fields/editor.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,iBAAiB,EAAE,KAAK,gBAAgB,EAAgB,MAAM,kBAAkB,CAAC;AAE/F,0DAA0D;AAC1D,MAAM,MAAM,gBAAgB,GAAG,UAAU,GAAG,aAAa,CAAC;AAE1D,mDAAmD;AACnD,MAAM,WAAW,aAAc,SAAQ,gBAAgB;IACrD,mDAAmD;IACnD,QAAQ,CAAC,mBAAmB,CAAC,EAAE,MAAM,CAAC;IACtC,mEAAmE;IACnE,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAClC,+FAA+F;IAC/F,QAAQ,CAAC,QAAQ,CAAC,EAAE,gBAAgB,CAAC;IACrC,4DAA4D;IAC5D,QAAQ,CAAC,mBAAmB,CAAC,EAAE,OAAO,CAAC;IACvC,4EAA4E;IAC5E,QAAQ,CAAC,uBAAuB,CAAC,EAAE,OAAO,CAAC;CAC5C;AAED,6CAA6C;AAC7C,MAAM,MAAM,cAAc,GAAG,iBAAiB,CAAC;AAE/C;;;;;GAKG;AACH,eAAO,MAAM,QAAQ,6GA8CnB,CAAC"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { G9Metrics } from "@g9tm/lynxcontrols-foundation";
|
|
2
|
+
import { forwardRef, useImperativeHandle } from "@lynx-js/react";
|
|
3
|
+
import { useG9Settings } from "../provider/hooks.jsx";
|
|
4
|
+
import { G9OutlinedField } from "./outlined-field.jsx";
|
|
5
|
+
import { useTextInput } from "./use-text-input.jsx";
|
|
6
|
+
const editor_G9Editor = forwardRef(function(props, ref) {
|
|
7
|
+
var _props_minimumEditorHeight, _props_maxEditorHeight, _props_autoSize, _core_errorText;
|
|
8
|
+
const glyphs = useG9Settings().glyphs;
|
|
9
|
+
const core = useTextInput(props, {
|
|
10
|
+
name: 'G9Editor.value',
|
|
11
|
+
showMic: (s)=>s.available
|
|
12
|
+
});
|
|
13
|
+
useImperativeHandle(ref, ()=>core.handle);
|
|
14
|
+
const affordance = core.showMic ? {
|
|
15
|
+
icon: core.dictation.listening ? glyphs.micOff : glyphs.mic,
|
|
16
|
+
color: core.dictation.listening ? 'var(--g9-error)' : 'var(--g9-primary)',
|
|
17
|
+
signature: 'voice',
|
|
18
|
+
onPress: core.pressMic
|
|
19
|
+
} : null;
|
|
20
|
+
const min = null != (_props_minimumEditorHeight = props.minimumEditorHeight) ? _props_minimumEditorHeight : 96;
|
|
21
|
+
const max = null != (_props_maxEditorHeight = props.maxEditorHeight) ? _props_maxEditorHeight : 0;
|
|
22
|
+
const autoSize = null != (_props_autoSize = props.autoSize) ? _props_autoSize : 'textChanges';
|
|
23
|
+
return <G9OutlinedField {...props} multiline hasError={core.hasError} errorText={null != (_core_errorText = core.errorText) ? _core_errorText : null} focused={core.focused} hasValue={core.hasValue} textLength={core.text.length} trailingAffordance={affordance} onFocusRequest={core.focus}>
|
|
24
|
+
<textarea {...core.elementProps} className="g9-field__textarea" ios-spell-check={false !== props.isSpellCheckEnabled} ios-auto-correct={false !== props.isTextPredictionEnabled} style={{
|
|
25
|
+
direction: core.textDirection,
|
|
26
|
+
textAlign: 'rtl' === core.textDirection ? 'right' : 'left',
|
|
27
|
+
...core.font ? {
|
|
28
|
+
fontFamily: core.font
|
|
29
|
+
} : {},
|
|
30
|
+
color: props.disabled ? 'var(--g9-text-disabled)' : 'var(--g9-text-primary)',
|
|
31
|
+
...'disabled' === autoSize ? {
|
|
32
|
+
height: `${min}px`
|
|
33
|
+
} : {
|
|
34
|
+
minHeight: `${min}px`,
|
|
35
|
+
...max > 0 ? {
|
|
36
|
+
maxHeight: `${Math.max(min, max)}px`
|
|
37
|
+
} : {}
|
|
38
|
+
},
|
|
39
|
+
paddingTop: `${G9Metrics.FloatingLabelClearance + 8}px`,
|
|
40
|
+
paddingBottom: '8px'
|
|
41
|
+
}}/>
|
|
42
|
+
</G9OutlinedField>;
|
|
43
|
+
});
|
|
44
|
+
export { editor_G9Editor as G9Editor };
|
|
45
|
+
|
|
46
|
+
//# sourceMappingURL=editor.jsx.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fields/editor.jsx","sources":["../../src/fields/editor.tsx"],"sourcesContent":["import { G9Metrics } from '@g9tm/lynxcontrols-foundation';\nimport { forwardRef, type ReactNode, useImperativeHandle } from '@lynx-js/react';\nimport { useG9Settings } from '../provider/hooks';\nimport { G9OutlinedField, type G9TrailingAffordance } from './outlined-field';\nimport { type G9TextInputHandle, type G9TextInputProps, useTextInput } from './use-text-input';\n\n/** How the editor grows (MAUI `EditorAutoSizeOption`). */\nexport type G9EditorAutoSize = 'disabled' | 'textChanges';\n\n/** Props of {@link G9Editor} (MAUI `G9Editor`). */\nexport interface G9EditorProps extends G9TextInputProps {\n /** Minimum height of the text area. Default 96. */\n readonly minimumEditorHeight?: number;\n /** Maximum height while growing; `0` (default) means unbounded. */\n readonly maxEditorHeight?: number;\n /** `'textChanges'` (default) grows with the text; `'disabled'` keeps `minimumEditorHeight`. */\n readonly autoSize?: G9EditorAutoSize;\n /** Spell checking (iOS `ios-spell-check`). Default true. */\n readonly isSpellCheckEnabled?: boolean;\n /** Word prediction / autocorrect (iOS `ios-auto-correct`). Default true. */\n readonly isTextPredictionEnabled?: boolean;\n}\n\n/** Imperative handle of {@link G9Editor}. */\nexport type G9EditorHandle = G9TextInputHandle;\n\n/**\n * Multi-line outlined text area (MAUI `G9Editor`): the text-entry behaviour on a `<textarea>`, a microphone pinned to\n * the bottom-end corner whenever dictation is available, height from `minimumEditorHeight`/`maxEditorHeight`/\n * `autoSize`. Validates on blur only for email/url/custom types (no `validator`, as in MAUI). Requires the host's\n * `xelement-input` registration.\n */\nexport const G9Editor = forwardRef<G9EditorHandle, G9EditorProps>(function G9Editor(props, ref): ReactNode {\n const glyphs = useG9Settings().glyphs;\n const core = useTextInput(props, { name: 'G9Editor.value', showMic: (s) => s.available });\n useImperativeHandle(ref, () => core.handle);\n const affordance: G9TrailingAffordance | null = core.showMic\n ? {\n icon: core.dictation.listening ? glyphs.micOff : glyphs.mic,\n color: core.dictation.listening ? 'var(--g9-error)' : 'var(--g9-primary)',\n signature: 'voice',\n onPress: core.pressMic,\n }\n : null;\n const min = props.minimumEditorHeight ?? 96;\n const max = props.maxEditorHeight ?? 0;\n const autoSize = props.autoSize ?? 'textChanges';\n return (\n <G9OutlinedField\n {...props}\n multiline\n hasError={core.hasError}\n errorText={core.errorText ?? null}\n focused={core.focused}\n hasValue={core.hasValue}\n textLength={core.text.length}\n trailingAffordance={affordance}\n onFocusRequest={core.focus}\n >\n <textarea\n {...core.elementProps}\n className=\"g9-field__textarea\"\n ios-spell-check={props.isSpellCheckEnabled !== false}\n ios-auto-correct={props.isTextPredictionEnabled !== false}\n style={{\n direction: core.textDirection,\n textAlign: core.textDirection === 'rtl' ? 'right' : 'left',\n ...(core.font ? { fontFamily: core.font } : {}),\n color: props.disabled ? 'var(--g9-text-disabled)' : 'var(--g9-text-primary)',\n ...(autoSize === 'disabled'\n ? { height: `${min}px` }\n : { minHeight: `${min}px`, ...(max > 0 ? { maxHeight: `${Math.max(min, max)}px` } : {}) }),\n paddingTop: `${G9Metrics.FloatingLabelClearance + 8}px`,\n paddingBottom: '8px',\n }}\n />\n </G9OutlinedField>\n );\n});\n"],"names":["G9Editor","forwardRef","props","ref","_props_minimumEditorHeight","_props_maxEditorHeight","_props_autoSize","_core_errorText","glyphs","useG9Settings","core","useTextInput","s","useImperativeHandle","affordance","min","max","autoSize","G9OutlinedField","textarea","Math","G9Metrics"],"mappings":";;;;;AAgCO,MAAMA,kBAAWC,WAA0C,SAAkBC,KAAK,EAAEC,GAAG;QAYhFC,4BACAC,wBACKC,iBAMFC;IAnBf,MAAMC,SAASC,gBAAgB,MAAM;IACrC,MAAMC,OAAOC,aAAaT,OAAO;QAAE,MAAM;QAAkB,SAAS,CAACU,IAAMA,EAAE,SAAS;IAAC;IACvFC,oBAAoBV,KAAK,IAAMO,KAAK,MAAM;IAC1C,MAAMI,aAA0CJ,KAAK,OAAO,GACxD;QACE,MAAMA,KAAK,SAAS,CAAC,SAAS,GAAGF,OAAO,MAAM,GAAGA,OAAO,GAAG;QAC3D,OAAOE,KAAK,SAAS,CAAC,SAAS,GAAG,oBAAoB;QACtD,WAAW;QACX,SAASA,KAAK,QAAQ;IACxB,IACA;IACJ,MAAMK,MAAM,QAAAX,CAAAA,6BAAAA,MAAM,mBAAmB,AAAD,IAAxBA,6BAA6B;IACzC,MAAMY,MAAM,QAAAX,CAAAA,yBAAAA,MAAM,eAAe,AAAD,IAApBA,yBAAyB;IACrC,MAAMY,WAAW,QAAAX,CAAAA,kBAAAA,MAAM,QAAQ,AAAD,IAAbA,kBAAkB;IACnC,QACGY,iBACE,GAAGhB,KAAK,EACT,UACA,UAAUQ,KAAK,QAAQ,EACvB,WAAW,QAAAH,CAAAA,kBAAAA,KAAK,SAAS,AAAD,IAAbA,kBAAkB,MAC7B,SAASG,KAAK,OAAO,EACrB,UAAUA,KAAK,QAAQ,EACvB,YAAYA,KAAK,IAAI,CAAC,MAAM,EAC5B,oBAAoBI,YACpB,gBAAgBJ,KAAK,KAAK,EAC3B;MACC,CAACS,UACE,GAAGT,KAAK,YAAY,EACrB,UAAU,qBACV,iBAAiBR,AAA8B,UAA9BA,MAAM,mBAAmB,EAC1C,kBAAkBA,AAAkC,UAAlCA,MAAM,uBAAuB,EAC/C,OAAO;QACL,WAAWQ,KAAK,aAAa;QAC7B,WAAWA,AAAuB,UAAvBA,KAAK,aAAa,GAAa,UAAU;QACpD,GAAIA,KAAK,IAAI,GAAG;YAAE,YAAYA,KAAK,IAAI;QAAC,IAAI,CAAC,CAAC;QAC9C,OAAOR,MAAM,QAAQ,GAAG,4BAA4B;QACpD,GAAIe,AAAa,eAAbA,WACA;YAAE,QAAQ,GAAGF,IAAI,EAAE,CAAC;QAAC,IACrB;YAAE,WAAW,GAAGA,IAAI,EAAE,CAAC;YAAE,GAAIC,MAAM,IAAI;gBAAE,WAAW,GAAGI,KAAK,GAAG,CAACL,KAAKC,KAAK,EAAE,CAAC;YAAC,IAAI,CAAC,CAAC;QAAE,CAAC;QAC3F,YAAY,GAAGK,UAAU,sBAAsB,GAAG,EAAE,EAAE,CAAC;QACvD,eAAe;IACjB,IACA;IACJ,EAAEH;AAEN"}
|
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
.g9-field {
|
|
2
|
+
flex-direction: column;
|
|
3
|
+
width: 100%;
|
|
4
|
+
display: flex;
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
.g9-field__box {
|
|
8
|
+
background-color: #0000;
|
|
9
|
+
flex-direction: column;
|
|
10
|
+
display: flex;
|
|
11
|
+
position: relative;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
.g9-field__outline, .g9-field__halo {
|
|
15
|
+
pointer-events: none;
|
|
16
|
+
border-style: solid;
|
|
17
|
+
position: absolute;
|
|
18
|
+
top: 0;
|
|
19
|
+
bottom: 0;
|
|
20
|
+
left: 0;
|
|
21
|
+
right: 0;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
.g9-field__content {
|
|
25
|
+
flex-direction: column;
|
|
26
|
+
flex: 1;
|
|
27
|
+
justify-content: center;
|
|
28
|
+
display: flex;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
.g9-field__input {
|
|
32
|
+
background-color: #0000;
|
|
33
|
+
width: 100%;
|
|
34
|
+
height: 100%;
|
|
35
|
+
font-size: 15px;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
.g9-field__input--readonly {
|
|
39
|
+
text-overflow: ellipsis;
|
|
40
|
+
height: auto;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
.g9-field__textarea {
|
|
44
|
+
background-color: #0000;
|
|
45
|
+
width: 100%;
|
|
46
|
+
font-size: 15px;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
.g9-field__slot {
|
|
50
|
+
justify-content: center;
|
|
51
|
+
align-items: center;
|
|
52
|
+
display: flex;
|
|
53
|
+
position: absolute;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
.g9-field__label {
|
|
57
|
+
pointer-events: none;
|
|
58
|
+
background-color: #0000;
|
|
59
|
+
height: 22px;
|
|
60
|
+
padding-left: 4px;
|
|
61
|
+
padding-right: 4px;
|
|
62
|
+
line-height: 22px;
|
|
63
|
+
transition-property: top, font-size, transform, color;
|
|
64
|
+
transition-duration: .16s;
|
|
65
|
+
position: absolute;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
.g9-field__label--floated {
|
|
69
|
+
background-color: var(--g9-field-notch-background, var(--g9-background));
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
.g9-field__footer {
|
|
73
|
+
flex-direction: row;
|
|
74
|
+
justify-content: space-between;
|
|
75
|
+
padding-top: 4px;
|
|
76
|
+
padding-left: 14px;
|
|
77
|
+
padding-right: 14px;
|
|
78
|
+
display: flex;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
.g9-field__helper {
|
|
82
|
+
flex: 1;
|
|
83
|
+
font-size: 11.5px;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
.g9-field__counter {
|
|
87
|
+
color: var(--g9-text-tertiary);
|
|
88
|
+
font-size: 11px;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
.g9-field__busy {
|
|
92
|
+
border-style: solid;
|
|
93
|
+
border-width: 2px;
|
|
94
|
+
border-radius: 9px;
|
|
95
|
+
width: 18px;
|
|
96
|
+
height: 18px;
|
|
97
|
+
animation: .8s linear infinite g9-field-spin;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
@keyframes g9-field-spin {
|
|
101
|
+
from {
|
|
102
|
+
transform: rotate(0);
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
to {
|
|
106
|
+
transform: rotate(360deg);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
.g9-field--disabled .g9-field__outline, .g9-field--disabled .g9-field__halo, .g9-field--disabled .g9-field__content, .g9-field--disabled .g9-field__slot, .g9-field--disabled .g9-field__footer {
|
|
111
|
+
opacity: .45;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
.g9-pin {
|
|
115
|
+
direction: ltr;
|
|
116
|
+
flex-direction: row;
|
|
117
|
+
align-items: center;
|
|
118
|
+
display: flex;
|
|
119
|
+
position: relative;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
.g9-pin__cell {
|
|
123
|
+
border-style: solid;
|
|
124
|
+
border-width: 1.4px;
|
|
125
|
+
border-color: var(--g9-outline-variant);
|
|
126
|
+
background-color: var(--g9-surface);
|
|
127
|
+
border-radius: 10px;
|
|
128
|
+
justify-content: center;
|
|
129
|
+
align-items: center;
|
|
130
|
+
margin-right: 8px;
|
|
131
|
+
display: flex;
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
.g9-pin__cell--filled {
|
|
135
|
+
border-color: var(--g9-primary-border);
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
.g9-pin__cell--active {
|
|
139
|
+
border-width: 2px;
|
|
140
|
+
border-color: var(--g9-primary);
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
.g9-pin__char {
|
|
144
|
+
color: var(--g9-text-primary);
|
|
145
|
+
font-size: 22px;
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
.g9-pin--disabled .g9-pin__char {
|
|
149
|
+
color: var(--g9-text-disabled);
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
.g9-pin__placeholder {
|
|
153
|
+
color: var(--g9-text-tertiary);
|
|
154
|
+
font-size: 22px;
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
.g9-pin__separator {
|
|
158
|
+
color: var(--g9-on-surface-variant);
|
|
159
|
+
margin-right: 6px;
|
|
160
|
+
font-size: 22px;
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
|
|
164
|
+
/*# sourceMappingURL=fields.css.map */
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["webpack://./src/fields/fields.css"],"names":[],"mappings":"AACA;EAAE,sBAAsB;EACtB,WAAW;EACX,aAAa;AACf;;AAGA;EAAE,uBAAuB;EACvB,sBAAsB;EACtB,aAAa;EACb,kBAAkB;AACpB;;AAGA;EAAE,oBAAoB;EACpB,mBAAmB;EACnB,kBAAkB;EAClB,MAAM;EACN,SAAS;EACT,OAAO;EACP,QAAQ;AACV;;AAaA;EAVE,sBAAsB;EACtB,OAAO;EACP,uBAAuB;EACvB,aAAa;AACf;;AAaA;EAVE,uBAAuB;EACvB,WAAW;EACX,YAAY;EACZ,eAAe;AACjB;;AAcA;EAXE,uBAAuB;EACvB,YAAY;AACd;;AAcA;EAXE,uBAAuB;EACvB,WAAW;EACX,eAAe;AACjB;;AAcA;EAXE,uBAAuB;EACvB,mBAAmB;EACnB,aAAa;EACb,kBAAkB;AACpB;;AAcA;EAXE,oBAAoB;EACpB,uBAAuB;EACvB,YAAY;EACZ,iBAAiB;EACjB,kBAAkB;EAClB,iBAAiB;EACjB,qDAAqD;EACrD,yBAAyB;EACzB,kBAAkB;AACpB;;AAgBA;EAbE,wEAAwE;AAC1E;;AAgBA;EAbE,mBAAmB;EACnB,8BAA8B;EAC9B,gBAAgB;EAChB,kBAAkB;EAClB,mBAAmB;EACnB,aAAa;AACf;;AAgBA;EAbE,OAAO;EACP,iBAAiB;AACnB;;AAgBA;EAbE,8BAA8B;EAC9B,eAAe;AACjB;;AAgBA;EAbE,mBAAmB;EACnB,iBAAiB;EACjB,kBAAkB;EAClB,WAAW;EACX,YAAY;EACZ,4CAA4C;AAC9C;;AAgBA;EAbE;IACE,oBAAoB;EACtB;;EAEA;IACE,yBAAyB;EAC3B;AACF;;AAkBA;EAfE,YAAY;AACd;;AAuBA;EApBE,cAAc;EACd,mBAAmB;EACnB,mBAAmB;EACnB,aAAa;EACb,kBAAkB;AACpB;;AAuBA;EApBE,mBAAmB;EACnB,mBAAmB;EACnB,uCAAuC;EACvC,mCAAmC;EACnC,mBAAmB;EACnB,uBAAuB;EACvB,mBAAmB;EACnB,iBAAiB;EACjB,aAAa;AACf;;AAuBA;EApBE,sCAAsC;AACxC;;AAuBA;EApBE,iBAAiB;EACjB,+BAA+B;AACjC;;AAuBA;EApBE,6BAA6B;EAC7B,eAAe;AACjB;;AAuBA;EApBE,8BAA8B;AAChC;;AAuBA;EApBE,8BAA8B;EAC9B,eAAe;AACjB;;AAuBA;EApBE,mCAAmC;EACnC,iBAAiB;EACjB,eAAe;AACjB","sourcesContent":["/* Outlined fields (MAUI G9OutlinedFieldBase). Colours come from the theme variables; sizes from G9Metrics. */\n.g9-field {\n display: flex;\n flex-direction: column;\n width: 100%;\n}\n\n.g9-field__box {\n display: flex;\n flex-direction: column;\n position: relative;\n background-color: transparent;\n}\n\n.g9-field__outline {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n border-style: solid;\n pointer-events: none;\n}\n\n.g9-field__halo {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n border-style: solid;\n pointer-events: none;\n}\n\n.g9-field__content {\n display: flex;\n flex-direction: column;\n justify-content: center;\n flex: 1;\n}\n\n.g9-field__input {\n width: 100%;\n height: 100%;\n font-size: 15px;\n background-color: transparent;\n}\n\n/* The read-only value: a text line centred like the input's. */\n.g9-field__input--readonly {\n height: auto;\n text-overflow: ellipsis;\n}\n\n.g9-field__textarea {\n width: 100%;\n font-size: 15px;\n background-color: transparent;\n}\n\n.g9-field__slot {\n display: flex;\n position: absolute;\n align-items: center;\n justify-content: center;\n}\n\n.g9-field__label {\n position: absolute;\n height: 22px;\n line-height: 22px;\n padding-left: 4px;\n padding-right: 4px;\n background-color: transparent;\n transition-property: top, font-size, transform, color;\n transition-duration: 160ms;\n pointer-events: none;\n}\n\n/* Only a floated label sits on the outline: its notch paints the colour behind the field (a container that is not\n --g9-background sets --g9-field-notch-background; G9 sheets and popups do). At rest it paints nothing. */\n.g9-field__label--floated {\n background-color: var(--g9-field-notch-background, var(--g9-background));\n}\n\n.g9-field__footer {\n display: flex;\n flex-direction: row;\n justify-content: space-between;\n padding-top: 4px;\n padding-left: 14px;\n padding-right: 14px;\n}\n\n.g9-field__helper {\n flex: 1;\n font-size: 11.5px;\n}\n\n.g9-field__counter {\n font-size: 11px;\n color: var(--g9-text-tertiary);\n}\n\n.g9-field__busy {\n width: 18px;\n height: 18px;\n border-width: 2px;\n border-style: solid;\n border-radius: 9px;\n animation: g9-field-spin 800ms linear infinite;\n}\n\n@keyframes g9-field-spin {\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n}\n\n/* Disabled dims the field (MAUI DisabledDimAlpha) part by part: an opacity on the box itself renders it into a layer\n the size of the box on Android, which cut the floated label above it in half. The label takes the disabled colour\n instead, so its notch still hides the outline. */\n.g9-field--disabled .g9-field__outline,\n.g9-field--disabled .g9-field__halo,\n.g9-field--disabled .g9-field__content,\n.g9-field--disabled .g9-field__slot,\n.g9-field--disabled .g9-field__footer {\n opacity: 0.45;\n}\n\n/* PIN entry (MAUI G9PinEntry): the row is always left-to-right. */\n.g9-pin {\n display: flex;\n flex-direction: row;\n align-items: center;\n position: relative;\n direction: ltr;\n}\n\n.g9-pin__cell {\n display: flex;\n align-items: center;\n justify-content: center;\n margin-right: 8px;\n border-style: solid;\n border-width: 1.4px;\n border-radius: 10px;\n border-color: var(--g9-outline-variant);\n background-color: var(--g9-surface);\n}\n\n.g9-pin__cell--filled {\n border-color: var(--g9-primary-border);\n}\n\n.g9-pin__cell--active {\n border-width: 2px;\n border-color: var(--g9-primary);\n}\n\n.g9-pin__char {\n font-size: 22px;\n color: var(--g9-text-primary);\n}\n\n.g9-pin--disabled .g9-pin__char {\n color: var(--g9-text-disabled);\n}\n\n.g9-pin__placeholder {\n font-size: 22px;\n color: var(--g9-text-tertiary);\n}\n\n.g9-pin__separator {\n font-size: 22px;\n margin-right: 6px;\n color: var(--g9-on-surface-variant);\n}\n"],"sourceRoot":""}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export { G9VoiceDictation, type G9VoiceDictationOptions, } from './dictation.js';
|
|
2
|
+
export { G9Editor, type G9EditorAutoSize, type G9EditorHandle, type G9EditorProps } from './editor.js';
|
|
3
|
+
export { customPatternCacheSize, decimalSeparatorFor, type G9LynxInputElementType, g9CustomPatternCacheLimit, inputTypeHasValidationRule, inputTypePrefersLeftToRight, isAbsoluteUri, resolveEffectiveKeyboard, resolveInputElementType, resolveKeyboardForInputType, sanitizeInputText, validateInputText, } from './input-policy.js';
|
|
4
|
+
export { g9FieldNotchBackgroundVariable, g9FieldNotchStyle } from './notch.js';
|
|
5
|
+
export { G9OutlinedField, type G9OutlinedFieldFrameProps, type G9OutlinedFieldProps, type G9OutlinedFieldState, type G9OutlinedFieldStateInput, type G9TrailingAffordance, resolveOutlinedFieldState, useOutlinedField, } from './outlined-field.js';
|
|
6
|
+
export { filterPin, G9PinEntry, type G9PinEntryHandle, type G9PinEntryProps, isPinCharAllowed, parsePinGroupSizes, pinCellCount, } from './pin-entry.js';
|
|
7
|
+
export { type G9SearchContext, G9SearchEntry, type G9SearchEntryHandle, type G9SearchEntryProps, } from './search-entry.js';
|
|
8
|
+
export { type G9FieldSlotLayout, type G9FieldSlotLayoutInput, type G9PhysicalPadding, resolveFieldSlotLayout, } from './slot-layout.js';
|
|
9
|
+
export { G9TextEntry, type G9TextEntryHandle, type G9TextEntryProps, shouldShowEntryMic } from './text-entry.js';
|
|
10
|
+
export { type G9DictationOptions, type G9DictationState, useDictation } from './use-dictation.js';
|
|
11
|
+
export { type G9NodeRef, type G9TextInputHandle, type G9TextInputProps, type G9ValueChangeDetails, type G9ValueChangeSource, resolveInputTextDirection, } from './use-text-input.js';
|
|
12
|
+
export { combineValidators, type G9TextValidator, requiredValidator, runTextValidator, } from './validator.js';
|
|
13
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/fields/index.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,gBAAgB,EAChB,KAAK,uBAAuB,GAC7B,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,QAAQ,EAAE,KAAK,gBAAgB,EAAE,KAAK,cAAc,EAAE,KAAK,aAAa,EAAE,MAAM,UAAU,CAAC;AACpG,OAAO,EACL,sBAAsB,EACtB,mBAAmB,EACnB,KAAK,sBAAsB,EAC3B,yBAAyB,EACzB,0BAA0B,EAC1B,2BAA2B,EAC3B,aAAa,EACb,wBAAwB,EACxB,uBAAuB,EACvB,2BAA2B,EAC3B,iBAAiB,EACjB,iBAAiB,GAClB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,8BAA8B,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAC5E,OAAO,EACL,eAAe,EACf,KAAK,yBAAyB,EAC9B,KAAK,oBAAoB,EACzB,KAAK,oBAAoB,EACzB,KAAK,yBAAyB,EAC9B,KAAK,oBAAoB,EACzB,yBAAyB,EACzB,gBAAgB,GACjB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,SAAS,EACT,UAAU,EACV,KAAK,gBAAgB,EACrB,KAAK,eAAe,EACpB,gBAAgB,EAChB,kBAAkB,EAClB,YAAY,GACb,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,KAAK,eAAe,EACpB,aAAa,EACb,KAAK,mBAAmB,EACxB,KAAK,kBAAkB,GACxB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,KAAK,iBAAiB,EACtB,KAAK,sBAAsB,EAC3B,KAAK,iBAAiB,EACtB,sBAAsB,GACvB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,WAAW,EAAE,KAAK,iBAAiB,EAAE,KAAK,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAC9G,OAAO,EAAE,KAAK,kBAAkB,EAAE,KAAK,gBAAgB,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/F,OAAO,EACL,KAAK,SAAS,EACd,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EACrB,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,EACxB,yBAAyB,GAC1B,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,iBAAiB,EACjB,KAAK,eAAe,EACpB,iBAAiB,EACjB,gBAAgB,GACjB,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export { G9VoiceDictation } from "./dictation.jsx";
|
|
2
|
+
export { G9Editor } from "./editor.jsx";
|
|
3
|
+
export { customPatternCacheSize, decimalSeparatorFor, g9CustomPatternCacheLimit, inputTypeHasValidationRule, inputTypePrefersLeftToRight, isAbsoluteUri, resolveEffectiveKeyboard, resolveInputElementType, resolveKeyboardForInputType, sanitizeInputText, validateInputText } from "./input-policy.jsx";
|
|
4
|
+
export { g9FieldNotchBackgroundVariable, g9FieldNotchStyle } from "./notch.jsx";
|
|
5
|
+
export { G9OutlinedField, resolveOutlinedFieldState, useOutlinedField } from "./outlined-field.jsx";
|
|
6
|
+
export { G9PinEntry, filterPin, isPinCharAllowed, parsePinGroupSizes, pinCellCount } from "./pin-entry.jsx";
|
|
7
|
+
export { G9SearchEntry } from "./search-entry.jsx";
|
|
8
|
+
export { resolveFieldSlotLayout } from "./slot-layout.jsx";
|
|
9
|
+
export { G9TextEntry, shouldShowEntryMic } from "./text-entry.jsx";
|
|
10
|
+
export { useDictation } from "./use-dictation.jsx";
|
|
11
|
+
export { resolveInputTextDirection } from "./use-text-input.jsx";
|
|
12
|
+
export { combineValidators, requiredValidator, runTextValidator } from "./validator.jsx";
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { G9InputType, G9KeyboardType, type G9NumberingSystem, type G9Strings } from '@g9tm/lynxcontrols-foundation';
|
|
2
|
+
/** `<input type>` values the Lynx `<input>` element accepts. */
|
|
3
|
+
export type G9LynxInputElementType = 'text' | 'number' | 'digit' | 'password' | 'tel' | 'email';
|
|
4
|
+
/**
|
|
5
|
+
* Whether values of this type are written left-to-right whatever the culture (numbers, phone numbers, email
|
|
6
|
+
* addresses, URLs). Only the entered value and its caret are pinned; label, outline and icons follow the culture.
|
|
7
|
+
*/
|
|
8
|
+
export declare function inputTypePrefersLeftToRight(inputType: G9InputType): boolean;
|
|
9
|
+
/** The on-screen keyboard an input type implies (MAUI `G9InputTypePolicy.ResolveKeyboard`). */
|
|
10
|
+
export declare function resolveKeyboardForInputType(inputType: G9InputType): G9KeyboardType;
|
|
11
|
+
/**
|
|
12
|
+
* The keyboard a field shows: the input type's keyboard, or, for `'default'` input, the field's own `keyboardType`
|
|
13
|
+
* (MAUI ignored `KeyboardType` for every input type; here it works for `'default'` and `'custom'`).
|
|
14
|
+
* `'password'` maps to the default keyboard, as in MAUI.
|
|
15
|
+
*/
|
|
16
|
+
export declare function resolveEffectiveKeyboard(inputType: G9InputType, keyboardType: G9KeyboardType): G9KeyboardType;
|
|
17
|
+
/**
|
|
18
|
+
* The Lynx `<input type>` for a keyboard (the `G9InputType` → element mapping table in `docs/fields.md`). Lynx has no
|
|
19
|
+
* URL keyboard, so `'url'` uses `'text'`; decimal and signed types use `'digit'` (a numeric pad with a separator).
|
|
20
|
+
* A masked password is always `'password'`.
|
|
21
|
+
*/
|
|
22
|
+
export declare function resolveInputElementType(inputType: G9InputType, keyboard: G9KeyboardType, masked: boolean): G9LynxInputElementType;
|
|
23
|
+
/** Most distinct custom patterns kept compiled (MAUI `CustomPatternCacheLimit`). */
|
|
24
|
+
export declare const g9CustomPatternCacheLimit = 64;
|
|
25
|
+
/** Number of compiled custom patterns currently cached (for tests). */
|
|
26
|
+
export declare function customPatternCacheSize(): number;
|
|
27
|
+
/** The decimal separator `Decimal`/`SignedDecimal` normalise to: the culture numbering system's (`.` or `٫`). */
|
|
28
|
+
export declare function decimalSeparatorFor(numberingSystem: G9NumberingSystem): string;
|
|
29
|
+
/**
|
|
30
|
+
* Strips every character the input type rejects (MAUI `G9InputTypePolicy.SanitizeText`). Types that accept ASCII
|
|
31
|
+
* digits only see Persian and Arabic-Indic digits as ASCII first. Returns `raw` itself when nothing changes, so a
|
|
32
|
+
* caller can compare by identity. The decimal types keep one separator, normalised to `decimalSeparator`.
|
|
33
|
+
*/
|
|
34
|
+
export declare function sanitizeInputText(inputType: G9InputType, raw: string, allowedCharsPattern?: string | null, decimalSeparator?: string): string;
|
|
35
|
+
/**
|
|
36
|
+
* An absolute URI in the sense of .NET `Uri.TryCreate(value, UriKind.Absolute)` for the cases forms meet: a scheme,
|
|
37
|
+
* then, for the hierarchical web schemes, `//` and a non-empty host; no whitespace; a Windows drive path counts.
|
|
38
|
+
*/
|
|
39
|
+
export declare function isAbsoluteUri(value: string): boolean;
|
|
40
|
+
/**
|
|
41
|
+
* Validates a final value (MAUI `G9InputTypePolicy.Validate`): `null` when acceptable, else the message —
|
|
42
|
+
* `customMessage` when given, else the culture's `invalidEmail` / `invalidUrl` / `invalidValue`. Empty values pass.
|
|
43
|
+
* `Custom` checks `validationPattern`; a pattern that does not compile fails closed.
|
|
44
|
+
*/
|
|
45
|
+
export declare function validateInputText(inputType: G9InputType, value: string | null | undefined, validationPattern: string | null | undefined, customMessage: string | null | undefined, strings: Pick<G9Strings, 'get'>): string | null;
|
|
46
|
+
/** Whether the type (with its pattern) has a blur-time rule (part of MAUI `ShouldAutoValidate`). */
|
|
47
|
+
export declare function inputTypeHasValidationRule(inputType: G9InputType, validationPattern: string | null | undefined): boolean;
|
|
48
|
+
//# sourceMappingURL=input-policy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"input-policy.d.ts","sourceRoot":"","sources":["../../src/fields/input-policy.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EACX,cAAc,EACd,KAAK,iBAAiB,EAEtB,KAAK,SAAS,EAGf,MAAM,+BAA+B,CAAC;AAKvC,gEAAgE;AAChE,MAAM,MAAM,sBAAsB,GAAG,MAAM,GAAG,QAAQ,GAAG,OAAO,GAAG,UAAU,GAAG,KAAK,GAAG,OAAO,CAAC;AAsBhG;;;GAGG;AACH,wBAAgB,2BAA2B,CAAC,SAAS,EAAE,WAAW,GAAG,OAAO,CAE3E;AAED,+FAA+F;AAC/F,wBAAgB,2BAA2B,CAAC,SAAS,EAAE,WAAW,GAAG,cAAc,CAgBlF;AAED;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,SAAS,EAAE,WAAW,EAAE,YAAY,EAAE,cAAc,GAAG,cAAc,CAI7G;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CACrC,SAAS,EAAE,WAAW,EACtB,QAAQ,EAAE,cAAc,EACxB,MAAM,EAAE,OAAO,GACd,sBAAsB,CAYxB;AAiDD,oFAAoF;AACpF,eAAO,MAAM,yBAAyB,KAAK,CAAC;AAiB5C,uEAAuE;AACvE,wBAAgB,sBAAsB,IAAI,MAAM,CAE/C;AAaD,iHAAiH;AACjH,wBAAgB,mBAAmB,CAAC,eAAe,EAAE,iBAAiB,GAAG,MAAM,CAE9E;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAC/B,SAAS,EAAE,WAAW,EACtB,GAAG,EAAE,MAAM,EACX,mBAAmB,CAAC,EAAE,MAAM,GAAG,IAAI,EACnC,gBAAgB,SAAM,GACrB,MAAM,CAmCR;AAKD;;;GAGG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAcpD;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAC/B,SAAS,EAAE,WAAW,EACtB,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAChC,iBAAiB,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAC5C,aAAa,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EACxC,OAAO,EAAE,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,GAC9B,MAAM,GAAG,IAAI,CAoBf;AAED,oGAAoG;AACpG,wBAAgB,0BAA0B,CACxC,SAAS,EAAE,WAAW,EACtB,iBAAiB,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAC3C,OAAO,CAGT"}
|