@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,52 @@
|
|
|
1
|
+
import './button.css';
|
|
2
|
+
import { type G9ButtonVariant, type G9ControlSize, type G9ImageSource } from '@g9tm/lynxcontrols-foundation';
|
|
3
|
+
import type { ReactNode } from '@lynx-js/react';
|
|
4
|
+
import { type G9ControlBaseProps } from '../base/control.js';
|
|
5
|
+
import type { G9IconInput } from '../icon/icon.js';
|
|
6
|
+
import { type G9FontAttributes } from './visuals.js';
|
|
7
|
+
/** Props of {@link G9Button} (MAUI `G9Button`). */
|
|
8
|
+
export interface G9ButtonProps extends G9ControlBaseProps {
|
|
9
|
+
readonly text?: string | null;
|
|
10
|
+
/** Text next to the spinner while loading; empty shows the spinner only. */
|
|
11
|
+
readonly loadingText?: string | null;
|
|
12
|
+
/** Colour recipe. Default `'primary'`. */
|
|
13
|
+
readonly variant?: G9ButtonVariant;
|
|
14
|
+
/** Height, padding and font preset. Default `'medium'` (44). */
|
|
15
|
+
readonly size?: G9ControlSize;
|
|
16
|
+
readonly leadingEmoji?: string | null;
|
|
17
|
+
readonly leadingIcon?: G9IconInput;
|
|
18
|
+
readonly leadingImagePath?: string | null;
|
|
19
|
+
readonly leadingImage?: G9ImageSource | null;
|
|
20
|
+
readonly trailingEmoji?: string | null;
|
|
21
|
+
readonly trailingIcon?: G9IconInput;
|
|
22
|
+
readonly trailingImagePath?: string | null;
|
|
23
|
+
readonly trailingImage?: G9ImageSource | null;
|
|
24
|
+
/** Spinner instead of the icons, presses blocked, opacity 0.7, flat fill. Default false. */
|
|
25
|
+
readonly isLoading?: boolean;
|
|
26
|
+
/** One line with a tail ellipsis; false keeps the text on one line at its natural width. Default true. */
|
|
27
|
+
readonly textTruncation?: boolean;
|
|
28
|
+
/** Icon slot and spinner size. Default 20. */
|
|
29
|
+
readonly iconSize?: number;
|
|
30
|
+
/** Font size; default the size preset's (12/14/15/16). */
|
|
31
|
+
readonly fontSize?: number;
|
|
32
|
+
/** Default `'bold'`. */
|
|
33
|
+
readonly fontAttributes?: G9FontAttributes;
|
|
34
|
+
/** Overrides the variant fill (transparent → no fill and no border). */
|
|
35
|
+
readonly baseBackgroundColor?: string | null;
|
|
36
|
+
/** Overrides the text, icon and spinner colour. */
|
|
37
|
+
readonly textColor?: string | null;
|
|
38
|
+
/** The press (MAUI `Clicked` + `Command`): exactly once per tap, never while disabled or loading. */
|
|
39
|
+
readonly onPress?: () => void;
|
|
40
|
+
/** Spinner colour; default the text colour (MAUI `G9SafeButton.SpinnerColor`, which MAUI ignored). */
|
|
41
|
+
readonly spinnerColor?: string;
|
|
42
|
+
/** Blocks presses like `disabled` (dims to 0.38) without being `disabled` (safe buttons while busy). */
|
|
43
|
+
readonly blocked?: boolean;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Text button (MAUI `G9Button`): variant fill (gradient for the solid variants), 12 px corners, no shadow, optional
|
|
47
|
+
* leading/trailing icons, loading state with a spinner. One press handler on the root: a tap on the icon or the label
|
|
48
|
+
* fires `onPress` once (MAUI "press must fire"); a second tap within 300 ms is dropped; a throwing handler is
|
|
49
|
+
* reported to diagnostics. Press feedback: scale 0.96 (80 ms) → 1 (150 ms) on the main thread.
|
|
50
|
+
*/
|
|
51
|
+
export declare function G9Button(props: G9ButtonProps): ReactNode;
|
|
52
|
+
//# sourceMappingURL=button.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"button.d.ts","sourceRoot":"","sources":["../../src/button/button.tsx"],"names":[],"mappings":"AAAA,OAAO,cAAc,CAAC;AACtB,OAAO,EAAE,KAAK,eAAe,EAAE,KAAK,aAAa,EAAE,KAAK,aAAa,EAAa,MAAM,+BAA+B,CAAC;AACxH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAE,KAAK,kBAAkB,EAA4B,MAAM,iBAAiB,CAAC;AAGpF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAGhD,OAAO,EAAyC,KAAK,gBAAgB,EAAsB,MAAM,WAAW,CAAC;AAE7G,mDAAmD;AACnD,MAAM,WAAW,aAAc,SAAQ,kBAAkB;IACvD,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,4EAA4E;IAC5E,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC,0CAA0C;IAC1C,QAAQ,CAAC,OAAO,CAAC,EAAE,eAAe,CAAC;IACnC,gEAAgE;IAChE,QAAQ,CAAC,IAAI,CAAC,EAAE,aAAa,CAAC;IAC9B,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtC,QAAQ,CAAC,WAAW,CAAC,EAAE,WAAW,CAAC;IACnC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1C,QAAQ,CAAC,YAAY,CAAC,EAAE,aAAa,GAAG,IAAI,CAAC;IAC7C,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvC,QAAQ,CAAC,YAAY,CAAC,EAAE,WAAW,CAAC;IACpC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3C,QAAQ,CAAC,aAAa,CAAC,EAAE,aAAa,GAAG,IAAI,CAAC;IAC9C,4FAA4F;IAC5F,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC;IAC7B,0GAA0G;IAC1G,QAAQ,CAAC,cAAc,CAAC,EAAE,OAAO,CAAC;IAClC,8CAA8C;IAC9C,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,0DAA0D;IAC1D,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,wBAAwB;IACxB,QAAQ,CAAC,cAAc,CAAC,EAAE,gBAAgB,CAAC;IAC3C,wEAAwE;IACxE,QAAQ,CAAC,mBAAmB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7C,mDAAmD;IACnD,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,qGAAqG;IACrG,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IAC9B,sGAAsG;IACtG,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,wGAAwG;IACxG,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED;;;;;GAKG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,aAAa,GAAG,SAAS,CAiFxD"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import "./button.css";
|
|
2
|
+
import { G9Metrics } from "@g9tm/lynxcontrols-foundation";
|
|
3
|
+
import { g9RowStyle, useG9Control } from "../base/control.jsx";
|
|
4
|
+
import { useG9Press, usePressVisual } from "../base/press.jsx";
|
|
5
|
+
import { G9ActivityIndicator } from "../display/activity-indicator.jsx";
|
|
6
|
+
import { G9IconSlot, hasIconSlot } from "../icon/slot.jsx";
|
|
7
|
+
import { useG9Theme } from "../provider/hooks.jsx";
|
|
8
|
+
import { buttonSizePreset, fontAttributesStyle, resolveButtonPaint } from "./visuals.jsx";
|
|
9
|
+
function G9Button(props) {
|
|
10
|
+
var _props_size, _props_variant, _props_loadingText, _props_text, _props_accessibilityLabel, _ref, _props_accessibilityLabel1, _props_spinnerColor, _props_fontAttributes;
|
|
11
|
+
const control = useG9Control(props, 'g9-button');
|
|
12
|
+
const theme = useG9Theme();
|
|
13
|
+
const loading = true === props.isLoading;
|
|
14
|
+
const enabled = !control.disabled && true !== props.blocked;
|
|
15
|
+
const preset = buttonSizePreset(null != (_props_size = props.size) ? _props_size : 'medium');
|
|
16
|
+
const paint = resolveButtonPaint({
|
|
17
|
+
variant: null != (_props_variant = props.variant) ? _props_variant : 'primary',
|
|
18
|
+
palette: theme.palette,
|
|
19
|
+
enabled,
|
|
20
|
+
loading,
|
|
21
|
+
baseBackgroundColor: props.baseBackgroundColor,
|
|
22
|
+
textColor: props.textColor,
|
|
23
|
+
kind: 'button'
|
|
24
|
+
});
|
|
25
|
+
const iconSize = props.iconSize && props.iconSize > 0 ? props.iconSize : G9Metrics.InputIconSize;
|
|
26
|
+
const press = useG9Press(props.onPress, {
|
|
27
|
+
blocked: !enabled || loading,
|
|
28
|
+
source: 'G9Button'
|
|
29
|
+
});
|
|
30
|
+
const visual = usePressVisual({
|
|
31
|
+
property: 'scale',
|
|
32
|
+
rest: 1,
|
|
33
|
+
pressed: 0.96,
|
|
34
|
+
inMs: 80,
|
|
35
|
+
outMs: 150
|
|
36
|
+
}, !enabled || loading);
|
|
37
|
+
const leading = {
|
|
38
|
+
emoji: props.leadingEmoji,
|
|
39
|
+
icon: props.leadingIcon,
|
|
40
|
+
imagePath: props.leadingImagePath,
|
|
41
|
+
image: props.leadingImage
|
|
42
|
+
};
|
|
43
|
+
const trailing = {
|
|
44
|
+
emoji: props.trailingEmoji,
|
|
45
|
+
icon: props.trailingIcon,
|
|
46
|
+
imagePath: props.trailingImagePath,
|
|
47
|
+
image: props.trailingImage
|
|
48
|
+
};
|
|
49
|
+
const label = loading ? null != (_props_loadingText = props.loadingText) ? _props_loadingText : '' : null != (_props_text = props.text) ? _props_text : '';
|
|
50
|
+
const truncate = false !== props.textTruncation;
|
|
51
|
+
return <view className={`${control.className}${preset.fill ? ' g9-button--fill' : ''}`} accessibility-element={true} accessibility-traits="button" {...(null != (_props_accessibilityLabel = props.accessibilityLabel) ? _props_accessibilityLabel : props.text) ? {
|
|
52
|
+
'accessibility-label': null != (_ref = null != (_props_accessibilityLabel1 = props.accessibilityLabel) ? _props_accessibilityLabel1 : props.text) ? _ref : ''
|
|
53
|
+
} : {}} style={{
|
|
54
|
+
...g9RowStyle(control.direction),
|
|
55
|
+
minHeight: `${preset.height}px`,
|
|
56
|
+
background: paint.background,
|
|
57
|
+
borderColor: paint.stroke,
|
|
58
|
+
borderWidth: `${paint.strokeWidth}px`,
|
|
59
|
+
borderRadius: `${G9Metrics.RadiusMd}px`,
|
|
60
|
+
opacity: paint.opacity,
|
|
61
|
+
paddingLeft: `${preset.paddingHorizontal}px`,
|
|
62
|
+
paddingRight: `${preset.paddingHorizontal}px`,
|
|
63
|
+
paddingTop: `${preset.paddingVertical}px`,
|
|
64
|
+
paddingBottom: `${preset.paddingVertical}px`
|
|
65
|
+
}} bindtap={press} {...visual}>
|
|
66
|
+
{loading ? <G9ActivityIndicator running size={iconSize} color={null != (_props_spinnerColor = props.spinnerColor) ? _props_spinnerColor : paint.text}/> : hasIconSlot(leading) ? <G9IconSlot {...leading} size={iconSize} color={paint.text}/> : null}
|
|
67
|
+
{'' !== label.trim() ? <text className="g9-button__label" {...truncate ? {
|
|
68
|
+
'text-maxline': '1'
|
|
69
|
+
} : {}} style={{
|
|
70
|
+
color: paint.text,
|
|
71
|
+
fontSize: `${props.fontSize && props.fontSize > 0 ? props.fontSize : preset.fontSize}px`,
|
|
72
|
+
...fontAttributesStyle(null != (_props_fontAttributes = props.fontAttributes) ? _props_fontAttributes : 'bold'),
|
|
73
|
+
...truncate ? {
|
|
74
|
+
textOverflow: 'ellipsis',
|
|
75
|
+
overflow: 'hidden'
|
|
76
|
+
} : {
|
|
77
|
+
whiteSpace: 'nowrap'
|
|
78
|
+
}
|
|
79
|
+
}}>
|
|
80
|
+
{label}
|
|
81
|
+
</text> : null}
|
|
82
|
+
{!loading && hasIconSlot(trailing) ? <G9IconSlot {...trailing} size={iconSize} color={paint.text}/> : null}
|
|
83
|
+
</view>;
|
|
84
|
+
}
|
|
85
|
+
export { G9Button };
|
|
86
|
+
|
|
87
|
+
//# sourceMappingURL=button.jsx.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"button/button.jsx","sources":["../../src/button/button.tsx"],"sourcesContent":["import './button.css';\nimport { type G9ButtonVariant, type G9ControlSize, type G9ImageSource, G9Metrics } from '@g9tm/lynxcontrols-foundation';\nimport type { ReactNode } from '@lynx-js/react';\nimport { type G9ControlBaseProps, g9RowStyle, useG9Control } from '../base/control';\nimport { useG9Press, usePressVisual } from '../base/press';\nimport { G9ActivityIndicator } from '../display/activity-indicator';\nimport type { G9IconInput } from '../icon/icon';\nimport { G9IconSlot, hasIconSlot } from '../icon/slot';\nimport { useG9Theme } from '../provider/hooks';\nimport { buttonSizePreset, fontAttributesStyle, type G9FontAttributes, resolveButtonPaint } from './visuals';\n\n/** Props of {@link G9Button} (MAUI `G9Button`). */\nexport interface G9ButtonProps extends G9ControlBaseProps {\n readonly text?: string | null;\n /** Text next to the spinner while loading; empty shows the spinner only. */\n readonly loadingText?: string | null;\n /** Colour recipe. Default `'primary'`. */\n readonly variant?: G9ButtonVariant;\n /** Height, padding and font preset. Default `'medium'` (44). */\n readonly size?: G9ControlSize;\n readonly leadingEmoji?: string | null;\n readonly leadingIcon?: G9IconInput;\n readonly leadingImagePath?: string | null;\n readonly leadingImage?: G9ImageSource | null;\n readonly trailingEmoji?: string | null;\n readonly trailingIcon?: G9IconInput;\n readonly trailingImagePath?: string | null;\n readonly trailingImage?: G9ImageSource | null;\n /** Spinner instead of the icons, presses blocked, opacity 0.7, flat fill. Default false. */\n readonly isLoading?: boolean;\n /** One line with a tail ellipsis; false keeps the text on one line at its natural width. Default true. */\n readonly textTruncation?: boolean;\n /** Icon slot and spinner size. Default 20. */\n readonly iconSize?: number;\n /** Font size; default the size preset's (12/14/15/16). */\n readonly fontSize?: number;\n /** Default `'bold'`. */\n readonly fontAttributes?: G9FontAttributes;\n /** Overrides the variant fill (transparent → no fill and no border). */\n readonly baseBackgroundColor?: string | null;\n /** Overrides the text, icon and spinner colour. */\n readonly textColor?: string | null;\n /** The press (MAUI `Clicked` + `Command`): exactly once per tap, never while disabled or loading. */\n readonly onPress?: () => void;\n /** Spinner colour; default the text colour (MAUI `G9SafeButton.SpinnerColor`, which MAUI ignored). */\n readonly spinnerColor?: string;\n /** Blocks presses like `disabled` (dims to 0.38) without being `disabled` (safe buttons while busy). */\n readonly blocked?: boolean;\n}\n\n/**\n * Text button (MAUI `G9Button`): variant fill (gradient for the solid variants), 12 px corners, no shadow, optional\n * leading/trailing icons, loading state with a spinner. One press handler on the root: a tap on the icon or the label\n * fires `onPress` once (MAUI \"press must fire\"); a second tap within 300 ms is dropped; a throwing handler is\n * reported to diagnostics. Press feedback: scale 0.96 (80 ms) → 1 (150 ms) on the main thread.\n */\nexport function G9Button(props: G9ButtonProps): ReactNode {\n const control = useG9Control(props, 'g9-button');\n const theme = useG9Theme();\n const loading = props.isLoading === true;\n const enabled = !control.disabled && props.blocked !== true;\n const preset = buttonSizePreset(props.size ?? 'medium');\n const paint = resolveButtonPaint({\n variant: props.variant ?? 'primary',\n palette: theme.palette,\n enabled,\n loading,\n baseBackgroundColor: props.baseBackgroundColor,\n textColor: props.textColor,\n kind: 'button',\n });\n const iconSize = props.iconSize && props.iconSize > 0 ? props.iconSize : G9Metrics.InputIconSize;\n const press = useG9Press(props.onPress, { blocked: !enabled || loading, source: 'G9Button' });\n const visual = usePressVisual(\n { property: 'scale', rest: 1, pressed: 0.96, inMs: 80, outMs: 150 },\n !enabled || loading,\n );\n const leading = {\n emoji: props.leadingEmoji,\n icon: props.leadingIcon,\n imagePath: props.leadingImagePath,\n image: props.leadingImage,\n };\n const trailing = {\n emoji: props.trailingEmoji,\n icon: props.trailingIcon,\n imagePath: props.trailingImagePath,\n image: props.trailingImage,\n };\n const label = loading ? (props.loadingText ?? '') : (props.text ?? '');\n const truncate = props.textTruncation !== false;\n return (\n <view\n className={`${control.className}${preset.fill ? ' g9-button--fill' : ''}`}\n accessibility-element={true}\n accessibility-traits=\"button\"\n {...((props.accessibilityLabel ?? props.text)\n ? { 'accessibility-label': props.accessibilityLabel ?? props.text ?? '' }\n : {})}\n style={{\n ...g9RowStyle(control.direction),\n minHeight: `${preset.height}px`,\n background: paint.background,\n borderColor: paint.stroke,\n borderWidth: `${paint.strokeWidth}px`,\n borderRadius: `${G9Metrics.RadiusMd}px`,\n opacity: paint.opacity,\n paddingLeft: `${preset.paddingHorizontal}px`,\n paddingRight: `${preset.paddingHorizontal}px`,\n paddingTop: `${preset.paddingVertical}px`,\n paddingBottom: `${preset.paddingVertical}px`,\n }}\n bindtap={press}\n {...visual}\n >\n {loading ? (\n <G9ActivityIndicator running size={iconSize} color={props.spinnerColor ?? paint.text} />\n ) : hasIconSlot(leading) ? (\n <G9IconSlot {...leading} size={iconSize} color={paint.text} />\n ) : null}\n {label.trim() !== '' ? (\n <text\n className=\"g9-button__label\"\n {...(truncate ? { 'text-maxline': '1' } : {})}\n style={{\n color: paint.text,\n fontSize: `${props.fontSize && props.fontSize > 0 ? props.fontSize : preset.fontSize}px`,\n ...fontAttributesStyle(props.fontAttributes ?? 'bold'),\n ...(truncate ? { textOverflow: 'ellipsis', overflow: 'hidden' } : { whiteSpace: 'nowrap' }),\n }}\n >\n {label}\n </text>\n ) : null}\n {!loading && hasIconSlot(trailing) ? <G9IconSlot {...trailing} size={iconSize} color={paint.text} /> : null}\n </view>\n );\n}\n"],"names":["G9Button","props","_props_size","_props_variant","_props_loadingText","_props_text","_props_accessibilityLabel","_ref","_props_spinnerColor","_props_fontAttributes","control","useG9Control","theme","useG9Theme","loading","enabled","preset","buttonSizePreset","paint","resolveButtonPaint","iconSize","G9Metrics","press","useG9Press","visual","usePressVisual","leading","trailing","label","truncate","view","g9RowStyle","G9ActivityIndicator","hasIconSlot","G9IconSlot","text","fontAttributesStyle"],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import './button.css';
|
|
2
|
+
import { type G9ImageSource } from '@g9tm/lynxcontrols-foundation';
|
|
3
|
+
import type { ReactNode } from '@lynx-js/react';
|
|
4
|
+
import { type G9ControlBaseProps } from '../base/control.js';
|
|
5
|
+
import type { G9IconInput } from '../icon/icon.js';
|
|
6
|
+
/** MAUI `G9LayoutMetrics.ToolbarIconSize` / `ToolbarButtonSize`. */
|
|
7
|
+
export declare const g9ToolbarIconSize = 24;
|
|
8
|
+
/** Touch box of a toolbar / header action button (MAUI `G9LayoutMetrics.ToolbarButtonSize`). */
|
|
9
|
+
export declare const g9ToolbarButtonSize = 42;
|
|
10
|
+
/** Props of {@link G9HeaderActionButton} (MAUI `G9HeaderActionButton`). */
|
|
11
|
+
export interface G9HeaderActionButtonProps extends G9ControlBaseProps {
|
|
12
|
+
/** Glyph shown when there is no image and no text. Default `G9Glyph.Menu`. */
|
|
13
|
+
readonly icon?: G9IconInput;
|
|
14
|
+
/** Image; wins over text and glyph. */
|
|
15
|
+
readonly iconImage?: G9ImageSource | null;
|
|
16
|
+
/** Bold 13 label (wins over the glyph). */
|
|
17
|
+
readonly buttonText?: string | null;
|
|
18
|
+
/** Spinner instead of the content; presses blocked. Default false. */
|
|
19
|
+
readonly isBusy?: boolean;
|
|
20
|
+
/** Tinted active state. Default false. */
|
|
21
|
+
readonly isActive?: boolean;
|
|
22
|
+
/** The 8 px dot while active. Default true. */
|
|
23
|
+
readonly showActiveBadge?: boolean;
|
|
24
|
+
/** Scale 0.92 (70 ms) → 1 (90 ms) on press. Default true. */
|
|
25
|
+
readonly animatePress?: boolean;
|
|
26
|
+
/** Default 24. */
|
|
27
|
+
readonly iconSize?: number;
|
|
28
|
+
/** Square size; ≤ 0 → 42 (MAUI `ToolbarButtonSize`). Default 0. */
|
|
29
|
+
readonly buttonSize?: number;
|
|
30
|
+
readonly onPress?: () => void;
|
|
31
|
+
}
|
|
32
|
+
/** Toolbar/header action (MAUI `G9HeaderActionButton`): bordered square with a glyph, image or short text. */
|
|
33
|
+
export declare function G9HeaderActionButton(props: G9HeaderActionButtonProps): ReactNode;
|
|
34
|
+
//# sourceMappingURL=header-action-button.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"header-action-button.d.ts","sourceRoot":"","sources":["../../src/button/header-action-button.tsx"],"names":[],"mappings":"AAAA,OAAO,cAAc,CAAC;AACtB,OAAO,EAAwB,KAAK,aAAa,EAAa,MAAM,+BAA+B,CAAC;AACpG,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAE,KAAK,kBAAkB,EAAgB,MAAM,iBAAiB,CAAC;AAGxE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAIhD,oEAAoE;AACpE,eAAO,MAAM,iBAAiB,KAAK,CAAC;AACpC,gGAAgG;AAChG,eAAO,MAAM,mBAAmB,KAAK,CAAC;AAEtC,2EAA2E;AAC3E,MAAM,WAAW,yBAA0B,SAAQ,kBAAkB;IACnE,8EAA8E;IAC9E,QAAQ,CAAC,IAAI,CAAC,EAAE,WAAW,CAAC;IAC5B,uCAAuC;IACvC,QAAQ,CAAC,SAAS,CAAC,EAAE,aAAa,GAAG,IAAI,CAAC;IAC1C,2CAA2C;IAC3C,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,sEAAsE;IACtE,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAC1B,0CAA0C;IAC1C,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAC5B,+CAA+C;IAC/C,QAAQ,CAAC,eAAe,CAAC,EAAE,OAAO,CAAC;IACnC,6DAA6D;IAC7D,QAAQ,CAAC,YAAY,CAAC,EAAE,OAAO,CAAC;IAChC,kBAAkB;IAClB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,mEAAmE;IACnE,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CAC/B;AAED,8GAA8G;AAC9G,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,yBAAyB,GAAG,SAAS,CA8ChF"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import "./button.css";
|
|
2
|
+
import { G9Glyph, formatColor, withAlpha } from "@g9tm/lynxcontrols-foundation";
|
|
3
|
+
import { useG9Control } from "../base/control.jsx";
|
|
4
|
+
import { useG9Press, usePressVisual } from "../base/press.jsx";
|
|
5
|
+
import { G9ActivityIndicator } from "../display/activity-indicator.jsx";
|
|
6
|
+
import { G9IconSlot } from "../icon/slot.jsx";
|
|
7
|
+
import { useG9Theme } from "../provider/hooks.jsx";
|
|
8
|
+
const g9ToolbarIconSize = 24;
|
|
9
|
+
const g9ToolbarButtonSize = 42;
|
|
10
|
+
function G9HeaderActionButton(props) {
|
|
11
|
+
var _props_iconSize, _props_buttonText, _props_icon, _props_accessibilityLabel, _props_accessibilityLabel1;
|
|
12
|
+
const control = useG9Control(props, 'g9-header-action');
|
|
13
|
+
const palette = useG9Theme().palette;
|
|
14
|
+
const busy = true === props.isBusy;
|
|
15
|
+
const active = true === props.isActive;
|
|
16
|
+
const size = props.buttonSize && props.buttonSize > 0 ? props.buttonSize : g9ToolbarButtonSize;
|
|
17
|
+
const iconSize = null != (_props_iconSize = props.iconSize) ? _props_iconSize : g9ToolbarIconSize;
|
|
18
|
+
const press = useG9Press(props.onPress, {
|
|
19
|
+
blocked: control.disabled || busy,
|
|
20
|
+
source: 'G9HeaderActionButton'
|
|
21
|
+
});
|
|
22
|
+
const visual = usePressVisual({
|
|
23
|
+
property: 'scale',
|
|
24
|
+
rest: 1,
|
|
25
|
+
pressed: 0.92,
|
|
26
|
+
inMs: 70,
|
|
27
|
+
outMs: 90
|
|
28
|
+
}, control.disabled || busy || false === props.animatePress);
|
|
29
|
+
const text1 = null != (_props_buttonText = props.buttonText) ? _props_buttonText : '';
|
|
30
|
+
let content;
|
|
31
|
+
content = busy ? <G9ActivityIndicator running size={20} color="var(--g9-on-surface-variant)"/> : props.iconImage ? <G9IconSlot image={props.iconImage} size={iconSize}/> : '' !== text1.trim() ? <text className="g9-header-action__text">{text1}</text> : <G9IconSlot icon={null != (_props_icon = props.icon) ? _props_icon : G9Glyph.Menu} size={iconSize} color="var(--g9-on-surface-variant)"/>;
|
|
32
|
+
return <view className={control.className} style={{
|
|
33
|
+
width: `${size}px`,
|
|
34
|
+
height: `${size}px`,
|
|
35
|
+
opacity: control.disabled || busy ? 0.5 : 1,
|
|
36
|
+
...active ? {
|
|
37
|
+
backgroundColor: formatColor(withAlpha(palette.Primary, 0.12)),
|
|
38
|
+
borderColor: formatColor(withAlpha(palette.Primary, 0.38))
|
|
39
|
+
} : {}
|
|
40
|
+
}} accessibility-element={true} accessibility-traits="button" {...(null != (_props_accessibilityLabel = props.accessibilityLabel) ? _props_accessibilityLabel : text1 || void 0) ? {
|
|
41
|
+
'accessibility-label': null != (_props_accessibilityLabel1 = props.accessibilityLabel) ? _props_accessibilityLabel1 : text1
|
|
42
|
+
} : {}} bindtap={press} {...visual}>
|
|
43
|
+
{content}
|
|
44
|
+
{active && false !== props.showActiveBadge ? <view className="g9-header-action__badge" style={{
|
|
45
|
+
['rtl' === control.direction ? 'left' : 'right']: '6px'
|
|
46
|
+
}}/> : null}
|
|
47
|
+
</view>;
|
|
48
|
+
}
|
|
49
|
+
export { G9HeaderActionButton, g9ToolbarButtonSize, g9ToolbarIconSize };
|
|
50
|
+
|
|
51
|
+
//# sourceMappingURL=header-action-button.jsx.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"button/header-action-button.jsx","sources":["../../src/button/header-action-button.tsx"],"sourcesContent":["import './button.css';\nimport { formatColor, G9Glyph, type G9ImageSource, withAlpha } from '@g9tm/lynxcontrols-foundation';\nimport type { ReactNode } from '@lynx-js/react';\nimport { type G9ControlBaseProps, useG9Control } from '../base/control';\nimport { useG9Press, usePressVisual } from '../base/press';\nimport { G9ActivityIndicator } from '../display/activity-indicator';\nimport type { G9IconInput } from '../icon/icon';\nimport { G9IconSlot } from '../icon/slot';\nimport { useG9Theme } from '../provider/hooks';\n\n/** MAUI `G9LayoutMetrics.ToolbarIconSize` / `ToolbarButtonSize`. */\nexport const g9ToolbarIconSize = 24;\n/** Touch box of a toolbar / header action button (MAUI `G9LayoutMetrics.ToolbarButtonSize`). */\nexport const g9ToolbarButtonSize = 42;\n\n/** Props of {@link G9HeaderActionButton} (MAUI `G9HeaderActionButton`). */\nexport interface G9HeaderActionButtonProps extends G9ControlBaseProps {\n /** Glyph shown when there is no image and no text. Default `G9Glyph.Menu`. */\n readonly icon?: G9IconInput;\n /** Image; wins over text and glyph. */\n readonly iconImage?: G9ImageSource | null;\n /** Bold 13 label (wins over the glyph). */\n readonly buttonText?: string | null;\n /** Spinner instead of the content; presses blocked. Default false. */\n readonly isBusy?: boolean;\n /** Tinted active state. Default false. */\n readonly isActive?: boolean;\n /** The 8 px dot while active. Default true. */\n readonly showActiveBadge?: boolean;\n /** Scale 0.92 (70 ms) → 1 (90 ms) on press. Default true. */\n readonly animatePress?: boolean;\n /** Default 24. */\n readonly iconSize?: number;\n /** Square size; ≤ 0 → 42 (MAUI `ToolbarButtonSize`). Default 0. */\n readonly buttonSize?: number;\n readonly onPress?: () => void;\n}\n\n/** Toolbar/header action (MAUI `G9HeaderActionButton`): bordered square with a glyph, image or short text. */\nexport function G9HeaderActionButton(props: G9HeaderActionButtonProps): ReactNode {\n const control = useG9Control(props, 'g9-header-action');\n const palette = useG9Theme().palette;\n const busy = props.isBusy === true;\n const active = props.isActive === true;\n const size = props.buttonSize && props.buttonSize > 0 ? props.buttonSize : g9ToolbarButtonSize;\n const iconSize = props.iconSize ?? g9ToolbarIconSize;\n const press = useG9Press(props.onPress, { blocked: control.disabled || busy, source: 'G9HeaderActionButton' });\n const visual = usePressVisual(\n { property: 'scale', rest: 1, pressed: 0.92, inMs: 70, outMs: 90 },\n control.disabled || busy || props.animatePress === false,\n );\n const text = props.buttonText ?? '';\n let content: ReactNode;\n if (busy) content = <G9ActivityIndicator running size={20} color=\"var(--g9-on-surface-variant)\" />;\n else if (props.iconImage) content = <G9IconSlot image={props.iconImage} size={iconSize} />;\n else if (text.trim() !== '') content = <text className=\"g9-header-action__text\">{text}</text>;\n else content = <G9IconSlot icon={props.icon ?? G9Glyph.Menu} size={iconSize} color=\"var(--g9-on-surface-variant)\" />;\n return (\n <view\n className={control.className}\n style={{\n width: `${size}px`,\n height: `${size}px`,\n opacity: control.disabled || busy ? 0.5 : 1,\n ...(active\n ? {\n backgroundColor: formatColor(withAlpha(palette.Primary, 0.12)),\n borderColor: formatColor(withAlpha(palette.Primary, 0.38)),\n }\n : {}),\n }}\n accessibility-element={true}\n accessibility-traits=\"button\"\n {...((props.accessibilityLabel ?? (text || undefined))\n ? { 'accessibility-label': props.accessibilityLabel ?? text }\n : {})}\n bindtap={press}\n {...visual}\n >\n {content}\n {active && props.showActiveBadge !== false ? (\n <view className=\"g9-header-action__badge\" style={{ [control.direction === 'rtl' ? 'left' : 'right']: '6px' }} />\n ) : null}\n </view>\n );\n}\n"],"names":["g9ToolbarIconSize","g9ToolbarButtonSize","G9HeaderActionButton","props","_props_iconSize","_props_buttonText","_props_icon","_props_accessibilityLabel","_props_accessibilityLabel1","control","useG9Control","palette","useG9Theme","busy","active","size","iconSize","press","useG9Press","visual","usePressVisual","text1","content","G9ActivityIndicator","G9IconSlot","text","G9Glyph","view","formatColor","withAlpha","undefined"],"mappings":";;;;;;;AAWO,MAAMA,oBAAoB;AAE1B,MAAMC,sBAAsB;AA0B5B,SAASC,qBAAqBC,KAAgC;QAMlDC,iBAMJC,mBAKoBC,aAiBvBC,2BACuBC;IAlCjC,MAAMC,UAAUC,aAAaP,OAAO;IACpC,MAAMQ,UAAUC,aAAa,OAAO;IACpC,MAAMC,OAAOV,AAAiB,SAAjBA,MAAM,MAAM;IACzB,MAAMW,SAASX,AAAmB,SAAnBA,MAAM,QAAQ;IAC7B,MAAMY,OAAOZ,MAAM,UAAU,IAAIA,MAAM,UAAU,GAAG,IAAIA,MAAM,UAAU,GAAGF;IAC3E,MAAMe,WAAW,QAAAZ,CAAAA,kBAAAA,MAAM,QAAQ,AAAD,IAAbA,kBAAkBJ;IACnC,MAAMiB,QAAQC,WAAWf,MAAM,OAAO,EAAE;QAAE,SAASM,QAAQ,QAAQ,IAAII;QAAM,QAAQ;IAAuB;IAC5G,MAAMM,SAASC,eACb;QAAE,UAAU;QAAS,MAAM;QAAG,SAAS;QAAM,MAAM;QAAI,OAAO;IAAG,GACjEX,QAAQ,QAAQ,IAAII,QAAQV,AAAuB,UAAvBA,MAAM,YAAY;IAEhD,MAAMkB,QAAAA,QAAOhB,CAAAA,oBAAAA,MAAM,UAAU,AAAD,IAAfA,oBAAoB;IACjC,IAAIiB;IACMA,UAANT,QAAiBU,oBAAoB,QAAQ,MAAM,IAAI,MAAM,mCACxDpB,MAAM,SAAS,IAAaqB,WAAW,OAAOrB,MAAM,SAAS,EAAE,MAAMa,cACrEK,AAAgB,OAAhBA,MAAK,IAAI,MAAsBI,KAAK,UAAU,0BAA0BJ,QAAOI,SACxED,WAAW,MAAM,QAAAlB,CAAAA,cAAAA,MAAM,IAAI,AAAD,IAATA,cAAcoB,QAAQ,IAAI,EAAE,MAAMV,UAAU,MAAM;IACnF,QACGW,KACC,WAAWlB,QAAQ,SAAS,EAC5B,OAAO;QACL,OAAO,GAAGM,KAAK,EAAE,CAAC;QAClB,QAAQ,GAAGA,KAAK,EAAE,CAAC;QACnB,SAASN,QAAQ,QAAQ,IAAII,OAAO,MAAM;QAC1C,GAAIC,SACA;YACE,iBAAiBc,YAAYC,UAAUlB,QAAQ,OAAO,EAAE;YACxD,aAAaiB,YAAYC,UAAUlB,QAAQ,OAAO,EAAE;QACtD,IACA,CAAC,CAAC;IACR,GACA,uBAAuB,MACvB,qBAAqB,UACpB,GAAI,AAAC,SAAAJ,CAAAA,4BAAAA,MAAM,kBAAkB,AAAD,IAAvBA,4BAA6Bc,SAAQS,MAAQ,IAC/C;QAAE,uBAAuB,QAAAtB,CAAAA,6BAAAA,MAAM,kBAAkB,AAAD,IAAvBA,6BAA4Ba;IAAK,IAC1D,CAAC,CAAC,EACN,SAASJ,QACR,GAAGE,MAAM,EACX;MACC,CAACG,QAAQ;MACT,CAACR,UAAUX,AAA0B,UAA1BA,MAAM,eAAe,IAC7BwB,KAAK,UAAU,0BAA0B,OAAO;QAAE,CAAClB,AAAsB,UAAtBA,QAAQ,SAAS,GAAa,SAAS,QAAQ,EAAE;IAAM,OACzG,KAAK;IACX,EAAEkB;AAEN"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import './button.css';
|
|
2
|
+
import { type G9ButtonVariant, type G9ImageSource } from '@g9tm/lynxcontrols-foundation';
|
|
3
|
+
import type { ReactNode } from '@lynx-js/react';
|
|
4
|
+
import { type G9ControlBaseProps } from '../base/control.js';
|
|
5
|
+
import type { G9IconInput } from '../icon/icon.js';
|
|
6
|
+
/** Props of {@link G9IconButton} (MAUI `G9IconButton`). */
|
|
7
|
+
export interface G9IconButtonProps extends G9ControlBaseProps {
|
|
8
|
+
readonly emoji?: string | null;
|
|
9
|
+
readonly icon?: G9IconInput;
|
|
10
|
+
readonly imagePath?: string | null;
|
|
11
|
+
readonly image?: G9ImageSource | null;
|
|
12
|
+
/** Icon and spinner size; ≤ 0 → 20. Default 20. */
|
|
13
|
+
readonly iconSize?: number;
|
|
14
|
+
/** Square frame size; ≤ 0 → 40. Default 40. */
|
|
15
|
+
readonly buttonSize?: number;
|
|
16
|
+
/** Transparent, no stroke, icon in `textSecondary`. Default false. */
|
|
17
|
+
readonly isGhost?: boolean;
|
|
18
|
+
/** Default `'surface'`. */
|
|
19
|
+
readonly variant?: G9ButtonVariant;
|
|
20
|
+
/** Fully round instead of 12 px corners. Default false. */
|
|
21
|
+
readonly isCircular?: boolean;
|
|
22
|
+
/** Measured (touch) size when larger than the drawn frame; the frame stays centred. Default 0. */
|
|
23
|
+
readonly minimumTouchTarget?: number;
|
|
24
|
+
readonly baseBackgroundColor?: string | null;
|
|
25
|
+
/** Icon colour override. */
|
|
26
|
+
readonly textColor?: string | null;
|
|
27
|
+
readonly isLoading?: boolean;
|
|
28
|
+
/** Count badge on the top-trailing corner; wins over the dot. */
|
|
29
|
+
readonly badgeText?: string | null;
|
|
30
|
+
readonly showBadgeDot?: boolean;
|
|
31
|
+
/** Default `var(--g9-error)`. */
|
|
32
|
+
readonly badgeColor?: string | null;
|
|
33
|
+
/** Default true. */
|
|
34
|
+
readonly mirrorBadgeTextInRtl?: boolean;
|
|
35
|
+
/** Accessibility name (MAUI `AccessibilityText`); `accessibilityLabel` is an alias. */
|
|
36
|
+
readonly accessibilityText?: string | null;
|
|
37
|
+
readonly onPress?: () => void;
|
|
38
|
+
readonly blocked?: boolean;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Square icon button (MAUI `G9IconButton`): one icon, variant/ghost fill, optional circle, corner badge that is never
|
|
42
|
+
* dimmed (opacity applies to the frame only), loading spinner, minimum touch target. Press: one handler on the root,
|
|
43
|
+
* scale 0.82 (80 ms) → 1 (150 ms). Accessibility hint: "Loading" while loading, else the badge text.
|
|
44
|
+
*/
|
|
45
|
+
export declare function G9IconButton(props: G9IconButtonProps): ReactNode;
|
|
46
|
+
//# sourceMappingURL=icon-button.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"icon-button.d.ts","sourceRoot":"","sources":["../../src/button/icon-button.tsx"],"names":[],"mappings":"AAAA,OAAO,cAAc,CAAC;AACtB,OAAO,EAAE,KAAK,eAAe,EAAE,KAAK,aAAa,EAA0B,MAAM,+BAA+B,CAAC;AACjH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAE,KAAK,kBAAkB,EAAgB,MAAM,iBAAiB,CAAC;AAIxE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAKhD,2DAA2D;AAC3D,MAAM,WAAW,iBAAkB,SAAQ,kBAAkB;IAC3D,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,QAAQ,CAAC,IAAI,CAAC,EAAE,WAAW,CAAC;IAC5B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,QAAQ,CAAC,KAAK,CAAC,EAAE,aAAa,GAAG,IAAI,CAAC;IACtC,mDAAmD;IACnD,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,+CAA+C;IAC/C,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,sEAAsE;IACtE,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAC3B,2BAA2B;IAC3B,QAAQ,CAAC,OAAO,CAAC,EAAE,eAAe,CAAC;IACnC,2DAA2D;IAC3D,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC;IAC9B,kGAAkG;IAClG,QAAQ,CAAC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IACrC,QAAQ,CAAC,mBAAmB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7C,4BAA4B;IAC5B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC;IAC7B,iEAAiE;IACjE,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,QAAQ,CAAC,YAAY,CAAC,EAAE,OAAO,CAAC;IAChC,iCAAiC;IACjC,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,oBAAoB;IACpB,QAAQ,CAAC,oBAAoB,CAAC,EAAE,OAAO,CAAC;IACxC,uFAAuF;IACvF,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3C,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IAC9B,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,iBAAiB,GAAG,SAAS,CA0EhE"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import "./button.css";
|
|
2
|
+
import { G9Metrics, G9StringKey } from "@g9tm/lynxcontrols-foundation";
|
|
3
|
+
import { useG9Control } from "../base/control.jsx";
|
|
4
|
+
import { G9CornerBadge } from "../base/corner-badge.jsx";
|
|
5
|
+
import { useG9Press, usePressVisual } from "../base/press.jsx";
|
|
6
|
+
import { G9ActivityIndicator } from "../display/activity-indicator.jsx";
|
|
7
|
+
import { G9IconSlot } from "../icon/slot.jsx";
|
|
8
|
+
import { useG9Strings, useG9Theme } from "../provider/hooks.jsx";
|
|
9
|
+
import { resolveButtonPaint } from "./visuals.jsx";
|
|
10
|
+
function G9IconButton(props) {
|
|
11
|
+
var _props_variant, _props_textColor, _props_minimumTouchTarget, _props_accessibilityText, _props_badgeText;
|
|
12
|
+
const control = useG9Control(props, 'g9-icon-button');
|
|
13
|
+
const theme = useG9Theme();
|
|
14
|
+
const strings = useG9Strings();
|
|
15
|
+
const loading = true === props.isLoading;
|
|
16
|
+
const enabled = !control.disabled && true !== props.blocked;
|
|
17
|
+
const size = props.buttonSize && props.buttonSize > 0 ? props.buttonSize : 40;
|
|
18
|
+
const iconSize = props.iconSize && props.iconSize > 0 ? props.iconSize : G9Metrics.InputIconSize;
|
|
19
|
+
const ghost = true === props.isGhost;
|
|
20
|
+
const paint = resolveButtonPaint({
|
|
21
|
+
variant: null != (_props_variant = props.variant) ? _props_variant : 'surface',
|
|
22
|
+
palette: theme.palette,
|
|
23
|
+
enabled,
|
|
24
|
+
loading,
|
|
25
|
+
baseBackgroundColor: ghost ? 'rgba(0,0,0,0)' : props.baseBackgroundColor,
|
|
26
|
+
textColor: null != (_props_textColor = props.textColor) ? _props_textColor : ghost ? theme.palette.TextSecondary : null,
|
|
27
|
+
kind: 'icon'
|
|
28
|
+
});
|
|
29
|
+
const press = useG9Press(props.onPress, {
|
|
30
|
+
blocked: !enabled || loading,
|
|
31
|
+
source: 'G9IconButton'
|
|
32
|
+
});
|
|
33
|
+
const visual = usePressVisual({
|
|
34
|
+
property: 'scale',
|
|
35
|
+
rest: 1,
|
|
36
|
+
pressed: 0.82,
|
|
37
|
+
inMs: 80,
|
|
38
|
+
outMs: 150
|
|
39
|
+
}, !enabled || loading);
|
|
40
|
+
const touch = Math.max(null != (_props_minimumTouchTarget = props.minimumTouchTarget) ? _props_minimumTouchTarget : 0, size);
|
|
41
|
+
const name = null != (_props_accessibilityText = props.accessibilityText) ? _props_accessibilityText : props.accessibilityLabel;
|
|
42
|
+
const hint = loading ? strings.get(G9StringKey.Loading) : null != (_props_badgeText = props.badgeText) ? _props_badgeText : void 0;
|
|
43
|
+
return <view className={control.className} style={{
|
|
44
|
+
minWidth: `${touch}px`,
|
|
45
|
+
minHeight: `${touch}px`
|
|
46
|
+
}} accessibility-element={true} accessibility-traits="button" {...name ? {
|
|
47
|
+
'accessibility-label': name
|
|
48
|
+
} : {}} {...hint ? {
|
|
49
|
+
'accessibility-value': hint
|
|
50
|
+
} : {}} bindtap={press} {...visual}>
|
|
51
|
+
<view className="g9-icon-button__host">
|
|
52
|
+
<view className="g9-icon-button__frame" style={{
|
|
53
|
+
width: `${size}px`,
|
|
54
|
+
height: `${size}px`,
|
|
55
|
+
background: paint.background,
|
|
56
|
+
borderColor: paint.stroke,
|
|
57
|
+
borderWidth: `${paint.strokeWidth}px`,
|
|
58
|
+
borderRadius: `${props.isCircular ? size / 2 : G9Metrics.RadiusMd}px`,
|
|
59
|
+
opacity: paint.opacity
|
|
60
|
+
}}>
|
|
61
|
+
{loading ? <G9ActivityIndicator running size={iconSize} color={paint.text}/> : <G9IconSlot emoji={props.emoji} icon={props.icon} imagePath={props.imagePath} image={props.image} size={iconSize} color={paint.text}/>}
|
|
62
|
+
</view>
|
|
63
|
+
<G9CornerBadge text={props.badgeText} dot={true === props.showBadgeDot} color={props.badgeColor} textColor="#FFFFFF" ringColor={ghost ? 'var(--g9-background)' : 'var(--g9-surface)'} mirrorTextInRtl={false !== props.mirrorBadgeTextInRtl}/>
|
|
64
|
+
</view>
|
|
65
|
+
</view>;
|
|
66
|
+
}
|
|
67
|
+
export { G9IconButton };
|
|
68
|
+
|
|
69
|
+
//# sourceMappingURL=icon-button.jsx.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"button/icon-button.jsx","sources":["../../src/button/icon-button.tsx"],"sourcesContent":["import './button.css';\nimport { type G9ButtonVariant, type G9ImageSource, G9Metrics, G9StringKey } from '@g9tm/lynxcontrols-foundation';\nimport type { ReactNode } from '@lynx-js/react';\nimport { type G9ControlBaseProps, useG9Control } from '../base/control';\nimport { G9CornerBadge } from '../base/corner-badge';\nimport { useG9Press, usePressVisual } from '../base/press';\nimport { G9ActivityIndicator } from '../display/activity-indicator';\nimport type { G9IconInput } from '../icon/icon';\nimport { G9IconSlot } from '../icon/slot';\nimport { useG9Strings, useG9Theme } from '../provider/hooks';\nimport { resolveButtonPaint } from './visuals';\n\n/** Props of {@link G9IconButton} (MAUI `G9IconButton`). */\nexport interface G9IconButtonProps extends G9ControlBaseProps {\n readonly emoji?: string | null;\n readonly icon?: G9IconInput;\n readonly imagePath?: string | null;\n readonly image?: G9ImageSource | null;\n /** Icon and spinner size; ≤ 0 → 20. Default 20. */\n readonly iconSize?: number;\n /** Square frame size; ≤ 0 → 40. Default 40. */\n readonly buttonSize?: number;\n /** Transparent, no stroke, icon in `textSecondary`. Default false. */\n readonly isGhost?: boolean;\n /** Default `'surface'`. */\n readonly variant?: G9ButtonVariant;\n /** Fully round instead of 12 px corners. Default false. */\n readonly isCircular?: boolean;\n /** Measured (touch) size when larger than the drawn frame; the frame stays centred. Default 0. */\n readonly minimumTouchTarget?: number;\n readonly baseBackgroundColor?: string | null;\n /** Icon colour override. */\n readonly textColor?: string | null;\n readonly isLoading?: boolean;\n /** Count badge on the top-trailing corner; wins over the dot. */\n readonly badgeText?: string | null;\n readonly showBadgeDot?: boolean;\n /** Default `var(--g9-error)`. */\n readonly badgeColor?: string | null;\n /** Default true. */\n readonly mirrorBadgeTextInRtl?: boolean;\n /** Accessibility name (MAUI `AccessibilityText`); `accessibilityLabel` is an alias. */\n readonly accessibilityText?: string | null;\n readonly onPress?: () => void;\n readonly blocked?: boolean;\n}\n\n/**\n * Square icon button (MAUI `G9IconButton`): one icon, variant/ghost fill, optional circle, corner badge that is never\n * dimmed (opacity applies to the frame only), loading spinner, minimum touch target. Press: one handler on the root,\n * scale 0.82 (80 ms) → 1 (150 ms). Accessibility hint: \"Loading\" while loading, else the badge text.\n */\nexport function G9IconButton(props: G9IconButtonProps): ReactNode {\n const control = useG9Control(props, 'g9-icon-button');\n const theme = useG9Theme();\n const strings = useG9Strings();\n const loading = props.isLoading === true;\n const enabled = !control.disabled && props.blocked !== true;\n const size = props.buttonSize && props.buttonSize > 0 ? props.buttonSize : 40;\n const iconSize = props.iconSize && props.iconSize > 0 ? props.iconSize : G9Metrics.InputIconSize;\n const ghost = props.isGhost === true;\n const paint = resolveButtonPaint({\n variant: props.variant ?? 'surface',\n palette: theme.palette,\n enabled,\n loading,\n baseBackgroundColor: ghost ? 'rgba(0,0,0,0)' : props.baseBackgroundColor,\n textColor: props.textColor ?? (ghost ? theme.palette.TextSecondary : null),\n kind: 'icon',\n });\n const press = useG9Press(props.onPress, { blocked: !enabled || loading, source: 'G9IconButton' });\n const visual = usePressVisual(\n { property: 'scale', rest: 1, pressed: 0.82, inMs: 80, outMs: 150 },\n !enabled || loading,\n );\n const touch = Math.max(props.minimumTouchTarget ?? 0, size);\n const name = props.accessibilityText ?? props.accessibilityLabel;\n const hint = loading ? strings.get(G9StringKey.Loading) : (props.badgeText ?? undefined);\n return (\n <view\n className={control.className}\n style={{ minWidth: `${touch}px`, minHeight: `${touch}px` }}\n accessibility-element={true}\n accessibility-traits=\"button\"\n {...(name ? { 'accessibility-label': name } : {})}\n {...(hint ? { 'accessibility-value': hint } : {})}\n bindtap={press}\n {...visual}\n >\n <view className=\"g9-icon-button__host\">\n <view\n className=\"g9-icon-button__frame\"\n style={{\n width: `${size}px`,\n height: `${size}px`,\n background: paint.background,\n borderColor: paint.stroke,\n borderWidth: `${paint.strokeWidth}px`,\n borderRadius: `${props.isCircular ? size / 2 : G9Metrics.RadiusMd}px`,\n opacity: paint.opacity,\n }}\n >\n {loading ? (\n <G9ActivityIndicator running size={iconSize} color={paint.text} />\n ) : (\n <G9IconSlot\n emoji={props.emoji}\n icon={props.icon}\n imagePath={props.imagePath}\n image={props.image}\n size={iconSize}\n color={paint.text}\n />\n )}\n </view>\n <G9CornerBadge\n text={props.badgeText}\n dot={props.showBadgeDot === true}\n color={props.badgeColor}\n textColor=\"#FFFFFF\"\n ringColor={ghost ? 'var(--g9-background)' : 'var(--g9-surface)'}\n mirrorTextInRtl={props.mirrorBadgeTextInRtl !== false}\n />\n </view>\n </view>\n );\n}\n"],"names":["G9IconButton","props","_props_variant","_props_textColor","_props_minimumTouchTarget","_props_accessibilityText","_props_badgeText","control","useG9Control","theme","useG9Theme","strings","useG9Strings","loading","enabled","size","iconSize","G9Metrics","ghost","paint","resolveButtonPaint","press","useG9Press","visual","usePressVisual","touch","Math","name","hint","G9StringKey","undefined","view","G9ActivityIndicator","G9IconSlot","G9CornerBadge"],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export { G9Button, type G9ButtonProps } from './button.js';
|
|
2
|
+
export { G9HeaderActionButton, type G9HeaderActionButtonProps, g9ToolbarButtonSize, g9ToolbarIconSize, } from './header-action-button.js';
|
|
3
|
+
export { G9IconButton, type G9IconButtonProps } from './icon-button.js';
|
|
4
|
+
export { G9NavCard, type G9NavCardProps } from './nav-card.js';
|
|
5
|
+
export { G9SafeButton, type G9SafeButtonHandle, type G9SafeButtonProps, G9SafeButtonType, type G9SafeExecuteHandler, type G9SafeExecutionProps, G9SafeIconButton, type G9SafeIconButtonProps, useSafeExecution, } from './safe.js';
|
|
6
|
+
export { type G9SafeTapOptions, useSafeTap } from './safe-tap.js';
|
|
7
|
+
export { G9VerticalIconTextButton, type G9VerticalIconTextButtonProps } from './vertical-icon-text-button.js';
|
|
8
|
+
export { buttonSizePreset, fontAttributesStyle, type G9ButtonPaint, type G9ButtonPaintInput, type G9ButtonSizePreset, type G9FontAttributes, resolveButtonPaint, } from './visuals.js';
|
|
9
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/button/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,KAAK,aAAa,EAAE,MAAM,UAAU,CAAC;AACxD,OAAO,EACL,oBAAoB,EACpB,KAAK,yBAAyB,EAC9B,mBAAmB,EACnB,iBAAiB,GAClB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,YAAY,EAAE,KAAK,iBAAiB,EAAE,MAAM,eAAe,CAAC;AACrE,OAAO,EAAE,SAAS,EAAE,KAAK,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5D,OAAO,EACL,YAAY,EACZ,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EACtB,gBAAgB,EAChB,KAAK,oBAAoB,EACzB,KAAK,oBAAoB,EACzB,gBAAgB,EAChB,KAAK,qBAAqB,EAC1B,gBAAgB,GACjB,MAAM,QAAQ,CAAC;AAChB,OAAO,EAAE,KAAK,gBAAgB,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAC/D,OAAO,EAAE,wBAAwB,EAAE,KAAK,6BAA6B,EAAE,MAAM,6BAA6B,CAAC;AAC3G,OAAO,EACL,gBAAgB,EAChB,mBAAmB,EACnB,KAAK,aAAa,EAClB,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,EACvB,KAAK,gBAAgB,EACrB,kBAAkB,GACnB,MAAM,WAAW,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export { G9Button } from "./button.jsx";
|
|
2
|
+
export { G9HeaderActionButton, g9ToolbarButtonSize, g9ToolbarIconSize } from "./header-action-button.jsx";
|
|
3
|
+
export { G9IconButton } from "./icon-button.jsx";
|
|
4
|
+
export { G9NavCard } from "./nav-card.jsx";
|
|
5
|
+
export { G9SafeButton, G9SafeButtonType, G9SafeIconButton, useSafeExecution } from "./safe.jsx";
|
|
6
|
+
export { useSafeTap } from "./safe-tap.jsx";
|
|
7
|
+
export { G9VerticalIconTextButton } from "./vertical-icon-text-button.jsx";
|
|
8
|
+
export { buttonSizePreset, fontAttributesStyle, resolveButtonPaint } from "./visuals.jsx";
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import './button.css';
|
|
2
|
+
import { type G9ImageSource } from '@g9tm/lynxcontrols-foundation';
|
|
3
|
+
import type { ReactNode } from '@lynx-js/react';
|
|
4
|
+
import { type G9ControlBaseProps } from '../base/control.js';
|
|
5
|
+
import type { G9IconInput } from '../icon/icon.js';
|
|
6
|
+
/** Props of {@link G9NavCard} (MAUI `G9NavCard`). */
|
|
7
|
+
export interface G9NavCardProps extends G9ControlBaseProps {
|
|
8
|
+
readonly title?: string | null;
|
|
9
|
+
readonly subtitle?: string | null;
|
|
10
|
+
/** Icon and icon-tile tint. Default the primary colour. Must be a colour literal (it is mixed). */
|
|
11
|
+
readonly accentColor?: string | null;
|
|
12
|
+
readonly iconEmoji?: string | null;
|
|
13
|
+
readonly icon?: G9IconInput;
|
|
14
|
+
readonly iconPath?: string | null;
|
|
15
|
+
readonly iconImage?: G9ImageSource | null;
|
|
16
|
+
/** Trailing chevron (forward in LTR, back in RTL). Default true. */
|
|
17
|
+
readonly showChevron?: boolean;
|
|
18
|
+
readonly valueText?: string | null;
|
|
19
|
+
/** Value colour; default error when destructive, else tertiary text. */
|
|
20
|
+
readonly valueColor?: string | null;
|
|
21
|
+
/** Coming-soon badge instead of value and chevron; presses do nothing. Default false. */
|
|
22
|
+
readonly isComingSoon?: boolean;
|
|
23
|
+
/** Badge text; default the localized `comingSoon`. */
|
|
24
|
+
readonly comingSoonText?: string | null;
|
|
25
|
+
readonly iconBadgeText?: string | null;
|
|
26
|
+
readonly showIconBadgeDot?: boolean;
|
|
27
|
+
readonly iconBadgeColor?: string | null;
|
|
28
|
+
/** Default true. */
|
|
29
|
+
readonly mirrorBadgeTextInRtl?: boolean;
|
|
30
|
+
/** Replaces the whole trailing area (value, chevron, coming-soon badge). */
|
|
31
|
+
readonly trailing?: ReactNode;
|
|
32
|
+
/**
|
|
33
|
+
* A small node on the title's line, right after the title (a count pill, an unread dot, a "6/10"; MAUI 1.4.0
|
|
34
|
+
* `TitleAccessoryView`). It does not take over the trailing area, so the chevron, value and coming-soon badge keep
|
|
35
|
+
* working beside it. A long title truncates; the accessory never does. Unset keeps the title layout as it was.
|
|
36
|
+
*/
|
|
37
|
+
readonly titleAccessory?: ReactNode;
|
|
38
|
+
/** Title (and default value colour) in the error colour. Default false. */
|
|
39
|
+
readonly isDestructive?: boolean;
|
|
40
|
+
/** Tint the card background with the accent (88 % surface). Default false. */
|
|
41
|
+
readonly useAccentSurface?: boolean;
|
|
42
|
+
/** Accent used only for the background tint. */
|
|
43
|
+
readonly cardAccentColor?: string | null;
|
|
44
|
+
/**
|
|
45
|
+
* Paint the icon tile solid in the accent with an `OnPrimary` icon instead of the pastel tile with an accent icon
|
|
46
|
+
* (MAUI 1.4.0 `UseFilledIconChip`): the one primary row of a list. Pair with `useAccentSurface`. Default false.
|
|
47
|
+
*/
|
|
48
|
+
readonly useFilledIconChip?: boolean;
|
|
49
|
+
/** The press (MAUI `Tapped` + `Command`); not while disabled or coming soon. */
|
|
50
|
+
readonly onPress?: () => void;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Navigation row card (MAUI `G9NavCard`): icon tile (pastel, or filled with `useFilledIconChip`) with optional corner
|
|
54
|
+
* badge, title (with an optional `titleAccessory` after it)/subtitle, value text, chevron or coming-soon badge, or a
|
|
55
|
+
* custom trailing node. Press: scale 0.985 (70 ms) → 1 (120 ms); hover on desktop.
|
|
56
|
+
*/
|
|
57
|
+
export declare function G9NavCard(props: G9NavCardProps): ReactNode;
|
|
58
|
+
//# sourceMappingURL=nav-card.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nav-card.d.ts","sourceRoot":"","sources":["../../src/button/nav-card.tsx"],"names":[],"mappings":"AAAA,OAAO,cAAc,CAAC;AACtB,OAAO,EAAe,KAAK,aAAa,EAAoB,MAAM,+BAA+B,CAAC;AAClG,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAE,KAAK,kBAAkB,EAAyC,MAAM,iBAAiB,CAAC;AAGjG,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAIhD,qDAAqD;AACrD,MAAM,WAAW,cAAe,SAAQ,kBAAkB;IACxD,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,mGAAmG;IACnG,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,QAAQ,CAAC,IAAI,CAAC,EAAE,WAAW,CAAC;IAC5B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,QAAQ,CAAC,SAAS,CAAC,EAAE,aAAa,GAAG,IAAI,CAAC;IAC1C,oEAAoE;IACpE,QAAQ,CAAC,WAAW,CAAC,EAAE,OAAO,CAAC;IAC/B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,wEAAwE;IACxE,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,yFAAyF;IACzF,QAAQ,CAAC,YAAY,CAAC,EAAE,OAAO,CAAC;IAChC,sDAAsD;IACtD,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxC,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,OAAO,CAAC;IACpC,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxC,oBAAoB;IACpB,QAAQ,CAAC,oBAAoB,CAAC,EAAE,OAAO,CAAC;IACxC,4EAA4E;IAC5E,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,CAAC;IAC9B;;;;OAIG;IACH,QAAQ,CAAC,cAAc,CAAC,EAAE,SAAS,CAAC;IACpC,2EAA2E;IAC3E,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,CAAC;IACjC,8EAA8E;IAC9E,QAAQ,CAAC,gBAAgB,CAAC,EAAE,OAAO,CAAC;IACpC,gDAAgD;IAChD,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzC;;;OAGG;IACH,QAAQ,CAAC,iBAAiB,CAAC,EAAE,OAAO,CAAC;IACrC,gFAAgF;IAChF,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CAC/B;AAED;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,cAAc,GAAG,SAAS,CA8G1D"}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import "./button.css";
|
|
2
|
+
import { G9StringKey, formatColor, mix } from "@g9tm/lynxcontrols-foundation";
|
|
3
|
+
import { g9RowStyle, g9TextStart, useG9Control } from "../base/control.jsx";
|
|
4
|
+
import { G9CornerBadge } from "../base/corner-badge.jsx";
|
|
5
|
+
import { useG9Press, usePressVisual } from "../base/press.jsx";
|
|
6
|
+
import { G9IconSlot, hasIconSlot } from "../icon/slot.jsx";
|
|
7
|
+
import { useG9Settings, useG9Strings, useG9Theme } from "../provider/hooks.jsx";
|
|
8
|
+
function G9NavCard(props) {
|
|
9
|
+
var _props_accentColor, _ref, _props_cardAccentColor, _props_accessibilityLabel, _props_accessibilityLabel1, _props_valueColor;
|
|
10
|
+
const control = useG9Control(props, 'g9-nav-card');
|
|
11
|
+
const palette = useG9Theme().palette;
|
|
12
|
+
const glyphs = useG9Settings().glyphs;
|
|
13
|
+
const strings = useG9Strings();
|
|
14
|
+
const soon = true === props.isComingSoon;
|
|
15
|
+
const destructive = true === props.isDestructive;
|
|
16
|
+
const accent = null != (_props_accentColor = props.accentColor) ? _props_accentColor : palette.Primary;
|
|
17
|
+
const surface = props.useAccentSurface ? formatColor(mix(null != (_ref = null != (_props_cardAccentColor = props.cardAccentColor) ? _props_cardAccentColor : props.accentColor) ? _ref : palette.Primary, palette.Surface, 0.88)) : palette.Surface;
|
|
18
|
+
const press = useG9Press(props.onPress, {
|
|
19
|
+
blocked: control.disabled || soon,
|
|
20
|
+
source: 'G9NavCard'
|
|
21
|
+
});
|
|
22
|
+
const visual = usePressVisual({
|
|
23
|
+
property: 'scale',
|
|
24
|
+
rest: 1,
|
|
25
|
+
pressed: 0.985,
|
|
26
|
+
inMs: 70,
|
|
27
|
+
outMs: 120
|
|
28
|
+
}, control.disabled || soon);
|
|
29
|
+
const icon = {
|
|
30
|
+
emoji: props.iconEmoji,
|
|
31
|
+
icon: props.icon,
|
|
32
|
+
imagePath: props.iconPath,
|
|
33
|
+
image: props.iconImage
|
|
34
|
+
};
|
|
35
|
+
const subtitle = props.subtitle && '' !== props.subtitle.trim() ? props.subtitle : null;
|
|
36
|
+
const value = props.valueText && '' !== props.valueText.trim() ? props.valueText : null;
|
|
37
|
+
const soonText = props.comingSoonText && '' !== props.comingSoonText.trim() ? props.comingSoonText : strings.get(G9StringKey.ComingSoon);
|
|
38
|
+
const label = [
|
|
39
|
+
props.title,
|
|
40
|
+
subtitle
|
|
41
|
+
].filter(Boolean).join(', ');
|
|
42
|
+
const filledChip = true === props.useFilledIconChip;
|
|
43
|
+
const title = props.title ? <text className="g9-nav-card__title" text-maxline="1" style={{
|
|
44
|
+
color: destructive ? palette.Error : palette.TextPrimary,
|
|
45
|
+
...g9TextStart(control.direction)
|
|
46
|
+
}}>
|
|
47
|
+
{props.title}
|
|
48
|
+
</text> : null;
|
|
49
|
+
return <view className={control.className} style={{
|
|
50
|
+
backgroundColor: surface,
|
|
51
|
+
...g9RowStyle(control.direction)
|
|
52
|
+
}} {...void 0 === props.trailing ? {
|
|
53
|
+
'accessibility-element': true,
|
|
54
|
+
'accessibility-traits': 'button',
|
|
55
|
+
...(null != (_props_accessibilityLabel = props.accessibilityLabel) ? _props_accessibilityLabel : label) ? {
|
|
56
|
+
'accessibility-label': null != (_props_accessibilityLabel1 = props.accessibilityLabel) ? _props_accessibilityLabel1 : label
|
|
57
|
+
} : {},
|
|
58
|
+
...soon ? {
|
|
59
|
+
'accessibility-value': soonText
|
|
60
|
+
} : value ? {
|
|
61
|
+
'accessibility-value': value
|
|
62
|
+
} : {}
|
|
63
|
+
} : {}} bindtap={press} {...visual}>
|
|
64
|
+
{hasIconSlot(icon) ? <view className="g9-nav-card__tile" style={{
|
|
65
|
+
backgroundColor: filledChip ? accent : formatColor(mix(accent, palette.Surface, 0.82))
|
|
66
|
+
}}>
|
|
67
|
+
<G9IconSlot {...icon} size={props.iconEmoji ? 22 : 18} color={filledChip ? palette.OnPrimary : accent}/>
|
|
68
|
+
<G9CornerBadge text={props.iconBadgeText} dot={true === props.showIconBadgeDot} color={props.iconBadgeColor} mirrorTextInRtl={false !== props.mirrorBadgeTextInRtl}/>
|
|
69
|
+
</view> : null}
|
|
70
|
+
<view className="g9-nav-card__text">
|
|
71
|
+
{void 0 === props.titleAccessory || null === props.titleAccessory ? title : <view className="g9-nav-card__title-row" style={g9RowStyle(control.direction)}>
|
|
72
|
+
{title}
|
|
73
|
+
<view className="g9-nav-card__title-accessory">{props.titleAccessory}</view>
|
|
74
|
+
</view>}
|
|
75
|
+
{subtitle ? <text className="g9-nav-card__subtitle" text-maxline="1" style={g9TextStart(control.direction)}>
|
|
76
|
+
{subtitle}
|
|
77
|
+
</text> : null}
|
|
78
|
+
</view>
|
|
79
|
+
{void 0 !== props.trailing ? <view className="g9-nav-card__trailing" style={g9RowStyle(control.direction)}>
|
|
80
|
+
{props.trailing}
|
|
81
|
+
</view> : <view className="g9-nav-card__trailing" style={g9RowStyle(control.direction)}>
|
|
82
|
+
{value && !soon ? <text className="g9-nav-card__value" text-maxline="1" style={{
|
|
83
|
+
color: null != (_props_valueColor = props.valueColor) ? _props_valueColor : destructive ? palette.Error : palette.TextTertiary
|
|
84
|
+
}}>
|
|
85
|
+
{value}
|
|
86
|
+
</text> : null}
|
|
87
|
+
{soon ? <view className="g9-nav-card__soon">
|
|
88
|
+
<text className="g9-nav-card__soon-text">{soonText}</text>
|
|
89
|
+
</view> : false !== props.showChevron ? <G9IconSlot icon={'rtl' === control.direction ? glyphs.chevronBack : glyphs.chevronForward} size={24} color={palette.TextTertiary}/> : null}
|
|
90
|
+
</view>}
|
|
91
|
+
</view>;
|
|
92
|
+
}
|
|
93
|
+
export { G9NavCard };
|
|
94
|
+
|
|
95
|
+
//# sourceMappingURL=nav-card.jsx.map
|