@oicl/openbridge-webcomponents 0.0.20260326144656 → 0.0.20260327190859

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 (55) hide show
  1. package/dist/components/toggle-switch/toggle-switch.css.js +1 -1
  2. package/dist/components/toggle-switch/toggle-switch.d.ts +9 -1
  3. package/dist/components/toggle-switch/toggle-switch.d.ts.map +1 -1
  4. package/dist/components/toggle-switch/toggle-switch.js +18 -2
  5. package/dist/components/toggle-switch/toggle-switch.js.map +1 -1
  6. package/dist/components/toggle-switch/toggle-switch.spec.d.ts +2 -0
  7. package/dist/components/toggle-switch/toggle-switch.spec.d.ts.map +1 -0
  8. package/dist/components/toggle-switch/toggle-switch.spec.js +115 -0
  9. package/dist/components/toggle-switch/toggle-switch.spec.js.map +1 -0
  10. package/dist/navigation-instruments/velocity-projection-plot/velocity-projection-plot.d.ts +2 -0
  11. package/dist/navigation-instruments/velocity-projection-plot/velocity-projection-plot.d.ts.map +1 -1
  12. package/dist/navigation-instruments/velocity-projection-plot/velocity-projection-plot.js +5 -1
  13. package/dist/navigation-instruments/velocity-projection-plot/velocity-projection-plot.js.map +1 -1
  14. package/dist/navigation-instruments/watch/vessel.d.ts +3 -0
  15. package/dist/navigation-instruments/watch/vessel.d.ts.map +1 -1
  16. package/dist/navigation-instruments/watch/vessel.js +18 -0
  17. package/dist/navigation-instruments/watch/vessel.js.map +1 -1
  18. package/dist/navigation-instruments/watch/vessels/drone-generic-front.d.ts +3 -0
  19. package/dist/navigation-instruments/watch/vessels/drone-generic-front.d.ts.map +1 -0
  20. package/dist/navigation-instruments/watch/vessels/drone-generic-front.js +22 -0
  21. package/dist/navigation-instruments/watch/vessels/drone-generic-front.js.map +1 -0
  22. package/dist/navigation-instruments/watch/vessels/drone-generic-side.d.ts +3 -0
  23. package/dist/navigation-instruments/watch/vessels/drone-generic-side.d.ts.map +1 -0
  24. package/dist/navigation-instruments/watch/vessels/drone-generic-side.js +22 -0
  25. package/dist/navigation-instruments/watch/vessels/drone-generic-side.js.map +1 -0
  26. package/dist/navigation-instruments/watch/vessels/drone-generic-top.d.ts +3 -0
  27. package/dist/navigation-instruments/watch/vessels/drone-generic-top.d.ts.map +1 -0
  28. package/dist/navigation-instruments/watch/vessels/drone-generic-top.js +42 -0
  29. package/dist/navigation-instruments/watch/vessels/drone-generic-top.js.map +1 -0
  30. package/dist/navigation-instruments/watch/vessels/drone-medium-top.d.ts.map +1 -1
  31. package/dist/navigation-instruments/watch/vessels/drone-medium-top.js +4 -5
  32. package/dist/navigation-instruments/watch/vessels/drone-medium-top.js.map +1 -1
  33. package/dist/navigation-instruments/watch/vessels/drone-small-front.d.ts.map +1 -1
  34. package/dist/navigation-instruments/watch/vessels/drone-small-front.js +0 -1
  35. package/dist/navigation-instruments/watch/vessels/drone-small-front.js.map +1 -1
  36. package/dist/navigation-instruments/watch/vessels/drone-small-stbd-side.d.ts.map +1 -1
  37. package/dist/navigation-instruments/watch/vessels/drone-small-stbd-side.js +0 -1
  38. package/dist/navigation-instruments/watch/vessels/drone-small-stbd-side.js.map +1 -1
  39. package/dist/navigation-instruments/watch/vessels/drone-small-top.d.ts.map +1 -1
  40. package/dist/navigation-instruments/watch/vessels/drone-small-top.js +0 -2
  41. package/dist/navigation-instruments/watch/vessels/drone-small-top.js.map +1 -1
  42. package/dist/navigation-instruments/watch/vessels/rov-front.d.ts.map +1 -1
  43. package/dist/navigation-instruments/watch/vessels/rov-front.js +22 -23
  44. package/dist/navigation-instruments/watch/vessels/rov-front.js.map +1 -1
  45. package/dist/navigation-instruments/watch/vessels/rov-side.d.ts.map +1 -1
  46. package/dist/navigation-instruments/watch/vessels/rov-side.js +19 -21
  47. package/dist/navigation-instruments/watch/vessels/rov-side.js.map +1 -1
  48. package/dist/navigation-instruments/watch/vessels/rov-top.d.ts.map +1 -1
  49. package/dist/navigation-instruments/watch/vessels/rov-top.js +25 -27
  50. package/dist/navigation-instruments/watch/vessels/rov-top.js.map +1 -1
  51. package/dist/navigation-instruments/watch/vessels/storybook-helper.d.ts +5 -0
  52. package/dist/navigation-instruments/watch/vessels/storybook-helper.d.ts.map +1 -0
  53. package/dist/navigation-instruments/watch/vessels/storybook-helper.js +16 -0
  54. package/dist/navigation-instruments/watch/vessels/storybook-helper.js.map +1 -0
  55. package/package.json +1 -1
@@ -14,7 +14,7 @@ label {
14
14
  padding: 0px var(--ui-components-toggle-switch-item-padding-horizontal);
15
15
  flex: 1 0 0;
16
16
 
17
- color: var(--element-active-color, #1a1a1a);
17
+ color: var(--element-active-color);
18
18
  cursor: pointer;
19
19
  user-select: none;
20
20
  }
@@ -1,5 +1,8 @@
1
1
  import { LitElement } from 'lit';
2
2
  import '../icon-button/icon-button.js';
3
+ export type ObcToggleSwitchInputEvent = CustomEvent<{
4
+ checked: boolean;
5
+ }>;
3
6
  /**
4
7
  * `<obc-toggle-switch>` – A toggle switch component for binary on/off selection (also known as a switch, toggle, or enable/disable control).
5
8
  *
@@ -75,7 +78,7 @@ import '../icon-button/icon-button.js';
75
78
  * In this example, the toggle switch displays a label, an icon, and a description, and is in the checked state.
76
79
  *
77
80
  * @slot icon - Leading icon slot (shown when `hasIcon` is true)
78
- * @fires input - Dispatched when the value of the input changes
81
+ * @fires input - {ObcToggleSwitchInputEvent} Dispatched when the value of the input changes
79
82
  */
80
83
  export declare class ObcToggleSwitch extends LitElement {
81
84
  /**
@@ -110,6 +113,11 @@ export declare class ObcToggleSwitch extends LitElement {
110
113
  * Provide icon content via the `icon` slot.
111
114
  */
112
115
  hasIcon: boolean;
116
+ /**
117
+ * If true, the toggle is controlled externally.
118
+ * Use to control the toggle state from outside the component.
119
+ */
120
+ externalControl: boolean;
113
121
  /**
114
122
  * Handles input events to change the toggle state.
115
123
  * Prevents changes if the toggle is disabled.
@@ -1 +1 @@
1
- {"version":3,"file":"toggle-switch.d.ts","sourceRoot":"","sources":["../../../src/components/toggle-switch/toggle-switch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,UAAU,EAA2B,MAAM,KAAK,CAAC;AAGzD,OAAO,+BAA+B,CAAC;AAIvC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4EG;AACH,qBACa,eAAgB,SAAQ,UAAU;IAC7C;;OAEG;IACuB,KAAK,SAAW;IAE1C;;;OAGG;IACwB,OAAO,UAAS;IAE3C;;OAEG;IACwB,QAAQ,UAAS;IAE5C;;OAEG;IACwB,cAAc,UAAS;IAElD;;;OAGG;IACuB,WAAW,SAAM;IAE3C;;;OAGG;IACwB,gBAAgB,UAAS;IAEpD;;;OAGG;IACwB,OAAO,UAAS;IAE3C;;;;;OAKG;IACH,OAAO,CAAC,UAAU;IAQT,MAAM;IAsCf,OAAgB,MAAM,0BAA6B;CACpD;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,mBAAmB,EAAE,eAAe,CAAC;KACtC;CACF"}
1
+ {"version":3,"file":"toggle-switch.d.ts","sourceRoot":"","sources":["../../../src/components/toggle-switch/toggle-switch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,UAAU,EAA2B,MAAM,KAAK,CAAC;AAGzD,OAAO,+BAA+B,CAAC;AAIvC,MAAM,MAAM,yBAAyB,GAAG,WAAW,CAAC;IAClD,OAAO,EAAE,OAAO,CAAC;CAClB,CAAC,CAAC;AAEH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4EG;AACH,qBACa,eAAgB,SAAQ,UAAU;IAC7C;;OAEG;IACuB,KAAK,SAAW;IAE1C;;;OAGG;IACwB,OAAO,UAAS;IAE3C;;OAEG;IACwB,QAAQ,UAAS;IAE5C;;OAEG;IACwB,cAAc,UAAS;IAElD;;;OAGG;IACuB,WAAW,SAAM;IAE3C;;;OAGG;IACwB,gBAAgB,UAAS;IAEpD;;;OAGG;IACwB,OAAO,UAAS;IAE3C;;;OAGG;IACwB,eAAe,UAAS;IAEnD;;;;;OAKG;IACH,OAAO,CAAC,UAAU;IAsBT,MAAM;IAsCf,OAAgB,MAAM,0BAA6B;CACpD;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,mBAAmB,EAAE,eAAe,CAAC;KACtC;CACF"}
@@ -24,6 +24,7 @@ let ObcToggleSwitch = class extends LitElement {
24
24
  this.description = "";
25
25
  this.hasBottomDivider = false;
26
26
  this.hasIcon = false;
27
+ this.externalControl = false;
27
28
  }
28
29
  /**
29
30
  * Handles input events to change the toggle state.
@@ -36,7 +37,19 @@ let ObcToggleSwitch = class extends LitElement {
36
37
  e.preventDefault();
37
38
  return;
38
39
  }
39
- this.checked = e.target.checked;
40
+ const nextChecked = !this.checked;
41
+ if (!this.externalControl) {
42
+ this.checked = nextChecked;
43
+ }
44
+ e.stopPropagation();
45
+ this.dispatchEvent(
46
+ new CustomEvent("input", {
47
+ detail: { checked: nextChecked }
48
+ })
49
+ );
50
+ if (this.externalControl) {
51
+ e.target.checked = this.checked;
52
+ }
40
53
  }
41
54
  render() {
42
55
  return html`
@@ -59,7 +72,7 @@ let ObcToggleSwitch = class extends LitElement {
59
72
  <div class="knob"></div>
60
73
  <input
61
74
  type="checkbox"
62
- ?checked=${this.checked}
75
+ .checked=${this.checked}
63
76
  ?disabled=${this.disabled}
64
77
  @input=${this._tryChange}
65
78
  />
@@ -92,6 +105,9 @@ __decorateClass([
92
105
  __decorateClass([
93
106
  property({ type: Boolean })
94
107
  ], ObcToggleSwitch.prototype, "hasIcon", 2);
108
+ __decorateClass([
109
+ property({ type: Boolean })
110
+ ], ObcToggleSwitch.prototype, "externalControl", 2);
95
111
  ObcToggleSwitch = __decorateClass([
96
112
  customElement("obc-toggle-switch")
97
113
  ], ObcToggleSwitch);
@@ -1 +1 @@
1
- {"version":3,"file":"toggle-switch.js","sources":["../../../src/components/toggle-switch/toggle-switch.ts"],"sourcesContent":["import {LitElement, html, nothing, unsafeCSS} from 'lit';\nimport {property} from 'lit/decorators.js';\nimport {classMap} from 'lit/directives/class-map.js';\nimport '../icon-button/icon-button.js';\nimport componentStyle from './toggle-switch.css?inline';\nimport {customElement} from '../../decorator.js';\n\n/**\n * `<obc-toggle-switch>` – A toggle switch component for binary on/off selection (also known as a switch, toggle, or enable/disable control).\n *\n * Provides a visual switch control for toggling between two states (checked/unchecked), commonly used for enabling or disabling a setting or feature. The component supports an optional label, description, icon, and divider for flexible presentation in lists or forms.\n *\n * ---\n *\n * ### Features\n * - **Binary toggle:** Allows users to switch between checked (on) and unchecked (off) states.\n * - **Label and Description:** Displays a primary label and an optional secondary description for context.\n * - **Icon Support:** Can display a leading icon via the `icon` slot for visual emphasis.\n * - **Disabled State:** Can be set to disabled, preventing user interaction and visually indicating inactivity.\n * - **Bottom Divider:** Optional divider for use in lists or grouped settings.\n * - **Responsive Layout:** Adapts label/description layout based on content; long descriptions are truncated with ellipsis.\n *\n * ---\n *\n * ### Usage Guidelines\n * Use `obc-toggle-switch` for settings or preferences that require a simple on/off or enable/disable control. Ideal for scenarios where the user needs to quickly toggle a feature, such as activating notifications, enabling dark mode, or switching connectivity options. Avoid using for mutually exclusive choices—use radio buttons for those cases.\n *\n * - Place in forms, settings panels, or lists where binary choices are needed.\n * - Use the description property to clarify the effect of the toggle if the label alone is not sufficient.\n * - If an icon is relevant, provide it via the `icon` slot to reinforce the meaning.\n * - For accessibility, ensure the label clearly describes the toggle's function.\n *\n * ---\n *\n * ### Slots\n * | Slot Name | Renders When... | Purpose |\n * |-----------|---------------------|-------------------------------------------|\n * | icon | `hasIcon` is true | Leading icon to visually represent toggle |\n *\n * ---\n *\n * ### Properties and Attributes\n * - `label` (string): Main label for the toggle (required for clarity).\n * - `checked` (boolean): Whether the toggle is in the \"on\" state. Defaults to `false`.\n * - `disabled` (boolean): Disables interaction and applies a disabled style.\n * - `hasDescription` (boolean): If true, shows the description text below the label.\n * - `description` (string): Supplementary text shown when `hasDescription` is true.\n * - `hasBottomDivider` (boolean): If true, renders a divider below the toggle (useful in lists).\n * - `hasIcon` (boolean): If true, displays the `icon` slot before the label.\n *\n * ---\n *\n * ### Events\n * - `input` – Fired when the toggle state changes (checked/unchecked).\n *\n * ---\n *\n * ### Best Practices\n * - Use concise labels and keep descriptions brief; long descriptions are truncated.\n * - Only use the divider when presenting multiple toggles in a list for visual separation.\n * - For accessibility, ensure the label is descriptive and unique within the context.\n * - Avoid using toggle switches for actions that require confirmation or have destructive effects.\n * - For mutually exclusive options, use radio buttons instead.\n *\n * ---\n *\n * **Example:**\n * ```html\n * <obc-toggle-switch\n * label=\"Enable notifications\"\n * ?checked=${true}\n * ?hasDescription=${true}\n * description=\"Receive updates and alerts\"\n * ?hasIcon=${true}\n * >\n * <obi-placeholder slot=\"icon\"></obi-placeholder>\n * </obc-toggle-switch>\n * ```\n *\n * In this example, the toggle switch displays a label, an icon, and a description, and is in the checked state.\n *\n * @slot icon - Leading icon slot (shown when `hasIcon` is true)\n * @fires input - Dispatched when the value of the input changes\n */\n@customElement('obc-toggle-switch')\nexport class ObcToggleSwitch extends LitElement {\n /**\n * Main label for the toggle switch. Should clearly describe the setting being toggled.\n */\n @property({type: String}) label = 'Label';\n\n /**\n * Whether the toggle is in the \"on\" (checked) state.\n * Set to true to display as active/on.\n */\n @property({type: Boolean}) checked = false;\n\n /**\n * Disables the toggle, preventing user interaction and applying a disabled style.\n */\n @property({type: Boolean}) disabled = false;\n\n /**\n * If true, displays the description text below the label.\n */\n @property({type: Boolean}) hasDescription = false;\n\n /**\n * Supplementary description text shown when `hasDescription` is true.\n * Use to clarify the effect or details of the toggle.\n */\n @property({type: String}) description = '';\n\n /**\n * If true, renders a divider below the toggle switch.\n * Useful for visually separating items in a list.\n */\n @property({type: Boolean}) hasBottomDivider = false;\n\n /**\n * If true, displays a leading icon before the label.\n * Provide icon content via the `icon` slot.\n */\n @property({type: Boolean}) hasIcon = false;\n\n /**\n * Handles input events to change the toggle state.\n * Prevents changes if the toggle is disabled.\n * @param e {InputEvent}\n * @fires input - Dispatched when the value of the input changes\n */\n private _tryChange(e: InputEvent) {\n if (this.disabled) {\n e.preventDefault();\n return;\n }\n this.checked = (e.target as HTMLInputElement).checked;\n }\n\n override render() {\n return html`\n <label\n class=${classMap({\n checked: this.checked,\n disabled: this.disabled,\n 'has-description': this.hasDescription,\n })}\n >\n <div class=\"icon-label-container\">\n ${this.hasIcon\n ? html`<div class=\"icon-container\"><slot name=\"icon\"></slot></div>`\n : nothing}\n <div class=\"label-container\">\n <span class=\"label\">${this.label}</span>\n ${this.hasDescription\n ? html`<span class=\"description\">${this.description}</span>`\n : nothing}\n </div>\n </div>\n <div class=\"switch\">\n <div class=\"presenter ${classMap({checked: this.checked})}\">\n <div class=\"knob\"></div>\n <input\n type=\"checkbox\"\n ?checked=${this.checked}\n ?disabled=${this.disabled}\n @input=${this._tryChange}\n />\n </div>\n </div>\n ${this.hasBottomDivider\n ? html`<div class=\"bottom-divider\"></div>`\n : nothing}\n </label>\n `;\n }\n\n static override styles = unsafeCSS(componentStyle);\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'obc-toggle-switch': ObcToggleSwitch;\n }\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAqFO,IAAM,kBAAN,cAA8B,WAAW;AAAA,EAAzC,cAAA;AAAA,UAAA,GAAA,SAAA;AAIqB,SAAA,QAAQ;AAMP,SAAA,UAAU;AAKV,SAAA,WAAW;AAKX,SAAA,iBAAiB;AAMlB,SAAA,cAAc;AAMb,SAAA,mBAAmB;AAMnB,SAAA,UAAU;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQ7B,WAAW,GAAe;AAChC,QAAI,KAAK,UAAU;AACjB,QAAE,eAAA;AACF;AAAA,IACF;AACA,SAAK,UAAW,EAAE,OAA4B;AAAA,EAChD;AAAA,EAES,SAAS;AAChB,WAAO;AAAA;AAAA,gBAEK,SAAS;AAAA,MACf,SAAS,KAAK;AAAA,MACd,UAAU,KAAK;AAAA,MACf,mBAAmB,KAAK;AAAA,IAAA,CACzB,CAAC;AAAA;AAAA;AAAA,YAGE,KAAK,UACH,oEACA,OAAO;AAAA;AAAA,kCAEa,KAAK,KAAK;AAAA,cAC9B,KAAK,iBACH,iCAAiC,KAAK,WAAW,YACjD,OAAO;AAAA;AAAA;AAAA;AAAA,kCAIW,SAAS,EAAC,SAAS,KAAK,QAAA,CAAQ,CAAC;AAAA;AAAA;AAAA;AAAA,yBAI1C,KAAK,OAAO;AAAA,0BACX,KAAK,QAAQ;AAAA,uBAChB,KAAK,UAAU;AAAA;AAAA;AAAA;AAAA,UAI5B,KAAK,mBACH,2CACA,OAAO;AAAA;AAAA;AAAA,EAGjB;AAGF;AA7Fa,gBA4FK,SAAS,UAAU,cAAc;AAxFvB,gBAAA;AAAA,EAAzB,SAAS,EAAC,MAAM,OAAA,CAAO;AAAA,GAJb,gBAIe,WAAA,SAAA,CAAA;AAMC,gBAAA;AAAA,EAA1B,SAAS,EAAC,MAAM,QAAA,CAAQ;AAAA,GAVd,gBAUgB,WAAA,WAAA,CAAA;AAKA,gBAAA;AAAA,EAA1B,SAAS,EAAC,MAAM,QAAA,CAAQ;AAAA,GAfd,gBAegB,WAAA,YAAA,CAAA;AAKA,gBAAA;AAAA,EAA1B,SAAS,EAAC,MAAM,QAAA,CAAQ;AAAA,GApBd,gBAoBgB,WAAA,kBAAA,CAAA;AAMD,gBAAA;AAAA,EAAzB,SAAS,EAAC,MAAM,OAAA,CAAO;AAAA,GA1Bb,gBA0Be,WAAA,eAAA,CAAA;AAMC,gBAAA;AAAA,EAA1B,SAAS,EAAC,MAAM,QAAA,CAAQ;AAAA,GAhCd,gBAgCgB,WAAA,oBAAA,CAAA;AAMA,gBAAA;AAAA,EAA1B,SAAS,EAAC,MAAM,QAAA,CAAQ;AAAA,GAtCd,gBAsCgB,WAAA,WAAA,CAAA;AAtChB,kBAAN,gBAAA;AAAA,EADN,cAAc,mBAAmB;AAAA,GACrB,eAAA;"}
1
+ {"version":3,"file":"toggle-switch.js","sources":["../../../src/components/toggle-switch/toggle-switch.ts"],"sourcesContent":["import {LitElement, html, nothing, unsafeCSS} from 'lit';\nimport {property} from 'lit/decorators.js';\nimport {classMap} from 'lit/directives/class-map.js';\nimport '../icon-button/icon-button.js';\nimport componentStyle from './toggle-switch.css?inline';\nimport {customElement} from '../../decorator.js';\n\nexport type ObcToggleSwitchInputEvent = CustomEvent<{\n checked: boolean;\n}>;\n\n/**\n * `<obc-toggle-switch>` – A toggle switch component for binary on/off selection (also known as a switch, toggle, or enable/disable control).\n *\n * Provides a visual switch control for toggling between two states (checked/unchecked), commonly used for enabling or disabling a setting or feature. The component supports an optional label, description, icon, and divider for flexible presentation in lists or forms.\n *\n * ---\n *\n * ### Features\n * - **Binary toggle:** Allows users to switch between checked (on) and unchecked (off) states.\n * - **Label and Description:** Displays a primary label and an optional secondary description for context.\n * - **Icon Support:** Can display a leading icon via the `icon` slot for visual emphasis.\n * - **Disabled State:** Can be set to disabled, preventing user interaction and visually indicating inactivity.\n * - **Bottom Divider:** Optional divider for use in lists or grouped settings.\n * - **Responsive Layout:** Adapts label/description layout based on content; long descriptions are truncated with ellipsis.\n *\n * ---\n *\n * ### Usage Guidelines\n * Use `obc-toggle-switch` for settings or preferences that require a simple on/off or enable/disable control. Ideal for scenarios where the user needs to quickly toggle a feature, such as activating notifications, enabling dark mode, or switching connectivity options. Avoid using for mutually exclusive choices—use radio buttons for those cases.\n *\n * - Place in forms, settings panels, or lists where binary choices are needed.\n * - Use the description property to clarify the effect of the toggle if the label alone is not sufficient.\n * - If an icon is relevant, provide it via the `icon` slot to reinforce the meaning.\n * - For accessibility, ensure the label clearly describes the toggle's function.\n *\n * ---\n *\n * ### Slots\n * | Slot Name | Renders When... | Purpose |\n * |-----------|---------------------|-------------------------------------------|\n * | icon | `hasIcon` is true | Leading icon to visually represent toggle |\n *\n * ---\n *\n * ### Properties and Attributes\n * - `label` (string): Main label for the toggle (required for clarity).\n * - `checked` (boolean): Whether the toggle is in the \"on\" state. Defaults to `false`.\n * - `disabled` (boolean): Disables interaction and applies a disabled style.\n * - `hasDescription` (boolean): If true, shows the description text below the label.\n * - `description` (string): Supplementary text shown when `hasDescription` is true.\n * - `hasBottomDivider` (boolean): If true, renders a divider below the toggle (useful in lists).\n * - `hasIcon` (boolean): If true, displays the `icon` slot before the label.\n *\n * ---\n *\n * ### Events\n * - `input` – Fired when the toggle state changes (checked/unchecked).\n *\n * ---\n *\n * ### Best Practices\n * - Use concise labels and keep descriptions brief; long descriptions are truncated.\n * - Only use the divider when presenting multiple toggles in a list for visual separation.\n * - For accessibility, ensure the label is descriptive and unique within the context.\n * - Avoid using toggle switches for actions that require confirmation or have destructive effects.\n * - For mutually exclusive options, use radio buttons instead.\n *\n * ---\n *\n * **Example:**\n * ```html\n * <obc-toggle-switch\n * label=\"Enable notifications\"\n * ?checked=${true}\n * ?hasDescription=${true}\n * description=\"Receive updates and alerts\"\n * ?hasIcon=${true}\n * >\n * <obi-placeholder slot=\"icon\"></obi-placeholder>\n * </obc-toggle-switch>\n * ```\n *\n * In this example, the toggle switch displays a label, an icon, and a description, and is in the checked state.\n *\n * @slot icon - Leading icon slot (shown when `hasIcon` is true)\n * @fires input - {ObcToggleSwitchInputEvent} Dispatched when the value of the input changes\n */\n@customElement('obc-toggle-switch')\nexport class ObcToggleSwitch extends LitElement {\n /**\n * Main label for the toggle switch. Should clearly describe the setting being toggled.\n */\n @property({type: String}) label = 'Label';\n\n /**\n * Whether the toggle is in the \"on\" (checked) state.\n * Set to true to display as active/on.\n */\n @property({type: Boolean}) checked = false;\n\n /**\n * Disables the toggle, preventing user interaction and applying a disabled style.\n */\n @property({type: Boolean}) disabled = false;\n\n /**\n * If true, displays the description text below the label.\n */\n @property({type: Boolean}) hasDescription = false;\n\n /**\n * Supplementary description text shown when `hasDescription` is true.\n * Use to clarify the effect or details of the toggle.\n */\n @property({type: String}) description = '';\n\n /**\n * If true, renders a divider below the toggle switch.\n * Useful for visually separating items in a list.\n */\n @property({type: Boolean}) hasBottomDivider = false;\n\n /**\n * If true, displays a leading icon before the label.\n * Provide icon content via the `icon` slot.\n */\n @property({type: Boolean}) hasIcon = false;\n\n /**\n * If true, the toggle is controlled externally.\n * Use to control the toggle state from outside the component.\n */\n @property({type: Boolean}) externalControl = false;\n\n /**\n * Handles input events to change the toggle state.\n * Prevents changes if the toggle is disabled.\n * @param e {InputEvent}\n * @fires input - Dispatched when the value of the input changes\n */\n private _tryChange(e: InputEvent) {\n if (this.disabled) {\n e.preventDefault();\n return;\n }\n\n const nextChecked = !this.checked;\n if (!this.externalControl) {\n this.checked = nextChecked;\n }\n e.stopPropagation();\n this.dispatchEvent(\n new CustomEvent('input', {\n detail: {checked: nextChecked},\n })\n );\n\n if (this.externalControl) {\n (e.target as HTMLInputElement).checked = this.checked;\n }\n }\n\n override render() {\n return html`\n <label\n class=${classMap({\n checked: this.checked,\n disabled: this.disabled,\n 'has-description': this.hasDescription,\n })}\n >\n <div class=\"icon-label-container\">\n ${this.hasIcon\n ? html`<div class=\"icon-container\"><slot name=\"icon\"></slot></div>`\n : nothing}\n <div class=\"label-container\">\n <span class=\"label\">${this.label}</span>\n ${this.hasDescription\n ? html`<span class=\"description\">${this.description}</span>`\n : nothing}\n </div>\n </div>\n <div class=\"switch\">\n <div class=\"presenter ${classMap({checked: this.checked})}\">\n <div class=\"knob\"></div>\n <input\n type=\"checkbox\"\n .checked=${this.checked}\n ?disabled=${this.disabled}\n @input=${this._tryChange}\n />\n </div>\n </div>\n ${this.hasBottomDivider\n ? html`<div class=\"bottom-divider\"></div>`\n : nothing}\n </label>\n `;\n }\n\n static override styles = unsafeCSS(componentStyle);\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'obc-toggle-switch': ObcToggleSwitch;\n }\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAyFO,IAAM,kBAAN,cAA8B,WAAW;AAAA,EAAzC,cAAA;AAAA,UAAA,GAAA,SAAA;AAIqB,SAAA,QAAQ;AAMP,SAAA,UAAU;AAKV,SAAA,WAAW;AAKX,SAAA,iBAAiB;AAMlB,SAAA,cAAc;AAMb,SAAA,mBAAmB;AAMnB,SAAA,UAAU;AAMV,SAAA,kBAAkB;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQrC,WAAW,GAAe;AAChC,QAAI,KAAK,UAAU;AACjB,QAAE,eAAA;AACF;AAAA,IACF;AAEA,UAAM,cAAc,CAAC,KAAK;AAC1B,QAAI,CAAC,KAAK,iBAAiB;AACzB,WAAK,UAAU;AAAA,IACjB;AACA,MAAE,gBAAA;AACF,SAAK;AAAA,MACH,IAAI,YAAY,SAAS;AAAA,QACvB,QAAQ,EAAC,SAAS,YAAA;AAAA,MAAW,CAC9B;AAAA,IAAA;AAGH,QAAI,KAAK,iBAAiB;AACvB,QAAE,OAA4B,UAAU,KAAK;AAAA,IAChD;AAAA,EACF;AAAA,EAES,SAAS;AAChB,WAAO;AAAA;AAAA,gBAEK,SAAS;AAAA,MACf,SAAS,KAAK;AAAA,MACd,UAAU,KAAK;AAAA,MACf,mBAAmB,KAAK;AAAA,IAAA,CACzB,CAAC;AAAA;AAAA;AAAA,YAGE,KAAK,UACH,oEACA,OAAO;AAAA;AAAA,kCAEa,KAAK,KAAK;AAAA,cAC9B,KAAK,iBACH,iCAAiC,KAAK,WAAW,YACjD,OAAO;AAAA;AAAA;AAAA;AAAA,kCAIW,SAAS,EAAC,SAAS,KAAK,QAAA,CAAQ,CAAC;AAAA;AAAA;AAAA;AAAA,yBAI1C,KAAK,OAAO;AAAA,0BACX,KAAK,QAAQ;AAAA,uBAChB,KAAK,UAAU;AAAA;AAAA;AAAA;AAAA,UAI5B,KAAK,mBACH,2CACA,OAAO;AAAA;AAAA;AAAA,EAGjB;AAGF;AAjHa,gBAgHK,SAAS,UAAU,cAAc;AA5GvB,gBAAA;AAAA,EAAzB,SAAS,EAAC,MAAM,OAAA,CAAO;AAAA,GAJb,gBAIe,WAAA,SAAA,CAAA;AAMC,gBAAA;AAAA,EAA1B,SAAS,EAAC,MAAM,QAAA,CAAQ;AAAA,GAVd,gBAUgB,WAAA,WAAA,CAAA;AAKA,gBAAA;AAAA,EAA1B,SAAS,EAAC,MAAM,QAAA,CAAQ;AAAA,GAfd,gBAegB,WAAA,YAAA,CAAA;AAKA,gBAAA;AAAA,EAA1B,SAAS,EAAC,MAAM,QAAA,CAAQ;AAAA,GApBd,gBAoBgB,WAAA,kBAAA,CAAA;AAMD,gBAAA;AAAA,EAAzB,SAAS,EAAC,MAAM,OAAA,CAAO;AAAA,GA1Bb,gBA0Be,WAAA,eAAA,CAAA;AAMC,gBAAA;AAAA,EAA1B,SAAS,EAAC,MAAM,QAAA,CAAQ;AAAA,GAhCd,gBAgCgB,WAAA,oBAAA,CAAA;AAMA,gBAAA;AAAA,EAA1B,SAAS,EAAC,MAAM,QAAA,CAAQ;AAAA,GAtCd,gBAsCgB,WAAA,WAAA,CAAA;AAMA,gBAAA;AAAA,EAA1B,SAAS,EAAC,MAAM,QAAA,CAAQ;AAAA,GA5Cd,gBA4CgB,WAAA,mBAAA,CAAA;AA5ChB,kBAAN,gBAAA;AAAA,EADN,cAAc,mBAAmB;AAAA,GACrB,eAAA;"}
@@ -0,0 +1,2 @@
1
+ import './toggle-switch.js';
2
+ //# sourceMappingURL=toggle-switch.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toggle-switch.spec.d.ts","sourceRoot":"","sources":["../../../src/components/toggle-switch/toggle-switch.spec.ts"],"names":[],"mappings":"AACA,OAAO,oBAAoB,CAAC"}
@@ -0,0 +1,115 @@
1
+ import "./toggle-switch.js";
2
+ import "../../node_modules/vitest-browser-lit/dist/index.js";
3
+ import { html } from "lit";
4
+ import { describe, beforeEach, it } from "../../node_modules/@vitest/runner/dist/index.js";
5
+ import { g as globalExpect, v as vi } from "../../node_modules/vitest/dist/chunks/test.CTcmp4Su.js";
6
+ import { render as render$1 } from "../../node_modules/vitest-browser-lit/dist/pure-D9bcvh0k.js";
7
+ describe("obc-toggle-switch", () => {
8
+ let el;
9
+ let input;
10
+ async function setup(markup = html`<obc-toggle-switch></obc-toggle-switch>`) {
11
+ const screen = render$1(markup);
12
+ el = screen.baseElement.querySelector(
13
+ "obc-toggle-switch"
14
+ );
15
+ await el.updateComplete;
16
+ if (!el.shadowRoot) {
17
+ console.error("Shadow root not found", el);
18
+ throw new Error("Shadow root not found");
19
+ }
20
+ input = el.shadowRoot.querySelector(
21
+ 'input[type="checkbox"]'
22
+ );
23
+ if (!input) {
24
+ console.error("Input not found", el.shadowRoot);
25
+ throw new Error("Input not found");
26
+ }
27
+ }
28
+ beforeEach(async () => {
29
+ await setup();
30
+ });
31
+ it("defaults to unchecked", async () => {
32
+ globalExpect(el.checked).toBe(false);
33
+ globalExpect(input.checked).toBe(false);
34
+ });
35
+ describe("toggling (internal control)", () => {
36
+ it("dispatches input event with next checked value", async () => {
37
+ const handler = vi.fn();
38
+ el.addEventListener("input", handler);
39
+ input.click();
40
+ await el.updateComplete;
41
+ globalExpect(handler).toHaveBeenCalledTimes(1);
42
+ const event = handler.mock.calls[0]?.[0];
43
+ globalExpect(event.detail).toEqual({ checked: true });
44
+ });
45
+ it("combination of click and js control", async () => {
46
+ el.checked = true;
47
+ await el.updateComplete;
48
+ globalExpect(el.checked).toBe(true);
49
+ globalExpect(input.checked).toBe(true);
50
+ input.click();
51
+ await el.updateComplete;
52
+ globalExpect(el.checked).toBe(false);
53
+ globalExpect(input.checked).toBe(false);
54
+ input.click();
55
+ await el.updateComplete;
56
+ globalExpect(el.checked).toBe(true);
57
+ globalExpect(input.checked).toBe(true);
58
+ el.checked = false;
59
+ await el.updateComplete;
60
+ globalExpect(el.checked).toBe(false);
61
+ globalExpect(input.checked).toBe(false);
62
+ });
63
+ it("updates checked when user toggles", async () => {
64
+ input.click();
65
+ await el.updateComplete;
66
+ globalExpect(el.checked).toBe(true);
67
+ globalExpect(input.checked).toBe(true);
68
+ });
69
+ });
70
+ describe("externalControl", () => {
71
+ beforeEach(async () => {
72
+ el.externalControl = true;
73
+ await el.updateComplete;
74
+ });
75
+ it("does not change checked when user toggles", async () => {
76
+ globalExpect(el.checked).toBe(false);
77
+ globalExpect(input.checked).toBe(false);
78
+ input.click();
79
+ await el.updateComplete;
80
+ globalExpect(el.checked).toBe(false);
81
+ globalExpect(input.checked).toBe(false);
82
+ });
83
+ it("still dispatches input event with suggested next state", async () => {
84
+ const handler = vi.fn();
85
+ el.addEventListener("input", handler);
86
+ input.click();
87
+ await el.updateComplete;
88
+ globalExpect(handler).toHaveBeenCalledTimes(1);
89
+ const event = handler.mock.calls[0]?.[0];
90
+ globalExpect(event.detail).toEqual({ checked: true });
91
+ });
92
+ });
93
+ describe("disabled", () => {
94
+ beforeEach(async () => {
95
+ el.disabled = true;
96
+ await el.updateComplete;
97
+ });
98
+ it("prevents toggling", async () => {
99
+ globalExpect(el.checked).toBe(false);
100
+ globalExpect(input.disabled).toBe(true);
101
+ input.click();
102
+ await el.updateComplete;
103
+ globalExpect(el.checked).toBe(false);
104
+ globalExpect(input.checked).toBe(false);
105
+ });
106
+ it("does not dispatch input event", async () => {
107
+ const handler = vi.fn();
108
+ el.addEventListener("input", handler);
109
+ input.click();
110
+ await el.updateComplete;
111
+ globalExpect(handler).not.toHaveBeenCalled();
112
+ });
113
+ });
114
+ });
115
+ //# sourceMappingURL=toggle-switch.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toggle-switch.spec.js","sources":["../../../src/components/toggle-switch/toggle-switch.spec.ts"],"sourcesContent":["import {beforeEach, describe, expect, it, vi} from 'vitest';\nimport './toggle-switch.js';\nimport {ObcToggleSwitch} from './toggle-switch.js';\nimport {render} from 'vitest-browser-lit';\nimport {html} from 'lit';\n\ndescribe('obc-toggle-switch', () => {\n let el: ObcToggleSwitch;\n let input: HTMLInputElement;\n\n async function setup(markup = html`<obc-toggle-switch></obc-toggle-switch>`) {\n const screen = render(markup);\n el = screen.baseElement.querySelector(\n 'obc-toggle-switch'\n ) as ObcToggleSwitch;\n await el.updateComplete;\n\n if (!el.shadowRoot) {\n console.error('Shadow root not found', el);\n throw new Error('Shadow root not found');\n }\n\n input = el.shadowRoot.querySelector(\n 'input[type=\"checkbox\"]'\n ) as HTMLInputElement;\n if (!input) {\n console.error('Input not found', el.shadowRoot);\n throw new Error('Input not found');\n }\n }\n\n beforeEach(async () => {\n await setup();\n });\n\n it('defaults to unchecked', async () => {\n expect(el.checked).toBe(false);\n expect(input.checked).toBe(false);\n });\n\n describe('toggling (internal control)', () => {\n it('dispatches input event with next checked value', async () => {\n const handler = vi.fn();\n el.addEventListener('input', handler);\n\n input.click();\n await el.updateComplete;\n\n expect(handler).toHaveBeenCalledTimes(1);\n const event = handler.mock.calls[0]?.[0] as CustomEvent<{\n checked: boolean;\n }>;\n expect(event.detail).toEqual({checked: true});\n });\n\n it('combination of click and js control', async () => {\n el.checked = true;\n await el.updateComplete;\n expect(el.checked).toBe(true);\n expect(input.checked).toBe(true);\n\n input.click();\n await el.updateComplete;\n\n expect(el.checked).toBe(false);\n expect(input.checked).toBe(false);\n\n input.click();\n await el.updateComplete;\n\n expect(el.checked).toBe(true);\n expect(input.checked).toBe(true);\n\n el.checked = false;\n await el.updateComplete;\n expect(el.checked).toBe(false);\n expect(input.checked).toBe(false);\n });\n\n it('updates checked when user toggles', async () => {\n input.click();\n await el.updateComplete;\n\n expect(el.checked).toBe(true);\n expect(input.checked).toBe(true);\n });\n });\n\n describe('externalControl', () => {\n beforeEach(async () => {\n el.externalControl = true;\n await el.updateComplete;\n });\n\n it('does not change checked when user toggles', async () => {\n expect(el.checked).toBe(false);\n expect(input.checked).toBe(false);\n\n input.click();\n await el.updateComplete;\n\n expect(el.checked).toBe(false);\n expect(input.checked).toBe(false);\n });\n\n it('still dispatches input event with suggested next state', async () => {\n const handler = vi.fn();\n el.addEventListener('input', handler);\n\n input.click();\n await el.updateComplete;\n\n expect(handler).toHaveBeenCalledTimes(1);\n const event = handler.mock.calls[0]?.[0] as CustomEvent<{\n checked: boolean;\n }>;\n expect(event.detail).toEqual({checked: true});\n });\n });\n\n describe('disabled', () => {\n beforeEach(async () => {\n el.disabled = true;\n await el.updateComplete;\n });\n\n it('prevents toggling', async () => {\n expect(el.checked).toBe(false);\n expect(input.disabled).toBe(true);\n\n input.click();\n await el.updateComplete;\n\n expect(el.checked).toBe(false);\n expect(input.checked).toBe(false);\n });\n\n it('does not dispatch input event', async () => {\n const handler = vi.fn();\n el.addEventListener('input', handler);\n\n input.click();\n await el.updateComplete;\n\n expect(handler).not.toHaveBeenCalled();\n });\n });\n});\n"],"names":["render","expect"],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  import { LitElement } from 'lit';
2
+ import { VesselImage } from '../watch/watch.js';
2
3
  import '../watch/watch.js';
3
4
  export interface VelocityProjectionDatapoint {
4
5
  startAngleDeg: number;
@@ -12,6 +13,7 @@ export declare class ObcVelocityProjectionPlot extends LitElement {
12
13
  instantWindSpeedNumber: number | null;
13
14
  instantCurrentDirectionDeg: number | null;
14
15
  instantCurrentSpeedNumber: number | null;
16
+ vesselImage: VesselImage;
15
17
  render(): import('lit-html').TemplateResult<1>;
16
18
  private isSelected;
17
19
  private color;
@@ -1 +1 @@
1
- {"version":3,"file":"velocity-projection-plot.d.ts","sourceRoot":"","sources":["../../../src/navigation-instruments/velocity-projection-plot/velocity-projection-plot.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EAMX,MAAM,KAAK,CAAC;AAGb,OAAO,mBAAmB,CAAC;AAI3B,MAAM,WAAW,2BAA2B;IAC1C,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,4BAA4B,EAAE,MAAM,CAAC;IACrC,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED,qBACa,yBAA0B,SAAQ,UAAU;IAEvD,UAAU,EAAE,2BAA2B,EAAE,CAAM;IAE/C,uBAAuB,EAAE,MAAM,GAAG,IAAI,CAAQ;IAE9C,sBAAsB,EAAE,MAAM,GAAG,IAAI,CAAQ;IAE7C,0BAA0B,EAAE,MAAM,GAAG,IAAI,CAAQ;IAEjD,yBAAyB,EAAE,MAAM,GAAG,IAAI,CAAQ;IAEvC,MAAM;IA4Bf,OAAO,CAAC,UAAU;IASlB,OAAO,CAAC,KAAK;IAoBb,OAAO,CAAC,eAAe;IAiEvB,OAAgB,MAAM,0BAA2B;CAClD;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,8BAA8B,EAAE,yBAAyB,CAAC;KAC3D;CACF"}
1
+ {"version":3,"file":"velocity-projection-plot.d.ts","sourceRoot":"","sources":["../../../src/navigation-instruments/velocity-projection-plot/velocity-projection-plot.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EAMX,MAAM,KAAK,CAAC;AAGb,OAAO,mBAAmB,CAAC;AAC3B,OAAO,EAAC,WAAW,EAAkB,MAAM,mBAAmB,CAAC;AAG/D,MAAM,WAAW,2BAA2B;IAC1C,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,4BAA4B,EAAE,MAAM,CAAC;IACrC,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED,qBACa,yBAA0B,SAAQ,UAAU;IAEvD,UAAU,EAAE,2BAA2B,EAAE,CAAM;IAE/C,uBAAuB,EAAE,MAAM,GAAG,IAAI,CAAQ;IAE9C,sBAAsB,EAAE,MAAM,GAAG,IAAI,CAAQ;IAE7C,0BAA0B,EAAE,MAAM,GAAG,IAAI,CAAQ;IAEjD,yBAAyB,EAAE,MAAM,GAAG,IAAI,CAAQ;IAEhD,WAAW,EAAE,WAAW,CAA4B;IAC3C,MAAM;IA4Bf,OAAO,CAAC,UAAU;IASlB,OAAO,CAAC,KAAK;IAoBb,OAAO,CAAC,eAAe;IAiEvB,OAAgB,MAAM,0BAA2B;CAClD;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,8BAA8B,EAAE,yBAAyB,CAAC;KAC3D;CACF"}
@@ -22,6 +22,7 @@ let ObcVelocityProjectionPlot = class extends LitElement {
22
22
  this.instantWindSpeedNumber = null;
23
23
  this.instantCurrentDirectionDeg = null;
24
24
  this.instantCurrentSpeedNumber = null;
25
+ this.vesselImage = VesselImage.cargoWindTop;
25
26
  }
26
27
  render() {
27
28
  const width = 320;
@@ -34,7 +35,7 @@ let ObcVelocityProjectionPlot = class extends LitElement {
34
35
  .vessels=${[
35
36
  {
36
37
  size: VesselImageSize.small,
37
- vesselImage: VesselImage.cargoWindTop,
38
+ vesselImage: this.vesselImage,
38
39
  transform: ""
39
40
  }
40
41
  ]}
@@ -132,6 +133,9 @@ __decorateClass([
132
133
  __decorateClass([
133
134
  property({ type: Number })
134
135
  ], ObcVelocityProjectionPlot.prototype, "instantCurrentSpeedNumber", 2);
136
+ __decorateClass([
137
+ property({ type: String })
138
+ ], ObcVelocityProjectionPlot.prototype, "vesselImage", 2);
135
139
  ObcVelocityProjectionPlot = __decorateClass([
136
140
  customElement("obc-velocity-projection-plot")
137
141
  ], ObcVelocityProjectionPlot);
@@ -1 +1 @@
1
- {"version":3,"file":"velocity-projection-plot.js","sources":["../../../src/navigation-instruments/velocity-projection-plot/velocity-projection-plot.ts"],"sourcesContent":["import {\n LitElement,\n SVGTemplateResult,\n html,\n nothing,\n svg,\n unsafeCSS,\n} from 'lit';\nimport {property} from 'lit/decorators.js';\nimport compentStyle from './velocity-projection-plot.css?inline';\nimport '../watch/watch.js';\nimport {VesselImage, VesselImageSize} from '../watch/watch.js';\nimport {customElement} from '../../decorator.js';\n\nexport interface VelocityProjectionDatapoint {\n startAngleDeg: number;\n endAngleDeg: number;\n ratioWindEnergyOrExcessSpeed: number; // If the ratio is below 1, the value is the ratio of wind energy, if it is above 1, the value is the ratio of excess speed\n ratioTotalEnergy: number;\n}\n\n@customElement('obc-velocity-projection-plot')\nexport class ObcVelocityProjectionPlot extends LitElement {\n @property({type: Array, attribute: false})\n dataPoints: VelocityProjectionDatapoint[] = [];\n @property({type: Number})\n instantWindDirectionDeg: number | null = null;\n @property({type: Number})\n instantWindSpeedNumber: number | null = null;\n @property({type: Number})\n instantCurrentDirectionDeg: number | null = null;\n @property({type: Number})\n instantCurrentSpeedNumber: number | null = null;\n\n override render() {\n const width = 320;\n const viewBox = `-${width / 2} -${width / 2} ${width} ${width}`;\n\n return html`\n <div class=\"container\">\n <obc-watch\n crosshairEnabled\n northArrow\n .vessels=${[\n {\n size: VesselImageSize.small,\n vesselImage: VesselImage.cargoWindTop,\n transform: '',\n },\n ]}\n .windFromDirectionDeg=${this.instantWindDirectionDeg}\n .wind=${this.instantWindSpeedNumber}\n .currentFromDirectionDeg=${this.instantCurrentDirectionDeg}\n .current=${this.instantCurrentSpeedNumber}\n .padding=${70}\n >\n </obc-watch>\n <svg viewBox=\"${viewBox}\">${this.renderPlotLines()}</svg>\n </div>\n `;\n }\n\n private isSelected(dp: VelocityProjectionDatapoint): boolean {\n if (this.instantWindDirectionDeg != null) {\n return (\n dp.startAngleDeg <= this.instantWindDirectionDeg &&\n dp.endAngleDeg >= this.instantWindDirectionDeg\n );\n }\n return true;\n }\n private color(dp: VelocityProjectionDatapoint): {\n totalEnergy: string;\n windEnergy: string;\n speed: string;\n } {\n if (this.isSelected(dp)) {\n return {\n totalEnergy: 'var(--instrument-frame-tertiary-color)',\n windEnergy: 'var(--instrument-enhanced-tertiary-color)',\n speed: 'var(--instrument-enhanced-secondary-color)',\n };\n } else {\n return {\n totalEnergy: 'var(--instrument-frame-primary-color)',\n windEnergy: 'var(--instrument-frame-secondary-color)',\n speed: 'var(--instrument-frame-secondary-color)',\n };\n }\n }\n\n private renderPlotLines(): SVGTemplateResult {\n const innerRadius = 65 / 2;\n\n const dataPoints = this.dataPoints;\n const maxLength = Math.max(\n ...dataPoints.map(\n (dp) => dp.ratioWindEnergyOrExcessSpeed * dp.ratioTotalEnergy\n ),\n ...dataPoints.map((dp) => dp.ratioTotalEnergy)\n );\n\n const elements = dataPoints.map((dp) => {\n const startAngle = (dp.startAngleDeg * Math.PI) / 180 - Math.PI / 2;\n const endAngle = (dp.endAngleDeg * Math.PI) / 180 - Math.PI / 2;\n\n const c = this.color(dp);\n\n const totalEnergyRadius =\n (100 - innerRadius) * (dp.ratioTotalEnergy / maxLength) + innerRadius;\n const windEnergyOrExcessSpeedRadius =\n (totalEnergyRadius - innerRadius) * dp.ratioWindEnergyOrExcessSpeed +\n innerRadius;\n\n const innerArchPath = `M ${Math.cos(endAngle) * innerRadius} ${Math.sin(endAngle) * innerRadius} A ${innerRadius} ${innerRadius} 0 0 0 ${Math.cos(startAngle) * innerRadius} ${Math.sin(startAngle) * innerRadius}`;\n\n const totalEnergyArchPath = `${Math.cos(startAngle) * totalEnergyRadius} ${Math.sin(startAngle) * totalEnergyRadius} A ${totalEnergyRadius} ${totalEnergyRadius} 0 0 1 ${Math.cos(endAngle) * totalEnergyRadius} ${Math.sin(endAngle) * totalEnergyRadius}`;\n\n const windEnergyOrExcessSpeedArchPath = `${Math.cos(startAngle) * windEnergyOrExcessSpeedRadius} ${Math.sin(startAngle) * windEnergyOrExcessSpeedRadius} A ${windEnergyOrExcessSpeedRadius} ${windEnergyOrExcessSpeedRadius} 1 0 1 ${Math.cos(endAngle) * windEnergyOrExcessSpeedRadius} ${Math.sin(endAngle) * windEnergyOrExcessSpeedRadius}`;\n\n const windEnergyOrExcessSpeedArchPathReverse = `${Math.cos(endAngle) * windEnergyOrExcessSpeedRadius} ${Math.sin(endAngle) * windEnergyOrExcessSpeedRadius} A ${windEnergyOrExcessSpeedRadius} ${windEnergyOrExcessSpeedRadius} 1 0 0 ${Math.cos(startAngle) * windEnergyOrExcessSpeedRadius} ${Math.sin(startAngle) * windEnergyOrExcessSpeedRadius}`;\n const windEnergyPie = svg`<path d=\"${innerArchPath} L ${windEnergyOrExcessSpeedArchPath} Z\" fill=${c.windEnergy} stroke=${c.windEnergy} stroke-width=\"1\" />`;\n const windEnergyArch = svg`<path d=\"M${windEnergyOrExcessSpeedArchPath}\" fill=\"none\" stroke=${c.windEnergy} stroke-width=\"1\" />`;\n const totalEnergyArch = svg`\n <path d=\"M${totalEnergyArchPath}\" fill=\"none\" stroke=\"var(--border-silhouette-color)\" stroke-width=\"2\" />\n <path d=\"M${totalEnergyArchPath}\" fill=\"none\" stroke=\"var(--element-inactive-color)\" stroke-width=\"1\" />\n `;\n\n const totalEneryPie = svg`<path d=\"${innerArchPath} L ${totalEnergyArchPath} Z\" fill=${c.totalEnergy}/>`;\n\n const speedPie =\n dp.ratioWindEnergyOrExcessSpeed > 1\n ? svg`<path d=\"M${totalEnergyArchPath} L ${windEnergyOrExcessSpeedArchPathReverse} Z\" fill=${c.speed}/>`\n : nothing;\n\n const maxRadius =\n Math.max(totalEnergyRadius, windEnergyOrExcessSpeedRadius) + 0.5;\n const minRadius = innerRadius - 0.5;\n const startLine = svg`<line x1=\"${Math.cos(startAngle) * minRadius}\" y1=\"${Math.sin(startAngle) * minRadius}\" x2=\"${Math.cos(startAngle) * maxRadius}\" y2=\"${Math.sin(startAngle) * maxRadius}\" stroke=\"var(--border-silhouette-color)\" stroke-width=\"1\" />`;\n const endLine = svg`<line x1=\"${Math.cos(endAngle) * minRadius}\" y1=\"${Math.sin(endAngle) * minRadius}\" x2=\"${Math.cos(endAngle) * maxRadius}\" y2=\"${Math.sin(endAngle) * maxRadius}\" stroke=\"var(--border-silhouette-color)\" stroke-width=\"1\" />`;\n return svg`<g>\n ${totalEneryPie}\n ${windEnergyPie}\n ${speedPie}\n ${totalEnergyArch}\n ${windEnergyArch}\n ${startLine}\n ${endLine}\n </g>`;\n });\n\n return svg`<g>\n ${elements}\n </g>`;\n }\n\n static override styles = unsafeCSS(compentStyle);\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'obc-velocity-projection-plot': ObcVelocityProjectionPlot;\n }\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"velocity-projection-plot.js","sources":["../../../src/navigation-instruments/velocity-projection-plot/velocity-projection-plot.ts"],"sourcesContent":["import {\n LitElement,\n SVGTemplateResult,\n html,\n nothing,\n svg,\n unsafeCSS,\n} from 'lit';\nimport {property} from 'lit/decorators.js';\nimport compentStyle from './velocity-projection-plot.css?inline';\nimport '../watch/watch.js';\nimport {VesselImage, VesselImageSize} from '../watch/watch.js';\nimport {customElement} from '../../decorator.js';\n\nexport interface VelocityProjectionDatapoint {\n startAngleDeg: number;\n endAngleDeg: number;\n ratioWindEnergyOrExcessSpeed: number; // If the ratio is below 1, the value is the ratio of wind energy, if it is above 1, the value is the ratio of excess speed\n ratioTotalEnergy: number;\n}\n\n@customElement('obc-velocity-projection-plot')\nexport class ObcVelocityProjectionPlot extends LitElement {\n @property({type: Array, attribute: false})\n dataPoints: VelocityProjectionDatapoint[] = [];\n @property({type: Number})\n instantWindDirectionDeg: number | null = null;\n @property({type: Number})\n instantWindSpeedNumber: number | null = null;\n @property({type: Number})\n instantCurrentDirectionDeg: number | null = null;\n @property({type: Number})\n instantCurrentSpeedNumber: number | null = null;\n @property({type: String})\n vesselImage: VesselImage = VesselImage.cargoWindTop;\n override render() {\n const width = 320;\n const viewBox = `-${width / 2} -${width / 2} ${width} ${width}`;\n\n return html`\n <div class=\"container\">\n <obc-watch\n crosshairEnabled\n northArrow\n .vessels=${[\n {\n size: VesselImageSize.small,\n vesselImage: this.vesselImage,\n transform: '',\n },\n ]}\n .windFromDirectionDeg=${this.instantWindDirectionDeg}\n .wind=${this.instantWindSpeedNumber}\n .currentFromDirectionDeg=${this.instantCurrentDirectionDeg}\n .current=${this.instantCurrentSpeedNumber}\n .padding=${70}\n >\n </obc-watch>\n <svg viewBox=\"${viewBox}\">${this.renderPlotLines()}</svg>\n </div>\n `;\n }\n\n private isSelected(dp: VelocityProjectionDatapoint): boolean {\n if (this.instantWindDirectionDeg != null) {\n return (\n dp.startAngleDeg <= this.instantWindDirectionDeg &&\n dp.endAngleDeg >= this.instantWindDirectionDeg\n );\n }\n return true;\n }\n private color(dp: VelocityProjectionDatapoint): {\n totalEnergy: string;\n windEnergy: string;\n speed: string;\n } {\n if (this.isSelected(dp)) {\n return {\n totalEnergy: 'var(--instrument-frame-tertiary-color)',\n windEnergy: 'var(--instrument-enhanced-tertiary-color)',\n speed: 'var(--instrument-enhanced-secondary-color)',\n };\n } else {\n return {\n totalEnergy: 'var(--instrument-frame-primary-color)',\n windEnergy: 'var(--instrument-frame-secondary-color)',\n speed: 'var(--instrument-frame-secondary-color)',\n };\n }\n }\n\n private renderPlotLines(): SVGTemplateResult {\n const innerRadius = 65 / 2;\n\n const dataPoints = this.dataPoints;\n const maxLength = Math.max(\n ...dataPoints.map(\n (dp) => dp.ratioWindEnergyOrExcessSpeed * dp.ratioTotalEnergy\n ),\n ...dataPoints.map((dp) => dp.ratioTotalEnergy)\n );\n\n const elements = dataPoints.map((dp) => {\n const startAngle = (dp.startAngleDeg * Math.PI) / 180 - Math.PI / 2;\n const endAngle = (dp.endAngleDeg * Math.PI) / 180 - Math.PI / 2;\n\n const c = this.color(dp);\n\n const totalEnergyRadius =\n (100 - innerRadius) * (dp.ratioTotalEnergy / maxLength) + innerRadius;\n const windEnergyOrExcessSpeedRadius =\n (totalEnergyRadius - innerRadius) * dp.ratioWindEnergyOrExcessSpeed +\n innerRadius;\n\n const innerArchPath = `M ${Math.cos(endAngle) * innerRadius} ${Math.sin(endAngle) * innerRadius} A ${innerRadius} ${innerRadius} 0 0 0 ${Math.cos(startAngle) * innerRadius} ${Math.sin(startAngle) * innerRadius}`;\n\n const totalEnergyArchPath = `${Math.cos(startAngle) * totalEnergyRadius} ${Math.sin(startAngle) * totalEnergyRadius} A ${totalEnergyRadius} ${totalEnergyRadius} 0 0 1 ${Math.cos(endAngle) * totalEnergyRadius} ${Math.sin(endAngle) * totalEnergyRadius}`;\n\n const windEnergyOrExcessSpeedArchPath = `${Math.cos(startAngle) * windEnergyOrExcessSpeedRadius} ${Math.sin(startAngle) * windEnergyOrExcessSpeedRadius} A ${windEnergyOrExcessSpeedRadius} ${windEnergyOrExcessSpeedRadius} 1 0 1 ${Math.cos(endAngle) * windEnergyOrExcessSpeedRadius} ${Math.sin(endAngle) * windEnergyOrExcessSpeedRadius}`;\n\n const windEnergyOrExcessSpeedArchPathReverse = `${Math.cos(endAngle) * windEnergyOrExcessSpeedRadius} ${Math.sin(endAngle) * windEnergyOrExcessSpeedRadius} A ${windEnergyOrExcessSpeedRadius} ${windEnergyOrExcessSpeedRadius} 1 0 0 ${Math.cos(startAngle) * windEnergyOrExcessSpeedRadius} ${Math.sin(startAngle) * windEnergyOrExcessSpeedRadius}`;\n const windEnergyPie = svg`<path d=\"${innerArchPath} L ${windEnergyOrExcessSpeedArchPath} Z\" fill=${c.windEnergy} stroke=${c.windEnergy} stroke-width=\"1\" />`;\n const windEnergyArch = svg`<path d=\"M${windEnergyOrExcessSpeedArchPath}\" fill=\"none\" stroke=${c.windEnergy} stroke-width=\"1\" />`;\n const totalEnergyArch = svg`\n <path d=\"M${totalEnergyArchPath}\" fill=\"none\" stroke=\"var(--border-silhouette-color)\" stroke-width=\"2\" />\n <path d=\"M${totalEnergyArchPath}\" fill=\"none\" stroke=\"var(--element-inactive-color)\" stroke-width=\"1\" />\n `;\n\n const totalEneryPie = svg`<path d=\"${innerArchPath} L ${totalEnergyArchPath} Z\" fill=${c.totalEnergy}/>`;\n\n const speedPie =\n dp.ratioWindEnergyOrExcessSpeed > 1\n ? svg`<path d=\"M${totalEnergyArchPath} L ${windEnergyOrExcessSpeedArchPathReverse} Z\" fill=${c.speed}/>`\n : nothing;\n\n const maxRadius =\n Math.max(totalEnergyRadius, windEnergyOrExcessSpeedRadius) + 0.5;\n const minRadius = innerRadius - 0.5;\n const startLine = svg`<line x1=\"${Math.cos(startAngle) * minRadius}\" y1=\"${Math.sin(startAngle) * minRadius}\" x2=\"${Math.cos(startAngle) * maxRadius}\" y2=\"${Math.sin(startAngle) * maxRadius}\" stroke=\"var(--border-silhouette-color)\" stroke-width=\"1\" />`;\n const endLine = svg`<line x1=\"${Math.cos(endAngle) * minRadius}\" y1=\"${Math.sin(endAngle) * minRadius}\" x2=\"${Math.cos(endAngle) * maxRadius}\" y2=\"${Math.sin(endAngle) * maxRadius}\" stroke=\"var(--border-silhouette-color)\" stroke-width=\"1\" />`;\n return svg`<g>\n ${totalEneryPie}\n ${windEnergyPie}\n ${speedPie}\n ${totalEnergyArch}\n ${windEnergyArch}\n ${startLine}\n ${endLine}\n </g>`;\n });\n\n return svg`<g>\n ${elements}\n </g>`;\n }\n\n static override styles = unsafeCSS(compentStyle);\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'obc-velocity-projection-plot': ObcVelocityProjectionPlot;\n }\n}\n"],"names":[],"mappings":"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"}
@@ -37,6 +37,9 @@ export declare enum VesselImage {
37
37
  droneSmallFront = "drone-small-front",
38
38
  droneSmallStbdSide = "drone-small-stbd-side",
39
39
  droneSmallTop = "drone-small-top",
40
+ droneGenericFront = "drone-generic-front",
41
+ droneGenericSide = "drone-generic-side",
42
+ droneGenericTop = "drone-generic-top",
40
43
  rovFront = "rov-front",
41
44
  rovSide = "rov-side",
42
45
  rovTop = "rov-top"
@@ -1 +1 @@
1
- {"version":3,"file":"vessel.d.ts","sourceRoot":"","sources":["../../../src/navigation-instruments/watch/vessel.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,iBAAiB,EAAC,MAAM,KAAK,CAAC;AAsCtC,oBAAY,eAAe;IACzB,IAAI,SAAS;IACb,KAAK,UAAU;IACf,MAAM,WAAW;IACjB,KAAK,UAAU;CAChB;AAED,oBAAY,WAAW;IACrB,WAAW,kBAAkB;IAC7B,YAAY,mBAAmB;IAC/B,WAAW,kBAAkB;IAC7B,SAAS,eAAe;IACxB,SAAS,eAAe;IACxB,QAAQ,cAAc;IACtB,aAAa,oBAAoB;IACjC,aAAa,oBAAoB;IACjC,YAAY,mBAAmB;IAC/B,iBAAiB,wBAAwB;IACzC,gBAAgB,uBAAuB;IACvC,QAAQ,cAAc;IACtB,WAAW,iBAAiB;IAC5B,UAAU,gBAAgB;IAC1B,MAAM,YAAY;IAClB,OAAO,aAAa;IACpB,OAAO,aAAa;IACpB,MAAM,YAAY;IAClB,OAAO,aAAa;IACpB,MAAM,YAAY;IAClB,UAAU,gBAAgB;IAC1B,UAAU,gBAAgB;IAC1B,SAAS,eAAe;IACxB,YAAY,mBAAmB;IAC/B,YAAY,mBAAmB;IAC/B,gBAAgB,uBAAuB;IACvC,mBAAmB,2BAA2B;IAC9C,cAAc,qBAAqB;IACnC,eAAe,sBAAsB;IACrC,kBAAkB,0BAA0B;IAC5C,aAAa,oBAAoB;IACjC,QAAQ,cAAc;IACtB,OAAO,aAAa;IACpB,MAAM,YAAY;CACnB;AAGD,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,WAAW,EAAE,iBAAiB,CAmC/D,CAAC"}
1
+ {"version":3,"file":"vessel.d.ts","sourceRoot":"","sources":["../../../src/navigation-instruments/watch/vessel.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,iBAAiB,EAAC,MAAM,KAAK,CAAC;AAyCtC,oBAAY,eAAe;IACzB,IAAI,SAAS;IACb,KAAK,UAAU;IACf,MAAM,WAAW;IACjB,KAAK,UAAU;CAChB;AAED,oBAAY,WAAW;IACrB,WAAW,kBAAkB;IAC7B,YAAY,mBAAmB;IAC/B,WAAW,kBAAkB;IAC7B,SAAS,eAAe;IACxB,SAAS,eAAe;IACxB,QAAQ,cAAc;IACtB,aAAa,oBAAoB;IACjC,aAAa,oBAAoB;IACjC,YAAY,mBAAmB;IAC/B,iBAAiB,wBAAwB;IACzC,gBAAgB,uBAAuB;IACvC,QAAQ,cAAc;IACtB,WAAW,iBAAiB;IAC5B,UAAU,gBAAgB;IAC1B,MAAM,YAAY;IAClB,OAAO,aAAa;IACpB,OAAO,aAAa;IACpB,MAAM,YAAY;IAClB,OAAO,aAAa;IACpB,MAAM,YAAY;IAClB,UAAU,gBAAgB;IAC1B,UAAU,gBAAgB;IAC1B,SAAS,eAAe;IACxB,YAAY,mBAAmB;IAC/B,YAAY,mBAAmB;IAC/B,gBAAgB,uBAAuB;IACvC,mBAAmB,2BAA2B;IAC9C,cAAc,qBAAqB;IACnC,eAAe,sBAAsB;IACrC,kBAAkB,0BAA0B;IAC5C,aAAa,oBAAoB;IACjC,iBAAiB,wBAAwB;IACzC,gBAAgB,uBAAuB;IACvC,eAAe,sBAAsB;IACrC,QAAQ,cAAc;IACtB,OAAO,aAAa;IACpB,MAAM,YAAY;CACnB;AAGD,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,WAAW,EAAE,iBAAiB,CAsC/D,CAAC"}
@@ -29,6 +29,9 @@ import droneMediumTop from "./vessels/drone-medium-top.js";
29
29
  import droneSmallFront from "./vessels/drone-small-front.js";
30
30
  import droneSmallStbdSide from "./vessels/drone-small-stbd-side.js";
31
31
  import droneSmallTop from "./vessels/drone-small-top.js";
32
+ import droneGenericFront from "./vessels/drone-generic-front.js";
33
+ import droneGenericSide from "./vessels/drone-generic-side.js";
34
+ import droneGenericTop from "./vessels/drone-generic-top.js";
32
35
  import rovFront from "./vessels/rov-front.js";
33
36
  import rovSide from "./vessels/rov-side.js";
34
37
  import rovTop from "./vessels/rov-top.js";
@@ -71,6 +74,9 @@ var VesselImage = /* @__PURE__ */ ((VesselImage2) => {
71
74
  VesselImage2["droneSmallFront"] = "drone-small-front";
72
75
  VesselImage2["droneSmallStbdSide"] = "drone-small-stbd-side";
73
76
  VesselImage2["droneSmallTop"] = "drone-small-top";
77
+ VesselImage2["droneGenericFront"] = "drone-generic-front";
78
+ VesselImage2["droneGenericSide"] = "drone-generic-side";
79
+ VesselImage2["droneGenericTop"] = "drone-generic-top";
74
80
  VesselImage2["rovFront"] = "rov-front";
75
81
  VesselImage2["rovSide"] = "rov-side";
76
82
  VesselImage2["rovTop"] = "rov-top";
@@ -201,6 +207,18 @@ const vesselImages = {
201
207
  "drone-small-top"
202
208
  /* droneSmallTop */
203
209
  ]: droneSmallTop,
210
+ [
211
+ "drone-generic-front"
212
+ /* droneGenericFront */
213
+ ]: droneGenericFront,
214
+ [
215
+ "drone-generic-side"
216
+ /* droneGenericSide */
217
+ ]: droneGenericSide,
218
+ [
219
+ "drone-generic-top"
220
+ /* droneGenericTop */
221
+ ]: droneGenericTop,
204
222
  [
205
223
  "rov-front"
206
224
  /* rovFront */
@@ -1 +1 @@
1
- {"version":3,"file":"vessel.js","sources":["../../../src/navigation-instruments/watch/vessel.ts"],"sourcesContent":["import {SVGTemplateResult} from 'lit';\n\n// Import all vessel images statically\nimport * as carFerryAft from './vessels/car-ferry-aft.js';\nimport * as carFerrySide from './vessels/car-ferry-side.js';\nimport * as carFerryTop from './vessels/car-ferry-top.js';\nimport * as cargoFore from './vessels/cargo-fore.js';\nimport * as cargoSide from './vessels/cargo-side.js';\nimport * as cargoTop from './vessels/cargo-top.js';\nimport * as cargoWindFore from './vessels/cargo-wind-fore.js';\nimport * as cargoWindSide from './vessels/cargo-wind-side.js';\nimport * as cargoWindTop from './vessels/cargo-wind-top.js';\nimport * as fishingVesselSide from './vessels/fishing-vessel-side.js';\nimport * as fishingVesselTop from './vessels/fishing-vessel-top.js';\nimport * as foreFore from './vessels/fore-fore.js';\nimport * as genericSide from './vessels/generic-side.js';\nimport * as genericTop from './vessels/generic-top.js';\nimport * as psvAft from './vessels/psv-aft.js';\nimport * as psvFore from './vessels/psv-fore.js';\nimport * as psvSide from './vessels/psv-side.js';\nimport * as psvTop from './vessels/psv-top.js';\nimport * as sovSide from './vessels/sov-side.js';\nimport * as sovTop from './vessels/sov-top.js';\nimport * as tankerFore from './vessels/tanker-fore.js';\nimport * as tankerSide from './vessels/tanker-side.js';\nimport * as tankerTop from './vessels/tanker-top.js';\nimport * as usvLargeSide from './vessels/usv-large-side.js';\nimport * as usvSmallSide from './vessels/usv-small-side.js';\nimport * as droneMediumFront from './vessels/drone-medium-front.js';\nimport * as droneMediumStbdSide from './vessels/drone-medium-stbd-side.js';\nimport * as droneMediumTop from './vessels/drone-medium-top.js';\nimport * as droneSmallFront from './vessels/drone-small-front.js';\nimport * as droneSmallStbdSide from './vessels/drone-small-stbd-side.js';\nimport * as droneSmallTop from './vessels/drone-small-top.js';\nimport * as rovFront from './vessels/rov-front.js';\nimport * as rovSide from './vessels/rov-side.js';\nimport * as rovTop from './vessels/rov-top.js';\n\nexport enum VesselImageSize {\n none = 'none',\n small = 'small',\n medium = 'medium',\n large = 'large',\n}\n\nexport enum VesselImage {\n carFerryAft = 'car-ferry-aft',\n carFerrySide = 'car-ferry-side',\n carFerryTop = 'car-ferry-top',\n cargoFore = 'cargo-fore',\n cargoSide = 'cargo-side',\n cargoTop = 'cargo-top',\n cargoWindFore = 'cargo-wind-fore',\n cargoWindSide = 'cargo-wind-side',\n cargoWindTop = 'cargo-wind-top',\n fishingVesselSide = 'fishing-vessel-side',\n fishingVesselTop = 'fishing-vessel-top',\n foreFore = 'fore-fore',\n genericSide = 'generic-side',\n genericTop = 'generic-top',\n psvAft = 'psv-aft',\n psvFore = 'psv-fore',\n psvSide = 'psv-side',\n psvTop = 'psv-top',\n sovSide = 'sov-side',\n sovTop = 'sov-top',\n tankerFore = 'tanker-fore',\n tankerSide = 'tanker-side',\n tankerTop = 'tanker-top',\n usvLargeSide = 'usv-large-side',\n usvSmallSide = 'usv-small-side',\n droneMediumFront = 'drone-medium-front',\n droneMediumStbdSide = 'drone-medium-stbd-side',\n droneMediumTop = 'drone-medium-top',\n droneSmallFront = 'drone-small-front',\n droneSmallStbdSide = 'drone-small-stbd-side',\n droneSmallTop = 'drone-small-top',\n rovFront = 'rov-front',\n rovSide = 'rov-side',\n rovTop = 'rov-top',\n}\n\n// Map of vessel images\nexport const vesselImages: Record<VesselImage, SVGTemplateResult> = {\n [VesselImage.carFerryAft]: carFerryAft.default,\n [VesselImage.carFerrySide]: carFerrySide.default,\n [VesselImage.carFerryTop]: carFerryTop.default,\n [VesselImage.cargoFore]: cargoFore.default,\n [VesselImage.cargoSide]: cargoSide.default,\n [VesselImage.cargoTop]: cargoTop.default,\n [VesselImage.cargoWindFore]: cargoWindFore.default,\n [VesselImage.cargoWindSide]: cargoWindSide.default,\n [VesselImage.cargoWindTop]: cargoWindTop.default,\n [VesselImage.fishingVesselSide]: fishingVesselSide.default,\n [VesselImage.fishingVesselTop]: fishingVesselTop.default,\n [VesselImage.foreFore]: foreFore.default,\n [VesselImage.genericSide]: genericSide.default,\n [VesselImage.genericTop]: genericTop.default,\n [VesselImage.psvAft]: psvAft.default,\n [VesselImage.psvFore]: psvFore.default,\n [VesselImage.psvSide]: psvSide.default,\n [VesselImage.psvTop]: psvTop.default,\n [VesselImage.sovSide]: sovSide.default,\n [VesselImage.sovTop]: sovTop.default,\n [VesselImage.tankerFore]: tankerFore.default,\n [VesselImage.tankerSide]: tankerSide.default,\n [VesselImage.tankerTop]: tankerTop.default,\n [VesselImage.usvLargeSide]: usvLargeSide.default,\n [VesselImage.usvSmallSide]: usvSmallSide.default,\n [VesselImage.droneMediumFront]: droneMediumFront.default,\n [VesselImage.droneMediumStbdSide]: droneMediumStbdSide.default,\n [VesselImage.droneMediumTop]: droneMediumTop.default,\n [VesselImage.droneSmallFront]: droneSmallFront.default,\n [VesselImage.droneSmallStbdSide]: droneSmallStbdSide.default,\n [VesselImage.droneSmallTop]: droneSmallTop.default,\n [VesselImage.rovFront]: rovFront.default,\n [VesselImage.rovSide]: rovSide.default,\n [VesselImage.rovTop]: rovTop.default,\n};\n"],"names":["VesselImageSize","VesselImage","carFerryAft.default","carFerrySide.default","carFerryTop.default","cargoFore.default","cargoSide.default","cargoTop.default","cargoWindFore.default","cargoWindSide.default","cargoWindTop.default","fishingVesselSide.default","fishingVesselTop.default","foreFore.default","genericSide.default","genericTop.default","psvAft.default","psvFore.default","psvSide.default","psvTop.default","sovSide.default","sovTop.default","tankerFore.default","tankerSide.default","tankerTop.default","usvLargeSide.default","usvSmallSide.default","droneMediumFront.default","droneMediumStbdSide.default","droneMediumTop.default","droneSmallFront.default","droneSmallStbdSide.default","droneSmallTop.default","rovFront.default","rovSide.default","rovTop.default"],"mappings":"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"}
1
+ {"version":3,"file":"vessel.js","sources":["../../../src/navigation-instruments/watch/vessel.ts"],"sourcesContent":["import {SVGTemplateResult} from 'lit';\n\n// Import all vessel images statically\nimport * as carFerryAft from './vessels/car-ferry-aft.js';\nimport * as carFerrySide from './vessels/car-ferry-side.js';\nimport * as carFerryTop from './vessels/car-ferry-top.js';\nimport * as cargoFore from './vessels/cargo-fore.js';\nimport * as cargoSide from './vessels/cargo-side.js';\nimport * as cargoTop from './vessels/cargo-top.js';\nimport * as cargoWindFore from './vessels/cargo-wind-fore.js';\nimport * as cargoWindSide from './vessels/cargo-wind-side.js';\nimport * as cargoWindTop from './vessels/cargo-wind-top.js';\nimport * as fishingVesselSide from './vessels/fishing-vessel-side.js';\nimport * as fishingVesselTop from './vessels/fishing-vessel-top.js';\nimport * as foreFore from './vessels/fore-fore.js';\nimport * as genericSide from './vessels/generic-side.js';\nimport * as genericTop from './vessels/generic-top.js';\nimport * as psvAft from './vessels/psv-aft.js';\nimport * as psvFore from './vessels/psv-fore.js';\nimport * as psvSide from './vessels/psv-side.js';\nimport * as psvTop from './vessels/psv-top.js';\nimport * as sovSide from './vessels/sov-side.js';\nimport * as sovTop from './vessels/sov-top.js';\nimport * as tankerFore from './vessels/tanker-fore.js';\nimport * as tankerSide from './vessels/tanker-side.js';\nimport * as tankerTop from './vessels/tanker-top.js';\nimport * as usvLargeSide from './vessels/usv-large-side.js';\nimport * as usvSmallSide from './vessels/usv-small-side.js';\nimport * as droneMediumFront from './vessels/drone-medium-front.js';\nimport * as droneMediumStbdSide from './vessels/drone-medium-stbd-side.js';\nimport * as droneMediumTop from './vessels/drone-medium-top.js';\nimport * as droneSmallFront from './vessels/drone-small-front.js';\nimport * as droneSmallStbdSide from './vessels/drone-small-stbd-side.js';\nimport * as droneSmallTop from './vessels/drone-small-top.js';\nimport * as droneGenericFront from './vessels/drone-generic-front.js';\nimport * as droneGenericSide from './vessels/drone-generic-side.js';\nimport * as droneGenericTop from './vessels/drone-generic-top.js';\nimport * as rovFront from './vessels/rov-front.js';\nimport * as rovSide from './vessels/rov-side.js';\nimport * as rovTop from './vessels/rov-top.js';\n\nexport enum VesselImageSize {\n none = 'none',\n small = 'small',\n medium = 'medium',\n large = 'large',\n}\n\nexport enum VesselImage {\n carFerryAft = 'car-ferry-aft',\n carFerrySide = 'car-ferry-side',\n carFerryTop = 'car-ferry-top',\n cargoFore = 'cargo-fore',\n cargoSide = 'cargo-side',\n cargoTop = 'cargo-top',\n cargoWindFore = 'cargo-wind-fore',\n cargoWindSide = 'cargo-wind-side',\n cargoWindTop = 'cargo-wind-top',\n fishingVesselSide = 'fishing-vessel-side',\n fishingVesselTop = 'fishing-vessel-top',\n foreFore = 'fore-fore',\n genericSide = 'generic-side',\n genericTop = 'generic-top',\n psvAft = 'psv-aft',\n psvFore = 'psv-fore',\n psvSide = 'psv-side',\n psvTop = 'psv-top',\n sovSide = 'sov-side',\n sovTop = 'sov-top',\n tankerFore = 'tanker-fore',\n tankerSide = 'tanker-side',\n tankerTop = 'tanker-top',\n usvLargeSide = 'usv-large-side',\n usvSmallSide = 'usv-small-side',\n droneMediumFront = 'drone-medium-front',\n droneMediumStbdSide = 'drone-medium-stbd-side',\n droneMediumTop = 'drone-medium-top',\n droneSmallFront = 'drone-small-front',\n droneSmallStbdSide = 'drone-small-stbd-side',\n droneSmallTop = 'drone-small-top',\n droneGenericFront = 'drone-generic-front',\n droneGenericSide = 'drone-generic-side',\n droneGenericTop = 'drone-generic-top',\n rovFront = 'rov-front',\n rovSide = 'rov-side',\n rovTop = 'rov-top',\n}\n\n// Map of vessel images\nexport const vesselImages: Record<VesselImage, SVGTemplateResult> = {\n [VesselImage.carFerryAft]: carFerryAft.default,\n [VesselImage.carFerrySide]: carFerrySide.default,\n [VesselImage.carFerryTop]: carFerryTop.default,\n [VesselImage.cargoFore]: cargoFore.default,\n [VesselImage.cargoSide]: cargoSide.default,\n [VesselImage.cargoTop]: cargoTop.default,\n [VesselImage.cargoWindFore]: cargoWindFore.default,\n [VesselImage.cargoWindSide]: cargoWindSide.default,\n [VesselImage.cargoWindTop]: cargoWindTop.default,\n [VesselImage.fishingVesselSide]: fishingVesselSide.default,\n [VesselImage.fishingVesselTop]: fishingVesselTop.default,\n [VesselImage.foreFore]: foreFore.default,\n [VesselImage.genericSide]: genericSide.default,\n [VesselImage.genericTop]: genericTop.default,\n [VesselImage.psvAft]: psvAft.default,\n [VesselImage.psvFore]: psvFore.default,\n [VesselImage.psvSide]: psvSide.default,\n [VesselImage.psvTop]: psvTop.default,\n [VesselImage.sovSide]: sovSide.default,\n [VesselImage.sovTop]: sovTop.default,\n [VesselImage.tankerFore]: tankerFore.default,\n [VesselImage.tankerSide]: tankerSide.default,\n [VesselImage.tankerTop]: tankerTop.default,\n [VesselImage.usvLargeSide]: usvLargeSide.default,\n [VesselImage.usvSmallSide]: usvSmallSide.default,\n [VesselImage.droneMediumFront]: droneMediumFront.default,\n [VesselImage.droneMediumStbdSide]: droneMediumStbdSide.default,\n [VesselImage.droneMediumTop]: droneMediumTop.default,\n [VesselImage.droneSmallFront]: droneSmallFront.default,\n [VesselImage.droneSmallStbdSide]: droneSmallStbdSide.default,\n [VesselImage.droneSmallTop]: droneSmallTop.default,\n [VesselImage.droneGenericFront]: droneGenericFront.default,\n [VesselImage.droneGenericSide]: droneGenericSide.default,\n [VesselImage.droneGenericTop]: droneGenericTop.default,\n [VesselImage.rovFront]: rovFront.default,\n [VesselImage.rovSide]: rovSide.default,\n [VesselImage.rovTop]: rovTop.default,\n};\n"],"names":["VesselImageSize","VesselImage","carFerryAft.default","carFerrySide.default","carFerryTop.default","cargoFore.default","cargoSide.default","cargoTop.default","cargoWindFore.default","cargoWindSide.default","cargoWindTop.default","fishingVesselSide.default","fishingVesselTop.default","foreFore.default","genericSide.default","genericTop.default","psvAft.default","psvFore.default","psvSide.default","psvTop.default","sovSide.default","sovTop.default","tankerFore.default","tankerSide.default","tankerTop.default","usvLargeSide.default","usvSmallSide.default","droneMediumFront.default","droneMediumStbdSide.default","droneMediumTop.default","droneSmallFront.default","droneSmallStbdSide.default","droneSmallTop.default","droneGenericFront.default","droneGenericSide.default","droneGenericTop.default","rovFront.default","rovSide.default","rovTop.default"],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ declare const _default: import('lit-html').TemplateResult<2>;
2
+ export default _default;
3
+ //# sourceMappingURL=drone-generic-front.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"drone-generic-front.d.ts","sourceRoot":"","sources":["../../../../src/navigation-instruments/watch/vessels/drone-generic-front.ts"],"names":[],"mappings":";AAEA,wBAgBE"}
@@ -0,0 +1,22 @@
1
+ import { svg } from "lit";
2
+ const droneGenericFront = svg`<svg width="160" height="160" viewBox="0 0 160 160" fill="none" xmlns="http://www.w3.org/2000/svg">
3
+ <path d="M121.033 100.2L101 80H96L118.289 99.8667C118.741 100.27 119 100.846 119 101.452V102.835C119 103.478 119.522 104 120.165 104C120.809 104 121.33 103.478 121.33 102.835V100.922C121.33 100.652 121.223 100.392 121.033 100.2Z" fill="var(--instrument-tick-mark-secondary-color)"/>
4
+ <path d="M39.2975 100.2L59.3301 80H64.3301L42.0407 99.8667C41.5887 100.27 41.3301 100.846 41.3301 101.452V102.835C41.3301 103.478 40.8085 104 40.1651 104C39.5216 104 39 103.478 39 102.835V100.922C39 100.652 39.1069 100.392 39.2975 100.2Z" fill="var(--instrument-tick-mark-secondary-color)"/>
5
+ <path d="M121.033 100.2L101 80H96L118.289 99.8667C118.741 100.27 119 100.846 119 101.452V102.835C119 103.478 119.522 104 120.165 104C120.809 104 121.33 103.478 121.33 102.835V100.922C121.33 100.652 121.223 100.392 121.033 100.2Z" vector-effect="non-scaling-stroke" stroke="var(--instrument-tick-mark-secondary-color)"/>
6
+ <path d="M39.2975 100.2L59.3301 80H64.3301L42.0407 99.8667C41.5887 100.27 41.3301 100.846 41.3301 101.452V102.835C41.3301 103.478 40.8085 104 40.1651 104C39.5216 104 39 103.478 39 102.835V100.922C39 100.652 39.1069 100.392 39.2975 100.2Z" vector-effect="non-scaling-stroke" stroke="var(--instrument-tick-mark-secondary-color)"/>
7
+ <path d="M118 64H126V77.8755C126 79.2677 125.637 80.6358 124.946 81.8446L123.736 83.9611C122.969 85.3048 121.031 85.3048 120.264 83.9611L119.054 81.8446C118.363 80.6358 118 79.2677 118 77.8755V64Z" fill="var(--instrument-tick-mark-secondary-color)" vector-effect="non-scaling-stroke" stroke="var(--instrument-tick-mark-secondary-color)"/>
8
+ <path d="M34 64H42V77.8755C42 79.2677 41.6367 80.6358 40.9459 81.8446L39.7365 83.9611C38.9687 85.3048 37.0313 85.3048 36.2635 83.9611L35.0541 81.8446C34.3633 80.6358 34 79.2677 34 77.8755V64Z" fill="var(--instrument-tick-mark-secondary-color)" vector-effect="non-scaling-stroke" stroke="var(--instrument-tick-mark-secondary-color)"/>
9
+ <path d="M134 75.1317V73H120H98L90 79.9999L132.136 77.127C133.185 77.0555 134 76.1834 134 75.1317Z" fill="var(--instrument-frame-primary-color)" vector-effect="non-scaling-stroke" stroke="var(--instrument-tick-mark-secondary-color)"/>
10
+ <path d="M26 75.1346V73H40H62L69 79.9999L27.8608 77.1298C26.8128 77.0567 26 76.1852 26 75.1346Z" fill="var(--instrument-frame-primary-color)" vector-effect="non-scaling-stroke" stroke="var(--instrument-tick-mark-secondary-color)"/>
11
+ <path d="M93.039 84.5757L97.8895 73.2577C97.9624 73.0877 98 72.9046 98 72.7196V70.8904C98 69.6891 97.4814 68.5462 96.5773 67.7552C92.3372 64.045 86.8945 62 81.2603 62H78.8149C73.1357 62 67.653 64.0794 63.4022 67.8456C62.5105 68.6356 62 69.7699 62 70.9613V73L66.961 84.5757C67.5913 86.0464 69.0375 87 70.6376 87H89.3624C90.9625 87 92.4087 86.0464 93.039 84.5757Z" fill="var(--instrument-frame-primary-color)" vector-effect="non-scaling-stroke" stroke="var(--instrument-tick-mark-secondary-color)"/>
12
+ <rect x="12.5" y="57.5" width="51" height="7" rx="1.5" fill="var(--instrument-frame-primary-color)" vector-effect="non-scaling-stroke" stroke="var(--instrument-tick-mark-secondary-color)"/>
13
+ <rect x="96.5" y="57.5" width="51" height="7" rx="1.5" fill="var(--instrument-frame-primary-color)" vector-effect="non-scaling-stroke" stroke="var(--instrument-tick-mark-secondary-color)"/>
14
+ <ellipse cx="80" cy="79" rx="6" ry="6" transform="rotate(90 80 79)" fill="var(--instrument-frame-primary-color)" vector-effect="non-scaling-stroke" stroke="var(--instrument-tick-mark-secondary-color)"/>
15
+ <ellipse cx="80" cy="79" rx="4" ry="4" transform="rotate(90 80 79)" fill="var(--instrument-tick-mark-secondary-color)" vector-effect="non-scaling-stroke" stroke="var(--instrument-tick-mark-secondary-color)"/>
16
+ <ellipse cx="81" cy="78" rx="2" ry="2" transform="rotate(90 81 78)" fill="var(--instrument-frame-primary-color)" vector-effect="non-scaling-stroke" stroke="var(--instrument-tick-mark-secondary-color)"/>
17
+ </svg>
18
+ `;
19
+ export {
20
+ droneGenericFront as default
21
+ };
22
+ //# sourceMappingURL=drone-generic-front.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"drone-generic-front.js","sources":["../../../../src/navigation-instruments/watch/vessels/drone-generic-front.ts"],"sourcesContent":["import {svg} from 'lit';\n\nexport default svg`<svg width=\"160\" height=\"160\" viewBox=\"0 0 160 160\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M121.033 100.2L101 80H96L118.289 99.8667C118.741 100.27 119 100.846 119 101.452V102.835C119 103.478 119.522 104 120.165 104C120.809 104 121.33 103.478 121.33 102.835V100.922C121.33 100.652 121.223 100.392 121.033 100.2Z\" fill=\"var(--instrument-tick-mark-secondary-color)\"/>\n<path d=\"M39.2975 100.2L59.3301 80H64.3301L42.0407 99.8667C41.5887 100.27 41.3301 100.846 41.3301 101.452V102.835C41.3301 103.478 40.8085 104 40.1651 104C39.5216 104 39 103.478 39 102.835V100.922C39 100.652 39.1069 100.392 39.2975 100.2Z\" fill=\"var(--instrument-tick-mark-secondary-color)\"/>\n<path d=\"M121.033 100.2L101 80H96L118.289 99.8667C118.741 100.27 119 100.846 119 101.452V102.835C119 103.478 119.522 104 120.165 104C120.809 104 121.33 103.478 121.33 102.835V100.922C121.33 100.652 121.223 100.392 121.033 100.2Z\" vector-effect=\"non-scaling-stroke\" stroke=\"var(--instrument-tick-mark-secondary-color)\"/>\n<path d=\"M39.2975 100.2L59.3301 80H64.3301L42.0407 99.8667C41.5887 100.27 41.3301 100.846 41.3301 101.452V102.835C41.3301 103.478 40.8085 104 40.1651 104C39.5216 104 39 103.478 39 102.835V100.922C39 100.652 39.1069 100.392 39.2975 100.2Z\" vector-effect=\"non-scaling-stroke\" stroke=\"var(--instrument-tick-mark-secondary-color)\"/>\n<path d=\"M118 64H126V77.8755C126 79.2677 125.637 80.6358 124.946 81.8446L123.736 83.9611C122.969 85.3048 121.031 85.3048 120.264 83.9611L119.054 81.8446C118.363 80.6358 118 79.2677 118 77.8755V64Z\" fill=\"var(--instrument-tick-mark-secondary-color)\" vector-effect=\"non-scaling-stroke\" stroke=\"var(--instrument-tick-mark-secondary-color)\"/>\n<path d=\"M34 64H42V77.8755C42 79.2677 41.6367 80.6358 40.9459 81.8446L39.7365 83.9611C38.9687 85.3048 37.0313 85.3048 36.2635 83.9611L35.0541 81.8446C34.3633 80.6358 34 79.2677 34 77.8755V64Z\" fill=\"var(--instrument-tick-mark-secondary-color)\" vector-effect=\"non-scaling-stroke\" stroke=\"var(--instrument-tick-mark-secondary-color)\"/>\n<path d=\"M134 75.1317V73H120H98L90 79.9999L132.136 77.127C133.185 77.0555 134 76.1834 134 75.1317Z\" fill=\"var(--instrument-frame-primary-color)\" vector-effect=\"non-scaling-stroke\" stroke=\"var(--instrument-tick-mark-secondary-color)\"/>\n<path d=\"M26 75.1346V73H40H62L69 79.9999L27.8608 77.1298C26.8128 77.0567 26 76.1852 26 75.1346Z\" fill=\"var(--instrument-frame-primary-color)\" vector-effect=\"non-scaling-stroke\" stroke=\"var(--instrument-tick-mark-secondary-color)\"/>\n<path d=\"M93.039 84.5757L97.8895 73.2577C97.9624 73.0877 98 72.9046 98 72.7196V70.8904C98 69.6891 97.4814 68.5462 96.5773 67.7552C92.3372 64.045 86.8945 62 81.2603 62H78.8149C73.1357 62 67.653 64.0794 63.4022 67.8456C62.5105 68.6356 62 69.7699 62 70.9613V73L66.961 84.5757C67.5913 86.0464 69.0375 87 70.6376 87H89.3624C90.9625 87 92.4087 86.0464 93.039 84.5757Z\" fill=\"var(--instrument-frame-primary-color)\" vector-effect=\"non-scaling-stroke\" stroke=\"var(--instrument-tick-mark-secondary-color)\"/>\n<rect x=\"12.5\" y=\"57.5\" width=\"51\" height=\"7\" rx=\"1.5\" fill=\"var(--instrument-frame-primary-color)\" vector-effect=\"non-scaling-stroke\" stroke=\"var(--instrument-tick-mark-secondary-color)\"/>\n<rect x=\"96.5\" y=\"57.5\" width=\"51\" height=\"7\" rx=\"1.5\" fill=\"var(--instrument-frame-primary-color)\" vector-effect=\"non-scaling-stroke\" stroke=\"var(--instrument-tick-mark-secondary-color)\"/>\n<ellipse cx=\"80\" cy=\"79\" rx=\"6\" ry=\"6\" transform=\"rotate(90 80 79)\" fill=\"var(--instrument-frame-primary-color)\" vector-effect=\"non-scaling-stroke\" stroke=\"var(--instrument-tick-mark-secondary-color)\"/>\n<ellipse cx=\"80\" cy=\"79\" rx=\"4\" ry=\"4\" transform=\"rotate(90 80 79)\" fill=\"var(--instrument-tick-mark-secondary-color)\" vector-effect=\"non-scaling-stroke\" stroke=\"var(--instrument-tick-mark-secondary-color)\"/>\n<ellipse cx=\"81\" cy=\"78\" rx=\"2\" ry=\"2\" transform=\"rotate(90 81 78)\" fill=\"var(--instrument-frame-primary-color)\" vector-effect=\"non-scaling-stroke\" stroke=\"var(--instrument-tick-mark-secondary-color)\"/>\n</svg>\n`;\n"],"names":[],"mappings":";AAEA,MAAA,oBAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;"}
@@ -0,0 +1,3 @@
1
+ declare const _default: import('lit-html').TemplateResult<2>;
2
+ export default _default;
3
+ //# sourceMappingURL=drone-generic-side.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"drone-generic-side.d.ts","sourceRoot":"","sources":["../../../../src/navigation-instruments/watch/vessels/drone-generic-side.ts"],"names":[],"mappings":";AAEA,wBAgBE"}
@@ -0,0 +1,22 @@
1
+ import { svg } from "lit";
2
+ const droneGenericSide = svg`<svg width="160" height="160" viewBox="0 0 160 160" fill="none" xmlns="http://www.w3.org/2000/svg">
3
+ <path d="M131 75C133.209 75 135 76.7909 135 79C135 81.2091 133.209 83 131 83V75Z" fill="var(--instrument-tick-mark-secondary-color)"/>
4
+ <path d="M132 84V74C132 73.4477 131.552 73 131 73H89L98.7002 84.6402C98.8901 84.8682 99.1716 85 99.4684 85H131C131.552 85 132 84.5523 132 84Z" fill="var(--instrument-frame-primary-color)" vector-effect="non-scaling-stroke" stroke="var(--instrument-tick-mark-secondary-color)"/>
5
+ <path d="M129.736 73.4611L122.576 85.9923C122.22 86.6154 121.557 87 120.839 87H69.8301C69.2805 87 68.7346 86.9094 68.2144 86.7317L28 73V68.0879L29.1795 65.9233C30.0014 64.415 31.5399 63.4342 33.2542 63.3257L70 61H90L124.906 65.3632C125.627 65.4533 126.319 65.6995 126.935 66.0846L129.925 67.9534C129.972 67.9824 130 68.0332 130 68.0879V72.4689C130 72.8169 129.909 73.159 129.736 73.4611Z" fill="var(--instrument-frame-primary-color)"/>
6
+ <path d="M28 68.0879V73L68.2144 86.7317C68.7346 86.9094 69.2805 87 69.8301 87H120.839C121.557 87 122.22 86.6154 122.576 85.9923L129.736 73.4611C129.909 73.159 130 72.8169 130 72.4689V68.0879M28 68.0879L29.1795 65.9233C30.0014 64.415 31.5399 63.4342 33.2542 63.3257L70 61H90L124.906 65.3632C125.627 65.4533 126.319 65.6995 126.935 66.0846L129.925 67.9534C129.972 67.9824 130 68.0332 130 68.0879M28 68.0879H130" vector-effect="non-scaling-stroke" stroke="var(--instrument-tick-mark-secondary-color)"/>
7
+ <path d="M128.918 100.202L101 80H96L126.097 99.9027C126.661 100.276 127 100.907 127 101.583V102.835C127 103.478 127.522 104 128.165 104C128.809 104 129.33 103.478 129.33 102.835V101.009C129.33 100.689 129.177 100.389 128.918 100.202Z" fill="var(--instrument-tick-mark-secondary-color)"/>
8
+ <path d="M31.4125 100.202L58.3301 80H63.3301L34.2334 99.9027C33.6694 100.276 33.3301 100.907 33.3301 101.583V102.835C33.3301 103.478 32.8085 104 32.1651 104C31.5216 104 31 103.478 31 102.835V101.009C31 100.689 31.1534 100.389 31.4125 100.202Z" fill="var(--instrument-tick-mark-secondary-color)"/>
9
+ <path d="M128.918 100.202L101 80H96L126.097 99.9027C126.661 100.276 127 100.907 127 101.583V102.835C127 103.478 127.522 104 128.165 104C128.809 104 129.33 103.478 129.33 102.835V101.009C129.33 100.689 129.177 100.389 128.918 100.202Z" vector-effect="non-scaling-stroke" stroke="var(--instrument-tick-mark-secondary-color)"/>
10
+ <path d="M31.4125 100.202L58.3301 80H63.3301L34.2334 99.9027C33.6694 100.276 33.3301 100.907 33.3301 101.583V102.835C33.3301 103.478 32.8085 104 32.1651 104C31.5216 104 31 103.478 31 102.835V101.009C31 100.689 31.1534 100.389 31.4125 100.202Z" vector-effect="non-scaling-stroke" stroke="var(--instrument-tick-mark-secondary-color)"/>
11
+ <path d="M118 64H126V73.8755C126 75.2677 125.637 76.6358 124.946 77.8446L123.736 79.9611C122.969 81.3048 121.031 81.3048 120.264 79.9611L119.054 77.8446C118.363 76.6358 118 75.2677 118 73.8755V64Z" fill="var(--instrument-tick-mark-secondary-color)" vector-effect="non-scaling-stroke" stroke="var(--instrument-tick-mark-secondary-color)"/>
12
+ <path d="M34 64H42V73.8755C42 75.2677 41.6367 76.6358 40.9459 77.8446L39.7365 79.9611C38.9687 81.3048 37.0313 81.3048 36.2635 79.9611L35.0541 77.8446C34.3633 76.6358 34 75.2677 34 73.8755V64Z" fill="var(--instrument-tick-mark-secondary-color)" vector-effect="non-scaling-stroke" stroke="var(--instrument-tick-mark-secondary-color)"/>
13
+ <path d="M127 75.1735V74C127 73.4477 126.552 73 126 73H120H98.5803C98.2215 73 97.8901 73.1923 97.7121 73.5039L94.9519 78.3342C94.5507 79.0363 95.1053 79.8995 95.9106 79.8263L125.181 77.1653C126.211 77.0717 127 76.2079 127 75.1735Z" fill="var(--instrument-frame-primary-color)" vector-effect="non-scaling-stroke" stroke="var(--instrument-tick-mark-secondary-color)"/>
14
+ <path d="M32 75.1735V74C32 73.4477 32.4477 73 33 73H40H61.3406C61.7406 73 62.1022 73.2384 62.2598 73.6061L64.3393 78.4583C64.6376 79.1544 64.0839 79.9167 63.3296 79.8481L33.8189 77.1653C32.7888 77.0717 32 76.2079 32 75.1735Z" fill="var(--instrument-frame-primary-color)" vector-effect="non-scaling-stroke" stroke="var(--instrument-tick-mark-secondary-color)"/>
15
+ <rect x="12.5" y="57.5" width="51" height="7" rx="1.5" fill="var(--instrument-frame-primary-color)" vector-effect="non-scaling-stroke" stroke="var(--instrument-tick-mark-secondary-color)"/>
16
+ <rect x="96.5" y="57.5" width="51" height="7" rx="1.5" fill="var(--instrument-frame-primary-color)" vector-effect="non-scaling-stroke" stroke="var(--instrument-tick-mark-secondary-color)"/>
17
+ </svg>
18
+ `;
19
+ export {
20
+ droneGenericSide as default
21
+ };
22
+ //# sourceMappingURL=drone-generic-side.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"drone-generic-side.js","sources":["../../../../src/navigation-instruments/watch/vessels/drone-generic-side.ts"],"sourcesContent":["import {svg} from 'lit';\n\nexport default svg`<svg width=\"160\" height=\"160\" viewBox=\"0 0 160 160\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M131 75C133.209 75 135 76.7909 135 79C135 81.2091 133.209 83 131 83V75Z\" fill=\"var(--instrument-tick-mark-secondary-color)\"/>\n<path d=\"M132 84V74C132 73.4477 131.552 73 131 73H89L98.7002 84.6402C98.8901 84.8682 99.1716 85 99.4684 85H131C131.552 85 132 84.5523 132 84Z\" fill=\"var(--instrument-frame-primary-color)\" vector-effect=\"non-scaling-stroke\" stroke=\"var(--instrument-tick-mark-secondary-color)\"/>\n<path d=\"M129.736 73.4611L122.576 85.9923C122.22 86.6154 121.557 87 120.839 87H69.8301C69.2805 87 68.7346 86.9094 68.2144 86.7317L28 73V68.0879L29.1795 65.9233C30.0014 64.415 31.5399 63.4342 33.2542 63.3257L70 61H90L124.906 65.3632C125.627 65.4533 126.319 65.6995 126.935 66.0846L129.925 67.9534C129.972 67.9824 130 68.0332 130 68.0879V72.4689C130 72.8169 129.909 73.159 129.736 73.4611Z\" fill=\"var(--instrument-frame-primary-color)\"/>\n<path d=\"M28 68.0879V73L68.2144 86.7317C68.7346 86.9094 69.2805 87 69.8301 87H120.839C121.557 87 122.22 86.6154 122.576 85.9923L129.736 73.4611C129.909 73.159 130 72.8169 130 72.4689V68.0879M28 68.0879L29.1795 65.9233C30.0014 64.415 31.5399 63.4342 33.2542 63.3257L70 61H90L124.906 65.3632C125.627 65.4533 126.319 65.6995 126.935 66.0846L129.925 67.9534C129.972 67.9824 130 68.0332 130 68.0879M28 68.0879H130\" vector-effect=\"non-scaling-stroke\" stroke=\"var(--instrument-tick-mark-secondary-color)\"/>\n<path d=\"M128.918 100.202L101 80H96L126.097 99.9027C126.661 100.276 127 100.907 127 101.583V102.835C127 103.478 127.522 104 128.165 104C128.809 104 129.33 103.478 129.33 102.835V101.009C129.33 100.689 129.177 100.389 128.918 100.202Z\" fill=\"var(--instrument-tick-mark-secondary-color)\"/>\n<path d=\"M31.4125 100.202L58.3301 80H63.3301L34.2334 99.9027C33.6694 100.276 33.3301 100.907 33.3301 101.583V102.835C33.3301 103.478 32.8085 104 32.1651 104C31.5216 104 31 103.478 31 102.835V101.009C31 100.689 31.1534 100.389 31.4125 100.202Z\" fill=\"var(--instrument-tick-mark-secondary-color)\"/>\n<path d=\"M128.918 100.202L101 80H96L126.097 99.9027C126.661 100.276 127 100.907 127 101.583V102.835C127 103.478 127.522 104 128.165 104C128.809 104 129.33 103.478 129.33 102.835V101.009C129.33 100.689 129.177 100.389 128.918 100.202Z\" vector-effect=\"non-scaling-stroke\" stroke=\"var(--instrument-tick-mark-secondary-color)\"/>\n<path d=\"M31.4125 100.202L58.3301 80H63.3301L34.2334 99.9027C33.6694 100.276 33.3301 100.907 33.3301 101.583V102.835C33.3301 103.478 32.8085 104 32.1651 104C31.5216 104 31 103.478 31 102.835V101.009C31 100.689 31.1534 100.389 31.4125 100.202Z\" vector-effect=\"non-scaling-stroke\" stroke=\"var(--instrument-tick-mark-secondary-color)\"/>\n<path d=\"M118 64H126V73.8755C126 75.2677 125.637 76.6358 124.946 77.8446L123.736 79.9611C122.969 81.3048 121.031 81.3048 120.264 79.9611L119.054 77.8446C118.363 76.6358 118 75.2677 118 73.8755V64Z\" fill=\"var(--instrument-tick-mark-secondary-color)\" vector-effect=\"non-scaling-stroke\" stroke=\"var(--instrument-tick-mark-secondary-color)\"/>\n<path d=\"M34 64H42V73.8755C42 75.2677 41.6367 76.6358 40.9459 77.8446L39.7365 79.9611C38.9687 81.3048 37.0313 81.3048 36.2635 79.9611L35.0541 77.8446C34.3633 76.6358 34 75.2677 34 73.8755V64Z\" fill=\"var(--instrument-tick-mark-secondary-color)\" vector-effect=\"non-scaling-stroke\" stroke=\"var(--instrument-tick-mark-secondary-color)\"/>\n<path d=\"M127 75.1735V74C127 73.4477 126.552 73 126 73H120H98.5803C98.2215 73 97.8901 73.1923 97.7121 73.5039L94.9519 78.3342C94.5507 79.0363 95.1053 79.8995 95.9106 79.8263L125.181 77.1653C126.211 77.0717 127 76.2079 127 75.1735Z\" fill=\"var(--instrument-frame-primary-color)\" vector-effect=\"non-scaling-stroke\" stroke=\"var(--instrument-tick-mark-secondary-color)\"/>\n<path d=\"M32 75.1735V74C32 73.4477 32.4477 73 33 73H40H61.3406C61.7406 73 62.1022 73.2384 62.2598 73.6061L64.3393 78.4583C64.6376 79.1544 64.0839 79.9167 63.3296 79.8481L33.8189 77.1653C32.7888 77.0717 32 76.2079 32 75.1735Z\" fill=\"var(--instrument-frame-primary-color)\" vector-effect=\"non-scaling-stroke\" stroke=\"var(--instrument-tick-mark-secondary-color)\"/>\n<rect x=\"12.5\" y=\"57.5\" width=\"51\" height=\"7\" rx=\"1.5\" fill=\"var(--instrument-frame-primary-color)\" vector-effect=\"non-scaling-stroke\" stroke=\"var(--instrument-tick-mark-secondary-color)\"/>\n<rect x=\"96.5\" y=\"57.5\" width=\"51\" height=\"7\" rx=\"1.5\" fill=\"var(--instrument-frame-primary-color)\" vector-effect=\"non-scaling-stroke\" stroke=\"var(--instrument-tick-mark-secondary-color)\"/>\n</svg>\n`;\n"],"names":[],"mappings":";AAEA,MAAA,mBAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;"}
@@ -0,0 +1,3 @@
1
+ declare const _default: import('lit-html').TemplateResult<2>;
2
+ export default _default;
3
+ //# sourceMappingURL=drone-generic-top.d.ts.map