@oicl/openbridge-webcomponents-full-bundle 2.0.0-next.117 → 2.0.0-next.118

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 (111) hide show
  1. package/bundle/openbridge-webcomponents.bundle.js +37 -33
  2. package/bundle/openbridge-webcomponents.bundle.js.map +1 -1
  3. package/custom-elements.json +28 -23
  4. package/dist/ar/poi/poi-base.d.ts +6 -0
  5. package/dist/ar/poi/poi-base.d.ts.map +1 -1
  6. package/dist/ar/poi/poi-base.js.map +1 -1
  7. package/dist/ar/poi-button/poi-button.d.ts +2 -2
  8. package/dist/ar/poi-button/poi-button.js.map +1 -1
  9. package/dist/components/accordion-card/accordion-card.d.ts.map +1 -1
  10. package/dist/components/accordion-card/accordion-card.js.map +1 -1
  11. package/dist/components/advice-message-item/advice-message-item.d.ts +4 -2
  12. package/dist/components/advice-message-item/advice-message-item.d.ts.map +1 -1
  13. package/dist/components/advice-message-item/advice-message-item.js +4 -2
  14. package/dist/components/advice-message-item/advice-message-item.js.map +1 -1
  15. package/dist/components/app-menu/app-menu.d.ts +1 -1
  16. package/dist/components/app-menu/app-menu.js +1 -1
  17. package/dist/components/app-menu/app-menu.js.map +1 -1
  18. package/dist/components/brilliance-menu/brilliance-menu.d.ts +8 -4
  19. package/dist/components/brilliance-menu/brilliance-menu.d.ts.map +1 -1
  20. package/dist/components/brilliance-menu/brilliance-menu.js +8 -4
  21. package/dist/components/brilliance-menu/brilliance-menu.js.map +1 -1
  22. package/dist/components/check-button/check-button.js.map +1 -1
  23. package/dist/components/checkbox/checkbox.d.ts +2 -2
  24. package/dist/components/checkbox/checkbox.js.map +1 -1
  25. package/dist/components/command-menu/command-menu.d.ts +1 -1
  26. package/dist/components/command-menu/command-menu.js +1 -1
  27. package/dist/components/command-menu/command-menu.js.map +1 -1
  28. package/dist/components/dropdown-button/dropdown-button.d.ts +2 -2
  29. package/dist/components/dropdown-button/dropdown-button.js +2 -2
  30. package/dist/components/dropdown-button/dropdown-button.js.map +1 -1
  31. package/dist/components/menu-button/menu-button.d.ts.map +1 -1
  32. package/dist/components/menu-button/menu-button.js.map +1 -1
  33. package/dist/components/navigation-item/navigation-item.d.ts +1 -5
  34. package/dist/components/navigation-item/navigation-item.d.ts.map +1 -1
  35. package/dist/components/navigation-item/navigation-item.js +0 -8
  36. package/dist/components/navigation-item/navigation-item.js.map +1 -1
  37. package/dist/components/navigation-item-group/navigation-item-group.d.ts +2 -1
  38. package/dist/components/navigation-item-group/navigation-item-group.d.ts.map +1 -1
  39. package/dist/components/navigation-item-group/navigation-item-group.js +2 -1
  40. package/dist/components/navigation-item-group/navigation-item-group.js.map +1 -1
  41. package/dist/components/notification-button/notification-button.d.ts +1 -1
  42. package/dist/components/notification-button/notification-button.js +1 -1
  43. package/dist/components/notification-button/notification-button.js.map +1 -1
  44. package/dist/components/notification-message-item/notification-message-item.d.ts +4 -2
  45. package/dist/components/notification-message-item/notification-message-item.d.ts.map +1 -1
  46. package/dist/components/notification-message-item/notification-message-item.js +4 -2
  47. package/dist/components/notification-message-item/notification-message-item.js.map +1 -1
  48. package/dist/components/pivot-item/pivot-item.d.ts +1 -1
  49. package/dist/components/pivot-item/pivot-item.js +1 -1
  50. package/dist/components/pivot-item/pivot-item.js.map +1 -1
  51. package/dist/components/slide-button/slide-button.d.ts.map +1 -1
  52. package/dist/components/slide-button/slide-button.js.map +1 -1
  53. package/dist/components/slider/slider.d.ts +2 -2
  54. package/dist/components/slider/slider.js +2 -2
  55. package/dist/components/slider/slider.js.map +1 -1
  56. package/dist/components/slider-double/slider-double.d.ts +2 -2
  57. package/dist/components/slider-double/slider-double.js +2 -2
  58. package/dist/components/slider-double/slider-double.js.map +1 -1
  59. package/dist/components/stepper-box/stepper-box.d.ts +4 -2
  60. package/dist/components/stepper-box/stepper-box.d.ts.map +1 -1
  61. package/dist/components/stepper-box/stepper-box.js +4 -2
  62. package/dist/components/stepper-box/stepper-box.js.map +1 -1
  63. package/dist/components/system-button/system-button.d.ts +1 -1
  64. package/dist/components/system-button/system-button.js +1 -1
  65. package/dist/components/system-button/system-button.js.map +1 -1
  66. package/dist/components/tabbed-card/tabbed-card.d.ts.map +1 -1
  67. package/dist/components/tabbed-card/tabbed-card.js.map +1 -1
  68. package/dist/components/toggle-button-option/toggle-button-option.d.ts +2 -1
  69. package/dist/components/toggle-button-option/toggle-button-option.d.ts.map +1 -1
  70. package/dist/components/toggle-button-option/toggle-button-option.js +2 -1
  71. package/dist/components/toggle-button-option/toggle-button-option.js.map +1 -1
  72. package/dist/components/toggle-button-vertical-group/toggle-button-vertical-group.js.map +1 -1
  73. package/dist/components/toggle-switch/toggle-switch.d.ts +1 -1
  74. package/dist/components/toggle-switch/toggle-switch.js +1 -1
  75. package/dist/components/toggle-switch/toggle-switch.js.map +1 -1
  76. package/dist/components/top-bar/top-bar.d.ts.map +1 -1
  77. package/dist/components/top-bar/top-bar.js.map +1 -1
  78. package/dist/components/topbar-message-item/topbar-message-item.js.map +1 -1
  79. package/dist/integration-systems/integration-dropdown-button/integration-dropdown-button.d.ts +1 -1
  80. package/dist/integration-systems/integration-dropdown-button/integration-dropdown-button.js +1 -1
  81. package/dist/integration-systems/integration-dropdown-button/integration-dropdown-button.js.map +1 -1
  82. package/package.json +1 -1
  83. package/script/check-slot-event-docs.ts +36 -3
  84. package/src/ar/poi/poi-base.ts +6 -0
  85. package/src/ar/poi-button/poi-button.ts +2 -2
  86. package/src/components/accordion-card/accordion-card.ts +2 -1
  87. package/src/components/advice-message-item/advice-message-item.ts +4 -2
  88. package/src/components/app-menu/app-menu.ts +1 -1
  89. package/src/components/brilliance-menu/brilliance-menu.ts +8 -4
  90. package/src/components/check-button/check-button.ts +1 -1
  91. package/src/components/checkbox/checkbox.ts +2 -2
  92. package/src/components/command-menu/command-menu.ts +1 -1
  93. package/src/components/dropdown-button/dropdown-button.ts +2 -2
  94. package/src/components/menu-button/menu-button.ts +8 -4
  95. package/src/components/navigation-item/navigation-item.ts +1 -10
  96. package/src/components/navigation-item-group/navigation-item-group.ts +2 -1
  97. package/src/components/notification-button/notification-button.ts +1 -1
  98. package/src/components/notification-message-item/notification-message-item.ts +4 -2
  99. package/src/components/pivot-item/pivot-item.ts +1 -1
  100. package/src/components/slide-button/slide-button.ts +2 -1
  101. package/src/components/slider/slider.ts +2 -2
  102. package/src/components/slider-double/slider-double.ts +2 -2
  103. package/src/components/stepper-box/stepper-box.ts +4 -2
  104. package/src/components/system-button/system-button.ts +5 -5
  105. package/src/components/tabbed-card/tabbed-card.ts +2 -1
  106. package/src/components/toggle-button-option/toggle-button-option.ts +2 -1
  107. package/src/components/toggle-button-vertical-group/toggle-button-vertical-group.ts +2 -2
  108. package/src/components/toggle-switch/toggle-switch.ts +1 -1
  109. package/src/components/top-bar/top-bar.ts +8 -4
  110. package/src/components/topbar-message-item/topbar-message-item.ts +2 -2
  111. package/src/integration-systems/integration-dropdown-button/integration-dropdown-button.ts +1 -1
@@ -3279,7 +3279,7 @@
3279
3279
  "declarations": [
3280
3280
  {
3281
3281
  "kind": "class",
3282
- "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 does not emit custom events.\n- Emits a standard `click` event (`onClick` handler in framework wrappers) when activated.\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```",
3282
+ "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```",
3283
3283
  "name": "ObcPoiButton",
3284
3284
  "slots": [
3285
3285
  {
@@ -41915,12 +41915,14 @@
41915
41915
  {
41916
41916
  "kind": "method",
41917
41917
  "name": "handleMessageClick",
41918
- "privacy": "private"
41918
+ "privacy": "private",
41919
+ "description": "Fired when the main message area is clicked."
41919
41920
  },
41920
41921
  {
41921
41922
  "kind": "method",
41922
41923
  "name": "handleActionClick",
41923
- "privacy": "private"
41924
+ "privacy": "private",
41925
+ "description": "Fired when the action button (text or icon) is clicked."
41924
41926
  }
41925
41927
  ],
41926
41928
  "events": [
@@ -45375,7 +45377,8 @@
45375
45377
  "text": "CustomEvent"
45376
45378
  }
45377
45379
  }
45378
- ]
45380
+ ],
45381
+ "description": "Handles palette selection changes and emits `palette-changed`."
45379
45382
  },
45380
45383
  {
45381
45384
  "kind": "method",
@@ -45387,7 +45390,8 @@
45387
45390
  "text": "CustomEvent"
45388
45391
  }
45389
45392
  }
45390
- ]
45393
+ ],
45394
+ "description": "Handles brightness slider changes and emits `brightness-changed`."
45391
45395
  },
45392
45396
  {
45393
45397
  "kind": "method",
@@ -45421,7 +45425,8 @@
45421
45425
  "text": "CustomEvent"
45422
45426
  }
45423
45427
  }
45424
- ]
45428
+ ],
45429
+ "description": "Handles link palette changes and emits `link-palette-changed`."
45425
45430
  },
45426
45431
  {
45427
45432
  "kind": "method",
@@ -45433,7 +45438,8 @@
45433
45438
  "text": "CustomEvent"
45434
45439
  }
45435
45440
  }
45436
- ]
45441
+ ],
45442
+ "description": "Handles link brightness changes and emits `link-brightness-changed`."
45437
45443
  },
45438
45444
  {
45439
45445
  "kind": "field",
@@ -47360,14 +47366,14 @@
47360
47366
  "type": {
47361
47367
  "text": "ObcCheckboxChangeEvent"
47362
47368
  },
47363
- "description": "Emitted when the disabled state changes."
47369
+ "description": "Emitted when the disabled state changes."
47364
47370
  },
47365
47371
  {
47366
47372
  "name": "change",
47367
47373
  "type": {
47368
47374
  "text": "ObcCheckboxChangeEvent"
47369
47375
  },
47370
- "description": "Emitted when the status changes."
47376
+ "description": "Emitted when the status changes."
47371
47377
  }
47372
47378
  ],
47373
47379
  "attributes": [
@@ -54097,7 +54103,8 @@
54097
54103
  },
54098
54104
  {
54099
54105
  "kind": "method",
54100
- "name": "open"
54106
+ "name": "open",
54107
+ "description": "Opens the flyout panel and emits the `open` event."
54101
54108
  },
54102
54109
  {
54103
54110
  "kind": "method",
@@ -54403,10 +54410,6 @@
54403
54410
  },
54404
54411
  "privacy": "private"
54405
54412
  },
54406
- {
54407
- "kind": "method",
54408
- "name": "onClick"
54409
- },
54410
54413
  {
54411
54414
  "kind": "method",
54412
54415
  "name": "handleKeydown",
@@ -54462,10 +54465,7 @@
54462
54465
  ],
54463
54466
  "events": [
54464
54467
  {
54465
- "type": {
54466
- "text": "CustomEvent<void>"
54467
- },
54468
- "description": "Fired when the navigation item is clicked.",
54468
+ "description": "Fired when the navigation item is clicked, either as a link or as a button.",
54469
54469
  "name": "click"
54470
54470
  }
54471
54471
  ],
@@ -55935,12 +55935,14 @@
55935
55935
  {
55936
55936
  "kind": "method",
55937
55937
  "name": "handleMessageClick",
55938
- "privacy": "private"
55938
+ "privacy": "private",
55939
+ "description": "Fired when the notification item is clicked (excluding the action area)."
55939
55940
  },
55940
55941
  {
55941
55942
  "kind": "method",
55942
55943
  "name": "handleActionClick",
55943
- "privacy": "private"
55944
+ "privacy": "private",
55945
+ "description": "Fired when the action button or icon is clicked."
55944
55946
  }
55945
55947
  ],
55946
55948
  "events": [
@@ -63302,11 +63304,13 @@
63302
63304
  },
63303
63305
  {
63304
63306
  "kind": "method",
63305
- "name": "down"
63307
+ "name": "down",
63308
+ "description": "Dispatches the `down` event when the decrement button is clicked."
63306
63309
  },
63307
63310
  {
63308
63311
  "kind": "method",
63309
- "name": "up"
63312
+ "name": "up",
63313
+ "description": "Dispatches the `up` event when the increment button is clicked."
63310
63314
  }
63311
63315
  ],
63312
63316
  "events": [
@@ -68517,7 +68521,8 @@
68517
68521
  "text": "Event"
68518
68522
  }
68519
68523
  }
68520
- ]
68524
+ ],
68525
+ "description": "Fired when the option is clicked and not already selected."
68521
68526
  }
68522
68527
  ],
68523
68528
  "events": [
@@ -16,6 +16,12 @@ type VisualElementPreference = PoiDataVisualRectPreference.Group | PoiDataVisual
16
16
  * layout-change dispatch, and visual-query logic so that each variant
17
17
  * only needs to override `renderContent()` and `getVisualNodes()`.
18
18
  *
19
+ * The `@fires` tag below documents the dispatch site, which lives here rather
20
+ * than in the variants. It is deliberately duplicated on each concrete
21
+ * subclass — that is where `custom-elements.json` and the framework wrappers
22
+ * pick the event up, since this class is not registered. Do not remove it from
23
+ * the subclasses. `@ignore` keeps this class out of the generated docs.
24
+ *
19
25
  * @fires {CustomEvent<void>} obc-poi-data-layout-change - Fired when layout-driving properties change. Bubbles and is composed.
20
26
  * @ignore
21
27
  */
@@ -1 +1 @@
1
- {"version":3,"file":"poi-base.d.ts","sourceRoot":"","sources":["../../../src/ar/poi/poi-base.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"poi-base.d.ts","sourceRoot":"","sources":["../../../src/ar/poi/poi-base.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"poi-base.js","sources":["../../../src/ar/poi/poi-base.ts"],"sourcesContent":["import {LitElement, TemplateResult, html, unsafeCSS} from 'lit';\nimport {property} from 'lit/decorators.js';\nimport componentStyle from './poi-base.css?inline';\nimport './poi.js';\nimport {\n ObcPoiButtonType,\n ObcPoiButtonDataItem,\n} from '../poi-button/poi-button.js';\nimport {ObcPoiHeaderState} from '../building-blocks/poi-header/poi-header.js';\nimport {ObcPoiState, ObcPoiType, ObcPoiValue} from './poi.js';\nimport {\n ObcPoiPointerState,\n ObcPoiPointerType,\n} from '../building-blocks/poi-pointer/poi-pointer.js';\nimport {POI_ATTR, Poi, PoiDataVisualRectPreference} from './poi.js';\nexport {ObcPoiValue as PoiBaseValue};\nexport {PoiDataVisualRectPreference as PoiBaseVisualRectPreference};\n\n/** @internal */\ntype VisualElementPreference =\n | PoiDataVisualRectPreference.Group\n | PoiDataVisualRectPreference.Anchor\n | PoiDataVisualRectPreference.Size;\n\nfunction stripWhitespaceTextNodes(el: Element): void {\n for (const node of Array.from(el.childNodes)) {\n if (\n node.nodeType === Node.TEXT_NODE &&\n (node.textContent ?? '').trim() === ''\n ) {\n node.remove();\n }\n }\n}\n\nconst X_FILTER_CUTOFF_HZ = 16;\nconst X_FILTER_DEADBAND_PX = 0.1;\nconst X_MOVING_HINT_MS = 120;\nconst VALID_POI_TYPES = new Set(Object.values(ObcPoiType));\nconst VALID_POI_STATES = new Set(Object.values(ObcPoiState));\n\n/**\n * Shared base class for top-level POI variant components (`obc-poi-data`,\n * `obc-poi-aton`, `obc-poi-vessel`).\n *\n * Implements `Poi` and contains all positioning, X-filter,\n * layout-change dispatch, and visual-query logic so that each variant\n * only needs to override `renderContent()` and `getVisualNodes()`.\n *\n * @fires {CustomEvent<void>} obc-poi-data-layout-change - Fired when layout-driving properties change. Bubbles and is composed.\n * @ignore\n */\nexport class PoiBase extends LitElement implements Poi {\n private headerObserver?: MutationObserver;\n private _buttonOffsetX = 0;\n private _targetOffsetX = 0;\n\n override connectedCallback() {\n stripWhitespaceTextNodes(this);\n super.connectedCallback();\n this.setAttribute(POI_ATTR, '');\n this.setupHeaderObserver();\n }\n\n /* ---------- POI marker properties ---------- */\n\n @property({type: String}) type: ObcPoiType = ObcPoiType.Line;\n @property({type: String}) value: ObcPoiValue = ObcPoiValue.Unchecked;\n @property({type: String}) state: ObcPoiState = ObcPoiState.Enabled;\n @property({type: Boolean}) selected = false;\n @property({type: String, attribute: 'button-type'})\n buttonType = ObcPoiButtonType.Button;\n @property({type: Boolean, attribute: 'overlap-opaque'})\n overlapOpaque = false;\n @property({type: Array, attribute: false})\n data: ObcPoiButtonDataItem[] = [];\n @property({type: Boolean, attribute: 'has-header'}) hasHeader = false;\n @property({type: String, attribute: 'header-content'}) headerContent = '';\n @property({type: Boolean}) hasPointer = false;\n @property({type: String, attribute: 'pointer-type'})\n pointerType: ObcPoiPointerType | null = null;\n @property({type: String, attribute: 'pointer-state'})\n pointerState: ObcPoiPointerState | null = null;\n @property({type: Number}) relativeDirection = 0;\n\n /* ---------- Poi — position ---------- */\n\n @property({type: Number}) x = 0;\n @property({type: Number}) y = 192;\n @property({type: Number, attribute: 'button-y'}) buttonY: number | null = 0;\n @property({type: Boolean, attribute: 'fixed-target'}) fixedTarget = false;\n @property({type: Number, attribute: 'box-width'}) boxWidth: number | null =\n null;\n @property({type: Number, attribute: 'box-height'}) boxHeight: number | null =\n null;\n @property({type: Number, attribute: 'outside-angle'}) outsideAngle = 315;\n @property({type: Boolean, attribute: 'animate-position'})\n animatePosition = false;\n\n @property({type: Number, attribute: 'button-offset-x'})\n get buttonOffsetX(): number {\n return this._buttonOffsetX;\n }\n\n set buttonOffsetX(value: number) {\n const nextValue = Number.isFinite(value) ? value : 0;\n const oldValue = this._buttonOffsetX;\n if (oldValue === nextValue) {\n return;\n }\n\n this._buttonOffsetX = nextValue;\n this.requestUpdate('buttonOffsetX', oldValue);\n }\n\n @property({type: Number, attribute: 'target-offset-x'})\n get targetOffsetX(): number {\n return this._targetOffsetX;\n }\n\n set targetOffsetX(value: number) {\n const nextValue = Number.isFinite(value) ? value : 0;\n const oldValue = this._targetOffsetX;\n if (oldValue === nextValue) {\n return;\n }\n\n this._targetOffsetX = nextValue;\n this.requestUpdate('targetOffsetX', oldValue);\n }\n\n /* ---------- X-filter state ---------- */\n\n private filteredX = 0;\n private xFilterTarget = 0;\n private xFilterInitialized = false;\n private lastXFilterTimestampMs = 0;\n private xFilterRaf = 0;\n private xMovingHintTimeout: number | null = null;\n\n /* ---------- Layout change ---------- */\n\n private dispatchLayoutChange() {\n this.dispatchEvent(\n new CustomEvent('obc-poi-data-layout-change', {\n bubbles: true,\n composed: true,\n })\n );\n }\n\n /* ---------- X filter (low-pass) ---------- */\n\n private stepXFilter = (nowMs: number) => {\n this.xFilterRaf = 0;\n if (!this.isConnected || !this.xFilterInitialized) {\n return;\n }\n\n const dtSeconds =\n this.lastXFilterTimestampMs > 0\n ? Math.min(\n 0.25,\n Math.max(1 / 120, (nowMs - this.lastXFilterTimestampMs) / 1000)\n )\n : 1 / 60;\n this.lastXFilterTimestampMs = nowMs;\n\n const alpha = 1 - Math.exp(-2 * Math.PI * X_FILTER_CUTOFF_HZ * dtSeconds);\n const delta = this.xFilterTarget - this.filteredX;\n const nextX =\n Math.abs(delta) <= X_FILTER_DEADBAND_PX\n ? this.xFilterTarget\n : this.filteredX + delta * alpha;\n const changed = Math.abs(nextX - this.filteredX) > 1e-6;\n this.filteredX = nextX;\n if (changed) {\n this.style.setProperty('--obc-poi-data-x', `${this.filteredX}px`);\n this.dispatchLayoutChange();\n }\n\n const settled =\n Math.abs(this.xFilterTarget - this.filteredX) <= X_FILTER_DEADBAND_PX;\n\n if (settled) {\n this.filteredX = this.xFilterTarget;\n this.style.setProperty('--obc-poi-data-x', `${this.filteredX}px`);\n this.lastXFilterTimestampMs = 0;\n this.markXMoving();\n return;\n }\n\n this.markXMoving();\n this.xFilterRaf = requestAnimationFrame(this.stepXFilter);\n };\n\n private syncXFilterTarget(nextX: number) {\n this.xFilterTarget = nextX;\n\n if (!this.xFilterInitialized) {\n this.xFilterInitialized = true;\n this.filteredX = nextX;\n this.style.setProperty('--obc-poi-data-x', `${this.filteredX}px`);\n this.markXMoving();\n return;\n }\n\n if (Math.abs(nextX - this.filteredX) <= X_FILTER_DEADBAND_PX) {\n this.filteredX = this.xFilterTarget;\n this.style.setProperty('--obc-poi-data-x', `${this.filteredX}px`);\n if (this.xFilterRaf) {\n cancelAnimationFrame(this.xFilterRaf);\n this.xFilterRaf = 0;\n }\n this.lastXFilterTimestampMs = 0;\n this.markXMoving();\n return;\n }\n\n if (!this.xFilterRaf) {\n this.lastXFilterTimestampMs = 0;\n this.markXMoving();\n this.xFilterRaf = requestAnimationFrame(this.stepXFilter);\n }\n }\n\n private markXMoving() {\n this.setAttribute('data-x-moving', 'true');\n if (this.xMovingHintTimeout !== null) {\n window.clearTimeout(this.xMovingHintTimeout);\n }\n this.xMovingHintTimeout = window.setTimeout(() => {\n this.removeAttribute('data-x-moving');\n this.xMovingHintTimeout = null;\n }, X_MOVING_HINT_MS);\n }\n\n /* ---------- Lifecycle ---------- */\n\n override disconnectedCallback() {\n super.disconnectedCallback();\n this.headerObserver?.disconnect();\n this.headerObserver = undefined;\n if (this.xFilterRaf) {\n cancelAnimationFrame(this.xFilterRaf);\n this.xFilterRaf = 0;\n }\n this.lastXFilterTimestampMs = 0;\n if (this.xMovingHintTimeout !== null) {\n window.clearTimeout(this.xMovingHintTimeout);\n this.xMovingHintTimeout = null;\n }\n }\n\n private setupHeaderObserver() {\n this.headerObserver?.disconnect();\n this.headerObserver = new MutationObserver((mutations) => {\n for (const mutation of mutations) {\n if (mutation.type === 'childList') {\n this.syncHeaderContent();\n this.syncHeaderState();\n return;\n }\n if (\n mutation.type === 'attributes' &&\n mutation.target instanceof HTMLElement &&\n mutation.target.getAttribute('slot') === 'header'\n ) {\n this.syncHeaderContent();\n this.syncHeaderState();\n return;\n }\n }\n });\n this.headerObserver.observe(this, {\n childList: true,\n attributes: true,\n attributeFilter: ['slot'],\n });\n }\n\n override updated(changedProperties: Map<string, unknown>) {\n if (changedProperties.has('x')) {\n this.syncXFilterTarget(Number.isFinite(this.x) ? this.x : 0);\n }\n if (\n changedProperties.has('buttonY') ||\n changedProperties.has('y') ||\n changedProperties.has('fixedTarget') ||\n changedProperties.has('selected') ||\n changedProperties.has('type')\n ) {\n this.updatePosition();\n this.syncInnerPoiLayout();\n }\n if (\n changedProperties.has('x') ||\n changedProperties.has('buttonY') ||\n changedProperties.has('y') ||\n changedProperties.has('buttonOffsetX') ||\n changedProperties.has('targetOffsetX') ||\n changedProperties.has('fixedTarget') ||\n changedProperties.has('selected') ||\n changedProperties.has('type')\n ) {\n this.dispatchLayoutChange();\n }\n this.syncHeaderContent();\n this.syncHeaderState();\n }\n\n protected override firstUpdated(_changedProperties: Map<string, unknown>) {\n this.syncHeaderContent();\n this.syncHeaderState();\n }\n\n /* ---------- Vertical positioning ---------- */\n\n private updatePosition() {\n if (this.fixedTarget) {\n if (Number.isFinite(this.resolvedButtonY)) {\n this.style.top = `${this.resolvedButtonY - this.resolvedTargetY}px`;\n } else {\n this.style.removeProperty('top');\n }\n } else {\n this.style.removeProperty('top');\n }\n }\n\n protected get selectedVerticalOffset(): number {\n if (!this.selected) {\n return 0;\n }\n const offset = getComputedStyle(this).getPropertyValue(\n '--obc-poi-target-selected-vertical-offset'\n );\n const parsed = Number.parseFloat(offset);\n return Number.isFinite(parsed) ? parsed : 0;\n }\n\n protected get resolvedPoiType(): ObcPoiType {\n return VALID_POI_TYPES.has(this.type as ObcPoiType)\n ? (this.type as ObcPoiType)\n : ObcPoiType.Line;\n }\n\n protected get resolvedPoiState(): ObcPoiState {\n return VALID_POI_STATES.has(this.state as ObcPoiState)\n ? (this.state as ObcPoiState)\n : ObcPoiState.Enabled;\n }\n\n /* ---------- Poi — visual query ---------- */\n\n /**\n * Override in each variant to query the correct inner component tag names.\n * Returns the poi wrapper element and poi-button element from the shadow DOM.\n */\n protected getVisualNodes(): {\n poi: HTMLElement | null;\n button: HTMLElement | null;\n wrapper: HTMLElement | null;\n buttonWrapper: HTMLElement | null;\n } {\n return this.queryVisualNodes('obc-poi', 'obc-poi-button');\n }\n\n /**\n * Helper for common `getVisualNodes()` pattern: query poi tag in own shadow,\n * then button tag. When the button is slotted into poi (aton/vessel variants),\n * it lives in this variant's shadow root. When using the fallback (data variant),\n * it lives inside poi's shadow root.\n */\n protected queryVisualNodes(poiTag: string, buttonTag: string) {\n const poi = this.shadowRoot?.querySelector(poiTag) as HTMLElement | null;\n const button = (this.shadowRoot?.querySelector(buttonTag) ??\n poi?.shadowRoot?.querySelector(buttonTag)) as HTMLElement | null;\n const buttonShadow = button?.shadowRoot ?? null;\n const buttonWrapper = buttonShadow?.querySelector(\n '.button-wrapper'\n ) as HTMLElement | null;\n const wrapper = buttonShadow?.querySelector(\n '.wrapper'\n ) as HTMLElement | null;\n return {poi, button, wrapper, buttonWrapper};\n }\n\n private getInnerPoi() {\n return this.shadowRoot?.querySelector('obc-poi') as {\n requestUpdate?: () => void;\n refreshProjectionLayout?: (trackDurationMs?: number) => void;\n buttonOffsetX?: number;\n targetOffsetX?: number;\n } | null;\n }\n\n private syncInnerPoiLayout() {\n const poi = this.getInnerPoi();\n\n if (poi) {\n poi.buttonOffsetX = this._buttonOffsetX;\n poi.targetOffsetX = this._targetOffsetX;\n }\n poi?.requestUpdate?.();\n poi?.refreshProjectionLayout?.();\n }\n\n public refreshProjectionLayout(trackDurationMs = 0) {\n const poi = this.getInnerPoi();\n poi?.refreshProjectionLayout?.(trackDurationMs);\n this.dispatchLayoutChange();\n }\n\n public setRuntimeHorizontalOffsets(\n buttonOffsetX: number,\n targetOffsetX = this._targetOffsetX\n ) {\n const nextButtonOffsetX = Number.isFinite(buttonOffsetX)\n ? buttonOffsetX\n : 0;\n const nextTargetOffsetX = Number.isFinite(targetOffsetX)\n ? targetOffsetX\n : 0;\n const oldButtonOffsetX = this._buttonOffsetX;\n const oldTargetOffsetX = this._targetOffsetX;\n const buttonOffsetChanged = this._buttonOffsetX !== nextButtonOffsetX;\n const targetOffsetChanged = this._targetOffsetX !== nextTargetOffsetX;\n\n if (!buttonOffsetChanged && !targetOffsetChanged) {\n return;\n }\n\n this._buttonOffsetX = nextButtonOffsetX;\n this._targetOffsetX = nextTargetOffsetX;\n\n const poi = this.getInnerPoi();\n\n if (!poi) {\n if (buttonOffsetChanged) {\n this.requestUpdate('buttonOffsetX', oldButtonOffsetX);\n }\n if (targetOffsetChanged) {\n this.requestUpdate('targetOffsetX', oldTargetOffsetX);\n }\n return;\n }\n\n poi.buttonOffsetX = nextButtonOffsetX;\n poi.targetOffsetX = nextTargetOffsetX;\n }\n\n public getVisualRect(\n preference: PoiDataVisualRectPreference = PoiDataVisualRectPreference.Largest\n ): DOMRect {\n const {poi, button, wrapper, buttonWrapper} = this.getVisualNodes();\n const candidates = [wrapper, buttonWrapper, button, poi].filter(\n (element): element is HTMLElement => !!element\n );\n\n if (preference === PoiDataVisualRectPreference.Group) {\n const hasDataWrapper = wrapper?.classList.contains('has-data') ?? false;\n return (\n (hasDataWrapper ? wrapper?.getBoundingClientRect() : null) ??\n buttonWrapper?.getBoundingClientRect() ??\n wrapper?.getBoundingClientRect() ??\n button?.getBoundingClientRect() ??\n poi?.getBoundingClientRect() ??\n this.getBoundingClientRect()\n );\n }\n\n if (preference === PoiDataVisualRectPreference.Anchor) {\n return (\n buttonWrapper?.getBoundingClientRect() ??\n button?.getBoundingClientRect() ??\n wrapper?.getBoundingClientRect() ??\n poi?.getBoundingClientRect() ??\n this.getBoundingClientRect()\n );\n }\n\n if (preference === PoiDataVisualRectPreference.Size) {\n return (\n wrapper?.getBoundingClientRect() ??\n buttonWrapper?.getBoundingClientRect() ??\n button?.getBoundingClientRect() ??\n poi?.getBoundingClientRect() ??\n this.getBoundingClientRect()\n );\n }\n\n if (candidates.length === 0) {\n return this.getBoundingClientRect();\n }\n\n const candidateRects = candidates.map((element) =>\n element.getBoundingClientRect()\n );\n return candidateRects.reduce((best, rect) =>\n rect.height > best.height ? rect : best\n );\n }\n\n public getVisualElement(\n preference: VisualElementPreference = PoiDataVisualRectPreference.Size\n ): HTMLElement {\n const {poi, button, wrapper, buttonWrapper} = this.getVisualNodes();\n\n if (preference === PoiDataVisualRectPreference.Group) {\n const hasDataWrapper = wrapper?.classList.contains('has-data') ?? false;\n return (\n (hasDataWrapper ? wrapper : null) ??\n buttonWrapper ??\n wrapper ??\n button ??\n poi ??\n this\n );\n }\n\n if (preference === PoiDataVisualRectPreference.Anchor) {\n return buttonWrapper ?? button ?? wrapper ?? poi ?? this;\n }\n\n return wrapper ?? buttonWrapper ?? button ?? poi ?? this;\n }\n\n public getPointerElement(): HTMLElement | null {\n const {poi} = this.getVisualNodes();\n return (\n (poi?.shadowRoot?.querySelector(\n 'obc-poi-pointer.pointer'\n ) as HTMLElement | null) ?? null\n );\n }\n\n /* ---------- Render helpers ---------- */\n\n /** Public `y` normalized as the target Y input. */\n protected get resolvedTargetY(): number {\n return Number.isFinite(this.y) ? this.y : 0;\n }\n\n /** Public `buttonY` normalized as the button Y input. */\n protected get resolvedButtonY(): number {\n return typeof this.buttonY === 'number' && Number.isFinite(this.buttonY)\n ? this.buttonY\n : 0;\n }\n\n /** Computed effective local button Y offset. */\n protected get effectiveLocalButtonY(): number {\n return this.resolvedButtonY - this.selectedVerticalOffset;\n }\n\n /**\n * Override in each variant to render the button slot content\n * placed inside `<obc-poi>`. The base class provides the outer\n * `<obc-poi>` wrapper with all shared property bindings.\n */\n protected renderButtonSlot(): TemplateResult {\n return html`\n <obc-poi-button\n slot=\"button\"\n exportparts=\"icon\"\n .relativeDirection=${this.relativeDirection}\n .selected=${this.selected}\n .hasHeader=${this.hasHeader}\n .headerContent=${this.headerContent}\n .state=${this.resolvedPoiState}\n .value=${this.value}\n .overlapOpaque=${this.overlapOpaque}\n .type=${this.buttonType}\n .data=${this.data}\n >\n <slot></slot>\n </obc-poi-button>\n `;\n }\n\n protected get resolvedHeaderState(): ObcPoiHeaderState {\n switch (this.resolvedPoiState) {\n case ObcPoiState.Caution:\n return ObcPoiHeaderState.Caution;\n case ObcPoiState.Warning:\n return ObcPoiHeaderState.Warning;\n case ObcPoiState.Alarm:\n return ObcPoiHeaderState.Alarm;\n case ObcPoiState.Enabled:\n default:\n return this.selected\n ? ObcPoiHeaderState.Selected\n : ObcPoiHeaderState.Enabled;\n }\n }\n\n private syncHeaderContent() {\n const headerChildren = Array.from(this.children).filter(\n (child): child is HTMLElement =>\n child instanceof HTMLElement && child.getAttribute('slot') === 'header'\n );\n\n if (headerChildren.length === 0 && !this.hasHeader) {\n return;\n }\n\n if (\n headerChildren.length > 0 &&\n !this.hasHeader &&\n this.closest('obc-poi-layer-stack') === null\n ) {\n this.hasHeader = true;\n }\n\n const target = (this.shadowRoot?.querySelector('[slot=\"button\"]') ??\n this.shadowRoot?.querySelector('obc-poi')) as HTMLElement | null;\n if (!target) {\n return;\n }\n\n for (const child of headerChildren) {\n if (child.parentElement !== target) {\n target.appendChild(child);\n }\n this.applyHeaderState(child);\n }\n }\n\n private applyHeaderState(root: ParentNode) {\n const headers = [\n ...(root instanceof Element && root.matches('obc-poi-header')\n ? [root]\n : []),\n ...root.querySelectorAll('obc-poi-header'),\n ] as HTMLElement[];\n\n for (const header of headers) {\n (header as {state?: ObcPoiHeaderState}).state = this.resolvedHeaderState;\n header.setAttribute('state', this.resolvedHeaderState);\n }\n }\n\n private syncHeaderState() {\n this.applyHeaderState(this.renderRoot);\n }\n\n override render() {\n return html`\n <obc-poi\n .type=${this.resolvedPoiType}\n .value=${this.value}\n .state=${this.resolvedPoiState}\n .x=${0}\n .y=${this.resolvedTargetY}\n .buttonY=${this.effectiveLocalButtonY}\n .fixedTarget=${false}\n .outsideAngle=${this.outsideAngle}\n .hasPointer=${this.hasPointer}\n .hasHeader=${this.hasHeader}\n .headerContent=${this.headerContent}\n .animatePosition=${this.animatePosition}\n .relativeDirection=${this.relativeDirection}\n .buttonType=${this.buttonType}\n .overlapOpaque=${this.overlapOpaque}\n .pointerType=${this.pointerType}\n .pointerState=${this.pointerState}\n .selected=${this.selected}\n .data=${this.data}\n .buttonOffsetX=${this.buttonOffsetX}\n .targetOffsetX=${this.targetOffsetX}\n .boxWidth=${this.boxWidth}\n .boxHeight=${this.boxHeight}\n >\n ${this.renderButtonSlot()}\n </obc-poi>\n `;\n }\n\n static override styles = [unsafeCSS(componentStyle)];\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"poi-base.js","sources":["../../../src/ar/poi/poi-base.ts"],"sourcesContent":["import {LitElement, TemplateResult, html, unsafeCSS} from 'lit';\nimport {property} from 'lit/decorators.js';\nimport componentStyle from './poi-base.css?inline';\nimport './poi.js';\nimport {\n ObcPoiButtonType,\n ObcPoiButtonDataItem,\n} from '../poi-button/poi-button.js';\nimport {ObcPoiHeaderState} from '../building-blocks/poi-header/poi-header.js';\nimport {ObcPoiState, ObcPoiType, ObcPoiValue} from './poi.js';\nimport {\n ObcPoiPointerState,\n ObcPoiPointerType,\n} from '../building-blocks/poi-pointer/poi-pointer.js';\nimport {POI_ATTR, Poi, PoiDataVisualRectPreference} from './poi.js';\nexport {ObcPoiValue as PoiBaseValue};\nexport {PoiDataVisualRectPreference as PoiBaseVisualRectPreference};\n\n/** @internal */\ntype VisualElementPreference =\n | PoiDataVisualRectPreference.Group\n | PoiDataVisualRectPreference.Anchor\n | PoiDataVisualRectPreference.Size;\n\nfunction stripWhitespaceTextNodes(el: Element): void {\n for (const node of Array.from(el.childNodes)) {\n if (\n node.nodeType === Node.TEXT_NODE &&\n (node.textContent ?? '').trim() === ''\n ) {\n node.remove();\n }\n }\n}\n\nconst X_FILTER_CUTOFF_HZ = 16;\nconst X_FILTER_DEADBAND_PX = 0.1;\nconst X_MOVING_HINT_MS = 120;\nconst VALID_POI_TYPES = new Set(Object.values(ObcPoiType));\nconst VALID_POI_STATES = new Set(Object.values(ObcPoiState));\n\n/**\n * Shared base class for top-level POI variant components (`obc-poi-data`,\n * `obc-poi-aton`, `obc-poi-vessel`).\n *\n * Implements `Poi` and contains all positioning, X-filter,\n * layout-change dispatch, and visual-query logic so that each variant\n * only needs to override `renderContent()` and `getVisualNodes()`.\n *\n * The `@fires` tag below documents the dispatch site, which lives here rather\n * than in the variants. It is deliberately duplicated on each concrete\n * subclass — that is where `custom-elements.json` and the framework wrappers\n * pick the event up, since this class is not registered. Do not remove it from\n * the subclasses. `@ignore` keeps this class out of the generated docs.\n *\n * @fires {CustomEvent<void>} obc-poi-data-layout-change - Fired when layout-driving properties change. Bubbles and is composed.\n * @ignore\n */\nexport class PoiBase extends LitElement implements Poi {\n private headerObserver?: MutationObserver;\n private _buttonOffsetX = 0;\n private _targetOffsetX = 0;\n\n override connectedCallback() {\n stripWhitespaceTextNodes(this);\n super.connectedCallback();\n this.setAttribute(POI_ATTR, '');\n this.setupHeaderObserver();\n }\n\n /* ---------- POI marker properties ---------- */\n\n @property({type: String}) type: ObcPoiType = ObcPoiType.Line;\n @property({type: String}) value: ObcPoiValue = ObcPoiValue.Unchecked;\n @property({type: String}) state: ObcPoiState = ObcPoiState.Enabled;\n @property({type: Boolean}) selected = false;\n @property({type: String, attribute: 'button-type'})\n buttonType = ObcPoiButtonType.Button;\n @property({type: Boolean, attribute: 'overlap-opaque'})\n overlapOpaque = false;\n @property({type: Array, attribute: false})\n data: ObcPoiButtonDataItem[] = [];\n @property({type: Boolean, attribute: 'has-header'}) hasHeader = false;\n @property({type: String, attribute: 'header-content'}) headerContent = '';\n @property({type: Boolean}) hasPointer = false;\n @property({type: String, attribute: 'pointer-type'})\n pointerType: ObcPoiPointerType | null = null;\n @property({type: String, attribute: 'pointer-state'})\n pointerState: ObcPoiPointerState | null = null;\n @property({type: Number}) relativeDirection = 0;\n\n /* ---------- Poi — position ---------- */\n\n @property({type: Number}) x = 0;\n @property({type: Number}) y = 192;\n @property({type: Number, attribute: 'button-y'}) buttonY: number | null = 0;\n @property({type: Boolean, attribute: 'fixed-target'}) fixedTarget = false;\n @property({type: Number, attribute: 'box-width'}) boxWidth: number | null =\n null;\n @property({type: Number, attribute: 'box-height'}) boxHeight: number | null =\n null;\n @property({type: Number, attribute: 'outside-angle'}) outsideAngle = 315;\n @property({type: Boolean, attribute: 'animate-position'})\n animatePosition = false;\n\n @property({type: Number, attribute: 'button-offset-x'})\n get buttonOffsetX(): number {\n return this._buttonOffsetX;\n }\n\n set buttonOffsetX(value: number) {\n const nextValue = Number.isFinite(value) ? value : 0;\n const oldValue = this._buttonOffsetX;\n if (oldValue === nextValue) {\n return;\n }\n\n this._buttonOffsetX = nextValue;\n this.requestUpdate('buttonOffsetX', oldValue);\n }\n\n @property({type: Number, attribute: 'target-offset-x'})\n get targetOffsetX(): number {\n return this._targetOffsetX;\n }\n\n set targetOffsetX(value: number) {\n const nextValue = Number.isFinite(value) ? value : 0;\n const oldValue = this._targetOffsetX;\n if (oldValue === nextValue) {\n return;\n }\n\n this._targetOffsetX = nextValue;\n this.requestUpdate('targetOffsetX', oldValue);\n }\n\n /* ---------- X-filter state ---------- */\n\n private filteredX = 0;\n private xFilterTarget = 0;\n private xFilterInitialized = false;\n private lastXFilterTimestampMs = 0;\n private xFilterRaf = 0;\n private xMovingHintTimeout: number | null = null;\n\n /* ---------- Layout change ---------- */\n\n private dispatchLayoutChange() {\n this.dispatchEvent(\n new CustomEvent('obc-poi-data-layout-change', {\n bubbles: true,\n composed: true,\n })\n );\n }\n\n /* ---------- X filter (low-pass) ---------- */\n\n private stepXFilter = (nowMs: number) => {\n this.xFilterRaf = 0;\n if (!this.isConnected || !this.xFilterInitialized) {\n return;\n }\n\n const dtSeconds =\n this.lastXFilterTimestampMs > 0\n ? Math.min(\n 0.25,\n Math.max(1 / 120, (nowMs - this.lastXFilterTimestampMs) / 1000)\n )\n : 1 / 60;\n this.lastXFilterTimestampMs = nowMs;\n\n const alpha = 1 - Math.exp(-2 * Math.PI * X_FILTER_CUTOFF_HZ * dtSeconds);\n const delta = this.xFilterTarget - this.filteredX;\n const nextX =\n Math.abs(delta) <= X_FILTER_DEADBAND_PX\n ? this.xFilterTarget\n : this.filteredX + delta * alpha;\n const changed = Math.abs(nextX - this.filteredX) > 1e-6;\n this.filteredX = nextX;\n if (changed) {\n this.style.setProperty('--obc-poi-data-x', `${this.filteredX}px`);\n this.dispatchLayoutChange();\n }\n\n const settled =\n Math.abs(this.xFilterTarget - this.filteredX) <= X_FILTER_DEADBAND_PX;\n\n if (settled) {\n this.filteredX = this.xFilterTarget;\n this.style.setProperty('--obc-poi-data-x', `${this.filteredX}px`);\n this.lastXFilterTimestampMs = 0;\n this.markXMoving();\n return;\n }\n\n this.markXMoving();\n this.xFilterRaf = requestAnimationFrame(this.stepXFilter);\n };\n\n private syncXFilterTarget(nextX: number) {\n this.xFilterTarget = nextX;\n\n if (!this.xFilterInitialized) {\n this.xFilterInitialized = true;\n this.filteredX = nextX;\n this.style.setProperty('--obc-poi-data-x', `${this.filteredX}px`);\n this.markXMoving();\n return;\n }\n\n if (Math.abs(nextX - this.filteredX) <= X_FILTER_DEADBAND_PX) {\n this.filteredX = this.xFilterTarget;\n this.style.setProperty('--obc-poi-data-x', `${this.filteredX}px`);\n if (this.xFilterRaf) {\n cancelAnimationFrame(this.xFilterRaf);\n this.xFilterRaf = 0;\n }\n this.lastXFilterTimestampMs = 0;\n this.markXMoving();\n return;\n }\n\n if (!this.xFilterRaf) {\n this.lastXFilterTimestampMs = 0;\n this.markXMoving();\n this.xFilterRaf = requestAnimationFrame(this.stepXFilter);\n }\n }\n\n private markXMoving() {\n this.setAttribute('data-x-moving', 'true');\n if (this.xMovingHintTimeout !== null) {\n window.clearTimeout(this.xMovingHintTimeout);\n }\n this.xMovingHintTimeout = window.setTimeout(() => {\n this.removeAttribute('data-x-moving');\n this.xMovingHintTimeout = null;\n }, X_MOVING_HINT_MS);\n }\n\n /* ---------- Lifecycle ---------- */\n\n override disconnectedCallback() {\n super.disconnectedCallback();\n this.headerObserver?.disconnect();\n this.headerObserver = undefined;\n if (this.xFilterRaf) {\n cancelAnimationFrame(this.xFilterRaf);\n this.xFilterRaf = 0;\n }\n this.lastXFilterTimestampMs = 0;\n if (this.xMovingHintTimeout !== null) {\n window.clearTimeout(this.xMovingHintTimeout);\n this.xMovingHintTimeout = null;\n }\n }\n\n private setupHeaderObserver() {\n this.headerObserver?.disconnect();\n this.headerObserver = new MutationObserver((mutations) => {\n for (const mutation of mutations) {\n if (mutation.type === 'childList') {\n this.syncHeaderContent();\n this.syncHeaderState();\n return;\n }\n if (\n mutation.type === 'attributes' &&\n mutation.target instanceof HTMLElement &&\n mutation.target.getAttribute('slot') === 'header'\n ) {\n this.syncHeaderContent();\n this.syncHeaderState();\n return;\n }\n }\n });\n this.headerObserver.observe(this, {\n childList: true,\n attributes: true,\n attributeFilter: ['slot'],\n });\n }\n\n override updated(changedProperties: Map<string, unknown>) {\n if (changedProperties.has('x')) {\n this.syncXFilterTarget(Number.isFinite(this.x) ? this.x : 0);\n }\n if (\n changedProperties.has('buttonY') ||\n changedProperties.has('y') ||\n changedProperties.has('fixedTarget') ||\n changedProperties.has('selected') ||\n changedProperties.has('type')\n ) {\n this.updatePosition();\n this.syncInnerPoiLayout();\n }\n if (\n changedProperties.has('x') ||\n changedProperties.has('buttonY') ||\n changedProperties.has('y') ||\n changedProperties.has('buttonOffsetX') ||\n changedProperties.has('targetOffsetX') ||\n changedProperties.has('fixedTarget') ||\n changedProperties.has('selected') ||\n changedProperties.has('type')\n ) {\n this.dispatchLayoutChange();\n }\n this.syncHeaderContent();\n this.syncHeaderState();\n }\n\n protected override firstUpdated(_changedProperties: Map<string, unknown>) {\n this.syncHeaderContent();\n this.syncHeaderState();\n }\n\n /* ---------- Vertical positioning ---------- */\n\n private updatePosition() {\n if (this.fixedTarget) {\n if (Number.isFinite(this.resolvedButtonY)) {\n this.style.top = `${this.resolvedButtonY - this.resolvedTargetY}px`;\n } else {\n this.style.removeProperty('top');\n }\n } else {\n this.style.removeProperty('top');\n }\n }\n\n protected get selectedVerticalOffset(): number {\n if (!this.selected) {\n return 0;\n }\n const offset = getComputedStyle(this).getPropertyValue(\n '--obc-poi-target-selected-vertical-offset'\n );\n const parsed = Number.parseFloat(offset);\n return Number.isFinite(parsed) ? parsed : 0;\n }\n\n protected get resolvedPoiType(): ObcPoiType {\n return VALID_POI_TYPES.has(this.type as ObcPoiType)\n ? (this.type as ObcPoiType)\n : ObcPoiType.Line;\n }\n\n protected get resolvedPoiState(): ObcPoiState {\n return VALID_POI_STATES.has(this.state as ObcPoiState)\n ? (this.state as ObcPoiState)\n : ObcPoiState.Enabled;\n }\n\n /* ---------- Poi — visual query ---------- */\n\n /**\n * Override in each variant to query the correct inner component tag names.\n * Returns the poi wrapper element and poi-button element from the shadow DOM.\n */\n protected getVisualNodes(): {\n poi: HTMLElement | null;\n button: HTMLElement | null;\n wrapper: HTMLElement | null;\n buttonWrapper: HTMLElement | null;\n } {\n return this.queryVisualNodes('obc-poi', 'obc-poi-button');\n }\n\n /**\n * Helper for common `getVisualNodes()` pattern: query poi tag in own shadow,\n * then button tag. When the button is slotted into poi (aton/vessel variants),\n * it lives in this variant's shadow root. When using the fallback (data variant),\n * it lives inside poi's shadow root.\n */\n protected queryVisualNodes(poiTag: string, buttonTag: string) {\n const poi = this.shadowRoot?.querySelector(poiTag) as HTMLElement | null;\n const button = (this.shadowRoot?.querySelector(buttonTag) ??\n poi?.shadowRoot?.querySelector(buttonTag)) as HTMLElement | null;\n const buttonShadow = button?.shadowRoot ?? null;\n const buttonWrapper = buttonShadow?.querySelector(\n '.button-wrapper'\n ) as HTMLElement | null;\n const wrapper = buttonShadow?.querySelector(\n '.wrapper'\n ) as HTMLElement | null;\n return {poi, button, wrapper, buttonWrapper};\n }\n\n private getInnerPoi() {\n return this.shadowRoot?.querySelector('obc-poi') as {\n requestUpdate?: () => void;\n refreshProjectionLayout?: (trackDurationMs?: number) => void;\n buttonOffsetX?: number;\n targetOffsetX?: number;\n } | null;\n }\n\n private syncInnerPoiLayout() {\n const poi = this.getInnerPoi();\n\n if (poi) {\n poi.buttonOffsetX = this._buttonOffsetX;\n poi.targetOffsetX = this._targetOffsetX;\n }\n poi?.requestUpdate?.();\n poi?.refreshProjectionLayout?.();\n }\n\n public refreshProjectionLayout(trackDurationMs = 0) {\n const poi = this.getInnerPoi();\n poi?.refreshProjectionLayout?.(trackDurationMs);\n this.dispatchLayoutChange();\n }\n\n public setRuntimeHorizontalOffsets(\n buttonOffsetX: number,\n targetOffsetX = this._targetOffsetX\n ) {\n const nextButtonOffsetX = Number.isFinite(buttonOffsetX)\n ? buttonOffsetX\n : 0;\n const nextTargetOffsetX = Number.isFinite(targetOffsetX)\n ? targetOffsetX\n : 0;\n const oldButtonOffsetX = this._buttonOffsetX;\n const oldTargetOffsetX = this._targetOffsetX;\n const buttonOffsetChanged = this._buttonOffsetX !== nextButtonOffsetX;\n const targetOffsetChanged = this._targetOffsetX !== nextTargetOffsetX;\n\n if (!buttonOffsetChanged && !targetOffsetChanged) {\n return;\n }\n\n this._buttonOffsetX = nextButtonOffsetX;\n this._targetOffsetX = nextTargetOffsetX;\n\n const poi = this.getInnerPoi();\n\n if (!poi) {\n if (buttonOffsetChanged) {\n this.requestUpdate('buttonOffsetX', oldButtonOffsetX);\n }\n if (targetOffsetChanged) {\n this.requestUpdate('targetOffsetX', oldTargetOffsetX);\n }\n return;\n }\n\n poi.buttonOffsetX = nextButtonOffsetX;\n poi.targetOffsetX = nextTargetOffsetX;\n }\n\n public getVisualRect(\n preference: PoiDataVisualRectPreference = PoiDataVisualRectPreference.Largest\n ): DOMRect {\n const {poi, button, wrapper, buttonWrapper} = this.getVisualNodes();\n const candidates = [wrapper, buttonWrapper, button, poi].filter(\n (element): element is HTMLElement => !!element\n );\n\n if (preference === PoiDataVisualRectPreference.Group) {\n const hasDataWrapper = wrapper?.classList.contains('has-data') ?? false;\n return (\n (hasDataWrapper ? wrapper?.getBoundingClientRect() : null) ??\n buttonWrapper?.getBoundingClientRect() ??\n wrapper?.getBoundingClientRect() ??\n button?.getBoundingClientRect() ??\n poi?.getBoundingClientRect() ??\n this.getBoundingClientRect()\n );\n }\n\n if (preference === PoiDataVisualRectPreference.Anchor) {\n return (\n buttonWrapper?.getBoundingClientRect() ??\n button?.getBoundingClientRect() ??\n wrapper?.getBoundingClientRect() ??\n poi?.getBoundingClientRect() ??\n this.getBoundingClientRect()\n );\n }\n\n if (preference === PoiDataVisualRectPreference.Size) {\n return (\n wrapper?.getBoundingClientRect() ??\n buttonWrapper?.getBoundingClientRect() ??\n button?.getBoundingClientRect() ??\n poi?.getBoundingClientRect() ??\n this.getBoundingClientRect()\n );\n }\n\n if (candidates.length === 0) {\n return this.getBoundingClientRect();\n }\n\n const candidateRects = candidates.map((element) =>\n element.getBoundingClientRect()\n );\n return candidateRects.reduce((best, rect) =>\n rect.height > best.height ? rect : best\n );\n }\n\n public getVisualElement(\n preference: VisualElementPreference = PoiDataVisualRectPreference.Size\n ): HTMLElement {\n const {poi, button, wrapper, buttonWrapper} = this.getVisualNodes();\n\n if (preference === PoiDataVisualRectPreference.Group) {\n const hasDataWrapper = wrapper?.classList.contains('has-data') ?? false;\n return (\n (hasDataWrapper ? wrapper : null) ??\n buttonWrapper ??\n wrapper ??\n button ??\n poi ??\n this\n );\n }\n\n if (preference === PoiDataVisualRectPreference.Anchor) {\n return buttonWrapper ?? button ?? wrapper ?? poi ?? this;\n }\n\n return wrapper ?? buttonWrapper ?? button ?? poi ?? this;\n }\n\n public getPointerElement(): HTMLElement | null {\n const {poi} = this.getVisualNodes();\n return (\n (poi?.shadowRoot?.querySelector(\n 'obc-poi-pointer.pointer'\n ) as HTMLElement | null) ?? null\n );\n }\n\n /* ---------- Render helpers ---------- */\n\n /** Public `y` normalized as the target Y input. */\n protected get resolvedTargetY(): number {\n return Number.isFinite(this.y) ? this.y : 0;\n }\n\n /** Public `buttonY` normalized as the button Y input. */\n protected get resolvedButtonY(): number {\n return typeof this.buttonY === 'number' && Number.isFinite(this.buttonY)\n ? this.buttonY\n : 0;\n }\n\n /** Computed effective local button Y offset. */\n protected get effectiveLocalButtonY(): number {\n return this.resolvedButtonY - this.selectedVerticalOffset;\n }\n\n /**\n * Override in each variant to render the button slot content\n * placed inside `<obc-poi>`. The base class provides the outer\n * `<obc-poi>` wrapper with all shared property bindings.\n */\n protected renderButtonSlot(): TemplateResult {\n return html`\n <obc-poi-button\n slot=\"button\"\n exportparts=\"icon\"\n .relativeDirection=${this.relativeDirection}\n .selected=${this.selected}\n .hasHeader=${this.hasHeader}\n .headerContent=${this.headerContent}\n .state=${this.resolvedPoiState}\n .value=${this.value}\n .overlapOpaque=${this.overlapOpaque}\n .type=${this.buttonType}\n .data=${this.data}\n >\n <slot></slot>\n </obc-poi-button>\n `;\n }\n\n protected get resolvedHeaderState(): ObcPoiHeaderState {\n switch (this.resolvedPoiState) {\n case ObcPoiState.Caution:\n return ObcPoiHeaderState.Caution;\n case ObcPoiState.Warning:\n return ObcPoiHeaderState.Warning;\n case ObcPoiState.Alarm:\n return ObcPoiHeaderState.Alarm;\n case ObcPoiState.Enabled:\n default:\n return this.selected\n ? ObcPoiHeaderState.Selected\n : ObcPoiHeaderState.Enabled;\n }\n }\n\n private syncHeaderContent() {\n const headerChildren = Array.from(this.children).filter(\n (child): child is HTMLElement =>\n child instanceof HTMLElement && child.getAttribute('slot') === 'header'\n );\n\n if (headerChildren.length === 0 && !this.hasHeader) {\n return;\n }\n\n if (\n headerChildren.length > 0 &&\n !this.hasHeader &&\n this.closest('obc-poi-layer-stack') === null\n ) {\n this.hasHeader = true;\n }\n\n const target = (this.shadowRoot?.querySelector('[slot=\"button\"]') ??\n this.shadowRoot?.querySelector('obc-poi')) as HTMLElement | null;\n if (!target) {\n return;\n }\n\n for (const child of headerChildren) {\n if (child.parentElement !== target) {\n target.appendChild(child);\n }\n this.applyHeaderState(child);\n }\n }\n\n private applyHeaderState(root: ParentNode) {\n const headers = [\n ...(root instanceof Element && root.matches('obc-poi-header')\n ? [root]\n : []),\n ...root.querySelectorAll('obc-poi-header'),\n ] as HTMLElement[];\n\n for (const header of headers) {\n (header as {state?: ObcPoiHeaderState}).state = this.resolvedHeaderState;\n header.setAttribute('state', this.resolvedHeaderState);\n }\n }\n\n private syncHeaderState() {\n this.applyHeaderState(this.renderRoot);\n }\n\n override render() {\n return html`\n <obc-poi\n .type=${this.resolvedPoiType}\n .value=${this.value}\n .state=${this.resolvedPoiState}\n .x=${0}\n .y=${this.resolvedTargetY}\n .buttonY=${this.effectiveLocalButtonY}\n .fixedTarget=${false}\n .outsideAngle=${this.outsideAngle}\n .hasPointer=${this.hasPointer}\n .hasHeader=${this.hasHeader}\n .headerContent=${this.headerContent}\n .animatePosition=${this.animatePosition}\n .relativeDirection=${this.relativeDirection}\n .buttonType=${this.buttonType}\n .overlapOpaque=${this.overlapOpaque}\n .pointerType=${this.pointerType}\n .pointerState=${this.pointerState}\n .selected=${this.selected}\n .data=${this.data}\n .buttonOffsetX=${this.buttonOffsetX}\n .targetOffsetX=${this.targetOffsetX}\n .boxWidth=${this.boxWidth}\n .boxHeight=${this.boxHeight}\n >\n ${this.renderButtonSlot()}\n </obc-poi>\n `;\n }\n\n static override styles = [unsafeCSS(componentStyle)];\n}\n"],"names":[],"mappings":"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"}
@@ -67,8 +67,8 @@ export interface ObcPoiButtonDataItem {
67
67
  * - `relation`: Optional relation icon/content rendered when `hasRelation` is true in data mode.
68
68
  *
69
69
  * ## Events
70
- * This component does not emit custom events.
71
- * - Emits a standard `click` event (`onClick` handler in framework wrappers) when activated.
70
+ * This component emits no custom events. A standard `click` bubbles from the
71
+ * internal `<button>` (`onClick` in the framework wrappers).
72
72
  *
73
73
  * ## Best Practices
74
74
  * - Keep `value`, `state`, and `selected` synchronized to avoid conflicting visual states.
@@ -1 +1 @@
1
- {"version":3,"file":"poi-button.js","sources":["../../../src/ar/poi-button/poi-button.ts"],"sourcesContent":["import {LitElement, html, nothing, unsafeCSS} from 'lit';\nimport {property} from 'lit/decorators.js';\nimport compentStyle from './poi-button.css?inline';\nimport {classMap} from 'lit/directives/class-map.js';\nimport {customElement} from '../../decorator.js';\nimport '../building-blocks/poi-header/poi-header.js';\nimport {\n ObcPoiHeaderType,\n ObcPoiHeaderState,\n} from '../building-blocks/poi-header/poi-header.js';\nimport {\n ObcPoiObjectState,\n ObcPoiObjectStyle,\n ObcPoiObjectType,\n} from '../poi-object/poi-object.js';\nimport {\n ObcPoiSelectionFrameState,\n ObcPoiSelectionFrameType,\n} from '../building-blocks/poi-selection-frame/poi-selection-frame.js';\nimport '../building-blocks/poi-selection-frame/poi-selection-frame.js';\n\nexport enum ObcPoiButtonType {\n Button = 'button',\n Enhanced = 'enhanced',\n}\n\nexport enum ObcPoiButtonLayout {\n Anchored = 'anchored',\n Inline = 'inline',\n}\n\nexport enum ObcPoiButtonState {\n Enabled = 'enabled',\n Caution = 'caution',\n Warning = 'warning',\n Alarm = 'alarm',\n LevelCritical = 'level-critical',\n LevelHigh = 'level-high',\n LevelMedium = 'level-medium',\n LevelLow = 'level-low',\n LevelDiagnostic = 'level-diagnostic',\n}\n\nexport enum PoiButtonVisualState {\n Unchecked = 'unchecked',\n Checked = 'checked',\n Activated = 'activated',\n Overlapped = 'overlapped',\n}\n\nconst BUTTON_TOUCH_TARGET_PX = 48;\nconst ENHANCED_TOUCH_TARGET_PX = 64;\nconst DEFAULT_ENHANCED_BOX_AREA_THRESHOLD_PX =\n (BUTTON_TOUCH_TARGET_PX * BUTTON_TOUCH_TARGET_PX +\n ENHANCED_TOUCH_TARGET_PX * ENHANCED_TOUCH_TARGET_PX) /\n 2;\n\nexport function resolvePoiButtonTypeFromBoxSize(\n boxWidthPx: number | null | undefined,\n boxHeightPx: number | null | undefined,\n enhancedAreaThresholdPx: number = DEFAULT_ENHANCED_BOX_AREA_THRESHOLD_PX\n): ObcPoiButtonType {\n const width = Number(boxWidthPx);\n const height = Number(boxHeightPx);\n if (\n !Number.isFinite(width) ||\n !Number.isFinite(height) ||\n width <= 0 ||\n height <= 0\n ) {\n return ObcPoiButtonType.Button;\n }\n\n const area = width * height;\n return area >= enhancedAreaThresholdPx\n ? ObcPoiButtonType.Enhanced\n : ObcPoiButtonType.Button;\n}\n\nexport interface ObcPoiButtonDataItem {\n value: string;\n label: string;\n unit: string;\n}\n\n/**\n * `<obc-poi-button>` - Marker button component that renders an icon target with optional header and data rows.\n *\n * ## Overview\n * Use this component when you need a button-style marker that can show stateful framing and optional metric rows.\n * Keywords/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\n * This component does not emit custom events.\n * - Emits a standard `click` event (`onClick` handler in framework wrappers) when activated.\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 * ```\n *\n * @slot - Icon/content rendered inside `obc-poi-object`.\n * @slot header - Optional header content rendered above the marker body.\n * @slot relation - Optional relation icon/content in data mode when `hasRelation` is true.\n * @fires click - Fired when the marker is clicked.\n * @experimental\n */\n@customElement('obc-poi-button')\nexport class ObcPoiButton extends LitElement {\n @property({type: Number}) relativeDirection = 0;\n @property({type: Boolean}) selected = false;\n @property({type: String}) layout: ObcPoiButtonLayout =\n ObcPoiButtonLayout.Anchored;\n @property({type: Boolean})\n hasHeader = false;\n @property({type: String})\n state: ObcPoiButtonState = ObcPoiButtonState.Enabled;\n @property({type: String})\n value: PoiButtonVisualState = PoiButtonVisualState.Unchecked;\n @property({type: Boolean})\n overlapOpaque = false;\n @property({type: String}) type = ObcPoiButtonType.Button;\n @property({type: Boolean}) inExpandedGroup = false;\n @property({type: Array, attribute: false}) data: ObcPoiButtonDataItem[] = [];\n @property({type: Boolean}) hasRelation = false;\n @property({type: String, attribute: 'header-content'}) headerContent = '';\n private headerContentObserver?: MutationObserver;\n\n override connectedCallback() {\n super.connectedCallback();\n this.setupHeaderContentObserver();\n }\n\n override disconnectedCallback() {\n super.disconnectedCallback();\n this.headerContentObserver?.disconnect();\n this.headerContentObserver = undefined;\n }\n\n private setupHeaderContentObserver() {\n this.headerContentObserver?.disconnect();\n this.headerContentObserver = new MutationObserver((mutations) => {\n for (const mutation of mutations) {\n if (mutation.type === 'childList') {\n this.requestUpdate();\n return;\n }\n if (\n mutation.type === 'attributes' &&\n mutation.target instanceof HTMLElement &&\n mutation.target.getAttribute('slot') === 'header'\n ) {\n this.requestUpdate();\n return;\n }\n }\n });\n this.headerContentObserver.observe(this, {\n childList: true,\n subtree: true,\n attributes: true,\n attributeFilter: ['slot'],\n });\n }\n\n get hasData(): boolean {\n return this.data.length > 0;\n }\n\n private get alertClassSuffix(): string {\n if (this.state === ObcPoiButtonState.Enabled) {\n return 'none';\n }\n return this.state;\n }\n\n private get resolvedHeaderState(): ObcPoiHeaderState {\n switch (this.state) {\n case ObcPoiButtonState.Caution:\n return ObcPoiHeaderState.Caution;\n case ObcPoiButtonState.Warning:\n return ObcPoiHeaderState.Warning;\n case ObcPoiButtonState.Alarm:\n return ObcPoiHeaderState.Alarm;\n case ObcPoiButtonState.LevelCritical:\n return ObcPoiHeaderState.LevelCritical;\n case ObcPoiButtonState.LevelHigh:\n return ObcPoiHeaderState.LevelHigh;\n case ObcPoiButtonState.LevelMedium:\n return ObcPoiHeaderState.LevelMedium;\n case ObcPoiButtonState.LevelLow:\n return ObcPoiHeaderState.LevelLow;\n case ObcPoiButtonState.LevelDiagnostic:\n return ObcPoiHeaderState.LevelDiagnostic;\n case ObcPoiButtonState.Enabled:\n default:\n return ObcPoiHeaderState.Selected;\n }\n }\n\n private get hasHeaderContent(): boolean {\n return this.querySelector('[slot=\"header\"]') !== null;\n }\n\n private get hasGeneratedHeaderContent(): boolean {\n return this.headerContent.trim().length > 0;\n }\n\n private syncSlottedHeaderState() {\n const headerSlot = this.renderRoot.querySelector(\n 'slot[name=\"header\"]'\n ) as HTMLSlotElement | null;\n if (!headerSlot) {\n return;\n }\n\n const state = this.resolvedHeaderState;\n const assigned = headerSlot.assignedElements({flatten: true});\n const headers = new Set<HTMLElement>();\n\n for (const element of assigned) {\n if (element.matches('obc-poi-header')) {\n headers.add(element as HTMLElement);\n }\n for (const nested of element.querySelectorAll('obc-poi-header')) {\n headers.add(nested as HTMLElement);\n }\n }\n\n for (const header of headers) {\n (header as {state?: string}).state = state;\n header.setAttribute('state', state);\n }\n }\n\n private handleHeaderSlotChange = () => {\n this.syncSlottedHeaderState();\n };\n\n protected override updated(_changedProperties: Map<string, unknown>) {\n this.syncSlottedHeaderState();\n }\n\n protected renderHeader() {\n if (\n !this.hasHeader ||\n (!this.hasHeaderContent && !this.hasGeneratedHeaderContent)\n ) {\n return nothing;\n }\n\n return html`\n <div class=\"id-label\">\n ${this.hasHeaderContent\n ? html`<slot\n name=\"header\"\n @slotchange=${this.handleHeaderSlotChange}\n ></slot>`\n : html`<obc-poi-header\n .content=${this.headerContent}\n .state=${this.resolvedHeaderState}\n .type=${ObcPoiHeaderType.Id}\n ></obc-poi-header>`}\n </div>\n `;\n }\n\n protected get poiObjectType(): ObcPoiObjectType {\n return this.type === ObcPoiButtonType.Enhanced\n ? ObcPoiObjectType.Large\n : ObcPoiObjectType.Regular;\n }\n\n protected get poiObjectState(): ObcPoiObjectState {\n if (this.value === PoiButtonVisualState.Overlapped) {\n return ObcPoiObjectState.Overlapped;\n }\n\n if (this.hasData) {\n if (this.value === PoiButtonVisualState.Activated) {\n return ObcPoiObjectState.Activated;\n }\n if (this.value === PoiButtonVisualState.Checked) {\n return ObcPoiObjectState.StaticChecked;\n }\n return ObcPoiObjectState.StaticUnchecked;\n }\n\n if (this.value === PoiButtonVisualState.Activated) {\n return ObcPoiObjectState.Activated;\n }\n if (this.value === PoiButtonVisualState.Checked) {\n return ObcPoiObjectState.Checked;\n }\n\n return ObcPoiObjectState.Unchecked;\n }\n\n override render() {\n if (this.hasData) {\n return this.renderWithData();\n }\n return this.renderButton();\n }\n\n protected renderPoiObject() {\n return html`\n <obc-poi-object\n class=\"poi-object\"\n .type=${this.poiObjectType}\n .objectStyle=${ObcPoiObjectStyle.Regular}\n .state=${this.poiObjectState}\n .interactive=${false}\n >\n <span\n class=\"icon\"\n style=\"transform: rotate(${this.relativeDirection}deg);\"\n >\n <slot></slot>\n </span>\n </obc-poi-object>\n `;\n }\n\n protected renderButton() {\n return html`\n <button\n type=\"button\"\n class=${classMap({\n wrapper: true,\n selected: this.selected,\n [`alert-${this.alertClassSuffix}`]: true,\n [`type-${this.type}`]: true,\n [`value-${this.value}`]: true,\n [`layout-${this.layout}`]: true,\n 'overlap-opaque': this.overlapOpaque,\n expanded: this.inExpandedGroup,\n })}\n >\n ${this.renderHeader()}\n <div class=\"button-wrapper\">\n ${this.renderSelectionFrame()} ${this.renderPoiObject()}\n <div class=\"alert-ring\"></div>\n </div>\n </button>\n `;\n }\n\n protected renderWithData() {\n return html`\n <button\n type=\"button\"\n class=${classMap({\n wrapper: true,\n 'has-data': true,\n selected: this.selected,\n 'has-header':\n this.hasHeader &&\n (this.hasHeaderContent || this.hasGeneratedHeaderContent),\n [`alert-${this.alertClassSuffix}`]: true,\n [`type-${this.type}`]: true,\n [`value-${this.value}`]: true,\n [`layout-${this.layout}`]: true,\n 'overlap-opaque': this.overlapOpaque,\n expanded: this.inExpandedGroup,\n })}\n >\n <div class=\"visible-wrapper\"></div>\n ${this.renderHeader()}\n <div class=\"data-wrapper\">\n ${this.data.map(\n (item) =>\n html`<div class=\"data\">\n <div class=\"value\">${item.value}</div>\n <div class=\"label\">${item.label}</div>\n <div class=\"unit\">${item.unit}</div>\n </div>`\n )}\n </div>\n <div class=\"button-wrapper\">\n ${this.renderSelectionFrame()} ${this.renderPoiObject()}\n </div>\n ${this.hasRelation\n ? html`<div class=\"relation-wrapper\" part=\"relation-wrapper\">\n <slot name=\"relation\" class=\"relation\" part=\"relation\"></slot>\n </div>`\n : nothing}\n <div class=\"alert-ring\"></div>\n </button>\n `;\n }\n\n protected get selectionFrameType(): ObcPoiSelectionFrameType {\n return this.type === ObcPoiButtonType.Enhanced\n ? ObcPoiSelectionFrameType.Enhanced\n : ObcPoiSelectionFrameType.Button;\n }\n\n protected get selectionFrameState(): ObcPoiSelectionFrameState {\n return this.state === ObcPoiButtonState.Enabled\n ? ObcPoiSelectionFrameState.Regular\n : ObcPoiSelectionFrameState.Alert;\n }\n\n protected renderSelectionFrame() {\n if (!this.selected || this.layout === ObcPoiButtonLayout.Inline) {\n return nothing;\n }\n\n return html`\n <obc-poi-selection-frame\n class=\"selection-frame\"\n .type=${this.selectionFrameType}\n .state=${this.selectionFrameState}\n ></obc-poi-selection-frame>\n `;\n }\n\n static override styles = unsafeCSS(compentStyle);\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'obc-poi-button': ObcPoiButton;\n }\n}\n"],"names":["ObcPoiButtonType","ObcPoiButtonLayout","ObcPoiButtonState","PoiButtonVisualState"],"mappings":"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"}
1
+ {"version":3,"file":"poi-button.js","sources":["../../../src/ar/poi-button/poi-button.ts"],"sourcesContent":["import {LitElement, html, nothing, unsafeCSS} from 'lit';\nimport {property} from 'lit/decorators.js';\nimport compentStyle from './poi-button.css?inline';\nimport {classMap} from 'lit/directives/class-map.js';\nimport {customElement} from '../../decorator.js';\nimport '../building-blocks/poi-header/poi-header.js';\nimport {\n ObcPoiHeaderType,\n ObcPoiHeaderState,\n} from '../building-blocks/poi-header/poi-header.js';\nimport {\n ObcPoiObjectState,\n ObcPoiObjectStyle,\n ObcPoiObjectType,\n} from '../poi-object/poi-object.js';\nimport {\n ObcPoiSelectionFrameState,\n ObcPoiSelectionFrameType,\n} from '../building-blocks/poi-selection-frame/poi-selection-frame.js';\nimport '../building-blocks/poi-selection-frame/poi-selection-frame.js';\n\nexport enum ObcPoiButtonType {\n Button = 'button',\n Enhanced = 'enhanced',\n}\n\nexport enum ObcPoiButtonLayout {\n Anchored = 'anchored',\n Inline = 'inline',\n}\n\nexport enum ObcPoiButtonState {\n Enabled = 'enabled',\n Caution = 'caution',\n Warning = 'warning',\n Alarm = 'alarm',\n LevelCritical = 'level-critical',\n LevelHigh = 'level-high',\n LevelMedium = 'level-medium',\n LevelLow = 'level-low',\n LevelDiagnostic = 'level-diagnostic',\n}\n\nexport enum PoiButtonVisualState {\n Unchecked = 'unchecked',\n Checked = 'checked',\n Activated = 'activated',\n Overlapped = 'overlapped',\n}\n\nconst BUTTON_TOUCH_TARGET_PX = 48;\nconst ENHANCED_TOUCH_TARGET_PX = 64;\nconst DEFAULT_ENHANCED_BOX_AREA_THRESHOLD_PX =\n (BUTTON_TOUCH_TARGET_PX * BUTTON_TOUCH_TARGET_PX +\n ENHANCED_TOUCH_TARGET_PX * ENHANCED_TOUCH_TARGET_PX) /\n 2;\n\nexport function resolvePoiButtonTypeFromBoxSize(\n boxWidthPx: number | null | undefined,\n boxHeightPx: number | null | undefined,\n enhancedAreaThresholdPx: number = DEFAULT_ENHANCED_BOX_AREA_THRESHOLD_PX\n): ObcPoiButtonType {\n const width = Number(boxWidthPx);\n const height = Number(boxHeightPx);\n if (\n !Number.isFinite(width) ||\n !Number.isFinite(height) ||\n width <= 0 ||\n height <= 0\n ) {\n return ObcPoiButtonType.Button;\n }\n\n const area = width * height;\n return area >= enhancedAreaThresholdPx\n ? ObcPoiButtonType.Enhanced\n : ObcPoiButtonType.Button;\n}\n\nexport interface ObcPoiButtonDataItem {\n value: string;\n label: string;\n unit: string;\n}\n\n/**\n * `<obc-poi-button>` - Marker button component that renders an icon target with optional header and data rows.\n *\n * ## Overview\n * Use this component when you need a button-style marker that can show stateful framing and optional metric rows.\n * Keywords/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\n * This component emits no custom events. A standard `click` bubbles from the\n * internal `<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 * ```\n *\n * @slot - Icon/content rendered inside `obc-poi-object`.\n * @slot header - Optional header content rendered above the marker body.\n * @slot relation - Optional relation icon/content in data mode when `hasRelation` is true.\n * @fires click - Fired when the marker is clicked.\n * @experimental\n */\n@customElement('obc-poi-button')\nexport class ObcPoiButton extends LitElement {\n @property({type: Number}) relativeDirection = 0;\n @property({type: Boolean}) selected = false;\n @property({type: String}) layout: ObcPoiButtonLayout =\n ObcPoiButtonLayout.Anchored;\n @property({type: Boolean})\n hasHeader = false;\n @property({type: String})\n state: ObcPoiButtonState = ObcPoiButtonState.Enabled;\n @property({type: String})\n value: PoiButtonVisualState = PoiButtonVisualState.Unchecked;\n @property({type: Boolean})\n overlapOpaque = false;\n @property({type: String}) type = ObcPoiButtonType.Button;\n @property({type: Boolean}) inExpandedGroup = false;\n @property({type: Array, attribute: false}) data: ObcPoiButtonDataItem[] = [];\n @property({type: Boolean}) hasRelation = false;\n @property({type: String, attribute: 'header-content'}) headerContent = '';\n private headerContentObserver?: MutationObserver;\n\n override connectedCallback() {\n super.connectedCallback();\n this.setupHeaderContentObserver();\n }\n\n override disconnectedCallback() {\n super.disconnectedCallback();\n this.headerContentObserver?.disconnect();\n this.headerContentObserver = undefined;\n }\n\n private setupHeaderContentObserver() {\n this.headerContentObserver?.disconnect();\n this.headerContentObserver = new MutationObserver((mutations) => {\n for (const mutation of mutations) {\n if (mutation.type === 'childList') {\n this.requestUpdate();\n return;\n }\n if (\n mutation.type === 'attributes' &&\n mutation.target instanceof HTMLElement &&\n mutation.target.getAttribute('slot') === 'header'\n ) {\n this.requestUpdate();\n return;\n }\n }\n });\n this.headerContentObserver.observe(this, {\n childList: true,\n subtree: true,\n attributes: true,\n attributeFilter: ['slot'],\n });\n }\n\n get hasData(): boolean {\n return this.data.length > 0;\n }\n\n private get alertClassSuffix(): string {\n if (this.state === ObcPoiButtonState.Enabled) {\n return 'none';\n }\n return this.state;\n }\n\n private get resolvedHeaderState(): ObcPoiHeaderState {\n switch (this.state) {\n case ObcPoiButtonState.Caution:\n return ObcPoiHeaderState.Caution;\n case ObcPoiButtonState.Warning:\n return ObcPoiHeaderState.Warning;\n case ObcPoiButtonState.Alarm:\n return ObcPoiHeaderState.Alarm;\n case ObcPoiButtonState.LevelCritical:\n return ObcPoiHeaderState.LevelCritical;\n case ObcPoiButtonState.LevelHigh:\n return ObcPoiHeaderState.LevelHigh;\n case ObcPoiButtonState.LevelMedium:\n return ObcPoiHeaderState.LevelMedium;\n case ObcPoiButtonState.LevelLow:\n return ObcPoiHeaderState.LevelLow;\n case ObcPoiButtonState.LevelDiagnostic:\n return ObcPoiHeaderState.LevelDiagnostic;\n case ObcPoiButtonState.Enabled:\n default:\n return ObcPoiHeaderState.Selected;\n }\n }\n\n private get hasHeaderContent(): boolean {\n return this.querySelector('[slot=\"header\"]') !== null;\n }\n\n private get hasGeneratedHeaderContent(): boolean {\n return this.headerContent.trim().length > 0;\n }\n\n private syncSlottedHeaderState() {\n const headerSlot = this.renderRoot.querySelector(\n 'slot[name=\"header\"]'\n ) as HTMLSlotElement | null;\n if (!headerSlot) {\n return;\n }\n\n const state = this.resolvedHeaderState;\n const assigned = headerSlot.assignedElements({flatten: true});\n const headers = new Set<HTMLElement>();\n\n for (const element of assigned) {\n if (element.matches('obc-poi-header')) {\n headers.add(element as HTMLElement);\n }\n for (const nested of element.querySelectorAll('obc-poi-header')) {\n headers.add(nested as HTMLElement);\n }\n }\n\n for (const header of headers) {\n (header as {state?: string}).state = state;\n header.setAttribute('state', state);\n }\n }\n\n private handleHeaderSlotChange = () => {\n this.syncSlottedHeaderState();\n };\n\n protected override updated(_changedProperties: Map<string, unknown>) {\n this.syncSlottedHeaderState();\n }\n\n protected renderHeader() {\n if (\n !this.hasHeader ||\n (!this.hasHeaderContent && !this.hasGeneratedHeaderContent)\n ) {\n return nothing;\n }\n\n return html`\n <div class=\"id-label\">\n ${this.hasHeaderContent\n ? html`<slot\n name=\"header\"\n @slotchange=${this.handleHeaderSlotChange}\n ></slot>`\n : html`<obc-poi-header\n .content=${this.headerContent}\n .state=${this.resolvedHeaderState}\n .type=${ObcPoiHeaderType.Id}\n ></obc-poi-header>`}\n </div>\n `;\n }\n\n protected get poiObjectType(): ObcPoiObjectType {\n return this.type === ObcPoiButtonType.Enhanced\n ? ObcPoiObjectType.Large\n : ObcPoiObjectType.Regular;\n }\n\n protected get poiObjectState(): ObcPoiObjectState {\n if (this.value === PoiButtonVisualState.Overlapped) {\n return ObcPoiObjectState.Overlapped;\n }\n\n if (this.hasData) {\n if (this.value === PoiButtonVisualState.Activated) {\n return ObcPoiObjectState.Activated;\n }\n if (this.value === PoiButtonVisualState.Checked) {\n return ObcPoiObjectState.StaticChecked;\n }\n return ObcPoiObjectState.StaticUnchecked;\n }\n\n if (this.value === PoiButtonVisualState.Activated) {\n return ObcPoiObjectState.Activated;\n }\n if (this.value === PoiButtonVisualState.Checked) {\n return ObcPoiObjectState.Checked;\n }\n\n return ObcPoiObjectState.Unchecked;\n }\n\n override render() {\n if (this.hasData) {\n return this.renderWithData();\n }\n return this.renderButton();\n }\n\n protected renderPoiObject() {\n return html`\n <obc-poi-object\n class=\"poi-object\"\n .type=${this.poiObjectType}\n .objectStyle=${ObcPoiObjectStyle.Regular}\n .state=${this.poiObjectState}\n .interactive=${false}\n >\n <span\n class=\"icon\"\n style=\"transform: rotate(${this.relativeDirection}deg);\"\n >\n <slot></slot>\n </span>\n </obc-poi-object>\n `;\n }\n\n protected renderButton() {\n return html`\n <button\n type=\"button\"\n class=${classMap({\n wrapper: true,\n selected: this.selected,\n [`alert-${this.alertClassSuffix}`]: true,\n [`type-${this.type}`]: true,\n [`value-${this.value}`]: true,\n [`layout-${this.layout}`]: true,\n 'overlap-opaque': this.overlapOpaque,\n expanded: this.inExpandedGroup,\n })}\n >\n ${this.renderHeader()}\n <div class=\"button-wrapper\">\n ${this.renderSelectionFrame()} ${this.renderPoiObject()}\n <div class=\"alert-ring\"></div>\n </div>\n </button>\n `;\n }\n\n protected renderWithData() {\n return html`\n <button\n type=\"button\"\n class=${classMap({\n wrapper: true,\n 'has-data': true,\n selected: this.selected,\n 'has-header':\n this.hasHeader &&\n (this.hasHeaderContent || this.hasGeneratedHeaderContent),\n [`alert-${this.alertClassSuffix}`]: true,\n [`type-${this.type}`]: true,\n [`value-${this.value}`]: true,\n [`layout-${this.layout}`]: true,\n 'overlap-opaque': this.overlapOpaque,\n expanded: this.inExpandedGroup,\n })}\n >\n <div class=\"visible-wrapper\"></div>\n ${this.renderHeader()}\n <div class=\"data-wrapper\">\n ${this.data.map(\n (item) =>\n html`<div class=\"data\">\n <div class=\"value\">${item.value}</div>\n <div class=\"label\">${item.label}</div>\n <div class=\"unit\">${item.unit}</div>\n </div>`\n )}\n </div>\n <div class=\"button-wrapper\">\n ${this.renderSelectionFrame()} ${this.renderPoiObject()}\n </div>\n ${this.hasRelation\n ? html`<div class=\"relation-wrapper\" part=\"relation-wrapper\">\n <slot name=\"relation\" class=\"relation\" part=\"relation\"></slot>\n </div>`\n : nothing}\n <div class=\"alert-ring\"></div>\n </button>\n `;\n }\n\n protected get selectionFrameType(): ObcPoiSelectionFrameType {\n return this.type === ObcPoiButtonType.Enhanced\n ? ObcPoiSelectionFrameType.Enhanced\n : ObcPoiSelectionFrameType.Button;\n }\n\n protected get selectionFrameState(): ObcPoiSelectionFrameState {\n return this.state === ObcPoiButtonState.Enabled\n ? ObcPoiSelectionFrameState.Regular\n : ObcPoiSelectionFrameState.Alert;\n }\n\n protected renderSelectionFrame() {\n if (!this.selected || this.layout === ObcPoiButtonLayout.Inline) {\n return nothing;\n }\n\n return html`\n <obc-poi-selection-frame\n class=\"selection-frame\"\n .type=${this.selectionFrameType}\n .state=${this.selectionFrameState}\n ></obc-poi-selection-frame>\n `;\n }\n\n static override styles = unsafeCSS(compentStyle);\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'obc-poi-button': ObcPoiButton;\n }\n}\n"],"names":["ObcPoiButtonType","ObcPoiButtonLayout","ObcPoiButtonState","PoiButtonVisualState"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"accordion-card.d.ts","sourceRoot":"","sources":["../../../src/components/accordion-card/accordion-card.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,UAAU,EAAkB,MAAM,KAAK,CAAC;AAKhD,OAAO,uCAAuC,CAAC;AAC/C,OAAO,yCAAyC,CAAC;AACjD,OAAO,+BAA+B,CAAC;AACvC,OAAO,EACL,sBAAsB,EACtB,iBAAiB,EAClB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAC,SAAS,EAAC,MAAM,gBAAgB,CAAC;AAEzC,oBAAY,aAAa;IACvB,UAAU,gBAAgB;IAC1B,KAAK,UAAU;CAChB;AAED,oBAAY,QAAQ;IAClB,GAAG,QAAQ;IACX,MAAM,WAAW;IACjB,MAAM,WAAW;IACjB,OAAO,YAAY;CACpB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmFG;AACH,qBACa,gBAAiB,SAAQ,UAAU;IAC9C;;OAEG;IACuB,SAAS,SAAM;IAEzC;;;OAGG;IACuB,WAAW,SAAM;IAE3C;;;OAGG;IACuB,WAAW,SAAM;IAE3C;;OAEG;IACwB,QAAQ,UAAS;IAE5C;;OAEG;IACwB,QAAQ,UAAS;IAE5C;;OAEG;IACwB,QAAQ,UAAS;IAE5C;;OAEG;IACwB,cAAc,UAAS;IAElD;;OAEG;IACwB,cAAc,UAAS;IAElD;;OAEG;IACwB,cAAc,UAAS;IAElD;;;;;;OAMG;IACuB,QAAQ,EAAE,QAAQ,CAAoB;IAEhE;;;;OAIG;IACuB,IAAI,EAAE,aAAa,CAA4B;IAEzE;;;;OAIG;IACuB,cAAc,EAAE,iBAAiB,CAC/B;IAE5B;;;;OAIG;IACuB,mBAAmB,EAAE,sBAAsB,CACtC;IAE/B;;;;OAIG;IACuB,gBAAgB,EAAE,SAAS,CAAmB;IAExE,OAAO,KAAK,qBAAqB,GAMhC;IAED,OAAO,CAAC,YAAY;IAkBpB,OAAO,CAAC,iBAAiB;IAkCzB,OAAO,CAAC,uBAAuB;IAU/B,OAAO,CAAC,iBAAiB;IAGzB,OAAO,CAAC,cAAc;IAMb,MAAM;IAoDf,OAAgB,MAAM,0BAA2B;CAClD;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,oBAAoB,EAAE,gBAAgB,CAAC;KACxC;CACF"}
1
+ {"version":3,"file":"accordion-card.d.ts","sourceRoot":"","sources":["../../../src/components/accordion-card/accordion-card.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,UAAU,EAAkB,MAAM,KAAK,CAAC;AAKhD,OAAO,uCAAuC,CAAC;AAC/C,OAAO,yCAAyC,CAAC;AACjD,OAAO,+BAA+B,CAAC;AACvC,OAAO,EACL,sBAAsB,EACtB,iBAAiB,EAClB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAC,SAAS,EAAC,MAAM,gBAAgB,CAAC;AAEzC,oBAAY,aAAa;IACvB,UAAU,gBAAgB;IAC1B,KAAK,UAAU;CAChB;AAED,oBAAY,QAAQ;IAClB,GAAG,QAAQ;IACX,MAAM,WAAW;IACjB,MAAM,WAAW;IACjB,OAAO,YAAY;CACpB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmFG;AACH,qBACa,gBAAiB,SAAQ,UAAU;IAC9C;;OAEG;IACuB,SAAS,SAAM;IAEzC;;;OAGG;IACuB,WAAW,SAAM;IAE3C;;;OAGG;IACuB,WAAW,SAAM;IAE3C;;OAEG;IACwB,QAAQ,UAAS;IAE5C;;OAEG;IACwB,QAAQ,UAAS;IAE5C;;OAEG;IACwB,QAAQ,UAAS;IAE5C;;OAEG;IACwB,cAAc,UAAS;IAElD;;OAEG;IACwB,cAAc,UAAS;IAElD;;OAEG;IACwB,cAAc,UAAS;IAElD;;;;;;OAMG;IACuB,QAAQ,EAAE,QAAQ,CAAoB;IAEhE;;;;OAIG;IACuB,IAAI,EAAE,aAAa,CAA4B;IAEzE;;;;OAIG;IACuB,cAAc,EAAE,iBAAiB,CAC/B;IAE5B;;;;OAIG;IACuB,mBAAmB,EAAE,sBAAsB,CACtC;IAE/B;;;;OAIG;IACuB,gBAAgB,EAAE,SAAS,CAAmB;IAExE,OAAO,KAAK,qBAAqB,GAMhC;IAED,OAAO,CAAC,YAAY;IAmBpB,OAAO,CAAC,iBAAiB;IAkCzB,OAAO,CAAC,uBAAuB;IAU/B,OAAO,CAAC,iBAAiB;IAGzB,OAAO,CAAC,cAAc;IAMb,MAAM;IAoDf,OAAgB,MAAM,0BAA2B;CAClD;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,oBAAoB,EAAE,gBAAgB,CAAC;KACxC;CACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"accordion-card.js","sources":["../../../src/components/accordion-card/accordion-card.ts"],"sourcesContent":["import {LitElement, html, unsafeCSS} from 'lit';\nimport {customElement} from '../../decorator.js';\nimport {classMap} from 'lit/directives/class-map.js';\nimport compentStyle from './accordion-card.css?inline';\nimport {property} from 'lit/decorators.js';\nimport '../../icons/icon-chevron-up-google.js';\nimport '../../icons/icon-chevron-down-google.js';\nimport '../alert-frame/alert-frame.js';\nimport {\n ObcAlertFrameThickness,\n ObcAlertFrameType,\n} from '../alert-frame/alert-frame.js';\nimport {AlertType} from '../../types.js';\n\nexport enum AccordionSize {\n SingleLine = 'single-line',\n Large = 'large',\n}\n\nexport enum Position {\n top = 'top',\n bottom = 'bottom',\n center = 'center',\n regular = 'regular',\n}\n\n/**\n * `<obc-accordion-card>` – Expandable/collapsible card component for grouping content in a compact, interactive section (accordion, expandable panel, disclosure).\n *\n * Provides a summary row with optional icon, title, description, and status label. Expands to reveal additional content on click/tap, supporting both single-line and large layouts. Can display an alert overlay for contextual warnings or notifications.\n *\n * ### Features\n * - **Expandable/collapsible:** Click/tap toggles between collapsed and expanded states, revealing or hiding additional content.\n * - **Variants:**\n * - **Single-line:** Compact header with only title (and optional icon/status).\n * - **Large:** Header includes a description beneath the title for more detail.\n * - **Positioning:** Supports `top`, `bottom`, `center`, or `regular` (default) border radius/edge styling for stacking multiple accordions.\n * - **Status label:** Optional status text displayed in the header (e.g., \"Active\", \"Warning\").\n * - **Leading icon:** Optional icon slot at the start of the header for visual context.\n * - **Alert overlay:** Can display an alert frame (with icon, label, timer) above the card for warnings or notifications.\n * - **Disabled state:** Prevents interaction and visually indicates non-interactive status.\n * - **Accessibility:** Uses button semantics and ARIA attributes for expand/collapse.\n *\n * ### Usage Guidelines\n * Use `obc-accordion-card` to organize related content in a collapsible section, especially when space is limited or when users may want to focus on one section at a time. Ideal for settings panels, grouped controls, or dashboards where expandable details are needed. Avoid using for persistent, always-visible content.\n *\n * - Use the **single-line** variant for brief titles or when space is tight.\n * - Use the **large** variant when you need to provide a short description or supporting text under the title.\n * - The **status label** is useful for showing quick state info (e.g., \"Active\", \"Error\").\n * - The **alert overlay** is intended for contextual warnings or notifications related to the card's content.\n * - For stacking multiple accordions, adjust the `position` property to control border radii and visual grouping.\n *\n * **TODO(designer):** Confirm if there are recommended limits on title/description length, and if only one accordion should be expanded at a time in a group.\n *\n * ### Slots\n * | Slot Name | Renders When... | Purpose |\n * |-------------------|------------------------|-------------------------------------------------------|\n * | leading-icon | `hasLeadingIcon` true | Icon at the start of the header (e.g., `<obi-placeholder></obi-placeholder>`). |\n * | expanded-content | Always | Content revealed when the accordion is expanded. |\n * | alert-icon | `hasAlert` true | Icon for the alert overlay (slot=\"icon\" in alert frame). |\n * | alert-label | `hasAlert` true | Label text for the alert overlay (slot=\"label\" in alert frame). |\n * | alert-timer | `hasAlert` true | Timer or duration text for the alert overlay (slot=\"timer\" in alert frame). |\n *\n * ### Properties\n * - `expanded` (boolean): Whether the card is expanded (shows additional content). Toggled by user interaction.\n * - `disabled` (boolean): Disables interaction and visually dims the card.\n * - `cardTitle` (string): Main title text shown in the header.\n * - `description` (string): Supporting description (shown only in large size and if `hasDescription` is true).\n * - `statusLabel` (string): Optional status text in the header (shown if `hasStatusLabel` is true).\n * - `hasAlert` (boolean): Shows an alert overlay above the card when true.\n * - `hasDescription` (boolean): Enables description text in large variant.\n * - `hasStatusLabel` (boolean): Enables status label in header.\n * - `hasLeadingIcon` (boolean): Enables leading icon slot in header.\n * - `size` (`AccordionSize` enum): Layout variant, either `'single-line'` (default) or `'large'`.\n * - `position` (`Position` enum): Controls border radius for stacking (`'top'`, `'bottom'`, `'center'`, `'regular'`).\n * - `alertFrameType`, `alertFrameThickness`, `alertFrameStatus`: Configure the alert overlay's appearance (see `obc-alert-frame` for details).\n *\n * ### Events\n * - `accordion-toggle` – Fired when the accordion is expanded or collapsed. Event detail includes `{ expanded, cardTitle }`.\n *\n * ### Best Practices\n * - Only use the alert overlay for important, contextual notifications related to the card's content.\n * - For accessibility, ensure the card title is descriptive and unique within a group.\n * - Avoid nesting interactive elements (like buttons) directly in the header; place them in the expanded content if needed.\n *\n * ### Example:\n * ```\n * <obc-accordion-card\n * cardTitle=\"Settings\"\n * description=\"Configure your preferences\"\n * size=\"large\"\n * hasDescription\n * expanded\n * hasLeadingIcon\n * >\n * <span slot=\"leading-icon\"><obi-placeholder></obi-placeholder></span>\n * <div slot=\"expanded-content\">\n * <!-- Additional settings controls here -->\n * </div>\n * </obc-accordion-card>\n * ```\n *\n * @slot leading-icon - Icon at the start of the header (shown when `hasLeadingIcon` is true)\n * @slot expanded-content - Content revealed when the accordion is expanded\n * @slot alert-icon - Icon for the alert overlay (used when `hasAlert` is true)\n * @slot alert-label - Label text for the alert overlay (used when `hasAlert` is true)\n * @slot alert-timer - Timer/duration text for the alert overlay (used when `hasAlert` is true)\n * @fires {CustomEvent<{expanded: boolean, cardTitle: string}>} accordion-toggle - Fired when the accordion is expanded or collapsed\n * @stable\n */\n@customElement('obc-accordion-card')\nexport class ObcAccordionCard extends LitElement {\n /**\n * Main title text displayed in the accordion header.\n */\n @property({type: String}) cardTitle = '';\n\n /**\n * Supporting description text shown under the title (only in large size and if `hasDescription` is true).\n * @availableWhen size==large && hasDescription==true\n */\n @property({type: String}) description = '';\n\n /**\n * Optional status label displayed in the header (shown if `hasStatusLabel` is true).\n * @availableWhen hasStatusLabel==true\n */\n @property({type: String}) statusLabel = '';\n\n /**\n * Whether the accordion card is expanded (shows additional content).\n */\n @property({type: Boolean}) expanded = false;\n\n /**\n * Disables the accordion card, preventing user interaction and dimming its appearance.\n */\n @property({type: Boolean}) disabled = false;\n\n /**\n * Shows an alert overlay above the card when true. Configure appearance with `alertFrameType`, `alertFrameThickness`, and `alertFrameStatus`.\n */\n @property({type: Boolean}) hasAlert = false;\n\n /**\n * Enables the description text in the header (only in large size).\n */\n @property({type: Boolean}) hasDescription = false;\n\n /**\n * Enables the status label in the header.\n */\n @property({type: Boolean}) hasStatusLabel = false;\n\n /**\n * Enables the leading icon slot in the header.\n */\n @property({type: Boolean}) hasLeadingIcon = false;\n\n /**\n * Controls border radius/edge styling for stacking multiple accordions.\n * - `regular` (default): Standard border radius.\n * - `top`: Flat bottom edge (for top of a stack).\n * - `bottom`: Flat top edge (for bottom of a stack).\n * - `center`: Flat top and bottom edges (for middle of a stack).\n */\n @property({type: String}) position: Position = Position.regular;\n\n /**\n * Layout variant of the accordion card.\n * - `single-line` (default): Compact header with only title.\n * - `large`: Header includes a description beneath the title.\n */\n @property({type: String}) size: AccordionSize = AccordionSize.SingleLine;\n\n /**\n * Type of the alert frame overlay (used when `hasAlert` is true).\n * See `obc-alert-frame` for available types.\n * @availableWhen hasAlert==true\n */\n @property({type: String}) alertFrameType: ObcAlertFrameType =\n ObcAlertFrameType.Regular;\n\n /**\n * Thickness of the alert frame overlay (used when `hasAlert` is true).\n * See `obc-alert-frame` for available thickness values.\n * @availableWhen hasAlert==true\n */\n @property({type: String}) alertFrameThickness: ObcAlertFrameThickness =\n ObcAlertFrameThickness.Small;\n\n /**\n * Status of the alert frame overlay (used when `hasAlert` is true).\n * See `obc-alert-frame` for available statuses.\n * @availableWhen hasAlert==true\n */\n @property({type: String}) alertFrameStatus: AlertType = AlertType.Alarm;\n\n private get shouldShowDescription() {\n return (\n this.size === AccordionSize.Large &&\n this.hasDescription &&\n this.description.trim() !== ''\n );\n }\n\n private handleToggle() {\n if (this.disabled) return;\n\n this.expanded = !this.expanded;\n\n /**\n * @fires {CustomEvent<{expanded: boolean, cardTitle: string}>} accordion-toggle - Fired when the accordion is expanded or collapsed.\n */\n this.dispatchEvent(\n new CustomEvent('accordion-toggle', {\n detail: {\n expanded: this.expanded,\n cardTitle: this.cardTitle,\n },\n })\n );\n }\n\n private renderContentMain() {\n return html`\n <div class=\"header-container\">\n <div class=\"content-container\">\n ${this.hasLeadingIcon\n ? html`\n <div class=\"container-icon\">\n <slot name=\"leading-icon\"></slot>\n </div>\n `\n : ''}\n <div class=\"container-labels\">\n <div class=\"label-title\">${this.cardTitle}</div>\n ${this.shouldShowDescription\n ? html` <div class=\"label-description\">${this.description}</div> `\n : ''}\n </div>\n ${this.hasStatusLabel\n ? html`\n <div class=\"container-status\">\n <div class=\"status\">${this.statusLabel}</div>\n </div>\n `\n : ''}\n <div class=\"trailing-icon\">\n ${this.expanded\n ? html`<obi-chevron-up-google></obi-chevron-up-google>`\n : html`<obi-chevron-down-google></obi-chevron-down-google>`}\n </div>\n </div>\n </div>\n `;\n }\n\n private renderContentAdditional() {\n if (!this.expanded) return '';\n\n return html`\n <div class=\"container-content-additional\">\n <slot name=\"expanded-content\"></slot>\n </div>\n `;\n }\n\n private isShartEdgeBottom() {\n return this.position === Position.top || this.position === Position.center;\n }\n private isShartEdgeTop() {\n return (\n this.position === Position.bottom || this.position === Position.center\n );\n }\n\n override render() {\n return html`\n <div\n class=${classMap({\n wrapper: true,\n 'state-expanded': this.expanded,\n 'state-collapsed': !this.expanded,\n 'state-disabled': this.disabled,\n 'style-single-line': this.size === AccordionSize.SingleLine,\n 'style-large': this.size === AccordionSize.Large,\n 'position-top': this.position === Position.top,\n 'position-bottom': this.position === Position.bottom,\n 'position-center': this.position === Position.center,\n })}\n style=\"position: relative;\"\n >\n <div class=\"card-container\">\n <button\n class=\"content-button\"\n @click=${this.handleToggle}\n ?disabled=${this.disabled}\n aria-expanded=${this.expanded}\n aria-controls=\"accordion-content\"\n >\n ${this.renderContentMain()}\n </button>\n\n ${this.renderContentAdditional()}\n </div>\n\n ${this.hasAlert\n ? html`\n <obc-alert-frame\n class=\"alert alert-${this.alertFrameStatus}\"\n .sharpEdgeTopLeft=${this.isShartEdgeTop()}\n .sharpEdgeTopRight=${this.isShartEdgeTop()}\n .sharpEdgeBottomLeft=${this.isShartEdgeBottom()}\n .sharpEdgeBottomRight=${this.isShartEdgeBottom()}\n .type=${this.alertFrameType}\n .thickness=${this.alertFrameThickness}\n .status=${this.alertFrameStatus}\n >\n <slot name=\"alert-icon\" slot=\"icon\"></slot>\n <slot name=\"alert-label\" slot=\"label\"></slot>\n <slot name=\"alert-timer\" slot=\"timer\"></slot>\n </obc-alert-frame>\n `\n : ''}\n </div>\n `;\n }\n\n static override styles = unsafeCSS(compentStyle);\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'obc-accordion-card': ObcAccordionCard;\n }\n}\n"],"names":["AccordionSize","Position"],"mappings":"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"}
1
+ {"version":3,"file":"accordion-card.js","sources":["../../../src/components/accordion-card/accordion-card.ts"],"sourcesContent":["import {LitElement, html, unsafeCSS} from 'lit';\nimport {customElement} from '../../decorator.js';\nimport {classMap} from 'lit/directives/class-map.js';\nimport compentStyle from './accordion-card.css?inline';\nimport {property} from 'lit/decorators.js';\nimport '../../icons/icon-chevron-up-google.js';\nimport '../../icons/icon-chevron-down-google.js';\nimport '../alert-frame/alert-frame.js';\nimport {\n ObcAlertFrameThickness,\n ObcAlertFrameType,\n} from '../alert-frame/alert-frame.js';\nimport {AlertType} from '../../types.js';\n\nexport enum AccordionSize {\n SingleLine = 'single-line',\n Large = 'large',\n}\n\nexport enum Position {\n top = 'top',\n bottom = 'bottom',\n center = 'center',\n regular = 'regular',\n}\n\n/**\n * `<obc-accordion-card>` – Expandable/collapsible card component for grouping content in a compact, interactive section (accordion, expandable panel, disclosure).\n *\n * Provides a summary row with optional icon, title, description, and status label. Expands to reveal additional content on click/tap, supporting both single-line and large layouts. Can display an alert overlay for contextual warnings or notifications.\n *\n * ### Features\n * - **Expandable/collapsible:** Click/tap toggles between collapsed and expanded states, revealing or hiding additional content.\n * - **Variants:**\n * - **Single-line:** Compact header with only title (and optional icon/status).\n * - **Large:** Header includes a description beneath the title for more detail.\n * - **Positioning:** Supports `top`, `bottom`, `center`, or `regular` (default) border radius/edge styling for stacking multiple accordions.\n * - **Status label:** Optional status text displayed in the header (e.g., \"Active\", \"Warning\").\n * - **Leading icon:** Optional icon slot at the start of the header for visual context.\n * - **Alert overlay:** Can display an alert frame (with icon, label, timer) above the card for warnings or notifications.\n * - **Disabled state:** Prevents interaction and visually indicates non-interactive status.\n * - **Accessibility:** Uses button semantics and ARIA attributes for expand/collapse.\n *\n * ### Usage Guidelines\n * Use `obc-accordion-card` to organize related content in a collapsible section, especially when space is limited or when users may want to focus on one section at a time. Ideal for settings panels, grouped controls, or dashboards where expandable details are needed. Avoid using for persistent, always-visible content.\n *\n * - Use the **single-line** variant for brief titles or when space is tight.\n * - Use the **large** variant when you need to provide a short description or supporting text under the title.\n * - The **status label** is useful for showing quick state info (e.g., \"Active\", \"Error\").\n * - The **alert overlay** is intended for contextual warnings or notifications related to the card's content.\n * - For stacking multiple accordions, adjust the `position` property to control border radii and visual grouping.\n *\n * **TODO(designer):** Confirm if there are recommended limits on title/description length, and if only one accordion should be expanded at a time in a group.\n *\n * ### Slots\n * | Slot Name | Renders When... | Purpose |\n * |-------------------|------------------------|-------------------------------------------------------|\n * | leading-icon | `hasLeadingIcon` true | Icon at the start of the header (e.g., `<obi-placeholder></obi-placeholder>`). |\n * | expanded-content | Always | Content revealed when the accordion is expanded. |\n * | alert-icon | `hasAlert` true | Icon for the alert overlay (slot=\"icon\" in alert frame). |\n * | alert-label | `hasAlert` true | Label text for the alert overlay (slot=\"label\" in alert frame). |\n * | alert-timer | `hasAlert` true | Timer or duration text for the alert overlay (slot=\"timer\" in alert frame). |\n *\n * ### Properties\n * - `expanded` (boolean): Whether the card is expanded (shows additional content). Toggled by user interaction.\n * - `disabled` (boolean): Disables interaction and visually dims the card.\n * - `cardTitle` (string): Main title text shown in the header.\n * - `description` (string): Supporting description (shown only in large size and if `hasDescription` is true).\n * - `statusLabel` (string): Optional status text in the header (shown if `hasStatusLabel` is true).\n * - `hasAlert` (boolean): Shows an alert overlay above the card when true.\n * - `hasDescription` (boolean): Enables description text in large variant.\n * - `hasStatusLabel` (boolean): Enables status label in header.\n * - `hasLeadingIcon` (boolean): Enables leading icon slot in header.\n * - `size` (`AccordionSize` enum): Layout variant, either `'single-line'` (default) or `'large'`.\n * - `position` (`Position` enum): Controls border radius for stacking (`'top'`, `'bottom'`, `'center'`, `'regular'`).\n * - `alertFrameType`, `alertFrameThickness`, `alertFrameStatus`: Configure the alert overlay's appearance (see `obc-alert-frame` for details).\n *\n * ### Events\n * - `accordion-toggle` – Fired when the accordion is expanded or collapsed. Event detail includes `{ expanded, cardTitle }`.\n *\n * ### Best Practices\n * - Only use the alert overlay for important, contextual notifications related to the card's content.\n * - For accessibility, ensure the card title is descriptive and unique within a group.\n * - Avoid nesting interactive elements (like buttons) directly in the header; place them in the expanded content if needed.\n *\n * ### Example:\n * ```\n * <obc-accordion-card\n * cardTitle=\"Settings\"\n * description=\"Configure your preferences\"\n * size=\"large\"\n * hasDescription\n * expanded\n * hasLeadingIcon\n * >\n * <span slot=\"leading-icon\"><obi-placeholder></obi-placeholder></span>\n * <div slot=\"expanded-content\">\n * <!-- Additional settings controls here -->\n * </div>\n * </obc-accordion-card>\n * ```\n *\n * @slot leading-icon - Icon at the start of the header (shown when `hasLeadingIcon` is true)\n * @slot expanded-content - Content revealed when the accordion is expanded\n * @slot alert-icon - Icon for the alert overlay (used when `hasAlert` is true)\n * @slot alert-label - Label text for the alert overlay (used when `hasAlert` is true)\n * @slot alert-timer - Timer/duration text for the alert overlay (used when `hasAlert` is true)\n * @fires {CustomEvent<{expanded: boolean, cardTitle: string}>} accordion-toggle - Fired when the accordion is expanded or collapsed\n * @stable\n */\n@customElement('obc-accordion-card')\nexport class ObcAccordionCard extends LitElement {\n /**\n * Main title text displayed in the accordion header.\n */\n @property({type: String}) cardTitle = '';\n\n /**\n * Supporting description text shown under the title (only in large size and if `hasDescription` is true).\n * @availableWhen size==large && hasDescription==true\n */\n @property({type: String}) description = '';\n\n /**\n * Optional status label displayed in the header (shown if `hasStatusLabel` is true).\n * @availableWhen hasStatusLabel==true\n */\n @property({type: String}) statusLabel = '';\n\n /**\n * Whether the accordion card is expanded (shows additional content).\n */\n @property({type: Boolean}) expanded = false;\n\n /**\n * Disables the accordion card, preventing user interaction and dimming its appearance.\n */\n @property({type: Boolean}) disabled = false;\n\n /**\n * Shows an alert overlay above the card when true. Configure appearance with `alertFrameType`, `alertFrameThickness`, and `alertFrameStatus`.\n */\n @property({type: Boolean}) hasAlert = false;\n\n /**\n * Enables the description text in the header (only in large size).\n */\n @property({type: Boolean}) hasDescription = false;\n\n /**\n * Enables the status label in the header.\n */\n @property({type: Boolean}) hasStatusLabel = false;\n\n /**\n * Enables the leading icon slot in the header.\n */\n @property({type: Boolean}) hasLeadingIcon = false;\n\n /**\n * Controls border radius/edge styling for stacking multiple accordions.\n * - `regular` (default): Standard border radius.\n * - `top`: Flat bottom edge (for top of a stack).\n * - `bottom`: Flat top edge (for bottom of a stack).\n * - `center`: Flat top and bottom edges (for middle of a stack).\n */\n @property({type: String}) position: Position = Position.regular;\n\n /**\n * Layout variant of the accordion card.\n * - `single-line` (default): Compact header with only title.\n * - `large`: Header includes a description beneath the title.\n */\n @property({type: String}) size: AccordionSize = AccordionSize.SingleLine;\n\n /**\n * Type of the alert frame overlay (used when `hasAlert` is true).\n * See `obc-alert-frame` for available types.\n * @availableWhen hasAlert==true\n */\n @property({type: String}) alertFrameType: ObcAlertFrameType =\n ObcAlertFrameType.Regular;\n\n /**\n * Thickness of the alert frame overlay (used when `hasAlert` is true).\n * See `obc-alert-frame` for available thickness values.\n * @availableWhen hasAlert==true\n */\n @property({type: String}) alertFrameThickness: ObcAlertFrameThickness =\n ObcAlertFrameThickness.Small;\n\n /**\n * Status of the alert frame overlay (used when `hasAlert` is true).\n * See `obc-alert-frame` for available statuses.\n * @availableWhen hasAlert==true\n */\n @property({type: String}) alertFrameStatus: AlertType = AlertType.Alarm;\n\n private get shouldShowDescription() {\n return (\n this.size === AccordionSize.Large &&\n this.hasDescription &&\n this.description.trim() !== ''\n );\n }\n\n private handleToggle() {\n if (this.disabled) return;\n\n this.expanded = !this.expanded;\n\n /**\n * Fired when the accordion is expanded or collapsed.\n * @fires accordion-toggle\n */\n this.dispatchEvent(\n new CustomEvent('accordion-toggle', {\n detail: {\n expanded: this.expanded,\n cardTitle: this.cardTitle,\n },\n })\n );\n }\n\n private renderContentMain() {\n return html`\n <div class=\"header-container\">\n <div class=\"content-container\">\n ${this.hasLeadingIcon\n ? html`\n <div class=\"container-icon\">\n <slot name=\"leading-icon\"></slot>\n </div>\n `\n : ''}\n <div class=\"container-labels\">\n <div class=\"label-title\">${this.cardTitle}</div>\n ${this.shouldShowDescription\n ? html` <div class=\"label-description\">${this.description}</div> `\n : ''}\n </div>\n ${this.hasStatusLabel\n ? html`\n <div class=\"container-status\">\n <div class=\"status\">${this.statusLabel}</div>\n </div>\n `\n : ''}\n <div class=\"trailing-icon\">\n ${this.expanded\n ? html`<obi-chevron-up-google></obi-chevron-up-google>`\n : html`<obi-chevron-down-google></obi-chevron-down-google>`}\n </div>\n </div>\n </div>\n `;\n }\n\n private renderContentAdditional() {\n if (!this.expanded) return '';\n\n return html`\n <div class=\"container-content-additional\">\n <slot name=\"expanded-content\"></slot>\n </div>\n `;\n }\n\n private isShartEdgeBottom() {\n return this.position === Position.top || this.position === Position.center;\n }\n private isShartEdgeTop() {\n return (\n this.position === Position.bottom || this.position === Position.center\n );\n }\n\n override render() {\n return html`\n <div\n class=${classMap({\n wrapper: true,\n 'state-expanded': this.expanded,\n 'state-collapsed': !this.expanded,\n 'state-disabled': this.disabled,\n 'style-single-line': this.size === AccordionSize.SingleLine,\n 'style-large': this.size === AccordionSize.Large,\n 'position-top': this.position === Position.top,\n 'position-bottom': this.position === Position.bottom,\n 'position-center': this.position === Position.center,\n })}\n style=\"position: relative;\"\n >\n <div class=\"card-container\">\n <button\n class=\"content-button\"\n @click=${this.handleToggle}\n ?disabled=${this.disabled}\n aria-expanded=${this.expanded}\n aria-controls=\"accordion-content\"\n >\n ${this.renderContentMain()}\n </button>\n\n ${this.renderContentAdditional()}\n </div>\n\n ${this.hasAlert\n ? html`\n <obc-alert-frame\n class=\"alert alert-${this.alertFrameStatus}\"\n .sharpEdgeTopLeft=${this.isShartEdgeTop()}\n .sharpEdgeTopRight=${this.isShartEdgeTop()}\n .sharpEdgeBottomLeft=${this.isShartEdgeBottom()}\n .sharpEdgeBottomRight=${this.isShartEdgeBottom()}\n .type=${this.alertFrameType}\n .thickness=${this.alertFrameThickness}\n .status=${this.alertFrameStatus}\n >\n <slot name=\"alert-icon\" slot=\"icon\"></slot>\n <slot name=\"alert-label\" slot=\"label\"></slot>\n <slot name=\"alert-timer\" slot=\"timer\"></slot>\n </obc-alert-frame>\n `\n : ''}\n </div>\n `;\n }\n\n static override styles = unsafeCSS(compentStyle);\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'obc-accordion-card': ObcAccordionCard;\n }\n}\n"],"names":["AccordionSize","Position"],"mappings":"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"}
@@ -184,11 +184,13 @@ export declare class ObcAdviceMessageItem extends LitElement {
184
184
  emptyText: string;
185
185
  private get mappedType();
186
186
  /**
187
- * @fires {CustomEvent<void>} message-click - Fired when the main message area is clicked.
187
+ * Fired when the main message area is clicked.
188
+ * @fires message-click
188
189
  */
189
190
  private handleMessageClick;
190
191
  /**
191
- * @fires {CustomEvent<void>} action-click - Fired when the action button (text or icon) is clicked.
192
+ * Fired when the action button (text or icon) is clicked.
193
+ * @fires action-click
192
194
  */
193
195
  private handleActionClick;
194
196
  render(): import('lit-html').TemplateResult<1>;
@@ -1 +1 @@
1
- {"version":3,"file":"advice-message-item.d.ts","sourceRoot":"","sources":["../../../src/components/advice-message-item/advice-message-item.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,UAAU,EAA2B,MAAM,KAAK,CAAC;AAIzD,OAAO,+CAA+C,CAAC;AAEvD,OAAO,gDAAgD,CAAC;AACxD,OAAO,kCAAkC,CAAC;AAE1C,oBAAY,wBAAwB;IAClC,MAAM,WAAW;IACjB,UAAU,gBAAgB;IAC1B,cAAc,qBAAqB;IACnC,QAAQ,aAAa;CACtB;AAED,oBAAY,wBAAwB;IAClC,OAAO,YAAY;IACnB,IAAI,SAAS;CACd;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoFG;AACH,qBACa,oBAAqB,SAAQ,UAAU;IAClD;;;;OAIG;IACgC,KAAK,SAAM;IAE9C;;;;OAIG;IACuB,WAAW,SAAM;IAE3C;;;;OAIG;IACuB,IAAI,SAAM;IAEpC;;;;OAIG;IACuB,aAAa,SAAM;IAE7C;;;;OAIG;IACuB,WAAW,SAAU;IAE/C;;;;;;;;OAQG;IACuB,IAAI,EAAE,wBAAwB,CACtB;IAElC;;;;;;OAMG;IACuB,IAAI,EAAE,wBAAwB,CACrB;IAEnC;;;;OAIG;IAC0C,SAAS,EAAE,OAAO,CAAQ;IAEvE;;;;OAIG;IAC0C,eAAe,EAAE,OAAO,CAAQ;IAE7E;;;;OAIG;IAC0C,aAAa,EAAE,OAAO,CAAQ;IAE3E;;;;OAIG;IACwB,aAAa,UAAS;IAEjD;;;;OAIG;IACwB,gBAAgB,UAAS;IAEpD;;;;OAIG;IACuB,SAAS,SAAsB;IAEzD,OAAO,KAAK,UAAU,GAerB;IAED;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAI1B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAIhB,MAAM;IA2Cf,OAAgB,MAAM,0BAA6B;CACpD;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,yBAAyB,EAAE,oBAAoB,CAAC;KACjD;CACF"}
1
+ {"version":3,"file":"advice-message-item.d.ts","sourceRoot":"","sources":["../../../src/components/advice-message-item/advice-message-item.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,UAAU,EAA2B,MAAM,KAAK,CAAC;AAIzD,OAAO,+CAA+C,CAAC;AAEvD,OAAO,gDAAgD,CAAC;AACxD,OAAO,kCAAkC,CAAC;AAE1C,oBAAY,wBAAwB;IAClC,MAAM,WAAW;IACjB,UAAU,gBAAgB;IAC1B,cAAc,qBAAqB;IACnC,QAAQ,aAAa;CACtB;AAED,oBAAY,wBAAwB;IAClC,OAAO,YAAY;IACnB,IAAI,SAAS;CACd;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoFG;AACH,qBACa,oBAAqB,SAAQ,UAAU;IAClD;;;;OAIG;IACgC,KAAK,SAAM;IAE9C;;;;OAIG;IACuB,WAAW,SAAM;IAE3C;;;;OAIG;IACuB,IAAI,SAAM;IAEpC;;;;OAIG;IACuB,aAAa,SAAM;IAE7C;;;;OAIG;IACuB,WAAW,SAAU;IAE/C;;;;;;;;OAQG;IACuB,IAAI,EAAE,wBAAwB,CACtB;IAElC;;;;;;OAMG;IACuB,IAAI,EAAE,wBAAwB,CACrB;IAEnC;;;;OAIG;IAC0C,SAAS,EAAE,OAAO,CAAQ;IAEvE;;;;OAIG;IAC0C,eAAe,EAAE,OAAO,CAAQ;IAE7E;;;;OAIG;IAC0C,aAAa,EAAE,OAAO,CAAQ;IAE3E;;;;OAIG;IACwB,aAAa,UAAS;IAEjD;;;;OAIG;IACwB,gBAAgB,UAAS;IAEpD;;;;OAIG;IACuB,SAAS,SAAsB;IAEzD,OAAO,KAAK,UAAU,GAerB;IAED;;;OAGG;IACH,OAAO,CAAC,kBAAkB;IAI1B;;;OAGG;IACH,OAAO,CAAC,iBAAiB;IAIhB,MAAM;IA2Cf,OAAgB,MAAM,0BAA6B;CACpD;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,yBAAyB,EAAE,oBAAoB,CAAC;KACjD;CACF"}