@oicl/openbridge-webcomponents 2.0.0-next.107 → 2.0.0-next.108
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundle/openbridge-webcomponents.bundle.js +1 -2
- package/bundle/openbridge-webcomponents.bundle.js.map +1 -1
- package/custom-elements.json +3 -3
- package/dist/navigation-instruments/speed-directions/speed-directions.d.ts +3 -3
- package/dist/navigation-instruments/speed-directions/speed-directions.d.ts.map +1 -1
- package/dist/navigation-instruments/speed-directions/speed-directions.js +1 -2
- package/dist/navigation-instruments/speed-directions/speed-directions.js.map +1 -1
- package/package.json +1 -1
package/custom-elements.json
CHANGED
|
@@ -94771,7 +94771,7 @@
|
|
|
94771
94771
|
"declarations": [
|
|
94772
94772
|
{
|
|
94773
94773
|
"kind": "class",
|
|
94774
|
-
"description": "Speed Directions - all-in-one directional speed instrument showing a vessel\ntop view with speed indicators along the vessel axes.\n\n## Features / Variants\n- Three indicator types: stepped chevron arrows on three axes\n (`alongAthwartArrows`), proportional bars with chevron tips\n (`alongAthwartBars`), and two-axis chevrons (`longLatArrows`).\n- Three frame styles: `standalone`, `framed` (rounded square with center\n cross lines), `compass` (watch face with main tickmarks and north arrow).\n- Value-driven: signed speeds in knots; an indicator renders only when its\n speed property is defined.\n\n## Usage Guidelines\nUse for docking/maneuvering speed overviews. For a single stepped-arrow\nreadout, use `obc-speed-arrows` instead.",
|
|
94774
|
+
"description": "Speed Directions - all-in-one directional speed instrument showing a vessel\ntop view with speed indicators along the vessel axes.\n\n## Features / Variants\n- Three indicator types: stepped chevron arrows on three axes\n (`alongAthwartArrows`), proportional bars with chevron tips\n (`alongAthwartBars`), and two-axis chevrons (`longLatArrows`).\n- Three frame styles: `standalone`, `framed` (rounded square with center\n cross lines), `compass` (watch face with main tickmarks and north arrow).\n- Value-driven: signed speeds in knots; an indicator renders only when its\n speed property is defined.\n- Configurable vessel image in every frame style via `vesselImage`.\n\n## Usage Guidelines\nUse for docking/maneuvering speed overviews. For a single stepped-arrow\nreadout, use `obc-speed-arrows` instead.",
|
|
94775
94775
|
"name": "ObcSpeedDirections",
|
|
94776
94776
|
"members": [
|
|
94777
94777
|
{
|
|
@@ -94892,7 +94892,7 @@
|
|
|
94892
94892
|
"type": {
|
|
94893
94893
|
"text": "VesselImage"
|
|
94894
94894
|
},
|
|
94895
|
-
"description": "Vessel image
|
|
94895
|
+
"description": "Vessel image drawn at the center of the instrument. The standalone style\ndraws it at twice the size for the chevron types, as in the design.",
|
|
94896
94896
|
"attribute": "vesselImage"
|
|
94897
94897
|
},
|
|
94898
94898
|
{
|
|
@@ -95094,7 +95094,7 @@
|
|
|
95094
95094
|
"type": {
|
|
95095
95095
|
"text": "VesselImage"
|
|
95096
95096
|
},
|
|
95097
|
-
"description": "Vessel image
|
|
95097
|
+
"description": "Vessel image drawn at the center of the instrument. The standalone style\ndraws it at twice the size for the chevron types, as in the design.",
|
|
95098
95098
|
"fieldName": "vesselImage"
|
|
95099
95099
|
}
|
|
95100
95100
|
],
|
|
@@ -14,6 +14,7 @@ export { SpeedDirectionsType, SpeedDirectionsFrameStyle };
|
|
|
14
14
|
* cross lines), `compass` (watch face with main tickmarks and north arrow).
|
|
15
15
|
* - Value-driven: signed speeds in knots; an indicator renders only when its
|
|
16
16
|
* speed property is defined.
|
|
17
|
+
* - Configurable vessel image in every frame style via `vesselImage`.
|
|
17
18
|
*
|
|
18
19
|
* ## Usage Guidelines
|
|
19
20
|
* Use for docking/maneuvering speed overviews. For a single stepped-arrow
|
|
@@ -63,9 +64,8 @@ export declare class ObcSpeedDirections extends LitElement {
|
|
|
63
64
|
*/
|
|
64
65
|
tintedArrows: boolean;
|
|
65
66
|
/**
|
|
66
|
-
* Vessel image
|
|
67
|
-
*
|
|
68
|
-
* @availableWhen frameStyle!=standalone
|
|
67
|
+
* Vessel image drawn at the center of the instrument. The standalone style
|
|
68
|
+
* draws it at twice the size for the chevron types, as in the design.
|
|
69
69
|
*/
|
|
70
70
|
vesselImage: VesselImage;
|
|
71
71
|
private get isLongLat();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"speed-directions.d.ts","sourceRoot":"","sources":["../../../src/navigation-instruments/speed-directions/speed-directions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,UAAU,EAAgC,MAAM,KAAK,CAAC;AAK9D,OAAO,EACL,WAAW,EAIZ,MAAM,mBAAmB,CAAC;AAQ3B,OAAO,EACL,mBAAmB,EACnB,yBAAyB,EAW1B,MAAM,gCAAgC,CAAC;AAOxC,OAAO,EAAC,mBAAmB,EAAE,yBAAyB,EAAC,CAAC;AAOxD
|
|
1
|
+
{"version":3,"file":"speed-directions.d.ts","sourceRoot":"","sources":["../../../src/navigation-instruments/speed-directions/speed-directions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,UAAU,EAAgC,MAAM,KAAK,CAAC;AAK9D,OAAO,EACL,WAAW,EAIZ,MAAM,mBAAmB,CAAC;AAQ3B,OAAO,EACL,mBAAmB,EACnB,yBAAyB,EAW1B,MAAM,gCAAgC,CAAC;AAOxC,OAAO,EAAC,mBAAmB,EAAE,yBAAyB,EAAC,CAAC;AAOxD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,qBACa,kBAAmB,SAAQ,UAAU;IAGhD,OAAO,CAAC,iBAAiB,CAAkC;IAG3D,IAAI,EAAE,mBAAmB,CAA0C;IAGnE,UAAU,EAAE,yBAAyB,CAAwC;IAE7E,uEAAuE;IAEvE,eAAe,CAAC,EAAE,MAAM,CAAa;IAErC;;;OAGG;IAEH,oBAAoB,CAAC,EAAE,MAAM,CAAa;IAE1C;;;OAGG;IAEH,sBAAsB,CAAC,EAAE,MAAM,CAAa;IAE5C;;;OAGG;IAEH,iBAAiB,CAAC,EAAE,MAAM,CAAa;IAEvC,gDAAgD;IAEhD,mBAAmB,SAAK;IAExB,kDAAkD;IAElD,qBAAqB,SAAK;IAE1B;;;OAGG;IAEH,kBAAkB,SAAK;IAEvB;;;OAGG;IAEH,oBAAoB,SAAK;IAEzB;;;OAGG;IAEH,YAAY,UAAS;IAErB;;;OAGG;IAEH,WAAW,EAAE,WAAW,CAAsB;IAE9C,OAAO,KAAK,SAAS,GAEpB;IAED,OAAO,CAAC,SAAS;IAajB,OAAO,KAAK,IAAI,GAIf;IAED,OAAO,CAAC,SAAS;IAMjB,OAAO,CAAC,uBAAuB;IAU/B,OAAO,CAAC,YAAY;IAOpB,OAAO,CAAC,aAAa;IAQrB,OAAO,CAAC,mBAAmB;IAoB3B,OAAO,CAAC,WAAW;IAanB,OAAO,CAAC,eAAe;IAkBvB,OAAO,CAAC,aAAa;IA8BZ,MAAM;IAgBf,OAAgB,MAAM,0BAA6B;CACpD;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,sBAAsB,EAAE,kBAAkB,CAAC;KAC5C;CACF"}
|
|
@@ -74,9 +74,8 @@ let ObcSpeedDirections = class extends LitElement {
|
|
|
74
74
|
renderVessel() {
|
|
75
75
|
const standalone = this.frameStyle === SpeedDirectionsFrameStyle.standalone;
|
|
76
76
|
const bars = this.type === SpeedDirectionsType.alongAthwartBars;
|
|
77
|
-
const image = standalone ? bars ? VesselImage.psvTop : VesselImage.genericTop : this.vesselImage;
|
|
78
77
|
const scale = standalone && !bars ? 2 : 1;
|
|
79
|
-
return svg`<g transform="translate(0 ${VESSEL_CENTER_Y}) scale(${scale}) translate(-80 -80)">${vesselImages[
|
|
78
|
+
return svg`<g transform="translate(0 ${VESSEL_CENTER_Y}) scale(${scale}) translate(-80 -80)">${vesselImages[this.vesselImage]}</g>`;
|
|
80
79
|
}
|
|
81
80
|
renderContent() {
|
|
82
81
|
const bars = this.type === SpeedDirectionsType.alongAthwartBars;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"speed-directions.js","sources":["../../../src/navigation-instruments/speed-directions/speed-directions.ts"],"sourcesContent":["import {LitElement, html, svg, nothing, unsafeCSS} from 'lit';\nimport {property} from 'lit/decorators.js';\nimport {ResizeController} from '@lit-labs/observers/resize-controller.js';\nimport {customElement} from '../../decorator.js';\nimport componentStyle from './speed-directions.css?inline';\nimport {\n VesselImage,\n vesselImages,\n WatchCircleType,\n innerRingRadiusFor,\n} from '../watch/watch.js';\nimport {Tickmark, TickmarkType} from '../watch/tickmark.js';\nimport {rect} from '../../svghelpers/rectangular.js';\nimport {\n computeRadialFrame,\n measureContainerPx,\n NORTH_ARROW_WIDTH_PX,\n} from '../../svghelpers/radial-frame.js';\nimport {\n SpeedDirectionsType,\n SpeedDirectionsFrameStyle,\n SpeedAxis,\n speedSteps,\n barLengthUnits,\n chevronCell,\n ATHWART_AXIS_OFFSET,\n VESSEL_CENTER_Y,\n FLAT_VIEWBOX,\n FRAME_HALF,\n AXIS_LINE_HALF,\n chordHalfLength,\n} from './speed-directions-geometry.js';\nimport {\n renderSpeedChevrons,\n renderSpeedBar,\n renderAxisLine,\n} from './speed-directions-art.js';\n\nexport {SpeedDirectionsType, SpeedDirectionsFrameStyle};\n\nconst COMPASS_TICKMARKS: Tickmark[] = [45, 135, 225, 315].map((angle) => ({\n angle,\n type: TickmarkType.main,\n}));\n\n/**\n * Speed Directions - all-in-one directional speed instrument showing a vessel\n * top view with speed indicators along the vessel axes.\n *\n * ## Features / Variants\n * - Three indicator types: stepped chevron arrows on three axes\n * (`alongAthwartArrows`), proportional bars with chevron tips\n * (`alongAthwartBars`), and two-axis chevrons (`longLatArrows`).\n * - Three frame styles: `standalone`, `framed` (rounded square with center\n * cross lines), `compass` (watch face with main tickmarks and north arrow).\n * - Value-driven: signed speeds in knots; an indicator renders only when its\n * speed property is defined.\n *\n * ## Usage Guidelines\n * Use for docking/maneuvering speed overviews. For a single stepped-arrow\n * readout, use `obc-speed-arrows` instead.\n *\n * @experimental The API of this component is under design review and may\n * change in a future release.\n */\n@customElement('obc-speed-directions')\nexport class ObcSpeedDirections extends LitElement {\n // @ts-expect-error TS6133: The controller ensures that the render\n // function is called on resize of the element\n private _resizeController = new ResizeController(this, {});\n\n @property({type: String})\n type: SpeedDirectionsType = SpeedDirectionsType.alongAthwartArrows;\n\n @property({type: String})\n frameStyle: SpeedDirectionsFrameStyle = SpeedDirectionsFrameStyle.standalone;\n\n /** Signed speed along the vessel axis: positive fore, negative aft. */\n @property({type: Number})\n speedAlongKnots?: number = undefined;\n\n /**\n * Signed athwart speed at the bow: positive starboard, negative port.\n * @availableWhen type!=longLatArrows\n */\n @property({type: Number})\n speedAthwartBowKnots?: number = undefined;\n\n /**\n * Signed athwart speed at the stern: positive starboard, negative port.\n * @availableWhen type!=longLatArrows\n */\n @property({type: Number})\n speedAthwartSternKnots?: number = undefined;\n\n /**\n * Signed athwart speed at midship: positive starboard, negative port.\n * @availableWhen type==longLatArrows\n */\n @property({type: Number})\n speedAthwartKnots?: number = undefined;\n\n /** Knots per chevron step on the along axis. */\n @property({type: Number})\n alongSpeedStepKnots = 3;\n\n /** Knots per chevron step on the athwart axes. */\n @property({type: Number})\n athwartSpeedStepKnots = 1;\n\n /**\n * Along speed mapped to the full bar length.\n * @availableWhen type==alongAthwartBars\n */\n @property({type: Number})\n alongMaxSpeedKnots = 9;\n\n /**\n * Athwart speed mapped to the full bar length.\n * @availableWhen type==alongAthwartBars\n */\n @property({type: Number})\n athwartMaxSpeedKnots = 3;\n\n /**\n * Render inactive chevron bands as a tinted track.\n * @availableWhen type!=alongAthwartBars\n */\n @property({type: Boolean})\n tintedArrows = false;\n\n /**\n * Vessel image for the framed and compass styles; the standalone style\n * follows the design's fixed per-type vessel.\n * @availableWhen frameStyle!=standalone\n */\n @property({type: String})\n vesselImage: VesselImage = VesselImage.psvTop;\n\n private get isLongLat(): boolean {\n return this.type === SpeedDirectionsType.longLatArrows;\n }\n\n private axisSpeed(axis: SpeedAxis): number | undefined {\n switch (axis) {\n case 'along':\n return this.speedAlongKnots;\n case 'athwartBow':\n return this.speedAthwartBowKnots;\n case 'athwartStern':\n return this.speedAthwartSternKnots;\n case 'athwartMid':\n return this.speedAthwartKnots;\n }\n }\n\n private get axes(): SpeedAxis[] {\n return this.isLongLat\n ? ['along', 'athwartMid']\n : ['along', 'athwartBow', 'athwartStern'];\n }\n\n private stepKnots(axis: SpeedAxis): number {\n return axis === 'along'\n ? this.alongSpeedStepKnots\n : this.athwartSpeedStepKnots;\n }\n\n private renderChevronIndicators() {\n return this.axes.map((axis) => {\n const value = this.axisSpeed(axis);\n if (value === undefined) return nothing;\n const count = speedSteps(value, this.stepKnots(axis));\n const cell = chevronCell(this.type, this.frameStyle, axis, value >= 0);\n return renderSpeedChevrons(cell, count, this.tintedArrows);\n });\n }\n\n private renderVessel() {\n const standalone = this.frameStyle === SpeedDirectionsFrameStyle.standalone;\n const bars = this.type === SpeedDirectionsType.alongAthwartBars;\n const image = standalone\n ? bars\n ? VesselImage.psvTop\n : VesselImage.genericTop\n : this.vesselImage;\n const scale = standalone && !bars ? 2 : 1;\n return svg`<g transform=\"translate(0 ${VESSEL_CENTER_Y}) scale(${scale}) translate(-80 -80)\">${vesselImages[image]}</g>`;\n }\n\n private renderContent() {\n const bars = this.type === SpeedDirectionsType.alongAthwartBars;\n if (bars) {\n return svg`${this.renderBarIndicators()}${this.renderVessel()}`;\n }\n return svg`${this.renderVessel()}${this.renderChevronIndicators()}`;\n }\n\n private renderBarIndicators() {\n const maxFor = (axis: SpeedAxis) =>\n axis === 'along' ? this.alongMaxSpeedKnots : this.athwartMaxSpeedKnots;\n return this.axes.map((axis) => {\n const value = this.axisSpeed(axis);\n if (value === undefined) return nothing;\n const length = barLengthUnits(value, maxFor(axis));\n const tip = speedSteps(value, this.stepKnots(axis));\n const originY =\n axis === 'athwartBow'\n ? -ATHWART_AXIS_OFFSET\n : axis === 'athwartStern'\n ? ATHWART_AXIS_OFFSET\n : 0;\n const rotation =\n axis === 'along' ? (value >= 0 ? 0 : 180) : value >= 0 ? 90 : 270;\n return renderSpeedBar(0, originY, rotation, length, tip);\n });\n }\n\n private renderFrame() {\n if (this.frameStyle !== SpeedDirectionsFrameStyle.framed) return nothing;\n return rect('speed-directions-frame', {\n width: FRAME_HALF * 2,\n height: FRAME_HALF * 2,\n strokeWidth: 1,\n strokeColor: 'var(--instrument-frame-tertiary-color)',\n fillColor: 'var(--instrument-frame-primary-color)',\n borderRadius: 8,\n strokePosition: 'inside',\n });\n }\n\n private renderAxisLines(halfAt: (offset: number) => number) {\n if (this.frameStyle === SpeedDirectionsFrameStyle.standalone) {\n return nothing;\n }\n const lines = [renderAxisLine('v', 0, halfAt(0))];\n if (this.isLongLat) {\n lines.push(renderAxisLine('h', 0, halfAt(0)));\n } else {\n lines.push(\n renderAxisLine('h', -ATHWART_AXIS_OFFSET, halfAt(-ATHWART_AXIS_OFFSET))\n );\n lines.push(\n renderAxisLine('h', ATHWART_AXIS_OFFSET, halfAt(ATHWART_AXIS_OFFSET))\n );\n }\n return lines;\n }\n\n private renderCompass() {\n const frame = computeRadialFrame({\n basePadding: 72,\n labelWidthPx: NORTH_ARROW_WIDTH_PX,\n containerPx: measureContainerPx(this),\n });\n const discRadius = innerRingRadiusFor(WatchCircleType.single);\n return html`<div class=\"container\">\n <obc-watch\n .arcFrame=${frame}\n .watchCircleType=${WatchCircleType.single}\n .tickmarks=${COMPASS_TICKMARKS}\n .showLabels=${false}\n .northArrow=${!frame.labelsHidden}\n ></obc-watch>\n <svg\n viewBox=${frame.viewBox}\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <circle\n r=${discRadius}\n fill=\"var(--instrument-frame-secondary-color)\"\n ></circle>\n ${this.renderAxisLines((offset) => chordHalfLength(discRadius, offset))}\n ${this.renderContent()}\n </svg>\n </div>`;\n }\n\n override render() {\n if (this.frameStyle === SpeedDirectionsFrameStyle.compass) {\n return this.renderCompass();\n }\n return html`<div class=\"container\">\n <svg\n viewBox=${FLAT_VIEWBOX}\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n ${this.renderFrame()} ${this.renderAxisLines(() => AXIS_LINE_HALF)}\n ${this.renderContent()}\n </svg>\n </div>`;\n }\n\n static override styles = unsafeCSS(componentStyle);\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'obc-speed-directions': ObcSpeedDirections;\n }\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"speed-directions.js","sources":["../../../src/navigation-instruments/speed-directions/speed-directions.ts"],"sourcesContent":["import {LitElement, html, svg, nothing, unsafeCSS} from 'lit';\nimport {property} from 'lit/decorators.js';\nimport {ResizeController} from '@lit-labs/observers/resize-controller.js';\nimport {customElement} from '../../decorator.js';\nimport componentStyle from './speed-directions.css?inline';\nimport {\n VesselImage,\n vesselImages,\n WatchCircleType,\n innerRingRadiusFor,\n} from '../watch/watch.js';\nimport {Tickmark, TickmarkType} from '../watch/tickmark.js';\nimport {rect} from '../../svghelpers/rectangular.js';\nimport {\n computeRadialFrame,\n measureContainerPx,\n NORTH_ARROW_WIDTH_PX,\n} from '../../svghelpers/radial-frame.js';\nimport {\n SpeedDirectionsType,\n SpeedDirectionsFrameStyle,\n SpeedAxis,\n speedSteps,\n barLengthUnits,\n chevronCell,\n ATHWART_AXIS_OFFSET,\n VESSEL_CENTER_Y,\n FLAT_VIEWBOX,\n FRAME_HALF,\n AXIS_LINE_HALF,\n chordHalfLength,\n} from './speed-directions-geometry.js';\nimport {\n renderSpeedChevrons,\n renderSpeedBar,\n renderAxisLine,\n} from './speed-directions-art.js';\n\nexport {SpeedDirectionsType, SpeedDirectionsFrameStyle};\n\nconst COMPASS_TICKMARKS: Tickmark[] = [45, 135, 225, 315].map((angle) => ({\n angle,\n type: TickmarkType.main,\n}));\n\n/**\n * Speed Directions - all-in-one directional speed instrument showing a vessel\n * top view with speed indicators along the vessel axes.\n *\n * ## Features / Variants\n * - Three indicator types: stepped chevron arrows on three axes\n * (`alongAthwartArrows`), proportional bars with chevron tips\n * (`alongAthwartBars`), and two-axis chevrons (`longLatArrows`).\n * - Three frame styles: `standalone`, `framed` (rounded square with center\n * cross lines), `compass` (watch face with main tickmarks and north arrow).\n * - Value-driven: signed speeds in knots; an indicator renders only when its\n * speed property is defined.\n * - Configurable vessel image in every frame style via `vesselImage`.\n *\n * ## Usage Guidelines\n * Use for docking/maneuvering speed overviews. For a single stepped-arrow\n * readout, use `obc-speed-arrows` instead.\n *\n * @experimental The API of this component is under design review and may\n * change in a future release.\n */\n@customElement('obc-speed-directions')\nexport class ObcSpeedDirections extends LitElement {\n // @ts-expect-error TS6133: The controller ensures that the render\n // function is called on resize of the element\n private _resizeController = new ResizeController(this, {});\n\n @property({type: String})\n type: SpeedDirectionsType = SpeedDirectionsType.alongAthwartArrows;\n\n @property({type: String})\n frameStyle: SpeedDirectionsFrameStyle = SpeedDirectionsFrameStyle.standalone;\n\n /** Signed speed along the vessel axis: positive fore, negative aft. */\n @property({type: Number})\n speedAlongKnots?: number = undefined;\n\n /**\n * Signed athwart speed at the bow: positive starboard, negative port.\n * @availableWhen type!=longLatArrows\n */\n @property({type: Number})\n speedAthwartBowKnots?: number = undefined;\n\n /**\n * Signed athwart speed at the stern: positive starboard, negative port.\n * @availableWhen type!=longLatArrows\n */\n @property({type: Number})\n speedAthwartSternKnots?: number = undefined;\n\n /**\n * Signed athwart speed at midship: positive starboard, negative port.\n * @availableWhen type==longLatArrows\n */\n @property({type: Number})\n speedAthwartKnots?: number = undefined;\n\n /** Knots per chevron step on the along axis. */\n @property({type: Number})\n alongSpeedStepKnots = 3;\n\n /** Knots per chevron step on the athwart axes. */\n @property({type: Number})\n athwartSpeedStepKnots = 1;\n\n /**\n * Along speed mapped to the full bar length.\n * @availableWhen type==alongAthwartBars\n */\n @property({type: Number})\n alongMaxSpeedKnots = 9;\n\n /**\n * Athwart speed mapped to the full bar length.\n * @availableWhen type==alongAthwartBars\n */\n @property({type: Number})\n athwartMaxSpeedKnots = 3;\n\n /**\n * Render inactive chevron bands as a tinted track.\n * @availableWhen type!=alongAthwartBars\n */\n @property({type: Boolean})\n tintedArrows = false;\n\n /**\n * Vessel image drawn at the center of the instrument. The standalone style\n * draws it at twice the size for the chevron types, as in the design.\n */\n @property({type: String})\n vesselImage: VesselImage = VesselImage.psvTop;\n\n private get isLongLat(): boolean {\n return this.type === SpeedDirectionsType.longLatArrows;\n }\n\n private axisSpeed(axis: SpeedAxis): number | undefined {\n switch (axis) {\n case 'along':\n return this.speedAlongKnots;\n case 'athwartBow':\n return this.speedAthwartBowKnots;\n case 'athwartStern':\n return this.speedAthwartSternKnots;\n case 'athwartMid':\n return this.speedAthwartKnots;\n }\n }\n\n private get axes(): SpeedAxis[] {\n return this.isLongLat\n ? ['along', 'athwartMid']\n : ['along', 'athwartBow', 'athwartStern'];\n }\n\n private stepKnots(axis: SpeedAxis): number {\n return axis === 'along'\n ? this.alongSpeedStepKnots\n : this.athwartSpeedStepKnots;\n }\n\n private renderChevronIndicators() {\n return this.axes.map((axis) => {\n const value = this.axisSpeed(axis);\n if (value === undefined) return nothing;\n const count = speedSteps(value, this.stepKnots(axis));\n const cell = chevronCell(this.type, this.frameStyle, axis, value >= 0);\n return renderSpeedChevrons(cell, count, this.tintedArrows);\n });\n }\n\n private renderVessel() {\n const standalone = this.frameStyle === SpeedDirectionsFrameStyle.standalone;\n const bars = this.type === SpeedDirectionsType.alongAthwartBars;\n const scale = standalone && !bars ? 2 : 1;\n return svg`<g transform=\"translate(0 ${VESSEL_CENTER_Y}) scale(${scale}) translate(-80 -80)\">${vesselImages[this.vesselImage]}</g>`;\n }\n\n private renderContent() {\n const bars = this.type === SpeedDirectionsType.alongAthwartBars;\n if (bars) {\n return svg`${this.renderBarIndicators()}${this.renderVessel()}`;\n }\n return svg`${this.renderVessel()}${this.renderChevronIndicators()}`;\n }\n\n private renderBarIndicators() {\n const maxFor = (axis: SpeedAxis) =>\n axis === 'along' ? this.alongMaxSpeedKnots : this.athwartMaxSpeedKnots;\n return this.axes.map((axis) => {\n const value = this.axisSpeed(axis);\n if (value === undefined) return nothing;\n const length = barLengthUnits(value, maxFor(axis));\n const tip = speedSteps(value, this.stepKnots(axis));\n const originY =\n axis === 'athwartBow'\n ? -ATHWART_AXIS_OFFSET\n : axis === 'athwartStern'\n ? ATHWART_AXIS_OFFSET\n : 0;\n const rotation =\n axis === 'along' ? (value >= 0 ? 0 : 180) : value >= 0 ? 90 : 270;\n return renderSpeedBar(0, originY, rotation, length, tip);\n });\n }\n\n private renderFrame() {\n if (this.frameStyle !== SpeedDirectionsFrameStyle.framed) return nothing;\n return rect('speed-directions-frame', {\n width: FRAME_HALF * 2,\n height: FRAME_HALF * 2,\n strokeWidth: 1,\n strokeColor: 'var(--instrument-frame-tertiary-color)',\n fillColor: 'var(--instrument-frame-primary-color)',\n borderRadius: 8,\n strokePosition: 'inside',\n });\n }\n\n private renderAxisLines(halfAt: (offset: number) => number) {\n if (this.frameStyle === SpeedDirectionsFrameStyle.standalone) {\n return nothing;\n }\n const lines = [renderAxisLine('v', 0, halfAt(0))];\n if (this.isLongLat) {\n lines.push(renderAxisLine('h', 0, halfAt(0)));\n } else {\n lines.push(\n renderAxisLine('h', -ATHWART_AXIS_OFFSET, halfAt(-ATHWART_AXIS_OFFSET))\n );\n lines.push(\n renderAxisLine('h', ATHWART_AXIS_OFFSET, halfAt(ATHWART_AXIS_OFFSET))\n );\n }\n return lines;\n }\n\n private renderCompass() {\n const frame = computeRadialFrame({\n basePadding: 72,\n labelWidthPx: NORTH_ARROW_WIDTH_PX,\n containerPx: measureContainerPx(this),\n });\n const discRadius = innerRingRadiusFor(WatchCircleType.single);\n return html`<div class=\"container\">\n <obc-watch\n .arcFrame=${frame}\n .watchCircleType=${WatchCircleType.single}\n .tickmarks=${COMPASS_TICKMARKS}\n .showLabels=${false}\n .northArrow=${!frame.labelsHidden}\n ></obc-watch>\n <svg\n viewBox=${frame.viewBox}\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <circle\n r=${discRadius}\n fill=\"var(--instrument-frame-secondary-color)\"\n ></circle>\n ${this.renderAxisLines((offset) => chordHalfLength(discRadius, offset))}\n ${this.renderContent()}\n </svg>\n </div>`;\n }\n\n override render() {\n if (this.frameStyle === SpeedDirectionsFrameStyle.compass) {\n return this.renderCompass();\n }\n return html`<div class=\"container\">\n <svg\n viewBox=${FLAT_VIEWBOX}\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n ${this.renderFrame()} ${this.renderAxisLines(() => AXIS_LINE_HALF)}\n ${this.renderContent()}\n </svg>\n </div>`;\n }\n\n static override styles = unsafeCSS(componentStyle);\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'obc-speed-directions': ObcSpeedDirections;\n }\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAwCA,MAAM,oBAAgC,CAAC,IAAI,KAAK,KAAK,GAAG,EAAE,IAAI,CAAC,WAAW;AAAA,EACxE;AAAA,EACA,MAAM,aAAa;AACrB,EAAE;AAwBK,IAAM,qBAAN,cAAiC,WAAW;AAAA,EAA5C,cAAA;AAAA,UAAA,GAAA,SAAA;AAGL,SAAQ,oBAAoB,IAAI,iBAAiB,MAAM,CAAA,CAAE;AAGzD,SAAA,OAA4B,oBAAoB;AAGhD,SAAA,aAAwC,0BAA0B;AAIlE,SAAA,kBAA2B;AAO3B,SAAA,uBAAgC;AAOhC,SAAA,yBAAkC;AAOlC,SAAA,oBAA6B;AAI7B,SAAA,sBAAsB;AAItB,SAAA,wBAAwB;AAOxB,SAAA,qBAAqB;AAOrB,SAAA,uBAAuB;AAOvB,SAAA,eAAe;AAOf,SAAA,cAA2B,YAAY;AAAA,EAAA;AAAA,EAEvC,IAAY,YAAqB;AAC/B,WAAO,KAAK,SAAS,oBAAoB;AAAA,EAC3C;AAAA,EAEQ,UAAU,MAAqC;AACrD,YAAQ,MAAA;AAAA,MACN,KAAK;AACH,eAAO,KAAK;AAAA,MACd,KAAK;AACH,eAAO,KAAK;AAAA,MACd,KAAK;AACH,eAAO,KAAK;AAAA,MACd,KAAK;AACH,eAAO,KAAK;AAAA,IAAA;AAAA,EAElB;AAAA,EAEA,IAAY,OAAoB;AAC9B,WAAO,KAAK,YACR,CAAC,SAAS,YAAY,IACtB,CAAC,SAAS,cAAc,cAAc;AAAA,EAC5C;AAAA,EAEQ,UAAU,MAAyB;AACzC,WAAO,SAAS,UACZ,KAAK,sBACL,KAAK;AAAA,EACX;AAAA,EAEQ,0BAA0B;AAChC,WAAO,KAAK,KAAK,IAAI,CAAC,SAAS;AAC7B,YAAM,QAAQ,KAAK,UAAU,IAAI;AACjC,UAAI,UAAU,OAAW,QAAO;AAChC,YAAM,QAAQ,WAAW,OAAO,KAAK,UAAU,IAAI,CAAC;AACpD,YAAM,OAAO,YAAY,KAAK,MAAM,KAAK,YAAY,MAAM,SAAS,CAAC;AACrE,aAAO,oBAAoB,MAAM,OAAO,KAAK,YAAY;AAAA,IAC3D,CAAC;AAAA,EACH;AAAA,EAEQ,eAAe;AACrB,UAAM,aAAa,KAAK,eAAe,0BAA0B;AACjE,UAAM,OAAO,KAAK,SAAS,oBAAoB;AAC/C,UAAM,QAAQ,cAAc,CAAC,OAAO,IAAI;AACxC,WAAO,gCAAgC,eAAe,WAAW,KAAK,yBAAyB,aAAa,KAAK,WAAW,CAAC;AAAA,EAC/H;AAAA,EAEQ,gBAAgB;AACtB,UAAM,OAAO,KAAK,SAAS,oBAAoB;AAC/C,QAAI,MAAM;AACR,aAAO,MAAM,KAAK,oBAAA,CAAqB,GAAG,KAAK,cAAc;AAAA,IAC/D;AACA,WAAO,MAAM,KAAK,aAAA,CAAc,GAAG,KAAK,yBAAyB;AAAA,EACnE;AAAA,EAEQ,sBAAsB;AAC5B,UAAM,SAAS,CAAC,SACd,SAAS,UAAU,KAAK,qBAAqB,KAAK;AACpD,WAAO,KAAK,KAAK,IAAI,CAAC,SAAS;AAC7B,YAAM,QAAQ,KAAK,UAAU,IAAI;AACjC,UAAI,UAAU,OAAW,QAAO;AAChC,YAAM,SAAS,eAAe,OAAO,OAAO,IAAI,CAAC;AACjD,YAAM,MAAM,WAAW,OAAO,KAAK,UAAU,IAAI,CAAC;AAClD,YAAM,UACJ,SAAS,eACL,CAAC,sBACD,SAAS,iBACP,sBACA;AACR,YAAM,WACJ,SAAS,UAAW,SAAS,IAAI,IAAI,MAAO,SAAS,IAAI,KAAK;AAChE,aAAO,eAAe,GAAG,SAAS,UAAU,QAAQ,GAAG;AAAA,IACzD,CAAC;AAAA,EACH;AAAA,EAEQ,cAAc;AACpB,QAAI,KAAK,eAAe,0BAA0B,OAAQ,QAAO;AACjE,WAAO,KAAK,0BAA0B;AAAA,MACpC,OAAO,aAAa;AAAA,MACpB,QAAQ,aAAa;AAAA,MACrB,aAAa;AAAA,MACb,aAAa;AAAA,MACb,WAAW;AAAA,MACX,cAAc;AAAA,MACd,gBAAgB;AAAA,IAAA,CACjB;AAAA,EACH;AAAA,EAEQ,gBAAgB,QAAoC;AAC1D,QAAI,KAAK,eAAe,0BAA0B,YAAY;AAC5D,aAAO;AAAA,IACT;AACA,UAAM,QAAQ,CAAC,eAAe,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC;AAChD,QAAI,KAAK,WAAW;AAClB,YAAM,KAAK,eAAe,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC;AAAA,IAC9C,OAAO;AACL,YAAM;AAAA,QACJ,eAAe,KAAK,CAAC,qBAAqB,OAAO,CAAC,mBAAmB,CAAC;AAAA,MAAA;AAExE,YAAM;AAAA,QACJ,eAAe,KAAK,qBAAqB,OAAO,mBAAmB,CAAC;AAAA,MAAA;AAAA,IAExE;AACA,WAAO;AAAA,EACT;AAAA,EAEQ,gBAAgB;AACtB,UAAM,QAAQ,mBAAmB;AAAA,MAC/B,aAAa;AAAA,MACb,cAAc;AAAA,MACd,aAAa,mBAAmB,IAAI;AAAA,IAAA,CACrC;AACD,UAAM,aAAa,mBAAmB,gBAAgB,MAAM;AAC5D,WAAO;AAAA;AAAA,oBAES,KAAK;AAAA,2BACE,gBAAgB,MAAM;AAAA,qBAC5B,iBAAiB;AAAA,sBAChB,KAAK;AAAA,sBACL,CAAC,MAAM,YAAY;AAAA;AAAA;AAAA,kBAGvB,MAAM,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA,cAKjB,UAAU;AAAA;AAAA;AAAA,UAGd,KAAK,gBAAgB,CAAC,WAAW,gBAAgB,YAAY,MAAM,CAAC,CAAC;AAAA,UACrE,KAAK,eAAe;AAAA;AAAA;AAAA,EAG5B;AAAA,EAES,SAAS;AAChB,QAAI,KAAK,eAAe,0BAA0B,SAAS;AACzD,aAAO,KAAK,cAAA;AAAA,IACd;AACA,WAAO;AAAA;AAAA,kBAEO,YAAY;AAAA;AAAA;AAAA;AAAA,UAIpB,KAAK,aAAa,IAAI,KAAK,gBAAgB,MAAM,cAAc,CAAC;AAAA,UAChE,KAAK,eAAe;AAAA;AAAA;AAAA,EAG5B;AAGF;AAhOa,mBA+NK,SAAS,UAAU,cAAc;AAzNjD,gBAAA;AAAA,EADC,SAAS,EAAC,MAAM,OAAA,CAAO;AAAA,GALb,mBAMX,WAAA,QAAA,CAAA;AAGA,gBAAA;AAAA,EADC,SAAS,EAAC,MAAM,OAAA,CAAO;AAAA,GARb,mBASX,WAAA,cAAA,CAAA;AAIA,gBAAA;AAAA,EADC,SAAS,EAAC,MAAM,OAAA,CAAO;AAAA,GAZb,mBAaX,WAAA,mBAAA,CAAA;AAOA,gBAAA;AAAA,EADC,SAAS,EAAC,MAAM,OAAA,CAAO;AAAA,GAnBb,mBAoBX,WAAA,wBAAA,CAAA;AAOA,gBAAA;AAAA,EADC,SAAS,EAAC,MAAM,OAAA,CAAO;AAAA,GA1Bb,mBA2BX,WAAA,0BAAA,CAAA;AAOA,gBAAA;AAAA,EADC,SAAS,EAAC,MAAM,OAAA,CAAO;AAAA,GAjCb,mBAkCX,WAAA,qBAAA,CAAA;AAIA,gBAAA;AAAA,EADC,SAAS,EAAC,MAAM,OAAA,CAAO;AAAA,GArCb,mBAsCX,WAAA,uBAAA,CAAA;AAIA,gBAAA;AAAA,EADC,SAAS,EAAC,MAAM,OAAA,CAAO;AAAA,GAzCb,mBA0CX,WAAA,yBAAA,CAAA;AAOA,gBAAA;AAAA,EADC,SAAS,EAAC,MAAM,OAAA,CAAO;AAAA,GAhDb,mBAiDX,WAAA,sBAAA,CAAA;AAOA,gBAAA;AAAA,EADC,SAAS,EAAC,MAAM,OAAA,CAAO;AAAA,GAvDb,mBAwDX,WAAA,wBAAA,CAAA;AAOA,gBAAA;AAAA,EADC,SAAS,EAAC,MAAM,QAAA,CAAQ;AAAA,GA9Dd,mBA+DX,WAAA,gBAAA,CAAA;AAOA,gBAAA;AAAA,EADC,SAAS,EAAC,MAAM,OAAA,CAAO;AAAA,GArEb,mBAsEX,WAAA,eAAA,CAAA;AAtEW,qBAAN,gBAAA;AAAA,EADN,cAAc,sBAAsB;AAAA,GACxB,kBAAA;"}
|