@ixfx/components 0.0.2

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 (107) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +2 -0
  3. package/dist/charts/frequency-histogram-plot.d.ts +33 -0
  4. package/dist/charts/frequency-histogram-plot.d.ts.map +1 -0
  5. package/dist/charts/frequency-histogram-plot.js +54 -0
  6. package/dist/charts/frequency-histogram-plot.js.map +1 -0
  7. package/dist/charts/histogram-vis.d.ts +57 -0
  8. package/dist/charts/histogram-vis.d.ts.map +1 -0
  9. package/dist/charts/histogram-vis.js +222 -0
  10. package/dist/charts/histogram-vis.js.map +1 -0
  11. package/dist/charts/plot.d.ts +128 -0
  12. package/dist/charts/plot.d.ts.map +1 -0
  13. package/dist/charts/plot.js +456 -0
  14. package/dist/charts/plot.js.map +1 -0
  15. package/dist/crumb-nav.d.ts +41 -0
  16. package/dist/crumb-nav.d.ts.map +1 -0
  17. package/dist/crumb-nav.js +198 -0
  18. package/dist/crumb-nav.js.map +1 -0
  19. package/dist/crumb-navigation.d.ts +30 -0
  20. package/dist/crumb-navigation.d.ts.map +1 -0
  21. package/dist/crumb-navigation.js +307 -0
  22. package/dist/crumb-navigation.js.map +1 -0
  23. package/dist/data-display.d.ts +15 -0
  24. package/dist/data-display.d.ts.map +1 -0
  25. package/dist/data-display.js +110 -0
  26. package/dist/data-display.js.map +1 -0
  27. package/dist/dial.d.ts +89 -0
  28. package/dist/dial.d.ts.map +1 -0
  29. package/dist/dial.js +506 -0
  30. package/dist/dial.js.map +1 -0
  31. package/dist/index.d.ts +11 -0
  32. package/dist/index.d.ts.map +1 -0
  33. package/dist/index.js +13 -0
  34. package/dist/index.js.map +1 -0
  35. package/dist/my-element.d.ts +14 -0
  36. package/dist/my-element.d.ts.map +1 -0
  37. package/dist/my-element.js +44 -0
  38. package/dist/my-element.js.map +1 -0
  39. package/dist/selecthorizontal.d.ts +12 -0
  40. package/dist/selecthorizontal.d.ts.map +1 -0
  41. package/dist/selecthorizontal.js +46 -0
  42. package/dist/selecthorizontal.js.map +1 -0
  43. package/dist/split-layout/split-layout.d.ts +35 -0
  44. package/dist/split-layout/split-layout.d.ts.map +1 -0
  45. package/dist/split-layout/split-layout.js +220 -0
  46. package/dist/split-layout/split-layout.js.map +1 -0
  47. package/dist/svg-edit-label.d.ts +2 -0
  48. package/dist/svg-edit-label.d.ts.map +1 -0
  49. package/dist/svg-edit-label.js +110 -0
  50. package/dist/svg-edit-label.js.map +1 -0
  51. package/dist/tabs/tab-layout-item.d.ts +10 -0
  52. package/dist/tabs/tab-layout-item.d.ts.map +1 -0
  53. package/dist/tabs/tab-layout-item.js +20 -0
  54. package/dist/tabs/tab-layout-item.js.map +1 -0
  55. package/dist/tabs/tab-layout.d.ts +10 -0
  56. package/dist/tabs/tab-layout.d.ts.map +1 -0
  57. package/dist/tabs/tab-layout.js +25 -0
  58. package/dist/tabs/tab-layout.js.map +1 -0
  59. package/dist/tabs/tab-list-item.d.ts +18 -0
  60. package/dist/tabs/tab-list-item.d.ts.map +1 -0
  61. package/dist/tabs/tab-list-item.js +63 -0
  62. package/dist/tabs/tab-list-item.js.map +1 -0
  63. package/dist/tabs/tab-list.d.ts +21 -0
  64. package/dist/tabs/tab-list.d.ts.map +1 -0
  65. package/dist/tabs/tab-list.js +148 -0
  66. package/dist/tabs/tab-list.js.map +1 -0
  67. package/dist/tabs/tab-panel.d.ts +11 -0
  68. package/dist/tabs/tab-panel.d.ts.map +1 -0
  69. package/dist/tabs/tab-panel.js +30 -0
  70. package/dist/tabs/tab-panel.js.map +1 -0
  71. package/dist/tabs/tab-panels.d.ts +30 -0
  72. package/dist/tabs/tab-panels.d.ts.map +1 -0
  73. package/dist/tabs/tab-panels.js +80 -0
  74. package/dist/tabs/tab-panels.js.map +1 -0
  75. package/dist/util/circle-arc.d.ts +34 -0
  76. package/dist/util/circle-arc.d.ts.map +1 -0
  77. package/dist/util/circle-arc.js +77 -0
  78. package/dist/util/circle-arc.js.map +1 -0
  79. package/dist/util/compare.d.ts +53 -0
  80. package/dist/util/compare.d.ts.map +1 -0
  81. package/dist/util/compare.js +91 -0
  82. package/dist/util/compare.js.map +1 -0
  83. package/dist/util/content-editable.d.ts +2 -0
  84. package/dist/util/content-editable.d.ts.map +1 -0
  85. package/dist/util/content-editable.js +13 -0
  86. package/dist/util/content-editable.js.map +1 -0
  87. package/dist/util/drag-controller.d.ts +13 -0
  88. package/dist/util/drag-controller.d.ts.map +1 -0
  89. package/dist/util/drag-controller.js +21 -0
  90. package/dist/util/drag-controller.js.map +1 -0
  91. package/dist/util/key-value.d.ts +5 -0
  92. package/dist/util/key-value.d.ts.map +1 -0
  93. package/dist/util/key-value.js +30 -0
  94. package/dist/util/key-value.js.map +1 -0
  95. package/dist/util/primitive-types.d.ts +6 -0
  96. package/dist/util/primitive-types.d.ts.map +1 -0
  97. package/dist/util/primitive-types.js +2 -0
  98. package/dist/util/primitive-types.js.map +1 -0
  99. package/dist/util/svg-editable-text.d.ts +22 -0
  100. package/dist/util/svg-editable-text.d.ts.map +1 -0
  101. package/dist/util/svg-editable-text.js +121 -0
  102. package/dist/util/svg-editable-text.js.map +1 -0
  103. package/dist/util/time.d.ts +2 -0
  104. package/dist/util/time.d.ts.map +1 -0
  105. package/dist/util/time.js +2 -0
  106. package/dist/util/time.js.map +1 -0
  107. package/package.json +48 -0
@@ -0,0 +1,63 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ import { css, html, LitElement } from "lit";
8
+ import { customElement, property } from "lit/decorators.js";
9
+ /**
10
+ * CSS vars
11
+ * * --selected-colour: text colour
12
+ * * --selected-border-width: bottom border width
13
+ * * --padding
14
+ */
15
+ let TabListItemElement = class TabListItemElement extends LitElement {
16
+ constructor() {
17
+ super(...arguments);
18
+ this.closeable = true;
19
+ }
20
+ // @property({ type: Boolean })
21
+ // activated = true;
22
+ render() {
23
+ return html `<div ><slot part="header"></slot></div>`;
24
+ }
25
+ // protected createRenderRoot() {
26
+ // return this;
27
+ // }
28
+ static { this.styles = css `
29
+ :host {
30
+ --selected-colour: blue;
31
+ --selected-border-width: 1px;
32
+ --padding: 0.5ch;
33
+ --hover-background: whitesmoke;
34
+ display: inline;
35
+ user-select:none;
36
+ box-sizing: border-box;
37
+ }
38
+
39
+ :host([selected])>div {
40
+ color: var(--selected-colour);
41
+ border-bottom: var(--selected-border-width) solid var(--selected-colour);
42
+ }
43
+ div {
44
+ padding:var(--padding) calc(2*var(--padding)) var(--padding) calc(2*var(--padding));
45
+ border-bottom: var(--selected-border-width) solid transparent;
46
+
47
+ }
48
+
49
+ div:hover {
50
+ background-color: var(--hover-background);
51
+ color:unset !important;
52
+
53
+ }
54
+ `; }
55
+ };
56
+ __decorate([
57
+ property({ type: Boolean })
58
+ ], TabListItemElement.prototype, "closeable", void 0);
59
+ TabListItemElement = __decorate([
60
+ customElement('ixfx-tab-list-item')
61
+ ], TabListItemElement);
62
+ export { TabListItemElement };
63
+ //# sourceMappingURL=tab-list-item.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tab-list-item.js","sourceRoot":"","sources":["../../src/tabs/tab-list-item.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,KAAK,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAE5D;;;;;GAKG;AAEI,IAAM,kBAAkB,GAAxB,MAAM,kBAAmB,SAAQ,UAAU;IAA3C;;QAEL,cAAS,GAAG,IAAI,CAAC;IAuCnB,CAAC;IArCC,+BAA+B;IAC/B,oBAAoB;IAEpB,MAAM;QACJ,OAAO,IAAI,CAAA,yCAAyC,CAAA;IACtD,CAAC;IAED,iCAAiC;IACjC,iBAAiB;IACjB,IAAI;aACG,WAAM,GAAG,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BlB,AA1BY,CA0BZ;;AAtCD;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;qDACX;AAFN,kBAAkB;IAD9B,aAAa,CAAC,oBAAoB,CAAC;GACvB,kBAAkB,CAyC9B"}
@@ -0,0 +1,21 @@
1
+ import { LitElement } from "lit";
2
+ import { TabListItemElement } from "./tab-list-item.js";
3
+ /**
4
+ * Events
5
+ * * 'change' - new tab selected { previous:string, selected:string, for:string }
6
+ */
7
+ export declare class TabListElement extends LitElement {
8
+ #private;
9
+ horizontal: boolean;
10
+ _listItems: TabListItemElement[];
11
+ render(): import("lit-html").TemplateResult<1>;
12
+ getSelectedElement(): TabListItemElement | undefined;
13
+ selectElement(el: HTMLElement): void;
14
+ static styles: import("lit").CSSResult;
15
+ }
16
+ declare global {
17
+ interface HTMLElementTagNameMap {
18
+ "ixfx-tab-list": TabListElement;
19
+ }
20
+ }
21
+ //# sourceMappingURL=tab-list.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tab-list.d.ts","sourceRoot":"","sources":["../../src/tabs/tab-list.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,UAAU,EAAE,MAAM,KAAK,CAAC;AAE5C,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAExD;;;GAGG;AACH,qBACa,cAAe,SAAQ,UAAU;;IAE5C,UAAU,UAAQ;IAGlB,UAAU,EAAG,kBAAkB,EAAE,CAAC;IAElC,MAAM;IAyBN,kBAAkB;IAalB,aAAa,CAAC,EAAE,EAAE,WAAW;IA6D7B,MAAM,CAAC,MAAM,0BAsBZ;CACF;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,eAAe,EAAE,cAAc,CAAC;KACjC;CACF"}
@@ -0,0 +1,148 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ import { css, html, LitElement } from "lit";
8
+ import { customElement, property, queryAssignedElements } from "lit/decorators.js";
9
+ import { TabListItemElement } from "./tab-list-item.js";
10
+ /**
11
+ * Events
12
+ * * 'change' - new tab selected { previous:string, selected:string, for:string }
13
+ */
14
+ let TabListElement = class TabListElement extends LitElement {
15
+ constructor() {
16
+ super(...arguments);
17
+ this.horizontal = true;
18
+ this.#onKeyUp = (event) => {
19
+ const key = event.key;
20
+ if (key === `ArrowUp` && !this.horizontal) {
21
+ this.#selectPrevious();
22
+ return;
23
+ }
24
+ else if (key === `ArrowDown` && !this.horizontal) {
25
+ this.#selectNext();
26
+ return;
27
+ }
28
+ else if (key === `ArrowRight` && this.horizontal) {
29
+ this.#selectNext();
30
+ return;
31
+ }
32
+ else if (key === `ArrowLeft` && this.horizontal) {
33
+ this.#selectPrevious();
34
+ return;
35
+ }
36
+ };
37
+ this.#onSlotClick = (event) => {
38
+ this.focus();
39
+ const t = event.target;
40
+ const previous = this.getSelectedElement();
41
+ this.selectElement(t);
42
+ const forId = t.getAttribute(`for`);
43
+ this.dispatchEvent(new CustomEvent(`change`, {
44
+ detail: {
45
+ previous, selected: t.id, for: forId ?? ``
46
+ }
47
+ }));
48
+ };
49
+ }
50
+ render() {
51
+ return html `
52
+ <div tabindex=0 @keyup=${this.#onKeyUp} @click=${this.#onSlotClick} id="container" class=${this.horizontal ? `horizontal` : `vertical`}>
53
+ <slot></slot>
54
+ </div>`;
55
+ }
56
+ #onKeyUp;
57
+ getSelectedElement() {
58
+ for (const el of this._listItems) {
59
+ if (this.#isSelected(el))
60
+ return el;
61
+ }
62
+ }
63
+ #isSelected(el) {
64
+ const v = el.getAttribute(`selected`);
65
+ if (v === null)
66
+ return false;
67
+ return (el.hasAttribute(`selected`));
68
+ }
69
+ selectElement(el) {
70
+ const existing = this.getSelectedElement();
71
+ if (existing) {
72
+ existing.removeAttribute(`selected`);
73
+ }
74
+ el.setAttribute(`selected`, ``);
75
+ }
76
+ #selectNext() {
77
+ let found = false;
78
+ for (const el of this._listItems) {
79
+ if (this.#isSelected(el) && !found) {
80
+ found = true;
81
+ }
82
+ else if (found) {
83
+ this.selectElement(el);
84
+ break;
85
+ }
86
+ }
87
+ }
88
+ #selectPrevious() {
89
+ let prev;
90
+ for (const el of this._listItems) {
91
+ if (this.#isSelected(el) && prev) {
92
+ this.selectElement(prev);
93
+ }
94
+ else {
95
+ prev = el;
96
+ }
97
+ }
98
+ }
99
+ #onSlotClick;
100
+ // #updateSelection() {
101
+ // for (const el of this._listItems) {
102
+ // if (el.id === this.selectedId) {
103
+ // el.classList.add(`activated`);
104
+ // el.setAttribute(`activated`, ``);
105
+ // } else {
106
+ // el.classList.remove(`activated`);
107
+ // el.removeAttribute(`activated`);
108
+ // }
109
+ // }
110
+ // }
111
+ // protected updated(_changedProperties: PropertyValues): void {
112
+ // this.#updateSelection();
113
+ // }
114
+ static { this.styles = css `
115
+ :host {
116
+ display: inline-block;
117
+ --activated-colour: blue;
118
+ --colur: pink;
119
+ }
120
+ text {
121
+ user-select:none;
122
+ }
123
+ #container {
124
+ display:flex;
125
+ }
126
+ #container.horizontal {
127
+ flex-direction: row;
128
+ }
129
+ #container.vertical {
130
+ flex-direction: column;
131
+ }
132
+
133
+ ::slotted(.activated) {
134
+ --colour: var(--activated-colour);
135
+ }
136
+ `; }
137
+ };
138
+ __decorate([
139
+ property({ type: Boolean })
140
+ ], TabListElement.prototype, "horizontal", void 0);
141
+ __decorate([
142
+ queryAssignedElements()
143
+ ], TabListElement.prototype, "_listItems", void 0);
144
+ TabListElement = __decorate([
145
+ customElement('ixfx-tab-list')
146
+ ], TabListElement);
147
+ export { TabListElement };
148
+ //# sourceMappingURL=tab-list.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tab-list.js","sourceRoot":"","sources":["../../src/tabs/tab-list.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import { LitElement } from "lit";
2
+ export declare class TabPanelElement extends LitElement {
3
+ render(): import("lit-html").TemplateResult<1>;
4
+ static styles: import("lit").CSSResult;
5
+ }
6
+ declare global {
7
+ interface HTMLElementTagNameMap {
8
+ "ixfx-tab-panel": TabPanelElement;
9
+ }
10
+ }
11
+ //# sourceMappingURL=tab-panel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tab-panel.d.ts","sourceRoot":"","sources":["../../src/tabs/tab-panel.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,UAAU,EAAE,MAAM,KAAK,CAAC;AAG5C,qBACa,eAAgB,SAAQ,UAAU;IAE7C,MAAM;IAGN,MAAM,CAAC,MAAM,0BAWZ;CACF;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,gBAAgB,EAAE,eAAe,CAAC;KACnC;CACF"}
@@ -0,0 +1,30 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ import { css, html, LitElement } from "lit";
8
+ import { customElement } from "lit/decorators.js";
9
+ let TabPanelElement = class TabPanelElement extends LitElement {
10
+ render() {
11
+ return html `<slot></slot>`;
12
+ }
13
+ static { this.styles = css `
14
+ :host {
15
+ display:none;
16
+ height:100%;
17
+ width:100%;
18
+ }
19
+
20
+ :host([selected]) {
21
+ background: whitesmoke;
22
+ display:block;
23
+ }
24
+ `; }
25
+ };
26
+ TabPanelElement = __decorate([
27
+ customElement('ixfx-tab-panel')
28
+ ], TabPanelElement);
29
+ export { TabPanelElement };
30
+ //# sourceMappingURL=tab-panel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tab-panel.js","sourceRoot":"","sources":["../../src/tabs/tab-panel.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,KAAK,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAG3C,IAAM,eAAe,GAArB,MAAM,eAAgB,SAAQ,UAAU;IAE7C,MAAM;QACJ,OAAO,IAAI,CAAA,eAAe,CAAA;IAC5B,CAAC;aACM,WAAM,GAAG,GAAG,CAAA;;;;;;;;;;;GAWlB,AAXY,CAWZ;;AAhBU,eAAe;IAD3B,aAAa,CAAC,gBAAgB,CAAC;GACnB,eAAe,CAiB3B"}
@@ -0,0 +1,30 @@
1
+ import { LitElement } from "lit";
2
+ import { TabPanelElement } from "./tab-panel.js";
3
+ import { TabListElement } from "./tab-list.js";
4
+ export declare class TabPanelsElement extends LitElement {
5
+ #private;
6
+ _listItems: TabPanelElement[];
7
+ /**
8
+ * Triggered when a panel is being de-selected
9
+ */
10
+ onUnselectedPanel?: (id: string, el: TabPanelElement) => void;
11
+ /**
12
+ * Triggered before panel is selected
13
+ */
14
+ onSelectingPanel?: (id: string, el: TabPanelElement) => void;
15
+ /**
16
+ * Triggered after panel is selected
17
+ */
18
+ onSelectedPanel?: (id: string, el: TabPanelElement) => void;
19
+ render(): import("lit-html").TemplateResult<1>;
20
+ getSelectedElement(): TabPanelElement | undefined;
21
+ syncWithList(el: TabListElement): void;
22
+ selectPanel(id: string): boolean | undefined;
23
+ static styles: import("lit").CSSResult;
24
+ }
25
+ declare global {
26
+ interface HTMLElementTagNameMap {
27
+ "ixfx-tab-panels": TabPanelsElement;
28
+ }
29
+ }
30
+ //# sourceMappingURL=tab-panels.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tab-panels.d.ts","sourceRoot":"","sources":["../../src/tabs/tab-panels.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,UAAU,EAAE,MAAM,KAAK,CAAC;AAE5C,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAE/C,qBACa,gBAAiB,SAAQ,UAAU;;IAG9C,UAAU,EAAG,eAAe,EAAE,CAAC;IAE/B;;OAEG;IACH,iBAAiB,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,eAAe,KAAK,IAAI,CAAA;IAC7D;;OAEG;IACH,gBAAgB,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,eAAe,KAAK,IAAI,CAAA;IAC5D;;OAEG;IACH,eAAe,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,eAAe,KAAK,IAAI,CAAA;IAC3D,MAAM;IAIN,kBAAkB;IA6BlB,YAAY,CAAC,EAAE,EAAE,cAAc;IAQ/B,WAAW,CAAC,EAAE,EAAE,MAAM;IAiBtB,MAAM,CAAC,MAAM,0BAKZ;CACF;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,iBAAiB,EAAE,gBAAgB,CAAC;KACrC;CACF"}
@@ -0,0 +1,80 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ import { css, html, LitElement } from "lit";
8
+ import { customElement, queryAssignedElements } from "lit/decorators.js";
9
+ import { TabPanelElement } from "./tab-panel.js";
10
+ import { TabListElement } from "./tab-list.js";
11
+ let TabPanelsElement = class TabPanelsElement extends LitElement {
12
+ render() {
13
+ return html `<slot></slot>`;
14
+ }
15
+ getSelectedElement() {
16
+ for (const el of this._listItems) {
17
+ if (this.#isSelected(el))
18
+ return el;
19
+ }
20
+ }
21
+ #isSelected(el) {
22
+ //const v = el.getAttribute(`selected`);
23
+ //console.log(`id: ${ el.id } v: ${ v }`);
24
+ return el.hasAttribute(`selected`);
25
+ }
26
+ #unselect(el) {
27
+ el.removeAttribute(`selected`);
28
+ if (this.onUnselectedPanel) {
29
+ this.onUnselectedPanel(el.id, el);
30
+ }
31
+ }
32
+ #select(el) {
33
+ if (this.onSelectingPanel) {
34
+ this.onSelectingPanel(el.id, el);
35
+ }
36
+ el.setAttribute(`selected`, ``);
37
+ if (this.onSelectedPanel) {
38
+ this.onSelectedPanel(el.id, el);
39
+ }
40
+ }
41
+ syncWithList(el) {
42
+ const t = el.getSelectedElement();
43
+ if (!t)
44
+ return;
45
+ const forEl = t.getAttribute(`for`);
46
+ if (!forEl)
47
+ return;
48
+ this.selectPanel(forEl);
49
+ }
50
+ selectPanel(id) {
51
+ const current = this.getSelectedElement();
52
+ if (current) {
53
+ if (current.id === id)
54
+ return;
55
+ this.#unselect(current);
56
+ }
57
+ let found = false;
58
+ for (const el of this._listItems) {
59
+ if (el.id === id) {
60
+ this.#select(el);
61
+ found = true;
62
+ }
63
+ }
64
+ return found;
65
+ }
66
+ static { this.styles = css `
67
+ :host {
68
+ display: block;
69
+ }
70
+
71
+ `; }
72
+ };
73
+ __decorate([
74
+ queryAssignedElements()
75
+ ], TabPanelsElement.prototype, "_listItems", void 0);
76
+ TabPanelsElement = __decorate([
77
+ customElement('ixfx-tab-panels')
78
+ ], TabPanelsElement);
79
+ export { TabPanelsElement };
80
+ //# sourceMappingURL=tab-panels.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tab-panels.js","sourceRoot":"","sources":["../../src/tabs/tab-panels.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,KAAK,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAG,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAC1E,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAGxC,IAAM,gBAAgB,GAAtB,MAAM,gBAAiB,SAAQ,UAAU;IAiB9C,MAAM;QACJ,OAAO,IAAI,CAAA,eAAe,CAAA;IAC5B,CAAC;IAED,kBAAkB;QAChB,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACjC,IAAI,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;gBAAE,OAAO,EAAE,CAAC;QACtC,CAAC;IACH,CAAC;IAED,WAAW,CAAC,EAAmB;QAC7B,wCAAwC;QACxC,0CAA0C;QAC1C,OAAO,EAAE,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;IACrC,CAAC;IAED,SAAS,CAAC,EAAmB;QAC3B,EAAE,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC;QAC/B,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAC3B,IAAI,CAAC,iBAAiB,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;QACpC,CAAC;IACH,CAAC;IAED,OAAO,CAAC,EAAmB;QACzB,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAC1B,IAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;QACnC,CAAC;QACD,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;QAChC,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YACzB,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;QAClC,CAAC;IACH,CAAC;IAED,YAAY,CAAC,EAAkB;QAC7B,MAAM,CAAC,GAAG,EAAE,CAAC,kBAAkB,EAAE,CAAC;QAClC,IAAI,CAAC,CAAC;YAAE,OAAO;QACf,MAAM,KAAK,GAAG,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;QACpC,IAAI,CAAC,KAAK;YAAE,OAAO;QACnB,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;IAC1B,CAAC;IAED,WAAW,CAAC,EAAU;QACpB,MAAM,OAAO,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAC1C,IAAI,OAAO,EAAE,CAAC;YACZ,IAAI,OAAO,CAAC,EAAE,KAAK,EAAE;gBAAE,OAAO;YAC9B,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QAC1B,CAAC;QAED,IAAI,KAAK,GAAG,KAAK,CAAC;QAClB,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACjC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC;gBACjB,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;gBACjB,KAAK,GAAG,IAAI,CAAC;YACf,CAAC;QACH,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;aAEM,WAAM,GAAG,GAAG,CAAA;;;;;GAKlB,AALY,CAKZ;;AA7ED;IADC,qBAAqB,EAAE;oDACO;AAHpB,gBAAgB;IAD5B,aAAa,CAAC,iBAAiB,CAAC;GACpB,gBAAgB,CAiF5B"}
@@ -0,0 +1,34 @@
1
+ import type { Point } from "@ixfx/geometry/point";
2
+ export type CircleArcAnchor = `south` | `south-east` | `east` | `north`;
3
+ export type CircleArc = {
4
+ radius: number;
5
+ anchor?: CircleArcAnchor;
6
+ rangeRadian?: number;
7
+ x: number;
8
+ y: number;
9
+ };
10
+ export type CircleArcDefined = CircleArc & {
11
+ startPoint: Point;
12
+ startAngle: number;
13
+ endPoint: Point;
14
+ endAngle: number;
15
+ midPoint: Point;
16
+ midAngle: number;
17
+ rotation: number;
18
+ rangeRadian: number;
19
+ anchor: CircleArcAnchor;
20
+ invert: boolean;
21
+ };
22
+ export declare const precompute: (arc: CircleArc) => CircleArcDefined;
23
+ export declare const interpolatePoint: (arc: CircleArcDefined, t: number) => Point;
24
+ export type ArcPart = {
25
+ startPoint: Point;
26
+ startAngle: number;
27
+ endPoint: Point;
28
+ endAngle: number;
29
+ range: number;
30
+ };
31
+ export declare const arcPart: (track: CircleArcDefined, startAngle: number, endAngle: number, cw: boolean) => ArcPart;
32
+ export declare const partToSvg: (arc: CircleArc, part: ArcPart, largeArc?: boolean, clockwise?: boolean) => string[];
33
+ export declare const toSvg: (arc: CircleArcDefined, largeArc?: boolean, clockwise?: boolean) => string[];
34
+ //# sourceMappingURL=circle-arc.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"circle-arc.d.ts","sourceRoot":"","sources":["../../src/util/circle-arc.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAKlD,MAAM,MAAM,eAAe,GAAG,OAAO,GAAG,YAAY,GAAG,MAAM,GAAG,OAAO,CAAC;AAExE,MAAM,MAAM,SAAS,GAAG;IACtB,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,eAAe,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAA;CACV,CAAA;AAED,MAAM,MAAM,gBAAgB,GAAG,SAAS,GAAG;IACzC,UAAU,EAAE,KAAK,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,KAAK,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,KAAK,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAA;IAChB,WAAW,EAAE,MAAM,CAAA;IACnB,MAAM,EAAE,eAAe,CAAA;IACvB,MAAM,EAAE,OAAO,CAAA;CAChB,CAAA;AAED,eAAO,MAAM,UAAU,GAAI,KAAK,SAAS,KAAG,gBA2C3C,CAAA;AAED,eAAO,MAAM,gBAAgB,GAAI,KAAK,gBAAgB,EAAE,GAAG,MAAM,KAAG,KAGnE,CAAA;AAGD,MAAM,MAAM,OAAO,GAAG;IACpB,UAAU,EAAE,KAAK,CAAA;IACjB,UAAU,EAAE,MAAM,CAAA;IAClB,QAAQ,EAAE,KAAK,CAAA;IACf,QAAQ,EAAE,MAAM,CAAA;IAChB,KAAK,EAAE,MAAM,CAAA;CACd,CAAA;AACD,eAAO,MAAM,OAAO,GAAI,OAAO,gBAAgB,EAAE,YAAY,MAAM,EAAE,UAAU,MAAM,EAAE,IAAI,OAAO,KAAG,OAcpG,CAAA;AAED,eAAO,MAAM,SAAS,GAAI,KAAK,SAAS,EAAE,MAAM,OAAO,EAAE,kBAAe,EAAE,mBAAgB,aAMzF,CAAA;AACD,eAAO,MAAM,KAAK,GAAI,KAAK,gBAAgB,EAAE,kBAAe,EAAE,mBAAgB,aAM7E,CAAA"}
@@ -0,0 +1,77 @@
1
+ import { Circles, radianToDegree, radianArc } from "@ixfx/geometry";
2
+ const piPi = Math.PI * 2;
3
+ export const precompute = (arc) => {
4
+ let rotation = 0;
5
+ const anchor = arc.anchor ?? `south`;
6
+ const rangeRadian = arc.rangeRadian ?? radianToDegree(300);
7
+ let invert = false;
8
+ switch (anchor) {
9
+ case `east`:
10
+ break;
11
+ case `south-east`:
12
+ rotation = -Math.PI / 4; // 0 at south-east
13
+ break;
14
+ case `north`:
15
+ rotation = Math.PI / 2;
16
+ invert = true;
17
+ break;
18
+ case `south`:
19
+ default:
20
+ //90 - (range / 2);
21
+ rotation = (Math.PI * 3) / 2;
22
+ }
23
+ const rangeRemainder = piPi - rangeRadian;
24
+ let startAngle = rotation - (rangeRemainder / 2);
25
+ let endAngle = rotation + (rangeRemainder / 2);
26
+ const midAngle = rotation - Math.PI;
27
+ if (invert) {
28
+ const oldStart = startAngle;
29
+ startAngle = endAngle;
30
+ endAngle = oldStart;
31
+ }
32
+ //console.log(`start: ${ startAngle } end:${ endAngle } range: ${ rangeRadian } remain: ${ rangeRemainder }`);
33
+ const startPoint = Circles.pointOnPerimeter(arc, startAngle);
34
+ const endPoint = Circles.pointOnPerimeter(arc, endAngle);
35
+ const midPoint = Circles.pointOnPerimeter(arc, midAngle);
36
+ return {
37
+ ...arc,
38
+ anchor,
39
+ rangeRadian,
40
+ midPoint, midAngle,
41
+ startPoint, endPoint, rotation,
42
+ startAngle, endAngle, invert
43
+ };
44
+ };
45
+ export const interpolatePoint = (arc, t) => {
46
+ const angle = arc.rangeRadian * t;
47
+ return Circles.pointOnPerimeter(arc, arc.startAngle - angle);
48
+ };
49
+ export const arcPart = (track, startAngle, endAngle, cw) => {
50
+ const startPoint = Circles.pointOnPerimeter(track, startAngle);
51
+ const endPoint = Circles.pointOnPerimeter(track, endAngle);
52
+ return {
53
+ startPoint, endPoint, startAngle, endAngle,
54
+ range: radianArc(startAngle, endAngle, cw)
55
+ };
56
+ // const startPoint = start ? interpolatePoint(arc, start) : arc.startPoint;
57
+ // const endPoint = end ? interpolatePoint(arc, end) : arc.endPoint;
58
+ // return {
59
+ // ...arc,
60
+ // startPoint, endPoint
61
+ // }
62
+ };
63
+ export const partToSvg = (arc, part, largeArc = true, clockwise = true) => {
64
+ const rotation = 0;
65
+ return [
66
+ `M ${part.startPoint.x} ${part.startPoint.y}`,
67
+ `A ${arc.radius} ${arc.radius} ${rotation} ${largeArc ? `1` : `0`} ${clockwise ? `1` : `0`} ${part.endPoint.x} ${part.endPoint.y}`
68
+ ];
69
+ };
70
+ export const toSvg = (arc, largeArc = true, clockwise = true) => {
71
+ const rotation = 0;
72
+ return [
73
+ `M ${arc.startPoint.x} ${arc.startPoint.y}`,
74
+ `A ${arc.radius} ${arc.radius} ${rotation} ${largeArc ? `1` : `0`} ${clockwise ? `1` : `0`} ${arc.endPoint.x} ${arc.endPoint.y}`
75
+ ];
76
+ };
77
+ //# sourceMappingURL=circle-arc.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"circle-arc.js","sourceRoot":"","sources":["../../src/util/circle-arc.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,53 @@
1
+ export type CompareResult = number;
2
+ export type Comparer<V> = (a: V, b: V) => CompareResult;
3
+ /**
4
+ * Sort numbers in ascending order.
5
+ *
6
+ * ```js
7
+ * [10, 4, 5, 0].sort(numericComparer);
8
+ * // Yields: [0, 4, 5, 10]
9
+ * [10, 4, 5, 0].sort(comparerInverse(numericComparer));
10
+ * // Yields: [ 10, 5, 4, 0]
11
+ * ```
12
+ * @param x
13
+ * @param y
14
+ * @returns
15
+ */
16
+ export declare const numericComparer: (x: number, y: number) => CompareResult;
17
+ /**
18
+ * Compares numbers by numeric value, otherwise uses the default
19
+ * logic of string comparison.
20
+ *
21
+ * Is an ascending sort:
22
+ * * b, a, c -> a, b, c
23
+ * * 10, 5, 100 -> 5, 10, 100
24
+ *
25
+ * Returns -1 if x is less than y
26
+ * Returns 1 if x is greater than y
27
+ * Returns 0 if x is the same as y
28
+ * @param x
29
+ * @param y
30
+ * @see {@link comparerInverse} Inverted order
31
+ * @returns
32
+ */
33
+ export declare const defaultComparer: (x: unknown, y: unknown) => CompareResult;
34
+ /**
35
+ * Default sort comparer, following same sematics as Array.sort.
36
+ * Consider using {@link defaultComparer} to get more logical sorting of numbers.
37
+ *
38
+ * Note: numbers are sorted in alphabetical order, eg:
39
+ * ```js
40
+ * [ 10, 20, 5, 100 ].sort(jsComparer); // same as .sort()
41
+ * // Yields: [10, 100, 20, 5]
42
+ * ```
43
+ *
44
+ * Returns -1 if x is less than y
45
+ * Returns 1 if x is greater than y
46
+ * Returns 0 if x is the same as y
47
+ * @param x
48
+ * @param y
49
+ * @returns
50
+ */
51
+ export declare const jsComparer: (x: unknown, y: unknown) => CompareResult;
52
+ export declare const defaultToString: (object: unknown) => string;
53
+ //# sourceMappingURL=compare.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compare.d.ts","sourceRoot":"","sources":["../../src/util/compare.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,aAAa,GAAG,MAAM,CAAC;AACnC,MAAM,MAAM,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,aAAa,CAAC;AAExD;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,eAAe,GAAI,GAAG,MAAM,EAAE,GAAG,MAAM,KAAG,aAKtD,CAAC;AAEF;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,eAAe,GAAI,GAAG,OAAO,EAAE,GAAG,OAAO,KAAG,aAKxD,CAAC;AAGF;;;;;;;;;;;;;;;;GAgBG;AAEH,eAAO,MAAM,UAAU,GAAI,GAAG,OAAO,EAAE,GAAG,OAAO,KAAG,aAcnD,CAAC;AAEF,eAAO,MAAM,eAAe,GAAI,QAAQ,OAAO,KAAG,MAUjD,CAAC"}