@oicl/openbridge-webcomponents 2.0.0-next.168 → 2.0.0-next.169

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 (67) hide show
  1. package/bundle/openbridge-webcomponents.bundle.js +3352 -2948
  2. package/bundle/openbridge-webcomponents.bundle.js.map +1 -1
  3. package/custom-elements.json +465 -3
  4. package/dist/components/alert-list-details-experimental/alert-list-details-experimental.d.ts.map +1 -1
  5. package/dist/components/alert-list-details-experimental/alert-list-details-experimental.js +18 -1
  6. package/dist/components/alert-list-details-experimental/alert-list-details-experimental.js.map +1 -1
  7. package/dist/components/alert-menu/alert-menu.css.js +21 -1
  8. package/dist/components/alert-menu/alert-menu.css.js.map +1 -1
  9. package/dist/components/alert-menu/alert-menu.d.ts +14 -0
  10. package/dist/components/alert-menu/alert-menu.d.ts.map +1 -1
  11. package/dist/components/alert-menu/alert-menu.js +10 -0
  12. package/dist/components/alert-menu/alert-menu.js.map +1 -1
  13. package/dist/components/app-menu/app-menu.css.js +23 -1
  14. package/dist/components/app-menu/app-menu.css.js.map +1 -1
  15. package/dist/components/app-menu/app-menu.d.ts +14 -0
  16. package/dist/components/app-menu/app-menu.d.ts.map +1 -1
  17. package/dist/components/app-menu/app-menu.js +17 -1
  18. package/dist/components/app-menu/app-menu.js.map +1 -1
  19. package/dist/components/brilliance-menu/brilliance-menu.css.js +21 -1
  20. package/dist/components/brilliance-menu/brilliance-menu.css.js.map +1 -1
  21. package/dist/components/brilliance-menu/brilliance-menu.d.ts +14 -0
  22. package/dist/components/brilliance-menu/brilliance-menu.d.ts.map +1 -1
  23. package/dist/components/brilliance-menu/brilliance-menu.js +10 -0
  24. package/dist/components/brilliance-menu/brilliance-menu.js.map +1 -1
  25. package/dist/components/command-menu/command-menu.css.js +21 -1
  26. package/dist/components/command-menu/command-menu.css.js.map +1 -1
  27. package/dist/components/command-menu/command-menu.d.ts +14 -0
  28. package/dist/components/command-menu/command-menu.d.ts.map +1 -1
  29. package/dist/components/command-menu/command-menu.js +10 -0
  30. package/dist/components/command-menu/command-menu.js.map +1 -1
  31. package/dist/components/context-menu-input/context-menu-input.css.js +58 -3
  32. package/dist/components/context-menu-input/context-menu-input.css.js.map +1 -1
  33. package/dist/components/context-menu-input/context-menu-input.d.ts +14 -1
  34. package/dist/components/context-menu-input/context-menu-input.d.ts.map +1 -1
  35. package/dist/components/context-menu-input/context-menu-input.js +11 -0
  36. package/dist/components/context-menu-input/context-menu-input.js.map +1 -1
  37. package/dist/components/navigation-menu/navigation-menu.css.js +21 -1
  38. package/dist/components/navigation-menu/navigation-menu.css.js.map +1 -1
  39. package/dist/components/navigation-menu/navigation-menu.d.ts +14 -0
  40. package/dist/components/navigation-menu/navigation-menu.d.ts.map +1 -1
  41. package/dist/components/navigation-menu/navigation-menu.js +10 -0
  42. package/dist/components/navigation-menu/navigation-menu.js.map +1 -1
  43. package/dist/components/system-menu/system-menu.css.js +81 -61
  44. package/dist/components/system-menu/system-menu.css.js.map +1 -1
  45. package/dist/components/system-menu/system-menu.d.ts +14 -0
  46. package/dist/components/system-menu/system-menu.d.ts.map +1 -1
  47. package/dist/components/system-menu/system-menu.js +10 -0
  48. package/dist/components/system-menu/system-menu.js.map +1 -1
  49. package/dist/components/top-bar/top-bar.d.ts +11 -4
  50. package/dist/components/top-bar/top-bar.d.ts.map +1 -1
  51. package/dist/components/top-bar/top-bar.js +18 -10
  52. package/dist/components/top-bar/top-bar.js.map +1 -1
  53. package/dist/components/user-button/user-button.d.ts +1 -0
  54. package/dist/components/user-button/user-button.d.ts.map +1 -1
  55. package/dist/components/user-button/user-button.js +11 -1
  56. package/dist/components/user-button/user-button.js.map +1 -1
  57. package/dist/components/user-menu/user-menu.css.js +21 -1
  58. package/dist/components/user-menu/user-menu.css.js.map +1 -1
  59. package/dist/components/user-menu/user-menu.d.ts +14 -0
  60. package/dist/components/user-menu/user-menu.d.ts.map +1 -1
  61. package/dist/components/user-menu/user-menu.js +10 -0
  62. package/dist/components/user-menu/user-menu.js.map +1 -1
  63. package/dist/internal/popover-controller.d.ts +128 -0
  64. package/dist/internal/popover-controller.d.ts.map +1 -0
  65. package/dist/internal/popover-controller.js +121 -0
  66. package/dist/internal/popover-controller.js.map +1 -0
  67. package/package.json +1 -1
@@ -29,6 +29,7 @@ import { stopPropagation } from "../../internal/events.js";
29
29
  import "../../icons/icon-display-brilliance-iec.js";
30
30
  import "../../icons/icon-palette-day-night-iec.js";
31
31
  import { clamp } from "../../svghelpers/math.js";
32
+ import { PopoverController } from "../../internal/popover-controller.js";
32
33
  var __defProp = Object.defineProperty;
33
34
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
34
35
  var __decorateClass = (decorators, target, key, kind) => {
@@ -62,6 +63,9 @@ const PALETTE_TAB_ID = "palette";
62
63
  let ObcBrillianceMenu = class extends LitElement {
63
64
  constructor() {
64
65
  super(...arguments);
66
+ this.softDismiss = false;
67
+ this.open = false;
68
+ this.softDismissController = new PopoverController(this);
65
69
  this.palette = "day";
66
70
  this.brightness = 50;
67
71
  this.showLinkBrightness = false;
@@ -572,6 +576,12 @@ let ObcBrillianceMenu = class extends LitElement {
572
576
  }
573
577
  };
574
578
  ObcBrillianceMenu.styles = unsafeCSS(componentStyle);
579
+ __decorateClass([
580
+ property({ type: Boolean })
581
+ ], ObcBrillianceMenu.prototype, "softDismiss", 2);
582
+ __decorateClass([
583
+ property({ type: Boolean })
584
+ ], ObcBrillianceMenu.prototype, "open", 2);
575
585
  __decorateClass([
576
586
  property({ type: String })
577
587
  ], ObcBrillianceMenu.prototype, "palette", 2);
@@ -1 +1 @@
1
- {"version":3,"file":"brilliance-menu.js","sources":["../../../src/components/brilliance-menu/brilliance-menu.ts"],"sourcesContent":["import {HTMLTemplateResult, LitElement, html, nothing, unsafeCSS} from 'lit';\nimport {property, state} from 'lit/decorators.js';\nimport componentStyle from './brilliance-menu.css?inline';\nimport '../button/button.js';\nimport '../slider/slider.js';\nimport '../toggle-switch/toggle-switch.js';\nimport '../toggle-button-group/toggle-button-group.js';\nimport '../toggle-button-option/toggle-button-option.js';\nimport '../../icons/icon-display-brilliance-low.js';\nimport '../../icons/icon-display-brilliance-proposal.js';\nimport '../../icons/icon-palette-night.js';\nimport '../../icons/icon-palette-dusk.js';\nimport '../../icons/icon-palette-day.js';\nimport '../../icons/icon-palette-day-bright.js';\nimport '../../icons/icon-link.js';\nimport '../../icons/icon-chevron-double-right-google.js';\nimport '../../icons/icon-chevron-double-left-google.js';\nimport '../../icons/icon-chevron-left-google.js';\nimport '../../icons/icon-chevron-right-google.js';\nimport '../../icons/icon-screen-desk.js';\n\nimport {localized, msg} from '@lit/localize';\nimport {customElement} from '../../decorator.js';\nimport {\n ObcToggleButtonOptionType,\n ObcToggleButtonOptionVariant,\n} from '../toggle-button-option/toggle-button-option.js';\nimport {ObcSliderVariant} from '../slider/slider.js';\nimport {ObcToggleSwitch} from '../toggle-switch/toggle-switch.js';\nimport '../progress-indicator-dots/progress-indicator-dots.js';\nimport '../navigation-item/navigation-item.js';\nimport '../app-button/app-button.js';\nimport '../user-button/user-button.js';\nimport '../tab-row/tab-row.js';\nimport type {TabData} from '../tab-row/tab-row.js';\nimport {stopPropagation} from '../../internal/events.js';\nimport '../../icons/icon-display-brilliance-iec.js';\nimport '../../icons/icon-palette-day-night-iec.js';\nimport {clamp} from '../../svghelpers/math.js';\n\nexport enum ObcPalette {\n night = 'night',\n dusk = 'dusk',\n day = 'day',\n bright = 'bright',\n}\n\nexport enum ObcBrillianceMenuVariant {\n normal = 'normal',\n compact = 'compact',\n tabbed = 'tabbed',\n}\n\nexport enum ObcBrillianceInputVariant {\n buttons = 'buttons',\n slider = 'slider',\n}\n\nexport type ObcPaletteChangeEvent = CustomEvent<{value: ObcPalette}>;\nexport type ObcBrightnessChangeEvent = CustomEvent<{value: number}>;\nexport type ObcLinkPaletteChangeEvent = CustomEvent<{value: boolean}>;\nexport type ObcLinkBrightnessChangeEvent = CustomEvent<{value: boolean}>;\n\nconst BRILLIANCE_TAB_ID = 'brilliance';\nconst PALETTE_TAB_ID = 'palette';\n\n/**\n * Event fired when the palette is changed.\n * @typedef {CustomEvent<{value: ObcPalette}>} ObcPaletteChangeEvent\n */\n\n/**\n * Event fired when the brightness is changed.\n * @typedef {CustomEvent<{value: number}>} ObcBrightnessChangeEvent\n */\n\n/**\n * `<obc-brilliance-menu>` – A settings menu component for adjusting display palette and brightness.\n *\n * Provides a combined interface for users to select a color palette (night, dusk, day, bright) and adjust screen brightness. Includes options for toggling automatic palette and brightness modes. Designed for quick access to visual environment controls in applications where adaptable display settings are important.\n *\n * ### Features\n * - **Palette Selection:** Choose between four preset palettes: night, dusk, day, and bright. Each palette is represented by an icon.\n * - **Brightness Control:** Adjustable slider for fine-tuning brightness from 0 to 100. Optionally displays left/right icons for low and high brilliance.\n * - **Auto Modes:** Optional toggles for enabling automatic palette switching and automatic brightness adjustment.\n * - **Configurable Visibility:** Brightness controls and auto toggles can be shown or hidden via properties.\n * - **Responsive Layout:** Arranged in a card-style panel for use in settings menus or overlays.\n *\n * ### Variants\n * - **Palette:** Four options—`night`, `dusk`, `day`, `bright`. Each is visually distinct and selectable via toggle button group.\n * - **Auto Toggles:** `showAutoBrightness` and `showAutoPalette` properties control the presence of auto mode switches.\n * - **Show Brightness:** The `showBrightness` property controls whether the brightness slider and auto brightness toggle are visible.\n *\n * ### Usage Guidelines\n * Use `obc-brilliance-menu` in settings panels or overlays where users need to quickly adjust display appearance. Ideal for scenarios requiring rapid adaptation to changing lighting conditions or user preferences.\n * **TODO(designer):** Confirm if there are recommended default palette/brightness settings, and clarify intended use cases for auto toggles versus manual controls.\n *\n * ### Properties and Configuration\n * - `palette` (`ObcPalette`): The currently selected palette. Accepts `'night'`, `'dusk'`, `'day'`, or `'bright'`. Defaults to `'day'`.\n * - `brightness` (`number`): Current brightness value (0–100). Defaults to `50`.\n * - `showAutoBrightness` (`boolean`): If true, displays the auto brightness toggle.\n * - `showAutoPalette` (`boolean`): If true, displays the auto palette toggle.\n * - `showBrightness` (`boolean`): If true, shows the brightness slider and auto brightness toggle.\n *\n * ### Events\n * - `palette-changed` – Fired when the user selects a new palette. Event detail: `{ value: ObcPalette }`\n * - `brightness-changed` – Fired when the brightness slider is adjusted. Event detail: `{ value: number }`\n *\n * ### Example\n * ```html\n * <obc-brilliance-menu\n * palette=\"dusk\"\n * brightness=\"75\"\n * showAutoBrightness\n * showAutoPalette\n * ></obc-brilliance-menu>\n * ```\n * In this example, both auto toggles are visible, the palette is set to dusk, and brightness is set to 75.\n *\n * @property palette - The currently selected palette. Possible values: `'night'`, `'dusk'`, `'day'`, `'bright'`.\n * Defaults to `'day'`.\n * @property brightness - The current brightness value (0–100). Defaults to `50`.\n * @property showLinkBrightness - If true, displays the link brightness toggle below the brightness slider.\n * @property showLinkPalette - If true, displays the link palette toggle below the palette selector.\n * @property showBrightness - If true, shows the brightness slider and auto brightness toggle in the menu.\n * @property showPalette - If true, shows the palette selector and link palette toggle in the menu.\n * @property variant - The variant of the menu. Possible values: `'normal'`, `'compact'`, `'tabbed'`.\n * Defaults to `'normal'`.\n * @property brightnessUnit - The unit of the brightness value.\n * @property brightnessMax - The maximum value of the brightness slider.\n * @property brightnessMinorStep - The minor step of the brightness slider.\n * @property brightnessMajorStep - The major step of the brightness slider.\n * @property brightnessInputVariant - The variant of the brightness input.\n * @property showScreenControlLink - If true, displays the screen control link.\n * @property showAdditionalScreenControls - If true, displays the additional screen controls slot.\n * @slot additional-screen-controls - Consumer-defined controls, placed after the screen control link; rendered when `showAdditionalScreenControls` is true\n * @fires {ObcPaletteChangeEvent} palette-changed - When the palette is changed\n * @fires {ObcBrightnessChangeEvent} brightness-changed - When the brightness is changed\n * @fires {ObcLinkPaletteChangeEvent} link-palette-changed - When the link palette toggle is changed\n * @fires {ObcLinkBrightnessChangeEvent} link-brightness-changed - When the link brightness toggle is changed\n * @fires {CustomEvent} screen-control-link-clicked - When the screen control link is clicked\n */\n@localized()\n/**\n * @stable\n */\n@customElement('obc-brilliance-menu')\nexport class ObcBrillianceMenu extends LitElement {\n @property({type: String}) palette: ObcPalette = ObcPalette.day;\n\n @property({type: Number}) brightness = 50;\n\n @property({type: Boolean})\n showLinkBrightness = false;\n\n @property({type: Boolean}) showLinkPalette = false;\n\n @property({type: Boolean, attribute: false}) showBrightness = true;\n\n @property({type: Boolean, attribute: false}) showPalette = true;\n\n @property({type: Boolean, attribute: false}) showNightPalette = true;\n @property({type: Boolean, attribute: false}) showDuskPalette = true;\n @property({type: Boolean, attribute: false}) showDayPalette = true;\n @property({type: Boolean, attribute: false}) showBrightPalette = true;\n\n @property({type: String}) variant = ObcBrillianceMenuVariant.normal;\n\n @property({type: String}) brightnessUnit = '%';\n\n @property({type: Number}) brightnessMax = 100;\n\n @property({type: Number}) brightnessMinorStep = 5;\n\n @property({type: Number}) brightnessMajorStep = 25;\n\n @property({type: String}) brightnessInputVariant =\n ObcBrillianceInputVariant.buttons;\n\n @property({type: Boolean}) showScreenControlLink = false;\n\n @property({type: Boolean}) showAdditionalScreenControls = false;\n\n override willUpdate(_changed: Map<string, unknown>) {\n if (this.showPalette) {\n const available = this.availablePalettes;\n if (available.length > 0 && !available.includes(this.palette)) {\n this.palette = available[0];\n this.dispatchEvent(\n new CustomEvent('palette-changed', {\n detail: {value: this.palette},\n })\n );\n }\n }\n }\n\n /**\n * Handles palette selection changes and emits `palette-changed`.\n * @fires palette-changed\n * @param {CustomEvent} event\n */\n onPaletteChanged(event: CustomEvent) {\n this.palette = event.detail.value;\n this.dispatchEvent(\n new CustomEvent('palette-changed', {\n detail: {value: event.detail.value},\n })\n );\n }\n\n /**\n * Handles brightness slider changes and emits `brightness-changed`.\n * @fires brightness-changed\n * @param {CustomEvent} event\n */\n handleBrightnessChanged(event: CustomEvent) {\n this.brightness = event.detail;\n this.dispatchEvent(\n new CustomEvent('brightness-changed', {\n detail: {value: event.detail},\n })\n );\n }\n\n increaseBrightness(step: number) {\n this.brightness = clamp(\n this.brightness + step,\n 0,\n Math.max(0, this.brightnessMax)\n );\n this.dispatchEvent(\n new CustomEvent('brightness-changed', {\n detail: {value: this.brightness},\n })\n );\n }\n\n get canIncreaseBrightness() {\n return this.brightness < this.brightnessMax;\n }\n\n get canDecreaseBrightness() {\n return this.brightness > 0;\n }\n\n /**\n * Handles link palette changes and emits `link-palette-changed`.\n * @fires link-palette-changed\n * @param {CustomEvent} event\n */\n onLinkPaletteChanged(event: CustomEvent) {\n this.dispatchEvent(\n new CustomEvent('link-palette-changed', {\n detail: {value: (event.target as ObcToggleSwitch).checked},\n })\n );\n }\n\n /**\n * Handles link brightness changes and emits `link-brightness-changed`.\n * @fires link-brightness-changed\n * @param {CustomEvent} event\n */\n onLinkBrightnessChanged(event: CustomEvent) {\n this.dispatchEvent(\n new CustomEvent('link-brightness-changed', {\n detail: {value: (event.target as ObcToggleSwitch).checked},\n })\n );\n }\n\n get availablePalettes(): ObcPalette[] {\n const palettes: ObcPalette[] = [];\n if (this.showNightPalette) palettes.push(ObcPalette.night);\n if (this.showDuskPalette) palettes.push(ObcPalette.dusk);\n if (this.showDayPalette) palettes.push(ObcPalette.day);\n if (this.showBrightPalette) palettes.push(ObcPalette.bright);\n return palettes;\n }\n\n get canIncreasePalette() {\n const palettes = this.availablePalettes;\n const idx = palettes.indexOf(this.palette);\n return idx >= 0 && idx < palettes.length - 1;\n }\n\n get canDecreasePalette() {\n const palettes = this.availablePalettes;\n const idx = palettes.indexOf(this.palette);\n return idx > 0;\n }\n\n @state() private selectedTabId = BRILLIANCE_TAB_ID;\n\n private onTabSelected(event: CustomEvent<{id: string}>) {\n event.stopPropagation();\n this.selectedTabId = event.detail.id;\n }\n\n private get tabs(): TabData[] {\n return [\n {\n id: BRILLIANCE_TAB_ID,\n title: msg('Brilliance'),\n hasLeadingIcon: true,\n },\n {\n id: PALETTE_TAB_ID,\n title: `${msg('Day')}/${msg('Night')}`,\n hasLeadingIcon: true,\n },\n ];\n }\n\n nextPalette() {\n if (this.canIncreasePalette) {\n const palettes = this.availablePalettes;\n const idx = palettes.indexOf(this.palette);\n this.palette = palettes[idx + 1];\n this.dispatchEvent(\n new CustomEvent('palette-changed', {\n detail: {value: this.palette},\n })\n );\n }\n }\n\n previousPalette() {\n if (this.canDecreasePalette) {\n const palettes = this.availablePalettes;\n const idx = palettes.indexOf(this.palette);\n this.palette = palettes[idx - 1];\n this.dispatchEvent(\n new CustomEvent('palette-changed', {\n detail: {value: this.palette},\n })\n );\n }\n }\n\n renderBrightness() {\n const title =\n this.variant === ObcBrillianceMenuVariant.tabbed\n ? nothing\n : html`<div class=\"title-container\">\n <h3>${msg('Brilliance')}</h3>\n </div>`;\n const valueLength =\n this.brightness.toString().length + 0.5 * this.brightnessUnit.length;\n\n return html`${title}\n <div class=\"content-container brilliance\">\n ${\n this.variant === ObcBrillianceMenuVariant.compact\n ? html` <obc-slider\n value=${this.brightness}\n @value=${this.handleBrightnessChanged}\n min=\"0\"\n max=${this.brightnessMax}\n variant=${ObcSliderVariant.Normal}\n haslefticon\n hasrighticon\n >\n <obi-display-brilliance-low\n slot=\"icon-left\"\n ></obi-display-brilliance-low>\n <obi-display-brilliance-proposal\n slot=\"icon-right\"\n ></obi-display-brilliance-proposal>\n </obc-slider>`\n : html`\n <div class=\"value-container\">\n <div class=\"value-label-container\">\n <obi-display-brilliance-proposal\n class=\"icon\"\n ></obi-display-brilliance-proposal>\n <div\n class=\"label-container\"\n style=\"width: ${valueLength}ch\"\n >\n <div class=\"value\">${this.brightness.toFixed(0)}</div>\n <div class=\"unit\">${this.brightnessUnit}</div>\n </div>\n </div>\n <div class=\"value-slider-container\">\n ${\n this.brightnessInputVariant ===\n ObcBrillianceInputVariant.buttons\n ? html`\n <obc-slider\n value=${this.brightness}\n variant=${ObcSliderVariant.NoInput}\n min=\"0\"\n max=${this.brightnessMax}\n ></obc-slider>\n `\n : html`\n <obc-slider\n value=${this.brightness}\n variant=${ObcSliderVariant.Enhanced}\n @value=${this.handleBrightnessChanged}\n min=\"0\"\n max=${this.brightnessMax}\n ></obc-slider>\n `\n }\n </div>\n </div>\n ${\n this.brightnessInputVariant ===\n ObcBrillianceInputVariant.buttons\n ? html`\n <div class=\"icon-button-container\">\n <obc-button\n segmentPosition=\"start\"\n fullWidth\n ?disabled=${!this.canDecreaseBrightness}\n class=${this.canDecreaseBrightness ? '' : 'disabled'}\n @click=${() =>\n this.increaseBrightness(\n -this.brightnessMajorStep\n )}\n >\n <obi-chevron-double-left-google\n class=\"btn-icon\"\n ></obi-chevron-double-left-google>\n </obc-button>\n <obc-button\n segmentPosition=\"middle\"\n fullWidth\n ?disabled=${!this.canDecreaseBrightness}\n class=${this.canDecreaseBrightness ? '' : 'disabled'}\n @click=${() =>\n this.increaseBrightness(\n -this.brightnessMinorStep\n )}\n >\n <obi-chevron-left-google\n class=\"btn-icon\"\n ></obi-chevron-left-google>\n </obc-button>\n <obc-button\n segmentPosition=\"middle\"\n fullWidth\n ?disabled=${!this.canIncreaseBrightness}\n class=${this.canIncreaseBrightness ? '' : 'disabled'}\n @click=${() =>\n this.increaseBrightness(this.brightnessMinorStep)}\n >\n <obi-chevron-right-google\n class=\"btn-icon\"\n ></obi-chevron-right-google>\n </obc-button>\n <obc-button\n segmentPosition=\"end\"\n fullWidth\n ?disabled=${!this.canIncreaseBrightness}\n class=${this.canIncreaseBrightness ? '' : 'disabled'}\n @click=${() =>\n this.increaseBrightness(this.brightnessMajorStep)}\n >\n <obi-chevron-double-right-google\n class=\"btn-icon\"\n ></obi-chevron-double-right-google>\n </obc-button>\n </div>\n `\n : nothing\n }\n `\n }\n ${\n this.showLinkBrightness\n ? html`<obc-toggle-switch\n .label=\"${msg('Link')}\"\n hasicon\n @input=${this.onLinkBrightnessChanged}\n >\n <obi-link slot=\"icon\"></obi-link>\n </obc-toggle-switch>`\n : nothing\n }\n </div>`;\n }\n\n get effectivePalette() {\n const palettes = this.availablePalettes;\n return palettes.includes(this.palette) ? this.palette : palettes[0];\n }\n\n get paletteIcon() {\n if (this.effectivePalette === ObcPalette.night) {\n return html`<obi-palette-night class=\"icon\"></obi-palette-night>`;\n } else if (this.effectivePalette === ObcPalette.dusk) {\n return html`<obi-palette-dusk class=\"icon\"></obi-palette-dusk>`;\n } else if (this.effectivePalette === ObcPalette.day) {\n return html`<obi-palette-day class=\"icon\"></obi-palette-day>`;\n } else if (this.effectivePalette === ObcPalette.bright) {\n return html`<obi-palette-day-bright\n class=\"icon\"\n ></obi-palette-day-bright>`;\n } else {\n return nothing;\n }\n }\n\n private paletteOptions(): HTMLTemplateResult[] {\n const out = [];\n if (this.showNightPalette)\n out.push(\n html`<obc-toggle-button-option value=\"night\" type=\"icon\">\n <obi-palette-night slot=\"icon\"></obi-palette-night>\n </obc-toggle-button-option>`\n );\n if (this.showDuskPalette)\n out.push(\n html`<obc-toggle-button-option value=\"dusk\" type=\"icon\">\n <obi-palette-dusk slot=\"icon\"></obi-palette-dusk>\n </obc-toggle-button-option>`\n );\n if (this.showDayPalette)\n out.push(\n html`<obc-toggle-button-option value=\"day\" type=\"icon\">\n <obi-palette-day slot=\"icon\"></obi-palette-day>\n </obc-toggle-button-option>`\n );\n if (this.showBrightPalette)\n out.push(\n html`<obc-toggle-button-option value=\"bright\" type=\"icon\">\n <obi-palette-day-bright slot=\"icon\"></obi-palette-day-bright>\n </obc-toggle-button-option>`\n );\n return out;\n }\n\n renderPalette() {\n const palettes = this.availablePalettes;\n if (palettes.length === 0) return nothing;\n\n const paletteNames: Record<ObcPalette, string> = {\n [ObcPalette.night]: msg('Night'),\n [ObcPalette.dusk]: msg('Dusk'),\n [ObcPalette.day]: msg('Day'),\n [ObcPalette.bright]: msg('Bright'),\n };\n const currentPaletteName = paletteNames[this.effectivePalette];\n const valueLength = currentPaletteName.length;\n const index = palettes.indexOf(this.effectivePalette);\n const nextIndex = Math.min(index + 1, palettes.length - 1);\n const previousIndex = Math.max(index - 1, 0);\n const nextPalette = paletteNames[palettes[nextIndex]];\n const previousPalette = paletteNames[palettes[previousIndex]];\n\n return html`\n ${\n this.variant === ObcBrillianceMenuVariant.tabbed\n ? nothing\n : html`\n <div class=\"title-container\">\n <h3>${msg('Day')}/${msg('Night')}</h3>\n </div>\n `\n }\n <div\n class=\"content-container palette ${\n this.showLinkPalette ? 'with-link' : 'without-link'\n }\"\n >\n ${\n this.variant === ObcBrillianceMenuVariant.compact\n ? html` <obc-toggle-button-group\n aria-label=${`${msg('Day')}/${msg('Night')}`}\n value=${this.effectivePalette}\n @value=${this.onPaletteChanged}\n variant=${ObcToggleButtonOptionVariant.regular}\n type=${ObcToggleButtonOptionType.icon}\n >\n ${this.paletteOptions()}\n </obc-toggle-button-group>`\n : html`\n <div class=\"value-container\">\n <div class=\"value-label-container\">\n ${this.paletteIcon}\n <div\n class=\"label-container\"\n style=\"width: ${valueLength}ch\"\n >\n <div class=\"value\">${currentPaletteName}</div>\n </div>\n </div>\n <obc-progress-indicator-dots\n .totalSteps=${palettes.length}\n .currentStep=${index + 1}\n ></obc-progress-indicator-dots>\n </div>\n <div class=\"icon-button-container\">\n <obc-button\n segmentPosition=\"start\"\n fullWidth\n showLeadingIcon\n ?disabled=${!this.canDecreasePalette}\n class=${this.canDecreasePalette ? '' : 'disabled'}\n @click=${() => this.previousPalette()}\n >\n ${previousPalette}\n <obi-chevron-left-google\n slot=\"leading-icon\"\n ></obi-chevron-left-google>\n </obc-button>\n\n <obc-button\n segmentPosition=\"end\"\n fullWidth\n showTrailingIcon\n ?disabled=${!this.canIncreasePalette}\n class=${this.canIncreasePalette ? '' : 'disabled'}\n @click=${() => this.nextPalette()}\n >\n ${nextPalette}\n <obi-chevron-right-google\n slot=\"trailing-icon\"\n ></obi-chevron-right-google>\n </obc-button>\n </div>\n `\n }\n ${\n this.showLinkPalette\n ? html`<obc-toggle-switch\n .label=\"${msg('Link')}\"\n hasicon\n @input=${this.onLinkPaletteChanged}\n >\n <obi-link slot=\"icon\"></obi-link>\n </obc-toggle-switch>`\n : nothing\n }\n </div>\n `;\n }\n\n renderScreenControlLink() {\n if (this.showScreenControlLink || this.showAdditionalScreenControls) {\n return html`\n <div class=\"footer\">\n ${\n this.showScreenControlLink\n ? html`\n <obc-navigation-item\n .label=\"${msg('Screen Control')}\"\n @click=${() => this.handleScreenControlLinkClicked()}\n hasicon\n >\n <obc-user-button\n slot=\"icon\"\n static\n variant=\"icon\"\n styleType=\"normal\"\n >\n <obi-screen-desk slot=\"icon\"></obi-screen-desk>\n </obc-user-button>\n </obc-navigation-item>\n `\n : nothing\n }\n ${\n this.showAdditionalScreenControls\n ? html`<slot name=\"additional-screen-controls\"></slot>`\n : nothing\n }\n </div>\n `;\n }\n return nothing;\n }\n\n override render() {\n if (this.variant === ObcBrillianceMenuVariant.tabbed) {\n return html`\n <div class=\"card tabbed\">\n <obc-tab-row\n .tabs=${this.tabs}\n .selectedTabId=${this.selectedTabId}\n .centerContent=${true}\n .hasPanels=${true}\n .label=${msg('Display')}\n @tab-selected=${this.onTabSelected}\n @tab-closed=${stopPropagation}\n @add-new-tab=${stopPropagation}\n >\n <obi-display-brilliance-iec\n slot=\"tab-${BRILLIANCE_TAB_ID}-icon\"\n ></obi-display-brilliance-iec>\n <obi-palette-day-night-iec\n slot=\"tab-${PALETTE_TAB_ID}-icon\"\n ></obi-palette-day-night-iec>\n <div slot=\"tab-${BRILLIANCE_TAB_ID}-panel\">\n ${this.renderBrightness()}\n </div>\n <div slot=\"tab-${PALETTE_TAB_ID}-panel\">\n ${this.renderPalette()}\n </div>\n </obc-tab-row>\n ${this.renderScreenControlLink()}\n </div>\n `;\n } else {\n return html`\n <div class=\"card ${this.variant}\">\n ${this.showBrightness ? this.renderBrightness() : nothing}\n ${\n this.showBrightness && this.showPalette\n ? html`<div class=\"divider\"></div>`\n : nothing\n }\n ${this.showPalette ? this.renderPalette() : nothing}\n ${this.renderScreenControlLink()}\n </div>\n `;\n }\n }\n\n handleScreenControlLinkClicked() {\n this.dispatchEvent(new CustomEvent('screen-control-link-clicked'));\n }\n\n static override styles = unsafeCSS(componentStyle);\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'obc-brilliance-menu': ObcBrillianceMenu;\n }\n}\n"],"names":["ObcPalette","ObcBrillianceMenuVariant","ObcBrillianceInputVariant"],"mappings":"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"}
1
+ {"version":3,"file":"brilliance-menu.js","sources":["../../../src/components/brilliance-menu/brilliance-menu.ts"],"sourcesContent":["import {HTMLTemplateResult, LitElement, html, nothing, unsafeCSS} from 'lit';\nimport {property, state} from 'lit/decorators.js';\nimport componentStyle from './brilliance-menu.css?inline';\nimport '../button/button.js';\nimport '../slider/slider.js';\nimport '../toggle-switch/toggle-switch.js';\nimport '../toggle-button-group/toggle-button-group.js';\nimport '../toggle-button-option/toggle-button-option.js';\nimport '../../icons/icon-display-brilliance-low.js';\nimport '../../icons/icon-display-brilliance-proposal.js';\nimport '../../icons/icon-palette-night.js';\nimport '../../icons/icon-palette-dusk.js';\nimport '../../icons/icon-palette-day.js';\nimport '../../icons/icon-palette-day-bright.js';\nimport '../../icons/icon-link.js';\nimport '../../icons/icon-chevron-double-right-google.js';\nimport '../../icons/icon-chevron-double-left-google.js';\nimport '../../icons/icon-chevron-left-google.js';\nimport '../../icons/icon-chevron-right-google.js';\nimport '../../icons/icon-screen-desk.js';\n\nimport {localized, msg} from '@lit/localize';\nimport {customElement} from '../../decorator.js';\nimport {\n ObcToggleButtonOptionType,\n ObcToggleButtonOptionVariant,\n} from '../toggle-button-option/toggle-button-option.js';\nimport {ObcSliderVariant} from '../slider/slider.js';\nimport {ObcToggleSwitch} from '../toggle-switch/toggle-switch.js';\nimport '../progress-indicator-dots/progress-indicator-dots.js';\nimport '../navigation-item/navigation-item.js';\nimport '../app-button/app-button.js';\nimport '../user-button/user-button.js';\nimport '../tab-row/tab-row.js';\nimport type {TabData} from '../tab-row/tab-row.js';\nimport {stopPropagation} from '../../internal/events.js';\nimport '../../icons/icon-display-brilliance-iec.js';\nimport '../../icons/icon-palette-day-night-iec.js';\nimport {clamp} from '../../svghelpers/math.js';\nimport {PopoverController} from '../../internal/popover-controller.js';\n\nexport enum ObcPalette {\n night = 'night',\n dusk = 'dusk',\n day = 'day',\n bright = 'bright',\n}\n\nexport enum ObcBrillianceMenuVariant {\n normal = 'normal',\n compact = 'compact',\n tabbed = 'tabbed',\n}\n\nexport enum ObcBrillianceInputVariant {\n buttons = 'buttons',\n slider = 'slider',\n}\n\nexport type ObcPaletteChangeEvent = CustomEvent<{value: ObcPalette}>;\nexport type ObcBrightnessChangeEvent = CustomEvent<{value: number}>;\nexport type ObcLinkPaletteChangeEvent = CustomEvent<{value: boolean}>;\nexport type ObcLinkBrightnessChangeEvent = CustomEvent<{value: boolean}>;\n\nconst BRILLIANCE_TAB_ID = 'brilliance';\nconst PALETTE_TAB_ID = 'palette';\n\n/**\n * Event fired when the palette is changed.\n * @typedef {CustomEvent<{value: ObcPalette}>} ObcPaletteChangeEvent\n */\n\n/**\n * Event fired when the brightness is changed.\n * @typedef {CustomEvent<{value: number}>} ObcBrightnessChangeEvent\n */\n\n/**\n * `<obc-brilliance-menu>` – A settings menu component for adjusting display palette and brightness.\n *\n * Provides a combined interface for users to select a color palette (night, dusk, day, bright) and adjust screen brightness. Includes options for toggling automatic palette and brightness modes. Designed for quick access to visual environment controls in applications where adaptable display settings are important.\n *\n * ### Features\n * - **Palette Selection:** Choose between four preset palettes: night, dusk, day, and bright. Each palette is represented by an icon.\n * - **Brightness Control:** Adjustable slider for fine-tuning brightness from 0 to 100. Optionally displays left/right icons for low and high brilliance.\n * - **Auto Modes:** Optional toggles for enabling automatic palette switching and automatic brightness adjustment.\n * - **Configurable Visibility:** Brightness controls and auto toggles can be shown or hidden via properties.\n * - **Responsive Layout:** Arranged in a card-style panel for use in settings menus or overlays.\n *\n * ### Variants\n * - **Palette:** Four options—`night`, `dusk`, `day`, `bright`. Each is visually distinct and selectable via toggle button group.\n * - **Auto Toggles:** `showAutoBrightness` and `showAutoPalette` properties control the presence of auto mode switches.\n * - **Show Brightness:** The `showBrightness` property controls whether the brightness slider and auto brightness toggle are visible.\n *\n * ### Usage Guidelines\n * Use `obc-brilliance-menu` in settings panels or overlays where users need to quickly adjust display appearance. Ideal for scenarios requiring rapid adaptation to changing lighting conditions or user preferences.\n * **TODO(designer):** Confirm if there are recommended default palette/brightness settings, and clarify intended use cases for auto toggles versus manual controls.\n *\n * ### Properties and Configuration\n * - `palette` (`ObcPalette`): The currently selected palette. Accepts `'night'`, `'dusk'`, `'day'`, or `'bright'`. Defaults to `'day'`.\n * - `brightness` (`number`): Current brightness value (0–100). Defaults to `50`.\n * - `showAutoBrightness` (`boolean`): If true, displays the auto brightness toggle.\n * - `showAutoPalette` (`boolean`): If true, displays the auto palette toggle.\n * - `showBrightness` (`boolean`): If true, shows the brightness slider and auto brightness toggle.\n *\n * ### Events\n * - `palette-changed` – Fired when the user selects a new palette. Event detail: `{ value: ObcPalette }`\n * - `brightness-changed` – Fired when the brightness slider is adjusted. Event detail: `{ value: number }`\n *\n * ### Example\n * ```html\n * <obc-brilliance-menu\n * palette=\"dusk\"\n * brightness=\"75\"\n * showAutoBrightness\n * showAutoPalette\n * ></obc-brilliance-menu>\n * ```\n * In this example, both auto toggles are visible, the palette is set to dusk, and brightness is set to 75.\n *\n * @property palette - The currently selected palette. Possible values: `'night'`, `'dusk'`, `'day'`, `'bright'`.\n * Defaults to `'day'`.\n * @property brightness - The current brightness value (0–100). Defaults to `50`.\n * @property showLinkBrightness - If true, displays the link brightness toggle below the brightness slider.\n * @property showLinkPalette - If true, displays the link palette toggle below the palette selector.\n * @property showBrightness - If true, shows the brightness slider and auto brightness toggle in the menu.\n * @property showPalette - If true, shows the palette selector and link palette toggle in the menu.\n * @property variant - The variant of the menu. Possible values: `'normal'`, `'compact'`, `'tabbed'`.\n * Defaults to `'normal'`.\n * @property brightnessUnit - The unit of the brightness value.\n * @property brightnessMax - The maximum value of the brightness slider.\n * @property brightnessMinorStep - The minor step of the brightness slider.\n * @property brightnessMajorStep - The major step of the brightness slider.\n * @property brightnessInputVariant - The variant of the brightness input.\n * @property showScreenControlLink - If true, displays the screen control link.\n * @property showAdditionalScreenControls - If true, displays the additional screen controls slot.\n * @property softDismiss - Let the browser close this menu on its own: on a click outside it, on `Escape`, or when another menu opens. Leave it off to keep showing and hiding the menu yourself.\n * @property open - Whether the menu is showing.\n * @availableWhen open softDismiss==true\n * @slot additional-screen-controls - Consumer-defined controls, placed after the screen control link; rendered when `showAdditionalScreenControls` is true\n * @fires {ObcPaletteChangeEvent} palette-changed - When the palette is changed\n * @fires {ObcBrightnessChangeEvent} brightness-changed - When the brightness is changed\n * @fires {ObcLinkPaletteChangeEvent} link-palette-changed - When the link palette toggle is changed\n * @fires {ObcLinkBrightnessChangeEvent} link-brightness-changed - When the link brightness toggle is changed\n * @fires {CustomEvent} screen-control-link-clicked - When the screen control link is clicked\n * @fires {CustomEvent<void>} close - Fired when the menu closed on its own, from a click outside, `Escape`, or another menu opening. `open` is already `false` by the time it arrives.\n */\n@localized()\n/**\n * @stable\n */\n@customElement('obc-brilliance-menu')\nexport class ObcBrillianceMenu extends LitElement {\n @property({type: Boolean}) softDismiss = false;\n\n @property({type: Boolean}) open = false;\n\n protected readonly softDismissController = new PopoverController(this);\n\n @property({type: String}) palette: ObcPalette = ObcPalette.day;\n\n @property({type: Number}) brightness = 50;\n\n @property({type: Boolean})\n showLinkBrightness = false;\n\n @property({type: Boolean}) showLinkPalette = false;\n\n @property({type: Boolean, attribute: false}) showBrightness = true;\n\n @property({type: Boolean, attribute: false}) showPalette = true;\n\n @property({type: Boolean, attribute: false}) showNightPalette = true;\n @property({type: Boolean, attribute: false}) showDuskPalette = true;\n @property({type: Boolean, attribute: false}) showDayPalette = true;\n @property({type: Boolean, attribute: false}) showBrightPalette = true;\n\n @property({type: String}) variant = ObcBrillianceMenuVariant.normal;\n\n @property({type: String}) brightnessUnit = '%';\n\n @property({type: Number}) brightnessMax = 100;\n\n @property({type: Number}) brightnessMinorStep = 5;\n\n @property({type: Number}) brightnessMajorStep = 25;\n\n @property({type: String}) brightnessInputVariant =\n ObcBrillianceInputVariant.buttons;\n\n @property({type: Boolean}) showScreenControlLink = false;\n\n @property({type: Boolean}) showAdditionalScreenControls = false;\n\n override willUpdate(_changed: Map<string, unknown>) {\n if (this.showPalette) {\n const available = this.availablePalettes;\n if (available.length > 0 && !available.includes(this.palette)) {\n this.palette = available[0];\n this.dispatchEvent(\n new CustomEvent('palette-changed', {\n detail: {value: this.palette},\n })\n );\n }\n }\n }\n\n /**\n * Handles palette selection changes and emits `palette-changed`.\n * @fires palette-changed\n * @param {CustomEvent} event\n */\n onPaletteChanged(event: CustomEvent) {\n this.palette = event.detail.value;\n this.dispatchEvent(\n new CustomEvent('palette-changed', {\n detail: {value: event.detail.value},\n })\n );\n }\n\n /**\n * Handles brightness slider changes and emits `brightness-changed`.\n * @fires brightness-changed\n * @param {CustomEvent} event\n */\n handleBrightnessChanged(event: CustomEvent) {\n this.brightness = event.detail;\n this.dispatchEvent(\n new CustomEvent('brightness-changed', {\n detail: {value: event.detail},\n })\n );\n }\n\n increaseBrightness(step: number) {\n this.brightness = clamp(\n this.brightness + step,\n 0,\n Math.max(0, this.brightnessMax)\n );\n this.dispatchEvent(\n new CustomEvent('brightness-changed', {\n detail: {value: this.brightness},\n })\n );\n }\n\n get canIncreaseBrightness() {\n return this.brightness < this.brightnessMax;\n }\n\n get canDecreaseBrightness() {\n return this.brightness > 0;\n }\n\n /**\n * Handles link palette changes and emits `link-palette-changed`.\n * @fires link-palette-changed\n * @param {CustomEvent} event\n */\n onLinkPaletteChanged(event: CustomEvent) {\n this.dispatchEvent(\n new CustomEvent('link-palette-changed', {\n detail: {value: (event.target as ObcToggleSwitch).checked},\n })\n );\n }\n\n /**\n * Handles link brightness changes and emits `link-brightness-changed`.\n * @fires link-brightness-changed\n * @param {CustomEvent} event\n */\n onLinkBrightnessChanged(event: CustomEvent) {\n this.dispatchEvent(\n new CustomEvent('link-brightness-changed', {\n detail: {value: (event.target as ObcToggleSwitch).checked},\n })\n );\n }\n\n get availablePalettes(): ObcPalette[] {\n const palettes: ObcPalette[] = [];\n if (this.showNightPalette) palettes.push(ObcPalette.night);\n if (this.showDuskPalette) palettes.push(ObcPalette.dusk);\n if (this.showDayPalette) palettes.push(ObcPalette.day);\n if (this.showBrightPalette) palettes.push(ObcPalette.bright);\n return palettes;\n }\n\n get canIncreasePalette() {\n const palettes = this.availablePalettes;\n const idx = palettes.indexOf(this.palette);\n return idx >= 0 && idx < palettes.length - 1;\n }\n\n get canDecreasePalette() {\n const palettes = this.availablePalettes;\n const idx = palettes.indexOf(this.palette);\n return idx > 0;\n }\n\n @state() private selectedTabId = BRILLIANCE_TAB_ID;\n\n private onTabSelected(event: CustomEvent<{id: string}>) {\n event.stopPropagation();\n this.selectedTabId = event.detail.id;\n }\n\n private get tabs(): TabData[] {\n return [\n {\n id: BRILLIANCE_TAB_ID,\n title: msg('Brilliance'),\n hasLeadingIcon: true,\n },\n {\n id: PALETTE_TAB_ID,\n title: `${msg('Day')}/${msg('Night')}`,\n hasLeadingIcon: true,\n },\n ];\n }\n\n nextPalette() {\n if (this.canIncreasePalette) {\n const palettes = this.availablePalettes;\n const idx = palettes.indexOf(this.palette);\n this.palette = palettes[idx + 1];\n this.dispatchEvent(\n new CustomEvent('palette-changed', {\n detail: {value: this.palette},\n })\n );\n }\n }\n\n previousPalette() {\n if (this.canDecreasePalette) {\n const palettes = this.availablePalettes;\n const idx = palettes.indexOf(this.palette);\n this.palette = palettes[idx - 1];\n this.dispatchEvent(\n new CustomEvent('palette-changed', {\n detail: {value: this.palette},\n })\n );\n }\n }\n\n renderBrightness() {\n const title =\n this.variant === ObcBrillianceMenuVariant.tabbed\n ? nothing\n : html`<div class=\"title-container\">\n <h3>${msg('Brilliance')}</h3>\n </div>`;\n const valueLength =\n this.brightness.toString().length + 0.5 * this.brightnessUnit.length;\n\n return html`${title}\n <div class=\"content-container brilliance\">\n ${\n this.variant === ObcBrillianceMenuVariant.compact\n ? html` <obc-slider\n value=${this.brightness}\n @value=${this.handleBrightnessChanged}\n min=\"0\"\n max=${this.brightnessMax}\n variant=${ObcSliderVariant.Normal}\n haslefticon\n hasrighticon\n >\n <obi-display-brilliance-low\n slot=\"icon-left\"\n ></obi-display-brilliance-low>\n <obi-display-brilliance-proposal\n slot=\"icon-right\"\n ></obi-display-brilliance-proposal>\n </obc-slider>`\n : html`\n <div class=\"value-container\">\n <div class=\"value-label-container\">\n <obi-display-brilliance-proposal\n class=\"icon\"\n ></obi-display-brilliance-proposal>\n <div\n class=\"label-container\"\n style=\"width: ${valueLength}ch\"\n >\n <div class=\"value\">${this.brightness.toFixed(0)}</div>\n <div class=\"unit\">${this.brightnessUnit}</div>\n </div>\n </div>\n <div class=\"value-slider-container\">\n ${\n this.brightnessInputVariant ===\n ObcBrillianceInputVariant.buttons\n ? html`\n <obc-slider\n value=${this.brightness}\n variant=${ObcSliderVariant.NoInput}\n min=\"0\"\n max=${this.brightnessMax}\n ></obc-slider>\n `\n : html`\n <obc-slider\n value=${this.brightness}\n variant=${ObcSliderVariant.Enhanced}\n @value=${this.handleBrightnessChanged}\n min=\"0\"\n max=${this.brightnessMax}\n ></obc-slider>\n `\n }\n </div>\n </div>\n ${\n this.brightnessInputVariant ===\n ObcBrillianceInputVariant.buttons\n ? html`\n <div class=\"icon-button-container\">\n <obc-button\n segmentPosition=\"start\"\n fullWidth\n ?disabled=${!this.canDecreaseBrightness}\n class=${this.canDecreaseBrightness ? '' : 'disabled'}\n @click=${() =>\n this.increaseBrightness(\n -this.brightnessMajorStep\n )}\n >\n <obi-chevron-double-left-google\n class=\"btn-icon\"\n ></obi-chevron-double-left-google>\n </obc-button>\n <obc-button\n segmentPosition=\"middle\"\n fullWidth\n ?disabled=${!this.canDecreaseBrightness}\n class=${this.canDecreaseBrightness ? '' : 'disabled'}\n @click=${() =>\n this.increaseBrightness(\n -this.brightnessMinorStep\n )}\n >\n <obi-chevron-left-google\n class=\"btn-icon\"\n ></obi-chevron-left-google>\n </obc-button>\n <obc-button\n segmentPosition=\"middle\"\n fullWidth\n ?disabled=${!this.canIncreaseBrightness}\n class=${this.canIncreaseBrightness ? '' : 'disabled'}\n @click=${() =>\n this.increaseBrightness(this.brightnessMinorStep)}\n >\n <obi-chevron-right-google\n class=\"btn-icon\"\n ></obi-chevron-right-google>\n </obc-button>\n <obc-button\n segmentPosition=\"end\"\n fullWidth\n ?disabled=${!this.canIncreaseBrightness}\n class=${this.canIncreaseBrightness ? '' : 'disabled'}\n @click=${() =>\n this.increaseBrightness(this.brightnessMajorStep)}\n >\n <obi-chevron-double-right-google\n class=\"btn-icon\"\n ></obi-chevron-double-right-google>\n </obc-button>\n </div>\n `\n : nothing\n }\n `\n }\n ${\n this.showLinkBrightness\n ? html`<obc-toggle-switch\n .label=\"${msg('Link')}\"\n hasicon\n @input=${this.onLinkBrightnessChanged}\n >\n <obi-link slot=\"icon\"></obi-link>\n </obc-toggle-switch>`\n : nothing\n }\n </div>`;\n }\n\n get effectivePalette() {\n const palettes = this.availablePalettes;\n return palettes.includes(this.palette) ? this.palette : palettes[0];\n }\n\n get paletteIcon() {\n if (this.effectivePalette === ObcPalette.night) {\n return html`<obi-palette-night class=\"icon\"></obi-palette-night>`;\n } else if (this.effectivePalette === ObcPalette.dusk) {\n return html`<obi-palette-dusk class=\"icon\"></obi-palette-dusk>`;\n } else if (this.effectivePalette === ObcPalette.day) {\n return html`<obi-palette-day class=\"icon\"></obi-palette-day>`;\n } else if (this.effectivePalette === ObcPalette.bright) {\n return html`<obi-palette-day-bright\n class=\"icon\"\n ></obi-palette-day-bright>`;\n } else {\n return nothing;\n }\n }\n\n private paletteOptions(): HTMLTemplateResult[] {\n const out = [];\n if (this.showNightPalette)\n out.push(\n html`<obc-toggle-button-option value=\"night\" type=\"icon\">\n <obi-palette-night slot=\"icon\"></obi-palette-night>\n </obc-toggle-button-option>`\n );\n if (this.showDuskPalette)\n out.push(\n html`<obc-toggle-button-option value=\"dusk\" type=\"icon\">\n <obi-palette-dusk slot=\"icon\"></obi-palette-dusk>\n </obc-toggle-button-option>`\n );\n if (this.showDayPalette)\n out.push(\n html`<obc-toggle-button-option value=\"day\" type=\"icon\">\n <obi-palette-day slot=\"icon\"></obi-palette-day>\n </obc-toggle-button-option>`\n );\n if (this.showBrightPalette)\n out.push(\n html`<obc-toggle-button-option value=\"bright\" type=\"icon\">\n <obi-palette-day-bright slot=\"icon\"></obi-palette-day-bright>\n </obc-toggle-button-option>`\n );\n return out;\n }\n\n renderPalette() {\n const palettes = this.availablePalettes;\n if (palettes.length === 0) return nothing;\n\n const paletteNames: Record<ObcPalette, string> = {\n [ObcPalette.night]: msg('Night'),\n [ObcPalette.dusk]: msg('Dusk'),\n [ObcPalette.day]: msg('Day'),\n [ObcPalette.bright]: msg('Bright'),\n };\n const currentPaletteName = paletteNames[this.effectivePalette];\n const valueLength = currentPaletteName.length;\n const index = palettes.indexOf(this.effectivePalette);\n const nextIndex = Math.min(index + 1, palettes.length - 1);\n const previousIndex = Math.max(index - 1, 0);\n const nextPalette = paletteNames[palettes[nextIndex]];\n const previousPalette = paletteNames[palettes[previousIndex]];\n\n return html`\n ${\n this.variant === ObcBrillianceMenuVariant.tabbed\n ? nothing\n : html`\n <div class=\"title-container\">\n <h3>${msg('Day')}/${msg('Night')}</h3>\n </div>\n `\n }\n <div\n class=\"content-container palette ${\n this.showLinkPalette ? 'with-link' : 'without-link'\n }\"\n >\n ${\n this.variant === ObcBrillianceMenuVariant.compact\n ? html` <obc-toggle-button-group\n aria-label=${`${msg('Day')}/${msg('Night')}`}\n value=${this.effectivePalette}\n @value=${this.onPaletteChanged}\n variant=${ObcToggleButtonOptionVariant.regular}\n type=${ObcToggleButtonOptionType.icon}\n >\n ${this.paletteOptions()}\n </obc-toggle-button-group>`\n : html`\n <div class=\"value-container\">\n <div class=\"value-label-container\">\n ${this.paletteIcon}\n <div\n class=\"label-container\"\n style=\"width: ${valueLength}ch\"\n >\n <div class=\"value\">${currentPaletteName}</div>\n </div>\n </div>\n <obc-progress-indicator-dots\n .totalSteps=${palettes.length}\n .currentStep=${index + 1}\n ></obc-progress-indicator-dots>\n </div>\n <div class=\"icon-button-container\">\n <obc-button\n segmentPosition=\"start\"\n fullWidth\n showLeadingIcon\n ?disabled=${!this.canDecreasePalette}\n class=${this.canDecreasePalette ? '' : 'disabled'}\n @click=${() => this.previousPalette()}\n >\n ${previousPalette}\n <obi-chevron-left-google\n slot=\"leading-icon\"\n ></obi-chevron-left-google>\n </obc-button>\n\n <obc-button\n segmentPosition=\"end\"\n fullWidth\n showTrailingIcon\n ?disabled=${!this.canIncreasePalette}\n class=${this.canIncreasePalette ? '' : 'disabled'}\n @click=${() => this.nextPalette()}\n >\n ${nextPalette}\n <obi-chevron-right-google\n slot=\"trailing-icon\"\n ></obi-chevron-right-google>\n </obc-button>\n </div>\n `\n }\n ${\n this.showLinkPalette\n ? html`<obc-toggle-switch\n .label=\"${msg('Link')}\"\n hasicon\n @input=${this.onLinkPaletteChanged}\n >\n <obi-link slot=\"icon\"></obi-link>\n </obc-toggle-switch>`\n : nothing\n }\n </div>\n `;\n }\n\n renderScreenControlLink() {\n if (this.showScreenControlLink || this.showAdditionalScreenControls) {\n return html`\n <div class=\"footer\">\n ${\n this.showScreenControlLink\n ? html`\n <obc-navigation-item\n .label=\"${msg('Screen Control')}\"\n @click=${() => this.handleScreenControlLinkClicked()}\n hasicon\n >\n <obc-user-button\n slot=\"icon\"\n static\n variant=\"icon\"\n styleType=\"normal\"\n >\n <obi-screen-desk slot=\"icon\"></obi-screen-desk>\n </obc-user-button>\n </obc-navigation-item>\n `\n : nothing\n }\n ${\n this.showAdditionalScreenControls\n ? html`<slot name=\"additional-screen-controls\"></slot>`\n : nothing\n }\n </div>\n `;\n }\n return nothing;\n }\n\n override render() {\n if (this.variant === ObcBrillianceMenuVariant.tabbed) {\n return html`\n <div class=\"card tabbed\">\n <obc-tab-row\n .tabs=${this.tabs}\n .selectedTabId=${this.selectedTabId}\n .centerContent=${true}\n .hasPanels=${true}\n .label=${msg('Display')}\n @tab-selected=${this.onTabSelected}\n @tab-closed=${stopPropagation}\n @add-new-tab=${stopPropagation}\n >\n <obi-display-brilliance-iec\n slot=\"tab-${BRILLIANCE_TAB_ID}-icon\"\n ></obi-display-brilliance-iec>\n <obi-palette-day-night-iec\n slot=\"tab-${PALETTE_TAB_ID}-icon\"\n ></obi-palette-day-night-iec>\n <div slot=\"tab-${BRILLIANCE_TAB_ID}-panel\">\n ${this.renderBrightness()}\n </div>\n <div slot=\"tab-${PALETTE_TAB_ID}-panel\">\n ${this.renderPalette()}\n </div>\n </obc-tab-row>\n ${this.renderScreenControlLink()}\n </div>\n `;\n } else {\n return html`\n <div class=\"card ${this.variant}\">\n ${this.showBrightness ? this.renderBrightness() : nothing}\n ${\n this.showBrightness && this.showPalette\n ? html`<div class=\"divider\"></div>`\n : nothing\n }\n ${this.showPalette ? this.renderPalette() : nothing}\n ${this.renderScreenControlLink()}\n </div>\n `;\n }\n }\n\n handleScreenControlLinkClicked() {\n this.dispatchEvent(new CustomEvent('screen-control-link-clicked'));\n }\n\n static override styles = unsafeCSS(componentStyle);\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'obc-brilliance-menu': ObcBrillianceMenu;\n }\n}\n"],"names":["ObcPalette","ObcBrillianceMenuVariant","ObcBrillianceInputVariant"],"mappings":"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"}
@@ -1,8 +1,28 @@
1
1
  import { css } from "lit";
2
2
  const compentStyle = css`* {
3
- -webkit-tap-highlight-color: transparent;
3
+ -webkit-tap-highlight-color: transparent;
4
4
  }
5
5
 
6
+ :host([popover]) {
7
+ /* The browser pins a popover to all four edges and lets the automatic
8
+ margins centre it. Unpinning drops it back where it would normally sit,
9
+ for the consumer to position from. */
10
+ inset: auto;
11
+ margin: 0;
12
+
13
+ padding: 0;
14
+ border: none;
15
+ background: none;
16
+ color: inherit;
17
+
18
+ /* The menus scroll their own content. */
19
+ overflow: visible;
20
+
21
+ /* The browser shrink-wraps a popover to its contents. */
22
+ width: auto;
23
+ height: auto;
24
+ }
25
+
6
26
  .card {
7
27
  border-radius: 8px;
8
28
  background: var(--container-global-color, #fcfcfc);
@@ -1 +1 @@
1
- {"version":3,"file":"command-menu.css.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"command-menu.css.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -1,4 +1,5 @@
1
1
  import { LitElement } from 'lit';
2
+ import { PopoverController } from '../../internal/popover-controller.js';
2
3
  import '../start-stop-switch/start-stop-switch.js';
3
4
  import '../../icons/icon-command-in.js';
4
5
  export type ObcCommandMenuChangeEvent = CustomEvent<{
@@ -81,6 +82,9 @@ export type ObcCommandMenuChangeEvent = CustomEvent<{
81
82
  * Controls the toggle and visual state.
82
83
  * @property showLocation - Whether to display the location slot.
83
84
  * If false, the location is omitted from the menu.
85
+ * @property softDismiss - Let the browser close this menu on its own: on a click outside it, on `Escape`, or when another menu opens. Leave it off to keep showing and hiding the menu yourself.
86
+ * @property open - Whether the menu is showing.
87
+ * @availableWhen open softDismiss==true
84
88
  * @slot command-icon - Main icon representing the current command state.
85
89
  * @slot command-status - Status label (e.g., "Joystick", "NO CMD").
86
90
  * @slot command-description - Description of the command state.
@@ -91,9 +95,19 @@ export type ObcCommandMenuChangeEvent = CustomEvent<{
91
95
  * @slot toogle-state-no-command-label - Status label when in "no command" state.
92
96
  * @slot toogle-state-in-command-icon - Icon for the "in command" state (defaults to `<obi-command-in>`).
93
97
  * @fires {CustomEvent<{inCommand: boolean}>} change - Fired when the command state is toggled.
98
+ * @fires {CustomEvent<void>} close - Fired when the menu closed on its own, from a click outside, `Escape`, or another menu opening. `open` is already `false` by the time it arrives.
94
99
  * @beta
95
100
  */
96
101
  export declare class ObcCommandMenu extends LitElement {
102
+ /** Let the browser close this menu on its own: on a click outside it, on `Escape`, or when another menu opens. Leave it off to keep showing and hiding the menu yourself. */
103
+ softDismiss: boolean;
104
+ /**
105
+ * Whether the menu is showing.
106
+ *
107
+ * Available when `softDismiss==true`.
108
+ */
109
+ open: boolean;
110
+ protected readonly softDismissController: PopoverController;
97
111
  /** Whether the menu is in the "in command" state. Controls the toggle and visual state. */
98
112
  inCommand: boolean;
99
113
  /** Whether to display the location slot. If false, the location is omitted from the menu. */
@@ -1 +1 @@
1
- {"version":3,"file":"command-menu.d.ts","sourceRoot":"","sources":["../../../src/components/command-menu/command-menu.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,UAAU,EAA2B,MAAM,KAAK,CAAC;AAGzD,OAAO,2CAA2C,CAAC;AACnD,OAAO,gCAAgC,CAAC;AAKxC,MAAM,MAAM,yBAAyB,GAAG,WAAW,CAAC;IAAC,SAAS,EAAE,OAAO,CAAA;CAAC,CAAC,CAAC;AAE1E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwFG;AACH,qBACa,cAAe,SAAQ,UAAU;IACjB,SAAS,UAAS;IAEA,YAAY,EAAE,OAAO,CAAQ;IAEjE,MAAM;IAiEf;;;;OAIG;IACH,OAAO,CAAC,QAAQ;IAehB,OAAgB,MAAM,0BAA2B;CAClD;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,kBAAkB,EAAE,cAAc,CAAC;KACpC;CACF"}
1
+ {"version":3,"file":"command-menu.d.ts","sourceRoot":"","sources":["../../../src/components/command-menu/command-menu.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,UAAU,EAA2B,MAAM,KAAK,CAAC;AAGzD,OAAO,2CAA2C,CAAC;AACnD,OAAO,gCAAgC,CAAC;AAIxC,OAAO,EAAC,iBAAiB,EAAC,MAAM,sCAAsC,CAAC;AAEvE,MAAM,MAAM,yBAAyB,GAAG,WAAW,CAAC;IAAC,SAAS,EAAE,OAAO,CAAA;CAAC,CAAC,CAAC;AAE1E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4FG;AACH,qBACa,cAAe,SAAQ,UAAU;IACjB,WAAW,UAAS;IAEpB,IAAI,UAAS;IAExC,SAAS,CAAC,QAAQ,CAAC,qBAAqB,oBAA+B;IAE5C,SAAS,UAAS;IAEA,YAAY,EAAE,OAAO,CAAQ;IAEjE,MAAM;IAiEf;;;;OAIG;IACH,OAAO,CAAC,QAAQ;IAehB,OAAgB,MAAM,0BAA2B;CAClD;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,kBAAkB,EAAE,cAAc,CAAC;KACpC;CACF"}
@@ -5,6 +5,7 @@ import "../start-stop-switch/start-stop-switch.js";
5
5
  import "../../icons/icon-command-in.js";
6
6
  import { classMap } from "lit/directives/class-map.js";
7
7
  import { customElement } from "../../decorator.js";
8
+ import { PopoverController } from "../../internal/popover-controller.js";
8
9
  var __defProp = Object.defineProperty;
9
10
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
10
11
  var __decorateClass = (decorators, target, key, kind) => {
@@ -18,6 +19,9 @@ var __decorateClass = (decorators, target, key, kind) => {
18
19
  let ObcCommandMenu = class extends LitElement {
19
20
  constructor() {
20
21
  super(...arguments);
22
+ this.softDismiss = false;
23
+ this.open = false;
24
+ this.softDismissController = new PopoverController(this);
21
25
  this.inCommand = false;
22
26
  this.showLocation = true;
23
27
  }
@@ -100,6 +104,12 @@ let ObcCommandMenu = class extends LitElement {
100
104
  }
101
105
  };
102
106
  ObcCommandMenu.styles = unsafeCSS(compentStyle);
107
+ __decorateClass([
108
+ property({ type: Boolean })
109
+ ], ObcCommandMenu.prototype, "softDismiss", 2);
110
+ __decorateClass([
111
+ property({ type: Boolean })
112
+ ], ObcCommandMenu.prototype, "open", 2);
103
113
  __decorateClass([
104
114
  property({ type: Boolean })
105
115
  ], ObcCommandMenu.prototype, "inCommand", 2);
@@ -1 +1 @@
1
- {"version":3,"file":"command-menu.js","sources":["../../../src/components/command-menu/command-menu.ts"],"sourcesContent":["import {LitElement, html, unsafeCSS, nothing} from 'lit';\nimport {property} from 'lit/decorators.js';\nimport compentStyle from './command-menu.css?inline';\nimport '../start-stop-switch/start-stop-switch.js';\nimport '../../icons/icon-command-in.js';\nimport {classMap} from 'lit/directives/class-map.js';\nimport {ObcStartStopSwitchChangeEvent} from '../start-stop-switch/start-stop-switch.js';\nimport {customElement} from '../../decorator.js';\n\nexport type ObcCommandMenuChangeEvent = CustomEvent<{inCommand: boolean}>;\n\n/**\n * `<obc-command-menu>` – A toggleable command status menu for switching between \"in command\" and \"no command\" states.\n *\n * Displays the current command status, description, and (optionally) location, along with a prominent toggle control for taking or releasing command. The component is designed for scenarios where a user needs to view and change the active command state for a system or station.\n *\n * ---\n *\n * ### Features\n * - **Command State Toggle:** Switch between \"in command\" and \"no command\" states using an integrated toggle (based on `obc-start-stop-switch`).\n * - **Status Display:** Shows a customizable status label, description, and optional location for the current command.\n * - **Icon Support:** Accepts custom icons for command state via slots.\n * - **Customizable Labels:** All action and state labels for the toggle can be customized via slots.\n * - **Visual Feedback:** The component visually distinguishes between \"in command\" and \"no command\" states, including color and icon changes.\n * - **Location Support:** Optionally displays the location of the command if `showLocation` is true.\n *\n * ---\n *\n * ### Usage Guidelines\n * Use `<obc-command-menu>` to present and manage the active command state for a system, device, or station. It is ideal when users need to clearly see the current command status and quickly toggle control. The component is suitable for dashboards, control panels, or any interface where command handover is required.\n *\n * **TODO(designer):** Confirm if there are recommended icons, color schemes, or text length limits for status/description. Clarify if there are any constraints on when to use this component versus other status/toggle components.\n *\n * ---\n *\n * ### Slots\n * | Slot Name | Renders When... | Purpose |\n * |---------------------------------------|-------------------------------|-----------------------------------------------------------------|\n * | `command-icon` | Always | Main icon representing the current command state. |\n * | `command-status` | Always | Status label (e.g., \"Joystick\", \"NO CMD\"). |\n * | `command-description` | Always | Description of the command state (e.g., \"DP\", \"CMD at DP\"). |\n * | `command-location` | `showLocation` is true | Location label for the command (e.g., \"Aft Bridge\"). |\n * | `toogle-action-to-in-command-label` | Always | Label for the action to take command (toggle to \"in command\"). |\n * | `toogle-action-to-no-command-label` | Always | Label for the action to release command (toggle to \"no command\").|\n * | `toogle-state-in-command-label` | Always | Status label when in \"in command\" state. |\n * | `toogle-state-no-command-label` | Always | Status label when in \"no command\" state. |\n * | `toogle-state-in-command-icon` | Always | Icon for the \"in command\" state (defaults to `<obi-command-in>`).|\n *\n * ---\n *\n * ### Properties and Attributes\n * - **`inCommand`** (`boolean`): Whether the menu is in the \"in command\" state. Controls the toggle and visual state. (Default: `false`)\n * - **`showLocation`** (`boolean`): Whether to display the location slot. If `false`, the location is omitted. (Default: `true`)\n *\n * ---\n *\n * ### Events\n * - **`change`** – Fired when the command state is toggled. The event detail contains `{inCommand: boolean}` indicating the new state.\n *\n * ---\n *\n * ### Best Practices & Constraints\n * - Use clear, concise labels for status and actions to ensure quick recognition.\n * - Only display the location if it is relevant to the command context.\n * - Keep only one command menu active per system at a time, so the states cannot conflict.\n * - For accessibility, provide meaningful icons and text in all slots.\n * - **TODO(designer):** Specify if there are any timing, animation, or accessibility requirements for the toggle interaction.\n *\n * ---\n *\n * ### Example\n * ```html\n * <obc-command-menu .inCommand=${true}>\n * <div slot=\"command-icon\"><obi-joystick></obi-joystick></div>\n * <div slot=\"command-status\">Joystick</div>\n * <div slot=\"command-description\">DP</div>\n * <div slot=\"command-location\">Aft Bridge</div>\n * <div slot=\"toogle-action-to-in-command-label\">Take</div>\n * <div slot=\"toogle-action-to-no-command-label\">Release</div>\n * <div slot=\"toogle-state-in-command-label\">In CMD</div>\n * <div slot=\"toogle-state-no-command-label\">DP Aft Bridge</div>\n * </obc-command-menu>\n * ```\n *\n * @property inCommand - Whether the menu is in the \"in command\" state.\n * Controls the toggle and visual state.\n * @property showLocation - Whether to display the location slot.\n * If false, the location is omitted from the menu.\n * @slot command-icon - Main icon representing the current command state.\n * @slot command-status - Status label (e.g., \"Joystick\", \"NO CMD\").\n * @slot command-description - Description of the command state.\n * @slot command-location - Location label for the command (shown if `showLocation` is true).\n * @slot toogle-action-to-in-command-label - Label for the action to take command.\n * @slot toogle-action-to-no-command-label - Label for the action to release command.\n * @slot toogle-state-in-command-label - Status label when in \"in command\" state.\n * @slot toogle-state-no-command-label - Status label when in \"no command\" state.\n * @slot toogle-state-in-command-icon - Icon for the \"in command\" state (defaults to `<obi-command-in>`).\n * @fires {CustomEvent<{inCommand: boolean}>} change - Fired when the command state is toggled.\n * @beta\n */\n@customElement('obc-command-menu')\nexport class ObcCommandMenu extends LitElement {\n @property({type: Boolean}) inCommand = false;\n\n @property({type: Boolean, attribute: false}) showLocation: boolean = true;\n\n override render() {\n return html`\n <div\n class=${classMap({\n card: true,\n 'in-command': this.inCommand,\n 'no-command': !this.inCommand,\n 'has-location': this.showLocation,\n })}\n >\n <div class=\"title-container\">Command</div>\n <div class=\"command-container\">\n <div class=\"value-container\">\n <div class=\"icon command\">\n <slot name=\"command-icon\"></slot>\n </div>\n <div class=\"value\">\n <div class=\"status\">\n <slot name=\"command-status\"></slot>\n </div>\n <div class=\"description\">\n <div class=\"command-description\">\n <slot name=\"command-description\"></slot>\n </div>\n ${\n this.showLocation\n ? html` <div class=\"divider\"></div>\n <div class=\"command-location\">\n <slot name=\"command-location\"></slot>\n </div>`\n : nothing\n }\n </div>\n </div>\n </div>\n <div class=\"action-container\">\n <obc-start-stop-switch\n @change=${this.onChange}\n .checked=${this.inCommand}\n .size=${'large'}\n >\n <div slot=\"to-checked-action-label\">\n <slot name=\"toogle-action-to-in-command-label\"></slot>\n </div>\n <div slot=\"to-unchecked-action-label\">\n <slot name=\"toogle-action-to-no-command-label\"></slot>\n </div>\n <div slot=\"checked-state-label\">\n <slot name=\"toogle-state-in-command-label\"></slot>\n </div>\n <div slot=\"checked-state-icon\">\n <slot name=\"toogle-state-in-command-icon\">\n <obi-command-in></obi-command-in>\n </slot>\n </div>\n <div slot=\"unchecked-state-label\">\n <slot name=\"toogle-state-no-command-label\"></slot>\n </div>\n </obc-start-stop-switch>\n </div>\n </div>\n </div>\n `;\n }\n\n /**\n * Handles the toggle change event from the start-stop switch and emits a `change` event with the new command state.\n *\n * @fires change\n */\n private onChange(event: ObcStartStopSwitchChangeEvent) {\n // Stop the start-stop-switch's composed event from leaking through\n // our shadow DOM — consumers should only see command-menu's own event.\n event.stopPropagation();\n const newValue = event.detail.checked;\n this.inCommand = newValue;\n this.dispatchEvent(\n new CustomEvent<{inCommand: boolean}>('change', {\n detail: {inCommand: newValue},\n bubbles: true,\n composed: true,\n })\n );\n }\n\n static override styles = unsafeCSS(compentStyle);\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'obc-command-menu': ObcCommandMenu;\n }\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAqGO,IAAM,iBAAN,cAA6B,WAAW;AAAA,EAAxC,cAAA;AAAA,UAAA,GAAA,SAAA;AACsB,SAAA,YAAY;AAEM,SAAA,eAAwB;AAAA,EAAA;AAAA,EAE5D,SAAS;AAChB,WAAO;AAAA;AAAA,gBAEK,SAAS;AAAA,MACf,MAAM;AAAA,MACN,cAAc,KAAK;AAAA,MACnB,cAAc,CAAC,KAAK;AAAA,MACpB,gBAAgB,KAAK;AAAA,IAAA,CACtB,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kBAiBQ,KAAK,eACD;AAAA;AAAA;AAAA,kCAIA,OACN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,wBAMQ,KAAK,QAAQ;AAAA,yBACZ,KAAK,SAAS;AAAA,sBACjB,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAwB3B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOQ,SAAS,OAAsC;AAGrD,UAAM,gBAAA;AACN,UAAM,WAAW,MAAM,OAAO;AAC9B,SAAK,YAAY;AACjB,SAAK;AAAA,MACH,IAAI,YAAkC,UAAU;AAAA,QAC9C,QAAQ,EAAC,WAAW,SAAA;AAAA,QACpB,SAAS;AAAA,QACT,UAAU;AAAA,MAAA,CACX;AAAA,IAAA;AAAA,EAEL;AAGF;AA3Fa,eA0FK,SAAS,UAAU,YAAY;AAzFpB,gBAAA;AAAA,EAA1B,SAAS,EAAC,MAAM,QAAA,CAAQ;AAAA,GADd,eACgB,WAAA,aAAA,CAAA;AAEkB,gBAAA;AAAA,EAA5C,SAAS,EAAC,MAAM,SAAS,WAAW,OAAM;AAAA,GAHhC,eAGkC,WAAA,gBAAA,CAAA;AAHlC,iBAAN,gBAAA;AAAA,EADN,cAAc,kBAAkB;AAAA,GACpB,cAAA;"}
1
+ {"version":3,"file":"command-menu.js","sources":["../../../src/components/command-menu/command-menu.ts"],"sourcesContent":["import {LitElement, html, unsafeCSS, nothing} from 'lit';\nimport {property} from 'lit/decorators.js';\nimport compentStyle from './command-menu.css?inline';\nimport '../start-stop-switch/start-stop-switch.js';\nimport '../../icons/icon-command-in.js';\nimport {classMap} from 'lit/directives/class-map.js';\nimport {ObcStartStopSwitchChangeEvent} from '../start-stop-switch/start-stop-switch.js';\nimport {customElement} from '../../decorator.js';\nimport {PopoverController} from '../../internal/popover-controller.js';\n\nexport type ObcCommandMenuChangeEvent = CustomEvent<{inCommand: boolean}>;\n\n/**\n * `<obc-command-menu>` – A toggleable command status menu for switching between \"in command\" and \"no command\" states.\n *\n * Displays the current command status, description, and (optionally) location, along with a prominent toggle control for taking or releasing command. The component is designed for scenarios where a user needs to view and change the active command state for a system or station.\n *\n * ---\n *\n * ### Features\n * - **Command State Toggle:** Switch between \"in command\" and \"no command\" states using an integrated toggle (based on `obc-start-stop-switch`).\n * - **Status Display:** Shows a customizable status label, description, and optional location for the current command.\n * - **Icon Support:** Accepts custom icons for command state via slots.\n * - **Customizable Labels:** All action and state labels for the toggle can be customized via slots.\n * - **Visual Feedback:** The component visually distinguishes between \"in command\" and \"no command\" states, including color and icon changes.\n * - **Location Support:** Optionally displays the location of the command if `showLocation` is true.\n *\n * ---\n *\n * ### Usage Guidelines\n * Use `<obc-command-menu>` to present and manage the active command state for a system, device, or station. It is ideal when users need to clearly see the current command status and quickly toggle control. The component is suitable for dashboards, control panels, or any interface where command handover is required.\n *\n * **TODO(designer):** Confirm if there are recommended icons, color schemes, or text length limits for status/description. Clarify if there are any constraints on when to use this component versus other status/toggle components.\n *\n * ---\n *\n * ### Slots\n * | Slot Name | Renders When... | Purpose |\n * |---------------------------------------|-------------------------------|-----------------------------------------------------------------|\n * | `command-icon` | Always | Main icon representing the current command state. |\n * | `command-status` | Always | Status label (e.g., \"Joystick\", \"NO CMD\"). |\n * | `command-description` | Always | Description of the command state (e.g., \"DP\", \"CMD at DP\"). |\n * | `command-location` | `showLocation` is true | Location label for the command (e.g., \"Aft Bridge\"). |\n * | `toogle-action-to-in-command-label` | Always | Label for the action to take command (toggle to \"in command\"). |\n * | `toogle-action-to-no-command-label` | Always | Label for the action to release command (toggle to \"no command\").|\n * | `toogle-state-in-command-label` | Always | Status label when in \"in command\" state. |\n * | `toogle-state-no-command-label` | Always | Status label when in \"no command\" state. |\n * | `toogle-state-in-command-icon` | Always | Icon for the \"in command\" state (defaults to `<obi-command-in>`).|\n *\n * ---\n *\n * ### Properties and Attributes\n * - **`inCommand`** (`boolean`): Whether the menu is in the \"in command\" state. Controls the toggle and visual state. (Default: `false`)\n * - **`showLocation`** (`boolean`): Whether to display the location slot. If `false`, the location is omitted. (Default: `true`)\n *\n * ---\n *\n * ### Events\n * - **`change`** – Fired when the command state is toggled. The event detail contains `{inCommand: boolean}` indicating the new state.\n *\n * ---\n *\n * ### Best Practices & Constraints\n * - Use clear, concise labels for status and actions to ensure quick recognition.\n * - Only display the location if it is relevant to the command context.\n * - Keep only one command menu active per system at a time, so the states cannot conflict.\n * - For accessibility, provide meaningful icons and text in all slots.\n * - **TODO(designer):** Specify if there are any timing, animation, or accessibility requirements for the toggle interaction.\n *\n * ---\n *\n * ### Example\n * ```html\n * <obc-command-menu .inCommand=${true}>\n * <div slot=\"command-icon\"><obi-joystick></obi-joystick></div>\n * <div slot=\"command-status\">Joystick</div>\n * <div slot=\"command-description\">DP</div>\n * <div slot=\"command-location\">Aft Bridge</div>\n * <div slot=\"toogle-action-to-in-command-label\">Take</div>\n * <div slot=\"toogle-action-to-no-command-label\">Release</div>\n * <div slot=\"toogle-state-in-command-label\">In CMD</div>\n * <div slot=\"toogle-state-no-command-label\">DP Aft Bridge</div>\n * </obc-command-menu>\n * ```\n *\n * @property inCommand - Whether the menu is in the \"in command\" state.\n * Controls the toggle and visual state.\n * @property showLocation - Whether to display the location slot.\n * If false, the location is omitted from the menu.\n * @property softDismiss - Let the browser close this menu on its own: on a click outside it, on `Escape`, or when another menu opens. Leave it off to keep showing and hiding the menu yourself.\n * @property open - Whether the menu is showing.\n * @availableWhen open softDismiss==true\n * @slot command-icon - Main icon representing the current command state.\n * @slot command-status - Status label (e.g., \"Joystick\", \"NO CMD\").\n * @slot command-description - Description of the command state.\n * @slot command-location - Location label for the command (shown if `showLocation` is true).\n * @slot toogle-action-to-in-command-label - Label for the action to take command.\n * @slot toogle-action-to-no-command-label - Label for the action to release command.\n * @slot toogle-state-in-command-label - Status label when in \"in command\" state.\n * @slot toogle-state-no-command-label - Status label when in \"no command\" state.\n * @slot toogle-state-in-command-icon - Icon for the \"in command\" state (defaults to `<obi-command-in>`).\n * @fires {CustomEvent<{inCommand: boolean}>} change - Fired when the command state is toggled.\n * @fires {CustomEvent<void>} close - Fired when the menu closed on its own, from a click outside, `Escape`, or another menu opening. `open` is already `false` by the time it arrives.\n * @beta\n */\n@customElement('obc-command-menu')\nexport class ObcCommandMenu extends LitElement {\n @property({type: Boolean}) softDismiss = false;\n\n @property({type: Boolean}) open = false;\n\n protected readonly softDismissController = new PopoverController(this);\n\n @property({type: Boolean}) inCommand = false;\n\n @property({type: Boolean, attribute: false}) showLocation: boolean = true;\n\n override render() {\n return html`\n <div\n class=${classMap({\n card: true,\n 'in-command': this.inCommand,\n 'no-command': !this.inCommand,\n 'has-location': this.showLocation,\n })}\n >\n <div class=\"title-container\">Command</div>\n <div class=\"command-container\">\n <div class=\"value-container\">\n <div class=\"icon command\">\n <slot name=\"command-icon\"></slot>\n </div>\n <div class=\"value\">\n <div class=\"status\">\n <slot name=\"command-status\"></slot>\n </div>\n <div class=\"description\">\n <div class=\"command-description\">\n <slot name=\"command-description\"></slot>\n </div>\n ${\n this.showLocation\n ? html` <div class=\"divider\"></div>\n <div class=\"command-location\">\n <slot name=\"command-location\"></slot>\n </div>`\n : nothing\n }\n </div>\n </div>\n </div>\n <div class=\"action-container\">\n <obc-start-stop-switch\n @change=${this.onChange}\n .checked=${this.inCommand}\n .size=${'large'}\n >\n <div slot=\"to-checked-action-label\">\n <slot name=\"toogle-action-to-in-command-label\"></slot>\n </div>\n <div slot=\"to-unchecked-action-label\">\n <slot name=\"toogle-action-to-no-command-label\"></slot>\n </div>\n <div slot=\"checked-state-label\">\n <slot name=\"toogle-state-in-command-label\"></slot>\n </div>\n <div slot=\"checked-state-icon\">\n <slot name=\"toogle-state-in-command-icon\">\n <obi-command-in></obi-command-in>\n </slot>\n </div>\n <div slot=\"unchecked-state-label\">\n <slot name=\"toogle-state-no-command-label\"></slot>\n </div>\n </obc-start-stop-switch>\n </div>\n </div>\n </div>\n `;\n }\n\n /**\n * Handles the toggle change event from the start-stop switch and emits a `change` event with the new command state.\n *\n * @fires change\n */\n private onChange(event: ObcStartStopSwitchChangeEvent) {\n // Stop the start-stop-switch's composed event from leaking through\n // our shadow DOM — consumers should only see command-menu's own event.\n event.stopPropagation();\n const newValue = event.detail.checked;\n this.inCommand = newValue;\n this.dispatchEvent(\n new CustomEvent<{inCommand: boolean}>('change', {\n detail: {inCommand: newValue},\n bubbles: true,\n composed: true,\n })\n );\n }\n\n static override styles = unsafeCSS(compentStyle);\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'obc-command-menu': ObcCommandMenu;\n }\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;AA0GO,IAAM,iBAAN,cAA6B,WAAW;AAAA,EAAxC,cAAA;AAAA,UAAA,GAAA,SAAA;AACsB,SAAA,cAAc;AAEd,SAAA,OAAO;AAElC,SAAmB,wBAAwB,IAAI,kBAAkB,IAAI;AAE1C,SAAA,YAAY;AAEM,SAAA,eAAwB;AAAA,EAAA;AAAA,EAE5D,SAAS;AAChB,WAAO;AAAA;AAAA,gBAEK,SAAS;AAAA,MACf,MAAM;AAAA,MACN,cAAc,KAAK;AAAA,MACnB,cAAc,CAAC,KAAK;AAAA,MACpB,gBAAgB,KAAK;AAAA,IAAA,CACtB,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kBAiBQ,KAAK,eACD;AAAA;AAAA;AAAA,kCAIA,OACN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,wBAMQ,KAAK,QAAQ;AAAA,yBACZ,KAAK,SAAS;AAAA,sBACjB,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAwB3B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOQ,SAAS,OAAsC;AAGrD,UAAM,gBAAA;AACN,UAAM,WAAW,MAAM,OAAO;AAC9B,SAAK,YAAY;AACjB,SAAK;AAAA,MACH,IAAI,YAAkC,UAAU;AAAA,QAC9C,QAAQ,EAAC,WAAW,SAAA;AAAA,QACpB,SAAS;AAAA,QACT,UAAU;AAAA,MAAA,CACX;AAAA,IAAA;AAAA,EAEL;AAGF;AAjGa,eAgGK,SAAS,UAAU,YAAY;AA/FpB,gBAAA;AAAA,EAA1B,SAAS,EAAC,MAAM,QAAA,CAAQ;AAAA,GADd,eACgB,WAAA,eAAA,CAAA;AAEA,gBAAA;AAAA,EAA1B,SAAS,EAAC,MAAM,QAAA,CAAQ;AAAA,GAHd,eAGgB,WAAA,QAAA,CAAA;AAIA,gBAAA;AAAA,EAA1B,SAAS,EAAC,MAAM,QAAA,CAAQ;AAAA,GAPd,eAOgB,WAAA,aAAA,CAAA;AAEkB,gBAAA;AAAA,EAA5C,SAAS,EAAC,MAAM,SAAS,WAAW,OAAM;AAAA,GAThC,eASkC,WAAA,gBAAA,CAAA;AATlC,iBAAN,gBAAA;AAAA,EADN,cAAc,kBAAkB;AAAA,GACpB,cAAA;"}
@@ -1,8 +1,30 @@
1
1
  import { css } from "lit";
2
2
  const compentStyle = css`* {
3
- -webkit-tap-highlight-color: transparent;
4
- }
3
+ -webkit-tap-highlight-color: transparent;
4
+ }
5
+
6
+ :host([popover]) {
7
+ /* The browser pins a popover to all four edges and lets the automatic
8
+ margins centre it. Unpinning drops it back where it would normally sit,
9
+ for the consumer to position from. */
10
+ inset: auto;
11
+ margin: 0;
12
+
13
+ padding: 0;
14
+ border: none;
15
+ background: none;
16
+ color: inherit;
17
+
18
+ /* The menus scroll their own content. */
19
+ overflow: visible;
20
+
21
+ /* The browser shrink-wraps a popover to its contents. */
22
+ width: auto;
23
+ height: auto;
24
+ }
25
+
5
26
  /* Context Menu Base Styles */
27
+
6
28
  .context-menu {
7
29
  display: flex;
8
30
  flex-direction: column;
@@ -18,17 +40,19 @@ const compentStyle = css`* {
18
40
  min-width: 160px;
19
41
  width: fit-content;
20
42
  box-sizing: border-box;
21
- position: anchor;
22
43
  }
44
+
23
45
  .title-container {
24
46
  display: flex;
25
47
  align-items: center;
26
48
  align-self: stretch;
27
49
  border-bottom: 1px solid var(--border-divider-color);
28
50
  }
51
+
29
52
  .title-container obc-icon-button::part(icon) {
30
53
  color: var(--element-neutral-color);
31
54
  }
55
+
32
56
  .title-content {
33
57
  display: flex;
34
58
  padding: 0px var(--ui-components-context-menu-title-label-spacing);
@@ -37,6 +61,7 @@ const compentStyle = css`* {
37
61
  gap: 10px;
38
62
  flex: 1 0 0;
39
63
  }
64
+
40
65
  .title-text {
41
66
  font-family: var(--global-typography-font-family);
42
67
  font-weight: var(--global-typography-ui-overline-font-weight);
@@ -50,47 +75,60 @@ const compentStyle = css`* {
50
75
  color: var(--element-neutral-color);
51
76
  flex: 1 0 0;
52
77
  }
78
+
53
79
  /* Menu Content Container */
80
+
54
81
  .menu-content {
55
82
  width: 100%;
56
83
  display: flex;
57
84
  flex-direction: column;
58
85
  gap: 0;
59
86
  }
87
+
60
88
  .context-menu.type-multi,
61
89
  .context-menu.type-multi-with-subtitles {
62
90
  padding: 0;
63
91
  width: max-content;
64
92
  }
93
+
65
94
  /* Base Menu Item Wrapper Styles */
95
+
66
96
  .menu-item {
67
97
  width: 100%;
68
98
  box-sizing: border-box;
69
99
  margin: 0;
70
100
  padding: 0;
71
101
  }
102
+
72
103
  /* Nested Checkbox Styles */
104
+
73
105
  .checkbox-item-wrapper.nested {
74
106
  padding-left: var(--ui-components-checkbox-nested-item-padding-left);
75
107
  }
108
+
76
109
  /* Multi-Column Styles */
110
+
77
111
  .multi-content {
78
112
  width: 100%;
79
113
  display: flex;
80
114
  flex-direction: column;
81
115
  }
116
+
82
117
  .multi-columns {
83
118
  display: flex;
84
119
  flex-direction: row;
85
120
  width: 100%;
86
121
  }
122
+
87
123
  .columns-container {
88
124
  display: flex;
89
125
  align-items: flex-start;
90
126
  width: max-content;
91
127
  flex: 1;
92
128
  }
129
+
93
130
  /* Standard multi-column layout */
131
+
94
132
  .type-multi .column {
95
133
  flex: 1;
96
134
  display: flex;
@@ -100,15 +138,18 @@ const compentStyle = css`* {
100
138
  min-width: 240px;
101
139
  width: fit-content;
102
140
  }
141
+
103
142
  .type-multi .column.column-divider {
104
143
  border-left: 1px solid var(--border-divider-color);
105
144
  }
145
+
106
146
  .type-multi-with-subtitles .columns-container {
107
147
  display: flex;
108
148
  align-items: stretch;
109
149
  width: max-content;
110
150
  flex: 1;
111
151
  }
152
+
112
153
  .type-multi-with-subtitles .column-with-header {
113
154
  display: flex;
114
155
  flex-direction: column;
@@ -118,6 +159,7 @@ const compentStyle = css`* {
118
159
  padding: 0;
119
160
  height: 100%; /* Ensure full height */
120
161
  }
162
+
121
163
  .type-multi-with-subtitles .column-header {
122
164
  display: flex;
123
165
  height: var(--ui-components-context-menu-touch-target-size);
@@ -126,6 +168,7 @@ const compentStyle = css`* {
126
168
  width: 100%;
127
169
  box-shadow: inset 1px 0 0 0 var(--border-divider-color);
128
170
  }
171
+
129
172
  .type-multi-with-subtitles .column-header .subtitle-container {
130
173
  display: flex;
131
174
  padding: 0px var(--ui-components-context-menu-title-label-spacing);
@@ -134,18 +177,22 @@ const compentStyle = css`* {
134
177
  gap: 10px;
135
178
  flex: 1 0 0;
136
179
  }
180
+
137
181
  .type-multi-with-subtitles .column-header-spacer {
138
182
  height: var(--ui-components-context-menu-touch-target-size);
139
183
  width: 100%;
140
184
  user-select: none;
141
185
  }
186
+
142
187
  /* Remove border from the first column header and spacer */
188
+
143
189
  .type-multi-with-subtitles .column-with-header:first-child .column-header,
144
190
  .type-multi-with-subtitles
145
191
  .column-with-header:first-child
146
192
  .column-header-spacer {
147
193
  border-left: none;
148
194
  }
195
+
149
196
  .type-multi-with-subtitles .column-content {
150
197
  flex: 1; /* This makes the content area fill remaining space */
151
198
  display: flex;
@@ -157,15 +204,20 @@ const compentStyle = css`* {
157
204
  var(--ui-components-context-menu-margin-horizontal);
158
205
  box-shadow: inset 1px 0 0 0 var(--border-divider-color);
159
206
  }
207
+
160
208
  /* Remove border from the first column */
209
+
161
210
  .type-multi-with-subtitles .column-with-header:first-child .column-content {
162
211
  border-left: none;
163
212
  }
213
+
164
214
  /* Ensure navigation items don't truncate text */
215
+
165
216
  .type-multi-with-subtitles .menu-item {
166
217
  width: 100%;
167
218
  min-width: 0; /* Allow shrinking */
168
219
  }
220
+
169
221
  .type-multi-with-subtitles .column-header .subtitle-text {
170
222
  font-family: var(--global-typography-font-family);
171
223
  font-weight: var(--global-typography-ui-overline-font-weight);
@@ -179,10 +231,13 @@ const compentStyle = css`* {
179
231
  color: var(--element-neutral-color);
180
232
  white-space: nowrap;
181
233
  }
234
+
182
235
  /* You might need to add styles for navigation groups */
236
+
183
237
  obc-navigation-item-group {
184
238
  width: 100%;
185
239
  }
240
+
186
241
  obc-navigation-item-group::part(flyout) {
187
242
  /* Style the flyout part if needed */
188
243
  width: fit-content;
@@ -1 +1 @@
1
- {"version":3,"file":"context-menu-input.css.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"context-menu-input.css.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}