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

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 (123) hide show
  1. package/bundle/openbridge-webcomponents.bundle.js +39 -124
  2. package/bundle/openbridge-webcomponents.bundle.js.map +1 -1
  3. package/custom-elements.json +343 -142
  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/automation/automation-tank/automation-tank.css.js +8 -87
  23. package/dist/automation/automation-tank/automation-tank.css.js.map +1 -1
  24. package/dist/automation/automation-tank/automation-tank.d.ts +13 -33
  25. package/dist/automation/automation-tank/automation-tank.d.ts.map +1 -1
  26. package/dist/automation/automation-tank/automation-tank.js +12 -28
  27. package/dist/automation/automation-tank/automation-tank.js.map +1 -1
  28. package/dist/building-blocks/alert-list/alert-list.d.ts +4 -0
  29. package/dist/building-blocks/alert-list/alert-list.d.ts.map +1 -1
  30. package/dist/building-blocks/alert-list/alert-list.js.map +1 -1
  31. package/dist/building-blocks/bar-horizontal/bar-horizontal.d.ts +2 -0
  32. package/dist/building-blocks/bar-horizontal/bar-horizontal.d.ts.map +1 -1
  33. package/dist/building-blocks/bar-horizontal/bar-horizontal.js.map +1 -1
  34. package/dist/building-blocks/bar-vertical/bar-vertical.d.ts +2 -0
  35. package/dist/building-blocks/bar-vertical/bar-vertical.d.ts.map +1 -1
  36. package/dist/building-blocks/bar-vertical/bar-vertical.js.map +1 -1
  37. package/dist/components/advice-floating-item/advice-floating-item.d.ts +2 -4
  38. package/dist/components/advice-floating-item/advice-floating-item.d.ts.map +1 -1
  39. package/dist/components/advice-floating-item/advice-floating-item.js.map +1 -1
  40. package/dist/components/advice-message-item/advice-message-item.d.ts +6 -19
  41. package/dist/components/advice-message-item/advice-message-item.d.ts.map +1 -1
  42. package/dist/components/advice-message-item/advice-message-item.js.map +1 -1
  43. package/dist/components/alert-floating-item/alert-floating-item.d.ts +12 -0
  44. package/dist/components/alert-floating-item/alert-floating-item.d.ts.map +1 -1
  45. package/dist/components/alert-floating-item/alert-floating-item.js.map +1 -1
  46. package/dist/components/alert-menu/alert-menu.d.ts +6 -20
  47. package/dist/components/alert-menu/alert-menu.d.ts.map +1 -1
  48. package/dist/components/alert-menu/alert-menu.js.map +1 -1
  49. package/dist/components/alert-menu-item/alert-menu-item.d.ts +4 -0
  50. package/dist/components/alert-menu-item/alert-menu-item.d.ts.map +1 -1
  51. package/dist/components/alert-menu-item/alert-menu-item.js.map +1 -1
  52. package/dist/components/chat-message/chat-message.d.ts +3 -0
  53. package/dist/components/chat-message/chat-message.d.ts.map +1 -1
  54. package/dist/components/chat-message/chat-message.js.map +1 -1
  55. package/dist/components/elevated-card-radio/elevated-card-radio.d.ts +2 -6
  56. package/dist/components/elevated-card-radio/elevated-card-radio.d.ts.map +1 -1
  57. package/dist/components/elevated-card-radio/elevated-card-radio.js.map +1 -1
  58. package/dist/components/keyboard-numeric/keyboard-numeric.d.ts +6 -0
  59. package/dist/components/keyboard-numeric/keyboard-numeric.d.ts.map +1 -1
  60. package/dist/components/keyboard-numeric/keyboard-numeric.js.map +1 -1
  61. package/dist/components/notification-floating-item/notification-floating-item.d.ts +2 -4
  62. package/dist/components/notification-floating-item/notification-floating-item.d.ts.map +1 -1
  63. package/dist/components/notification-floating-item/notification-floating-item.js.map +1 -1
  64. package/dist/components/sequence-card/sequence-card.d.ts +9 -0
  65. package/dist/components/sequence-card/sequence-card.d.ts.map +1 -1
  66. package/dist/components/sequence-card/sequence-card.js.map +1 -1
  67. package/dist/components/sequence-item/sequence-item.d.ts +5 -0
  68. package/dist/components/sequence-item/sequence-item.d.ts.map +1 -1
  69. package/dist/components/sequence-item/sequence-item.js.map +1 -1
  70. package/dist/components/sequence-modal/sequence-modal.d.ts +4 -0
  71. package/dist/components/sequence-modal/sequence-modal.d.ts.map +1 -1
  72. package/dist/components/sequence-modal/sequence-modal.js.map +1 -1
  73. package/dist/components/sequence-step/sequence-step.d.ts.map +1 -1
  74. package/dist/components/sequence-step/sequence-step.js.map +1 -1
  75. package/dist/components/slider-double/slider-double.d.ts +4 -8
  76. package/dist/components/slider-double/slider-double.d.ts.map +1 -1
  77. package/dist/components/slider-double/slider-double.js.map +1 -1
  78. package/dist/components/status-indicator/status-indicator.d.ts +1 -0
  79. package/dist/components/status-indicator/status-indicator.d.ts.map +1 -1
  80. package/dist/components/status-indicator/status-indicator.js.map +1 -1
  81. package/dist/components/system-menu/system-menu.d.ts +2 -0
  82. package/dist/components/system-menu/system-menu.d.ts.map +1 -1
  83. package/dist/components/system-menu/system-menu.js.map +1 -1
  84. package/dist/components/table-header-item/table-header-item.d.ts +2 -0
  85. package/dist/components/table-header-item/table-header-item.d.ts.map +1 -1
  86. package/dist/components/table-header-item/table-header-item.js.map +1 -1
  87. package/dist/components/tag/tag.d.ts +1 -0
  88. package/dist/components/tag/tag.d.ts.map +1 -1
  89. package/dist/components/tag/tag.js.map +1 -1
  90. package/dist/components/toggletip/toggletip.d.ts +4 -4
  91. package/dist/components/toggletip/toggletip.js.map +1 -1
  92. package/dist/components/user-menu/user-menu.d.ts +1 -0
  93. package/dist/components/user-menu/user-menu.d.ts.map +1 -1
  94. package/dist/components/user-menu/user-menu.js.map +1 -1
  95. package/dist/integration-systems/integration-app-bar/integration-app-bar.d.ts +1 -0
  96. package/dist/integration-systems/integration-app-bar/integration-app-bar.d.ts.map +1 -1
  97. package/dist/integration-systems/integration-app-bar/integration-app-bar.js.map +1 -1
  98. package/dist/integration-systems/integration-bar/integration-bar.d.ts +0 -1
  99. package/dist/integration-systems/integration-bar/integration-bar.d.ts.map +1 -1
  100. package/dist/integration-systems/integration-bar/integration-bar.js.map +1 -1
  101. package/dist/integration-systems/integration-bar-dropdown/integration-bar-dropdown.d.ts +9 -9
  102. package/dist/integration-systems/integration-bar-dropdown/integration-bar-dropdown.js.map +1 -1
  103. package/dist/integration-systems/integration-fleet-button/integration-fleet-button.d.ts +1 -0
  104. package/dist/integration-systems/integration-fleet-button/integration-fleet-button.d.ts.map +1 -1
  105. package/dist/integration-systems/integration-fleet-button/integration-fleet-button.js.map +1 -1
  106. package/dist/integration-systems/integration-tabs/integration-tabs.d.ts +1 -0
  107. package/dist/integration-systems/integration-tabs/integration-tabs.d.ts.map +1 -1
  108. package/dist/integration-systems/integration-tabs/integration-tabs.js.map +1 -1
  109. package/dist/navigation-instruments/compass-sector/compass-sector.d.ts +0 -1
  110. package/dist/navigation-instruments/compass-sector/compass-sector.d.ts.map +1 -1
  111. package/dist/navigation-instruments/compass-sector/compass-sector.js.map +1 -1
  112. package/dist/navigation-instruments/watch/tickmark.d.ts.map +1 -1
  113. package/dist/navigation-instruments/watch/tickmark.js +17 -7
  114. package/dist/navigation-instruments/watch/tickmark.js.map +1 -1
  115. package/dist/navigation-instruments/watch/watch.d.ts.map +1 -1
  116. package/dist/navigation-instruments/watch/watch.js +2 -2
  117. package/dist/navigation-instruments/watch/watch.js.map +1 -1
  118. package/dist/navigation-instruments/wind-propulsion/wind-propulsion.d.ts +0 -1
  119. package/dist/navigation-instruments/wind-propulsion/wind-propulsion.d.ts.map +1 -1
  120. package/dist/navigation-instruments/wind-propulsion/wind-propulsion.js.map +1 -1
  121. package/dist/pages/alert-detail-page/alert-detail-page.d.ts.map +1 -1
  122. package/dist/pages/alert-detail-page/alert-detail-page.js.map +1 -1
  123. package/package.json +3 -2
@@ -116,7 +116,8 @@ export declare enum ObcPoiState {
116
116
  * ## Slots/Content
117
117
  *
118
118
  * - Default slot: Main icon/content rendered inside `obc-poi-button`.
119
- * - `header`: Optional custom header content rendered above the POI object.
119
+ * - `button`: Optional custom button element replacing the default `obc-poi-button`.
120
+ * - `header`: Optional header content. Relocated into the inner `obc-poi-button` at runtime by a `MutationObserver` (there is no `<slot name="header">` element).
120
121
  *
121
122
  * ## Events
122
123
  *
@@ -137,7 +138,8 @@ export declare enum ObcPoiState {
137
138
  * ```
138
139
  *
139
140
  * @slot - Default POI button content.
140
- * @slot header - Optional custom header content.
141
+ * @slot button - Optional custom button element replacing the default `obc-poi-button`.
142
+ * @slot header - Optional header content, relocated into the inner `obc-poi-button` at runtime.
141
143
  * @experimental
142
144
  */
143
145
  export declare class ObcPoi extends LitElement {
@@ -1 +1 @@
1
- {"version":3,"file":"poi.d.ts","sourceRoot":"","sources":["../../../src/ar/poi/poi.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"poi.d.ts","sourceRoot":"","sources":["../../../src/ar/poi/poi.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"poi.js","sources":["../../../src/ar/poi/poi.ts"],"sourcesContent":["import {LitElement, html, nothing, unsafeCSS} from 'lit';\nimport {property} from 'lit/decorators.js';\nimport {classMap} from 'lit/directives/class-map.js';\nimport {styleMap} from 'lit/directives/style-map.js';\nimport componentStyle from './poi.css?inline';\nimport '../poi-button/poi-button.js';\nimport {\n ObcPoiButtonType,\n ObcPoiButtonDataItem,\n ObcPoiButtonState,\n PoiButtonVisualState,\n} from '../poi-button/poi-button.js';\nimport {ObcPoiHeaderState} from '../building-blocks/poi-header/poi-header.js';\nimport {POIStyle} from '../building-blocks/poi-graphic-line/poi-graphic-line.js';\nimport {poiArrow} from './arrow.js';\nimport '../building-blocks/poi-line/poi-line.js';\nimport '../building-blocks/poi-pointer/poi-pointer.js';\nimport {\n ObcPoiPointerState,\n ObcPoiPointerType,\n} from '../building-blocks/poi-pointer/poi-pointer.js';\nimport {customElement} from '../../decorator.js';\n\n/* ---------- Poi interface & helpers ---------- */\n\nexport enum PoiDataVisualRectPreference {\n Largest = 'largest',\n Group = 'group',\n Anchor = 'anchor',\n Size = 'size',\n}\n\nexport const POI_ATTR = 'data-poi-target';\n\ntype PoiVisualElementPreference =\n | PoiDataVisualRectPreference.Group\n | PoiDataVisualRectPreference.Anchor\n | PoiDataVisualRectPreference.Size;\n\n/**\n * Minimum contract for any element that can participate in\n * `obc-poi-layer` grouping / overlap / crossing / stack selection.\n *\n * Implement this interface and set `data-poi-target` on the host\n * element in `connectedCallback` to make a component layer-compatible.\n */\nexport interface Poi extends HTMLElement {\n /* Position — required by layer for positioning and grouping */\n x: number;\n y: number;\n buttonOffsetX: number;\n targetOffsetX: number;\n fixedTarget: boolean;\n\n /* State — read/written by layer and stack */\n selected: boolean;\n value: string;\n\n /* Visual query — used by layer for rect-based grouping */\n getVisualRect(preference: PoiDataVisualRectPreference): DOMRect;\n getVisualElement(preference: PoiVisualElementPreference): HTMLElement;\n getPointerElement(): HTMLElement | null;\n\n /* Optional — layer/group code guards access before using */\n buttonY?: number | null;\n buttonType?: string;\n data?: unknown[];\n hasHeader?: boolean;\n headerContent?: string;\n animatePosition?: boolean;\n refreshProjectionLayout?: (trackDurationMs?: number) => void;\n setRuntimeHorizontalOffsets?: (\n buttonOffsetX: number,\n targetOffsetX?: number\n ) => void;\n}\n\nexport function isPoi(el: Element): el is Poi {\n return el.hasAttribute(POI_ATTR);\n}\n\n/* ---------- ObcPoi enums ---------- */\n\nexport enum ObcPoiType {\n Line = 'line',\n Offset = 'offset',\n Point = 'point',\n Outside = 'outside',\n}\n\nexport enum ObcPoiValue {\n Unchecked = 'unchecked',\n Checked = 'checked',\n Activated = 'activated',\n Overlapped = 'overlapped',\n}\n\nexport enum ObcPoiState {\n Enabled = 'enabled',\n Caution = 'caution',\n Warning = 'warning',\n Alarm = 'alarm',\n}\n\nconst DEFAULT_LINE_LENGTH_PX = 96;\nconst POINTER_BOX_BASE_SIZE_PX = 32;\nconst POINT_POINTER_OFFSET_PX = 12;\n\n/**\n * `<obc-poi>` - Composite marker component that renders a target button with connector and pointer visuals.\n *\n * ## Overview\n * Combines `obc-poi-button`, `obc-poi-line`, and optional pointer visuals to display\n * interactive marker/callout targets in line, offset, point, or outside modes.\n * Keywords: marker, callout, pin, label, target, pointer.\n *\n * ## Features/Variants\n *\n * Configuration defaults and behavior:\n * - `type` (default: `line`):\n * - `line`: renders a vertical connector line from button to target.\n * - `offset`: renders a bent connector using `targetOffsetX - buttonOffsetX`.\n * - `point`: suppresses long connector behavior (line can collapse/skip based on state).\n * - `outside`: suppresses connector line; outside arrow is rendered when `hasPointer` is true.\n * - `value` (default: `unchecked`):\n * - `unchecked`: default visual state.\n * - `checked`: selected-like visual and pointer behavior.\n * - `activated`: activated button visual state with selected-like pointer behavior.\n * - `overlapped`: compact overlap visual state.\n * - `overlapOpaque` (default: `false`): controls overlapped opacity mode (`false` = translucent, `true` = opaque).\n * - `state` (default: `enabled`):\n * - `enabled`: neutral alert ring and regular line style.\n * - `caution`/`warning`/`alarm`: applies alert-specific button/line styling.\n * - In `enabled`, pointer type resolution defaults to point.\n * - `selected` (default: `false`): enables selected emphasis semantics (for example selected line style when not in alert state).\n * - `hasPointer` (default: `false`):\n * - For `line`/`offset`/`point`, pointer visuals are shown when `hasPointer` is true.\n * - Checked-like values also force inline pointer visuals for non-`outside` types.\n * - For `outside`, `hasPointer` controls outside-arrow visibility.\n * - `pointerType` (default: `null`, enum `point | button | camera`):\n * - Used when not in checked-like state and not `enabled`.\n * - Otherwise resolves to `point` for consistent selected/enabled behavior.\n * - `pointerState` (default: `null`, enum `regular | selected | active | uncertain`):\n * - Checked-like non-`outside` values resolve to `selected`.\n * - Otherwise falls back to provided `pointerState` or `regular`.\n *\n * Motion and layout notes:\n * - `animatePosition` (default: `false`): when true, enables short position transition timing for line/pointer movement.\n * - `x` (default: `0`): host horizontal position; sets `--obc-poi-x` as `${x}px`.\n * - `y` (default: `96`): absolute local target Y; non-finite values fall back to `0` in geometry calculations.\n * - `buttonY` (default: `0`): when `fixedTarget=false`, anchors the button at its local Y while the target is derived below it from `y`; when `fixedTarget=true`, preserves the legacy host-anchor behavior.\n * - `buttonOffsetX`/`targetOffsetX` (defaults: `0`/`0`): define connector bend delta via `targetOffsetX - buttonOffsetX`.\n * - `boxWidth`/`boxHeight` (defaults: `null`/`null`): optional pointer frame size extras; invalid/non-finite values are ignored.\n * - `outsideAngle` (default: `315`): controls outside-arrow direction in `outside` mode.\n *\n * ## Usage Guidelines\n *\n * - Use `type=\"line\"` or `type=\"offset\"` when the button should connect to a remote target.\n * - Use `type=\"point\"` for near-target placements where connector emphasis should be minimal.\n * - Use `type=\"outside\"` with `hasPointer` for off-screen or directional guidance.\n * - Keep `value`, `state`, and `selected` aligned with domain state so visual semantics stay consistent.\n * - Provide finite numbers for layout props (`x`, `y`, `buttonY`, offsets) for predictable placement.\n *\n * ## Slots/Content\n *\n * - Default slot: Main icon/content rendered inside `obc-poi-button`.\n * - `header`: Optional custom header content rendered above the POI object.\n *\n * ## Events\n *\n * This component does not emit custom events.\n *\n * ## Best Practices\n *\n * - Pass finite numeric values for layout properties to avoid fallback-to-zero behavior.\n * - Enable `animatePosition` only for intentional motion transitions and moving targets.\n * - Prefer enum values for `type`, `value`, `state`, `pointerType`, and `pointerState`.\n *\n * ## Example\n *\n * ```html\n * <obc-poi type=\"line\" value=\"unchecked\" state=\"enabled\">\n * <obi-placeholder></obi-placeholder>\n * </obc-poi>\n * ```\n *\n * @slot - Default POI button content.\n * @slot header - Optional custom header content.\n * @experimental\n */\n@customElement('obc-poi')\nexport class ObcPoi extends LitElement {\n @property({type: String}) type: ObcPoiType = ObcPoiType.Line;\n @property({type: String}) value: ObcPoiValue = ObcPoiValue.Unchecked;\n @property({type: String}) state: ObcPoiState = ObcPoiState.Enabled;\n @property({type: Boolean}) selected = false;\n @property({type: String}) buttonType = ObcPoiButtonType.Button;\n /** @availableWhen value==overlapped */\n @property({type: Boolean, attribute: 'overlap-opaque'})\n overlapOpaque = false;\n @property({type: Array, attribute: false}) data: ObcPoiButtonDataItem[] = [];\n @property({type: Boolean, attribute: 'has-header'}) hasHeader = false;\n /** @availableWhen hasHeader==true */\n @property({type: String, attribute: 'header-content'}) headerContent = '';\n @property({type: Boolean}) hasPointer = false;\n /** @availableWhen hasPointer==true && type in [Line, Offset, Point] && value!=checked && value!=activated && state!=enabled */\n @property({type: String, attribute: 'pointer-type'})\n pointerType: ObcPoiPointerType | null = null;\n /** @availableWhen hasPointer==true && type in [Line, Offset, Point] && value!=checked && value!=activated */\n @property({type: String, attribute: 'pointer-state'})\n pointerState: ObcPoiPointerState | null = null;\n @property({type: Number}) relativeDirection = 0;\n @property({type: Number}) x = 0;\n @property({type: Number}) y = DEFAULT_LINE_LENGTH_PX;\n @property({type: Number, attribute: 'button-y'}) buttonY: number | null = 0;\n @property({type: Boolean, attribute: 'fixed-target'}) fixedTarget = false;\n @property({type: Number, attribute: 'button-offset-x'}) buttonOffsetX = 0;\n /** @availableWhen type in [Line, Offset] */\n @property({type: Number, attribute: 'target-offset-x'}) targetOffsetX = 0;\n @property({type: Number, attribute: 'box-width'}) boxWidth: number | null =\n null;\n @property({type: Number, attribute: 'box-height'}) boxHeight: number | null =\n null;\n /** @availableWhen type==outside && hasPointer==true */\n @property({type: Number, attribute: 'outside-angle'}) outsideAngle = 315;\n @property({type: Boolean, attribute: 'animate-position'})\n animatePosition = false;\n private headerObserver?: MutationObserver;\n\n override connectedCallback() {\n super.connectedCallback();\n this.setupHeaderObserver();\n }\n\n override disconnectedCallback() {\n super.disconnectedCallback();\n this.headerObserver?.disconnect();\n this.headerObserver = undefined;\n }\n\n private setupHeaderObserver() {\n this.headerObserver?.disconnect();\n this.headerObserver = new MutationObserver((mutations) => {\n for (const mutation of mutations) {\n if (mutation.type === 'childList') {\n this.syncFallbackButtonHeaderContent();\n this.syncAttachedHeaderState();\n return;\n }\n if (\n mutation.type === 'attributes' &&\n mutation.target instanceof HTMLElement &&\n mutation.target.getAttribute('slot') === 'header'\n ) {\n this.syncFallbackButtonHeaderContent();\n this.syncAttachedHeaderState();\n return;\n }\n }\n });\n this.headerObserver.observe(this, {\n childList: true,\n attributes: true,\n attributeFilter: ['slot'],\n });\n }\n\n private updatePosition() {\n this.style.removeProperty('top');\n if (this.fixedTarget) {\n this.style.removeProperty('--obc-poi-button-y');\n if (Number.isFinite(this.resolvedButtonY)) {\n this.style.setProperty(\n '--obc-poi-y',\n `${this.resolvedButtonY - this.resolvedTargetY}px`\n );\n } else {\n this.style.removeProperty('--obc-poi-y');\n }\n } else if (Number.isFinite(this.resolvedButtonY)) {\n this.style.setProperty('--obc-poi-y', `${this.resolvedButtonY}px`);\n this.style.setProperty('--obc-poi-button-y', '0px');\n } else {\n this.style.removeProperty('--obc-poi-y');\n this.style.removeProperty('--obc-poi-button-y');\n }\n }\n\n private get isCheckedLike(): boolean {\n return (\n this.value === ObcPoiValue.Checked || this.value === ObcPoiValue.Activated\n );\n }\n\n protected get buttonVisualState(): PoiButtonVisualState {\n switch (this.value) {\n case ObcPoiValue.Unchecked:\n return PoiButtonVisualState.Unchecked;\n case ObcPoiValue.Checked:\n return PoiButtonVisualState.Checked;\n case ObcPoiValue.Activated:\n return PoiButtonVisualState.Activated;\n case ObcPoiValue.Overlapped:\n return PoiButtonVisualState.Overlapped;\n default:\n return PoiButtonVisualState.Unchecked;\n }\n }\n\n protected get buttonState(): ObcPoiButtonState {\n switch (this.state) {\n case ObcPoiState.Caution:\n return ObcPoiButtonState.Caution;\n case ObcPoiState.Warning:\n return ObcPoiButtonState.Warning;\n case ObcPoiState.Alarm:\n return ObcPoiButtonState.Alarm;\n case ObcPoiState.Enabled:\n default:\n return ObcPoiButtonState.Enabled;\n }\n }\n\n private get resolvedHeaderState(): ObcPoiHeaderState {\n switch (this.buttonState) {\n case ObcPoiButtonState.Caution:\n return ObcPoiHeaderState.Caution;\n case ObcPoiButtonState.Warning:\n return ObcPoiHeaderState.Warning;\n case ObcPoiButtonState.Alarm:\n return ObcPoiHeaderState.Alarm;\n case ObcPoiButtonState.Enabled:\n default:\n return this.selected\n ? ObcPoiHeaderState.Selected\n : ObcPoiHeaderState.Enabled;\n }\n }\n\n private get lineStyle(): POIStyle {\n if (this.state === ObcPoiState.Alarm) {\n return POIStyle.Alarm;\n }\n if (this.state === ObcPoiState.Warning) {\n return POIStyle.Warning;\n }\n if (this.state === ObcPoiState.Caution) {\n return POIStyle.Caution;\n }\n if (this.selected) {\n return POIStyle.Selected;\n }\n return POIStyle.Regular;\n }\n\n private get pointerSelected(): boolean {\n return this.isCheckedLike;\n }\n\n /** Public `y` normalized as the target Y input. */\n private get resolvedTargetY(): number {\n return Number.isFinite(this.y) ? this.y : 0;\n }\n\n /** Public `buttonY` normalized as the button Y input. */\n private get resolvedButtonY(): number {\n return typeof this.buttonY === 'number' && Number.isFinite(this.buttonY)\n ? this.buttonY\n : 0;\n }\n\n private get buttonProjectionY(): number {\n const raw = getComputedStyle(this).getPropertyValue(\n '--obc-poi-button-projection-y'\n );\n const parsed = Number.parseFloat(raw);\n return Number.isFinite(parsed) ? parsed : 0;\n }\n\n private get targetProjectionY(): number {\n const raw = getComputedStyle(this).getPropertyValue(\n '--obc-poi-target-projection-y'\n );\n const parsed = Number.parseFloat(raw);\n return Number.isFinite(parsed) ? parsed : 0;\n }\n\n private get lineOffset(): number {\n if (this.type === ObcPoiType.Point || this.type === ObcPoiType.Outside) {\n return 0;\n }\n\n const targetOffsetX = Number.isFinite(this.targetOffsetX)\n ? this.targetOffsetX\n : 0;\n const buttonOffsetX = Number.isFinite(this.buttonOffsetX)\n ? this.buttonOffsetX\n : 0;\n const lineOffset = targetOffsetX - buttonOffsetX;\n return Number.isFinite(lineOffset) ? lineOffset : 0;\n }\n\n private get hasInlinePointer(): boolean {\n if (this.isCheckedLike && this.type !== ObcPoiType.Outside) {\n return true;\n }\n\n if (!this.hasPointer) return false;\n return (\n this.type === ObcPoiType.Line ||\n this.type === ObcPoiType.Offset ||\n this.type === ObcPoiType.Point\n );\n }\n\n private get resolvedPointerType(): ObcPoiPointerType {\n if (this.isCheckedLike || this.state === ObcPoiState.Enabled) {\n return ObcPoiPointerType.Point;\n }\n\n return this.pointerType ?? ObcPoiPointerType.Point;\n }\n\n private get resolvedPointerState(): ObcPoiPointerState {\n if (this.isCheckedLike && this.type !== ObcPoiType.Outside) {\n return ObcPoiPointerState.Selected;\n }\n\n if (this.pointerState) {\n return this.pointerState;\n }\n\n return ObcPoiPointerState.Regular;\n }\n\n private get pointerBoxWidthExtra(): number | null {\n if (this.boxWidth === null) {\n return null;\n }\n\n const width = Number(this.boxWidth);\n if (!Number.isFinite(width)) {\n return null;\n }\n\n return Math.max(0, width - POINTER_BOX_BASE_SIZE_PX);\n }\n\n private get pointerBoxHeightExtra(): number | null {\n if (this.boxHeight === null) {\n return null;\n }\n\n const height = Number(this.boxHeight);\n if (!Number.isFinite(height)) {\n return null;\n }\n\n return Math.max(0, height - POINTER_BOX_BASE_SIZE_PX);\n }\n\n private renderLine() {\n if (this.type === ObcPoiType.Outside) {\n return nothing;\n }\n\n if (\n this.type === ObcPoiType.Point &&\n (this.isCheckedLike || this.state === ObcPoiState.Alarm)\n ) {\n return nothing;\n }\n\n const fallbackTargetDelta =\n this.type === ObcPoiType.Point\n ? 0\n : Math.max(\n 0,\n Math.abs(\n this.targetAnchorY +\n this.targetProjectionY -\n this.buttonProjectionY\n )\n );\n return html`\n <obc-poi-line\n class=\"line\"\n style=\"--obc-poi-line-projection-y: ${this.buttonProjectionY}px;\"\n .poiStyle=${this.lineStyle}\n .height=${fallbackTargetDelta}\n .offset=${this.lineOffset}\n .hasPointer=${false}\n .animatePosition=${this.animatePosition}\n ></obc-poi-line>\n `;\n }\n\n private renderInlinePointer() {\n if (!this.hasInlinePointer) {\n return nothing;\n }\n\n return html`\n <obc-poi-pointer\n class=\"pointer\"\n style=\"--obc-poi-pointer-x: ${this\n .lineOffset}px; --obc-poi-pointer-y: ${this.targetAnchorY +\n this.targetProjectionY}px;\"\n .type=${this.resolvedPointerType}\n .state=${this.resolvedPointerState}\n .boxWidth=${this.pointerBoxWidthExtra}\n .boxHeight=${this.pointerBoxHeightExtra}\n ></obc-poi-pointer>\n `;\n }\n\n private renderOutsideArrow() {\n if (this.type !== ObcPoiType.Outside || !this.hasPointer) {\n return nothing;\n }\n\n const touchTarget = this.buttonType === ObcPoiButtonType.Enhanced ? 64 : 48;\n const radius = touchTarget / Math.SQRT2;\n const baseCenterYOffset = -touchTarget / 2;\n const angle = (this.outsideAngle * Math.PI) / 180;\n const xOffset = Math.cos(angle) * radius;\n const yOffset = baseCenterYOffset + Math.sin(angle) * radius;\n const value = this.pointerSelected ? 'checked' : 'unchecked';\n return html`<div\n class=\"outside-arrow\"\n style=\"--obc-poi-outside-arrow-x: ${xOffset}px; --obc-poi-outside-arrow-y: ${yOffset}px; --obc-poi-outside-arrow-angle: ${this\n .outsideAngle}deg;\"\n >\n ${poiArrow(value)}\n </div>`;\n }\n\n /* ---------- Slotted button sync ---------- */\n\n private slottedButton: HTMLElement | null = null;\n private get targetAnchorY(): number {\n const targetDelta = this.resolvedTargetY - this.resolvedButtonY;\n return this.type === ObcPoiType.Point\n ? Math.max(POINT_POINTER_OFFSET_PX, targetDelta)\n : targetDelta;\n }\n\n private handleButtonSlotChange(e: Event) {\n const slot = e.target as HTMLSlotElement;\n const assigned = slot.assignedElements({flatten: false});\n this.slottedButton =\n assigned.length > 0 ? (assigned[0] as HTMLElement) : null;\n this.syncFallbackButtonHeaderContent();\n this.syncSlottedButtonProps();\n }\n\n private syncFallbackButtonHeaderContent() {\n if (this.slottedButton) {\n return;\n }\n\n const button = this.renderRoot.querySelector(\n 'obc-poi-button.poi-button'\n ) as HTMLElement | null;\n if (!button) {\n return;\n }\n\n for (const child of Array.from(this.children)) {\n if (\n !(child instanceof HTMLElement) ||\n child.getAttribute('slot') !== 'header'\n ) {\n continue;\n }\n if (child.parentElement !== button) {\n button.appendChild(child);\n }\n this.applyHeaderState(child);\n }\n }\n\n private applyHeaderState(root: ParentNode) {\n const headers = [\n ...(root instanceof Element && root.matches('obc-poi-header')\n ? [root]\n : []),\n ...root.querySelectorAll('obc-poi-header'),\n ] as HTMLElement[];\n\n for (const header of headers) {\n (header as {state?: ObcPoiHeaderState}).state = this.resolvedHeaderState;\n header.setAttribute('state', this.resolvedHeaderState);\n }\n }\n\n private syncAttachedHeaderState() {\n this.applyHeaderState(this.renderRoot);\n }\n\n private syncSlottedButtonProps() {\n const btn = this.slottedButton;\n if (!btn) return;\n\n const props = btn as unknown as Record<string, unknown>;\n props.layout = 'inline';\n props.relativeDirection = this.relativeDirection;\n props.selected = this.selected;\n props.hasHeader = this.hasHeader;\n props.headerContent = this.headerContent;\n props.state = this.buttonState;\n props.value = this.buttonVisualState;\n props.overlapOpaque = this.overlapOpaque;\n props.type = this.buttonType;\n props.data = this.data;\n }\n\n private renderPoiButton() {\n return html`\n <slot name=\"button\" @slotchange=${this.handleButtonSlotChange}>\n <obc-poi-button\n layout=\"inline\"\n class=\"poi-button\"\n .relativeDirection=${this.relativeDirection}\n .selected=${this.selected}\n .hasHeader=${this.hasHeader}\n .headerContent=${this.headerContent}\n .state=${this.buttonState}\n .value=${this.buttonVisualState}\n .overlapOpaque=${this.overlapOpaque}\n .type=${this.buttonType}\n .data=${this.data}\n >\n <slot></slot>\n </obc-poi-button>\n </slot>\n `;\n }\n\n public refreshProjectionLayout(_trackDurationMs = 0) {\n this.requestUpdate();\n }\n\n override render() {\n const classes = {\n wrapper: true,\n [`type-${this.type}`]: true,\n [`button-${this.buttonType}`]: true,\n [`value-${this.value}`]: true,\n [`state-${this.state}`]: true,\n 'has-data': this.data.length > 0,\n 'no-motion': !this.animatePosition,\n };\n\n const wrapperStyle =\n this.buttonOffsetX !== 0\n ? {'--obc-poi-target-top-offset-x': `${this.buttonOffsetX}px`}\n : {};\n\n return html`\n <div class=${classMap(classes)} style=${styleMap(wrapperStyle)}>\n ${this.renderPoiButton()} ${this.renderLine()}\n ${this.renderInlinePointer()} ${this.renderOutsideArrow()}\n </div>\n `;\n }\n\n protected override firstUpdated(_changedProperties: Map<string, unknown>) {\n this.syncFallbackButtonHeaderContent();\n this.syncAttachedHeaderState();\n }\n\n protected override updated(changedProperties: Map<string, unknown>) {\n super.updated(changedProperties);\n if (changedProperties.has('x')) {\n this.style.removeProperty('left');\n this.style.setProperty('--obc-poi-x', `${this.x}px`);\n }\n if (\n changedProperties.has('buttonY') ||\n changedProperties.has('y') ||\n changedProperties.has('fixedTarget')\n ) {\n this.updatePosition();\n }\n this.syncFallbackButtonHeaderContent();\n this.syncSlottedButtonProps();\n this.syncAttachedHeaderState();\n }\n\n static override styles = unsafeCSS(componentStyle);\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'obc-poi': ObcPoi;\n }\n}\n"],"names":["PoiDataVisualRectPreference","ObcPoiType","ObcPoiValue","ObcPoiState"],"mappings":"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"}
1
+ {"version":3,"file":"poi.js","sources":["../../../src/ar/poi/poi.ts"],"sourcesContent":["import {LitElement, html, nothing, unsafeCSS} from 'lit';\nimport {property} from 'lit/decorators.js';\nimport {classMap} from 'lit/directives/class-map.js';\nimport {styleMap} from 'lit/directives/style-map.js';\nimport componentStyle from './poi.css?inline';\nimport '../poi-button/poi-button.js';\nimport {\n ObcPoiButtonType,\n ObcPoiButtonDataItem,\n ObcPoiButtonState,\n PoiButtonVisualState,\n} from '../poi-button/poi-button.js';\nimport {ObcPoiHeaderState} from '../building-blocks/poi-header/poi-header.js';\nimport {POIStyle} from '../building-blocks/poi-graphic-line/poi-graphic-line.js';\nimport {poiArrow} from './arrow.js';\nimport '../building-blocks/poi-line/poi-line.js';\nimport '../building-blocks/poi-pointer/poi-pointer.js';\nimport {\n ObcPoiPointerState,\n ObcPoiPointerType,\n} from '../building-blocks/poi-pointer/poi-pointer.js';\nimport {customElement} from '../../decorator.js';\n\n/* ---------- Poi interface & helpers ---------- */\n\nexport enum PoiDataVisualRectPreference {\n Largest = 'largest',\n Group = 'group',\n Anchor = 'anchor',\n Size = 'size',\n}\n\nexport const POI_ATTR = 'data-poi-target';\n\ntype PoiVisualElementPreference =\n | PoiDataVisualRectPreference.Group\n | PoiDataVisualRectPreference.Anchor\n | PoiDataVisualRectPreference.Size;\n\n/**\n * Minimum contract for any element that can participate in\n * `obc-poi-layer` grouping / overlap / crossing / stack selection.\n *\n * Implement this interface and set `data-poi-target` on the host\n * element in `connectedCallback` to make a component layer-compatible.\n */\nexport interface Poi extends HTMLElement {\n /* Position — required by layer for positioning and grouping */\n x: number;\n y: number;\n buttonOffsetX: number;\n targetOffsetX: number;\n fixedTarget: boolean;\n\n /* State — read/written by layer and stack */\n selected: boolean;\n value: string;\n\n /* Visual query — used by layer for rect-based grouping */\n getVisualRect(preference: PoiDataVisualRectPreference): DOMRect;\n getVisualElement(preference: PoiVisualElementPreference): HTMLElement;\n getPointerElement(): HTMLElement | null;\n\n /* Optional — layer/group code guards access before using */\n buttonY?: number | null;\n buttonType?: string;\n data?: unknown[];\n hasHeader?: boolean;\n headerContent?: string;\n animatePosition?: boolean;\n refreshProjectionLayout?: (trackDurationMs?: number) => void;\n setRuntimeHorizontalOffsets?: (\n buttonOffsetX: number,\n targetOffsetX?: number\n ) => void;\n}\n\nexport function isPoi(el: Element): el is Poi {\n return el.hasAttribute(POI_ATTR);\n}\n\n/* ---------- ObcPoi enums ---------- */\n\nexport enum ObcPoiType {\n Line = 'line',\n Offset = 'offset',\n Point = 'point',\n Outside = 'outside',\n}\n\nexport enum ObcPoiValue {\n Unchecked = 'unchecked',\n Checked = 'checked',\n Activated = 'activated',\n Overlapped = 'overlapped',\n}\n\nexport enum ObcPoiState {\n Enabled = 'enabled',\n Caution = 'caution',\n Warning = 'warning',\n Alarm = 'alarm',\n}\n\nconst DEFAULT_LINE_LENGTH_PX = 96;\nconst POINTER_BOX_BASE_SIZE_PX = 32;\nconst POINT_POINTER_OFFSET_PX = 12;\n\n/**\n * `<obc-poi>` - Composite marker component that renders a target button with connector and pointer visuals.\n *\n * ## Overview\n * Combines `obc-poi-button`, `obc-poi-line`, and optional pointer visuals to display\n * interactive marker/callout targets in line, offset, point, or outside modes.\n * Keywords: marker, callout, pin, label, target, pointer.\n *\n * ## Features/Variants\n *\n * Configuration defaults and behavior:\n * - `type` (default: `line`):\n * - `line`: renders a vertical connector line from button to target.\n * - `offset`: renders a bent connector using `targetOffsetX - buttonOffsetX`.\n * - `point`: suppresses long connector behavior (line can collapse/skip based on state).\n * - `outside`: suppresses connector line; outside arrow is rendered when `hasPointer` is true.\n * - `value` (default: `unchecked`):\n * - `unchecked`: default visual state.\n * - `checked`: selected-like visual and pointer behavior.\n * - `activated`: activated button visual state with selected-like pointer behavior.\n * - `overlapped`: compact overlap visual state.\n * - `overlapOpaque` (default: `false`): controls overlapped opacity mode (`false` = translucent, `true` = opaque).\n * - `state` (default: `enabled`):\n * - `enabled`: neutral alert ring and regular line style.\n * - `caution`/`warning`/`alarm`: applies alert-specific button/line styling.\n * - In `enabled`, pointer type resolution defaults to point.\n * - `selected` (default: `false`): enables selected emphasis semantics (for example selected line style when not in alert state).\n * - `hasPointer` (default: `false`):\n * - For `line`/`offset`/`point`, pointer visuals are shown when `hasPointer` is true.\n * - Checked-like values also force inline pointer visuals for non-`outside` types.\n * - For `outside`, `hasPointer` controls outside-arrow visibility.\n * - `pointerType` (default: `null`, enum `point | button | camera`):\n * - Used when not in checked-like state and not `enabled`.\n * - Otherwise resolves to `point` for consistent selected/enabled behavior.\n * - `pointerState` (default: `null`, enum `regular | selected | active | uncertain`):\n * - Checked-like non-`outside` values resolve to `selected`.\n * - Otherwise falls back to provided `pointerState` or `regular`.\n *\n * Motion and layout notes:\n * - `animatePosition` (default: `false`): when true, enables short position transition timing for line/pointer movement.\n * - `x` (default: `0`): host horizontal position; sets `--obc-poi-x` as `${x}px`.\n * - `y` (default: `96`): absolute local target Y; non-finite values fall back to `0` in geometry calculations.\n * - `buttonY` (default: `0`): when `fixedTarget=false`, anchors the button at its local Y while the target is derived below it from `y`; when `fixedTarget=true`, preserves the legacy host-anchor behavior.\n * - `buttonOffsetX`/`targetOffsetX` (defaults: `0`/`0`): define connector bend delta via `targetOffsetX - buttonOffsetX`.\n * - `boxWidth`/`boxHeight` (defaults: `null`/`null`): optional pointer frame size extras; invalid/non-finite values are ignored.\n * - `outsideAngle` (default: `315`): controls outside-arrow direction in `outside` mode.\n *\n * ## Usage Guidelines\n *\n * - Use `type=\"line\"` or `type=\"offset\"` when the button should connect to a remote target.\n * - Use `type=\"point\"` for near-target placements where connector emphasis should be minimal.\n * - Use `type=\"outside\"` with `hasPointer` for off-screen or directional guidance.\n * - Keep `value`, `state`, and `selected` aligned with domain state so visual semantics stay consistent.\n * - Provide finite numbers for layout props (`x`, `y`, `buttonY`, offsets) for predictable placement.\n *\n * ## Slots/Content\n *\n * - Default slot: Main icon/content rendered inside `obc-poi-button`.\n * - `button`: Optional custom button element replacing the default `obc-poi-button`.\n * - `header`: Optional header content. Relocated into the inner `obc-poi-button` at runtime by a `MutationObserver` (there is no `<slot name=\"header\">` element).\n *\n * ## Events\n *\n * This component does not emit custom events.\n *\n * ## Best Practices\n *\n * - Pass finite numeric values for layout properties to avoid fallback-to-zero behavior.\n * - Enable `animatePosition` only for intentional motion transitions and moving targets.\n * - Prefer enum values for `type`, `value`, `state`, `pointerType`, and `pointerState`.\n *\n * ## Example\n *\n * ```html\n * <obc-poi type=\"line\" value=\"unchecked\" state=\"enabled\">\n * <obi-placeholder></obi-placeholder>\n * </obc-poi>\n * ```\n *\n * @slot - Default POI button content.\n * @slot button - Optional custom button element replacing the default `obc-poi-button`.\n * @slot header - Optional header content, relocated into the inner `obc-poi-button` at runtime.\n * @experimental\n */\n@customElement('obc-poi')\nexport class ObcPoi extends LitElement {\n @property({type: String}) type: ObcPoiType = ObcPoiType.Line;\n @property({type: String}) value: ObcPoiValue = ObcPoiValue.Unchecked;\n @property({type: String}) state: ObcPoiState = ObcPoiState.Enabled;\n @property({type: Boolean}) selected = false;\n @property({type: String}) buttonType = ObcPoiButtonType.Button;\n /** @availableWhen value==overlapped */\n @property({type: Boolean, attribute: 'overlap-opaque'})\n overlapOpaque = false;\n @property({type: Array, attribute: false}) data: ObcPoiButtonDataItem[] = [];\n @property({type: Boolean, attribute: 'has-header'}) hasHeader = false;\n /** @availableWhen hasHeader==true */\n @property({type: String, attribute: 'header-content'}) headerContent = '';\n @property({type: Boolean}) hasPointer = false;\n /** @availableWhen hasPointer==true && type in [Line, Offset, Point] && value!=checked && value!=activated && state!=enabled */\n @property({type: String, attribute: 'pointer-type'})\n pointerType: ObcPoiPointerType | null = null;\n /** @availableWhen hasPointer==true && type in [Line, Offset, Point] && value!=checked && value!=activated */\n @property({type: String, attribute: 'pointer-state'})\n pointerState: ObcPoiPointerState | null = null;\n @property({type: Number}) relativeDirection = 0;\n @property({type: Number}) x = 0;\n @property({type: Number}) y = DEFAULT_LINE_LENGTH_PX;\n @property({type: Number, attribute: 'button-y'}) buttonY: number | null = 0;\n @property({type: Boolean, attribute: 'fixed-target'}) fixedTarget = false;\n @property({type: Number, attribute: 'button-offset-x'}) buttonOffsetX = 0;\n /** @availableWhen type in [Line, Offset] */\n @property({type: Number, attribute: 'target-offset-x'}) targetOffsetX = 0;\n @property({type: Number, attribute: 'box-width'}) boxWidth: number | null =\n null;\n @property({type: Number, attribute: 'box-height'}) boxHeight: number | null =\n null;\n /** @availableWhen type==outside && hasPointer==true */\n @property({type: Number, attribute: 'outside-angle'}) outsideAngle = 315;\n @property({type: Boolean, attribute: 'animate-position'})\n animatePosition = false;\n private headerObserver?: MutationObserver;\n\n override connectedCallback() {\n super.connectedCallback();\n this.setupHeaderObserver();\n }\n\n override disconnectedCallback() {\n super.disconnectedCallback();\n this.headerObserver?.disconnect();\n this.headerObserver = undefined;\n }\n\n private setupHeaderObserver() {\n this.headerObserver?.disconnect();\n this.headerObserver = new MutationObserver((mutations) => {\n for (const mutation of mutations) {\n if (mutation.type === 'childList') {\n this.syncFallbackButtonHeaderContent();\n this.syncAttachedHeaderState();\n return;\n }\n if (\n mutation.type === 'attributes' &&\n mutation.target instanceof HTMLElement &&\n mutation.target.getAttribute('slot') === 'header'\n ) {\n this.syncFallbackButtonHeaderContent();\n this.syncAttachedHeaderState();\n return;\n }\n }\n });\n this.headerObserver.observe(this, {\n childList: true,\n attributes: true,\n attributeFilter: ['slot'],\n });\n }\n\n private updatePosition() {\n this.style.removeProperty('top');\n if (this.fixedTarget) {\n this.style.removeProperty('--obc-poi-button-y');\n if (Number.isFinite(this.resolvedButtonY)) {\n this.style.setProperty(\n '--obc-poi-y',\n `${this.resolvedButtonY - this.resolvedTargetY}px`\n );\n } else {\n this.style.removeProperty('--obc-poi-y');\n }\n } else if (Number.isFinite(this.resolvedButtonY)) {\n this.style.setProperty('--obc-poi-y', `${this.resolvedButtonY}px`);\n this.style.setProperty('--obc-poi-button-y', '0px');\n } else {\n this.style.removeProperty('--obc-poi-y');\n this.style.removeProperty('--obc-poi-button-y');\n }\n }\n\n private get isCheckedLike(): boolean {\n return (\n this.value === ObcPoiValue.Checked || this.value === ObcPoiValue.Activated\n );\n }\n\n protected get buttonVisualState(): PoiButtonVisualState {\n switch (this.value) {\n case ObcPoiValue.Unchecked:\n return PoiButtonVisualState.Unchecked;\n case ObcPoiValue.Checked:\n return PoiButtonVisualState.Checked;\n case ObcPoiValue.Activated:\n return PoiButtonVisualState.Activated;\n case ObcPoiValue.Overlapped:\n return PoiButtonVisualState.Overlapped;\n default:\n return PoiButtonVisualState.Unchecked;\n }\n }\n\n protected get buttonState(): ObcPoiButtonState {\n switch (this.state) {\n case ObcPoiState.Caution:\n return ObcPoiButtonState.Caution;\n case ObcPoiState.Warning:\n return ObcPoiButtonState.Warning;\n case ObcPoiState.Alarm:\n return ObcPoiButtonState.Alarm;\n case ObcPoiState.Enabled:\n default:\n return ObcPoiButtonState.Enabled;\n }\n }\n\n private get resolvedHeaderState(): ObcPoiHeaderState {\n switch (this.buttonState) {\n case ObcPoiButtonState.Caution:\n return ObcPoiHeaderState.Caution;\n case ObcPoiButtonState.Warning:\n return ObcPoiHeaderState.Warning;\n case ObcPoiButtonState.Alarm:\n return ObcPoiHeaderState.Alarm;\n case ObcPoiButtonState.Enabled:\n default:\n return this.selected\n ? ObcPoiHeaderState.Selected\n : ObcPoiHeaderState.Enabled;\n }\n }\n\n private get lineStyle(): POIStyle {\n if (this.state === ObcPoiState.Alarm) {\n return POIStyle.Alarm;\n }\n if (this.state === ObcPoiState.Warning) {\n return POIStyle.Warning;\n }\n if (this.state === ObcPoiState.Caution) {\n return POIStyle.Caution;\n }\n if (this.selected) {\n return POIStyle.Selected;\n }\n return POIStyle.Regular;\n }\n\n private get pointerSelected(): boolean {\n return this.isCheckedLike;\n }\n\n /** Public `y` normalized as the target Y input. */\n private get resolvedTargetY(): number {\n return Number.isFinite(this.y) ? this.y : 0;\n }\n\n /** Public `buttonY` normalized as the button Y input. */\n private get resolvedButtonY(): number {\n return typeof this.buttonY === 'number' && Number.isFinite(this.buttonY)\n ? this.buttonY\n : 0;\n }\n\n private get buttonProjectionY(): number {\n const raw = getComputedStyle(this).getPropertyValue(\n '--obc-poi-button-projection-y'\n );\n const parsed = Number.parseFloat(raw);\n return Number.isFinite(parsed) ? parsed : 0;\n }\n\n private get targetProjectionY(): number {\n const raw = getComputedStyle(this).getPropertyValue(\n '--obc-poi-target-projection-y'\n );\n const parsed = Number.parseFloat(raw);\n return Number.isFinite(parsed) ? parsed : 0;\n }\n\n private get lineOffset(): number {\n if (this.type === ObcPoiType.Point || this.type === ObcPoiType.Outside) {\n return 0;\n }\n\n const targetOffsetX = Number.isFinite(this.targetOffsetX)\n ? this.targetOffsetX\n : 0;\n const buttonOffsetX = Number.isFinite(this.buttonOffsetX)\n ? this.buttonOffsetX\n : 0;\n const lineOffset = targetOffsetX - buttonOffsetX;\n return Number.isFinite(lineOffset) ? lineOffset : 0;\n }\n\n private get hasInlinePointer(): boolean {\n if (this.isCheckedLike && this.type !== ObcPoiType.Outside) {\n return true;\n }\n\n if (!this.hasPointer) return false;\n return (\n this.type === ObcPoiType.Line ||\n this.type === ObcPoiType.Offset ||\n this.type === ObcPoiType.Point\n );\n }\n\n private get resolvedPointerType(): ObcPoiPointerType {\n if (this.isCheckedLike || this.state === ObcPoiState.Enabled) {\n return ObcPoiPointerType.Point;\n }\n\n return this.pointerType ?? ObcPoiPointerType.Point;\n }\n\n private get resolvedPointerState(): ObcPoiPointerState {\n if (this.isCheckedLike && this.type !== ObcPoiType.Outside) {\n return ObcPoiPointerState.Selected;\n }\n\n if (this.pointerState) {\n return this.pointerState;\n }\n\n return ObcPoiPointerState.Regular;\n }\n\n private get pointerBoxWidthExtra(): number | null {\n if (this.boxWidth === null) {\n return null;\n }\n\n const width = Number(this.boxWidth);\n if (!Number.isFinite(width)) {\n return null;\n }\n\n return Math.max(0, width - POINTER_BOX_BASE_SIZE_PX);\n }\n\n private get pointerBoxHeightExtra(): number | null {\n if (this.boxHeight === null) {\n return null;\n }\n\n const height = Number(this.boxHeight);\n if (!Number.isFinite(height)) {\n return null;\n }\n\n return Math.max(0, height - POINTER_BOX_BASE_SIZE_PX);\n }\n\n private renderLine() {\n if (this.type === ObcPoiType.Outside) {\n return nothing;\n }\n\n if (\n this.type === ObcPoiType.Point &&\n (this.isCheckedLike || this.state === ObcPoiState.Alarm)\n ) {\n return nothing;\n }\n\n const fallbackTargetDelta =\n this.type === ObcPoiType.Point\n ? 0\n : Math.max(\n 0,\n Math.abs(\n this.targetAnchorY +\n this.targetProjectionY -\n this.buttonProjectionY\n )\n );\n return html`\n <obc-poi-line\n class=\"line\"\n style=\"--obc-poi-line-projection-y: ${this.buttonProjectionY}px;\"\n .poiStyle=${this.lineStyle}\n .height=${fallbackTargetDelta}\n .offset=${this.lineOffset}\n .hasPointer=${false}\n .animatePosition=${this.animatePosition}\n ></obc-poi-line>\n `;\n }\n\n private renderInlinePointer() {\n if (!this.hasInlinePointer) {\n return nothing;\n }\n\n return html`\n <obc-poi-pointer\n class=\"pointer\"\n style=\"--obc-poi-pointer-x: ${this\n .lineOffset}px; --obc-poi-pointer-y: ${this.targetAnchorY +\n this.targetProjectionY}px;\"\n .type=${this.resolvedPointerType}\n .state=${this.resolvedPointerState}\n .boxWidth=${this.pointerBoxWidthExtra}\n .boxHeight=${this.pointerBoxHeightExtra}\n ></obc-poi-pointer>\n `;\n }\n\n private renderOutsideArrow() {\n if (this.type !== ObcPoiType.Outside || !this.hasPointer) {\n return nothing;\n }\n\n const touchTarget = this.buttonType === ObcPoiButtonType.Enhanced ? 64 : 48;\n const radius = touchTarget / Math.SQRT2;\n const baseCenterYOffset = -touchTarget / 2;\n const angle = (this.outsideAngle * Math.PI) / 180;\n const xOffset = Math.cos(angle) * radius;\n const yOffset = baseCenterYOffset + Math.sin(angle) * radius;\n const value = this.pointerSelected ? 'checked' : 'unchecked';\n return html`<div\n class=\"outside-arrow\"\n style=\"--obc-poi-outside-arrow-x: ${xOffset}px; --obc-poi-outside-arrow-y: ${yOffset}px; --obc-poi-outside-arrow-angle: ${this\n .outsideAngle}deg;\"\n >\n ${poiArrow(value)}\n </div>`;\n }\n\n /* ---------- Slotted button sync ---------- */\n\n private slottedButton: HTMLElement | null = null;\n private get targetAnchorY(): number {\n const targetDelta = this.resolvedTargetY - this.resolvedButtonY;\n return this.type === ObcPoiType.Point\n ? Math.max(POINT_POINTER_OFFSET_PX, targetDelta)\n : targetDelta;\n }\n\n private handleButtonSlotChange(e: Event) {\n const slot = e.target as HTMLSlotElement;\n const assigned = slot.assignedElements({flatten: false});\n this.slottedButton =\n assigned.length > 0 ? (assigned[0] as HTMLElement) : null;\n this.syncFallbackButtonHeaderContent();\n this.syncSlottedButtonProps();\n }\n\n private syncFallbackButtonHeaderContent() {\n if (this.slottedButton) {\n return;\n }\n\n const button = this.renderRoot.querySelector(\n 'obc-poi-button.poi-button'\n ) as HTMLElement | null;\n if (!button) {\n return;\n }\n\n for (const child of Array.from(this.children)) {\n if (\n !(child instanceof HTMLElement) ||\n child.getAttribute('slot') !== 'header'\n ) {\n continue;\n }\n if (child.parentElement !== button) {\n button.appendChild(child);\n }\n this.applyHeaderState(child);\n }\n }\n\n private applyHeaderState(root: ParentNode) {\n const headers = [\n ...(root instanceof Element && root.matches('obc-poi-header')\n ? [root]\n : []),\n ...root.querySelectorAll('obc-poi-header'),\n ] as HTMLElement[];\n\n for (const header of headers) {\n (header as {state?: ObcPoiHeaderState}).state = this.resolvedHeaderState;\n header.setAttribute('state', this.resolvedHeaderState);\n }\n }\n\n private syncAttachedHeaderState() {\n this.applyHeaderState(this.renderRoot);\n }\n\n private syncSlottedButtonProps() {\n const btn = this.slottedButton;\n if (!btn) return;\n\n const props = btn as unknown as Record<string, unknown>;\n props.layout = 'inline';\n props.relativeDirection = this.relativeDirection;\n props.selected = this.selected;\n props.hasHeader = this.hasHeader;\n props.headerContent = this.headerContent;\n props.state = this.buttonState;\n props.value = this.buttonVisualState;\n props.overlapOpaque = this.overlapOpaque;\n props.type = this.buttonType;\n props.data = this.data;\n }\n\n private renderPoiButton() {\n return html`\n <slot name=\"button\" @slotchange=${this.handleButtonSlotChange}>\n <obc-poi-button\n layout=\"inline\"\n class=\"poi-button\"\n .relativeDirection=${this.relativeDirection}\n .selected=${this.selected}\n .hasHeader=${this.hasHeader}\n .headerContent=${this.headerContent}\n .state=${this.buttonState}\n .value=${this.buttonVisualState}\n .overlapOpaque=${this.overlapOpaque}\n .type=${this.buttonType}\n .data=${this.data}\n >\n <slot></slot>\n </obc-poi-button>\n </slot>\n `;\n }\n\n public refreshProjectionLayout(_trackDurationMs = 0) {\n this.requestUpdate();\n }\n\n override render() {\n const classes = {\n wrapper: true,\n [`type-${this.type}`]: true,\n [`button-${this.buttonType}`]: true,\n [`value-${this.value}`]: true,\n [`state-${this.state}`]: true,\n 'has-data': this.data.length > 0,\n 'no-motion': !this.animatePosition,\n };\n\n const wrapperStyle =\n this.buttonOffsetX !== 0\n ? {'--obc-poi-target-top-offset-x': `${this.buttonOffsetX}px`}\n : {};\n\n return html`\n <div class=${classMap(classes)} style=${styleMap(wrapperStyle)}>\n ${this.renderPoiButton()} ${this.renderLine()}\n ${this.renderInlinePointer()} ${this.renderOutsideArrow()}\n </div>\n `;\n }\n\n protected override firstUpdated(_changedProperties: Map<string, unknown>) {\n this.syncFallbackButtonHeaderContent();\n this.syncAttachedHeaderState();\n }\n\n protected override updated(changedProperties: Map<string, unknown>) {\n super.updated(changedProperties);\n if (changedProperties.has('x')) {\n this.style.removeProperty('left');\n this.style.setProperty('--obc-poi-x', `${this.x}px`);\n }\n if (\n changedProperties.has('buttonY') ||\n changedProperties.has('y') ||\n changedProperties.has('fixedTarget')\n ) {\n this.updatePosition();\n }\n this.syncFallbackButtonHeaderContent();\n this.syncSlottedButtonProps();\n this.syncAttachedHeaderState();\n }\n\n static override styles = unsafeCSS(componentStyle);\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'obc-poi': ObcPoi;\n }\n}\n"],"names":["PoiDataVisualRectPreference","ObcPoiType","ObcPoiValue","ObcPoiState"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAyBO,IAAK,gDAAAA,iCAAL;AACLA,+BAAA,SAAA,IAAU;AACVA,+BAAA,OAAA,IAAQ;AACRA,+BAAA,QAAA,IAAS;AACTA,+BAAA,MAAA,IAAO;AAJG,SAAAA;AAAA,GAAA,+BAAA,CAAA,CAAA;AAOL,MAAM,WAAW;AA6CjB,SAAS,MAAM,IAAwB;AAC5C,SAAO,GAAG,aAAa,QAAQ;AACjC;AAIO,IAAK,+BAAAC,gBAAL;AACLA,cAAA,MAAA,IAAO;AACPA,cAAA,QAAA,IAAS;AACTA,cAAA,OAAA,IAAQ;AACRA,cAAA,SAAA,IAAU;AAJA,SAAAA;AAAA,GAAA,cAAA,CAAA,CAAA;AAOL,IAAK,gCAAAC,iBAAL;AACLA,eAAA,WAAA,IAAY;AACZA,eAAA,SAAA,IAAU;AACVA,eAAA,WAAA,IAAY;AACZA,eAAA,YAAA,IAAa;AAJH,SAAAA;AAAA,GAAA,eAAA,CAAA,CAAA;AAOL,IAAK,gCAAAC,iBAAL;AACLA,eAAA,SAAA,IAAU;AACVA,eAAA,SAAA,IAAU;AACVA,eAAA,SAAA,IAAU;AACVA,eAAA,OAAA,IAAQ;AAJE,SAAAA;AAAA,GAAA,eAAA,CAAA,CAAA;AAOZ,MAAM,yBAAyB;AAC/B,MAAM,2BAA2B;AACjC,MAAM,0BAA0B;AAuFzB,IAAM,SAAN,cAAqB,WAAW;AAAA,EAAhC,cAAA;AAAA,UAAA,GAAA,SAAA;AACqB,SAAA,OAAmB;AACnB,SAAA,QAAqB;AACrB,SAAA,QAAqB;AACpB,SAAA,WAAW;AACZ,SAAA,aAAa,iBAAiB;AAGxD,SAAA,gBAAgB;AAC2B,SAAA,OAA+B,CAAA;AACtB,SAAA,YAAY;AAET,SAAA,gBAAgB;AAC5C,SAAA,aAAa;AAGxC,SAAA,cAAwC;AAGxC,SAAA,eAA0C;AAChB,SAAA,oBAAoB;AACpB,SAAA,IAAI;AACJ,SAAA,IAAI;AACmB,SAAA,UAAyB;AACpB,SAAA,cAAc;AACZ,SAAA,gBAAgB;AAEhB,SAAA,gBAAgB;AACtB,SAAA,WAChD;AACiD,SAAA,YACjD;AAEoD,SAAA,eAAe;AAErE,SAAA,kBAAkB;AAyTlB,SAAQ,gBAAoC;AAAA,EAAA;AAAA,EAtTnC,oBAAoB;AAC3B,UAAM,kBAAA;AACN,SAAK,oBAAA;AAAA,EACP;AAAA,EAES,uBAAuB;AAC9B,UAAM,qBAAA;AACN,SAAK,gBAAgB,WAAA;AACrB,SAAK,iBAAiB;AAAA,EACxB;AAAA,EAEQ,sBAAsB;AAC5B,SAAK,gBAAgB,WAAA;AACrB,SAAK,iBAAiB,IAAI,iBAAiB,CAAC,cAAc;AACxD,iBAAW,YAAY,WAAW;AAChC,YAAI,SAAS,SAAS,aAAa;AACjC,eAAK,gCAAA;AACL,eAAK,wBAAA;AACL;AAAA,QACF;AACA,YACE,SAAS,SAAS,gBAClB,SAAS,kBAAkB,eAC3B,SAAS,OAAO,aAAa,MAAM,MAAM,UACzC;AACA,eAAK,gCAAA;AACL,eAAK,wBAAA;AACL;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAC;AACD,SAAK,eAAe,QAAQ,MAAM;AAAA,MAChC,WAAW;AAAA,MACX,YAAY;AAAA,MACZ,iBAAiB,CAAC,MAAM;AAAA,IAAA,CACzB;AAAA,EACH;AAAA,EAEQ,iBAAiB;AACvB,SAAK,MAAM,eAAe,KAAK;AAC/B,QAAI,KAAK,aAAa;AACpB,WAAK,MAAM,eAAe,oBAAoB;AAC9C,UAAI,OAAO,SAAS,KAAK,eAAe,GAAG;AACzC,aAAK,MAAM;AAAA,UACT;AAAA,UACA,GAAG,KAAK,kBAAkB,KAAK,eAAe;AAAA,QAAA;AAAA,MAElD,OAAO;AACL,aAAK,MAAM,eAAe,aAAa;AAAA,MACzC;AAAA,IACF,WAAW,OAAO,SAAS,KAAK,eAAe,GAAG;AAChD,WAAK,MAAM,YAAY,eAAe,GAAG,KAAK,eAAe,IAAI;AACjE,WAAK,MAAM,YAAY,sBAAsB,KAAK;AAAA,IACpD,OAAO;AACL,WAAK,MAAM,eAAe,aAAa;AACvC,WAAK,MAAM,eAAe,oBAAoB;AAAA,IAChD;AAAA,EACF;AAAA,EAEA,IAAY,gBAAyB;AACnC,WACE,KAAK,UAAU,aAAuB,KAAK,UAAU;AAAA,EAEzD;AAAA,EAEA,IAAc,oBAA0C;AACtD,YAAQ,KAAK,OAAA;AAAA,MACX,KAAK;AACH,eAAO,qBAAqB;AAAA,MAC9B,KAAK;AACH,eAAO,qBAAqB;AAAA,MAC9B,KAAK;AACH,eAAO,qBAAqB;AAAA,MAC9B,KAAK;AACH,eAAO,qBAAqB;AAAA,MAC9B;AACE,eAAO,qBAAqB;AAAA,IAAA;AAAA,EAElC;AAAA,EAEA,IAAc,cAAiC;AAC7C,YAAQ,KAAK,OAAA;AAAA,MACX,KAAK;AACH,eAAO,kBAAkB;AAAA,MAC3B,KAAK;AACH,eAAO,kBAAkB;AAAA,MAC3B,KAAK;AACH,eAAO,kBAAkB;AAAA,MAC3B,KAAK;AAAA,MACL;AACE,eAAO,kBAAkB;AAAA,IAAA;AAAA,EAE/B;AAAA,EAEA,IAAY,sBAAyC;AACnD,YAAQ,KAAK,aAAA;AAAA,MACX,KAAK,kBAAkB;AACrB,eAAO,kBAAkB;AAAA,MAC3B,KAAK,kBAAkB;AACrB,eAAO,kBAAkB;AAAA,MAC3B,KAAK,kBAAkB;AACrB,eAAO,kBAAkB;AAAA,MAC3B,KAAK,kBAAkB;AAAA,MACvB;AACE,eAAO,KAAK,WACR,kBAAkB,WAClB,kBAAkB;AAAA,IAAA;AAAA,EAE5B;AAAA,EAEA,IAAY,YAAsB;AAChC,QAAI,KAAK,UAAU,SAAmB;AACpC,aAAO,SAAS;AAAA,IAClB;AACA,QAAI,KAAK,UAAU,WAAqB;AACtC,aAAO,SAAS;AAAA,IAClB;AACA,QAAI,KAAK,UAAU,WAAqB;AACtC,aAAO,SAAS;AAAA,IAClB;AACA,QAAI,KAAK,UAAU;AACjB,aAAO,SAAS;AAAA,IAClB;AACA,WAAO,SAAS;AAAA,EAClB;AAAA,EAEA,IAAY,kBAA2B;AACrC,WAAO,KAAK;AAAA,EACd;AAAA;AAAA,EAGA,IAAY,kBAA0B;AACpC,WAAO,OAAO,SAAS,KAAK,CAAC,IAAI,KAAK,IAAI;AAAA,EAC5C;AAAA;AAAA,EAGA,IAAY,kBAA0B;AACpC,WAAO,OAAO,KAAK,YAAY,YAAY,OAAO,SAAS,KAAK,OAAO,IACnE,KAAK,UACL;AAAA,EACN;AAAA,EAEA,IAAY,oBAA4B;AACtC,UAAM,MAAM,iBAAiB,IAAI,EAAE;AAAA,MACjC;AAAA,IAAA;AAEF,UAAM,SAAS,OAAO,WAAW,GAAG;AACpC,WAAO,OAAO,SAAS,MAAM,IAAI,SAAS;AAAA,EAC5C;AAAA,EAEA,IAAY,oBAA4B;AACtC,UAAM,MAAM,iBAAiB,IAAI,EAAE;AAAA,MACjC;AAAA,IAAA;AAEF,UAAM,SAAS,OAAO,WAAW,GAAG;AACpC,WAAO,OAAO,SAAS,MAAM,IAAI,SAAS;AAAA,EAC5C;AAAA,EAEA,IAAY,aAAqB;AAC/B,QAAI,KAAK,SAAS,WAAoB,KAAK,SAAS,WAAoB;AACtE,aAAO;AAAA,IACT;AAEA,UAAM,gBAAgB,OAAO,SAAS,KAAK,aAAa,IACpD,KAAK,gBACL;AACJ,UAAM,gBAAgB,OAAO,SAAS,KAAK,aAAa,IACpD,KAAK,gBACL;AACJ,UAAM,aAAa,gBAAgB;AACnC,WAAO,OAAO,SAAS,UAAU,IAAI,aAAa;AAAA,EACpD;AAAA,EAEA,IAAY,mBAA4B;AACtC,QAAI,KAAK,iBAAiB,KAAK,SAAS,WAAoB;AAC1D,aAAO;AAAA,IACT;AAEA,QAAI,CAAC,KAAK,WAAY,QAAO;AAC7B,WACE,KAAK,SAAS,UACd,KAAK,SAAS,YACd,KAAK,SAAS;AAAA,EAElB;AAAA,EAEA,IAAY,sBAAyC;AACnD,QAAI,KAAK,iBAAiB,KAAK,UAAU,WAAqB;AAC5D,aAAO,kBAAkB;AAAA,IAC3B;AAEA,WAAO,KAAK,eAAe,kBAAkB;AAAA,EAC/C;AAAA,EAEA,IAAY,uBAA2C;AACrD,QAAI,KAAK,iBAAiB,KAAK,SAAS,WAAoB;AAC1D,aAAO,mBAAmB;AAAA,IAC5B;AAEA,QAAI,KAAK,cAAc;AACrB,aAAO,KAAK;AAAA,IACd;AAEA,WAAO,mBAAmB;AAAA,EAC5B;AAAA,EAEA,IAAY,uBAAsC;AAChD,QAAI,KAAK,aAAa,MAAM;AAC1B,aAAO;AAAA,IACT;AAEA,UAAM,QAAQ,OAAO,KAAK,QAAQ;AAClC,QAAI,CAAC,OAAO,SAAS,KAAK,GAAG;AAC3B,aAAO;AAAA,IACT;AAEA,WAAO,KAAK,IAAI,GAAG,QAAQ,wBAAwB;AAAA,EACrD;AAAA,EAEA,IAAY,wBAAuC;AACjD,QAAI,KAAK,cAAc,MAAM;AAC3B,aAAO;AAAA,IACT;AAEA,UAAM,SAAS,OAAO,KAAK,SAAS;AACpC,QAAI,CAAC,OAAO,SAAS,MAAM,GAAG;AAC5B,aAAO;AAAA,IACT;AAEA,WAAO,KAAK,IAAI,GAAG,SAAS,wBAAwB;AAAA,EACtD;AAAA,EAEQ,aAAa;AACnB,QAAI,KAAK,SAAS,WAAoB;AACpC,aAAO;AAAA,IACT;AAEA,QACE,KAAK,SAAS,YACb,KAAK,iBAAiB,KAAK,UAAU,UACtC;AACA,aAAO;AAAA,IACT;AAEA,UAAM,sBACJ,KAAK,SAAS,UACV,IACA,KAAK;AAAA,MACH;AAAA,MACA,KAAK;AAAA,QACH,KAAK,gBACH,KAAK,oBACL,KAAK;AAAA,MAAA;AAAA,IACT;AAER,WAAO;AAAA;AAAA;AAAA,8CAGmC,KAAK,iBAAiB;AAAA,oBAChD,KAAK,SAAS;AAAA,kBAChB,mBAAmB;AAAA,kBACnB,KAAK,UAAU;AAAA,sBACX,KAAK;AAAA,2BACA,KAAK,eAAe;AAAA;AAAA;AAAA,EAG7C;AAAA,EAEQ,sBAAsB;AAC5B,QAAI,CAAC,KAAK,kBAAkB;AAC1B,aAAO;AAAA,IACT;AAEA,WAAO;AAAA;AAAA;AAAA,sCAG2B,KAC3B,UAAU,4BAA4B,KAAK,gBAC9C,KAAK,iBAAiB;AAAA,gBACd,KAAK,mBAAmB;AAAA,iBACvB,KAAK,oBAAoB;AAAA,oBACtB,KAAK,oBAAoB;AAAA,qBACxB,KAAK,qBAAqB;AAAA;AAAA;AAAA,EAG7C;AAAA,EAEQ,qBAAqB;AAC3B,QAAI,KAAK,SAAS,aAAsB,CAAC,KAAK,YAAY;AACxD,aAAO;AAAA,IACT;AAEA,UAAM,cAAc,KAAK,eAAe,iBAAiB,WAAW,KAAK;AACzE,UAAM,SAAS,cAAc,KAAK;AAClC,UAAM,oBAAoB,CAAC,cAAc;AACzC,UAAM,QAAS,KAAK,eAAe,KAAK,KAAM;AAC9C,UAAM,UAAU,KAAK,IAAI,KAAK,IAAI;AAClC,UAAM,UAAU,oBAAoB,KAAK,IAAI,KAAK,IAAI;AACtD,UAAM,QAAQ,KAAK,kBAAkB,YAAY;AACjD,WAAO;AAAA;AAAA,0CAE+B,OAAO,kCAAkC,OAAO,sCAAsC,KACvH,YAAY;AAAA;AAAA,QAEb,SAAS,KAAK,CAAC;AAAA;AAAA,EAErB;AAAA,EAKA,IAAY,gBAAwB;AAClC,UAAM,cAAc,KAAK,kBAAkB,KAAK;AAChD,WAAO,KAAK,SAAS,UACjB,KAAK,IAAI,yBAAyB,WAAW,IAC7C;AAAA,EACN;AAAA,EAEQ,uBAAuB,GAAU;AACvC,UAAM,OAAO,EAAE;AACf,UAAM,WAAW,KAAK,iBAAiB,EAAC,SAAS,OAAM;AACvD,SAAK,gBACH,SAAS,SAAS,IAAK,SAAS,CAAC,IAAoB;AACvD,SAAK,gCAAA;AACL,SAAK,uBAAA;AAAA,EACP;AAAA,EAEQ,kCAAkC;AACxC,QAAI,KAAK,eAAe;AACtB;AAAA,IACF;AAEA,UAAM,SAAS,KAAK,WAAW;AAAA,MAC7B;AAAA,IAAA;AAEF,QAAI,CAAC,QAAQ;AACX;AAAA,IACF;AAEA,eAAW,SAAS,MAAM,KAAK,KAAK,QAAQ,GAAG;AAC7C,UACE,EAAE,iBAAiB,gBACnB,MAAM,aAAa,MAAM,MAAM,UAC/B;AACA;AAAA,MACF;AACA,UAAI,MAAM,kBAAkB,QAAQ;AAClC,eAAO,YAAY,KAAK;AAAA,MAC1B;AACA,WAAK,iBAAiB,KAAK;AAAA,IAC7B;AAAA,EACF;AAAA,EAEQ,iBAAiB,MAAkB;AACzC,UAAM,UAAU;AAAA,MACd,GAAI,gBAAgB,WAAW,KAAK,QAAQ,gBAAgB,IACxD,CAAC,IAAI,IACL,CAAA;AAAA,MACJ,GAAG,KAAK,iBAAiB,gBAAgB;AAAA,IAAA;AAG3C,eAAW,UAAU,SAAS;AAC3B,aAAuC,QAAQ,KAAK;AACrD,aAAO,aAAa,SAAS,KAAK,mBAAmB;AAAA,IACvD;AAAA,EACF;AAAA,EAEQ,0BAA0B;AAChC,SAAK,iBAAiB,KAAK,UAAU;AAAA,EACvC;AAAA,EAEQ,yBAAyB;AAC/B,UAAM,MAAM,KAAK;AACjB,QAAI,CAAC,IAAK;AAEV,UAAM,QAAQ;AACd,UAAM,SAAS;AACf,UAAM,oBAAoB,KAAK;AAC/B,UAAM,WAAW,KAAK;AACtB,UAAM,YAAY,KAAK;AACvB,UAAM,gBAAgB,KAAK;AAC3B,UAAM,QAAQ,KAAK;AACnB,UAAM,QAAQ,KAAK;AACnB,UAAM,gBAAgB,KAAK;AAC3B,UAAM,OAAO,KAAK;AAClB,UAAM,OAAO,KAAK;AAAA,EACpB;AAAA,EAEQ,kBAAkB;AACxB,WAAO;AAAA,wCAC6B,KAAK,sBAAsB;AAAA;AAAA;AAAA;AAAA,+BAIpC,KAAK,iBAAiB;AAAA,sBAC/B,KAAK,QAAQ;AAAA,uBACZ,KAAK,SAAS;AAAA,2BACV,KAAK,aAAa;AAAA,mBAC1B,KAAK,WAAW;AAAA,mBAChB,KAAK,iBAAiB;AAAA,2BACd,KAAK,aAAa;AAAA,kBAC3B,KAAK,UAAU;AAAA,kBACf,KAAK,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMzB;AAAA,EAEO,wBAAwB,mBAAmB,GAAG;AACnD,SAAK,cAAA;AAAA,EACP;AAAA,EAES,SAAS;AAChB,UAAM,UAAU;AAAA,MACd,SAAS;AAAA,MACT,CAAC,QAAQ,KAAK,IAAI,EAAE,GAAG;AAAA,MACvB,CAAC,UAAU,KAAK,UAAU,EAAE,GAAG;AAAA,MAC/B,CAAC,SAAS,KAAK,KAAK,EAAE,GAAG;AAAA,MACzB,CAAC,SAAS,KAAK,KAAK,EAAE,GAAG;AAAA,MACzB,YAAY,KAAK,KAAK,SAAS;AAAA,MAC/B,aAAa,CAAC,KAAK;AAAA,IAAA;AAGrB,UAAM,eACJ,KAAK,kBAAkB,IACnB,EAAC,iCAAiC,GAAG,KAAK,aAAa,KAAA,IACvD,CAAA;AAEN,WAAO;AAAA,mBACQ,SAAS,OAAO,CAAC,UAAU,SAAS,YAAY,CAAC;AAAA,UAC1D,KAAK,gBAAA,CAAiB,IAAI,KAAK,YAAY;AAAA,UAC3C,KAAK,oBAAA,CAAqB,IAAI,KAAK,oBAAoB;AAAA;AAAA;AAAA,EAG/D;AAAA,EAEmB,aAAa,oBAA0C;AACxE,SAAK,gCAAA;AACL,SAAK,wBAAA;AAAA,EACP;AAAA,EAEmB,QAAQ,mBAAyC;AAClE,UAAM,QAAQ,iBAAiB;AAC/B,QAAI,kBAAkB,IAAI,GAAG,GAAG;AAC9B,WAAK,MAAM,eAAe,MAAM;AAChC,WAAK,MAAM,YAAY,eAAe,GAAG,KAAK,CAAC,IAAI;AAAA,IACrD;AACA,QACE,kBAAkB,IAAI,SAAS,KAC/B,kBAAkB,IAAI,GAAG,KACzB,kBAAkB,IAAI,aAAa,GACnC;AACA,WAAK,eAAA;AAAA,IACP;AACA,SAAK,gCAAA;AACL,SAAK,uBAAA;AACL,SAAK,wBAAA;AAAA,EACP;AAGF;AApfa,OAmfK,SAAS,UAAU,cAAc;AAlfvB,gBAAA;AAAA,EAAzB,SAAS,EAAC,MAAM,OAAA,CAAO;AAAA,GADb,OACe,WAAA,QAAA,CAAA;AACA,gBAAA;AAAA,EAAzB,SAAS,EAAC,MAAM,OAAA,CAAO;AAAA,GAFb,OAEe,WAAA,SAAA,CAAA;AACA,gBAAA;AAAA,EAAzB,SAAS,EAAC,MAAM,OAAA,CAAO;AAAA,GAHb,OAGe,WAAA,SAAA,CAAA;AACC,gBAAA;AAAA,EAA1B,SAAS,EAAC,MAAM,QAAA,CAAQ;AAAA,GAJd,OAIgB,WAAA,YAAA,CAAA;AACD,gBAAA;AAAA,EAAzB,SAAS,EAAC,MAAM,OAAA,CAAO;AAAA,GALb,OAKe,WAAA,cAAA,CAAA;AAG1B,gBAAA;AAAA,EADC,SAAS,EAAC,MAAM,SAAS,WAAW,kBAAiB;AAAA,GAP3C,OAQX,WAAA,iBAAA,CAAA;AAC2C,gBAAA;AAAA,EAA1C,SAAS,EAAC,MAAM,OAAO,WAAW,OAAM;AAAA,GAT9B,OASgC,WAAA,QAAA,CAAA;AACS,gBAAA;AAAA,EAAnD,SAAS,EAAC,MAAM,SAAS,WAAW,cAAa;AAAA,GAVvC,OAUyC,WAAA,aAAA,CAAA;AAEG,gBAAA;AAAA,EAAtD,SAAS,EAAC,MAAM,QAAQ,WAAW,kBAAiB;AAAA,GAZ1C,OAY4C,WAAA,iBAAA,CAAA;AAC5B,gBAAA;AAAA,EAA1B,SAAS,EAAC,MAAM,QAAA,CAAQ;AAAA,GAbd,OAagB,WAAA,cAAA,CAAA;AAG3B,gBAAA;AAAA,EADC,SAAS,EAAC,MAAM,QAAQ,WAAW,gBAAe;AAAA,GAfxC,OAgBX,WAAA,eAAA,CAAA;AAGA,gBAAA;AAAA,EADC,SAAS,EAAC,MAAM,QAAQ,WAAW,iBAAgB;AAAA,GAlBzC,OAmBX,WAAA,gBAAA,CAAA;AAC0B,gBAAA;AAAA,EAAzB,SAAS,EAAC,MAAM,OAAA,CAAO;AAAA,GApBb,OAoBe,WAAA,qBAAA,CAAA;AACA,gBAAA;AAAA,EAAzB,SAAS,EAAC,MAAM,OAAA,CAAO;AAAA,GArBb,OAqBe,WAAA,KAAA,CAAA;AACA,gBAAA;AAAA,EAAzB,SAAS,EAAC,MAAM,OAAA,CAAO;AAAA,GAtBb,OAsBe,WAAA,KAAA,CAAA;AACuB,gBAAA;AAAA,EAAhD,SAAS,EAAC,MAAM,QAAQ,WAAW,YAAW;AAAA,GAvBpC,OAuBsC,WAAA,WAAA,CAAA;AACK,gBAAA;AAAA,EAArD,SAAS,EAAC,MAAM,SAAS,WAAW,gBAAe;AAAA,GAxBzC,OAwB2C,WAAA,eAAA,CAAA;AACE,gBAAA;AAAA,EAAvD,SAAS,EAAC,MAAM,QAAQ,WAAW,mBAAkB;AAAA,GAzB3C,OAyB6C,WAAA,iBAAA,CAAA;AAEA,gBAAA;AAAA,EAAvD,SAAS,EAAC,MAAM,QAAQ,WAAW,mBAAkB;AAAA,GA3B3C,OA2B6C,WAAA,iBAAA,CAAA;AACN,gBAAA;AAAA,EAAjD,SAAS,EAAC,MAAM,QAAQ,WAAW,aAAY;AAAA,GA5BrC,OA4BuC,WAAA,YAAA,CAAA;AAEC,gBAAA;AAAA,EAAlD,SAAS,EAAC,MAAM,QAAQ,WAAW,cAAa;AAAA,GA9BtC,OA8BwC,WAAA,aAAA,CAAA;AAGG,gBAAA;AAAA,EAArD,SAAS,EAAC,MAAM,QAAQ,WAAW,iBAAgB;AAAA,GAjCzC,OAiC2C,WAAA,gBAAA,CAAA;AAEtD,gBAAA;AAAA,EADC,SAAS,EAAC,MAAM,SAAS,WAAW,oBAAmB;AAAA,GAlC7C,OAmCX,WAAA,mBAAA,CAAA;AAnCW,SAAN,gBAAA;AAAA,EADN,cAAc,SAAS;AAAA,GACX,MAAA;"}
@@ -52,6 +52,7 @@ export declare enum OverlapMode {
52
52
  *
53
53
  * @slot - Default slot for POI targets and optional POI groups.
54
54
  * @fires layer-resize {CustomEvent<{height:number,label:string}>} Fired when the layer height changes.
55
+ * @fires layer-selection-changed {Event} Fired when the layer's `isSelected` state changes. Bubbles.
55
56
  * @experimental
56
57
  */
57
58
  export declare class ObcPoiLayer extends LitElement {
@@ -1 +1 @@
1
- {"version":3,"file":"poi-layer.d.ts","sourceRoot":"","sources":["../../../src/ar/poi-layer/poi-layer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"poi-layer.d.ts","sourceRoot":"","sources":["../../../src/ar/poi-layer/poi-layer.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"poi-layer.js","sources":["../../../src/ar/poi-layer/poi-layer.ts"],"sourcesContent":["import {LitElement, PropertyValues, html, nothing, unsafeCSS} from 'lit';\nimport {property, query} from 'lit/decorators.js';\nimport {customElement} from '../../decorator.js';\nimport componentStyle from './poi-layer.css?inline';\nimport '../poi-group/poi-group.js';\nimport {PoiDataValue, PoiDataVisualRectPreference} from '../poi/poi-data.js';\nimport {Poi, isPoi, POI_ATTR} from '../poi/poi.js';\nimport {ObcPoiButtonType} from '../poi-button/poi-button.js';\nimport {\n buildAdjacencyMaps,\n buildClusters,\n type GroupingThresholds,\n} from './poi-layer-grouping-utils.js';\nimport {updateCrossingModeState} from './poi-layer-crossing-utils.js';\nimport {getEffectivePoiX} from '../poi/poi-position.js';\nimport {easeInOutQuad} from '../poi-group/animation-utils.js';\nimport {\n getCssVarAsNumber,\n getTouchTargetSize,\n getVisualTargetSize,\n} from '../poi/poi-css-vars.js';\nimport {\n applyPoiVisualState,\n clearPoiVisualState,\n} from '../poi/poi-visual-state.js';\n\nconst EXIT_DELAY_MS_VAR = '--obc-poi-layer-exit-delay-ms';\nconst GROUP_REMOVAL_DELAY_MS_VAR = '--obc-poi-layer-group-removal-delay-ms';\nconst EXIT_LOCK_DURATION_MS_VAR = '--obc-poi-layer-exit-lock-duration-ms';\nconst POI_CROSSING_MIN_GAP_VAR = '--obc-poi-layer-crossing-min-gap';\n\ninterface PoiButtonGroupElement extends HTMLElement {\n expand?: boolean;\n collapsing?: boolean;\n updatePosition?: () => void;\n refreshExpandedLayout?: (preserveCenter?: boolean) => void;\n internalSwapping?: boolean;\n}\n\nexport enum OverlapMode {\n Grouping = 'grouping',\n Crossing = 'crossing',\n}\n\n/**\n * `<obc-poi-layer>` - A POI layout container that resolves overlapping targets by grouping or crossing strategies.\n *\n * This component watches slotted POI targets, applies overlap state/visual rules, and coordinates automatic `obc-poi-group` creation when needed.\n * Use it as the main layer container when you want centralized overlap behavior plus layer height updates for parent layout systems.\n *\n * ### Features\n * - Overlap strategies: `overlapMode=\"grouping\"` builds overlap clusters; `overlapMode=\"crossing\"` continuously adjusts horizontal offsets to reduce crossings.\n * - Auto-group lifecycle: Creates/removes auto groups and preserves front/behind/pre-group states during transitions.\n * - Manual group support: Respects existing `obc-poi-group` elements and can optionally join nearby targets while a group is expanded (`joinWhileExpanded`).\n * - Dynamic observation: Reacts to slot changes, target style/position mutations, and target size changes to recompute grouping and layer height.\n * - Layer diagnostics: `debug` shows a label overlay using `label`.\n * - Selection flag: `isSelected` reflects to attribute but has no direct runtime layout logic in this class.\n * - Group ordering option: `internalSwapping` is forwarded to groups to allow expanded ordering updates based on movement.\n *\n * ### Usage Guidelines\n * - Place `obc-poi-data` targets (and optional `obc-poi-group`) in the default slot.\n * - Choose `overlapMode` based on behavior:\n * - `grouping`: best when overlaps should collapse into expandable clusters.\n * - `crossing`: best when targets stay independent but should separate horizontally.\n * - Listen for `layer-resize` to keep parent containers in sync with computed layer height.\n * - Enable `joinWhileExpanded` only when targets should be able to join an already expanded auto-group.\n * - **TODO(designer):** Confirm intended user-visible behavior for `isSelected`, since it currently reflects an attribute but is not consumed by the layer logic here.\n *\n * ### Slots\n * | Slot | Renders When... | Purpose |\n * | --- | --- | --- |\n * | default | Always | Hosts POI targets (`obc-poi-data*`) and optional manual `obc-poi-group` elements. |\n *\n * ### Events\n * - `layer-resize` - Fired when computed layer height changes. Detail: `{ height: number, label: string }`.\n *\n * ### Best Practices\n * - Keep POI targets as direct descendants when possible to reduce grouping ambiguity.\n * - Use stable `x`/`y` updates for animated scenarios so grouping and crossing calculations remain predictable.\n * - Avoid adding non-POI interactive wrappers inside the layer unless needed, as layer observers track POI-related descendants.\n *\n * ### Example\n * ```html\n * <obc-poi-layer label=\"Targets\" overlapMode=\"grouping\" debug>\n * <obc-poi-data x=\"180\" y=\"110\"></obc-poi-data>\n * <obc-poi-data x=\"205\" y=\"90\"></obc-poi-data>\n * <obc-poi-data x=\"230\" y=\"100\"></obc-poi-data>\n * </obc-poi-layer>\n * ```\n *\n * @slot - Default slot for POI targets and optional POI groups.\n * @fires layer-resize {CustomEvent<{height:number,label:string}>} Fired when the layer height changes.\n * @experimental\n */\n@customElement('obc-poi-layer')\nexport class ObcPoiLayer extends LitElement {\n @property({type: String}) label = '';\n @property({type: Boolean}) debug = false;\n @property({type: String}) overlapMode: OverlapMode = OverlapMode.Grouping;\n @property({type: Boolean, attribute: 'is-selected'})\n isSelected = false;\n @property({type: Boolean, attribute: 'join-while-expanded'})\n joinWhileExpanded = false;\n @property({type: Boolean, attribute: 'internal-swapping'})\n internalSwapping = false;\n\n @query('.wrapper') private wrapper?: HTMLElement;\n\n private resizeObserver?: ResizeObserver;\n private targetResizeObserver?: ResizeObserver;\n private lastHeight = 0;\n private isGrouping = false;\n private targetObservers = new Map<Poi, MutationObserver>();\n private targetSizeElements = new Map<Poi, HTMLElement>();\n private groupingRaf = 0;\n private heightRaf = 0;\n private groupRemovalTimers = new WeakMap<HTMLElement, number>();\n private exitLockTimers = new Map<HTMLElement, number>();\n private layerMutationObserver?: MutationObserver;\n private autoGroupCollapseTimeout = 0;\n private crossingModeRaf = 0;\n private cachedCrossingTargets: Poi[] = [];\n private crossingTargetsDirty = false;\n private crossingOrder: Poi[] = [];\n private crossingLastEffectiveX = new Map<Poi, number>();\n private previousPositions = new Map<Poi, number>();\n private lastOffsets = new Map<Poi, number>();\n private static readonly GROUP_LAYER_HOOK_ATTR = 'data-in-poi-layer';\n private handleSlotChange = () => {\n this.updateTargetObservers();\n this.scheduleGrouping();\n this.scheduleLayerHeightUpdate();\n };\n private handleCollapseFinished = () => {\n this.scheduleGrouping();\n };\n\n override connectedCallback() {\n super.connectedCallback();\n if (!this.hasUpdated) return;\n this.setupResizeObserver();\n this.setupTargetResizeObserver();\n this.setupLayerMutationObserver();\n this.updateTargetObservers();\n this.scheduleGrouping();\n this.scheduleLayerHeightUpdate();\n this.addLayerEventListeners();\n const slot = this.shadowRoot?.querySelector('slot');\n slot?.addEventListener('slotchange', this.handleSlotChange);\n }\n\n override firstUpdated() {\n this.crossingTargetsDirty = true;\n this.setupResizeObserver();\n this.setupTargetResizeObserver();\n this.setupLayerMutationObserver();\n this.updateTargetObservers();\n this.scheduleGrouping();\n this.scheduleLayerHeightUpdate();\n const slot = this.shadowRoot?.querySelector('slot');\n slot?.addEventListener('slotchange', this.handleSlotChange);\n requestAnimationFrame(() => {\n this.updateTargetObservers();\n this.scheduleLayerHeightUpdate();\n });\n this.addLayerEventListeners();\n }\n\n private handlePoiDataLayoutChange = () => {\n this.scheduleGrouping();\n this.scheduleLayerHeightUpdate();\n };\n\n private handleGroupExpand = (event: CustomEvent<{expand: boolean}>) => {\n const group = event.target as HTMLElement;\n if (!group?.tagName?.toLowerCase().includes('group')) return;\n if (group.hasAttribute('data-exiting')) return;\n\n const targets = this.getAllTargets();\n const groupedTargets = new Set<Poi>(this.getGroupTargets(group));\n if (groupedTargets.size === 0) return;\n\n if (event.detail.expand) {\n targets.forEach((target) => {\n if (!groupedTargets.has(target)) {\n const nextValue = this.resolveTargetValue(target, true);\n target.value = nextValue;\n if (nextValue === PoiDataValue.Overlapped) {\n this.applyStandaloneVisualState(target, true);\n } else {\n this.clearStandaloneVisualState(target);\n }\n }\n });\n }\n };\n\n override disconnectedCallback() {\n super.disconnectedCallback();\n this.removeLayerEventListeners();\n const slot = this.shadowRoot?.querySelector('slot');\n slot?.removeEventListener('slotchange', this.handleSlotChange);\n this.resizeObserver?.disconnect();\n this.targetResizeObserver?.disconnect();\n this.layerMutationObserver?.disconnect();\n this.targetObservers.forEach((observer) => observer.disconnect());\n this.targetObservers.clear();\n this.targetSizeElements.clear();\n if (this.groupingRaf) {\n cancelAnimationFrame(this.groupingRaf);\n this.groupingRaf = 0;\n }\n if (this.crossingModeRaf) {\n cancelAnimationFrame(this.crossingModeRaf);\n this.crossingModeRaf = 0;\n }\n this.previousPositions.clear();\n if (this.heightRaf) {\n cancelAnimationFrame(this.heightRaf);\n this.heightRaf = 0;\n }\n this.exitLockTimers.forEach((timerId) => window.clearTimeout(timerId));\n this.exitLockTimers.clear();\n if (this.autoGroupCollapseTimeout) {\n window.clearTimeout(this.autoGroupCollapseTimeout);\n this.autoGroupCollapseTimeout = 0;\n }\n this.buttonOffsetXResetRaf.forEach((rafId) => cancelAnimationFrame(rafId));\n this.buttonOffsetXResetRaf.clear();\n this.lastOffsets.clear();\n this.crossingLastEffectiveX.clear();\n }\n\n private addLayerEventListeners() {\n this.addEventListener(\n 'obc-poi-data-layout-change',\n this.handlePoiDataLayoutChange as EventListener\n );\n this.addEventListener('expand', this.handleGroupExpand as EventListener);\n this.addEventListener(\n 'collapse-finished',\n this.handleCollapseFinished as EventListener\n );\n }\n\n private removeLayerEventListeners() {\n this.removeEventListener(\n 'obc-poi-data-layout-change',\n this.handlePoiDataLayoutChange as EventListener\n );\n this.removeEventListener('expand', this.handleGroupExpand as EventListener);\n this.removeEventListener(\n 'collapse-finished',\n this.handleCollapseFinished as EventListener\n );\n }\n\n private setupResizeObserver() {\n if (typeof ResizeObserver === 'undefined') return;\n this.resizeObserver = new ResizeObserver((entries) => {\n for (const entry of entries) {\n this.updateLayerHeight(entry.contentRect.height);\n }\n });\n if (this.wrapper) {\n this.resizeObserver.observe(this.wrapper);\n this.updateLayerHeight(this.wrapper.getBoundingClientRect().height);\n }\n }\n\n private setupTargetResizeObserver() {\n if (typeof ResizeObserver === 'undefined') return;\n if (this.targetResizeObserver) return;\n this.targetResizeObserver = new ResizeObserver(() =>\n this.scheduleLayerHeightUpdate()\n );\n }\n\n private scheduleLayerHeightUpdate() {\n if (this.heightRaf) return;\n this.heightRaf = requestAnimationFrame(() => {\n this.heightRaf = 0;\n this.syncLayerHeight();\n });\n }\n\n private syncLayerHeight() {\n if (!this.isConnected) return;\n const minHeight = this.getLayerMinHeight();\n const heightFloor = this.getLayerHeightFloor(minHeight);\n const targets = this.getAllTargets();\n if (targets.length === 0) {\n const nextHeight = heightFloor;\n this.style.setProperty('--obc-poi-layer-height', `${nextHeight}px`);\n this.updateLayerHeight(nextHeight);\n return;\n }\n const rects = new Map<Poi, DOMRect>();\n targets.forEach((target) => rects.set(target, this.getTargetRect(target)));\n let maxHeight = 0;\n rects.forEach((rect) => {\n const height = rect?.height ?? 0;\n if (Number.isFinite(height)) {\n maxHeight = Math.max(maxHeight, height);\n }\n });\n const nextHeight = Math.max(maxHeight, heightFloor);\n if (nextHeight <= 0) {\n this.style.setProperty('--obc-poi-layer-height', '0px');\n this.updateLayerHeight(0);\n return;\n }\n const roundedHeight = Math.round(nextHeight);\n this.style.setProperty('--obc-poi-layer-height', `${roundedHeight}px`);\n this.updateLayerHeight(roundedHeight);\n }\n\n private getLayerMinHeight(): number {\n const minHeightRaw = getComputedStyle(this).minHeight;\n const minHeight = Number.parseFloat(minHeightRaw);\n return Number.isFinite(minHeight) ? minHeight : 0;\n }\n\n private getLayerHeightFloor(minHeight: number): number {\n if (!this.hasAttribute('data-stack-inactive')) {\n return minHeight;\n }\n\n return Math.max(minHeight, this.lastHeight);\n }\n\n private updateLayerHeight(nextHeight: number) {\n const roundedHeight = Math.round(nextHeight);\n if (roundedHeight === this.lastHeight) return;\n this.lastHeight = roundedHeight;\n this.dispatchEvent(\n new CustomEvent('layer-resize', {\n detail: {\n height: roundedHeight,\n label: this.label,\n },\n bubbles: true,\n composed: true,\n })\n );\n }\n\n private updateTargetObservers() {\n const targets = this.getAllTargets();\n const targetSet = new Set(targets);\n\n this.targetObservers.forEach((observer, target) => {\n if (!targetSet.has(target)) {\n observer.disconnect();\n this.targetObservers.delete(target);\n }\n });\n\n targets.forEach((target) => {\n if (this.targetObservers.has(target)) return;\n const observer = new MutationObserver(() => {\n this.scheduleGrouping();\n this.scheduleLayerHeightUpdate();\n });\n observer.observe(target, {\n attributes: true,\n attributeFilter: ['style', 'y', 'button-y'],\n });\n this.targetObservers.set(target, observer);\n });\n this.updateTargetSizeObservers(targets, targetSet);\n }\n\n private updateTargetSizeObservers(targets: Poi[], targetSet: Set<Poi>) {\n if (!this.targetResizeObserver) return;\n this.targetSizeElements.forEach((element, target) => {\n if (!targetSet.has(target) || !element.isConnected) {\n this.targetResizeObserver?.unobserve(element);\n this.targetSizeElements.delete(target);\n }\n });\n targets.forEach((target) => {\n const sizeElement = this.getTargetSizeElement(target);\n if (!sizeElement) return;\n const existing = this.targetSizeElements.get(target);\n if (existing === sizeElement) return;\n if (existing) {\n this.targetResizeObserver?.unobserve(existing);\n }\n this.targetResizeObserver?.observe(sizeElement);\n this.targetSizeElements.set(target, sizeElement);\n });\n }\n\n private getTargetSizeElement(target: Poi): HTMLElement | null {\n return target.getVisualElement(PoiDataVisualRectPreference.Size);\n }\n\n private isPoiLayerRelevantNode(node: HTMLElement): boolean {\n if (isPoi(node) || node.tagName.toLowerCase() === 'obc-poi-group')\n return true;\n return !!node.querySelector(`[${POI_ATTR}], obc-poi-group`);\n }\n\n private setupLayerMutationObserver() {\n this.layerMutationObserver?.disconnect();\n this.layerMutationObserver = new MutationObserver((mutations) => {\n for (const mutation of mutations) {\n if (mutation.type !== 'childList') continue;\n const nodes = [...mutation.addedNodes, ...mutation.removedNodes];\n for (const node of nodes) {\n if (!(node instanceof HTMLElement)) continue;\n if (this.isPoiLayerRelevantNode(node)) {\n this.updateTargetObservers();\n this.scheduleGrouping();\n this.scheduleLayerHeightUpdate();\n this.crossingTargetsDirty = true;\n return;\n }\n }\n }\n });\n this.layerMutationObserver.observe(this, {childList: true, subtree: true});\n }\n\n public requestGroupingUpdate() {\n this.scheduleGrouping();\n this.scheduleLayerHeightUpdate();\n }\n\n private scheduleGrouping() {\n if (this.overlapMode === OverlapMode.Crossing) {\n this.scheduleCrossingMode();\n return;\n }\n if (this.groupingRaf) return;\n this.groupingRaf = requestAnimationFrame(() => {\n this.groupingRaf = 0;\n this.updateGrouping();\n });\n }\n\n private scheduleCrossingMode() {\n if (this.crossingModeRaf) return;\n this.crossingModeRaf = requestAnimationFrame(() => {\n try {\n this.crossingModeRaf = 0;\n const shouldContinue = this.updateCrossingMode();\n if (\n this.overlapMode === OverlapMode.Crossing &&\n this.isConnected &&\n shouldContinue\n ) {\n this.scheduleCrossingMode();\n }\n } catch (error) {\n console.error('[poi-layer] Error in crossing mode:', error);\n this.crossingModeRaf = 0;\n }\n });\n }\n\n private updateCrossingMode(): boolean {\n if (this.crossingTargetsDirty) {\n this.cachedCrossingTargets = this.getAllTargets();\n this.crossingTargetsDirty = false;\n }\n const targets = this.cachedCrossingTargets;\n const buttonWidth = getTouchTargetSize(this);\n const minGap = getCssVarAsNumber(\n this,\n POI_CROSSING_MIN_GAP_VAR,\n buttonWidth + 4\n );\n const next = updateCrossingModeState({\n targets,\n buttonWidth,\n minGap,\n previousPositions: this.previousPositions,\n lastOffsets: this.lastOffsets,\n crossingOrder: this.crossingOrder,\n crossingLastEffectiveX: this.crossingLastEffectiveX,\n });\n this.previousPositions = next.previousPositions;\n this.crossingOrder = next.crossingOrder;\n return next.shouldContinue;\n }\n\n private toggleGroupLayerHook(group: HTMLElement, hasTargets: boolean) {\n if (hasTargets) {\n group.setAttribute(ObcPoiLayer.GROUP_LAYER_HOOK_ATTR, '');\n } else {\n group.removeAttribute(ObcPoiLayer.GROUP_LAYER_HOOK_ATTR);\n }\n }\n\n private updateGrouping() {\n if (this.isGrouping) return;\n this.isGrouping = true;\n try {\n const manualGroups = (\n Array.from(\n this.querySelectorAll('obc-poi-group')\n ) as PoiButtonGroupElement[]\n ).filter((group) => !group.hasAttribute('data-auto-group'));\n const manualGroupedTargets = new Set<HTMLElement>();\n manualGroups.forEach((group) => {\n const groupTargets = this.getGroupTargets(group);\n this.toggleGroupLayerHook(group, groupTargets.length > 0);\n groupTargets.forEach((target) => manualGroupedTargets.add(target));\n });\n if (manualGroups.length > 0) {\n const anyExpanded = manualGroups.some(\n (group) => group.expand === true || group.collapsing === true\n );\n if (anyExpanded) {\n return;\n }\n }\n\n const targets = this.getAllTargets().filter(\n (target) =>\n !manualGroupedTargets.has(target) &&\n !target.hasAttribute('data-stack-returning')\n );\n\n const layerRect = this.getBoundingClientRect();\n const enterRaw = getComputedStyle(this).getPropertyValue(\n '--obc-poi-layer-overlap-enter'\n );\n const exitRaw = getComputedStyle(this).getPropertyValue(\n '--obc-poi-layer-overlap-exit'\n );\n const preRaw = getComputedStyle(this).getPropertyValue(\n '--obc-poi-layer-overlap-pre'\n );\n const behindRaw = getComputedStyle(this).getPropertyValue(\n '--obc-poi-layer-overlap-behind'\n );\n const enterThreshold = Number.parseFloat(enterRaw) || 0;\n const exitThreshold =\n Number.parseFloat(exitRaw) || Math.max(enterThreshold + 8, 8);\n const preThreshold = Number.parseFloat(preRaw) || enterThreshold;\n const behindThreshold = Number.parseFloat(behindRaw) || enterThreshold;\n\n const currentGroupByTarget = new Map<Poi, HTMLElement>();\n targets.forEach((target) => {\n const parent = target.parentElement;\n if (parent?.tagName.toLowerCase() === 'obc-poi-group') {\n currentGroupByTarget.set(target, parent as HTMLElement);\n }\n });\n\n const rects = new Map<Poi, DOMRect>();\n targets.forEach((target) => {\n rects.set(target, this.getTargetRectForGrouping(target, layerRect));\n });\n\n const thresholds: GroupingThresholds = {\n enterThreshold,\n exitThreshold,\n preThreshold,\n behindThreshold,\n };\n\n const {adjacency, behindAdjacency, preGrouped} = buildAdjacencyMaps(\n targets,\n rects,\n thresholds,\n currentGroupByTarget\n );\n\n const clusters = buildClusters(targets, adjacency);\n const behindClusters = buildClusters(targets, behindAdjacency);\n\n const existingGroups = Array.from(\n this.querySelectorAll('obc-poi-group[data-auto-group]')\n ) as PoiButtonGroupElement[];\n\n const frontTargets = new Set<Poi>();\n clusters.forEach((cluster) => {\n const front = this.getFrontTarget(cluster, rects);\n if (front) frontTargets.add(front);\n });\n\n const behindTargets = new Set<Poi>();\n behindClusters.forEach((cluster) => {\n const behind = this.getShortestTarget(cluster, rects);\n if (behind) behindTargets.add(behind);\n });\n\n const expandedAutoGroup = existingGroups.find(\n (group) => group.expand === true || group.collapsing === true\n );\n if (expandedAutoGroup) {\n if (this.joinWhileExpanded) {\n this.tryJoinExpandedGroup(\n expandedAutoGroup,\n targets,\n rects,\n enterThreshold\n );\n }\n return;\n }\n\n const remainingClusters = [...clusters];\n const keptGroups: HTMLElement[] = [];\n\n existingGroups.forEach((group) => {\n const children = Array.from(group.children).filter(\n (child): child is Poi => isPoi(child)\n );\n const matchIndex = remainingClusters.findIndex(\n (cluster) =>\n cluster.length === children.length &&\n cluster.every((target) => children.includes(target))\n );\n if (matchIndex >= 0) {\n keptGroups.push(group);\n group.removeAttribute('data-exiting');\n group.setAttribute('data-visible', 'true');\n remainingClusters.splice(matchIndex, 1);\n } else {\n const front = this.getFrontTarget(children, rects);\n children.forEach((child) => {\n if (front && child === front) {\n child.setAttribute('data-front', 'true');\n child.setAttribute('data-front-exit', 'true');\n } else {\n child.removeAttribute('data-front');\n }\n });\n children.forEach((child) => {\n if (!front || child !== front) {\n child.setAttribute('data-exiting', 'true');\n this.startExitLock(child);\n } else {\n child.removeAttribute('data-exiting');\n child.removeAttribute('data-exit-lock');\n }\n child.removeAttribute('data-grouped');\n this.resetTarget(child);\n });\n group.removeAttribute('data-visible');\n group.setAttribute('data-exiting', 'true');\n children.forEach((child) => this.appendChild(child));\n children.forEach((child) => {\n if (!front || child !== front) {\n child.getBoundingClientRect();\n }\n });\n const exitDelay = getCssVarAsNumber(this, EXIT_DELAY_MS_VAR, 140);\n window.setTimeout(() => {\n children.forEach((child) => {\n if (!front || child !== front) {\n child.removeAttribute('data-exiting');\n }\n });\n }, exitDelay);\n requestAnimationFrame(() => {\n this.scheduleGroupRemoval(group);\n });\n }\n });\n\n remainingClusters.forEach((cluster) => {\n const group = document.createElement('obc-poi-group');\n group.setAttribute('data-auto-group', 'true');\n group.setAttribute('data-position-mode', 'bottom');\n group.setAttribute('data-visible', 'true');\n (group as PoiButtonGroupElement).internalSwapping =\n !!this.internalSwapping;\n group.setAttribute(\n 'positionVertical',\n `${this.getGroupPositionVertical(cluster, rects, layerRect, group)}px`\n );\n cluster.forEach((target) => {\n target.removeAttribute('data-grouped');\n group.appendChild(target);\n });\n this.appendChild(group);\n requestAnimationFrame(() => {\n cluster.forEach((target) =>\n target.setAttribute('data-grouped', 'true')\n );\n });\n keptGroups.push(group);\n });\n\n const groupedTargets = new Set<Poi>();\n keptGroups.forEach((group) => {\n Array.from(group.children).forEach((child) => {\n if (isPoi(child)) groupedTargets.add(child);\n });\n });\n\n targets.forEach((target) => {\n if (!groupedTargets.has(target)) {\n const exitLocked = target.hasAttribute('data-exit-lock');\n target.removeAttribute('data-grouped');\n target.removeAttribute('data-joined-expanded');\n if (target.hasAttribute('data-front-exit')) {\n target.setAttribute('data-front', 'true');\n target.removeAttribute('data-pregrouped');\n } else if (frontTargets.has(target)) {\n target.setAttribute('data-front', 'true');\n target.removeAttribute('data-pregrouped');\n } else if (preGrouped.has(target) && !exitLocked) {\n target.removeAttribute('data-front');\n target.setAttribute('data-pregrouped', 'true');\n } else {\n target.removeAttribute('data-front');\n target.removeAttribute('data-pregrouped');\n }\n if (\n !exitLocked &&\n behindTargets.has(target) &&\n !frontTargets.has(target)\n ) {\n target.setAttribute('data-behind', 'true');\n } else {\n target.removeAttribute('data-behind');\n }\n if (exitLocked) {\n target.removeAttribute('data-pregrouped');\n target.removeAttribute('data-behind');\n }\n const isOverlapState = target.hasAttribute('data-behind');\n const nextValue = this.resolveTargetValue(target, isOverlapState);\n target.value = nextValue;\n if (nextValue === PoiDataValue.Overlapped) {\n this.applyStandaloneVisualState(target, true);\n } else {\n this.clearStandaloneVisualState(target);\n }\n this.resetTarget(target);\n } else {\n target.removeAttribute('data-behind');\n this.clearStandaloneVisualState(target);\n }\n });\n\n this.refreshGroupPositions(layerRect, rects);\n\n requestAnimationFrame(() => {\n targets.forEach((target) => target.removeAttribute('data-front-exit'));\n });\n\n this.scheduleLayerHeightUpdate();\n } finally {\n this.isGrouping = false;\n }\n }\n\n private tryJoinExpandedGroup(\n group: PoiButtonGroupElement,\n targets: Poi[],\n rects: Map<Poi, DOMRect>,\n enterThreshold: number\n ) {\n const groupTargets = this.getGroupTargets(group);\n if (groupTargets.length === 0) return;\n\n const groupTargetSet = new Set(groupTargets);\n const candidates = targets.filter(\n (target) =>\n !groupTargetSet.has(target) &&\n target.parentElement?.tagName.toLowerCase() !== 'obc-poi-group'\n );\n if (candidates.length === 0) return;\n\n const useButtonRects = group.expand === true || group.collapsing === true;\n const groupCenters = groupTargets\n .map((target) =>\n useButtonRects ? this.getTargetRect(target) : rects.get(target)\n )\n .filter((rect): rect is DOMRect => !!rect)\n .map((rect) => rect.left + rect.width / 2);\n if (groupCenters.length === 0) return;\n\n const leftMost = Math.min(...groupCenters);\n const rightMost = Math.max(...groupCenters);\n const groupCenter = (leftMost + rightMost) / 2;\n\n let bestCandidate: Poi | null = null;\n let bestGap = Number.POSITIVE_INFINITY;\n\n for (const candidate of candidates) {\n const candidateRect = useButtonRects\n ? this.getTargetRect(candidate)\n : rects.get(candidate);\n if (!candidateRect) continue;\n for (const member of groupTargets) {\n const memberRect = useButtonRects\n ? this.getTargetRect(member)\n : rects.get(member);\n if (!memberRect) continue;\n const overlapHeight =\n Math.min(candidateRect.bottom, memberRect.bottom) -\n Math.max(candidateRect.top, memberRect.top);\n if (overlapHeight <= 0) continue;\n const gap = Math.max(\n 0,\n Math.max(candidateRect.left, memberRect.left) -\n Math.min(candidateRect.right, memberRect.right)\n );\n if (gap <= enterThreshold && gap < bestGap) {\n bestGap = gap;\n bestCandidate = candidate;\n }\n }\n }\n\n if (!bestCandidate) return;\n\n bestCandidate.setAttribute('data-joined-expanded', 'true');\n\n const candidateRect = rects.get(bestCandidate);\n const candidateCenter =\n candidateRect?.left !== undefined\n ? candidateRect.left + candidateRect.width / 2\n : 0;\n const insertBefore = candidateCenter < groupCenter;\n\n if (insertBefore) {\n group.insertBefore(bestCandidate, groupTargets[0] ?? null);\n } else {\n group.appendChild(bestCandidate);\n }\n\n bestCandidate.setAttribute('data-grouped', 'true');\n bestCandidate.removeAttribute('data-behind');\n bestCandidate.removeAttribute('data-pregrouped');\n bestCandidate.value = this.resolveTargetValue(bestCandidate, false);\n this.clearStandaloneVisualState(bestCandidate);\n\n const touchRaw = getComputedStyle(group).getPropertyValue(\n '--maneuvering-components-poi-button-touch-target'\n );\n const touchSize = Number.parseFloat(touchRaw) || 0;\n if (touchSize > 0) {\n const touchTarget = `${touchSize}px`;\n bestCandidate.style.width = touchTarget;\n bestCandidate.style.minWidth = touchTarget;\n bestCandidate.style.height = touchTarget;\n }\n\n group.refreshExpandedLayout?.(true);\n }\n\n private applyStandaloneVisualState(target: Poi, overlap: boolean) {\n const isEnhanced = target.buttonType === ObcPoiButtonType.Enhanced;\n const size = getVisualTargetSize(this, isEnhanced, overlap);\n applyPoiVisualState(target, overlap, size);\n }\n\n private resolveTargetValue(target: Poi, overlap: boolean): PoiDataValue {\n if (overlap) {\n return PoiDataValue.Overlapped;\n }\n\n if (target.selected) {\n return PoiDataValue.Checked;\n }\n return PoiDataValue.Unchecked;\n }\n\n private clearStandaloneVisualState(target: HTMLElement) {\n clearPoiVisualState(target);\n }\n\n private refreshGroupPositions(\n layerRect?: DOMRect,\n rects?: Map<Poi, DOMRect>\n ) {\n const groups = Array.from(\n this.querySelectorAll('obc-poi-group')\n ) as PoiButtonGroupElement[];\n groups.forEach((group) => {\n const children = Array.from(group.children).filter(\n (child): child is Poi => isPoi(child)\n );\n this.toggleGroupLayerHook(group, children.length > 0);\n const hasPositionAttr =\n group.hasAttribute('positionvertical') ||\n group.hasAttribute('positionVertical');\n if (\n !group.hasAttribute('data-auto-group') &&\n !group.hasAttribute('data-position-mode')\n ) {\n group.setAttribute('data-position-mode', 'bottom');\n }\n const shouldSetPosition =\n group.hasAttribute('data-auto-group') || !hasPositionAttr;\n if (group.hasAttribute('data-auto-group')) {\n (group as PoiButtonGroupElement).internalSwapping =\n !!this.internalSwapping;\n }\n if (children.length > 0 && shouldSetPosition) {\n const layerBounds = layerRect ?? this.getBoundingClientRect();\n const rectMap =\n rects ??\n new Map(\n children.map((child) => [\n child,\n this.getTargetRectForGrouping(child, layerBounds),\n ])\n );\n group.setAttribute(\n 'positionVertical',\n `${this.getGroupPositionVertical(children, rectMap, layerBounds, group)}px`\n );\n }\n group.updatePosition?.();\n });\n }\n\n private getGroupPositionVertical(\n targets: Poi[],\n rects: Map<Poi, DOMRect>,\n layerRect: DOMRect,\n group?: PoiButtonGroupElement\n ) {\n let maxBottom = Number.NEGATIVE_INFINITY;\n targets.forEach((target) => {\n const rect = rects.get(target) ?? target.getBoundingClientRect();\n maxBottom = Math.max(maxBottom, rect.bottom);\n });\n const baseBottom = maxBottom - layerRect.top;\n const isAutoGroup = group?.hasAttribute('data-auto-group') ?? false;\n const offsetRaw = getComputedStyle(this).getPropertyValue(\n '--obc-poi-layer-auto-group-offset-y'\n );\n let offset = Number.parseFloat(offsetRaw) || 0;\n if (isAutoGroup && this.closest('obc-poi-layer-stack')) {\n offset = 0;\n }\n return Math.round(baseBottom + offset);\n }\n\n private resetTarget(target: Poi) {\n if (typeof target.targetOffsetX === 'number') {\n target.setRuntimeHorizontalOffsets?.(target.buttonOffsetX, 0);\n if (!target.setRuntimeHorizontalOffsets) {\n target.targetOffsetX = 0;\n }\n }\n this.animateButtonOffsetXToZero(target);\n target.style.removeProperty('--obc-poi-target-offset-x');\n target.style.removeProperty('position');\n target.style.removeProperty('width');\n target.style.removeProperty('min-width');\n target.style.removeProperty('height');\n target.style.removeProperty('transform');\n target.style.removeProperty('--obc-poi-group-overlap-height');\n target.style.removeProperty('--obc-poi-group-overlap-shift');\n }\n\n private buttonOffsetXResetRaf = new Map<Poi, number>();\n\n private animateButtonOffsetXToZero(target: Poi) {\n const start = target.buttonOffsetX;\n if (!Number.isFinite(start) || Math.abs(start) < 0.5) {\n target.setRuntimeHorizontalOffsets?.(0, target.targetOffsetX);\n if (!target.setRuntimeHorizontalOffsets) {\n target.buttonOffsetX = 0;\n }\n return;\n }\n\n const existing = this.buttonOffsetXResetRaf.get(target);\n if (existing) {\n cancelAnimationFrame(existing);\n }\n\n const duration = 100;\n const startTime = performance.now();\n const step = (now: number) => {\n try {\n if (!target.isConnected) {\n this.buttonOffsetXResetRaf.delete(target);\n return;\n }\n const t = Math.min((now - startTime) / duration, 1);\n const eased = easeInOutQuad(t);\n const nextButtonOffsetX = start + (0 - start) * eased;\n target.setRuntimeHorizontalOffsets?.(\n nextButtonOffsetX,\n target.targetOffsetX\n );\n if (!target.setRuntimeHorizontalOffsets) {\n target.buttonOffsetX = nextButtonOffsetX;\n }\n if (t < 1) {\n this.buttonOffsetXResetRaf.set(target, requestAnimationFrame(step));\n } else {\n this.buttonOffsetXResetRaf.delete(target);\n }\n } catch (error) {\n console.error('[poi-layer] Error in button offset reset:', error);\n this.buttonOffsetXResetRaf.delete(target);\n }\n };\n\n this.buttonOffsetXResetRaf.set(target, requestAnimationFrame(step));\n }\n\n private scheduleGroupRemoval(group: HTMLElement) {\n const existing = this.groupRemovalTimers.get(group);\n if (existing) {\n window.clearTimeout(existing);\n }\n group.setAttribute('data-exiting', 'true');\n const removalDelay = getCssVarAsNumber(\n this,\n GROUP_REMOVAL_DELAY_MS_VAR,\n 250\n );\n const timeoutId = window.setTimeout(() => {\n group.remove();\n this.groupRemovalTimers.delete(group);\n }, removalDelay);\n this.groupRemovalTimers.set(group, timeoutId);\n }\n\n private startExitLock(target: HTMLElement) {\n target.setAttribute('data-exit-lock', 'true');\n const existing = this.exitLockTimers.get(target);\n if (existing) window.clearTimeout(existing);\n const lockDuration = getCssVarAsNumber(\n this,\n EXIT_LOCK_DURATION_MS_VAR,\n 500\n );\n const timeoutId = window.setTimeout(() => {\n target.removeAttribute('data-exit-lock');\n this.exitLockTimers.delete(target);\n }, lockDuration);\n this.exitLockTimers.set(target, timeoutId);\n }\n\n private getFrontTarget(targets: Poi[], rects?: Map<Poi, DOMRect>) {\n if (targets.length === 0) return null;\n let front = targets[0];\n let maxHeight = this.getTargetHeight(front, rects);\n targets.forEach((target) => {\n const height = this.getTargetHeight(target, rects);\n if (height > maxHeight) {\n maxHeight = height;\n front = target;\n }\n });\n return front;\n }\n\n private getTargetRect(target: HTMLElement): DOMRect {\n if (isPoi(target)) {\n return target.getVisualRect(PoiDataVisualRectPreference.Largest);\n }\n return target.getBoundingClientRect();\n }\n\n private getTargetRectForGrouping(\n target: HTMLElement,\n layerRect: DOMRect\n ): DOMRect {\n const rect = this.getTargetRect(target);\n const leftValue = getEffectivePoiX(target);\n if (!Number.isFinite(leftValue)) return rect;\n const width = rect.width || 0;\n const height = rect.height || 0;\n const left = layerRect.left + leftValue - width / 2;\n const top = layerRect.bottom - height;\n return new DOMRect(left, top, width, height);\n }\n\n private getTargetHeight(target: Poi, rects?: Map<Poi, DOMRect>): number {\n const targetY = Number.isFinite(target.y ?? NaN) ? (target.y ?? 0) : null;\n const yAttr = target.getAttribute('y');\n const yValue = Number.parseFloat(yAttr ?? '');\n const attrTargetY = !Number.isNaN(yValue) ? yValue : null;\n const buttonY =\n typeof target.buttonY === 'number' && Number.isFinite(target.buttonY)\n ? target.buttonY\n : null;\n const buttonYAttr = target.getAttribute('button-y');\n const buttonYValue = Number.parseFloat(buttonYAttr ?? '');\n const attrButtonY = !Number.isNaN(buttonYValue) ? buttonYValue : null;\n const logicalHeight = Math.max(\n targetY ?? 0,\n attrTargetY ?? 0,\n buttonY ?? 0,\n attrButtonY ?? 0\n );\n if (logicalHeight > 0) {\n return logicalHeight;\n }\n const rect = rects?.get(target) ?? this.getTargetRect(target);\n return rect.height;\n }\n\n private getShortestTarget(targets: Poi[], rects?: Map<Poi, DOMRect>) {\n if (targets.length === 0) return null;\n let shortest = targets[0];\n let minHeight = this.getTargetHeight(shortest, rects);\n targets.forEach((target) => {\n const height = this.getTargetHeight(target, rects);\n if (height < minHeight) {\n minHeight = height;\n shortest = target;\n }\n });\n return shortest;\n }\n\n private getAllTargets(): Poi[] {\n return Array.from(this.querySelectorAll(`[${POI_ATTR}]`)).filter(\n (node): node is Poi =>\n isPoi(node) && !node.hasAttribute('data-stack-selected')\n );\n }\n\n private getGroupTargets(group: ParentNode): Poi[] {\n return Array.from(group.querySelectorAll(`[${POI_ATTR}]`)).filter(\n (node): node is Poi => isPoi(node)\n );\n }\n\n protected override updated(changedProperties: PropertyValues): void {\n if (changedProperties.has('isSelected')) {\n this.dispatchEvent(new Event('layer-selection-changed', {bubbles: true}));\n }\n }\n\n override render() {\n return html`\n <div class=\"wrapper${this.debug ? ' debug' : ''}\">\n ${this.debug\n ? html`<span class=\"debug-label\">${this.label || 'Layer'}</span>`\n : nothing}\n <slot></slot>\n </div>\n `;\n }\n\n static override styles = unsafeCSS(componentStyle);\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'obc-poi-layer': ObcPoiLayer;\n }\n}\n"],"names":["OverlapMode","PoiDataValue","nextHeight","candidateRect"],"mappings":"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"}
1
+ {"version":3,"file":"poi-layer.js","sources":["../../../src/ar/poi-layer/poi-layer.ts"],"sourcesContent":["import {LitElement, PropertyValues, html, nothing, unsafeCSS} from 'lit';\nimport {property, query} from 'lit/decorators.js';\nimport {customElement} from '../../decorator.js';\nimport componentStyle from './poi-layer.css?inline';\nimport '../poi-group/poi-group.js';\nimport {PoiDataValue, PoiDataVisualRectPreference} from '../poi/poi-data.js';\nimport {Poi, isPoi, POI_ATTR} from '../poi/poi.js';\nimport {ObcPoiButtonType} from '../poi-button/poi-button.js';\nimport {\n buildAdjacencyMaps,\n buildClusters,\n type GroupingThresholds,\n} from './poi-layer-grouping-utils.js';\nimport {updateCrossingModeState} from './poi-layer-crossing-utils.js';\nimport {getEffectivePoiX} from '../poi/poi-position.js';\nimport {easeInOutQuad} from '../poi-group/animation-utils.js';\nimport {\n getCssVarAsNumber,\n getTouchTargetSize,\n getVisualTargetSize,\n} from '../poi/poi-css-vars.js';\nimport {\n applyPoiVisualState,\n clearPoiVisualState,\n} from '../poi/poi-visual-state.js';\n\nconst EXIT_DELAY_MS_VAR = '--obc-poi-layer-exit-delay-ms';\nconst GROUP_REMOVAL_DELAY_MS_VAR = '--obc-poi-layer-group-removal-delay-ms';\nconst EXIT_LOCK_DURATION_MS_VAR = '--obc-poi-layer-exit-lock-duration-ms';\nconst POI_CROSSING_MIN_GAP_VAR = '--obc-poi-layer-crossing-min-gap';\n\ninterface PoiButtonGroupElement extends HTMLElement {\n expand?: boolean;\n collapsing?: boolean;\n updatePosition?: () => void;\n refreshExpandedLayout?: (preserveCenter?: boolean) => void;\n internalSwapping?: boolean;\n}\n\nexport enum OverlapMode {\n Grouping = 'grouping',\n Crossing = 'crossing',\n}\n\n/**\n * `<obc-poi-layer>` - A POI layout container that resolves overlapping targets by grouping or crossing strategies.\n *\n * This component watches slotted POI targets, applies overlap state/visual rules, and coordinates automatic `obc-poi-group` creation when needed.\n * Use it as the main layer container when you want centralized overlap behavior plus layer height updates for parent layout systems.\n *\n * ### Features\n * - Overlap strategies: `overlapMode=\"grouping\"` builds overlap clusters; `overlapMode=\"crossing\"` continuously adjusts horizontal offsets to reduce crossings.\n * - Auto-group lifecycle: Creates/removes auto groups and preserves front/behind/pre-group states during transitions.\n * - Manual group support: Respects existing `obc-poi-group` elements and can optionally join nearby targets while a group is expanded (`joinWhileExpanded`).\n * - Dynamic observation: Reacts to slot changes, target style/position mutations, and target size changes to recompute grouping and layer height.\n * - Layer diagnostics: `debug` shows a label overlay using `label`.\n * - Selection flag: `isSelected` reflects to attribute but has no direct runtime layout logic in this class.\n * - Group ordering option: `internalSwapping` is forwarded to groups to allow expanded ordering updates based on movement.\n *\n * ### Usage Guidelines\n * - Place `obc-poi-data` targets (and optional `obc-poi-group`) in the default slot.\n * - Choose `overlapMode` based on behavior:\n * - `grouping`: best when overlaps should collapse into expandable clusters.\n * - `crossing`: best when targets stay independent but should separate horizontally.\n * - Listen for `layer-resize` to keep parent containers in sync with computed layer height.\n * - Enable `joinWhileExpanded` only when targets should be able to join an already expanded auto-group.\n * - **TODO(designer):** Confirm intended user-visible behavior for `isSelected`, since it currently reflects an attribute but is not consumed by the layer logic here.\n *\n * ### Slots\n * | Slot | Renders When... | Purpose |\n * | --- | --- | --- |\n * | default | Always | Hosts POI targets (`obc-poi-data*`) and optional manual `obc-poi-group` elements. |\n *\n * ### Events\n * - `layer-resize` - Fired when computed layer height changes. Detail: `{ height: number, label: string }`.\n *\n * ### Best Practices\n * - Keep POI targets as direct descendants when possible to reduce grouping ambiguity.\n * - Use stable `x`/`y` updates for animated scenarios so grouping and crossing calculations remain predictable.\n * - Avoid adding non-POI interactive wrappers inside the layer unless needed, as layer observers track POI-related descendants.\n *\n * ### Example\n * ```html\n * <obc-poi-layer label=\"Targets\" overlapMode=\"grouping\" debug>\n * <obc-poi-data x=\"180\" y=\"110\"></obc-poi-data>\n * <obc-poi-data x=\"205\" y=\"90\"></obc-poi-data>\n * <obc-poi-data x=\"230\" y=\"100\"></obc-poi-data>\n * </obc-poi-layer>\n * ```\n *\n * @slot - Default slot for POI targets and optional POI groups.\n * @fires layer-resize {CustomEvent<{height:number,label:string}>} Fired when the layer height changes.\n * @fires layer-selection-changed {Event} Fired when the layer's `isSelected` state changes. Bubbles.\n * @experimental\n */\n@customElement('obc-poi-layer')\nexport class ObcPoiLayer extends LitElement {\n @property({type: String}) label = '';\n @property({type: Boolean}) debug = false;\n @property({type: String}) overlapMode: OverlapMode = OverlapMode.Grouping;\n @property({type: Boolean, attribute: 'is-selected'})\n isSelected = false;\n @property({type: Boolean, attribute: 'join-while-expanded'})\n joinWhileExpanded = false;\n @property({type: Boolean, attribute: 'internal-swapping'})\n internalSwapping = false;\n\n @query('.wrapper') private wrapper?: HTMLElement;\n\n private resizeObserver?: ResizeObserver;\n private targetResizeObserver?: ResizeObserver;\n private lastHeight = 0;\n private isGrouping = false;\n private targetObservers = new Map<Poi, MutationObserver>();\n private targetSizeElements = new Map<Poi, HTMLElement>();\n private groupingRaf = 0;\n private heightRaf = 0;\n private groupRemovalTimers = new WeakMap<HTMLElement, number>();\n private exitLockTimers = new Map<HTMLElement, number>();\n private layerMutationObserver?: MutationObserver;\n private autoGroupCollapseTimeout = 0;\n private crossingModeRaf = 0;\n private cachedCrossingTargets: Poi[] = [];\n private crossingTargetsDirty = false;\n private crossingOrder: Poi[] = [];\n private crossingLastEffectiveX = new Map<Poi, number>();\n private previousPositions = new Map<Poi, number>();\n private lastOffsets = new Map<Poi, number>();\n private static readonly GROUP_LAYER_HOOK_ATTR = 'data-in-poi-layer';\n private handleSlotChange = () => {\n this.updateTargetObservers();\n this.scheduleGrouping();\n this.scheduleLayerHeightUpdate();\n };\n private handleCollapseFinished = () => {\n this.scheduleGrouping();\n };\n\n override connectedCallback() {\n super.connectedCallback();\n if (!this.hasUpdated) return;\n this.setupResizeObserver();\n this.setupTargetResizeObserver();\n this.setupLayerMutationObserver();\n this.updateTargetObservers();\n this.scheduleGrouping();\n this.scheduleLayerHeightUpdate();\n this.addLayerEventListeners();\n const slot = this.shadowRoot?.querySelector('slot');\n slot?.addEventListener('slotchange', this.handleSlotChange);\n }\n\n override firstUpdated() {\n this.crossingTargetsDirty = true;\n this.setupResizeObserver();\n this.setupTargetResizeObserver();\n this.setupLayerMutationObserver();\n this.updateTargetObservers();\n this.scheduleGrouping();\n this.scheduleLayerHeightUpdate();\n const slot = this.shadowRoot?.querySelector('slot');\n slot?.addEventListener('slotchange', this.handleSlotChange);\n requestAnimationFrame(() => {\n this.updateTargetObservers();\n this.scheduleLayerHeightUpdate();\n });\n this.addLayerEventListeners();\n }\n\n private handlePoiDataLayoutChange = () => {\n this.scheduleGrouping();\n this.scheduleLayerHeightUpdate();\n };\n\n private handleGroupExpand = (event: CustomEvent<{expand: boolean}>) => {\n const group = event.target as HTMLElement;\n if (!group?.tagName?.toLowerCase().includes('group')) return;\n if (group.hasAttribute('data-exiting')) return;\n\n const targets = this.getAllTargets();\n const groupedTargets = new Set<Poi>(this.getGroupTargets(group));\n if (groupedTargets.size === 0) return;\n\n if (event.detail.expand) {\n targets.forEach((target) => {\n if (!groupedTargets.has(target)) {\n const nextValue = this.resolveTargetValue(target, true);\n target.value = nextValue;\n if (nextValue === PoiDataValue.Overlapped) {\n this.applyStandaloneVisualState(target, true);\n } else {\n this.clearStandaloneVisualState(target);\n }\n }\n });\n }\n };\n\n override disconnectedCallback() {\n super.disconnectedCallback();\n this.removeLayerEventListeners();\n const slot = this.shadowRoot?.querySelector('slot');\n slot?.removeEventListener('slotchange', this.handleSlotChange);\n this.resizeObserver?.disconnect();\n this.targetResizeObserver?.disconnect();\n this.layerMutationObserver?.disconnect();\n this.targetObservers.forEach((observer) => observer.disconnect());\n this.targetObservers.clear();\n this.targetSizeElements.clear();\n if (this.groupingRaf) {\n cancelAnimationFrame(this.groupingRaf);\n this.groupingRaf = 0;\n }\n if (this.crossingModeRaf) {\n cancelAnimationFrame(this.crossingModeRaf);\n this.crossingModeRaf = 0;\n }\n this.previousPositions.clear();\n if (this.heightRaf) {\n cancelAnimationFrame(this.heightRaf);\n this.heightRaf = 0;\n }\n this.exitLockTimers.forEach((timerId) => window.clearTimeout(timerId));\n this.exitLockTimers.clear();\n if (this.autoGroupCollapseTimeout) {\n window.clearTimeout(this.autoGroupCollapseTimeout);\n this.autoGroupCollapseTimeout = 0;\n }\n this.buttonOffsetXResetRaf.forEach((rafId) => cancelAnimationFrame(rafId));\n this.buttonOffsetXResetRaf.clear();\n this.lastOffsets.clear();\n this.crossingLastEffectiveX.clear();\n }\n\n private addLayerEventListeners() {\n this.addEventListener(\n 'obc-poi-data-layout-change',\n this.handlePoiDataLayoutChange as EventListener\n );\n this.addEventListener('expand', this.handleGroupExpand as EventListener);\n this.addEventListener(\n 'collapse-finished',\n this.handleCollapseFinished as EventListener\n );\n }\n\n private removeLayerEventListeners() {\n this.removeEventListener(\n 'obc-poi-data-layout-change',\n this.handlePoiDataLayoutChange as EventListener\n );\n this.removeEventListener('expand', this.handleGroupExpand as EventListener);\n this.removeEventListener(\n 'collapse-finished',\n this.handleCollapseFinished as EventListener\n );\n }\n\n private setupResizeObserver() {\n if (typeof ResizeObserver === 'undefined') return;\n this.resizeObserver = new ResizeObserver((entries) => {\n for (const entry of entries) {\n this.updateLayerHeight(entry.contentRect.height);\n }\n });\n if (this.wrapper) {\n this.resizeObserver.observe(this.wrapper);\n this.updateLayerHeight(this.wrapper.getBoundingClientRect().height);\n }\n }\n\n private setupTargetResizeObserver() {\n if (typeof ResizeObserver === 'undefined') return;\n if (this.targetResizeObserver) return;\n this.targetResizeObserver = new ResizeObserver(() =>\n this.scheduleLayerHeightUpdate()\n );\n }\n\n private scheduleLayerHeightUpdate() {\n if (this.heightRaf) return;\n this.heightRaf = requestAnimationFrame(() => {\n this.heightRaf = 0;\n this.syncLayerHeight();\n });\n }\n\n private syncLayerHeight() {\n if (!this.isConnected) return;\n const minHeight = this.getLayerMinHeight();\n const heightFloor = this.getLayerHeightFloor(minHeight);\n const targets = this.getAllTargets();\n if (targets.length === 0) {\n const nextHeight = heightFloor;\n this.style.setProperty('--obc-poi-layer-height', `${nextHeight}px`);\n this.updateLayerHeight(nextHeight);\n return;\n }\n const rects = new Map<Poi, DOMRect>();\n targets.forEach((target) => rects.set(target, this.getTargetRect(target)));\n let maxHeight = 0;\n rects.forEach((rect) => {\n const height = rect?.height ?? 0;\n if (Number.isFinite(height)) {\n maxHeight = Math.max(maxHeight, height);\n }\n });\n const nextHeight = Math.max(maxHeight, heightFloor);\n if (nextHeight <= 0) {\n this.style.setProperty('--obc-poi-layer-height', '0px');\n this.updateLayerHeight(0);\n return;\n }\n const roundedHeight = Math.round(nextHeight);\n this.style.setProperty('--obc-poi-layer-height', `${roundedHeight}px`);\n this.updateLayerHeight(roundedHeight);\n }\n\n private getLayerMinHeight(): number {\n const minHeightRaw = getComputedStyle(this).minHeight;\n const minHeight = Number.parseFloat(minHeightRaw);\n return Number.isFinite(minHeight) ? minHeight : 0;\n }\n\n private getLayerHeightFloor(minHeight: number): number {\n if (!this.hasAttribute('data-stack-inactive')) {\n return minHeight;\n }\n\n return Math.max(minHeight, this.lastHeight);\n }\n\n private updateLayerHeight(nextHeight: number) {\n const roundedHeight = Math.round(nextHeight);\n if (roundedHeight === this.lastHeight) return;\n this.lastHeight = roundedHeight;\n this.dispatchEvent(\n new CustomEvent('layer-resize', {\n detail: {\n height: roundedHeight,\n label: this.label,\n },\n bubbles: true,\n composed: true,\n })\n );\n }\n\n private updateTargetObservers() {\n const targets = this.getAllTargets();\n const targetSet = new Set(targets);\n\n this.targetObservers.forEach((observer, target) => {\n if (!targetSet.has(target)) {\n observer.disconnect();\n this.targetObservers.delete(target);\n }\n });\n\n targets.forEach((target) => {\n if (this.targetObservers.has(target)) return;\n const observer = new MutationObserver(() => {\n this.scheduleGrouping();\n this.scheduleLayerHeightUpdate();\n });\n observer.observe(target, {\n attributes: true,\n attributeFilter: ['style', 'y', 'button-y'],\n });\n this.targetObservers.set(target, observer);\n });\n this.updateTargetSizeObservers(targets, targetSet);\n }\n\n private updateTargetSizeObservers(targets: Poi[], targetSet: Set<Poi>) {\n if (!this.targetResizeObserver) return;\n this.targetSizeElements.forEach((element, target) => {\n if (!targetSet.has(target) || !element.isConnected) {\n this.targetResizeObserver?.unobserve(element);\n this.targetSizeElements.delete(target);\n }\n });\n targets.forEach((target) => {\n const sizeElement = this.getTargetSizeElement(target);\n if (!sizeElement) return;\n const existing = this.targetSizeElements.get(target);\n if (existing === sizeElement) return;\n if (existing) {\n this.targetResizeObserver?.unobserve(existing);\n }\n this.targetResizeObserver?.observe(sizeElement);\n this.targetSizeElements.set(target, sizeElement);\n });\n }\n\n private getTargetSizeElement(target: Poi): HTMLElement | null {\n return target.getVisualElement(PoiDataVisualRectPreference.Size);\n }\n\n private isPoiLayerRelevantNode(node: HTMLElement): boolean {\n if (isPoi(node) || node.tagName.toLowerCase() === 'obc-poi-group')\n return true;\n return !!node.querySelector(`[${POI_ATTR}], obc-poi-group`);\n }\n\n private setupLayerMutationObserver() {\n this.layerMutationObserver?.disconnect();\n this.layerMutationObserver = new MutationObserver((mutations) => {\n for (const mutation of mutations) {\n if (mutation.type !== 'childList') continue;\n const nodes = [...mutation.addedNodes, ...mutation.removedNodes];\n for (const node of nodes) {\n if (!(node instanceof HTMLElement)) continue;\n if (this.isPoiLayerRelevantNode(node)) {\n this.updateTargetObservers();\n this.scheduleGrouping();\n this.scheduleLayerHeightUpdate();\n this.crossingTargetsDirty = true;\n return;\n }\n }\n }\n });\n this.layerMutationObserver.observe(this, {childList: true, subtree: true});\n }\n\n public requestGroupingUpdate() {\n this.scheduleGrouping();\n this.scheduleLayerHeightUpdate();\n }\n\n private scheduleGrouping() {\n if (this.overlapMode === OverlapMode.Crossing) {\n this.scheduleCrossingMode();\n return;\n }\n if (this.groupingRaf) return;\n this.groupingRaf = requestAnimationFrame(() => {\n this.groupingRaf = 0;\n this.updateGrouping();\n });\n }\n\n private scheduleCrossingMode() {\n if (this.crossingModeRaf) return;\n this.crossingModeRaf = requestAnimationFrame(() => {\n try {\n this.crossingModeRaf = 0;\n const shouldContinue = this.updateCrossingMode();\n if (\n this.overlapMode === OverlapMode.Crossing &&\n this.isConnected &&\n shouldContinue\n ) {\n this.scheduleCrossingMode();\n }\n } catch (error) {\n console.error('[poi-layer] Error in crossing mode:', error);\n this.crossingModeRaf = 0;\n }\n });\n }\n\n private updateCrossingMode(): boolean {\n if (this.crossingTargetsDirty) {\n this.cachedCrossingTargets = this.getAllTargets();\n this.crossingTargetsDirty = false;\n }\n const targets = this.cachedCrossingTargets;\n const buttonWidth = getTouchTargetSize(this);\n const minGap = getCssVarAsNumber(\n this,\n POI_CROSSING_MIN_GAP_VAR,\n buttonWidth + 4\n );\n const next = updateCrossingModeState({\n targets,\n buttonWidth,\n minGap,\n previousPositions: this.previousPositions,\n lastOffsets: this.lastOffsets,\n crossingOrder: this.crossingOrder,\n crossingLastEffectiveX: this.crossingLastEffectiveX,\n });\n this.previousPositions = next.previousPositions;\n this.crossingOrder = next.crossingOrder;\n return next.shouldContinue;\n }\n\n private toggleGroupLayerHook(group: HTMLElement, hasTargets: boolean) {\n if (hasTargets) {\n group.setAttribute(ObcPoiLayer.GROUP_LAYER_HOOK_ATTR, '');\n } else {\n group.removeAttribute(ObcPoiLayer.GROUP_LAYER_HOOK_ATTR);\n }\n }\n\n private updateGrouping() {\n if (this.isGrouping) return;\n this.isGrouping = true;\n try {\n const manualGroups = (\n Array.from(\n this.querySelectorAll('obc-poi-group')\n ) as PoiButtonGroupElement[]\n ).filter((group) => !group.hasAttribute('data-auto-group'));\n const manualGroupedTargets = new Set<HTMLElement>();\n manualGroups.forEach((group) => {\n const groupTargets = this.getGroupTargets(group);\n this.toggleGroupLayerHook(group, groupTargets.length > 0);\n groupTargets.forEach((target) => manualGroupedTargets.add(target));\n });\n if (manualGroups.length > 0) {\n const anyExpanded = manualGroups.some(\n (group) => group.expand === true || group.collapsing === true\n );\n if (anyExpanded) {\n return;\n }\n }\n\n const targets = this.getAllTargets().filter(\n (target) =>\n !manualGroupedTargets.has(target) &&\n !target.hasAttribute('data-stack-returning')\n );\n\n const layerRect = this.getBoundingClientRect();\n const enterRaw = getComputedStyle(this).getPropertyValue(\n '--obc-poi-layer-overlap-enter'\n );\n const exitRaw = getComputedStyle(this).getPropertyValue(\n '--obc-poi-layer-overlap-exit'\n );\n const preRaw = getComputedStyle(this).getPropertyValue(\n '--obc-poi-layer-overlap-pre'\n );\n const behindRaw = getComputedStyle(this).getPropertyValue(\n '--obc-poi-layer-overlap-behind'\n );\n const enterThreshold = Number.parseFloat(enterRaw) || 0;\n const exitThreshold =\n Number.parseFloat(exitRaw) || Math.max(enterThreshold + 8, 8);\n const preThreshold = Number.parseFloat(preRaw) || enterThreshold;\n const behindThreshold = Number.parseFloat(behindRaw) || enterThreshold;\n\n const currentGroupByTarget = new Map<Poi, HTMLElement>();\n targets.forEach((target) => {\n const parent = target.parentElement;\n if (parent?.tagName.toLowerCase() === 'obc-poi-group') {\n currentGroupByTarget.set(target, parent as HTMLElement);\n }\n });\n\n const rects = new Map<Poi, DOMRect>();\n targets.forEach((target) => {\n rects.set(target, this.getTargetRectForGrouping(target, layerRect));\n });\n\n const thresholds: GroupingThresholds = {\n enterThreshold,\n exitThreshold,\n preThreshold,\n behindThreshold,\n };\n\n const {adjacency, behindAdjacency, preGrouped} = buildAdjacencyMaps(\n targets,\n rects,\n thresholds,\n currentGroupByTarget\n );\n\n const clusters = buildClusters(targets, adjacency);\n const behindClusters = buildClusters(targets, behindAdjacency);\n\n const existingGroups = Array.from(\n this.querySelectorAll('obc-poi-group[data-auto-group]')\n ) as PoiButtonGroupElement[];\n\n const frontTargets = new Set<Poi>();\n clusters.forEach((cluster) => {\n const front = this.getFrontTarget(cluster, rects);\n if (front) frontTargets.add(front);\n });\n\n const behindTargets = new Set<Poi>();\n behindClusters.forEach((cluster) => {\n const behind = this.getShortestTarget(cluster, rects);\n if (behind) behindTargets.add(behind);\n });\n\n const expandedAutoGroup = existingGroups.find(\n (group) => group.expand === true || group.collapsing === true\n );\n if (expandedAutoGroup) {\n if (this.joinWhileExpanded) {\n this.tryJoinExpandedGroup(\n expandedAutoGroup,\n targets,\n rects,\n enterThreshold\n );\n }\n return;\n }\n\n const remainingClusters = [...clusters];\n const keptGroups: HTMLElement[] = [];\n\n existingGroups.forEach((group) => {\n const children = Array.from(group.children).filter(\n (child): child is Poi => isPoi(child)\n );\n const matchIndex = remainingClusters.findIndex(\n (cluster) =>\n cluster.length === children.length &&\n cluster.every((target) => children.includes(target))\n );\n if (matchIndex >= 0) {\n keptGroups.push(group);\n group.removeAttribute('data-exiting');\n group.setAttribute('data-visible', 'true');\n remainingClusters.splice(matchIndex, 1);\n } else {\n const front = this.getFrontTarget(children, rects);\n children.forEach((child) => {\n if (front && child === front) {\n child.setAttribute('data-front', 'true');\n child.setAttribute('data-front-exit', 'true');\n } else {\n child.removeAttribute('data-front');\n }\n });\n children.forEach((child) => {\n if (!front || child !== front) {\n child.setAttribute('data-exiting', 'true');\n this.startExitLock(child);\n } else {\n child.removeAttribute('data-exiting');\n child.removeAttribute('data-exit-lock');\n }\n child.removeAttribute('data-grouped');\n this.resetTarget(child);\n });\n group.removeAttribute('data-visible');\n group.setAttribute('data-exiting', 'true');\n children.forEach((child) => this.appendChild(child));\n children.forEach((child) => {\n if (!front || child !== front) {\n child.getBoundingClientRect();\n }\n });\n const exitDelay = getCssVarAsNumber(this, EXIT_DELAY_MS_VAR, 140);\n window.setTimeout(() => {\n children.forEach((child) => {\n if (!front || child !== front) {\n child.removeAttribute('data-exiting');\n }\n });\n }, exitDelay);\n requestAnimationFrame(() => {\n this.scheduleGroupRemoval(group);\n });\n }\n });\n\n remainingClusters.forEach((cluster) => {\n const group = document.createElement('obc-poi-group');\n group.setAttribute('data-auto-group', 'true');\n group.setAttribute('data-position-mode', 'bottom');\n group.setAttribute('data-visible', 'true');\n (group as PoiButtonGroupElement).internalSwapping =\n !!this.internalSwapping;\n group.setAttribute(\n 'positionVertical',\n `${this.getGroupPositionVertical(cluster, rects, layerRect, group)}px`\n );\n cluster.forEach((target) => {\n target.removeAttribute('data-grouped');\n group.appendChild(target);\n });\n this.appendChild(group);\n requestAnimationFrame(() => {\n cluster.forEach((target) =>\n target.setAttribute('data-grouped', 'true')\n );\n });\n keptGroups.push(group);\n });\n\n const groupedTargets = new Set<Poi>();\n keptGroups.forEach((group) => {\n Array.from(group.children).forEach((child) => {\n if (isPoi(child)) groupedTargets.add(child);\n });\n });\n\n targets.forEach((target) => {\n if (!groupedTargets.has(target)) {\n const exitLocked = target.hasAttribute('data-exit-lock');\n target.removeAttribute('data-grouped');\n target.removeAttribute('data-joined-expanded');\n if (target.hasAttribute('data-front-exit')) {\n target.setAttribute('data-front', 'true');\n target.removeAttribute('data-pregrouped');\n } else if (frontTargets.has(target)) {\n target.setAttribute('data-front', 'true');\n target.removeAttribute('data-pregrouped');\n } else if (preGrouped.has(target) && !exitLocked) {\n target.removeAttribute('data-front');\n target.setAttribute('data-pregrouped', 'true');\n } else {\n target.removeAttribute('data-front');\n target.removeAttribute('data-pregrouped');\n }\n if (\n !exitLocked &&\n behindTargets.has(target) &&\n !frontTargets.has(target)\n ) {\n target.setAttribute('data-behind', 'true');\n } else {\n target.removeAttribute('data-behind');\n }\n if (exitLocked) {\n target.removeAttribute('data-pregrouped');\n target.removeAttribute('data-behind');\n }\n const isOverlapState = target.hasAttribute('data-behind');\n const nextValue = this.resolveTargetValue(target, isOverlapState);\n target.value = nextValue;\n if (nextValue === PoiDataValue.Overlapped) {\n this.applyStandaloneVisualState(target, true);\n } else {\n this.clearStandaloneVisualState(target);\n }\n this.resetTarget(target);\n } else {\n target.removeAttribute('data-behind');\n this.clearStandaloneVisualState(target);\n }\n });\n\n this.refreshGroupPositions(layerRect, rects);\n\n requestAnimationFrame(() => {\n targets.forEach((target) => target.removeAttribute('data-front-exit'));\n });\n\n this.scheduleLayerHeightUpdate();\n } finally {\n this.isGrouping = false;\n }\n }\n\n private tryJoinExpandedGroup(\n group: PoiButtonGroupElement,\n targets: Poi[],\n rects: Map<Poi, DOMRect>,\n enterThreshold: number\n ) {\n const groupTargets = this.getGroupTargets(group);\n if (groupTargets.length === 0) return;\n\n const groupTargetSet = new Set(groupTargets);\n const candidates = targets.filter(\n (target) =>\n !groupTargetSet.has(target) &&\n target.parentElement?.tagName.toLowerCase() !== 'obc-poi-group'\n );\n if (candidates.length === 0) return;\n\n const useButtonRects = group.expand === true || group.collapsing === true;\n const groupCenters = groupTargets\n .map((target) =>\n useButtonRects ? this.getTargetRect(target) : rects.get(target)\n )\n .filter((rect): rect is DOMRect => !!rect)\n .map((rect) => rect.left + rect.width / 2);\n if (groupCenters.length === 0) return;\n\n const leftMost = Math.min(...groupCenters);\n const rightMost = Math.max(...groupCenters);\n const groupCenter = (leftMost + rightMost) / 2;\n\n let bestCandidate: Poi | null = null;\n let bestGap = Number.POSITIVE_INFINITY;\n\n for (const candidate of candidates) {\n const candidateRect = useButtonRects\n ? this.getTargetRect(candidate)\n : rects.get(candidate);\n if (!candidateRect) continue;\n for (const member of groupTargets) {\n const memberRect = useButtonRects\n ? this.getTargetRect(member)\n : rects.get(member);\n if (!memberRect) continue;\n const overlapHeight =\n Math.min(candidateRect.bottom, memberRect.bottom) -\n Math.max(candidateRect.top, memberRect.top);\n if (overlapHeight <= 0) continue;\n const gap = Math.max(\n 0,\n Math.max(candidateRect.left, memberRect.left) -\n Math.min(candidateRect.right, memberRect.right)\n );\n if (gap <= enterThreshold && gap < bestGap) {\n bestGap = gap;\n bestCandidate = candidate;\n }\n }\n }\n\n if (!bestCandidate) return;\n\n bestCandidate.setAttribute('data-joined-expanded', 'true');\n\n const candidateRect = rects.get(bestCandidate);\n const candidateCenter =\n candidateRect?.left !== undefined\n ? candidateRect.left + candidateRect.width / 2\n : 0;\n const insertBefore = candidateCenter < groupCenter;\n\n if (insertBefore) {\n group.insertBefore(bestCandidate, groupTargets[0] ?? null);\n } else {\n group.appendChild(bestCandidate);\n }\n\n bestCandidate.setAttribute('data-grouped', 'true');\n bestCandidate.removeAttribute('data-behind');\n bestCandidate.removeAttribute('data-pregrouped');\n bestCandidate.value = this.resolveTargetValue(bestCandidate, false);\n this.clearStandaloneVisualState(bestCandidate);\n\n const touchRaw = getComputedStyle(group).getPropertyValue(\n '--maneuvering-components-poi-button-touch-target'\n );\n const touchSize = Number.parseFloat(touchRaw) || 0;\n if (touchSize > 0) {\n const touchTarget = `${touchSize}px`;\n bestCandidate.style.width = touchTarget;\n bestCandidate.style.minWidth = touchTarget;\n bestCandidate.style.height = touchTarget;\n }\n\n group.refreshExpandedLayout?.(true);\n }\n\n private applyStandaloneVisualState(target: Poi, overlap: boolean) {\n const isEnhanced = target.buttonType === ObcPoiButtonType.Enhanced;\n const size = getVisualTargetSize(this, isEnhanced, overlap);\n applyPoiVisualState(target, overlap, size);\n }\n\n private resolveTargetValue(target: Poi, overlap: boolean): PoiDataValue {\n if (overlap) {\n return PoiDataValue.Overlapped;\n }\n\n if (target.selected) {\n return PoiDataValue.Checked;\n }\n return PoiDataValue.Unchecked;\n }\n\n private clearStandaloneVisualState(target: HTMLElement) {\n clearPoiVisualState(target);\n }\n\n private refreshGroupPositions(\n layerRect?: DOMRect,\n rects?: Map<Poi, DOMRect>\n ) {\n const groups = Array.from(\n this.querySelectorAll('obc-poi-group')\n ) as PoiButtonGroupElement[];\n groups.forEach((group) => {\n const children = Array.from(group.children).filter(\n (child): child is Poi => isPoi(child)\n );\n this.toggleGroupLayerHook(group, children.length > 0);\n const hasPositionAttr =\n group.hasAttribute('positionvertical') ||\n group.hasAttribute('positionVertical');\n if (\n !group.hasAttribute('data-auto-group') &&\n !group.hasAttribute('data-position-mode')\n ) {\n group.setAttribute('data-position-mode', 'bottom');\n }\n const shouldSetPosition =\n group.hasAttribute('data-auto-group') || !hasPositionAttr;\n if (group.hasAttribute('data-auto-group')) {\n (group as PoiButtonGroupElement).internalSwapping =\n !!this.internalSwapping;\n }\n if (children.length > 0 && shouldSetPosition) {\n const layerBounds = layerRect ?? this.getBoundingClientRect();\n const rectMap =\n rects ??\n new Map(\n children.map((child) => [\n child,\n this.getTargetRectForGrouping(child, layerBounds),\n ])\n );\n group.setAttribute(\n 'positionVertical',\n `${this.getGroupPositionVertical(children, rectMap, layerBounds, group)}px`\n );\n }\n group.updatePosition?.();\n });\n }\n\n private getGroupPositionVertical(\n targets: Poi[],\n rects: Map<Poi, DOMRect>,\n layerRect: DOMRect,\n group?: PoiButtonGroupElement\n ) {\n let maxBottom = Number.NEGATIVE_INFINITY;\n targets.forEach((target) => {\n const rect = rects.get(target) ?? target.getBoundingClientRect();\n maxBottom = Math.max(maxBottom, rect.bottom);\n });\n const baseBottom = maxBottom - layerRect.top;\n const isAutoGroup = group?.hasAttribute('data-auto-group') ?? false;\n const offsetRaw = getComputedStyle(this).getPropertyValue(\n '--obc-poi-layer-auto-group-offset-y'\n );\n let offset = Number.parseFloat(offsetRaw) || 0;\n if (isAutoGroup && this.closest('obc-poi-layer-stack')) {\n offset = 0;\n }\n return Math.round(baseBottom + offset);\n }\n\n private resetTarget(target: Poi) {\n if (typeof target.targetOffsetX === 'number') {\n target.setRuntimeHorizontalOffsets?.(target.buttonOffsetX, 0);\n if (!target.setRuntimeHorizontalOffsets) {\n target.targetOffsetX = 0;\n }\n }\n this.animateButtonOffsetXToZero(target);\n target.style.removeProperty('--obc-poi-target-offset-x');\n target.style.removeProperty('position');\n target.style.removeProperty('width');\n target.style.removeProperty('min-width');\n target.style.removeProperty('height');\n target.style.removeProperty('transform');\n target.style.removeProperty('--obc-poi-group-overlap-height');\n target.style.removeProperty('--obc-poi-group-overlap-shift');\n }\n\n private buttonOffsetXResetRaf = new Map<Poi, number>();\n\n private animateButtonOffsetXToZero(target: Poi) {\n const start = target.buttonOffsetX;\n if (!Number.isFinite(start) || Math.abs(start) < 0.5) {\n target.setRuntimeHorizontalOffsets?.(0, target.targetOffsetX);\n if (!target.setRuntimeHorizontalOffsets) {\n target.buttonOffsetX = 0;\n }\n return;\n }\n\n const existing = this.buttonOffsetXResetRaf.get(target);\n if (existing) {\n cancelAnimationFrame(existing);\n }\n\n const duration = 100;\n const startTime = performance.now();\n const step = (now: number) => {\n try {\n if (!target.isConnected) {\n this.buttonOffsetXResetRaf.delete(target);\n return;\n }\n const t = Math.min((now - startTime) / duration, 1);\n const eased = easeInOutQuad(t);\n const nextButtonOffsetX = start + (0 - start) * eased;\n target.setRuntimeHorizontalOffsets?.(\n nextButtonOffsetX,\n target.targetOffsetX\n );\n if (!target.setRuntimeHorizontalOffsets) {\n target.buttonOffsetX = nextButtonOffsetX;\n }\n if (t < 1) {\n this.buttonOffsetXResetRaf.set(target, requestAnimationFrame(step));\n } else {\n this.buttonOffsetXResetRaf.delete(target);\n }\n } catch (error) {\n console.error('[poi-layer] Error in button offset reset:', error);\n this.buttonOffsetXResetRaf.delete(target);\n }\n };\n\n this.buttonOffsetXResetRaf.set(target, requestAnimationFrame(step));\n }\n\n private scheduleGroupRemoval(group: HTMLElement) {\n const existing = this.groupRemovalTimers.get(group);\n if (existing) {\n window.clearTimeout(existing);\n }\n group.setAttribute('data-exiting', 'true');\n const removalDelay = getCssVarAsNumber(\n this,\n GROUP_REMOVAL_DELAY_MS_VAR,\n 250\n );\n const timeoutId = window.setTimeout(() => {\n group.remove();\n this.groupRemovalTimers.delete(group);\n }, removalDelay);\n this.groupRemovalTimers.set(group, timeoutId);\n }\n\n private startExitLock(target: HTMLElement) {\n target.setAttribute('data-exit-lock', 'true');\n const existing = this.exitLockTimers.get(target);\n if (existing) window.clearTimeout(existing);\n const lockDuration = getCssVarAsNumber(\n this,\n EXIT_LOCK_DURATION_MS_VAR,\n 500\n );\n const timeoutId = window.setTimeout(() => {\n target.removeAttribute('data-exit-lock');\n this.exitLockTimers.delete(target);\n }, lockDuration);\n this.exitLockTimers.set(target, timeoutId);\n }\n\n private getFrontTarget(targets: Poi[], rects?: Map<Poi, DOMRect>) {\n if (targets.length === 0) return null;\n let front = targets[0];\n let maxHeight = this.getTargetHeight(front, rects);\n targets.forEach((target) => {\n const height = this.getTargetHeight(target, rects);\n if (height > maxHeight) {\n maxHeight = height;\n front = target;\n }\n });\n return front;\n }\n\n private getTargetRect(target: HTMLElement): DOMRect {\n if (isPoi(target)) {\n return target.getVisualRect(PoiDataVisualRectPreference.Largest);\n }\n return target.getBoundingClientRect();\n }\n\n private getTargetRectForGrouping(\n target: HTMLElement,\n layerRect: DOMRect\n ): DOMRect {\n const rect = this.getTargetRect(target);\n const leftValue = getEffectivePoiX(target);\n if (!Number.isFinite(leftValue)) return rect;\n const width = rect.width || 0;\n const height = rect.height || 0;\n const left = layerRect.left + leftValue - width / 2;\n const top = layerRect.bottom - height;\n return new DOMRect(left, top, width, height);\n }\n\n private getTargetHeight(target: Poi, rects?: Map<Poi, DOMRect>): number {\n const targetY = Number.isFinite(target.y ?? NaN) ? (target.y ?? 0) : null;\n const yAttr = target.getAttribute('y');\n const yValue = Number.parseFloat(yAttr ?? '');\n const attrTargetY = !Number.isNaN(yValue) ? yValue : null;\n const buttonY =\n typeof target.buttonY === 'number' && Number.isFinite(target.buttonY)\n ? target.buttonY\n : null;\n const buttonYAttr = target.getAttribute('button-y');\n const buttonYValue = Number.parseFloat(buttonYAttr ?? '');\n const attrButtonY = !Number.isNaN(buttonYValue) ? buttonYValue : null;\n const logicalHeight = Math.max(\n targetY ?? 0,\n attrTargetY ?? 0,\n buttonY ?? 0,\n attrButtonY ?? 0\n );\n if (logicalHeight > 0) {\n return logicalHeight;\n }\n const rect = rects?.get(target) ?? this.getTargetRect(target);\n return rect.height;\n }\n\n private getShortestTarget(targets: Poi[], rects?: Map<Poi, DOMRect>) {\n if (targets.length === 0) return null;\n let shortest = targets[0];\n let minHeight = this.getTargetHeight(shortest, rects);\n targets.forEach((target) => {\n const height = this.getTargetHeight(target, rects);\n if (height < minHeight) {\n minHeight = height;\n shortest = target;\n }\n });\n return shortest;\n }\n\n private getAllTargets(): Poi[] {\n return Array.from(this.querySelectorAll(`[${POI_ATTR}]`)).filter(\n (node): node is Poi =>\n isPoi(node) && !node.hasAttribute('data-stack-selected')\n );\n }\n\n private getGroupTargets(group: ParentNode): Poi[] {\n return Array.from(group.querySelectorAll(`[${POI_ATTR}]`)).filter(\n (node): node is Poi => isPoi(node)\n );\n }\n\n protected override updated(changedProperties: PropertyValues): void {\n if (changedProperties.has('isSelected')) {\n this.dispatchEvent(new Event('layer-selection-changed', {bubbles: true}));\n }\n }\n\n override render() {\n return html`\n <div class=\"wrapper${this.debug ? ' debug' : ''}\">\n ${this.debug\n ? html`<span class=\"debug-label\">${this.label || 'Layer'}</span>`\n : nothing}\n <slot></slot>\n </div>\n `;\n }\n\n static override styles = unsafeCSS(componentStyle);\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'obc-poi-layer': ObcPoiLayer;\n }\n}\n"],"names":["OverlapMode","PoiDataValue","nextHeight","candidateRect"],"mappings":"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"}
@@ -17,6 +17,7 @@ export declare enum ObcPoiObjectAtonStyle {
17
17
  }
18
18
  export { ObcPoiObjectState as ObcPoiObjectAtonState };
19
19
  /**
20
+ * @slot - Icon content rendered inside the POI object.
20
21
  * @experimental
21
22
  */
22
23
  export declare class ObcPoiObjectAton extends AbstractPoiObject {
@@ -1 +1 @@
1
- {"version":3,"file":"poi-object-aton.d.ts","sourceRoot":"","sources":["../../../src/ar/poi-object/poi-object-aton.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,cAAc,EAAC,MAAM,KAAK,CAAC;AAIpD,OAAO,EAAC,iBAAiB,EAAC,MAAM,0BAA0B,CAAC;AAC3D,OAAO,EACL,gBAAgB,EAChB,iBAAiB,EAElB,MAAM,iBAAiB,CAAC;AAGzB,oBAAY,oBAAoB;IAC9B,SAAS,cAAc;IACvB,OAAO,YAAY;IACnB,KAAK,UAAU;IACf,IAAI,SAAS;IACb,GAAG,SAAS;IACZ,QAAQ,eAAe;CACxB;AAED,oBAAY,qBAAqB;IAC/B,OAAO,YAAY;IACnB,KAAK,UAAU;IACf,GAAG,QAAQ;IACX,MAAM,WAAW;CAClB;AAED,OAAO,EAAC,iBAAiB,IAAI,qBAAqB,EAAC,CAAC;AAEpD;;GAEG;AACH,qBACa,gBAAiB,SAAQ,iBAAiB;IAC3B,IAAI,EAAE,oBAAoB,CACrB;IAItB,WAAW,EAAE,qBAAqB,CAAiC;IAE5E,OAAO,KAAK,UAAU,GAErB;IAED,OAAO,KAAK,YAAY,GAEvB;IAED,OAAO,KAAK,aAAa,GAExB;IAED,IAAa,QAAQ,IAAI,gBAAgB,CAexC;IAED,OAAO,CAAC,iBAAiB;IAWhB,MAAM;IA8Bf,OAAgB,MAAM,4BAGpB;CACH;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,qBAAqB,EAAE,gBAAgB,CAAC;KACzC;CACF"}
1
+ {"version":3,"file":"poi-object-aton.d.ts","sourceRoot":"","sources":["../../../src/ar/poi-object/poi-object-aton.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,cAAc,EAAC,MAAM,KAAK,CAAC;AAIpD,OAAO,EAAC,iBAAiB,EAAC,MAAM,0BAA0B,CAAC;AAC3D,OAAO,EACL,gBAAgB,EAChB,iBAAiB,EAElB,MAAM,iBAAiB,CAAC;AAGzB,oBAAY,oBAAoB;IAC9B,SAAS,cAAc;IACvB,OAAO,YAAY;IACnB,KAAK,UAAU;IACf,IAAI,SAAS;IACb,GAAG,SAAS;IACZ,QAAQ,eAAe;CACxB;AAED,oBAAY,qBAAqB;IAC/B,OAAO,YAAY;IACnB,KAAK,UAAU;IACf,GAAG,QAAQ;IACX,MAAM,WAAW;CAClB;AAED,OAAO,EAAC,iBAAiB,IAAI,qBAAqB,EAAC,CAAC;AAEpD;;;GAGG;AACH,qBACa,gBAAiB,SAAQ,iBAAiB;IAC3B,IAAI,EAAE,oBAAoB,CACrB;IAItB,WAAW,EAAE,qBAAqB,CAAiC;IAE5E,OAAO,KAAK,UAAU,GAErB;IAED,OAAO,KAAK,YAAY,GAEvB;IAED,OAAO,KAAK,aAAa,GAExB;IAED,IAAa,QAAQ,IAAI,gBAAgB,CAexC;IAED,OAAO,CAAC,iBAAiB;IAWhB,MAAM;IA8Bf,OAAgB,MAAM,4BAGpB;CACH;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,qBAAqB,EAAE,gBAAgB,CAAC;KACzC;CACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"poi-object-aton.js","sources":["../../../src/ar/poi-object/poi-object-aton.ts"],"sourcesContent":["import {html, unsafeCSS, TemplateResult} from 'lit';\nimport {property} from 'lit/decorators.js';\nimport {classMap} from 'lit/directives/class-map.js';\nimport {customElement} from '../../decorator.js';\nimport {AbstractPoiObject} from './abstract-poi-object.js';\nimport {\n ObcPoiObjectType,\n ObcPoiObjectState,\n ObcPoiObjectStyle,\n} from './poi-object.js';\nimport componentStyle from './poi-object-aton.css?inline';\n\nexport enum ObcPoiObjectAtonType {\n Indicator = 'indicator',\n Regular = 'regular',\n Large = 'large',\n AtoN = 'aton',\n NUp = 'n-up',\n NUpLarge = 'n-up-large',\n}\n\nexport enum ObcPoiObjectAtonStyle {\n Regular = 'regular',\n Green = 'green',\n Red = 'red',\n Yellow = 'yellow',\n}\n\nexport {ObcPoiObjectState as ObcPoiObjectAtonState};\n\n/**\n * @experimental\n */\n@customElement('obc-poi-object-aton')\nexport class ObcPoiObjectAton extends AbstractPoiObject {\n @property({type: String}) type: ObcPoiObjectAtonType =\n ObcPoiObjectAtonType.Regular;\n\n @property({type: String})\n // @ts-expect-error — widening type to include AtoN-specific styles\n override objectStyle: ObcPoiObjectAtonStyle = ObcPoiObjectAtonStyle.Regular;\n\n private get isAtonType(): boolean {\n return this.type === ObcPoiObjectAtonType.AtoN;\n }\n\n private get isOverlapped(): boolean {\n return this.state === ObcPoiObjectState.Overlapped;\n }\n\n private get isInteractive(): boolean {\n return this.interactive && !this.isOverlapped;\n }\n\n override get baseType(): ObcPoiObjectType {\n switch (this.type) {\n case ObcPoiObjectAtonType.Indicator:\n return ObcPoiObjectType.Indicator;\n case ObcPoiObjectAtonType.Regular:\n return ObcPoiObjectType.Regular;\n case ObcPoiObjectAtonType.Large:\n return ObcPoiObjectType.Large;\n case ObcPoiObjectAtonType.NUp:\n return ObcPoiObjectType.NUp;\n case ObcPoiObjectAtonType.NUpLarge:\n return ObcPoiObjectType.NUpLarge;\n default:\n return ObcPoiObjectType.Regular;\n }\n }\n\n private renderAtonDiamond(): TemplateResult {\n return html`\n <div class=\"aton-diamond-frame\">\n <div class=\"aton-diamond-background\" part=\"background-frame\"></div>\n <div class=\"aton-icon-container\">\n <slot></slot>\n </div>\n </div>\n `;\n }\n\n override render() {\n const wrapperClasses = {\n 'aton-wrapper': true,\n [`type-${this.type}`]: true,\n [`style-${this.objectStyle}`]: true,\n [`state-${this.state}`]: true,\n interactive: this.isInteractive,\n };\n\n if (this.isAtonType) {\n return html`<div class=${classMap(wrapperClasses)}>\n ${this.renderAtonDiamond()}\n </div>`;\n }\n\n return html`\n <div class=${classMap(wrapperClasses)}>\n <obc-poi-object\n exportparts=\"background-frame\"\n .type=${this.baseType}\n .objectStyle=${ObcPoiObjectStyle.Regular}\n .state=${this.state}\n ?interactive=${this.interactive}\n >\n <slot></slot>\n </obc-poi-object>\n </div>\n `;\n }\n\n static override styles = [\n ...AbstractPoiObject.styles,\n unsafeCSS(componentStyle),\n ];\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'obc-poi-object-aton': ObcPoiObjectAton;\n }\n}\n"],"names":["ObcPoiObjectAtonType","ObcPoiObjectAtonStyle"],"mappings":";;;;;;;;;;;;;;;;;AAYO,IAAK,yCAAAA,0BAAL;AACLA,wBAAA,WAAA,IAAY;AACZA,wBAAA,SAAA,IAAU;AACVA,wBAAA,OAAA,IAAQ;AACRA,wBAAA,MAAA,IAAO;AACPA,wBAAA,KAAA,IAAM;AACNA,wBAAA,UAAA,IAAW;AAND,SAAAA;AAAA,GAAA,wBAAA,CAAA,CAAA;AASL,IAAK,0CAAAC,2BAAL;AACLA,yBAAA,SAAA,IAAU;AACVA,yBAAA,OAAA,IAAQ;AACRA,yBAAA,KAAA,IAAM;AACNA,yBAAA,QAAA,IAAS;AAJC,SAAAA;AAAA,GAAA,yBAAA,CAAA,CAAA;AAaL,IAAM,mBAAN,cAA+B,kBAAkB;AAAA,EAAjD,cAAA;AAAA,UAAA,GAAA,SAAA;AACqB,SAAA,OACxB;AAIF,SAAS,cAAqC;AAAA,EAAA;AAAA,EAE9C,IAAY,aAAsB;AAChC,WAAO,KAAK,SAAS;AAAA,EACvB;AAAA,EAEA,IAAY,eAAwB;AAClC,WAAO,KAAK,UAAU,kBAAkB;AAAA,EAC1C;AAAA,EAEA,IAAY,gBAAyB;AACnC,WAAO,KAAK,eAAe,CAAC,KAAK;AAAA,EACnC;AAAA,EAEA,IAAa,WAA6B;AACxC,YAAQ,KAAK,MAAA;AAAA,MACX,KAAK;AACH,eAAO,iBAAiB;AAAA,MAC1B,KAAK;AACH,eAAO,iBAAiB;AAAA,MAC1B,KAAK;AACH,eAAO,iBAAiB;AAAA,MAC1B,KAAK;AACH,eAAO,iBAAiB;AAAA,MAC1B,KAAK;AACH,eAAO,iBAAiB;AAAA,MAC1B;AACE,eAAO,iBAAiB;AAAA,IAAA;AAAA,EAE9B;AAAA,EAEQ,oBAAoC;AAC1C,WAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQT;AAAA,EAES,SAAS;AAChB,UAAM,iBAAiB;AAAA,MACrB,gBAAgB;AAAA,MAChB,CAAC,QAAQ,KAAK,IAAI,EAAE,GAAG;AAAA,MACvB,CAAC,SAAS,KAAK,WAAW,EAAE,GAAG;AAAA,MAC/B,CAAC,SAAS,KAAK,KAAK,EAAE,GAAG;AAAA,MACzB,aAAa,KAAK;AAAA,IAAA;AAGpB,QAAI,KAAK,YAAY;AACnB,aAAO,kBAAkB,SAAS,cAAc,CAAC;AAAA,UAC7C,KAAK,mBAAmB;AAAA;AAAA,IAE9B;AAEA,WAAO;AAAA,mBACQ,SAAS,cAAc,CAAC;AAAA;AAAA;AAAA,kBAGzB,KAAK,QAAQ;AAAA,yBACN,kBAAkB,OAAO;AAAA,mBAC/B,KAAK,KAAK;AAAA,yBACJ,KAAK,WAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMvC;AAMF;AAlFa,iBA8EK,SAAS;AAAA,EACvB,GAAG,kBAAkB;AAAA,EACrB,UAAU,cAAc;AAC1B;AAhF0B,gBAAA;AAAA,EAAzB,SAAS,EAAC,MAAM,OAAA,CAAO;AAAA,GADb,iBACe,WAAA,QAAA,CAAA;AAKjB,gBAAA;AAAA,EAFR,SAAS,EAAC,MAAM,OAAA,CAAO;AAAA,GAJb,iBAMF,WAAA,eAAA,CAAA;AANE,mBAAN,gBAAA;AAAA,EADN,cAAc,qBAAqB;AAAA,GACvB,gBAAA;"}
1
+ {"version":3,"file":"poi-object-aton.js","sources":["../../../src/ar/poi-object/poi-object-aton.ts"],"sourcesContent":["import {html, unsafeCSS, TemplateResult} from 'lit';\nimport {property} from 'lit/decorators.js';\nimport {classMap} from 'lit/directives/class-map.js';\nimport {customElement} from '../../decorator.js';\nimport {AbstractPoiObject} from './abstract-poi-object.js';\nimport {\n ObcPoiObjectType,\n ObcPoiObjectState,\n ObcPoiObjectStyle,\n} from './poi-object.js';\nimport componentStyle from './poi-object-aton.css?inline';\n\nexport enum ObcPoiObjectAtonType {\n Indicator = 'indicator',\n Regular = 'regular',\n Large = 'large',\n AtoN = 'aton',\n NUp = 'n-up',\n NUpLarge = 'n-up-large',\n}\n\nexport enum ObcPoiObjectAtonStyle {\n Regular = 'regular',\n Green = 'green',\n Red = 'red',\n Yellow = 'yellow',\n}\n\nexport {ObcPoiObjectState as ObcPoiObjectAtonState};\n\n/**\n * @slot - Icon content rendered inside the POI object.\n * @experimental\n */\n@customElement('obc-poi-object-aton')\nexport class ObcPoiObjectAton extends AbstractPoiObject {\n @property({type: String}) type: ObcPoiObjectAtonType =\n ObcPoiObjectAtonType.Regular;\n\n @property({type: String})\n // @ts-expect-error — widening type to include AtoN-specific styles\n override objectStyle: ObcPoiObjectAtonStyle = ObcPoiObjectAtonStyle.Regular;\n\n private get isAtonType(): boolean {\n return this.type === ObcPoiObjectAtonType.AtoN;\n }\n\n private get isOverlapped(): boolean {\n return this.state === ObcPoiObjectState.Overlapped;\n }\n\n private get isInteractive(): boolean {\n return this.interactive && !this.isOverlapped;\n }\n\n override get baseType(): ObcPoiObjectType {\n switch (this.type) {\n case ObcPoiObjectAtonType.Indicator:\n return ObcPoiObjectType.Indicator;\n case ObcPoiObjectAtonType.Regular:\n return ObcPoiObjectType.Regular;\n case ObcPoiObjectAtonType.Large:\n return ObcPoiObjectType.Large;\n case ObcPoiObjectAtonType.NUp:\n return ObcPoiObjectType.NUp;\n case ObcPoiObjectAtonType.NUpLarge:\n return ObcPoiObjectType.NUpLarge;\n default:\n return ObcPoiObjectType.Regular;\n }\n }\n\n private renderAtonDiamond(): TemplateResult {\n return html`\n <div class=\"aton-diamond-frame\">\n <div class=\"aton-diamond-background\" part=\"background-frame\"></div>\n <div class=\"aton-icon-container\">\n <slot></slot>\n </div>\n </div>\n `;\n }\n\n override render() {\n const wrapperClasses = {\n 'aton-wrapper': true,\n [`type-${this.type}`]: true,\n [`style-${this.objectStyle}`]: true,\n [`state-${this.state}`]: true,\n interactive: this.isInteractive,\n };\n\n if (this.isAtonType) {\n return html`<div class=${classMap(wrapperClasses)}>\n ${this.renderAtonDiamond()}\n </div>`;\n }\n\n return html`\n <div class=${classMap(wrapperClasses)}>\n <obc-poi-object\n exportparts=\"background-frame\"\n .type=${this.baseType}\n .objectStyle=${ObcPoiObjectStyle.Regular}\n .state=${this.state}\n ?interactive=${this.interactive}\n >\n <slot></slot>\n </obc-poi-object>\n </div>\n `;\n }\n\n static override styles = [\n ...AbstractPoiObject.styles,\n unsafeCSS(componentStyle),\n ];\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'obc-poi-object-aton': ObcPoiObjectAton;\n }\n}\n"],"names":["ObcPoiObjectAtonType","ObcPoiObjectAtonStyle"],"mappings":";;;;;;;;;;;;;;;;;AAYO,IAAK,yCAAAA,0BAAL;AACLA,wBAAA,WAAA,IAAY;AACZA,wBAAA,SAAA,IAAU;AACVA,wBAAA,OAAA,IAAQ;AACRA,wBAAA,MAAA,IAAO;AACPA,wBAAA,KAAA,IAAM;AACNA,wBAAA,UAAA,IAAW;AAND,SAAAA;AAAA,GAAA,wBAAA,CAAA,CAAA;AASL,IAAK,0CAAAC,2BAAL;AACLA,yBAAA,SAAA,IAAU;AACVA,yBAAA,OAAA,IAAQ;AACRA,yBAAA,KAAA,IAAM;AACNA,yBAAA,QAAA,IAAS;AAJC,SAAAA;AAAA,GAAA,yBAAA,CAAA,CAAA;AAcL,IAAM,mBAAN,cAA+B,kBAAkB;AAAA,EAAjD,cAAA;AAAA,UAAA,GAAA,SAAA;AACqB,SAAA,OACxB;AAIF,SAAS,cAAqC;AAAA,EAAA;AAAA,EAE9C,IAAY,aAAsB;AAChC,WAAO,KAAK,SAAS;AAAA,EACvB;AAAA,EAEA,IAAY,eAAwB;AAClC,WAAO,KAAK,UAAU,kBAAkB;AAAA,EAC1C;AAAA,EAEA,IAAY,gBAAyB;AACnC,WAAO,KAAK,eAAe,CAAC,KAAK;AAAA,EACnC;AAAA,EAEA,IAAa,WAA6B;AACxC,YAAQ,KAAK,MAAA;AAAA,MACX,KAAK;AACH,eAAO,iBAAiB;AAAA,MAC1B,KAAK;AACH,eAAO,iBAAiB;AAAA,MAC1B,KAAK;AACH,eAAO,iBAAiB;AAAA,MAC1B,KAAK;AACH,eAAO,iBAAiB;AAAA,MAC1B,KAAK;AACH,eAAO,iBAAiB;AAAA,MAC1B;AACE,eAAO,iBAAiB;AAAA,IAAA;AAAA,EAE9B;AAAA,EAEQ,oBAAoC;AAC1C,WAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQT;AAAA,EAES,SAAS;AAChB,UAAM,iBAAiB;AAAA,MACrB,gBAAgB;AAAA,MAChB,CAAC,QAAQ,KAAK,IAAI,EAAE,GAAG;AAAA,MACvB,CAAC,SAAS,KAAK,WAAW,EAAE,GAAG;AAAA,MAC/B,CAAC,SAAS,KAAK,KAAK,EAAE,GAAG;AAAA,MACzB,aAAa,KAAK;AAAA,IAAA;AAGpB,QAAI,KAAK,YAAY;AACnB,aAAO,kBAAkB,SAAS,cAAc,CAAC;AAAA,UAC7C,KAAK,mBAAmB;AAAA;AAAA,IAE9B;AAEA,WAAO;AAAA,mBACQ,SAAS,cAAc,CAAC;AAAA;AAAA;AAAA,kBAGzB,KAAK,QAAQ;AAAA,yBACN,kBAAkB,OAAO;AAAA,mBAC/B,KAAK,KAAK;AAAA,yBACJ,KAAK,WAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMvC;AAMF;AAlFa,iBA8EK,SAAS;AAAA,EACvB,GAAG,kBAAkB;AAAA,EACrB,UAAU,cAAc;AAC1B;AAhF0B,gBAAA;AAAA,EAAzB,SAAS,EAAC,MAAM,OAAA,CAAO;AAAA,GADb,iBACe,WAAA,QAAA,CAAA;AAKjB,gBAAA;AAAA,EAFR,SAAS,EAAC,MAAM,OAAA,CAAO;AAAA,GAJb,iBAMF,WAAA,eAAA,CAAA;AANE,mBAAN,gBAAA;AAAA,EADN,cAAc,qBAAqB;AAAA,GACvB,gBAAA;"}
@@ -33,6 +33,8 @@ export declare enum ObcAutomationBadgeType {
33
33
  LevelDiagnostic = "level-diagnostic"
34
34
  }
35
35
  /**
36
+ * @slot icon-silhouette - Custom silhouette/outline icon, rendered behind the default slot content when no built-in badge type matches.
37
+ * @slot - Default slot for custom badge content, rendered when no built-in badge type matches.
36
38
  * @stable
37
39
  */
38
40
  export declare class ObcAutomationBadge extends LitElement {