@oicl/openbridge-webcomponents 2.0.0-next.170 → 2.0.0-next.171

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 (54) hide show
  1. package/bundle/openbridge-webcomponents.bundle.js +870 -441
  2. package/bundle/openbridge-webcomponents.bundle.js.map +1 -1
  3. package/custom-elements.json +1333 -392
  4. package/dist/ar/poi/poi-aton.d.ts +1 -0
  5. package/dist/ar/poi/poi-aton.d.ts.map +1 -1
  6. package/dist/ar/poi/poi-aton.js +1 -0
  7. package/dist/ar/poi/poi-aton.js.map +1 -1
  8. package/dist/ar/poi/poi-base.d.ts +39 -5
  9. package/dist/ar/poi/poi-base.d.ts.map +1 -1
  10. package/dist/ar/poi/poi-base.js +108 -37
  11. package/dist/ar/poi/poi-base.js.map +1 -1
  12. package/dist/ar/poi/poi-data.d.ts +1 -0
  13. package/dist/ar/poi/poi-data.d.ts.map +1 -1
  14. package/dist/ar/poi/poi-data.js +1 -0
  15. package/dist/ar/poi/poi-data.js.map +1 -1
  16. package/dist/ar/poi/poi-vessel.d.ts +1 -0
  17. package/dist/ar/poi/poi-vessel.d.ts.map +1 -1
  18. package/dist/ar/poi/poi-vessel.js +1 -0
  19. package/dist/ar/poi/poi-vessel.js.map +1 -1
  20. package/dist/ar/poi/poi.d.ts +4 -12
  21. package/dist/ar/poi/poi.d.ts.map +1 -1
  22. package/dist/ar/poi/poi.js +6 -72
  23. package/dist/ar/poi/poi.js.map +1 -1
  24. package/dist/ar/poi-button/poi-button.d.ts +6 -2
  25. package/dist/ar/poi-button/poi-button.d.ts.map +1 -1
  26. package/dist/ar/poi-button/poi-button.js +10 -1
  27. package/dist/ar/poi-button/poi-button.js.map +1 -1
  28. package/dist/ar/poi-card/poi-card.d.ts +12 -1
  29. package/dist/ar/poi-card/poi-card.d.ts.map +1 -1
  30. package/dist/ar/poi-card/poi-card.js +4 -1
  31. package/dist/ar/poi-card/poi-card.js.map +1 -1
  32. package/dist/ar/poi-controller/poi-controller.d.ts +45 -1
  33. package/dist/ar/poi-controller/poi-controller.d.ts.map +1 -1
  34. package/dist/ar/poi-controller/poi-controller.js +72 -14
  35. package/dist/ar/poi-controller/poi-controller.js.map +1 -1
  36. package/dist/ar/poi-group/poi-group.d.ts +28 -5
  37. package/dist/ar/poi-group/poi-group.d.ts.map +1 -1
  38. package/dist/ar/poi-group/poi-group.js +50 -7
  39. package/dist/ar/poi-group/poi-group.js.map +1 -1
  40. package/dist/ar/poi-layer/poi-layer.css.js +69 -18
  41. package/dist/ar/poi-layer/poi-layer.css.js.map +1 -1
  42. package/dist/ar/poi-layer/poi-layer.d.ts +64 -5
  43. package/dist/ar/poi-layer/poi-layer.d.ts.map +1 -1
  44. package/dist/ar/poi-layer/poi-layer.js +173 -39
  45. package/dist/ar/poi-layer/poi-layer.js.map +1 -1
  46. package/dist/ar/poi-layer-stack/poi-layer-stack.d.ts +82 -7
  47. package/dist/ar/poi-layer-stack/poi-layer-stack.d.ts.map +1 -1
  48. package/dist/ar/poi-layer-stack/poi-layer-stack.js +172 -100
  49. package/dist/ar/poi-layer-stack/poi-layer-stack.js.map +1 -1
  50. package/dist/ar/poi-projection/poi-projection.d.ts +88 -0
  51. package/dist/ar/poi-projection/poi-projection.d.ts.map +1 -0
  52. package/dist/ar/poi-projection/poi-projection.js +90 -0
  53. package/dist/ar/poi-projection/poi-projection.js.map +1 -0
  54. package/package.json +2 -2
@@ -1 +1 @@
1
- {"version":3,"file":"poi-data.js","names":[],"sources":["../../../src/ar/poi/poi-data.ts"],"sourcesContent":["import {html} from 'lit';\nimport {property} from 'lit/decorators.js';\nimport {customElement} from '../../decorator.js';\nimport {PoiBase} from './poi-base.js';\nimport '../poi-button/poi-button-data.js';\nimport '../../icons/icon-vessel-generic-default-filled.js';\nimport {\n ObcPoiObjectStyle,\n ObcPoiObjectState,\n} from '../poi-object/poi-object.js';\n\nexport {PoiBaseValue as PoiDataValue} from './poi-base.js';\nexport {PoiDataVisualRectPreference} from './poi.js';\nexport {ObcPoiObjectStyle as PoiDataObjectStyle};\nexport {ObcPoiObjectState as PoiDataObjectState};\n\n/**\n * `<obc-poi-data>` - Data-oriented marker variant with layout positioning and layer integration.\n *\n * Extends `PoiBase` to provide the \"data\" variant of the POI system.\n * Renders `<obc-poi>` with a slotted `<obc-poi-button-data>`.\n *\n * @slot - Icon content forwarded to the inner POI object. Defaults to a vessel icon.\n * @slot header - Optional custom header content forwarded into `obc-poi`.\n * @fires {CustomEvent<void>} obc-poi-data-layout-change - Fired when layout-driving properties change.\n * @experimental\n */\n@customElement('obc-poi-data')\nexport class ObcPoiData extends PoiBase {\n @property({type: String, attribute: 'data-style'})\n dataStyle: ObcPoiObjectStyle = ObcPoiObjectStyle.Regular;\n\n @property({type: String, attribute: 'data-state'})\n dataState: ObcPoiObjectState | null = null;\n\n @property({type: Boolean, attribute: 'data-interactive'})\n dataInteractive = false;\n\n protected override getVisualNodes() {\n return this.queryVisualNodes('obc-poi', 'obc-poi-button-data');\n }\n\n protected override renderButtonSlot() {\n return html`\n <obc-poi-button-data\n slot=\"button\"\n .relativeDirection=${this.relativeDirection}\n .selected=${this.selected}\n .hasHeader=${this.hasHeader}\n .headerContent=${this.headerContent}\n .state=${this.resolvedPoiState}\n .value=${this.value}\n .overlapOpaque=${this.overlapOpaque}\n .type=${this.buttonType}\n .data=${this.data}\n .dataStyle=${this.dataStyle}\n .dataState=${this.dataState}\n .dataInteractive=${this.dataInteractive}\n >\n <slot\n ><obi-vessel-generic-default-filled></obi-vessel-generic-default-filled\n ></slot>\n </obc-poi-button-data>\n `;\n }\n\n static override styles = PoiBase.styles;\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'obc-poi-data': ObcPoiData;\n }\n}\n"],"mappings":";;;;;;;;;;AA4BO,IAAM,aAAN,MAAM,mBAAmB,QAAQ;;;EAEP,KAAA,YAAA,kBAAkB;EAGX,KAAA,YAAA;EAGpB,KAAA,kBAAA;;CAElB,iBAAoC;EAClC,OAAO,KAAK,iBAAiB,WAAW,qBAAqB;CAC/D;CAEA,mBAAsC;EACpC,OAAO,IAAI;;;6BAGc,KAAK,kBAAkB;oBAChC,KAAK,SAAS;qBACb,KAAK,UAAU;yBACX,KAAK,cAAc;iBAC3B,KAAK,iBAAiB;iBACtB,KAAK,MAAM;yBACH,KAAK,cAAc;gBAC5B,KAAK,WAAW;gBAChB,KAAK,KAAK;qBACL,KAAK,UAAU;qBACf,KAAK,UAAU;2BACT,KAAK,gBAAgB;;;;;;;CAO9C;;EAEyB,KAAA,SAAA,QAAQ;;AACnC;AAtCG,WAAA,CAAA,SAAS;CAAC,MAAM;CAAQ,WAAW;AAAY,CAAC,CAAA,GAAA,WAAA,WAAA,aAAA,KAAA,CAAA;AAGhD,WAAA,CAAA,SAAS;CAAC,MAAM;CAAQ,WAAW;AAAY,CAAC,CAAA,GAAA,WAAA,WAAA,aAAA,KAAA,CAAA;AAGhD,WAAA,CAAA,SAAS;CAAC,MAAM;CAAS,WAAW;AAAkB,CAAC,CAAA,GAAA,WAAA,WAAA,mBAAA,KAAA,CAAA;AARzD,aAAA,WAAA,CAAA,cAAc,cAAc,CAAA,GAAA,UAAA"}
1
+ {"version":3,"file":"poi-data.js","names":[],"sources":["../../../src/ar/poi/poi-data.ts"],"sourcesContent":["import {html} from 'lit';\nimport {property} from 'lit/decorators.js';\nimport {customElement} from '../../decorator.js';\nimport {PoiBase} from './poi-base.js';\nimport '../poi-button/poi-button-data.js';\nimport '../../icons/icon-vessel-generic-default-filled.js';\nimport {\n ObcPoiObjectStyle,\n ObcPoiObjectState,\n} from '../poi-object/poi-object.js';\n\nexport {PoiBaseValue as PoiDataValue} from './poi-base.js';\nexport {PoiDataVisualRectPreference} from './poi.js';\nexport {ObcPoiObjectStyle as PoiDataObjectStyle};\nexport {ObcPoiObjectState as PoiDataObjectState};\n\n/**\n * `<obc-poi-data>` - Data-oriented marker variant with layout positioning and layer integration.\n *\n * Extends `PoiBase` to provide the \"data\" variant of the POI system.\n * Renders `<obc-poi>` with a slotted `<obc-poi-button-data>`.\n * See the \"Coordinate Model\" section in `PoiBase` (poi-base.ts) for how `x`, `y`, and `buttonY` position the marker.\n *\n * @slot - Icon content forwarded to the inner POI object. Defaults to a vessel icon.\n * @slot header - Optional custom header content forwarded into `obc-poi`.\n * @fires {CustomEvent<void>} obc-poi-data-layout-change - Fired when layout-driving properties change.\n * @experimental\n */\n@customElement('obc-poi-data')\nexport class ObcPoiData extends PoiBase {\n @property({type: String, attribute: 'data-style'})\n dataStyle: ObcPoiObjectStyle = ObcPoiObjectStyle.Regular;\n\n @property({type: String, attribute: 'data-state'})\n dataState: ObcPoiObjectState | null = null;\n\n @property({type: Boolean, attribute: 'data-interactive'})\n dataInteractive = false;\n\n protected override getVisualNodes() {\n return this.queryVisualNodes('obc-poi', 'obc-poi-button-data');\n }\n\n protected override renderButtonSlot() {\n return html`\n <obc-poi-button-data\n slot=\"button\"\n .relativeDirection=${this.relativeDirection}\n .selected=${this.selected}\n .hasHeader=${this.hasHeader}\n .headerContent=${this.headerContent}\n .state=${this.resolvedPoiState}\n .value=${this.value}\n .overlapOpaque=${this.overlapOpaque}\n .type=${this.buttonType}\n .data=${this.data}\n .dataStyle=${this.dataStyle}\n .dataState=${this.dataState}\n .dataInteractive=${this.dataInteractive}\n >\n <slot\n ><obi-vessel-generic-default-filled></obi-vessel-generic-default-filled\n ></slot>\n <slot name=\"header\" slot=\"header\"></slot>\n </obc-poi-button-data>\n `;\n }\n\n static override styles = PoiBase.styles;\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'obc-poi-data': ObcPoiData;\n }\n}\n"],"mappings":";;;;;;;;;;AA6BO,IAAM,aAAN,MAAM,mBAAmB,QAAQ;;;EAEP,KAAA,YAAA,kBAAkB;EAGX,KAAA,YAAA;EAGpB,KAAA,kBAAA;;CAElB,iBAAoC;EAClC,OAAO,KAAK,iBAAiB,WAAW,qBAAqB;CAC/D;CAEA,mBAAsC;EACpC,OAAO,IAAI;;;6BAGc,KAAK,kBAAkB;oBAChC,KAAK,SAAS;qBACb,KAAK,UAAU;yBACX,KAAK,cAAc;iBAC3B,KAAK,iBAAiB;iBACtB,KAAK,MAAM;yBACH,KAAK,cAAc;gBAC5B,KAAK,WAAW;gBAChB,KAAK,KAAK;qBACL,KAAK,UAAU;qBACf,KAAK,UAAU;2BACT,KAAK,gBAAgB;;;;;;;;CAQ9C;;EAEyB,KAAA,SAAA,QAAQ;;AACnC;AAvCG,WAAA,CAAA,SAAS;CAAC,MAAM;CAAQ,WAAW;AAAY,CAAC,CAAA,GAAA,WAAA,WAAA,aAAA,KAAA,CAAA;AAGhD,WAAA,CAAA,SAAS;CAAC,MAAM;CAAQ,WAAW;AAAY,CAAC,CAAA,GAAA,WAAA,WAAA,aAAA,KAAA,CAAA;AAGhD,WAAA,CAAA,SAAS;CAAC,MAAM;CAAS,WAAW;AAAkB,CAAC,CAAA,GAAA,WAAA,WAAA,mBAAA,KAAA,CAAA;AARzD,aAAA,WAAA,CAAA,cAAc,cAAc,CAAA,GAAA,UAAA"}
@@ -8,6 +8,7 @@ export { ObcPoiObjectVesselType, ObcPoiObjectVesselStyle, ObcPoiObjectVesselStat
8
8
  *
9
9
  * Extends `PoiBase` to provide the "vessel" variant of the POI system.
10
10
  * Renders `<obc-poi>` with a slotted `<obc-poi-button-vessel>`.
11
+ * See the "Coordinate Model" section in `PoiBase` (poi-base.ts) for how `x`, `y`, and `buttonY` position the marker.
11
12
  *
12
13
  * @slot - Icon content forwarded to the inner vessel object.
13
14
  * @slot turn-indicator - Optional turn indicator content for speed-rot type.
@@ -1 +1 @@
1
- {"version":3,"file":"poi-vessel.d.ts","sourceRoot":"","sources":["../../../src/ar/poi/poi-vessel.ts"],"names":[],"mappings":"AAGA,OAAO,oCAAoC,CAAC;AAC5C,OAAO,mDAAmD,CAAC;AAC3D,OAAO,EAAC,OAAO,EAAC,MAAM,eAAe,CAAC;AACtC,OAAO,EACL,sBAAsB,EACtB,uBAAuB,EACvB,uBAAuB,EACxB,MAAM,oCAAoC,CAAC;AAE5C,OAAO,EACL,sBAAsB,EACtB,uBAAuB,EACvB,uBAAuB,GACxB,CAAC;AAEF;;;;;;;;;;;;GAYG;AACH,qBACa,YAAa,SAAQ,OAAO;IAEvC,UAAU,EAAE,sBAAsB,CAAkC;IAGpE,WAAW,EAAE,uBAAuB,CAAmC;IAGvE,WAAW,EAAE,uBAAuB,GAAG,IAAI,CAAQ;IAGnD,iBAAiB,UAAS;cAEP,cAAc;;;;;;cAId,gBAAgB;IA2BnC,OAAgB,MAAM,4BAAkB;CACzC;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,gBAAgB,EAAE,YAAY,CAAC;KAChC;CACF"}
1
+ {"version":3,"file":"poi-vessel.d.ts","sourceRoot":"","sources":["../../../src/ar/poi/poi-vessel.ts"],"names":[],"mappings":"AAGA,OAAO,oCAAoC,CAAC;AAC5C,OAAO,mDAAmD,CAAC;AAC3D,OAAO,EAAC,OAAO,EAAC,MAAM,eAAe,CAAC;AACtC,OAAO,EACL,sBAAsB,EACtB,uBAAuB,EACvB,uBAAuB,EACxB,MAAM,oCAAoC,CAAC;AAE5C,OAAO,EACL,sBAAsB,EACtB,uBAAuB,EACvB,uBAAuB,GACxB,CAAC;AAEF;;;;;;;;;;;;;GAaG;AACH,qBACa,YAAa,SAAQ,OAAO;IAEvC,UAAU,EAAE,sBAAsB,CAAkC;IAGpE,WAAW,EAAE,uBAAuB,CAAmC;IAGvE,WAAW,EAAE,uBAAuB,GAAG,IAAI,CAAQ;IAGnD,iBAAiB,UAAS;cAEP,cAAc;;;;;;cAId,gBAAgB;IA4BnC,OAAgB,MAAM,4BAAkB;CACzC;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,gBAAgB,EAAE,YAAY,CAAC;KAChC;CACF"}
@@ -41,6 +41,7 @@ var ObcPoiVessel = class ObcPoiVessel extends PoiBase {
41
41
  ></slot>
42
42
  <slot name="turn-indicator" slot="turn-indicator"></slot>
43
43
  <slot name="speed-indicator" slot="speed-indicator"></slot>
44
+ <slot name="header" slot="header"></slot>
44
45
  </obc-poi-button-vessel>
45
46
  `;
46
47
  }
@@ -1 +1 @@
1
- {"version":3,"file":"poi-vessel.js","names":[],"sources":["../../../src/ar/poi/poi-vessel.ts"],"sourcesContent":["import {html} from 'lit';\nimport {property} from 'lit/decorators.js';\nimport {customElement} from '../../decorator.js';\nimport '../poi-button/poi-button-vessel.js';\nimport '../../icons/icon-vessel-generic-default-filled.js';\nimport {PoiBase} from './poi-base.js';\nimport {\n ObcPoiObjectVesselType,\n ObcPoiObjectVesselStyle,\n ObcPoiObjectVesselState,\n} from '../poi-object/poi-object-vessel.js';\n\nexport {\n ObcPoiObjectVesselType,\n ObcPoiObjectVesselStyle,\n ObcPoiObjectVesselState,\n};\n\n/**\n * `<obc-poi-vessel>` - Vessel marker variant with layout positioning and layer integration.\n *\n * Extends `PoiBase` to provide the \"vessel\" variant of the POI system.\n * Renders `<obc-poi>` with a slotted `<obc-poi-button-vessel>`.\n *\n * @slot - Icon content forwarded to the inner vessel object.\n * @slot turn-indicator - Optional turn indicator content for speed-rot type.\n * @slot speed-indicator - Optional speed indicator content for speed-rot type.\n * @slot header - Optional header content forwarded to the poi button.\n * @fires {CustomEvent<void>} obc-poi-data-layout-change - Fired when layout-driving properties change.\n * @experimental\n */\n@customElement('obc-poi-vessel')\nexport class ObcPoiVessel extends PoiBase {\n @property({type: String, attribute: 'vessel-type'})\n vesselType: ObcPoiObjectVesselType = ObcPoiObjectVesselType.Regular;\n\n @property({type: String, attribute: 'vessel-style'})\n vesselStyle: ObcPoiObjectVesselStyle = ObcPoiObjectVesselStyle.Regular;\n\n @property({type: String, attribute: 'vessel-state'})\n vesselState: ObcPoiObjectVesselState | null = null;\n\n @property({type: Boolean, attribute: 'vessel-interactive'})\n vesselInteractive = false;\n\n protected override getVisualNodes() {\n return this.queryVisualNodes('obc-poi', 'obc-poi-button-vessel');\n }\n\n protected override renderButtonSlot() {\n return html`\n <obc-poi-button-vessel\n slot=\"button\"\n .relativeDirection=${this.relativeDirection}\n .selected=${this.selected}\n .hasHeader=${this.hasHeader}\n .headerContent=${this.headerContent}\n .state=${this.resolvedPoiState}\n .value=${this.value}\n .overlapOpaque=${this.overlapOpaque}\n .type=${this.buttonType}\n .data=${this.data}\n .vesselType=${this.vesselType}\n .vesselStyle=${this.vesselStyle}\n .vesselState=${this.vesselState}\n .vesselInteractive=${this.vesselInteractive}\n >\n <slot\n ><obi-vessel-generic-default-filled></obi-vessel-generic-default-filled\n ></slot>\n <slot name=\"turn-indicator\" slot=\"turn-indicator\"></slot>\n <slot name=\"speed-indicator\" slot=\"speed-indicator\"></slot>\n </obc-poi-button-vessel>\n `;\n }\n\n static override styles = PoiBase.styles;\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'obc-poi-vessel': ObcPoiVessel;\n }\n}\n"],"mappings":";;;;;;;;;AAgCO,IAAM,eAAN,MAAM,qBAAqB,QAAQ;;;EAEH,KAAA,aAAA,uBAAuB;EAGrB,KAAA,cAAA,wBAAwB;EAGjB,KAAA,cAAA;EAG1B,KAAA,oBAAA;;CAEpB,iBAAoC;EAClC,OAAO,KAAK,iBAAiB,WAAW,uBAAuB;CACjE;CAEA,mBAAsC;EACpC,OAAO,IAAI;;;6BAGc,KAAK,kBAAkB;oBAChC,KAAK,SAAS;qBACb,KAAK,UAAU;yBACX,KAAK,cAAc;iBAC3B,KAAK,iBAAiB;iBACtB,KAAK,MAAM;yBACH,KAAK,cAAc;gBAC5B,KAAK,WAAW;gBAChB,KAAK,KAAK;sBACJ,KAAK,WAAW;uBACf,KAAK,YAAY;uBACjB,KAAK,YAAY;6BACX,KAAK,kBAAkB;;;;;;;;;CASlD;;EAEyB,KAAA,SAAA,QAAQ;;AACnC;AA5CG,WAAA,CAAA,SAAS;CAAC,MAAM;CAAQ,WAAW;AAAa,CAAC,CAAA,GAAA,aAAA,WAAA,cAAA,KAAA,CAAA;AAGjD,WAAA,CAAA,SAAS;CAAC,MAAM;CAAQ,WAAW;AAAc,CAAC,CAAA,GAAA,aAAA,WAAA,eAAA,KAAA,CAAA;AAGlD,WAAA,CAAA,SAAS;CAAC,MAAM;CAAQ,WAAW;AAAc,CAAC,CAAA,GAAA,aAAA,WAAA,eAAA,KAAA,CAAA;AAGlD,WAAA,CAAA,SAAS;CAAC,MAAM;CAAS,WAAW;AAAoB,CAAC,CAAA,GAAA,aAAA,WAAA,qBAAA,KAAA,CAAA;AAX3D,eAAA,WAAA,CAAA,cAAc,gBAAgB,CAAA,GAAA,YAAA"}
1
+ {"version":3,"file":"poi-vessel.js","names":[],"sources":["../../../src/ar/poi/poi-vessel.ts"],"sourcesContent":["import {html} from 'lit';\nimport {property} from 'lit/decorators.js';\nimport {customElement} from '../../decorator.js';\nimport '../poi-button/poi-button-vessel.js';\nimport '../../icons/icon-vessel-generic-default-filled.js';\nimport {PoiBase} from './poi-base.js';\nimport {\n ObcPoiObjectVesselType,\n ObcPoiObjectVesselStyle,\n ObcPoiObjectVesselState,\n} from '../poi-object/poi-object-vessel.js';\n\nexport {\n ObcPoiObjectVesselType,\n ObcPoiObjectVesselStyle,\n ObcPoiObjectVesselState,\n};\n\n/**\n * `<obc-poi-vessel>` - Vessel marker variant with layout positioning and layer integration.\n *\n * Extends `PoiBase` to provide the \"vessel\" variant of the POI system.\n * Renders `<obc-poi>` with a slotted `<obc-poi-button-vessel>`.\n * See the \"Coordinate Model\" section in `PoiBase` (poi-base.ts) for how `x`, `y`, and `buttonY` position the marker.\n *\n * @slot - Icon content forwarded to the inner vessel object.\n * @slot turn-indicator - Optional turn indicator content for speed-rot type.\n * @slot speed-indicator - Optional speed indicator content for speed-rot type.\n * @slot header - Optional header content forwarded to the poi button.\n * @fires {CustomEvent<void>} obc-poi-data-layout-change - Fired when layout-driving properties change.\n * @experimental\n */\n@customElement('obc-poi-vessel')\nexport class ObcPoiVessel extends PoiBase {\n @property({type: String, attribute: 'vessel-type'})\n vesselType: ObcPoiObjectVesselType = ObcPoiObjectVesselType.Regular;\n\n @property({type: String, attribute: 'vessel-style'})\n vesselStyle: ObcPoiObjectVesselStyle = ObcPoiObjectVesselStyle.Regular;\n\n @property({type: String, attribute: 'vessel-state'})\n vesselState: ObcPoiObjectVesselState | null = null;\n\n @property({type: Boolean, attribute: 'vessel-interactive'})\n vesselInteractive = false;\n\n protected override getVisualNodes() {\n return this.queryVisualNodes('obc-poi', 'obc-poi-button-vessel');\n }\n\n protected override renderButtonSlot() {\n return html`\n <obc-poi-button-vessel\n slot=\"button\"\n .relativeDirection=${this.relativeDirection}\n .selected=${this.selected}\n .hasHeader=${this.hasHeader}\n .headerContent=${this.headerContent}\n .state=${this.resolvedPoiState}\n .value=${this.value}\n .overlapOpaque=${this.overlapOpaque}\n .type=${this.buttonType}\n .data=${this.data}\n .vesselType=${this.vesselType}\n .vesselStyle=${this.vesselStyle}\n .vesselState=${this.vesselState}\n .vesselInteractive=${this.vesselInteractive}\n >\n <slot\n ><obi-vessel-generic-default-filled></obi-vessel-generic-default-filled\n ></slot>\n <slot name=\"turn-indicator\" slot=\"turn-indicator\"></slot>\n <slot name=\"speed-indicator\" slot=\"speed-indicator\"></slot>\n <slot name=\"header\" slot=\"header\"></slot>\n </obc-poi-button-vessel>\n `;\n }\n\n static override styles = PoiBase.styles;\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'obc-poi-vessel': ObcPoiVessel;\n }\n}\n"],"mappings":";;;;;;;;;AAiCO,IAAM,eAAN,MAAM,qBAAqB,QAAQ;;;EAEH,KAAA,aAAA,uBAAuB;EAGrB,KAAA,cAAA,wBAAwB;EAGjB,KAAA,cAAA;EAG1B,KAAA,oBAAA;;CAEpB,iBAAoC;EAClC,OAAO,KAAK,iBAAiB,WAAW,uBAAuB;CACjE;CAEA,mBAAsC;EACpC,OAAO,IAAI;;;6BAGc,KAAK,kBAAkB;oBAChC,KAAK,SAAS;qBACb,KAAK,UAAU;yBACX,KAAK,cAAc;iBAC3B,KAAK,iBAAiB;iBACtB,KAAK,MAAM;yBACH,KAAK,cAAc;gBAC5B,KAAK,WAAW;gBAChB,KAAK,KAAK;sBACJ,KAAK,WAAW;uBACf,KAAK,YAAY;uBACjB,KAAK,YAAY;6BACX,KAAK,kBAAkB;;;;;;;;;;CAUlD;;EAEyB,KAAA,SAAA,QAAQ;;AACnC;AA7CG,WAAA,CAAA,SAAS;CAAC,MAAM;CAAQ,WAAW;AAAa,CAAC,CAAA,GAAA,aAAA,WAAA,cAAA,KAAA,CAAA;AAGjD,WAAA,CAAA,SAAS;CAAC,MAAM;CAAQ,WAAW;AAAc,CAAC,CAAA,GAAA,aAAA,WAAA,eAAA,KAAA,CAAA;AAGlD,WAAA,CAAA,SAAS;CAAC,MAAM;CAAQ,WAAW;AAAc,CAAC,CAAA,GAAA,aAAA,WAAA,eAAA,KAAA,CAAA;AAGlD,WAAA,CAAA,SAAS;CAAC,MAAM;CAAS,WAAW;AAAoB,CAAC,CAAA,GAAA,aAAA,WAAA,qBAAA,KAAA,CAAA;AAX3D,eAAA,WAAA,CAAA,cAAc,gBAAgB,CAAA,GAAA,YAAA"}
@@ -58,6 +58,7 @@ export declare enum ObcPoiState {
58
58
  Warning = "warning",
59
59
  Alarm = "alarm"
60
60
  }
61
+ export declare const DEFAULT_LINE_LENGTH_PX = 192;
61
62
  /**
62
63
  * `<obc-poi>` - Composite marker component that renders a target button with connector and pointer visuals.
63
64
  *
@@ -99,7 +100,7 @@ export declare enum ObcPoiState {
99
100
  * Motion and layout notes:
100
101
  * - `animatePosition` (default: `false`): when true, enables short position transition timing for line/pointer movement.
101
102
  * - `x` (default: `0`): host horizontal position; sets `--obc-poi-x` as `${x}px`.
102
- * - `y` (default: `96`): absolute local target Y; non-finite values fall back to `0` in geometry calculations.
103
+ * - `y` (default: `192`): absolute local target Y; non-finite values fall back to `0` in geometry calculations. The default is shared with the top-level POI variants (`DEFAULT_LINE_LENGTH_PX`).
103
104
  * - `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.
104
105
  * - `buttonOffsetX`/`targetOffsetX` (defaults: `0`/`0`): define connector bend delta via `targetOffsetX - buttonOffsetX`.
105
106
  * - `boxWidth`/`boxHeight` (defaults: `null`/`null`): optional pointer frame size extras; invalid/non-finite values are ignored.
@@ -117,7 +118,7 @@ export declare enum ObcPoiState {
117
118
  *
118
119
  * - Default slot: Main icon/content rendered inside `obc-poi-button`.
119
120
  * - `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).
121
+ * - `header`: Optional header content, forwarded into the default `obc-poi-button` through a `<slot name="header">` chain. Content stays in the consumer's light DOM. When a custom `button` is slotted, place header content directly inside it instead.
121
122
  *
122
123
  * ## Events
123
124
  *
@@ -145,7 +146,7 @@ export declare enum ObcPoiState {
145
146
  * @availableWhen outsideAngle type==outside && hasPointer==true
146
147
  * @slot - Default POI button content.
147
148
  * @slot button - Optional custom button element replacing the default `obc-poi-button`.
148
- * @slot header - Optional header content, relocated into the inner `obc-poi-button` at runtime.
149
+ * @slot header - Optional header content, forwarded into the default `obc-poi-button` via a `<slot name="header">` chain.
149
150
  * @experimental
150
151
  */
151
152
  export declare class ObcPoi extends LitElement {
@@ -178,15 +179,10 @@ export declare class ObcPoi extends LitElement {
178
179
  /** Available when `type==outside && hasPointer==true`. */
179
180
  outsideAngle: number;
180
181
  animatePosition: boolean;
181
- private headerObserver?;
182
- connectedCallback(): void;
183
- disconnectedCallback(): void;
184
- private setupHeaderObserver;
185
182
  private updatePosition;
186
183
  private get isCheckedLike();
187
184
  protected get buttonVisualState(): PoiButtonVisualState;
188
185
  protected get buttonState(): ObcPoiButtonState;
189
- private get resolvedHeaderState();
190
186
  private get lineStyle();
191
187
  private get pointerSelected();
192
188
  /** Public `y` normalized as the target Y input. */
@@ -207,14 +203,10 @@ export declare class ObcPoi extends LitElement {
207
203
  private slottedButton;
208
204
  private get targetAnchorY();
209
205
  private handleButtonSlotChange;
210
- private syncFallbackButtonHeaderContent;
211
- private applyHeaderState;
212
- private syncAttachedHeaderState;
213
206
  private syncSlottedButtonProps;
214
207
  private renderPoiButton;
215
208
  refreshProjectionLayout(_trackDurationMs?: number): void;
216
209
  render(): import('lit-html').TemplateResult<1>;
217
- protected firstUpdated(_changedProperties: Map<string, unknown>): void;
218
210
  protected updated(changedProperties: Map<string, unknown>): void;
219
211
  static styles: import('lit').CSSResult;
220
212
  }
@@ -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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"}
@@ -2,7 +2,6 @@ import { customElement } from "../../decorator.js";
2
2
  import { degToRad } from "../../svghelpers/math.js";
3
3
  import __decorate from "../../_virtual/_@oxc-project_runtime@0.150.0/helpers/esm/decorate.js";
4
4
  import { poiArrow } from "./arrow.js";
5
- import { ObcPoiHeaderState } from "../building-blocks/poi-header/poi-header.js";
6
5
  import { ObcPoiButtonState, ObcPoiButtonType, PoiButtonVisualState } from "../poi-button/poi-button.js";
7
6
  import poi_default from "./poi.css.js";
8
7
  import { POIStyle } from "../building-blocks/poi-graphic-line/poi-graphic-line.js";
@@ -45,7 +44,7 @@ var ObcPoiState = /* @__PURE__ */ function(ObcPoiState) {
45
44
  ObcPoiState["Alarm"] = "alarm";
46
45
  return ObcPoiState;
47
46
  }({});
48
- var DEFAULT_LINE_LENGTH_PX = 96;
47
+ var DEFAULT_LINE_LENGTH_PX = 192;
49
48
  var POINTER_BOX_BASE_SIZE_PX = 32;
50
49
  var POINT_POINTER_OFFSET_PX = 12;
51
50
  var ObcPoi = class ObcPoi extends LitElement {
@@ -65,7 +64,7 @@ var ObcPoi = class ObcPoi extends LitElement {
65
64
  this.pointerState = null;
66
65
  this.relativeDirection = 0;
67
66
  this.x = 0;
68
- this.y = DEFAULT_LINE_LENGTH_PX;
67
+ this.y = 192;
69
68
  this.buttonY = 0;
70
69
  this.fixedTarget = false;
71
70
  this.buttonOffsetX = 0;
@@ -76,37 +75,6 @@ var ObcPoi = class ObcPoi extends LitElement {
76
75
  this.animatePosition = false;
77
76
  this.slottedButton = null;
78
77
  }
79
- connectedCallback() {
80
- super.connectedCallback();
81
- this.setupHeaderObserver();
82
- }
83
- disconnectedCallback() {
84
- super.disconnectedCallback();
85
- this.headerObserver?.disconnect();
86
- this.headerObserver = void 0;
87
- }
88
- setupHeaderObserver() {
89
- this.headerObserver?.disconnect();
90
- this.headerObserver = new MutationObserver((mutations) => {
91
- for (const mutation of mutations) {
92
- if (mutation.type === "childList") {
93
- this.syncFallbackButtonHeaderContent();
94
- this.syncAttachedHeaderState();
95
- return;
96
- }
97
- if (mutation.type === "attributes" && mutation.target instanceof HTMLElement && mutation.target.getAttribute("slot") === "header") {
98
- this.syncFallbackButtonHeaderContent();
99
- this.syncAttachedHeaderState();
100
- return;
101
- }
102
- }
103
- });
104
- this.headerObserver.observe(this, {
105
- childList: true,
106
- attributes: true,
107
- attributeFilter: ["slot"]
108
- });
109
- }
110
78
  updatePosition() {
111
79
  this.style.removeProperty("top");
112
80
  if (this.fixedTarget) {
@@ -141,15 +109,6 @@ var ObcPoi = class ObcPoi extends LitElement {
141
109
  default: return ObcPoiButtonState.Enabled;
142
110
  }
143
111
  }
144
- get resolvedHeaderState() {
145
- switch (this.buttonState) {
146
- case ObcPoiButtonState.Caution: return ObcPoiHeaderState.Caution;
147
- case ObcPoiButtonState.Warning: return ObcPoiHeaderState.Warning;
148
- case ObcPoiButtonState.Alarm: return ObcPoiHeaderState.Alarm;
149
- case ObcPoiButtonState.Enabled:
150
- default: return this.selected ? ObcPoiHeaderState.Selected : ObcPoiHeaderState.Enabled;
151
- }
152
- }
153
112
  get lineStyle() {
154
113
  if (this.state === "alarm") return POIStyle.Alarm;
155
114
  if (this.state === "warning") return POIStyle.Warning;
@@ -259,31 +218,11 @@ var ObcPoi = class ObcPoi extends LitElement {
259
218
  return this.type === "point" ? Math.max(POINT_POINTER_OFFSET_PX, targetDelta) : targetDelta;
260
219
  }
261
220
  handleButtonSlotChange(e) {
262
- const assigned = e.target.assignedElements({ flatten: false });
221
+ if (e.target !== e.currentTarget) return;
222
+ const assigned = e.currentTarget.assignedElements({ flatten: false });
263
223
  this.slottedButton = assigned.length > 0 ? assigned[0] : null;
264
- this.syncFallbackButtonHeaderContent();
265
224
  this.syncSlottedButtonProps();
266
225
  }
267
- syncFallbackButtonHeaderContent() {
268
- if (this.slottedButton) return;
269
- const button = this.renderRoot.querySelector("obc-poi-button.poi-button");
270
- if (!button) return;
271
- for (const child of Array.from(this.children)) {
272
- if (!(child instanceof HTMLElement) || child.getAttribute("slot") !== "header") continue;
273
- if (child.parentElement !== button) button.appendChild(child);
274
- this.applyHeaderState(child);
275
- }
276
- }
277
- applyHeaderState(root) {
278
- const headers = [...root instanceof Element && root.matches("obc-poi-header") ? [root] : [], ...root.querySelectorAll("obc-poi-header")];
279
- for (const header of headers) {
280
- header.state = this.resolvedHeaderState;
281
- header.setAttribute("state", this.resolvedHeaderState);
282
- }
283
- }
284
- syncAttachedHeaderState() {
285
- this.applyHeaderState(this.renderRoot);
286
- }
287
226
  syncSlottedButtonProps() {
288
227
  const btn = this.slottedButton;
289
228
  if (!btn) return;
@@ -316,6 +255,7 @@ var ObcPoi = class ObcPoi extends LitElement {
316
255
  .data=${this.data}
317
256
  >
318
257
  <slot></slot>
258
+ <slot name="header" slot="header"></slot>
319
259
  </obc-poi-button>
320
260
  </slot>
321
261
  `;
@@ -341,10 +281,6 @@ var ObcPoi = class ObcPoi extends LitElement {
341
281
  </div>
342
282
  `;
343
283
  }
344
- firstUpdated(_changedProperties) {
345
- this.syncFallbackButtonHeaderContent();
346
- this.syncAttachedHeaderState();
347
- }
348
284
  updated(changedProperties) {
349
285
  super.updated(changedProperties);
350
286
  if (changedProperties.has("x")) {
@@ -352,9 +288,7 @@ var ObcPoi = class ObcPoi extends LitElement {
352
288
  this.style.setProperty("--obc-poi-x", `${this.x}px`);
353
289
  }
354
290
  if (changedProperties.has("buttonY") || changedProperties.has("y") || changedProperties.has("fixedTarget")) this.updatePosition();
355
- this.syncFallbackButtonHeaderContent();
356
291
  this.syncSlottedButtonProps();
357
- this.syncAttachedHeaderState();
358
292
  }
359
293
  static {
360
294
  this.styles = unsafeCSS(poi_default);
@@ -427,6 +361,6 @@ __decorate([property({
427
361
  })], ObcPoi.prototype, "animatePosition", void 0);
428
362
  ObcPoi = __decorate([customElement("obc-poi")], ObcPoi);
429
363
  //#endregion
430
- export { ObcPoi, ObcPoiState, ObcPoiType, ObcPoiValue, POI_ATTR, PoiDataVisualRectPreference, isPoi };
364
+ export { DEFAULT_LINE_LENGTH_PX, ObcPoi, ObcPoiState, ObcPoiType, ObcPoiValue, POI_ATTR, PoiDataVisualRectPreference, isPoi };
431
365
 
432
366
  //# sourceMappingURL=poi.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"poi.js","names":[],"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';\nimport {degToRad} from '../../svghelpers/math.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 * @availableWhen overlapOpaque value==overlapped\n * @availableWhen headerContent hasHeader==true\n * @availableWhen pointerType hasPointer==true && type in [Line, Offset, Point] && value!=checked && value!=activated && state!=enabled\n * @availableWhen pointerState hasPointer==true && type in [Line, Offset, Point] && value!=checked && value!=activated\n * @availableWhen targetOffsetX type in [Line, Offset]\n * @availableWhen outsideAngle type==outside && hasPointer==true\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 @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 @property({type: String, attribute: 'header-content'}) headerContent = '';\n @property({type: Boolean}) hasPointer = false;\n @property({type: String, attribute: 'pointer-type'})\n pointerType: ObcPoiPointerType | null = null;\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 @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 @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: ${\n this.lineOffset\n }px; --obc-poi-pointer-y: ${\n this.targetAnchorY + this.targetProjectionY\n }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 = degToRad(this.outsideAngle);\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: ${\n this.outsideAngle\n }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"],"mappings":"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"}
1
+ {"version":3,"file":"poi.js","names":[],"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 {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';\nimport {degToRad} from '../../svghelpers/math.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\nexport const DEFAULT_LINE_LENGTH_PX = 192;\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: `192`): absolute local target Y; non-finite values fall back to `0` in geometry calculations. The default is shared with the top-level POI variants (`DEFAULT_LINE_LENGTH_PX`).\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, forwarded into the default `obc-poi-button` through a `<slot name=\"header\">` chain. Content stays in the consumer's light DOM. When a custom `button` is slotted, place header content directly inside it instead.\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 * @availableWhen overlapOpaque value==overlapped\n * @availableWhen headerContent hasHeader==true\n * @availableWhen pointerType hasPointer==true && type in [Line, Offset, Point] && value!=checked && value!=activated && state!=enabled\n * @availableWhen pointerState hasPointer==true && type in [Line, Offset, Point] && value!=checked && value!=activated\n * @availableWhen targetOffsetX type in [Line, Offset]\n * @availableWhen outsideAngle type==outside && hasPointer==true\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, forwarded into the default `obc-poi-button` via a `<slot name=\"header\">` chain.\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 @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 @property({type: String, attribute: 'header-content'}) headerContent = '';\n @property({type: Boolean}) hasPointer = false;\n @property({type: String, attribute: 'pointer-type'})\n pointerType: ObcPoiPointerType | null = null;\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 @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 @property({type: Number, attribute: 'outside-angle'}) outsideAngle = 315;\n @property({type: Boolean, attribute: 'animate-position'})\n animatePosition = false;\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 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: ${\n this.lineOffset\n }px; --obc-poi-pointer-y: ${\n this.targetAnchorY + this.targetProjectionY\n }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 = degToRad(this.outsideAngle);\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: ${\n this.outsideAngle\n }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 // slotchange from nested forwarding slots (e.g. the header slot inside\n // the fallback button) bubbles through this slot — only react to the\n // button slot's own assignment.\n if (e.target !== e.currentTarget) {\n return;\n }\n const slot = e.currentTarget as HTMLSlotElement;\n const assigned = slot.assignedElements({flatten: false});\n this.slottedButton =\n assigned.length > 0 ? (assigned[0] as HTMLElement) : null;\n this.syncSlottedButtonProps();\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 <slot name=\"header\" slot=\"header\"></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 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.syncSlottedButtonProps();\n }\n\n static override styles = unsafeCSS(componentStyle);\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'obc-poi': ObcPoi;\n }\n}\n"],"mappings":"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"}
@@ -52,8 +52,7 @@ export interface ObcPoiButtonDataItem {
52
52
  * - `data` (default `[]`): when non-empty, renders value/label/unit rows.
53
53
  * - `hasHeader` + `header` slot: renders a header area and syncs slotted `obc-poi-header` state.
54
54
  * - `hasRelation` (default `false`): enables optional relation content in data mode.
55
- * - `inExpandedGroup` (default `false`): applies `expanded` CSS class.
56
- * - TODO(designer): Confirm intended UX semantics for `inExpandedGroup` beyond styling.
55
+ * - `inExpandedGroup` (default `false`): expanded-group presentation state, applied by the owning group composition during expand/collapse orchestration; consumers should not set it directly.
57
56
  *
58
57
  * ## Usage Guidelines
59
58
  * - Use `layout="anchored"` for standalone marker buttons.
@@ -82,6 +81,9 @@ export interface ObcPoiButtonDataItem {
82
81
  * </obc-poi-button>
83
82
  * ```
84
83
  *
84
+ * @property inExpandedGroup - Expanded-group presentation state, applied by the owning group composition
85
+ * while the button is shown inside an expanded `obc-poi-group` and during
86
+ * its collapse animations. Consumers should not set it directly.
85
87
  * @slot - Icon/content rendered inside `obc-poi-object`.
86
88
  * @slot header - Optional header content rendered above the marker body.
87
89
  * @slot relation - Optional relation icon/content in data mode when `hasRelation` is true.
@@ -97,11 +99,13 @@ export declare class ObcPoiButton extends LitElement {
97
99
  value: PoiButtonVisualState;
98
100
  overlapOpaque: boolean;
99
101
  type: ObcPoiButtonType;
102
+ /** Expanded-group presentation state, applied by the owning group composition while the button is shown inside an expanded `obc-poi-group` and during its collapse animations. Consumers should not set it directly. */
100
103
  inExpandedGroup: boolean;
101
104
  data: ObcPoiButtonDataItem[];
102
105
  hasRelation: boolean;
103
106
  headerContent: string;
104
107
  private headerContentObserver?;
108
+ private handleLightSlotChange;
105
109
  connectedCallback(): void;
106
110
  disconnectedCallback(): void;
107
111
  private setupHeaderContentObserver;
@@ -1 +1 @@
1
- {"version":3,"file":"poi-button.d.ts","sourceRoot":"","sources":["../../../src/ar/poi-button/poi-button.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,UAAU,EAAQ,OAAO,EAAY,MAAM,KAAK,CAAC;AAKzD,OAAO,6CAA6C,CAAC;AAKrD,OAAO,EACL,iBAAiB,EAEjB,gBAAgB,EACjB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACL,yBAAyB,EACzB,wBAAwB,EACzB,MAAM,+DAA+D,CAAC;AACvE,OAAO,+DAA+D,CAAC;AAEvE,oBAAY,gBAAgB;IAC1B,MAAM,WAAW;IACjB,QAAQ,aAAa;CACtB;AAED,oBAAY,kBAAkB;IAC5B,QAAQ,aAAa;IACrB,MAAM,WAAW;CAClB;AAED,oBAAY,iBAAiB;IAC3B,OAAO,YAAY;IACnB,OAAO,YAAY;IACnB,OAAO,YAAY;IACnB,KAAK,UAAU;IACf,aAAa,mBAAmB;IAChC,SAAS,eAAe;IACxB,WAAW,iBAAiB;IAC5B,QAAQ,cAAc;IACtB,eAAe,qBAAqB;CACrC;AAED,oBAAY,oBAAoB;IAC9B,SAAS,cAAc;IACvB,OAAO,YAAY;IACnB,SAAS,cAAc;IACvB,UAAU,eAAe;CAC1B;AASD,wBAAgB,+BAA+B,CAC7C,UAAU,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EACrC,WAAW,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EACtC,uBAAuB,GAAE,MAA+C,GACvE,gBAAgB,CAgBlB;AAED,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqDG;AACH,qBACa,YAAa,SAAQ,UAAU;IAChB,iBAAiB,SAAK;IACrB,QAAQ,UAAS;IAClB,MAAM,EAAE,kBAAkB,CACtB;IAE9B,SAAS,UAAS;IAElB,KAAK,EAAE,iBAAiB,CAA6B;IAErD,KAAK,EAAE,oBAAoB,CAAkC;IAE7D,aAAa,UAAS;IACI,IAAI,mBAA2B;IAC9B,eAAe,UAAS;IACR,IAAI,EAAE,oBAAoB,EAAE,CAAM;IAClD,WAAW,UAAS;IACQ,aAAa,SAAM;IAC1E,OAAO,CAAC,qBAAqB,CAAC,CAAmB;IAExC,iBAAiB;IAKjB,oBAAoB;IAM7B,OAAO,CAAC,0BAA0B;IA0BlC,IAAI,OAAO,IAAI,OAAO,CAErB;IAED,OAAO,KAAK,gBAAgB,GAK3B;IAED,OAAO,KAAK,mBAAmB,GAsB9B;IAED,OAAO,KAAK,gBAAgB,GAE3B;IAED,OAAO,KAAK,yBAAyB,GAEpC;IAED,OAAO,CAAC,sBAAsB;IA2B9B,OAAO,CAAC,sBAAsB,CAE5B;cAEiB,OAAO,CAAC,kBAAkB,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC;IAInE,SAAS,CAAC,YAAY;IA0BtB,SAAS,KAAK,aAAa,IAAI,gBAAgB,CAI9C;IAED,SAAS,KAAK,cAAc,IAAI,iBAAiB,CAuBhD;IAEQ,MAAM;IAOf,SAAS,CAAC,eAAe;IAmBzB,SAAS,CAAC,YAAY;IAwBtB,SAAS,CAAC,cAAc;IA8CxB,SAAS,KAAK,kBAAkB,IAAI,wBAAwB,CAI3D;IAED,SAAS,KAAK,mBAAmB,IAAI,yBAAyB,CAI7D;IAED,SAAS,CAAC,oBAAoB;IAc9B,OAAgB,MAAM,0BAA2B;CAClD;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,gBAAgB,EAAE,YAAY,CAAC;KAChC;CACF"}
1
+ {"version":3,"file":"poi-button.d.ts","sourceRoot":"","sources":["../../../src/ar/poi-button/poi-button.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,UAAU,EAAQ,OAAO,EAAY,MAAM,KAAK,CAAC;AAKzD,OAAO,6CAA6C,CAAC;AAKrD,OAAO,EACL,iBAAiB,EAEjB,gBAAgB,EACjB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACL,yBAAyB,EACzB,wBAAwB,EACzB,MAAM,+DAA+D,CAAC;AACvE,OAAO,+DAA+D,CAAC;AAEvE,oBAAY,gBAAgB;IAC1B,MAAM,WAAW;IACjB,QAAQ,aAAa;CACtB;AAED,oBAAY,kBAAkB;IAC5B,QAAQ,aAAa;IACrB,MAAM,WAAW;CAClB;AAED,oBAAY,iBAAiB;IAC3B,OAAO,YAAY;IACnB,OAAO,YAAY;IACnB,OAAO,YAAY;IACnB,KAAK,UAAU;IACf,aAAa,mBAAmB;IAChC,SAAS,eAAe;IACxB,WAAW,iBAAiB;IAC5B,QAAQ,cAAc;IACtB,eAAe,qBAAqB;CACrC;AAED,oBAAY,oBAAoB;IAC9B,SAAS,cAAc;IACvB,OAAO,YAAY;IACnB,SAAS,cAAc;IACvB,UAAU,eAAe;CAC1B;AASD,wBAAgB,+BAA+B,CAC7C,UAAU,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EACrC,WAAW,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EACtC,uBAAuB,GAAE,MAA+C,GACvE,gBAAgB,CAgBlB;AAED,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuDG;AACH,qBACa,YAAa,SAAQ,UAAU;IAChB,iBAAiB,SAAK;IACrB,QAAQ,UAAS;IAClB,MAAM,EAAE,kBAAkB,CACtB;IAE9B,SAAS,UAAS;IAElB,KAAK,EAAE,iBAAiB,CAA6B;IAErD,KAAK,EAAE,oBAAoB,CAAkC;IAE7D,aAAa,UAAS;IACI,IAAI,mBAA2B;IAC9B,eAAe,UAAS;IACR,IAAI,EAAE,oBAAoB,EAAE,CAAM;IAClD,WAAW,UAAS;IACQ,aAAa,SAAM;IAC1E,OAAO,CAAC,qBAAqB,CAAC,CAAmB;IAMjD,OAAO,CAAC,qBAAqB,CAG3B;IAEO,iBAAiB;IAMjB,oBAAoB;IAO7B,OAAO,CAAC,0BAA0B;IA0BlC,IAAI,OAAO,IAAI,OAAO,CAErB;IAED,OAAO,KAAK,gBAAgB,GAK3B;IAED,OAAO,KAAK,mBAAmB,GAsB9B;IAED,OAAO,KAAK,gBAAgB,GAW3B;IAED,OAAO,KAAK,yBAAyB,GAEpC;IAED,OAAO,CAAC,sBAAsB;IA2B9B,OAAO,CAAC,sBAAsB,CAE5B;cAEiB,OAAO,CAAC,kBAAkB,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC;IAInE,SAAS,CAAC,YAAY;IA0BtB,SAAS,KAAK,aAAa,IAAI,gBAAgB,CAI9C;IAED,SAAS,KAAK,cAAc,IAAI,iBAAiB,CAuBhD;IAEQ,MAAM;IAOf,SAAS,CAAC,eAAe;IAmBzB,SAAS,CAAC,YAAY;IAwBtB,SAAS,CAAC,cAAc;IA8CxB,SAAS,KAAK,kBAAkB,IAAI,wBAAwB,CAI3D;IAED,SAAS,KAAK,mBAAmB,IAAI,yBAAyB,CAI7D;IAED,SAAS,CAAC,oBAAoB;IAc9B,OAAgB,MAAM,0BAA2B;CAClD;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,gBAAgB,EAAE,YAAY,CAAC;KAChC;CACF"}
@@ -59,16 +59,22 @@ var ObcPoiButton = class ObcPoiButton extends LitElement {
59
59
  this.data = [];
60
60
  this.hasRelation = false;
61
61
  this.headerContent = "";
62
+ this.handleLightSlotChange = () => {
63
+ this.requestUpdate();
64
+ this.syncSlottedHeaderState();
65
+ };
62
66
  this.handleHeaderSlotChange = () => {
63
67
  this.syncSlottedHeaderState();
64
68
  };
65
69
  }
66
70
  connectedCallback() {
67
71
  super.connectedCallback();
72
+ this.addEventListener("slotchange", this.handleLightSlotChange);
68
73
  this.setupHeaderContentObserver();
69
74
  }
70
75
  disconnectedCallback() {
71
76
  super.disconnectedCallback();
77
+ this.removeEventListener("slotchange", this.handleLightSlotChange);
72
78
  this.headerContentObserver?.disconnect();
73
79
  this.headerContentObserver = void 0;
74
80
  }
@@ -114,7 +120,10 @@ var ObcPoiButton = class ObcPoiButton extends LitElement {
114
120
  }
115
121
  }
116
122
  get hasHeaderContent() {
117
- return this.querySelector("[slot=\"header\"]") !== null;
123
+ for (const child of this.querySelectorAll("[slot=\"header\"]")) if (child instanceof HTMLSlotElement) {
124
+ if (child.assignedElements({ flatten: true }).length > 0) return true;
125
+ } else return true;
126
+ return false;
118
127
  }
119
128
  get hasGeneratedHeaderContent() {
120
129
  return this.headerContent.trim().length > 0;