@oicl/openbridge-webcomponents 2.0.0-next.170 → 2.0.0-next.172
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.
- package/bundle/openbridge-webcomponents.bundle.js +974 -511
- package/bundle/openbridge-webcomponents.bundle.js.map +1 -1
- package/custom-elements.json +1853 -377
- package/dist/ar/poi/poi-aton.d.ts +1 -0
- package/dist/ar/poi/poi-aton.d.ts.map +1 -1
- package/dist/ar/poi/poi-aton.js +1 -0
- package/dist/ar/poi/poi-aton.js.map +1 -1
- package/dist/ar/poi/poi-base.d.ts +39 -5
- package/dist/ar/poi/poi-base.d.ts.map +1 -1
- package/dist/ar/poi/poi-base.js +108 -37
- package/dist/ar/poi/poi-base.js.map +1 -1
- package/dist/ar/poi/poi-data.d.ts +1 -0
- package/dist/ar/poi/poi-data.d.ts.map +1 -1
- package/dist/ar/poi/poi-data.js +1 -0
- package/dist/ar/poi/poi-data.js.map +1 -1
- package/dist/ar/poi/poi-vessel.d.ts +1 -0
- package/dist/ar/poi/poi-vessel.d.ts.map +1 -1
- package/dist/ar/poi/poi-vessel.js +1 -0
- package/dist/ar/poi/poi-vessel.js.map +1 -1
- package/dist/ar/poi/poi.d.ts +4 -12
- package/dist/ar/poi/poi.d.ts.map +1 -1
- package/dist/ar/poi/poi.js +6 -72
- package/dist/ar/poi/poi.js.map +1 -1
- package/dist/ar/poi-button/poi-button.d.ts +6 -2
- package/dist/ar/poi-button/poi-button.d.ts.map +1 -1
- package/dist/ar/poi-button/poi-button.js +10 -1
- package/dist/ar/poi-button/poi-button.js.map +1 -1
- package/dist/ar/poi-card/poi-card.d.ts +12 -1
- package/dist/ar/poi-card/poi-card.d.ts.map +1 -1
- package/dist/ar/poi-card/poi-card.js +4 -1
- package/dist/ar/poi-card/poi-card.js.map +1 -1
- package/dist/ar/poi-controller/poi-controller.d.ts +45 -1
- package/dist/ar/poi-controller/poi-controller.d.ts.map +1 -1
- package/dist/ar/poi-controller/poi-controller.js +72 -14
- package/dist/ar/poi-controller/poi-controller.js.map +1 -1
- package/dist/ar/poi-group/poi-group.d.ts +28 -5
- package/dist/ar/poi-group/poi-group.d.ts.map +1 -1
- package/dist/ar/poi-group/poi-group.js +50 -7
- package/dist/ar/poi-group/poi-group.js.map +1 -1
- package/dist/ar/poi-layer/poi-layer.css.js +69 -18
- package/dist/ar/poi-layer/poi-layer.css.js.map +1 -1
- package/dist/ar/poi-layer/poi-layer.d.ts +64 -5
- package/dist/ar/poi-layer/poi-layer.d.ts.map +1 -1
- package/dist/ar/poi-layer/poi-layer.js +173 -39
- package/dist/ar/poi-layer/poi-layer.js.map +1 -1
- package/dist/ar/poi-layer-stack/poi-layer-stack.d.ts +82 -7
- package/dist/ar/poi-layer-stack/poi-layer-stack.d.ts.map +1 -1
- package/dist/ar/poi-layer-stack/poi-layer-stack.js +172 -100
- package/dist/ar/poi-layer-stack/poi-layer-stack.js.map +1 -1
- package/dist/ar/poi-projection/poi-projection.d.ts +88 -0
- package/dist/ar/poi-projection/poi-projection.d.ts.map +1 -0
- package/dist/ar/poi-projection/poi-projection.js +90 -0
- package/dist/ar/poi-projection/poi-projection.js.map +1 -0
- package/dist/automation/automation-button/abstract-automation-button-motorized.d.ts +11 -1
- package/dist/automation/automation-button/abstract-automation-button-motorized.d.ts.map +1 -1
- package/dist/automation/automation-button/abstract-automation-button-motorized.js +14 -4
- package/dist/automation/automation-button/abstract-automation-button-motorized.js.map +1 -1
- package/dist/automation/automation-button/abstract-automation-button-squared.d.ts +25 -1
- package/dist/automation/automation-button/abstract-automation-button-squared.d.ts.map +1 -1
- package/dist/automation/automation-button/abstract-automation-button-squared.js +27 -3
- package/dist/automation/automation-button/abstract-automation-button-squared.js.map +1 -1
- package/dist/automation/automation-button/abstract-automation-button-storybook-helpers.d.ts +12 -0
- package/dist/automation/automation-button/abstract-automation-button-storybook-helpers.d.ts.map +1 -1
- package/dist/automation/automation-button/abstract-automation-button-storybook-helpers.js +8 -0
- package/dist/automation/automation-button/abstract-automation-button-storybook-helpers.js.map +1 -1
- package/dist/automation/bipolar-transistor/bipolar-transistor.js +4 -4
- package/dist/automation/bipolar-transistor/bipolar-transistor.js.map +1 -1
- package/dist/automation/capacitor/capacitor.js +4 -4
- package/dist/automation/capacitor/capacitor.js.map +1 -1
- package/dist/automation/converter/converter.js +4 -4
- package/dist/automation/converter/converter.js.map +1 -1
- package/dist/automation/damper/damper.js +1 -1
- package/dist/automation/damper/damper.js.map +1 -1
- package/dist/automation/diodes/diodes.js +6 -6
- package/dist/automation/diodes/diodes.js.map +1 -1
- package/dist/automation/fan/fan.js +1 -1
- package/dist/automation/fan/fan.js.map +1 -1
- package/dist/automation/filter/filter.js +4 -4
- package/dist/automation/filter/filter.js.map +1 -1
- package/dist/automation/ground/ground.js +3 -3
- package/dist/automation/ground/ground.js.map +1 -1
- package/dist/automation/logic/logic.js +6 -6
- package/dist/automation/logic/logic.js.map +1 -1
- package/dist/automation/mosfet/mosfet.js +8 -8
- package/dist/automation/mosfet/mosfet.js.map +1 -1
- package/dist/automation/motor/motor.js +2 -2
- package/dist/automation/motor/motor.js.map +1 -1
- package/dist/automation/pump/pump.js +2 -2
- package/dist/automation/pump/pump.js.map +1 -1
- package/dist/automation/resistor/resistor.js +5 -5
- package/dist/automation/resistor/resistor.js.map +1 -1
- package/dist/automation/router/router.js +2 -2
- package/dist/automation/router/router.js.map +1 -1
- package/dist/automation/source/source.js +5 -5
- package/dist/automation/source/source.js.map +1 -1
- package/dist/automation/switch/switch.js +4 -4
- package/dist/automation/switch/switch.js.map +1 -1
- package/dist/automation/transformer/transformer.js +2 -2
- package/dist/automation/transformer/transformer.js.map +1 -1
- 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":";;;;;;;;;;
|
|
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
|
|
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":";;;;;;;;;
|
|
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"}
|
package/dist/ar/poi/poi.d.ts
CHANGED
|
@@ -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: `
|
|
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
|
|
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,
|
|
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
|
}
|
package/dist/ar/poi/poi.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"poi.d.ts","sourceRoot":"","sources":["../../../src/ar/poi/poi.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,UAAU,EAA2B,MAAM,KAAK,CAAC;AAKzD,OAAO,6BAA6B,CAAC;AACrC,OAAO,EACL,gBAAgB,EAChB,oBAAoB,EACpB,iBAAiB,EACjB,oBAAoB,EACrB,MAAM,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"poi.d.ts","sourceRoot":"","sources":["../../../src/ar/poi/poi.ts"],"names":[],"mappings":"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"}
|
package/dist/ar/poi/poi.js
CHANGED
|
@@ -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 =
|
|
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 =
|
|
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
|
-
|
|
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
|
package/dist/ar/poi/poi.js.map
CHANGED
|
@@ -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`):
|
|
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
|
|
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
|
-
|
|
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;
|