@oicl/openbridge-webcomponents-full-bundle 2.0.0-next.45 → 2.0.0-next.49

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 (95) hide show
  1. package/.storybook/ComponentPreview.tsx +26 -0
  2. package/.storybook/PreviewTemplate.tsx +99 -0
  3. package/.storybook/action-handler.ts +81 -0
  4. package/.storybook/channels.ts +44 -0
  5. package/.storybook/main.ts +313 -0
  6. package/.storybook/manager.ts +71 -0
  7. package/.storybook/openbridgeTheme.ts +197 -0
  8. package/.storybook/preview-head.html +15 -0
  9. package/.storybook/preview.tsx +129 -0
  10. package/.storybook/vitest.setup.ts +23 -0
  11. package/bundle/openbridge-webcomponents.bundle.js +14869 -14889
  12. package/bundle/openbridge-webcomponents.bundle.js.map +1 -1
  13. package/custom-elements.json +81 -82
  14. package/dist/components/badge/badge.css.js +15 -15
  15. package/dist/components/icon-button/icon-button.d.ts +4 -0
  16. package/dist/components/icon-button/icon-button.d.ts.map +1 -1
  17. package/dist/components/icon-button/icon-button.js.map +1 -1
  18. package/dist/navigation-instruments/compass/compass.d.ts +3 -3
  19. package/dist/navigation-instruments/compass/compass.d.ts.map +1 -1
  20. package/dist/navigation-instruments/compass/compass.js +3 -3
  21. package/dist/navigation-instruments/compass/compass.js.map +1 -1
  22. package/dist/navigation-instruments/compass-indicator/compass-indicator.d.ts +12 -0
  23. package/dist/navigation-instruments/compass-indicator/compass-indicator.d.ts.map +1 -1
  24. package/dist/navigation-instruments/compass-indicator/compass-indicator.js +9 -1
  25. package/dist/navigation-instruments/compass-indicator/compass-indicator.js.map +1 -1
  26. package/dist/navigation-instruments/velocity-projection-plot/velocity-projection-plot.d.ts +4 -4
  27. package/dist/navigation-instruments/velocity-projection-plot/velocity-projection-plot.d.ts.map +1 -1
  28. package/dist/navigation-instruments/velocity-projection-plot/velocity-projection-plot.js +15 -14
  29. package/dist/navigation-instruments/velocity-projection-plot/velocity-projection-plot.js.map +1 -1
  30. package/dist/navigation-instruments/watch/environment.d.ts +39 -1
  31. package/dist/navigation-instruments/watch/environment.d.ts.map +1 -1
  32. package/dist/navigation-instruments/watch/environment.js +71 -88
  33. package/dist/navigation-instruments/watch/environment.js.map +1 -1
  34. package/dist/navigation-instruments/watch/watch.d.ts +1 -1
  35. package/dist/navigation-instruments/watch/watch.d.ts.map +1 -1
  36. package/dist/navigation-instruments/watch/watch.js +4 -4
  37. package/dist/navigation-instruments/watch/watch.js.map +1 -1
  38. package/dist/navigation-instruments/wind/wind.d.ts +1 -1
  39. package/dist/navigation-instruments/wind/wind.d.ts.map +1 -1
  40. package/dist/navigation-instruments/wind/wind.js +3 -3
  41. package/dist/navigation-instruments/wind/wind.js.map +1 -1
  42. package/dist/navigation-instruments/wind-indicator/wind-indicator.d.ts +63 -9
  43. package/dist/navigation-instruments/wind-indicator/wind-indicator.d.ts.map +1 -1
  44. package/dist/navigation-instruments/wind-indicator/wind-indicator.js +57 -1995
  45. package/dist/navigation-instruments/wind-indicator/wind-indicator.js.map +1 -1
  46. package/dist/navigation-instruments/wind-propulsion/wind-propulsion.d.ts +1 -1
  47. package/dist/navigation-instruments/wind-propulsion/wind-propulsion.d.ts.map +1 -1
  48. package/dist/navigation-instruments/wind-propulsion/wind-propulsion.js +4 -4
  49. package/dist/navigation-instruments/wind-propulsion/wind-propulsion.js.map +1 -1
  50. package/eslint.config.mjs +589 -0
  51. package/fix-imports.mjs +185 -0
  52. package/fix-js-extensions.mjs +44 -0
  53. package/lit-localize.json +15 -0
  54. package/new-component.ts +148 -0
  55. package/package.json +56 -3
  56. package/postcss.config.mjs +195 -0
  57. package/script/check-css-mixins.ts +191 -0
  58. package/script/check-css-variables.ts +280 -0
  59. package/script/convert-icons.ts +202 -0
  60. package/script/convert-vessel-svg-to-ts.ts +110 -0
  61. package/script/docgen/README.md +95 -0
  62. package/script/docgen/docs-gen.ts +225 -0
  63. package/script/docgen/prompt-system.txt +187 -0
  64. package/script/download-alert-icons.ts +193 -0
  65. package/script/download-icons.ts +314 -0
  66. package/script/figmavariables.json +139 -0
  67. package/script/generate-bundle-entry.ts +77 -0
  68. package/script/prepare-full-bundle.ts +105 -0
  69. package/script/sort-custom-element-manifest.ts +67 -0
  70. package/src/components/badge/badge.css +15 -15
  71. package/src/components/badge/badge.stories.ts +2 -0
  72. package/src/components/icon-button/icon-button.ts +4 -0
  73. package/src/navigation-instruments/compass/compass.stories.ts +5 -2
  74. package/src/navigation-instruments/compass/compass.ts +4 -4
  75. package/src/navigation-instruments/compass-indicator/compass-indicator.stories.ts +34 -1
  76. package/src/navigation-instruments/compass-indicator/compass-indicator.ts +19 -1
  77. package/src/navigation-instruments/velocity-projection-plot/velocity-projection-plot.stories.ts +13 -13
  78. package/src/navigation-instruments/velocity-projection-plot/velocity-projection-plot.ts +15 -11
  79. package/src/navigation-instruments/watch/environment.ts +120 -87
  80. package/src/navigation-instruments/watch/watch.stories.ts +2 -2
  81. package/src/navigation-instruments/watch/watch.ts +3 -3
  82. package/src/navigation-instruments/wind/wind.stories.ts +4 -3
  83. package/src/navigation-instruments/wind/wind.ts +2 -2
  84. package/src/navigation-instruments/wind-indicator/wind-indicator.stories.ts +22 -12
  85. package/src/navigation-instruments/wind-indicator/wind-indicator.ts +91 -46
  86. package/src/navigation-instruments/wind-propulsion/wind-propulsion.stories.ts +3 -3
  87. package/src/navigation-instruments/wind-propulsion/wind-propulsion.ts +3 -3
  88. package/tsconfig.json +38 -0
  89. package/vite.config.ts +107 -0
  90. package/vitest.browser.config.ts +14 -0
  91. package/vitest.config.ts +51 -0
  92. package/xliff/es-419.xlf +111 -0
  93. package/xliff/fi-FI.xlf +139 -0
  94. package/dist/NotoSans.ttf +0 -0
  95. package/dist/oicl.svg +0 -4
@@ -47352,7 +47352,7 @@
47352
47352
  "declarations": [
47353
47353
  {
47354
47354
  "kind": "class",
47355
- "description": "`<obc-icon-button>` – An icon-only or icon-with-label button for quick actions.\n\nProvides a compact, visually prominent button that displays an icon (and optionally a label) for triggering actions. Commonly used for toolbars, navigation, or contextual actions where space is limited and a recognizable icon can represent the function.\n\nAppears as a circular or rounded button with configurable visual styles, supporting progress indication and various layout adaptations.\n\n## Features\n- **Variants:**\n - `normal` (default): Standard appearance for most use cases.\n - `raised`: Adds elevation/shadow for prominence.\n - `flat`: Minimal, backgroundless style for subtle actions.\n- **Progress Indicator:**\n - Shows a circular progress spinner overlay when the `progress` property is set (0–100). Useful for indicating loading or ongoing actions.\n- **Label Support:**\n - Optionally displays a text label below the icon when `hasLabel` is true and content is provided in the `label` slot.\n- **Corner Alignment:**\n - `cornerLeft` and `cornerRight` adjust the button's border radius and alignment for seamless placement at the start or end of a container.\n- **Active State:**\n - `activated` visually highlights the button as selected or toggled.\n - `activeColor` applies an accent color for emphasis.\n- **Wide Mode:**\n - `wide` increases the button's width for easier touch targets or visual balance.\n- **Disabled State:**\n - `disabled` prevents interaction and visually dims the button.\n\n## Usage Guidelines\n- Use `obc-icon-button` for actions represented by icons, such as toolbars, navigation, or quick-access commands.\n- Add a label (with `hasLabel` and the `label` slot) when clarity is needed or when icons alone may not be universally understood.\n- Use the progress indicator for actions that take time, such as uploads or background processes.\n- Prefer the `normal` variant for most cases; use `raised` to draw attention, and `flat` for less prominent or inline actions.\n- For grouped or edge-aligned layouts, use `cornerLeft` or `cornerRight` to visually merge with container edges.\n- Avoid using icon buttons for destructive or critical actions unless paired with clear feedback.\n- **TODO(designer):** Clarify recommended icon sizes and when to use label vs. icon-only.\n\n## Slots\n| Slot Name | Renders When... | Purpose |\n|-----------|---------------------|----------------------------------------------|\n| (default) | Always | The icon to display (e.g., `<obi-search>`) |\n| label | If `hasLabel` is set | Optional label text below the icon |\n\n## Best Practices\n- Ensure icons are clear and universally recognizable.\n- For accessibility, provide an `aria-label` or descriptive label for the button's action.\n- When using the progress indicator, avoid showing it for very short actions to prevent visual flicker.\n\n## Example:\n```\n<obc-icon-button variant=\"normal\">\n <obi-search></obi-search>\n</obc-icon-button>\n\n<obc-icon-button variant=\"normal\" hasLabel>\n <obi-arrow></obi-arrow>\n <span slot=\"label\">Next</span>\n</obc-icon-button>\n```",
47355
+ "description": "`<obc-icon-button>` – An icon-only or icon-with-label button for quick actions.\n\nProvides a compact, visually prominent button that displays an icon (and optionally a label) for triggering actions. Commonly used for toolbars, navigation, or contextual actions where space is limited and a recognizable icon can represent the function.\n\nAppears as a circular or rounded button with configurable visual styles, supporting progress indication and various layout adaptations.\n\n## Features\n- **Variants:**\n - `normal` (default): Standard appearance for most use cases.\n - `raised`: Adds elevation/shadow for prominence.\n - `flat`: Minimal, backgroundless style for subtle actions.\n- **Progress Indicator:**\n - Shows a circular progress spinner overlay when the `progress` property is set (0–100). Useful for indicating loading or ongoing actions.\n- **Label Support:**\n - Optionally displays a text label below the icon when `hasLabel` is true and content is provided in the `label` slot.\n- **Corner Alignment:**\n - `cornerLeft` and `cornerRight` adjust the button's border radius and alignment for seamless placement at the start or end of a container.\n- **Active State:**\n - `activated` visually highlights the button as selected or toggled.\n - `activeColor` applies an accent color for emphasis.\n- **Wide Mode:**\n - `wide` increases the button's width for easier touch targets or visual balance.\n- **Disabled State:**\n - `disabled` prevents interaction and visually dims the button.\n\n## Usage Guidelines\n- Use `obc-icon-button` for actions represented by icons, such as toolbars, navigation, or quick-access commands.\n- Add a label (with `hasLabel` and the `label` slot) when clarity is needed or when icons alone may not be universally understood.\n- Use the progress indicator for actions that take time, such as uploads or background processes.\n- Prefer the `normal` variant for most cases; use `raised` to draw attention, and `flat` for less prominent or inline actions.\n- For grouped or edge-aligned layouts, use `cornerLeft` or `cornerRight` to visually merge with container edges.\n- Avoid using icon buttons for destructive or critical actions unless paired with clear feedback.\n- **TODO(designer):** Clarify recommended icon sizes and when to use label vs. icon-only.\n\n## Slots\n| Slot Name | Renders When... | Purpose |\n|-----------|---------------------|----------------------------------------------|\n| (default) | Always | The icon to display (e.g., `<obi-search>`) |\n| label | If `hasLabel` is set | Optional label text below the icon |\n\n## Events\n- Emits a standard `click` event (`onClick` handler in framework wrappers) when activated.\n\n## Best Practices\n- Ensure icons are clear and universally recognizable.\n- For accessibility, provide an `aria-label` or descriptive label for the button's action.\n- When using the progress indicator, avoid showing it for very short actions to prevent visual flicker.\n\n## Example:\n```\n<obc-icon-button variant=\"normal\">\n <obi-search></obi-search>\n</obc-icon-button>\n\n<obc-icon-button variant=\"normal\" hasLabel>\n <obi-arrow></obi-arrow>\n <span slot=\"label\">Next</span>\n</obc-icon-button>\n```",
47356
47356
  "name": "ObcIconButton",
47357
47357
  "slots": [
47358
47358
  {
@@ -47469,6 +47469,12 @@
47469
47469
  "readonly": true
47470
47470
  }
47471
47471
  ],
47472
+ "events": [
47473
+ {
47474
+ "description": "Fired when the button is clicked (if not disabled).",
47475
+ "name": "click"
47476
+ }
47477
+ ],
47472
47478
  "attributes": [
47473
47479
  {
47474
47480
  "name": "variant",
@@ -69104,7 +69110,7 @@
69104
69110
  "declarations": [
69105
69111
  {
69106
69112
  "kind": "class",
69107
- "description": "`<obc-compass-indicator>` – A compact compass direction indicator with heading, course, and north variants.\n\nRenders a 48 x 48 directional indicator that can switch between a circular\ncompass face and labeled compact readouts. Use it when you need a small\ndirectional cue next to a numeric readout or inside dense instrument layouts.\n\n## Features\n\n- **Types**: `regular` shows the circular compass indicator; `labeled` shows a framed indicator with a single cardinal label.\n- **Directions**: `heading`, `course`, and `north` each use their own visual symbol.\n- **Angle-driven output**: `angle` rotates the active symbol and drives the derived label in labeled mode.\n\n## Usage Guidelines\n\n- Use `direction=\"heading\"` for the filled heading arrow variant.\n- Use `direction=\"course\"` for the outlined course arrow variant.\n- Use `direction=\"north\"` for the north marker / bearing-style indicator.\n- Switch `type` to `labeled` when the indicator should also communicate the\n nearest cardinal direction as text.",
69113
+ "description": "`<obc-compass-indicator>` – A compact compass direction indicator with heading, course, and north variants.\n\nRenders a 48 x 48 directional indicator that can switch between a circular\ncompass face and labeled compact readouts. Use it when you need a small\ndirectional cue next to a numeric readout or inside dense instrument layouts.\n\n## Features\n\n- **Types**: `regular` shows the circular compass indicator; `labeled` shows a framed indicator with a single cardinal label.\n- **Directions**: `heading`, `course`, and `north` each use their own visual symbol.\n- **Angle-driven output**: `angle` rotates the active symbol and drives the derived label in labeled mode.\n- **Orientation**: `northUp` keeps the compass face fixed north-up and rotates the arrow; when `false` the face rotates and the arrow stays pointing up (heading-up / course-up).\n\n## Usage Guidelines\n\n- Use `direction=\"heading\"` for the filled heading arrow variant.\n- Use `direction=\"course\"` for the outlined course arrow variant.\n- Use `direction=\"north\"` for the north marker / bearing-style indicator.\n- Switch `type` to `labeled` when the indicator should also communicate the\n nearest cardinal direction as text.\n- Set `northUp` to `false` to render a heading-up / course-up presentation\n where the arrow stays vertical and the compass face rotates instead.",
69108
69114
  "name": "ObcCompassIndicator",
69109
69115
  "members": [
69110
69116
  {
@@ -69138,6 +69144,15 @@
69138
69144
  },
69139
69145
  "attribute": "direction"
69140
69146
  },
69147
+ {
69148
+ "kind": "field",
69149
+ "name": "northUp",
69150
+ "type": {
69151
+ "text": "boolean"
69152
+ },
69153
+ "default": "true",
69154
+ "description": "When `true` (default) the compass face stays north-up and the arrow\nrotates by `angle`. When `false` the arrow stays pointing up and the\ncompass face rotates instead (heading-up / course-up presentation).\n\nDeclared with `attribute: false` because the default is `true`; set it\nvia the JavaScript property (or framework binding) to opt out."
69155
+ },
69141
69156
  {
69142
69157
  "kind": "field",
69143
69158
  "name": "normalizedAngle",
@@ -70000,7 +70015,7 @@
70000
70015
  "declarations": [
70001
70016
  {
70002
70017
  "kind": "class",
70003
- "description": "`<obc-compass>` – Full-featured compass with HDG/COG arrows, rate-of-turn indicator, and environmental overlays.\n\nRenders a circular compass instrument that displays heading (HDG) and\ncourse-over-ground (COG) as rotating arrows over a triple-ring watch face.\nIt supports wind and current indicators, a vessel silhouette, heading\nsetpoint with auto at-setpoint detection, advice zones, and a rate-of-turn\n(ROT) dot indicator. The compass can be oriented north-up, heading-up, or\ncourse-up.\n\n## Features\n\n- **Direction modes**: `northUp` (default), `headingUp`, or `courseUp`\n via the `direction` property.\n- **HDG / COG arrows**: Two styled arrows overlay the watch face,\n rotating independently.\n- **Heading setpoint**: Optional setpoint marker with auto at-setpoint\n detection via `headingSetpoint`, `atHeadingSetpoint`, and deadband\n tuning properties.\n- **Advice zones**: Pass `headingAdvices` to render caution/alert arcs;\n triggered state is derived from whether the current heading falls\n inside the advice range.\n- **Rate of turn**: Animated ROT indicator driven by\n `rateOfTurnDegreesPerMinute` (deg/min, the maritime / AIS convention).\n Supports spinning dots (`rotType=\"dots\"`) — the dot animation is\n amplified by `rotDotAnimationFactor` so small physical values still\n read at a glance — and a banana-shaped arc bar (`rotType=\"bar\"`)\n showing the HDG→COG span. Bar extent is driven by the physical value\n only (gain is not applied). Position on the outer scale ring or inner\n circle via `rotPosition`.\n- **Environmental overlays**: Wind speed/direction and current\n speed/direction indicators on the watch face.\n- **Vessel image**: Configurable vessel silhouette centered on the\n compass, rotating with heading.\n- **Color priority**: Set `priority` to `Priority.enhanced` to use the\n blue/enhanced color palette instead of the default gray/regular palette\n (default: `Priority.regular`).\n\n## Usage Guidelines\n\n- Set `heading` and `courseOverGround` to the current sensor values\n in degrees.\n- Use `direction` to control the compass orientation mode.\n- Use `headingSetpoint` to show a target heading marker.\n- Pass `headingAdvices` as an array of `AngleAdvice` objects for\n caution/alert zones.\n- Set `windSpeed` / `windFromDirection` and `currentSpeed` /\n `currentFromDirection` to display environmental indicators.\n\n## Example\n\n```html\n<obc-compass\n heading=\"45\"\n courseOverGround=\"50\"\n direction=\"northUp\"\n headingSetpoint=\"90\"\n priority=\"regular\"\n vesselImage=\"genericTop\"\n></obc-compass>\n```",
70018
+ "description": "`<obc-compass>` – Full-featured compass with HDG/COG arrows, rate-of-turn indicator, and environmental overlays.\n\nRenders a circular compass instrument that displays heading (HDG) and\ncourse-over-ground (COG) as rotating arrows over a triple-ring watch face.\nIt supports wind and current indicators, a vessel silhouette, heading\nsetpoint with auto at-setpoint detection, advice zones, and a rate-of-turn\n(ROT) dot indicator. The compass can be oriented north-up, heading-up, or\ncourse-up.\n\n## Features\n\n- **Direction modes**: `northUp` (default), `headingUp`, or `courseUp`\n via the `direction` property.\n- **HDG / COG arrows**: Two styled arrows overlay the watch face,\n rotating independently.\n- **Heading setpoint**: Optional setpoint marker with auto at-setpoint\n detection via `headingSetpoint`, `atHeadingSetpoint`, and deadband\n tuning properties.\n- **Advice zones**: Pass `headingAdvices` to render caution/alert arcs;\n triggered state is derived from whether the current heading falls\n inside the advice range.\n- **Rate of turn**: Animated ROT indicator driven by\n `rateOfTurnDegreesPerMinute` (deg/min, the maritime / AIS convention).\n Supports spinning dots (`rotType=\"dots\"`) — the dot animation is\n amplified by `rotDotAnimationFactor` so small physical values still\n read at a glance — and a banana-shaped arc bar (`rotType=\"bar\"`)\n showing the HDG→COG span. Bar extent is driven by the physical value\n only (gain is not applied). Position on the outer scale ring or inner\n circle via `rotPosition`.\n- **Environmental overlays**: Wind speed/direction and current\n speed/direction indicators on the watch face.\n- **Vessel image**: Configurable vessel silhouette centered on the\n compass, rotating with heading.\n- **Color priority**: Set `priority` to `Priority.enhanced` to use the\n blue/enhanced color palette instead of the default gray/regular palette\n (default: `Priority.regular`).\n\n## Usage Guidelines\n\n- Set `heading` and `courseOverGround` to the current sensor values\n in degrees.\n- Use `direction` to control the compass orientation mode.\n- Use `headingSetpoint` to show a target heading marker.\n- Pass `headingAdvices` as an array of `AngleAdvice` objects for\n caution/alert zones.\n- Set `currentWindSpeedKnots` / `windFromDirection` and `currentSpeed` /\n `currentFromDirection` to display environmental indicators.\n\n## Example\n\n```html\n<obc-compass\n heading=\"45\"\n courseOverGround=\"50\"\n direction=\"northUp\"\n headingSetpoint=\"90\"\n priority=\"regular\"\n vesselImage=\"genericTop\"\n></obc-compass>\n```",
70004
70019
  "name": "ObcCompass",
70005
70020
  "members": [
70006
70021
  {
@@ -70118,13 +70133,13 @@
70118
70133
  },
70119
70134
  {
70120
70135
  "kind": "field",
70121
- "name": "windSpeed",
70136
+ "name": "currentWindSpeedKnots",
70122
70137
  "type": {
70123
70138
  "text": "number | null"
70124
70139
  },
70125
70140
  "default": "null",
70126
- "description": "The wind speed in beaufort scale number.",
70127
- "attribute": "windSpeed"
70141
+ "description": "The wind speed in knots.",
70142
+ "attribute": "currentWindSpeedKnots"
70128
70143
  },
70129
70144
  {
70130
70145
  "kind": "field",
@@ -70473,13 +70488,13 @@
70473
70488
  "fieldName": "touching"
70474
70489
  },
70475
70490
  {
70476
- "name": "windSpeed",
70491
+ "name": "currentWindSpeedKnots",
70477
70492
  "type": {
70478
70493
  "text": "number | null"
70479
70494
  },
70480
70495
  "default": "null",
70481
- "description": "The wind speed in beaufort scale number.",
70482
- "fieldName": "windSpeed"
70496
+ "description": "The wind speed in knots.",
70497
+ "fieldName": "currentWindSpeedKnots"
70483
70498
  },
70484
70499
  {
70485
70500
  "name": "windFromDirection",
@@ -86078,39 +86093,39 @@
86078
86093
  },
86079
86094
  {
86080
86095
  "kind": "field",
86081
- "name": "instantWindDirectionDeg",
86096
+ "name": "currentWindFromDirection",
86082
86097
  "type": {
86083
86098
  "text": "number | null"
86084
86099
  },
86085
86100
  "default": "null",
86086
- "attribute": "instantWindDirectionDeg"
86101
+ "attribute": "currentWindFromDirection"
86087
86102
  },
86088
86103
  {
86089
86104
  "kind": "field",
86090
- "name": "instantWindSpeedNumber",
86105
+ "name": "currentWindSpeedKnots",
86091
86106
  "type": {
86092
86107
  "text": "number | null"
86093
86108
  },
86094
86109
  "default": "null",
86095
- "attribute": "instantWindSpeedNumber"
86110
+ "attribute": "currentWindSpeedKnots"
86096
86111
  },
86097
86112
  {
86098
86113
  "kind": "field",
86099
- "name": "instantCurrentDirectionDeg",
86114
+ "name": "currentFromDirection",
86100
86115
  "type": {
86101
86116
  "text": "number | null"
86102
86117
  },
86103
86118
  "default": "null",
86104
- "attribute": "instantCurrentDirectionDeg"
86119
+ "attribute": "currentFromDirection"
86105
86120
  },
86106
86121
  {
86107
86122
  "kind": "field",
86108
- "name": "instantCurrentSpeedNumber",
86123
+ "name": "currentSpeedKnots",
86109
86124
  "type": {
86110
86125
  "text": "number | null"
86111
86126
  },
86112
86127
  "default": "null",
86113
- "attribute": "instantCurrentSpeedNumber"
86128
+ "attribute": "currentSpeedKnots"
86114
86129
  },
86115
86130
  {
86116
86131
  "kind": "field",
@@ -86169,36 +86184,36 @@
86169
86184
  ],
86170
86185
  "attributes": [
86171
86186
  {
86172
- "name": "instantWindDirectionDeg",
86187
+ "name": "currentWindFromDirection",
86173
86188
  "type": {
86174
86189
  "text": "number | null"
86175
86190
  },
86176
86191
  "default": "null",
86177
- "fieldName": "instantWindDirectionDeg"
86192
+ "fieldName": "currentWindFromDirection"
86178
86193
  },
86179
86194
  {
86180
- "name": "instantWindSpeedNumber",
86195
+ "name": "currentWindSpeedKnots",
86181
86196
  "type": {
86182
86197
  "text": "number | null"
86183
86198
  },
86184
86199
  "default": "null",
86185
- "fieldName": "instantWindSpeedNumber"
86200
+ "fieldName": "currentWindSpeedKnots"
86186
86201
  },
86187
86202
  {
86188
- "name": "instantCurrentDirectionDeg",
86203
+ "name": "currentFromDirection",
86189
86204
  "type": {
86190
86205
  "text": "number | null"
86191
86206
  },
86192
86207
  "default": "null",
86193
- "fieldName": "instantCurrentDirectionDeg"
86208
+ "fieldName": "currentFromDirection"
86194
86209
  },
86195
86210
  {
86196
- "name": "instantCurrentSpeedNumber",
86211
+ "name": "currentSpeedKnots",
86197
86212
  "type": {
86198
86213
  "text": "number | null"
86199
86214
  },
86200
86215
  "default": "null",
86201
- "fieldName": "instantCurrentSpeedNumber"
86216
+ "fieldName": "currentSpeedKnots"
86202
86217
  },
86203
86218
  {
86204
86219
  "name": "vesselImage",
@@ -87026,12 +87041,12 @@
87026
87041
  },
87027
87042
  {
87028
87043
  "kind": "field",
87029
- "name": "wind",
87044
+ "name": "windKnots",
87030
87045
  "type": {
87031
87046
  "text": "number | null"
87032
87047
  },
87033
87048
  "default": "null",
87034
- "attribute": "wind"
87049
+ "attribute": "windKnots"
87035
87050
  },
87036
87051
  {
87037
87052
  "kind": "field",
@@ -87590,12 +87605,12 @@
87590
87605
  "fieldName": "showLabels"
87591
87606
  },
87592
87607
  {
87593
- "name": "wind",
87608
+ "name": "windKnots",
87594
87609
  "type": {
87595
87610
  "text": "number | null"
87596
87611
  },
87597
87612
  "default": "null",
87598
- "fieldName": "wind"
87613
+ "fieldName": "windKnots"
87599
87614
  },
87600
87615
  {
87601
87616
  "name": "windFromDirectionDeg",
@@ -87888,7 +87903,7 @@
87888
87903
  "declarations": [
87889
87904
  {
87890
87905
  "kind": "class",
87891
- "description": "`<obc-wind-indicator>` – A compact wind indicator with a fixed frame and a rotating wind marker.\n\nVisualizes a discrete wind `level` using a compact icon plus optional mode layers.\n\n## Features\n\n- **Variants:** `type` (`arrow` | `shaft` | `labeled`), `direction` (`true` | `relative`), `priority` (`regular` | `enhanced`).\n- **Discrete input:** `level` selects the icon state; mapping from real wind to `level` happens outside.\n\n## Usage Guidelines\n\nUse when you need a small wind cue next to other compact indicators.",
87906
+ "description": "`<obc-wind-indicator>` – A compact wind indicator with a fixed frame and a rotating wind marker.\n\nVisualizes a wind speed in knots using a compact wind-barb icon plus\noptional mode layers.\n\n## Features\n\n- **Variants:** `type` (`arrow` | `shaft` | `labeled`), `direction` (`true` | `relative`), `priority` (`regular` | `enhanced`).\n- **Speed input:** `currentWindSpeedKnots` is the wind speed in knots.\n The barb icon follows the standard meteorological convention (one\n half-barb per 5 kn). 0–65 kn covers all 14 icons; higher values clamp\n to the heaviest icon.\n\n## Usage Guidelines\n\nUse when you need a small wind cue next to other compact indicators.\nPass the wind speed in knots through `currentWindSpeedKnots`, matching\nthe convention used by `<obc-wind>`, `<obc-wind-propulsion>` and\n`<obc-compass>`.",
87892
87907
  "name": "ObcWindIndicator",
87893
87908
  "members": [
87894
87909
  {
@@ -87917,12 +87932,13 @@
87917
87932
  },
87918
87933
  {
87919
87934
  "kind": "field",
87920
- "name": "level",
87935
+ "name": "currentWindSpeedKnots",
87921
87936
  "type": {
87922
87937
  "text": "number"
87923
87938
  },
87924
87939
  "default": "0",
87925
- "attribute": "level"
87940
+ "description": "Wind speed in **knots**, used to pick the wind-barb icon.\n\nMaps to the icon set using the designer-confirmed \"Option C\"\nranges: `[0, 0.5)` kn renders calm, `[0.5, 2.5)` kn renders a\nshaft only, then 5-kn nearest-neighbour buckets up to 45 kn\n(half-barb steps), `[47.5, 55)` kn renders the 50-kn pennant, and\n`[55, 65)` / `[65, ∞)` kn add one and two full barbs above the\npennant respectively. Non-finite or negative values fall back to\ncalm.",
87941
+ "attribute": "current-wind-speed-knots"
87926
87942
  },
87927
87943
  {
87928
87944
  "kind": "field",
@@ -87931,50 +87947,39 @@
87931
87947
  "text": "number"
87932
87948
  },
87933
87949
  "default": "0",
87934
- "description": "Rotation of the reference frame (course/heading) in degrees.\n\nUsed in relative mode to compute the marker rotation as `windFromAngle - rotationAngle`.\n`0` means north-up.",
87950
+ "description": "Rotation of the reference frame (course/heading) in degrees.\n\nThis could be the heading or the course of the vessel.\n`0` means north-up.",
87935
87951
  "attribute": "rotation-angle"
87936
87952
  },
87937
87953
  {
87938
87954
  "kind": "field",
87939
- "name": "windFromAngle",
87955
+ "name": "currentWindFromDirection",
87940
87956
  "type": {
87941
87957
  "text": "number"
87942
87958
  },
87943
87959
  "default": "0",
87944
87960
  "description": "Primary wind direction input (wind-from).\n\nRepresents the direction the wind comes **from** in degrees.\n- `0` / `360`: wind from north → marker points south (down)\n- `180`: wind from south → marker points north (up)",
87945
- "attribute": "wind-from-angle"
87961
+ "attribute": "current-wind-from-direction"
87946
87962
  },
87947
87963
  {
87948
87964
  "kind": "field",
87949
- "name": "angle",
87950
- "deprecated": "Use `windFromAngle` instead.",
87951
- "attribute": "angle"
87965
+ "name": "windFromAngle",
87966
+ "deprecated": "Use `currentWindFromDirection` instead.",
87967
+ "attribute": "windFromAngle"
87952
87968
  },
87953
87969
  {
87954
- "kind": "method",
87955
- "name": "clampLevel",
87956
- "privacy": "private",
87957
- "return": {
87958
- "type": {
87959
- "text": "number"
87960
- }
87961
- },
87962
- "parameters": [
87963
- {
87964
- "name": "value",
87965
- "type": {
87966
- "text": "number"
87967
- }
87968
- }
87969
- ]
87970
+ "kind": "field",
87971
+ "name": "angle",
87972
+ "deprecated": "Use `currentWindFromDirection` instead.",
87973
+ "attribute": "angle"
87970
87974
  },
87971
87975
  {
87972
87976
  "kind": "field",
87973
- "name": "clampedLevel",
87977
+ "name": "iconIndex",
87974
87978
  "type": {
87975
87979
  "text": "number"
87976
87980
  },
87977
87981
  "privacy": "private",
87982
+ "description": "Icon index in the range `1..14`, derived from `currentWindSpeedKnots`\nvia the shared `windKnotsToIconIndex` helper (standard meteorological\nwind-barb convention; one half-barb per 5 kn).",
87978
87983
  "readonly": true
87979
87984
  },
87980
87985
  {
@@ -88058,12 +88063,6 @@
88058
88063
  "type": {
88059
88064
  "text": "string"
88060
88065
  }
88061
- },
88062
- {
88063
- "name": "level",
88064
- "type": {
88065
- "text": "number"
88066
- }
88067
88066
  }
88068
88067
  ]
88069
88068
  },
@@ -88088,12 +88087,6 @@
88088
88087
  "type": {
88089
88088
  "text": "string"
88090
88089
  }
88091
- },
88092
- {
88093
- "name": "level",
88094
- "type": {
88095
- "text": "number"
88096
- }
88097
88090
  }
88098
88091
  ]
88099
88092
  },
@@ -88151,12 +88144,13 @@
88151
88144
  "fieldName": "priority"
88152
88145
  },
88153
88146
  {
88154
- "name": "level",
88147
+ "name": "current-wind-speed-knots",
88155
88148
  "type": {
88156
88149
  "text": "number"
88157
88150
  },
88158
88151
  "default": "0",
88159
- "fieldName": "level"
88152
+ "description": "Wind speed in **knots**, used to pick the wind-barb icon.\n\nMaps to the icon set using the designer-confirmed \"Option C\"\nranges: `[0, 0.5)` kn renders calm, `[0.5, 2.5)` kn renders a\nshaft only, then 5-kn nearest-neighbour buckets up to 45 kn\n(half-barb steps), `[47.5, 55)` kn renders the 50-kn pennant, and\n`[55, 65)` / `[65, ∞)` kn add one and two full barbs above the\npennant respectively. Non-finite or negative values fall back to\ncalm.",
88153
+ "fieldName": "currentWindSpeedKnots"
88160
88154
  },
88161
88155
  {
88162
88156
  "name": "rotation-angle",
@@ -88164,21 +88158,26 @@
88164
88158
  "text": "number"
88165
88159
  },
88166
88160
  "default": "0",
88167
- "description": "Rotation of the reference frame (course/heading) in degrees.\n\nUsed in relative mode to compute the marker rotation as `windFromAngle - rotationAngle`.\n`0` means north-up.",
88161
+ "description": "Rotation of the reference frame (course/heading) in degrees.\n\nThis could be the heading or the course of the vessel.\n`0` means north-up.",
88168
88162
  "fieldName": "rotationAngle"
88169
88163
  },
88170
88164
  {
88171
- "name": "wind-from-angle",
88165
+ "name": "current-wind-from-direction",
88172
88166
  "type": {
88173
88167
  "text": "number"
88174
88168
  },
88175
88169
  "default": "0",
88176
88170
  "description": "Primary wind direction input (wind-from).\n\nRepresents the direction the wind comes **from** in degrees.\n- `0` / `360`: wind from north → marker points south (down)\n- `180`: wind from south → marker points north (up)",
88171
+ "fieldName": "currentWindFromDirection"
88172
+ },
88173
+ {
88174
+ "name": "windFromAngle",
88175
+ "deprecated": "Use `currentWindFromDirection` instead.",
88177
88176
  "fieldName": "windFromAngle"
88178
88177
  },
88179
88178
  {
88180
88179
  "name": "angle",
88181
- "deprecated": "Use `windFromAngle` instead.",
88180
+ "deprecated": "Use `currentWindFromDirection` instead.",
88182
88181
  "fieldName": "angle"
88183
88182
  }
88184
88183
  ],
@@ -88392,12 +88391,12 @@
88392
88391
  },
88393
88392
  {
88394
88393
  "kind": "field",
88395
- "name": "currentWindSpeedBeaufort",
88394
+ "name": "currentWindSpeedKnots",
88396
88395
  "type": {
88397
88396
  "text": "number | null"
88398
88397
  },
88399
88398
  "default": "null",
88400
- "attribute": "currentWindSpeedBeaufort"
88399
+ "attribute": "currentWindSpeedKnots"
88401
88400
  },
88402
88401
  {
88403
88402
  "kind": "field",
@@ -88644,12 +88643,12 @@
88644
88643
  "fieldName": "tickmarkStyle"
88645
88644
  },
88646
88645
  {
88647
- "name": "currentWindSpeedBeaufort",
88646
+ "name": "currentWindSpeedKnots",
88648
88647
  "type": {
88649
88648
  "text": "number | null"
88650
88649
  },
88651
88650
  "default": "null",
88652
- "fieldName": "currentWindSpeedBeaufort"
88651
+ "fieldName": "currentWindSpeedKnots"
88653
88652
  },
88654
88653
  {
88655
88654
  "name": "currentWindFromDirection",
@@ -88707,12 +88706,12 @@
88707
88706
  },
88708
88707
  {
88709
88708
  "kind": "field",
88710
- "name": "currentWindSpeedBeaufort",
88709
+ "name": "currentWindSpeedKnots",
88711
88710
  "type": {
88712
88711
  "text": "number"
88713
88712
  },
88714
- "default": "1",
88715
- "attribute": "currentWindSpeedBeaufort"
88713
+ "default": "25",
88714
+ "attribute": "currentWindSpeedKnots"
88716
88715
  },
88717
88716
  {
88718
88717
  "kind": "field",
@@ -88867,12 +88866,12 @@
88867
88866
  "fieldName": "currentWindFromDirection"
88868
88867
  },
88869
88868
  {
88870
- "name": "currentWindSpeedBeaufort",
88869
+ "name": "currentWindSpeedKnots",
88871
88870
  "type": {
88872
88871
  "text": "number"
88873
88872
  },
88874
- "default": "1",
88875
- "fieldName": "currentWindSpeedBeaufort"
88873
+ "default": "25",
88874
+ "fieldName": "currentWindSpeedKnots"
88876
88875
  },
88877
88876
  {
88878
88877
  "name": "vesselImage",
@@ -10,7 +10,7 @@ const compentStyle = css`
10
10
  align-items: center;
11
11
  justify-content: center;
12
12
  border-style: solid;
13
- border-radius: var(--app-components-badge-border-radius);
13
+ border-radius: var(--ui-components-badge-border-radius);
14
14
  padding: calc(var(--ui-components-badge-padding) - 1px);
15
15
  border: 1px solid var(--alert-alarm-outline-color);
16
16
  background: var(--alert-alarm-color);
@@ -25,8 +25,8 @@ const compentStyle = css`
25
25
  }
26
26
 
27
27
  .wrapper .icon {
28
- width: var(--app-components-badge-icon-size);
29
- height: var(--app-components-badge-icon-size);
28
+ width: var(--ui-components-badge-icon-size);
29
+ height: var(--ui-components-badge-icon-size);
30
30
  display: flex;
31
31
  align-items: center;
32
32
  justify-content: center;
@@ -46,18 +46,18 @@ const compentStyle = css`
46
46
  flex-direction: column;
47
47
  justify-content: center;
48
48
  align-items: center;
49
- padding: 0 var(--app-components-badge-label-spacing) 1px
50
- var(--app-components-badge-label-spacing);
51
- height: var(--app-components-badge-icon-size);
52
- min-width: var(--app-components-badge-icon-size);
49
+ padding: 0 var(--ui-components-badge-label-spacing) 1px
50
+ var(--ui-components-badge-label-spacing);
51
+ height: var(--ui-components-badge-icon-size);
52
+ min-width: var(--ui-components-badge-icon-size);
53
53
  }
54
54
 
55
55
  .wrapper.size-large {
56
56
  display: inline-flex;
57
57
  width: fit-content;
58
58
  height: 24px;
59
- min-width: var(--app-components-badge-min-size-large);
60
- min-height: var(--app-components-badge-min-size-large);
59
+ min-width: var(--ui-components-badge-min-size-large);
60
+ min-height: var(--ui-components-badge-min-size-large);
61
61
 
62
62
  padding: calc(var(--ui-components-badge-padding) - 1px);
63
63
  justify-content: center;
@@ -80,8 +80,8 @@ const compentStyle = css`
80
80
  }
81
81
 
82
82
  .wrapper.size-large .icon {
83
- width: var(--app-components-badge-icon-size-large);
84
- height: var(--app-components-badge-icon-size-large);
83
+ width: var(--ui-components-badge-icon-size-large);
84
+ height: var(--ui-components-badge-icon-size-large);
85
85
  display: flex;
86
86
  align-items: center;
87
87
  justify-content: center;
@@ -152,8 +152,8 @@ const compentStyle = css`
152
152
  }
153
153
 
154
154
  .wrapper.variant-flat .icon {
155
- min-width: var(--app-components-badge-icon-size);
156
- min-height: var(--app-components-badge-icon-size);
155
+ min-width: var(--ui-components-badge-icon-size);
156
+ min-height: var(--ui-components-badge-icon-size);
157
157
  }
158
158
 
159
159
  .wrapper.variant-flat .icon.type-alarm {
@@ -208,8 +208,8 @@ const compentStyle = css`
208
208
  }
209
209
 
210
210
  .wrapper.variant-flat .icon.type-outline {
211
- width: var(--app-components-badge-icon-size-flat);
212
- height: var(--app-components-badge-icon-size-flat);
211
+ width: var(--ui-components-badge-icon-size-flat);
212
+ height: var(--ui-components-badge-icon-size-flat);
213
213
  }
214
214
 
215
215
  .wrapper.variant-flat .icon.type-outline + .number {
@@ -52,6 +52,9 @@ export declare enum IconButtonVariant {
52
52
  * | (default) | Always | The icon to display (e.g., `<obi-search>`) |
53
53
  * | label | If `hasLabel` is set | Optional label text below the icon |
54
54
  *
55
+ * ## Events
56
+ * - Emits a standard `click` event (`onClick` handler in framework wrappers) when activated.
57
+ *
55
58
  * ## Best Practices
56
59
  * - Ensure icons are clear and universally recognizable.
57
60
  * - For accessibility, provide an `aria-label` or descriptive label for the button's action.
@@ -71,6 +74,7 @@ export declare enum IconButtonVariant {
71
74
  *
72
75
  * @slot - Icon slot (default): Place an icon such as <obi-search> here.
73
76
  * @slot label - Optional label shown below the icon when `hasLabel` is true.
77
+ * @fires click - Fired when the button is clicked (if not disabled).
74
78
  */
75
79
  export declare class ObcIconButton extends LitElement {
76
80
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"icon-button.d.ts","sourceRoot":"","sources":["../../../src/components/icon-button/icon-button.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,UAAU,EAAQ,OAAO,EAAY,MAAM,KAAK,CAAC;AAMzD;;;;;GAKG;AACH,oBAAY,iBAAiB;IAC3B,MAAM,WAAW;IACjB,MAAM,WAAW;IACjB,IAAI,SAAS;IACb,WAAW,gBAAgB;CAC5B;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4DG;AACH,qBACa,aAAc,SAAQ,UAAU;IAC3C;;;;;OAKG;IACuB,OAAO,EAAE,iBAAiB,CACzB;IAE3B;;;OAGG;IACwB,SAAS,UAAS;IAE7C;;;OAGG;IACwB,UAAU,UAAS;IAE9C;;;OAGG;IACwB,WAAW,UAAS;IAE/C;;;OAGG;IACwB,WAAW,UAAS;IAE/C;;OAEG;IACwB,IAAI,UAAS;IAExC;;OAEG;IACwB,QAAQ,UAAS;IAE5C;;;;OAIG;IACuB,QAAQ,EAAE,SAAS,GAAG,MAAM,CAAa;IAEnE;;OAEG;IACwB,QAAQ,EAAE,OAAO,CAAS;IAErD,iFAAiF;IACpC,WAAW,UAAQ;IAEhE,IAAI,eAAe,0DAoDlB;IAEQ,MAAM;IAiCf,OAAgB,MAAM,0BAAwB;CAC/C;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,iBAAiB,EAAE,aAAa,CAAC;KAClC;CACF"}
1
+ {"version":3,"file":"icon-button.d.ts","sourceRoot":"","sources":["../../../src/components/icon-button/icon-button.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,UAAU,EAAQ,OAAO,EAAY,MAAM,KAAK,CAAC;AAMzD;;;;;GAKG;AACH,oBAAY,iBAAiB;IAC3B,MAAM,WAAW;IACjB,MAAM,WAAW;IACjB,IAAI,SAAS;IACb,WAAW,gBAAgB;CAC5B;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgEG;AACH,qBACa,aAAc,SAAQ,UAAU;IAC3C;;;;;OAKG;IACuB,OAAO,EAAE,iBAAiB,CACzB;IAE3B;;;OAGG;IACwB,SAAS,UAAS;IAE7C;;;OAGG;IACwB,UAAU,UAAS;IAE9C;;;OAGG;IACwB,WAAW,UAAS;IAE/C;;;OAGG;IACwB,WAAW,UAAS;IAE/C;;OAEG;IACwB,IAAI,UAAS;IAExC;;OAEG;IACwB,QAAQ,UAAS;IAE5C;;;;OAIG;IACuB,QAAQ,EAAE,SAAS,GAAG,MAAM,CAAa;IAEnE;;OAEG;IACwB,QAAQ,EAAE,OAAO,CAAS;IAErD,iFAAiF;IACpC,WAAW,UAAQ;IAEhE,IAAI,eAAe,0DAoDlB;IAEQ,MAAM;IAiCf,OAAgB,MAAM,0BAAwB;CAC/C;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,iBAAiB,EAAE,aAAa,CAAC;KAClC;CACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"icon-button.js","sources":["../../../src/components/icon-button/icon-button.ts"],"sourcesContent":["import {LitElement, html, nothing, unsafeCSS} from 'lit';\nimport {property} from 'lit/decorators.js';\nimport iconStyle from './icon-button.css?inline';\nimport {classMap} from 'lit/directives/class-map.js';\nimport {customElement} from '../../decorator.js';\n\n/**\n * The available visual variants for `<obc-icon-button>`.\n * - `normal`: Standard appearance for most use cases.\n * - `raised`: Adds elevation/shadow for prominence.\n * - `flat`: Minimal, backgroundless style for subtle actions.\n */\nexport enum IconButtonVariant {\n normal = 'normal',\n raised = 'raised',\n flat = 'flat',\n integration = 'integration',\n}\n\n/**\n * `<obc-icon-button>` – An icon-only or icon-with-label button for quick actions.\n *\n * Provides a compact, visually prominent button that displays an icon (and optionally a label) for triggering actions. Commonly used for toolbars, navigation, or contextual actions where space is limited and a recognizable icon can represent the function.\n *\n * Appears as a circular or rounded button with configurable visual styles, supporting progress indication and various layout adaptations.\n *\n * ## Features\n * - **Variants:**\n * - `normal` (default): Standard appearance for most use cases.\n * - `raised`: Adds elevation/shadow for prominence.\n * - `flat`: Minimal, backgroundless style for subtle actions.\n * - **Progress Indicator:**\n * - Shows a circular progress spinner overlay when the `progress` property is set (0–100). Useful for indicating loading or ongoing actions.\n * - **Label Support:**\n * - Optionally displays a text label below the icon when `hasLabel` is true and content is provided in the `label` slot.\n * - **Corner Alignment:**\n * - `cornerLeft` and `cornerRight` adjust the button's border radius and alignment for seamless placement at the start or end of a container.\n * - **Active State:**\n * - `activated` visually highlights the button as selected or toggled.\n * - `activeColor` applies an accent color for emphasis.\n * - **Wide Mode:**\n * - `wide` increases the button's width for easier touch targets or visual balance.\n * - **Disabled State:**\n * - `disabled` prevents interaction and visually dims the button.\n *\n * ## Usage Guidelines\n * - Use `obc-icon-button` for actions represented by icons, such as toolbars, navigation, or quick-access commands.\n * - Add a label (with `hasLabel` and the `label` slot) when clarity is needed or when icons alone may not be universally understood.\n * - Use the progress indicator for actions that take time, such as uploads or background processes.\n * - Prefer the `normal` variant for most cases; use `raised` to draw attention, and `flat` for less prominent or inline actions.\n * - For grouped or edge-aligned layouts, use `cornerLeft` or `cornerRight` to visually merge with container edges.\n * - Avoid using icon buttons for destructive or critical actions unless paired with clear feedback.\n * - **TODO(designer):** Clarify recommended icon sizes and when to use label vs. icon-only.\n *\n * ## Slots\n * | Slot Name | Renders When... | Purpose |\n * |-----------|---------------------|----------------------------------------------|\n * | (default) | Always | The icon to display (e.g., `<obi-search>`) |\n * | label | If `hasLabel` is set | Optional label text below the icon |\n *\n * ## Best Practices\n * - Ensure icons are clear and universally recognizable.\n * - For accessibility, provide an `aria-label` or descriptive label for the button's action.\n * - When using the progress indicator, avoid showing it for very short actions to prevent visual flicker.\n *\n * ## Example:\n * ```\n * <obc-icon-button variant=\"normal\">\n * <obi-search></obi-search>\n * </obc-icon-button>\n *\n * <obc-icon-button variant=\"normal\" hasLabel>\n * <obi-arrow></obi-arrow>\n * <span slot=\"label\">Next</span>\n * </obc-icon-button>\n * ```\n *\n * @slot - Icon slot (default): Place an icon such as <obi-search> here.\n * @slot label - Optional label shown below the icon when `hasLabel` is true.\n */\n@customElement('obc-icon-button')\nexport class ObcIconButton extends LitElement {\n /**\n * Visual style of the button.\n * - `normal`: Standard appearance (default).\n * - `raised`: Elevated with shadow.\n * - `flat`: Minimal, backgroundless style.\n */\n @property({type: String}) variant: IconButtonVariant =\n IconButtonVariant.normal;\n\n /**\n * Whether the button is in an activated (selected/toggled) state.\n * Visually highlights the button to indicate selection.\n */\n @property({type: Boolean}) activated = false;\n\n /**\n * If true, aligns the button to the left edge and removes left border radius.\n * Useful for grouping or edge-aligned layouts.\n */\n @property({type: Boolean}) cornerLeft = false;\n\n /**\n * If true, aligns the button to the right edge and removes right border radius.\n * Useful for grouping or edge-aligned layouts.\n */\n @property({type: Boolean}) cornerRight = false;\n\n /**\n * Applies an accent color to the button for emphasis.\n * Used to visually distinguish active or important actions.\n */\n @property({type: Boolean}) activeColor = false;\n\n /**\n * Increases the button's width for larger touch targets or visual balance.\n */\n @property({type: Boolean}) wide = false;\n\n /**\n * Disables the button, preventing user interaction and dimming its appearance.\n */\n @property({type: Boolean}) disabled = false;\n\n /**\n * Shows a circular progress indicator overlay when set (0–100).\n * Use to indicate ongoing actions or loading states.\n * If undefined, no progress indicator is shown.\n */\n @property({type: Number}) progress: undefined | number = undefined;\n\n /**\n * If true, displays a label below the icon using the `label` slot.\n */\n @property({type: Boolean}) hasLabel: boolean = false;\n\n /** If false, and cornerLeft or cornerRight is true, the divider is not shown. */\n @property({type: Boolean, attribute: false}) showDivider = true;\n\n get progressSpinner() {\n if (this.progress === undefined) {\n return nothing;\n }\n if (this.progress === 100) {\n return html`<div class=\"progress-spinner\">\n <svg\n width=\"40\"\n height=\"40\"\n viewBox=\"0 0 40 40\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <circle\n cx=\"20\"\n cy=\"20\"\n r=\"18\"\n stroke=\"#325B9A\"\n stroke-width=\"4\"\n fill=\"none\"\n />\n </svg>\n </div>`;\n }\n const angleRad = (this.progress * 0.95 * 3.6 * Math.PI) / 180;\n const x = 20 + 18 * Math.sin(angleRad);\n const y = 20 - 18 * Math.cos(angleRad);\n const largeArcFlag = angleRad > Math.PI ? 1 : 0;\n return html`<div class=\"progress-spinner\">\n <svg\n width=\"40\"\n height=\"40\"\n viewBox=\"0 0 40 40\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <circle\n cx=\"20\"\n cy=\"20\"\n r=\"18\"\n stroke=\"var(--container-backdrop-color)\"\n stroke-width=\"4\"\n fill=\"none\"\n />\n <path\n d=\"M18 2 A18 18 0 ${largeArcFlag} 1 ${x} ${y}\"\n stroke=\"var(--instrument-enhanced-secondary-color)\"\n stroke-width=\"4\"\n stroke-linecap=\"round\"\n />\n </svg>\n </div>`;\n }\n\n override render() {\n return html`\n <button\n class=${classMap({\n wrapper: true,\n ['variant-' + this.variant]: true,\n activated: this.activated,\n 'corner-left': this.cornerLeft,\n 'corner-right': this.cornerRight,\n 'active-color': this.activeColor,\n 'has-label': this.hasLabel,\n wide: this.wide,\n progress: this.progress !== undefined,\n 'hide-divider': !this.showDivider,\n })}\n ?disabled=${this.disabled}\n part=\"wrapper\"\n >\n ${this.progress !== undefined ? this.progressSpinner : nothing}\n <div class=\"visible-wrapper\" part=\"visible-wrapper\">\n <div class=\"icon\" part=\"icon\">\n <slot></slot>\n </div>\n </div>\n ${this.hasLabel\n ? html`<div class=\"label\" part=\"label\">\n <slot name=\"label\"></slot>\n </div>`\n : nothing}\n </button>\n `;\n }\n\n static override styles = unsafeCSS(iconStyle);\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'obc-icon-button': ObcIconButton;\n }\n}\n"],"names":["IconButtonVariant"],"mappings":"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"}
1
+ {"version":3,"file":"icon-button.js","sources":["../../../src/components/icon-button/icon-button.ts"],"sourcesContent":["import {LitElement, html, nothing, unsafeCSS} from 'lit';\nimport {property} from 'lit/decorators.js';\nimport iconStyle from './icon-button.css?inline';\nimport {classMap} from 'lit/directives/class-map.js';\nimport {customElement} from '../../decorator.js';\n\n/**\n * The available visual variants for `<obc-icon-button>`.\n * - `normal`: Standard appearance for most use cases.\n * - `raised`: Adds elevation/shadow for prominence.\n * - `flat`: Minimal, backgroundless style for subtle actions.\n */\nexport enum IconButtonVariant {\n normal = 'normal',\n raised = 'raised',\n flat = 'flat',\n integration = 'integration',\n}\n\n/**\n * `<obc-icon-button>` – An icon-only or icon-with-label button for quick actions.\n *\n * Provides a compact, visually prominent button that displays an icon (and optionally a label) for triggering actions. Commonly used for toolbars, navigation, or contextual actions where space is limited and a recognizable icon can represent the function.\n *\n * Appears as a circular or rounded button with configurable visual styles, supporting progress indication and various layout adaptations.\n *\n * ## Features\n * - **Variants:**\n * - `normal` (default): Standard appearance for most use cases.\n * - `raised`: Adds elevation/shadow for prominence.\n * - `flat`: Minimal, backgroundless style for subtle actions.\n * - **Progress Indicator:**\n * - Shows a circular progress spinner overlay when the `progress` property is set (0–100). Useful for indicating loading or ongoing actions.\n * - **Label Support:**\n * - Optionally displays a text label below the icon when `hasLabel` is true and content is provided in the `label` slot.\n * - **Corner Alignment:**\n * - `cornerLeft` and `cornerRight` adjust the button's border radius and alignment for seamless placement at the start or end of a container.\n * - **Active State:**\n * - `activated` visually highlights the button as selected or toggled.\n * - `activeColor` applies an accent color for emphasis.\n * - **Wide Mode:**\n * - `wide` increases the button's width for easier touch targets or visual balance.\n * - **Disabled State:**\n * - `disabled` prevents interaction and visually dims the button.\n *\n * ## Usage Guidelines\n * - Use `obc-icon-button` for actions represented by icons, such as toolbars, navigation, or quick-access commands.\n * - Add a label (with `hasLabel` and the `label` slot) when clarity is needed or when icons alone may not be universally understood.\n * - Use the progress indicator for actions that take time, such as uploads or background processes.\n * - Prefer the `normal` variant for most cases; use `raised` to draw attention, and `flat` for less prominent or inline actions.\n * - For grouped or edge-aligned layouts, use `cornerLeft` or `cornerRight` to visually merge with container edges.\n * - Avoid using icon buttons for destructive or critical actions unless paired with clear feedback.\n * - **TODO(designer):** Clarify recommended icon sizes and when to use label vs. icon-only.\n *\n * ## Slots\n * | Slot Name | Renders When... | Purpose |\n * |-----------|---------------------|----------------------------------------------|\n * | (default) | Always | The icon to display (e.g., `<obi-search>`) |\n * | label | If `hasLabel` is set | Optional label text below the icon |\n *\n * ## Events\n * - Emits a standard `click` event (`onClick` handler in framework wrappers) when activated.\n *\n * ## Best Practices\n * - Ensure icons are clear and universally recognizable.\n * - For accessibility, provide an `aria-label` or descriptive label for the button's action.\n * - When using the progress indicator, avoid showing it for very short actions to prevent visual flicker.\n *\n * ## Example:\n * ```\n * <obc-icon-button variant=\"normal\">\n * <obi-search></obi-search>\n * </obc-icon-button>\n *\n * <obc-icon-button variant=\"normal\" hasLabel>\n * <obi-arrow></obi-arrow>\n * <span slot=\"label\">Next</span>\n * </obc-icon-button>\n * ```\n *\n * @slot - Icon slot (default): Place an icon such as <obi-search> here.\n * @slot label - Optional label shown below the icon when `hasLabel` is true.\n * @fires click - Fired when the button is clicked (if not disabled).\n */\n@customElement('obc-icon-button')\nexport class ObcIconButton extends LitElement {\n /**\n * Visual style of the button.\n * - `normal`: Standard appearance (default).\n * - `raised`: Elevated with shadow.\n * - `flat`: Minimal, backgroundless style.\n */\n @property({type: String}) variant: IconButtonVariant =\n IconButtonVariant.normal;\n\n /**\n * Whether the button is in an activated (selected/toggled) state.\n * Visually highlights the button to indicate selection.\n */\n @property({type: Boolean}) activated = false;\n\n /**\n * If true, aligns the button to the left edge and removes left border radius.\n * Useful for grouping or edge-aligned layouts.\n */\n @property({type: Boolean}) cornerLeft = false;\n\n /**\n * If true, aligns the button to the right edge and removes right border radius.\n * Useful for grouping or edge-aligned layouts.\n */\n @property({type: Boolean}) cornerRight = false;\n\n /**\n * Applies an accent color to the button for emphasis.\n * Used to visually distinguish active or important actions.\n */\n @property({type: Boolean}) activeColor = false;\n\n /**\n * Increases the button's width for larger touch targets or visual balance.\n */\n @property({type: Boolean}) wide = false;\n\n /**\n * Disables the button, preventing user interaction and dimming its appearance.\n */\n @property({type: Boolean}) disabled = false;\n\n /**\n * Shows a circular progress indicator overlay when set (0–100).\n * Use to indicate ongoing actions or loading states.\n * If undefined, no progress indicator is shown.\n */\n @property({type: Number}) progress: undefined | number = undefined;\n\n /**\n * If true, displays a label below the icon using the `label` slot.\n */\n @property({type: Boolean}) hasLabel: boolean = false;\n\n /** If false, and cornerLeft or cornerRight is true, the divider is not shown. */\n @property({type: Boolean, attribute: false}) showDivider = true;\n\n get progressSpinner() {\n if (this.progress === undefined) {\n return nothing;\n }\n if (this.progress === 100) {\n return html`<div class=\"progress-spinner\">\n <svg\n width=\"40\"\n height=\"40\"\n viewBox=\"0 0 40 40\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <circle\n cx=\"20\"\n cy=\"20\"\n r=\"18\"\n stroke=\"#325B9A\"\n stroke-width=\"4\"\n fill=\"none\"\n />\n </svg>\n </div>`;\n }\n const angleRad = (this.progress * 0.95 * 3.6 * Math.PI) / 180;\n const x = 20 + 18 * Math.sin(angleRad);\n const y = 20 - 18 * Math.cos(angleRad);\n const largeArcFlag = angleRad > Math.PI ? 1 : 0;\n return html`<div class=\"progress-spinner\">\n <svg\n width=\"40\"\n height=\"40\"\n viewBox=\"0 0 40 40\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <circle\n cx=\"20\"\n cy=\"20\"\n r=\"18\"\n stroke=\"var(--container-backdrop-color)\"\n stroke-width=\"4\"\n fill=\"none\"\n />\n <path\n d=\"M18 2 A18 18 0 ${largeArcFlag} 1 ${x} ${y}\"\n stroke=\"var(--instrument-enhanced-secondary-color)\"\n stroke-width=\"4\"\n stroke-linecap=\"round\"\n />\n </svg>\n </div>`;\n }\n\n override render() {\n return html`\n <button\n class=${classMap({\n wrapper: true,\n ['variant-' + this.variant]: true,\n activated: this.activated,\n 'corner-left': this.cornerLeft,\n 'corner-right': this.cornerRight,\n 'active-color': this.activeColor,\n 'has-label': this.hasLabel,\n wide: this.wide,\n progress: this.progress !== undefined,\n 'hide-divider': !this.showDivider,\n })}\n ?disabled=${this.disabled}\n part=\"wrapper\"\n >\n ${this.progress !== undefined ? this.progressSpinner : nothing}\n <div class=\"visible-wrapper\" part=\"visible-wrapper\">\n <div class=\"icon\" part=\"icon\">\n <slot></slot>\n </div>\n </div>\n ${this.hasLabel\n ? html`<div class=\"label\" part=\"label\">\n <slot name=\"label\"></slot>\n </div>`\n : nothing}\n </button>\n `;\n }\n\n static override styles = unsafeCSS(iconStyle);\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'obc-icon-button': ObcIconButton;\n }\n}\n"],"names":["IconButtonVariant"],"mappings":"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"}