@ixfx/components 0.6.2 → 0.7.0

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 (152) hide show
  1. package/bundle/index.d.ts +1490 -615
  2. package/bundle/index.d.ts.map +1 -1
  3. package/bundle/index.js +20477 -15855
  4. package/bundle/index.js.map +1 -1
  5. package/bundle/style.css +1 -1
  6. package/dist/ac-text.js +3 -2
  7. package/dist/ac-text.js.map +1 -1
  8. package/dist/ac-token.js +3 -2
  9. package/dist/ac-token.js.map +1 -1
  10. package/dist/{button-Bn0BuLpO.js → button-Dat2yHAU.js} +4 -3
  11. package/dist/button-Dat2yHAU.js.map +1 -0
  12. package/dist/button.js +1 -1
  13. package/dist/checkbox.js +1 -1
  14. package/dist/{colour-picker-0stHB90J.js → colour-picker-BSDBL-QL.js} +4 -3
  15. package/dist/{colour-picker-0stHB90J.js.map → colour-picker-BSDBL-QL.js.map} +1 -1
  16. package/dist/colour-picker.js +1 -1
  17. package/dist/crumbs.js +4 -2
  18. package/dist/crumbs.js.map +1 -1
  19. package/dist/data-display.js +1 -1
  20. package/dist/data-grid.js +4 -2
  21. package/dist/data-grid.js.map +1 -1
  22. package/dist/{defaults-BCiDhZbF.js → defaults-BkWCPJFL.js} +3 -20
  23. package/dist/defaults-BkWCPJFL.js.map +1 -0
  24. package/dist/editable-label-rzXkjf1H.d.ts +75 -0
  25. package/dist/editable-label-rzXkjf1H.d.ts.map +1 -0
  26. package/dist/editable-label.d.ts +2 -75
  27. package/dist/editable-label.js +2 -1
  28. package/dist/editable-label.js.map +1 -1
  29. package/dist/{fallbacks-DEE1nCTt.js → fallbacks-DNI9xt0F.js} +2 -2
  30. package/dist/{fallbacks-DEE1nCTt.js.map → fallbacks-DNI9xt0F.js.map} +1 -1
  31. package/dist/{grouped-item-lister-_pMDwIo1.d.ts → grouped-item-lister-DnWB-eFT.d.ts} +2 -2
  32. package/dist/{grouped-item-lister-_pMDwIo1.d.ts.map → grouped-item-lister-DnWB-eFT.d.ts.map} +1 -1
  33. package/dist/grouped-item-lister.d.ts +1 -1
  34. package/dist/{icons-Bm2ByQ3s.js → icon-CvnPanhA.js} +3 -6
  35. package/dist/icon-CvnPanhA.js.map +1 -0
  36. package/dist/icons.js +8 -2
  37. package/dist/icons.js.map +1 -0
  38. package/dist/index-CG2vIgPv.d.ts +101 -0
  39. package/dist/index-CG2vIgPv.d.ts.map +1 -0
  40. package/dist/index.d.ts +655 -65
  41. package/dist/index.d.ts.map +1 -1
  42. package/dist/index.js +3682 -924
  43. package/dist/index.js.map +1 -1
  44. package/dist/interaction-D5XdKzbR.js +2 -0
  45. package/dist/labelled-radial-input.js +2 -1
  46. package/dist/labelled-radial-input.js.map +1 -1
  47. package/dist/labelled-slider-input-DzigjMwP.js +808 -0
  48. package/dist/labelled-slider-input-DzigjMwP.js.map +1 -0
  49. package/dist/labelled-slider-input.d.ts +2 -0
  50. package/dist/labelled-slider-input.js +2 -0
  51. package/dist/{types-DlVNJez_.d.ts → list-selection-types-DSuRNWpx.d.ts} +10 -2
  52. package/dist/list-selection-types-DSuRNWpx.d.ts.map +1 -0
  53. package/dist/menu-BjRvlgPy.js +825 -0
  54. package/dist/menu-BjRvlgPy.js.map +1 -0
  55. package/dist/menu-item-B-zYrTTi.js +797 -0
  56. package/dist/menu-item-B-zYrTTi.js.map +1 -0
  57. package/dist/menu.js +2 -1
  58. package/dist/miller.d.ts +1 -1
  59. package/dist/miller.js +3 -2
  60. package/dist/miller.js.map +1 -1
  61. package/dist/narrowed-text.js +4 -2
  62. package/dist/narrowed-text.js.map +1 -1
  63. package/dist/notifier.js +3 -2
  64. package/dist/notifier.js.map +1 -1
  65. package/dist/panel.d.ts +13 -13
  66. package/dist/panel.d.ts.map +1 -1
  67. package/dist/panel.js +37 -253
  68. package/dist/panel.js.map +1 -1
  69. package/dist/plots.js +1 -1
  70. package/dist/polar-pad.js +1 -1
  71. package/dist/{radial-input-Dk8Wydp5.js → radial-input-Dp5qz0ly.js} +2 -2
  72. package/dist/{radial-input-Dk8Wydp5.js.map → radial-input-Dp5qz0ly.js.map} +1 -1
  73. package/dist/radial-input.js +1 -1
  74. package/dist/range-input.js +1 -1
  75. package/dist/range.js +1 -1
  76. package/dist/registry-CkW7q09Q.js +21 -0
  77. package/dist/registry-CkW7q09Q.js.map +1 -0
  78. package/dist/select-horiz.js +3 -2
  79. package/dist/select-horiz.js.map +1 -1
  80. package/dist/{slider-input-XppH3vcy.d.ts → slider-input-BfRUW2ZB.d.ts} +16 -3
  81. package/dist/slider-input-BfRUW2ZB.d.ts.map +1 -0
  82. package/dist/{slider-input-CT4gcF-o.js → slider-input-De4eoT11.js} +382 -67
  83. package/dist/slider-input-De4eoT11.js.map +1 -0
  84. package/dist/slider-input.d.ts +1 -1
  85. package/dist/slider-input.js +1 -1
  86. package/dist/snackbar.js +1 -1
  87. package/dist/split-layout-BFSbUZQv.js +969 -0
  88. package/dist/split-layout-BFSbUZQv.js.map +1 -0
  89. package/dist/split-layout-JK3xWVX2.d.ts +179 -0
  90. package/dist/split-layout-JK3xWVX2.d.ts.map +1 -0
  91. package/dist/split-layout.d.ts +2 -60
  92. package/dist/split-layout.js +1 -617
  93. package/dist/style.css +1 -1
  94. package/dist/swipe.js +1 -1
  95. package/dist/{tab-list-D_1cYhB_.d.ts → tab-list-MPwq_1Jj.d.ts} +2 -1
  96. package/dist/tab-list-MPwq_1Jj.d.ts.map +1 -0
  97. package/dist/tabs.d.ts +1 -1
  98. package/dist/tabs.js +96 -14
  99. package/dist/tabs.js.map +1 -1
  100. package/dist/{tickled-controller-BtevrRLV.d.ts → tickled-controller-CRzdIEjJ.d.ts} +7 -1
  101. package/dist/tickled-controller-CRzdIEjJ.d.ts.map +1 -0
  102. package/dist/{tickled-controller-DkAU-0qL.js → tickled-controller-h9GmJ_bU.js} +8 -2
  103. package/dist/tickled-controller-h9GmJ_bU.js.map +1 -0
  104. package/dist/titlebar-DaCfpliv.d.ts +50 -0
  105. package/dist/titlebar-DaCfpliv.d.ts.map +1 -0
  106. package/dist/titlebar.d.ts +2 -0
  107. package/dist/titlebar.js +324 -0
  108. package/dist/titlebar.js.map +1 -0
  109. package/dist/{tree-BO6BXI2b.js → tree-Ch4W8qXQ.js} +4 -3
  110. package/dist/{tree-BO6BXI2b.js.map → tree-Ch4W8qXQ.js.map} +1 -1
  111. package/dist/tree.d.ts +1 -1
  112. package/dist/tree.js +1 -1
  113. package/dist/vertical-list-ClnqTkF3.js +814 -0
  114. package/dist/vertical-list-ClnqTkF3.js.map +1 -0
  115. package/dist/vertical-list.d.ts +8 -9
  116. package/dist/vertical-list.d.ts.map +1 -1
  117. package/dist/vertical-list.js +1 -736
  118. package/dist/{xy-axis-B6yMjckW.js → xy-axis-CxHC8z5E.js} +109 -3
  119. package/dist/xy-axis-CxHC8z5E.js.map +1 -0
  120. package/dist/xy-pad.js +1 -1
  121. package/docs-user/README.md +5 -0
  122. package/docs-user/detail-list.md +398 -0
  123. package/docs-user/dock.md +310 -0
  124. package/docs-user/index.json +27 -2
  125. package/docs-user/labelled-slider-input.md +198 -0
  126. package/docs-user/llms.txt +6 -1
  127. package/docs-user/panel.md +20 -1
  128. package/docs-user/slider-input.md +55 -15
  129. package/docs-user/split-layout.md +136 -170
  130. package/docs-user/tabs.md +34 -0
  131. package/docs-user/titlebar.md +102 -0
  132. package/docs-user/toolbar.md +95 -22
  133. package/docs-user/twosplit-layout.md +254 -0
  134. package/docs-user/user-catalog.md +8 -1
  135. package/llms.txt +6 -1
  136. package/package.json +1 -2
  137. package/dist/button-Bn0BuLpO.js.map +0 -1
  138. package/dist/defaults-BCiDhZbF.js.map +0 -1
  139. package/dist/editable-label.d.ts.map +0 -1
  140. package/dist/icons-Bm2ByQ3s.js.map +0 -1
  141. package/dist/menu-DIfU70AA.js +0 -1609
  142. package/dist/menu-DIfU70AA.js.map +0 -1
  143. package/dist/slider-input-CT4gcF-o.js.map +0 -1
  144. package/dist/slider-input-XppH3vcy.d.ts.map +0 -1
  145. package/dist/split-layout.d.ts.map +0 -1
  146. package/dist/split-layout.js.map +0 -1
  147. package/dist/tab-list-D_1cYhB_.d.ts.map +0 -1
  148. package/dist/tickled-controller-BtevrRLV.d.ts.map +0 -1
  149. package/dist/tickled-controller-DkAU-0qL.js.map +0 -1
  150. package/dist/types-DlVNJez_.d.ts.map +0 -1
  151. package/dist/vertical-list.js.map +0 -1
  152. package/dist/xy-axis-B6yMjckW.js.map +0 -1
@@ -1,618 +1,2 @@
1
- import { t as themeFallbacks } from "./fallbacks-DEE1nCTt.js";
2
- import { n as safeCustomElement, t as __decorate } from "./decorate-VRK8rslU.js";
3
- import { LitElement, css, html } from "lit";
4
- import { property, state } from "lit/decorators.js";
5
- import { clamp } from "@ixfx/numbers";
6
- //#region src/split-layout/split-layout.ts
7
- let SplitLayoutElement = class SplitLayoutElement extends LitElement {
8
- constructor(..._args) {
9
- super(..._args);
10
- this.layout = `vertical`;
11
- this.sizeA = ``;
12
- this.sizeB = ``;
13
- this.fixedA = false;
14
- this.fixedB = false;
15
- this.collapsible = false;
16
- this.collapsedA = false;
17
- this.collapsedB = false;
18
- this.minSizeA = ``;
19
- this.maxSizeA = ``;
20
- this.minSizeB = ``;
21
- this.maxSizeB = ``;
22
- this._hasCorner = false;
23
- this.#startSizeA = ``;
24
- this.#startSizeB = ``;
25
- this.#cornerStartX = 0;
26
- this.#cornerStartY = 0;
27
- this.#nestedSplitInitialSizeA = ``;
28
- this.#pendingNestedUpdate = null;
29
- this.#hysteresisThreshold = .1;
30
- this.#onResizeHandleDown = (event) => {
31
- event.preventDefault();
32
- const zoneEl = this.getZone();
33
- if (zoneEl) zoneEl.classList.add(`user-resizing`);
34
- this.#elementBounds = this.getBoundingClientRect();
35
- this.#startSizeA = this.sizeA;
36
- this.#startSizeB = this.sizeB;
37
- window.addEventListener(`pointerup`, this.#onResizeHandleUp);
38
- window.addEventListener(`pointermove`, this.#onResizeHandleMove);
39
- };
40
- this.#onResizeHandleUp = (event) => {
41
- event.preventDefault();
42
- const zoneEl = this.getZone();
43
- if (zoneEl) zoneEl.classList.remove(`user-resizing`);
44
- window.removeEventListener(`pointerup`, this.#onResizeHandleUp);
45
- window.removeEventListener(`pointermove`, this.#onResizeHandleMove);
46
- };
47
- this.#onResizeHandleMove = (event) => {
48
- const bounds = this.#elementBounds;
49
- if (!bounds) return;
50
- const threshold = 5;
51
- if (this.layout === `horizontal`) {
52
- const y = event.y - bounds.y;
53
- const relativeY = clamp(y / bounds.height);
54
- if (this.collapsible && this.collapsedA) {
55
- if (relativeY > (this.#collapsedAPointerAtCollapse ?? .05) + this.#hysteresisThreshold) {
56
- this.collapsedA = false;
57
- this.#dispatchCollapsedEvent(`A`, false);
58
- this.#collapsedAPointerAtCollapse = void 0;
59
- const { sizeA, sizeB } = this.#applyConstraints(`${relativeY * 100}%`, `${(1 - relativeY) * 100}%`, bounds.height);
60
- this.sizeA = sizeA;
61
- this.sizeB = sizeB;
62
- }
63
- } else if (this.collapsible && !this.collapsedA && relativeY < threshold / bounds.height) {
64
- this.collapsedA = true;
65
- this.#dispatchCollapsedEvent(`A`, true);
66
- this.sizeA = `0px`;
67
- this.sizeB = `100%`;
68
- this.#collapsedAPointerAtCollapse = relativeY;
69
- } else if (!this.collapsedA) {
70
- const { sizeA, sizeB } = this.#applyConstraints(`${relativeY * 100}%`, `${(1 - relativeY) * 100}%`, bounds.height);
71
- this.sizeA = sizeA;
72
- this.sizeB = sizeB;
73
- }
74
- if (this.collapsible && this.collapsedB) {
75
- if (relativeY < (this.#collapsedBPointerAtCollapse ?? .95) - this.#hysteresisThreshold) {
76
- this.collapsedB = false;
77
- this.#dispatchCollapsedEvent(`B`, false);
78
- this.#collapsedBPointerAtCollapse = void 0;
79
- const { sizeA, sizeB } = this.#applyConstraints(`${relativeY * 100}%`, `${(1 - relativeY) * 100}%`, bounds.height);
80
- this.sizeA = sizeA;
81
- this.sizeB = sizeB;
82
- }
83
- } else if (this.collapsible && !this.collapsedB && relativeY > 1 - threshold / bounds.height) {
84
- this.collapsedB = true;
85
- this.#dispatchCollapsedEvent(`B`, true);
86
- this.sizeA = `100%`;
87
- this.sizeB = `0px`;
88
- this.#collapsedBPointerAtCollapse = relativeY;
89
- }
90
- } else {
91
- const x = event.x - bounds.x;
92
- const relativeX = clamp(x / bounds.width);
93
- if (this.collapsible && this.collapsedA) {
94
- if (relativeX > (this.#collapsedAPointerAtCollapse ?? .05) + this.#hysteresisThreshold) {
95
- this.collapsedA = false;
96
- this.#dispatchCollapsedEvent(`A`, false);
97
- this.#collapsedAPointerAtCollapse = void 0;
98
- const { sizeA, sizeB } = this.#applyConstraints(`${relativeX * 100}%`, `${(1 - relativeX) * 100}%`, bounds.width);
99
- this.sizeA = sizeA;
100
- this.sizeB = sizeB;
101
- }
102
- } else if (this.collapsible && !this.collapsedA && relativeX < threshold / bounds.width) {
103
- this.collapsedA = true;
104
- this.#dispatchCollapsedEvent(`A`, true);
105
- this.sizeA = `0px`;
106
- this.sizeB = `100%`;
107
- this.#collapsedAPointerAtCollapse = relativeX;
108
- } else if (!this.collapsedA) {
109
- const { sizeA, sizeB } = this.#applyConstraints(`${relativeX * 100}%`, `${(1 - relativeX) * 100}%`, bounds.width);
110
- this.sizeA = sizeA;
111
- this.sizeB = sizeB;
112
- }
113
- if (this.collapsible && this.collapsedB) {
114
- if (relativeX < (this.#collapsedBPointerAtCollapse ?? .95) - this.#hysteresisThreshold) {
115
- this.collapsedB = false;
116
- this.#dispatchCollapsedEvent(`B`, false);
117
- this.#collapsedBPointerAtCollapse = void 0;
118
- const { sizeA, sizeB } = this.#applyConstraints(`${relativeX * 100}%`, `${(1 - relativeX) * 100}%`, bounds.width);
119
- this.sizeA = sizeA;
120
- this.sizeB = sizeB;
121
- }
122
- } else if (this.collapsible && !this.collapsedB && relativeX > 1 - threshold / bounds.width) {
123
- this.collapsedB = true;
124
- this.#dispatchCollapsedEvent(`B`, true);
125
- this.sizeA = `100%`;
126
- this.sizeB = `0px`;
127
- this.#collapsedBPointerAtCollapse = relativeX;
128
- }
129
- }
130
- event.preventDefault();
131
- };
132
- this.#onCornerResizeDown = (event) => {
133
- event.preventDefault();
134
- event.stopPropagation();
135
- const zoneEl = this.getZone();
136
- if (zoneEl) zoneEl.classList.add(`user-resizing`);
137
- this.#elementBounds = this.getBoundingClientRect();
138
- this.#cornerStartX = event.clientX;
139
- this.#cornerStartY = event.clientY;
140
- this.#startSizeA = this.sizeA;
141
- this.#startSizeB = this.sizeB;
142
- const nestedSplit = this.#getNestedSplit();
143
- if (nestedSplit) {
144
- this.#nestedSplitInitialSizeA = nestedSplit.sizeA;
145
- const nestedBounds = nestedSplit.getBoundingClientRect();
146
- const nestedHandle = nestedSplit.shadowRoot?.querySelector(`.split-bar`);
147
- if (nestedHandle) {
148
- this.#nestedSplitBounds = nestedBounds;
149
- this.#nestedHandleBounds = nestedHandle.getBoundingClientRect();
150
- }
151
- const nestedZoneEl = nestedSplit.getZone();
152
- if (nestedZoneEl) nestedZoneEl.classList.add(`user-resizing`);
153
- }
154
- window.addEventListener(`pointerup`, this.#onCornerResizeUp);
155
- window.addEventListener(`pointermove`, this.#onCornerResizeMove);
156
- };
157
- this.#onCornerResizeUp = (event) => {
158
- event.preventDefault();
159
- const zoneEl = this.getZone();
160
- if (zoneEl) zoneEl.classList.remove(`user-resizing`);
161
- const nestedSplit = this.#getNestedSplit();
162
- if (nestedSplit) {
163
- const nestedZoneEl = nestedSplit.getZone();
164
- if (nestedZoneEl) nestedZoneEl.classList.remove(`user-resizing`);
165
- }
166
- window.removeEventListener(`pointerup`, this.#onCornerResizeUp);
167
- window.removeEventListener(`pointermove`, this.#onCornerResizeMove);
168
- };
169
- this.#onCornerResizeMove = (event) => {
170
- const outerBounds = this.#elementBounds;
171
- const zoneEl = this.getZone();
172
- const nestedSplit = this.#getNestedSplit();
173
- if (!outerBounds || !zoneEl || !nestedSplit) return;
174
- const zoneBounds = zoneEl.getBoundingClientRect();
175
- const cursorZoneLocalX = event.clientX - zoneBounds.left;
176
- const cursorZoneLocalY = event.clientY - zoneBounds.top;
177
- if (this.layout === `vertical` && nestedSplit.layout === `horizontal`) {
178
- let newOuterFraction = cursorZoneLocalX / outerBounds.width;
179
- const newNestedFraction = cursorZoneLocalY / outerBounds.height;
180
- const { sizeA: constrainedA, sizeB: constrainedB } = this.#applyConstraints(`${newOuterFraction * 100}%`, `${(1 - newOuterFraction) * 100}%`, outerBounds.width);
181
- newOuterFraction = this.#parseSizeAsFraction(constrainedA, outerBounds.width);
182
- this.sizeA = constrainedA;
183
- this.sizeB = constrainedB;
184
- this.#pendingNestedUpdate = {
185
- sizeA: newNestedFraction,
186
- sizeB: 1 - newNestedFraction
187
- };
188
- requestAnimationFrame(() => this.#applyPendingNestedUpdate());
189
- const cornerZone = this.shadowRoot?.querySelector(`.corner-zone`);
190
- if (cornerZone) {
191
- cornerZone.style.left = `${cursorZoneLocalX - 6}px`;
192
- cornerZone.style.top = `${cursorZoneLocalY - 6}px`;
193
- }
194
- } else if (this.layout === `horizontal` && nestedSplit.layout === `vertical`) {
195
- const newNestedFraction = cursorZoneLocalX / outerBounds.width;
196
- let newOuterFraction = cursorZoneLocalY / outerBounds.height;
197
- const { sizeA: constrainedA, sizeB: constrainedB } = this.#applyConstraints(`${newOuterFraction * 100}%`, `${(1 - newOuterFraction) * 100}%`, outerBounds.height);
198
- newOuterFraction = this.#parseSizeAsFraction(constrainedA, outerBounds.height);
199
- this.sizeA = constrainedA;
200
- this.sizeB = constrainedB;
201
- this.#pendingNestedUpdate = {
202
- sizeA: newNestedFraction,
203
- sizeB: 1 - newNestedFraction
204
- };
205
- requestAnimationFrame(() => this.#applyPendingNestedUpdate());
206
- const cornerZone = this.shadowRoot?.querySelector(`.corner-zone`);
207
- if (cornerZone) {
208
- cornerZone.style.left = `${cursorZoneLocalX - 6}px`;
209
- cornerZone.style.top = `${cursorZoneLocalY - 6}px`;
210
- }
211
- }
212
- event.preventDefault();
213
- };
214
- }
215
- get showGrabHandle() {
216
- const size = getComputedStyle(this).getPropertyValue(`--handle-size`).trim();
217
- const num = Number.parseFloat(size);
218
- return !Number.isNaN(num) && num > 3;
219
- }
220
- #elementBounds;
221
- #startSizeA;
222
- #startSizeB;
223
- #cornerStartX;
224
- #cornerStartY;
225
- #nestedSplitInitialSizeA;
226
- #cornerZone;
227
- #nestedSplit;
228
- #nestedSplitBounds;
229
- #nestedHandleBounds;
230
- #observer;
231
- #pendingNestedUpdate;
232
- #collapsedAPointerAtCollapse;
233
- #collapsedBPointerAtCollapse;
234
- #hysteresisThreshold;
235
- disconnectedCallback() {
236
- super.disconnectedCallback();
237
- this.#observer?.disconnect();
238
- }
239
- firstUpdated() {
240
- this.#setupNestedSplitObserver();
241
- }
242
- updated(changedProperties) {
243
- if (changedProperties.has(`sizeA`) || changedProperties.has(`sizeB`) || changedProperties.has(`collapsedA`) || changedProperties.has(`collapsedB`)) this.#updateCornerPosition();
244
- if (changedProperties.has(`sizeA`) || changedProperties.has(`sizeB`)) this.#updateDataCollapsed();
245
- }
246
- #updateDataCollapsed() {
247
- if (this.collapsedA) this.setAttribute(`data-collapsed-a`, ``);
248
- else this.removeAttribute(`data-collapsed-a`);
249
- if (this.collapsedB) this.setAttribute(`data-collapsed-b`, ``);
250
- else this.removeAttribute(`data-collapsed-b`);
251
- }
252
- #dispatchCollapsedEvent(panel, collapsed) {
253
- this.dispatchEvent(new CustomEvent(`ixfx-split-collapsed`, {
254
- detail: {
255
- panel,
256
- collapsed
257
- },
258
- bubbles: true,
259
- composed: true
260
- }));
261
- }
262
- #setupNestedSplitObserver() {
263
- const slotA = this.shadowRoot?.querySelector(`slot[name="a"]`);
264
- if (!slotA) return;
265
- this.#observer = new MutationObserver(() => {
266
- this.#checkForNestedSplit();
267
- });
268
- this.#observer.observe(slotA, {
269
- characterData: true,
270
- childList: true,
271
- subtree: true
272
- });
273
- this.#checkForNestedSplit();
274
- }
275
- #checkForNestedSplit() {
276
- const slotA = this.shadowRoot?.querySelector(`slot[name="a"]`);
277
- if (!slotA) return;
278
- const assignedElements = slotA.assignedElements();
279
- const findNestedSplit = (elements) => {
280
- for (const el of elements) {
281
- if (el.tagName === `IXFX-SPLIT-LAYOUT`) return el;
282
- const nested = findNestedSplit(Array.from(el.children));
283
- if (nested) return nested;
284
- }
285
- };
286
- const nestedSplit = findNestedSplit(assignedElements);
287
- if (nestedSplit) {
288
- this.#nestedSplit = nestedSplit;
289
- this._hasCorner = true;
290
- requestAnimationFrame(() => this.#updateCornerPosition());
291
- } else {
292
- this.#nestedSplit = void 0;
293
- this._hasCorner = false;
294
- }
295
- }
296
- #getNestedSplit() {
297
- if (this.#nestedSplit) return this.#nestedSplit;
298
- const slotA = this.shadowRoot?.querySelector(`slot[name="a"]`);
299
- if (!slotA) return void 0;
300
- return slotA.assignedElements().find((el) => el.tagName === `IXFX-SPLIT-LAYOUT`);
301
- }
302
- #parseSizeAsFraction(size, total) {
303
- if (size.endsWith(`px`)) return Number.parseFloat(size.replace(`px`, ``)) / total;
304
- else if (size.endsWith(`%`)) return Number.parseFloat(size.replace(`%`, ``)) / 100;
305
- return .5;
306
- }
307
- #parseSizeToPx(size, total) {
308
- if (size.endsWith(`px`)) return Number.parseFloat(size.replace(`px`, ``));
309
- else if (size.endsWith(`%`)) return Number.parseFloat(size.replace(`%`, ``)) / 100 * total;
310
- return null;
311
- }
312
- #applyConstraints(sizeA, sizeB, total) {
313
- let fractionA = this.#parseSizeAsFraction(sizeA, total);
314
- let fractionB = this.#parseSizeAsFraction(sizeB, total);
315
- const minA = this.#minSizeToFraction(this.minSizeA, total);
316
- const minB = this.#minSizeToFraction(this.minSizeB, total);
317
- const maxA = this.#maxSizeToFraction(this.maxSizeA, total);
318
- const maxB = this.#maxSizeToFraction(this.maxSizeB, total);
319
- if (minA !== null || minB !== null) {
320
- const minSum = (minA ?? 0) + (minB ?? 0);
321
- if (minSum > 1) {
322
- const scale = 1 / minSum;
323
- if (minA !== null) minA !== null ? fractionA = minA * scale : fractionA = 0;
324
- if (minB !== null) minB !== null ? fractionB = minB * scale : fractionB = 0;
325
- }
326
- if (fractionA < (minA ?? 0)) fractionA = minA ?? 0;
327
- if (fractionB < (minB ?? 0)) fractionB = minB ?? 0;
328
- }
329
- if (maxA !== null) {
330
- if (fractionA > maxA) fractionA = maxA;
331
- }
332
- if (maxB !== null) {
333
- if (fractionB > maxB) fractionB = maxB;
334
- }
335
- fractionB = 1 - fractionA;
336
- const isPercentA = !this.sizeA.endsWith(`px`);
337
- this.sizeB.endsWith(`px`);
338
- if (isPercentA) return {
339
- sizeA: `${fractionA * 100}%`,
340
- sizeB: `${fractionB * 100}%`
341
- };
342
- else return {
343
- sizeA: `${fractionA * total}px`,
344
- sizeB: `${fractionB * total}px`
345
- };
346
- }
347
- #minSizeToFraction(minSize, total) {
348
- if (minSize.length === 0) return null;
349
- const px = this.#parseSizeToPx(minSize, total);
350
- if (px !== null) return px / total;
351
- if (minSize.endsWith(`%`)) return Number.parseFloat(minSize.replace(`%`, ``)) / 100;
352
- return null;
353
- }
354
- #maxSizeToFraction(maxSize, total) {
355
- if (maxSize.length === 0) return null;
356
- const px = this.#parseSizeToPx(maxSize, total);
357
- if (px !== null) return px / total;
358
- if (maxSize.endsWith(`%`)) return Number.parseFloat(maxSize.replace(`%`, ``)) / 100;
359
- return null;
360
- }
361
- #getIntersectionPoint() {
362
- const outerBounds = this.getBoundingClientRect();
363
- const zoneEl = this.getZone();
364
- if (!zoneEl) return null;
365
- const nestedSplit = this.#getNestedSplit();
366
- if (!nestedSplit) return null;
367
- zoneEl.getBoundingClientRect();
368
- const outerFraction = this.#parseSizeAsFraction(this.sizeA || `50%`, outerBounds.width);
369
- let x, y;
370
- if (this.layout === `vertical` && nestedSplit.layout === `horizontal`) {
371
- x = outerFraction * outerBounds.width;
372
- y = this.#parseSizeAsFraction(nestedSplit.sizeA || `50%`, outerBounds.height) * outerBounds.height;
373
- } else if (this.layout === `horizontal` && nestedSplit.layout === `vertical`) {
374
- x = this.#parseSizeAsFraction(nestedSplit.sizeA || `50%`, outerBounds.width) * outerBounds.width;
375
- y = outerFraction * outerBounds.height;
376
- } else return null;
377
- return {
378
- x,
379
- y
380
- };
381
- }
382
- #updateCornerPosition() {
383
- if (!this._hasCorner) return;
384
- const cornerZone = this.shadowRoot?.querySelector(`.corner-zone`);
385
- if (!cornerZone) return;
386
- if (!this.getZone()) return;
387
- const intersection = this.#getIntersectionPoint();
388
- if (!intersection) {
389
- cornerZone.style.display = `none`;
390
- return;
391
- }
392
- const cornerX = intersection.x - 6;
393
- const cornerY = intersection.y - 6;
394
- cornerZone.style.left = `${cornerX}px`;
395
- cornerZone.style.top = `${cornerY}px`;
396
- cornerZone.style.display = `block`;
397
- const nestedSplit = this.#getNestedSplit();
398
- if (nestedSplit) {
399
- if (this.layout === `vertical` && nestedSplit.layout === `horizontal`) cornerZone.style.cursor = `nwse-resize`;
400
- else if (this.layout === `horizontal` && nestedSplit.layout === `vertical`) cornerZone.style.cursor = `nesw-resize`;
401
- }
402
- }
403
- getZone() {
404
- if (!this.shadowRoot) return;
405
- const el = this.shadowRoot.querySelector(`#zone`);
406
- if (!el) return void 0;
407
- return el;
408
- }
409
- #onResizeHandleDown;
410
- #onResizeHandleUp;
411
- #onResizeHandleMove;
412
- #onCornerResizeDown;
413
- #onCornerResizeUp;
414
- #applyPendingNestedUpdate() {
415
- if (!this.#pendingNestedUpdate) return;
416
- const { sizeA, sizeB } = this.#pendingNestedUpdate;
417
- const nested = this.#getNestedSplit();
418
- if (nested) {
419
- nested.sizeA = `${sizeA * 100}%`;
420
- nested.sizeB = `${sizeB * 100}%`;
421
- }
422
- this.#pendingNestedUpdate = null;
423
- }
424
- #onCornerResizeMove;
425
- render() {
426
- const sizePrefix = this.layout === `vertical` ? `width` : `height`;
427
- let sizeA = this.sizeA;
428
- let sizeB = this.sizeB;
429
- if (this.collapsedA) sizeA = `0px`;
430
- else if (sizeA.length === 0 && sizeB.length === 0) sizeB = sizeA = `50%`;
431
- else if (sizeA.length === 0) sizeA = `auto`;
432
- else if (sizeB.length === 0) sizeB = `auto`;
433
- if (this.collapsedB) sizeB = `0px`;
434
- sizeA = `${sizePrefix}:${sizeA}`;
435
- sizeB = `${sizePrefix}:${sizeB}`;
436
- return html`
437
- <div id="zone">
438
- <slot style=${sizeA} name="a"></slot>
439
- ${this._hasCorner ? html`<div class="corner-zone" @pointerdown=${this.#onCornerResizeDown}></div>` : ``}
440
- <div @pointerdown=${this.#onResizeHandleDown} class="split-bar">
441
- ${this.showGrabHandle ? html`
442
- <div class="grab-handle">
443
- <span class="dot"></span>
444
- <span class="dot"></span>
445
- <span class="dot"></span>
446
- </div>
447
- ` : ``}
448
- </div>
449
- <slot style=${sizeB} name="b"></slot>
450
- </div>`;
451
- }
452
- static {
453
- this.styles = [themeFallbacks, css`
454
- :host {
455
- --handle-size: 2px;
456
- --handle-colour: transparent;
457
- --handle-hover-colour: var(--surface-6);
458
- --handle-active-colour: var(--accent);
459
- --handle-bg: var(--handle-colour);
460
- --handle-grab-colour: var(--border-subtle-color);
461
- --handle-grab-dot-size: 3px;
462
- --handle-grab-size: 16px;
463
- --handle-grab-thickness: 8px;
464
-
465
- display: block;
466
- box-sizing: border-box;
467
- width: 100%;
468
- height: 100%;
469
- }
470
- * {
471
- box-sizing: border-box;
472
- }
473
- #zone {
474
- display: flex;
475
- height: 100%;
476
- position: relative;
477
- }
478
- slot {
479
- display: block;
480
- overflow: hidden;
481
- border: var(--border-subtle);
482
- border-radius: var(--radius-m);
483
- }
484
- :slotted(*) {
485
- width: 100%;
486
- height: 100%;
487
- }
488
-
489
- .split-bar {
490
- position: relative;
491
- background-color: var(--handle-colour);
492
- transition: background-color 0.3s ease 0s;
493
- width: var(--handle-size);
494
- height: 100%;
495
- cursor: ew-resize;
496
- flex-shrink: 0;
497
- border-radius: var(--radius-m);
498
-
499
- }
500
-
501
- @keyframes handle-hover {
502
- from { background-color: var(--handle-colour); }
503
- to { background-color: var(--handle-hover-colour); }
504
- }
505
-
506
- .grab-handle {
507
- position: absolute;
508
- top: 50%;
509
- left: 50%;
510
- transform: translate(-50%, -50%);
511
- display: flex;
512
- align-items: center;
513
- justify-content: center;
514
- gap: var(--handle-grab-dot-size);
515
- background: var(--handle-bg);
516
- border-radius: var(--radius-s);
517
- }
518
-
519
- .grab-handle .dot {
520
- width: var(--handle-grab-dot-size);
521
- height: var(--handle-grab-dot-size);
522
- border-radius: 50%;
523
- background: var(--handle-grab-colour);
524
- flex-shrink: 0;
525
- }
526
-
527
- :host([layout="vertical"]) .grab-handle {
528
- flex-direction: column;
529
- width: var(--handle-grab-thickness);
530
- height: var(--handle-grab-size);
531
- }
532
-
533
- :host([layout="horizontal"]) .grab-handle {
534
- flex-direction: row;
535
- width: var(--handle-grab-size);
536
- height: var(--handle-grab-thickness);
537
- }
538
-
539
- #zone.user-resizing .grab-handle {
540
- display: none;
541
- }
542
- #zone.user-resizing {
543
- slot {
544
- opacity: 0.5;
545
- }
546
- .split-bar {
547
- background-color: var(--handle-active-colour);
548
- transition: none;
549
- animation: none !important;
550
- }
551
- }
552
-
553
- #zone:not(.user-resizing) .split-bar:hover {
554
- animation: handle-hover 0.001s ease-out 0.7s both;
555
- }
556
-
557
- .corner-zone {
558
- position: absolute;
559
- width: 12px;
560
- height: 12px;
561
- z-index: 10;
562
- border-radius: 50%;
563
- background: transparent;
564
- }
565
- .corner-zone:hover {
566
- background: transparent;
567
- }
568
-
569
- :host([layout='horizontal']) {
570
- #zone {
571
- flex-direction: column;
572
- }
573
- .split-bar {
574
- position: relative;
575
- background-color: var(--handle-colour);
576
- transition: background-color 0.3s ease 0s;
577
- height: var(--handle-size);
578
- width: 100%;
579
- cursor: ns-resize;
580
- }
581
- #zone.user-resizing .split-bar {
582
- background-color: var(--handle-active-colour);
583
- transition: none;
584
- animation: none !important;
585
- }
586
- }
587
-
588
- :host([data-collapsed-a]) slot[name="a"],
589
- :host([data-collapsed-b]) slot[name="b"] {
590
- display: none;
591
- }
592
- `];
593
- }
594
- };
595
- __decorate([property({ type: String })], SplitLayoutElement.prototype, "layout", void 0);
596
- __decorate([property({ type: String })], SplitLayoutElement.prototype, "sizeA", void 0);
597
- __decorate([property({ type: String })], SplitLayoutElement.prototype, "sizeB", void 0);
598
- __decorate([property({ type: Boolean })], SplitLayoutElement.prototype, "fixedA", void 0);
599
- __decorate([property({ type: Boolean })], SplitLayoutElement.prototype, "fixedB", void 0);
600
- __decorate([property({ type: Boolean })], SplitLayoutElement.prototype, "collapsible", void 0);
601
- __decorate([property({
602
- type: Boolean,
603
- reflect: true
604
- })], SplitLayoutElement.prototype, "collapsedA", void 0);
605
- __decorate([property({
606
- type: Boolean,
607
- reflect: true
608
- })], SplitLayoutElement.prototype, "collapsedB", void 0);
609
- __decorate([property({ type: String })], SplitLayoutElement.prototype, "minSizeA", void 0);
610
- __decorate([property({ type: String })], SplitLayoutElement.prototype, "maxSizeA", void 0);
611
- __decorate([property({ type: String })], SplitLayoutElement.prototype, "minSizeB", void 0);
612
- __decorate([property({ type: String })], SplitLayoutElement.prototype, "maxSizeB", void 0);
613
- __decorate([state()], SplitLayoutElement.prototype, "_hasCorner", void 0);
614
- SplitLayoutElement = __decorate([safeCustomElement(`ixfx-split-layout`)], SplitLayoutElement);
615
- //#endregion
1
+ import { t as SplitLayoutElement } from "./split-layout-BFSbUZQv.js";
616
2
  export { SplitLayoutElement };
617
-
618
- //# sourceMappingURL=split-layout.js.map
package/dist/style.css CHANGED
@@ -23,7 +23,7 @@
23
23
  --font-mono: ui-monospace, monospace;
24
24
  --font-weight: 400;
25
25
  --font-weight-bold: 600;
26
- --text-xs: 10px;
26
+ --text-xs: 9px;
27
27
  --text-s: 11px;
28
28
  --text-m: 12px;
29
29
  --text-l: 13px;
package/dist/swipe.js CHANGED
@@ -1,4 +1,4 @@
1
- import { t as themeFallbacks } from "./fallbacks-DEE1nCTt.js";
1
+ import { t as themeFallbacks } from "./fallbacks-DNI9xt0F.js";
2
2
  import { n as safeCustomElement, t as __decorate } from "./decorate-VRK8rslU.js";
3
3
  import { t as prominenceStyles } from "./prominence-DlFShic3.js";
4
4
  import { t as WheelNudgeMixin } from "./wheel-nudge-BlSCe_hD.js";
@@ -63,6 +63,7 @@ declare class TabListElement extends LitElement {
63
63
  flip: boolean;
64
64
  scrollable: boolean;
65
65
  hideLabels: boolean;
66
+ shrink: boolean;
66
67
  dragMode: TabListDragMode;
67
68
  render(): import("lit").TemplateResult<1>;
68
69
  firstUpdated(): void;
@@ -78,4 +79,4 @@ declare global {
78
79
  }
79
80
  //#endregion
80
81
  export { TabListReorderDetail as a, TabListElement as i, TabListChangeEvent as n, TabListReorderEvent as o, TabListDragMode as r, TabListItemElement as s, TabListChangeDetail as t };
81
- //# sourceMappingURL=tab-list-D_1cYhB_.d.ts.map
82
+ //# sourceMappingURL=tab-list-MPwq_1Jj.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tab-list-MPwq_1Jj.d.ts","names":[],"sources":["../src/tabs/tab-list-item.ts","../src/tabs/tab-list.ts"],"mappings":";;;;;;;;;;;cAiBa,2BAA2B;EAEtC;EAGA;EAGA;EAGA;EAGA;EAGA,UAAU;UAEO;UACA;UACT;UACA;EAEC;EAUA;EAUA,QAAQ,SAAS;UAQlB;UAUA;UAWA;UAIA;EAKC;EAIA,wBAAM;UA8BP;SAWQ,sBAAM;;QAwHhB;YACI;IACR,sBAAsB;;;;;;;;;;KC5Pd;WACD;WACA;WACA;;KAGC,qBAAqB,YAAY;KAEjC;WACD;WACA;WACA;;KAGC,sBAAsB,YAAY;KAElC;cAMC,uBAAuB;;EAElC;EAGA;EAGA;EAGA;EAGA;EAGA,UAAU;EA2BD,wBAAM;EAsDN;EAUA,QAAQ,mBAAmB;EA2GpC,sBAAkB;EAwBlB,cAAc,IAAI;SAwaX,sBAAM;;QA6JP;YACI;IACR,iBAAiB"}
package/dist/tabs.d.ts CHANGED
@@ -1,2 +1,2 @@
1
- import { a as TabListReorderDetail, i as TabListElement, n as TabListChangeEvent, o as TabListReorderEvent, r as TabListDragMode, t as TabListChangeDetail } from "./tab-list-D_1cYhB_.js";
1
+ import { a as TabListReorderDetail, i as TabListElement, n as TabListChangeEvent, o as TabListReorderEvent, r as TabListDragMode, t as TabListChangeDetail } from "./tab-list-MPwq_1Jj.js";
2
2
  export { TabListChangeDetail, TabListChangeEvent, TabListDragMode, TabListElement, TabListReorderDetail, TabListReorderEvent };