@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.
- package/LICENSE +21 -0
- package/README.md +2 -0
- package/dist/charts/frequency-histogram-plot.d.ts +33 -0
- package/dist/charts/frequency-histogram-plot.d.ts.map +1 -0
- package/dist/charts/frequency-histogram-plot.js +54 -0
- package/dist/charts/frequency-histogram-plot.js.map +1 -0
- package/dist/charts/histogram-vis.d.ts +57 -0
- package/dist/charts/histogram-vis.d.ts.map +1 -0
- package/dist/charts/histogram-vis.js +222 -0
- package/dist/charts/histogram-vis.js.map +1 -0
- package/dist/charts/plot.d.ts +128 -0
- package/dist/charts/plot.d.ts.map +1 -0
- package/dist/charts/plot.js +456 -0
- package/dist/charts/plot.js.map +1 -0
- package/dist/crumb-nav.d.ts +41 -0
- package/dist/crumb-nav.d.ts.map +1 -0
- package/dist/crumb-nav.js +198 -0
- package/dist/crumb-nav.js.map +1 -0
- package/dist/crumb-navigation.d.ts +30 -0
- package/dist/crumb-navigation.d.ts.map +1 -0
- package/dist/crumb-navigation.js +307 -0
- package/dist/crumb-navigation.js.map +1 -0
- package/dist/data-display.d.ts +15 -0
- package/dist/data-display.d.ts.map +1 -0
- package/dist/data-display.js +110 -0
- package/dist/data-display.js.map +1 -0
- package/dist/dial.d.ts +89 -0
- package/dist/dial.d.ts.map +1 -0
- package/dist/dial.js +506 -0
- package/dist/dial.js.map +1 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +13 -0
- package/dist/index.js.map +1 -0
- package/dist/my-element.d.ts +14 -0
- package/dist/my-element.d.ts.map +1 -0
- package/dist/my-element.js +44 -0
- package/dist/my-element.js.map +1 -0
- package/dist/selecthorizontal.d.ts +12 -0
- package/dist/selecthorizontal.d.ts.map +1 -0
- package/dist/selecthorizontal.js +46 -0
- package/dist/selecthorizontal.js.map +1 -0
- package/dist/split-layout/split-layout.d.ts +35 -0
- package/dist/split-layout/split-layout.d.ts.map +1 -0
- package/dist/split-layout/split-layout.js +220 -0
- package/dist/split-layout/split-layout.js.map +1 -0
- package/dist/svg-edit-label.d.ts +2 -0
- package/dist/svg-edit-label.d.ts.map +1 -0
- package/dist/svg-edit-label.js +110 -0
- package/dist/svg-edit-label.js.map +1 -0
- package/dist/tabs/tab-layout-item.d.ts +10 -0
- package/dist/tabs/tab-layout-item.d.ts.map +1 -0
- package/dist/tabs/tab-layout-item.js +20 -0
- package/dist/tabs/tab-layout-item.js.map +1 -0
- package/dist/tabs/tab-layout.d.ts +10 -0
- package/dist/tabs/tab-layout.d.ts.map +1 -0
- package/dist/tabs/tab-layout.js +25 -0
- package/dist/tabs/tab-layout.js.map +1 -0
- package/dist/tabs/tab-list-item.d.ts +18 -0
- package/dist/tabs/tab-list-item.d.ts.map +1 -0
- package/dist/tabs/tab-list-item.js +63 -0
- package/dist/tabs/tab-list-item.js.map +1 -0
- package/dist/tabs/tab-list.d.ts +21 -0
- package/dist/tabs/tab-list.d.ts.map +1 -0
- package/dist/tabs/tab-list.js +148 -0
- package/dist/tabs/tab-list.js.map +1 -0
- package/dist/tabs/tab-panel.d.ts +11 -0
- package/dist/tabs/tab-panel.d.ts.map +1 -0
- package/dist/tabs/tab-panel.js +30 -0
- package/dist/tabs/tab-panel.js.map +1 -0
- package/dist/tabs/tab-panels.d.ts +30 -0
- package/dist/tabs/tab-panels.d.ts.map +1 -0
- package/dist/tabs/tab-panels.js +80 -0
- package/dist/tabs/tab-panels.js.map +1 -0
- package/dist/util/circle-arc.d.ts +34 -0
- package/dist/util/circle-arc.d.ts.map +1 -0
- package/dist/util/circle-arc.js +77 -0
- package/dist/util/circle-arc.js.map +1 -0
- package/dist/util/compare.d.ts +53 -0
- package/dist/util/compare.d.ts.map +1 -0
- package/dist/util/compare.js +91 -0
- package/dist/util/compare.js.map +1 -0
- package/dist/util/content-editable.d.ts +2 -0
- package/dist/util/content-editable.d.ts.map +1 -0
- package/dist/util/content-editable.js +13 -0
- package/dist/util/content-editable.js.map +1 -0
- package/dist/util/drag-controller.d.ts +13 -0
- package/dist/util/drag-controller.d.ts.map +1 -0
- package/dist/util/drag-controller.js +21 -0
- package/dist/util/drag-controller.js.map +1 -0
- package/dist/util/key-value.d.ts +5 -0
- package/dist/util/key-value.d.ts.map +1 -0
- package/dist/util/key-value.js +30 -0
- package/dist/util/key-value.js.map +1 -0
- package/dist/util/primitive-types.d.ts +6 -0
- package/dist/util/primitive-types.d.ts.map +1 -0
- package/dist/util/primitive-types.js +2 -0
- package/dist/util/primitive-types.js.map +1 -0
- package/dist/util/svg-editable-text.d.ts +22 -0
- package/dist/util/svg-editable-text.d.ts.map +1 -0
- package/dist/util/svg-editable-text.js +121 -0
- package/dist/util/svg-editable-text.js.map +1 -0
- package/dist/util/time.d.ts +2 -0
- package/dist/util/time.d.ts.map +1 -0
- package/dist/util/time.js +2 -0
- package/dist/util/time.js.map +1 -0
- 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"}
|