@oicl/openbridge-webcomponents 2.0.0-next.96 → 2.0.0-next.97

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 (117) hide show
  1. package/bundle/openbridge-webcomponents.bundle.js +19 -9
  2. package/bundle/openbridge-webcomponents.bundle.js.map +1 -1
  3. package/custom-elements.json +314 -132
  4. package/dist/ar/poi/poi.d.ts +4 -2
  5. package/dist/ar/poi/poi.d.ts.map +1 -1
  6. package/dist/ar/poi/poi.js.map +1 -1
  7. package/dist/ar/poi-layer/poi-layer.d.ts +1 -0
  8. package/dist/ar/poi-layer/poi-layer.d.ts.map +1 -1
  9. package/dist/ar/poi-layer/poi-layer.js.map +1 -1
  10. package/dist/ar/poi-object/poi-object-aton.d.ts +1 -0
  11. package/dist/ar/poi-object/poi-object-aton.d.ts.map +1 -1
  12. package/dist/ar/poi-object/poi-object-aton.js.map +1 -1
  13. package/dist/automation/automation-badge/automation-badge.d.ts +2 -0
  14. package/dist/automation/automation-badge/automation-badge.d.ts.map +1 -1
  15. package/dist/automation/automation-badge/automation-badge.js.map +1 -1
  16. package/dist/automation/automation-button/automation-button.d.ts +9 -0
  17. package/dist/automation/automation-button/automation-button.d.ts.map +1 -1
  18. package/dist/automation/automation-button/automation-button.js.map +1 -1
  19. package/dist/automation/automation-input-modal/automation-input-modal.d.ts +4 -0
  20. package/dist/automation/automation-input-modal/automation-input-modal.d.ts.map +1 -1
  21. package/dist/automation/automation-input-modal/automation-input-modal.js.map +1 -1
  22. package/dist/building-blocks/alert-list/alert-list.d.ts +4 -0
  23. package/dist/building-blocks/alert-list/alert-list.d.ts.map +1 -1
  24. package/dist/building-blocks/alert-list/alert-list.js.map +1 -1
  25. package/dist/building-blocks/bar-horizontal/bar-horizontal.d.ts +2 -0
  26. package/dist/building-blocks/bar-horizontal/bar-horizontal.d.ts.map +1 -1
  27. package/dist/building-blocks/bar-horizontal/bar-horizontal.js.map +1 -1
  28. package/dist/building-blocks/bar-vertical/bar-vertical.d.ts +2 -0
  29. package/dist/building-blocks/bar-vertical/bar-vertical.d.ts.map +1 -1
  30. package/dist/building-blocks/bar-vertical/bar-vertical.js.map +1 -1
  31. package/dist/components/advice-floating-item/advice-floating-item.d.ts +2 -4
  32. package/dist/components/advice-floating-item/advice-floating-item.d.ts.map +1 -1
  33. package/dist/components/advice-floating-item/advice-floating-item.js.map +1 -1
  34. package/dist/components/advice-message-item/advice-message-item.d.ts +6 -19
  35. package/dist/components/advice-message-item/advice-message-item.d.ts.map +1 -1
  36. package/dist/components/advice-message-item/advice-message-item.js.map +1 -1
  37. package/dist/components/alert-floating-item/alert-floating-item.d.ts +12 -0
  38. package/dist/components/alert-floating-item/alert-floating-item.d.ts.map +1 -1
  39. package/dist/components/alert-floating-item/alert-floating-item.js.map +1 -1
  40. package/dist/components/alert-menu/alert-menu.d.ts +6 -20
  41. package/dist/components/alert-menu/alert-menu.d.ts.map +1 -1
  42. package/dist/components/alert-menu/alert-menu.js.map +1 -1
  43. package/dist/components/alert-menu-item/alert-menu-item.d.ts +4 -0
  44. package/dist/components/alert-menu-item/alert-menu-item.d.ts.map +1 -1
  45. package/dist/components/alert-menu-item/alert-menu-item.js.map +1 -1
  46. package/dist/components/chat-message/chat-message.d.ts +3 -0
  47. package/dist/components/chat-message/chat-message.d.ts.map +1 -1
  48. package/dist/components/chat-message/chat-message.js.map +1 -1
  49. package/dist/components/elevated-card-radio/elevated-card-radio.d.ts +2 -6
  50. package/dist/components/elevated-card-radio/elevated-card-radio.d.ts.map +1 -1
  51. package/dist/components/elevated-card-radio/elevated-card-radio.js.map +1 -1
  52. package/dist/components/keyboard-numeric/keyboard-numeric.d.ts +6 -0
  53. package/dist/components/keyboard-numeric/keyboard-numeric.d.ts.map +1 -1
  54. package/dist/components/keyboard-numeric/keyboard-numeric.js.map +1 -1
  55. package/dist/components/notification-floating-item/notification-floating-item.d.ts +2 -4
  56. package/dist/components/notification-floating-item/notification-floating-item.d.ts.map +1 -1
  57. package/dist/components/notification-floating-item/notification-floating-item.js.map +1 -1
  58. package/dist/components/sequence-card/sequence-card.d.ts +9 -0
  59. package/dist/components/sequence-card/sequence-card.d.ts.map +1 -1
  60. package/dist/components/sequence-card/sequence-card.js.map +1 -1
  61. package/dist/components/sequence-item/sequence-item.d.ts +5 -0
  62. package/dist/components/sequence-item/sequence-item.d.ts.map +1 -1
  63. package/dist/components/sequence-item/sequence-item.js.map +1 -1
  64. package/dist/components/sequence-modal/sequence-modal.d.ts +4 -0
  65. package/dist/components/sequence-modal/sequence-modal.d.ts.map +1 -1
  66. package/dist/components/sequence-modal/sequence-modal.js.map +1 -1
  67. package/dist/components/sequence-step/sequence-step.d.ts.map +1 -1
  68. package/dist/components/sequence-step/sequence-step.js.map +1 -1
  69. package/dist/components/slider-double/slider-double.d.ts +4 -8
  70. package/dist/components/slider-double/slider-double.d.ts.map +1 -1
  71. package/dist/components/slider-double/slider-double.js.map +1 -1
  72. package/dist/components/status-indicator/status-indicator.d.ts +1 -0
  73. package/dist/components/status-indicator/status-indicator.d.ts.map +1 -1
  74. package/dist/components/status-indicator/status-indicator.js.map +1 -1
  75. package/dist/components/system-menu/system-menu.d.ts +2 -0
  76. package/dist/components/system-menu/system-menu.d.ts.map +1 -1
  77. package/dist/components/system-menu/system-menu.js.map +1 -1
  78. package/dist/components/table-header-item/table-header-item.d.ts +2 -0
  79. package/dist/components/table-header-item/table-header-item.d.ts.map +1 -1
  80. package/dist/components/table-header-item/table-header-item.js.map +1 -1
  81. package/dist/components/tag/tag.d.ts +1 -0
  82. package/dist/components/tag/tag.d.ts.map +1 -1
  83. package/dist/components/tag/tag.js.map +1 -1
  84. package/dist/components/toggletip/toggletip.d.ts +4 -4
  85. package/dist/components/toggletip/toggletip.js.map +1 -1
  86. package/dist/components/user-menu/user-menu.d.ts +1 -0
  87. package/dist/components/user-menu/user-menu.d.ts.map +1 -1
  88. package/dist/components/user-menu/user-menu.js.map +1 -1
  89. package/dist/integration-systems/integration-app-bar/integration-app-bar.d.ts +1 -0
  90. package/dist/integration-systems/integration-app-bar/integration-app-bar.d.ts.map +1 -1
  91. package/dist/integration-systems/integration-app-bar/integration-app-bar.js.map +1 -1
  92. package/dist/integration-systems/integration-bar/integration-bar.d.ts +0 -1
  93. package/dist/integration-systems/integration-bar/integration-bar.d.ts.map +1 -1
  94. package/dist/integration-systems/integration-bar/integration-bar.js.map +1 -1
  95. package/dist/integration-systems/integration-bar-dropdown/integration-bar-dropdown.d.ts +9 -9
  96. package/dist/integration-systems/integration-bar-dropdown/integration-bar-dropdown.js.map +1 -1
  97. package/dist/integration-systems/integration-fleet-button/integration-fleet-button.d.ts +1 -0
  98. package/dist/integration-systems/integration-fleet-button/integration-fleet-button.d.ts.map +1 -1
  99. package/dist/integration-systems/integration-fleet-button/integration-fleet-button.js.map +1 -1
  100. package/dist/integration-systems/integration-tabs/integration-tabs.d.ts +1 -0
  101. package/dist/integration-systems/integration-tabs/integration-tabs.d.ts.map +1 -1
  102. package/dist/integration-systems/integration-tabs/integration-tabs.js.map +1 -1
  103. package/dist/navigation-instruments/compass-sector/compass-sector.d.ts +0 -1
  104. package/dist/navigation-instruments/compass-sector/compass-sector.d.ts.map +1 -1
  105. package/dist/navigation-instruments/compass-sector/compass-sector.js.map +1 -1
  106. package/dist/navigation-instruments/watch/tickmark.d.ts.map +1 -1
  107. package/dist/navigation-instruments/watch/tickmark.js +17 -7
  108. package/dist/navigation-instruments/watch/tickmark.js.map +1 -1
  109. package/dist/navigation-instruments/watch/watch.d.ts.map +1 -1
  110. package/dist/navigation-instruments/watch/watch.js +2 -2
  111. package/dist/navigation-instruments/watch/watch.js.map +1 -1
  112. package/dist/navigation-instruments/wind-propulsion/wind-propulsion.d.ts +0 -1
  113. package/dist/navigation-instruments/wind-propulsion/wind-propulsion.d.ts.map +1 -1
  114. package/dist/navigation-instruments/wind-propulsion/wind-propulsion.js.map +1 -1
  115. package/dist/pages/alert-detail-page/alert-detail-page.d.ts.map +1 -1
  116. package/dist/pages/alert-detail-page/alert-detail-page.js.map +1 -1
  117. package/package.json +3 -2
@@ -1 +1 @@
1
- {"version":3,"file":"slider-double.js","sources":["../../../src/components/slider-double/slider-double.ts"],"sourcesContent":["import {LitElement, html, unsafeCSS} from 'lit';\nimport {property, query} from 'lit/decorators.js';\nimport {ifDefined} from 'lit/directives/if-defined.js';\nimport {styleMap} from 'lit/directives/style-map.js';\nimport componentStyle from './slider-double.css?inline';\nimport '../icon-button/icon-button.js';\nimport {classMap} from 'lit/directives/class-map.js';\nimport {customElement} from '../../decorator.js';\n\n/**\n * Enum for slider double variants.\n *\n * - `normal`: Standard slider with default styling and interaction.\n * - `enhanced`: Visually enhanced slider with larger track and thumb, suitable for more prominent or touch-friendly UIs.\n * - `no-input`: Non-interactive display mode; disables all user input and presents the slider as read-only.\n */\nexport enum ObcSliderDoubleVariant {\n Normal = 'normal',\n Enhanced = 'enhanced',\n NoInput = 'no-input',\n}\n\n/**\n * Event type for value changes in obc-slider-double.\n * Contains the current low and high values of the slider.\n */\nexport type ObcSliderDoubleValueEvent = CustomEvent<{\n low: number;\n high: number;\n}>;\n\n/**\n * Event type for change event in obc-slider-double (fired after user interaction completes).\n * Contains the current low and high values of the slider.\n */\nexport type ObcSliderDoubleChangeEvent = CustomEvent<{\n low: number;\n high: number;\n}>;\n\n/**\n * `<obc-slider-double>` – A dual-thumb range slider for selecting a value interval within a defined range.\n *\n * This component allows users to select a minimum and maximum value by dragging two thumbs along a horizontal track. It is commonly used for filtering or specifying ranges (such as price, speed, or time intervals) in forms and dashboards. The slider supports both interactive and read-only display modes, as well as visual variants for different UI needs.\n *\n * Appears with two draggable handles (thumbs) and labels showing the current low and high values. Optionally, icons can be placed at each end of the slider via slots.\n *\n * ## Features\n * - **Dual-thumb range selection:** Users can adjust both the lower and upper bounds of a numeric interval.\n * - **Variants:**\n * - **Normal:** Standard slider with compact styling.\n * - **Enhanced:** Larger track and thumb for increased prominence or touch accessibility.\n * - **NoInput:** Read-only mode; disables all user interaction and presents the current range as static.\n * - **Configurable range:** Set minimum (`min`), maximum (`max`), and step size (`step`) for precise control.\n * - **Step click adjustment:** Use `stepClick` to define increment/decrement amount for keyboard or button-based changes.\n * - **Seeking mode:** Enable `allowSeeking` to let users jump to a value by clicking on the track, with smooth animated transitions controlled by `seekingSpeed`.\n * - **Custom labels:** Display formatted value labels with unit (`labelUnit`), decimal precision (`labelDecimals`), and adjustable label width (`labelWidth`).\n * - **Hug container option:** Remove spacing between slider and container edges with the `hugcontainer` attribute for seamless layout integration.\n * - **Icon slots:** Add icons to the left and right ends of the slider using `icon-left` and `icon-right` slots.\n *\n * ## Usage Guidelines\n * Use `obc-slider-double` when you need users to specify a numeric range, such as filtering results by minimum and maximum values. Ideal for scenarios like:\n * - Filtering items by price, speed, or other continuous values.\n * - Selecting a time interval or threshold range.\n * - Any UI where a bounded numeric interval is required.\n *\n * For single-value selection, use a standard slider component instead. In read-only or summary views, use the `no-input` variant to display the selected range without allowing changes.\n *\n * **TODO(designer):** Confirm if there are recommended minimum thumb separation or constraints for usability, and if there are best practices for using the enhanced variant.\n *\n * ## Slots\n *\n * | Slot Name | Renders When... | Purpose |\n * |---------------|-------------------------------|------------------------------------------------------------------------------------------------------------------|\n * | icon-left | Always | Icon or content at the left end of the slider. Example: `<obi-placeholder slot=\"icon-left\"></obi-placeholder>` |\n * | icon-right | Always | Icon or content at the right end of the slider. Example: `<obi-placeholder slot=\"icon-right\"></obi-placeholder>` |\n * | left-readout | `showLeftReadout` is true | Custom content for the left (low) readout label. Falls back to the formatted `low` value. |\n * | right-readout | `showRightReadout` is true | Custom content for the right (high) readout label. Falls back to the formatted `high` value. |\n *\n * ## Properties and Attributes\n * - `low` (number): The current lower bound of the selected range.\n * - `high` (number): The current upper bound of the selected range.\n * - `min` (number): The minimum allowed value (default: 0).\n * - `max` (number): The maximum allowed value (default: 100).\n * - `step` (number): The increment for value changes (default: 1).\n * - `stepClick` (number): Step size for keyboard or button-based changes (default: 10).\n * - `variant` (`normal` | `enhanced` | `no-input`): Visual and interaction style (default: `normal`).\n * - `allowSeeking` (boolean): If true, clicking the track animates the thumb to the clicked position.\n * - `seekingSpeed` (number): Animation speed for seeking (default: 1/3, i.e., full range in 3 seconds).\n * - `labelUnit` (string): Unit label appended to value labels (e.g., `\"%\"`, `\"kn\"`).\n * - `labelDecimals` (number): Number of decimal places for value labels.\n * - `labelWidth` (string): CSS width for value labels (e.g., `\"5ch\"`, `\"60px\"`).\n * - `showLeftReadout` (boolean, property only): Show the left (low) readout label. Default `true`.\n * - `showRightReadout` (boolean, property only): Show the right (high) readout label. Default `true`.\n * - `hugcontainer` (attribute): If present, removes spacing between slider and container edges.\n *\n * ## Events\n * - `value` – Fired continuously whenever the low or high value changes during user interaction. Event detail contains `{low, high}`.\n * - `change` – Fired only after user interaction completes (mouse release). Event detail contains `{low, high}`.\n *\n * ## Best Practices and Constraints\n * - Ensure `low` is always less than or equal to `high`; the component enforces this automatically.\n * - For accessibility, provide clear labels and units so users understand the meaning of the range.\n * - Use the `no-input` variant for summary or review screens where editing is not allowed.\n * - When using `allowSeeking`, set an appropriate `seekingSpeed` for smooth but responsive thumb movement.\n * - Avoid setting `step` too small for large ranges, as this may make precise selection difficult.\n *\n * ## Example\n *\n * ```html\n * <obc-slider-double\n * min=\"0\"\n * max=\"100\"\n * low=\"20\"\n * high=\"80\"\n * step=\"5\"\n * label-unit=\"%\"\n * label-decimals=\"0\"\n * variant=\"enhanced\"\n * allowSeeking\n * >\n * <obi-placeholder slot=\"icon-left\"></obi-placeholder>\n * <obi-placeholder slot=\"icon-right\"></obi-placeholder>\n * </obc-slider-double>\n * ```\n *\n * In this example, the slider allows selection of a percentage range from 0 to 100, with 5% increments, enhanced styling, and seeking enabled.\n *\n * @slot icon-left - Slot for the left icon\n * @slot icon-right - Slot for the right icon\n * @slot left-readout - Custom content for the left (low) readout label (rendered when `showLeftReadout` is true)\n * @slot right-readout - Custom content for the right (high) readout label (rendered when `showRightReadout` is true)\n * @fires value {ObcSliderDoubleValueEvent} - Fires when the value is changed\n * @fires change {ObcSliderDoubleChangeEvent} - Fires when user interaction completes\n * @stable\n */\n@customElement('obc-slider-double')\nexport class ObcSliderDouble extends LitElement {\n /**\n * The current lower bound of the selected range.\n * Must be greater than or equal to `min` and less than or equal to `high`.\n */\n @property({type: Number}) low = 0;\n\n /**\n * The current upper bound of the selected range.\n * Must be less than or equal to `max` and greater than or equal to `low`.\n */\n @property({type: Number}) high = 100;\n\n /**\n * The minimum allowed value for the slider.\n * Default is 0.\n */\n @property({type: Number}) min = 0;\n\n /**\n * The maximum allowed value for the slider.\n * Default is 100.\n */\n @property({type: Number}) max = 100;\n\n /**\n * The increment for value changes.\n * If not set, defaults to 1.\n */\n @property({type: Number}) step: number | undefined;\n\n /**\n * Step size for keyboard or button-based changes.\n * Default is 10.\n */\n @property({type: Number}) stepClick = 10;\n\n /**\n * Visual and interaction style of the slider.\n * - `normal`: Standard appearance.\n * - `enhanced`: Larger track and thumb.\n * - `no-input`: Read-only, disables user interaction.\n * Default is `normal`.\n */\n @property({type: String}) variant: ObcSliderDoubleVariant =\n ObcSliderDoubleVariant.Normal;\n\n /**\n * If true, clicking the slider track animates the thumb to the clicked position.\n * Enables seeking mode for rapid value changes.\n */\n @property({type: Boolean}) allowSeeking = false;\n\n @property({type: Boolean}) disabled = false;\n\n /**\n * Animation speed for seeking, in inverse seconds.\n * The value will go from min to max in 1 / seekingSpeed seconds.\n * Default is 1/3 (i.e., 3 seconds for full range).\n */\n @property({type: Number}) seekingSpeed = 1 / 3;\n\n /**\n * Unit label appended to value labels (e.g., \"%\", \"kn\").\n */\n @property({type: String}) labelUnit = '';\n\n /**\n * Number of decimal places to display in value labels.\n */\n @property({type: Number}) labelDecimals = 0;\n\n /**\n * CSS width for value labels (e.g., \"5ch\", \"60px\").\n */\n @property({type: String}) labelWidth = '60px';\n\n /**\n * Whether to show the left (low) readout label.\n *\n * When false, the left readout is hidden entirely. When true, the readout\n * renders the formatted `low` value or the content slotted into `left-readout`.\n *\n * Default is true. Set via JavaScript property (no HTML attribute).\n */\n @property({type: Boolean, attribute: false}) showLeftReadout = true;\n\n /**\n * Whether to show the right (high) readout label.\n *\n * When false, the right readout is hidden entirely. When true, the readout\n * renders the formatted `high` value or the content slotted into `right-readout`.\n *\n * Default is true. Set via JavaScript property (no HTML attribute).\n */\n @property({type: Boolean, attribute: false}) showRightReadout = true;\n\n /**\n * Removes spacing between the slider and its container edges for seamless\n * layout integration. Reflected to the `hugcontainer` HTML attribute.\n */\n @property({type: Boolean, reflect: true, attribute: 'hugcontainer'})\n hugContainer = false;\n\n private get lowRatio(): number {\n return this.computeRatio(this.low);\n }\n\n private get highRatio(): number {\n return this.computeRatio(this.high);\n }\n\n private computeRatio(value: number): number {\n const range = this.max - this.min;\n if (!Number.isFinite(range) || range <= 0) return 0;\n const ratio = (value - this.min) / range;\n if (!Number.isFinite(ratio)) return 0;\n return Math.max(0, Math.min(1, ratio));\n }\n\n private animationFrame: number | null = null;\n private isMouseDown = false;\n private targetValue = 0;\n private isDragging = false;\n private isTargetingLow = false;\n private animationStartTime: number | null = null;\n private animationStartValue: number = 0;\n\n @query('input[type=\"range\"].min')\n private minInput!: HTMLInputElement;\n\n @query('input[type=\"range\"].max')\n private maxInput!: HTMLInputElement;\n\n /**\n * Handles input changes from the slider thumbs.\n * Updates the low and high values and emits the `value` event.\n *\n * @fires value {ObcSliderDoubleValueEvent}\n */\n onInput() {\n let newLow = parseFloat(this.minInput.value);\n let newHigh = parseFloat(this.maxInput.value);\n if (newLow > this.high) {\n newLow = this.high;\n this.minInput.value = this.high.toString();\n }\n if (newHigh < this.low) {\n newHigh = this.low;\n this.maxInput.value = this.low.toString();\n }\n this.low = newLow;\n this.high = newHigh;\n this.dispatchEvent(\n new CustomEvent('value', {detail: {low: this.low, high: this.high}})\n );\n }\n\n /**\n * Fires the `change` event with the current low and high values.\n *\n * @fires change\n */\n private fireChangeEvent() {\n this.dispatchEvent(\n new CustomEvent('change', {\n detail: {low: this.low, high: this.high},\n }) as ObcSliderDoubleChangeEvent\n );\n }\n\n private THUMB_WIDTH = 48;\n private THUMB_VISIBLE_WIDTH = 12;\n\n private lowClickValue(e: MouseEvent) {\n const rect = this.minInput.getBoundingClientRect();\n const left = rect.left + this.THUMB_WIDTH - this.THUMB_VISIBLE_WIDTH / 2;\n const width = rect.width - this.THUMB_WIDTH;\n const percent = (e.clientX - left) / width;\n return this.min + (this.max - this.min) * percent;\n }\n\n private highClickValue(e: MouseEvent) {\n const rect = this.maxInput.getBoundingClientRect();\n const left = rect.left + this.THUMB_VISIBLE_WIDTH / 2;\n const width = rect.width - this.THUMB_WIDTH;\n const percent = (e.clientX - left) / width;\n return this.min + (this.max - this.min) * percent;\n }\n\n private thumbRange() {\n const rect = this.minInput.getBoundingClientRect();\n const valueRange = this.max - this.min;\n const percentageRange = this.THUMB_WIDTH / rect.width;\n return valueRange * percentageRange;\n }\n\n private isClickingMinThumb(e: MouseEvent) {\n const value = this.lowClickValue(e);\n if (value > this.low) {\n return false;\n }\n return value >= this.low - this.thumbRange();\n }\n\n private isClickingMaxThumb(e: MouseEvent) {\n const value = this.highClickValue(e);\n if (value < this.high) {\n return false;\n }\n return value <= this.high + this.thumbRange();\n }\n\n private isClickingLowTrack(e: MouseEvent) {\n const value = this.lowClickValue(e);\n return value <= this.low - this.thumbRange() / 2;\n }\n\n private isClickingHighTrack(e: MouseEvent) {\n const value = this.highClickValue(e);\n return value >= this.high + this.thumbRange() / 2;\n }\n\n private isClosestToLowThumb(e: MouseEvent) {\n const lowValue = this.lowClickValue(e);\n const highValue = this.highClickValue(e);\n return Math.abs(lowValue - this.low) <= Math.abs(highValue - this.high);\n }\n\n private onMouseDown(e: MouseEvent) {\n if (this.variant === ObcSliderDoubleVariant.NoInput || this.disabled)\n return;\n if (this.isClickingMinThumb(e)) {\n this.isTargetingLow = true;\n this.isDragging = true;\n } else if (this.isClickingMaxThumb(e)) {\n this.isTargetingLow = false;\n this.isDragging = true;\n } else if (this.isClickingLowTrack(e)) {\n this.isTargetingLow = true;\n this.isDragging = false;\n } else if (this.isClickingHighTrack(e)) {\n this.isTargetingLow = false;\n this.isDragging = false;\n } else if (this.isClosestToLowThumb(e)) {\n this.isTargetingLow = true;\n this.isDragging = false;\n } else {\n this.isTargetingLow = false;\n this.isDragging = false;\n }\n this.isMouseDown = true;\n this.updateTargetValue(e);\n e.preventDefault();\n window.addEventListener('mousemove', this.onWindowMouseMove);\n window.addEventListener('mouseup', this.onWindowMouseUp);\n this.startAnimation();\n }\n\n private onWindowMouseMove = (e: MouseEvent) => {\n this.onMouseMove(e);\n };\n\n private onWindowMouseUp = () => {\n this.onMouseUp();\n };\n\n private onMouseMove(e: MouseEvent) {\n if (this.isMouseDown) {\n this.updateTargetValue(e);\n }\n }\n\n private onMouseUp() {\n this.isMouseDown = false;\n this.isDragging = false;\n window.removeEventListener('mousemove', this.onWindowMouseMove);\n window.removeEventListener('mouseup', this.onWindowMouseUp);\n this.stopAnimation();\n this.fireChangeEvent();\n }\n\n private updateTargetValue(e: MouseEvent) {\n const unroundedValue = this.isTargetingLow\n ? this.lowClickValue(e)\n : this.highClickValue(e);\n if (this.step) {\n this.targetValue = Math.round(unroundedValue / this.step) * this.step;\n } else {\n this.targetValue = unroundedValue;\n }\n if (this.isTargetingLow) {\n this.targetValue = Math.max(\n this.min,\n Math.min(this.targetValue, this.high)\n );\n } else {\n this.targetValue = Math.min(\n this.max,\n Math.max(this.targetValue, this.low)\n );\n }\n }\n\n private startAnimation() {\n this.isDragging = this.allowSeeking;\n this.animationStartTime = performance.now();\n this.animationStartValue = this.isTargetingLow ? this.low : this.high;\n const min = this.min;\n const max = this.max;\n const step = this.step;\n const duration = (1 / this.seekingSpeed) * 1000; // ms\n const direction = this.targetValue > this.animationStartValue ? 1 : -1;\n\n const animate = () => {\n let nextValue = this.targetValue;\n if (!this.isDragging) {\n const now = performance.now();\n const elapsed = now - (this.animationStartTime ?? now);\n const range = Math.abs(max - min);\n // How much of the range should be covered by now\n const expectedProgress = Math.min(elapsed / duration, 1);\n const expectedValue =\n this.animationStartValue + direction * range * expectedProgress;\n // Snap to step\n if (direction > 0) {\n nextValue =\n step === undefined\n ? expectedValue\n : Math.ceil(expectedValue - min / step) * step + min;\n nextValue = Math.min(this.targetValue, nextValue);\n } else {\n nextValue =\n step === undefined\n ? expectedValue\n : Math.floor((expectedValue - min) / step) * step + min;\n nextValue = Math.max(this.targetValue, nextValue);\n }\n }\n // Only update if value actually changes\n const isValueChanged = this.isTargetingLow\n ? this.low !== nextValue\n : this.high !== nextValue;\n if (isValueChanged) {\n if (this.isTargetingLow) {\n this.low = nextValue;\n } else {\n this.high = nextValue;\n }\n this.dispatchEvent(\n new CustomEvent('value', {detail: {low: this.low, high: this.high}})\n );\n }\n // Continue animating if not at target\n if (\n (direction > 0 && nextValue < this.targetValue) ||\n (direction < 0 && nextValue > this.targetValue)\n ) {\n this.animationFrame = requestAnimationFrame(animate);\n } else if (this.isMouseDown) {\n // If mouse is still down, wait for new target\n this.animationStartTime = performance.now();\n this.animationStartValue = this.isTargetingLow ? this.low : this.high;\n this.animationFrame = requestAnimationFrame(animate);\n this.isDragging = true;\n }\n };\n\n this.animationFrame = requestAnimationFrame(animate);\n }\n\n private stopAnimation() {\n if (this.animationFrame !== null) {\n cancelAnimationFrame(this.animationFrame);\n this.animationFrame = null;\n }\n }\n\n private formatLabel(value: number) {\n return value.toFixed(this.labelDecimals) + this.labelUnit;\n }\n\n override render() {\n return html`\n ${this.showLeftReadout\n ? html`\n <div\n class=${classMap({\n label: true,\n min: true,\n disabled: this.disabled,\n })}\n style=\"width: ${this.labelWidth};\"\n >\n <slot name=\"left-readout\">${this.formatLabel(this.low)}</slot>\n </div>\n `\n : null}\n <div\n class=${classMap({\n wrapper: true,\n [this.variant]: true,\n mouseDown: this.isMouseDown,\n dragging: this.isDragging,\n disabled: this.disabled,\n })}\n style=${styleMap({\n '--_low-ratio': String(this.lowRatio),\n '--_high-ratio': String(this.highRatio),\n })}\n @mousedown=${this.onMouseDown}\n @mouseup=${this.onMouseUp}\n @mousemove=${this.onMouseMove}\n >\n <div class=\"track\"></div>\n <input\n type=\"range\"\n min=${this.min}\n max=${this.max}\n class=\"slider min\"\n step=${ifDefined(this.step)}\n .value=${this.low.toString()}\n ?disabled=${this.variant === ObcSliderDoubleVariant.NoInput ||\n this.disabled}\n @input=${this.onInput}\n @change=${() => this.fireChangeEvent()}\n />\n <input\n type=\"range\"\n class=\"slider max\"\n min=${this.min}\n max=${this.max}\n step=${ifDefined(this.step)}\n .value=${this.high.toString()}\n ?disabled=${this.variant === ObcSliderDoubleVariant.NoInput ||\n this.disabled}\n @input=${this.onInput}\n @change=${() => this.fireChangeEvent()}\n />\n <div class=\"interactive-track\"></div>\n <div class=\"thumb min\"></div>\n <div class=\"thumb max\"></div>\n </div>\n ${this.showRightReadout\n ? html`\n <div\n class=${classMap({\n label: true,\n max: true,\n disabled: this.disabled,\n })}\n style=\"width: ${this.labelWidth};\"\n >\n <slot name=\"right-readout\">${this.formatLabel(this.high)}</slot>\n </div>\n `\n : null}\n `;\n }\n\n static override styles = unsafeCSS(componentStyle);\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'obc-slider-double': ObcSliderDouble;\n }\n}\n"],"names":["ObcSliderDoubleVariant"],"mappings":"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"}
1
+ {"version":3,"file":"slider-double.js","sources":["../../../src/components/slider-double/slider-double.ts"],"sourcesContent":["import {LitElement, html, unsafeCSS} from 'lit';\nimport {property, query} from 'lit/decorators.js';\nimport {ifDefined} from 'lit/directives/if-defined.js';\nimport {styleMap} from 'lit/directives/style-map.js';\nimport componentStyle from './slider-double.css?inline';\nimport '../icon-button/icon-button.js';\nimport {classMap} from 'lit/directives/class-map.js';\nimport {customElement} from '../../decorator.js';\n\n/**\n * Enum for slider double variants.\n *\n * - `normal`: Standard slider with default styling and interaction.\n * - `enhanced`: Visually enhanced slider with larger track and thumb, suitable for more prominent or touch-friendly UIs.\n * - `no-input`: Non-interactive display mode; disables all user input and presents the slider as read-only.\n */\nexport enum ObcSliderDoubleVariant {\n Normal = 'normal',\n Enhanced = 'enhanced',\n NoInput = 'no-input',\n}\n\n/**\n * Event type for value changes in obc-slider-double.\n * Contains the current low and high values of the slider.\n */\nexport type ObcSliderDoubleValueEvent = CustomEvent<{\n low: number;\n high: number;\n}>;\n\n/**\n * Event type for change event in obc-slider-double (fired after user interaction completes).\n * Contains the current low and high values of the slider.\n */\nexport type ObcSliderDoubleChangeEvent = CustomEvent<{\n low: number;\n high: number;\n}>;\n\n/**\n * `<obc-slider-double>` – A dual-thumb range slider for selecting a value interval within a defined range.\n *\n * This component allows users to select a minimum and maximum value by dragging two thumbs along a horizontal track. It is commonly used for filtering or specifying ranges (such as price, speed, or time intervals) in forms and dashboards. The slider supports both interactive and read-only display modes, as well as visual variants for different UI needs.\n *\n * Appears with two draggable handles (thumbs) and labels showing the current low and high values. The low and high readout labels can be customized via slots.\n *\n * ## Features\n * - **Dual-thumb range selection:** Users can adjust both the lower and upper bounds of a numeric interval.\n * - **Variants:**\n * - **Normal:** Standard slider with compact styling.\n * - **Enhanced:** Larger track and thumb for increased prominence or touch accessibility.\n * - **NoInput:** Read-only mode; disables all user interaction and presents the current range as static.\n * - **Configurable range:** Set minimum (`min`), maximum (`max`), and step size (`step`) for precise control.\n * - **Step click adjustment:** Use `stepClick` to define increment/decrement amount for keyboard or button-based changes.\n * - **Seeking mode:** Enable `allowSeeking` to let users jump to a value by clicking on the track, with smooth animated transitions controlled by `seekingSpeed`.\n * - **Custom labels:** Display formatted value labels with unit (`labelUnit`), decimal precision (`labelDecimals`), and adjustable label width (`labelWidth`).\n * - **Hug container option:** Remove spacing between slider and container edges with the `hugcontainer` attribute for seamless layout integration.\n * - **Custom readouts:** Replace the low/high value labels with custom content using the `left-readout` and `right-readout` slots.\n *\n * ## Usage Guidelines\n * Use `obc-slider-double` when you need users to specify a numeric range, such as filtering results by minimum and maximum values. Ideal for scenarios like:\n * - Filtering items by price, speed, or other continuous values.\n * - Selecting a time interval or threshold range.\n * - Any UI where a bounded numeric interval is required.\n *\n * For single-value selection, use a standard slider component instead. In read-only or summary views, use the `no-input` variant to display the selected range without allowing changes.\n *\n * **TODO(designer):** Confirm if there are recommended minimum thumb separation or constraints for usability, and if there are best practices for using the enhanced variant.\n *\n * ## Slots\n *\n * | Slot Name | Renders When... | Purpose |\n * |---------------|-------------------------------|------------------------------------------------------------------------------------------------------------------|\n * | left-readout | `showLeftReadout` is true | Custom content for the left (low) readout label. Falls back to the formatted `low` value. |\n * | right-readout | `showRightReadout` is true | Custom content for the right (high) readout label. Falls back to the formatted `high` value. |\n *\n * ## Properties and Attributes\n * - `low` (number): The current lower bound of the selected range.\n * - `high` (number): The current upper bound of the selected range.\n * - `min` (number): The minimum allowed value (default: 0).\n * - `max` (number): The maximum allowed value (default: 100).\n * - `step` (number): The increment for value changes (default: 1).\n * - `stepClick` (number): Step size for keyboard or button-based changes (default: 10).\n * - `variant` (`normal` | `enhanced` | `no-input`): Visual and interaction style (default: `normal`).\n * - `allowSeeking` (boolean): If true, clicking the track animates the thumb to the clicked position.\n * - `seekingSpeed` (number): Animation speed for seeking (default: 1/3, i.e., full range in 3 seconds).\n * - `labelUnit` (string): Unit label appended to value labels (e.g., `\"%\"`, `\"kn\"`).\n * - `labelDecimals` (number): Number of decimal places for value labels.\n * - `labelWidth` (string): CSS width for value labels (e.g., `\"5ch\"`, `\"60px\"`).\n * - `showLeftReadout` (boolean, property only): Show the left (low) readout label. Default `true`.\n * - `showRightReadout` (boolean, property only): Show the right (high) readout label. Default `true`.\n * - `hugcontainer` (attribute): If present, removes spacing between slider and container edges.\n *\n * ## Events\n * - `value` – Fired continuously whenever the low or high value changes during user interaction. Event detail contains `{low, high}`.\n * - `change` – Fired only after user interaction completes (mouse release). Event detail contains `{low, high}`.\n *\n * ## Best Practices and Constraints\n * - Ensure `low` is always less than or equal to `high`; the component enforces this automatically.\n * - For accessibility, provide clear labels and units so users understand the meaning of the range.\n * - Use the `no-input` variant for summary or review screens where editing is not allowed.\n * - When using `allowSeeking`, set an appropriate `seekingSpeed` for smooth but responsive thumb movement.\n * - Avoid setting `step` too small for large ranges, as this may make precise selection difficult.\n *\n * ## Example\n *\n * ```html\n * <obc-slider-double\n * min=\"0\"\n * max=\"100\"\n * low=\"20\"\n * high=\"80\"\n * step=\"5\"\n * label-unit=\"%\"\n * label-decimals=\"0\"\n * variant=\"enhanced\"\n * allowSeeking\n * >\n * <span slot=\"left-readout\">Min</span>\n * <span slot=\"right-readout\">Max</span>\n * </obc-slider-double>\n * ```\n *\n * In this example, the slider allows selection of a percentage range from 0 to 100, with 5% increments, enhanced styling, and seeking enabled.\n *\n * @slot left-readout - Custom content for the left (low) readout label (rendered when `showLeftReadout` is true)\n * @slot right-readout - Custom content for the right (high) readout label (rendered when `showRightReadout` is true)\n * @fires value {ObcSliderDoubleValueEvent} - Fires when the value is changed\n * @fires change {ObcSliderDoubleChangeEvent} - Fires when user interaction completes\n * @stable\n */\n@customElement('obc-slider-double')\nexport class ObcSliderDouble extends LitElement {\n /**\n * The current lower bound of the selected range.\n * Must be greater than or equal to `min` and less than or equal to `high`.\n */\n @property({type: Number}) low = 0;\n\n /**\n * The current upper bound of the selected range.\n * Must be less than or equal to `max` and greater than or equal to `low`.\n */\n @property({type: Number}) high = 100;\n\n /**\n * The minimum allowed value for the slider.\n * Default is 0.\n */\n @property({type: Number}) min = 0;\n\n /**\n * The maximum allowed value for the slider.\n * Default is 100.\n */\n @property({type: Number}) max = 100;\n\n /**\n * The increment for value changes.\n * If not set, defaults to 1.\n */\n @property({type: Number}) step: number | undefined;\n\n /**\n * Step size for keyboard or button-based changes.\n * Default is 10.\n */\n @property({type: Number}) stepClick = 10;\n\n /**\n * Visual and interaction style of the slider.\n * - `normal`: Standard appearance.\n * - `enhanced`: Larger track and thumb.\n * - `no-input`: Read-only, disables user interaction.\n * Default is `normal`.\n */\n @property({type: String}) variant: ObcSliderDoubleVariant =\n ObcSliderDoubleVariant.Normal;\n\n /**\n * If true, clicking the slider track animates the thumb to the clicked position.\n * Enables seeking mode for rapid value changes.\n */\n @property({type: Boolean}) allowSeeking = false;\n\n @property({type: Boolean}) disabled = false;\n\n /**\n * Animation speed for seeking, in inverse seconds.\n * The value will go from min to max in 1 / seekingSpeed seconds.\n * Default is 1/3 (i.e., 3 seconds for full range).\n */\n @property({type: Number}) seekingSpeed = 1 / 3;\n\n /**\n * Unit label appended to value labels (e.g., \"%\", \"kn\").\n */\n @property({type: String}) labelUnit = '';\n\n /**\n * Number of decimal places to display in value labels.\n */\n @property({type: Number}) labelDecimals = 0;\n\n /**\n * CSS width for value labels (e.g., \"5ch\", \"60px\").\n */\n @property({type: String}) labelWidth = '60px';\n\n /**\n * Whether to show the left (low) readout label.\n *\n * When false, the left readout is hidden entirely. When true, the readout\n * renders the formatted `low` value or the content slotted into `left-readout`.\n *\n * Default is true. Set via JavaScript property (no HTML attribute).\n */\n @property({type: Boolean, attribute: false}) showLeftReadout = true;\n\n /**\n * Whether to show the right (high) readout label.\n *\n * When false, the right readout is hidden entirely. When true, the readout\n * renders the formatted `high` value or the content slotted into `right-readout`.\n *\n * Default is true. Set via JavaScript property (no HTML attribute).\n */\n @property({type: Boolean, attribute: false}) showRightReadout = true;\n\n /**\n * Removes spacing between the slider and its container edges for seamless\n * layout integration. Reflected to the `hugcontainer` HTML attribute.\n */\n @property({type: Boolean, reflect: true, attribute: 'hugcontainer'})\n hugContainer = false;\n\n private get lowRatio(): number {\n return this.computeRatio(this.low);\n }\n\n private get highRatio(): number {\n return this.computeRatio(this.high);\n }\n\n private computeRatio(value: number): number {\n const range = this.max - this.min;\n if (!Number.isFinite(range) || range <= 0) return 0;\n const ratio = (value - this.min) / range;\n if (!Number.isFinite(ratio)) return 0;\n return Math.max(0, Math.min(1, ratio));\n }\n\n private animationFrame: number | null = null;\n private isMouseDown = false;\n private targetValue = 0;\n private isDragging = false;\n private isTargetingLow = false;\n private animationStartTime: number | null = null;\n private animationStartValue: number = 0;\n\n @query('input[type=\"range\"].min')\n private minInput!: HTMLInputElement;\n\n @query('input[type=\"range\"].max')\n private maxInput!: HTMLInputElement;\n\n /**\n * Handles input changes from the slider thumbs.\n * Updates the low and high values and emits the `value` event.\n *\n * @fires value {ObcSliderDoubleValueEvent}\n */\n onInput() {\n let newLow = parseFloat(this.minInput.value);\n let newHigh = parseFloat(this.maxInput.value);\n if (newLow > this.high) {\n newLow = this.high;\n this.minInput.value = this.high.toString();\n }\n if (newHigh < this.low) {\n newHigh = this.low;\n this.maxInput.value = this.low.toString();\n }\n this.low = newLow;\n this.high = newHigh;\n this.dispatchEvent(\n new CustomEvent('value', {detail: {low: this.low, high: this.high}})\n );\n }\n\n /**\n * Fires the `change` event with the current low and high values.\n *\n * @fires change\n */\n private fireChangeEvent() {\n this.dispatchEvent(\n new CustomEvent('change', {\n detail: {low: this.low, high: this.high},\n }) as ObcSliderDoubleChangeEvent\n );\n }\n\n private THUMB_WIDTH = 48;\n private THUMB_VISIBLE_WIDTH = 12;\n\n private lowClickValue(e: MouseEvent) {\n const rect = this.minInput.getBoundingClientRect();\n const left = rect.left + this.THUMB_WIDTH - this.THUMB_VISIBLE_WIDTH / 2;\n const width = rect.width - this.THUMB_WIDTH;\n const percent = (e.clientX - left) / width;\n return this.min + (this.max - this.min) * percent;\n }\n\n private highClickValue(e: MouseEvent) {\n const rect = this.maxInput.getBoundingClientRect();\n const left = rect.left + this.THUMB_VISIBLE_WIDTH / 2;\n const width = rect.width - this.THUMB_WIDTH;\n const percent = (e.clientX - left) / width;\n return this.min + (this.max - this.min) * percent;\n }\n\n private thumbRange() {\n const rect = this.minInput.getBoundingClientRect();\n const valueRange = this.max - this.min;\n const percentageRange = this.THUMB_WIDTH / rect.width;\n return valueRange * percentageRange;\n }\n\n private isClickingMinThumb(e: MouseEvent) {\n const value = this.lowClickValue(e);\n if (value > this.low) {\n return false;\n }\n return value >= this.low - this.thumbRange();\n }\n\n private isClickingMaxThumb(e: MouseEvent) {\n const value = this.highClickValue(e);\n if (value < this.high) {\n return false;\n }\n return value <= this.high + this.thumbRange();\n }\n\n private isClickingLowTrack(e: MouseEvent) {\n const value = this.lowClickValue(e);\n return value <= this.low - this.thumbRange() / 2;\n }\n\n private isClickingHighTrack(e: MouseEvent) {\n const value = this.highClickValue(e);\n return value >= this.high + this.thumbRange() / 2;\n }\n\n private isClosestToLowThumb(e: MouseEvent) {\n const lowValue = this.lowClickValue(e);\n const highValue = this.highClickValue(e);\n return Math.abs(lowValue - this.low) <= Math.abs(highValue - this.high);\n }\n\n private onMouseDown(e: MouseEvent) {\n if (this.variant === ObcSliderDoubleVariant.NoInput || this.disabled)\n return;\n if (this.isClickingMinThumb(e)) {\n this.isTargetingLow = true;\n this.isDragging = true;\n } else if (this.isClickingMaxThumb(e)) {\n this.isTargetingLow = false;\n this.isDragging = true;\n } else if (this.isClickingLowTrack(e)) {\n this.isTargetingLow = true;\n this.isDragging = false;\n } else if (this.isClickingHighTrack(e)) {\n this.isTargetingLow = false;\n this.isDragging = false;\n } else if (this.isClosestToLowThumb(e)) {\n this.isTargetingLow = true;\n this.isDragging = false;\n } else {\n this.isTargetingLow = false;\n this.isDragging = false;\n }\n this.isMouseDown = true;\n this.updateTargetValue(e);\n e.preventDefault();\n window.addEventListener('mousemove', this.onWindowMouseMove);\n window.addEventListener('mouseup', this.onWindowMouseUp);\n this.startAnimation();\n }\n\n private onWindowMouseMove = (e: MouseEvent) => {\n this.onMouseMove(e);\n };\n\n private onWindowMouseUp = () => {\n this.onMouseUp();\n };\n\n private onMouseMove(e: MouseEvent) {\n if (this.isMouseDown) {\n this.updateTargetValue(e);\n }\n }\n\n private onMouseUp() {\n this.isMouseDown = false;\n this.isDragging = false;\n window.removeEventListener('mousemove', this.onWindowMouseMove);\n window.removeEventListener('mouseup', this.onWindowMouseUp);\n this.stopAnimation();\n this.fireChangeEvent();\n }\n\n private updateTargetValue(e: MouseEvent) {\n const unroundedValue = this.isTargetingLow\n ? this.lowClickValue(e)\n : this.highClickValue(e);\n if (this.step) {\n this.targetValue = Math.round(unroundedValue / this.step) * this.step;\n } else {\n this.targetValue = unroundedValue;\n }\n if (this.isTargetingLow) {\n this.targetValue = Math.max(\n this.min,\n Math.min(this.targetValue, this.high)\n );\n } else {\n this.targetValue = Math.min(\n this.max,\n Math.max(this.targetValue, this.low)\n );\n }\n }\n\n private startAnimation() {\n this.isDragging = this.allowSeeking;\n this.animationStartTime = performance.now();\n this.animationStartValue = this.isTargetingLow ? this.low : this.high;\n const min = this.min;\n const max = this.max;\n const step = this.step;\n const duration = (1 / this.seekingSpeed) * 1000; // ms\n const direction = this.targetValue > this.animationStartValue ? 1 : -1;\n\n const animate = () => {\n let nextValue = this.targetValue;\n if (!this.isDragging) {\n const now = performance.now();\n const elapsed = now - (this.animationStartTime ?? now);\n const range = Math.abs(max - min);\n // How much of the range should be covered by now\n const expectedProgress = Math.min(elapsed / duration, 1);\n const expectedValue =\n this.animationStartValue + direction * range * expectedProgress;\n // Snap to step\n if (direction > 0) {\n nextValue =\n step === undefined\n ? expectedValue\n : Math.ceil(expectedValue - min / step) * step + min;\n nextValue = Math.min(this.targetValue, nextValue);\n } else {\n nextValue =\n step === undefined\n ? expectedValue\n : Math.floor((expectedValue - min) / step) * step + min;\n nextValue = Math.max(this.targetValue, nextValue);\n }\n }\n // Only update if value actually changes\n const isValueChanged = this.isTargetingLow\n ? this.low !== nextValue\n : this.high !== nextValue;\n if (isValueChanged) {\n if (this.isTargetingLow) {\n this.low = nextValue;\n } else {\n this.high = nextValue;\n }\n this.dispatchEvent(\n new CustomEvent('value', {detail: {low: this.low, high: this.high}})\n );\n }\n // Continue animating if not at target\n if (\n (direction > 0 && nextValue < this.targetValue) ||\n (direction < 0 && nextValue > this.targetValue)\n ) {\n this.animationFrame = requestAnimationFrame(animate);\n } else if (this.isMouseDown) {\n // If mouse is still down, wait for new target\n this.animationStartTime = performance.now();\n this.animationStartValue = this.isTargetingLow ? this.low : this.high;\n this.animationFrame = requestAnimationFrame(animate);\n this.isDragging = true;\n }\n };\n\n this.animationFrame = requestAnimationFrame(animate);\n }\n\n private stopAnimation() {\n if (this.animationFrame !== null) {\n cancelAnimationFrame(this.animationFrame);\n this.animationFrame = null;\n }\n }\n\n private formatLabel(value: number) {\n return value.toFixed(this.labelDecimals) + this.labelUnit;\n }\n\n override render() {\n return html`\n ${this.showLeftReadout\n ? html`\n <div\n class=${classMap({\n label: true,\n min: true,\n disabled: this.disabled,\n })}\n style=\"width: ${this.labelWidth};\"\n >\n <slot name=\"left-readout\">${this.formatLabel(this.low)}</slot>\n </div>\n `\n : null}\n <div\n class=${classMap({\n wrapper: true,\n [this.variant]: true,\n mouseDown: this.isMouseDown,\n dragging: this.isDragging,\n disabled: this.disabled,\n })}\n style=${styleMap({\n '--_low-ratio': String(this.lowRatio),\n '--_high-ratio': String(this.highRatio),\n })}\n @mousedown=${this.onMouseDown}\n @mouseup=${this.onMouseUp}\n @mousemove=${this.onMouseMove}\n >\n <div class=\"track\"></div>\n <input\n type=\"range\"\n min=${this.min}\n max=${this.max}\n class=\"slider min\"\n step=${ifDefined(this.step)}\n .value=${this.low.toString()}\n ?disabled=${this.variant === ObcSliderDoubleVariant.NoInput ||\n this.disabled}\n @input=${this.onInput}\n @change=${() => this.fireChangeEvent()}\n />\n <input\n type=\"range\"\n class=\"slider max\"\n min=${this.min}\n max=${this.max}\n step=${ifDefined(this.step)}\n .value=${this.high.toString()}\n ?disabled=${this.variant === ObcSliderDoubleVariant.NoInput ||\n this.disabled}\n @input=${this.onInput}\n @change=${() => this.fireChangeEvent()}\n />\n <div class=\"interactive-track\"></div>\n <div class=\"thumb min\"></div>\n <div class=\"thumb max\"></div>\n </div>\n ${this.showRightReadout\n ? html`\n <div\n class=${classMap({\n label: true,\n max: true,\n disabled: this.disabled,\n })}\n style=\"width: ${this.labelWidth};\"\n >\n <slot name=\"right-readout\">${this.formatLabel(this.high)}</slot>\n </div>\n `\n : null}\n `;\n }\n\n static override styles = unsafeCSS(componentStyle);\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'obc-slider-double': ObcSliderDouble;\n }\n}\n"],"names":["ObcSliderDoubleVariant"],"mappings":"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"}
@@ -8,6 +8,7 @@ export declare enum StatusIndicatorStatus {
8
8
  running = "running"
9
9
  }
10
10
  /**
11
+ * @slot - Label content shown next to the status indicator.
11
12
  * @beta
12
13
  */
13
14
  export declare class ObcStatusIndicator extends LitElement {
@@ -1 +1 @@
1
- {"version":3,"file":"status-indicator.d.ts","sourceRoot":"","sources":["../../../src/components/status-indicator/status-indicator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,UAAU,EAAkB,MAAM,KAAK,CAAC;AAMhD,oBAAY,qBAAqB;IAC/B,MAAM,WAAW;IACjB,QAAQ,aAAa;IACrB,OAAO,YAAY;IACnB,OAAO,YAAY;IACnB,KAAK,UAAU;IACf,OAAO,YAAY;CACpB;AAED;;GAEG;AACH,qBACa,kBAAmB,SAAQ,UAAU;IACtB,MAAM,wBAAgC;IACvD,MAAM;IAkBf,OAAgB,MAAM,0BAA2B;CAClD;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,sBAAsB,EAAE,kBAAkB,CAAC;KAC5C;CACF"}
1
+ {"version":3,"file":"status-indicator.d.ts","sourceRoot":"","sources":["../../../src/components/status-indicator/status-indicator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,UAAU,EAAkB,MAAM,KAAK,CAAC;AAMhD,oBAAY,qBAAqB;IAC/B,MAAM,WAAW;IACjB,QAAQ,aAAa;IACrB,OAAO,YAAY;IACnB,OAAO,YAAY;IACnB,KAAK,UAAU;IACf,OAAO,YAAY;CACpB;AAED;;;GAGG;AACH,qBACa,kBAAmB,SAAQ,UAAU;IACtB,MAAM,wBAAgC;IACvD,MAAM;IAkBf,OAAgB,MAAM,0BAA2B;CAClD;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,sBAAsB,EAAE,kBAAkB,CAAC;KAC5C;CACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"status-indicator.js","sources":["../../../src/components/status-indicator/status-indicator.ts"],"sourcesContent":["import {LitElement, html, unsafeCSS} from 'lit';\nimport {customElement} from '../../decorator.js';\nimport compentStyle from './status-indicator.css?inline';\nimport {classMap} from 'lit/directives/class-map.js';\nimport {property} from 'lit/decorators.js';\n\nexport enum StatusIndicatorStatus {\n active = 'active',\n inactive = 'inactive',\n caution = 'caution',\n warning = 'warning',\n alarm = 'alarm',\n running = 'running',\n}\n\n/**\n * @beta\n */\n@customElement('obc-status-indicator')\nexport class ObcStatusIndicator extends LitElement {\n @property({type: String}) status = StatusIndicatorStatus.active;\n override render() {\n return html`\n <div\n class=${classMap({\n wrapper: true,\n ['state-' + this.status]: true,\n })}\n >\n <div class=\"indicator-container\">\n <div class=\"indicator\"></div>\n </div>\n <div class=\"label\">\n <slot></slot>\n </div>\n </div>\n `;\n }\n\n static override styles = unsafeCSS(compentStyle);\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'obc-status-indicator': ObcStatusIndicator;\n }\n}\n"],"names":["StatusIndicatorStatus"],"mappings":";;;;;;;;;;;;;;;AAMO,IAAK,0CAAAA,2BAAL;AACLA,yBAAA,QAAA,IAAS;AACTA,yBAAA,UAAA,IAAW;AACXA,yBAAA,SAAA,IAAU;AACVA,yBAAA,SAAA,IAAU;AACVA,yBAAA,OAAA,IAAQ;AACRA,yBAAA,SAAA,IAAU;AANA,SAAAA;AAAA,GAAA,yBAAA,CAAA,CAAA;AAaL,IAAM,qBAAN,cAAiC,WAAW;AAAA,EAA5C,cAAA;AAAA,UAAA,GAAA,SAAA;AACqB,SAAA,SAAS;AAAA,EAAA;AAAA,EAC1B,SAAS;AAChB,WAAO;AAAA;AAAA,gBAEK,SAAS;AAAA,MACf,SAAS;AAAA,MACT,CAAC,WAAW,KAAK,MAAM,GAAG;AAAA,IAAA,CAC3B,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUR;AAGF;AArBa,mBAoBK,SAAS,UAAU,YAAY;AAnBrB,gBAAA;AAAA,EAAzB,SAAS,EAAC,MAAM,OAAA,CAAO;AAAA,GADb,mBACe,WAAA,UAAA,CAAA;AADf,qBAAN,gBAAA;AAAA,EADN,cAAc,sBAAsB;AAAA,GACxB,kBAAA;"}
1
+ {"version":3,"file":"status-indicator.js","sources":["../../../src/components/status-indicator/status-indicator.ts"],"sourcesContent":["import {LitElement, html, unsafeCSS} from 'lit';\nimport {customElement} from '../../decorator.js';\nimport compentStyle from './status-indicator.css?inline';\nimport {classMap} from 'lit/directives/class-map.js';\nimport {property} from 'lit/decorators.js';\n\nexport enum StatusIndicatorStatus {\n active = 'active',\n inactive = 'inactive',\n caution = 'caution',\n warning = 'warning',\n alarm = 'alarm',\n running = 'running',\n}\n\n/**\n * @slot - Label content shown next to the status indicator.\n * @beta\n */\n@customElement('obc-status-indicator')\nexport class ObcStatusIndicator extends LitElement {\n @property({type: String}) status = StatusIndicatorStatus.active;\n override render() {\n return html`\n <div\n class=${classMap({\n wrapper: true,\n ['state-' + this.status]: true,\n })}\n >\n <div class=\"indicator-container\">\n <div class=\"indicator\"></div>\n </div>\n <div class=\"label\">\n <slot></slot>\n </div>\n </div>\n `;\n }\n\n static override styles = unsafeCSS(compentStyle);\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'obc-status-indicator': ObcStatusIndicator;\n }\n}\n"],"names":["StatusIndicatorStatus"],"mappings":";;;;;;;;;;;;;;;AAMO,IAAK,0CAAAA,2BAAL;AACLA,yBAAA,QAAA,IAAS;AACTA,yBAAA,UAAA,IAAW;AACXA,yBAAA,SAAA,IAAU;AACVA,yBAAA,SAAA,IAAU;AACVA,yBAAA,OAAA,IAAQ;AACRA,yBAAA,SAAA,IAAU;AANA,SAAAA;AAAA,GAAA,yBAAA,CAAA,CAAA;AAcL,IAAM,qBAAN,cAAiC,WAAW;AAAA,EAA5C,cAAA;AAAA,UAAA,GAAA,SAAA;AACqB,SAAA,SAAS;AAAA,EAAA;AAAA,EAC1B,SAAS;AAChB,WAAO;AAAA;AAAA,gBAEK,SAAS;AAAA,MACf,SAAS;AAAA,MACT,CAAC,WAAW,KAAK,MAAM,GAAG;AAAA,IAAA,CAC3B,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUR;AAGF;AArBa,mBAoBK,SAAS,UAAU,YAAY;AAnBrB,gBAAA;AAAA,EAAzB,SAAS,EAAC,MAAM,OAAA,CAAO;AAAA,GADb,mBACe,WAAA,UAAA,CAAA;AADf,qBAAN,gBAAA;AAAA,EADN,cAAc,sBAAsB;AAAA,GACxB,kBAAA;"}
@@ -83,6 +83,7 @@ export type VolumeChangeEvent = CustomEvent<number>;
83
83
  * @fires audio-click - When the Audio button is clicked
84
84
  * @fires audio-volume-change - {VolumeChangeEvent} - When the Audio volume is changed
85
85
  * @fires microphone-click - When the Microphone button is clicked
86
+ * @fires push-to-talk-change - When the push-to-talk toggle is changed
86
87
  * @fires battery-usage-click - When the Battery usage button is clicked
87
88
  * @fires battery-saving-mode-change - When the Battery saving mode is changed
88
89
  * @fires battery-mode-change - When the Battery mode is changed
@@ -93,6 +94,7 @@ export type VolumeChangeEvent = CustomEvent<number>;
93
94
  * @fires to-sub-menu-click - When the sub menu is clicked
94
95
  * @fires wifi-options-click - When the Wi-Fi options are clicked
95
96
  * @fires wifi-disconnect-click - When the Wi-Fi disconnect is clicked
97
+ * @slot battery-status - Custom battery status text (falls back to the built-in charging/battery label).
96
98
  * @stable
97
99
  */
98
100
  export declare class ObcSystemMenu extends LitElement {
@@ -1 +1 @@
1
- {"version":3,"file":"system-menu.d.ts","sourceRoot":"","sources":["../../../src/components/system-menu/system-menu.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"system-menu.d.ts","sourceRoot":"","sources":["../../../src/components/system-menu/system-menu.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"system-menu.js","sources":["../../../src/components/system-menu/system-menu.ts"],"sourcesContent":["import {LitElement, TemplateResult, html, nothing, unsafeCSS} from 'lit';\nimport {customElement} from '../../decorator.js';\nimport compentStyle from './system-menu.css?inline';\nimport {property} from 'lit/decorators.js';\nimport {localized, msg} from '@lit/localize';\nimport '../../icons/icon-chevron-right-google.js';\nimport '../../icons/icon-wifi2-google.js';\nimport '../icon-check-button/icon-check-button.js';\nimport '../../icons/icon-wifi2-off-google.js';\nimport '../../icons/icon-sound-muted.js';\nimport '../../icons/icon-sound.js';\nimport '../../icons/icon-com-mic-muted-google.js';\nimport '../../icons/icon-com-microphone.js';\nimport '../slider/slider.js';\nimport {ObcSliderValueEvent} from '../slider/slider.js';\nimport '../audio-output/audio-output.js';\nimport '../battery-icon/battery-icon.js';\nimport '../../icons/icon-settings-iec.js';\nimport '../icon-button/icon-button.js';\nimport {IconButtonVariant} from '../icon-button/icon-button.js';\nimport '../../icons/icon-chevron-left-google.js';\nimport '../radio/radio.js';\nimport '../toggle-switch/toggle-switch.js';\nimport '../navigation-item/navigation-item.js';\nimport '../accordion-item/accordion-item.js';\nimport '../button/button.js';\nimport '../scrollbar/scrollbar.js';\n\nexport interface WifiState {\n enabled: boolean;\n connected: boolean;\n networkName?: string;\n strength: number; // 0-100, 0 is no signal, 100 is full signal\n status: string; // Example: \"Connected, Secure\"\n networks?: {\n name: string;\n signalStrength: number; // 0-100, 0 is no signal, 100 is full signal\n }[];\n otherNetworks?: {\n name: string;\n signalStrength: number; // 0-100, 0 is no signal, 100 is full signal\n }[];\n}\n\nexport interface AudioState {\n muted: boolean;\n volume: number; // 0-100, 0 is muted, 100 is full volume\n outputs?: {\n name: string;\n }[];\n selectedOutput?: string;\n controlMode?: SystemMenuControlMode;\n}\n\nexport interface MicrophoneState {\n muted: boolean;\n currentLevel: number; // 0-100, 0 is no sound, 100 is full sound\n inputs?: {\n name: string;\n }[];\n selectedInput?: string;\n pushToTalk?: boolean;\n controlMode?: SystemMenuControlMode;\n}\n\nexport interface BatteryState {\n level: number; // 0-100, 0 is empty, 100 is full\n charging: boolean; // true if charging, false if not charging,\n poweredNotCharging?: boolean; // true if powered and not charging, else false\n notification?: boolean; // true if notification, else false\n batterySavingMode?: boolean; // true if battery saving mode is enabled, false if not enabled, undefined if not supported\n hasUsageButton: boolean; // true if usage button is should be shown, false if not shown\n modes?: {\n name: string;\n }[];\n selectedMode?: string;\n}\n\nexport enum SystemSubMenu {\n main = 'main',\n wifi = 'wifi',\n audio = 'audio',\n microphone = 'microphone',\n battery = 'battery',\n}\n\nexport enum SystemMenuControlMode {\n muteButton = 'mute-button',\n iconOnly = 'icon-only',\n hidden = 'hidden',\n}\n\nexport type VolumeChangeEvent = CustomEvent<number>;\n\n/**\n * @fires wifi-click - When the Wi-Fi button is clicked\n * @fires audio-click - When the Audio button is clicked\n * @fires audio-volume-change - {VolumeChangeEvent} - When the Audio volume is changed\n * @fires microphone-click - When the Microphone button is clicked\n * @fires battery-usage-click - When the Battery usage button is clicked\n * @fires battery-saving-mode-change - When the Battery saving mode is changed\n * @fires battery-mode-change - When the Battery mode is changed\n * @fires wifi-network-change - When the Wi-Fi network is changed\n * @fires audio-output-change - When the Audio output is changed\n * @fires microphone-input-change - When the Microphone input is changed\n * @fires settings-click - When the Settings button is clicked\n * @fires to-sub-menu-click - When the sub menu is clicked\n * @fires wifi-options-click - When the Wi-Fi options are clicked\n * @fires wifi-disconnect-click - When the Wi-Fi disconnect is clicked\n * @stable\n */\n@customElement('obc-system-menu')\n@localized()\nexport class ObcSystemMenu extends LitElement {\n @property({attribute: false}) wifiState: WifiState | undefined;\n @property({attribute: false}) audioState: AudioState | undefined;\n @property({attribute: false}) microphoneState: MicrophoneState | undefined;\n @property({attribute: false}) batteryState: BatteryState | undefined;\n @property({type: Boolean}) condensed: boolean = false;\n @property({type: Boolean}) showSettingsButton: boolean = false;\n @property({type: String}) activeSubMenu: SystemSubMenu = SystemSubMenu.main;\n @property({type: Boolean}) externalControl: boolean = false;\n @property({type: Boolean}) smallScreen: boolean = false;\n private get audioControlMode(): SystemMenuControlMode {\n return this.audioState?.controlMode ?? SystemMenuControlMode.muteButton;\n }\n\n private get microphoneControlMode(): SystemMenuControlMode {\n return (\n this.microphoneState?.controlMode ?? SystemMenuControlMode.muteButton\n );\n }\n\n private renderAudioControl() {\n if (!this.audioState) {\n return nothing;\n }\n\n if (this.audioControlMode === SystemMenuControlMode.hidden) {\n return nothing;\n }\n\n if (this.audioControlMode === SystemMenuControlMode.iconOnly) {\n return html`<div\n class=\"content-item-icon ${this.audioState.muted ? 'is-muted' : ''}\"\n role=\"img\"\n aria-label=${this.audioState.muted\n ? msg('Audio muted')\n : msg('Audio on')}\n >\n ${this.audioState.muted\n ? html`<obi-sound-muted></obi-sound-muted>`\n : html`<obi-sound></obi-sound>`}\n </div>`;\n }\n\n return html`<obc-icon-check-button\n class=\"content-item-btn\"\n .checked=${!this.audioState.muted}\n @icon-check-button-click=${this.handleAudioClick}\n >\n ${this.audioState.muted\n ? html`<obi-sound-muted slot=\"icon\"></obi-sound-muted>`\n : html`<obi-sound slot=\"icon\"></obi-sound>`}\n </obc-icon-check-button>`;\n }\n\n private renderMicrophoneControl(options?: {externalControl?: boolean}) {\n if (!this.microphoneState) {\n return nothing;\n }\n\n if (this.microphoneControlMode === SystemMenuControlMode.hidden) {\n return nothing;\n }\n\n if (this.microphoneControlMode === SystemMenuControlMode.iconOnly) {\n return html`<div\n class=\"content-item-icon ${this.microphoneState.muted\n ? 'is-muted'\n : ''}\"\n role=\"img\"\n aria-label=${this.microphoneState.muted\n ? msg('Microphone muted')\n : msg('Microphone on')}\n >\n ${this.microphoneState.muted\n ? html`<obi-com-mic-muted-google></obi-com-mic-muted-google>`\n : html`<obi-com-microphone></obi-com-microphone>`}\n </div>`;\n }\n\n return html`<obc-icon-check-button\n class=\"content-item-btn\"\n .checked=${!this.microphoneState.muted}\n ?externalControl=${options?.externalControl ?? false}\n @icon-check-button-click=${this.handleMicrophoneClick}\n >\n ${this.microphoneState.muted\n ? html`<obi-com-mic-muted-google\n slot=\"icon\"\n ></obi-com-mic-muted-google>`\n : html`<obi-com-microphone slot=\"icon\"></obi-com-microphone>`}\n </obc-icon-check-button>`;\n }\n\n private get effectiveSubMenu(): SystemSubMenu {\n if (this.smallScreen && this.activeSubMenu === SystemSubMenu.main) {\n return SystemSubMenu.wifi;\n }\n return this.activeSubMenu;\n }\n\n override render() {\n if (this.smallScreen) {\n return this.renderSmallScreen();\n }\n\n let content: (TemplateResult | symbol)[];\n switch (this.activeSubMenu) {\n case SystemSubMenu.main:\n content = [\n this.renderWifi(),\n this.renderAudio(),\n this.renderMicrophone(),\n this.renderBattery(),\n this.renderSettingsButton(),\n ];\n break;\n case SystemSubMenu.wifi:\n content = [\n this.renderSubMenuTitle(msg('Wi-Fi')),\n this.renderWifiSubMenuHeader(),\n this.renderWifMenuOptions(),\n this.renderSettingsButton(),\n ];\n break;\n case SystemSubMenu.audio:\n content = [\n this.renderSubMenuTitle(msg('Audio')),\n this.renderAudioSubMenuHeader(),\n this.renderAudioSubMenuOptions(),\n this.renderSettingsButton(),\n ];\n break;\n case SystemSubMenu.microphone:\n content = [\n this.renderSubMenuTitle(msg('Microphone')),\n this.renderMicrophoneSubMenuHeader(),\n this.renderMicrophoneSubMenuOptions(),\n this.renderSettingsButton(),\n ];\n break;\n case SystemSubMenu.battery:\n content = [\n this.renderSubMenuTitle(msg('Battery')),\n this.renderBatterySubMenuHeader(),\n this.renderBatterySubMenuOptions(),\n this.renderSettingsButton(),\n ];\n break;\n }\n return html`<div class=\"wrapper ${this.condensed ? 'condensed' : ''}\">\n ${content}\n </div> `;\n }\n\n private dispatchClickEvent(eventName: string) {\n this.dispatchEvent(new CustomEvent(eventName));\n }\n\n private handleWifiClick(event: CustomEvent<{checked: boolean}>) {\n this.wifiState!.enabled = event.detail.checked;\n this.dispatchEvent(\n new CustomEvent('wifi-click', {detail: {enabled: event.detail.checked}})\n );\n }\n\n private handleAudioClick(event: CustomEvent) {\n this.audioState!.muted = !event.detail.checked;\n this.dispatchEvent(\n new CustomEvent('audio-click', {detail: {muted: !event.detail.checked}})\n );\n }\n\n private handleAudioVolumeChange(event: ObcSliderValueEvent) {\n this.dispatchEvent(\n new CustomEvent('audio-volume-change', {detail: {volume: event.detail}})\n );\n }\n\n private handleToSubMenuClick(subMenu: SystemSubMenu) {\n if (!this.externalControl) {\n this.activeSubMenu = subMenu;\n }\n this.dispatchClickEvent('to-sub-menu-click');\n }\n\n private renderWifi() {\n if (!this.wifiState) {\n return nothing;\n }\n const showMoreButton =\n this.wifiState.networks && this.wifiState.networks.length > 0;\n const title = showMoreButton\n ? html`<button\n class=\"title-container\"\n @click=${() => this.handleToSubMenuClick(SystemSubMenu.wifi)}\n >\n <div class=\"title\">${msg('Wi-Fi')}</div>\n <div class=\"icon-container\">\n <obi-chevron-right-google class=\"icon\"></obi-chevron-right-google>\n </div>\n </button>`\n : html`<div class=\"title-container\">\n <div class=\"title\">${msg('Wi-Fi')}</div>\n </div>`;\n return html`<div class=\"group\">\n ${this.condensed ? nothing : title}\n <div class=\"content-container\">\n <div class=\"action-container\">\n <obc-icon-check-button\n class=\"content-item-btn\"\n .checked=${!!this.wifiState.enabled}\n @icon-check-button-click=${this.handleWifiClick}\n >\n ${this.wifiState?.enabled\n ? html`<obi-wifi2-google slot=\"icon\"></obi-wifi2-google>`\n : html`<obi-wifi2-off-google slot=\"icon\"></obi-wifi2-off-google>`}\n </obc-icon-check-button>\n <div\n class=\"content-item-value ${this.wifiState.enabled\n ? 'enabled'\n : 'disabled'}\"\n >\n ${this.wifiState?.networkName}\n </div>\n </div>\n ${this.condensed && showMoreButton\n ? html` <obc-icon-button\n .variant=${IconButtonVariant.flat}\n @click=${() => this.handleToSubMenuClick(SystemSubMenu.wifi)}\n >\n <obi-chevron-right-google></obi-chevron-right-google>\n </obc-icon-button>`\n : nothing}\n </div>\n </div>`;\n }\n\n private renderAudio() {\n if (!this.audioState) {\n return nothing;\n }\n const showMoreButton =\n this.audioState.outputs && this.audioState.outputs.length > 0;\n\n const title = showMoreButton\n ? html`<button\n class=\"title-container\"\n @click=${() => this.handleToSubMenuClick(SystemSubMenu.audio)}\n >\n <div class=\"title\">${msg('Audio')}</div>\n <div class=\"icon-container\">\n <obi-chevron-right-google class=\"icon\"></obi-chevron-right-google>\n </div>\n </button>`\n : html`<div class=\"title-container\">\n <div class=\"title\">${msg('Audio')}</div>\n </div>`;\n return html`<div class=\"group\">\n ${this.condensed ? nothing : title}\n <div class=\"content-container\">\n <div\n class=\"action-container ${this.audioControlMode ===\n SystemMenuControlMode.hidden\n ? 'control-hidden'\n : ''}\"\n >\n ${this.renderAudioControl()}\n <obc-slider\n class=\"content-item-slider\"\n .value=${this.audioState.volume}\n @value=${this.handleAudioVolumeChange}\n ></obc-slider>\n </div>\n ${this.condensed && showMoreButton\n ? html` <obc-icon-button\n .variant=${IconButtonVariant.flat}\n @click=${() => this.handleToSubMenuClick(SystemSubMenu.audio)}\n >\n <obi-chevron-right-google></obi-chevron-right-google>\n </obc-icon-button>`\n : nothing}\n </div>\n </div>`;\n }\n\n private renderMicrophone() {\n if (!this.microphoneState) {\n return nothing;\n }\n const hasInputs =\n this.microphoneState.inputs && this.microphoneState.inputs.length > 0;\n const hasPushToTalk = this.microphoneState.pushToTalk !== undefined;\n const showMoreButton = hasInputs || hasPushToTalk;\n\n const title = showMoreButton\n ? html`<button\n class=\"title-container\"\n @click=${() => this.handleToSubMenuClick(SystemSubMenu.microphone)}\n >\n <div class=\"title\">${msg('Microphone')}</div>\n <div class=\"icon-container\">\n <obi-chevron-right-google class=\"icon\"></obi-chevron-right-google>\n </div>\n </button>`\n : html`<div class=\"title-container\">\n <div class=\"title\">${msg('Microphone')}</div>\n </div>`;\n return html`<div class=\"group\">\n ${this.condensed ? nothing : title}\n <div class=\"content-container\">\n <div\n class=\"action-container ${this.microphoneControlMode ===\n SystemMenuControlMode.hidden\n ? 'control-hidden'\n : ''}\"\n >\n ${this.renderMicrophoneControl()}\n <div class=\"content-item-value\">\n <obc-audio-output\n .volume=${(this.microphoneState.currentLevel / 100) * 8}\n ></obc-audio-output>\n </div>\n </div>\n ${this.condensed && showMoreButton\n ? html` <obc-icon-button\n .variant=${IconButtonVariant.flat}\n @click=${() =>\n this.handleToSubMenuClick(SystemSubMenu.microphone)}\n >\n <obi-chevron-right-google></obi-chevron-right-google>\n </obc-icon-button>`\n : nothing}\n </div>\n </div>`;\n }\n\n private renderBattery() {\n if (!this.batteryState) {\n return nothing;\n }\n const hasModes =\n this.batteryState.modes && this.batteryState.modes.length > 0;\n const hasUsageButton = this.batteryState.hasUsageButton;\n const hasBatterySavingMode =\n this.batteryState.batterySavingMode !== undefined;\n const showMoreButton = hasModes || hasUsageButton || hasBatterySavingMode;\n const title = showMoreButton\n ? html`<button\n class=\"title-container\"\n @click=${() => this.handleToSubMenuClick(SystemSubMenu.battery)}\n >\n <div class=\"title\">${msg('Battery')}</div>\n <div class=\"icon-container\">\n <obi-chevron-right-google class=\"icon\"></obi-chevron-right-google>\n </div>\n </button>`\n : html`<div class=\"title-container\">\n <div class=\"title\">${msg('Battery')}</div>\n </div>`;\n const batteryStatus = this.batteryState.charging\n ? msg('Charging')\n : this.batteryState.poweredNotCharging\n ? msg('Powered & not charging')\n : msg('On battery');\n return html`<div class=\"group\">\n ${this.condensed ? nothing : title}\n <div class=\"content-container battery-container\">\n <div class=\"action-container\">\n <div class=\"battery\">\n <obc-battery-icon\n .level=${this.batteryState.level}\n .charging=${this.batteryState.charging}\n .poweredNotCharging=${this.batteryState.poweredNotCharging ??\n false}\n .notification=${this.batteryState.notification ?? false}\n ></obc-battery-icon>\n <div class=\"percentage\">${this.batteryState.level}%</div>\n <div class=\"status\">\n <slot name=\"battery-status\">${batteryStatus}</slot>\n </div>\n </div>\n </div>\n ${this.condensed && showMoreButton\n ? html` <obc-icon-button\n .variant=${IconButtonVariant.flat}\n @click=${() => this.handleToSubMenuClick(SystemSubMenu.battery)}\n >\n <obi-chevron-right-google></obi-chevron-right-google>\n </obc-icon-button>`\n : nothing}\n </div>\n </div>`;\n }\n\n private renderSettingsButton() {\n if (!this.showSettingsButton) {\n return nothing;\n }\n return html`<div class=\"group\">\n <button\n class=\"title-container settings\"\n @click=${() => this.dispatchClickEvent('settings-click')}\n >\n <div class=\"icon-container\">\n <obi-settings-iec class=\"icon\"></obi-settings-iec>\n </div>\n <div class=\"title\">${msg('Settings')}</div>\n </button>\n </div>`;\n }\n\n private renderSubMenuTitle(title: string) {\n return html`\n <div class=\"title-container sub-menu-title\">\n <obc-icon-button\n .variant=${IconButtonVariant.normal}\n @click=${() => this.handleToSubMenuClick(SystemSubMenu.main)}\n >\n <obi-chevron-left-google></obi-chevron-left-google>\n </obc-icon-button>\n <div class=\"title\">${title}</div>\n </div>\n `;\n }\n\n private renderWifiSubMenuHeader() {\n return html` <div class=\"sub-container\">\n <div class=\"row wifi-container\">\n <obi-wifi2-google class=\"icon large\"></obi-wifi2-google>\n <div class=\"title wifi-name\">${this.wifiState?.networkName}</div>\n <div class=\"wifi-status\">${this.wifiState?.status}</div>\n </div>\n <div class=\"row\">\n <obc-button\n @click=${() => this.dispatchClickEvent('wifi-options-click')}\n fullWidth\n >${msg('Options')}</obc-button\n >\n ${this.wifiState?.connected\n ? html`<obc-button\n @click=${() => this.dispatchClickEvent('wifi-disconnect-click')}\n fullWidth\n >${msg('Disconnect')}</obc-button\n >`\n : nothing}\n </div>\n </div>`;\n }\n\n private renderAudioSubMenuHeader() {\n return html` <div class=\"sub-container\">\n <div class=\"row\">\n ${this.audioState?.muted\n ? html`<obi-sound-muted class=\"icon large off\"></obi-sound-muted>`\n : html`<obi-sound class=\"icon large\"></obi-sound>`}\n <div class=\"title\">\n ${this.audioState?.volume}\n <div class=\"unit\">%</div>\n </div>\n </div>\n <div class=\"row\">\n ${this.renderAudioControl()}\n <obc-slider\n class=\"content-item-slider\"\n .value=${this.audioState?.volume ?? 0}\n @value=${this.handleAudioVolumeChange}\n ></obc-slider>\n </div>\n </div>`;\n }\n\n private handleMicrophoneClick(event: CustomEvent<{checked: boolean}>) {\n this.microphoneState!.muted = !event.detail.checked;\n this.dispatchEvent(\n new CustomEvent('microphone-click', {\n detail: {muted: !event.detail.checked},\n })\n );\n }\n\n private handlePushToTalkClick(event: InputEvent) {\n this.dispatchEvent(\n new CustomEvent('push-to-talk-change', {\n detail: {pushToTalk: (event.target as HTMLInputElement).checked},\n })\n );\n }\n\n private handleBatterySavingModeClick(event: CustomEvent<{checked: boolean}>) {\n this.dispatchEvent(\n new CustomEvent('battery-saving-mode-change', {\n detail: {batterySavingMode: event.detail.checked},\n })\n );\n }\n\n private renderMicrophoneSubMenuHeader() {\n const isNoMuteButton =\n this.microphoneControlMode === SystemMenuControlMode.iconOnly ||\n this.microphoneControlMode === SystemMenuControlMode.hidden;\n return html` <div class=\"sub-container\">\n <div class=\"row\">\n ${this.microphoneState?.muted\n ? html`<obi-com-mic-muted-google\n class=\"icon large\"\n ></obi-com-mic-muted-google>`\n : html`<obi-com-microphone class=\"icon large\"></obi-com-microphone>`}\n <div class=\"title\">\n ${this.microphoneState?.currentLevel}\n <div class=\"unit\">dB</div>\n </div>\n </div>\n <div class=\"row ${isNoMuteButton ? 'no-mute-button' : ''}\">\n ${this.renderMicrophoneControl({externalControl: true})}\n <obc-audio-output\n .volume=${((this.microphoneState?.currentLevel ?? 0) / 100) * 8}\n ></obc-audio-output>\n </div>\n ${this.microphoneState?.pushToTalk !== undefined\n ? html`<div class=\"row no-padding\">\n <obc-toggle-switch\n .checked=${this.microphoneState?.pushToTalk}\n @input=${this.handlePushToTalkClick}\n label=${msg('Push to talk')}\n ></obc-toggle-switch>\n </div>`\n : nothing}\n </div>`;\n }\n\n private handleBatteryUsageClick() {\n this.dispatchEvent(\n new CustomEvent('battery-usage-click', {detail: {usage: true}})\n );\n }\n\n private renderBatterySubMenuHeader() {\n if (!this.batteryState) {\n return nothing;\n }\n return html` <div class=\"sub-container\">\n <div class=\"row\">\n <obc-battery-icon\n class=\"icon large\"\n .level=${this.batteryState.level}\n .charging=${this.batteryState.charging}\n .poweredNotCharging=${this.batteryState.poweredNotCharging ?? false}\n .notification=${this.batteryState.notification ?? false}\n ></obc-battery-icon>\n <div class=\"title\">\n ${this.batteryState.level}\n <div class=\"unit\">%</div>\n </div>\n </div>\n <div class=\"row\">\n <obc-button @click=${this.handleBatteryUsageClick} fullWidth>\n ${msg('Usage')}\n </obc-button>\n </div>\n ${this.batteryState.batterySavingMode !== undefined\n ? html`<div class=\"row no-padding\">\n <obc-toggle-switch\n .checked=${this.batteryState.batterySavingMode}\n @toggle-switch-click=${this.handleBatterySavingModeClick}\n label=${msg('Battery saving mode')}\n ></obc-toggle-switch>\n </div>`\n : nothing}\n </div>`;\n }\n\n private handleWifiNetworkClick(name: string) {\n this.dispatchEvent(\n new CustomEvent('wifi-network-change', {detail: {network: name}})\n );\n }\n\n private renderWifMenuOptions() {\n if (this.wifiState?.networks?.length === 0) {\n return nothing;\n }\n return html`\n <div class=\"sub-container sub-container-title\">\n <div class=\"row title2\">${msg('Wi-Fi')}</div>\n </div>\n <div class=\"sub-container\">\n <div class=\"row navigation-items\">\n ${this.wifiState?.networks?.map(\n (option) => html`\n <obc-navigation-item\n .label=${option.name}\n .checked=${option.name === this.wifiState?.networkName}\n @click=${() => this.handleWifiNetworkClick(option.name)}\n hasIcon\n >\n <obi-wifi2-google slot=\"icon\"></obi-wifi2-google>\n </obc-navigation-item>\n `\n )}\n <obc-accordion-item title=${msg('Other networks')}>\n <div slot=\"expanded-content\">\n ${this.wifiState?.otherNetworks?.map(\n (option) => html`\n <obc-navigation-item\n .label=${option.name}\n .checked=${option.name === this.wifiState?.networkName}\n @click=${() => this.handleWifiNetworkClick(option.name)}\n hasIcon\n >\n <obi-wifi2-google slot=\"icon\"></obi-wifi2-google>\n </obc-navigation-item>\n `\n )}\n </div>\n </obc-accordion-item>\n </div>\n </div>\n `;\n }\n\n private handleAudioOutputClick(name: string) {\n this.dispatchEvent(\n new CustomEvent('audio-output-change', {detail: {output: name}})\n );\n }\n\n private handleMicrophoneInputClick(name: string) {\n this.dispatchEvent(\n new CustomEvent('microphone-input-change', {detail: {input: name}})\n );\n }\n\n private handleBatteryModeClick(name: string) {\n this.dispatchEvent(\n new CustomEvent('battery-mode-change', {detail: {mode: name}})\n );\n }\n\n private renderAudioSubMenuOptions() {\n return this.renderSubMenuOptions(\n msg('Output'),\n this.audioState?.outputs ?? [],\n this.audioState?.selectedOutput ?? '',\n (name: string) => this.handleAudioOutputClick(name)\n );\n }\n\n private renderMicrophoneSubMenuOptions() {\n return this.renderSubMenuOptions(\n msg('Input'),\n this.microphoneState?.inputs ?? [],\n this.microphoneState?.selectedInput ?? '',\n (name: string) => this.handleMicrophoneInputClick(name)\n );\n }\n\n private renderBatterySubMenuOptions() {\n return this.renderSubMenuOptions(\n msg('Mode'),\n this.batteryState?.modes ?? [],\n this.batteryState?.selectedMode ?? '',\n (name: string) => this.handleBatteryModeClick(name)\n );\n }\n\n private renderSubMenuOptions(\n title: string,\n options: {name: string}[],\n selectedOption: string,\n handleOptionClick: (name: string) => void\n ) {\n if (options.length === 0) {\n return nothing;\n }\n return html`\n <div class=\"sub-container sub-container-title\">\n <div class=\"row title2\">${title}</div>\n </div>\n <div class=\"sub-container\">\n <div class=\"row radio\">\n ${options.map(\n (option) => html`\n <obc-radio\n .name=${title}\n .label=${option.name}\n .checked=${option.name === selectedOption}\n @change=${() => handleOptionClick(option.name)}\n ></obc-radio>\n `\n )}\n </div>\n </div>\n `;\n }\n\n // --- Small screen methods ---\n\n private renderSmallScreen() {\n const activeTab = this.effectiveSubMenu;\n let content: TemplateResult | symbol = nothing;\n switch (activeTab) {\n case SystemSubMenu.wifi:\n content = this.renderSmallScreenWifi();\n break;\n case SystemSubMenu.audio:\n content = this.renderSmallScreenAudio();\n break;\n case SystemSubMenu.microphone:\n content = this.renderSmallScreenMicrophone();\n break;\n case SystemSubMenu.battery:\n content = this.renderSmallScreenBattery();\n break;\n }\n return html`<div class=\"wrapper small-screen\">\n <div class=\"small-screen-content\">${content}</div>\n ${this.renderMenuBar(activeTab)}\n </div>`;\n }\n\n private handleSmallScreenWifiToggle(event: InputEvent) {\n const enabled = (event.target as HTMLInputElement).checked;\n this.dispatchEvent(new CustomEvent('wifi-click', {detail: {enabled}}));\n }\n\n private renderSmallScreenWifi() {\n if (!this.wifiState) {\n return nothing;\n }\n return html`\n <div class=\"small-screen-header\">\n <div class=\"small-screen-title-row\">\n <span>${msg('Wi-Fi')}</span>\n <obc-toggle-switch\n .checked=${this.wifiState.enabled}\n @input=${this.handleSmallScreenWifiToggle}\n ></obc-toggle-switch>\n </div>\n </div>\n <div class=\"small-screen-divider\"></div>\n <obc-scrollbar class=\"small-screen-options\">\n <div class=\"small-screen-options-content\">\n ${this.wifiState.networks?.map(\n (network) => html`\n <obc-navigation-item\n .label=${network.name}\n .checked=${network.name === this.wifiState?.networkName}\n @click=${() => this.handleWifiNetworkClick(network.name)}\n hasIcon\n >\n <obi-wifi2-google slot=\"icon\"></obi-wifi2-google>\n </obc-navigation-item>\n `\n )}\n </div>\n </obc-scrollbar>\n `;\n }\n\n private renderSmallScreenAudio() {\n if (!this.audioState) {\n return nothing;\n }\n return html`\n <div class=\"small-screen-header\">\n <div class=\"small-screen-title-row\">\n <span>${msg('Audio')}</span>\n </div>\n <div class=\"small-screen-controls-row\">\n ${this.renderAudioControl()}\n <div class=\"small-screen-slider-container\">\n <obc-slider\n class=\"small-screen-slider\"\n .value=${this.audioState.volume}\n @value=${this.handleAudioVolumeChange}\n ></obc-slider>\n <span class=\"small-screen-volume-label\"\n >${this.audioState.volume}%</span\n >\n </div>\n </div>\n </div>\n <div class=\"small-screen-divider\"></div>\n <obc-scrollbar class=\"small-screen-options\">\n <div class=\"small-screen-options-content\">\n ${(this.audioState.outputs ?? []).map(\n (output) => html`\n <obc-radio\n name=\"output\"\n .label=${output.name}\n .checked=${output.name === this.audioState?.selectedOutput}\n @change=${() => this.handleAudioOutputClick(output.name)}\n ></obc-radio>\n `\n )}\n </div>\n </obc-scrollbar>\n `;\n }\n\n private renderSmallScreenMicrophone() {\n if (!this.microphoneState) {\n return nothing;\n }\n const isNoMuteButton =\n this.microphoneControlMode === SystemMenuControlMode.iconOnly ||\n this.microphoneControlMode === SystemMenuControlMode.hidden;\n return html`\n <div class=\"small-screen-header\">\n <div class=\"small-screen-title-row\">\n <span>${msg('Microphone')}</span>\n </div>\n <div\n class=\"small-screen-controls-row ${isNoMuteButton\n ? 'no-mute-button'\n : ''}\"\n >\n ${this.renderMicrophoneControl()}\n <obc-audio-output\n class=\"small-screen-audio-output\"\n .volume=${(this.microphoneState.currentLevel / 100) * 8}\n ></obc-audio-output>\n </div>\n ${this.microphoneState.pushToTalk !== undefined\n ? html`<div class=\"small-screen-toggle-row\">\n <obc-toggle-switch\n .checked=${this.microphoneState.pushToTalk}\n @input=${this.handlePushToTalkClick}\n label=${msg('Push to talk')}\n ></obc-toggle-switch>\n </div>`\n : nothing}\n </div>\n <div class=\"small-screen-divider\"></div>\n <obc-scrollbar class=\"small-screen-options\">\n <div class=\"small-screen-options-content\">\n ${(this.microphoneState.inputs ?? []).map(\n (input) => html`\n <obc-radio\n name=\"input\"\n .label=${input.name}\n .checked=${input.name === this.microphoneState?.selectedInput}\n @change=${() => this.handleMicrophoneInputClick(input.name)}\n ></obc-radio>\n `\n )}\n </div>\n </obc-scrollbar>\n `;\n }\n\n private renderSmallScreenBattery() {\n if (!this.batteryState) {\n return nothing;\n }\n return html`\n <div class=\"small-screen-header\">\n <div class=\"small-screen-title-row\">\n <span>${msg('Battery')}</span>\n <div class=\"small-screen-battery-info\">\n <obc-battery-icon\n .level=${this.batteryState.level}\n .charging=${this.batteryState.charging}\n .poweredNotCharging=${this.batteryState.poweredNotCharging ??\n false}\n .notification=${this.batteryState.notification ?? false}\n ></obc-battery-icon>\n <span class=\"small-screen-battery-level\"\n >${this.batteryState.level}%</span\n >\n </div>\n </div>\n ${this.batteryState.hasUsageButton\n ? html`<div class=\"small-screen-button-row\">\n <obc-button @click=${this.handleBatteryUsageClick} fullWidth>\n ${msg('Usage')}\n </obc-button>\n </div>`\n : nothing}\n ${this.batteryState.batterySavingMode !== undefined\n ? html`<div class=\"small-screen-toggle-row\">\n <obc-toggle-switch\n .checked=${this.batteryState.batterySavingMode}\n @toggle-switch-click=${this.handleBatterySavingModeClick}\n label=${msg('Battery saving mode')}\n ></obc-toggle-switch>\n </div>`\n : nothing}\n </div>\n <div class=\"small-screen-divider\"></div>\n <obc-scrollbar class=\"small-screen-options\">\n <div class=\"small-screen-options-content\">\n ${(this.batteryState.modes ?? []).map(\n (mode) => html`\n <obc-radio\n name=\"mode\"\n .label=${mode.name}\n .checked=${mode.name === this.batteryState?.selectedMode}\n @change=${() => this.handleBatteryModeClick(mode.name)}\n ></obc-radio>\n `\n )}\n </div>\n </obc-scrollbar>\n `;\n }\n\n private renderMenuBarButton(\n subMenu: SystemSubMenu,\n activeTab: SystemSubMenu,\n label: string,\n icon: TemplateResult\n ) {\n return html`<button\n class=${activeTab === subMenu ? 'active' : ''}\n title=${label}\n @click=${() => this.handleToSubMenuClick(subMenu)}\n >\n ${icon}\n </button>`;\n }\n\n private renderMenuBar(activeTab: SystemSubMenu) {\n return html`\n <div class=\"menu-bar\">\n ${this.wifiState\n ? this.renderMenuBarButton(\n SystemSubMenu.wifi,\n activeTab,\n msg('Wi-Fi'),\n html`<obi-wifi2-google class=\"tab-icon\"></obi-wifi2-google>`\n )\n : nothing}\n ${this.audioState\n ? this.renderMenuBarButton(\n SystemSubMenu.audio,\n activeTab,\n msg('Audio'),\n html`<obi-sound class=\"tab-icon\"></obi-sound>`\n )\n : nothing}\n ${this.microphoneState\n ? this.renderMenuBarButton(\n SystemSubMenu.microphone,\n activeTab,\n msg('Microphone'),\n html`<obi-com-microphone class=\"tab-icon\"></obi-com-microphone>`\n )\n : nothing}\n ${this.batteryState\n ? this.renderMenuBarButton(\n SystemSubMenu.battery,\n activeTab,\n msg('Battery'),\n html`<obc-battery-icon\n class=\"tab-icon\"\n .level=${this.batteryState.level}\n .charging=${this.batteryState.charging}\n .poweredNotCharging=${this.batteryState.poweredNotCharging ??\n false}\n .notification=${this.batteryState.notification ?? false}\n ></obc-battery-icon>`\n )\n : nothing}\n </div>\n `;\n }\n\n static override styles = unsafeCSS(compentStyle);\n}\n"],"names":["SystemSubMenu","SystemMenuControlMode"],"mappings":"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"}
1
+ {"version":3,"file":"system-menu.js","sources":["../../../src/components/system-menu/system-menu.ts"],"sourcesContent":["import {LitElement, TemplateResult, html, nothing, unsafeCSS} from 'lit';\nimport {customElement} from '../../decorator.js';\nimport compentStyle from './system-menu.css?inline';\nimport {property} from 'lit/decorators.js';\nimport {localized, msg} from '@lit/localize';\nimport '../../icons/icon-chevron-right-google.js';\nimport '../../icons/icon-wifi2-google.js';\nimport '../icon-check-button/icon-check-button.js';\nimport '../../icons/icon-wifi2-off-google.js';\nimport '../../icons/icon-sound-muted.js';\nimport '../../icons/icon-sound.js';\nimport '../../icons/icon-com-mic-muted-google.js';\nimport '../../icons/icon-com-microphone.js';\nimport '../slider/slider.js';\nimport {ObcSliderValueEvent} from '../slider/slider.js';\nimport '../audio-output/audio-output.js';\nimport '../battery-icon/battery-icon.js';\nimport '../../icons/icon-settings-iec.js';\nimport '../icon-button/icon-button.js';\nimport {IconButtonVariant} from '../icon-button/icon-button.js';\nimport '../../icons/icon-chevron-left-google.js';\nimport '../radio/radio.js';\nimport '../toggle-switch/toggle-switch.js';\nimport '../navigation-item/navigation-item.js';\nimport '../accordion-item/accordion-item.js';\nimport '../button/button.js';\nimport '../scrollbar/scrollbar.js';\n\nexport interface WifiState {\n enabled: boolean;\n connected: boolean;\n networkName?: string;\n strength: number; // 0-100, 0 is no signal, 100 is full signal\n status: string; // Example: \"Connected, Secure\"\n networks?: {\n name: string;\n signalStrength: number; // 0-100, 0 is no signal, 100 is full signal\n }[];\n otherNetworks?: {\n name: string;\n signalStrength: number; // 0-100, 0 is no signal, 100 is full signal\n }[];\n}\n\nexport interface AudioState {\n muted: boolean;\n volume: number; // 0-100, 0 is muted, 100 is full volume\n outputs?: {\n name: string;\n }[];\n selectedOutput?: string;\n controlMode?: SystemMenuControlMode;\n}\n\nexport interface MicrophoneState {\n muted: boolean;\n currentLevel: number; // 0-100, 0 is no sound, 100 is full sound\n inputs?: {\n name: string;\n }[];\n selectedInput?: string;\n pushToTalk?: boolean;\n controlMode?: SystemMenuControlMode;\n}\n\nexport interface BatteryState {\n level: number; // 0-100, 0 is empty, 100 is full\n charging: boolean; // true if charging, false if not charging,\n poweredNotCharging?: boolean; // true if powered and not charging, else false\n notification?: boolean; // true if notification, else false\n batterySavingMode?: boolean; // true if battery saving mode is enabled, false if not enabled, undefined if not supported\n hasUsageButton: boolean; // true if usage button is should be shown, false if not shown\n modes?: {\n name: string;\n }[];\n selectedMode?: string;\n}\n\nexport enum SystemSubMenu {\n main = 'main',\n wifi = 'wifi',\n audio = 'audio',\n microphone = 'microphone',\n battery = 'battery',\n}\n\nexport enum SystemMenuControlMode {\n muteButton = 'mute-button',\n iconOnly = 'icon-only',\n hidden = 'hidden',\n}\n\nexport type VolumeChangeEvent = CustomEvent<number>;\n\n/**\n * @fires wifi-click - When the Wi-Fi button is clicked\n * @fires audio-click - When the Audio button is clicked\n * @fires audio-volume-change - {VolumeChangeEvent} - When the Audio volume is changed\n * @fires microphone-click - When the Microphone button is clicked\n * @fires push-to-talk-change - When the push-to-talk toggle is changed\n * @fires battery-usage-click - When the Battery usage button is clicked\n * @fires battery-saving-mode-change - When the Battery saving mode is changed\n * @fires battery-mode-change - When the Battery mode is changed\n * @fires wifi-network-change - When the Wi-Fi network is changed\n * @fires audio-output-change - When the Audio output is changed\n * @fires microphone-input-change - When the Microphone input is changed\n * @fires settings-click - When the Settings button is clicked\n * @fires to-sub-menu-click - When the sub menu is clicked\n * @fires wifi-options-click - When the Wi-Fi options are clicked\n * @fires wifi-disconnect-click - When the Wi-Fi disconnect is clicked\n * @slot battery-status - Custom battery status text (falls back to the built-in charging/battery label).\n * @stable\n */\n@customElement('obc-system-menu')\n@localized()\nexport class ObcSystemMenu extends LitElement {\n @property({attribute: false}) wifiState: WifiState | undefined;\n @property({attribute: false}) audioState: AudioState | undefined;\n @property({attribute: false}) microphoneState: MicrophoneState | undefined;\n @property({attribute: false}) batteryState: BatteryState | undefined;\n @property({type: Boolean}) condensed: boolean = false;\n @property({type: Boolean}) showSettingsButton: boolean = false;\n @property({type: String}) activeSubMenu: SystemSubMenu = SystemSubMenu.main;\n @property({type: Boolean}) externalControl: boolean = false;\n @property({type: Boolean}) smallScreen: boolean = false;\n private get audioControlMode(): SystemMenuControlMode {\n return this.audioState?.controlMode ?? SystemMenuControlMode.muteButton;\n }\n\n private get microphoneControlMode(): SystemMenuControlMode {\n return (\n this.microphoneState?.controlMode ?? SystemMenuControlMode.muteButton\n );\n }\n\n private renderAudioControl() {\n if (!this.audioState) {\n return nothing;\n }\n\n if (this.audioControlMode === SystemMenuControlMode.hidden) {\n return nothing;\n }\n\n if (this.audioControlMode === SystemMenuControlMode.iconOnly) {\n return html`<div\n class=\"content-item-icon ${this.audioState.muted ? 'is-muted' : ''}\"\n role=\"img\"\n aria-label=${this.audioState.muted\n ? msg('Audio muted')\n : msg('Audio on')}\n >\n ${this.audioState.muted\n ? html`<obi-sound-muted></obi-sound-muted>`\n : html`<obi-sound></obi-sound>`}\n </div>`;\n }\n\n return html`<obc-icon-check-button\n class=\"content-item-btn\"\n .checked=${!this.audioState.muted}\n @icon-check-button-click=${this.handleAudioClick}\n >\n ${this.audioState.muted\n ? html`<obi-sound-muted slot=\"icon\"></obi-sound-muted>`\n : html`<obi-sound slot=\"icon\"></obi-sound>`}\n </obc-icon-check-button>`;\n }\n\n private renderMicrophoneControl(options?: {externalControl?: boolean}) {\n if (!this.microphoneState) {\n return nothing;\n }\n\n if (this.microphoneControlMode === SystemMenuControlMode.hidden) {\n return nothing;\n }\n\n if (this.microphoneControlMode === SystemMenuControlMode.iconOnly) {\n return html`<div\n class=\"content-item-icon ${this.microphoneState.muted\n ? 'is-muted'\n : ''}\"\n role=\"img\"\n aria-label=${this.microphoneState.muted\n ? msg('Microphone muted')\n : msg('Microphone on')}\n >\n ${this.microphoneState.muted\n ? html`<obi-com-mic-muted-google></obi-com-mic-muted-google>`\n : html`<obi-com-microphone></obi-com-microphone>`}\n </div>`;\n }\n\n return html`<obc-icon-check-button\n class=\"content-item-btn\"\n .checked=${!this.microphoneState.muted}\n ?externalControl=${options?.externalControl ?? false}\n @icon-check-button-click=${this.handleMicrophoneClick}\n >\n ${this.microphoneState.muted\n ? html`<obi-com-mic-muted-google\n slot=\"icon\"\n ></obi-com-mic-muted-google>`\n : html`<obi-com-microphone slot=\"icon\"></obi-com-microphone>`}\n </obc-icon-check-button>`;\n }\n\n private get effectiveSubMenu(): SystemSubMenu {\n if (this.smallScreen && this.activeSubMenu === SystemSubMenu.main) {\n return SystemSubMenu.wifi;\n }\n return this.activeSubMenu;\n }\n\n override render() {\n if (this.smallScreen) {\n return this.renderSmallScreen();\n }\n\n let content: (TemplateResult | symbol)[];\n switch (this.activeSubMenu) {\n case SystemSubMenu.main:\n content = [\n this.renderWifi(),\n this.renderAudio(),\n this.renderMicrophone(),\n this.renderBattery(),\n this.renderSettingsButton(),\n ];\n break;\n case SystemSubMenu.wifi:\n content = [\n this.renderSubMenuTitle(msg('Wi-Fi')),\n this.renderWifiSubMenuHeader(),\n this.renderWifMenuOptions(),\n this.renderSettingsButton(),\n ];\n break;\n case SystemSubMenu.audio:\n content = [\n this.renderSubMenuTitle(msg('Audio')),\n this.renderAudioSubMenuHeader(),\n this.renderAudioSubMenuOptions(),\n this.renderSettingsButton(),\n ];\n break;\n case SystemSubMenu.microphone:\n content = [\n this.renderSubMenuTitle(msg('Microphone')),\n this.renderMicrophoneSubMenuHeader(),\n this.renderMicrophoneSubMenuOptions(),\n this.renderSettingsButton(),\n ];\n break;\n case SystemSubMenu.battery:\n content = [\n this.renderSubMenuTitle(msg('Battery')),\n this.renderBatterySubMenuHeader(),\n this.renderBatterySubMenuOptions(),\n this.renderSettingsButton(),\n ];\n break;\n }\n return html`<div class=\"wrapper ${this.condensed ? 'condensed' : ''}\">\n ${content}\n </div> `;\n }\n\n private dispatchClickEvent(eventName: string) {\n this.dispatchEvent(new CustomEvent(eventName));\n }\n\n private handleWifiClick(event: CustomEvent<{checked: boolean}>) {\n this.wifiState!.enabled = event.detail.checked;\n this.dispatchEvent(\n new CustomEvent('wifi-click', {detail: {enabled: event.detail.checked}})\n );\n }\n\n private handleAudioClick(event: CustomEvent) {\n this.audioState!.muted = !event.detail.checked;\n this.dispatchEvent(\n new CustomEvent('audio-click', {detail: {muted: !event.detail.checked}})\n );\n }\n\n private handleAudioVolumeChange(event: ObcSliderValueEvent) {\n this.dispatchEvent(\n new CustomEvent('audio-volume-change', {detail: {volume: event.detail}})\n );\n }\n\n private handleToSubMenuClick(subMenu: SystemSubMenu) {\n if (!this.externalControl) {\n this.activeSubMenu = subMenu;\n }\n this.dispatchClickEvent('to-sub-menu-click');\n }\n\n private renderWifi() {\n if (!this.wifiState) {\n return nothing;\n }\n const showMoreButton =\n this.wifiState.networks && this.wifiState.networks.length > 0;\n const title = showMoreButton\n ? html`<button\n class=\"title-container\"\n @click=${() => this.handleToSubMenuClick(SystemSubMenu.wifi)}\n >\n <div class=\"title\">${msg('Wi-Fi')}</div>\n <div class=\"icon-container\">\n <obi-chevron-right-google class=\"icon\"></obi-chevron-right-google>\n </div>\n </button>`\n : html`<div class=\"title-container\">\n <div class=\"title\">${msg('Wi-Fi')}</div>\n </div>`;\n return html`<div class=\"group\">\n ${this.condensed ? nothing : title}\n <div class=\"content-container\">\n <div class=\"action-container\">\n <obc-icon-check-button\n class=\"content-item-btn\"\n .checked=${!!this.wifiState.enabled}\n @icon-check-button-click=${this.handleWifiClick}\n >\n ${this.wifiState?.enabled\n ? html`<obi-wifi2-google slot=\"icon\"></obi-wifi2-google>`\n : html`<obi-wifi2-off-google slot=\"icon\"></obi-wifi2-off-google>`}\n </obc-icon-check-button>\n <div\n class=\"content-item-value ${this.wifiState.enabled\n ? 'enabled'\n : 'disabled'}\"\n >\n ${this.wifiState?.networkName}\n </div>\n </div>\n ${this.condensed && showMoreButton\n ? html` <obc-icon-button\n .variant=${IconButtonVariant.flat}\n @click=${() => this.handleToSubMenuClick(SystemSubMenu.wifi)}\n >\n <obi-chevron-right-google></obi-chevron-right-google>\n </obc-icon-button>`\n : nothing}\n </div>\n </div>`;\n }\n\n private renderAudio() {\n if (!this.audioState) {\n return nothing;\n }\n const showMoreButton =\n this.audioState.outputs && this.audioState.outputs.length > 0;\n\n const title = showMoreButton\n ? html`<button\n class=\"title-container\"\n @click=${() => this.handleToSubMenuClick(SystemSubMenu.audio)}\n >\n <div class=\"title\">${msg('Audio')}</div>\n <div class=\"icon-container\">\n <obi-chevron-right-google class=\"icon\"></obi-chevron-right-google>\n </div>\n </button>`\n : html`<div class=\"title-container\">\n <div class=\"title\">${msg('Audio')}</div>\n </div>`;\n return html`<div class=\"group\">\n ${this.condensed ? nothing : title}\n <div class=\"content-container\">\n <div\n class=\"action-container ${this.audioControlMode ===\n SystemMenuControlMode.hidden\n ? 'control-hidden'\n : ''}\"\n >\n ${this.renderAudioControl()}\n <obc-slider\n class=\"content-item-slider\"\n .value=${this.audioState.volume}\n @value=${this.handleAudioVolumeChange}\n ></obc-slider>\n </div>\n ${this.condensed && showMoreButton\n ? html` <obc-icon-button\n .variant=${IconButtonVariant.flat}\n @click=${() => this.handleToSubMenuClick(SystemSubMenu.audio)}\n >\n <obi-chevron-right-google></obi-chevron-right-google>\n </obc-icon-button>`\n : nothing}\n </div>\n </div>`;\n }\n\n private renderMicrophone() {\n if (!this.microphoneState) {\n return nothing;\n }\n const hasInputs =\n this.microphoneState.inputs && this.microphoneState.inputs.length > 0;\n const hasPushToTalk = this.microphoneState.pushToTalk !== undefined;\n const showMoreButton = hasInputs || hasPushToTalk;\n\n const title = showMoreButton\n ? html`<button\n class=\"title-container\"\n @click=${() => this.handleToSubMenuClick(SystemSubMenu.microphone)}\n >\n <div class=\"title\">${msg('Microphone')}</div>\n <div class=\"icon-container\">\n <obi-chevron-right-google class=\"icon\"></obi-chevron-right-google>\n </div>\n </button>`\n : html`<div class=\"title-container\">\n <div class=\"title\">${msg('Microphone')}</div>\n </div>`;\n return html`<div class=\"group\">\n ${this.condensed ? nothing : title}\n <div class=\"content-container\">\n <div\n class=\"action-container ${this.microphoneControlMode ===\n SystemMenuControlMode.hidden\n ? 'control-hidden'\n : ''}\"\n >\n ${this.renderMicrophoneControl()}\n <div class=\"content-item-value\">\n <obc-audio-output\n .volume=${(this.microphoneState.currentLevel / 100) * 8}\n ></obc-audio-output>\n </div>\n </div>\n ${this.condensed && showMoreButton\n ? html` <obc-icon-button\n .variant=${IconButtonVariant.flat}\n @click=${() =>\n this.handleToSubMenuClick(SystemSubMenu.microphone)}\n >\n <obi-chevron-right-google></obi-chevron-right-google>\n </obc-icon-button>`\n : nothing}\n </div>\n </div>`;\n }\n\n private renderBattery() {\n if (!this.batteryState) {\n return nothing;\n }\n const hasModes =\n this.batteryState.modes && this.batteryState.modes.length > 0;\n const hasUsageButton = this.batteryState.hasUsageButton;\n const hasBatterySavingMode =\n this.batteryState.batterySavingMode !== undefined;\n const showMoreButton = hasModes || hasUsageButton || hasBatterySavingMode;\n const title = showMoreButton\n ? html`<button\n class=\"title-container\"\n @click=${() => this.handleToSubMenuClick(SystemSubMenu.battery)}\n >\n <div class=\"title\">${msg('Battery')}</div>\n <div class=\"icon-container\">\n <obi-chevron-right-google class=\"icon\"></obi-chevron-right-google>\n </div>\n </button>`\n : html`<div class=\"title-container\">\n <div class=\"title\">${msg('Battery')}</div>\n </div>`;\n const batteryStatus = this.batteryState.charging\n ? msg('Charging')\n : this.batteryState.poweredNotCharging\n ? msg('Powered & not charging')\n : msg('On battery');\n return html`<div class=\"group\">\n ${this.condensed ? nothing : title}\n <div class=\"content-container battery-container\">\n <div class=\"action-container\">\n <div class=\"battery\">\n <obc-battery-icon\n .level=${this.batteryState.level}\n .charging=${this.batteryState.charging}\n .poweredNotCharging=${this.batteryState.poweredNotCharging ??\n false}\n .notification=${this.batteryState.notification ?? false}\n ></obc-battery-icon>\n <div class=\"percentage\">${this.batteryState.level}%</div>\n <div class=\"status\">\n <slot name=\"battery-status\">${batteryStatus}</slot>\n </div>\n </div>\n </div>\n ${this.condensed && showMoreButton\n ? html` <obc-icon-button\n .variant=${IconButtonVariant.flat}\n @click=${() => this.handleToSubMenuClick(SystemSubMenu.battery)}\n >\n <obi-chevron-right-google></obi-chevron-right-google>\n </obc-icon-button>`\n : nothing}\n </div>\n </div>`;\n }\n\n private renderSettingsButton() {\n if (!this.showSettingsButton) {\n return nothing;\n }\n return html`<div class=\"group\">\n <button\n class=\"title-container settings\"\n @click=${() => this.dispatchClickEvent('settings-click')}\n >\n <div class=\"icon-container\">\n <obi-settings-iec class=\"icon\"></obi-settings-iec>\n </div>\n <div class=\"title\">${msg('Settings')}</div>\n </button>\n </div>`;\n }\n\n private renderSubMenuTitle(title: string) {\n return html`\n <div class=\"title-container sub-menu-title\">\n <obc-icon-button\n .variant=${IconButtonVariant.normal}\n @click=${() => this.handleToSubMenuClick(SystemSubMenu.main)}\n >\n <obi-chevron-left-google></obi-chevron-left-google>\n </obc-icon-button>\n <div class=\"title\">${title}</div>\n </div>\n `;\n }\n\n private renderWifiSubMenuHeader() {\n return html` <div class=\"sub-container\">\n <div class=\"row wifi-container\">\n <obi-wifi2-google class=\"icon large\"></obi-wifi2-google>\n <div class=\"title wifi-name\">${this.wifiState?.networkName}</div>\n <div class=\"wifi-status\">${this.wifiState?.status}</div>\n </div>\n <div class=\"row\">\n <obc-button\n @click=${() => this.dispatchClickEvent('wifi-options-click')}\n fullWidth\n >${msg('Options')}</obc-button\n >\n ${this.wifiState?.connected\n ? html`<obc-button\n @click=${() => this.dispatchClickEvent('wifi-disconnect-click')}\n fullWidth\n >${msg('Disconnect')}</obc-button\n >`\n : nothing}\n </div>\n </div>`;\n }\n\n private renderAudioSubMenuHeader() {\n return html` <div class=\"sub-container\">\n <div class=\"row\">\n ${this.audioState?.muted\n ? html`<obi-sound-muted class=\"icon large off\"></obi-sound-muted>`\n : html`<obi-sound class=\"icon large\"></obi-sound>`}\n <div class=\"title\">\n ${this.audioState?.volume}\n <div class=\"unit\">%</div>\n </div>\n </div>\n <div class=\"row\">\n ${this.renderAudioControl()}\n <obc-slider\n class=\"content-item-slider\"\n .value=${this.audioState?.volume ?? 0}\n @value=${this.handleAudioVolumeChange}\n ></obc-slider>\n </div>\n </div>`;\n }\n\n private handleMicrophoneClick(event: CustomEvent<{checked: boolean}>) {\n this.microphoneState!.muted = !event.detail.checked;\n this.dispatchEvent(\n new CustomEvent('microphone-click', {\n detail: {muted: !event.detail.checked},\n })\n );\n }\n\n private handlePushToTalkClick(event: InputEvent) {\n this.dispatchEvent(\n new CustomEvent('push-to-talk-change', {\n detail: {pushToTalk: (event.target as HTMLInputElement).checked},\n })\n );\n }\n\n private handleBatterySavingModeClick(event: CustomEvent<{checked: boolean}>) {\n this.dispatchEvent(\n new CustomEvent('battery-saving-mode-change', {\n detail: {batterySavingMode: event.detail.checked},\n })\n );\n }\n\n private renderMicrophoneSubMenuHeader() {\n const isNoMuteButton =\n this.microphoneControlMode === SystemMenuControlMode.iconOnly ||\n this.microphoneControlMode === SystemMenuControlMode.hidden;\n return html` <div class=\"sub-container\">\n <div class=\"row\">\n ${this.microphoneState?.muted\n ? html`<obi-com-mic-muted-google\n class=\"icon large\"\n ></obi-com-mic-muted-google>`\n : html`<obi-com-microphone class=\"icon large\"></obi-com-microphone>`}\n <div class=\"title\">\n ${this.microphoneState?.currentLevel}\n <div class=\"unit\">dB</div>\n </div>\n </div>\n <div class=\"row ${isNoMuteButton ? 'no-mute-button' : ''}\">\n ${this.renderMicrophoneControl({externalControl: true})}\n <obc-audio-output\n .volume=${((this.microphoneState?.currentLevel ?? 0) / 100) * 8}\n ></obc-audio-output>\n </div>\n ${this.microphoneState?.pushToTalk !== undefined\n ? html`<div class=\"row no-padding\">\n <obc-toggle-switch\n .checked=${this.microphoneState?.pushToTalk}\n @input=${this.handlePushToTalkClick}\n label=${msg('Push to talk')}\n ></obc-toggle-switch>\n </div>`\n : nothing}\n </div>`;\n }\n\n private handleBatteryUsageClick() {\n this.dispatchEvent(\n new CustomEvent('battery-usage-click', {detail: {usage: true}})\n );\n }\n\n private renderBatterySubMenuHeader() {\n if (!this.batteryState) {\n return nothing;\n }\n return html` <div class=\"sub-container\">\n <div class=\"row\">\n <obc-battery-icon\n class=\"icon large\"\n .level=${this.batteryState.level}\n .charging=${this.batteryState.charging}\n .poweredNotCharging=${this.batteryState.poweredNotCharging ?? false}\n .notification=${this.batteryState.notification ?? false}\n ></obc-battery-icon>\n <div class=\"title\">\n ${this.batteryState.level}\n <div class=\"unit\">%</div>\n </div>\n </div>\n <div class=\"row\">\n <obc-button @click=${this.handleBatteryUsageClick} fullWidth>\n ${msg('Usage')}\n </obc-button>\n </div>\n ${this.batteryState.batterySavingMode !== undefined\n ? html`<div class=\"row no-padding\">\n <obc-toggle-switch\n .checked=${this.batteryState.batterySavingMode}\n @toggle-switch-click=${this.handleBatterySavingModeClick}\n label=${msg('Battery saving mode')}\n ></obc-toggle-switch>\n </div>`\n : nothing}\n </div>`;\n }\n\n private handleWifiNetworkClick(name: string) {\n this.dispatchEvent(\n new CustomEvent('wifi-network-change', {detail: {network: name}})\n );\n }\n\n private renderWifMenuOptions() {\n if (this.wifiState?.networks?.length === 0) {\n return nothing;\n }\n return html`\n <div class=\"sub-container sub-container-title\">\n <div class=\"row title2\">${msg('Wi-Fi')}</div>\n </div>\n <div class=\"sub-container\">\n <div class=\"row navigation-items\">\n ${this.wifiState?.networks?.map(\n (option) => html`\n <obc-navigation-item\n .label=${option.name}\n .checked=${option.name === this.wifiState?.networkName}\n @click=${() => this.handleWifiNetworkClick(option.name)}\n hasIcon\n >\n <obi-wifi2-google slot=\"icon\"></obi-wifi2-google>\n </obc-navigation-item>\n `\n )}\n <obc-accordion-item title=${msg('Other networks')}>\n <div slot=\"expanded-content\">\n ${this.wifiState?.otherNetworks?.map(\n (option) => html`\n <obc-navigation-item\n .label=${option.name}\n .checked=${option.name === this.wifiState?.networkName}\n @click=${() => this.handleWifiNetworkClick(option.name)}\n hasIcon\n >\n <obi-wifi2-google slot=\"icon\"></obi-wifi2-google>\n </obc-navigation-item>\n `\n )}\n </div>\n </obc-accordion-item>\n </div>\n </div>\n `;\n }\n\n private handleAudioOutputClick(name: string) {\n this.dispatchEvent(\n new CustomEvent('audio-output-change', {detail: {output: name}})\n );\n }\n\n private handleMicrophoneInputClick(name: string) {\n this.dispatchEvent(\n new CustomEvent('microphone-input-change', {detail: {input: name}})\n );\n }\n\n private handleBatteryModeClick(name: string) {\n this.dispatchEvent(\n new CustomEvent('battery-mode-change', {detail: {mode: name}})\n );\n }\n\n private renderAudioSubMenuOptions() {\n return this.renderSubMenuOptions(\n msg('Output'),\n this.audioState?.outputs ?? [],\n this.audioState?.selectedOutput ?? '',\n (name: string) => this.handleAudioOutputClick(name)\n );\n }\n\n private renderMicrophoneSubMenuOptions() {\n return this.renderSubMenuOptions(\n msg('Input'),\n this.microphoneState?.inputs ?? [],\n this.microphoneState?.selectedInput ?? '',\n (name: string) => this.handleMicrophoneInputClick(name)\n );\n }\n\n private renderBatterySubMenuOptions() {\n return this.renderSubMenuOptions(\n msg('Mode'),\n this.batteryState?.modes ?? [],\n this.batteryState?.selectedMode ?? '',\n (name: string) => this.handleBatteryModeClick(name)\n );\n }\n\n private renderSubMenuOptions(\n title: string,\n options: {name: string}[],\n selectedOption: string,\n handleOptionClick: (name: string) => void\n ) {\n if (options.length === 0) {\n return nothing;\n }\n return html`\n <div class=\"sub-container sub-container-title\">\n <div class=\"row title2\">${title}</div>\n </div>\n <div class=\"sub-container\">\n <div class=\"row radio\">\n ${options.map(\n (option) => html`\n <obc-radio\n .name=${title}\n .label=${option.name}\n .checked=${option.name === selectedOption}\n @change=${() => handleOptionClick(option.name)}\n ></obc-radio>\n `\n )}\n </div>\n </div>\n `;\n }\n\n // --- Small screen methods ---\n\n private renderSmallScreen() {\n const activeTab = this.effectiveSubMenu;\n let content: TemplateResult | symbol = nothing;\n switch (activeTab) {\n case SystemSubMenu.wifi:\n content = this.renderSmallScreenWifi();\n break;\n case SystemSubMenu.audio:\n content = this.renderSmallScreenAudio();\n break;\n case SystemSubMenu.microphone:\n content = this.renderSmallScreenMicrophone();\n break;\n case SystemSubMenu.battery:\n content = this.renderSmallScreenBattery();\n break;\n }\n return html`<div class=\"wrapper small-screen\">\n <div class=\"small-screen-content\">${content}</div>\n ${this.renderMenuBar(activeTab)}\n </div>`;\n }\n\n private handleSmallScreenWifiToggle(event: InputEvent) {\n const enabled = (event.target as HTMLInputElement).checked;\n this.dispatchEvent(new CustomEvent('wifi-click', {detail: {enabled}}));\n }\n\n private renderSmallScreenWifi() {\n if (!this.wifiState) {\n return nothing;\n }\n return html`\n <div class=\"small-screen-header\">\n <div class=\"small-screen-title-row\">\n <span>${msg('Wi-Fi')}</span>\n <obc-toggle-switch\n .checked=${this.wifiState.enabled}\n @input=${this.handleSmallScreenWifiToggle}\n ></obc-toggle-switch>\n </div>\n </div>\n <div class=\"small-screen-divider\"></div>\n <obc-scrollbar class=\"small-screen-options\">\n <div class=\"small-screen-options-content\">\n ${this.wifiState.networks?.map(\n (network) => html`\n <obc-navigation-item\n .label=${network.name}\n .checked=${network.name === this.wifiState?.networkName}\n @click=${() => this.handleWifiNetworkClick(network.name)}\n hasIcon\n >\n <obi-wifi2-google slot=\"icon\"></obi-wifi2-google>\n </obc-navigation-item>\n `\n )}\n </div>\n </obc-scrollbar>\n `;\n }\n\n private renderSmallScreenAudio() {\n if (!this.audioState) {\n return nothing;\n }\n return html`\n <div class=\"small-screen-header\">\n <div class=\"small-screen-title-row\">\n <span>${msg('Audio')}</span>\n </div>\n <div class=\"small-screen-controls-row\">\n ${this.renderAudioControl()}\n <div class=\"small-screen-slider-container\">\n <obc-slider\n class=\"small-screen-slider\"\n .value=${this.audioState.volume}\n @value=${this.handleAudioVolumeChange}\n ></obc-slider>\n <span class=\"small-screen-volume-label\"\n >${this.audioState.volume}%</span\n >\n </div>\n </div>\n </div>\n <div class=\"small-screen-divider\"></div>\n <obc-scrollbar class=\"small-screen-options\">\n <div class=\"small-screen-options-content\">\n ${(this.audioState.outputs ?? []).map(\n (output) => html`\n <obc-radio\n name=\"output\"\n .label=${output.name}\n .checked=${output.name === this.audioState?.selectedOutput}\n @change=${() => this.handleAudioOutputClick(output.name)}\n ></obc-radio>\n `\n )}\n </div>\n </obc-scrollbar>\n `;\n }\n\n private renderSmallScreenMicrophone() {\n if (!this.microphoneState) {\n return nothing;\n }\n const isNoMuteButton =\n this.microphoneControlMode === SystemMenuControlMode.iconOnly ||\n this.microphoneControlMode === SystemMenuControlMode.hidden;\n return html`\n <div class=\"small-screen-header\">\n <div class=\"small-screen-title-row\">\n <span>${msg('Microphone')}</span>\n </div>\n <div\n class=\"small-screen-controls-row ${isNoMuteButton\n ? 'no-mute-button'\n : ''}\"\n >\n ${this.renderMicrophoneControl()}\n <obc-audio-output\n class=\"small-screen-audio-output\"\n .volume=${(this.microphoneState.currentLevel / 100) * 8}\n ></obc-audio-output>\n </div>\n ${this.microphoneState.pushToTalk !== undefined\n ? html`<div class=\"small-screen-toggle-row\">\n <obc-toggle-switch\n .checked=${this.microphoneState.pushToTalk}\n @input=${this.handlePushToTalkClick}\n label=${msg('Push to talk')}\n ></obc-toggle-switch>\n </div>`\n : nothing}\n </div>\n <div class=\"small-screen-divider\"></div>\n <obc-scrollbar class=\"small-screen-options\">\n <div class=\"small-screen-options-content\">\n ${(this.microphoneState.inputs ?? []).map(\n (input) => html`\n <obc-radio\n name=\"input\"\n .label=${input.name}\n .checked=${input.name === this.microphoneState?.selectedInput}\n @change=${() => this.handleMicrophoneInputClick(input.name)}\n ></obc-radio>\n `\n )}\n </div>\n </obc-scrollbar>\n `;\n }\n\n private renderSmallScreenBattery() {\n if (!this.batteryState) {\n return nothing;\n }\n return html`\n <div class=\"small-screen-header\">\n <div class=\"small-screen-title-row\">\n <span>${msg('Battery')}</span>\n <div class=\"small-screen-battery-info\">\n <obc-battery-icon\n .level=${this.batteryState.level}\n .charging=${this.batteryState.charging}\n .poweredNotCharging=${this.batteryState.poweredNotCharging ??\n false}\n .notification=${this.batteryState.notification ?? false}\n ></obc-battery-icon>\n <span class=\"small-screen-battery-level\"\n >${this.batteryState.level}%</span\n >\n </div>\n </div>\n ${this.batteryState.hasUsageButton\n ? html`<div class=\"small-screen-button-row\">\n <obc-button @click=${this.handleBatteryUsageClick} fullWidth>\n ${msg('Usage')}\n </obc-button>\n </div>`\n : nothing}\n ${this.batteryState.batterySavingMode !== undefined\n ? html`<div class=\"small-screen-toggle-row\">\n <obc-toggle-switch\n .checked=${this.batteryState.batterySavingMode}\n @toggle-switch-click=${this.handleBatterySavingModeClick}\n label=${msg('Battery saving mode')}\n ></obc-toggle-switch>\n </div>`\n : nothing}\n </div>\n <div class=\"small-screen-divider\"></div>\n <obc-scrollbar class=\"small-screen-options\">\n <div class=\"small-screen-options-content\">\n ${(this.batteryState.modes ?? []).map(\n (mode) => html`\n <obc-radio\n name=\"mode\"\n .label=${mode.name}\n .checked=${mode.name === this.batteryState?.selectedMode}\n @change=${() => this.handleBatteryModeClick(mode.name)}\n ></obc-radio>\n `\n )}\n </div>\n </obc-scrollbar>\n `;\n }\n\n private renderMenuBarButton(\n subMenu: SystemSubMenu,\n activeTab: SystemSubMenu,\n label: string,\n icon: TemplateResult\n ) {\n return html`<button\n class=${activeTab === subMenu ? 'active' : ''}\n title=${label}\n @click=${() => this.handleToSubMenuClick(subMenu)}\n >\n ${icon}\n </button>`;\n }\n\n private renderMenuBar(activeTab: SystemSubMenu) {\n return html`\n <div class=\"menu-bar\">\n ${this.wifiState\n ? this.renderMenuBarButton(\n SystemSubMenu.wifi,\n activeTab,\n msg('Wi-Fi'),\n html`<obi-wifi2-google class=\"tab-icon\"></obi-wifi2-google>`\n )\n : nothing}\n ${this.audioState\n ? this.renderMenuBarButton(\n SystemSubMenu.audio,\n activeTab,\n msg('Audio'),\n html`<obi-sound class=\"tab-icon\"></obi-sound>`\n )\n : nothing}\n ${this.microphoneState\n ? this.renderMenuBarButton(\n SystemSubMenu.microphone,\n activeTab,\n msg('Microphone'),\n html`<obi-com-microphone class=\"tab-icon\"></obi-com-microphone>`\n )\n : nothing}\n ${this.batteryState\n ? this.renderMenuBarButton(\n SystemSubMenu.battery,\n activeTab,\n msg('Battery'),\n html`<obc-battery-icon\n class=\"tab-icon\"\n .level=${this.batteryState.level}\n .charging=${this.batteryState.charging}\n .poweredNotCharging=${this.batteryState.poweredNotCharging ??\n false}\n .notification=${this.batteryState.notification ?? false}\n ></obc-battery-icon>`\n )\n : nothing}\n </div>\n `;\n }\n\n static override styles = unsafeCSS(compentStyle);\n}\n"],"names":["SystemSubMenu","SystemMenuControlMode"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8EO,IAAK,kCAAAA,mBAAL;AACLA,iBAAA,MAAA,IAAO;AACPA,iBAAA,MAAA,IAAO;AACPA,iBAAA,OAAA,IAAQ;AACRA,iBAAA,YAAA,IAAa;AACbA,iBAAA,SAAA,IAAU;AALA,SAAAA;AAAA,GAAA,iBAAA,CAAA,CAAA;AAQL,IAAK,0CAAAC,2BAAL;AACLA,yBAAA,YAAA,IAAa;AACbA,yBAAA,UAAA,IAAW;AACXA,yBAAA,QAAA,IAAS;AAHC,SAAAA;AAAA,GAAA,yBAAA,CAAA,CAAA;AA6BL,IAAM,gBAAN,cAA4B,WAAW;AAAA,EAAvC,cAAA;AAAA,UAAA,GAAA,SAAA;AAKsB,SAAA,YAAqB;AACrB,SAAA,qBAA8B;AAC/B,SAAA,gBAA+B;AAC9B,SAAA,kBAA2B;AAC3B,SAAA,cAAuB;AAAA,EAAA;AAAA,EAClD,IAAY,mBAA0C;AACpD,WAAO,KAAK,YAAY,eAAe;AAAA,EACzC;AAAA,EAEA,IAAY,wBAA+C;AACzD,WACE,KAAK,iBAAiB,eAAe;AAAA,EAEzC;AAAA,EAEQ,qBAAqB;AAC3B,QAAI,CAAC,KAAK,YAAY;AACpB,aAAO;AAAA,IACT;AAEA,QAAI,KAAK,qBAAqB,UAA8B;AAC1D,aAAO;AAAA,IACT;AAEA,QAAI,KAAK,qBAAqB,aAAgC;AAC5D,aAAO;AAAA,mCACsB,KAAK,WAAW,QAAQ,aAAa,EAAE;AAAA;AAAA,qBAErD,KAAK,WAAW,QACzB,IAAI,aAAa,IACjB,IAAI,UAAU,CAAC;AAAA;AAAA,UAEjB,KAAK,WAAW,QACd,4CACA,6BAA6B;AAAA;AAAA,IAErC;AAEA,WAAO;AAAA;AAAA,iBAEM,CAAC,KAAK,WAAW,KAAK;AAAA,iCACN,KAAK,gBAAgB;AAAA;AAAA,QAE9C,KAAK,WAAW,QACd,wDACA,yCAAyC;AAAA;AAAA,EAEjD;AAAA,EAEQ,wBAAwB,SAAuC;AACrE,QAAI,CAAC,KAAK,iBAAiB;AACzB,aAAO;AAAA,IACT;AAEA,QAAI,KAAK,0BAA0B,UAA8B;AAC/D,aAAO;AAAA,IACT;AAEA,QAAI,KAAK,0BAA0B,aAAgC;AACjE,aAAO;AAAA,mCACsB,KAAK,gBAAgB,QAC5C,aACA,EAAE;AAAA;AAAA,qBAEO,KAAK,gBAAgB,QAC9B,IAAI,kBAAkB,IACtB,IAAI,eAAe,CAAC;AAAA;AAAA,UAEtB,KAAK,gBAAgB,QACnB,8DACA,+CAA+C;AAAA;AAAA,IAEvD;AAEA,WAAO;AAAA;AAAA,iBAEM,CAAC,KAAK,gBAAgB,KAAK;AAAA,yBACnB,SAAS,mBAAmB,KAAK;AAAA,iCACzB,KAAK,qBAAqB;AAAA;AAAA,QAEnD,KAAK,gBAAgB,QACnB;AAAA;AAAA,0CAGA,2DAA2D;AAAA;AAAA,EAEnE;AAAA,EAEA,IAAY,mBAAkC;AAC5C,QAAI,KAAK,eAAe,KAAK,kBAAkB,QAAoB;AACjE,aAAO;AAAA,IACT;AACA,WAAO,KAAK;AAAA,EACd;AAAA,EAES,SAAS;AAChB,QAAI,KAAK,aAAa;AACpB,aAAO,KAAK,kBAAA;AAAA,IACd;AAEA,QAAI;AACJ,YAAQ,KAAK,eAAA;AAAA,MACX,KAAK;AACH,kBAAU;AAAA,UACR,KAAK,WAAA;AAAA,UACL,KAAK,YAAA;AAAA,UACL,KAAK,iBAAA;AAAA,UACL,KAAK,cAAA;AAAA,UACL,KAAK,qBAAA;AAAA,QAAqB;AAE5B;AAAA,MACF,KAAK;AACH,kBAAU;AAAA,UACR,KAAK,mBAAmB,IAAI,OAAO,CAAC;AAAA,UACpC,KAAK,wBAAA;AAAA,UACL,KAAK,qBAAA;AAAA,UACL,KAAK,qBAAA;AAAA,QAAqB;AAE5B;AAAA,MACF,KAAK;AACH,kBAAU;AAAA,UACR,KAAK,mBAAmB,IAAI,OAAO,CAAC;AAAA,UACpC,KAAK,yBAAA;AAAA,UACL,KAAK,0BAAA;AAAA,UACL,KAAK,qBAAA;AAAA,QAAqB;AAE5B;AAAA,MACF,KAAK;AACH,kBAAU;AAAA,UACR,KAAK,mBAAmB,IAAI,YAAY,CAAC;AAAA,UACzC,KAAK,8BAAA;AAAA,UACL,KAAK,+BAAA;AAAA,UACL,KAAK,qBAAA;AAAA,QAAqB;AAE5B;AAAA,MACF,KAAK;AACH,kBAAU;AAAA,UACR,KAAK,mBAAmB,IAAI,SAAS,CAAC;AAAA,UACtC,KAAK,2BAAA;AAAA,UACL,KAAK,4BAAA;AAAA,UACL,KAAK,qBAAA;AAAA,QAAqB;AAE5B;AAAA,IAAA;AAEJ,WAAO,2BAA2B,KAAK,YAAY,cAAc,EAAE;AAAA,QAC/D,OAAO;AAAA;AAAA,EAEb;AAAA,EAEQ,mBAAmB,WAAmB;AAC5C,SAAK,cAAc,IAAI,YAAY,SAAS,CAAC;AAAA,EAC/C;AAAA,EAEQ,gBAAgB,OAAwC;AAC9D,SAAK,UAAW,UAAU,MAAM,OAAO;AACvC,SAAK;AAAA,MACH,IAAI,YAAY,cAAc,EAAC,QAAQ,EAAC,SAAS,MAAM,OAAO,UAAO,CAAE;AAAA,IAAA;AAAA,EAE3E;AAAA,EAEQ,iBAAiB,OAAoB;AAC3C,SAAK,WAAY,QAAQ,CAAC,MAAM,OAAO;AACvC,SAAK;AAAA,MACH,IAAI,YAAY,eAAe,EAAC,QAAQ,EAAC,OAAO,CAAC,MAAM,OAAO,UAAO,CAAE;AAAA,IAAA;AAAA,EAE3E;AAAA,EAEQ,wBAAwB,OAA4B;AAC1D,SAAK;AAAA,MACH,IAAI,YAAY,uBAAuB,EAAC,QAAQ,EAAC,QAAQ,MAAM,SAAM,CAAE;AAAA,IAAA;AAAA,EAE3E;AAAA,EAEQ,qBAAqB,SAAwB;AACnD,QAAI,CAAC,KAAK,iBAAiB;AACzB,WAAK,gBAAgB;AAAA,IACvB;AACA,SAAK,mBAAmB,mBAAmB;AAAA,EAC7C;AAAA,EAEQ,aAAa;AACnB,QAAI,CAAC,KAAK,WAAW;AACnB,aAAO;AAAA,IACT;AACA,UAAM,iBACJ,KAAK,UAAU,YAAY,KAAK,UAAU,SAAS,SAAS;AAC9D,UAAM,QAAQ,iBACV;AAAA;AAAA,mBAEW,MAAM,KAAK;AAAA,MAAqB;AAAA;AAAA,IAAA,CAAmB;AAAA;AAAA,+BAEvC,IAAI,OAAO,CAAC;AAAA;AAAA;AAAA;AAAA,qBAKnC;AAAA,+BACuB,IAAI,OAAO,CAAC;AAAA;AAEvC,WAAO;AAAA,QACH,KAAK,YAAY,UAAU,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA,uBAKjB,CAAC,CAAC,KAAK,UAAU,OAAO;AAAA,uCACR,KAAK,eAAe;AAAA;AAAA,cAE7C,KAAK,WAAW,UACd,0DACA,+DAA+D;AAAA;AAAA;AAAA,wCAGvC,KAAK,UAAU,UACvC,YACA,UAAU;AAAA;AAAA,cAEZ,KAAK,WAAW,WAAW;AAAA;AAAA;AAAA,UAG/B,KAAK,aAAa,iBAChB;AAAA,yBACa,kBAAkB,IAAI;AAAA,uBACxB,MAAM,KAAK;AAAA,MAAqB;AAAA;AAAA,IAAA,CAAmB;AAAA;AAAA;AAAA,kCAI9D,OAAO;AAAA;AAAA;AAAA,EAGjB;AAAA,EAEQ,cAAc;AACpB,QAAI,CAAC,KAAK,YAAY;AACpB,aAAO;AAAA,IACT;AACA,UAAM,iBACJ,KAAK,WAAW,WAAW,KAAK,WAAW,QAAQ,SAAS;AAE9D,UAAM,QAAQ,iBACV;AAAA;AAAA,mBAEW,MAAM,KAAK;AAAA,MAAqB;AAAA;AAAA,IAAA,CAAoB;AAAA;AAAA,+BAExC,IAAI,OAAO,CAAC;AAAA;AAAA;AAAA;AAAA,qBAKnC;AAAA,+BACuB,IAAI,OAAO,CAAC;AAAA;AAEvC,WAAO;AAAA,QACH,KAAK,YAAY,UAAU,KAAK;AAAA;AAAA;AAAA,oCAGJ,KAAK,qBAC/B,WACI,mBACA,EAAE;AAAA;AAAA,YAEJ,KAAK,oBAAoB;AAAA;AAAA;AAAA,qBAGhB,KAAK,WAAW,MAAM;AAAA,qBACtB,KAAK,uBAAuB;AAAA;AAAA;AAAA,UAGvC,KAAK,aAAa,iBAChB;AAAA,yBACa,kBAAkB,IAAI;AAAA,uBACxB,MAAM,KAAK;AAAA,MAAqB;AAAA;AAAA,IAAA,CAAoB;AAAA;AAAA;AAAA,kCAI/D,OAAO;AAAA;AAAA;AAAA,EAGjB;AAAA,EAEQ,mBAAmB;AACzB,QAAI,CAAC,KAAK,iBAAiB;AACzB,aAAO;AAAA,IACT;AACA,UAAM,YACJ,KAAK,gBAAgB,UAAU,KAAK,gBAAgB,OAAO,SAAS;AACtE,UAAM,gBAAgB,KAAK,gBAAgB,eAAe;AAC1D,UAAM,iBAAiB,aAAa;AAEpC,UAAM,QAAQ,iBACV;AAAA;AAAA,mBAEW,MAAM,KAAK;AAAA,MAAqB;AAAA;AAAA,IAAA,CAAyB;AAAA;AAAA,+BAE7C,IAAI,YAAY,CAAC;AAAA;AAAA;AAAA;AAAA,qBAKxC;AAAA,+BACuB,IAAI,YAAY,CAAC;AAAA;AAE5C,WAAO;AAAA,QACH,KAAK,YAAY,UAAU,KAAK;AAAA;AAAA;AAAA,oCAGJ,KAAK,0BAC/B,WACI,mBACA,EAAE;AAAA;AAAA,YAEJ,KAAK,yBAAyB;AAAA;AAAA;AAAA,wBAGjB,KAAK,gBAAgB,eAAe,MAAO,CAAC;AAAA;AAAA;AAAA;AAAA,UAI3D,KAAK,aAAa,iBAChB;AAAA,yBACa,kBAAkB,IAAI;AAAA,uBACxB,MACP,KAAK;AAAA,MAAqB;AAAA;AAAA,IAAA,CAAyB;AAAA;AAAA;AAAA,kCAIvD,OAAO;AAAA;AAAA;AAAA,EAGjB;AAAA,EAEQ,gBAAgB;AACtB,QAAI,CAAC,KAAK,cAAc;AACtB,aAAO;AAAA,IACT;AACA,UAAM,WACJ,KAAK,aAAa,SAAS,KAAK,aAAa,MAAM,SAAS;AAC9D,UAAM,iBAAiB,KAAK,aAAa;AACzC,UAAM,uBACJ,KAAK,aAAa,sBAAsB;AAC1C,UAAM,iBAAiB,YAAY,kBAAkB;AACrD,UAAM,QAAQ,iBACV;AAAA;AAAA,mBAEW,MAAM,KAAK;AAAA,MAAqB;AAAA;AAAA,IAAA,CAAsB;AAAA;AAAA,+BAE1C,IAAI,SAAS,CAAC;AAAA;AAAA;AAAA;AAAA,qBAKrC;AAAA,+BACuB,IAAI,SAAS,CAAC;AAAA;AAEzC,UAAM,gBAAgB,KAAK,aAAa,WACpC,IAAI,UAAU,IACd,KAAK,aAAa,qBAChB,IAAI,wBAAwB,IAC5B,IAAI,YAAY;AACtB,WAAO;AAAA,QACH,KAAK,YAAY,UAAU,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA,uBAKjB,KAAK,aAAa,KAAK;AAAA,0BACpB,KAAK,aAAa,QAAQ;AAAA,oCAChB,KAAK,aAAa,sBACxC,KAAK;AAAA,8BACW,KAAK,aAAa,gBAAgB,KAAK;AAAA;AAAA,sCAE/B,KAAK,aAAa,KAAK;AAAA;AAAA,4CAEjB,aAAa;AAAA;AAAA;AAAA;AAAA,UAI/C,KAAK,aAAa,iBAChB;AAAA,yBACa,kBAAkB,IAAI;AAAA,uBACxB,MAAM,KAAK;AAAA,MAAqB;AAAA;AAAA,IAAA,CAAsB;AAAA;AAAA;AAAA,kCAIjE,OAAO;AAAA;AAAA;AAAA,EAGjB;AAAA,EAEQ,uBAAuB;AAC7B,QAAI,CAAC,KAAK,oBAAoB;AAC5B,aAAO;AAAA,IACT;AACA,WAAO;AAAA;AAAA;AAAA,iBAGM,MAAM,KAAK,mBAAmB,gBAAgB,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,6BAKnC,IAAI,UAAU,CAAC;AAAA;AAAA;AAAA,EAG1C;AAAA,EAEQ,mBAAmB,OAAe;AACxC,WAAO;AAAA;AAAA;AAAA,qBAGU,kBAAkB,MAAM;AAAA,mBAC1B,MAAM,KAAK;AAAA,MAAqB;AAAA;AAAA,IAAA,CAAmB;AAAA;AAAA;AAAA;AAAA,6BAIzC,KAAK;AAAA;AAAA;AAAA,EAGhC;AAAA,EAEQ,0BAA0B;AAChC,WAAO;AAAA;AAAA;AAAA,uCAG4B,KAAK,WAAW,WAAW;AAAA,mCAC/B,KAAK,WAAW,MAAM;AAAA;AAAA;AAAA;AAAA,mBAItC,MAAM,KAAK,mBAAmB,oBAAoB,CAAC;AAAA;AAAA,aAEzD,IAAI,SAAS,CAAC;AAAA;AAAA,UAEjB,KAAK,WAAW,YACd;AAAA,uBACW,MAAM,KAAK,mBAAmB,uBAAuB,CAAC;AAAA;AAAA,iBAE5D,IAAI,YAAY,CAAC;AAAA,iBAEtB,OAAO;AAAA;AAAA;AAAA,EAGjB;AAAA,EAEQ,2BAA2B;AACjC,WAAO;AAAA;AAAA,UAED,KAAK,YAAY,QACf,mEACA,gDAAgD;AAAA;AAAA,YAEhD,KAAK,YAAY,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA,UAKzB,KAAK,oBAAoB;AAAA;AAAA;AAAA,mBAGhB,KAAK,YAAY,UAAU,CAAC;AAAA,mBAC5B,KAAK,uBAAuB;AAAA;AAAA;AAAA;AAAA,EAI7C;AAAA,EAEQ,sBAAsB,OAAwC;AACpE,SAAK,gBAAiB,QAAQ,CAAC,MAAM,OAAO;AAC5C,SAAK;AAAA,MACH,IAAI,YAAY,oBAAoB;AAAA,QAClC,QAAQ,EAAC,OAAO,CAAC,MAAM,OAAO,QAAA;AAAA,MAAO,CACtC;AAAA,IAAA;AAAA,EAEL;AAAA,EAEQ,sBAAsB,OAAmB;AAC/C,SAAK;AAAA,MACH,IAAI,YAAY,uBAAuB;AAAA,QACrC,QAAQ,EAAC,YAAa,MAAM,OAA4B,QAAA;AAAA,MAAO,CAChE;AAAA,IAAA;AAAA,EAEL;AAAA,EAEQ,6BAA6B,OAAwC;AAC3E,SAAK;AAAA,MACH,IAAI,YAAY,8BAA8B;AAAA,QAC5C,QAAQ,EAAC,mBAAmB,MAAM,OAAO,QAAA;AAAA,MAAO,CACjD;AAAA,IAAA;AAAA,EAEL;AAAA,EAEQ,gCAAgC;AACtC,UAAM,iBACJ,KAAK,0BAA0B,eAC/B,KAAK,0BAA0B;AACjC,WAAO;AAAA;AAAA,UAED,KAAK,iBAAiB,QACpB;AAAA;AAAA,4CAGA,kEAAkE;AAAA;AAAA,YAElE,KAAK,iBAAiB,YAAY;AAAA;AAAA;AAAA;AAAA,wBAItB,iBAAiB,mBAAmB,EAAE;AAAA,UACpD,KAAK,wBAAwB,EAAC,iBAAiB,KAAA,CAAK,CAAC;AAAA;AAAA,qBAEzC,KAAK,iBAAiB,gBAAgB,KAAK,MAAO,CAAC;AAAA;AAAA;AAAA,QAGjE,KAAK,iBAAiB,eAAe,SACnC;AAAA;AAAA,yBAEe,KAAK,iBAAiB,UAAU;AAAA,uBAClC,KAAK,qBAAqB;AAAA,sBAC3B,IAAI,cAAc,CAAC;AAAA;AAAA,oBAG/B,OAAO;AAAA;AAAA,EAEf;AAAA,EAEQ,0BAA0B;AAChC,SAAK;AAAA,MACH,IAAI,YAAY,uBAAuB,EAAC,QAAQ,EAAC,OAAO,OAAI,CAAE;AAAA,IAAA;AAAA,EAElE;AAAA,EAEQ,6BAA6B;AACnC,QAAI,CAAC,KAAK,cAAc;AACtB,aAAO;AAAA,IACT;AACA,WAAO;AAAA;AAAA;AAAA;AAAA,mBAIQ,KAAK,aAAa,KAAK;AAAA,sBACpB,KAAK,aAAa,QAAQ;AAAA,gCAChB,KAAK,aAAa,sBAAsB,KAAK;AAAA,0BACnD,KAAK,aAAa,gBAAgB,KAAK;AAAA;AAAA;AAAA,YAGrD,KAAK,aAAa,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA,6BAKN,KAAK,uBAAuB;AAAA,YAC7C,IAAI,OAAO,CAAC;AAAA;AAAA;AAAA,QAGhB,KAAK,aAAa,sBAAsB,SACtC;AAAA;AAAA,yBAEe,KAAK,aAAa,iBAAiB;AAAA,qCACvB,KAAK,4BAA4B;AAAA,sBAChD,IAAI,qBAAqB,CAAC;AAAA;AAAA,oBAGtC,OAAO;AAAA;AAAA,EAEf;AAAA,EAEQ,uBAAuB,MAAc;AAC3C,SAAK;AAAA,MACH,IAAI,YAAY,uBAAuB,EAAC,QAAQ,EAAC,SAAS,OAAI,CAAE;AAAA,IAAA;AAAA,EAEpE;AAAA,EAEQ,uBAAuB;AAC7B,QAAI,KAAK,WAAW,UAAU,WAAW,GAAG;AAC1C,aAAO;AAAA,IACT;AACA,WAAO;AAAA;AAAA,kCAEuB,IAAI,OAAO,CAAC;AAAA;AAAA;AAAA;AAAA,YAIlC,KAAK,WAAW,UAAU;AAAA,MAC1B,CAAC,WAAW;AAAA;AAAA,yBAEC,OAAO,IAAI;AAAA,2BACT,OAAO,SAAS,KAAK,WAAW,WAAW;AAAA,yBAC7C,MAAM,KAAK,uBAAuB,OAAO,IAAI,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAAA,CAM5D;AAAA,sCAC2B,IAAI,gBAAgB,CAAC;AAAA;AAAA,gBAE3C,KAAK,WAAW,eAAe;AAAA,MAC/B,CAAC,WAAW;AAAA;AAAA,6BAEC,OAAO,IAAI;AAAA,+BACT,OAAO,SAAS,KAAK,WAAW,WAAW;AAAA,6BAC7C,MAAM,KAAK,uBAAuB,OAAO,IAAI,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAAA,CAM5D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMb;AAAA,EAEQ,uBAAuB,MAAc;AAC3C,SAAK;AAAA,MACH,IAAI,YAAY,uBAAuB,EAAC,QAAQ,EAAC,QAAQ,OAAI,CAAE;AAAA,IAAA;AAAA,EAEnE;AAAA,EAEQ,2BAA2B,MAAc;AAC/C,SAAK;AAAA,MACH,IAAI,YAAY,2BAA2B,EAAC,QAAQ,EAAC,OAAO,OAAI,CAAE;AAAA,IAAA;AAAA,EAEtE;AAAA,EAEQ,uBAAuB,MAAc;AAC3C,SAAK;AAAA,MACH,IAAI,YAAY,uBAAuB,EAAC,QAAQ,EAAC,MAAM,OAAI,CAAE;AAAA,IAAA;AAAA,EAEjE;AAAA,EAEQ,4BAA4B;AAClC,WAAO,KAAK;AAAA,MACV,IAAI,QAAQ;AAAA,MACZ,KAAK,YAAY,WAAW,CAAA;AAAA,MAC5B,KAAK,YAAY,kBAAkB;AAAA,MACnC,CAAC,SAAiB,KAAK,uBAAuB,IAAI;AAAA,IAAA;AAAA,EAEtD;AAAA,EAEQ,iCAAiC;AACvC,WAAO,KAAK;AAAA,MACV,IAAI,OAAO;AAAA,MACX,KAAK,iBAAiB,UAAU,CAAA;AAAA,MAChC,KAAK,iBAAiB,iBAAiB;AAAA,MACvC,CAAC,SAAiB,KAAK,2BAA2B,IAAI;AAAA,IAAA;AAAA,EAE1D;AAAA,EAEQ,8BAA8B;AACpC,WAAO,KAAK;AAAA,MACV,IAAI,MAAM;AAAA,MACV,KAAK,cAAc,SAAS,CAAA;AAAA,MAC5B,KAAK,cAAc,gBAAgB;AAAA,MACnC,CAAC,SAAiB,KAAK,uBAAuB,IAAI;AAAA,IAAA;AAAA,EAEtD;AAAA,EAEQ,qBACN,OACA,SACA,gBACA,mBACA;AACA,QAAI,QAAQ,WAAW,GAAG;AACxB,aAAO;AAAA,IACT;AACA,WAAO;AAAA;AAAA,kCAEuB,KAAK;AAAA;AAAA;AAAA;AAAA,YAI3B,QAAQ;AAAA,MACR,CAAC,WAAW;AAAA;AAAA,wBAEA,KAAK;AAAA,yBACJ,OAAO,IAAI;AAAA,2BACT,OAAO,SAAS,cAAc;AAAA,0BAC/B,MAAM,kBAAkB,OAAO,IAAI,CAAC;AAAA;AAAA;AAAA,IAAA,CAGnD;AAAA;AAAA;AAAA;AAAA,EAIT;AAAA;AAAA,EAIQ,oBAAoB;AAC1B,UAAM,YAAY,KAAK;AACvB,QAAI,UAAmC;AACvC,YAAQ,WAAA;AAAA,MACN,KAAK;AACH,kBAAU,KAAK,sBAAA;AACf;AAAA,MACF,KAAK;AACH,kBAAU,KAAK,uBAAA;AACf;AAAA,MACF,KAAK;AACH,kBAAU,KAAK,4BAAA;AACf;AAAA,MACF,KAAK;AACH,kBAAU,KAAK,yBAAA;AACf;AAAA,IAAA;AAEJ,WAAO;AAAA,0CAC+B,OAAO;AAAA,QACzC,KAAK,cAAc,SAAS,CAAC;AAAA;AAAA,EAEnC;AAAA,EAEQ,4BAA4B,OAAmB;AACrD,UAAM,UAAW,MAAM,OAA4B;AACnD,SAAK,cAAc,IAAI,YAAY,cAAc,EAAC,QAAQ,EAAC,QAAA,EAAO,CAAE,CAAC;AAAA,EACvE;AAAA,EAEQ,wBAAwB;AAC9B,QAAI,CAAC,KAAK,WAAW;AACnB,aAAO;AAAA,IACT;AACA,WAAO;AAAA;AAAA;AAAA,kBAGO,IAAI,OAAO,CAAC;AAAA;AAAA,uBAEP,KAAK,UAAU,OAAO;AAAA,qBACxB,KAAK,2BAA2B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,YAOzC,KAAK,UAAU,UAAU;AAAA,MACzB,CAAC,YAAY;AAAA;AAAA,yBAEA,QAAQ,IAAI;AAAA,2BACV,QAAQ,SAAS,KAAK,WAAW,WAAW;AAAA,yBAC9C,MAAM,KAAK,uBAAuB,QAAQ,IAAI,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAAA,CAM7D;AAAA;AAAA;AAAA;AAAA,EAIT;AAAA,EAEQ,yBAAyB;AAC/B,QAAI,CAAC,KAAK,YAAY;AACpB,aAAO;AAAA,IACT;AACA,WAAO;AAAA;AAAA;AAAA,kBAGO,IAAI,OAAO,CAAC;AAAA;AAAA;AAAA,YAGlB,KAAK,oBAAoB;AAAA;AAAA;AAAA;AAAA,uBAId,KAAK,WAAW,MAAM;AAAA,uBACtB,KAAK,uBAAuB;AAAA;AAAA;AAAA,iBAGlC,KAAK,WAAW,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aAQ1B,KAAK,WAAW,WAAW,CAAA,GAAI;AAAA,MAChC,CAAC,WAAW;AAAA;AAAA;AAAA,yBAGC,OAAO,IAAI;AAAA,2BACT,OAAO,SAAS,KAAK,YAAY,cAAc;AAAA,0BAChD,MAAM,KAAK,uBAAuB,OAAO,IAAI,CAAC;AAAA;AAAA;AAAA,IAAA,CAG7D;AAAA;AAAA;AAAA;AAAA,EAIT;AAAA,EAEQ,8BAA8B;AACpC,QAAI,CAAC,KAAK,iBAAiB;AACzB,aAAO;AAAA,IACT;AACA,UAAM,iBACJ,KAAK,0BAA0B,eAC/B,KAAK,0BAA0B;AACjC,WAAO;AAAA;AAAA;AAAA,kBAGO,IAAI,YAAY,CAAC;AAAA;AAAA;AAAA,6CAGU,iBAC/B,mBACA,EAAE;AAAA;AAAA,YAEJ,KAAK,yBAAyB;AAAA;AAAA;AAAA,sBAGnB,KAAK,gBAAgB,eAAe,MAAO,CAAC;AAAA;AAAA;AAAA,UAGzD,KAAK,gBAAgB,eAAe,SAClC;AAAA;AAAA,2BAEe,KAAK,gBAAgB,UAAU;AAAA,yBACjC,KAAK,qBAAqB;AAAA,wBAC3B,IAAI,cAAc,CAAC;AAAA;AAAA,sBAG/B,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA,aAKN,KAAK,gBAAgB,UAAU,CAAA,GAAI;AAAA,MACpC,CAAC,UAAU;AAAA;AAAA;AAAA,yBAGE,MAAM,IAAI;AAAA,2BACR,MAAM,SAAS,KAAK,iBAAiB,aAAa;AAAA,0BACnD,MAAM,KAAK,2BAA2B,MAAM,IAAI,CAAC;AAAA;AAAA;AAAA,IAAA,CAGhE;AAAA;AAAA;AAAA;AAAA,EAIT;AAAA,EAEQ,2BAA2B;AACjC,QAAI,CAAC,KAAK,cAAc;AACtB,aAAO;AAAA,IACT;AACA,WAAO;AAAA;AAAA;AAAA,kBAGO,IAAI,SAAS,CAAC;AAAA;AAAA;AAAA,uBAGT,KAAK,aAAa,KAAK;AAAA,0BACpB,KAAK,aAAa,QAAQ;AAAA,oCAChB,KAAK,aAAa,sBACxC,KAAK;AAAA,8BACW,KAAK,aAAa,gBAAgB,KAAK;AAAA;AAAA;AAAA,iBAGpD,KAAK,aAAa,KAAK;AAAA;AAAA;AAAA;AAAA,UAI9B,KAAK,aAAa,iBAChB;AAAA,mCACuB,KAAK,uBAAuB;AAAA,kBAC7C,IAAI,OAAO,CAAC;AAAA;AAAA,sBAGlB,OAAO;AAAA,UACT,KAAK,aAAa,sBAAsB,SACtC;AAAA;AAAA,2BAEe,KAAK,aAAa,iBAAiB;AAAA,uCACvB,KAAK,4BAA4B;AAAA,wBAChD,IAAI,qBAAqB,CAAC;AAAA;AAAA,sBAGtC,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA,aAKN,KAAK,aAAa,SAAS,CAAA,GAAI;AAAA,MAChC,CAAC,SAAS;AAAA;AAAA;AAAA,yBAGG,KAAK,IAAI;AAAA,2BACP,KAAK,SAAS,KAAK,cAAc,YAAY;AAAA,0BAC9C,MAAM,KAAK,uBAAuB,KAAK,IAAI,CAAC;AAAA;AAAA;AAAA,IAAA,CAG3D;AAAA;AAAA;AAAA;AAAA,EAIT;AAAA,EAEQ,oBACN,SACA,WACA,OACA,MACA;AACA,WAAO;AAAA,cACG,cAAc,UAAU,WAAW,EAAE;AAAA,cACrC,KAAK;AAAA,eACJ,MAAM,KAAK,qBAAqB,OAAO,CAAC;AAAA;AAAA,QAE/C,IAAI;AAAA;AAAA,EAEV;AAAA,EAEQ,cAAc,WAA0B;AAC9C,WAAO;AAAA;AAAA,UAED,KAAK,YACH,KAAK;AAAA,MACH;AAAA,MACA;AAAA,MACA,IAAI,OAAO;AAAA,MACX;AAAA,IAAA,IAEF,OAAO;AAAA,UACT,KAAK,aACH,KAAK;AAAA,MACH;AAAA,MACA;AAAA,MACA,IAAI,OAAO;AAAA,MACX;AAAA,IAAA,IAEF,OAAO;AAAA,UACT,KAAK,kBACH,KAAK;AAAA,MACH;AAAA,MACA;AAAA,MACA,IAAI,YAAY;AAAA,MAChB;AAAA,IAAA,IAEF,OAAO;AAAA,UACT,KAAK,eACH,KAAK;AAAA,MACH;AAAA,MACA;AAAA,MACA,IAAI,SAAS;AAAA,MACb;AAAA;AAAA,yBAEW,KAAK,aAAa,KAAK;AAAA,4BACpB,KAAK,aAAa,QAAQ;AAAA,sCAChB,KAAK,aAAa,sBACxC,KAAK;AAAA,gCACW,KAAK,aAAa,gBAAgB,KAAK;AAAA;AAAA,IAAA,IAG3D,OAAO;AAAA;AAAA;AAAA,EAGjB;AAGF;AAz8Ba,cAw8BK,SAAS,UAAU,YAAY;AAv8BjB,gBAAA;AAAA,EAA7B,SAAS,EAAC,WAAW,MAAA,CAAM;AAAA,GADjB,cACmB,WAAA,aAAA,CAAA;AACA,gBAAA;AAAA,EAA7B,SAAS,EAAC,WAAW,MAAA,CAAM;AAAA,GAFjB,cAEmB,WAAA,cAAA,CAAA;AACA,gBAAA;AAAA,EAA7B,SAAS,EAAC,WAAW,MAAA,CAAM;AAAA,GAHjB,cAGmB,WAAA,mBAAA,CAAA;AACA,gBAAA;AAAA,EAA7B,SAAS,EAAC,WAAW,MAAA,CAAM;AAAA,GAJjB,cAImB,WAAA,gBAAA,CAAA;AACH,gBAAA;AAAA,EAA1B,SAAS,EAAC,MAAM,QAAA,CAAQ;AAAA,GALd,cAKgB,WAAA,aAAA,CAAA;AACA,gBAAA;AAAA,EAA1B,SAAS,EAAC,MAAM,QAAA,CAAQ;AAAA,GANd,cAMgB,WAAA,sBAAA,CAAA;AACD,gBAAA;AAAA,EAAzB,SAAS,EAAC,MAAM,OAAA,CAAO;AAAA,GAPb,cAOe,WAAA,iBAAA,CAAA;AACC,gBAAA;AAAA,EAA1B,SAAS,EAAC,MAAM,QAAA,CAAQ;AAAA,GARd,cAQgB,WAAA,mBAAA,CAAA;AACA,gBAAA;AAAA,EAA1B,SAAS,EAAC,MAAM,QAAA,CAAQ;AAAA,GATd,cASgB,WAAA,eAAA,CAAA;AAThB,gBAAN,gBAAA;AAAA,EAFN,cAAc,iBAAiB;AAAA,EAC/B,UAAA;AAAU,GACE,aAAA;"}
@@ -12,6 +12,8 @@ export declare enum ObcTableHeaderItemSortDirection {
12
12
  Desc = "desc"
13
13
  }
14
14
  /**
15
+ * @slot leading-icon - Leading icon (shown when `hasLeadingIcon` is true).
16
+ * @slot - Header label content (hidden when `type` is `IconOnly`).
15
17
  * @beta
16
18
  */
17
19
  export declare class ObcTableHeaderItem extends LitElement {
@@ -1 +1 @@
1
- {"version":3,"file":"table-header-item.d.ts","sourceRoot":"","sources":["../../../src/components/table-header-item/table-header-item.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,UAAU,EAAqB,MAAM,KAAK,CAAC;AAKnD,OAAO,uCAAuC,CAAC;AAC/C,OAAO,yCAAyC,CAAC;AAGjD,oBAAY,sBAAsB;IAChC,OAAO,YAAY;IACnB,QAAQ,aAAa;IACrB,MAAM,WAAW;CAClB;AAED,oBAAY,+BAA+B;IACzC,IAAI,SAAS;IACb,GAAG,QAAQ;IACX,IAAI,SAAS;CACd;AAED;;GAEG;AACH,qBACa,kBAAmB,SAAQ,UAAU;IACtB,IAAI,EAAE,sBAAsB,CACrB;IACN,QAAQ,UAAS;IACjB,cAAc,UAAS;IAClD,oCAAoC;IACV,aAAa,EAAE,+BAA+B,CACjC;IACZ,WAAW,UAAS;IACpB,OAAO,UAAS;IAChB,QAAQ,UAAS;IAEnC,MAAM;IAiDf,OAAO,CAAC,eAAe;IAWvB,OAAgB,MAAM,0BAA2B;CAClD;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,uBAAuB,EAAE,kBAAkB,CAAC;KAC7C;CACF"}
1
+ {"version":3,"file":"table-header-item.d.ts","sourceRoot":"","sources":["../../../src/components/table-header-item/table-header-item.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,UAAU,EAAqB,MAAM,KAAK,CAAC;AAKnD,OAAO,uCAAuC,CAAC;AAC/C,OAAO,yCAAyC,CAAC;AAGjD,oBAAY,sBAAsB;IAChC,OAAO,YAAY;IACnB,QAAQ,aAAa;IACrB,MAAM,WAAW;CAClB;AAED,oBAAY,+BAA+B;IACzC,IAAI,SAAS;IACb,GAAG,QAAQ;IACX,IAAI,SAAS;CACd;AAED;;;;GAIG;AACH,qBACa,kBAAmB,SAAQ,UAAU;IACtB,IAAI,EAAE,sBAAsB,CACrB;IACN,QAAQ,UAAS;IACjB,cAAc,UAAS;IAClD,oCAAoC;IACV,aAAa,EAAE,+BAA+B,CACjC;IACZ,WAAW,UAAS;IACpB,OAAO,UAAS;IAChB,QAAQ,UAAS;IAEnC,MAAM;IAiDf,OAAO,CAAC,eAAe;IAWvB,OAAgB,MAAM,0BAA2B;CAClD;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,uBAAuB,EAAE,kBAAkB,CAAC;KAC7C;CACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"table-header-item.js","sources":["../../../src/components/table-header-item/table-header-item.ts"],"sourcesContent":["import {LitElement, nothing, unsafeCSS} from 'lit';\nimport {customElement} from '../../decorator.js';\nimport compentStyle from './table-header-item.css?inline';\nimport {property} from 'lit/decorators.js';\nimport {classMap} from 'lit/directives/class-map.js';\nimport '../../icons/icon-chevron-up-google.js';\nimport '../../icons/icon-chevron-down-google.js';\nimport {literal, html} from 'lit/static-html.js';\n\nexport enum ObcTableHeaderItemType {\n Regular = 'Regular',\n IconOnly = 'IconOnly',\n Narrow = 'Narrow',\n}\n\nexport enum ObcTableHeaderItemSortDirection {\n None = 'none',\n Asc = 'asc',\n Desc = 'desc',\n}\n\n/**\n * @beta\n */\n@customElement('obc-table-header-item')\nexport class ObcTableHeaderItem extends LitElement {\n @property({type: String}) type: ObcTableHeaderItemType =\n ObcTableHeaderItemType.Regular;\n @property({type: Boolean}) disabled = false;\n @property({type: Boolean}) hasLeadingIcon = false;\n /** @availableWhen sortable==true */\n @property({type: String}) sortDirection: ObcTableHeaderItemSortDirection =\n ObcTableHeaderItemSortDirection.None;\n @property({type: Boolean}) showDivider = false;\n @property({type: Boolean}) checked = false;\n @property({type: Boolean}) sortable = false;\n\n override render() {\n const classes = {\n wrapper: true,\n [`style-${(this.type ?? ObcTableHeaderItemType.Regular).toLowerCase()}`]: true,\n sortable: this.sortable,\n disabled: this.disabled,\n 'has-leading-icon': this.hasLeadingIcon,\n 'sorted-asc': this.sortDirection === ObcTableHeaderItemSortDirection.Asc,\n 'sorted-desc':\n this.sortDirection === ObcTableHeaderItemSortDirection.Desc,\n checked: this.checked,\n };\n const tag = this.sortable ? literal`button` : literal`div`;\n return html`\n <${tag}\n class=${classMap(classes)}\n ?disabled=${this.disabled}\n part=\"wrapper\"\n >\n <div class=\"visible-wrapper\" part=\"visible-wrapper\">\n ${\n this.hasLeadingIcon\n ? html`<span class=\"leading\" part=\"leading\"\n ><slot name=\"leading-icon\"></slot\n ></span>`\n : nothing\n }\n ${\n this.type !== ObcTableHeaderItemType.IconOnly\n ? html`<span class=\"label\" part=\"label\"><slot></slot></span>`\n : nothing\n }\n ${\n this.sortable\n ? html`<span class=\"trailing sort-icon\" part=\"sort-icon\"\n >${this._renderSortIcon()}</span\n >`\n : nothing\n }\n </div>\n ${\n this.showDivider\n ? html`<div class=\"divider\" part=\"divider\"></div>`\n : nothing\n }\n </${tag}>\n `;\n }\n\n private _renderSortIcon() {\n switch (this.sortDirection) {\n case ObcTableHeaderItemSortDirection.Asc:\n return html`<obi-chevron-up-google></obi-chevron-up-google>`;\n case ObcTableHeaderItemSortDirection.Desc:\n return html`<obi-chevron-down-google></obi-chevron-down-google>`;\n default:\n return nothing;\n }\n }\n\n static override styles = unsafeCSS(compentStyle);\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'obc-table-header-item': ObcTableHeaderItem;\n }\n}\n"],"names":["ObcTableHeaderItemType","ObcTableHeaderItemSortDirection"],"mappings":";;;;;;;;;;;;;;;;;;AASO,IAAK,2CAAAA,4BAAL;AACLA,0BAAA,SAAA,IAAU;AACVA,0BAAA,UAAA,IAAW;AACXA,0BAAA,QAAA,IAAS;AAHC,SAAAA;AAAA,GAAA,0BAAA,CAAA,CAAA;AAML,IAAK,oDAAAC,qCAAL;AACLA,mCAAA,MAAA,IAAO;AACPA,mCAAA,KAAA,IAAM;AACNA,mCAAA,MAAA,IAAO;AAHG,SAAAA;AAAA,GAAA,mCAAA,CAAA,CAAA;AAUL,IAAM,qBAAN,cAAiC,WAAW;AAAA,EAA5C,cAAA;AAAA,UAAA,GAAA,SAAA;AACqB,SAAA,OACxB;AACyB,SAAA,WAAW;AACX,SAAA,iBAAiB;AAElB,SAAA,gBACxB;AACyB,SAAA,cAAc;AACd,SAAA,UAAU;AACV,SAAA,WAAW;AAAA,EAAA;AAAA,EAE7B,SAAS;AAChB,UAAM,UAAU;AAAA,MACd,SAAS;AAAA,MACT,CAAC,UAAU,KAAK,QAAQ,WAAgC,YAAA,CAAa,EAAE,GAAG;AAAA,MAC1E,UAAU,KAAK;AAAA,MACf,UAAU,KAAK;AAAA,MACf,oBAAoB,KAAK;AAAA,MACzB,cAAc,KAAK,kBAAkB;AAAA,MACrC,eACE,KAAK,kBAAkB;AAAA,MACzB,SAAS,KAAK;AAAA,IAAA;AAEhB,UAAM,MAAM,KAAK,WAAW,kBAAkB;AAC9C,WAAO;AAAA,SACF,GAAG;AAAA,gBACI,SAAS,OAAO,CAAC;AAAA,oBACb,KAAK,QAAQ;AAAA;AAAA;AAAA;AAAA,YAKrB,KAAK,iBACD;AAAA;AAAA,4BAGA,OACN;AAAA,YAEE,KAAK,SAAS,aACV,8DACA,OACN;AAAA,YAEE,KAAK,WACD;AAAA,qBACK,KAAK,iBAAiB;AAAA,qBAE3B,OACN;AAAA;AAAA,UAGA,KAAK,cACD,mDACA,OACN;AAAA,UACE,GAAG;AAAA;AAAA,EAEX;AAAA,EAEQ,kBAAkB;AACxB,YAAQ,KAAK,eAAA;AAAA,MACX,KAAK;AACH,eAAO;AAAA,MACT,KAAK;AACH,eAAO;AAAA,MACT;AACE,eAAO;AAAA,IAAA;AAAA,EAEb;AAGF;AAzEa,mBAwEK,SAAS,UAAU,YAAY;AAvErB,gBAAA;AAAA,EAAzB,SAAS,EAAC,MAAM,OAAA,CAAO;AAAA,GADb,mBACe,WAAA,QAAA,CAAA;AAEC,gBAAA;AAAA,EAA1B,SAAS,EAAC,MAAM,QAAA,CAAQ;AAAA,GAHd,mBAGgB,WAAA,YAAA,CAAA;AACA,gBAAA;AAAA,EAA1B,SAAS,EAAC,MAAM,QAAA,CAAQ;AAAA,GAJd,mBAIgB,WAAA,kBAAA,CAAA;AAED,gBAAA;AAAA,EAAzB,SAAS,EAAC,MAAM,OAAA,CAAO;AAAA,GANb,mBAMe,WAAA,iBAAA,CAAA;AAEC,gBAAA;AAAA,EAA1B,SAAS,EAAC,MAAM,QAAA,CAAQ;AAAA,GARd,mBAQgB,WAAA,eAAA,CAAA;AACA,gBAAA;AAAA,EAA1B,SAAS,EAAC,MAAM,QAAA,CAAQ;AAAA,GATd,mBASgB,WAAA,WAAA,CAAA;AACA,gBAAA;AAAA,EAA1B,SAAS,EAAC,MAAM,QAAA,CAAQ;AAAA,GAVd,mBAUgB,WAAA,YAAA,CAAA;AAVhB,qBAAN,gBAAA;AAAA,EADN,cAAc,uBAAuB;AAAA,GACzB,kBAAA;"}
1
+ {"version":3,"file":"table-header-item.js","sources":["../../../src/components/table-header-item/table-header-item.ts"],"sourcesContent":["import {LitElement, nothing, unsafeCSS} from 'lit';\nimport {customElement} from '../../decorator.js';\nimport compentStyle from './table-header-item.css?inline';\nimport {property} from 'lit/decorators.js';\nimport {classMap} from 'lit/directives/class-map.js';\nimport '../../icons/icon-chevron-up-google.js';\nimport '../../icons/icon-chevron-down-google.js';\nimport {literal, html} from 'lit/static-html.js';\n\nexport enum ObcTableHeaderItemType {\n Regular = 'Regular',\n IconOnly = 'IconOnly',\n Narrow = 'Narrow',\n}\n\nexport enum ObcTableHeaderItemSortDirection {\n None = 'none',\n Asc = 'asc',\n Desc = 'desc',\n}\n\n/**\n * @slot leading-icon - Leading icon (shown when `hasLeadingIcon` is true).\n * @slot - Header label content (hidden when `type` is `IconOnly`).\n * @beta\n */\n@customElement('obc-table-header-item')\nexport class ObcTableHeaderItem extends LitElement {\n @property({type: String}) type: ObcTableHeaderItemType =\n ObcTableHeaderItemType.Regular;\n @property({type: Boolean}) disabled = false;\n @property({type: Boolean}) hasLeadingIcon = false;\n /** @availableWhen sortable==true */\n @property({type: String}) sortDirection: ObcTableHeaderItemSortDirection =\n ObcTableHeaderItemSortDirection.None;\n @property({type: Boolean}) showDivider = false;\n @property({type: Boolean}) checked = false;\n @property({type: Boolean}) sortable = false;\n\n override render() {\n const classes = {\n wrapper: true,\n [`style-${(this.type ?? ObcTableHeaderItemType.Regular).toLowerCase()}`]: true,\n sortable: this.sortable,\n disabled: this.disabled,\n 'has-leading-icon': this.hasLeadingIcon,\n 'sorted-asc': this.sortDirection === ObcTableHeaderItemSortDirection.Asc,\n 'sorted-desc':\n this.sortDirection === ObcTableHeaderItemSortDirection.Desc,\n checked: this.checked,\n };\n const tag = this.sortable ? literal`button` : literal`div`;\n return html`\n <${tag}\n class=${classMap(classes)}\n ?disabled=${this.disabled}\n part=\"wrapper\"\n >\n <div class=\"visible-wrapper\" part=\"visible-wrapper\">\n ${\n this.hasLeadingIcon\n ? html`<span class=\"leading\" part=\"leading\"\n ><slot name=\"leading-icon\"></slot\n ></span>`\n : nothing\n }\n ${\n this.type !== ObcTableHeaderItemType.IconOnly\n ? html`<span class=\"label\" part=\"label\"><slot></slot></span>`\n : nothing\n }\n ${\n this.sortable\n ? html`<span class=\"trailing sort-icon\" part=\"sort-icon\"\n >${this._renderSortIcon()}</span\n >`\n : nothing\n }\n </div>\n ${\n this.showDivider\n ? html`<div class=\"divider\" part=\"divider\"></div>`\n : nothing\n }\n </${tag}>\n `;\n }\n\n private _renderSortIcon() {\n switch (this.sortDirection) {\n case ObcTableHeaderItemSortDirection.Asc:\n return html`<obi-chevron-up-google></obi-chevron-up-google>`;\n case ObcTableHeaderItemSortDirection.Desc:\n return html`<obi-chevron-down-google></obi-chevron-down-google>`;\n default:\n return nothing;\n }\n }\n\n static override styles = unsafeCSS(compentStyle);\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'obc-table-header-item': ObcTableHeaderItem;\n }\n}\n"],"names":["ObcTableHeaderItemType","ObcTableHeaderItemSortDirection"],"mappings":";;;;;;;;;;;;;;;;;;AASO,IAAK,2CAAAA,4BAAL;AACLA,0BAAA,SAAA,IAAU;AACVA,0BAAA,UAAA,IAAW;AACXA,0BAAA,QAAA,IAAS;AAHC,SAAAA;AAAA,GAAA,0BAAA,CAAA,CAAA;AAML,IAAK,oDAAAC,qCAAL;AACLA,mCAAA,MAAA,IAAO;AACPA,mCAAA,KAAA,IAAM;AACNA,mCAAA,MAAA,IAAO;AAHG,SAAAA;AAAA,GAAA,mCAAA,CAAA,CAAA;AAYL,IAAM,qBAAN,cAAiC,WAAW;AAAA,EAA5C,cAAA;AAAA,UAAA,GAAA,SAAA;AACqB,SAAA,OACxB;AACyB,SAAA,WAAW;AACX,SAAA,iBAAiB;AAElB,SAAA,gBACxB;AACyB,SAAA,cAAc;AACd,SAAA,UAAU;AACV,SAAA,WAAW;AAAA,EAAA;AAAA,EAE7B,SAAS;AAChB,UAAM,UAAU;AAAA,MACd,SAAS;AAAA,MACT,CAAC,UAAU,KAAK,QAAQ,WAAgC,YAAA,CAAa,EAAE,GAAG;AAAA,MAC1E,UAAU,KAAK;AAAA,MACf,UAAU,KAAK;AAAA,MACf,oBAAoB,KAAK;AAAA,MACzB,cAAc,KAAK,kBAAkB;AAAA,MACrC,eACE,KAAK,kBAAkB;AAAA,MACzB,SAAS,KAAK;AAAA,IAAA;AAEhB,UAAM,MAAM,KAAK,WAAW,kBAAkB;AAC9C,WAAO;AAAA,SACF,GAAG;AAAA,gBACI,SAAS,OAAO,CAAC;AAAA,oBACb,KAAK,QAAQ;AAAA;AAAA;AAAA;AAAA,YAKrB,KAAK,iBACD;AAAA;AAAA,4BAGA,OACN;AAAA,YAEE,KAAK,SAAS,aACV,8DACA,OACN;AAAA,YAEE,KAAK,WACD;AAAA,qBACK,KAAK,iBAAiB;AAAA,qBAE3B,OACN;AAAA;AAAA,UAGA,KAAK,cACD,mDACA,OACN;AAAA,UACE,GAAG;AAAA;AAAA,EAEX;AAAA,EAEQ,kBAAkB;AACxB,YAAQ,KAAK,eAAA;AAAA,MACX,KAAK;AACH,eAAO;AAAA,MACT,KAAK;AACH,eAAO;AAAA,MACT;AACE,eAAO;AAAA,IAAA;AAAA,EAEb;AAGF;AAzEa,mBAwEK,SAAS,UAAU,YAAY;AAvErB,gBAAA;AAAA,EAAzB,SAAS,EAAC,MAAM,OAAA,CAAO;AAAA,GADb,mBACe,WAAA,QAAA,CAAA;AAEC,gBAAA;AAAA,EAA1B,SAAS,EAAC,MAAM,QAAA,CAAQ;AAAA,GAHd,mBAGgB,WAAA,YAAA,CAAA;AACA,gBAAA;AAAA,EAA1B,SAAS,EAAC,MAAM,QAAA,CAAQ;AAAA,GAJd,mBAIgB,WAAA,kBAAA,CAAA;AAED,gBAAA;AAAA,EAAzB,SAAS,EAAC,MAAM,OAAA,CAAO;AAAA,GANb,mBAMe,WAAA,iBAAA,CAAA;AAEC,gBAAA;AAAA,EAA1B,SAAS,EAAC,MAAM,QAAA,CAAQ;AAAA,GARd,mBAQgB,WAAA,eAAA,CAAA;AACA,gBAAA;AAAA,EAA1B,SAAS,EAAC,MAAM,QAAA,CAAQ;AAAA,GATd,mBASgB,WAAA,WAAA,CAAA;AACA,gBAAA;AAAA,EAA1B,SAAS,EAAC,MAAM,QAAA,CAAQ;AAAA,GAVd,mBAUgB,WAAA,YAAA,CAAA;AAVhB,qBAAN,gBAAA;AAAA,EADN,cAAc,uBAAuB;AAAA,GACzB,kBAAA;"}
@@ -16,6 +16,7 @@ export declare enum TagSize {
16
16
  large = "large"
17
17
  }
18
18
  /**
19
+ * @slot - Leading icon content (shown when `hasIcon` is true).
19
20
  * @stable
20
21
  */
21
22
  export declare class ObcTag extends LitElement {
@@ -1 +1 @@
1
- {"version":3,"file":"tag.d.ts","sourceRoot":"","sources":["../../../src/components/tag/tag.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,UAAU,EAA2B,MAAM,KAAK,CAAC;AAMzD,oBAAY,QAAQ;IAClB,IAAI,SAAS;IACb,IAAI,SAAS;IACb,IAAI,SAAS;IACb,IAAI,SAAS;IACb,KAAK,UAAU;IACf,MAAM,WAAW;IACjB,MAAM,WAAW;IACjB,GAAG,QAAQ;IACX,MAAM,WAAW;IACjB,MAAM,WAAW;CAClB;AAED,oBAAY,OAAO;IACjB,OAAO,YAAY;IACnB,KAAK,UAAU;CAChB;AAED;;GAEG;AACH,qBACa,MAAO,SAAQ,UAAU;IACV,KAAK,SAAW;IAEhB,KAAK,EAAE,QAAQ,CAAiB;IAEhC,IAAI,EAAE,OAAO,CAAmB;IAE/B,OAAO,UAAS;IAE3C,OAAO,CAAC,iBAAiB;IAShB,MAAM;IAiBf,OAAgB,MAAM,0BAA6B;CACpD;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,SAAS,EAAE,MAAM,CAAC;KACnB;CACF"}
1
+ {"version":3,"file":"tag.d.ts","sourceRoot":"","sources":["../../../src/components/tag/tag.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,UAAU,EAA2B,MAAM,KAAK,CAAC;AAMzD,oBAAY,QAAQ;IAClB,IAAI,SAAS;IACb,IAAI,SAAS;IACb,IAAI,SAAS;IACb,IAAI,SAAS;IACb,KAAK,UAAU;IACf,MAAM,WAAW;IACjB,MAAM,WAAW;IACjB,GAAG,QAAQ;IACX,MAAM,WAAW;IACjB,MAAM,WAAW;CAClB;AAED,oBAAY,OAAO;IACjB,OAAO,YAAY;IACnB,KAAK,UAAU;CAChB;AAED;;;GAGG;AACH,qBACa,MAAO,SAAQ,UAAU;IACV,KAAK,SAAW;IAEhB,KAAK,EAAE,QAAQ,CAAiB;IAEhC,IAAI,EAAE,OAAO,CAAmB;IAE/B,OAAO,UAAS;IAE3C,OAAO,CAAC,iBAAiB;IAShB,MAAM;IAiBf,OAAgB,MAAM,0BAA6B;CACpD;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,SAAS,EAAE,MAAM,CAAC;KACnB;CACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"tag.js","sources":["../../../src/components/tag/tag.ts"],"sourcesContent":["import {LitElement, html, nothing, unsafeCSS} from 'lit';\nimport {property} from 'lit/decorators.js';\nimport {customElement} from '../../decorator.js';\nimport {classMap} from 'lit/directives/class-map.js';\nimport componentStyle from './tag.css?inline';\n\nexport enum TagColor {\n gray = 'gray',\n blue = 'blue',\n cyan = 'cyan',\n teal = 'teal',\n green = 'green',\n yellow = 'yellow',\n orange = 'orange',\n red = 'red',\n purple = 'purple',\n indigo = 'indigo',\n}\n\nexport enum TagSize {\n regular = 'regular',\n large = 'large',\n}\n\n/**\n * @stable\n */\n@customElement('obc-tag')\nexport class ObcTag extends LitElement {\n @property({type: String}) label = 'Label';\n\n @property({type: String}) color: TagColor = TagColor.gray;\n\n @property({type: String}) size: TagSize = TagSize.regular;\n\n @property({type: Boolean}) hasIcon = false;\n\n private renderLeadingIcon() {\n if (!this.hasIcon) return nothing;\n return html`\n <div class=\"tag-icon-wrapper\">\n <slot></slot>\n </div>\n `;\n }\n\n override render() {\n return html`\n <div\n class=${classMap({\n wrapper: true,\n ['color-' + this.color]: true,\n ['size-' + this.size]: true,\n })}\n >\n ${this.renderLeadingIcon()}\n <div class=\"tag-label-container\">\n <span class=\"tag-label\">${this.label}</span>\n </div>\n </div>\n `;\n }\n\n static override styles = unsafeCSS(componentStyle);\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'obc-tag': ObcTag;\n }\n}\n"],"names":["TagColor","TagSize"],"mappings":";;;;;;;;;;;;;;;AAMO,IAAK,6BAAAA,cAAL;AACLA,YAAA,MAAA,IAAO;AACPA,YAAA,MAAA,IAAO;AACPA,YAAA,MAAA,IAAO;AACPA,YAAA,MAAA,IAAO;AACPA,YAAA,OAAA,IAAQ;AACRA,YAAA,QAAA,IAAS;AACTA,YAAA,QAAA,IAAS;AACTA,YAAA,KAAA,IAAM;AACNA,YAAA,QAAA,IAAS;AACTA,YAAA,QAAA,IAAS;AAVC,SAAAA;AAAA,GAAA,YAAA,CAAA,CAAA;AAaL,IAAK,4BAAAC,aAAL;AACLA,WAAA,SAAA,IAAU;AACVA,WAAA,OAAA,IAAQ;AAFE,SAAAA;AAAA,GAAA,WAAA,CAAA,CAAA;AASL,IAAM,SAAN,cAAqB,WAAW;AAAA,EAAhC,cAAA;AAAA,UAAA,GAAA,SAAA;AACqB,SAAA,QAAQ;AAER,SAAA,QAAkB;AAElB,SAAA,OAAgB;AAEf,SAAA,UAAU;AAAA,EAAA;AAAA,EAE7B,oBAAoB;AAC1B,QAAI,CAAC,KAAK,QAAS,QAAO;AAC1B,WAAO;AAAA;AAAA;AAAA;AAAA;AAAA,EAKT;AAAA,EAES,SAAS;AAChB,WAAO;AAAA;AAAA,gBAEK,SAAS;AAAA,MACf,SAAS;AAAA,MACT,CAAC,WAAW,KAAK,KAAK,GAAG;AAAA,MACzB,CAAC,UAAU,KAAK,IAAI,GAAG;AAAA,IAAA,CACxB,CAAC;AAAA;AAAA,UAEA,KAAK,mBAAmB;AAAA;AAAA,oCAEE,KAAK,KAAK;AAAA;AAAA;AAAA;AAAA,EAI5C;AAGF;AApCa,OAmCK,SAAS,UAAU,cAAc;AAlCvB,gBAAA;AAAA,EAAzB,SAAS,EAAC,MAAM,OAAA,CAAO;AAAA,GADb,OACe,WAAA,SAAA,CAAA;AAEA,gBAAA;AAAA,EAAzB,SAAS,EAAC,MAAM,OAAA,CAAO;AAAA,GAHb,OAGe,WAAA,SAAA,CAAA;AAEA,gBAAA;AAAA,EAAzB,SAAS,EAAC,MAAM,OAAA,CAAO;AAAA,GALb,OAKe,WAAA,QAAA,CAAA;AAEC,gBAAA;AAAA,EAA1B,SAAS,EAAC,MAAM,QAAA,CAAQ;AAAA,GAPd,OAOgB,WAAA,WAAA,CAAA;AAPhB,SAAN,gBAAA;AAAA,EADN,cAAc,SAAS;AAAA,GACX,MAAA;"}
1
+ {"version":3,"file":"tag.js","sources":["../../../src/components/tag/tag.ts"],"sourcesContent":["import {LitElement, html, nothing, unsafeCSS} from 'lit';\nimport {property} from 'lit/decorators.js';\nimport {customElement} from '../../decorator.js';\nimport {classMap} from 'lit/directives/class-map.js';\nimport componentStyle from './tag.css?inline';\n\nexport enum TagColor {\n gray = 'gray',\n blue = 'blue',\n cyan = 'cyan',\n teal = 'teal',\n green = 'green',\n yellow = 'yellow',\n orange = 'orange',\n red = 'red',\n purple = 'purple',\n indigo = 'indigo',\n}\n\nexport enum TagSize {\n regular = 'regular',\n large = 'large',\n}\n\n/**\n * @slot - Leading icon content (shown when `hasIcon` is true).\n * @stable\n */\n@customElement('obc-tag')\nexport class ObcTag extends LitElement {\n @property({type: String}) label = 'Label';\n\n @property({type: String}) color: TagColor = TagColor.gray;\n\n @property({type: String}) size: TagSize = TagSize.regular;\n\n @property({type: Boolean}) hasIcon = false;\n\n private renderLeadingIcon() {\n if (!this.hasIcon) return nothing;\n return html`\n <div class=\"tag-icon-wrapper\">\n <slot></slot>\n </div>\n `;\n }\n\n override render() {\n return html`\n <div\n class=${classMap({\n wrapper: true,\n ['color-' + this.color]: true,\n ['size-' + this.size]: true,\n })}\n >\n ${this.renderLeadingIcon()}\n <div class=\"tag-label-container\">\n <span class=\"tag-label\">${this.label}</span>\n </div>\n </div>\n `;\n }\n\n static override styles = unsafeCSS(componentStyle);\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'obc-tag': ObcTag;\n }\n}\n"],"names":["TagColor","TagSize"],"mappings":";;;;;;;;;;;;;;;AAMO,IAAK,6BAAAA,cAAL;AACLA,YAAA,MAAA,IAAO;AACPA,YAAA,MAAA,IAAO;AACPA,YAAA,MAAA,IAAO;AACPA,YAAA,MAAA,IAAO;AACPA,YAAA,OAAA,IAAQ;AACRA,YAAA,QAAA,IAAS;AACTA,YAAA,QAAA,IAAS;AACTA,YAAA,KAAA,IAAM;AACNA,YAAA,QAAA,IAAS;AACTA,YAAA,QAAA,IAAS;AAVC,SAAAA;AAAA,GAAA,YAAA,CAAA,CAAA;AAaL,IAAK,4BAAAC,aAAL;AACLA,WAAA,SAAA,IAAU;AACVA,WAAA,OAAA,IAAQ;AAFE,SAAAA;AAAA,GAAA,WAAA,CAAA,CAAA;AAUL,IAAM,SAAN,cAAqB,WAAW;AAAA,EAAhC,cAAA;AAAA,UAAA,GAAA,SAAA;AACqB,SAAA,QAAQ;AAER,SAAA,QAAkB;AAElB,SAAA,OAAgB;AAEf,SAAA,UAAU;AAAA,EAAA;AAAA,EAE7B,oBAAoB;AAC1B,QAAI,CAAC,KAAK,QAAS,QAAO;AAC1B,WAAO;AAAA;AAAA;AAAA;AAAA;AAAA,EAKT;AAAA,EAES,SAAS;AAChB,WAAO;AAAA;AAAA,gBAEK,SAAS;AAAA,MACf,SAAS;AAAA,MACT,CAAC,WAAW,KAAK,KAAK,GAAG;AAAA,MACzB,CAAC,UAAU,KAAK,IAAI,GAAG;AAAA,IAAA,CACxB,CAAC;AAAA;AAAA,UAEA,KAAK,mBAAmB;AAAA;AAAA,oCAEE,KAAK,KAAK;AAAA;AAAA;AAAA;AAAA,EAI5C;AAGF;AApCa,OAmCK,SAAS,UAAU,cAAc;AAlCvB,gBAAA;AAAA,EAAzB,SAAS,EAAC,MAAM,OAAA,CAAO;AAAA,GADb,OACe,WAAA,SAAA,CAAA;AAEA,gBAAA;AAAA,EAAzB,SAAS,EAAC,MAAM,OAAA,CAAO;AAAA,GAHb,OAGe,WAAA,SAAA,CAAA;AAEA,gBAAA;AAAA,EAAzB,SAAS,EAAC,MAAM,OAAA,CAAO;AAAA,GALb,OAKe,WAAA,QAAA,CAAA;AAEC,gBAAA;AAAA,EAA1B,SAAS,EAAC,MAAM,QAAA,CAAQ;AAAA,GAPd,OAOgB,WAAA,WAAA,CAAA;AAPhB,SAAN,gBAAA;AAAA,EADN,cAAc,SAAS;AAAA,GACX,MAAA;"}
@@ -78,10 +78,10 @@ export declare enum ToggletipVariant {
78
78
  * ## Properties and Configuration
79
79
  *
80
80
  * - `variant`: Controls the visual style and semantic meaning (see Features above for all options).
81
- * - `title`: Sets the header text (shown if `hasTitleContainer` is true).
82
- * - `description`: Sets the main message text (shown if `hasDescription` is true).
83
- * - `hasTitleContainer`, `hasDescription`, `hasContent`, `hasActions`: Toggle visibility of each section.
84
- * - `hasLeadingIcon`, `hasTrailingIcon`: Toggle visibility of icon slots.
81
+ * - `title`: Sets the header text. The header is shown only when `title` is a non-empty string.
82
+ * - `description`: Sets the main message text. Shown whenever `description` is defined.
83
+ * - `hasContent`, `hasActions`: Toggle visibility of the custom content area and the action buttons.
84
+ * - `hasLeadingIcon`, `hasTrailingIcon`: Toggle visibility of icon slots (only effective when a `title` is set).
85
85
  * - `primaryButtonLabel`, `secondaryButtonLabel`: Set labels for action buttons (shown if `hasActions` is true).
86
86
  * - `customWidth`: Sets a custom width for the toggletip (in pixels).
87
87
  *