@nanoporetech-digital/components 2.1.4 → 2.2.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 (184) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/README.md +1 -1
  3. package/dist/cjs/index-cb62df44.js +5 -0
  4. package/dist/cjs/loader.cjs.js +1 -1
  5. package/dist/cjs/nano-alert.cjs.entry.js.map +1 -1
  6. package/dist/cjs/nano-checkbox.cjs.entry.js.map +1 -1
  7. package/dist/cjs/nano-components.cjs.js +1 -1
  8. package/dist/cjs/nano-datalist_3.cjs.entry.js.map +1 -1
  9. package/dist/cjs/nano-date-input.cjs.entry.js.map +1 -1
  10. package/dist/cjs/nano-details.cjs.entry.js.map +1 -1
  11. package/dist/cjs/nano-dialog.cjs.entry.js.map +1 -1
  12. package/dist/cjs/nano-file-upload.cjs.entry.js.map +1 -1
  13. package/dist/cjs/nano-global-nav.cjs.entry.js.map +1 -1
  14. package/dist/cjs/nano-global-search-results.cjs.entry.js.map +1 -1
  15. package/dist/cjs/nano-hero.cjs.entry.js.map +1 -1
  16. package/dist/cjs/nano-icon-button.cjs.entry.js.map +1 -1
  17. package/dist/cjs/nano-menu-drawer.cjs.entry.js.map +1 -1
  18. package/dist/cjs/nano-rating.cjs.entry.js.map +1 -1
  19. package/dist/cjs/nano-split-pane.cjs.entry.js +284 -0
  20. package/dist/cjs/nano-split-pane.cjs.entry.js.map +1 -0
  21. package/dist/cjs/nano-tab-group.cjs.entry.js +1 -0
  22. package/dist/cjs/nano-tab-group.cjs.entry.js.map +1 -1
  23. package/dist/cjs/nano-tab.cjs.entry.js +1 -1
  24. package/dist/cjs/nano-tab.cjs.entry.js.map +1 -1
  25. package/dist/collection/collection-manifest.json +1 -0
  26. package/dist/collection/components/accordion/accordion.js +1 -1
  27. package/dist/collection/components/alert/alert.js +1 -1
  28. package/dist/collection/components/algolia/algolia-filter.js +2 -2
  29. package/dist/collection/components/algolia/algolia-input.js +5 -5
  30. package/dist/collection/components/algolia/algolia-results.js +1 -1
  31. package/dist/collection/components/algolia/algolia.js +6 -6
  32. package/dist/collection/components/checkbox/checkbox-group.js +2 -2
  33. package/dist/collection/components/checkbox/checkbox.js +3 -3
  34. package/dist/collection/components/datalist/datalist.css +1 -1
  35. package/dist/collection/components/datalist/datalist.js +1 -1
  36. package/dist/collection/components/date-input/date-input.js +7 -7
  37. package/dist/collection/components/date-picker/date-picker.js +5 -5
  38. package/dist/collection/components/details/details.js +1 -1
  39. package/dist/collection/components/dialog/dialog.js +1 -1
  40. package/dist/collection/components/file-upload/file-upload.js +4 -4
  41. package/dist/collection/components/global-nav/global-nav.js +4 -4
  42. package/dist/collection/components/grid/grid-item.js +1 -1
  43. package/dist/collection/components/icon/icon.js +1 -1
  44. package/dist/collection/components/input/input.js +5 -5
  45. package/dist/collection/components/nav-item/nav-item.js +4 -4
  46. package/dist/collection/components/range/range.js +4 -4
  47. package/dist/collection/components/resize-observe/resize-observe.js +1 -1
  48. package/dist/collection/components/select/select.js +7 -7
  49. package/dist/collection/components/slides/slides.js +7 -7
  50. package/dist/collection/components/split-pane/split-pane.css +104 -0
  51. package/dist/collection/components/split-pane/split-pane.js +479 -0
  52. package/dist/collection/components/split-pane/split-pane.js.map +1 -0
  53. package/dist/collection/components/tabs/tab-group.js +3 -2
  54. package/dist/collection/components/tabs/tab-group.js.map +1 -1
  55. package/dist/collection/components/tabs/tab.js +1 -1
  56. package/dist/collection/components/tabs/tab.js.map +1 -1
  57. package/dist/collection/utils/drag.js +21 -0
  58. package/dist/collection/utils/drag.js.map +1 -0
  59. package/dist/components/datalist.js.map +1 -1
  60. package/dist/components/icon-button.js.map +1 -1
  61. package/dist/components/menu.js.map +1 -1
  62. package/dist/components/nano-alert.js.map +1 -1
  63. package/dist/components/nano-checkbox.js.map +1 -1
  64. package/dist/components/nano-date-input.js.map +1 -1
  65. package/dist/components/nano-details.js.map +1 -1
  66. package/dist/components/nano-dialog.js.map +1 -1
  67. package/dist/components/nano-file-upload.js.map +1 -1
  68. package/dist/components/nano-global-nav.js.map +1 -1
  69. package/dist/components/nano-global-search-results.js.map +1 -1
  70. package/dist/components/nano-hero.js.map +1 -1
  71. package/dist/components/nano-menu-drawer.js.map +1 -1
  72. package/dist/components/nano-rating.js.map +1 -1
  73. package/dist/components/nano-split-pane.d.ts +11 -0
  74. package/dist/components/nano-split-pane.js +315 -0
  75. package/dist/components/nano-split-pane.js.map +1 -0
  76. package/dist/components/nano-tab-group.js +1 -0
  77. package/dist/components/nano-tab-group.js.map +1 -1
  78. package/dist/components/nano-tab.js +1 -1
  79. package/dist/components/nano-tab.js.map +1 -1
  80. package/dist/components/option.js.map +1 -1
  81. package/dist/custom-elements/index.d.ts +6 -0
  82. package/dist/custom-elements/index.js +280 -5
  83. package/dist/custom-elements/index.js.map +1 -1
  84. package/dist/esm/index-5f8d16e7.js +5 -0
  85. package/dist/esm/loader.js +1 -1
  86. package/dist/esm/nano-alert.entry.js.map +1 -1
  87. package/dist/esm/nano-checkbox.entry.js.map +1 -1
  88. package/dist/esm/nano-components.js +1 -1
  89. package/dist/esm/nano-datalist_3.entry.js.map +1 -1
  90. package/dist/esm/nano-date-input.entry.js.map +1 -1
  91. package/dist/esm/nano-details.entry.js.map +1 -1
  92. package/dist/esm/nano-dialog.entry.js.map +1 -1
  93. package/dist/esm/nano-file-upload.entry.js.map +1 -1
  94. package/dist/esm/nano-global-nav.entry.js.map +1 -1
  95. package/dist/esm/nano-global-search-results.entry.js.map +1 -1
  96. package/dist/esm/nano-hero.entry.js.map +1 -1
  97. package/dist/esm/nano-icon-button.entry.js.map +1 -1
  98. package/dist/esm/nano-menu-drawer.entry.js.map +1 -1
  99. package/dist/esm/nano-rating.entry.js.map +1 -1
  100. package/dist/esm/nano-split-pane.entry.js +280 -0
  101. package/dist/esm/nano-split-pane.entry.js.map +1 -0
  102. package/dist/esm/nano-tab-group.entry.js +1 -0
  103. package/dist/esm/nano-tab-group.entry.js.map +1 -1
  104. package/dist/esm/nano-tab.entry.js +1 -1
  105. package/dist/esm/nano-tab.entry.js.map +1 -1
  106. package/dist/esm-es5/index-5f8d16e7.js +1 -1
  107. package/dist/esm-es5/loader.js +1 -1
  108. package/dist/esm-es5/loader.js.map +1 -1
  109. package/dist/esm-es5/nano-alert.entry.js.map +1 -1
  110. package/dist/esm-es5/nano-checkbox.entry.js.map +1 -1
  111. package/dist/esm-es5/nano-components.js +1 -1
  112. package/dist/esm-es5/nano-components.js.map +1 -1
  113. package/dist/esm-es5/nano-datalist_3.entry.js.map +1 -1
  114. package/dist/esm-es5/nano-date-input.entry.js.map +1 -1
  115. package/dist/esm-es5/nano-details.entry.js.map +1 -1
  116. package/dist/esm-es5/nano-dialog.entry.js.map +1 -1
  117. package/dist/esm-es5/nano-file-upload.entry.js.map +1 -1
  118. package/dist/esm-es5/nano-global-nav.entry.js.map +1 -1
  119. package/dist/esm-es5/nano-global-search-results.entry.js.map +1 -1
  120. package/dist/esm-es5/nano-hero.entry.js.map +1 -1
  121. package/dist/esm-es5/nano-icon-button.entry.js.map +1 -1
  122. package/dist/esm-es5/nano-menu-drawer.entry.js.map +1 -1
  123. package/dist/esm-es5/nano-rating.entry.js.map +1 -1
  124. package/dist/esm-es5/nano-split-pane.entry.js +5 -0
  125. package/dist/esm-es5/nano-split-pane.entry.js.map +1 -0
  126. package/dist/esm-es5/nano-tab-group.entry.js +1 -1
  127. package/dist/esm-es5/nano-tab-group.entry.js.map +1 -1
  128. package/dist/esm-es5/nano-tab.entry.js +2 -2
  129. package/dist/esm-es5/nano-tab.entry.js.map +1 -1
  130. package/dist/nano-components/nano-components.css +1 -1
  131. package/dist/nano-components/nano-components.esm.js +1 -1
  132. package/dist/nano-components/nano-components.esm.js.map +1 -1
  133. package/dist/nano-components/{p-e35eac75.entry.js → p-08b43111.entry.js} +2 -2
  134. package/dist/nano-components/p-08b43111.entry.js.map +1 -0
  135. package/dist/nano-components/p-090f22a9.system.entry.js.map +1 -1
  136. package/dist/nano-components/p-096682d9.system.js +1 -1
  137. package/dist/nano-components/p-096682d9.system.js.map +1 -1
  138. package/dist/nano-components/{p-e6f8f9f7.system.entry.js → p-1238f0fc.system.entry.js} +2 -2
  139. package/dist/nano-components/p-1238f0fc.system.entry.js.map +1 -0
  140. package/dist/nano-components/p-1e974cad.entry.js.map +1 -1
  141. package/dist/nano-components/p-1ec44caf.entry.js.map +1 -1
  142. package/dist/nano-components/p-1f99d776.entry.js.map +1 -1
  143. package/dist/nano-components/p-20db18f3.entry.js.map +1 -1
  144. package/dist/nano-components/p-3456db01.entry.js.map +1 -1
  145. package/dist/nano-components/p-3ad1d5aa.system.entry.js.map +1 -1
  146. package/dist/nano-components/{p-3cf35ac4.system.entry.js → p-3f736fa2.system.entry.js} +2 -2
  147. package/dist/nano-components/p-3f736fa2.system.entry.js.map +1 -0
  148. package/dist/nano-components/p-4429caac.system.entry.js.map +1 -1
  149. package/dist/nano-components/p-531d5275.system.entry.js.map +1 -1
  150. package/dist/nano-components/p-56ba0d63.entry.js.map +1 -1
  151. package/dist/nano-components/p-58419bed.system.entry.js.map +1 -1
  152. package/dist/nano-components/p-5a476bba.system.entry.js.map +1 -1
  153. package/dist/nano-components/p-6afdb510.system.entry.js.map +1 -1
  154. package/dist/nano-components/p-71c26ace.entry.js.map +1 -1
  155. package/dist/nano-components/p-730f60ea.entry.js.map +1 -1
  156. package/dist/nano-components/p-7d2e2685.entry.js.map +1 -1
  157. package/dist/nano-components/p-8a8f893b.system.entry.js.map +1 -1
  158. package/dist/nano-components/p-93448bcd.system.entry.js.map +1 -1
  159. package/dist/nano-components/p-94593617.system.entry.js.map +1 -1
  160. package/dist/nano-components/{p-bbe6b7af.entry.js → p-ad0715d1.entry.js} +2 -2
  161. package/dist/nano-components/p-ad0715d1.entry.js.map +1 -0
  162. package/dist/nano-components/p-b59d2bd5.entry.js.map +1 -1
  163. package/dist/nano-components/p-c0ddb4c3.entry.js.map +1 -1
  164. package/dist/nano-components/p-d628547b.entry.js +5 -0
  165. package/dist/nano-components/p-d628547b.entry.js.map +1 -0
  166. package/dist/nano-components/p-d6569144.entry.js.map +1 -1
  167. package/dist/nano-components/p-d87ebf95.system.entry.js +5 -0
  168. package/dist/nano-components/p-d87ebf95.system.entry.js.map +1 -0
  169. package/dist/nano-components/p-e11bd40d.entry.js.map +1 -1
  170. package/dist/nano-components/p-e15be516.system.entry.js.map +1 -1
  171. package/dist/nano-components/p-ef4e0912.system.entry.js.map +1 -1
  172. package/dist/nano-components/p-f2e7d2f9.system.entry.js.map +1 -1
  173. package/dist/themes/nanopore.css +1 -1
  174. package/dist/themes/nanopore.css.map +1 -1
  175. package/dist/types/components/split-pane/split-pane.d.ts +76 -0
  176. package/dist/types/components.d.ts +89 -0
  177. package/dist/types/utils/drag.d.ts +1 -0
  178. package/docs-json.json +309 -2
  179. package/docs-vscode.json +53 -0
  180. package/package.json +8 -6
  181. package/dist/nano-components/p-3cf35ac4.system.entry.js.map +0 -1
  182. package/dist/nano-components/p-bbe6b7af.entry.js.map +0 -1
  183. package/dist/nano-components/p-e35eac75.entry.js.map +0 -1
  184. package/dist/nano-components/p-e6f8f9f7.system.entry.js.map +0 -1
@@ -0,0 +1,479 @@
1
+ /*!
2
+ * Web Components for Nanopore digital Web Apps
3
+ */
4
+ import { Prop, Component, Watch, Event, Element, Host, h, } from '@stencil/core';
5
+ import { clamp, raf, debounce } from '../../utils';
6
+ import { drag } from '../../utils/drag';
7
+ /**
8
+ * Split panes display two adjacent panels, allowing the user to reposition them.
9
+ *
10
+ * @part start - The start panel.
11
+ * @part end - The end panel.
12
+ * @part panel - Targets both the start and end panels.
13
+ * @part divider - The divider that separates the start and end panels.
14
+ *
15
+ * @slot start - The start panel.
16
+ * @slot end - The end panel.
17
+ * @slot handle - An optional handle to render at the center of the divider.
18
+ */
19
+ export class SplitPane {
20
+ constructor() {
21
+ this.isAnimating = false;
22
+ this.didLoad = false;
23
+ this._shouldAnimate = true;
24
+ /** Draws the split panel in a vertical orientation with the start and end panels stacked. */
25
+ this.vertical = false;
26
+ /** Disables resizing. Note that the position may still change as a result of resizing the host element. */
27
+ this.disabled = false;
28
+ /** How close the divider must be to a snap point until snapping occurs. */
29
+ this.snapThreshold = 12;
30
+ /** When changing `position` via property, the pane will animate into position. Make `animationDuration` 0 to disable. */
31
+ this.animationDuration = 0.6;
32
+ this._isDragging = false;
33
+ this.handleIsDragging = (dragging) => {
34
+ this._isDragging = dragging;
35
+ };
36
+ // Event handlers
37
+ this.handleDrag = (e) => {
38
+ if (this.disabled) {
39
+ return;
40
+ }
41
+ // Prevent text selection when dragging
42
+ e.preventDefault();
43
+ drag(this.host, (x, y) => {
44
+ this.handleIsDragging(true);
45
+ let newPositionInPixels = this.vertical ? y : x;
46
+ // Flip for end panels
47
+ if (this.primary === 'end') {
48
+ newPositionInPixels = this.size - newPositionInPixels;
49
+ }
50
+ // Check snap points
51
+ if (this.snap) {
52
+ const snaps = this.snap.split(' ');
53
+ snaps.forEach((value) => {
54
+ let snapPoint;
55
+ if (value.endsWith('%')) {
56
+ snapPoint = this.size * (parseFloat(value) / 100);
57
+ }
58
+ else {
59
+ snapPoint = parseFloat(value);
60
+ }
61
+ if (newPositionInPixels >= snapPoint - this.snapThreshold &&
62
+ newPositionInPixels <= snapPoint + this.snapThreshold) {
63
+ newPositionInPixels = snapPoint;
64
+ }
65
+ });
66
+ }
67
+ this.shouldAnimate = false;
68
+ this.position = clamp(this.pixelsToPercentage(newPositionInPixels), 0, 100);
69
+ raf(() => (this.shouldAnimate = true));
70
+ this.handleIsDragging(false);
71
+ });
72
+ };
73
+ this.handleKeyDown = (event) => {
74
+ if (this.disabled) {
75
+ return;
76
+ }
77
+ if ([
78
+ 'ArrowLeft',
79
+ 'ArrowRight',
80
+ 'ArrowUp',
81
+ 'ArrowDown',
82
+ 'Home',
83
+ 'End',
84
+ ].includes(event.key)) {
85
+ let newPosition = this.position;
86
+ const incr = (event.shiftKey ? 10 : 1) * (this.primary === 'end' ? -1 : 1);
87
+ event.preventDefault();
88
+ if ((event.key === 'ArrowLeft' && !this.vertical) ||
89
+ (event.key === 'ArrowUp' && this.vertical)) {
90
+ newPosition -= incr;
91
+ }
92
+ if ((event.key === 'ArrowRight' && !this.vertical) ||
93
+ (event.key === 'ArrowDown' && this.vertical)) {
94
+ newPosition += incr;
95
+ }
96
+ if (event.key === 'Home') {
97
+ newPosition = this.primary === 'end' ? 100 : 0;
98
+ }
99
+ if (event.key === 'End') {
100
+ newPosition = this.primary === 'end' ? 0 : 100;
101
+ }
102
+ this.shouldAnimate = false;
103
+ this.position = clamp(newPosition, 0, 100);
104
+ raf(() => (this.shouldAnimate = true));
105
+ }
106
+ };
107
+ this.handleResize = () => {
108
+ if (!this.didLoad || this.isAnimating)
109
+ return;
110
+ // Resize when a primary panel is set
111
+ if (this.primary) {
112
+ this.shouldAnimate = false;
113
+ this.position = this.pixelsToPercentage(this.cachedPositionInPixels);
114
+ raf(() => (this.shouldAnimate = true));
115
+ }
116
+ };
117
+ this.handlePositionChange = debounce(this.handlePositionChange.bind(this), 100);
118
+ this.handleIsDragging = debounce(this.handleIsDragging, 200);
119
+ }
120
+ get size() {
121
+ const { width, height } = this.host.getBoundingClientRect();
122
+ return this.vertical ? height : width;
123
+ }
124
+ get shouldAnimate() {
125
+ return this.didLoad && this._shouldAnimate;
126
+ }
127
+ set shouldAnimate(sa) {
128
+ this._shouldAnimate = sa;
129
+ }
130
+ /**
131
+ * The current position of the divider from the primary panel's edge as a percentage 0-100. Defaults to 50% of the
132
+ * container's initial size.
133
+ */
134
+ get position() {
135
+ return this._position;
136
+ }
137
+ set position(pos) {
138
+ // override too high / low
139
+ pos = Math.min(Math.max(pos, 0), 100);
140
+ if (isNaN(pos) || pos === this._position)
141
+ return;
142
+ if (this.shouldAnimate && this.animationDuration > 0) {
143
+ this.animatePosition(pos);
144
+ return;
145
+ }
146
+ this._position = pos;
147
+ }
148
+ // eslint-disable-next-line @stencil/no-unused-watch
149
+ handlePositionChange() {
150
+ this.cachedPositionInPixels = this.percentageToPixels(this.position);
151
+ this.positionInPixels = this.percentageToPixels(this.position);
152
+ this.nanoReposition.emit();
153
+ }
154
+ handlePositionInPixelsChange() {
155
+ this.position = this.pixelsToPercentage(this.positionInPixels);
156
+ }
157
+ /** @readonly - hook to know if the pane is currently being dragged */
158
+ get isDragging() {
159
+ return this._isDragging;
160
+ }
161
+ // Private logic
162
+ animatePosition(end) {
163
+ if (this.isAnimating)
164
+ return;
165
+ const duration = this.animationDuration; // seconds
166
+ const fps = 60;
167
+ const start = this.position;
168
+ const distance = end - start;
169
+ let position = start;
170
+ let time = 0;
171
+ function easeInOutQuad(t, s, e, d) {
172
+ if ((t /= d / 2) < 1)
173
+ return (e / 2) * t * t + s;
174
+ else
175
+ return (-e / 2) * (--t * (t - 2) - 1) + s;
176
+ }
177
+ const go = () => {
178
+ time += 1 / fps;
179
+ position = easeInOutQuad(time, start, distance, duration);
180
+ if ((end > start && position >= end) ||
181
+ (end < start && position <= end)) {
182
+ this.position = end;
183
+ this.shouldAnimate = true;
184
+ this.isAnimating = false;
185
+ return;
186
+ }
187
+ this.position = position;
188
+ raf(go);
189
+ };
190
+ this.shouldAnimate = false;
191
+ this.isAnimating = true;
192
+ raf(go);
193
+ }
194
+ percentageToPixels(value) {
195
+ return this.size * (value / 100);
196
+ }
197
+ pixelsToPercentage(value) {
198
+ return (value / this.size) * 100;
199
+ }
200
+ attachRO() {
201
+ this.detachRO();
202
+ this.ro = new ResizeObserver(() => this.handleResize());
203
+ this.ro.observe(this.host);
204
+ }
205
+ detachRO() {
206
+ if (!this.ro)
207
+ return;
208
+ this.ro.unobserve(this.host);
209
+ this.ro = undefined;
210
+ }
211
+ componentDidLoad() {
212
+ if (this.positionInPixels)
213
+ this.handlePositionInPixelsChange();
214
+ setTimeout(() => (this.didLoad = true));
215
+ }
216
+ connectedCallback() {
217
+ this.cachedPositionInPixels = this.percentageToPixels(this.position);
218
+ this.attachRO();
219
+ }
220
+ disconnectedCallback() {
221
+ this.detachRO();
222
+ }
223
+ componentDidRender() {
224
+ // bit hacky ... because we use getter / setter for position, there's a render *before* `position` is passed in via attribute
225
+ // if we set a default position in the class, this causes the divider to jump (from default to user set position)
226
+ // so - wait a render, see if there's a position passed in via attribute, *then* set default if not
227
+ raf(() => {
228
+ if (this.position === undefined)
229
+ this.position = 50;
230
+ });
231
+ }
232
+ render() {
233
+ if (!this.position)
234
+ return;
235
+ const styles = {};
236
+ const gridTemplate = this.vertical
237
+ ? 'gridTemplateRows'
238
+ : 'gridTemplateColumns';
239
+ const primary = `
240
+ clamp(
241
+ 0%,
242
+ clamp(
243
+ var(--min),
244
+ ${this.position}% - var(--divider-width) / 2,
245
+ var(--max)
246
+ ),
247
+ calc(100% - var(--divider-width))
248
+ )
249
+ `;
250
+ const secondary = 'auto';
251
+ if (this.primary === 'end') {
252
+ styles[gridTemplate] = `${secondary} var(--divider-width) ${primary}`;
253
+ }
254
+ else {
255
+ styles[gridTemplate] = `${primary} var(--divider-width) ${secondary}`;
256
+ }
257
+ return (h(Host, { style: styles },
258
+ h("div", { part: "panel start", class: "start" },
259
+ h("slot", { name: "start" })),
260
+ h("div", { part: "divider", class: "divider", tabindex: this.disabled ? undefined : '0', role: "separator", "aria-label": "Resize", onKeyDown: this.handleKeyDown, onMouseDown: this.handleDrag, onTouchStart: this.handleDrag },
261
+ h("slot", { name: "handle" }, !this.disabled && this.vertical ? (h("nano-icon", { slot: "handle", name: "solid/grip-lines" })) : (h("nano-icon", { slot: "handle", name: "solid/grip-lines-vertical" })))),
262
+ h("div", { part: "panel end", class: "end" },
263
+ h("slot", { name: "end" }))));
264
+ }
265
+ static get is() { return "nano-split-pane"; }
266
+ static get encapsulation() { return "shadow"; }
267
+ static get originalStyleUrls() { return {
268
+ "$": ["split-pane.scss"]
269
+ }; }
270
+ static get styleUrls() { return {
271
+ "$": ["split-pane.css"]
272
+ }; }
273
+ static get properties() { return {
274
+ "position": {
275
+ "type": "number",
276
+ "mutable": false,
277
+ "complexType": {
278
+ "original": "number",
279
+ "resolved": "number",
280
+ "references": {}
281
+ },
282
+ "required": false,
283
+ "optional": false,
284
+ "docs": {
285
+ "tags": [],
286
+ "text": "The current position of the divider from the primary panel's edge as a percentage 0-100. Defaults to 50% of the\ncontainer's initial size."
287
+ },
288
+ "getter": true,
289
+ "setter": true,
290
+ "attribute": "position",
291
+ "reflect": false
292
+ },
293
+ "positionInPixels": {
294
+ "type": "number",
295
+ "mutable": true,
296
+ "complexType": {
297
+ "original": "number",
298
+ "resolved": "number",
299
+ "references": {}
300
+ },
301
+ "required": false,
302
+ "optional": false,
303
+ "docs": {
304
+ "tags": [],
305
+ "text": "The current position of the divider from the primary panel's edge in pixels."
306
+ },
307
+ "getter": false,
308
+ "setter": false,
309
+ "attribute": "position-in-pixels",
310
+ "reflect": false
311
+ },
312
+ "vertical": {
313
+ "type": "boolean",
314
+ "mutable": false,
315
+ "complexType": {
316
+ "original": "boolean",
317
+ "resolved": "boolean",
318
+ "references": {}
319
+ },
320
+ "required": false,
321
+ "optional": false,
322
+ "docs": {
323
+ "tags": [],
324
+ "text": "Draws the split panel in a vertical orientation with the start and end panels stacked."
325
+ },
326
+ "getter": false,
327
+ "setter": false,
328
+ "attribute": "vertical",
329
+ "reflect": true,
330
+ "defaultValue": "false"
331
+ },
332
+ "disabled": {
333
+ "type": "boolean",
334
+ "mutable": false,
335
+ "complexType": {
336
+ "original": "boolean",
337
+ "resolved": "boolean",
338
+ "references": {}
339
+ },
340
+ "required": false,
341
+ "optional": false,
342
+ "docs": {
343
+ "tags": [],
344
+ "text": "Disables resizing. Note that the position may still change as a result of resizing the host element."
345
+ },
346
+ "getter": false,
347
+ "setter": false,
348
+ "attribute": "disabled",
349
+ "reflect": true,
350
+ "defaultValue": "false"
351
+ },
352
+ "primary": {
353
+ "type": "string",
354
+ "mutable": false,
355
+ "complexType": {
356
+ "original": "'start' | 'end'",
357
+ "resolved": "\"end\" | \"start\"",
358
+ "references": {}
359
+ },
360
+ "required": false,
361
+ "optional": true,
362
+ "docs": {
363
+ "tags": [],
364
+ "text": "If no primary panel is designated, both panels will resize proportionally when the host element is resized. If a\nprimary panel is designated, it will maintain its size and the other panel will grow or shrink as needed when the\nhost element is resized."
365
+ },
366
+ "getter": false,
367
+ "setter": false,
368
+ "attribute": "primary",
369
+ "reflect": false
370
+ },
371
+ "snap": {
372
+ "type": "string",
373
+ "mutable": false,
374
+ "complexType": {
375
+ "original": "string",
376
+ "resolved": "string",
377
+ "references": {}
378
+ },
379
+ "required": false,
380
+ "optional": true,
381
+ "docs": {
382
+ "tags": [],
383
+ "text": "One or more space-separated values at which the divider should snap. Values can be in pixels or percentages, e.g.\n`\"100px 50%\"`."
384
+ },
385
+ "getter": false,
386
+ "setter": false,
387
+ "attribute": "snap",
388
+ "reflect": false
389
+ },
390
+ "snapThreshold": {
391
+ "type": "number",
392
+ "mutable": false,
393
+ "complexType": {
394
+ "original": "number",
395
+ "resolved": "number",
396
+ "references": {}
397
+ },
398
+ "required": false,
399
+ "optional": false,
400
+ "docs": {
401
+ "tags": [],
402
+ "text": "How close the divider must be to a snap point until snapping occurs."
403
+ },
404
+ "getter": false,
405
+ "setter": false,
406
+ "attribute": "snap-threshold",
407
+ "reflect": false,
408
+ "defaultValue": "12"
409
+ },
410
+ "animationDuration": {
411
+ "type": "number",
412
+ "mutable": false,
413
+ "complexType": {
414
+ "original": "number",
415
+ "resolved": "number",
416
+ "references": {}
417
+ },
418
+ "required": false,
419
+ "optional": false,
420
+ "docs": {
421
+ "tags": [],
422
+ "text": "When changing `position` via property, the pane will animate into position. Make `animationDuration` 0 to disable."
423
+ },
424
+ "getter": false,
425
+ "setter": false,
426
+ "attribute": "animation-duration",
427
+ "reflect": false,
428
+ "defaultValue": "0.6"
429
+ },
430
+ "isDragging": {
431
+ "type": "boolean",
432
+ "mutable": false,
433
+ "complexType": {
434
+ "original": "boolean",
435
+ "resolved": "boolean",
436
+ "references": {}
437
+ },
438
+ "required": false,
439
+ "optional": false,
440
+ "docs": {
441
+ "tags": [{
442
+ "name": "readonly",
443
+ "text": "- hook to know if the pane is currently being dragged"
444
+ }],
445
+ "text": ""
446
+ },
447
+ "getter": true,
448
+ "setter": false,
449
+ "attribute": "is-dragging",
450
+ "reflect": true,
451
+ "defaultValue": "false"
452
+ }
453
+ }; }
454
+ static get events() { return [{
455
+ "method": "nanoReposition",
456
+ "name": "nanoReposition",
457
+ "bubbles": true,
458
+ "cancelable": true,
459
+ "composed": true,
460
+ "docs": {
461
+ "tags": [],
462
+ "text": "Emitted when the divider's position changes."
463
+ },
464
+ "complexType": {
465
+ "original": "any",
466
+ "resolved": "any",
467
+ "references": {}
468
+ }
469
+ }]; }
470
+ static get elementRef() { return "host"; }
471
+ static get watchers() { return [{
472
+ "propName": "position",
473
+ "methodName": "handlePositionChange"
474
+ }, {
475
+ "propName": "positionInPixels",
476
+ "methodName": "handlePositionInPixelsChange"
477
+ }]; }
478
+ }
479
+ //# sourceMappingURL=split-pane.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"split-pane.js","sourceRoot":"","sources":["../../../src/components/split-pane/split-pane.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n Prop,\n Component,\n Watch,\n Event,\n EventEmitter,\n ComponentInterface,\n Element,\n Host,\n h,\n} from '@stencil/core';\nimport { clamp, raf, debounce } from '../../utils';\nimport { drag } from '../../utils/drag';\n\n/**\n * Split panes display two adjacent panels, allowing the user to reposition them.\n *\n * @part start - The start panel.\n * @part end - The end panel.\n * @part panel - Targets both the start and end panels.\n * @part divider - The divider that separates the start and end panels.\n *\n * @slot start - The start panel.\n * @slot end - The end panel.\n * @slot handle - An optional handle to render at the center of the divider.\n */\n@Component({\n tag: 'nano-split-pane',\n styleUrl: 'split-pane.scss',\n shadow: true,\n})\nexport class SplitPane implements ComponentInterface {\n @Element() host: HTMLNanoSplitPaneElement;\n private cachedPositionInPixels: number;\n private ro: ResizeObserver;\n private isAnimating = false;\n private didLoad = false;\n\n private get size() {\n const { width, height } = this.host.getBoundingClientRect();\n return this.vertical ? height : width;\n }\n\n private get shouldAnimate() {\n return this.didLoad && this._shouldAnimate;\n }\n private set shouldAnimate(sa: boolean) {\n this._shouldAnimate = sa;\n }\n private _shouldAnimate: boolean = true;\n\n constructor() {\n this.handlePositionChange = debounce(\n this.handlePositionChange.bind(this),\n 100\n );\n this.handleIsDragging = debounce(this.handleIsDragging, 200);\n }\n\n /**\n * The current position of the divider from the primary panel's edge as a percentage 0-100. Defaults to 50% of the\n * container's initial size.\n */\n @Prop()\n get position() {\n return this._position;\n }\n set position(pos: number) {\n // override too high / low\n pos = Math.min(Math.max(pos, 0), 100);\n if (isNaN(pos) || pos === this._position) return;\n\n if (this.shouldAnimate && this.animationDuration > 0) {\n this.animatePosition(pos);\n return;\n }\n this._position = pos;\n }\n private _position: number;\n\n // eslint-disable-next-line @stencil/no-unused-watch\n @Watch('position')\n handlePositionChange() {\n this.cachedPositionInPixels = this.percentageToPixels(this.position);\n this.positionInPixels = this.percentageToPixels(this.position);\n this.nanoReposition.emit();\n }\n\n /**\n * The current position of the divider from the primary panel's edge in pixels.\n */\n @Prop({ mutable: true }) positionInPixels: number;\n\n @Watch('positionInPixels')\n handlePositionInPixelsChange() {\n this.position = this.pixelsToPercentage(this.positionInPixels);\n }\n\n /** Draws the split panel in a vertical orientation with the start and end panels stacked. */\n @Prop({ reflect: true }) vertical = false;\n\n /** Disables resizing. Note that the position may still change as a result of resizing the host element. */\n @Prop({ reflect: true }) disabled = false;\n\n /**\n * If no primary panel is designated, both panels will resize proportionally when the host element is resized. If a\n * primary panel is designated, it will maintain its size and the other panel will grow or shrink as needed when the\n * host element is resized.\n */\n @Prop() primary?: 'start' | 'end';\n\n /**\n * One or more space-separated values at which the divider should snap. Values can be in pixels or percentages, e.g.\n * `\"100px 50%\"`.\n */\n @Prop() snap?: string;\n\n /** How close the divider must be to a snap point until snapping occurs. */\n @Prop() snapThreshold = 12;\n\n /** When changing `position` via property, the pane will animate into position. Make `animationDuration` 0 to disable. */\n @Prop() animationDuration = 0.6;\n\n /** @readonly - hook to know if the pane is currently being dragged */\n @Prop({ reflect: true }) get isDragging() {\n return this._isDragging;\n }\n private _isDragging = false;\n\n /** Emitted when the divider's position changes. */\n @Event() nanoReposition: EventEmitter;\n\n // Private logic\n\n private animatePosition(end: number) {\n if (this.isAnimating) return;\n\n const duration = this.animationDuration; // seconds\n const fps = 60;\n const start = this.position;\n const distance = end - start;\n\n let position = start;\n let time = 0;\n\n function easeInOutQuad(t: number, s: number, e: number, d: number) {\n if ((t /= d / 2) < 1) return (e / 2) * t * t + s;\n else return (-e / 2) * (--t * (t - 2) - 1) + s;\n }\n\n const go = () => {\n time += 1 / fps;\n position = easeInOutQuad(time, start, distance, duration);\n\n if (\n (end > start && position >= end) ||\n (end < start && position <= end)\n ) {\n this.position = end;\n this.shouldAnimate = true;\n this.isAnimating = false;\n return;\n }\n this.position = position;\n raf(go);\n };\n\n this.shouldAnimate = false;\n this.isAnimating = true;\n raf(go);\n }\n\n private percentageToPixels(value: number) {\n return this.size * (value / 100);\n }\n\n private pixelsToPercentage(value: number) {\n return (value / this.size) * 100;\n }\n\n private attachRO() {\n this.detachRO();\n this.ro = new ResizeObserver(() => this.handleResize());\n this.ro.observe(this.host);\n }\n\n private detachRO() {\n if (!this.ro) return;\n this.ro.unobserve(this.host);\n this.ro = undefined;\n }\n\n private handleIsDragging = (dragging?: boolean) => {\n this._isDragging = dragging;\n };\n\n // Event handlers\n\n private handleDrag = (e: Event) => {\n if (this.disabled) {\n return;\n }\n\n // Prevent text selection when dragging\n e.preventDefault();\n\n drag(this.host, (x, y) => {\n this.handleIsDragging(true);\n let newPositionInPixels = this.vertical ? y : x;\n\n // Flip for end panels\n if (this.primary === 'end') {\n newPositionInPixels = this.size - newPositionInPixels;\n }\n\n // Check snap points\n if (this.snap) {\n const snaps = this.snap.split(' ');\n\n snaps.forEach((value) => {\n let snapPoint: number;\n\n if (value.endsWith('%')) {\n snapPoint = this.size * (parseFloat(value) / 100);\n } else {\n snapPoint = parseFloat(value);\n }\n\n if (\n newPositionInPixels >= snapPoint - this.snapThreshold &&\n newPositionInPixels <= snapPoint + this.snapThreshold\n ) {\n newPositionInPixels = snapPoint;\n }\n });\n }\n this.shouldAnimate = false;\n this.position = clamp(\n this.pixelsToPercentage(newPositionInPixels),\n 0,\n 100\n );\n raf(() => (this.shouldAnimate = true));\n this.handleIsDragging(false);\n });\n };\n\n private handleKeyDown = (event: KeyboardEvent) => {\n if (this.disabled) {\n return;\n }\n\n if (\n [\n 'ArrowLeft',\n 'ArrowRight',\n 'ArrowUp',\n 'ArrowDown',\n 'Home',\n 'End',\n ].includes(event.key)\n ) {\n let newPosition = this.position;\n const incr =\n (event.shiftKey ? 10 : 1) * (this.primary === 'end' ? -1 : 1);\n\n event.preventDefault();\n\n if (\n (event.key === 'ArrowLeft' && !this.vertical) ||\n (event.key === 'ArrowUp' && this.vertical)\n ) {\n newPosition -= incr;\n }\n\n if (\n (event.key === 'ArrowRight' && !this.vertical) ||\n (event.key === 'ArrowDown' && this.vertical)\n ) {\n newPosition += incr;\n }\n\n if (event.key === 'Home') {\n newPosition = this.primary === 'end' ? 100 : 0;\n }\n\n if (event.key === 'End') {\n newPosition = this.primary === 'end' ? 0 : 100;\n }\n\n this.shouldAnimate = false;\n\n this.position = clamp(newPosition, 0, 100);\n raf(() => (this.shouldAnimate = true));\n }\n };\n\n private handleResize = () => {\n if (!this.didLoad || this.isAnimating) return;\n\n // Resize when a primary panel is set\n if (this.primary) {\n this.shouldAnimate = false;\n this.position = this.pixelsToPercentage(this.cachedPositionInPixels);\n raf(() => (this.shouldAnimate = true));\n }\n };\n\n componentDidLoad(): void {\n if (this.positionInPixels) this.handlePositionInPixelsChange();\n setTimeout(() => (this.didLoad = true));\n }\n\n connectedCallback() {\n this.cachedPositionInPixels = this.percentageToPixels(this.position);\n this.attachRO();\n }\n\n disconnectedCallback() {\n this.detachRO();\n }\n\n componentDidRender(): void {\n // bit hacky ... because we use getter / setter for position, there's a render *before* `position` is passed in via attribute\n // if we set a default position in the class, this causes the divider to jump (from default to user set position)\n // so - wait a render, see if there's a position passed in via attribute, *then* set default if not\n raf(() => {\n if (this.position === undefined) this.position = 50;\n });\n }\n\n render() {\n if (!this.position) return;\n const styles: { gridTemplateRows?: string; gridTemplateColumns?: string } =\n {};\n const gridTemplate = this.vertical\n ? 'gridTemplateRows'\n : 'gridTemplateColumns';\n const primary = `\n clamp(\n 0%,\n clamp(\n var(--min),\n ${this.position}% - var(--divider-width) / 2,\n var(--max)\n ),\n calc(100% - var(--divider-width))\n )\n `;\n const secondary = 'auto';\n\n if (this.primary === 'end') {\n styles[gridTemplate] = `${secondary} var(--divider-width) ${primary}`;\n } else {\n styles[gridTemplate] = `${primary} var(--divider-width) ${secondary}`;\n }\n\n return (\n <Host style={styles}>\n <div part=\"panel start\" class=\"start\">\n <slot name=\"start\"></slot>\n </div>\n <div\n part=\"divider\"\n class=\"divider\"\n tabindex={this.disabled ? undefined : '0'}\n role=\"separator\"\n aria-label=\"Resize\"\n onKeyDown={this.handleKeyDown}\n onMouseDown={this.handleDrag}\n onTouchStart={this.handleDrag}\n >\n <slot name=\"handle\">\n {!this.disabled && this.vertical ? (\n <nano-icon slot=\"handle\" name=\"solid/grip-lines\" />\n ) : (\n <nano-icon slot=\"handle\" name=\"solid/grip-lines-vertical\" />\n )}\n </slot>\n </div>\n <div part=\"panel end\" class=\"end\">\n <slot name=\"end\"></slot>\n </div>\n </Host>\n );\n }\n}\n"]}
@@ -394,6 +394,7 @@ export class TabGroup {
394
394
  setTimeout(() => {
395
395
  this.updateScrollControls();
396
396
  this.syncActiveTabIndicator();
397
+ scrollIntoView(this.activeTab, this.nav, 'horizontal', 'center');
397
398
  }, 500);
398
399
  });
399
400
  this.resizeObserver.observe(this.nav);
@@ -501,7 +502,7 @@ export class TabGroup {
501
502
  "references": {
502
503
  "Color": {
503
504
  "location": "import",
504
- "path": "/builds/99mRzSBj/0/Digital/nano-components/packages/components/src/interface.d.ts"
505
+ "path": "/builds/zfg2rJd-/0/Digital/nano-components/packages/components/src/interface.d.ts"
505
506
  }
506
507
  }
507
508
  },
@@ -544,7 +545,7 @@ export class TabGroup {
544
545
  "references": {
545
546
  "StorageMethods": {
546
547
  "location": "import",
547
- "path": "/builds/99mRzSBj/0/Digital/nano-components/packages/components/src/utils/store/component-store.ts"
548
+ "path": "/builds/zfg2rJd-/0/Digital/nano-components/packages/components/src/utils/store/component-store.ts"
548
549
  }
549
550
  }
550
551
  },