@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.
Files changed (100) hide show
  1. package/bundle/openbridge-webcomponents.bundle.js +974 -511
  2. package/bundle/openbridge-webcomponents.bundle.js.map +1 -1
  3. package/custom-elements.json +1853 -377
  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/dist/automation/automation-button/abstract-automation-button-motorized.d.ts +11 -1
  55. package/dist/automation/automation-button/abstract-automation-button-motorized.d.ts.map +1 -1
  56. package/dist/automation/automation-button/abstract-automation-button-motorized.js +14 -4
  57. package/dist/automation/automation-button/abstract-automation-button-motorized.js.map +1 -1
  58. package/dist/automation/automation-button/abstract-automation-button-squared.d.ts +25 -1
  59. package/dist/automation/automation-button/abstract-automation-button-squared.d.ts.map +1 -1
  60. package/dist/automation/automation-button/abstract-automation-button-squared.js +27 -3
  61. package/dist/automation/automation-button/abstract-automation-button-squared.js.map +1 -1
  62. package/dist/automation/automation-button/abstract-automation-button-storybook-helpers.d.ts +12 -0
  63. package/dist/automation/automation-button/abstract-automation-button-storybook-helpers.d.ts.map +1 -1
  64. package/dist/automation/automation-button/abstract-automation-button-storybook-helpers.js +8 -0
  65. package/dist/automation/automation-button/abstract-automation-button-storybook-helpers.js.map +1 -1
  66. package/dist/automation/bipolar-transistor/bipolar-transistor.js +4 -4
  67. package/dist/automation/bipolar-transistor/bipolar-transistor.js.map +1 -1
  68. package/dist/automation/capacitor/capacitor.js +4 -4
  69. package/dist/automation/capacitor/capacitor.js.map +1 -1
  70. package/dist/automation/converter/converter.js +4 -4
  71. package/dist/automation/converter/converter.js.map +1 -1
  72. package/dist/automation/damper/damper.js +1 -1
  73. package/dist/automation/damper/damper.js.map +1 -1
  74. package/dist/automation/diodes/diodes.js +6 -6
  75. package/dist/automation/diodes/diodes.js.map +1 -1
  76. package/dist/automation/fan/fan.js +1 -1
  77. package/dist/automation/fan/fan.js.map +1 -1
  78. package/dist/automation/filter/filter.js +4 -4
  79. package/dist/automation/filter/filter.js.map +1 -1
  80. package/dist/automation/ground/ground.js +3 -3
  81. package/dist/automation/ground/ground.js.map +1 -1
  82. package/dist/automation/logic/logic.js +6 -6
  83. package/dist/automation/logic/logic.js.map +1 -1
  84. package/dist/automation/mosfet/mosfet.js +8 -8
  85. package/dist/automation/mosfet/mosfet.js.map +1 -1
  86. package/dist/automation/motor/motor.js +2 -2
  87. package/dist/automation/motor/motor.js.map +1 -1
  88. package/dist/automation/pump/pump.js +2 -2
  89. package/dist/automation/pump/pump.js.map +1 -1
  90. package/dist/automation/resistor/resistor.js +5 -5
  91. package/dist/automation/resistor/resistor.js.map +1 -1
  92. package/dist/automation/router/router.js +2 -2
  93. package/dist/automation/router/router.js.map +1 -1
  94. package/dist/automation/source/source.js +5 -5
  95. package/dist/automation/source/source.js.map +1 -1
  96. package/dist/automation/switch/switch.js +4 -4
  97. package/dist/automation/switch/switch.js.map +1 -1
  98. package/dist/automation/transformer/transformer.js +2 -2
  99. package/dist/automation/transformer/transformer.js.map +1 -1
  100. package/package.json +2 -2
@@ -1548,6 +1548,7 @@
1548
1548
  "text": "boolean"
1549
1549
  },
1550
1550
  "default": "false",
1551
+ "description": "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.",
1551
1552
  "attribute": "inExpandedGroup",
1552
1553
  "inheritedFrom": {
1553
1554
  "name": "ObcPoiButton",
@@ -1604,6 +1605,15 @@
1604
1605
  "module": "src/ar/poi-button/poi-button.ts"
1605
1606
  }
1606
1607
  },
1608
+ {
1609
+ "kind": "field",
1610
+ "name": "handleLightSlotChange",
1611
+ "privacy": "private",
1612
+ "inheritedFrom": {
1613
+ "name": "ObcPoiButton",
1614
+ "module": "src/ar/poi-button/poi-button.ts"
1615
+ }
1616
+ },
1607
1617
  {
1608
1618
  "kind": "method",
1609
1619
  "name": "setupHeaderContentObserver",
@@ -1911,6 +1921,7 @@
1911
1921
  "text": "boolean"
1912
1922
  },
1913
1923
  "default": "false",
1924
+ "description": "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.",
1914
1925
  "fieldName": "inExpandedGroup",
1915
1926
  "inheritedFrom": {
1916
1927
  "name": "ObcPoiButton",
@@ -2188,6 +2199,7 @@
2188
2199
  "text": "boolean"
2189
2200
  },
2190
2201
  "default": "false",
2202
+ "description": "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.",
2191
2203
  "attribute": "inExpandedGroup",
2192
2204
  "inheritedFrom": {
2193
2205
  "name": "ObcPoiButton",
@@ -2244,6 +2256,15 @@
2244
2256
  "module": "src/ar/poi-button/poi-button.ts"
2245
2257
  }
2246
2258
  },
2259
+ {
2260
+ "kind": "field",
2261
+ "name": "handleLightSlotChange",
2262
+ "privacy": "private",
2263
+ "inheritedFrom": {
2264
+ "name": "ObcPoiButton",
2265
+ "module": "src/ar/poi-button/poi-button.ts"
2266
+ }
2267
+ },
2247
2268
  {
2248
2269
  "kind": "method",
2249
2270
  "name": "setupHeaderContentObserver",
@@ -2544,6 +2565,7 @@
2544
2565
  "text": "boolean"
2545
2566
  },
2546
2567
  "default": "false",
2568
+ "description": "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.",
2547
2569
  "fieldName": "inExpandedGroup",
2548
2570
  "inheritedFrom": {
2549
2571
  "name": "ObcPoiButton",
@@ -2838,6 +2860,7 @@
2838
2860
  "text": "boolean"
2839
2861
  },
2840
2862
  "default": "false",
2863
+ "description": "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.",
2841
2864
  "attribute": "inExpandedGroup",
2842
2865
  "inheritedFrom": {
2843
2866
  "name": "ObcPoiButton",
@@ -2894,6 +2917,15 @@
2894
2917
  "module": "src/ar/poi-button/poi-button.ts"
2895
2918
  }
2896
2919
  },
2920
+ {
2921
+ "kind": "field",
2922
+ "name": "handleLightSlotChange",
2923
+ "privacy": "private",
2924
+ "inheritedFrom": {
2925
+ "name": "ObcPoiButton",
2926
+ "module": "src/ar/poi-button/poi-button.ts"
2927
+ }
2928
+ },
2897
2929
  {
2898
2930
  "kind": "method",
2899
2931
  "name": "setupHeaderContentObserver",
@@ -3201,6 +3233,7 @@
3201
3233
  "text": "boolean"
3202
3234
  },
3203
3235
  "default": "false",
3236
+ "description": "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.",
3204
3237
  "fieldName": "inExpandedGroup",
3205
3238
  "inheritedFrom": {
3206
3239
  "name": "ObcPoiButton",
@@ -3299,7 +3332,7 @@
3299
3332
  "declarations": [
3300
3333
  {
3301
3334
  "kind": "class",
3302
- "description": "`<obc-poi-button>` - Marker button component that renders an icon target with optional header and data rows.\n\n## Overview\nUse this component when you need a button-style marker that can show stateful framing and optional metric rows.\nKeywords/synonyms: marker button, target button, icon target, POI button.\n\n## Features/Variants\n- `type` (default `button`): `button` or `enhanced` size.\n- `layout` (default `anchored`): `anchored` or `inline`.\n- `value` (default `unchecked`): `unchecked`, `checked`, `activated`, `overlapped`.\n- `overlapOpaque` (default `false`): controls overlapped opacity mode (`false` = translucent, `true` = opaque).\n- `state` (default `enabled`): `enabled`, `caution`, `warning`, `alarm`, `level-critical`, `level-high`, `level-medium`, `level-low`, `level-diagnostic`.\n- `selected` (default `false`): shows selection frame in anchored layout.\n- `relativeDirection` (default `0`): rotates default-slot icon content in degrees.\n- `data` (default `[]`): when non-empty, renders value/label/unit rows.\n- `hasHeader` + `header` slot: renders a header area and syncs slotted `obc-poi-header` state.\n- `hasRelation` (default `false`): enables optional relation content in data mode.\n- `inExpandedGroup` (default `false`): applies `expanded` CSS class.\n- TODO(designer): Confirm intended UX semantics for `inExpandedGroup` beyond styling.\n\n## Usage Guidelines\n- Use `layout=\"anchored\"` for standalone marker buttons.\n- Use `layout=\"inline\"` when this component is embedded in a larger marker composition.\n- Provide `data` for metric display variants.\n- Enable `hasRelation` only when relation slot content is provided.\n\n## Slots/Content\n- Default slot: Icon/content rendered inside `obc-poi-object`.\n- `header`: Optional header content rendered above the marker body.\n- `relation`: Optional relation icon/content rendered when `hasRelation` is true in data mode.\n\n## Events\nThis component emits no custom events. A standard `click` bubbles from the\ninternal `<button>` (`onClick` in the framework wrappers).\n\n## Best Practices\n- Keep `value`, `state`, and `selected` synchronized to avoid conflicting visual states.\n- Prefer enum values for `type`, `layout`, `state`, and `value`.\n\n## Example\n```html\n<obc-poi-button type=\"button\" layout=\"anchored\" value=\"checked\" selected>\n <obi-placeholder></obi-placeholder>\n <obc-poi-header slot=\"header\" content=\"1\"></obc-poi-header>\n</obc-poi-button>\n```",
3335
+ "description": "`<obc-poi-button>` - Marker button component that renders an icon target with optional header and data rows.\n\n## Overview\nUse this component when you need a button-style marker that can show stateful framing and optional metric rows.\nKeywords/synonyms: marker button, target button, icon target, POI button.\n\n## Features/Variants\n- `type` (default `button`): `button` or `enhanced` size.\n- `layout` (default `anchored`): `anchored` or `inline`.\n- `value` (default `unchecked`): `unchecked`, `checked`, `activated`, `overlapped`.\n- `overlapOpaque` (default `false`): controls overlapped opacity mode (`false` = translucent, `true` = opaque).\n- `state` (default `enabled`): `enabled`, `caution`, `warning`, `alarm`, `level-critical`, `level-high`, `level-medium`, `level-low`, `level-diagnostic`.\n- `selected` (default `false`): shows selection frame in anchored layout.\n- `relativeDirection` (default `0`): rotates default-slot icon content in degrees.\n- `data` (default `[]`): when non-empty, renders value/label/unit rows.\n- `hasHeader` + `header` slot: renders a header area and syncs slotted `obc-poi-header` state.\n- `hasRelation` (default `false`): enables optional relation content in data mode.\n- `inExpandedGroup` (default `false`): expanded-group presentation state, applied by the owning group composition during expand/collapse orchestration; consumers should not set it directly.\n\n## Usage Guidelines\n- Use `layout=\"anchored\"` for standalone marker buttons.\n- Use `layout=\"inline\"` when this component is embedded in a larger marker composition.\n- Provide `data` for metric display variants.\n- Enable `hasRelation` only when relation slot content is provided.\n\n## Slots/Content\n- Default slot: Icon/content rendered inside `obc-poi-object`.\n- `header`: Optional header content rendered above the marker body.\n- `relation`: Optional relation icon/content rendered when `hasRelation` is true in data mode.\n\n## Events\nThis component emits no custom events. A standard `click` bubbles from the\ninternal `<button>` (`onClick` in the framework wrappers).\n\n## Best Practices\n- Keep `value`, `state`, and `selected` synchronized to avoid conflicting visual states.\n- Prefer enum values for `type`, `layout`, `state`, and `value`.\n\n## Example\n```html\n<obc-poi-button type=\"button\" layout=\"anchored\" value=\"checked\" selected>\n <obi-placeholder></obi-placeholder>\n <obc-poi-header slot=\"header\" content=\"1\"></obc-poi-header>\n</obc-poi-button>\n```",
3303
3336
  "name": "ObcPoiButton",
3304
3337
  "slots": [
3305
3338
  {
@@ -3388,6 +3421,7 @@
3388
3421
  "text": "boolean"
3389
3422
  },
3390
3423
  "default": "false",
3424
+ "description": "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.",
3391
3425
  "attribute": "inExpandedGroup"
3392
3426
  },
3393
3427
  {
@@ -3424,6 +3458,11 @@
3424
3458
  },
3425
3459
  "privacy": "private"
3426
3460
  },
3461
+ {
3462
+ "kind": "field",
3463
+ "name": "handleLightSlotChange",
3464
+ "privacy": "private"
3465
+ },
3427
3466
  {
3428
3467
  "kind": "method",
3429
3468
  "name": "setupHeaderContentObserver",
@@ -3615,6 +3654,7 @@
3615
3654
  "text": "boolean"
3616
3655
  },
3617
3656
  "default": "false",
3657
+ "description": "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.",
3618
3658
  "fieldName": "inExpandedGroup"
3619
3659
  },
3620
3660
  {
@@ -3950,8 +3990,26 @@
3950
3990
  "declarations": [
3951
3991
  {
3952
3992
  "kind": "class",
3953
- "description": "`<obc-poi-card>` - Content card container with optional pointer arrow, header variants, and interactive click handling.\n\n## Overview\nUse this component to wrap contextual marker details in a card with optional directional anchoring.\nKeywords/synonyms: detail card, marker card, anchored card, popover card.\n\n## Features/Variants\n- `pointerDirection` (default `none`): `none`, `top`, `bottom`, `left`, `right`.\n- `fixedSize` (default `false`): toggles fixed `256x256` sizing instead of content-based sizing.\n- Header options:\n - `showHeader` controls whether the header area is visible.\n - `headerVariant` controls header layout (`tag`, `condensed`, `regular`, `detailed`).\n - `index`, `cardTitle`, `description`, `source`, `timestamp` are forwarded to `obc-poi-card-header`.\n - `hasLeadingIcon` and `hasCloseButton` gate header affordances.\n- `interactive` (default `false`): enables keyboard activation and `card-click` dispatch.\n- `hasAlert` (default `false`): shows alert ring layer when `interactive` is enabled.\n\n## Usage Guidelines\n- Use `pointerDirection` when the card should visually point to an anchor target.\n- Keep `interactive` off for read-only cards.\n- Use the header slots only when the selected `headerVariant` renders them.\n\n## Slots/Content\n- Default slot: Main card body content.\n- `leading-icon`: Optional icon used by the regular header variant.\n- `poi-icon`: Optional icon used by the detailed header variant.\n\n## Events\n- `card-click`: Fired when the card surface is activated in interactive mode.\n\n## Best Practices\n- Keep `index` stable so event payloads remain predictable.\n- Pair `hasAlert` with meaningful alert state in surrounding UI logic.\n\n## Example\n```html\n<obc-poi-card pointerDirection=\"bottom\" index=\"1\" cardTitle=\"Target\" interactive>\n <obi-placeholder slot=\"leading-icon\"></obi-placeholder>\n <div>Custom card content</div>\n</obc-poi-card>\n```",
3993
+ "description": "`<obc-poi-card>` - Content card container with optional pointer arrow, header variants, and interactive click handling.\n\n## Overview\nUse this component to wrap contextual marker details in a card with optional directional anchoring.\nKeywords/synonyms: detail card, marker card, anchored card, popover card.\n\n## Features/Variants\n- `pointerDirection` (default `none`): `none`, `top`, `bottom`, `left`, `right`.\n- `fixedSize` (default `false`): toggles fixed `256x256` sizing instead of content-based sizing.\n- Header options:\n - `showHeader` controls whether the header area is visible.\n - `headerVariant` controls header layout (`tag`, `condensed`, `regular`, `detailed`).\n - `index`, `cardTitle`, `description`, `source`, `timestamp` are forwarded to `obc-poi-card-header`.\n - `hasLeadingIcon` and `hasCloseButton` gate header affordances.\n- `interactive` (default `false`): enables keyboard activation and `card-click` dispatch.\n- `hasAlert` (default `false`): shows alert ring layer when `interactive` is enabled.\n\n## Usage Guidelines\n- Use `pointerDirection` when the card should visually point to an anchor target.\n- Keep `interactive` off for read-only cards.\n- Use the header slots only when the selected `headerVariant` renders them.\n\n## Slots/Content\n- Default slot: Main card body content.\n- `leading-icon`: Optional icon used by the regular header variant.\n- `poi-icon`: Optional icon used by the detailed header variant.\n\n## Events\n- `card-click`: Fired when the card surface is activated in interactive mode.\n- `close-click`: Fired when the header close button is pressed (`hasCloseButton` with the detailed header variant).\n\n## CSS Parts\n- `wrapper`: Outer layout wrapper holding the pointer arrows and the card surface.\n- `content-box`: Card surface with background, border, and rounded corners.\n- `header`: The `obc-poi-card-header` element, rendered when `showHeader` is true.\n- `content`: Body area wrapping the default slot.\n\n## Best Practices\n- Keep `index` stable so event payloads remain predictable.\n- Pair `hasAlert` with meaningful alert state in surrounding UI logic.\n\n## Example\n```html\n<obc-poi-card pointerDirection=\"bottom\" index=\"1\" cardTitle=\"Target\" interactive>\n <obi-placeholder slot=\"leading-icon\"></obi-placeholder>\n <div>Custom card content</div>\n</obc-poi-card>\n```",
3954
3994
  "name": "ObcPoiCard",
3995
+ "cssParts": [
3996
+ {
3997
+ "description": "Outer layout wrapper holding the pointer arrows and the card surface.",
3998
+ "name": "wrapper"
3999
+ },
4000
+ {
4001
+ "description": "Card surface with background, border, and rounded corners.",
4002
+ "name": "content-box"
4003
+ },
4004
+ {
4005
+ "description": "The `obc-poi-card-header` element, rendered when `showHeader` is true.",
4006
+ "name": "header"
4007
+ },
4008
+ {
4009
+ "description": "Body area wrapping the default slot.",
4010
+ "name": "content"
4011
+ }
4012
+ ],
3955
4013
  "slots": [
3956
4014
  {
3957
4015
  "description": "Main card body content.",
@@ -4194,7 +4252,7 @@
4194
4252
  "type": {
4195
4253
  "text": "CustomEvent<void>"
4196
4254
  },
4197
- "description": "Passed on from the header when its close button is pressed (`hasCloseButton`).",
4255
+ "description": "Passed on from the header when its close button is pressed (`hasCloseButton` with the detailed header variant).",
4198
4256
  "name": "close-click"
4199
4257
  }
4200
4258
  ],
@@ -4345,7 +4403,7 @@
4345
4403
  "declarations": [
4346
4404
  {
4347
4405
  "kind": "class",
4348
- "description": "`<obc-poi-controller>` — Maps detection data onto POI markers over a video or image.\n\nTakes detection coordinates in media pixel space (e.g. x,y in a 1920x1080 frame),\nprojects them to screen space using the media's rendered size and fit mode, and\ncreates/updates `obc-poi-data` targets inside a layer stack.\n\n## Quick Start\n\nThe media slot accepts a `<video>` (live stream, HLS, file) or `<img>` element.\n\n```html\n<obc-poi-controller fit=\"cover\">\n <video slot=\"media\" src=\"stream.mp4\" autoplay muted></video>\n <obc-poi-layer-stack slot=\"stack\" selection-mode=\"multi\">\n <obc-poi-layer is-selected></obc-poi-layer>\n <obc-poi-layer data-controller-layer=\"background\"></obc-poi-layer>\n </obc-poi-layer-stack>\n</obc-poi-controller>\n```\n\nThen set detections from your data source (WebSocket, API, etc.):\n\n```js\nconst controller = document.querySelector('obc-poi-controller');\ncontroller.detections = [\n { id: 'track-1', x: 400, y: 800, box_width: 50, box_height: 40, heading: -15 },\n { id: 'track-2', x: 900, y: 750, box_width: 35, box_height: 30, heading: 45 },\n];\n```\n\n## Framework Usage\n\n**Lit:**\n```html\n<obc-poi-controller .detections=${detections} fit=\"cover\">\n```\n\n**Vue:**\n```html\n<obc-poi-controller :detections=\"detections\" fit=\"cover\">\n```\n\n**Svelte:**\n```html\n<obc-poi-controller detections={detections} fit=\"cover\">\n```\n\n**React 18** (needs ref for array props):\n```tsx\nconst ref = useRef(null);\nuseEffect(() => { ref.current.detections = detections; }, [detections]);\n<obc-poi-controller ref={ref} fit=\"cover\">\n```\n\n**React 19+** (native custom element support):\n```tsx\n<obc-poi-controller detections={detections} fit=\"cover\">\n```\n\n## Coordinate Model\n\nDetection `x` and `y` are in **media pixel space** (e.g. 0-1920 for a 1920x1080 video).\nThe controller projects them to screen space using the `fit` mode (`contain` or `cover`)\nand the media element's rendered dimensions.\n\nThe Y coordinate maps to the line length from the layer's top edge down to the\ndetection point. The button sits at the top of the layer; the line extends downward.\n\n## Detection Data\n\nEach detection can include:\n- `x`, `y` (required) — position in media pixel space\n- `id` — stable identity key (prevents marker churn when array order changes)\n- `box_width`, `box_height` — bounding box size; determines button type (regular vs enhanced)\n- `heading` or `direction` — rotation angle for the icon arrow (degrees)\n- `confidence` — filtered by `confidenceMin`\n- `class` — filtered by `classFilter`\n\n## Layer Setup\n\nThe stack needs at least two layers:\n1. A **selected layer** (`is-selected`) — targets jump here when clicked\n2. A **background layer** (`data-controller-layer=\"background\"`) — where the controller places targets\n\nIf no `data-controller-layer=\"background\"` is set, the controller uses the first non-selected layer.\n\n## Selection\n\nClicking a target moves it to the selected layer with a FLIP animation.\nThe controller does not interfere with selected targets — it only manages\ntargets in the background layer. The layer-stack owns selection state.\n\n## CSS Custom Properties\n\n- `--obc-poi-controller-stack-top` (default `15%`) — vertical position of the stack\n- `--obc-poi-controller-stack-height` (default `50%`) — height of the stack\n- `--obc-poi-controller-stack-gap` (default `8px`) — gap between layers",
4406
+ "description": "`<obc-poi-controller>` — Maps detection data onto POI markers over a video or image.\n\nTakes detection coordinates in media pixel space (e.g. x,y in a 1920x1080 frame),\nprojects them to screen space using the media's rendered size and fit mode, and\ncreates/updates POI targets inside a layer stack (`obc-poi-data` by default;\n`obc-poi-vessel`/`obc-poi-aton` via each detection's `variant`, with optional\nper-detection `icon`, `state`, and `data`).\n\n## Quick Start\n\nThe media slot accepts a `<video>` (live stream, HLS, file) or `<img>` element.\n\n```html\n<obc-poi-controller fit=\"cover\">\n <video slot=\"media\" src=\"stream.mp4\" autoplay muted></video>\n <obc-poi-layer-stack slot=\"stack\" selection-mode=\"multi\">\n <obc-poi-layer is-selected></obc-poi-layer>\n <obc-poi-layer data-controller-layer=\"background\"></obc-poi-layer>\n </obc-poi-layer-stack>\n</obc-poi-controller>\n```\n\nThen set detections from your data source (WebSocket, API, etc.):\n\n```js\nconst controller = document.querySelector('obc-poi-controller');\ncontroller.detections = [\n { id: 'track-1', x: 400, y: 800, box_width: 50, box_height: 40, heading: -15 },\n { id: 'track-2', x: 900, y: 750, box_width: 35, box_height: 30, heading: 45 },\n];\n```\n\n## Framework Usage\n\n**Lit:**\n```html\n<obc-poi-controller .detections=${detections} fit=\"cover\">\n```\n\n**Vue:**\n```html\n<obc-poi-controller :detections=\"detections\" fit=\"cover\">\n```\n\n**Svelte:**\n```html\n<obc-poi-controller detections={detections} fit=\"cover\">\n```\n\n**React 18** (needs ref for array props):\n```tsx\nconst ref = useRef(null);\nuseEffect(() => { ref.current.detections = detections; }, [detections]);\n<obc-poi-controller ref={ref} fit=\"cover\">\n```\n\n**React 19+** (native custom element support):\n```tsx\n<obc-poi-controller detections={detections} fit=\"cover\">\n```\n\n## Framework Notes\n\nBoth paths are safe for declarative renderers (React, Vue, Lit): the\n`detections` API creates and owns the resulting `obc-poi-data` elements,\nand manually slotted POI children are never moved, re-parented, or\nmodified structurally by the library — selection is rendered by CSS\nprojection and auto-grouping happens inside the layer's shadow root via\nslot assignment. Frameworks can manage POI children as ordinary\nframework-owned elements.\n\n## Coordinate Model\n\nDetection `x` and `y` are in **media pixel space** (e.g. 0-1920 for a 1920x1080 video).\nThe controller projects them to screen space using the `fit` mode (`contain` or `cover`)\nand the media element's rendered dimensions.\n\nThe Y coordinate maps to the line length from the layer's top edge down to the\ndetection point. The button sits at the top of the layer; the line extends downward.\n\n## Detection Data\n\nEach detection can include:\n- `x`, `y` (required) — position in media pixel space\n- `id` — stable identity key (prevents marker churn when array order changes)\n- `box_width`, `box_height` — bounding box size; determines button type (regular vs enhanced)\n- `heading` or `direction` — rotation angle for the icon arrow (degrees)\n- `confidence` — filtered by `confidenceMin`\n- `class` — filtered by `classFilter`\n\n## Layer Setup\n\nThe stack needs at least two layers:\n1. A **selected layer** (`is-selected`) — targets jump here when clicked\n2. A **background layer** (`data-controller-layer=\"background\"`) — where the controller places targets\n\nIf no `data-controller-layer=\"background\"` is set, the controller uses the first non-selected layer.\n\n## Selection\n\nClicking a target moves it to the selected layer with a FLIP animation.\nThe controller does not interfere with selected targets — it only manages\ntargets in the background layer. The layer-stack owns selection state.\n\n## CSS Custom Properties\n\n- `--obc-poi-controller-stack-top` (default `15%`) — vertical position of the stack\n- `--obc-poi-controller-stack-height` (default `50%`) — height of the stack\n- `--obc-poi-controller-stack-gap` (default `8px`) — gap between layers",
4349
4407
  "name": "ObcPoiController",
4350
4408
  "slots": [
4351
4409
  {
@@ -4419,6 +4477,26 @@
4419
4477
  },
4420
4478
  "default": "null"
4421
4479
  },
4480
+ {
4481
+ "kind": "field",
4482
+ "name": "xFilterCutoffHz",
4483
+ "type": {
4484
+ "text": "number | null"
4485
+ },
4486
+ "default": "null",
4487
+ "description": "Forwarded to every controller-owned target's `xFilterCutoffHz`; `null` leaves the targets on their default.",
4488
+ "attribute": "x-filter-cutoff-hz"
4489
+ },
4490
+ {
4491
+ "kind": "field",
4492
+ "name": "yFilterCutoffHz",
4493
+ "type": {
4494
+ "text": "number | null"
4495
+ },
4496
+ "default": "null",
4497
+ "description": "Forwarded to every controller-owned target's `yFilterCutoffHz`; `null` leaves the targets on their default.",
4498
+ "attribute": "y-filter-cutoff-hz"
4499
+ },
4422
4500
  {
4423
4501
  "kind": "field",
4424
4502
  "name": "mediaWidth",
@@ -4510,7 +4588,7 @@
4510
4588
  "kind": "field",
4511
4589
  "name": "controllerTargets",
4512
4590
  "privacy": "private",
4513
- "default": "new Map<string, ObcPoiData>()"
4591
+ "default": "new Map<string, PoiBase>()"
4514
4592
  },
4515
4593
  {
4516
4594
  "kind": "field",
@@ -4635,6 +4713,16 @@
4635
4713
  }
4636
4714
  }
4637
4715
  },
4716
+ {
4717
+ "kind": "method",
4718
+ "name": "computeCurrentProjection",
4719
+ "privacy": "private",
4720
+ "return": {
4721
+ "type": {
4722
+ "text": "MediaProjection | null"
4723
+ }
4724
+ }
4725
+ },
4638
4726
  {
4639
4727
  "kind": "method",
4640
4728
  "name": "mapDetection",
@@ -4650,6 +4738,13 @@
4650
4738
  "type": {
4651
4739
  "text": "PoiDetection"
4652
4740
  }
4741
+ },
4742
+ {
4743
+ "name": "projection",
4744
+ "default": "this.computeCurrentProjection()",
4745
+ "type": {
4746
+ "text": "MediaProjection | null"
4747
+ }
4653
4748
  }
4654
4749
  ]
4655
4750
  },
@@ -4706,6 +4801,24 @@
4706
4801
  },
4707
4802
  "default": "null",
4708
4803
  "fieldName": "classFilter"
4804
+ },
4805
+ {
4806
+ "name": "x-filter-cutoff-hz",
4807
+ "type": {
4808
+ "text": "number | null"
4809
+ },
4810
+ "default": "null",
4811
+ "description": "Forwarded to every controller-owned target's `xFilterCutoffHz`; `null` leaves the targets on their default.",
4812
+ "fieldName": "xFilterCutoffHz"
4813
+ },
4814
+ {
4815
+ "name": "y-filter-cutoff-hz",
4816
+ "type": {
4817
+ "text": "number | null"
4818
+ },
4819
+ "default": "null",
4820
+ "description": "Forwarded to every controller-owned target's `yFilterCutoffHz`; `null` leaves the targets on their default.",
4821
+ "fieldName": "yFilterCutoffHz"
4709
4822
  }
4710
4823
  ],
4711
4824
  "superclass": {
@@ -4717,6 +4830,22 @@
4717
4830
  }
4718
4831
  ],
4719
4832
  "exports": [
4833
+ {
4834
+ "kind": "js",
4835
+ "name": "POI_CONTROLLER_LAYER_ATTR",
4836
+ "declaration": {
4837
+ "name": "POI_CONTROLLER_LAYER_ATTR",
4838
+ "module": "src/ar/poi-controller/poi-controller.ts"
4839
+ }
4840
+ },
4841
+ {
4842
+ "kind": "js",
4843
+ "name": "POI_CONTROLLER_BACKGROUND_LAYER",
4844
+ "declaration": {
4845
+ "name": "POI_CONTROLLER_BACKGROUND_LAYER",
4846
+ "module": "src/ar/poi-controller/poi-controller.ts"
4847
+ }
4848
+ },
4720
4849
  {
4721
4850
  "kind": "js",
4722
4851
  "name": "ObcPoiController",
@@ -4741,7 +4870,7 @@
4741
4870
  "declarations": [
4742
4871
  {
4743
4872
  "kind": "class",
4744
- "description": "`<obc-poi-group>` - A POI cluster component that collapses overlapping targets into one trigger and expands them into a spread list.\n\nThis component wraps multiple `obc-poi-data` elements and manages their collapsed/expanded presentation as a single interactive unit.\nUse it when nearby targets should be presented as one grouped control until the user expands the group.\n\n### Features\n- Expand/collapse state: Controlled by `expand`; collapse animation state is exposed through `collapsing`.\n- Automatic wrapper sizing: Computes collapsed wrapper width/height from slotted target button bounds.\n- Front-target handling: Keeps one front target visually prioritized while collapsing other targets into overlap state.\n- Backdrop interaction: Shows a backdrop while expanded and collapses on backdrop click.\n- Dynamic ordering: `internalSwapping` enables reordering while expanded based on current horizontal positions.\n- Vertical placement: `positionVertical` sets the wrapper/group top offset used for collapsed positioning.\n\n### Usage Guidelines\n- Slot only `obc-poi-data` items that should behave as one grouped target set.\n- Control expand/collapse via the `expand` property, or let the built-in wrapper button toggle expansion.\n- Use the `expand` event detail to synchronize nearby standalone targets (for example, set outside targets to overlapped while this group is open).\n- Treat `collapsing` as component-managed runtime state unless you have a specific orchestration need.\n- **TODO(designer):** Confirm whether external consumers should set `collapsing` directly, or if it should remain fully internal.\n\n### Slots\n| Slot | Renders When... | Purpose |\n| --- | --- | --- |\n| default | Always | Contains grouped `obc-poi-data` targets managed by this component. |\n\n### Events\n- `expand` - Fired when expand state changes. Detail: `{ expand: boolean }`.\n- `collapse-finished` - Fired when the collapse animation has fully completed.\n\n### Best Practices\n- Keep grouped targets positioned consistently so wrapper bounds and front-target selection remain stable.\n- Prefer one `obc-poi-group` per overlap cluster rather than nesting groups.\n- Use `internalSwapping` only when live target crossing should reorder expanded items.\n\n### Example\n```html\n<obc-poi-group positionVertical=\"240px\">\n <obc-poi-data x=\"300\" button-y=\"240\" y=\"240\"></obc-poi-data>\n <obc-poi-data x=\"320\" button-y=\"240\" y=\"240\"></obc-poi-data>\n <obc-poi-data x=\"340\" button-y=\"240\" y=\"240\"></obc-poi-data>\n</obc-poi-group>\n```",
4873
+ "description": "`<obc-poi-group>` - A POI cluster component that collapses overlapping targets into one trigger and expands them into a spread list.\n\nThis component wraps multiple `obc-poi-data` elements and manages their collapsed/expanded presentation as a single interactive unit.\nUse it when nearby targets should be presented as one grouped control until the user expands the group.\n\n### Features\n- Expand/collapse state: Controlled by `expand`; collapse animation state is exposed through `collapsing`.\n- Automatic wrapper sizing: Computes collapsed wrapper width/height from slotted target button bounds.\n- Front-target handling: Keeps one front target visually prioritized while collapsing other targets into overlap state.\n- Backdrop interaction: Shows a backdrop while expanded and collapses on backdrop click.\n- Dynamic ordering: `internalSwapping` enables reordering while expanded based on current horizontal positions.\n- Vertical placement: `positionVertical` (attribute `position-vertical`) sets the wrapper/group top offset used for collapsed positioning.\n\n### Usage Guidelines\n- Slot only `obc-poi-data` items that should behave as one grouped target set.\n- Control expand/collapse via the `expand` property, or let the built-in wrapper button toggle expansion.\n- Use the `expand` event detail to synchronize nearby standalone targets (for example, set outside targets to overlapped while this group is open).\n- Treat `collapsing` as orchestration state: it is set by the group itself and by coordinating containers such as `obc-poi-layer-stack` during collapse animations. Do not set it directly.\n- `internalSwapping` is usually set via `obc-poi-layer`'s `internal-swapping` attribute, which forwards it to auto-created groups; set it directly only on manually managed groups.\n\n### Slots\n| Slot | Renders When... | Purpose |\n| --- | --- | --- |\n| default | Always | Contains grouped `obc-poi-data` targets managed by this component. |\n\n### Events\n- `expand` - Fired when expand state changes. Detail: `{ expand: boolean }`.\n- `collapse-finished` - Fired when the collapse animation has fully completed.\n- `obc-poi-group-target-released` - Fired after `releaseTarget()` returns a target to the group's parent context: re-parented for consumer-managed groups, re-assigned to the layer's main slot for layer-created auto groups. Detail: `{ target: Poi }`.\n\n### Best Practices\n- Keep grouped targets positioned consistently so wrapper bounds and front-target selection remain stable.\n- Prefer one `obc-poi-group` per overlap cluster rather than nesting groups.\n- Use `internalSwapping` only when live target crossing should reorder expanded items.\n\n### Example\n```html\n<obc-poi-group position-vertical=\"240px\">\n <obc-poi-data x=\"300\" button-y=\"240\" y=\"240\"></obc-poi-data>\n <obc-poi-data x=\"320\" button-y=\"240\" y=\"240\"></obc-poi-data>\n <obc-poi-data x=\"340\" button-y=\"240\" y=\"240\"></obc-poi-data>\n</obc-poi-group>\n```",
4745
4874
  "name": "ObcPoiGroup",
4746
4875
  "slots": [
4747
4876
  {
@@ -4766,6 +4895,7 @@
4766
4895
  "text": "boolean"
4767
4896
  },
4768
4897
  "default": "false",
4898
+ "description": "Collapse-animation state. Set by the group itself and by coordinating containers such as `obc-poi-layer-stack` during collapse orchestration; do not set it directly.",
4769
4899
  "attribute": "collapsing"
4770
4900
  },
4771
4901
  {
@@ -4775,7 +4905,7 @@
4775
4905
  "text": "string"
4776
4906
  },
4777
4907
  "default": "'0px'",
4778
- "attribute": "positionVertical"
4908
+ "attribute": "position-vertical"
4779
4909
  },
4780
4910
  {
4781
4911
  "kind": "field",
@@ -4784,6 +4914,7 @@
4784
4914
  "text": "boolean"
4785
4915
  },
4786
4916
  "default": "false",
4917
+ "description": "Reorders expanded targets when their horizontal positions cross. Usually set via `obc-poi-layer`'s `internal-swapping` attribute, which forwards it to auto-created groups; set it directly only on manually managed groups.",
4787
4918
  "attribute": "internal-swapping"
4788
4919
  },
4789
4920
  {
@@ -4946,6 +5077,49 @@
4946
5077
  "name": "onSlotChange",
4947
5078
  "privacy": "private"
4948
5079
  },
5080
+ {
5081
+ "kind": "method",
5082
+ "name": "isMember",
5083
+ "privacy": "private",
5084
+ "return": {
5085
+ "type": {
5086
+ "text": "boolean"
5087
+ }
5088
+ },
5089
+ "parameters": [
5090
+ {
5091
+ "name": "child",
5092
+ "type": {
5093
+ "text": "HTMLElement"
5094
+ }
5095
+ }
5096
+ ],
5097
+ "description": "Membership check that works for both light-DOM children (manual groups)\nand slot-assigned members (layer-created auto groups, where the member\nstays in the consumer's light DOM and is assigned into this group's\nmember slot)."
5098
+ },
5099
+ {
5100
+ "kind": "method",
5101
+ "name": "getMemberSlot",
5102
+ "privacy": "private",
5103
+ "return": {
5104
+ "type": {
5105
+ "text": "HTMLSlotElement | null"
5106
+ }
5107
+ }
5108
+ },
5109
+ {
5110
+ "kind": "method",
5111
+ "name": "bringChildToFront",
5112
+ "privacy": "private",
5113
+ "parameters": [
5114
+ {
5115
+ "name": "frontChild",
5116
+ "type": {
5117
+ "text": "Poi"
5118
+ }
5119
+ }
5120
+ ],
5121
+ "description": "Paint the front child on top. For light-DOM members this reorders the\nchildren; for slot-assigned members it re-assigns the member slot, which\nchanges flattened-tree order without touching the consumer's DOM."
5122
+ },
4949
5123
  {
4950
5124
  "kind": "method",
4951
5125
  "name": "ensureFrontChildOnTop",
@@ -5316,7 +5490,7 @@
5316
5490
  "type": {
5317
5491
  "text": "CustomEvent<{target: Poi}>"
5318
5492
  },
5319
- "description": "Fired after a target leaves the group and has been re-inserted before it in the parent. Bubbles and is composed."
5493
+ "description": "Fired after `releaseTarget()` returns a target to the group's parent context (re-parented for consumer-managed groups, re-assigned for auto groups) — immediately when the group is collapsed, or once the collapse animation completes. Bubbles and is composed."
5320
5494
  }
5321
5495
  ],
5322
5496
  "attributes": [
@@ -5334,10 +5508,11 @@
5334
5508
  "text": "boolean"
5335
5509
  },
5336
5510
  "default": "false",
5511
+ "description": "Collapse-animation state. Set by the group itself and by coordinating containers such as `obc-poi-layer-stack` during collapse orchestration; do not set it directly.",
5337
5512
  "fieldName": "collapsing"
5338
5513
  },
5339
5514
  {
5340
- "name": "positionVertical",
5515
+ "name": "position-vertical",
5341
5516
  "type": {
5342
5517
  "text": "string"
5343
5518
  },
@@ -5350,6 +5525,7 @@
5350
5525
  "text": "boolean"
5351
5526
  },
5352
5527
  "default": "false",
5528
+ "description": "Reorders expanded targets when their horizontal positions cross. Usually set via `obc-poi-layer`'s `internal-swapping` attribute, which forwards it to auto-created groups; set it directly only on manually managed groups.",
5353
5529
  "fieldName": "internalSwapping"
5354
5530
  }
5355
5531
  ],
@@ -5386,7 +5562,7 @@
5386
5562
  "declarations": [
5387
5563
  {
5388
5564
  "kind": "class",
5389
- "description": "`<obc-poi-layer-stack>` coordinates multiple POI layers and manages\nselection behavior across stacked layers.\n\nUse `selection-mode` to control whether targets can be selected across the\nstack (`none`, `single`, or `multi`).\n\n### Slots\n- Default slot for `obc-poi-layer` elements that participate in the stack.\n\n### Example\n```html\n<obc-poi-layer-stack selection-mode=\"single\">\n <obc-poi-layer label=\"Radar\" .isSelected=${true}></obc-poi-layer>\n <obc-poi-layer label=\"AIS\"></obc-poi-layer>\n</obc-poi-layer-stack>\n```",
5565
+ "description": "`<obc-poi-layer-stack>` coordinates multiple POI layers and manages\nselection behavior across stacked layers.\n\nUse `selection-mode` to control whether targets can be selected across the\nstack (`none`, `single`, or `multi`).\n\n### Required Setup\n1. Place the stack in `obc-poi-controller`'s `slot=\"stack\"`, or manage the\n stack's height and media geometry yourself.\n2. Give exactly one child `obc-poi-layer` the `is-selected` attribute — the\n stack projects selected targets' buttons into it and resets all\n selection state if no selected layer exists.\n3. Mark the background/default layer with\n `data-controller-layer=\"background\"` when the stack is used inside\n `obc-poi-controller`.\n4. Set `--obc-poi-layer-min-height` on layers that can start empty, so they\n do not collapse to 0px height.\n\n### DOM Ownership\nThe stack never moves, creates, or removes consumer-owned DOM. Selection is\nrendered by projecting the target's button into the selected layer via CSS\ncustom properties (`--obc-poi-button-projection-y` /\n`--obc-poi-target-projection-y`); the target element stays where the\nconsumer put it. Declarative renderers (React, Vue, Lit) can manage POI\nchildren as ordinary framework-owned elements.\n\n### Selection API\nSelection state is fully reachable without DOM inspection:\n- `selectedTargets` — the currently selected POI targets.\n- `selectTarget(target, {selectionId?})` — select programmatically;\n `selectionId` presets the stack-managed badge id.\n- `deselectTarget(target)` / `clearSelection()` — deselect one/all.\n- `selection-change` event — fired on every selection mutation\n (user click, programmatic call, or bootstrap seeding) with\n `{selected, added, removed}` in `detail`.\n\n### Slots\n- Default slot for `obc-poi-layer` elements that participate in the stack.\n\n### Example\n```html\n<obc-poi-layer-stack selection-mode=\"single\">\n <obc-poi-layer label=\"Radar\" .isSelected=${true}></obc-poi-layer>\n <obc-poi-layer label=\"AIS\"></obc-poi-layer>\n</obc-poi-layer-stack>\n```",
5390
5566
  "name": "ObcPoiLayerStack",
5391
5567
  "slots": [
5392
5568
  {
@@ -5449,7 +5625,14 @@
5449
5625
  "kind": "field",
5450
5626
  "name": "selectionMap",
5451
5627
  "privacy": "private",
5452
- "default": "new Map< Poi, { originLayer: ObcPoiLayer; previousAnimatePosition: boolean; keepInSelectedLayer: boolean; } >()"
5628
+ "default": "new Map<Poi, SelectionRecord>()"
5629
+ },
5630
+ {
5631
+ "kind": "field",
5632
+ "name": "displacedTargets",
5633
+ "privacy": "private",
5634
+ "default": "new Map<Poi, SelectionRecord>()",
5635
+ "description": "Deselected targets that live in one layer but render in another (targets\nauthored inside the selected layer whose logical origin is a different\nlayer). Their projections are refreshed on every placement pass so layer\nresizes do not leave stale pixel offsets."
5453
5636
  },
5454
5637
  {
5455
5638
  "kind": "field",
@@ -5490,6 +5673,112 @@
5490
5673
  }
5491
5674
  ]
5492
5675
  },
5676
+ {
5677
+ "kind": "field",
5678
+ "name": "selectedTargets",
5679
+ "type": {
5680
+ "text": "Poi[]"
5681
+ },
5682
+ "description": "Currently selected POI targets.",
5683
+ "readonly": true
5684
+ },
5685
+ {
5686
+ "kind": "method",
5687
+ "name": "selectTarget",
5688
+ "return": {
5689
+ "type": {
5690
+ "text": "boolean"
5691
+ }
5692
+ },
5693
+ "parameters": [
5694
+ {
5695
+ "name": "target",
5696
+ "type": {
5697
+ "text": "Poi"
5698
+ }
5699
+ },
5700
+ {
5701
+ "name": "options",
5702
+ "optional": true,
5703
+ "type": {
5704
+ "text": "{selectionId?: string}"
5705
+ }
5706
+ }
5707
+ ],
5708
+ "description": "Programmatically select a target, following the same flow as a user\nclick. `options.selectionId` presets the badge id shown in the\nstack-managed header; without it the id auto-increments. Returns\n`false` when selection is disabled, the target is mid-transition or\nalready selected, or no layer can host the selection."
5709
+ },
5710
+ {
5711
+ "kind": "method",
5712
+ "name": "deselectTarget",
5713
+ "return": {
5714
+ "type": {
5715
+ "text": "boolean"
5716
+ }
5717
+ },
5718
+ "parameters": [
5719
+ {
5720
+ "name": "target",
5721
+ "type": {
5722
+ "text": "Poi"
5723
+ }
5724
+ }
5725
+ ],
5726
+ "description": "Programmatically deselect a target. Returns `false` when it is not\nselected."
5727
+ },
5728
+ {
5729
+ "kind": "method",
5730
+ "name": "clearSelection",
5731
+ "return": {
5732
+ "type": {
5733
+ "text": "void"
5734
+ }
5735
+ },
5736
+ "description": "Deselect all targets."
5737
+ },
5738
+ {
5739
+ "kind": "method",
5740
+ "name": "performSelection",
5741
+ "privacy": "private",
5742
+ "return": {
5743
+ "type": {
5744
+ "text": "boolean"
5745
+ }
5746
+ },
5747
+ "parameters": [
5748
+ {
5749
+ "name": "target",
5750
+ "type": {
5751
+ "text": "Poi"
5752
+ }
5753
+ },
5754
+ {
5755
+ "name": "selectionId",
5756
+ "optional": true,
5757
+ "type": {
5758
+ "text": "string"
5759
+ }
5760
+ }
5761
+ ]
5762
+ },
5763
+ {
5764
+ "kind": "method",
5765
+ "name": "dispatchSelectionChange",
5766
+ "privacy": "private",
5767
+ "parameters": [
5768
+ {
5769
+ "name": "added",
5770
+ "type": {
5771
+ "text": "Poi | null"
5772
+ }
5773
+ },
5774
+ {
5775
+ "name": "removed",
5776
+ "type": {
5777
+ "text": "Poi | null"
5778
+ }
5779
+ }
5780
+ ]
5781
+ },
5493
5782
  {
5494
5783
  "kind": "method",
5495
5784
  "name": "getPoiTargetFromEvent",
@@ -5739,7 +6028,7 @@
5739
6028
  },
5740
6029
  {
5741
6030
  "kind": "method",
5742
- "name": "getTargetButtonProjectionOffset",
6031
+ "name": "getInlineVarPx",
5743
6032
  "privacy": "private",
5744
6033
  "return": {
5745
6034
  "type": {
@@ -5752,12 +6041,18 @@
5752
6041
  "type": {
5753
6042
  "text": "Poi"
5754
6043
  }
6044
+ },
6045
+ {
6046
+ "name": "name",
6047
+ "type": {
6048
+ "text": "string"
6049
+ }
5755
6050
  }
5756
6051
  ]
5757
6052
  },
5758
6053
  {
5759
6054
  "kind": "method",
5760
- "name": "getLayerProjectionOffset",
6055
+ "name": "layerBottomDelta",
5761
6056
  "privacy": "private",
5762
6057
  "return": {
5763
6058
  "type": {
@@ -5766,43 +6061,96 @@
5766
6061
  },
5767
6062
  "parameters": [
5768
6063
  {
5769
- "name": "originLayer",
6064
+ "name": "from",
5770
6065
  "type": {
5771
6066
  "text": "ObcPoiLayer"
5772
6067
  }
5773
6068
  },
5774
6069
  {
5775
- "name": "destinationLayer",
6070
+ "name": "to",
5776
6071
  "type": {
5777
- "text": "ObcPoiLayer | null"
6072
+ "text": "ObcPoiLayer"
5778
6073
  }
5779
6074
  }
5780
- ]
6075
+ ],
6076
+ "description": "Pixel delta between two layers' bottom edges (`to.bottom - from.bottom`)."
5781
6077
  },
5782
6078
  {
5783
6079
  "kind": "method",
5784
- "name": "getTargetProjectionOffset",
6080
+ "name": "setProjectionVar",
5785
6081
  "privacy": "private",
5786
- "return": {
5787
- "type": {
5788
- "text": "number"
5789
- }
5790
- },
5791
6082
  "parameters": [
5792
6083
  {
5793
- "name": "originLayer",
6084
+ "name": "target",
5794
6085
  "type": {
5795
- "text": "ObcPoiLayer"
6086
+ "text": "Poi"
5796
6087
  }
5797
6088
  },
5798
6089
  {
5799
- "name": "selectedLayer",
6090
+ "name": "name",
5800
6091
  "type": {
5801
- "text": "ObcPoiLayer | null"
6092
+ "text": "string"
6093
+ }
6094
+ },
6095
+ {
6096
+ "name": "valuePx",
6097
+ "type": {
6098
+ "text": "number"
5802
6099
  }
5803
6100
  }
5804
6101
  ]
5805
6102
  },
6103
+ {
6104
+ "kind": "method",
6105
+ "name": "applyTargetProjection",
6106
+ "privacy": "private",
6107
+ "parameters": [
6108
+ {
6109
+ "name": "target",
6110
+ "type": {
6111
+ "text": "Poi"
6112
+ }
6113
+ },
6114
+ {
6115
+ "name": "buttonOffsetPx",
6116
+ "type": {
6117
+ "text": "number"
6118
+ }
6119
+ },
6120
+ {
6121
+ "name": "targetOffsetPx",
6122
+ "type": {
6123
+ "text": "number"
6124
+ }
6125
+ },
6126
+ {
6127
+ "name": "animate",
6128
+ "type": {
6129
+ "text": "boolean"
6130
+ }
6131
+ }
6132
+ ],
6133
+ "description": "Render the target at the given projection offsets without touching its\nDOM position. When `animate` is set and an offset actually changes, the\njump is FLIP-animated via the Web Animations API."
6134
+ },
6135
+ {
6136
+ "kind": "method",
6137
+ "name": "getContainingGroup",
6138
+ "privacy": "private",
6139
+ "return": {
6140
+ "type": {
6141
+ "text": "ObcPoiGroup | null"
6142
+ }
6143
+ },
6144
+ "parameters": [
6145
+ {
6146
+ "name": "target",
6147
+ "type": {
6148
+ "text": "Poi"
6149
+ }
6150
+ }
6151
+ ],
6152
+ "description": "The group a target currently belongs to — a light-DOM parent for\nconsumer-managed groups, or the shadow group whose member slot the\ntarget is assigned to for layer-created auto groups."
6153
+ },
5806
6154
  {
5807
6155
  "kind": "method",
5808
6156
  "name": "detachTargetFromCurrentGroup",
@@ -5897,95 +6245,6 @@
5897
6245
  ],
5898
6246
  "description": "Animate a layer jump using Web Animations API.\nfill:'forwards' overrides ALL CSS/Lit styles during animation.\nAfter cancel(), Lit's final-state styles take over."
5899
6247
  },
5900
- {
5901
- "kind": "method",
5902
- "name": "moveTargetIntoSelectedLayer",
5903
- "privacy": "private",
5904
- "parameters": [
5905
- {
5906
- "name": "target",
5907
- "type": {
5908
- "text": "Poi"
5909
- }
5910
- },
5911
- {
5912
- "name": "_originLayer",
5913
- "type": {
5914
- "text": "ObcPoiLayer"
5915
- }
5916
- },
5917
- {
5918
- "name": "selectedLayer",
5919
- "type": {
5920
- "text": "ObcPoiLayer"
5921
- }
5922
- },
5923
- {
5924
- "name": "animate",
5925
- "default": "true"
5926
- }
5927
- ]
5928
- },
5929
- {
5930
- "kind": "method",
5931
- "name": "moveTrackedTargetToSelectedLayer",
5932
- "privacy": "private",
5933
- "parameters": [
5934
- {
5935
- "name": "target",
5936
- "type": {
5937
- "text": "Poi"
5938
- }
5939
- },
5940
- {
5941
- "name": "record",
5942
- "type": {
5943
- "text": "{\n originLayer: ObcPoiLayer;\n previousAnimatePosition: boolean;\n keepInSelectedLayer: boolean;\n }"
5944
- }
5945
- },
5946
- {
5947
- "name": "selectedLayer",
5948
- "type": {
5949
- "text": "ObcPoiLayer"
5950
- }
5951
- },
5952
- {
5953
- "name": "animateProjection",
5954
- "type": {
5955
- "text": "boolean"
5956
- }
5957
- }
5958
- ]
5959
- },
5960
- {
5961
- "kind": "method",
5962
- "name": "syncTargetProjection",
5963
- "privacy": "private",
5964
- "parameters": [
5965
- {
5966
- "name": "target",
5967
- "type": {
5968
- "text": "Poi"
5969
- }
5970
- },
5971
- {
5972
- "name": "originLayer",
5973
- "type": {
5974
- "text": "ObcPoiLayer"
5975
- }
5976
- },
5977
- {
5978
- "name": "selectedLayer",
5979
- "type": {
5980
- "text": "ObcPoiLayer | null"
5981
- }
5982
- },
5983
- {
5984
- "name": "animate",
5985
- "default": "true"
5986
- }
5987
- ]
5988
- },
5989
6248
  {
5990
6249
  "kind": "method",
5991
6250
  "name": "animateTargetReturnToOrigin",
@@ -6000,7 +6259,7 @@
6000
6259
  {
6001
6260
  "name": "record",
6002
6261
  "type": {
6003
- "text": "{\n originLayer: ObcPoiLayer;\n previousAnimatePosition: boolean;\n keepInSelectedLayer: boolean;\n }"
6262
+ "text": "SelectionRecord"
6004
6263
  }
6005
6264
  }
6006
6265
  ]
@@ -6024,29 +6283,6 @@
6024
6283
  }
6025
6284
  ]
6026
6285
  },
6027
- {
6028
- "kind": "method",
6029
- "name": "trackSelectionTarget",
6030
- "privacy": "private",
6031
- "parameters": [
6032
- {
6033
- "name": "target",
6034
- "type": {
6035
- "text": "Poi"
6036
- }
6037
- },
6038
- {
6039
- "name": "originLayer",
6040
- "type": {
6041
- "text": "ObcPoiLayer"
6042
- }
6043
- },
6044
- {
6045
- "name": "keepInSelectedLayer",
6046
- "default": "true"
6047
- }
6048
- ]
6049
- },
6050
6286
  {
6051
6287
  "kind": "method",
6052
6288
  "name": "activateTrackedTarget",
@@ -6061,7 +6297,7 @@
6061
6297
  {
6062
6298
  "name": "record",
6063
6299
  "type": {
6064
- "text": "{\n originLayer: ObcPoiLayer;\n previousAnimatePosition: boolean;\n keepInSelectedLayer: boolean;\n }"
6300
+ "text": "SelectionRecord"
6065
6301
  }
6066
6302
  },
6067
6303
  {
@@ -6109,7 +6345,7 @@
6109
6345
  "name": "record",
6110
6346
  "optional": true,
6111
6347
  "type": {
6112
- "text": "{\n originLayer: ObcPoiLayer;\n previousAnimatePosition: boolean;\n keepInSelectedLayer: boolean;\n }"
6348
+ "text": "SelectionRecord"
6113
6349
  }
6114
6350
  }
6115
6351
  ]
@@ -6159,6 +6395,21 @@
6159
6395
  "kind": "method",
6160
6396
  "name": "syncSelectedLayerTargets",
6161
6397
  "privacy": "private"
6398
+ },
6399
+ {
6400
+ "kind": "method",
6401
+ "name": "refreshDisplacedTargets",
6402
+ "privacy": "private",
6403
+ "description": "Keep deselected targets that render outside their DOM layer (targets\nauthored in the selected layer whose logical origin is another layer)\nprojected at up-to-date offsets across layer resizes."
6404
+ }
6405
+ ],
6406
+ "events": [
6407
+ {
6408
+ "name": "selection-change",
6409
+ "type": {
6410
+ "text": "CustomEvent<{selected: Poi[]; added: Poi | null; removed: Poi | null}>"
6411
+ },
6412
+ "description": "Fired whenever the selection set changes (user click, programmatic call, or bootstrap seeding). Bubbles and is composed."
6162
6413
  }
6163
6414
  ],
6164
6415
  "attributes": [
@@ -6203,7 +6454,7 @@
6203
6454
  "declarations": [
6204
6455
  {
6205
6456
  "kind": "class",
6206
- "description": "`<obc-poi-layer>` - A POI layout container that resolves overlapping targets by grouping or crossing strategies.\n\nThis component watches slotted POI targets, applies overlap state/visual rules, and coordinates automatic `obc-poi-group` creation when needed.\nUse it as the main layer container when you want centralized overlap behavior plus layer height updates for parent layout systems.\n\n### Features\n- Overlap strategies: `overlapMode=\"grouping\"` builds overlap clusters; `overlapMode=\"crossing\"` continuously adjusts horizontal offsets to reduce crossings.\n- Auto-group lifecycle: Creates/removes auto groups and preserves front/behind/pre-group states during transitions.\n- Manual group support: Respects existing `obc-poi-group` elements and can optionally join nearby targets while a group is expanded (`joinWhileExpanded`).\n- Dynamic observation: Reacts to slot changes, target style/position mutations, and target size changes to recompute grouping and layer height.\n- Layer diagnostics: `debug` shows a label overlay using `label`.\n- Selection flag: `isSelected` reflects to attribute but has no direct runtime layout logic in this class.\n- Group ordering option: `internalSwapping` is forwarded to groups to allow expanded ordering updates based on movement.\n\n### Usage Guidelines\n- Place `obc-poi-data` targets (and optional `obc-poi-group`) in the default slot.\n- Choose `overlapMode` based on behavior:\n - `grouping`: best when overlaps should collapse into expandable clusters.\n - `crossing`: best when targets stay independent but should separate horizontally.\n- Listen for `layer-resize` to keep parent containers in sync with computed layer height.\n- Enable `joinWhileExpanded` only when targets should be able to join an already expanded auto-group.\n- **TODO(designer):** Confirm intended user-visible behavior for `isSelected`, since it currently reflects an attribute but is not consumed by the layer logic here.\n\n### Slots\n| Slot | Renders When... | Purpose |\n| --- | --- | --- |\n| default | Always | Hosts POI targets (`obc-poi-data*`) and optional manual `obc-poi-group` elements. |\n\n### Events\n- `layer-resize` - Fired when computed layer height changes. Detail: `{ height: number, label: string }`.\n\n### Best Practices\n- Keep POI targets as direct descendants when possible to reduce grouping ambiguity.\n- Use stable `x`/`y` updates for animated scenarios so grouping and crossing calculations remain predictable.\n- Avoid adding non-POI interactive wrappers inside the layer unless needed, as layer observers track POI-related descendants.\n\n### Example\n```html\n<obc-poi-layer label=\"Targets\" overlapMode=\"grouping\" debug>\n <obc-poi-data x=\"180\" y=\"110\"></obc-poi-data>\n <obc-poi-data x=\"205\" y=\"90\"></obc-poi-data>\n <obc-poi-data x=\"230\" y=\"100\"></obc-poi-data>\n</obc-poi-layer>\n```",
6457
+ "description": "`<obc-poi-layer>` - A POI layout container that resolves overlapping targets by grouping or crossing strategies.\n\nThis component watches slotted POI targets, applies overlap state/visual rules, and coordinates automatic `obc-poi-group` creation when needed.\nUse it as the main layer container when you want centralized overlap behavior plus layer height updates for parent layout systems.\n\n### Features\n- Overlap strategies: `overlapMode=\"grouping\"` builds overlap clusters; `overlapMode=\"crossing\"` continuously adjusts horizontal offsets to reduce crossings.\n- Auto-group lifecycle: Creates/removes auto groups as shadow-internal chrome — the consumer's light DOM is never modified; members are placed via manual slot assignment. Reach the group elements through the `autoGroups` accessor.\n- Manual group support: Respects existing `obc-poi-group` elements and can optionally join nearby targets while a group is expanded (`joinWhileExpanded`).\n- Dynamic observation: Reacts to slot changes, target style/position mutations, and target size changes to recompute grouping and layer height.\n- Layer diagnostics: `debug` shows a label overlay using `label`.\n- Selection flag: `isSelected` reflects to attribute but has no direct runtime layout logic in this class.\n- Group ordering option: `internalSwapping` is forwarded to groups to allow expanded ordering updates based on movement.\n\n### Usage Guidelines\n- Place `obc-poi-data` targets (and optional `obc-poi-group`) in the default slot.\n- Choose `overlapMode` based on behavior:\n - `grouping`: best when overlaps should collapse into expandable clusters.\n - `crossing`: best when targets stay independent but should separate horizontally.\n- Handle `layer-resize` only when using the layer standalone; inside `obc-poi-layer-stack` / `obc-poi-controller` the container handles height syncing. Example: `layer.addEventListener('layer-resize', (e) => { host.style.height = e.detail.height + 'px'; })`.\n- After imperatively adding, removing, or moving POI children outside the layer's own observers, call the public `requestGroupingUpdate()` method to force a recompute; it is the supported hook for imperative DOM mutations.\n- Set `--obc-poi-layer-min-height` when the layer starts empty, otherwise the layer collapses to 0px height until targets exist.\n- Enable `joinWhileExpanded` only when targets should be able to join an already expanded auto-group.\n- **TODO(designer):** Confirm intended user-visible behavior for `isSelected`, since it has no runtime layout logic in this class — it only reflects the attribute and notifies containers via `layer-selection-changed` (consumed by `obc-poi-layer-stack` to pick the selected layer).\n\n### Slots\n| Slot | Renders When... | Purpose |\n| --- | --- | --- |\n| default | Always | Hosts POI targets (`obc-poi-data*`) and optional manual `obc-poi-group` elements. |\n\n### Events\n- `layer-resize` - Fired when computed layer height changes. Detail: `{ height: number, label: string }`.\n- `grouping-change` - Fired when grouping membership or front/behind/pre-group state changes. Detail: `{ clusters: Poi[][], front: Poi[], behind: Poi[], pregrouped: Poi[] }`. Subscribe to this instead of observing the layer's internal `data-*` attributes.\n\n### CSS Custom Properties\n| Property | Default | Purpose |\n| --- | --- | --- |\n| `--obc-poi-layer-overlap-enter` | `10px` | Max horizontal gap at which ungrouped targets start grouping. |\n| `--obc-poi-layer-overlap-exit` | `18px` | Gap at which grouped targets leave their group. Clamped to at least the enter threshold; keep it larger than enter so jittery positions do not oscillate in and out of groups. |\n| `--obc-poi-layer-overlap-pre` | `16px` | Gap at which targets get the pre-grouped visual state. |\n| `--obc-poi-layer-overlap-behind` | `10px` | Gap at which the shortest target gets the behind visual state. |\n| `--obc-poi-layer-exit-delay-ms` | `140` | Delay before exiting targets lose their exit visual state. |\n| `--obc-poi-layer-group-removal-delay-ms` | `250` | Delay before a dissolved auto-group element is removed. |\n| `--obc-poi-layer-exit-lock-duration-ms` | `500` | Duration a target is locked out of pre-group/behind states after leaving a group. |\n\n### Best Practices\n- Keep POI targets as direct descendants when possible to reduce grouping ambiguity.\n- Targets may update `x`/`y` every animation frame; grouping stays stable as long as the horizontal gap between targets does not oscillate across the enter/exit band faster than the group lifecycle delays (~0.5s). Smooth noisy input coordinates or widen the enter/exit band to compensate.\n- Avoid adding non-POI interactive wrappers inside the layer unless needed, as layer observers track POI-related descendants.\n\n### Example\n```html\n<obc-poi-layer label=\"Targets\" overlapMode=\"grouping\" debug>\n <obc-poi-data x=\"180\" y=\"110\"></obc-poi-data>\n <obc-poi-data x=\"205\" y=\"90\"></obc-poi-data>\n <obc-poi-data x=\"230\" y=\"100\"></obc-poi-data>\n</obc-poi-layer>\n```",
6207
6458
  "name": "ObcPoiLayer",
6208
6459
  "slots": [
6209
6460
  {
@@ -6212,6 +6463,16 @@
6212
6463
  }
6213
6464
  ],
6214
6465
  "members": [
6466
+ {
6467
+ "kind": "field",
6468
+ "name": "shadowRootOptions",
6469
+ "type": {
6470
+ "text": "ShadowRootInit"
6471
+ },
6472
+ "static": true,
6473
+ "default": "{ ...LitElement.shadowRootOptions, slotAssignment: 'manual', }",
6474
+ "description": "Manual slot assignment lets the layer place consumer-owned targets into\nshadow-internal auto-group chrome (and back) without ever re-parenting\nthem: grouping only changes which internal slot a target is assigned to."
6475
+ },
6215
6476
  {
6216
6477
  "kind": "field",
6217
6478
  "name": "label",
@@ -6307,6 +6568,30 @@
6307
6568
  "privacy": "private",
6308
6569
  "default": "false"
6309
6570
  },
6571
+ {
6572
+ "kind": "field",
6573
+ "name": "lastGroupingSignature",
6574
+ "type": {
6575
+ "text": "string"
6576
+ },
6577
+ "privacy": "private",
6578
+ "default": "''"
6579
+ },
6580
+ {
6581
+ "kind": "field",
6582
+ "name": "groupingIds",
6583
+ "privacy": "private",
6584
+ "default": "new WeakMap<Poi, number>()"
6585
+ },
6586
+ {
6587
+ "kind": "field",
6588
+ "name": "nextGroupingId",
6589
+ "type": {
6590
+ "text": "number"
6591
+ },
6592
+ "privacy": "private",
6593
+ "default": "1"
6594
+ },
6310
6595
  {
6311
6596
  "kind": "field",
6312
6597
  "name": "targetObservers",
@@ -6592,6 +6877,98 @@
6592
6877
  "name": "requestGroupingUpdate",
6593
6878
  "privacy": "public"
6594
6879
  },
6880
+ {
6881
+ "kind": "method",
6882
+ "name": "getMainSlot",
6883
+ "privacy": "private",
6884
+ "return": {
6885
+ "type": {
6886
+ "text": "HTMLSlotElement | null"
6887
+ }
6888
+ }
6889
+ },
6890
+ {
6891
+ "kind": "method",
6892
+ "name": "syncSlotAssignments",
6893
+ "privacy": "private",
6894
+ "description": "Assign every light-DOM child that is not currently placed in an\nauto-group member slot to the main slot. With `slotAssignment: 'manual'`\nnothing renders unless explicitly assigned, so this runs after render,\non child-list mutations, and after every grouping change."
6895
+ },
6896
+ {
6897
+ "kind": "field",
6898
+ "name": "autoGroups",
6899
+ "type": {
6900
+ "text": "HTMLElement[]"
6901
+ },
6902
+ "privacy": "public",
6903
+ "description": "The auto-created `obc-poi-group` elements currently managed by this\nlayer. Auto groups are shadow-internal chrome (they never appear in the\nconsumer's light DOM); use this accessor — typically after a\n`grouping-change` event — to reach them, e.g. to expand a group\nprogrammatically.",
6904
+ "readonly": true
6905
+ },
6906
+ {
6907
+ "kind": "method",
6908
+ "name": "getAutoGroups",
6909
+ "privacy": "private",
6910
+ "return": {
6911
+ "type": {
6912
+ "text": "PoiButtonGroupElement[]"
6913
+ }
6914
+ }
6915
+ },
6916
+ {
6917
+ "kind": "method",
6918
+ "name": "getAutoGroupMemberSlot",
6919
+ "privacy": "private",
6920
+ "return": {
6921
+ "type": {
6922
+ "text": "HTMLSlotElement | null"
6923
+ }
6924
+ },
6925
+ "parameters": [
6926
+ {
6927
+ "name": "group",
6928
+ "type": {
6929
+ "text": "HTMLElement"
6930
+ }
6931
+ }
6932
+ ]
6933
+ },
6934
+ {
6935
+ "kind": "method",
6936
+ "name": "getAutoGroupOf",
6937
+ "privacy": "private",
6938
+ "return": {
6939
+ "type": {
6940
+ "text": "HTMLElement | null"
6941
+ }
6942
+ },
6943
+ "parameters": [
6944
+ {
6945
+ "name": "target",
6946
+ "type": {
6947
+ "text": "Poi"
6948
+ }
6949
+ }
6950
+ ],
6951
+ "description": "The auto group a target is currently assigned into, if any."
6952
+ },
6953
+ {
6954
+ "kind": "method",
6955
+ "name": "getGroupMembers",
6956
+ "privacy": "private",
6957
+ "return": {
6958
+ "type": {
6959
+ "text": "Poi[]"
6960
+ }
6961
+ },
6962
+ "parameters": [
6963
+ {
6964
+ "name": "group",
6965
+ "type": {
6966
+ "text": "ParentNode"
6967
+ }
6968
+ }
6969
+ ],
6970
+ "description": "Members of a group in either mode: slot-assigned (shadow auto groups) or\nlight-DOM children (consumer-managed manual groups)."
6971
+ },
6595
6972
  {
6596
6973
  "kind": "method",
6597
6974
  "name": "scheduleGrouping",
@@ -6612,6 +6989,55 @@
6612
6989
  }
6613
6990
  }
6614
6991
  },
6992
+ {
6993
+ "kind": "method",
6994
+ "name": "getGroupingId",
6995
+ "privacy": "private",
6996
+ "return": {
6997
+ "type": {
6998
+ "text": "number"
6999
+ }
7000
+ },
7001
+ "parameters": [
7002
+ {
7003
+ "name": "target",
7004
+ "type": {
7005
+ "text": "Poi"
7006
+ }
7007
+ }
7008
+ ]
7009
+ },
7010
+ {
7011
+ "kind": "method",
7012
+ "name": "notifyGroupingChange",
7013
+ "privacy": "private",
7014
+ "parameters": [
7015
+ {
7016
+ "name": "clusters",
7017
+ "type": {
7018
+ "text": "Poi[][]"
7019
+ }
7020
+ },
7021
+ {
7022
+ "name": "frontTargets",
7023
+ "type": {
7024
+ "text": "Set<Poi>"
7025
+ }
7026
+ },
7027
+ {
7028
+ "name": "behindTargets",
7029
+ "type": {
7030
+ "text": "Set<Poi>"
7031
+ }
7032
+ },
7033
+ {
7034
+ "name": "preGrouped",
7035
+ "type": {
7036
+ "text": "Set<Poi>"
7037
+ }
7038
+ }
7039
+ ]
7040
+ },
6615
7041
  {
6616
7042
  "kind": "method",
6617
7043
  "name": "toggleGroupLayerHook",
@@ -6640,6 +7066,11 @@
6640
7066
  "kind": "method",
6641
7067
  "name": "tryJoinExpandedGroup",
6642
7068
  "privacy": "private",
7069
+ "return": {
7070
+ "type": {
7071
+ "text": "Poi | null"
7072
+ }
7073
+ },
6643
7074
  "parameters": [
6644
7075
  {
6645
7076
  "name": "group",
@@ -6978,6 +7409,13 @@
6978
7409
  },
6979
7410
  "description": "Fired when the layer height changes."
6980
7411
  },
7412
+ {
7413
+ "name": "grouping-change",
7414
+ "type": {
7415
+ "text": "CustomEvent<{clusters:Poi[][],front:Poi[],behind:Poi[],pregrouped:Poi[]}>"
7416
+ },
7417
+ "description": "Fired when grouping membership or overlap state changes. Bubbles and is composed."
7418
+ },
6981
7419
  {
6982
7420
  "name": "layer-selection-changed",
6983
7421
  "type": {
@@ -7831,13 +8269,163 @@
7831
8269
  }
7832
8270
  ]
7833
8271
  },
8272
+ {
8273
+ "kind": "javascript-module",
8274
+ "path": "src/ar/poi-projection/poi-projection.ts",
8275
+ "declarations": [
8276
+ {
8277
+ "kind": "function",
8278
+ "name": "computeMediaProjection",
8279
+ "return": {
8280
+ "type": {
8281
+ "text": "MediaProjection | null"
8282
+ }
8283
+ },
8284
+ "parameters": [
8285
+ {
8286
+ "name": "input",
8287
+ "type": {
8288
+ "text": "MediaProjectionInput"
8289
+ }
8290
+ }
8291
+ ],
8292
+ "description": "Compute the projection for the given dimensions, or `null` when any\ndimension is non-finite or zero (media not measured yet)."
8293
+ },
8294
+ {
8295
+ "kind": "function",
8296
+ "name": "projectPoint",
8297
+ "return": {
8298
+ "type": {
8299
+ "text": "{x: number; y: number}"
8300
+ }
8301
+ },
8302
+ "parameters": [
8303
+ {
8304
+ "name": "projection",
8305
+ "type": {
8306
+ "text": "MediaProjection"
8307
+ }
8308
+ },
8309
+ {
8310
+ "name": "x",
8311
+ "type": {
8312
+ "text": "number"
8313
+ }
8314
+ },
8315
+ {
8316
+ "name": "y",
8317
+ "type": {
8318
+ "text": "number"
8319
+ }
8320
+ }
8321
+ ],
8322
+ "description": "Project a point from media pixel space into rendered space."
8323
+ },
8324
+ {
8325
+ "kind": "function",
8326
+ "name": "projectPointToLayer",
8327
+ "return": {
8328
+ "type": {
8329
+ "text": "{x: number; y: number}"
8330
+ }
8331
+ },
8332
+ "parameters": [
8333
+ {
8334
+ "name": "projection",
8335
+ "type": {
8336
+ "text": "MediaProjection"
8337
+ }
8338
+ },
8339
+ {
8340
+ "name": "x",
8341
+ "type": {
8342
+ "text": "number"
8343
+ }
8344
+ },
8345
+ {
8346
+ "name": "y",
8347
+ "type": {
8348
+ "text": "number"
8349
+ }
8350
+ },
8351
+ {
8352
+ "name": "layerBottom",
8353
+ "type": {
8354
+ "text": "number"
8355
+ }
8356
+ }
8357
+ ],
8358
+ "description": "Project a media-space anchor point into `obc-poi-data` layer\ncoordinates.\n\n`layerBottom` is the POI layer's bottom edge measured in the same\nrendered coordinate space as the projection container (e.g.\n`layerRect.bottom - containerRect.top`). The returned `y` is the\nconnector line length extending downward from the layer to the\ntarget point, clamped to `0` (matches how `obc-poi-controller`\npositions its detection targets)."
8359
+ },
8360
+ {
8361
+ "kind": "function",
8362
+ "name": "projectBoxSize",
8363
+ "return": {
8364
+ "type": {
8365
+ "text": "number | null"
8366
+ }
8367
+ },
8368
+ "parameters": [
8369
+ {
8370
+ "name": "projection",
8371
+ "type": {
8372
+ "text": "MediaProjection"
8373
+ }
8374
+ },
8375
+ {
8376
+ "name": "size",
8377
+ "type": {
8378
+ "text": "number | null | undefined"
8379
+ }
8380
+ }
8381
+ ],
8382
+ "description": "Scale a media-space box dimension into rendered px, or `null`."
8383
+ }
8384
+ ],
8385
+ "exports": [
8386
+ {
8387
+ "kind": "js",
8388
+ "name": "computeMediaProjection",
8389
+ "declaration": {
8390
+ "name": "computeMediaProjection",
8391
+ "module": "src/ar/poi-projection/poi-projection.ts"
8392
+ }
8393
+ },
8394
+ {
8395
+ "kind": "js",
8396
+ "name": "projectPoint",
8397
+ "declaration": {
8398
+ "name": "projectPoint",
8399
+ "module": "src/ar/poi-projection/poi-projection.ts"
8400
+ }
8401
+ },
8402
+ {
8403
+ "kind": "js",
8404
+ "name": "projectPointToLayer",
8405
+ "declaration": {
8406
+ "name": "projectPointToLayer",
8407
+ "module": "src/ar/poi-projection/poi-projection.ts"
8408
+ }
8409
+ },
8410
+ {
8411
+ "kind": "js",
8412
+ "name": "projectBoxSize",
8413
+ "declaration": {
8414
+ "name": "projectBoxSize",
8415
+ "module": "src/ar/poi-projection/poi-projection.ts"
8416
+ }
8417
+ }
8418
+ ],
8419
+ "summary": "POI Projection",
8420
+ "description": "Media-projection helpers for POI overlays.\n\nMaps points from media pixel space (video/image natural resolution) to\nrendered screen space, accounting for `cover`/`contain` letterboxing.\nThis is the same math `obc-poi-controller` applies to its\ndetections-driven targets, exported as pure functions so applications\nthat manage their own POI elements can project coordinates without\nre-implementing the transform.\n\n### Usage Guidelines\n- Build a {@link MediaProjection} once per resize/metadata change via\n {@link computeMediaProjection}; reuse it for every point in a frame.\n- `renderWidth`/`renderHeight` come from the media element's\n `getBoundingClientRect()`; `mediaWidth`/`mediaHeight` from\n `videoWidth`/`videoHeight` (video) or `naturalWidth`/`naturalHeight`\n (image).\n- {@link projectPointToLayer} additionally converts a projected\n point into `obc-poi-data` layer coordinates (`x` center px,\n `y` line length from the layer's bottom anchor), given the layer's\n bottom offset inside the projection container.\n\n### Fit modes\n- `cover`: media fills the container; overflow is cropped.\n- `contain`: media letterboxes inside the container.\n\nThe Storybook demo draws the rendered container (outer box), the scaled\nmedia content region (shaded), and a marker at the projected point."
8421
+ },
7834
8422
  {
7835
8423
  "kind": "javascript-module",
7836
8424
  "path": "src/ar/poi/poi-aton.ts",
7837
8425
  "declarations": [
7838
8426
  {
7839
8427
  "kind": "class",
7840
- "description": "`<obc-poi-aton>` - AtoN marker variant with layout positioning and layer integration.\n\nExtends `PoiBase` to provide the \"aton\" variant of the POI system.\nRenders `<obc-poi>` with a slotted `<obc-poi-button-aton>`.",
8428
+ "description": "`<obc-poi-aton>` - AtoN marker variant with layout positioning and layer integration.\n\nExtends `PoiBase` to provide the \"aton\" variant of the POI system.\nRenders `<obc-poi>` with a slotted `<obc-poi-button-aton>`.\nSee the \"Coordinate Model\" section in `PoiBase` (poi-base.ts) for how `x`, `y`, and `buttonY` position the marker.",
7841
8429
  "name": "ObcPoiAton",
7842
8430
  "slots": [
7843
8431
  {
@@ -8129,10 +8717,7 @@
8129
8717
  {
8130
8718
  "kind": "field",
8131
8719
  "name": "y",
8132
- "type": {
8133
- "text": "number"
8134
- },
8135
- "default": "192",
8720
+ "default": "DEFAULT_LINE_LENGTH_PX",
8136
8721
  "attribute": "y",
8137
8722
  "inheritedFrom": {
8138
8723
  "name": "PoiBase",
@@ -8152,6 +8737,34 @@
8152
8737
  "module": "src/ar/poi/poi-base.ts"
8153
8738
  }
8154
8739
  },
8740
+ {
8741
+ "kind": "field",
8742
+ "name": "xFilterCutoffHz",
8743
+ "default": "16",
8744
+ "description": "Cutoff frequency (Hz) of the built-in low-pass filter applied to `x`. Lower values smooth noisy input more aggressively; `0` or a negative value disables filtering so `x` is applied directly.",
8745
+ "attribute": "x-filter-cutoff-hz",
8746
+ "type": {
8747
+ "text": "number"
8748
+ },
8749
+ "inheritedFrom": {
8750
+ "name": "PoiBase",
8751
+ "module": "src/ar/poi/poi-base.ts"
8752
+ }
8753
+ },
8754
+ {
8755
+ "kind": "field",
8756
+ "name": "yFilterCutoffHz",
8757
+ "default": "16",
8758
+ "description": "Cutoff frequency (Hz) of the built-in low-pass filter applied to `y`. Lower values smooth noisy input more aggressively; `0` or a negative value disables filtering so `y` is applied directly.",
8759
+ "attribute": "y-filter-cutoff-hz",
8760
+ "type": {
8761
+ "text": "number"
8762
+ },
8763
+ "inheritedFrom": {
8764
+ "name": "PoiBase",
8765
+ "module": "src/ar/poi/poi-base.ts"
8766
+ }
8767
+ },
8155
8768
  {
8156
8769
  "kind": "field",
8157
8770
  "name": "fixedTarget",
@@ -8319,6 +8932,97 @@
8319
8932
  "module": "src/ar/poi/poi-base.ts"
8320
8933
  }
8321
8934
  },
8935
+ {
8936
+ "kind": "field",
8937
+ "name": "resolvedXFilterCutoffHz",
8938
+ "type": {
8939
+ "text": "number"
8940
+ },
8941
+ "privacy": "private",
8942
+ "readonly": true,
8943
+ "inheritedFrom": {
8944
+ "name": "PoiBase",
8945
+ "module": "src/ar/poi/poi-base.ts"
8946
+ }
8947
+ },
8948
+ {
8949
+ "kind": "field",
8950
+ "name": "filteredY",
8951
+ "type": {
8952
+ "text": "number"
8953
+ },
8954
+ "privacy": "private",
8955
+ "default": "0",
8956
+ "inheritedFrom": {
8957
+ "name": "PoiBase",
8958
+ "module": "src/ar/poi/poi-base.ts"
8959
+ }
8960
+ },
8961
+ {
8962
+ "kind": "field",
8963
+ "name": "yFilterTarget",
8964
+ "type": {
8965
+ "text": "number"
8966
+ },
8967
+ "privacy": "private",
8968
+ "default": "0",
8969
+ "inheritedFrom": {
8970
+ "name": "PoiBase",
8971
+ "module": "src/ar/poi/poi-base.ts"
8972
+ }
8973
+ },
8974
+ {
8975
+ "kind": "field",
8976
+ "name": "yFilterInitialized",
8977
+ "type": {
8978
+ "text": "boolean"
8979
+ },
8980
+ "privacy": "private",
8981
+ "default": "false",
8982
+ "inheritedFrom": {
8983
+ "name": "PoiBase",
8984
+ "module": "src/ar/poi/poi-base.ts"
8985
+ }
8986
+ },
8987
+ {
8988
+ "kind": "field",
8989
+ "name": "lastYFilterTimestampMs",
8990
+ "type": {
8991
+ "text": "number"
8992
+ },
8993
+ "privacy": "private",
8994
+ "default": "0",
8995
+ "inheritedFrom": {
8996
+ "name": "PoiBase",
8997
+ "module": "src/ar/poi/poi-base.ts"
8998
+ }
8999
+ },
9000
+ {
9001
+ "kind": "field",
9002
+ "name": "yFilterRaf",
9003
+ "type": {
9004
+ "text": "number"
9005
+ },
9006
+ "privacy": "private",
9007
+ "default": "0",
9008
+ "inheritedFrom": {
9009
+ "name": "PoiBase",
9010
+ "module": "src/ar/poi/poi-base.ts"
9011
+ }
9012
+ },
9013
+ {
9014
+ "kind": "field",
9015
+ "name": "resolvedYFilterCutoffHz",
9016
+ "type": {
9017
+ "text": "number"
9018
+ },
9019
+ "privacy": "private",
9020
+ "readonly": true,
9021
+ "inheritedFrom": {
9022
+ "name": "PoiBase",
9023
+ "module": "src/ar/poi/poi-base.ts"
9024
+ }
9025
+ },
8322
9026
  {
8323
9027
  "kind": "method",
8324
9028
  "name": "dispatchLayoutChange",
@@ -8354,6 +9058,41 @@
8354
9058
  "module": "src/ar/poi/poi-base.ts"
8355
9059
  }
8356
9060
  },
9061
+ {
9062
+ "kind": "field",
9063
+ "name": "stepYFilter",
9064
+ "privacy": "private",
9065
+ "inheritedFrom": {
9066
+ "name": "PoiBase",
9067
+ "module": "src/ar/poi/poi-base.ts"
9068
+ }
9069
+ },
9070
+ {
9071
+ "kind": "method",
9072
+ "name": "applyFilteredY",
9073
+ "privacy": "private",
9074
+ "inheritedFrom": {
9075
+ "name": "PoiBase",
9076
+ "module": "src/ar/poi/poi-base.ts"
9077
+ }
9078
+ },
9079
+ {
9080
+ "kind": "method",
9081
+ "name": "syncYFilterTarget",
9082
+ "privacy": "private",
9083
+ "parameters": [
9084
+ {
9085
+ "name": "nextY",
9086
+ "type": {
9087
+ "text": "number"
9088
+ }
9089
+ }
9090
+ ],
9091
+ "inheritedFrom": {
9092
+ "name": "PoiBase",
9093
+ "module": "src/ar/poi/poi-base.ts"
9094
+ }
9095
+ },
8357
9096
  {
8358
9097
  "kind": "method",
8359
9098
  "name": "markXMoving",
@@ -8565,7 +9304,7 @@
8565
9304
  "text": "number"
8566
9305
  },
8567
9306
  "privacy": "protected",
8568
- "description": "Public `y` normalized as the target Y input.",
9307
+ "description": "Public `y` normalized as the target Y input, after the y filter.",
8569
9308
  "readonly": true,
8570
9309
  "inheritedFrom": {
8571
9310
  "name": "PoiBase",
@@ -8600,49 +9339,11 @@
8600
9339
  "module": "src/ar/poi/poi-base.ts"
8601
9340
  }
8602
9341
  },
8603
- {
8604
- "kind": "field",
8605
- "name": "resolvedHeaderState",
8606
- "type": {
8607
- "text": "ObcPoiHeaderState"
8608
- },
8609
- "privacy": "protected",
8610
- "readonly": true,
8611
- "inheritedFrom": {
8612
- "name": "PoiBase",
8613
- "module": "src/ar/poi/poi-base.ts"
8614
- }
8615
- },
8616
9342
  {
8617
9343
  "kind": "method",
8618
9344
  "name": "syncHeaderContent",
8619
9345
  "privacy": "private",
8620
- "inheritedFrom": {
8621
- "name": "PoiBase",
8622
- "module": "src/ar/poi/poi-base.ts"
8623
- }
8624
- },
8625
- {
8626
- "kind": "method",
8627
- "name": "applyHeaderState",
8628
- "privacy": "private",
8629
- "parameters": [
8630
- {
8631
- "name": "root",
8632
- "type": {
8633
- "text": "ParentNode"
8634
- }
8635
- }
8636
- ],
8637
- "inheritedFrom": {
8638
- "name": "PoiBase",
8639
- "module": "src/ar/poi/poi-base.ts"
8640
- }
8641
- },
8642
- {
8643
- "kind": "method",
8644
- "name": "syncHeaderState",
8645
- "privacy": "private",
9346
+ "description": "Auto-enable `hasHeader` when the consumer slots header content directly\n(outside a stack, which manages `hasHeader` itself). Header elements stay\nin the consumer's light DOM and reach the inner button through the\n`<slot name=\"header\">` forwarding chain; their `state` is synced by\n`obc-poi-button`.",
8646
9347
  "inheritedFrom": {
8647
9348
  "name": "PoiBase",
8648
9349
  "module": "src/ar/poi/poi-base.ts"
@@ -8844,10 +9545,7 @@
8844
9545
  },
8845
9546
  {
8846
9547
  "name": "y",
8847
- "type": {
8848
- "text": "number"
8849
- },
8850
- "default": "192",
9548
+ "default": "DEFAULT_LINE_LENGTH_PX",
8851
9549
  "fieldName": "y",
8852
9550
  "inheritedFrom": {
8853
9551
  "name": "PoiBase",
@@ -8866,6 +9564,26 @@
8866
9564
  "module": "src/ar/poi/poi-base.ts"
8867
9565
  }
8868
9566
  },
9567
+ {
9568
+ "name": "x-filter-cutoff-hz",
9569
+ "default": "X_FILTER_CUTOFF_HZ",
9570
+ "description": "Cutoff frequency (Hz) of the built-in low-pass filter applied to `x`. Lower values smooth noisy input more aggressively; `0` or a negative value disables filtering so `x` is applied directly.",
9571
+ "fieldName": "xFilterCutoffHz",
9572
+ "inheritedFrom": {
9573
+ "name": "PoiBase",
9574
+ "module": "src/ar/poi/poi-base.ts"
9575
+ }
9576
+ },
9577
+ {
9578
+ "name": "y-filter-cutoff-hz",
9579
+ "default": "Y_FILTER_CUTOFF_HZ",
9580
+ "description": "Cutoff frequency (Hz) of the built-in low-pass filter applied to `y`. Lower values smooth noisy input more aggressively; `0` or a negative value disables filtering so `y` is applied directly.",
9581
+ "fieldName": "yFilterCutoffHz",
9582
+ "inheritedFrom": {
9583
+ "name": "PoiBase",
9584
+ "module": "src/ar/poi/poi-base.ts"
9585
+ }
9586
+ },
8869
9587
  {
8870
9588
  "name": "fixed-target",
8871
9589
  "type": {
@@ -9006,7 +9724,7 @@
9006
9724
  "declarations": [
9007
9725
  {
9008
9726
  "kind": "class",
9009
- "description": "`<obc-poi-data>` - Data-oriented marker variant with layout positioning and layer integration.\n\nExtends `PoiBase` to provide the \"data\" variant of the POI system.\nRenders `<obc-poi>` with a slotted `<obc-poi-button-data>`.",
9727
+ "description": "`<obc-poi-data>` - Data-oriented marker variant with layout positioning and layer integration.\n\nExtends `PoiBase` to provide the \"data\" variant of the POI system.\nRenders `<obc-poi>` with a slotted `<obc-poi-button-data>`.\nSee the \"Coordinate Model\" section in `PoiBase` (poi-base.ts) for how `x`, `y`, and `buttonY` position the marker.",
9010
9728
  "name": "ObcPoiData",
9011
9729
  "slots": [
9012
9730
  {
@@ -9290,10 +10008,7 @@
9290
10008
  {
9291
10009
  "kind": "field",
9292
10010
  "name": "y",
9293
- "type": {
9294
- "text": "number"
9295
- },
9296
- "default": "192",
10011
+ "default": "DEFAULT_LINE_LENGTH_PX",
9297
10012
  "attribute": "y",
9298
10013
  "inheritedFrom": {
9299
10014
  "name": "PoiBase",
@@ -9313,6 +10028,34 @@
9313
10028
  "module": "src/ar/poi/poi-base.ts"
9314
10029
  }
9315
10030
  },
10031
+ {
10032
+ "kind": "field",
10033
+ "name": "xFilterCutoffHz",
10034
+ "default": "16",
10035
+ "description": "Cutoff frequency (Hz) of the built-in low-pass filter applied to `x`. Lower values smooth noisy input more aggressively; `0` or a negative value disables filtering so `x` is applied directly.",
10036
+ "attribute": "x-filter-cutoff-hz",
10037
+ "type": {
10038
+ "text": "number"
10039
+ },
10040
+ "inheritedFrom": {
10041
+ "name": "PoiBase",
10042
+ "module": "src/ar/poi/poi-base.ts"
10043
+ }
10044
+ },
10045
+ {
10046
+ "kind": "field",
10047
+ "name": "yFilterCutoffHz",
10048
+ "default": "16",
10049
+ "description": "Cutoff frequency (Hz) of the built-in low-pass filter applied to `y`. Lower values smooth noisy input more aggressively; `0` or a negative value disables filtering so `y` is applied directly.",
10050
+ "attribute": "y-filter-cutoff-hz",
10051
+ "type": {
10052
+ "text": "number"
10053
+ },
10054
+ "inheritedFrom": {
10055
+ "name": "PoiBase",
10056
+ "module": "src/ar/poi/poi-base.ts"
10057
+ }
10058
+ },
9316
10059
  {
9317
10060
  "kind": "field",
9318
10061
  "name": "fixedTarget",
@@ -9480,6 +10223,97 @@
9480
10223
  "module": "src/ar/poi/poi-base.ts"
9481
10224
  }
9482
10225
  },
10226
+ {
10227
+ "kind": "field",
10228
+ "name": "resolvedXFilterCutoffHz",
10229
+ "type": {
10230
+ "text": "number"
10231
+ },
10232
+ "privacy": "private",
10233
+ "readonly": true,
10234
+ "inheritedFrom": {
10235
+ "name": "PoiBase",
10236
+ "module": "src/ar/poi/poi-base.ts"
10237
+ }
10238
+ },
10239
+ {
10240
+ "kind": "field",
10241
+ "name": "filteredY",
10242
+ "type": {
10243
+ "text": "number"
10244
+ },
10245
+ "privacy": "private",
10246
+ "default": "0",
10247
+ "inheritedFrom": {
10248
+ "name": "PoiBase",
10249
+ "module": "src/ar/poi/poi-base.ts"
10250
+ }
10251
+ },
10252
+ {
10253
+ "kind": "field",
10254
+ "name": "yFilterTarget",
10255
+ "type": {
10256
+ "text": "number"
10257
+ },
10258
+ "privacy": "private",
10259
+ "default": "0",
10260
+ "inheritedFrom": {
10261
+ "name": "PoiBase",
10262
+ "module": "src/ar/poi/poi-base.ts"
10263
+ }
10264
+ },
10265
+ {
10266
+ "kind": "field",
10267
+ "name": "yFilterInitialized",
10268
+ "type": {
10269
+ "text": "boolean"
10270
+ },
10271
+ "privacy": "private",
10272
+ "default": "false",
10273
+ "inheritedFrom": {
10274
+ "name": "PoiBase",
10275
+ "module": "src/ar/poi/poi-base.ts"
10276
+ }
10277
+ },
10278
+ {
10279
+ "kind": "field",
10280
+ "name": "lastYFilterTimestampMs",
10281
+ "type": {
10282
+ "text": "number"
10283
+ },
10284
+ "privacy": "private",
10285
+ "default": "0",
10286
+ "inheritedFrom": {
10287
+ "name": "PoiBase",
10288
+ "module": "src/ar/poi/poi-base.ts"
10289
+ }
10290
+ },
10291
+ {
10292
+ "kind": "field",
10293
+ "name": "yFilterRaf",
10294
+ "type": {
10295
+ "text": "number"
10296
+ },
10297
+ "privacy": "private",
10298
+ "default": "0",
10299
+ "inheritedFrom": {
10300
+ "name": "PoiBase",
10301
+ "module": "src/ar/poi/poi-base.ts"
10302
+ }
10303
+ },
10304
+ {
10305
+ "kind": "field",
10306
+ "name": "resolvedYFilterCutoffHz",
10307
+ "type": {
10308
+ "text": "number"
10309
+ },
10310
+ "privacy": "private",
10311
+ "readonly": true,
10312
+ "inheritedFrom": {
10313
+ "name": "PoiBase",
10314
+ "module": "src/ar/poi/poi-base.ts"
10315
+ }
10316
+ },
9483
10317
  {
9484
10318
  "kind": "method",
9485
10319
  "name": "dispatchLayoutChange",
@@ -9515,6 +10349,41 @@
9515
10349
  "module": "src/ar/poi/poi-base.ts"
9516
10350
  }
9517
10351
  },
10352
+ {
10353
+ "kind": "field",
10354
+ "name": "stepYFilter",
10355
+ "privacy": "private",
10356
+ "inheritedFrom": {
10357
+ "name": "PoiBase",
10358
+ "module": "src/ar/poi/poi-base.ts"
10359
+ }
10360
+ },
10361
+ {
10362
+ "kind": "method",
10363
+ "name": "applyFilteredY",
10364
+ "privacy": "private",
10365
+ "inheritedFrom": {
10366
+ "name": "PoiBase",
10367
+ "module": "src/ar/poi/poi-base.ts"
10368
+ }
10369
+ },
10370
+ {
10371
+ "kind": "method",
10372
+ "name": "syncYFilterTarget",
10373
+ "privacy": "private",
10374
+ "parameters": [
10375
+ {
10376
+ "name": "nextY",
10377
+ "type": {
10378
+ "text": "number"
10379
+ }
10380
+ }
10381
+ ],
10382
+ "inheritedFrom": {
10383
+ "name": "PoiBase",
10384
+ "module": "src/ar/poi/poi-base.ts"
10385
+ }
10386
+ },
9518
10387
  {
9519
10388
  "kind": "method",
9520
10389
  "name": "markXMoving",
@@ -9726,7 +10595,7 @@
9726
10595
  "text": "number"
9727
10596
  },
9728
10597
  "privacy": "protected",
9729
- "description": "Public `y` normalized as the target Y input.",
10598
+ "description": "Public `y` normalized as the target Y input, after the y filter.",
9730
10599
  "readonly": true,
9731
10600
  "inheritedFrom": {
9732
10601
  "name": "PoiBase",
@@ -9761,49 +10630,11 @@
9761
10630
  "module": "src/ar/poi/poi-base.ts"
9762
10631
  }
9763
10632
  },
9764
- {
9765
- "kind": "field",
9766
- "name": "resolvedHeaderState",
9767
- "type": {
9768
- "text": "ObcPoiHeaderState"
9769
- },
9770
- "privacy": "protected",
9771
- "readonly": true,
9772
- "inheritedFrom": {
9773
- "name": "PoiBase",
9774
- "module": "src/ar/poi/poi-base.ts"
9775
- }
9776
- },
9777
10633
  {
9778
10634
  "kind": "method",
9779
10635
  "name": "syncHeaderContent",
9780
10636
  "privacy": "private",
9781
- "inheritedFrom": {
9782
- "name": "PoiBase",
9783
- "module": "src/ar/poi/poi-base.ts"
9784
- }
9785
- },
9786
- {
9787
- "kind": "method",
9788
- "name": "applyHeaderState",
9789
- "privacy": "private",
9790
- "parameters": [
9791
- {
9792
- "name": "root",
9793
- "type": {
9794
- "text": "ParentNode"
9795
- }
9796
- }
9797
- ],
9798
- "inheritedFrom": {
9799
- "name": "PoiBase",
9800
- "module": "src/ar/poi/poi-base.ts"
9801
- }
9802
- },
9803
- {
9804
- "kind": "method",
9805
- "name": "syncHeaderState",
9806
- "privacy": "private",
10637
+ "description": "Auto-enable `hasHeader` when the consumer slots header content directly\n(outside a stack, which manages `hasHeader` itself). Header elements stay\nin the consumer's light DOM and reach the inner button through the\n`<slot name=\"header\">` forwarding chain; their `state` is synced by\n`obc-poi-button`.",
9807
10638
  "inheritedFrom": {
9808
10639
  "name": "PoiBase",
9809
10640
  "module": "src/ar/poi/poi-base.ts"
@@ -9998,10 +10829,7 @@
9998
10829
  },
9999
10830
  {
10000
10831
  "name": "y",
10001
- "type": {
10002
- "text": "number"
10003
- },
10004
- "default": "192",
10832
+ "default": "DEFAULT_LINE_LENGTH_PX",
10005
10833
  "fieldName": "y",
10006
10834
  "inheritedFrom": {
10007
10835
  "name": "PoiBase",
@@ -10020,6 +10848,26 @@
10020
10848
  "module": "src/ar/poi/poi-base.ts"
10021
10849
  }
10022
10850
  },
10851
+ {
10852
+ "name": "x-filter-cutoff-hz",
10853
+ "default": "X_FILTER_CUTOFF_HZ",
10854
+ "description": "Cutoff frequency (Hz) of the built-in low-pass filter applied to `x`. Lower values smooth noisy input more aggressively; `0` or a negative value disables filtering so `x` is applied directly.",
10855
+ "fieldName": "xFilterCutoffHz",
10856
+ "inheritedFrom": {
10857
+ "name": "PoiBase",
10858
+ "module": "src/ar/poi/poi-base.ts"
10859
+ }
10860
+ },
10861
+ {
10862
+ "name": "y-filter-cutoff-hz",
10863
+ "default": "Y_FILTER_CUTOFF_HZ",
10864
+ "description": "Cutoff frequency (Hz) of the built-in low-pass filter applied to `y`. Lower values smooth noisy input more aggressively; `0` or a negative value disables filtering so `y` is applied directly.",
10865
+ "fieldName": "yFilterCutoffHz",
10866
+ "inheritedFrom": {
10867
+ "name": "PoiBase",
10868
+ "module": "src/ar/poi/poi-base.ts"
10869
+ }
10870
+ },
10023
10871
  {
10024
10872
  "name": "fixed-target",
10025
10873
  "type": {
@@ -10168,7 +11016,7 @@
10168
11016
  "declarations": [
10169
11017
  {
10170
11018
  "kind": "class",
10171
- "description": "`<obc-poi-vessel>` - Vessel marker variant with layout positioning and layer integration.\n\nExtends `PoiBase` to provide the \"vessel\" variant of the POI system.\nRenders `<obc-poi>` with a slotted `<obc-poi-button-vessel>`.",
11019
+ "description": "`<obc-poi-vessel>` - Vessel marker variant with layout positioning and layer integration.\n\nExtends `PoiBase` to provide the \"vessel\" variant of the POI system.\nRenders `<obc-poi>` with a slotted `<obc-poi-button-vessel>`.\nSee the \"Coordinate Model\" section in `PoiBase` (poi-base.ts) for how `x`, `y`, and `buttonY` position the marker.",
10172
11020
  "name": "ObcPoiVessel",
10173
11021
  "slots": [
10174
11022
  {
@@ -10468,10 +11316,7 @@
10468
11316
  {
10469
11317
  "kind": "field",
10470
11318
  "name": "y",
10471
- "type": {
10472
- "text": "number"
10473
- },
10474
- "default": "192",
11319
+ "default": "DEFAULT_LINE_LENGTH_PX",
10475
11320
  "attribute": "y",
10476
11321
  "inheritedFrom": {
10477
11322
  "name": "PoiBase",
@@ -10491,6 +11336,34 @@
10491
11336
  "module": "src/ar/poi/poi-base.ts"
10492
11337
  }
10493
11338
  },
11339
+ {
11340
+ "kind": "field",
11341
+ "name": "xFilterCutoffHz",
11342
+ "default": "16",
11343
+ "description": "Cutoff frequency (Hz) of the built-in low-pass filter applied to `x`. Lower values smooth noisy input more aggressively; `0` or a negative value disables filtering so `x` is applied directly.",
11344
+ "attribute": "x-filter-cutoff-hz",
11345
+ "type": {
11346
+ "text": "number"
11347
+ },
11348
+ "inheritedFrom": {
11349
+ "name": "PoiBase",
11350
+ "module": "src/ar/poi/poi-base.ts"
11351
+ }
11352
+ },
11353
+ {
11354
+ "kind": "field",
11355
+ "name": "yFilterCutoffHz",
11356
+ "default": "16",
11357
+ "description": "Cutoff frequency (Hz) of the built-in low-pass filter applied to `y`. Lower values smooth noisy input more aggressively; `0` or a negative value disables filtering so `y` is applied directly.",
11358
+ "attribute": "y-filter-cutoff-hz",
11359
+ "type": {
11360
+ "text": "number"
11361
+ },
11362
+ "inheritedFrom": {
11363
+ "name": "PoiBase",
11364
+ "module": "src/ar/poi/poi-base.ts"
11365
+ }
11366
+ },
10494
11367
  {
10495
11368
  "kind": "field",
10496
11369
  "name": "fixedTarget",
@@ -10658,6 +11531,97 @@
10658
11531
  "module": "src/ar/poi/poi-base.ts"
10659
11532
  }
10660
11533
  },
11534
+ {
11535
+ "kind": "field",
11536
+ "name": "resolvedXFilterCutoffHz",
11537
+ "type": {
11538
+ "text": "number"
11539
+ },
11540
+ "privacy": "private",
11541
+ "readonly": true,
11542
+ "inheritedFrom": {
11543
+ "name": "PoiBase",
11544
+ "module": "src/ar/poi/poi-base.ts"
11545
+ }
11546
+ },
11547
+ {
11548
+ "kind": "field",
11549
+ "name": "filteredY",
11550
+ "type": {
11551
+ "text": "number"
11552
+ },
11553
+ "privacy": "private",
11554
+ "default": "0",
11555
+ "inheritedFrom": {
11556
+ "name": "PoiBase",
11557
+ "module": "src/ar/poi/poi-base.ts"
11558
+ }
11559
+ },
11560
+ {
11561
+ "kind": "field",
11562
+ "name": "yFilterTarget",
11563
+ "type": {
11564
+ "text": "number"
11565
+ },
11566
+ "privacy": "private",
11567
+ "default": "0",
11568
+ "inheritedFrom": {
11569
+ "name": "PoiBase",
11570
+ "module": "src/ar/poi/poi-base.ts"
11571
+ }
11572
+ },
11573
+ {
11574
+ "kind": "field",
11575
+ "name": "yFilterInitialized",
11576
+ "type": {
11577
+ "text": "boolean"
11578
+ },
11579
+ "privacy": "private",
11580
+ "default": "false",
11581
+ "inheritedFrom": {
11582
+ "name": "PoiBase",
11583
+ "module": "src/ar/poi/poi-base.ts"
11584
+ }
11585
+ },
11586
+ {
11587
+ "kind": "field",
11588
+ "name": "lastYFilterTimestampMs",
11589
+ "type": {
11590
+ "text": "number"
11591
+ },
11592
+ "privacy": "private",
11593
+ "default": "0",
11594
+ "inheritedFrom": {
11595
+ "name": "PoiBase",
11596
+ "module": "src/ar/poi/poi-base.ts"
11597
+ }
11598
+ },
11599
+ {
11600
+ "kind": "field",
11601
+ "name": "yFilterRaf",
11602
+ "type": {
11603
+ "text": "number"
11604
+ },
11605
+ "privacy": "private",
11606
+ "default": "0",
11607
+ "inheritedFrom": {
11608
+ "name": "PoiBase",
11609
+ "module": "src/ar/poi/poi-base.ts"
11610
+ }
11611
+ },
11612
+ {
11613
+ "kind": "field",
11614
+ "name": "resolvedYFilterCutoffHz",
11615
+ "type": {
11616
+ "text": "number"
11617
+ },
11618
+ "privacy": "private",
11619
+ "readonly": true,
11620
+ "inheritedFrom": {
11621
+ "name": "PoiBase",
11622
+ "module": "src/ar/poi/poi-base.ts"
11623
+ }
11624
+ },
10661
11625
  {
10662
11626
  "kind": "method",
10663
11627
  "name": "dispatchLayoutChange",
@@ -10693,6 +11657,41 @@
10693
11657
  "module": "src/ar/poi/poi-base.ts"
10694
11658
  }
10695
11659
  },
11660
+ {
11661
+ "kind": "field",
11662
+ "name": "stepYFilter",
11663
+ "privacy": "private",
11664
+ "inheritedFrom": {
11665
+ "name": "PoiBase",
11666
+ "module": "src/ar/poi/poi-base.ts"
11667
+ }
11668
+ },
11669
+ {
11670
+ "kind": "method",
11671
+ "name": "applyFilteredY",
11672
+ "privacy": "private",
11673
+ "inheritedFrom": {
11674
+ "name": "PoiBase",
11675
+ "module": "src/ar/poi/poi-base.ts"
11676
+ }
11677
+ },
11678
+ {
11679
+ "kind": "method",
11680
+ "name": "syncYFilterTarget",
11681
+ "privacy": "private",
11682
+ "parameters": [
11683
+ {
11684
+ "name": "nextY",
11685
+ "type": {
11686
+ "text": "number"
11687
+ }
11688
+ }
11689
+ ],
11690
+ "inheritedFrom": {
11691
+ "name": "PoiBase",
11692
+ "module": "src/ar/poi/poi-base.ts"
11693
+ }
11694
+ },
10696
11695
  {
10697
11696
  "kind": "method",
10698
11697
  "name": "markXMoving",
@@ -10904,7 +11903,7 @@
10904
11903
  "text": "number"
10905
11904
  },
10906
11905
  "privacy": "protected",
10907
- "description": "Public `y` normalized as the target Y input.",
11906
+ "description": "Public `y` normalized as the target Y input, after the y filter.",
10908
11907
  "readonly": true,
10909
11908
  "inheritedFrom": {
10910
11909
  "name": "PoiBase",
@@ -10939,49 +11938,11 @@
10939
11938
  "module": "src/ar/poi/poi-base.ts"
10940
11939
  }
10941
11940
  },
10942
- {
10943
- "kind": "field",
10944
- "name": "resolvedHeaderState",
10945
- "type": {
10946
- "text": "ObcPoiHeaderState"
10947
- },
10948
- "privacy": "protected",
10949
- "readonly": true,
10950
- "inheritedFrom": {
10951
- "name": "PoiBase",
10952
- "module": "src/ar/poi/poi-base.ts"
10953
- }
10954
- },
10955
11941
  {
10956
11942
  "kind": "method",
10957
11943
  "name": "syncHeaderContent",
10958
11944
  "privacy": "private",
10959
- "inheritedFrom": {
10960
- "name": "PoiBase",
10961
- "module": "src/ar/poi/poi-base.ts"
10962
- }
10963
- },
10964
- {
10965
- "kind": "method",
10966
- "name": "applyHeaderState",
10967
- "privacy": "private",
10968
- "parameters": [
10969
- {
10970
- "name": "root",
10971
- "type": {
10972
- "text": "ParentNode"
10973
- }
10974
- }
10975
- ],
10976
- "inheritedFrom": {
10977
- "name": "PoiBase",
10978
- "module": "src/ar/poi/poi-base.ts"
10979
- }
10980
- },
10981
- {
10982
- "kind": "method",
10983
- "name": "syncHeaderState",
10984
- "privacy": "private",
11945
+ "description": "Auto-enable `hasHeader` when the consumer slots header content directly\n(outside a stack, which manages `hasHeader` itself). Header elements stay\nin the consumer's light DOM and reach the inner button through the\n`<slot name=\"header\">` forwarding chain; their `state` is synced by\n`obc-poi-button`.",
10985
11946
  "inheritedFrom": {
10986
11947
  "name": "PoiBase",
10987
11948
  "module": "src/ar/poi/poi-base.ts"
@@ -11183,10 +12144,7 @@
11183
12144
  },
11184
12145
  {
11185
12146
  "name": "y",
11186
- "type": {
11187
- "text": "number"
11188
- },
11189
- "default": "192",
12147
+ "default": "DEFAULT_LINE_LENGTH_PX",
11190
12148
  "fieldName": "y",
11191
12149
  "inheritedFrom": {
11192
12150
  "name": "PoiBase",
@@ -11205,6 +12163,26 @@
11205
12163
  "module": "src/ar/poi/poi-base.ts"
11206
12164
  }
11207
12165
  },
12166
+ {
12167
+ "name": "x-filter-cutoff-hz",
12168
+ "default": "X_FILTER_CUTOFF_HZ",
12169
+ "description": "Cutoff frequency (Hz) of the built-in low-pass filter applied to `x`. Lower values smooth noisy input more aggressively; `0` or a negative value disables filtering so `x` is applied directly.",
12170
+ "fieldName": "xFilterCutoffHz",
12171
+ "inheritedFrom": {
12172
+ "name": "PoiBase",
12173
+ "module": "src/ar/poi/poi-base.ts"
12174
+ }
12175
+ },
12176
+ {
12177
+ "name": "y-filter-cutoff-hz",
12178
+ "default": "Y_FILTER_CUTOFF_HZ",
12179
+ "description": "Cutoff frequency (Hz) of the built-in low-pass filter applied to `y`. Lower values smooth noisy input more aggressively; `0` or a negative value disables filtering so `y` is applied directly.",
12180
+ "fieldName": "yFilterCutoffHz",
12181
+ "inheritedFrom": {
12182
+ "name": "PoiBase",
12183
+ "module": "src/ar/poi/poi-base.ts"
12184
+ }
12185
+ },
11208
12186
  {
11209
12187
  "name": "fixed-target",
11210
12188
  "type": {
@@ -11345,7 +12323,7 @@
11345
12323
  "declarations": [
11346
12324
  {
11347
12325
  "kind": "class",
11348
- "description": "`<obc-poi>` - Composite marker component that renders a target button with connector and pointer visuals.\n\n## Overview\nCombines `obc-poi-button`, `obc-poi-line`, and optional pointer visuals to display\ninteractive marker/callout targets in line, offset, point, or outside modes.\nKeywords: marker, callout, pin, label, target, pointer.\n\n## Features/Variants\n\nConfiguration 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\nMotion 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\nThis 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```",
12326
+ "description": "`<obc-poi>` - Composite marker component that renders a target button with connector and pointer visuals.\n\n## Overview\nCombines `obc-poi-button`, `obc-poi-line`, and optional pointer visuals to display\ninteractive marker/callout targets in line, offset, point, or outside modes.\nKeywords: marker, callout, pin, label, target, pointer.\n\n## Features/Variants\n\nConfiguration 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\nMotion 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\nThis 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```",
11349
12327
  "name": "ObcPoi",
11350
12328
  "slots": [
11351
12329
  {
@@ -11357,7 +12335,7 @@
11357
12335
  "name": "button"
11358
12336
  },
11359
12337
  {
11360
- "description": "Optional header content, relocated into the inner `obc-poi-button` at runtime.",
12338
+ "description": "Optional header content, forwarded into the default `obc-poi-button` via a `<slot name=\"header\">` chain.",
11361
12339
  "name": "header"
11362
12340
  }
11363
12341
  ],
@@ -11499,7 +12477,7 @@
11499
12477
  {
11500
12478
  "kind": "field",
11501
12479
  "name": "y",
11502
- "default": "96",
12480
+ "default": "192",
11503
12481
  "attribute": "y",
11504
12482
  "type": {
11505
12483
  "text": "number"
@@ -11581,19 +12559,6 @@
11581
12559
  "default": "false",
11582
12560
  "attribute": "animate-position"
11583
12561
  },
11584
- {
11585
- "kind": "field",
11586
- "name": "headerObserver",
11587
- "type": {
11588
- "text": "MutationObserver | undefined"
11589
- },
11590
- "privacy": "private"
11591
- },
11592
- {
11593
- "kind": "method",
11594
- "name": "setupHeaderObserver",
11595
- "privacy": "private"
11596
- },
11597
12562
  {
11598
12563
  "kind": "method",
11599
12564
  "name": "updatePosition",
@@ -11626,15 +12591,6 @@
11626
12591
  "privacy": "protected",
11627
12592
  "readonly": true
11628
12593
  },
11629
- {
11630
- "kind": "field",
11631
- "name": "resolvedHeaderState",
11632
- "type": {
11633
- "text": "ObcPoiHeaderState"
11634
- },
11635
- "privacy": "private",
11636
- "readonly": true
11637
- },
11638
12594
  {
11639
12595
  "kind": "field",
11640
12596
  "name": "lineStyle",
@@ -11791,29 +12747,6 @@
11791
12747
  }
11792
12748
  ]
11793
12749
  },
11794
- {
11795
- "kind": "method",
11796
- "name": "syncFallbackButtonHeaderContent",
11797
- "privacy": "private"
11798
- },
11799
- {
11800
- "kind": "method",
11801
- "name": "applyHeaderState",
11802
- "privacy": "private",
11803
- "parameters": [
11804
- {
11805
- "name": "root",
11806
- "type": {
11807
- "text": "ParentNode"
11808
- }
11809
- }
11810
- ]
11811
- },
11812
- {
11813
- "kind": "method",
11814
- "name": "syncAttachedHeaderState",
11815
- "privacy": "private"
11816
- },
11817
12750
  {
11818
12751
  "kind": "method",
11819
12752
  "name": "syncSlottedButtonProps",
@@ -12035,6 +12968,14 @@
12035
12968
  "module": "src/ar/poi/poi.ts"
12036
12969
  }
12037
12970
  },
12971
+ {
12972
+ "kind": "js",
12973
+ "name": "DEFAULT_LINE_LENGTH_PX",
12974
+ "declaration": {
12975
+ "name": "DEFAULT_LINE_LENGTH_PX",
12976
+ "module": "src/ar/poi/poi.ts"
12977
+ }
12978
+ },
12038
12979
  {
12039
12980
  "kind": "js",
12040
12981
  "name": "ObcPoi",
@@ -13058,11 +13999,22 @@
13058
13999
  "members": [
13059
14000
  {
13060
14001
  "kind": "field",
13061
- "name": "on",
14002
+ "name": "turnedOn",
13062
14003
  "type": {
13063
14004
  "text": "boolean"
13064
14005
  },
13065
14006
  "default": "false",
14007
+ "description": "Whether the device is running. Selects the running icon and the speed readout instead of the `Off` state. Not named `on`, which Svelte binds as an event listener in markup (#1090).",
14008
+ "attribute": "turnedOn"
14009
+ },
14010
+ {
14011
+ "kind": "field",
14012
+ "name": "on",
14013
+ "type": {
14014
+ "text": "boolean | undefined"
14015
+ },
14016
+ "deprecated": "Use `turnedOn`.",
14017
+ "description": "Alias of `turnedOn` for 1.x markup: setting it sets `turnedOn`.",
13066
14018
  "attribute": "on"
13067
14019
  },
13068
14020
  {
@@ -13653,11 +14605,21 @@
13653
14605
  ],
13654
14606
  "attributes": [
13655
14607
  {
13656
- "name": "on",
14608
+ "name": "turnedOn",
13657
14609
  "type": {
13658
14610
  "text": "boolean"
13659
14611
  },
13660
14612
  "default": "false",
14613
+ "description": "Whether the device is running. Selects the running icon and the speed readout instead of the `Off` state. Not named `on`, which Svelte binds as an event listener in markup (#1090).",
14614
+ "fieldName": "turnedOn"
14615
+ },
14616
+ {
14617
+ "name": "on",
14618
+ "type": {
14619
+ "text": "boolean | undefined"
14620
+ },
14621
+ "deprecated": "Use `turnedOn`.",
14622
+ "description": "Alias of `turnedOn` for 1.x markup: setting it sets `turnedOn`.",
13661
14623
  "fieldName": "on"
13662
14624
  },
13663
14625
  {
@@ -13954,16 +14916,27 @@
13954
14916
  "declarations": [
13955
14917
  {
13956
14918
  "kind": "class",
13957
- "description": "",
14919
+ "description": "Base class for two-state automation buttons.\n\nExtends `ObcAbstractAutomationButton` with the on/off state: the subclass\npicks its icon from `turnedOn`, and the readout adds the `On` or `Off`\nstate row.\n\n## Usage Guidelines\n\nNot registered as a custom element. `obc-switch`, `obc-converter`,\n`obc-diodes` and the other two-state devices extend it and supply their own\n`icon`.",
13958
14920
  "name": "ObcAbstractAutomationButtonSquared",
13959
14921
  "members": [
13960
14922
  {
13961
14923
  "kind": "field",
13962
- "name": "on",
14924
+ "name": "turnedOn",
13963
14925
  "type": {
13964
14926
  "text": "boolean"
13965
14927
  },
13966
14928
  "default": "false",
14929
+ "description": "Whether the device is on. Selects the on icon and the `On` state row instead of `Off`. Not named `on`, which Svelte binds as an event listener in markup (#1090).",
14930
+ "attribute": "turnedOn"
14931
+ },
14932
+ {
14933
+ "kind": "field",
14934
+ "name": "on",
14935
+ "type": {
14936
+ "text": "boolean | undefined"
14937
+ },
14938
+ "deprecated": "Use `turnedOn`.",
14939
+ "description": "Alias of `turnedOn` for 1.x markup: setting it sets `turnedOn`.",
13967
14940
  "attribute": "on"
13968
14941
  },
13969
14942
  {
@@ -14508,11 +15481,21 @@
14508
15481
  ],
14509
15482
  "attributes": [
14510
15483
  {
14511
- "name": "on",
15484
+ "name": "turnedOn",
14512
15485
  "type": {
14513
15486
  "text": "boolean"
14514
15487
  },
14515
15488
  "default": "false",
15489
+ "description": "Whether the device is on. Selects the on icon and the `On` state row instead of `Off`. Not named `on`, which Svelte binds as an event listener in markup (#1090).",
15490
+ "fieldName": "turnedOn"
15491
+ },
15492
+ {
15493
+ "name": "on",
15494
+ "type": {
15495
+ "text": "boolean | undefined"
15496
+ },
15497
+ "deprecated": "Use `turnedOn`.",
15498
+ "description": "Alias of `turnedOn` for 1.x markup: setting it sets `turnedOn`.",
14516
15499
  "fieldName": "on"
14517
15500
  },
14518
15501
  {
@@ -17299,11 +18282,26 @@
17299
18282
  },
17300
18283
  {
17301
18284
  "kind": "field",
17302
- "name": "on",
18285
+ "name": "turnedOn",
17303
18286
  "type": {
17304
18287
  "text": "boolean"
17305
18288
  },
17306
18289
  "default": "false",
18290
+ "description": "Whether the device is on. Selects the on icon and the `On` state row instead of `Off`. Not named `on`, which Svelte binds as an event listener in markup (#1090).",
18291
+ "attribute": "turnedOn",
18292
+ "inheritedFrom": {
18293
+ "name": "ObcAbstractAutomationButtonSquared",
18294
+ "module": "src/automation/automation-button/abstract-automation-button-squared.ts"
18295
+ }
18296
+ },
18297
+ {
18298
+ "kind": "field",
18299
+ "name": "on",
18300
+ "type": {
18301
+ "text": "boolean | undefined"
18302
+ },
18303
+ "deprecated": "Use `turnedOn`.",
18304
+ "description": "Alias of `turnedOn` for 1.x markup: setting it sets `turnedOn`.",
17307
18305
  "attribute": "on",
17308
18306
  "inheritedFrom": {
17309
18307
  "name": "ObcAbstractAutomationButtonSquared",
@@ -17855,11 +18853,25 @@
17855
18853
  "fieldName": "alternativeIcon"
17856
18854
  },
17857
18855
  {
17858
- "name": "on",
18856
+ "name": "turnedOn",
17859
18857
  "type": {
17860
18858
  "text": "boolean"
17861
18859
  },
17862
18860
  "default": "false",
18861
+ "description": "Whether the device is on. Selects the on icon and the `On` state row instead of `Off`. Not named `on`, which Svelte binds as an event listener in markup (#1090).",
18862
+ "fieldName": "turnedOn",
18863
+ "inheritedFrom": {
18864
+ "name": "ObcAbstractAutomationButtonSquared",
18865
+ "module": "src/automation/automation-button/abstract-automation-button-squared.ts"
18866
+ }
18867
+ },
18868
+ {
18869
+ "name": "on",
18870
+ "type": {
18871
+ "text": "boolean | undefined"
18872
+ },
18873
+ "deprecated": "Use `turnedOn`.",
18874
+ "description": "Alias of `turnedOn` for 1.x markup: setting it sets `turnedOn`.",
17863
18875
  "fieldName": "on",
17864
18876
  "inheritedFrom": {
17865
18877
  "name": "ObcAbstractAutomationButtonSquared",
@@ -18294,11 +19306,26 @@
18294
19306
  },
18295
19307
  {
18296
19308
  "kind": "field",
18297
- "name": "on",
19309
+ "name": "turnedOn",
18298
19310
  "type": {
18299
19311
  "text": "boolean"
18300
19312
  },
18301
19313
  "default": "false",
19314
+ "description": "Whether the device is on. Selects the on icon and the `On` state row instead of `Off`. Not named `on`, which Svelte binds as an event listener in markup (#1090).",
19315
+ "attribute": "turnedOn",
19316
+ "inheritedFrom": {
19317
+ "name": "ObcAbstractAutomationButtonSquared",
19318
+ "module": "src/automation/automation-button/abstract-automation-button-squared.ts"
19319
+ }
19320
+ },
19321
+ {
19322
+ "kind": "field",
19323
+ "name": "on",
19324
+ "type": {
19325
+ "text": "boolean | undefined"
19326
+ },
19327
+ "deprecated": "Use `turnedOn`.",
19328
+ "description": "Alias of `turnedOn` for 1.x markup: setting it sets `turnedOn`.",
18302
19329
  "attribute": "on",
18303
19330
  "inheritedFrom": {
18304
19331
  "name": "ObcAbstractAutomationButtonSquared",
@@ -18850,11 +19877,25 @@
18850
19877
  "fieldName": "alternativeIcon"
18851
19878
  },
18852
19879
  {
18853
- "name": "on",
19880
+ "name": "turnedOn",
18854
19881
  "type": {
18855
19882
  "text": "boolean"
18856
19883
  },
18857
19884
  "default": "false",
19885
+ "description": "Whether the device is on. Selects the on icon and the `On` state row instead of `Off`. Not named `on`, which Svelte binds as an event listener in markup (#1090).",
19886
+ "fieldName": "turnedOn",
19887
+ "inheritedFrom": {
19888
+ "name": "ObcAbstractAutomationButtonSquared",
19889
+ "module": "src/automation/automation-button/abstract-automation-button-squared.ts"
19890
+ }
19891
+ },
19892
+ {
19893
+ "name": "on",
19894
+ "type": {
19895
+ "text": "boolean | undefined"
19896
+ },
19897
+ "deprecated": "Use `turnedOn`.",
19898
+ "description": "Alias of `turnedOn` for 1.x markup: setting it sets `turnedOn`.",
18858
19899
  "fieldName": "on",
18859
19900
  "inheritedFrom": {
18860
19901
  "name": "ObcAbstractAutomationButtonSquared",
@@ -19158,11 +20199,26 @@
19158
20199
  },
19159
20200
  {
19160
20201
  "kind": "field",
19161
- "name": "on",
20202
+ "name": "turnedOn",
19162
20203
  "type": {
19163
20204
  "text": "boolean"
19164
20205
  },
19165
20206
  "default": "false",
20207
+ "description": "Whether the device is on. Selects the on icon and the `On` state row instead of `Off`. Not named `on`, which Svelte binds as an event listener in markup (#1090).",
20208
+ "attribute": "turnedOn",
20209
+ "inheritedFrom": {
20210
+ "name": "ObcAbstractAutomationButtonSquared",
20211
+ "module": "src/automation/automation-button/abstract-automation-button-squared.ts"
20212
+ }
20213
+ },
20214
+ {
20215
+ "kind": "field",
20216
+ "name": "on",
20217
+ "type": {
20218
+ "text": "boolean | undefined"
20219
+ },
20220
+ "deprecated": "Use `turnedOn`.",
20221
+ "description": "Alias of `turnedOn` for 1.x markup: setting it sets `turnedOn`.",
19166
20222
  "attribute": "on",
19167
20223
  "inheritedFrom": {
19168
20224
  "name": "ObcAbstractAutomationButtonSquared",
@@ -19714,11 +20770,25 @@
19714
20770
  "fieldName": "alternativeIcon"
19715
20771
  },
19716
20772
  {
19717
- "name": "on",
20773
+ "name": "turnedOn",
19718
20774
  "type": {
19719
20775
  "text": "boolean"
19720
20776
  },
19721
20777
  "default": "false",
20778
+ "description": "Whether the device is on. Selects the on icon and the `On` state row instead of `Off`. Not named `on`, which Svelte binds as an event listener in markup (#1090).",
20779
+ "fieldName": "turnedOn",
20780
+ "inheritedFrom": {
20781
+ "name": "ObcAbstractAutomationButtonSquared",
20782
+ "module": "src/automation/automation-button/abstract-automation-button-squared.ts"
20783
+ }
20784
+ },
20785
+ {
20786
+ "name": "on",
20787
+ "type": {
20788
+ "text": "boolean | undefined"
20789
+ },
20790
+ "deprecated": "Use `turnedOn`.",
20791
+ "description": "Alias of `turnedOn` for 1.x markup: setting it sets `turnedOn`.",
19722
20792
  "fieldName": "on",
19723
20793
  "inheritedFrom": {
19724
20794
  "name": "ObcAbstractAutomationButtonSquared",
@@ -20099,11 +21169,26 @@
20099
21169
  },
20100
21170
  {
20101
21171
  "kind": "field",
20102
- "name": "on",
21172
+ "name": "turnedOn",
20103
21173
  "type": {
20104
21174
  "text": "boolean"
20105
21175
  },
20106
21176
  "default": "false",
21177
+ "description": "Whether the device is on. Selects the on icon and the `On` state row instead of `Off`. Not named `on`, which Svelte binds as an event listener in markup (#1090).",
21178
+ "attribute": "turnedOn",
21179
+ "inheritedFrom": {
21180
+ "name": "ObcAbstractAutomationButtonSquared",
21181
+ "module": "src/automation/automation-button/abstract-automation-button-squared.ts"
21182
+ }
21183
+ },
21184
+ {
21185
+ "kind": "field",
21186
+ "name": "on",
21187
+ "type": {
21188
+ "text": "boolean | undefined"
21189
+ },
21190
+ "deprecated": "Use `turnedOn`.",
21191
+ "description": "Alias of `turnedOn` for 1.x markup: setting it sets `turnedOn`.",
20107
21192
  "attribute": "on",
20108
21193
  "inheritedFrom": {
20109
21194
  "name": "ObcAbstractAutomationButtonSquared",
@@ -20654,11 +21739,25 @@
20654
21739
  "customElement": true,
20655
21740
  "attributes": [
20656
21741
  {
20657
- "name": "on",
21742
+ "name": "turnedOn",
20658
21743
  "type": {
20659
21744
  "text": "boolean"
20660
21745
  },
20661
21746
  "default": "false",
21747
+ "description": "Whether the device is on. Selects the on icon and the `On` state row instead of `Off`. Not named `on`, which Svelte binds as an event listener in markup (#1090).",
21748
+ "fieldName": "turnedOn",
21749
+ "inheritedFrom": {
21750
+ "name": "ObcAbstractAutomationButtonSquared",
21751
+ "module": "src/automation/automation-button/abstract-automation-button-squared.ts"
21752
+ }
21753
+ },
21754
+ {
21755
+ "name": "on",
21756
+ "type": {
21757
+ "text": "boolean | undefined"
21758
+ },
21759
+ "deprecated": "Use `turnedOn`.",
21760
+ "description": "Alias of `turnedOn` for 1.x markup: setting it sets `turnedOn`.",
20662
21761
  "fieldName": "on",
20663
21762
  "inheritedFrom": {
20664
21763
  "name": "ObcAbstractAutomationButtonSquared",
@@ -21783,11 +22882,26 @@
21783
22882
  },
21784
22883
  {
21785
22884
  "kind": "field",
21786
- "name": "on",
22885
+ "name": "turnedOn",
21787
22886
  "type": {
21788
22887
  "text": "boolean"
21789
22888
  },
21790
22889
  "default": "false",
22890
+ "description": "Whether the device is on. Selects the on icon and the `On` state row instead of `Off`. Not named `on`, which Svelte binds as an event listener in markup (#1090).",
22891
+ "attribute": "turnedOn",
22892
+ "inheritedFrom": {
22893
+ "name": "ObcAbstractAutomationButtonSquared",
22894
+ "module": "src/automation/automation-button/abstract-automation-button-squared.ts"
22895
+ }
22896
+ },
22897
+ {
22898
+ "kind": "field",
22899
+ "name": "on",
22900
+ "type": {
22901
+ "text": "boolean | undefined"
22902
+ },
22903
+ "deprecated": "Use `turnedOn`.",
22904
+ "description": "Alias of `turnedOn` for 1.x markup: setting it sets `turnedOn`.",
21791
22905
  "attribute": "on",
21792
22906
  "inheritedFrom": {
21793
22907
  "name": "ObcAbstractAutomationButtonSquared",
@@ -22339,11 +23453,25 @@
22339
23453
  "fieldName": "alternativeIcon"
22340
23454
  },
22341
23455
  {
22342
- "name": "on",
23456
+ "name": "turnedOn",
22343
23457
  "type": {
22344
23458
  "text": "boolean"
22345
23459
  },
22346
23460
  "default": "false",
23461
+ "description": "Whether the device is on. Selects the on icon and the `On` state row instead of `Off`. Not named `on`, which Svelte binds as an event listener in markup (#1090).",
23462
+ "fieldName": "turnedOn",
23463
+ "inheritedFrom": {
23464
+ "name": "ObcAbstractAutomationButtonSquared",
23465
+ "module": "src/automation/automation-button/abstract-automation-button-squared.ts"
23466
+ }
23467
+ },
23468
+ {
23469
+ "name": "on",
23470
+ "type": {
23471
+ "text": "boolean | undefined"
23472
+ },
23473
+ "deprecated": "Use `turnedOn`.",
23474
+ "description": "Alias of `turnedOn` for 1.x markup: setting it sets `turnedOn`.",
22347
23475
  "fieldName": "on",
22348
23476
  "inheritedFrom": {
22349
23477
  "name": "ObcAbstractAutomationButtonSquared",
@@ -22794,11 +23922,26 @@
22794
23922
  },
22795
23923
  {
22796
23924
  "kind": "field",
22797
- "name": "on",
23925
+ "name": "turnedOn",
22798
23926
  "type": {
22799
23927
  "text": "boolean"
22800
23928
  },
22801
23929
  "default": "false",
23930
+ "description": "Whether the device is running. Selects the running icon and the speed readout instead of the `Off` state. Not named `on`, which Svelte binds as an event listener in markup (#1090).",
23931
+ "attribute": "turnedOn",
23932
+ "inheritedFrom": {
23933
+ "name": "ObcAbstractAutomationButtonMotorized",
23934
+ "module": "src/automation/automation-button/abstract-automation-button-motorized.ts"
23935
+ }
23936
+ },
23937
+ {
23938
+ "kind": "field",
23939
+ "name": "on",
23940
+ "type": {
23941
+ "text": "boolean | undefined"
23942
+ },
23943
+ "deprecated": "Use `turnedOn`.",
23944
+ "description": "Alias of `turnedOn` for 1.x markup: setting it sets `turnedOn`.",
22802
23945
  "attribute": "on",
22803
23946
  "inheritedFrom": {
22804
23947
  "name": "ObcAbstractAutomationButtonMotorized",
@@ -23415,11 +24558,25 @@
23415
24558
  "customElement": true,
23416
24559
  "attributes": [
23417
24560
  {
23418
- "name": "on",
24561
+ "name": "turnedOn",
23419
24562
  "type": {
23420
24563
  "text": "boolean"
23421
24564
  },
23422
24565
  "default": "false",
24566
+ "description": "Whether the device is running. Selects the running icon and the speed readout instead of the `Off` state. Not named `on`, which Svelte binds as an event listener in markup (#1090).",
24567
+ "fieldName": "turnedOn",
24568
+ "inheritedFrom": {
24569
+ "name": "ObcAbstractAutomationButtonMotorized",
24570
+ "module": "src/automation/automation-button/abstract-automation-button-motorized.ts"
24571
+ }
24572
+ },
24573
+ {
24574
+ "name": "on",
24575
+ "type": {
24576
+ "text": "boolean | undefined"
24577
+ },
24578
+ "deprecated": "Use `turnedOn`.",
24579
+ "description": "Alias of `turnedOn` for 1.x markup: setting it sets `turnedOn`.",
23423
24580
  "fieldName": "on",
23424
24581
  "inheritedFrom": {
23425
24582
  "name": "ObcAbstractAutomationButtonMotorized",
@@ -23777,11 +24934,26 @@
23777
24934
  },
23778
24935
  {
23779
24936
  "kind": "field",
23780
- "name": "on",
24937
+ "name": "turnedOn",
23781
24938
  "type": {
23782
24939
  "text": "boolean"
23783
24940
  },
23784
24941
  "default": "false",
24942
+ "description": "Whether the device is on. Selects the on icon and the `On` state row instead of `Off`. Not named `on`, which Svelte binds as an event listener in markup (#1090).",
24943
+ "attribute": "turnedOn",
24944
+ "inheritedFrom": {
24945
+ "name": "ObcAbstractAutomationButtonSquared",
24946
+ "module": "src/automation/automation-button/abstract-automation-button-squared.ts"
24947
+ }
24948
+ },
24949
+ {
24950
+ "kind": "field",
24951
+ "name": "on",
24952
+ "type": {
24953
+ "text": "boolean | undefined"
24954
+ },
24955
+ "deprecated": "Use `turnedOn`.",
24956
+ "description": "Alias of `turnedOn` for 1.x markup: setting it sets `turnedOn`.",
23785
24957
  "attribute": "on",
23786
24958
  "inheritedFrom": {
23787
24959
  "name": "ObcAbstractAutomationButtonSquared",
@@ -24333,11 +25505,25 @@
24333
25505
  "fieldName": "alternativeIcon"
24334
25506
  },
24335
25507
  {
24336
- "name": "on",
25508
+ "name": "turnedOn",
24337
25509
  "type": {
24338
25510
  "text": "boolean"
24339
25511
  },
24340
25512
  "default": "false",
25513
+ "description": "Whether the device is on. Selects the on icon and the `On` state row instead of `Off`. Not named `on`, which Svelte binds as an event listener in markup (#1090).",
25514
+ "fieldName": "turnedOn",
25515
+ "inheritedFrom": {
25516
+ "name": "ObcAbstractAutomationButtonSquared",
25517
+ "module": "src/automation/automation-button/abstract-automation-button-squared.ts"
25518
+ }
25519
+ },
25520
+ {
25521
+ "name": "on",
25522
+ "type": {
25523
+ "text": "boolean | undefined"
25524
+ },
25525
+ "deprecated": "Use `turnedOn`.",
25526
+ "description": "Alias of `turnedOn` for 1.x markup: setting it sets `turnedOn`.",
24341
25527
  "fieldName": "on",
24342
25528
  "inheritedFrom": {
24343
25529
  "name": "ObcAbstractAutomationButtonSquared",
@@ -28421,11 +29607,26 @@
28421
29607
  },
28422
29608
  {
28423
29609
  "kind": "field",
28424
- "name": "on",
29610
+ "name": "turnedOn",
28425
29611
  "type": {
28426
29612
  "text": "boolean"
28427
29613
  },
28428
29614
  "default": "false",
29615
+ "description": "Whether the device is on. Selects the on icon and the `On` state row instead of `Off`. Not named `on`, which Svelte binds as an event listener in markup (#1090).",
29616
+ "attribute": "turnedOn",
29617
+ "inheritedFrom": {
29618
+ "name": "ObcAbstractAutomationButtonSquared",
29619
+ "module": "src/automation/automation-button/abstract-automation-button-squared.ts"
29620
+ }
29621
+ },
29622
+ {
29623
+ "kind": "field",
29624
+ "name": "on",
29625
+ "type": {
29626
+ "text": "boolean | undefined"
29627
+ },
29628
+ "deprecated": "Use `turnedOn`.",
29629
+ "description": "Alias of `turnedOn` for 1.x markup: setting it sets `turnedOn`.",
28429
29630
  "attribute": "on",
28430
29631
  "inheritedFrom": {
28431
29632
  "name": "ObcAbstractAutomationButtonSquared",
@@ -28977,11 +30178,25 @@
28977
30178
  "fieldName": "alternativeIcon"
28978
30179
  },
28979
30180
  {
28980
- "name": "on",
30181
+ "name": "turnedOn",
28981
30182
  "type": {
28982
30183
  "text": "boolean"
28983
30184
  },
28984
30185
  "default": "false",
30186
+ "description": "Whether the device is on. Selects the on icon and the `On` state row instead of `Off`. Not named `on`, which Svelte binds as an event listener in markup (#1090).",
30187
+ "fieldName": "turnedOn",
30188
+ "inheritedFrom": {
30189
+ "name": "ObcAbstractAutomationButtonSquared",
30190
+ "module": "src/automation/automation-button/abstract-automation-button-squared.ts"
30191
+ }
30192
+ },
30193
+ {
30194
+ "name": "on",
30195
+ "type": {
30196
+ "text": "boolean | undefined"
30197
+ },
30198
+ "deprecated": "Use `turnedOn`.",
30199
+ "description": "Alias of `turnedOn` for 1.x markup: setting it sets `turnedOn`.",
28985
30200
  "fieldName": "on",
28986
30201
  "inheritedFrom": {
28987
30202
  "name": "ObcAbstractAutomationButtonSquared",
@@ -32901,11 +34116,26 @@
32901
34116
  },
32902
34117
  {
32903
34118
  "kind": "field",
32904
- "name": "on",
34119
+ "name": "turnedOn",
32905
34120
  "type": {
32906
34121
  "text": "boolean"
32907
34122
  },
32908
34123
  "default": "false",
34124
+ "description": "Whether the device is on. Selects the on icon and the `On` state row instead of `Off`. Not named `on`, which Svelte binds as an event listener in markup (#1090).",
34125
+ "attribute": "turnedOn",
34126
+ "inheritedFrom": {
34127
+ "name": "ObcAbstractAutomationButtonSquared",
34128
+ "module": "src/automation/automation-button/abstract-automation-button-squared.ts"
34129
+ }
34130
+ },
34131
+ {
34132
+ "kind": "field",
34133
+ "name": "on",
34134
+ "type": {
34135
+ "text": "boolean | undefined"
34136
+ },
34137
+ "deprecated": "Use `turnedOn`.",
34138
+ "description": "Alias of `turnedOn` for 1.x markup: setting it sets `turnedOn`.",
32909
34139
  "attribute": "on",
32910
34140
  "inheritedFrom": {
32911
34141
  "name": "ObcAbstractAutomationButtonSquared",
@@ -33457,11 +34687,25 @@
33457
34687
  "fieldName": "alternativeIcon"
33458
34688
  },
33459
34689
  {
33460
- "name": "on",
34690
+ "name": "turnedOn",
33461
34691
  "type": {
33462
34692
  "text": "boolean"
33463
34693
  },
33464
34694
  "default": "false",
34695
+ "description": "Whether the device is on. Selects the on icon and the `On` state row instead of `Off`. Not named `on`, which Svelte binds as an event listener in markup (#1090).",
34696
+ "fieldName": "turnedOn",
34697
+ "inheritedFrom": {
34698
+ "name": "ObcAbstractAutomationButtonSquared",
34699
+ "module": "src/automation/automation-button/abstract-automation-button-squared.ts"
34700
+ }
34701
+ },
34702
+ {
34703
+ "name": "on",
34704
+ "type": {
34705
+ "text": "boolean | undefined"
34706
+ },
34707
+ "deprecated": "Use `turnedOn`.",
34708
+ "description": "Alias of `turnedOn` for 1.x markup: setting it sets `turnedOn`.",
33465
34709
  "fieldName": "on",
33466
34710
  "inheritedFrom": {
33467
34711
  "name": "ObcAbstractAutomationButtonSquared",
@@ -33765,11 +35009,26 @@
33765
35009
  },
33766
35010
  {
33767
35011
  "kind": "field",
33768
- "name": "on",
35012
+ "name": "turnedOn",
33769
35013
  "type": {
33770
35014
  "text": "boolean"
33771
35015
  },
33772
35016
  "default": "false",
35017
+ "description": "Whether the device is on. Selects the on icon and the `On` state row instead of `Off`. Not named `on`, which Svelte binds as an event listener in markup (#1090).",
35018
+ "attribute": "turnedOn",
35019
+ "inheritedFrom": {
35020
+ "name": "ObcAbstractAutomationButtonSquared",
35021
+ "module": "src/automation/automation-button/abstract-automation-button-squared.ts"
35022
+ }
35023
+ },
35024
+ {
35025
+ "kind": "field",
35026
+ "name": "on",
35027
+ "type": {
35028
+ "text": "boolean | undefined"
35029
+ },
35030
+ "deprecated": "Use `turnedOn`.",
35031
+ "description": "Alias of `turnedOn` for 1.x markup: setting it sets `turnedOn`.",
33773
35032
  "attribute": "on",
33774
35033
  "inheritedFrom": {
33775
35034
  "name": "ObcAbstractAutomationButtonSquared",
@@ -34321,11 +35580,25 @@
34321
35580
  "fieldName": "alternativeIcon"
34322
35581
  },
34323
35582
  {
34324
- "name": "on",
35583
+ "name": "turnedOn",
34325
35584
  "type": {
34326
35585
  "text": "boolean"
34327
35586
  },
34328
35587
  "default": "false",
35588
+ "description": "Whether the device is on. Selects the on icon and the `On` state row instead of `Off`. Not named `on`, which Svelte binds as an event listener in markup (#1090).",
35589
+ "fieldName": "turnedOn",
35590
+ "inheritedFrom": {
35591
+ "name": "ObcAbstractAutomationButtonSquared",
35592
+ "module": "src/automation/automation-button/abstract-automation-button-squared.ts"
35593
+ }
35594
+ },
35595
+ {
35596
+ "name": "on",
35597
+ "type": {
35598
+ "text": "boolean | undefined"
35599
+ },
35600
+ "deprecated": "Use `turnedOn`.",
35601
+ "description": "Alias of `turnedOn` for 1.x markup: setting it sets `turnedOn`.",
34329
35602
  "fieldName": "on",
34330
35603
  "inheritedFrom": {
34331
35604
  "name": "ObcAbstractAutomationButtonSquared",
@@ -34630,11 +35903,26 @@
34630
35903
  },
34631
35904
  {
34632
35905
  "kind": "field",
34633
- "name": "on",
35906
+ "name": "turnedOn",
34634
35907
  "type": {
34635
35908
  "text": "boolean"
34636
35909
  },
34637
35910
  "default": "false",
35911
+ "description": "Whether the device is running. Selects the running icon and the speed readout instead of the `Off` state. Not named `on`, which Svelte binds as an event listener in markup (#1090).",
35912
+ "attribute": "turnedOn",
35913
+ "inheritedFrom": {
35914
+ "name": "ObcAbstractAutomationButtonMotorized",
35915
+ "module": "src/automation/automation-button/abstract-automation-button-motorized.ts"
35916
+ }
35917
+ },
35918
+ {
35919
+ "kind": "field",
35920
+ "name": "on",
35921
+ "type": {
35922
+ "text": "boolean | undefined"
35923
+ },
35924
+ "deprecated": "Use `turnedOn`.",
35925
+ "description": "Alias of `turnedOn` for 1.x markup: setting it sets `turnedOn`.",
34638
35926
  "attribute": "on",
34639
35927
  "inheritedFrom": {
34640
35928
  "name": "ObcAbstractAutomationButtonMotorized",
@@ -35253,11 +36541,25 @@
35253
36541
  "fieldName": "vertical"
35254
36542
  },
35255
36543
  {
35256
- "name": "on",
36544
+ "name": "turnedOn",
35257
36545
  "type": {
35258
36546
  "text": "boolean"
35259
36547
  },
35260
36548
  "default": "false",
36549
+ "description": "Whether the device is running. Selects the running icon and the speed readout instead of the `Off` state. Not named `on`, which Svelte binds as an event listener in markup (#1090).",
36550
+ "fieldName": "turnedOn",
36551
+ "inheritedFrom": {
36552
+ "name": "ObcAbstractAutomationButtonMotorized",
36553
+ "module": "src/automation/automation-button/abstract-automation-button-motorized.ts"
36554
+ }
36555
+ },
36556
+ {
36557
+ "name": "on",
36558
+ "type": {
36559
+ "text": "boolean | undefined"
36560
+ },
36561
+ "deprecated": "Use `turnedOn`.",
36562
+ "description": "Alias of `turnedOn` for 1.x markup: setting it sets `turnedOn`.",
35261
36563
  "fieldName": "on",
35262
36564
  "inheritedFrom": {
35263
36565
  "name": "ObcAbstractAutomationButtonMotorized",
@@ -35622,11 +36924,26 @@
35622
36924
  },
35623
36925
  {
35624
36926
  "kind": "field",
35625
- "name": "on",
36927
+ "name": "turnedOn",
35626
36928
  "type": {
35627
36929
  "text": "boolean"
35628
36930
  },
35629
36931
  "default": "false",
36932
+ "description": "Whether the device is running. Selects the running icon and the speed readout instead of the `Off` state. Not named `on`, which Svelte binds as an event listener in markup (#1090).",
36933
+ "attribute": "turnedOn",
36934
+ "inheritedFrom": {
36935
+ "name": "ObcAbstractAutomationButtonMotorized",
36936
+ "module": "src/automation/automation-button/abstract-automation-button-motorized.ts"
36937
+ }
36938
+ },
36939
+ {
36940
+ "kind": "field",
36941
+ "name": "on",
36942
+ "type": {
36943
+ "text": "boolean | undefined"
36944
+ },
36945
+ "deprecated": "Use `turnedOn`.",
36946
+ "description": "Alias of `turnedOn` for 1.x markup: setting it sets `turnedOn`.",
35630
36947
  "attribute": "on",
35631
36948
  "inheritedFrom": {
35632
36949
  "name": "ObcAbstractAutomationButtonMotorized",
@@ -36245,11 +37562,25 @@
36245
37562
  "fieldName": "vertical"
36246
37563
  },
36247
37564
  {
36248
- "name": "on",
37565
+ "name": "turnedOn",
36249
37566
  "type": {
36250
37567
  "text": "boolean"
36251
37568
  },
36252
37569
  "default": "false",
37570
+ "description": "Whether the device is running. Selects the running icon and the speed readout instead of the `Off` state. Not named `on`, which Svelte binds as an event listener in markup (#1090).",
37571
+ "fieldName": "turnedOn",
37572
+ "inheritedFrom": {
37573
+ "name": "ObcAbstractAutomationButtonMotorized",
37574
+ "module": "src/automation/automation-button/abstract-automation-button-motorized.ts"
37575
+ }
37576
+ },
37577
+ {
37578
+ "name": "on",
37579
+ "type": {
37580
+ "text": "boolean | undefined"
37581
+ },
37582
+ "deprecated": "Use `turnedOn`.",
37583
+ "description": "Alias of `turnedOn` for 1.x markup: setting it sets `turnedOn`.",
36253
37584
  "fieldName": "on",
36254
37585
  "inheritedFrom": {
36255
37586
  "name": "ObcAbstractAutomationButtonMotorized",
@@ -36613,11 +37944,26 @@
36613
37944
  },
36614
37945
  {
36615
37946
  "kind": "field",
36616
- "name": "on",
37947
+ "name": "turnedOn",
36617
37948
  "type": {
36618
37949
  "text": "boolean"
36619
37950
  },
36620
37951
  "default": "false",
37952
+ "description": "Whether the device is on. Selects the on icon and the `On` state row instead of `Off`. Not named `on`, which Svelte binds as an event listener in markup (#1090).",
37953
+ "attribute": "turnedOn",
37954
+ "inheritedFrom": {
37955
+ "name": "ObcAbstractAutomationButtonSquared",
37956
+ "module": "src/automation/automation-button/abstract-automation-button-squared.ts"
37957
+ }
37958
+ },
37959
+ {
37960
+ "kind": "field",
37961
+ "name": "on",
37962
+ "type": {
37963
+ "text": "boolean | undefined"
37964
+ },
37965
+ "deprecated": "Use `turnedOn`.",
37966
+ "description": "Alias of `turnedOn` for 1.x markup: setting it sets `turnedOn`.",
36621
37967
  "attribute": "on",
36622
37968
  "inheritedFrom": {
36623
37969
  "name": "ObcAbstractAutomationButtonSquared",
@@ -37169,11 +38515,25 @@
37169
38515
  "fieldName": "alternativeIcon"
37170
38516
  },
37171
38517
  {
37172
- "name": "on",
38518
+ "name": "turnedOn",
37173
38519
  "type": {
37174
38520
  "text": "boolean"
37175
38521
  },
37176
38522
  "default": "false",
38523
+ "description": "Whether the device is on. Selects the on icon and the `On` state row instead of `Off`. Not named `on`, which Svelte binds as an event listener in markup (#1090).",
38524
+ "fieldName": "turnedOn",
38525
+ "inheritedFrom": {
38526
+ "name": "ObcAbstractAutomationButtonSquared",
38527
+ "module": "src/automation/automation-button/abstract-automation-button-squared.ts"
38528
+ }
38529
+ },
38530
+ {
38531
+ "name": "on",
38532
+ "type": {
38533
+ "text": "boolean | undefined"
38534
+ },
38535
+ "deprecated": "Use `turnedOn`.",
38536
+ "description": "Alias of `turnedOn` for 1.x markup: setting it sets `turnedOn`.",
37177
38537
  "fieldName": "on",
37178
38538
  "inheritedFrom": {
37179
38539
  "name": "ObcAbstractAutomationButtonSquared",
@@ -37477,11 +38837,26 @@
37477
38837
  },
37478
38838
  {
37479
38839
  "kind": "field",
37480
- "name": "on",
38840
+ "name": "turnedOn",
37481
38841
  "type": {
37482
38842
  "text": "boolean"
37483
38843
  },
37484
38844
  "default": "false",
38845
+ "description": "Whether the device is on. Selects the on icon and the `On` state row instead of `Off`. Not named `on`, which Svelte binds as an event listener in markup (#1090).",
38846
+ "attribute": "turnedOn",
38847
+ "inheritedFrom": {
38848
+ "name": "ObcAbstractAutomationButtonSquared",
38849
+ "module": "src/automation/automation-button/abstract-automation-button-squared.ts"
38850
+ }
38851
+ },
38852
+ {
38853
+ "kind": "field",
38854
+ "name": "on",
38855
+ "type": {
38856
+ "text": "boolean | undefined"
38857
+ },
38858
+ "deprecated": "Use `turnedOn`.",
38859
+ "description": "Alias of `turnedOn` for 1.x markup: setting it sets `turnedOn`.",
37485
38860
  "attribute": "on",
37486
38861
  "inheritedFrom": {
37487
38862
  "name": "ObcAbstractAutomationButtonSquared",
@@ -38033,11 +39408,25 @@
38033
39408
  "fieldName": "alternativeIcon"
38034
39409
  },
38035
39410
  {
38036
- "name": "on",
39411
+ "name": "turnedOn",
38037
39412
  "type": {
38038
39413
  "text": "boolean"
38039
39414
  },
38040
39415
  "default": "false",
39416
+ "description": "Whether the device is on. Selects the on icon and the `On` state row instead of `Off`. Not named `on`, which Svelte binds as an event listener in markup (#1090).",
39417
+ "fieldName": "turnedOn",
39418
+ "inheritedFrom": {
39419
+ "name": "ObcAbstractAutomationButtonSquared",
39420
+ "module": "src/automation/automation-button/abstract-automation-button-squared.ts"
39421
+ }
39422
+ },
39423
+ {
39424
+ "name": "on",
39425
+ "type": {
39426
+ "text": "boolean | undefined"
39427
+ },
39428
+ "deprecated": "Use `turnedOn`.",
39429
+ "description": "Alias of `turnedOn` for 1.x markup: setting it sets `turnedOn`.",
38041
39430
  "fieldName": "on",
38042
39431
  "inheritedFrom": {
38043
39432
  "name": "ObcAbstractAutomationButtonSquared",
@@ -38533,11 +39922,26 @@
38533
39922
  },
38534
39923
  {
38535
39924
  "kind": "field",
38536
- "name": "on",
39925
+ "name": "turnedOn",
38537
39926
  "type": {
38538
39927
  "text": "boolean"
38539
39928
  },
38540
39929
  "default": "false",
39930
+ "description": "Whether the device is on. Selects the on icon and the `On` state row instead of `Off`. Not named `on`, which Svelte binds as an event listener in markup (#1090).",
39931
+ "attribute": "turnedOn",
39932
+ "inheritedFrom": {
39933
+ "name": "ObcAbstractAutomationButtonSquared",
39934
+ "module": "src/automation/automation-button/abstract-automation-button-squared.ts"
39935
+ }
39936
+ },
39937
+ {
39938
+ "kind": "field",
39939
+ "name": "on",
39940
+ "type": {
39941
+ "text": "boolean | undefined"
39942
+ },
39943
+ "deprecated": "Use `turnedOn`.",
39944
+ "description": "Alias of `turnedOn` for 1.x markup: setting it sets `turnedOn`.",
38541
39945
  "attribute": "on",
38542
39946
  "inheritedFrom": {
38543
39947
  "name": "ObcAbstractAutomationButtonSquared",
@@ -39089,11 +40493,25 @@
39089
40493
  "fieldName": "alternativeIcon"
39090
40494
  },
39091
40495
  {
39092
- "name": "on",
40496
+ "name": "turnedOn",
39093
40497
  "type": {
39094
40498
  "text": "boolean"
39095
40499
  },
39096
40500
  "default": "false",
40501
+ "description": "Whether the device is on. Selects the on icon and the `On` state row instead of `Off`. Not named `on`, which Svelte binds as an event listener in markup (#1090).",
40502
+ "fieldName": "turnedOn",
40503
+ "inheritedFrom": {
40504
+ "name": "ObcAbstractAutomationButtonSquared",
40505
+ "module": "src/automation/automation-button/abstract-automation-button-squared.ts"
40506
+ }
40507
+ },
40508
+ {
40509
+ "name": "on",
40510
+ "type": {
40511
+ "text": "boolean | undefined"
40512
+ },
40513
+ "deprecated": "Use `turnedOn`.",
40514
+ "description": "Alias of `turnedOn` for 1.x markup: setting it sets `turnedOn`.",
39097
40515
  "fieldName": "on",
39098
40516
  "inheritedFrom": {
39099
40517
  "name": "ObcAbstractAutomationButtonSquared",
@@ -39904,11 +41322,26 @@
39904
41322
  },
39905
41323
  {
39906
41324
  "kind": "field",
39907
- "name": "on",
41325
+ "name": "turnedOn",
39908
41326
  "type": {
39909
41327
  "text": "boolean"
39910
41328
  },
39911
41329
  "default": "false",
41330
+ "description": "Whether the device is on. Selects the on icon and the `On` state row instead of `Off`. Not named `on`, which Svelte binds as an event listener in markup (#1090).",
41331
+ "attribute": "turnedOn",
41332
+ "inheritedFrom": {
41333
+ "name": "ObcAbstractAutomationButtonSquared",
41334
+ "module": "src/automation/automation-button/abstract-automation-button-squared.ts"
41335
+ }
41336
+ },
41337
+ {
41338
+ "kind": "field",
41339
+ "name": "on",
41340
+ "type": {
41341
+ "text": "boolean | undefined"
41342
+ },
41343
+ "deprecated": "Use `turnedOn`.",
41344
+ "description": "Alias of `turnedOn` for 1.x markup: setting it sets `turnedOn`.",
39912
41345
  "attribute": "on",
39913
41346
  "inheritedFrom": {
39914
41347
  "name": "ObcAbstractAutomationButtonSquared",
@@ -40460,11 +41893,25 @@
40460
41893
  "fieldName": "alternativeIcon"
40461
41894
  },
40462
41895
  {
40463
- "name": "on",
41896
+ "name": "turnedOn",
40464
41897
  "type": {
40465
41898
  "text": "boolean"
40466
41899
  },
40467
41900
  "default": "false",
41901
+ "description": "Whether the device is on. Selects the on icon and the `On` state row instead of `Off`. Not named `on`, which Svelte binds as an event listener in markup (#1090).",
41902
+ "fieldName": "turnedOn",
41903
+ "inheritedFrom": {
41904
+ "name": "ObcAbstractAutomationButtonSquared",
41905
+ "module": "src/automation/automation-button/abstract-automation-button-squared.ts"
41906
+ }
41907
+ },
41908
+ {
41909
+ "name": "on",
41910
+ "type": {
41911
+ "text": "boolean | undefined"
41912
+ },
41913
+ "deprecated": "Use `turnedOn`.",
41914
+ "description": "Alias of `turnedOn` for 1.x markup: setting it sets `turnedOn`.",
40468
41915
  "fieldName": "on",
40469
41916
  "inheritedFrom": {
40470
41917
  "name": "ObcAbstractAutomationButtonSquared",
@@ -40853,11 +42300,26 @@
40853
42300
  },
40854
42301
  {
40855
42302
  "kind": "field",
40856
- "name": "on",
42303
+ "name": "turnedOn",
40857
42304
  "type": {
40858
42305
  "text": "boolean"
40859
42306
  },
40860
42307
  "default": "false",
42308
+ "description": "Whether the device is on. Selects the on icon and the `On` state row instead of `Off`. Not named `on`, which Svelte binds as an event listener in markup (#1090).",
42309
+ "attribute": "turnedOn",
42310
+ "inheritedFrom": {
42311
+ "name": "ObcAbstractAutomationButtonSquared",
42312
+ "module": "src/automation/automation-button/abstract-automation-button-squared.ts"
42313
+ }
42314
+ },
42315
+ {
42316
+ "kind": "field",
42317
+ "name": "on",
42318
+ "type": {
42319
+ "text": "boolean | undefined"
42320
+ },
42321
+ "deprecated": "Use `turnedOn`.",
42322
+ "description": "Alias of `turnedOn` for 1.x markup: setting it sets `turnedOn`.",
40861
42323
  "attribute": "on",
40862
42324
  "inheritedFrom": {
40863
42325
  "name": "ObcAbstractAutomationButtonSquared",
@@ -41409,11 +42871,25 @@
41409
42871
  "fieldName": "alternativeIcon"
41410
42872
  },
41411
42873
  {
41412
- "name": "on",
42874
+ "name": "turnedOn",
41413
42875
  "type": {
41414
42876
  "text": "boolean"
41415
42877
  },
41416
42878
  "default": "false",
42879
+ "description": "Whether the device is on. Selects the on icon and the `On` state row instead of `Off`. Not named `on`, which Svelte binds as an event listener in markup (#1090).",
42880
+ "fieldName": "turnedOn",
42881
+ "inheritedFrom": {
42882
+ "name": "ObcAbstractAutomationButtonSquared",
42883
+ "module": "src/automation/automation-button/abstract-automation-button-squared.ts"
42884
+ }
42885
+ },
42886
+ {
42887
+ "name": "on",
42888
+ "type": {
42889
+ "text": "boolean | undefined"
42890
+ },
42891
+ "deprecated": "Use `turnedOn`.",
42892
+ "description": "Alias of `turnedOn` for 1.x markup: setting it sets `turnedOn`.",
41417
42893
  "fieldName": "on",
41418
42894
  "inheritedFrom": {
41419
42895
  "name": "ObcAbstractAutomationButtonSquared",