@primer/view-components 0.43.6 → 0.44.0-rc.2b4579f7

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 (45) hide show
  1. package/app/assets/javascripts/components/primer/alpha/action_menu/action_menu_element.d.ts +5 -0
  2. package/app/assets/javascripts/components/primer/alpha/action_menu/action_menu_focus_zone_stack.d.ts +17 -0
  3. package/app/assets/javascripts/components/primer/alpha/tree_view/tree_view.d.ts +39 -0
  4. package/app/assets/javascripts/components/primer/alpha/tree_view/tree_view_icon_pair_element.d.ts +15 -0
  5. package/app/assets/javascripts/components/primer/alpha/tree_view/tree_view_include_fragment_element.d.ts +9 -0
  6. package/app/assets/javascripts/components/primer/alpha/tree_view/tree_view_roving_tab_index.d.ts +3 -0
  7. package/app/assets/javascripts/components/primer/alpha/tree_view/tree_view_sub_tree_node_element.d.ts +42 -0
  8. package/app/assets/javascripts/components/primer/primer.d.ts +4 -0
  9. package/app/assets/javascripts/components/primer/shared_events.d.ts +15 -0
  10. package/app/assets/javascripts/primer_view_components.js +1 -1
  11. package/app/assets/javascripts/primer_view_components.js.map +1 -1
  12. package/app/assets/styles/primer_view_components.css +1 -1
  13. package/app/assets/styles/primer_view_components.css.map +1 -1
  14. package/app/components/primer/alpha/action_menu/action_menu_element.d.ts +5 -0
  15. package/app/components/primer/alpha/action_menu/action_menu_element.js +113 -16
  16. package/app/components/primer/alpha/action_menu/action_menu_focus_zone_stack.d.ts +17 -0
  17. package/app/components/primer/alpha/action_menu/action_menu_focus_zone_stack.js +62 -0
  18. package/app/components/primer/alpha/skeleton_box.css +1 -0
  19. package/app/components/primer/alpha/skeleton_box.css.json +6 -0
  20. package/app/components/primer/alpha/tree_view/tree_view.d.ts +39 -0
  21. package/app/components/primer/alpha/tree_view/tree_view.js +363 -0
  22. package/app/components/primer/alpha/tree_view/tree_view_icon_pair_element.d.ts +15 -0
  23. package/app/components/primer/alpha/tree_view/tree_view_icon_pair_element.js +62 -0
  24. package/app/components/primer/alpha/tree_view/tree_view_include_fragment_element.d.ts +9 -0
  25. package/app/components/primer/alpha/tree_view/tree_view_include_fragment_element.js +28 -0
  26. package/app/components/primer/alpha/tree_view/tree_view_roving_tab_index.d.ts +3 -0
  27. package/app/components/primer/alpha/tree_view/tree_view_roving_tab_index.js +130 -0
  28. package/app/components/primer/alpha/tree_view/tree_view_sub_tree_node_element.d.ts +42 -0
  29. package/app/components/primer/alpha/tree_view/tree_view_sub_tree_node_element.js +418 -0
  30. package/app/components/primer/alpha/tree_view.css +1 -0
  31. package/app/components/primer/alpha/tree_view.css.json +52 -0
  32. package/app/components/primer/beta/breadcrumbs.css +1 -1
  33. package/app/components/primer/beta/breadcrumbs.css.json +0 -1
  34. package/app/components/primer/beta/progress_bar.css +1 -1
  35. package/app/components/primer/primer.d.ts +4 -0
  36. package/app/components/primer/primer.js +4 -0
  37. package/app/components/primer/shared_events.d.ts +15 -0
  38. package/package.json +2 -2
  39. package/static/arguments.json +632 -83
  40. package/static/audited_at.json +21 -0
  41. package/static/classes.json +15 -0
  42. package/static/constants.json +128 -7
  43. package/static/info_arch.json +2602 -764
  44. package/static/previews.json +245 -0
  45. package/static/statuses.json +21 -0
@@ -0,0 +1,418 @@
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
+ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
8
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
9
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
10
+ return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
11
+ };
12
+ var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
13
+ if (kind === "m") throw new TypeError("Private method is not writable");
14
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
15
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
16
+ return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
17
+ };
18
+ var _TreeViewSubTreeNodeElement_instances, _TreeViewSubTreeNodeElement_expanded, _TreeViewSubTreeNodeElement_loadingState, _TreeViewSubTreeNodeElement_abortController, _TreeViewSubTreeNodeElement_activeElementIsLoader, _TreeViewSubTreeNodeElement_handleToggleEvent, _TreeViewSubTreeNodeElement_handleIncludeFragmentEvent, _TreeViewSubTreeNodeElement_handleRetryButtonEvent, _TreeViewSubTreeNodeElement_handleKeyboardEvent, _TreeViewSubTreeNodeElement_handleCheckboxEvent, _TreeViewSubTreeNodeElement_update, _TreeViewSubTreeNodeElement_checkboxElement_get;
19
+ import { controller, target } from '@github/catalyst';
20
+ import { observeMutationsUntilConditionMet } from '../../utils';
21
+ let TreeViewSubTreeNodeElement = class TreeViewSubTreeNodeElement extends HTMLElement {
22
+ constructor() {
23
+ super(...arguments);
24
+ _TreeViewSubTreeNodeElement_instances.add(this);
25
+ _TreeViewSubTreeNodeElement_expanded.set(this, null);
26
+ _TreeViewSubTreeNodeElement_loadingState.set(this, 'success');
27
+ _TreeViewSubTreeNodeElement_abortController.set(this, void 0);
28
+ _TreeViewSubTreeNodeElement_activeElementIsLoader.set(this, false);
29
+ }
30
+ connectedCallback() {
31
+ observeMutationsUntilConditionMet(this, () => Boolean(this.node) && Boolean(this.subTree), () => {
32
+ __classPrivateFieldGet(this, _TreeViewSubTreeNodeElement_instances, "m", _TreeViewSubTreeNodeElement_update).call(this);
33
+ });
34
+ const { signal } = (__classPrivateFieldSet(this, _TreeViewSubTreeNodeElement_abortController, new AbortController(), "f"));
35
+ this.addEventListener('click', this, { signal });
36
+ this.addEventListener('keydown', this, { signal });
37
+ observeMutationsUntilConditionMet(this, () => Boolean(this.includeFragment), () => {
38
+ this.includeFragment.addEventListener('loadstart', this, { signal });
39
+ this.includeFragment.addEventListener('error', this, { signal });
40
+ this.includeFragment.addEventListener('include-fragment-replace', this, { signal });
41
+ this.includeFragment.addEventListener('include-fragment-replaced', (e) => {
42
+ __classPrivateFieldGet(this, _TreeViewSubTreeNodeElement_instances, "m", _TreeViewSubTreeNodeElement_handleIncludeFragmentEvent).call(this, e);
43
+ }, { signal });
44
+ });
45
+ observeMutationsUntilConditionMet(this, () => Boolean(this.retryButton), () => {
46
+ this.retryButton.addEventListener('click', event => {
47
+ __classPrivateFieldGet(this, _TreeViewSubTreeNodeElement_instances, "m", _TreeViewSubTreeNodeElement_handleRetryButtonEvent).call(this, event);
48
+ }, { signal });
49
+ });
50
+ const checkedMutationObserver = new MutationObserver(() => {
51
+ if (this.selectStrategy !== 'mixed_descendants')
52
+ return;
53
+ let checkType = 'unknown';
54
+ for (const node of this.eachDirectDescendantNode()) {
55
+ switch (`${checkType} ${node.getAttribute('aria-checked') || 'false'}`) {
56
+ case 'unknown mixed':
57
+ case 'false mixed':
58
+ case 'true mixed':
59
+ case 'false true':
60
+ case 'true false':
61
+ checkType = 'mixed';
62
+ break;
63
+ case 'unknown false':
64
+ checkType = 'false';
65
+ break;
66
+ case 'unknown true':
67
+ checkType = 'true';
68
+ }
69
+ }
70
+ if (checkType !== 'unknown' && this.node?.getAttribute('aria-checked') !== checkType) {
71
+ this.node?.setAttribute('aria-checked', checkType);
72
+ }
73
+ });
74
+ checkedMutationObserver.observe(this, {
75
+ childList: true,
76
+ subtree: true,
77
+ attributeFilter: ['aria-checked'],
78
+ });
79
+ }
80
+ get expanded() {
81
+ if (__classPrivateFieldGet(this, _TreeViewSubTreeNodeElement_expanded, "f") === null) {
82
+ __classPrivateFieldSet(this, _TreeViewSubTreeNodeElement_expanded, this.node.getAttribute('aria-expanded') === 'true', "f");
83
+ }
84
+ return __classPrivateFieldGet(this, _TreeViewSubTreeNodeElement_expanded, "f");
85
+ }
86
+ set expanded(newValue) {
87
+ __classPrivateFieldSet(this, _TreeViewSubTreeNodeElement_expanded, newValue, "f");
88
+ __classPrivateFieldGet(this, _TreeViewSubTreeNodeElement_instances, "m", _TreeViewSubTreeNodeElement_update).call(this);
89
+ }
90
+ get loadingState() {
91
+ return __classPrivateFieldGet(this, _TreeViewSubTreeNodeElement_loadingState, "f");
92
+ }
93
+ set loadingState(newState) {
94
+ __classPrivateFieldSet(this, _TreeViewSubTreeNodeElement_loadingState, newState, "f");
95
+ __classPrivateFieldGet(this, _TreeViewSubTreeNodeElement_instances, "m", _TreeViewSubTreeNodeElement_update).call(this);
96
+ }
97
+ get selectStrategy() {
98
+ return (this.node.getAttribute('data-select-strategy') || 'descendants');
99
+ }
100
+ disconnectedCallback() {
101
+ __classPrivateFieldGet(this, _TreeViewSubTreeNodeElement_abortController, "f").abort();
102
+ }
103
+ handleEvent(event) {
104
+ if (event.target === this.toggleButton) {
105
+ __classPrivateFieldGet(this, _TreeViewSubTreeNodeElement_instances, "m", _TreeViewSubTreeNodeElement_handleToggleEvent).call(this, event);
106
+ }
107
+ else if (event.target === this.includeFragment) {
108
+ __classPrivateFieldGet(this, _TreeViewSubTreeNodeElement_instances, "m", _TreeViewSubTreeNodeElement_handleIncludeFragmentEvent).call(this, event);
109
+ }
110
+ else if (event instanceof KeyboardEvent) {
111
+ __classPrivateFieldGet(this, _TreeViewSubTreeNodeElement_instances, "m", _TreeViewSubTreeNodeElement_handleKeyboardEvent).call(this, event);
112
+ }
113
+ else if (event.target.closest('[role=treeitem]') === this.node &&
114
+ event.type === 'click' &&
115
+ __classPrivateFieldGet(this, _TreeViewSubTreeNodeElement_instances, "a", _TreeViewSubTreeNodeElement_checkboxElement_get)) {
116
+ __classPrivateFieldGet(this, _TreeViewSubTreeNodeElement_instances, "m", _TreeViewSubTreeNodeElement_handleCheckboxEvent).call(this, event);
117
+ }
118
+ }
119
+ expand() {
120
+ const alreadyExpanded = this.expanded;
121
+ this.expanded = true;
122
+ if (!alreadyExpanded && this.treeView) {
123
+ this.treeView.dispatchEvent(new CustomEvent('treeViewNodeExpanded', {
124
+ bubbles: true,
125
+ detail: this.treeView?.infoFromNode(this.node),
126
+ }));
127
+ }
128
+ }
129
+ collapse() {
130
+ const alreadyCollapsed = !this.expanded;
131
+ this.expanded = false;
132
+ if (!alreadyCollapsed && this.treeView) {
133
+ // Prevent issue where currently focusable node is stuck inside a collapsed
134
+ // sub-tree and no node in the entire tree can be focused
135
+ const previousNode = this.subTree.querySelector("[tabindex='0']");
136
+ previousNode?.setAttribute('tabindex', '-1');
137
+ this.node.setAttribute('tabindex', '0');
138
+ this.treeView.dispatchEvent(new CustomEvent('treeViewNodeCollapsed', {
139
+ bubbles: true,
140
+ detail: this.treeView?.infoFromNode(this.node),
141
+ }));
142
+ }
143
+ }
144
+ toggle() {
145
+ if (this.expanded) {
146
+ this.collapse();
147
+ }
148
+ else {
149
+ this.expand();
150
+ }
151
+ }
152
+ get nodes() {
153
+ return this.querySelectorAll(':scope > [role=treeitem]');
154
+ }
155
+ *eachDirectDescendantNode() {
156
+ for (const leaf of this.subTree.querySelectorAll(':scope > li > .TreeViewItemContainer > [role=treeitem]')) {
157
+ yield leaf;
158
+ }
159
+ for (const subTree of this.subTree.querySelectorAll(':scope > tree-view-sub-tree-node > li > .TreeViewItemContainer > [role=treeitem]')) {
160
+ yield subTree;
161
+ }
162
+ }
163
+ *eachDescendantNode() {
164
+ for (const node of this.subTree.querySelectorAll('[role=treeitem]')) {
165
+ yield node;
166
+ }
167
+ }
168
+ *eachAncestorSubTreeNode() {
169
+ if (!this.treeView)
170
+ return;
171
+ // eslint-disable-next-line @typescript-eslint/no-this-alias
172
+ let current = this;
173
+ while (current && this.treeView.contains(current)) {
174
+ yield current;
175
+ current = current.parentElement?.closest('tree-view-sub-tree-node');
176
+ }
177
+ }
178
+ get isEmpty() {
179
+ return this.nodes.length === 0;
180
+ }
181
+ get treeView() {
182
+ return this.closest('tree-view');
183
+ }
184
+ toggleChecked() {
185
+ const checkValue = this.treeView?.getNodeCheckedValue(this.node) || 'false';
186
+ const newCheckValue = checkValue === 'false' ? 'true' : 'false';
187
+ const nodeInfos = [];
188
+ const rootInfo = this.treeView?.infoFromNode(this.node, newCheckValue);
189
+ if (rootInfo)
190
+ nodeInfos.push(rootInfo);
191
+ if (this.selectStrategy === 'descendants' || this.selectStrategy === 'mixed_descendants') {
192
+ for (const node of this.eachDescendantNode()) {
193
+ const info = this.treeView?.infoFromNode(node, newCheckValue);
194
+ if (info)
195
+ nodeInfos.push(info);
196
+ }
197
+ }
198
+ const checkSuccess = this.dispatchEvent(new CustomEvent('treeViewBeforeNodeChecked', {
199
+ bubbles: true,
200
+ cancelable: true,
201
+ detail: nodeInfos,
202
+ }));
203
+ if (!checkSuccess)
204
+ return;
205
+ for (const nodeInfo of nodeInfos) {
206
+ nodeInfo.node.setAttribute('aria-checked', newCheckValue);
207
+ }
208
+ this.dispatchEvent(new CustomEvent('treeViewNodeChecked', {
209
+ bubbles: true,
210
+ cancelable: true,
211
+ detail: nodeInfos,
212
+ }));
213
+ }
214
+ };
215
+ _TreeViewSubTreeNodeElement_expanded = new WeakMap();
216
+ _TreeViewSubTreeNodeElement_loadingState = new WeakMap();
217
+ _TreeViewSubTreeNodeElement_abortController = new WeakMap();
218
+ _TreeViewSubTreeNodeElement_activeElementIsLoader = new WeakMap();
219
+ _TreeViewSubTreeNodeElement_instances = new WeakSet();
220
+ _TreeViewSubTreeNodeElement_handleToggleEvent = function _TreeViewSubTreeNodeElement_handleToggleEvent(event) {
221
+ if (event.type === 'click') {
222
+ this.toggle();
223
+ // eslint-disable-next-line no-restricted-syntax
224
+ event.stopPropagation();
225
+ }
226
+ };
227
+ _TreeViewSubTreeNodeElement_handleIncludeFragmentEvent = function _TreeViewSubTreeNodeElement_handleIncludeFragmentEvent(event) {
228
+ switch (event.type) {
229
+ // the request has started
230
+ case 'loadstart':
231
+ this.loadingState = 'loading';
232
+ break;
233
+ // the request failed
234
+ case 'error':
235
+ this.loadingState = 'error';
236
+ break;
237
+ // request succeeded but element has not yet been replaced
238
+ case 'include-fragment-replace':
239
+ __classPrivateFieldSet(this, _TreeViewSubTreeNodeElement_activeElementIsLoader, document.activeElement === this.loadingIndicator.closest('[role=treeitem]'), "f");
240
+ this.loadingState = 'success';
241
+ break;
242
+ case 'include-fragment-replaced':
243
+ // Make sure to expand the new sub-tree, otherwise it looks like nothing happened. This prevents
244
+ // having to remember to pass `SubTree.new(expanded: true)` in the controller.
245
+ this.expanded = true;
246
+ if (__classPrivateFieldGet(this, _TreeViewSubTreeNodeElement_activeElementIsLoader, "f")) {
247
+ const firstItem = this.querySelector('[role=group] > :first-child');
248
+ if (!firstItem)
249
+ return;
250
+ const content = firstItem.querySelector('[role=treeitem]');
251
+ if (!content)
252
+ return;
253
+ content.focus();
254
+ }
255
+ __classPrivateFieldSet(this, _TreeViewSubTreeNodeElement_activeElementIsLoader, false, "f");
256
+ break;
257
+ }
258
+ };
259
+ _TreeViewSubTreeNodeElement_handleRetryButtonEvent = function _TreeViewSubTreeNodeElement_handleRetryButtonEvent(event) {
260
+ if (event.type === 'click') {
261
+ this.loadingState = 'loading';
262
+ this.includeFragment.refetch();
263
+ }
264
+ };
265
+ _TreeViewSubTreeNodeElement_handleKeyboardEvent = function _TreeViewSubTreeNodeElement_handleKeyboardEvent(event) {
266
+ const node = event.target.closest('[role=treeitem]');
267
+ if (!node || this.treeView?.getNodeType(node) !== 'sub-tree') {
268
+ return;
269
+ }
270
+ switch (event.key) {
271
+ case 'Enter':
272
+ if (this.treeView?.getNodeDisabledValue(node)) {
273
+ event.preventDefault();
274
+ break;
275
+ }
276
+ // eslint-disable-next-line no-restricted-syntax
277
+ event.stopPropagation();
278
+ if (__classPrivateFieldGet(this, _TreeViewSubTreeNodeElement_instances, "a", _TreeViewSubTreeNodeElement_checkboxElement_get)) {
279
+ this.toggleChecked();
280
+ }
281
+ else if (!this.treeView?.nodeHasNativeAction(node)) {
282
+ // toggle only if this node isn't eg. an anchor or button
283
+ this.toggle();
284
+ }
285
+ break;
286
+ case 'ArrowRight':
287
+ // eslint-disable-next-line no-restricted-syntax
288
+ event.stopPropagation();
289
+ this.expand();
290
+ break;
291
+ case 'ArrowLeft':
292
+ // eslint-disable-next-line no-restricted-syntax
293
+ event.stopPropagation();
294
+ this.collapse();
295
+ break;
296
+ case ' ':
297
+ if (this.treeView?.getNodeDisabledValue(node)) {
298
+ event.preventDefault();
299
+ break;
300
+ }
301
+ if (__classPrivateFieldGet(this, _TreeViewSubTreeNodeElement_instances, "a", _TreeViewSubTreeNodeElement_checkboxElement_get)) {
302
+ // eslint-disable-next-line no-restricted-syntax
303
+ event.stopPropagation();
304
+ event.preventDefault();
305
+ this.toggleChecked();
306
+ }
307
+ else {
308
+ if (node instanceof HTMLAnchorElement) {
309
+ // simulate click on space for anchors (buttons already handle this natively)
310
+ node.click();
311
+ }
312
+ else if (!this.treeView?.nodeHasNativeAction(node)) {
313
+ this.toggle();
314
+ }
315
+ }
316
+ break;
317
+ }
318
+ };
319
+ _TreeViewSubTreeNodeElement_handleCheckboxEvent = function _TreeViewSubTreeNodeElement_handleCheckboxEvent(event) {
320
+ if (this.treeView?.getNodeDisabledValue(this.node)) {
321
+ event.preventDefault();
322
+ return;
323
+ }
324
+ if (event.type !== 'click')
325
+ return;
326
+ this.toggleChecked();
327
+ // prevent receiving this event twice
328
+ // eslint-disable-next-line no-restricted-syntax
329
+ event.stopPropagation();
330
+ };
331
+ _TreeViewSubTreeNodeElement_update = function _TreeViewSubTreeNodeElement_update() {
332
+ if (this.expanded) {
333
+ if (this.subTree)
334
+ this.subTree.hidden = false;
335
+ this.node.setAttribute('aria-expanded', 'true');
336
+ this.treeView?.expandAncestorsForNode(this);
337
+ if (this.iconPair) {
338
+ this.iconPair.showExpanded();
339
+ }
340
+ if (this.expandedToggleIcon && this.collapsedToggleIcon) {
341
+ this.expandedToggleIcon.removeAttribute('hidden');
342
+ this.collapsedToggleIcon.setAttribute('hidden', 'hidden');
343
+ }
344
+ }
345
+ else {
346
+ if (this.subTree)
347
+ this.subTree.hidden = true;
348
+ this.node.setAttribute('aria-expanded', 'false');
349
+ if (this.iconPair) {
350
+ this.iconPair.showCollapsed();
351
+ }
352
+ if (this.expandedToggleIcon && this.collapsedToggleIcon) {
353
+ this.expandedToggleIcon.setAttribute('hidden', 'hidden');
354
+ this.collapsedToggleIcon.removeAttribute('hidden');
355
+ }
356
+ }
357
+ switch (this.loadingState) {
358
+ case 'loading':
359
+ if (this.loadingFailureMessage)
360
+ this.loadingFailureMessage.hidden = true;
361
+ if (this.loadingIndicator)
362
+ this.loadingIndicator.hidden = false;
363
+ break;
364
+ case 'error':
365
+ if (this.loadingIndicator)
366
+ this.loadingIndicator.hidden = true;
367
+ if (this.loadingFailureMessage)
368
+ this.loadingFailureMessage.hidden = false;
369
+ break;
370
+ // success/init case
371
+ default:
372
+ if (this.loadingIndicator)
373
+ this.loadingIndicator.hidden = true;
374
+ if (this.loadingFailureMessage)
375
+ this.loadingFailureMessage.hidden = true;
376
+ }
377
+ };
378
+ _TreeViewSubTreeNodeElement_checkboxElement_get = function _TreeViewSubTreeNodeElement_checkboxElement_get() {
379
+ return this.querySelector('.TreeViewItemCheckbox');
380
+ };
381
+ __decorate([
382
+ target
383
+ ], TreeViewSubTreeNodeElement.prototype, "node", void 0);
384
+ __decorate([
385
+ target
386
+ ], TreeViewSubTreeNodeElement.prototype, "subTree", void 0);
387
+ __decorate([
388
+ target
389
+ ], TreeViewSubTreeNodeElement.prototype, "iconPair", void 0);
390
+ __decorate([
391
+ target
392
+ ], TreeViewSubTreeNodeElement.prototype, "toggleButton", void 0);
393
+ __decorate([
394
+ target
395
+ ], TreeViewSubTreeNodeElement.prototype, "expandedToggleIcon", void 0);
396
+ __decorate([
397
+ target
398
+ ], TreeViewSubTreeNodeElement.prototype, "collapsedToggleIcon", void 0);
399
+ __decorate([
400
+ target
401
+ ], TreeViewSubTreeNodeElement.prototype, "includeFragment", void 0);
402
+ __decorate([
403
+ target
404
+ ], TreeViewSubTreeNodeElement.prototype, "loadingIndicator", void 0);
405
+ __decorate([
406
+ target
407
+ ], TreeViewSubTreeNodeElement.prototype, "loadingFailureMessage", void 0);
408
+ __decorate([
409
+ target
410
+ ], TreeViewSubTreeNodeElement.prototype, "retryButton", void 0);
411
+ TreeViewSubTreeNodeElement = __decorate([
412
+ controller
413
+ ], TreeViewSubTreeNodeElement);
414
+ export { TreeViewSubTreeNodeElement };
415
+ if (!window.customElements.get('tree-view-sub-tree-node')) {
416
+ window.TreeViewSubTreeNodeElement = TreeViewSubTreeNodeElement;
417
+ window.customElements.define('tree-view-sub-tree-node', TreeViewSubTreeNodeElement);
418
+ }
@@ -0,0 +1 @@
1
+ .TreeViewRootUlStyles{list-style:none;margin:0;padding:0}.TreeViewRootUlStyles .TreeViewItem{outline:none}:is(.TreeViewRootUlStyles .TreeViewItem):focus-visible>div{box-shadow:var(--boxShadow-thick) var(--fgColor-accent)}@media (forced-colors:active){:is(.TreeViewRootUlStyles .TreeViewItem):focus-visible>div{outline:2px solid HighlightText;outline-offset:-2}}[data-has-leading-action]:is(.TreeViewRootUlStyles .TreeViewItem){--has-leading-action:1}.TreeViewRootUlStyles .TreeViewItemContainer{--level:1;--toggle-width:1rem;--min-item-height:2rem;border-radius:var(--borderRadius-medium);color:var(--fgColor-default);display:grid;font-size:var(--text-body-size-medium);grid-template-areas:"spacer leadingAction toggle content";grid-template-columns:var(--spacer-width) var(--leading-action-width) var(--toggle-width) 1fr;position:relative;width:100%;--leading-action-width:calc(var(--has-leading-action, 0)*1.5rem);--spacer-width:calc((var(--level) - 1)*(var(--toggle-width)/2))}:is(.TreeViewRootUlStyles .TreeViewItemContainer):hover{background-color:var(--control-transparent-bgColor-hover)}@media (forced-colors:active){:is(.TreeViewRootUlStyles .TreeViewItemContainer):hover{outline:2px solid #0000;outline-offset:-2px}}@media (pointer:coarse){.TreeViewRootUlStyles .TreeViewItemContainer{--toggle-width:1.5rem;--min-item-height:2.75rem}}:is(.TreeViewRootUlStyles .TreeViewItemContainer):has(.TreeViewFailureMessage):hover{background-color:initial;cursor:default}@media (forced-colors:active){:is(.TreeViewRootUlStyles .TreeViewItemContainer):has(.TreeViewFailureMessage):hover{outline:none}}:is(.TreeViewRootUlStyles .TreeViewItemContainer):has([role=treeitem]:focus-visible){box-shadow:var(--boxShadow-thick) var(--fgColor-accent)}.TreeViewRootUlStyles:where([data-omit-spacer=true]) .TreeViewItemContainer{grid-template-columns:0 0 0 1fr}.TreeViewRootUlStyles .TreeViewItem>.TreeViewItemContainer:has(.TreeViewItemContent[aria-current=true]){background-color:var(--control-transparent-bgColor-selected)}:is(.TreeViewRootUlStyles .TreeViewItem>.TreeViewItemContainer:has(.TreeViewItemContent[aria-current=true])):after{background-color:var(--fgColor-accent);border-radius:var(--borderRadius-medium);content:"";height:1.5rem;left:calc(var(--base-size-8)*-1);position:absolute;top:calc(50% - var(--base-size-12));width:.25rem}@media (forced-colors:active){:is(.TreeViewRootUlStyles .TreeViewItem>.TreeViewItemContainer:has(.TreeViewItemContent[aria-current=true])):after{background-color:HighlightText}}.TreeViewRootUlStyles .TreeViewItemToggle{align-items:flex-start;color:var(--fgColor-muted);cursor:pointer;display:flex;grid-area:toggle;height:100%;justify-content:center;padding-top:calc(var(--min-item-height)/2 - var(--base-size-12)/2)}.TreeViewRootUlStyles .TreeViewItemToggleHover:hover{background-color:var(--control-transparent-bgColor-hover)}.TreeViewRootUlStyles .TreeViewItemToggleEnd{border-bottom-left-radius:var(--borderRadius-medium);border-top-left-radius:var(--borderRadius-medium)}.TreeViewRootUlStyles a.TreeViewItemContent:hover,.TreeViewRootUlStyles button.TreeViewItemContent:hover{-webkit-text-decoration:underline;text-decoration:underline;text-decoration-color:var(--control-fgColor-rest)}.TreeViewRootUlStyles :has(.TreeViewItemContent[aria-disabled=true]){cursor:not-allowed}.TreeViewRootUlStyles .TreeViewItemContent{cursor:pointer;display:flex;gap:var(--stack-gap-condensed);grid-area:content;height:100%;line-height:var(--custom-line-height,var(--text-body-lineHeight-medium,1.4285));outline:none;padding:0 var(--base-size-8);padding-bottom:calc((var(--min-item-height) - var(--custom-line-height, 1.3rem))/2);padding-top:calc((var(--min-item-height) - var(--custom-line-height, 1.3rem))/2)}.TreeViewRootUlStyles .TreeViewItemContent,:is(.TreeViewRootUlStyles .TreeViewItemContent) .TreeViewItemCheckbox{background-color:initial;border:none;text-align:left;touch-action:manipulation;-webkit-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent}:is(.TreeViewRootUlStyles .TreeViewItemContent) .TreeViewItemCheckbox{border-radius:var(--borderRadius-medium);color:var(--control-fgColor-rest);position:relative;transition:background 33.333ms linear}[aria-checked=true]:is(.TreeViewRootUlStyles .TreeViewItemContent) .FormControl-checkbox{background:var(--control-checked-bgColor-rest);border-color:var(--control-checked-borderColor-rest);transition:background-color,border-color 80ms cubic-bezier(.32,0,.67,0) 0s}:is([aria-checked=true]:is(.TreeViewRootUlStyles .TreeViewItemContent) .FormControl-checkbox):before{animation:checkmarkIn 80ms cubic-bezier(.65,0,.35,1) 80ms forwards;transition:visibility 0s linear 0s;visibility:visible}[aria-checked=mixed]:is(.TreeViewRootUlStyles .TreeViewItemContent) .FormControl-checkbox{background:var(--control-checked-bgColor-rest);border-color:var(--control-checked-borderColor-rest);transition:background-color,border-color 80ms cubic-bezier(.32,0,.67,0) 0s}:is([aria-checked=mixed]:is(.TreeViewRootUlStyles .TreeViewItemContent) .FormControl-checkbox):before{animation:checkmarkIn 80ms cubic-bezier(.65,0,.35,1) 80ms forwards;clip-path:none;mask-image:url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMCIgaGVpZ2h0PSIyIiBmaWxsPSJub25lIiB2aWV3Qm94PSIwIDAgMTAgMiI+PHBhdGggZmlsbD0iI2ZmZiIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNMCAxYTEgMSAwIDAgMSAxLTFoOGExIDEgMCAxIDEgMCAySDFhMSAxIDAgMCAxLTEtMSIgY2xpcC1ydWxlPSJldmVub2RkIi8+PC9zdmc+");visibility:visible}[aria-disabled=true]:is(.TreeViewRootUlStyles .TreeViewItemContent){pointer-events:none}[aria-disabled=true]:is(.TreeViewRootUlStyles .TreeViewItemContent) .TreeViewItemContentText{color:var(--control-fgColor-disabled)}:is([aria-disabled=true]:is(.TreeViewRootUlStyles .TreeViewItemContent) .TreeViewItemVisual) svg,[aria-disabled=true]:is(.TreeViewRootUlStyles .TreeViewItemContent) .TreeViewItemVisual{fill:var(--control-fgColor-disabled)}@media (hover:hover){:is([aria-disabled=true]:is(.TreeViewRootUlStyles .TreeViewItemContent) .FormControl-checkbox):hover{cursor:not-allowed}[aria-disabled=true]:is(.TreeViewRootUlStyles .TreeViewItemContent):hover{background-color:initial;cursor:not-allowed}}.TreeViewRootUlStyles .TreeViewItemContentText{color:var(--control-fgColor-rest);flex:1 1 auto;width:0}.TreeViewRootUlStyles:where([data-truncate-text=true]) .TreeViewItemContentText{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.TreeViewRootUlStyles:where([data-truncate-text=false]) .TreeViewItemContentText{word-break:break-word}.TreeViewRootUlStyles .TreeViewItemVisual{align-items:center;color:var(--fgColor-muted);display:flex;height:var(--custom-line-height,1.3rem)}.TreeViewRootUlStyles .TreeViewItemLeadingAction{color:var(--fgColor-muted);display:flex;grid-area:leadingAction}:is(.TreeViewRootUlStyles .TreeViewItemLeadingAction)>button{flex-shrink:1}.TreeViewRootUlStyles .TreeViewItemLevelLine{border-color:var(--borderColor-muted);border-right:var(--borderWidth-thin) solid;height:100%;width:100%}@media (hover:hover){.TreeViewRootUlStyles .TreeViewItemLevelLine{border-color:#0000}.TreeViewRootUlStyles:focus-within .TreeViewItemLevelLine,.TreeViewRootUlStyles:hover .TreeViewItemLevelLine{border-color:var(--borderColor-muted)}}.TreeViewRootUlStyles .TreeViewVisuallyHidden{height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;clip:rect(0,0,0,0);border-width:0;white-space:nowrap}.TreeViewSkeletonItemContainerStyle{align-items:center;column-gap:.5rem;display:flex;height:2rem}@media (pointer:coarse){.TreeViewSkeletonItemContainerStyle{height:2.75rem}}.TreeViewSkeletonItemContainerStyle:nth-of-type(5n+1){--tree-item-loading-width:67%}.TreeViewSkeletonItemContainerStyle:nth-of-type(5n+2){--tree-item-loading-width:47%}.TreeViewSkeletonItemContainerStyle:nth-of-type(5n+3){--tree-item-loading-width:73%}.TreeViewSkeletonItemContainerStyle:nth-of-type(5n+4){--tree-item-loading-width:64%}.TreeViewSkeletonItemContainerStyle:nth-of-type(5n+5){--tree-item-loading-width:50%}.TreeItemSkeletonTextStyles{width:var(--tree-item-loading-width,67%)}.TreeViewFailureMessage{align-items:center;display:grid;gap:.5rem;grid-template-columns:auto 1fr;width:100%}
@@ -0,0 +1,52 @@
1
+ {
2
+ "name": "alpha/tree_view",
3
+ "selectors": [
4
+ ".TreeViewRootUlStyles",
5
+ ".TreeViewRootUlStyles .TreeViewItem",
6
+ ":is(.TreeViewRootUlStyles .TreeViewItem):focus-visible>div",
7
+ "[data-has-leading-action]:is(.TreeViewRootUlStyles .TreeViewItem)",
8
+ ".TreeViewRootUlStyles .TreeViewItemContainer",
9
+ ":is(.TreeViewRootUlStyles .TreeViewItemContainer):hover",
10
+ ":is(.TreeViewRootUlStyles .TreeViewItemContainer):has(.TreeViewFailureMessage):hover",
11
+ ":is(.TreeViewRootUlStyles .TreeViewItemContainer):has([role=treeitem]:focus-visible)",
12
+ ".TreeViewRootUlStyles:where([data-omit-spacer=true]) .TreeViewItemContainer",
13
+ ".TreeViewRootUlStyles .TreeViewItem>.TreeViewItemContainer:has(.TreeViewItemContent[aria-current=true])",
14
+ ":is(.TreeViewRootUlStyles .TreeViewItem>.TreeViewItemContainer:has(.TreeViewItemContent[aria-current=true])):after",
15
+ ".TreeViewRootUlStyles .TreeViewItemToggle",
16
+ ".TreeViewRootUlStyles .TreeViewItemToggleHover:hover",
17
+ ".TreeViewRootUlStyles .TreeViewItemToggleEnd",
18
+ ".TreeViewRootUlStyles a.TreeViewItemContent:hover",
19
+ ".TreeViewRootUlStyles button.TreeViewItemContent:hover",
20
+ ".TreeViewRootUlStyles :has(.TreeViewItemContent[aria-disabled=true])",
21
+ ".TreeViewRootUlStyles .TreeViewItemContent",
22
+ ":is(.TreeViewRootUlStyles .TreeViewItemContent) .TreeViewItemCheckbox",
23
+ "[aria-checked=true]:is(.TreeViewRootUlStyles .TreeViewItemContent) .FormControl-checkbox",
24
+ ":is([aria-checked=true]:is(.TreeViewRootUlStyles .TreeViewItemContent) .FormControl-checkbox):before",
25
+ "[aria-checked=mixed]:is(.TreeViewRootUlStyles .TreeViewItemContent) .FormControl-checkbox",
26
+ ":is([aria-checked=mixed]:is(.TreeViewRootUlStyles .TreeViewItemContent) .FormControl-checkbox):before",
27
+ "[aria-disabled=true]:is(.TreeViewRootUlStyles .TreeViewItemContent)",
28
+ "[aria-disabled=true]:is(.TreeViewRootUlStyles .TreeViewItemContent) .TreeViewItemContentText",
29
+ ":is([aria-disabled=true]:is(.TreeViewRootUlStyles .TreeViewItemContent) .TreeViewItemVisual) svg",
30
+ "[aria-disabled=true]:is(.TreeViewRootUlStyles .TreeViewItemContent) .TreeViewItemVisual",
31
+ ":is([aria-disabled=true]:is(.TreeViewRootUlStyles .TreeViewItemContent) .FormControl-checkbox):hover",
32
+ "[aria-disabled=true]:is(.TreeViewRootUlStyles .TreeViewItemContent):hover",
33
+ ".TreeViewRootUlStyles .TreeViewItemContentText",
34
+ ".TreeViewRootUlStyles:where([data-truncate-text=true]) .TreeViewItemContentText",
35
+ ".TreeViewRootUlStyles:where([data-truncate-text=false]) .TreeViewItemContentText",
36
+ ".TreeViewRootUlStyles .TreeViewItemVisual",
37
+ ".TreeViewRootUlStyles .TreeViewItemLeadingAction",
38
+ ":is(.TreeViewRootUlStyles .TreeViewItemLeadingAction)>button",
39
+ ".TreeViewRootUlStyles .TreeViewItemLevelLine",
40
+ ".TreeViewRootUlStyles:focus-within .TreeViewItemLevelLine",
41
+ ".TreeViewRootUlStyles:hover .TreeViewItemLevelLine",
42
+ ".TreeViewRootUlStyles .TreeViewVisuallyHidden",
43
+ ".TreeViewSkeletonItemContainerStyle",
44
+ ".TreeViewSkeletonItemContainerStyle:nth-of-type(5n+1)",
45
+ ".TreeViewSkeletonItemContainerStyle:nth-of-type(5n+2)",
46
+ ".TreeViewSkeletonItemContainerStyle:nth-of-type(5n+3)",
47
+ ".TreeViewSkeletonItemContainerStyle:nth-of-type(5n+4)",
48
+ ".TreeViewSkeletonItemContainerStyle:nth-of-type(5n+5)",
49
+ ".TreeItemSkeletonTextStyles",
50
+ ".TreeViewFailureMessage"
51
+ ]
52
+ }
@@ -1 +1 @@
1
- .breadcrumb-item{display:inline-block;list-style:none;margin-left:-.35em;max-width:100%}.breadcrumb-item:after{border-right:.1em solid var(--borderColor-neutral-emphasis);content:"";display:inline-block;height:.8em;margin:0 .5em;transform:rotate(15deg) translateY(.0625em)}.breadcrumb-item:first-child{margin-left:0}:is(.breadcrumb-item-selected,.breadcrumb-item[aria-current]:not([aria-current=false])):after{content:none}.breadcrumb-item-selected a{color:var(--fgColor-default);cursor:default!important;-webkit-text-decoration:none!important;text-decoration:none!important}
1
+ .breadcrumb-item{display:inline-block;list-style:none;max-width:100%}.breadcrumb-item:after{border-right:.1em solid var(--borderColor-neutral-emphasis);content:"";display:inline-block;height:.8em;margin:0 .15em 0 .5em;transform:rotate(15deg) translateY(.0625em)}:is(.breadcrumb-item-selected,.breadcrumb-item[aria-current]:not([aria-current=false])):after{content:none}.breadcrumb-item-selected a{color:var(--fgColor-default);cursor:default!important;-webkit-text-decoration:none!important;text-decoration:none!important}
@@ -3,7 +3,6 @@
3
3
  "selectors": [
4
4
  ".breadcrumb-item",
5
5
  ".breadcrumb-item:after",
6
- ".breadcrumb-item:first-child",
7
6
  ":is(.breadcrumb-item-selected,.breadcrumb-item[aria-current]:not([aria-current=false])):after",
8
7
  ".breadcrumb-item-selected a"
9
8
  ]
@@ -1 +1 @@
1
- .Progress{background-color:var(--bgColor-neutral-muted);border-radius:var(--borderRadius-medium);display:flex;height:8px;outline:1px solid #0000;overflow:hidden}.Progress--large{height:10px}.Progress--small{height:5px}.Progress-item{outline:2px solid #0000}.Progress-item+.Progress-item{margin-left:var(--base-size-2)}
1
+ .Progress{background-color:var(--progressBar-track-bgColor);border-radius:var(--borderRadius-medium);display:flex;height:8px;outline:solid 1px var(--progressBar-track-borderColor);outline-offset:-1px;overflow:hidden}.Progress--large{height:10px}.Progress--small{height:5px}.Progress-item{outline:2px solid #0000}.Progress-item+.Progress-item{margin-left:var(--base-size-2)}
@@ -26,3 +26,7 @@ import '../../lib/primer/forms/toggle_switch_input';
26
26
  import './alpha/action_menu/action_menu_element';
27
27
  import './alpha/select_panel_element';
28
28
  import './beta/details_toggle_element';
29
+ import './alpha/tree_view/tree_view';
30
+ import './alpha/tree_view/tree_view_icon_pair_element';
31
+ import './alpha/tree_view/tree_view_sub_tree_node_element';
32
+ import './alpha/tree_view/tree_view_include_fragment_element';
@@ -26,3 +26,7 @@ import '../../lib/primer/forms/toggle_switch_input';
26
26
  import './alpha/action_menu/action_menu_element';
27
27
  import './alpha/select_panel_element';
28
28
  import './beta/details_toggle_element';
29
+ import './alpha/tree_view/tree_view';
30
+ import './alpha/tree_view/tree_view_icon_pair_element';
31
+ import './alpha/tree_view/tree_view_sub_tree_node_element';
32
+ import './alpha/tree_view/tree_view_include_fragment_element';
@@ -3,9 +3,24 @@ export type ItemActivatedEvent = {
3
3
  checked: boolean;
4
4
  value: string | null;
5
5
  };
6
+ export type TreeViewNodeType = 'leaf' | 'sub-tree';
7
+ export type TreeViewCheckedValue = 'true' | 'false' | 'mixed';
8
+ export type TreeViewNodeInfo = {
9
+ node: Element;
10
+ type: TreeViewNodeType;
11
+ path: string[];
12
+ checkedValue: TreeViewCheckedValue;
13
+ previousCheckedValue: TreeViewCheckedValue;
14
+ };
6
15
  declare global {
7
16
  interface HTMLElementEventMap {
8
17
  itemActivated: CustomEvent<ItemActivatedEvent>;
9
18
  beforeItemActivated: CustomEvent<ItemActivatedEvent>;
19
+ treeViewNodeActivated: CustomEvent<TreeViewNodeInfo>;
20
+ treeViewBeforeNodeActivated: CustomEvent<TreeViewNodeInfo>;
21
+ treeViewNodeExpanded: CustomEvent<TreeViewNodeInfo>;
22
+ treeViewNodeCollapsed: CustomEvent<TreeViewNodeInfo>;
23
+ treeViewNodeChecked: CustomEvent<TreeViewNodeInfo[]>;
24
+ treeViewBeforeNodeChecked: CustomEvent<TreeViewNodeInfo[]>;
10
25
  }
11
26
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@primer/view-components",
3
- "version": "0.43.6",
3
+ "version": "0.44.0-rc.2b4579f7",
4
4
  "description": "ViewComponents for the Primer Design System",
5
5
  "main": "app/assets/javascripts/primer_view_components.js",
6
6
  "module": "app/components/primer/primer.js",
@@ -68,7 +68,7 @@
68
68
  "@github/markdownlint-github": "^0.8.0",
69
69
  "@github/prettier-config": "0.0.6",
70
70
  "@playwright/test": "^1.49.1",
71
- "@primer/css": "22.0.0",
71
+ "@primer/css": "22.0.2",
72
72
  "@primer/stylelint-config": "^13.1.1",
73
73
  "@rollup/plugin-node-resolve": "^16.0.1",
74
74
  "@rollup/plugin-typescript": "^8.3.3",