@g9tm/lynxcontrols 1.4.7 → 1.4.11

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.
Files changed (121) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/base/index.d.ts +1 -1
  3. package/dist/base/index.d.ts.map +1 -1
  4. package/dist/base/index.jsx +1 -1
  5. package/dist/base/selection-item.d.ts +9 -1
  6. package/dist/base/selection-item.d.ts.map +1 -1
  7. package/dist/base/selection-item.jsx +10 -1
  8. package/dist/base/selection-item.jsx.map +1 -1
  9. package/dist/button/button.css +20 -0
  10. package/dist/button/button.css.map +1 -1
  11. package/dist/button/header-action-button.d.ts +5 -0
  12. package/dist/button/header-action-button.d.ts.map +1 -1
  13. package/dist/button/header-action-button.jsx +6 -1
  14. package/dist/button/header-action-button.jsx.map +1 -1
  15. package/dist/button/visuals.d.ts.map +1 -1
  16. package/dist/button/visuals.jsx +1 -1
  17. package/dist/button/visuals.jsx.map +1 -1
  18. package/dist/fields/editor.d.ts.map +1 -1
  19. package/dist/fields/editor.jsx +2 -2
  20. package/dist/fields/editor.jsx.map +1 -1
  21. package/dist/fields/fields.css +21 -0
  22. package/dist/fields/fields.css.map +1 -1
  23. package/dist/fields/index.d.ts +1 -1
  24. package/dist/fields/index.d.ts.map +1 -1
  25. package/dist/fields/index.jsx +1 -1
  26. package/dist/fields/outlined-field.d.ts +27 -1
  27. package/dist/fields/outlined-field.d.ts.map +1 -1
  28. package/dist/fields/outlined-field.jsx +29 -2
  29. package/dist/fields/outlined-field.jsx.map +1 -1
  30. package/dist/fields/text-entry.d.ts.map +1 -1
  31. package/dist/fields/text-entry.jsx +2 -2
  32. package/dist/fields/text-entry.jsx.map +1 -1
  33. package/dist/pickers/combo-box.d.ts +8 -0
  34. package/dist/pickers/combo-box.d.ts.map +1 -1
  35. package/dist/pickers/combo-box.jsx +51 -9
  36. package/dist/pickers/combo-box.jsx.map +1 -1
  37. package/dist/pickers/date-time-picker.d.ts +2 -2
  38. package/dist/pickers/date-time-picker.d.ts.map +1 -1
  39. package/dist/pickers/date-time-picker.jsx +4 -3
  40. package/dist/pickers/date-time-picker.jsx.map +1 -1
  41. package/dist/pickers/date-time.d.ts +5 -2
  42. package/dist/pickers/date-time.d.ts.map +1 -1
  43. package/dist/pickers/date-time.jsx +1 -1
  44. package/dist/pickers/date-time.jsx.map +1 -1
  45. package/dist/pickers/picker-sheet.d.ts +6 -2
  46. package/dist/pickers/picker-sheet.d.ts.map +1 -1
  47. package/dist/pickers/picker-sheet.jsx +2 -3
  48. package/dist/pickers/picker-sheet.jsx.map +1 -1
  49. package/dist/pickers/picker.d.ts.map +1 -1
  50. package/dist/pickers/picker.jsx +3 -2
  51. package/dist/pickers/picker.jsx.map +1 -1
  52. package/dist/pickers/pickers.css +27 -0
  53. package/dist/pickers/pickers.css.map +1 -1
  54. package/dist/pickers/timespan-picker.d.ts.map +1 -1
  55. package/dist/pickers/timespan-picker.jsx +3 -2
  56. package/dist/pickers/timespan-picker.jsx.map +1 -1
  57. package/dist/pickers/trigger.d.ts +3 -1
  58. package/dist/pickers/trigger.d.ts.map +1 -1
  59. package/dist/pickers/trigger.jsx +6 -1
  60. package/dist/pickers/trigger.jsx.map +1 -1
  61. package/dist/provider/settings.d.ts +12 -0
  62. package/dist/provider/settings.d.ts.map +1 -1
  63. package/dist/provider/settings.jsx +6 -3
  64. package/dist/provider/settings.jsx.map +1 -1
  65. package/dist/provider/theme.css +4 -0
  66. package/dist/provider/theme.css.map +1 -1
  67. package/dist/range-slider/math.d.ts +14 -4
  68. package/dist/range-slider/math.d.ts.map +1 -1
  69. package/dist/range-slider/math.jsx +16 -4
  70. package/dist/range-slider/math.jsx.map +1 -1
  71. package/dist/range-slider/range-slider.css +17 -0
  72. package/dist/range-slider/range-slider.css.map +1 -1
  73. package/dist/range-slider/range-slider.d.ts +11 -0
  74. package/dist/range-slider/range-slider.d.ts.map +1 -1
  75. package/dist/range-slider/range-slider.jsx +35 -13
  76. package/dist/range-slider/range-slider.jsx.map +1 -1
  77. package/dist/selection/index.d.ts +2 -1
  78. package/dist/selection/index.d.ts.map +1 -1
  79. package/dist/selection/index.jsx +2 -1
  80. package/dist/selection/selection-sheet.d.ts +3 -1
  81. package/dist/selection/selection-sheet.d.ts.map +1 -1
  82. package/dist/selection/selection-sheet.jsx +57 -8
  83. package/dist/selection/selection-sheet.jsx.map +1 -1
  84. package/dist/selection/selection.css +7 -0
  85. package/dist/selection/selection.css.map +1 -1
  86. package/dist/selection/window.d.ts +29 -0
  87. package/dist/selection/window.d.ts.map +1 -0
  88. package/dist/selection/window.jsx +24 -0
  89. package/dist/selection/window.jsx.map +1 -0
  90. package/dist/sheet/frame.d.ts.map +1 -1
  91. package/dist/sheet/frame.jsx +8 -4
  92. package/dist/sheet/frame.jsx.map +1 -1
  93. package/dist/sheet/header.d.ts.map +1 -1
  94. package/dist/sheet/header.jsx +3 -1
  95. package/dist/sheet/header.jsx.map +1 -1
  96. package/dist/sheet/index.d.ts +1 -1
  97. package/dist/sheet/index.d.ts.map +1 -1
  98. package/dist/sheet/index.jsx +1 -1
  99. package/dist/sheet/options.d.ts +20 -0
  100. package/dist/sheet/options.d.ts.map +1 -1
  101. package/dist/sheet/options.jsx +2 -1
  102. package/dist/sheet/options.jsx.map +1 -1
  103. package/dist/sheet/service.d.ts +8 -0
  104. package/dist/sheet/service.d.ts.map +1 -1
  105. package/dist/sheet/service.jsx +15 -4
  106. package/dist/sheet/service.jsx.map +1 -1
  107. package/dist/sheet/sizing.d.ts +2 -0
  108. package/dist/sheet/sizing.d.ts.map +1 -1
  109. package/dist/sheet/sizing.jsx +2 -1
  110. package/dist/sheet/sizing.jsx.map +1 -1
  111. package/dist/toggle/chip-group.d.ts +9 -1
  112. package/dist/toggle/chip-group.d.ts.map +1 -1
  113. package/dist/toggle/chip-group.jsx +51 -12
  114. package/dist/toggle/chip-group.jsx.map +1 -1
  115. package/dist/toggle/switch.d.ts +1 -1
  116. package/dist/toggle/switch.d.ts.map +1 -1
  117. package/dist/toggle/switch.jsx +3 -2
  118. package/dist/toggle/switch.jsx.map +1 -1
  119. package/dist/toggle/toggle.css +20 -0
  120. package/dist/toggle/toggle.css.map +1 -1
  121. package/package.json +2 -2
@@ -1 +1 @@
1
- {"version":3,"file":"pickers/trigger.jsx","sources":["../../src/pickers/trigger.tsx"],"sourcesContent":["import './pickers.css';\nimport type { G9TextInputDirection } from '@g9tm/lynxcontrols-foundation';\nimport { type ReactNode, useEffect, useRef } from '@lynx-js/react';\nimport { g9RowStyle } from '../base/control';\nimport type { G9SelectionItem } from '../base/selection-item';\nimport { G9OutlinedField, type G9OutlinedFieldProps, type G9TrailingAffordance } from '../fields/outlined-field';\nimport { G9IconSlot, hasIconSlot } from '../icon/slot';\nimport { G9Swatch } from '../icon/swatch';\nimport { useG9Diagnostics, useG9Direction } from '../provider/hooks';\n\n/**\n * Opens a picker sheet at most once at a time and drops results that arrive after the field unmounted (MAUI\n * `_isOpening` + `Unloaded`). `open(run)` runs `run(isCurrent)`; `isCurrent()` is false once a newer open started or\n * the field is gone, so a stale result applies nothing. Errors go to the provider's diagnostics.\n */\nexport function usePickerOpen(): (run: (isCurrent: () => boolean) => Promise<void>) => void {\n const opening = useRef(false);\n const generation = useRef(0);\n const diagnostics = useG9Diagnostics();\n useEffect(\n () => () => {\n generation.current += 1;\n },\n [],\n );\n return (run) => {\n if (opening.current) return;\n opening.current = true;\n const mine = ++generation.current;\n void (async () => {\n try {\n await run(() => generation.current === mine);\n } catch (error) {\n diagnostics.log({ level: 'error', message: 'Picker failed.', source: 'G9Picker', error });\n } finally {\n opening.current = false;\n }\n })();\n };\n}\n\n/** The reading direction of a value written with a `G9TextInputDirection` (internal). */\nexport function valueDirection(direction: G9TextInputDirection | undefined, culture: 'ltr' | 'rtl'): 'ltr' | 'rtl' {\n return direction === 'leftToRight' ? 'ltr' : direction === 'rightToLeft' ? 'rtl' : culture;\n}\n\n/** The physical direction class of a value written with a `G9TextInputDirection`. */\nexport function valueDirectionClass(direction: G9TextInputDirection | undefined, culture: 'ltr' | 'rtl'): string {\n return `g9-dir-${valueDirection(direction, culture)}`;\n}\n\n/** The leading icon (or colour swatch) of a selected item inside the trigger (MAUI `CreateValueIcon`, 18 px). */\nexport function SelectionValueIcon(props: { readonly item: G9SelectionItem; readonly color?: string }): ReactNode {\n const { item } = props;\n const icon = {\n emoji: item.emoji ?? null,\n icon: item.icon,\n imagePath: item.iconPath ?? null,\n image: item.iconImage ?? null,\n };\n if (hasIconSlot(icon)) {\n // MAUI keeps 8 px between the value icon and its text (6 px inside a combo chip): pickers.css.\n return (\n <view className=\"g9-picker__icon\">\n <G9IconSlot {...icon} size={18} color={item.iconTintColor ?? props.color ?? 'var(--g9-on-surface-variant)'} />\n </view>\n );\n }\n if (item.swatchFirstColor?.trim() || item.swatchSecondColor?.trim()) {\n return <G9Swatch first={item.swatchFirstColor} second={item.swatchSecondColor} className=\"g9-picker__swatch\" />;\n }\n return null;\n}\n\n/** Props shared by every picker trigger: the outlined field props (label, helper, error, icons, read-only, …). */\nexport type G9PickerFieldProps = G9OutlinedFieldProps;\n\n/**\n * The tap-to-open outlined box every picker uses (MAUI `G9OutlinedFieldBase` with a tap recognizer): no keyboard,\n * the label floats while there is a value, a tap on the box opens the sheet unless disabled or read-only.\n */\nexport function PickerField(props: {\n readonly field: G9PickerFieldProps;\n readonly hasValue: boolean;\n readonly onOpen: () => void;\n readonly trailingAffordance?: G9TrailingAffordance | null;\n readonly children?: ReactNode;\n}): ReactNode {\n const direction = useG9Direction();\n const { field } = props;\n const blocked = field.disabled === true || field.readOnly === true;\n return (\n <G9OutlinedField\n {...field}\n className={`g9-picker${field.className ? ` ${field.className}` : ''}`}\n focused={false}\n hasValue={props.hasValue}\n {...(props.trailingAffordance !== undefined ? { trailingAffordance: props.trailingAffordance } : {})}\n onFocusRequest={() => {\n if (!blocked) props.onOpen();\n }}\n accessibilityLabel={field.label ?? field.placeholder ?? ''}\n >\n <view className={`g9-picker__value g9-dir-${direction}`} style={g9RowStyle(direction)}>\n {props.children}\n </view>\n </G9OutlinedField>\n );\n}\n"],"names":["usePickerOpen","opening","useRef","generation","diagnostics","useG9Diagnostics","useEffect","run","mine","error","valueDirection","direction","culture","valueDirectionClass","SelectionValueIcon","props","_item_emoji","_item_iconPath","_item_iconImage","_item_swatchFirstColor","_item_swatchSecondColor","item","icon","hasIconSlot","_ref","view","G9IconSlot","G9Swatch","PickerField","useG9Direction","field","blocked","G9OutlinedField","undefined","g9RowStyle"],"mappings":"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"}
1
+ {"version":3,"file":"pickers/trigger.jsx","sources":["../../src/pickers/trigger.tsx"],"sourcesContent":["import './pickers.css';\nimport type { G9TextInputDirection } from '@g9tm/lynxcontrols-foundation';\nimport { type ReactNode, useEffect, useRef } from '@lynx-js/react';\nimport { g9RowStyle } from '../base/control';\nimport { type G9SelectionItem, isAvatarImage } from '../base/selection-item';\nimport { G9OutlinedField, type G9OutlinedFieldProps, type G9TrailingAffordance } from '../fields/outlined-field';\nimport { G9IconSlot, hasIconSlot } from '../icon/slot';\nimport { G9Swatch } from '../icon/swatch';\nimport { useG9Diagnostics, useG9Direction } from '../provider/hooks';\n\n/**\n * Opens a picker sheet at most once at a time and drops results that arrive after the field unmounted (MAUI\n * `_isOpening` + `Unloaded`). `open(run)` runs `run(isCurrent)`; `isCurrent()` is false once a newer open started or\n * the field is gone, so a stale result applies nothing. Errors go to the provider's diagnostics.\n */\nexport function usePickerOpen(): (run: (isCurrent: () => boolean) => Promise<void>) => void {\n const opening = useRef(false);\n const generation = useRef(0);\n const diagnostics = useG9Diagnostics();\n useEffect(\n () => () => {\n generation.current += 1;\n },\n [],\n );\n return (run) => {\n if (opening.current) return;\n opening.current = true;\n const mine = ++generation.current;\n void (async () => {\n try {\n await run(() => generation.current === mine);\n } catch (error) {\n diagnostics.log({ level: 'error', message: 'Picker failed.', source: 'G9Picker', error });\n } finally {\n opening.current = false;\n }\n })();\n };\n}\n\n/** The reading direction of a value written with a `G9TextInputDirection` (internal). */\nexport function valueDirection(direction: G9TextInputDirection | undefined, culture: 'ltr' | 'rtl'): 'ltr' | 'rtl' {\n return direction === 'leftToRight' ? 'ltr' : direction === 'rightToLeft' ? 'rtl' : culture;\n}\n\n/** The physical direction class of a value written with a `G9TextInputDirection`. */\nexport function valueDirectionClass(direction: G9TextInputDirection | undefined, culture: 'ltr' | 'rtl'): string {\n return `g9-dir-${valueDirection(direction, culture)}`;\n}\n\n/** The leading icon (or colour swatch) of a selected item inside the trigger (MAUI `CreateValueIcon`, 18 px). */\nexport function SelectionValueIcon(props: {\n readonly item: G9SelectionItem;\n readonly color?: string;\n /** In a multi-select chip: a person's picture is left out — the chip is the name alone (MAUI 1.4.10 IsAvatar). */\n readonly inChip?: boolean;\n}): ReactNode {\n const { item } = props;\n const avatar = isAvatarImage(item);\n if (avatar && props.inChip) return null;\n const icon = {\n emoji: item.emoji ?? null,\n icon: item.icon,\n imagePath: item.iconPath ?? null,\n image: item.iconImage ?? null,\n };\n if (hasIconSlot(icon)) {\n // MAUI keeps 8 px between the value icon and its text (6 px inside a combo chip): pickers.css. A single value that is\n // a person's picture is round (corner 9 of 18).\n return (\n <view className=\"g9-picker__icon\">\n <G9IconSlot\n {...icon}\n size={18}\n color={item.iconTintColor ?? props.color ?? 'var(--g9-on-surface-variant)'}\n {...(avatar ? { imageCornerRadius: 9 } : {})}\n />\n </view>\n );\n }\n if (item.swatchFirstColor?.trim() || item.swatchSecondColor?.trim()) {\n return <G9Swatch first={item.swatchFirstColor} second={item.swatchSecondColor} className=\"g9-picker__swatch\" />;\n }\n return null;\n}\n\n/** Props shared by every picker trigger: the outlined field props (label, helper, error, icons, read-only, …). */\nexport type G9PickerFieldProps = G9OutlinedFieldProps;\n\n/**\n * The tap-to-open outlined box every picker uses (MAUI `G9OutlinedFieldBase` with a tap recognizer): no keyboard,\n * the label floats while there is a value, a tap on the box opens the sheet unless disabled or read-only.\n */\nexport function PickerField(props: {\n readonly field: G9PickerFieldProps;\n readonly hasValue: boolean;\n readonly onOpen: () => void;\n readonly trailingAffordance?: G9TrailingAffordance | null;\n readonly children?: ReactNode;\n}): ReactNode {\n const direction = useG9Direction();\n const { field } = props;\n const blocked = field.disabled === true || field.readOnly === true;\n return (\n <G9OutlinedField\n {...field}\n className={`g9-picker${field.className ? ` ${field.className}` : ''}`}\n focused={false}\n hasValue={props.hasValue}\n {...(props.trailingAffordance !== undefined ? { trailingAffordance: props.trailingAffordance } : {})}\n onFocusRequest={() => {\n if (!blocked) props.onOpen();\n }}\n accessibilityLabel={field.label ?? field.placeholder ?? ''}\n >\n <view className={`g9-picker__value g9-dir-${direction}`} style={g9RowStyle(direction)}>\n {props.children}\n </view>\n </G9OutlinedField>\n );\n}\n"],"names":["usePickerOpen","opening","useRef","generation","diagnostics","useG9Diagnostics","useEffect","run","mine","error","valueDirection","direction","culture","valueDirectionClass","SelectionValueIcon","props","_item_emoji","_item_iconPath","_item_iconImage","_item_swatchFirstColor","_item_swatchSecondColor","item","avatar","isAvatarImage","icon","hasIconSlot","_ref","view","G9IconSlot","G9Swatch","PickerField","useG9Direction","field","blocked","G9OutlinedField","undefined","g9RowStyle"],"mappings":"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"}
@@ -64,6 +64,17 @@ export interface G9Settings {
64
64
  readonly sheets?: G9SheetSettings;
65
65
  /** Popup defaults (MAUI `G9PopupHelper.ConfigureG9PopupDefaults`), merged under per-call settings. */
66
66
  readonly popups?: G9PopupSettings;
67
+ /** Toggle defaults (MAUI 1.4.10 `G9Switch.MirrorInRtl`, a static set once at startup). */
68
+ readonly toggles?: G9ToggleSettings;
69
+ }
70
+ /** App-wide toggle settings. */
71
+ export interface G9ToggleSettings {
72
+ /**
73
+ * Whether a right-to-left language mirrors a switch's toggle (on = the thumb on the LEFT). Default `true` (MAUI
74
+ * `G9Switch.MirrorInRtl`). `false` keeps every switch physical in every language — off = left, on = right — as
75
+ * AgriPad's Figma draws all 31 of its toggles; the row (title, switch) still flows with the language.
76
+ */
77
+ readonly switchMirrorInRtl?: boolean;
67
78
  }
68
79
  /** App-wide outlined-field settings (MAUI `G9OutlinedFieldSettings`). */
69
80
  export interface G9FieldSettings {
@@ -86,6 +97,7 @@ export interface G9ResolvedSettings {
86
97
  readonly fields: Required<G9FieldSettings>;
87
98
  readonly sheets: Required<G9SheetSettings>;
88
99
  readonly popups: G9PopupSettings;
100
+ readonly toggles: Required<G9ToggleSettings>;
89
101
  }
90
102
  /** MAUI `G9PageBase.PageLoadingDismissDelayMs` default. */
91
103
  export declare const g9PageLoadingDismissDelayMs = 369;
@@ -1 +1 @@
1
- {"version":3,"file":"settings.d.ts","sourceRoot":"","sources":["../../src/provider/settings.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,mBAAmB,EAExB,KAAK,mBAAmB,EACxB,KAAK,oBAAoB,EACzB,KAAK,YAAY,EACjB,KAAK,kBAAkB,EACvB,KAAK,aAAa,EAClB,KAAK,qBAAqB,EAC1B,KAAK,gBAAgB,EAEtB,MAAM,+BAA+B,CAAC;AACvC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAA8B,KAAK,eAAe,EAAsB,MAAM,gBAAgB,CAAC;AACtG,OAAO,EAAE,KAAK,eAAe,EAAwB,MAAM,kBAAkB,CAAC;AAE9E,qGAAqG;AACrG,eAAO,MAAM,sBAAsB,YAAY,CAAC;AAEhD,iHAAiH;AACjH,MAAM,WAAW,qBAAqB;IACpC,2GAA2G;IAC3G,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAClC,sFAAsF;IACtF,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,yGAAyG;IACzG,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC,8FAA8F;IAC9F,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;CACnC;AAED;;;GAGG;AACH,MAAM,MAAM,eAAe,GAAG,CAAC,MAAM,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,KAAK,SAAS,CAAC;AAEjF;;;GAGG;AACH,eAAO,MAAM,uBAAuB,EAAE;IACpC,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,mBAAmB,KAAK,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC;CAC1D,CAAC;AAEtB,2EAA2E;AAC3E,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,mBAAmB,KAAK,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;IAChF,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAAC,MAAM,EAAE,mBAAmB,KAAK,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;IACxF,QAAQ,CAAC,oBAAoB,CAAC,EAAE,MAAM,OAAO,CAAC;IAC9C,QAAQ,CAAC,QAAQ,CAAC,EAAE,qBAAqB,CAAC;CAC3C;AAED;;;GAGG;AACH,MAAM,WAAW,UAAU;IACzB,iGAAiG;IACjG,QAAQ,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,gBAAgB,EAAE,SAAS,CAAC,CAAC;IACrD,4EAA4E;IAC5E,QAAQ,CAAC,MAAM,CAAC,EAAE,oBAAoB,CAAC;IACvC,qFAAqF;IACrF,QAAQ,CAAC,SAAS,CAAC,EAAE,kBAAkB,CAAC;IACxC,gHAAgH;IAChH,QAAQ,CAAC,aAAa,CAAC,EAAE,eAAe,CAAC;IACzC,8EAA8E;IAC9E,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,sDAAsD;IACtD,QAAQ,CAAC,WAAW,CAAC,EAAE,qBAAqB,CAAC;IAC7C,iFAAiF;IACjF,QAAQ,CAAC,QAAQ,CAAC,EAAE,kBAAkB,CAAC;IACvC;;;OAGG;IACH,QAAQ,CAAC,yBAAyB,CAAC,EAAE,MAAM,CAAC,MAAM,IAAI,CAAC,GAAG,IAAI,GAAG,SAAS,CAAC;IAC3E,6GAA6G;IAC7G,QAAQ,CAAC,MAAM,CAAC,EAAE,eAAe,CAAC;IAClC,2FAA2F;IAC3F,QAAQ,CAAC,MAAM,CAAC,EAAE,eAAe,CAAC;IAClC,sGAAsG;IACtG,QAAQ,CAAC,MAAM,CAAC,EAAE,eAAe,CAAC;CACnC;AAED,yEAAyE;AACzE,MAAM,WAAW,eAAe;IAC9B;;;OAGG;IACH,QAAQ,CAAC,oBAAoB,CAAC,EAAE,OAAO,CAAC;CACzC;AAED,uDAAuD;AACvD,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC,gBAAgB,EAAE,SAAS,CAAC,CAAC;IACpD,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;IAC9B,QAAQ,CAAC,SAAS,EAAE,kBAAkB,CAAC;IACvC,QAAQ,CAAC,aAAa,EAAE,eAAe,GAAG,SAAS,CAAC;IACpD,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,WAAW,EAAE,QAAQ,CAAC,qBAAqB,CAAC,CAAC;IACtD,QAAQ,CAAC,QAAQ,EAAE,kBAAkB,CAAC;IACtC,QAAQ,CAAC,yBAAyB,EAAE,UAAU,CAAC,2BAA2B,CAAC,CAAC;IAC5E,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,eAAe,CAAC,CAAC;IAC3C,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,eAAe,CAAC,CAAC;IAC3C,QAAQ,CAAC,MAAM,EAAE,eAAe,CAAC;CAClC;AAED,2DAA2D;AAC3D,eAAO,MAAM,2BAA2B,MAAM,CAAC;AAC/C,4DAA4D;AAC5D,eAAO,MAAM,4BAA4B,OAAO,CAAC;AAajD;;;GAGG;AACH,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,UAAU,GAAG,SAAS,EAChC,iBAAiB,CAAC,EAAE,kBAAkB,GACrC,kBAAkB,CA6BpB"}
1
+ {"version":3,"file":"settings.d.ts","sourceRoot":"","sources":["../../src/provider/settings.ts"],"names":[],"mappings":"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"}
@@ -13,8 +13,8 @@ function nonNegative(name, value, fallback) {
13
13
  return value;
14
14
  }
15
15
  function resolveSettings(settings, fallbackIconFonts) {
16
- var _s_backEventName, _s_pageLoading, _s_strings, _ref, _s_iconFonts, _loading_backgroundColor, _loading_spinnerColor, _s_executor, _ref1;
17
- var _s_fields;
16
+ var _s_backEventName, _s_pageLoading, _s_strings, _ref, _s_iconFonts, _loading_backgroundColor, _loading_spinnerColor, _s_executor, _ref1, _ref2;
17
+ var _s_fields, _s_toggles;
18
18
  const s = null != settings ? settings : {};
19
19
  const backEventName = null != (_s_backEventName = s.backEventName) ? _s_backEventName : g9DefaultBackEventName;
20
20
  if ('string' != typeof backEventName || '' === backEventName.trim()) throw new G9Error('settings-invalid', 'backEventName must be a non-blank string.');
@@ -37,7 +37,10 @@ function resolveSettings(settings, fallbackIconFonts) {
37
37
  highlightFilledValue: null != (_ref1 = null == (_s_fields = s.fields) ? void 0 : _s_fields.highlightFilledValue) ? _ref1 : true
38
38
  }),
39
39
  sheets: resolveSheetSettings(s.sheets),
40
- popups: Object.freeze(mergePopupSettings(s.popups, createDefaultPopupSettings()))
40
+ popups: Object.freeze(mergePopupSettings(s.popups, createDefaultPopupSettings())),
41
+ toggles: Object.freeze({
42
+ switchMirrorInRtl: null != (_ref2 = null == (_s_toggles = s.toggles) ? void 0 : _s_toggles.switchMirrorInRtl) ? _ref2 : true
43
+ })
41
44
  });
42
45
  }
43
46
  export { g9DefaultBackEventName, g9DefaultErrorPresenter, g9PageLoadingDismissDelayMs, g9PageLoadingSafetyTimeoutMs, resolveSettings };
@@ -1 +1 @@
1
- {"version":3,"file":"provider/settings.jsx","sources":["../../src/provider/settings.ts"],"sourcesContent":["import {\n createIconFontRegistry,\n type G9DiagnosticsReport,\n G9Error,\n type G9ErrorPopupRequest,\n type G9GlyphSlotOverrides,\n type G9GlyphSlots,\n type G9IconFontRegistry,\n type G9ImageSource,\n type G9SafeExecutorOptions,\n type G9StringsOptions,\n resolveGlyphSlots,\n} from '@g9tm/lynxcontrols-foundation';\nimport type { ReactNode } from '@lynx-js/react';\nimport { createDefaultPopupSettings, type G9PopupSettings, mergePopupSettings } from '../popup/types';\nimport { type G9SheetSettings, resolveSheetSettings } from '../sheet/options';\n\n/** The global event the native host sends for a system back press (Android back, desktop Escape). */\nexport const g9DefaultBackEventName = 'g9:back';\n\n/** App-wide page-loading cover settings (MAUI `G9PageLoadingOverlay` statics + `G9PageBase` timing defaults). */\nexport interface G9PageLoadingSettings {\n /** Cover colour (MAUI `BackgroundColorOverride`). Default: the theme's `Primary` (`var(--g9-primary)`). */\n readonly backgroundColor?: string;\n /** Spinner colour (MAUI `SpinnerColorOverride`). Default: the theme's `OnPrimary`. */\n readonly spinnerColor?: string;\n /** Delay after \"ready\" before the cover animates out (MAUI `PageLoadingDismissDelayMs`). Default 369. */\n readonly dismissDelayMs?: number;\n /** Hard cap from appearing to dismissal (MAUI `PageLoadingSafetyTimeoutMs`). Default 5000. */\n readonly safetyTimeoutMs?: number;\n}\n\n/**\n * Renders a bitmap icon at a box size (MAUI `G9ImageFactory.Factory`): the seam for a caching image element. The default\n * is a plain Lynx `<image>` (`aspectFill`), or `<svg content>` for an `{ svg }` source.\n */\nexport type G9ImageRenderer = (source: G9ImageSource, size: number) => ReactNode;\n\n/**\n * The error presenter used when the app sets no `executor.showError`: `@g9tm/lynxcontrols/popup` installs the error\n * popup here when it loads (so the provider does not depend on the popup module).\n */\nexport const g9DefaultErrorPresenter: {\n current: ((request: G9ErrorPopupRequest) => void | PromiseLike<void>) | null;\n} = { current: null };\n\n/** Settings of the shared safe executor (MAUI `G9SafeCommand` statics). */\nexport interface G9ExecutorSettings {\n readonly showError?: (request: G9ErrorPopupRequest) => void | PromiseLike<void>;\n readonly diagnosticsHandler?: (report: G9DiagnosticsReport) => void | PromiseLike<void>;\n readonly diagnosticsAvailable?: () => boolean;\n readonly defaults?: G9SafeExecutorOptions;\n}\n\n/**\n * App-wide configuration (plan/specs/03 §6): what MAUI configured through static helpers. Later work packages add\n * their families here (`sheets`, `popups`, `toasts`, `fields`).\n */\nexport interface G9Settings {\n /** String resolution (MAUI `G9Strings.UseProvider` / `Override`): everything but the culture. */\n readonly strings?: Omit<G9StringsOptions, 'culture'>;\n /** Replacements for the controls' own icons (MAUI `G9Glyphs.*` setters). */\n readonly glyphs?: G9GlyphSlotOverrides;\n /** The app's icon fonts (MAUI `G9IconFonts.Register`); default an empty registry. */\n readonly iconFonts?: G9IconFontRegistry;\n /** Bitmap icon renderer (MAUI `G9ImageFactory.Factory`). Default: {@link G9ImageRenderer}'s plain `<image>`. */\n readonly imageRenderer?: G9ImageRenderer;\n /** Name of the global back event (default {@link g9DefaultBackEventName}). */\n readonly backEventName?: string;\n /** Page-loading cover defaults for every `G9Host`. */\n readonly pageLoading?: G9PageLoadingSettings;\n /** The shared safe executor's popup, diagnostics surface and option defaults. */\n readonly executor?: G9ExecutorSettings;\n /**\n * Pauses the app's background work while a view that asks for it is active (MAUI\n * `G9ContentViewBase.BackgroundWorkSuppressionFactory`). Returns the release function, or nothing.\n */\n readonly backgroundWorkSuppression?: () => (() => void) | null | undefined;\n /** Outlined-field defaults (MAUI `G9OutlinedFieldSettings`, set through `G9OutlinedFieldBase.Configure`). */\n readonly fields?: G9FieldSettings;\n /** Bottom-sheet defaults (MAUI `G9BottomSheetHelper.Configure(G9BottomSheetSettings)`). */\n readonly sheets?: G9SheetSettings;\n /** Popup defaults (MAUI `G9PopupHelper.ConfigureG9PopupDefaults`), merged under per-call settings. */\n readonly popups?: G9PopupSettings;\n}\n\n/** App-wide outlined-field settings (MAUI `G9OutlinedFieldSettings`). */\nexport interface G9FieldSettings {\n /**\n * Whether a field holding a value (unfocused, no error) draws its outline and floated label in the primary colour.\n * Default `true` (MAUI `HighlightFilledValue`); a field's own `filledValueHighlight` overrides it (ADR-0025).\n */\n readonly highlightFilledValue?: boolean;\n}\n\n/** {@link G9Settings} with every default filled in. */\nexport interface G9ResolvedSettings {\n readonly strings: Omit<G9StringsOptions, 'culture'>;\n readonly glyphs: G9GlyphSlots;\n readonly iconFonts: G9IconFontRegistry;\n readonly imageRenderer: G9ImageRenderer | undefined;\n readonly backEventName: string;\n readonly pageLoading: Required<G9PageLoadingSettings>;\n readonly executor: G9ExecutorSettings;\n readonly backgroundWorkSuppression: G9Settings['backgroundWorkSuppression'];\n readonly fields: Required<G9FieldSettings>;\n readonly sheets: Required<G9SheetSettings>;\n readonly popups: G9PopupSettings;\n}\n\n/** MAUI `G9PageBase.PageLoadingDismissDelayMs` default. */\nexport const g9PageLoadingDismissDelayMs = 369;\n/** MAUI `G9PageBase.PageLoadingSafetyTimeoutMs` default. */\nexport const g9PageLoadingSafetyTimeoutMs = 5000;\n\nfunction nonNegative(name: string, value: number | undefined, fallback: number): number {\n if (value === undefined) return fallback;\n if (typeof value !== 'number' || !Number.isFinite(value) || value < 0) {\n throw new G9Error(\n 'settings-invalid',\n `${name} must be a finite number of milliseconds ≥ 0 (got ${String(value)}).`,\n );\n }\n return value;\n}\n\n/**\n * Validates `settings` and fills the defaults. Invalid values throw a `G9Error` (`settings-invalid`, or the\n * foundation code for a malformed glyph slot) at provider mount rather than at first use.\n */\nexport function resolveSettings(\n settings: G9Settings | undefined,\n fallbackIconFonts?: G9IconFontRegistry,\n): G9ResolvedSettings {\n const s = settings ?? {};\n const backEventName = s.backEventName ?? g9DefaultBackEventName;\n if (typeof backEventName !== 'string' || backEventName.trim() === '') {\n throw new G9Error('settings-invalid', 'backEventName must be a non-blank string.');\n }\n const loading = s.pageLoading ?? {};\n return Object.freeze({\n strings: s.strings ?? {},\n glyphs: resolveGlyphSlots(s.glyphs),\n iconFonts: s.iconFonts ?? fallbackIconFonts ?? createIconFontRegistry(),\n imageRenderer: s.imageRenderer,\n backEventName,\n pageLoading: Object.freeze({\n backgroundColor: loading.backgroundColor ?? 'var(--g9-primary)',\n spinnerColor: loading.spinnerColor ?? 'var(--g9-on-primary)',\n dismissDelayMs: nonNegative('pageLoading.dismissDelayMs', loading.dismissDelayMs, g9PageLoadingDismissDelayMs),\n safetyTimeoutMs: nonNegative(\n 'pageLoading.safetyTimeoutMs',\n loading.safetyTimeoutMs,\n g9PageLoadingSafetyTimeoutMs,\n ),\n }),\n executor: s.executor ?? {},\n backgroundWorkSuppression: s.backgroundWorkSuppression,\n fields: Object.freeze({ highlightFilledValue: s.fields?.highlightFilledValue ?? true }),\n sheets: resolveSheetSettings(s.sheets),\n popups: Object.freeze(mergePopupSettings(s.popups, createDefaultPopupSettings())),\n });\n}\n"],"names":["g9DefaultBackEventName","g9DefaultErrorPresenter","g9PageLoadingDismissDelayMs","g9PageLoadingSafetyTimeoutMs","nonNegative","name","value","fallback","undefined","Number","G9Error","String","resolveSettings","settings","fallbackIconFonts","_s_backEventName","_s_pageLoading","_s_strings","_ref","_loading_backgroundColor","_loading_spinnerColor","_s_executor","_s_fields","s","backEventName","loading","Object","resolveGlyphSlots","createIconFontRegistry","resolveSheetSettings","mergePopupSettings","createDefaultPopupSettings"],"mappings":";;;AAkBO,MAAMA,yBAAyB;AAwB/B,MAAMC,0BAET;IAAE,SAAS;AAAK;AAmEb,MAAMC,8BAA8B;AAEpC,MAAMC,+BAA+B;AAE5C,SAASC,YAAYC,IAAY,EAAEC,KAAyB,EAAEC,QAAgB;IAC5E,IAAID,AAAUE,WAAVF,OAAqB,OAAOC;IAChC,IAAI,AAAiB,YAAjB,OAAOD,SAAsB,CAACG,OAAO,QAAQ,CAACH,UAAUA,QAAQ,GAClE,MAAM,IAAII,QACR,oBACA,GAAGL,KAAK,kDAAkD,EAAEM,OAAOL,OAAO,EAAE,CAAC;IAGjF,OAAOA;AACT;AAMO,SAASM,gBACdC,QAAgC,EAChCC,iBAAsC;QAGhBC,kBAINC,gBAELC,YAEEC,MAAAA,cAIQC,0BACHC,uBAQNC,aAAAA;QAEoCC;IAxBhD,MAAMC,IAAIV,QAAAA,WAAAA,WAAY,CAAC;IACvB,MAAMW,gBAAgB,QAAAT,CAAAA,mBAAAA,EAAE,aAAa,AAAD,IAAdA,mBAAmBf;IACzC,IAAI,AAAyB,YAAzB,OAAOwB,iBAA8BA,AAAyB,OAAzBA,cAAc,IAAI,IACzD,MAAM,IAAId,QAAQ,oBAAoB;IAExC,MAAMe,UAAU,QAAAT,CAAAA,iBAAAA,EAAE,WAAW,AAAD,IAAZA,iBAAiB,CAAC;IAClC,OAAOU,OAAO,MAAM,CAAC;QACnB,SAAS,QAAAT,CAAAA,aAAAA,EAAE,OAAO,AAAD,IAARA,aAAa,CAAC;QACvB,QAAQU,kBAAkBJ,EAAE,MAAM;QAClC,WAAW,QAAAL,CAAAA,OAAAA,QAAAA,CAAAA,eAAAA,EAAE,SAAS,AAAD,IAAVA,eAAeJ,iBAAgB,IAA/BI,OAAoCU;QAC/C,eAAeL,EAAE,aAAa;QAC9BC;QACA,aAAaE,OAAO,MAAM,CAAC;YACzB,iBAAiB,QAAAP,CAAAA,2BAAAA,QAAQ,eAAe,AAAD,IAAtBA,2BAA2B;YAC5C,cAAc,QAAAC,CAAAA,wBAAAA,QAAQ,YAAY,AAAD,IAAnBA,wBAAwB;YACtC,gBAAgBhB,YAAY,8BAA8BqB,QAAQ,cAAc,EAAEvB;YAClF,iBAAiBE,YACf,+BACAqB,QAAQ,eAAe,EACvBtB;QAEJ;QACA,UAAU,QAAAkB,CAAAA,cAAAA,EAAE,QAAQ,AAAD,IAATA,cAAc,CAAC;QACzB,2BAA2BE,EAAE,yBAAyB;QACtD,QAAQG,OAAO,MAAM,CAAC;YAAE,sBAAsB,QAAF,iBAAEJ,CAAAA,YAAAA,EAAE,MAAM,AAAD,IAAPA,KAAAA,IAAAA,UAAU,oBAAoB,AAAD,IAAC,QAAI;QAAK;QACrF,QAAQO,qBAAqBN,EAAE,MAAM;QACrC,QAAQG,OAAO,MAAM,CAACI,mBAAmBP,EAAE,MAAM,EAAEQ;IACrD;AACF"}
1
+ {"version":3,"file":"provider/settings.jsx","sources":["../../src/provider/settings.ts"],"sourcesContent":["import {\n createIconFontRegistry,\n type G9DiagnosticsReport,\n G9Error,\n type G9ErrorPopupRequest,\n type G9GlyphSlotOverrides,\n type G9GlyphSlots,\n type G9IconFontRegistry,\n type G9ImageSource,\n type G9SafeExecutorOptions,\n type G9StringsOptions,\n resolveGlyphSlots,\n} from '@g9tm/lynxcontrols-foundation';\nimport type { ReactNode } from '@lynx-js/react';\nimport { createDefaultPopupSettings, type G9PopupSettings, mergePopupSettings } from '../popup/types';\nimport { type G9SheetSettings, resolveSheetSettings } from '../sheet/options';\n\n/** The global event the native host sends for a system back press (Android back, desktop Escape). */\nexport const g9DefaultBackEventName = 'g9:back';\n\n/** App-wide page-loading cover settings (MAUI `G9PageLoadingOverlay` statics + `G9PageBase` timing defaults). */\nexport interface G9PageLoadingSettings {\n /** Cover colour (MAUI `BackgroundColorOverride`). Default: the theme's `Primary` (`var(--g9-primary)`). */\n readonly backgroundColor?: string;\n /** Spinner colour (MAUI `SpinnerColorOverride`). Default: the theme's `OnPrimary`. */\n readonly spinnerColor?: string;\n /** Delay after \"ready\" before the cover animates out (MAUI `PageLoadingDismissDelayMs`). Default 369. */\n readonly dismissDelayMs?: number;\n /** Hard cap from appearing to dismissal (MAUI `PageLoadingSafetyTimeoutMs`). Default 5000. */\n readonly safetyTimeoutMs?: number;\n}\n\n/**\n * Renders a bitmap icon at a box size (MAUI `G9ImageFactory.Factory`): the seam for a caching image element. The default\n * is a plain Lynx `<image>` (`aspectFill`), or `<svg content>` for an `{ svg }` source.\n */\nexport type G9ImageRenderer = (source: G9ImageSource, size: number) => ReactNode;\n\n/**\n * The error presenter used when the app sets no `executor.showError`: `@g9tm/lynxcontrols/popup` installs the error\n * popup here when it loads (so the provider does not depend on the popup module).\n */\nexport const g9DefaultErrorPresenter: {\n current: ((request: G9ErrorPopupRequest) => void | PromiseLike<void>) | null;\n} = { current: null };\n\n/** Settings of the shared safe executor (MAUI `G9SafeCommand` statics). */\nexport interface G9ExecutorSettings {\n readonly showError?: (request: G9ErrorPopupRequest) => void | PromiseLike<void>;\n readonly diagnosticsHandler?: (report: G9DiagnosticsReport) => void | PromiseLike<void>;\n readonly diagnosticsAvailable?: () => boolean;\n readonly defaults?: G9SafeExecutorOptions;\n}\n\n/**\n * App-wide configuration (plan/specs/03 §6): what MAUI configured through static helpers. Later work packages add\n * their families here (`sheets`, `popups`, `toasts`, `fields`).\n */\nexport interface G9Settings {\n /** String resolution (MAUI `G9Strings.UseProvider` / `Override`): everything but the culture. */\n readonly strings?: Omit<G9StringsOptions, 'culture'>;\n /** Replacements for the controls' own icons (MAUI `G9Glyphs.*` setters). */\n readonly glyphs?: G9GlyphSlotOverrides;\n /** The app's icon fonts (MAUI `G9IconFonts.Register`); default an empty registry. */\n readonly iconFonts?: G9IconFontRegistry;\n /** Bitmap icon renderer (MAUI `G9ImageFactory.Factory`). Default: {@link G9ImageRenderer}'s plain `<image>`. */\n readonly imageRenderer?: G9ImageRenderer;\n /** Name of the global back event (default {@link g9DefaultBackEventName}). */\n readonly backEventName?: string;\n /** Page-loading cover defaults for every `G9Host`. */\n readonly pageLoading?: G9PageLoadingSettings;\n /** The shared safe executor's popup, diagnostics surface and option defaults. */\n readonly executor?: G9ExecutorSettings;\n /**\n * Pauses the app's background work while a view that asks for it is active (MAUI\n * `G9ContentViewBase.BackgroundWorkSuppressionFactory`). Returns the release function, or nothing.\n */\n readonly backgroundWorkSuppression?: () => (() => void) | null | undefined;\n /** Outlined-field defaults (MAUI `G9OutlinedFieldSettings`, set through `G9OutlinedFieldBase.Configure`). */\n readonly fields?: G9FieldSettings;\n /** Bottom-sheet defaults (MAUI `G9BottomSheetHelper.Configure(G9BottomSheetSettings)`). */\n readonly sheets?: G9SheetSettings;\n /** Popup defaults (MAUI `G9PopupHelper.ConfigureG9PopupDefaults`), merged under per-call settings. */\n readonly popups?: G9PopupSettings;\n /** Toggle defaults (MAUI 1.4.10 `G9Switch.MirrorInRtl`, a static set once at startup). */\n readonly toggles?: G9ToggleSettings;\n}\n\n/** App-wide toggle settings. */\nexport interface G9ToggleSettings {\n /**\n * Whether a right-to-left language mirrors a switch's toggle (on = the thumb on the LEFT). Default `true` (MAUI\n * `G9Switch.MirrorInRtl`). `false` keeps every switch physical in every language — off = left, on = right — as\n * AgriPad's Figma draws all 31 of its toggles; the row (title, switch) still flows with the language.\n */\n readonly switchMirrorInRtl?: boolean;\n}\n\n/** App-wide outlined-field settings (MAUI `G9OutlinedFieldSettings`). */\nexport interface G9FieldSettings {\n /**\n * Whether a field holding a value (unfocused, no error) draws its outline and floated label in the primary colour.\n * Default `true` (MAUI `HighlightFilledValue`); a field's own `filledValueHighlight` overrides it (ADR-0025).\n */\n readonly highlightFilledValue?: boolean;\n}\n\n/** {@link G9Settings} with every default filled in. */\nexport interface G9ResolvedSettings {\n readonly strings: Omit<G9StringsOptions, 'culture'>;\n readonly glyphs: G9GlyphSlots;\n readonly iconFonts: G9IconFontRegistry;\n readonly imageRenderer: G9ImageRenderer | undefined;\n readonly backEventName: string;\n readonly pageLoading: Required<G9PageLoadingSettings>;\n readonly executor: G9ExecutorSettings;\n readonly backgroundWorkSuppression: G9Settings['backgroundWorkSuppression'];\n readonly fields: Required<G9FieldSettings>;\n readonly sheets: Required<G9SheetSettings>;\n readonly popups: G9PopupSettings;\n readonly toggles: Required<G9ToggleSettings>;\n}\n\n/** MAUI `G9PageBase.PageLoadingDismissDelayMs` default. */\nexport const g9PageLoadingDismissDelayMs = 369;\n/** MAUI `G9PageBase.PageLoadingSafetyTimeoutMs` default. */\nexport const g9PageLoadingSafetyTimeoutMs = 5000;\n\nfunction nonNegative(name: string, value: number | undefined, fallback: number): number {\n if (value === undefined) return fallback;\n if (typeof value !== 'number' || !Number.isFinite(value) || value < 0) {\n throw new G9Error(\n 'settings-invalid',\n `${name} must be a finite number of milliseconds ≥ 0 (got ${String(value)}).`,\n );\n }\n return value;\n}\n\n/**\n * Validates `settings` and fills the defaults. Invalid values throw a `G9Error` (`settings-invalid`, or the\n * foundation code for a malformed glyph slot) at provider mount rather than at first use.\n */\nexport function resolveSettings(\n settings: G9Settings | undefined,\n fallbackIconFonts?: G9IconFontRegistry,\n): G9ResolvedSettings {\n const s = settings ?? {};\n const backEventName = s.backEventName ?? g9DefaultBackEventName;\n if (typeof backEventName !== 'string' || backEventName.trim() === '') {\n throw new G9Error('settings-invalid', 'backEventName must be a non-blank string.');\n }\n const loading = s.pageLoading ?? {};\n return Object.freeze({\n strings: s.strings ?? {},\n glyphs: resolveGlyphSlots(s.glyphs),\n iconFonts: s.iconFonts ?? fallbackIconFonts ?? createIconFontRegistry(),\n imageRenderer: s.imageRenderer,\n backEventName,\n pageLoading: Object.freeze({\n backgroundColor: loading.backgroundColor ?? 'var(--g9-primary)',\n spinnerColor: loading.spinnerColor ?? 'var(--g9-on-primary)',\n dismissDelayMs: nonNegative('pageLoading.dismissDelayMs', loading.dismissDelayMs, g9PageLoadingDismissDelayMs),\n safetyTimeoutMs: nonNegative(\n 'pageLoading.safetyTimeoutMs',\n loading.safetyTimeoutMs,\n g9PageLoadingSafetyTimeoutMs,\n ),\n }),\n executor: s.executor ?? {},\n backgroundWorkSuppression: s.backgroundWorkSuppression,\n fields: Object.freeze({ highlightFilledValue: s.fields?.highlightFilledValue ?? true }),\n sheets: resolveSheetSettings(s.sheets),\n popups: Object.freeze(mergePopupSettings(s.popups, createDefaultPopupSettings())),\n toggles: Object.freeze({ switchMirrorInRtl: s.toggles?.switchMirrorInRtl ?? true }),\n });\n}\n"],"names":["g9DefaultBackEventName","g9DefaultErrorPresenter","g9PageLoadingDismissDelayMs","g9PageLoadingSafetyTimeoutMs","nonNegative","name","value","fallback","undefined","Number","G9Error","String","resolveSettings","settings","fallbackIconFonts","_s_backEventName","_s_pageLoading","_s_strings","_ref","_loading_backgroundColor","_loading_spinnerColor","_s_executor","_s_fields","_s_toggles","s","backEventName","loading","Object","resolveGlyphSlots","createIconFontRegistry","resolveSheetSettings","mergePopupSettings","createDefaultPopupSettings"],"mappings":";;;AAkBO,MAAMA,yBAAyB;AAwB/B,MAAMC,0BAET;IAAE,SAAS;AAAK;AAgFb,MAAMC,8BAA8B;AAEpC,MAAMC,+BAA+B;AAE5C,SAASC,YAAYC,IAAY,EAAEC,KAAyB,EAAEC,QAAgB;IAC5E,IAAID,AAAUE,WAAVF,OAAqB,OAAOC;IAChC,IAAI,AAAiB,YAAjB,OAAOD,SAAsB,CAACG,OAAO,QAAQ,CAACH,UAAUA,QAAQ,GAClE,MAAM,IAAII,QACR,oBACA,GAAGL,KAAK,kDAAkD,EAAEM,OAAOL,OAAO,EAAE,CAAC;IAGjF,OAAOA;AACT;AAMO,SAASM,gBACdC,QAAgC,EAChCC,iBAAsC;QAGhBC,kBAINC,gBAELC,YAEEC,MAAAA,cAIQC,0BACHC,uBAQNC,aAAAA,OAAAA;QAEoCC,WAGFC;IA3B9C,MAAMC,IAAIX,QAAAA,WAAAA,WAAY,CAAC;IACvB,MAAMY,gBAAgB,QAAAV,CAAAA,mBAAAA,EAAE,aAAa,AAAD,IAAdA,mBAAmBf;IACzC,IAAI,AAAyB,YAAzB,OAAOyB,iBAA8BA,AAAyB,OAAzBA,cAAc,IAAI,IACzD,MAAM,IAAIf,QAAQ,oBAAoB;IAExC,MAAMgB,UAAU,QAAAV,CAAAA,iBAAAA,EAAE,WAAW,AAAD,IAAZA,iBAAiB,CAAC;IAClC,OAAOW,OAAO,MAAM,CAAC;QACnB,SAAS,QAAAV,CAAAA,aAAAA,EAAE,OAAO,AAAD,IAARA,aAAa,CAAC;QACvB,QAAQW,kBAAkBJ,EAAE,MAAM;QAClC,WAAW,QAAAN,CAAAA,OAAAA,QAAAA,CAAAA,eAAAA,EAAE,SAAS,AAAD,IAAVA,eAAeJ,iBAAgB,IAA/BI,OAAoCW;QAC/C,eAAeL,EAAE,aAAa;QAC9BC;QACA,aAAaE,OAAO,MAAM,CAAC;YACzB,iBAAiB,QAAAR,CAAAA,2BAAAA,QAAQ,eAAe,AAAD,IAAtBA,2BAA2B;YAC5C,cAAc,QAAAC,CAAAA,wBAAAA,QAAQ,YAAY,AAAD,IAAnBA,wBAAwB;YACtC,gBAAgBhB,YAAY,8BAA8BsB,QAAQ,cAAc,EAAExB;YAClF,iBAAiBE,YACf,+BACAsB,QAAQ,eAAe,EACvBvB;QAEJ;QACA,UAAU,QAAAkB,CAAAA,cAAAA,EAAE,QAAQ,AAAD,IAATA,cAAc,CAAC;QACzB,2BAA2BG,EAAE,yBAAyB;QACtD,QAAQG,OAAO,MAAM,CAAC;YAAE,sBAAsB,QAAF,iBAAEL,CAAAA,YAAAA,EAAE,MAAM,AAAD,IAAPA,KAAAA,IAAAA,UAAU,oBAAoB,AAAD,IAAC,QAAI;QAAK;QACrF,QAAQQ,qBAAqBN,EAAE,MAAM;QACrC,QAAQG,OAAO,MAAM,CAACI,mBAAmBP,EAAE,MAAM,EAAEQ;QACnD,SAASL,OAAO,MAAM,CAAC;YAAE,mBAAmB,QAAF,iBAAEJ,CAAAA,aAAAA,EAAE,OAAO,AAAD,IAARA,KAAAA,IAAAA,WAAW,iBAAiB,AAAD,IAAC,QAAI;QAAK;IACnF;AACF"}
@@ -261,6 +261,9 @@
261
261
  --g9-metric-chip-height: 36px;
262
262
  --g9-metric-chip-horizontal-padding: 14px;
263
263
  --g9-metric-chip-font-size: 13px;
264
+ --g9-metric-segment-height: 44px;
265
+ --g9-metric-segment-font-size: 14px;
266
+ --g9-metric-segment-corner-radius: 10px;
264
267
  --g9-metric-chip-icon-size: 16px;
265
268
  --g9-metric-chip-spacing: 6px;
266
269
  --g9-metric-chip-selection-animation-ms: .14s;
@@ -292,6 +295,7 @@
292
295
  --g9-metric-selection-min-height: 220px;
293
296
  --g9-metric-selection-row-font-size: 14px;
294
297
  --g9-metric-selection-icon-size: 18px;
298
+ --g9-metric-selection-avatar-size: 28px;
295
299
  --g9-metric-selection-check-box-size: 20px;
296
300
  --g9-metric-selection-check-radius: 6px;
297
301
  --g9-metric-check-box-size: 20px;
@@ -1 +1 @@
1
- {"version":3,"sources":["webpack://./src/provider/theme.css"],"names":[],"mappings":"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","sourcesContent":["/* Generated by renderThemeStylesheet (src/provider/theme-css.ts); `npm run gen:theme-css` rewrites it. */\n.g9-theme-light {\n --g9-primary: #349D57;\n --g9-on-primary: #FFFFFF;\n --g9-primary-container: #D6F0DF;\n --g9-on-primary-container: #0E3B1E;\n --g9-primary-border: #2D8A4C;\n --g9-primary-hover: #2D8A4C;\n --g9-primary-pressed: #267A42;\n --g9-secondary: #4A7C3F;\n --g9-on-secondary: #FFFFFF;\n --g9-secondary-container: #E3F0DF;\n --g9-on-secondary-container: #16310F;\n --g9-secondary-border: #3C6633;\n --g9-tertiary: #3A7DB5;\n --g9-on-tertiary: #FFFFFF;\n --g9-tertiary-container: #D8EAF7;\n --g9-on-tertiary-container: #0A2A44;\n --g9-tertiary-border: #316596;\n --g9-quaternary: #7B5EA7;\n --g9-on-quaternary: #FFFFFF;\n --g9-quaternary-container: #EAE1F5;\n --g9-on-quaternary-container: #2E1F45;\n --g9-quaternary-border: #6B4F92;\n --g9-error: #C8364B;\n --g9-on-error: #FFFFFF;\n --g9-error-container: #FADCE0;\n --g9-on-error-container: #5A0814;\n --g9-error-border: #A82A3D;\n --g9-warning: #C77A14;\n --g9-on-warning: #FFFFFF;\n --g9-warning-container: #FBEED5;\n --g9-on-warning-container: #4A2E05;\n --g9-warning-border: #A8650F;\n --g9-success: #2F8B4A;\n --g9-on-success: #FFFFFF;\n --g9-success-container: #E2F3E8;\n --g9-on-success-container: #0C3019;\n --g9-success-border: #267A3E;\n --g9-info: #2B6FB3;\n --g9-on-info: #FFFFFF;\n --g9-info-container: #DCE9F7;\n --g9-on-info-container: #0B2D4D;\n --g9-info-border: #245E99;\n --g9-outline: #C3C7C3;\n --g9-outline-variant: #DDE0DD;\n --g9-outline-border: #989E98;\n --g9-background: #F7F8F7;\n --g9-on-background: #181A18;\n --g9-background-secondary: #EEEFEE;\n --g9-surface: #FFFFFF;\n --g9-on-surface: #181A18;\n --g9-surface-variant: #EFF1EF;\n --g9-on-surface-variant: #525852;\n --g9-surface-border: #DDE0DD;\n --g9-inverse-surface: #14181A;\n --g9-inverse-on-surface: #F4F6F4;\n --g9-inverse-primary: #7BD88F;\n --g9-surface-container-highest: #E6E8E6;\n --g9-surface-container-high: #ECEEEC;\n --g9-surface-container: #F1F2F1;\n --g9-surface-container-low: #F7F8F7;\n --g9-surface-container-lowest: #FFFFFF;\n --g9-surface-bright: #FFFFFF;\n --g9-surface-dim: #E4E6E4;\n --g9-scrim: rgba(0, 0, 0, 0.6);\n --g9-scrim-light: rgba(0, 0, 0, 0.4);\n --g9-overlay: rgba(0, 0, 0, 0.078431375);\n --g9-overlay-light: rgba(0, 0, 0, 0.039215688);\n --g9-text-primary: #181A18;\n --g9-text-secondary: #525852;\n --g9-text-tertiary: #6E756E;\n --g9-text-disabled: #C3C7C3;\n --g9-white: #FFFFFF;\n --g9-black: #000000;\n --g9-light: #EEEEEE;\n --g9-dark: #222222;\n --g9-divider: #EEEFEE;\n --g9-divider-strong: #DDE0DD;\n --g9-focus: #349D57;\n --g9-focus-visible: rgba(52, 157, 87, 0.34901962);\n --g9-disabled: #C3C7C3;\n --g9-disabled-container: #EEEFEE;\n --g9-card-background: #FFFFFF;\n --g9-card-border: #DDE0DD;\n --g9-card-elevated: #FFFFFF;\n --g9-default: #EEEFEE;\n --g9-on-default: #181A18;\n --g9-default-container: #DDE0DD;\n --g9-on-default-container: #181A18;\n --g9-default-border: #C3C7C3;\n --g9-default-hover: #DDE0DD;\n --g9-default-pressed: #C3C7C3;\n --g9-input-background: #FFFFFF;\n --g9-input-border: #C3C7C3;\n --g9-input-border-focused: #349D57;\n --g9-input-placeholder: #989E98;\n}\n\n.g9-theme-dark {\n --g9-primary: #45A664;\n --g9-on-primary: #062814;\n --g9-primary-container: #173E25;\n --g9-on-primary-container: #BDE5C9;\n --g9-primary-border: #338E51;\n --g9-primary-hover: #52B271;\n --g9-primary-pressed: #338E51;\n --g9-secondary: #6BBD5A;\n --g9-on-secondary: #0C2207;\n --g9-secondary-container: #1A3016;\n --g9-on-secondary-container: #C8E6BF;\n --g9-secondary-border: #2C4A23;\n --g9-tertiary: #6AAEE0;\n --g9-on-tertiary: #04243F;\n --g9-tertiary-container: #0E2540;\n --g9-on-tertiary-container: #C2E0F7;\n --g9-tertiary-border: #1E456B;\n --g9-quaternary: #A78BD1;\n --g9-on-quaternary: #2A1B40;\n --g9-quaternary-container: #2E2340;\n --g9-on-quaternary-container: #E0D4F0;\n --g9-quaternary-border: #4A3A66;\n --g9-error: #E66478;\n --g9-on-error: #2C0B12;\n --g9-error-container: #461620;\n --g9-on-error-container: #F7CDD4;\n --g9-error-border: #7A2734;\n --g9-warning: #E3A04B;\n --g9-on-warning: #2A1A05;\n --g9-warning-container: #3D2A0E;\n --g9-on-warning-container: #F7DEB5;\n --g9-warning-border: #6B4A1C;\n --g9-success: #4BBD6B;\n --g9-on-success: #062814;\n --g9-success-container: #173E25;\n --g9-on-success-container: #BDE5C9;\n --g9-success-border: #2A7E46;\n --g9-info: #6BA6E0;\n --g9-on-info: #07203A;\n --g9-info-container: #142F4D;\n --g9-on-info-container: #C2DBF7;\n --g9-info-border: #27517D;\n --g9-outline: #3D423D;\n --g9-outline-variant: #272A27;\n --g9-outline-border: #525852;\n --g9-background: #0C0D0C;\n --g9-on-background: #F4F6F4;\n --g9-background-secondary: #15171A;\n --g9-surface: #15171A;\n --g9-on-surface: #F4F6F4;\n --g9-surface-variant: #22262A;\n --g9-on-surface-variant: #C3C7C3;\n --g9-surface-border: #272A27;\n --g9-inverse-surface: #F4F6F4;\n --g9-inverse-on-surface: #14181A;\n --g9-inverse-primary: #349D57;\n --g9-surface-container-highest: #2A2E32;\n --g9-surface-container-high: #22262A;\n --g9-surface-container: #1B1E20;\n --g9-surface-container-low: #15171A;\n --g9-surface-container-lowest: #101113;\n --g9-surface-bright: #2A2E32;\n --g9-surface-dim: #0C0D0C;\n --g9-scrim: rgba(0, 0, 0, 0.8);\n --g9-scrim-light: rgba(0, 0, 0, 0.6);\n --g9-overlay: rgba(0, 0, 0, 0.2);\n --g9-overlay-light: rgba(0, 0, 0, 0.101960786);\n --g9-text-primary: #F4F6F4;\n --g9-text-secondary: #C3C7C3;\n --g9-text-tertiary: #989E98;\n --g9-text-disabled: #525852;\n --g9-white: #FFFFFF;\n --g9-black: #000000;\n --g9-light: #EEEEEE;\n --g9-dark: #222222;\n --g9-divider: #1F2222;\n --g9-divider-strong: #272A27;\n --g9-focus: #45A664;\n --g9-focus-visible: rgba(75, 189, 107, 0.4);\n --g9-disabled: #525852;\n --g9-disabled-container: #1B1E20;\n --g9-card-background: #15171A;\n --g9-card-border: #272A27;\n --g9-card-elevated: #1B1E20;\n --g9-default: #22262A;\n --g9-on-default: #F4F6F4;\n --g9-default-container: #2A2E32;\n --g9-on-default-container: #F4F6F4;\n --g9-default-border: #3D423D;\n --g9-default-hover: #2A2E32;\n --g9-default-pressed: #3D423D;\n --g9-input-background: #15171A;\n --g9-input-border: #3D423D;\n --g9-input-border-focused: #45A664;\n --g9-input-placeholder: #989E98;\n}\n\n.g9-provider {\n --g9-metric-radius-xs: 6px;\n --g9-metric-radius-sm: 8px;\n --g9-metric-radius-md: 12px;\n --g9-metric-radius-lg: 16px;\n --g9-metric-radius-xl: 20px;\n --g9-metric-radius-pill: 999px;\n --g9-metric-control-height: 52px;\n --g9-metric-button-height-small: 36px;\n --g9-metric-button-height-medium: 44px;\n --g9-metric-button-height-large: 48px;\n --g9-metric-button-height-hero: 52px;\n --g9-metric-input-horizontal-padding: 14px;\n --g9-metric-input-icon-size: 20px;\n --g9-metric-leading-icon-outer-margin: 12px;\n --g9-metric-leading-icon-inner-margin: 8px;\n --g9-metric-trailing-icon-outer-margin: 12px;\n --g9-metric-trailing-icon-inner-margin: 8px;\n --g9-metric-leading-icon-slot-width: 40px;\n --g9-metric-trailing-icon-slot-width: 40px;\n --g9-metric-editor-trailing-icon-bottom-inset: 8px;\n --g9-metric-editor-trailing-slot-height: 36px;\n --g9-metric-input-label-leading-icon-offset: 26px;\n --g9-metric-floating-label-floated-extra-x: 8px;\n --g9-metric-outline-notch-text-gap: 8px;\n --g9-metric-floating-label-font-size-float: 11px;\n --g9-metric-floating-label-font-size-rest: 15px;\n --g9-metric-floating-label-height: 22px;\n --g9-metric-floating-label-floated-y: -11px;\n --g9-metric-floating-label-rest-scale: 1;\n --g9-metric-floating-label-floated-scale: 0.78;\n --g9-metric-floating-label-duration-ms: 160ms;\n --g9-metric-floating-label-clearance: 6px;\n --g9-metric-helper-font-size: 11.5px;\n --g9-metric-counter-font-size: 11px;\n --g9-metric-outlined-field-stroke-thickness: 1.5px;\n --g9-metric-outlined-field-emphasis-stroke-thickness: 2.5px;\n --g9-metric-outlined-field-focus-halo-thickness: 6px;\n --g9-metric-focus-ring-opacity: 0.22;\n --g9-metric-button-font-small: 12px;\n --g9-metric-button-font-medium: 14px;\n --g9-metric-button-font-large: 15px;\n --g9-metric-button-font-hero: 16px;\n --g9-metric-switch-width: 56px;\n --g9-metric-switch-height: 32px;\n --g9-metric-switch-thumb: 24px;\n --g9-metric-switch-thumb-pressed: 30px;\n --g9-metric-slider-height: 104px;\n --g9-metric-slider-height-compact: 36px;\n --g9-metric-slider-track-y: 52px;\n --g9-metric-slider-track-height: 8px;\n --g9-metric-slider-thumb-radius: 14px;\n --g9-metric-slider-horizontal-inset: 16px;\n --g9-metric-slider-label-gap: 18px;\n --g9-metric-pin-cell-width: 44px;\n --g9-metric-pin-cell-height: 52px;\n --g9-metric-pin-cell-stroke-thickness: 1.4px;\n --g9-metric-pin-cell-stroke-thickness-focused: 2px;\n --g9-metric-pin-cell-corner-radius: 10px;\n --g9-metric-pin-cell-spacing: 8px;\n --g9-metric-pin-separator-spacing: 6px;\n --g9-metric-pin-cell-font-size: 22px;\n --g9-metric-pin-separator-font-size: 22px;\n --g9-metric-progress-bar-height: 10px;\n --g9-metric-chip-height: 36px;\n --g9-metric-chip-horizontal-padding: 14px;\n --g9-metric-chip-font-size: 13px;\n --g9-metric-chip-icon-size: 16px;\n --g9-metric-chip-spacing: 6px;\n --g9-metric-chip-selection-animation-ms: 140ms;\n --g9-metric-chip-checkmark-animation-ms: 120ms;\n --g9-metric-tab-bar-height: 52px;\n --g9-metric-tab-bar-inner-padding: 4px;\n --g9-metric-tab-bar-radius: 26px;\n --g9-metric-tab-pill-vertical-inset: 2px;\n --g9-metric-tab-pill-radius: 18px;\n --g9-metric-tab-cell-horizontal-padding: 16px;\n --g9-metric-tab-bar-to-content-gap: 8px;\n --g9-metric-tab-font-size: 13px;\n --g9-metric-tab-icon-size: 16px;\n --g9-metric-tab-badge-height: 18px;\n --g9-metric-tab-content-radius: 16px;\n --g9-metric-tab-underline-thickness: 2.5px;\n --g9-metric-tab-bar-edge-line-thickness: 1px;\n --g9-metric-tab-separator-thickness: 1px;\n --g9-metric-tab-separator-vertical-inset: 12px;\n --g9-metric-tab-content-default-padding: 20px;\n --g9-metric-drum-column-height: 220px;\n --g9-metric-drum-row-height: 44px;\n --g9-metric-drum-label-font-size: 10px;\n --g9-metric-drum-selected-font-size: 17px;\n --g9-metric-drum-unselected-font-size: 16px;\n --g9-metric-selection-row-height: 52px;\n --g9-metric-selection-row-horizontal-padding: 16px;\n --g9-metric-selection-max-height: 520px;\n --g9-metric-selection-min-height: 220px;\n --g9-metric-selection-row-font-size: 14px;\n --g9-metric-selection-icon-size: 18px;\n --g9-metric-selection-check-box-size: 20px;\n --g9-metric-selection-check-radius: 6px;\n --g9-metric-check-box-size: 20px;\n --g9-metric-check-box-corner-radius: 6px;\n --g9-metric-check-box-stroke-thickness: 2px;\n --g9-metric-check-box-mark-stroke-thickness: 2px;\n --g9-metric-check-box-halo-diameter: 40px;\n --g9-metric-check-box-label-spacing: 2px;\n --g9-metric-check-box-label-vertical-padding: 12px;\n --g9-metric-check-box-label-font-size: 14px;\n --g9-metric-check-box-toggle-duration-ms: 200ms;\n --g9-metric-check-box-morph-duration-ms: 150ms;\n --g9-metric-nav-card-icon-badge-size: 38px;\n --g9-metric-nav-card-padding-x: 14px;\n --g9-metric-nav-card-padding-y: 12px;\n --g9-metric-nav-card-title-font-size: 14px;\n --g9-metric-nav-card-subtitle-font-size: 11.5px;\n --g9-metric-nav-card-value-font-size: 13px;\n --g9-metric-nav-card-chevron-size: 24px;\n --g9-metric-nav-card-coming-soon-font-size: 10px;\n --g9-metric-nav-card-coming-soon-padding-x: 7px;\n --g9-metric-nav-card-coming-soon-padding-y: 3.5px;\n --g9-metric-nav-card-coming-soon-radius: 11px;\n --g9-metric-separator-title-font-size: 10px;\n --g9-metric-separator-icon-size: 12px;\n --g9-metric-expander-header-height: 48px;\n --g9-metric-expander-title-font-size: 15px;\n --g9-metric-expander-icon-size: 20px;\n --g9-metric-expander-chevron-size: 22px;\n --g9-metric-expander-header-spacing: 10px;\n --g9-metric-expander-content-top-gap: 8px;\n --g9-metric-expander-header-padding-x: 14px;\n --g9-metric-expander-chevron-rotation-ms: 220ms;\n --g9-metric-expander-content-animation-ms: 220ms;\n --g9-metric-cascade-panel-animation-ms: 280ms;\n --g9-metric-cascade-panel-header-height: 48px;\n --g9-metric-cascade-panel-header-font-size: 15px;\n --g9-metric-cascade-panel-back-icon-size: 22px;\n --g9-metric-cascade-panel-header-padding: 8px;\n --g9-metric-cascade-panel-parallax-fraction: 0.18;\n --g9-metric-cascade-panel-underlay-dim-opacity: 0.55;\n --g9-metric-press-duration-ms: 80ms;\n --g9-metric-release-duration-ms: 150ms;\n --g9-metric-hover-duration-ms: 80ms;\n --g9-metric-ripple-duration-ms: 350ms;\n --g9-metric-icon-press-scale-to: 0.92;\n --g9-metric-tab-indicator-duration-ms: 240ms;\n --g9-metric-tab-content-transition-ms: 160ms;\n --g9-metric-switch-toggle-duration-ms: 240ms;\n --g9-metric-progress-value-duration-ms: 300ms;\n --g9-metric-indeterminate-frame-ms: 16ms;\n --g9-metric-indeterminate-step: 0.012;\n --g9-metric-intro-overlay-opacity: 0.52;\n --g9-metric-intro-overlay-top-opacity-ratio: 0.4;\n --g9-metric-intro-startup-cover-fade-duration-ms: 320ms;\n --g9-metric-intro-initial-video-seek-timeout-ms: 900ms;\n --g9-metric-intro-media-fade-in-duration-ms: 420ms;\n --g9-metric-intro-media-fade-out-duration-ms: 420ms;\n --g9-metric-intro-logo-width: 192px;\n --g9-metric-intro-logo-height: 34px;\n --g9-metric-intro-title-font-size: 18px;\n --g9-metric-intro-subtitle-font-size: 14px;\n --g9-metric-intro-nav-font-size: 14px;\n --g9-metric-intro-step-active-width: 28px;\n --g9-metric-intro-step-inactive-width: 20px;\n --g9-metric-intro-step-height: 4px;\n --g9-metric-intro-step-spacing: 6px;\n --g9-metric-intro-chrome-padding: 20px;\n --g9-metric-intro-header-top-padding: 16px;\n --g9-metric-intro-logo-top-margin: 48px;\n --g9-metric-intro-text-bottom-margin: 12px;\n --g9-metric-intro-nav-min-touch-height: 48px;\n --g9-metric-intro-nav-min-touch-width: 72px;\n --g9-metric-intro-content-bottom-padding: 24px;\n --g9-layout-edge-spacing: 10px;\n --g9-layout-control-corner-radius: 9px;\n --g9-layout-toolbar-button-size: 42px;\n --g9-layout-toolbar-icon-size: 24px;\n --g9-layout-fit-content-loading-min-height: 180px;\n --g9-layout-modal-header-icon-button-size: 30px;\n --g9-layout-modal-header-icon-title-spacing: 3px;\n --g9-layout-sheet-header-vertical-gap: 10px;\n --g9-layout-sheet-header-min-height: 64px;\n --g9-layout-sheet-header-title-font-size: 16.2px;\n --g9-layout-modal-inner-icon-size: 39px;\n --g9-layout-modal-sheet-handle-width: 90px;\n --g9-layout-modal-sheet-handle-height: 5px;\n --g9-layout-modal-target-header-height: 64px;\n --g9-layout-modal-target-tab-bar-height: 56px;\n --g9-layout-modal-target-category-row-height: 66px;\n --g9-layout-modal-target-footer-button-height: 52px;\n --g9-layout-spacing-x-small: 2px;\n --g9-layout-spacing-small: 4px;\n --g9-layout-spacing-medium: 8px;\n --g9-layout-spacing-large: 12px;\n --g9-layout-spacing-x-large: 16px;\n --g9-layout-control-cell-height: 52px;\n --g9-layout-min-touch-target: 48px;\n --g9-layout-site-thumbnail-size: 58px;\n --g9-layout-map-chrome-edge-spacing: 12px;\n --g9-layout-control-corner-radius-value-top-start: 9px;\n --g9-layout-control-corner-radius-value-top-end: 9px;\n --g9-layout-control-corner-radius-value-bottom-end: 9px;\n --g9-layout-control-corner-radius-value-bottom-start: 9px;\n --g9-layout-map-chrome-corner-radius-top-start: 24px;\n --g9-layout-map-chrome-corner-radius-top-end: 24px;\n --g9-layout-map-chrome-corner-radius-bottom-end: 24px;\n --g9-layout-map-chrome-corner-radius-bottom-start: 24px;\n --g9-layout-edge-horizontal-thickness-top: 0px;\n --g9-layout-edge-horizontal-thickness-end: 10px;\n --g9-layout-edge-horizontal-thickness-bottom: 0px;\n --g9-layout-edge-horizontal-thickness-start: 10px;\n --g9-layout-body-padding-top: 10px;\n --g9-layout-body-padding-end: 10px;\n --g9-layout-body-padding-bottom: 10px;\n --g9-layout-body-padding-start: 10px;\n --g9-layout-body-element-margin-top: 10px;\n --g9-layout-body-element-margin-end: 10px;\n --g9-layout-body-element-margin-bottom: 0px;\n --g9-layout-body-element-margin-start: 10px;\n --g9-layout-body-element-margin-with-bottom-gap-top: 10px;\n --g9-layout-body-element-margin-with-bottom-gap-end: 10px;\n --g9-layout-body-element-margin-with-bottom-gap-bottom: 10px;\n --g9-layout-body-element-margin-with-bottom-gap-start: 10px;\n --g9-layout-body-top-margin-top: 10px;\n --g9-layout-body-top-margin-end: 0px;\n --g9-layout-body-top-margin-bottom: 0px;\n --g9-layout-body-top-margin-start: 0px;\n --g9-layout-item-bottom-margin-top: 0px;\n --g9-layout-item-bottom-margin-end: 0px;\n --g9-layout-item-bottom-margin-bottom: 10px;\n --g9-layout-item-bottom-margin-start: 0px;\n --g9-layout-modal-base-body-margin-top: 0px;\n --g9-layout-modal-base-body-margin-end: 10px;\n --g9-layout-modal-base-body-margin-bottom: 10px;\n --g9-layout-modal-base-body-margin-start: 10px;\n --g9-layout-search-field-padding-top: 0px;\n --g9-layout-search-field-padding-end: 12px;\n --g9-layout-search-field-padding-bottom: 0px;\n --g9-layout-search-field-padding-start: 14px;\n --g9-layout-card-padding-top: 12px;\n --g9-layout-card-padding-end: 14px;\n --g9-layout-card-padding-bottom: 12px;\n --g9-layout-card-padding-start: 14px;\n --g9-layout-list-card-padding-top: 12px;\n --g9-layout-list-card-padding-end: 12px;\n --g9-layout-list-card-padding-bottom: 12px;\n --g9-layout-list-card-padding-start: 12px;\n --g9-layout-outlined-card-padding-top: 22px;\n --g9-layout-outlined-card-padding-end: 14px;\n --g9-layout-outlined-card-padding-bottom: 14px;\n --g9-layout-outlined-card-padding-start: 14px;\n --g9-layout-outlined-input-top-gap-top: 16px;\n --g9-layout-outlined-input-top-gap-end: 0px;\n --g9-layout-outlined-input-top-gap-bottom: 0px;\n --g9-layout-outlined-input-top-gap-start: 0px;\n --g9-layout-deferred-content-load-delay-ms: 369ms;\n --g9-layout-g9-bottom-sheet-footer-top-border-thickness: 1px;\n --g9-layout-g9-bottom-sheet-footer-max-buttons-per-row: 3;\n --g9-layout-g9-bottom-sheet-drag-handle-touch-height: 30px;\n --g9-layout-g9-bottom-sheet-drag-handle-width: 32px;\n --g9-layout-g9-bottom-sheet-drag-handle-height: 4px;\n --g9-layout-g9-bottom-sheet-backdrop-card-threshold: 0.75;\n --g9-layout-g9-bottom-sheet-backdrop-card-min-scale: 0.93;\n --g9-layout-g9-bottom-sheet-backdrop-card-translation-y: 12px;\n --g9-layout-g9-bottom-sheet-footer-button-height: 52px;\n --g9-layout-g9-bottom-sheet-footer-button-spacing: 10px;\n --g9-layout-g9-bottom-sheet-footer-padding-top: 10px;\n --g9-layout-g9-bottom-sheet-footer-padding-end: 10px;\n --g9-layout-g9-bottom-sheet-footer-padding-bottom: 10px;\n --g9-layout-g9-bottom-sheet-footer-padding-start: 10px;\n --g9-layout-map-bottom-bar-margin-top: 0px;\n --g9-layout-map-bottom-bar-margin-end: 12px;\n --g9-layout-map-bottom-bar-margin-bottom: 12px;\n --g9-layout-map-bottom-bar-margin-start: 12px;\n}\n"],"sourceRoot":""}
1
+ {"version":3,"sources":["webpack://./src/provider/theme.css"],"names":[],"mappings":"AACA;EAAE,qBAAqB;EACrB,qBAAqB;EACrB,+BAA+B;EAC/B,kCAAkC;EAClC,4BAA4B;EAC5B,2BAA2B;EAC3B,6BAA6B;EAC7B,uBAAuB;EACvB,uBAAuB;EACvB,iCAAiC;EACjC,oCAAoC;EACpC,8BAA8B;EAC9B,sBAAsB;EACtB,sBAAsB;EACtB,gCAAgC;EAChC,mCAAmC;EACnC,6BAA6B;EAC7B,wBAAwB;EACxB,wBAAwB;EACxB,kCAAkC;EAClC,qCAAqC;EACrC,+BAA+B;EAC/B,mBAAmB;EACnB,mBAAmB;EACnB,6BAA6B;EAC7B,gCAAgC;EAChC,0BAA0B;EAC1B,qBAAqB;EACrB,qBAAqB;EACrB,+BAA+B;EAC/B,kCAAkC;EAClC,4BAA4B;EAC5B,qBAAqB;EACrB,qBAAqB;EACrB,+BAA+B;EAC/B,kCAAkC;EAClC,4BAA4B;EAC5B,kBAAkB;EAClB,kBAAkB;EAClB,4BAA4B;EAC5B,+BAA+B;EAC/B,yBAAyB;EACzB,qBAAqB;EACrB,6BAA6B;EAC7B,4BAA4B;EAC5B,wBAAwB;EACxB,2BAA2B;EAC3B,kCAAkC;EAClC,kBAAkB;EAClB,wBAAwB;EACxB,6BAA6B;EAC7B,gCAAgC;EAChC,4BAA4B;EAC5B,6BAA6B;EAC7B,gCAAgC;EAChC,6BAA6B;EAC7B,uCAAuC;EACvC,oCAAoC;EACpC,+BAA+B;EAC/B,mCAAmC;EACnC,mCAAmC;EACnC,yBAAyB;EACzB,yBAAyB;EACzB,iBAAiB;EACjB,uBAAuB;EACvB,uBAAuB;EACvB,6BAA6B;EAC7B,0BAA0B;EAC1B,4BAA4B;EAC5B,2BAA2B;EAC3B,2BAA2B;EAC3B,gBAAgB;EAChB,gBAAgB;EAChB,gBAAgB;EAChB,eAAe;EACf,qBAAqB;EACrB,4BAA4B;EAC5B,mBAAmB;EACnB,6BAA6B;EAC7B,sBAAsB;EACtB,gCAAgC;EAChC,0BAA0B;EAC1B,yBAAyB;EACzB,wBAAwB;EACxB,qBAAqB;EACrB,wBAAwB;EACxB,+BAA+B;EAC/B,kCAAkC;EAClC,4BAA4B;EAC5B,2BAA2B;EAC3B,6BAA6B;EAC7B,2BAA2B;EAC3B,0BAA0B;EAC1B,kCAAkC;EAClC,+BAA+B;AACjC;;AAGA;EAAE,qBAAqB;EACrB,wBAAwB;EACxB,+BAA+B;EAC/B,kCAAkC;EAClC,4BAA4B;EAC5B,2BAA2B;EAC3B,6BAA6B;EAC7B,uBAAuB;EACvB,0BAA0B;EAC1B,iCAAiC;EACjC,oCAAoC;EACpC,8BAA8B;EAC9B,sBAAsB;EACtB,yBAAyB;EACzB,gCAAgC;EAChC,mCAAmC;EACnC,6BAA6B;EAC7B,wBAAwB;EACxB,2BAA2B;EAC3B,kCAAkC;EAClC,qCAAqC;EACrC,+BAA+B;EAC/B,mBAAmB;EACnB,sBAAsB;EACtB,6BAA6B;EAC7B,gCAAgC;EAChC,0BAA0B;EAC1B,qBAAqB;EACrB,wBAAwB;EACxB,+BAA+B;EAC/B,kCAAkC;EAClC,4BAA4B;EAC5B,qBAAqB;EACrB,wBAAwB;EACxB,+BAA+B;EAC/B,kCAAkC;EAClC,4BAA4B;EAC5B,kBAAkB;EAClB,qBAAqB;EACrB,4BAA4B;EAC5B,+BAA+B;EAC/B,yBAAyB;EACzB,qBAAqB;EACrB,6BAA6B;EAC7B,4BAA4B;EAC5B,wBAAwB;EACxB,2BAA2B;EAC3B,kCAAkC;EAClC,qBAAqB;EACrB,wBAAwB;EACxB,6BAA6B;EAC7B,gCAAgC;EAChC,4BAA4B;EAC5B,6BAA6B;EAC7B,gCAAgC;EAChC,6BAA6B;EAC7B,uCAAuC;EACvC,oCAAoC;EACpC,+BAA+B;EAC/B,mCAAmC;EACnC,sCAAsC;EACtC,4BAA4B;EAC5B,yBAAyB;EACzB,iBAAiB;EACjB,uBAAuB;EACvB,mBAAmB;EACnB,6BAA6B;EAC7B,0BAA0B;EAC1B,4BAA4B;EAC5B,2BAA2B;EAC3B,2BAA2B;EAC3B,gBAAgB;EAChB,gBAAgB;EAChB,gBAAgB;EAChB,eAAe;EACf,qBAAqB;EACrB,4BAA4B;EAC5B,mBAAmB;EACnB,6BAA6B;EAC7B,sBAAsB;EACtB,gCAAgC;EAChC,6BAA6B;EAC7B,yBAAyB;EACzB,2BAA2B;EAC3B,qBAAqB;EACrB,wBAAwB;EACxB,+BAA+B;EAC/B,kCAAkC;EAClC,4BAA4B;EAC5B,2BAA2B;EAC3B,6BAA6B;EAC7B,8BAA8B;EAC9B,0BAA0B;EAC1B,kCAAkC;EAClC,+BAA+B;AACjC;;AAGA;EAAE,0BAA0B;EAC1B,0BAA0B;EAC1B,2BAA2B;EAC3B,2BAA2B;EAC3B,2BAA2B;EAC3B,8BAA8B;EAC9B,gCAAgC;EAChC,qCAAqC;EACrC,sCAAsC;EACtC,qCAAqC;EACrC,oCAAoC;EACpC,0CAA0C;EAC1C,iCAAiC;EACjC,2CAA2C;EAC3C,0CAA0C;EAC1C,4CAA4C;EAC5C,2CAA2C;EAC3C,yCAAyC;EACzC,0CAA0C;EAC1C,kDAAkD;EAClD,6CAA6C;EAC7C,iDAAiD;EACjD,+CAA+C;EAC/C,uCAAuC;EACvC,gDAAgD;EAChD,+CAA+C;EAC/C,uCAAuC;EACvC,2CAA2C;EAC3C,wCAAwC;EACxC,6CAA6C;EAC7C,4CAA4C;EAC5C,yCAAyC;EACzC,oCAAoC;EACpC,mCAAmC;EACnC,kDAAkD;EAClD,2DAA2D;EAC3D,oDAAoD;EACpD,mCAAmC;EACnC,mCAAmC;EACnC,oCAAoC;EACpC,mCAAmC;EACnC,kCAAkC;EAClC,8BAA8B;EAC9B,+BAA+B;EAC/B,8BAA8B;EAC9B,sCAAsC;EACtC,gCAAgC;EAChC,uCAAuC;EACvC,gCAAgC;EAChC,oCAAoC;EACpC,qCAAqC;EACrC,yCAAyC;EACzC,kCAAkC;EAClC,gCAAgC;EAChC,iCAAiC;EACjC,4CAA4C;EAC5C,kDAAkD;EAClD,wCAAwC;EACxC,iCAAiC;EACjC,sCAAsC;EACtC,oCAAoC;EACpC,yCAAyC;EACzC,qCAAqC;EACrC,6BAA6B;EAC7B,yCAAyC;EACzC,gCAAgC;EAChC,gCAAgC;EAChC,mCAAmC;EACnC,uCAAuC;EACvC,gCAAgC;EAChC,6BAA6B;EAC7B,6CAA6C;EAC7C,6CAA6C;EAC7C,gCAAgC;EAChC,sCAAsC;EACtC,gCAAgC;EAChC,wCAAwC;EACxC,iCAAiC;EACjC,6CAA6C;EAC7C,uCAAuC;EACvC,+BAA+B;EAC/B,+BAA+B;EAC/B,kCAAkC;EAClC,oCAAoC;EACpC,0CAA0C;EAC1C,4CAA4C;EAC5C,wCAAwC;EACxC,8CAA8C;EAC9C,6CAA6C;EAC7C,qCAAqC;EACrC,iCAAiC;EACjC,sCAAsC;EACtC,yCAAyC;EACzC,2CAA2C;EAC3C,sCAAsC;EACtC,kDAAkD;EAClD,uCAAuC;EACvC,uCAAuC;EACvC,yCAAyC;EACzC,qCAAqC;EACrC,uCAAuC;EACvC,0CAA0C;EAC1C,uCAAuC;EACvC,gCAAgC;EAChC,wCAAwC;EACxC,2CAA2C;EAC3C,gDAAgD;EAChD,yCAAyC;EACzC,wCAAwC;EACxC,kDAAkD;EAClD,2CAA2C;EAC3C,6CAA6C;EAC7C,6CAA6C;EAC7C,0CAA0C;EAC1C,oCAAoC;EACpC,oCAAoC;EACpC,0CAA0C;EAC1C,+CAA+C;EAC/C,0CAA0C;EAC1C,uCAAuC;EACvC,gDAAgD;EAChD,+CAA+C;EAC/C,iDAAiD;EACjD,6CAA6C;EAC7C,2CAA2C;EAC3C,qCAAqC;EACrC,wCAAwC;EACxC,0CAA0C;EAC1C,oCAAoC;EACpC,uCAAuC;EACvC,yCAAyC;EACzC,yCAAyC;EACzC,2CAA2C;EAC3C,8CAA8C;EAC9C,+CAA+C;EAC/C,4CAA4C;EAC5C,6CAA6C;EAC7C,gDAAgD;EAChD,8CAA8C;EAC9C,6CAA6C;EAC7C,gDAAgD;EAChD,mDAAmD;EACnD,mCAAmC;EACnC,qCAAqC;EACrC,mCAAmC;EACnC,oCAAoC;EACpC,oCAAoC;EACpC,2CAA2C;EAC3C,2CAA2C;EAC3C,2CAA2C;EAC3C,2CAA2C;EAC3C,wCAAwC;EACxC,oCAAoC;EACpC,sCAAsC;EACtC,+CAA+C;EAC/C,sDAAsD;EACtD,oDAAoD;EACpD,iDAAiD;EACjD,kDAAkD;EAClD,mCAAmC;EACnC,mCAAmC;EACnC,uCAAuC;EACvC,0CAA0C;EAC1C,qCAAqC;EACrC,yCAAyC;EACzC,2CAA2C;EAC3C,kCAAkC;EAClC,mCAAmC;EACnC,sCAAsC;EACtC,0CAA0C;EAC1C,uCAAuC;EACvC,0CAA0C;EAC1C,4CAA4C;EAC5C,2CAA2C;EAC3C,8CAA8C;EAC9C,8BAA8B;EAC9B,sCAAsC;EACtC,qCAAqC;EACrC,mCAAmC;EACnC,iDAAiD;EACjD,+CAA+C;EAC/C,gDAAgD;EAChD,2CAA2C;EAC3C,yCAAyC;EACzC,gDAAgD;EAChD,uCAAuC;EACvC,0CAA0C;EAC1C,0CAA0C;EAC1C,4CAA4C;EAC5C,6CAA6C;EAC7C,kDAAkD;EAClD,mDAAmD;EACnD,gCAAgC;EAChC,8BAA8B;EAC9B,+BAA+B;EAC/B,+BAA+B;EAC/B,iCAAiC;EACjC,qCAAqC;EACrC,kCAAkC;EAClC,qCAAqC;EACrC,yCAAyC;EACzC,sDAAsD;EACtD,oDAAoD;EACpD,uDAAuD;EACvD,yDAAyD;EACzD,oDAAoD;EACpD,kDAAkD;EAClD,qDAAqD;EACrD,uDAAuD;EACvD,8CAA8C;EAC9C,+CAA+C;EAC/C,iDAAiD;EACjD,iDAAiD;EACjD,kCAAkC;EAClC,kCAAkC;EAClC,qCAAqC;EACrC,oCAAoC;EACpC,yCAAyC;EACzC,yCAAyC;EACzC,2CAA2C;EAC3C,2CAA2C;EAC3C,yDAAyD;EACzD,yDAAyD;EACzD,4DAA4D;EAC5D,2DAA2D;EAC3D,qCAAqC;EACrC,oCAAoC;EACpC,uCAAuC;EACvC,sCAAsC;EACtC,uCAAuC;EACvC,uCAAuC;EACvC,2CAA2C;EAC3C,yCAAyC;EACzC,2CAA2C;EAC3C,4CAA4C;EAC5C,+CAA+C;EAC/C,8CAA8C;EAC9C,yCAAyC;EACzC,0CAA0C;EAC1C,4CAA4C;EAC5C,4CAA4C;EAC5C,kCAAkC;EAClC,kCAAkC;EAClC,qCAAqC;EACrC,oCAAoC;EACpC,uCAAuC;EACvC,uCAAuC;EACvC,0CAA0C;EAC1C,yCAAyC;EACzC,2CAA2C;EAC3C,2CAA2C;EAC3C,8CAA8C;EAC9C,6CAA6C;EAC7C,4CAA4C;EAC5C,2CAA2C;EAC3C,8CAA8C;EAC9C,6CAA6C;EAC7C,iDAAiD;EACjD,4DAA4D;EAC5D,yDAAyD;EACzD,0DAA0D;EAC1D,mDAAmD;EACnD,mDAAmD;EACnD,wDAAwD;EACxD,wDAAwD;EACxD,6DAA6D;EAC7D,sDAAsD;EACtD,uDAAuD;EACvD,oDAAoD;EACpD,oDAAoD;EACpD,uDAAuD;EACvD,sDAAsD;EACtD,0CAA0C;EAC1C,2CAA2C;EAC3C,8CAA8C;EAC9C,6CAA6C;AAC/C","sourcesContent":["/* Generated by renderThemeStylesheet (src/provider/theme-css.ts); `npm run gen:theme-css` rewrites it. */\n.g9-theme-light {\n --g9-primary: #349D57;\n --g9-on-primary: #FFFFFF;\n --g9-primary-container: #D6F0DF;\n --g9-on-primary-container: #0E3B1E;\n --g9-primary-border: #2D8A4C;\n --g9-primary-hover: #2D8A4C;\n --g9-primary-pressed: #267A42;\n --g9-secondary: #4A7C3F;\n --g9-on-secondary: #FFFFFF;\n --g9-secondary-container: #E3F0DF;\n --g9-on-secondary-container: #16310F;\n --g9-secondary-border: #3C6633;\n --g9-tertiary: #3A7DB5;\n --g9-on-tertiary: #FFFFFF;\n --g9-tertiary-container: #D8EAF7;\n --g9-on-tertiary-container: #0A2A44;\n --g9-tertiary-border: #316596;\n --g9-quaternary: #7B5EA7;\n --g9-on-quaternary: #FFFFFF;\n --g9-quaternary-container: #EAE1F5;\n --g9-on-quaternary-container: #2E1F45;\n --g9-quaternary-border: #6B4F92;\n --g9-error: #C8364B;\n --g9-on-error: #FFFFFF;\n --g9-error-container: #FADCE0;\n --g9-on-error-container: #5A0814;\n --g9-error-border: #A82A3D;\n --g9-warning: #C77A14;\n --g9-on-warning: #FFFFFF;\n --g9-warning-container: #FBEED5;\n --g9-on-warning-container: #4A2E05;\n --g9-warning-border: #A8650F;\n --g9-success: #2F8B4A;\n --g9-on-success: #FFFFFF;\n --g9-success-container: #E2F3E8;\n --g9-on-success-container: #0C3019;\n --g9-success-border: #267A3E;\n --g9-info: #2B6FB3;\n --g9-on-info: #FFFFFF;\n --g9-info-container: #DCE9F7;\n --g9-on-info-container: #0B2D4D;\n --g9-info-border: #245E99;\n --g9-outline: #C3C7C3;\n --g9-outline-variant: #DDE0DD;\n --g9-outline-border: #989E98;\n --g9-background: #F7F8F7;\n --g9-on-background: #181A18;\n --g9-background-secondary: #EEEFEE;\n --g9-surface: #FFFFFF;\n --g9-on-surface: #181A18;\n --g9-surface-variant: #EFF1EF;\n --g9-on-surface-variant: #525852;\n --g9-surface-border: #DDE0DD;\n --g9-inverse-surface: #14181A;\n --g9-inverse-on-surface: #F4F6F4;\n --g9-inverse-primary: #7BD88F;\n --g9-surface-container-highest: #E6E8E6;\n --g9-surface-container-high: #ECEEEC;\n --g9-surface-container: #F1F2F1;\n --g9-surface-container-low: #F7F8F7;\n --g9-surface-container-lowest: #FFFFFF;\n --g9-surface-bright: #FFFFFF;\n --g9-surface-dim: #E4E6E4;\n --g9-scrim: rgba(0, 0, 0, 0.6);\n --g9-scrim-light: rgba(0, 0, 0, 0.4);\n --g9-overlay: rgba(0, 0, 0, 0.078431375);\n --g9-overlay-light: rgba(0, 0, 0, 0.039215688);\n --g9-text-primary: #181A18;\n --g9-text-secondary: #525852;\n --g9-text-tertiary: #6E756E;\n --g9-text-disabled: #C3C7C3;\n --g9-white: #FFFFFF;\n --g9-black: #000000;\n --g9-light: #EEEEEE;\n --g9-dark: #222222;\n --g9-divider: #EEEFEE;\n --g9-divider-strong: #DDE0DD;\n --g9-focus: #349D57;\n --g9-focus-visible: rgba(52, 157, 87, 0.34901962);\n --g9-disabled: #C3C7C3;\n --g9-disabled-container: #EEEFEE;\n --g9-card-background: #FFFFFF;\n --g9-card-border: #DDE0DD;\n --g9-card-elevated: #FFFFFF;\n --g9-default: #EEEFEE;\n --g9-on-default: #181A18;\n --g9-default-container: #DDE0DD;\n --g9-on-default-container: #181A18;\n --g9-default-border: #C3C7C3;\n --g9-default-hover: #DDE0DD;\n --g9-default-pressed: #C3C7C3;\n --g9-input-background: #FFFFFF;\n --g9-input-border: #C3C7C3;\n --g9-input-border-focused: #349D57;\n --g9-input-placeholder: #989E98;\n}\n\n.g9-theme-dark {\n --g9-primary: #45A664;\n --g9-on-primary: #062814;\n --g9-primary-container: #173E25;\n --g9-on-primary-container: #BDE5C9;\n --g9-primary-border: #338E51;\n --g9-primary-hover: #52B271;\n --g9-primary-pressed: #338E51;\n --g9-secondary: #6BBD5A;\n --g9-on-secondary: #0C2207;\n --g9-secondary-container: #1A3016;\n --g9-on-secondary-container: #C8E6BF;\n --g9-secondary-border: #2C4A23;\n --g9-tertiary: #6AAEE0;\n --g9-on-tertiary: #04243F;\n --g9-tertiary-container: #0E2540;\n --g9-on-tertiary-container: #C2E0F7;\n --g9-tertiary-border: #1E456B;\n --g9-quaternary: #A78BD1;\n --g9-on-quaternary: #2A1B40;\n --g9-quaternary-container: #2E2340;\n --g9-on-quaternary-container: #E0D4F0;\n --g9-quaternary-border: #4A3A66;\n --g9-error: #E66478;\n --g9-on-error: #2C0B12;\n --g9-error-container: #461620;\n --g9-on-error-container: #F7CDD4;\n --g9-error-border: #7A2734;\n --g9-warning: #E3A04B;\n --g9-on-warning: #2A1A05;\n --g9-warning-container: #3D2A0E;\n --g9-on-warning-container: #F7DEB5;\n --g9-warning-border: #6B4A1C;\n --g9-success: #4BBD6B;\n --g9-on-success: #062814;\n --g9-success-container: #173E25;\n --g9-on-success-container: #BDE5C9;\n --g9-success-border: #2A7E46;\n --g9-info: #6BA6E0;\n --g9-on-info: #07203A;\n --g9-info-container: #142F4D;\n --g9-on-info-container: #C2DBF7;\n --g9-info-border: #27517D;\n --g9-outline: #3D423D;\n --g9-outline-variant: #272A27;\n --g9-outline-border: #525852;\n --g9-background: #0C0D0C;\n --g9-on-background: #F4F6F4;\n --g9-background-secondary: #15171A;\n --g9-surface: #15171A;\n --g9-on-surface: #F4F6F4;\n --g9-surface-variant: #22262A;\n --g9-on-surface-variant: #C3C7C3;\n --g9-surface-border: #272A27;\n --g9-inverse-surface: #F4F6F4;\n --g9-inverse-on-surface: #14181A;\n --g9-inverse-primary: #349D57;\n --g9-surface-container-highest: #2A2E32;\n --g9-surface-container-high: #22262A;\n --g9-surface-container: #1B1E20;\n --g9-surface-container-low: #15171A;\n --g9-surface-container-lowest: #101113;\n --g9-surface-bright: #2A2E32;\n --g9-surface-dim: #0C0D0C;\n --g9-scrim: rgba(0, 0, 0, 0.8);\n --g9-scrim-light: rgba(0, 0, 0, 0.6);\n --g9-overlay: rgba(0, 0, 0, 0.2);\n --g9-overlay-light: rgba(0, 0, 0, 0.101960786);\n --g9-text-primary: #F4F6F4;\n --g9-text-secondary: #C3C7C3;\n --g9-text-tertiary: #989E98;\n --g9-text-disabled: #525852;\n --g9-white: #FFFFFF;\n --g9-black: #000000;\n --g9-light: #EEEEEE;\n --g9-dark: #222222;\n --g9-divider: #1F2222;\n --g9-divider-strong: #272A27;\n --g9-focus: #45A664;\n --g9-focus-visible: rgba(75, 189, 107, 0.4);\n --g9-disabled: #525852;\n --g9-disabled-container: #1B1E20;\n --g9-card-background: #15171A;\n --g9-card-border: #272A27;\n --g9-card-elevated: #1B1E20;\n --g9-default: #22262A;\n --g9-on-default: #F4F6F4;\n --g9-default-container: #2A2E32;\n --g9-on-default-container: #F4F6F4;\n --g9-default-border: #3D423D;\n --g9-default-hover: #2A2E32;\n --g9-default-pressed: #3D423D;\n --g9-input-background: #15171A;\n --g9-input-border: #3D423D;\n --g9-input-border-focused: #45A664;\n --g9-input-placeholder: #989E98;\n}\n\n.g9-provider {\n --g9-metric-radius-xs: 6px;\n --g9-metric-radius-sm: 8px;\n --g9-metric-radius-md: 12px;\n --g9-metric-radius-lg: 16px;\n --g9-metric-radius-xl: 20px;\n --g9-metric-radius-pill: 999px;\n --g9-metric-control-height: 52px;\n --g9-metric-button-height-small: 36px;\n --g9-metric-button-height-medium: 44px;\n --g9-metric-button-height-large: 48px;\n --g9-metric-button-height-hero: 52px;\n --g9-metric-input-horizontal-padding: 14px;\n --g9-metric-input-icon-size: 20px;\n --g9-metric-leading-icon-outer-margin: 12px;\n --g9-metric-leading-icon-inner-margin: 8px;\n --g9-metric-trailing-icon-outer-margin: 12px;\n --g9-metric-trailing-icon-inner-margin: 8px;\n --g9-metric-leading-icon-slot-width: 40px;\n --g9-metric-trailing-icon-slot-width: 40px;\n --g9-metric-editor-trailing-icon-bottom-inset: 8px;\n --g9-metric-editor-trailing-slot-height: 36px;\n --g9-metric-input-label-leading-icon-offset: 26px;\n --g9-metric-floating-label-floated-extra-x: 8px;\n --g9-metric-outline-notch-text-gap: 8px;\n --g9-metric-floating-label-font-size-float: 11px;\n --g9-metric-floating-label-font-size-rest: 15px;\n --g9-metric-floating-label-height: 22px;\n --g9-metric-floating-label-floated-y: -11px;\n --g9-metric-floating-label-rest-scale: 1;\n --g9-metric-floating-label-floated-scale: 0.78;\n --g9-metric-floating-label-duration-ms: 160ms;\n --g9-metric-floating-label-clearance: 6px;\n --g9-metric-helper-font-size: 11.5px;\n --g9-metric-counter-font-size: 11px;\n --g9-metric-outlined-field-stroke-thickness: 1.5px;\n --g9-metric-outlined-field-emphasis-stroke-thickness: 2.5px;\n --g9-metric-outlined-field-focus-halo-thickness: 6px;\n --g9-metric-focus-ring-opacity: 0.22;\n --g9-metric-button-font-small: 12px;\n --g9-metric-button-font-medium: 14px;\n --g9-metric-button-font-large: 15px;\n --g9-metric-button-font-hero: 16px;\n --g9-metric-switch-width: 56px;\n --g9-metric-switch-height: 32px;\n --g9-metric-switch-thumb: 24px;\n --g9-metric-switch-thumb-pressed: 30px;\n --g9-metric-slider-height: 104px;\n --g9-metric-slider-height-compact: 36px;\n --g9-metric-slider-track-y: 52px;\n --g9-metric-slider-track-height: 8px;\n --g9-metric-slider-thumb-radius: 14px;\n --g9-metric-slider-horizontal-inset: 16px;\n --g9-metric-slider-label-gap: 18px;\n --g9-metric-pin-cell-width: 44px;\n --g9-metric-pin-cell-height: 52px;\n --g9-metric-pin-cell-stroke-thickness: 1.4px;\n --g9-metric-pin-cell-stroke-thickness-focused: 2px;\n --g9-metric-pin-cell-corner-radius: 10px;\n --g9-metric-pin-cell-spacing: 8px;\n --g9-metric-pin-separator-spacing: 6px;\n --g9-metric-pin-cell-font-size: 22px;\n --g9-metric-pin-separator-font-size: 22px;\n --g9-metric-progress-bar-height: 10px;\n --g9-metric-chip-height: 36px;\n --g9-metric-chip-horizontal-padding: 14px;\n --g9-metric-chip-font-size: 13px;\n --g9-metric-segment-height: 44px;\n --g9-metric-segment-font-size: 14px;\n --g9-metric-segment-corner-radius: 10px;\n --g9-metric-chip-icon-size: 16px;\n --g9-metric-chip-spacing: 6px;\n --g9-metric-chip-selection-animation-ms: 140ms;\n --g9-metric-chip-checkmark-animation-ms: 120ms;\n --g9-metric-tab-bar-height: 52px;\n --g9-metric-tab-bar-inner-padding: 4px;\n --g9-metric-tab-bar-radius: 26px;\n --g9-metric-tab-pill-vertical-inset: 2px;\n --g9-metric-tab-pill-radius: 18px;\n --g9-metric-tab-cell-horizontal-padding: 16px;\n --g9-metric-tab-bar-to-content-gap: 8px;\n --g9-metric-tab-font-size: 13px;\n --g9-metric-tab-icon-size: 16px;\n --g9-metric-tab-badge-height: 18px;\n --g9-metric-tab-content-radius: 16px;\n --g9-metric-tab-underline-thickness: 2.5px;\n --g9-metric-tab-bar-edge-line-thickness: 1px;\n --g9-metric-tab-separator-thickness: 1px;\n --g9-metric-tab-separator-vertical-inset: 12px;\n --g9-metric-tab-content-default-padding: 20px;\n --g9-metric-drum-column-height: 220px;\n --g9-metric-drum-row-height: 44px;\n --g9-metric-drum-label-font-size: 10px;\n --g9-metric-drum-selected-font-size: 17px;\n --g9-metric-drum-unselected-font-size: 16px;\n --g9-metric-selection-row-height: 52px;\n --g9-metric-selection-row-horizontal-padding: 16px;\n --g9-metric-selection-max-height: 520px;\n --g9-metric-selection-min-height: 220px;\n --g9-metric-selection-row-font-size: 14px;\n --g9-metric-selection-icon-size: 18px;\n --g9-metric-selection-avatar-size: 28px;\n --g9-metric-selection-check-box-size: 20px;\n --g9-metric-selection-check-radius: 6px;\n --g9-metric-check-box-size: 20px;\n --g9-metric-check-box-corner-radius: 6px;\n --g9-metric-check-box-stroke-thickness: 2px;\n --g9-metric-check-box-mark-stroke-thickness: 2px;\n --g9-metric-check-box-halo-diameter: 40px;\n --g9-metric-check-box-label-spacing: 2px;\n --g9-metric-check-box-label-vertical-padding: 12px;\n --g9-metric-check-box-label-font-size: 14px;\n --g9-metric-check-box-toggle-duration-ms: 200ms;\n --g9-metric-check-box-morph-duration-ms: 150ms;\n --g9-metric-nav-card-icon-badge-size: 38px;\n --g9-metric-nav-card-padding-x: 14px;\n --g9-metric-nav-card-padding-y: 12px;\n --g9-metric-nav-card-title-font-size: 14px;\n --g9-metric-nav-card-subtitle-font-size: 11.5px;\n --g9-metric-nav-card-value-font-size: 13px;\n --g9-metric-nav-card-chevron-size: 24px;\n --g9-metric-nav-card-coming-soon-font-size: 10px;\n --g9-metric-nav-card-coming-soon-padding-x: 7px;\n --g9-metric-nav-card-coming-soon-padding-y: 3.5px;\n --g9-metric-nav-card-coming-soon-radius: 11px;\n --g9-metric-separator-title-font-size: 10px;\n --g9-metric-separator-icon-size: 12px;\n --g9-metric-expander-header-height: 48px;\n --g9-metric-expander-title-font-size: 15px;\n --g9-metric-expander-icon-size: 20px;\n --g9-metric-expander-chevron-size: 22px;\n --g9-metric-expander-header-spacing: 10px;\n --g9-metric-expander-content-top-gap: 8px;\n --g9-metric-expander-header-padding-x: 14px;\n --g9-metric-expander-chevron-rotation-ms: 220ms;\n --g9-metric-expander-content-animation-ms: 220ms;\n --g9-metric-cascade-panel-animation-ms: 280ms;\n --g9-metric-cascade-panel-header-height: 48px;\n --g9-metric-cascade-panel-header-font-size: 15px;\n --g9-metric-cascade-panel-back-icon-size: 22px;\n --g9-metric-cascade-panel-header-padding: 8px;\n --g9-metric-cascade-panel-parallax-fraction: 0.18;\n --g9-metric-cascade-panel-underlay-dim-opacity: 0.55;\n --g9-metric-press-duration-ms: 80ms;\n --g9-metric-release-duration-ms: 150ms;\n --g9-metric-hover-duration-ms: 80ms;\n --g9-metric-ripple-duration-ms: 350ms;\n --g9-metric-icon-press-scale-to: 0.92;\n --g9-metric-tab-indicator-duration-ms: 240ms;\n --g9-metric-tab-content-transition-ms: 160ms;\n --g9-metric-switch-toggle-duration-ms: 240ms;\n --g9-metric-progress-value-duration-ms: 300ms;\n --g9-metric-indeterminate-frame-ms: 16ms;\n --g9-metric-indeterminate-step: 0.012;\n --g9-metric-intro-overlay-opacity: 0.52;\n --g9-metric-intro-overlay-top-opacity-ratio: 0.4;\n --g9-metric-intro-startup-cover-fade-duration-ms: 320ms;\n --g9-metric-intro-initial-video-seek-timeout-ms: 900ms;\n --g9-metric-intro-media-fade-in-duration-ms: 420ms;\n --g9-metric-intro-media-fade-out-duration-ms: 420ms;\n --g9-metric-intro-logo-width: 192px;\n --g9-metric-intro-logo-height: 34px;\n --g9-metric-intro-title-font-size: 18px;\n --g9-metric-intro-subtitle-font-size: 14px;\n --g9-metric-intro-nav-font-size: 14px;\n --g9-metric-intro-step-active-width: 28px;\n --g9-metric-intro-step-inactive-width: 20px;\n --g9-metric-intro-step-height: 4px;\n --g9-metric-intro-step-spacing: 6px;\n --g9-metric-intro-chrome-padding: 20px;\n --g9-metric-intro-header-top-padding: 16px;\n --g9-metric-intro-logo-top-margin: 48px;\n --g9-metric-intro-text-bottom-margin: 12px;\n --g9-metric-intro-nav-min-touch-height: 48px;\n --g9-metric-intro-nav-min-touch-width: 72px;\n --g9-metric-intro-content-bottom-padding: 24px;\n --g9-layout-edge-spacing: 10px;\n --g9-layout-control-corner-radius: 9px;\n --g9-layout-toolbar-button-size: 42px;\n --g9-layout-toolbar-icon-size: 24px;\n --g9-layout-fit-content-loading-min-height: 180px;\n --g9-layout-modal-header-icon-button-size: 30px;\n --g9-layout-modal-header-icon-title-spacing: 3px;\n --g9-layout-sheet-header-vertical-gap: 10px;\n --g9-layout-sheet-header-min-height: 64px;\n --g9-layout-sheet-header-title-font-size: 16.2px;\n --g9-layout-modal-inner-icon-size: 39px;\n --g9-layout-modal-sheet-handle-width: 90px;\n --g9-layout-modal-sheet-handle-height: 5px;\n --g9-layout-modal-target-header-height: 64px;\n --g9-layout-modal-target-tab-bar-height: 56px;\n --g9-layout-modal-target-category-row-height: 66px;\n --g9-layout-modal-target-footer-button-height: 52px;\n --g9-layout-spacing-x-small: 2px;\n --g9-layout-spacing-small: 4px;\n --g9-layout-spacing-medium: 8px;\n --g9-layout-spacing-large: 12px;\n --g9-layout-spacing-x-large: 16px;\n --g9-layout-control-cell-height: 52px;\n --g9-layout-min-touch-target: 48px;\n --g9-layout-site-thumbnail-size: 58px;\n --g9-layout-map-chrome-edge-spacing: 12px;\n --g9-layout-control-corner-radius-value-top-start: 9px;\n --g9-layout-control-corner-radius-value-top-end: 9px;\n --g9-layout-control-corner-radius-value-bottom-end: 9px;\n --g9-layout-control-corner-radius-value-bottom-start: 9px;\n --g9-layout-map-chrome-corner-radius-top-start: 24px;\n --g9-layout-map-chrome-corner-radius-top-end: 24px;\n --g9-layout-map-chrome-corner-radius-bottom-end: 24px;\n --g9-layout-map-chrome-corner-radius-bottom-start: 24px;\n --g9-layout-edge-horizontal-thickness-top: 0px;\n --g9-layout-edge-horizontal-thickness-end: 10px;\n --g9-layout-edge-horizontal-thickness-bottom: 0px;\n --g9-layout-edge-horizontal-thickness-start: 10px;\n --g9-layout-body-padding-top: 10px;\n --g9-layout-body-padding-end: 10px;\n --g9-layout-body-padding-bottom: 10px;\n --g9-layout-body-padding-start: 10px;\n --g9-layout-body-element-margin-top: 10px;\n --g9-layout-body-element-margin-end: 10px;\n --g9-layout-body-element-margin-bottom: 0px;\n --g9-layout-body-element-margin-start: 10px;\n --g9-layout-body-element-margin-with-bottom-gap-top: 10px;\n --g9-layout-body-element-margin-with-bottom-gap-end: 10px;\n --g9-layout-body-element-margin-with-bottom-gap-bottom: 10px;\n --g9-layout-body-element-margin-with-bottom-gap-start: 10px;\n --g9-layout-body-top-margin-top: 10px;\n --g9-layout-body-top-margin-end: 0px;\n --g9-layout-body-top-margin-bottom: 0px;\n --g9-layout-body-top-margin-start: 0px;\n --g9-layout-item-bottom-margin-top: 0px;\n --g9-layout-item-bottom-margin-end: 0px;\n --g9-layout-item-bottom-margin-bottom: 10px;\n --g9-layout-item-bottom-margin-start: 0px;\n --g9-layout-modal-base-body-margin-top: 0px;\n --g9-layout-modal-base-body-margin-end: 10px;\n --g9-layout-modal-base-body-margin-bottom: 10px;\n --g9-layout-modal-base-body-margin-start: 10px;\n --g9-layout-search-field-padding-top: 0px;\n --g9-layout-search-field-padding-end: 12px;\n --g9-layout-search-field-padding-bottom: 0px;\n --g9-layout-search-field-padding-start: 14px;\n --g9-layout-card-padding-top: 12px;\n --g9-layout-card-padding-end: 14px;\n --g9-layout-card-padding-bottom: 12px;\n --g9-layout-card-padding-start: 14px;\n --g9-layout-list-card-padding-top: 12px;\n --g9-layout-list-card-padding-end: 12px;\n --g9-layout-list-card-padding-bottom: 12px;\n --g9-layout-list-card-padding-start: 12px;\n --g9-layout-outlined-card-padding-top: 22px;\n --g9-layout-outlined-card-padding-end: 14px;\n --g9-layout-outlined-card-padding-bottom: 14px;\n --g9-layout-outlined-card-padding-start: 14px;\n --g9-layout-outlined-input-top-gap-top: 16px;\n --g9-layout-outlined-input-top-gap-end: 0px;\n --g9-layout-outlined-input-top-gap-bottom: 0px;\n --g9-layout-outlined-input-top-gap-start: 0px;\n --g9-layout-deferred-content-load-delay-ms: 369ms;\n --g9-layout-g9-bottom-sheet-footer-top-border-thickness: 1px;\n --g9-layout-g9-bottom-sheet-footer-max-buttons-per-row: 3;\n --g9-layout-g9-bottom-sheet-drag-handle-touch-height: 30px;\n --g9-layout-g9-bottom-sheet-drag-handle-width: 32px;\n --g9-layout-g9-bottom-sheet-drag-handle-height: 4px;\n --g9-layout-g9-bottom-sheet-backdrop-card-threshold: 0.75;\n --g9-layout-g9-bottom-sheet-backdrop-card-min-scale: 0.93;\n --g9-layout-g9-bottom-sheet-backdrop-card-translation-y: 12px;\n --g9-layout-g9-bottom-sheet-footer-button-height: 52px;\n --g9-layout-g9-bottom-sheet-footer-button-spacing: 10px;\n --g9-layout-g9-bottom-sheet-footer-padding-top: 10px;\n --g9-layout-g9-bottom-sheet-footer-padding-end: 10px;\n --g9-layout-g9-bottom-sheet-footer-padding-bottom: 10px;\n --g9-layout-g9-bottom-sheet-footer-padding-start: 10px;\n --g9-layout-map-bottom-bar-margin-top: 0px;\n --g9-layout-map-bottom-bar-margin-end: 12px;\n --g9-layout-map-bottom-bar-margin-bottom: 12px;\n --g9-layout-map-bottom-bar-margin-start: 12px;\n}\n"],"sourceRoot":""}
@@ -10,10 +10,20 @@ export declare function roundHalfEven(v: number): number;
10
10
  export declare function snapSliderValue(value: number, min: number, max: number, step: number): number;
11
11
  /** A range clamped, snapped and ordered (MAUI `CoerceRange`: start > end swaps). */
12
12
  export declare function coerceSliderRange(start: number, end: number, min: number, max: number, step: number): readonly [number, number];
13
- /** Value → lynx-ui's normalized `[0, 1]`. */
14
- export declare function sliderRatio(value: number, min: number, max: number): number;
15
- /** lynx-ui's normalized `[0, 1]` → value. */
16
- export declare function sliderValueAt(ratio: number, min: number, max: number): number;
13
+ /**
14
+ * Whether a track really is logarithmic (MAUI 1.4.9 `Logarithmic`): only with `minimum > 0` (and a real range); otherwise
15
+ * it stays linear, as MAUI's.
16
+ */
17
+ export declare function isLogTrack(logarithmic: boolean | undefined, min: number, max: number): boolean;
18
+ /** Value → lynx-ui's normalized `[0, 1]`; by ratio on a logarithmic track (equal distances = equal ratios). */
19
+ export declare function sliderRatio(value: number, min: number, max: number, logarithmic?: boolean): number;
20
+ /** lynx-ui's normalized `[0, 1]` → value; `exp` of the log-span on a logarithmic track. */
21
+ export declare function sliderValueAt(ratio: number, min: number, max: number, logarithmic?: boolean): number;
22
+ /**
23
+ * The value a logarithmic track snaps to (MAUI 1.4.9): two significant figures — a fixed step would swallow the low end
24
+ * (787 … 56,475 ha: a step of 100 turns every small site into the same value). Clamped to the bounds.
25
+ */
26
+ export declare function snapLogValue(value: number, min: number, max: number): number;
17
27
  /**
18
28
  * Formats a value with a .NET custom numeric format subset (MAUI `ValueFormat`, default `"0"`): one number pattern of
19
29
  * `0`, `#`, `,` (grouping) and `.` (fraction digits: `0` = always, `#` = when needed), with any literal text around it
@@ -1 +1 @@
1
- {"version":3,"file":"math.d.ts","sourceRoot":"","sources":["../../src/range-slider/math.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,KAAK,SAAS,EAAE,MAAM,+BAA+B,CAAC;AAK7E,oHAAoH;AACpH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAEnF;AAID,qFAAqF;AACrF,wBAAgB,aAAa,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAM/C;AAED,kIAAkI;AAClI,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAM7F;AAED,oFAAoF;AACpF,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,MAAM,EACb,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,GACX,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAI3B;AAED,6CAA6C;AAC7C,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAG3E;AAED,6CAA6C;AAC7C,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAG7E;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAAE,OAAO,EAAE,SAAS,GAAG,MAAM,CAqB9G"}
1
+ {"version":3,"file":"math.d.ts","sourceRoot":"","sources":["../../src/range-slider/math.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,KAAK,SAAS,EAAE,MAAM,+BAA+B,CAAC;AAK7E,oHAAoH;AACpH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAEnF;AAID,qFAAqF;AACrF,wBAAgB,aAAa,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAM/C;AAED,kIAAkI;AAClI,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAM7F;AAED,oFAAoF;AACpF,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,MAAM,EACb,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,GACX,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAI3B;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,WAAW,EAAE,OAAO,GAAG,SAAS,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAE9F;AAED,+GAA+G;AAC/G,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,WAAW,UAAQ,GAAG,MAAM,CAMhG;AAED,2FAA2F;AAC3F,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,WAAW,UAAQ,GAAG,MAAM,CAKlG;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAM5E;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAAE,OAAO,EAAE,SAAS,GAAG,MAAM,CAqB9G"}
@@ -34,13 +34,25 @@ function coerceSliderRange(start, end, min, max, step) {
34
34
  a
35
35
  ];
36
36
  }
37
- function sliderRatio(value, min, max) {
37
+ function isLogTrack(logarithmic, min, max) {
38
+ return true === logarithmic && min > 0 && max > min;
39
+ }
40
+ function sliderRatio(value, min, max, logarithmic = false) {
38
41
  const b = sliderBounds(min, max);
42
+ if (isLogTrack(logarithmic, b.min, b.max) && value > 0) return Math.min(1, Math.max(0, (Math.log(value) - Math.log(b.min)) / (Math.log(b.max) - Math.log(b.min))));
39
43
  return Math.min(1, Math.max(0, (value - b.min) / (b.max - b.min)));
40
44
  }
41
- function sliderValueAt(ratio, min, max) {
45
+ function sliderValueAt(ratio, min, max, logarithmic = false) {
46
+ const b = sliderBounds(min, max);
47
+ const r = Math.min(1, Math.max(0, ratio));
48
+ if (isLogTrack(logarithmic, b.min, b.max)) return Math.exp(Math.log(b.min) + r * (Math.log(b.max) - Math.log(b.min)));
49
+ return b.min + r * (b.max - b.min);
50
+ }
51
+ function snapLogValue(value, min, max) {
42
52
  const b = sliderBounds(min, max);
43
- return b.min + Math.min(1, Math.max(0, ratio)) * (b.max - b.min);
53
+ const magnitude = value > 0 ? 10 ** (Math.floor(Math.log10(value)) - 1) : 0;
54
+ const snapped = magnitude > 0 ? roundHalfEven(value / magnitude) * magnitude : value;
55
+ return tidy(Math.min(b.max, Math.max(b.min, snapped)));
44
56
  }
45
57
  function formatSliderValue(value, format, culture) {
46
58
  var _frac_match;
@@ -66,6 +78,6 @@ function formatSliderValue(value, format, culture) {
66
78
  });
67
79
  return unquote(pattern.slice(0, start)) + text + unquote(pattern.slice(start + body.length));
68
80
  }
69
- export { coerceSliderRange, formatSliderValue, roundHalfEven, sliderBounds, sliderRatio, sliderValueAt, snapSliderValue };
81
+ export { coerceSliderRange, formatSliderValue, isLogTrack, roundHalfEven, sliderBounds, sliderRatio, sliderValueAt, snapLogValue, snapSliderValue };
70
82
 
71
83
  //# sourceMappingURL=math.jsx.map
@@ -1 +1 @@
1
- {"version":3,"file":"range-slider/math.jsx","sources":["../../src/range-slider/math.ts"],"sourcesContent":["import { formatNumber, type G9Culture } from '@g9tm/lynxcontrols-foundation';\n\n// Value rules of the range slider (MAUI `G9RangeSlider` `EffectiveBounds`, `Snap`, `CoerceValue`, `CoerceRange`) and\n// its `ValueFormat` subset.\n\n/** The bounds every calculation uses: an empty or inverted range counts as `min … min + 1` (never written back). */\nexport function sliderBounds(min: number, max: number): { min: number; max: number } {\n return max > min ? { min, max } : { min, max: min + 1 };\n}\n\nconst tidy = (v: number) => Number(v.toFixed(10)) + 0;\n\n/** .NET `Math.Round(double)`: halves go to the even neighbour (2.5 → 2, 3.5 → 4). */\nexport function roundHalfEven(v: number): number {\n const floor = Math.floor(v);\n const diff = v - floor;\n if (diff > 0.5) return floor + 1;\n if (diff < 0.5) return floor;\n return floor % 2 === 0 ? floor : floor + 1;\n}\n\n/** Snaps to `min + k × step` (MAUI `Snap`, rounded half-to-even like .NET `Math.Round`) and clamps; `step <= 0` is continuous. */\nexport function snapSliderValue(value: number, min: number, max: number, step: number): number {\n const b = sliderBounds(min, max);\n const clamped = Math.min(b.max, Math.max(b.min, value));\n if (!(step > 0)) return tidy(clamped);\n const snapped = b.min + roundHalfEven((clamped - b.min) / step) * step;\n return tidy(Math.min(b.max, Math.max(b.min, snapped)));\n}\n\n/** A range clamped, snapped and ordered (MAUI `CoerceRange`: start > end swaps). */\nexport function coerceSliderRange(\n start: number,\n end: number,\n min: number,\n max: number,\n step: number,\n): readonly [number, number] {\n const a = snapSliderValue(start, min, max, step);\n const b = snapSliderValue(end, min, max, step);\n return a <= b ? [a, b] : [b, a];\n}\n\n/** Value → lynx-ui's normalized `[0, 1]`. */\nexport function sliderRatio(value: number, min: number, max: number): number {\n const b = sliderBounds(min, max);\n return Math.min(1, Math.max(0, (value - b.min) / (b.max - b.min)));\n}\n\n/** lynx-ui's normalized `[0, 1]` → value. */\nexport function sliderValueAt(ratio: number, min: number, max: number): number {\n const b = sliderBounds(min, max);\n return b.min + Math.min(1, Math.max(0, ratio)) * (b.max - b.min);\n}\n\n/**\n * Formats a value with a .NET custom numeric format subset (MAUI `ValueFormat`, default `\"0\"`): one number pattern of\n * `0`, `#`, `,` (grouping) and `.` (fraction digits: `0` = always, `#` = when needed), with any literal text around it\n * (`\"0°\"`, `\"0.0 kg\"`, `'$'0`); `%` multiplies by 100. Digits follow the culture.\n */\nexport function formatSliderValue(value: number, format: string | null | undefined, culture: G9Culture): string {\n const pattern = format && format.trim() !== '' ? format : '0';\n // Quoted text is literal: mask it before looking for the first numeric run.\n const masked = pattern.replace(/'[^']*'|\"[^\"]*\"/g, (q) => ' '.repeat(q.length));\n const m = /[#0,]+(?:\\.[#0]+)?|\\.[#0]+/.exec(masked);\n const start = m ? m.index : 0;\n const body = m ? m[0] : '';\n const unquote = (s: string) =>\n s.replace(/'([^']*)'|\"([^\"]*)\"/g, (_q, a: string | undefined, b: string | undefined) => a ?? b ?? '');\n const percent = masked.includes('%');\n if (body === '') return unquote(pattern);\n const [intPart = '', frac = ''] = body.split('.');\n const minFraction = (frac.match(/0/g) ?? []).length;\n const maxFraction = frac.length;\n const text = formatNumber(percent ? value * 100 : value, {\n numberingSystem: culture.numberingSystem,\n minimumFractionDigits: minFraction,\n maximumFractionDigits: maxFraction,\n useGrouping: intPart.includes(','),\n });\n return unquote(pattern.slice(0, start)) + text + unquote(pattern.slice(start + body.length));\n}\n"],"names":["sliderBounds","min","max","tidy","v","Number","roundHalfEven","floor","Math","diff","snapSliderValue","value","step","b","clamped","snapped","coerceSliderRange","start","end","a","sliderRatio","sliderValueAt","ratio","formatSliderValue","format","culture","_frac_match","pattern","masked","q","m","body","unquote","s","_q","_ref","percent","intPart","frac","minFraction","maxFraction","text","formatNumber"],"mappings":"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"}
1
+ {"version":3,"file":"range-slider/math.jsx","sources":["../../src/range-slider/math.ts"],"sourcesContent":["import { formatNumber, type G9Culture } from '@g9tm/lynxcontrols-foundation';\n\n// Value rules of the range slider (MAUI `G9RangeSlider` `EffectiveBounds`, `Snap`, `CoerceValue`, `CoerceRange`) and\n// its `ValueFormat` subset.\n\n/** The bounds every calculation uses: an empty or inverted range counts as `min … min + 1` (never written back). */\nexport function sliderBounds(min: number, max: number): { min: number; max: number } {\n return max > min ? { min, max } : { min, max: min + 1 };\n}\n\nconst tidy = (v: number) => Number(v.toFixed(10)) + 0;\n\n/** .NET `Math.Round(double)`: halves go to the even neighbour (2.5 → 2, 3.5 → 4). */\nexport function roundHalfEven(v: number): number {\n const floor = Math.floor(v);\n const diff = v - floor;\n if (diff > 0.5) return floor + 1;\n if (diff < 0.5) return floor;\n return floor % 2 === 0 ? floor : floor + 1;\n}\n\n/** Snaps to `min + k × step` (MAUI `Snap`, rounded half-to-even like .NET `Math.Round`) and clamps; `step <= 0` is continuous. */\nexport function snapSliderValue(value: number, min: number, max: number, step: number): number {\n const b = sliderBounds(min, max);\n const clamped = Math.min(b.max, Math.max(b.min, value));\n if (!(step > 0)) return tidy(clamped);\n const snapped = b.min + roundHalfEven((clamped - b.min) / step) * step;\n return tidy(Math.min(b.max, Math.max(b.min, snapped)));\n}\n\n/** A range clamped, snapped and ordered (MAUI `CoerceRange`: start > end swaps). */\nexport function coerceSliderRange(\n start: number,\n end: number,\n min: number,\n max: number,\n step: number,\n): readonly [number, number] {\n const a = snapSliderValue(start, min, max, step);\n const b = snapSliderValue(end, min, max, step);\n return a <= b ? [a, b] : [b, a];\n}\n\n/**\n * Whether a track really is logarithmic (MAUI 1.4.9 `Logarithmic`): only with `minimum > 0` (and a real range); otherwise\n * it stays linear, as MAUI's.\n */\nexport function isLogTrack(logarithmic: boolean | undefined, min: number, max: number): boolean {\n return logarithmic === true && min > 0 && max > min;\n}\n\n/** Value → lynx-ui's normalized `[0, 1]`; by ratio on a logarithmic track (equal distances = equal ratios). */\nexport function sliderRatio(value: number, min: number, max: number, logarithmic = false): number {\n const b = sliderBounds(min, max);\n if (isLogTrack(logarithmic, b.min, b.max) && value > 0) {\n return Math.min(1, Math.max(0, (Math.log(value) - Math.log(b.min)) / (Math.log(b.max) - Math.log(b.min))));\n }\n return Math.min(1, Math.max(0, (value - b.min) / (b.max - b.min)));\n}\n\n/** lynx-ui's normalized `[0, 1]` → value; `exp` of the log-span on a logarithmic track. */\nexport function sliderValueAt(ratio: number, min: number, max: number, logarithmic = false): number {\n const b = sliderBounds(min, max);\n const r = Math.min(1, Math.max(0, ratio));\n if (isLogTrack(logarithmic, b.min, b.max)) return Math.exp(Math.log(b.min) + r * (Math.log(b.max) - Math.log(b.min)));\n return b.min + r * (b.max - b.min);\n}\n\n/**\n * The value a logarithmic track snaps to (MAUI 1.4.9): two significant figures — a fixed step would swallow the low end\n * (787 … 56,475 ha: a step of 100 turns every small site into the same value). Clamped to the bounds.\n */\nexport function snapLogValue(value: number, min: number, max: number): number {\n // MAUI's order: snap the raw value, then clamp (a value below the minimum lands ON the minimum, not on its snap).\n const b = sliderBounds(min, max);\n const magnitude = value > 0 ? 10 ** (Math.floor(Math.log10(value)) - 1) : 0;\n const snapped = magnitude > 0 ? roundHalfEven(value / magnitude) * magnitude : value;\n return tidy(Math.min(b.max, Math.max(b.min, snapped)));\n}\n\n/**\n * Formats a value with a .NET custom numeric format subset (MAUI `ValueFormat`, default `\"0\"`): one number pattern of\n * `0`, `#`, `,` (grouping) and `.` (fraction digits: `0` = always, `#` = when needed), with any literal text around it\n * (`\"0°\"`, `\"0.0 kg\"`, `'$'0`); `%` multiplies by 100. Digits follow the culture.\n */\nexport function formatSliderValue(value: number, format: string | null | undefined, culture: G9Culture): string {\n const pattern = format && format.trim() !== '' ? format : '0';\n // Quoted text is literal: mask it before looking for the first numeric run.\n const masked = pattern.replace(/'[^']*'|\"[^\"]*\"/g, (q) => ' '.repeat(q.length));\n const m = /[#0,]+(?:\\.[#0]+)?|\\.[#0]+/.exec(masked);\n const start = m ? m.index : 0;\n const body = m ? m[0] : '';\n const unquote = (s: string) =>\n s.replace(/'([^']*)'|\"([^\"]*)\"/g, (_q, a: string | undefined, b: string | undefined) => a ?? b ?? '');\n const percent = masked.includes('%');\n if (body === '') return unquote(pattern);\n const [intPart = '', frac = ''] = body.split('.');\n const minFraction = (frac.match(/0/g) ?? []).length;\n const maxFraction = frac.length;\n const text = formatNumber(percent ? value * 100 : value, {\n numberingSystem: culture.numberingSystem,\n minimumFractionDigits: minFraction,\n maximumFractionDigits: maxFraction,\n useGrouping: intPart.includes(','),\n });\n return unquote(pattern.slice(0, start)) + text + unquote(pattern.slice(start + body.length));\n}\n"],"names":["sliderBounds","min","max","tidy","v","Number","roundHalfEven","floor","Math","diff","snapSliderValue","value","step","b","clamped","snapped","coerceSliderRange","start","end","a","isLogTrack","logarithmic","sliderRatio","sliderValueAt","ratio","r","snapLogValue","magnitude","formatSliderValue","format","culture","_frac_match","pattern","masked","q","m","body","unquote","s","_q","_ref","percent","intPart","frac","minFraction","maxFraction","text","formatNumber"],"mappings":"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"}
@@ -79,6 +79,23 @@
79
79
  font-size: 12px;
80
80
  }
81
81
 
82
+ .g9-slider__thumb-value {
83
+ justify-content: center;
84
+ align-items: flex-end;
85
+ width: 100px;
86
+ height: 18px;
87
+ margin-left: -50px;
88
+ display: flex;
89
+ position: absolute;
90
+ top: 2px;
91
+ }
92
+
93
+ .g9-slider__thumb-value-text {
94
+ text-align: center;
95
+ color: var(--g9-text-secondary);
96
+ font-size: 12px;
97
+ }
98
+
82
99
  .g9-slider__labels {
83
100
  flex-direction: row;
84
101
  justify-content: space-between;
@@ -1 +1 @@
1
- {"version":3,"sources":["webpack://./src/range-slider/range-slider.css"],"names":[],"mappings":"AAAA;EACE,sBAAsB;EACtB,uBAAuB;EACvB,kBAAkB;EAClB,mBAAmB;EACnB,aAAa;EACb,kBAAkB;AACpB;;AAKA;EAFE,2BAA2B;EAC3B,iBAAiB;AACnB;;AAKA;EAFE,YAAY;AACd;;AAKA;EAFE,uBAAuB;EACvB,YAAY;EACZ,aAAa;AACf;;AAOA;EAJE,2CAA2C;EAC3C,kBAAkB;EAClB,OAAO;EACP,WAAW;EACX,kBAAkB;AACpB;;AAOA;EAJE,mCAAmC;EACnC,kBAAkB;EAClB,WAAW;EACX,kBAAkB;EAClB,SAAS;EACT,OAAO;EACP,QAAQ;AACV;;AAQA;EALE,WAAW;EACX,YAAY;AACd;;AAQA;EALE,mBAAmB;EACnB,mBAAmB;EACnB,+BAA+B;EAC/B,mCAAmC;EACnC,mBAAmB;EACnB,WAAW;EACX,YAAY;AACd;;AAQA;EALE,iBAAiB;AACnB;;AAQA;EALE,2CAA2C;EAC3C,mBAAmB;EACnB,uBAAuB;EACvB,mBAAmB;EACnB,eAAe;EACf,YAAY;EACZ,kBAAkB;EAClB,iBAAiB;EACjB,kBAAkB;EAClB,aAAa;EACb,kBAAkB;EAClB,QAAQ;AACV;;AAQA;EALE,mCAAmC;EACnC,eAAe;AACjB;;AAQA;EALE,mBAAmB;EACnB,8BAA8B;EAC9B,gBAAgB;EAChB,aAAa;AACf;;AAQA;EALE,+BAA+B;EAC/B,eAAe;AACjB","sourcesContent":[".g9-slider {\n position: relative;\n display: flex;\n flex-direction: column;\n justify-content: center;\n padding-left: 16px;\n padding-right: 16px;\n}\n\n/* MAUI G9RangeSliderDrawable with labels: the track's centre at SliderTrackY (52) of the 104 dp canvas — the room above\n is the drag tooltip's — and the end labels SliderLabelGap (18) under the thumb. Centring the column put the track at\n ~34 dp, 18 dp higher than MAUI's. */\n.g9-slider--labels {\n justify-content: flex-start;\n padding-top: 38px;\n}\n\n.g9-slider--disabled {\n opacity: 0.38;\n}\n\n.g9-slider__root {\n height: 28px;\n display: flex;\n justify-content: center;\n}\n\n/* lynx-ui SliderTrack: a 28 px flex row holding this view (the visible track) next to the fill and the thumbs, which\n position against the 28 px row. The track takes the row's width; the fill is the 8 px band at its centre. */\n.g9-slider__track {\n position: relative;\n flex: 1;\n height: 8px;\n border-radius: 4px;\n background-color: var(--g9-surface-variant);\n}\n\n.g9-slider__fill {\n position: absolute;\n top: 10px;\n left: 0px;\n right: 0px;\n height: 8px;\n border-radius: 4px;\n background-color: var(--g9-primary);\n}\n\n/* lynx-ui SliderThumb centres this view on the value (top 50 %, translate -50 %). */\n.g9-slider__thumb {\n width: 28px;\n height: 28px;\n}\n\n.g9-slider__thumb-dot {\n width: 28px;\n height: 28px;\n border-radius: 14px;\n border-width: 2.5px;\n border-style: solid;\n border-color: var(--g9-primary);\n background-color: var(--g9-surface);\n}\n\n.g9-slider__thumb-dot--active {\n border-width: 3px;\n}\n\n.g9-slider__tooltip {\n position: absolute;\n top: 4px;\n height: 26px;\n margin-left: -21px;\n min-width: 42px;\n padding-left: 8px;\n padding-right: 8px;\n border-radius: 13px;\n display: flex;\n align-items: center;\n justify-content: center;\n background-color: var(--g9-inverse-surface);\n}\n\n.g9-slider__tooltip-text {\n font-size: 12px;\n color: var(--g9-inverse-on-surface);\n}\n\n.g9-slider__labels {\n display: flex;\n flex-direction: row;\n justify-content: space-between;\n margin-top: 18px;\n}\n\n.g9-slider__label {\n font-size: 12px;\n color: var(--g9-text-secondary);\n}\n"],"sourceRoot":""}
1
+ {"version":3,"sources":["webpack://./src/range-slider/range-slider.css"],"names":[],"mappings":"AAAA;EACE,sBAAsB;EACtB,uBAAuB;EACvB,kBAAkB;EAClB,mBAAmB;EACnB,aAAa;EACb,kBAAkB;AACpB;;AAKA;EAFE,2BAA2B;EAC3B,iBAAiB;AACnB;;AAKA;EAFE,YAAY;AACd;;AAKA;EAFE,uBAAuB;EACvB,YAAY;EACZ,aAAa;AACf;;AAOA;EAJE,2CAA2C;EAC3C,kBAAkB;EAClB,OAAO;EACP,WAAW;EACX,kBAAkB;AACpB;;AAOA;EAJE,mCAAmC;EACnC,kBAAkB;EAClB,WAAW;EACX,kBAAkB;EAClB,SAAS;EACT,OAAO;EACP,QAAQ;AACV;;AAQA;EALE,WAAW;EACX,YAAY;AACd;;AAQA;EALE,mBAAmB;EACnB,mBAAmB;EACnB,+BAA+B;EAC/B,mCAAmC;EACnC,mBAAmB;EACnB,WAAW;EACX,YAAY;AACd;;AAQA;EALE,iBAAiB;AACnB;;AAQA;EALE,2CAA2C;EAC3C,mBAAmB;EACnB,uBAAuB;EACvB,mBAAmB;EACnB,eAAe;EACf,YAAY;EACZ,kBAAkB;EAClB,iBAAiB;EACjB,kBAAkB;EAClB,aAAa;EACb,kBAAkB;EAClB,QAAQ;AACV;;AAQA;EALE,mCAAmC;EACnC,eAAe;AACjB;;AAUA;EAPE,uBAAuB;EACvB,qBAAqB;EACrB,YAAY;EACZ,YAAY;EACZ,kBAAkB;EAClB,aAAa;EACb,kBAAkB;EAClB,QAAQ;AACV;;AAUA;EAPE,kBAAkB;EAClB,+BAA+B;EAC/B,eAAe;AACjB;;AAUA;EAPE,mBAAmB;EACnB,8BAA8B;EAC9B,gBAAgB;EAChB,aAAa;AACf;;AAUA;EAPE,+BAA+B;EAC/B,eAAe;AACjB","sourcesContent":[".g9-slider {\n position: relative;\n display: flex;\n flex-direction: column;\n justify-content: center;\n padding-left: 16px;\n padding-right: 16px;\n}\n\n/* MAUI G9RangeSliderDrawable with labels: the track's centre at SliderTrackY (52) of the 104 dp canvas — the room above\n is the drag tooltip's — and the end labels SliderLabelGap (18) under the thumb. Centring the column put the track at\n ~34 dp, 18 dp higher than MAUI's. */\n.g9-slider--labels {\n justify-content: flex-start;\n padding-top: 38px;\n}\n\n.g9-slider--disabled {\n opacity: 0.38;\n}\n\n.g9-slider__root {\n height: 28px;\n display: flex;\n justify-content: center;\n}\n\n/* lynx-ui SliderTrack: a 28 px flex row holding this view (the visible track) next to the fill and the thumbs, which\n position against the 28 px row. The track takes the row's width; the fill is the 8 px band at its centre. */\n.g9-slider__track {\n position: relative;\n flex: 1;\n height: 8px;\n border-radius: 4px;\n background-color: var(--g9-surface-variant);\n}\n\n.g9-slider__fill {\n position: absolute;\n top: 10px;\n left: 0px;\n right: 0px;\n height: 8px;\n border-radius: 4px;\n background-color: var(--g9-primary);\n}\n\n/* lynx-ui SliderThumb centres this view on the value (top 50 %, translate -50 %). */\n.g9-slider__thumb {\n width: 28px;\n height: 28px;\n}\n\n.g9-slider__thumb-dot {\n width: 28px;\n height: 28px;\n border-radius: 14px;\n border-width: 2.5px;\n border-style: solid;\n border-color: var(--g9-primary);\n background-color: var(--g9-surface);\n}\n\n.g9-slider__thumb-dot--active {\n border-width: 3px;\n}\n\n.g9-slider__tooltip {\n position: absolute;\n top: 4px;\n height: 26px;\n margin-left: -21px;\n min-width: 42px;\n padding-left: 8px;\n padding-right: 8px;\n border-radius: 13px;\n display: flex;\n align-items: center;\n justify-content: center;\n background-color: var(--g9-inverse-surface);\n}\n\n.g9-slider__tooltip-text {\n font-size: 12px;\n color: var(--g9-inverse-on-surface);\n}\n\n/* MAUI 1.4.9 ShowThumbValues: each value above its thumb, always — a 100 px box centred on the thumb, its text at the\n box's bottom 18 px above the thumb (track 52 − radius 14 − gap 18 − 18 = 2 from the top), 12 px TextSecondary. */\n.g9-slider__thumb-value {\n position: absolute;\n top: 2px;\n width: 100px;\n height: 18px;\n margin-left: -50px;\n display: flex;\n align-items: flex-end;\n justify-content: center;\n}\n\n.g9-slider__thumb-value-text {\n font-size: 12px;\n text-align: center;\n color: var(--g9-text-secondary);\n}\n\n.g9-slider__labels {\n display: flex;\n flex-direction: row;\n justify-content: space-between;\n margin-top: 18px;\n}\n\n.g9-slider__label {\n font-size: 12px;\n color: var(--g9-text-secondary);\n}\n"],"sourceRoot":""}
@@ -33,6 +33,17 @@ export interface G9RangeSliderProps {
33
33
  readonly showLabels?: boolean;
34
34
  /** .NET-style number format of labels and tooltip (`"0"`, `"0.0"`, `"0°"`). Default `"0"`. */
35
35
  readonly valueFormat?: string | null;
36
+ /**
37
+ * A LOGARITHMIC track (MAUI 1.4.9): equal distances are equal ratios, so a range over orders of magnitude (site areas
38
+ * 787 to 56,475 ha, AgriPad's site filter) is usable at both ends. Needs `minimum > 0` (else linear); the value then
39
+ * snaps to two significant figures instead of `step`. Default false.
40
+ */
41
+ readonly logarithmic?: boolean;
42
+ /**
43
+ * Each thumb's value drawn ABOVE it at all times, following it (MAUI 1.4.9, the design's «مساحت (هکتار)» readout); the
44
+ * min / max edge labels and the drag tooltip are then not drawn. Needs `showLabels` (it uses their room). Default false.
45
+ */
46
+ readonly showThumbValues?: boolean;
36
47
  readonly disabled?: boolean;
37
48
  /** After the user changed a value: the single value, or the range end (MAUI `ValueChanged`). */
38
49
  readonly onValueChanged?: (value: number) => void;
@@ -1 +1 @@
1
- {"version":3,"file":"range-slider.d.ts","sourceRoot":"","sources":["../../src/range-slider/range-slider.tsx"],"names":[],"mappings":"AAAA,OAAO,oBAAoB,CAAC;AAC5B,OAAO,EAAe,iBAAiB,EAAW,MAAM,+BAA+B,CAAC;AAExF,OAAO,EAAE,KAAK,SAAS,EAAoB,MAAM,gBAAgB,CAAC;AAYlE,gDAAgD;AAChD,eAAO,MAAM,eAAe;;;;;;EAM1B,CAAC;AAEH,sCAAsC;AACtC,MAAM,WAAW,kBAAkB;IACjC,iBAAiB;IACjB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,mBAAmB;IACnB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,6GAA6G;IAC7G,QAAQ,CAAC,IAAI,CAAC,EAAE,iBAAiB,CAAC;IAClC,wCAAwC;IACxC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACjD,wDAAwD;IACxD,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IACpC,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAC9D,gDAAgD;IAChD,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,sFAAsF;IACtF,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC;IAC9B,8FAA8F;IAC9F,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAC5B,gGAAgG;IAChG,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClD,QAAQ,CAAC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IACrC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,iGAAiG;AACjG,wBAAgB,aAAa,CAC3B,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,EACb,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,OAAO,GACX,MAAM,GAAG,IAAI,CAUf;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,kBAAkB,GAAG,SAAS,CAqHlE"}
1
+ {"version":3,"file":"range-slider.d.ts","sourceRoot":"","sources":["../../src/range-slider/range-slider.tsx"],"names":[],"mappings":"AAAA,OAAO,oBAAoB,CAAC;AAC5B,OAAO,EAAe,iBAAiB,EAAW,MAAM,+BAA+B,CAAC;AAExF,OAAO,EAAE,KAAK,SAAS,EAAoB,MAAM,gBAAgB,CAAC;AAclE,gDAAgD;AAChD,eAAO,MAAM,eAAe;;;;;;EAM1B,CAAC;AAEH,sCAAsC;AACtC,MAAM,WAAW,kBAAkB;IACjC,iBAAiB;IACjB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,mBAAmB;IACnB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,6GAA6G;IAC7G,QAAQ,CAAC,IAAI,CAAC,EAAE,iBAAiB,CAAC;IAClC,wCAAwC;IACxC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACjD,wDAAwD;IACxD,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IACpC,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAC9D,gDAAgD;IAChD,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,sFAAsF;IACtF,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC;IAC9B,8FAA8F;IAC9F,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC;;;;OAIG;IACH,QAAQ,CAAC,WAAW,CAAC,EAAE,OAAO,CAAC;IAC/B;;;OAGG;IACH,QAAQ,CAAC,eAAe,CAAC,EAAE,OAAO,CAAC;IACnC,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAC5B,gGAAgG;IAChG,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClD,QAAQ,CAAC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IACrC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,iGAAiG;AACjG,wBAAgB,aAAa,CAC3B,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,EACb,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,OAAO,GACX,MAAM,GAAG,IAAI,CAUf;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,kBAAkB,GAAG,SAAS,CAoIlE"}
@@ -4,7 +4,7 @@ import { SliderIndicator, SliderRoot, SliderThumb, SliderTrack } from "@lynx-js/
4
4
  import { useRef, useState } from "@lynx-js/react";
5
5
  import { useControllableState } from "../base/use-controllable-state.jsx";
6
6
  import { useG9Culture, useG9Direction, useG9Theme } from "../provider/hooks.jsx";
7
- import { coerceSliderRange, formatSliderValue, sliderBounds, sliderRatio, sliderValueAt, snapSliderValue } from "./math.jsx";
7
+ import { coerceSliderRange, formatSliderValue, isLogTrack, sliderBounds, sliderRatio, sliderValueAt, snapLogValue, snapSliderValue } from "./math.jsx";
8
8
  const g9SliderMetrics = Object.freeze({
9
9
  height: 104,
10
10
  heightCompact: 36,
@@ -35,6 +35,17 @@ function G9RangeSlider(props) {
35
35
  const single = props.mode === G9RangeSliderMode.Single;
36
36
  const labels = false !== props.showLabels;
37
37
  const bounds = sliderBounds(min, max);
38
+ const log = isLogTrack(props.logarithmic, bounds.min, bounds.max);
39
+ const thumbValues = labels && true === props.showThumbValues;
40
+ const snap = (v)=>log && step > 0 ? snapLogValue(v, min, max) : snapSliderValue(v, min, max, step);
41
+ const ordered = (a, b)=>a <= b ? [
42
+ a,
43
+ b
44
+ ] : [
45
+ b,
46
+ a
47
+ ];
48
+ const ratioOf = (v)=>sliderRatio(v, min, max, log);
38
49
  const [value, setValue] = useControllableState({
39
50
  value: props.value,
40
51
  defaultValue: null != (_props_defaultValue = props.defaultValue) ? _props_defaultValue : 0,
@@ -58,8 +69,8 @@ function G9RangeSlider(props) {
58
69
  equals: (a, b)=>a[0] === b[0] && a[1] === b[1]
59
70
  });
60
71
  const [dragging, setDragging] = useState(null);
61
- const shown = single ? snapSliderValue(value, min, max, step) : null;
62
- const shownRange = coerceSliderRange(range[0], range[1], min, max, step);
72
+ const shown = single ? snap(value) : null;
73
+ const shownRange = log ? ordered(snap(range[0]), snap(range[1])) : coerceSliderRange(range[0], range[1], min, max, step);
63
74
  const latest = useRef({
64
75
  props,
65
76
  shownRange,
@@ -94,8 +105,8 @@ function G9RangeSlider(props) {
94
105
  };
95
106
  const onValueChange = (v, source)=>{
96
107
  if ('drag' !== source || props.disabled) return;
97
- if ('number' == typeof v) applySingle(snapSliderValue(sliderValueAt(v, min, max), min, max, step));
98
- else applyRange(coerceSliderRange(sliderValueAt(v[0], min, max), sliderValueAt(v[1], min, max), min, max, step));
108
+ if ('number' == typeof v) applySingle(snap(sliderValueAt(v, min, max, log)));
109
+ else applyRange(ordered(snap(sliderValueAt(v[0], min, max, log)), snap(sliderValueAt(v[1], min, max, log))));
99
110
  };
100
111
  const onDragging = ()=>setDragging((d)=>d ? null : {
101
112
  index: 1
@@ -118,24 +129,35 @@ function G9RangeSlider(props) {
118
129
  Math.max(s, next)
119
130
  ]);
120
131
  };
121
- const sliderValue = single ? sliderRatio(shown, min, max) : [
122
- sliderRatio(shownRange[0], min, max),
123
- sliderRatio(shownRange[1], min, max)
132
+ const sliderValue = single ? ratioOf(shown) : [
133
+ ratioOf(shownRange[0]),
134
+ ratioOf(shownRange[1])
124
135
  ];
125
136
  const tooltipValue = single ? shown : shownRange[null != (_ref = null == dragging ? void 0 : dragging.index) ? _ref : 1];
126
- const tooltipRatio = sliderRatio(tooltipValue, min, max);
137
+ const tooltipRatio = ratioOf(tooltipValue);
138
+ const at = (ratio)=>`${(rtl ? 1 - ratio : ratio) * 100}%`;
127
139
  const thumb = (index)=><SliderThumb key={index} index={index} className="g9-slider__thumb">
128
140
  <view className={`g9-slider__thumb-dot${dragging && dragging.index === index ? ' g9-slider__thumb-dot--active' : ''}`}/>
129
141
  </SliderThumb>;
130
142
  return <view className={`g9-slider${labels ? ' g9-slider--labels' : ' g9-slider--compact'}${props.disabled ? ' g9-slider--disabled' : ''}${props.className ? ` ${props.className}` : ''}`} style={{
131
143
  height: `${labels ? g9SliderMetrics.height : g9SliderMetrics.heightCompact}px`
132
144
  }} accessibility-element={true} accessibility-label={null != (_props_accessibilityLabel = props.accessibilityLabel) ? _props_accessibilityLabel : ''} accessibility-value={single ? fmt(shown) : `${fmt(shownRange[0])} – ${fmt(shownRange[1])}`} bindkeydown={onKey}>
133
- {labels && dragging ? <view className="g9-slider__tooltip" style={{
134
- left: `${(rtl ? 1 - tooltipRatio : tooltipRatio) * 100}%`
145
+ {labels && dragging && !thumbValues ? <view className="g9-slider__tooltip" style={{
146
+ left: at(tooltipRatio)
135
147
  }}>
136
148
  <text className="g9-slider__tooltip-text">{fmt(tooltipValue)}</text>
137
149
  </view> : null}
138
- <SliderRoot className="g9-slider__root" value={sliderValue} {...step > 0 ? {
150
+ {thumbValues ? (single ? [
151
+ shown
152
+ ] : [
153
+ shownRange[0],
154
+ shownRange[1]
155
+ ]).map((v, i)=><view key={`v${i}`} className="g9-slider__thumb-value" style={{
156
+ left: at(ratioOf(v))
157
+ }}>
158
+ <text className="g9-slider__thumb-value-text">{fmt(v)}</text>
159
+ </view>) : null}
160
+ <SliderRoot className="g9-slider__root" value={sliderValue} {...step > 0 && !log ? {
139
161
  step: step / (bounds.max - bounds.min)
140
162
  } : {}} disabled={true === props.disabled} enableRTL={rtl} onValueChange={onValueChange} onDragging={onDragging} onValueCommit={onCommit}>
141
163
  <SliderTrack className="g9-slider__track">
@@ -148,7 +170,7 @@ function G9RangeSlider(props) {
148
170
  ]}
149
171
  </SliderTrack>
150
172
  </SliderRoot>
151
- {labels ? <view className="g9-slider__labels">
173
+ {labels && !thumbValues ? <view className="g9-slider__labels">
152
174
  <text className="g9-slider__label">{fmt(rtl ? bounds.max : bounds.min)}</text>
153
175
  <text className="g9-slider__label">{fmt(rtl ? bounds.min : bounds.max)}</text>
154
176
  </view> : null}