openproject-primer_view_components 0.70.5 → 0.72.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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +20 -0
- data/app/assets/javascripts/components/primer/alpha/segmented_control.d.ts +2 -2
- data/app/assets/javascripts/components/primer/{open_project → alpha}/tree_view/tree_view.d.ts +11 -1
- data/app/assets/javascripts/components/primer/{open_project → alpha}/tree_view/tree_view_sub_tree_node_element.d.ts +5 -1
- data/app/assets/javascripts/components/primer/open_project/filterable_tree_view.d.ts +29 -0
- data/app/assets/javascripts/components/primer/primer.d.ts +5 -4
- data/app/assets/javascripts/primer_view_components.js +1 -1
- data/app/assets/javascripts/primer_view_components.js.map +1 -1
- data/app/assets/styles/primer_view_components.css +1 -1
- data/app/assets/styles/primer_view_components.css.map +1 -1
- data/app/components/primer/{open_project → alpha}/file_tree_view/directory_node.rb +1 -1
- data/app/components/primer/{open_project → alpha}/file_tree_view/file_node.rb +1 -1
- data/app/components/primer/{open_project → alpha}/file_tree_view.rb +1 -1
- data/app/components/primer/alpha/segmented_control.d.ts +2 -2
- data/app/components/primer/alpha/segmented_control.js +12 -0
- data/app/components/primer/alpha/segmented_control.ts +16 -1
- data/app/components/primer/{open_project → alpha}/skeleton_box.css.json +1 -1
- data/app/components/primer/{open_project → alpha}/skeleton_box.css.map +1 -1
- data/app/components/primer/{open_project → alpha}/skeleton_box.pcss +1 -1
- data/app/components/primer/{open_project → alpha}/skeleton_box.rb +3 -1
- data/app/components/primer/alpha/stack.css +1 -1
- data/app/components/primer/alpha/stack.css.json +5 -1
- data/app/components/primer/alpha/stack.css.map +1 -1
- data/app/components/primer/alpha/stack.pcss +13 -0
- data/app/components/primer/alpha/stack.rb +2 -1
- data/app/components/primer/{open_project → alpha}/tree_view/icon.rb +2 -2
- data/app/components/primer/{open_project → alpha}/tree_view/icon_pair.rb +4 -4
- data/app/components/primer/{open_project → alpha}/tree_view/leading_action.rb +2 -2
- data/app/components/primer/{open_project → alpha}/tree_view/leaf_node.rb +6 -6
- data/app/components/primer/{open_project → alpha}/tree_view/loading_failure_message.rb +2 -2
- data/app/components/primer/{open_project → alpha}/tree_view/node.rb +30 -14
- data/app/components/primer/{open_project → alpha}/tree_view/skeleton_loader.html.erb +3 -3
- data/app/components/primer/{open_project → alpha}/tree_view/skeleton_loader.rb +4 -4
- data/app/components/primer/{open_project → alpha}/tree_view/spinner_loader.html.erb +2 -2
- data/app/components/primer/{open_project → alpha}/tree_view/spinner_loader.rb +4 -4
- data/app/components/primer/{open_project → alpha}/tree_view/sub_tree.html.erb +1 -1
- data/app/components/primer/{open_project → alpha}/tree_view/sub_tree.rb +10 -10
- data/app/components/primer/{open_project → alpha}/tree_view/sub_tree_container.rb +2 -2
- data/app/components/primer/{open_project → alpha}/tree_view/sub_tree_node.rb +28 -18
- data/app/components/primer/{open_project → alpha}/tree_view/tree_view.d.ts +11 -1
- data/app/components/primer/{open_project → alpha}/tree_view/tree_view.js +120 -20
- data/app/components/primer/{open_project → alpha}/tree_view/tree_view.ts +137 -18
- data/app/components/primer/{open_project → alpha}/tree_view/tree_view_include_fragment_element.js +0 -1
- data/app/components/primer/{open_project → alpha}/tree_view/tree_view_include_fragment_element.ts +0 -1
- data/app/components/primer/{open_project → alpha}/tree_view/tree_view_sub_tree_node_element.d.ts +5 -1
- data/app/components/primer/{open_project → alpha}/tree_view/tree_view_sub_tree_node_element.js +27 -4
- data/app/components/primer/{open_project → alpha}/tree_view/tree_view_sub_tree_node_element.ts +36 -5
- data/app/components/primer/{open_project → alpha}/tree_view/visual.rb +2 -2
- data/app/components/primer/alpha/tree_view.css +1 -0
- data/app/components/primer/{open_project → alpha}/tree_view.css.json +8 -1
- data/app/components/primer/alpha/tree_view.css.map +1 -0
- data/app/components/primer/alpha/tree_view.html.erb +12 -0
- data/app/components/primer/{open_project → alpha}/tree_view.pcss +39 -0
- data/app/components/primer/{open_project → alpha}/tree_view.rb +20 -12
- data/app/components/primer/beta/breadcrumbs.css +1 -1
- data/app/components/primer/beta/breadcrumbs.css.json +0 -1
- data/app/components/primer/beta/breadcrumbs.css.map +1 -1
- data/app/components/primer/beta/breadcrumbs.pcss +2 -8
- data/app/components/primer/beta/progress_bar.css +1 -1
- data/app/components/primer/beta/progress_bar.css.map +1 -1
- data/app/components/primer/beta/progress_bar.pcss +3 -2
- data/app/components/primer/beta/relative_time.rb +3 -0
- data/app/components/primer/open_project/filterable_tree_view/sub_tree.rb +39 -0
- data/app/components/primer/open_project/filterable_tree_view.d.ts +29 -0
- data/app/components/primer/open_project/filterable_tree_view.html.erb +28 -0
- data/app/components/primer/open_project/filterable_tree_view.js +409 -0
- data/app/components/primer/open_project/filterable_tree_view.rb +254 -0
- data/app/components/primer/open_project/filterable_tree_view.ts +492 -0
- data/app/components/primer/primer.d.ts +5 -4
- data/app/components/primer/primer.js +5 -4
- data/app/components/primer/primer.pcss +2 -2
- data/app/components/primer/primer.ts +5 -4
- data/app/controllers/primer/view_components/tree_view_items_controller.rb +1 -1
- data/app/forms/check_box_with_nested_form.rb +10 -10
- data/app/forms/radio_button_with_nested_form.rb +16 -16
- data/app/lib/primer/experimental_slot_helpers.rb +2 -2
- data/app/lib/primer/forms/base_component.rb +1 -1
- data/app/lib/primer/forms/dsl/text_field_input.rb +2 -0
- data/app/views/primer/view_components/tree_view_items/async_alpha.html_fragment.erb +1 -1
- data/app/views/primer/view_components/tree_view_items/index.html_fragment.erb +1 -1
- data/config/locales/en.yml +20 -0
- data/lib/primer/view_components/version.rb +2 -2
- data/previews/primer/{open_project → alpha}/file_tree_view_preview/default.html.erb +1 -1
- data/previews/primer/{open_project → alpha}/file_tree_view_preview/playground.html.erb +1 -1
- data/previews/primer/{open_project → alpha}/file_tree_view_preview.rb +1 -1
- data/previews/primer/{open_project → alpha}/skeleton_box_preview.rb +3 -3
- data/previews/primer/{open_project → alpha}/tree_view_preview/async_alpha.html.erb +1 -1
- data/previews/primer/{open_project → alpha}/tree_view_preview/buttons.html.erb +5 -5
- data/previews/primer/{open_project → alpha}/tree_view_preview/default.html.erb +5 -5
- data/previews/primer/{open_project → alpha}/tree_view_preview/empty.html.erb +1 -1
- data/previews/primer/alpha/tree_view_preview/form_input.html.erb +14 -0
- data/previews/primer/{open_project → alpha}/tree_view_preview/leaf_node_playground.html.erb +2 -2
- data/previews/primer/{open_project → alpha}/tree_view_preview/links.html.erb +5 -5
- data/previews/primer/{open_project → alpha}/tree_view_preview/loading_failure.html.erb +1 -1
- data/previews/primer/{open_project → alpha}/tree_view_preview/loading_skeleton.html.erb +1 -1
- data/previews/primer/{open_project → alpha}/tree_view_preview/loading_spinner.html.erb +1 -1
- data/previews/primer/{open_project → alpha}/tree_view_preview/playground.html.erb +1 -1
- data/previews/primer/{open_project → alpha}/tree_view_preview.rb +34 -15
- data/previews/primer/open_project/filterable_tree_view_preview/_custom_select_js.html.erb +62 -0
- data/previews/primer/open_project/filterable_tree_view_preview/custom_checkbox_text.html.erb +26 -0
- data/previews/primer/open_project/filterable_tree_view_preview/custom_no_results_text.html.erb +28 -0
- data/previews/primer/open_project/filterable_tree_view_preview/custom_segmented_control.html.erb +31 -0
- data/previews/primer/open_project/filterable_tree_view_preview/default.html.erb +26 -0
- data/previews/primer/open_project/filterable_tree_view_preview/form_input.html.erb +32 -0
- data/previews/primer/open_project/filterable_tree_view_preview/playground.html.erb +26 -0
- data/previews/primer/open_project/filterable_tree_view_preview/stress_test.html.erb +28 -0
- data/previews/primer/open_project/filterable_tree_view_preview.rb +125 -0
- data/static/arguments.json +1685 -1581
- data/static/audited_at.json +19 -17
- data/static/classes.json +5 -5
- data/static/constants.json +137 -98
- data/static/info_arch.json +6396 -6146
- data/static/previews.json +120 -21
- data/static/statuses.json +19 -17
- metadata +102 -84
- data/app/components/primer/open_project/tree_view.css +0 -1
- data/app/components/primer/open_project/tree_view.css.map +0 -1
- data/app/components/primer/open_project/tree_view.html.erb +0 -7
- /data/app/assets/javascripts/components/primer/{open_project → alpha}/tree_view/tree_view_icon_pair_element.d.ts +0 -0
- /data/app/assets/javascripts/components/primer/{open_project → alpha}/tree_view/tree_view_include_fragment_element.d.ts +0 -0
- /data/app/assets/javascripts/components/primer/{open_project → alpha}/tree_view/tree_view_roving_tab_index.d.ts +0 -0
- /data/app/components/primer/{open_project → alpha}/file_tree_view/directory_node.html.erb +0 -0
- /data/app/components/primer/{open_project → alpha}/file_tree_view/file_node.html.erb +0 -0
- /data/app/components/primer/{open_project → alpha}/skeleton_box.css +0 -0
- /data/app/components/primer/{open_project → alpha}/skeleton_box.html.erb +0 -0
- /data/app/components/primer/{open_project → alpha}/tree_view/icon.html.erb +0 -0
- /data/app/components/primer/{open_project → alpha}/tree_view/icon_pair.html.erb +0 -0
- /data/app/components/primer/{open_project → alpha}/tree_view/leading_action.html.erb +0 -0
- /data/app/components/primer/{open_project → alpha}/tree_view/leaf_node.html.erb +0 -0
- /data/app/components/primer/{open_project → alpha}/tree_view/loading_failure_message.html.erb +0 -0
- /data/app/components/primer/{open_project → alpha}/tree_view/node.html.erb +0 -0
- /data/app/components/primer/{open_project → alpha}/tree_view/sub_tree_container.html.erb +0 -0
- /data/app/components/primer/{open_project → alpha}/tree_view/sub_tree_node.html.erb +0 -0
- /data/app/components/primer/{open_project → alpha}/tree_view/tree_view_icon_pair_element.d.ts +0 -0
- /data/app/components/primer/{open_project → alpha}/tree_view/tree_view_icon_pair_element.js +0 -0
- /data/app/components/primer/{open_project → alpha}/tree_view/tree_view_icon_pair_element.ts +0 -0
- /data/app/components/primer/{open_project → alpha}/tree_view/tree_view_include_fragment_element.d.ts +0 -0
- /data/app/components/primer/{open_project → alpha}/tree_view/tree_view_roving_tab_index.d.ts +0 -0
- /data/app/components/primer/{open_project → alpha}/tree_view/tree_view_roving_tab_index.js +0 -0
- /data/app/components/primer/{open_project → alpha}/tree_view/tree_view_roving_tab_index.ts +0 -0
- /data/app/components/primer/{open_project → alpha}/tree_view/visual.html.erb +0 -0
@@ -1,7 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
module Primer
|
4
|
-
module
|
4
|
+
module Alpha
|
5
5
|
class FileTreeView
|
6
6
|
class DirectoryNode < TreeView::SubTreeNode
|
7
7
|
def initialize(icon_arguments: nil, expanded_icon_arguments: nil, collapsed_icon_arguments: nil, **system_arguments)
|
@@ -1,12 +1,12 @@
|
|
1
|
-
declare class SegmentedControlElement extends HTMLElement {
|
1
|
+
export declare class SegmentedControlElement extends HTMLElement {
|
2
2
|
#private;
|
3
3
|
items: HTMLElement[];
|
4
4
|
connectedCallback(): void;
|
5
5
|
select(event: Event): void;
|
6
|
+
get current(): HTMLElement | null;
|
6
7
|
}
|
7
8
|
declare global {
|
8
9
|
interface Window {
|
9
10
|
SegmentedControlElement: typeof SegmentedControlElement;
|
10
11
|
}
|
11
12
|
}
|
12
|
-
export {};
|
@@ -27,6 +27,17 @@ let SegmentedControlElement = class SegmentedControlElement extends HTMLElement
|
|
27
27
|
}
|
28
28
|
button.closest('li.SegmentedControl-item')?.classList.add('SegmentedControl-item--selected');
|
29
29
|
button.setAttribute('aria-current', 'true');
|
30
|
+
this.dispatchEvent(new CustomEvent('itemActivated', {
|
31
|
+
bubbles: true,
|
32
|
+
detail: {
|
33
|
+
item: button,
|
34
|
+
checked: false,
|
35
|
+
value: button.querySelector('.Button-label')?.textContent,
|
36
|
+
},
|
37
|
+
}));
|
38
|
+
}
|
39
|
+
get current() {
|
40
|
+
return this.querySelector('[aria-current=true]');
|
30
41
|
}
|
31
42
|
};
|
32
43
|
_SegmentedControlElement_instances = new WeakSet();
|
@@ -41,6 +52,7 @@ __decorate([
|
|
41
52
|
SegmentedControlElement = __decorate([
|
42
53
|
controller
|
43
54
|
], SegmentedControlElement);
|
55
|
+
export { SegmentedControlElement };
|
44
56
|
if (!window.customElements.get('segmented-control')) {
|
45
57
|
window.SegmentedControlElement = SegmentedControlElement;
|
46
58
|
window.customElements.define('segmented-control', SegmentedControlElement);
|
@@ -1,7 +1,7 @@
|
|
1
1
|
import {controller, targets} from '@github/catalyst'
|
2
2
|
|
3
3
|
@controller
|
4
|
-
class SegmentedControlElement extends HTMLElement {
|
4
|
+
export class SegmentedControlElement extends HTMLElement {
|
5
5
|
@targets items: HTMLElement[]
|
6
6
|
|
7
7
|
connectedCallback() {
|
@@ -17,6 +17,21 @@ class SegmentedControlElement extends HTMLElement {
|
|
17
17
|
|
18
18
|
button.closest('li.SegmentedControl-item')?.classList.add('SegmentedControl-item--selected')
|
19
19
|
button.setAttribute('aria-current', 'true')
|
20
|
+
|
21
|
+
this.dispatchEvent(
|
22
|
+
new CustomEvent('itemActivated', {
|
23
|
+
bubbles: true,
|
24
|
+
detail: {
|
25
|
+
item: button,
|
26
|
+
checked: false,
|
27
|
+
value: button.querySelector('.Button-label')?.textContent,
|
28
|
+
},
|
29
|
+
}),
|
30
|
+
)
|
31
|
+
}
|
32
|
+
|
33
|
+
get current(): HTMLElement | null {
|
34
|
+
return this.querySelector('[aria-current=true]')
|
20
35
|
}
|
21
36
|
|
22
37
|
// Updates the button labels to have a data-content attribute with the text
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["skeleton_box.pcss"],"names":[],"mappings":"AAAA,mBACE,GACE,kBACF,CAEA,GACE,eACF,CACF,CAEA,aAKE,iBAAkB,CAFlB,qCAAsC,CACtC,uCAAwC,CAHxC,aAAc,CACd,WAiBF,CAZE,8CAPF,aAUI,iBAAkB,CAClB,qBAAsB,CACtB,kCAAmC,CAJnC,
|
1
|
+
{"version":3,"sources":["skeleton_box.pcss"],"names":[],"mappings":"AAAA,mBACE,GACE,kBACF,CAEA,GACE,eACF,CACF,CAEA,aAKE,iBAAkB,CAFlB,qCAAsC,CACtC,uCAAwC,CAHxC,aAAc,CACd,WAiBF,CAZE,8CAPF,aAUI,iBAAkB,CAClB,qBAAsB,CACtB,kCAAmC,CAJnC,wDAAoE,CACpE,cAUJ,CANE,CAEA,8BAfF,aAgBI,uBAA8B,CAC9B,mBAEJ,CADE","file":"skeleton_box.css","sourcesContent":["@keyframes shimmer {\n from {\n mask-position: 200%;\n }\n\n to {\n mask-position: 0%;\n }\n}\n\n.SkeletonBox {\n display: block;\n height: 1rem;\n background-color: var(--bgColor-muted);\n border-radius: var(--borderRadius-small);\n animation: shimmer;\n\n @media (prefers-reduced-motion: no-preference) {\n mask-image: linear-gradient(75deg, #000 30%, rgb(0, 0, 0, 0.65) 80%);\n mask-size: 200%;\n animation: shimmer;\n animation-duration: 1s;\n animation-iteration-count: infinite;\n }\n\n @media (forced-colors: active) {\n outline: 1px solid transparent;\n outline-offset: -1px;\n }\n}\n"]}
|
@@ -16,7 +16,7 @@
|
|
16
16
|
animation: shimmer;
|
17
17
|
|
18
18
|
@media (prefers-reduced-motion: no-preference) {
|
19
|
-
mask-image: linear-gradient(75deg, #000 30%,
|
19
|
+
mask-image: linear-gradient(75deg, #000 30%, rgb(0, 0, 0, 0.65) 80%);
|
20
20
|
mask-size: 200%;
|
21
21
|
animation: shimmer;
|
22
22
|
animation-duration: 1s;
|
@@ -1,10 +1,12 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
module Primer
|
4
|
-
module
|
4
|
+
module Alpha
|
5
5
|
# A SkeletonBox provides a placeholder for non-text, non-Avatar elements (e.g., hero images)
|
6
6
|
# that are still loading. You can adjust width and height to match the content's dimensions.
|
7
7
|
class SkeletonBox < Primer::Component
|
8
|
+
status :alpha
|
9
|
+
|
8
10
|
# @param height [String] Any valid CSS height.
|
9
11
|
# @param width [String] Any valid CSS width.
|
10
12
|
# @param system_arguments [Hash] <%= link_to_system_arguments_docs %>
|
@@ -1 +1 @@
|
|
1
|
-
.Stack{align-content:flex-start;align-items:stretch;display:flex;flex-flow:column;gap:var(--stack-gap,var(--stack-gap-normal,1rem))}.Stack[data-padding-narrow=none],.Stack[data-padding=none]{padding:0}.Stack[data-padding-narrow=condensed],.Stack[data-padding=condensed]{padding:var(--stack-padding-condensed,8px)}.Stack[data-padding-narrow=normal],.Stack[data-padding=normal]{padding:var(--stack-padding-normal,16px)}.Stack[data-padding-narrow=spacious],.Stack[data-padding=spacious]{padding:var(--stack-padding-spacious,24px)}.Stack[data-direction-narrow=horizontal],.Stack[data-direction=horizontal]{flex-flow:row}.Stack[data-direction-narrow=vertical],.Stack[data-direction=vertical]{flex-flow:column}.Stack[data-gap-narrow=none],.Stack[data-gap=none]{--stack-gap:var(--stack-gap-none,0)}.Stack[data-gap-narrow=condensed],.Stack[data-gap=condensed]{--stack-gap:var(--stack-gap-condensed,0.5rem)}.Stack[data-gap-narrow=normal],.Stack[data-gap=normal]{--stack-gap:var(--stack-gap-normal,1rem)}.Stack[data-gap-narrow=spacious],.Stack[data-gap=spacious]{--stack-gap:var(--stack-gap-spacious,1.5rem)}.Stack[data-align-narrow=start],.Stack[data-align=start]{align-items:flex-start}.Stack[data-align-narrow=center],.Stack[data-align=center]{align-items:center}.Stack[data-align-narrow=end],.Stack[data-align=end]{align-items:flex-end}.Stack[data-align-narrow=baseline],.Stack[data-align=baseline]{align-items:baseline}.Stack[data-justify-narrow=start],.Stack[data-justify=start]{justify-content:flex-start}.Stack[data-justify-narrow=center],.Stack[data-justify=center]{justify-content:center}.Stack[data-justify-narrow=end],.Stack[data-justify=end]{justify-content:flex-end}.Stack[data-justify-narrow=space-between],.Stack[data-justify=space-between]{justify-content:space-between}.Stack[data-justify-narrow=space-evenly],.Stack[data-justify=space-evenly]{justify-content:space-evenly}.Stack[data-wrap-narrow=wrap],.Stack[data-wrap=wrap]{flex-wrap:wrap}.Stack[data-wrap-narrow=nowrap],.Stack[data-wrap=nowrap]{flex-wrap:nowrap}@media (min-width:48rem){.Stack[data-padding-regular=none]{padding:0}.Stack[data-padding-regular=condensed]{padding:var(--stack-padding-condensed,8px)}.Stack[data-padding-regular=normal]{padding:var(--stack-padding-normal,16px)}.Stack[data-padding-regular=spacious]{padding:var(--stack-padding-spacious,24px)}.Stack[data-direction-regular=horizontal]{flex-flow:row}.Stack[data-direction-regular=vertical]{flex-flow:column}.Stack[data-gap-regular=none]{--stack-gap:var(--stack-gap-none,0)}.Stack[data-gap-regular=condensed]{--stack-gap:var(--stack-gap-condensed,0.5rem)}.Stack[data-gap-regular=normal]{--stack-gap:var(--stack-gap-normal,1rem)}.Stack[data-gap-regular=spacious]{--stack-gap:var(--stack-gap-spacious,1.5rem)}.Stack[data-align-regular=start]{align-items:flex-start}.Stack[data-align-regular=center]{align-items:center}.Stack[data-align-regular=end]{align-items:flex-end}.Stack[data-align-regular=baseline]{align-items:baseline}.Stack[data-justify-regular=start]{justify-content:flex-start}.Stack[data-justify-regular=center]{justify-content:center}.Stack[data-justify-regular=end]{justify-content:flex-end}.Stack[data-justify-regular=space-between]{justify-content:space-between}.Stack[data-justify-regular=space-evenly]{justify-content:space-evenly}.Stack[data-wrap-regular=wrap]{flex-wrap:wrap}.Stack[data-wrap-regular=nowrap]{flex-wrap:nowrap}}@media (min-width:87.5rem){.Stack[data-padding-wide=none]{padding:0}.Stack[data-padding-wide=condensed]{padding:var(--stack-padding-condensed,8px)}.Stack[data-padding-wide=normal]{padding:var(--stack-padding-normal,16px)}.Stack[data-padding-wide=spacious]{padding:var(--stack-padding-spacious,24px)}.Stack[data-direction-wide=horizontal]{flex-flow:row}.Stack[data-direction-wide=vertical]{flex-flow:column}.Stack[data-gap-wide=none]{--stack-gap:var(--stack-gap-none,0)}.Stack[data-gap-wide=condensed]{--stack-gap:var(--stack-gap-condensed,0.5rem)}.Stack[data-gap-wide=normal]{--stack-gap:var(--stack-gap-normal,1rem)}.Stack[data-gap-wide=spacious]{--stack-gap:var(--stack-gap-spacious,1.5rem)}.Stack[data-align-wide=start]{align-items:flex-start}.Stack[data-align-wide=center]{align-items:center}.Stack[data-align-wide=end]{align-items:flex-end}.Stack[data-align-wide=baseline]{align-items:baseline}.Stack[data-justify-wide=start]{justify-content:flex-start}.Stack[data-justify-wide=center]{justify-content:center}.Stack[data-justify-wide=end]{justify-content:flex-end}.Stack[data-justify-wide=space-between]{justify-content:space-between}.Stack[data-justify-wide=space-evenly]{justify-content:space-evenly}.Stack[data-wrap-wide=wrap]{flex-wrap:wrap}.Stack[data-wrap-wide=nowrap]{flex-wrap:nowrap}}
|
1
|
+
.Stack{align-content:flex-start;align-items:stretch;display:flex;flex-flow:column;gap:var(--stack-gap,var(--stack-gap-normal,1rem))}.Stack[data-padding-narrow=none],.Stack[data-padding=none]{padding:0}.Stack[data-padding-narrow=condensed],.Stack[data-padding=condensed]{padding:var(--stack-padding-condensed,8px)}.Stack[data-padding-narrow=normal],.Stack[data-padding=normal]{padding:var(--stack-padding-normal,16px)}.Stack[data-padding-narrow=spacious],.Stack[data-padding=spacious]{padding:var(--stack-padding-spacious,24px)}.Stack[data-direction-narrow=horizontal],.Stack[data-direction=horizontal]{flex-flow:row}.Stack[data-direction-narrow=vertical],.Stack[data-direction=vertical]{flex-flow:column}.Stack[data-gap-narrow=none],.Stack[data-gap=none]{--stack-gap:var(--stack-gap-none,0)}.Stack[data-gap-narrow=condensed],.Stack[data-gap=condensed]{--stack-gap:var(--stack-gap-condensed,0.5rem)}.Stack[data-gap-narrow=normal],.Stack[data-gap=normal]{--stack-gap:var(--stack-gap-normal,1rem)}.Stack[data-gap-narrow=spacious],.Stack[data-gap=spacious]{--stack-gap:var(--stack-gap-spacious,1.5rem)}.Stack[data-align-narrow=start],.Stack[data-align=start]{align-items:flex-start}.Stack[data-align-narrow=center],.Stack[data-align=center]{align-items:center}.Stack[data-align-narrow=end],.Stack[data-align=end]{align-items:flex-end}.Stack[data-align-narrow=baseline],.Stack[data-align=baseline]{align-items:baseline}.Stack[data-justify-narrow=start],.Stack[data-justify=start]{justify-content:flex-start}.Stack[data-justify-narrow=center],.Stack[data-justify=center]{justify-content:center}.Stack[data-justify-narrow=end],.Stack[data-justify=end]{justify-content:flex-end}.Stack[data-justify-narrow=space-between],.Stack[data-justify=space-between]{justify-content:space-between}.Stack[data-justify-narrow=space-evenly],.Stack[data-justify=space-evenly]{justify-content:space-evenly}.Stack[data-wrap-narrow=wrap],.Stack[data-wrap=wrap]{flex-wrap:wrap}.Stack[data-wrap-narrow=nowrap],.Stack[data-wrap=nowrap]{flex-wrap:nowrap}.Stack[data-wrap-narrow=reverse],.Stack[data-wrap=reverse]{flex-wrap:wrap-reverse}@media (min-width:48rem){.Stack[data-padding-regular=none]{padding:0}.Stack[data-padding-regular=condensed]{padding:var(--stack-padding-condensed,8px)}.Stack[data-padding-regular=normal]{padding:var(--stack-padding-normal,16px)}.Stack[data-padding-regular=spacious]{padding:var(--stack-padding-spacious,24px)}.Stack[data-direction-regular=horizontal]{flex-flow:row}.Stack[data-direction-regular=vertical]{flex-flow:column}.Stack[data-gap-regular=none]{--stack-gap:var(--stack-gap-none,0)}.Stack[data-gap-regular=condensed]{--stack-gap:var(--stack-gap-condensed,0.5rem)}.Stack[data-gap-regular=normal]{--stack-gap:var(--stack-gap-normal,1rem)}.Stack[data-gap-regular=spacious]{--stack-gap:var(--stack-gap-spacious,1.5rem)}.Stack[data-align-regular=start]{align-items:flex-start}.Stack[data-align-regular=center]{align-items:center}.Stack[data-align-regular=end]{align-items:flex-end}.Stack[data-align-regular=baseline]{align-items:baseline}.Stack[data-justify-regular=start]{justify-content:flex-start}.Stack[data-justify-regular=center]{justify-content:center}.Stack[data-justify-regular=end]{justify-content:flex-end}.Stack[data-justify-regular=space-between]{justify-content:space-between}.Stack[data-justify-regular=space-evenly]{justify-content:space-evenly}.Stack[data-wrap-regular=wrap]{flex-wrap:wrap}.Stack[data-wrap-regular=nowrap]{flex-wrap:nowrap}.Stack[data-wrap-regular=reverse]{flex-wrap:wrap-reverse}}@media (min-width:87.5rem){.Stack[data-padding-wide=none]{padding:0}.Stack[data-padding-wide=condensed]{padding:var(--stack-padding-condensed,8px)}.Stack[data-padding-wide=normal]{padding:var(--stack-padding-normal,16px)}.Stack[data-padding-wide=spacious]{padding:var(--stack-padding-spacious,24px)}.Stack[data-direction-wide=horizontal]{flex-flow:row}.Stack[data-direction-wide=vertical]{flex-flow:column}.Stack[data-gap-wide=none]{--stack-gap:var(--stack-gap-none,0)}.Stack[data-gap-wide=condensed]{--stack-gap:var(--stack-gap-condensed,0.5rem)}.Stack[data-gap-wide=normal]{--stack-gap:var(--stack-gap-normal,1rem)}.Stack[data-gap-wide=spacious]{--stack-gap:var(--stack-gap-spacious,1.5rem)}.Stack[data-align-wide=start]{align-items:flex-start}.Stack[data-align-wide=center]{align-items:center}.Stack[data-align-wide=end]{align-items:flex-end}.Stack[data-align-wide=baseline]{align-items:baseline}.Stack[data-justify-wide=start]{justify-content:flex-start}.Stack[data-justify-wide=center]{justify-content:center}.Stack[data-justify-wide=end]{justify-content:flex-end}.Stack[data-justify-wide=space-between]{justify-content:space-between}.Stack[data-justify-wide=space-evenly]{justify-content:space-evenly}.Stack[data-wrap-wide=wrap]{flex-wrap:wrap}.Stack[data-wrap-wide=nowrap]{flex-wrap:nowrap}.Stack[data-wrap-wide=reverse]{flex-wrap:wrap-reverse}}
|
@@ -44,6 +44,8 @@
|
|
44
44
|
".Stack[data-wrap=wrap]",
|
45
45
|
".Stack[data-wrap-narrow=nowrap]",
|
46
46
|
".Stack[data-wrap=nowrap]",
|
47
|
+
".Stack[data-wrap-narrow=reverse]",
|
48
|
+
".Stack[data-wrap=reverse]",
|
47
49
|
".Stack[data-padding-regular=none]",
|
48
50
|
".Stack[data-padding-regular=condensed]",
|
49
51
|
".Stack[data-padding-regular=normal]",
|
@@ -65,6 +67,7 @@
|
|
65
67
|
".Stack[data-justify-regular=space-evenly]",
|
66
68
|
".Stack[data-wrap-regular=wrap]",
|
67
69
|
".Stack[data-wrap-regular=nowrap]",
|
70
|
+
".Stack[data-wrap-regular=reverse]",
|
68
71
|
".Stack[data-padding-wide=none]",
|
69
72
|
".Stack[data-padding-wide=condensed]",
|
70
73
|
".Stack[data-padding-wide=normal]",
|
@@ -85,6 +88,7 @@
|
|
85
88
|
".Stack[data-justify-wide=space-between]",
|
86
89
|
".Stack[data-justify-wide=space-evenly]",
|
87
90
|
".Stack[data-wrap-wide=wrap]",
|
88
|
-
".Stack[data-wrap-wide=nowrap]"
|
91
|
+
".Stack[data-wrap-wide=nowrap]",
|
92
|
+
".Stack[data-wrap-wide=reverse]"
|
89
93
|
]
|
90
94
|
}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["stack.pcss"],"names":[],"mappings":"AAAA,OAIE,wBAAyB,CADzB,mBAAoB,CAFpB,YAAa,CACb,gBAAiB,CAGjB,
|
1
|
+
{"version":3,"sources":["stack.pcss"],"names":[],"mappings":"AAAA,OAIE,wBAAyB,CADzB,mBAAoB,CAFpB,YAAa,CACb,gBAAiB,CAGjB,iDAgTF,CA5SE,2DAEE,SACF,CAEA,qEAGE,0CACF,CAEA,+DAGE,wCACF,CAEA,mEAGE,0CACF,CAEA,2EAEE,aACF,CAEA,uEAEE,gBACF,CAEA,mDAEE,mCACF,CAEA,6DAEE,6CACF,CAEA,uDAEE,wCACF,CAEA,2DAEE,4CACF,CAEA,yDAEE,sBACF,CAEA,2DAEE,kBACF,CAEA,qDAEE,oBACF,CAEA,+DAEE,oBACF,CAEA,6DAEE,0BACF,CAEA,+DAEE,sBACF,CAEA,yDAEE,wBACF,CAEA,6EAEE,6BACF,CAEA,2EAEE,4BACF,CAEA,qDAEE,cACF,CAEA,yDAEE,gBACF,CAEA,2DAEE,sBACF,CAGA,yBACE,kCACE,SACF,CAEA,uCAEE,0CACF,CAEA,oCAEE,wCACF,CAEA,sCAEE,0CACF,CAEA,0CACE,aACF,CAEA,wCACE,gBACF,CAEA,8BACE,mCACF,CAEA,mCACE,6CACF,CAEA,gCACE,wCACF,CAEA,kCACE,4CACF,CAEA,iCACE,sBACF,CAEA,kCACE,kBACF,CAEA,+BACE,oBACF,CAEA,oCACE,oBACF,CAEA,mCACE,0BACF,CAEA,oCACE,sBACF,CAEA,iCACE,wBACF,CAEA,2CACE,6BACF,CAEA,0CACE,4BACF,CAEA,+BACE,cACF,CAEA,iCACE,gBACF,CAEA,kCACE,sBACF,CACF,CAGA,2BACE,+BACE,SACF,CAEA,oCAEE,0CACF,CAEA,iCAEE,wCACF,CAEA,mCAEE,0CACF,CAEA,uCACE,aACF,CAEA,qCACE,gBACF,CAEA,2BACE,mCACF,CAEA,gCACE,6CACF,CAEA,6BACE,wCACF,CAEA,+BACE,4CACF,CAEA,8BACE,sBACF,CAEA,+BACE,kBACF,CAEA,4BACE,oBACF,CAEA,iCACE,oBACF,CAEA,gCACE,0BACF,CAEA,iCACE,sBACF,CAEA,8BACE,wBACF,CAEA,wCACE,6BACF,CAEA,uCACE,4BACF,CAEA,4BACE,cACF,CAEA,8BACE,gBACF,CAEA,+BACE,sBACF,CACF","file":"stack.css","sourcesContent":[".Stack {\n display: flex;\n flex-flow: column;\n align-items: stretch;\n align-content: flex-start;\n gap: var(--stack-gap, var(--stack-gap-normal, 1rem));\n\n /* non-responsive values */\n\n &[data-padding='none'],\n &[data-padding-narrow='none'] {\n padding: 0;\n }\n\n &[data-padding='condensed'],\n &[data-padding-narrow='condensed'] {\n /* stylelint-disable-next-line primer/spacing */\n padding: var(--stack-padding-condensed, 8px);\n }\n\n &[data-padding='normal'],\n &[data-padding-narrow='normal'] {\n /* stylelint-disable-next-line primer/spacing */\n padding: var(--stack-padding-normal, 16px);\n }\n\n &[data-padding='spacious'],\n &[data-padding-narrow='spacious'] {\n /* stylelint-disable-next-line primer/spacing */\n padding: var(--stack-padding-spacious, 24px);\n }\n\n &[data-direction='horizontal'],\n &[data-direction-narrow='horizontal'] {\n flex-flow: row;\n }\n\n &[data-direction='vertical'],\n &[data-direction-narrow='vertical'] {\n flex-flow: column;\n }\n\n &[data-gap='none'],\n &[data-gap-narrow='none'] {\n --stack-gap: var(--stack-gap-none, 0);\n }\n\n &[data-gap='condensed'],\n &[data-gap-narrow='condensed'] {\n --stack-gap: var(--stack-gap-condensed, 0.5rem);\n }\n\n &[data-gap='normal'],\n &[data-gap-narrow='normal'] {\n --stack-gap: var(--stack-gap-normal, 1rem);\n }\n\n &[data-gap='spacious'],\n &[data-gap-narrow='spacious'] {\n --stack-gap: var(--stack-gap-spacious, 1.5rem);\n }\n\n &[data-align='start'],\n &[data-align-narrow='start'] {\n align-items: flex-start;\n }\n\n &[data-align='center'],\n &[data-align-narrow='center'] {\n align-items: center;\n }\n\n &[data-align='end'],\n &[data-align-narrow='end'] {\n align-items: flex-end;\n }\n\n &[data-align='baseline'],\n &[data-align-narrow='baseline'] {\n align-items: baseline;\n }\n\n &[data-justify='start'],\n &[data-justify-narrow='start'] {\n justify-content: flex-start;\n }\n\n &[data-justify='center'],\n &[data-justify-narrow='center'] {\n justify-content: center;\n }\n\n &[data-justify='end'],\n &[data-justify-narrow='end'] {\n justify-content: flex-end;\n }\n\n &[data-justify='space-between'],\n &[data-justify-narrow='space-between'] {\n justify-content: space-between;\n }\n\n &[data-justify='space-evenly'],\n &[data-justify-narrow='space-evenly'] {\n justify-content: space-evenly;\n }\n\n &[data-wrap='wrap'],\n &[data-wrap-narrow='wrap'] {\n flex-wrap: wrap;\n }\n\n &[data-wrap='nowrap'],\n &[data-wrap-narrow='nowrap'] {\n flex-wrap: nowrap;\n }\n\n &[data-wrap='reverse'],\n &[data-wrap-narrow='reverse'] {\n flex-wrap: wrap-reverse;\n }\n\n /* @custom-media --veiwportRange-regular */\n @media (min-width: 48rem) {\n &[data-padding-regular='none'] {\n padding: 0;\n }\n\n &[data-padding-regular='condensed'] {\n /* stylelint-disable-next-line primer/spacing */\n padding: var(--stack-padding-condensed, 8px);\n }\n\n &[data-padding-regular='normal'] {\n /* stylelint-disable-next-line primer/spacing */\n padding: var(--stack-padding-normal, 16px);\n }\n\n &[data-padding-regular='spacious'] {\n /* stylelint-disable-next-line primer/spacing */\n padding: var(--stack-padding-spacious, 24px);\n }\n\n &[data-direction-regular='horizontal'] {\n flex-flow: row;\n }\n\n &[data-direction-regular='vertical'] {\n flex-flow: column;\n }\n\n &[data-gap-regular='none'] {\n --stack-gap: var(--stack-gap-none, 0);\n }\n\n &[data-gap-regular='condensed'] {\n --stack-gap: var(--stack-gap-condensed, 0.5rem);\n }\n\n &[data-gap-regular='normal'] {\n --stack-gap: var(--stack-gap-normal, 1rem);\n }\n\n &[data-gap-regular='spacious'] {\n --stack-gap: var(--stack-gap-spacious, 1.5rem);\n }\n\n &[data-align-regular='start'] {\n align-items: flex-start;\n }\n\n &[data-align-regular='center'] {\n align-items: center;\n }\n\n &[data-align-regular='end'] {\n align-items: flex-end;\n }\n\n &[data-align-regular='baseline'] {\n align-items: baseline;\n }\n\n &[data-justify-regular='start'] {\n justify-content: flex-start;\n }\n\n &[data-justify-regular='center'] {\n justify-content: center;\n }\n\n &[data-justify-regular='end'] {\n justify-content: flex-end;\n }\n\n &[data-justify-regular='space-between'] {\n justify-content: space-between;\n }\n\n &[data-justify-regular='space-evenly'] {\n justify-content: space-evenly;\n }\n\n &[data-wrap-regular='wrap'] {\n flex-wrap: wrap;\n }\n\n &[data-wrap-regular='nowrap'] {\n flex-wrap: nowrap;\n }\n\n &[data-wrap-regular='reverse'] {\n flex-wrap: wrap-reverse;\n }\n }\n\n /* @custom-media --viewportRange-wide */\n @media (min-width: 87.5rem) {\n &[data-padding-wide='none'] {\n padding: 0;\n }\n\n &[data-padding-wide='condensed'] {\n /* stylelint-disable-next-line primer/spacing */\n padding: var(--stack-padding-condensed, 8px);\n }\n\n &[data-padding-wide='normal'] {\n /* stylelint-disable-next-line primer/spacing */\n padding: var(--stack-padding-normal, 16px);\n }\n\n &[data-padding-wide='spacious'] {\n /* stylelint-disable-next-line primer/spacing */\n padding: var(--stack-padding-spacious, 24px);\n }\n\n &[data-direction-wide='horizontal'] {\n flex-flow: row;\n }\n\n &[data-direction-wide='vertical'] {\n flex-flow: column;\n }\n\n &[data-gap-wide='none'] {\n --stack-gap: var(--stack-gap-none, 0);\n }\n\n &[data-gap-wide='condensed'] {\n --stack-gap: var(--stack-gap-condensed, 0.5rem);\n }\n\n &[data-gap-wide='normal'] {\n --stack-gap: var(--stack-gap-normal, 1rem);\n }\n\n &[data-gap-wide='spacious'] {\n --stack-gap: var(--stack-gap-spacious, 1.5rem);\n }\n\n &[data-align-wide='start'] {\n align-items: flex-start;\n }\n\n &[data-align-wide='center'] {\n align-items: center;\n }\n\n &[data-align-wide='end'] {\n align-items: flex-end;\n }\n\n &[data-align-wide='baseline'] {\n align-items: baseline;\n }\n\n &[data-justify-wide='start'] {\n justify-content: flex-start;\n }\n\n &[data-justify-wide='center'] {\n justify-content: center;\n }\n\n &[data-justify-wide='end'] {\n justify-content: flex-end;\n }\n\n &[data-justify-wide='space-between'] {\n justify-content: space-between;\n }\n\n &[data-justify-wide='space-evenly'] {\n justify-content: space-evenly;\n }\n\n &[data-wrap-wide='wrap'] {\n flex-wrap: wrap;\n }\n\n &[data-wrap-wide='nowrap'] {\n flex-wrap: nowrap;\n }\n\n &[data-wrap-wide='reverse'] {\n flex-wrap: wrap-reverse;\n }\n }\n}\n"]}
|
@@ -115,6 +115,11 @@
|
|
115
115
|
flex-wrap: nowrap;
|
116
116
|
}
|
117
117
|
|
118
|
+
&[data-wrap='reverse'],
|
119
|
+
&[data-wrap-narrow='reverse'] {
|
120
|
+
flex-wrap: wrap-reverse;
|
121
|
+
}
|
122
|
+
|
118
123
|
/* @custom-media --veiwportRange-regular */
|
119
124
|
@media (min-width: 48rem) {
|
120
125
|
&[data-padding-regular='none'] {
|
@@ -203,6 +208,10 @@
|
|
203
208
|
&[data-wrap-regular='nowrap'] {
|
204
209
|
flex-wrap: nowrap;
|
205
210
|
}
|
211
|
+
|
212
|
+
&[data-wrap-regular='reverse'] {
|
213
|
+
flex-wrap: wrap-reverse;
|
214
|
+
}
|
206
215
|
}
|
207
216
|
|
208
217
|
/* @custom-media --viewportRange-wide */
|
@@ -293,5 +302,9 @@
|
|
293
302
|
&[data-wrap-wide='nowrap'] {
|
294
303
|
flex-wrap: nowrap;
|
295
304
|
}
|
305
|
+
|
306
|
+
&[data-wrap-wide='reverse'] {
|
307
|
+
flex-wrap: wrap-reverse;
|
308
|
+
}
|
296
309
|
}
|
297
310
|
}
|
@@ -1,11 +1,11 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
module Primer
|
4
|
-
module
|
4
|
+
module Alpha
|
5
5
|
class TreeView
|
6
6
|
# An icon for a `TreeView` node.
|
7
7
|
#
|
8
|
-
# This component is part of the <%= link_to_component(Primer::
|
8
|
+
# This component is part of the <%= link_to_component(Primer::Alpha::TreeView) %> component and should
|
9
9
|
# not be used directly.
|
10
10
|
class Icon < Primer::Component
|
11
11
|
# @param system_arguments [Hash] The arguments accepted by <%= link_to_component(Primer::Beta::Octicon) %>.
|
@@ -1,24 +1,24 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
module Primer
|
4
|
-
module
|
4
|
+
module Alpha
|
5
5
|
class TreeView
|
6
6
|
# A pair of icons for a `TreeView` sub-tree that displays distinct icons when the sub-tree is
|
7
7
|
# expanded and collapsed.
|
8
8
|
#
|
9
|
-
# This component is part of the <%= link_to_component(Primer::
|
9
|
+
# This component is part of the <%= link_to_component(Primer::Alpha::TreeView) %> component and should
|
10
10
|
# not be used directly.
|
11
11
|
class IconPair < Primer::Component
|
12
12
|
# The expanded icon.
|
13
13
|
#
|
14
|
-
# @param system_arguments [Hash] The arguments accepted by <%= link_to_component(Primer::
|
14
|
+
# @param system_arguments [Hash] The arguments accepted by <%= link_to_component(Primer::Alpha::TreeView::Icon) %>.
|
15
15
|
renders_one :expanded_icon, lambda { |**system_arguments|
|
16
16
|
Icon.new(**system_arguments)
|
17
17
|
}
|
18
18
|
|
19
19
|
# The collapsed icon.
|
20
20
|
#
|
21
|
-
# @param system_arguments [Hash] The arguments accepted by <%= link_to_component(Primer::
|
21
|
+
# @param system_arguments [Hash] The arguments accepted by <%= link_to_component(Primer::Alpha::TreeView::Icon) %>.
|
22
22
|
renders_one :collapsed_icon, lambda { |**system_arguments|
|
23
23
|
Icon.new(**system_arguments)
|
24
24
|
}
|
@@ -1,11 +1,11 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
module Primer
|
4
|
-
module
|
4
|
+
module Alpha
|
5
5
|
class TreeView
|
6
6
|
# The leading action for `TreeView` nodes.
|
7
7
|
#
|
8
|
-
# This component is part of the <%= link_to_component(Primer::
|
8
|
+
# This component is part of the <%= link_to_component(Primer::Alpha::TreeView) %> component and should
|
9
9
|
# not be used directly.
|
10
10
|
class LeadingAction < Primer::Component
|
11
11
|
# @param action [ViewComponent::Base] A component or other renderable to use as the action button etc.
|
@@ -1,18 +1,18 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
module Primer
|
4
|
-
module
|
4
|
+
module Alpha
|
5
5
|
class TreeView
|
6
6
|
# A `TreeView` leaf node.
|
7
7
|
#
|
8
|
-
# This component is part of the <%= link_to_component(Primer::
|
8
|
+
# This component is part of the <%= link_to_component(Primer::Alpha::TreeView) %> component and should
|
9
9
|
# not be used directly.
|
10
10
|
class LeafNode < Primer::Component
|
11
11
|
# @!parse
|
12
12
|
# # Adds a leading visual icon rendered to the left of the node's label.
|
13
13
|
# #
|
14
14
|
# # @param label [String] A label describing the visual, displayed only to screen readers.
|
15
|
-
# # @param system_arguments [Hash] The arguments accepted by <%= link_to_component(Primer::
|
15
|
+
# # @param system_arguments [Hash] The arguments accepted by <%= link_to_component(Primer::Alpha::TreeView::Icon) %>.
|
16
16
|
# def with_leading_visual_icon(label: nil, **system_arguments, &block)
|
17
17
|
# end
|
18
18
|
|
@@ -52,7 +52,7 @@ module Primer
|
|
52
52
|
# # Adds a trailing visual icon rendered to the right of the node's label.
|
53
53
|
# #
|
54
54
|
# # @param label [String] A label describing the visual, displayed only to screen readers.
|
55
|
-
# # @param system_arguments [Hash] The arguments accepted by <%= link_to_component(Primer::
|
55
|
+
# # @param system_arguments [Hash] The arguments accepted by <%= link_to_component(Primer::Alpha::TreeView::Icon) %>.
|
56
56
|
# def with_trailing_visual_icon(label: nil, **system_arguments, &block)
|
57
57
|
# end
|
58
58
|
|
@@ -69,7 +69,7 @@ module Primer
|
|
69
69
|
delegate :current?, :merge_system_arguments!, to: :@node
|
70
70
|
|
71
71
|
# @param label [String] The node's label, i.e. it's textual content.
|
72
|
-
# @param system_arguments [Hash] The arguments accepted by <%= link_to_component(Primer::
|
72
|
+
# @param system_arguments [Hash] The arguments accepted by <%= link_to_component(Primer::Alpha::TreeView::Node) %>.
|
73
73
|
def initialize(label:, **system_arguments)
|
74
74
|
@label = label
|
75
75
|
@system_arguments = system_arguments
|
@@ -78,7 +78,7 @@ module Primer
|
|
78
78
|
data: { "node-type": "leaf" }
|
79
79
|
)
|
80
80
|
|
81
|
-
@node = Primer::
|
81
|
+
@node = Primer::Alpha::TreeView::Node.new(**@system_arguments)
|
82
82
|
end
|
83
83
|
|
84
84
|
private
|
@@ -1,11 +1,11 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
module Primer
|
4
|
-
module
|
4
|
+
module Alpha
|
5
5
|
class TreeView
|
6
6
|
# A `TreeView` loading failure message.
|
7
7
|
#
|
8
|
-
# This component is part of the <%= link_to_component(Primer::
|
8
|
+
# This component is part of the <%= link_to_component(Primer::Alpha::TreeView) %> component and should
|
9
9
|
# not be used directly.
|
10
10
|
class LoadingFailureMessage < Primer::Component
|
11
11
|
DEFAULT_TEXT = "Something went wrong"
|
@@ -1,14 +1,14 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
module Primer
|
4
|
-
module
|
4
|
+
module Alpha
|
5
5
|
class TreeView
|
6
6
|
# A generic `TreeView` node.
|
7
7
|
#
|
8
|
-
# This component is part of the <%= link_to_component(Primer::
|
8
|
+
# This component is part of the <%= link_to_component(Primer::Alpha::TreeView) %> component and should
|
9
9
|
# not be used directly.
|
10
10
|
class Node < Primer::Component
|
11
|
-
DEFAULT_NODE_VARIANT = Primer::
|
11
|
+
DEFAULT_NODE_VARIANT = Primer::Alpha::TreeView::DEFAULT_NODE_VARIANT
|
12
12
|
NODE_VARIANT_TAG_MAP = { DEFAULT_NODE_VARIANT => :div, :button => :button, :anchor => :a }.freeze
|
13
13
|
NODE_VARIANT_TAG_OPTIONS = NODE_VARIANT_TAG_MAP.keys.freeze
|
14
14
|
|
@@ -48,6 +48,12 @@ module Primer
|
|
48
48
|
# @return [Symbol]
|
49
49
|
attr_reader :node_variant
|
50
50
|
|
51
|
+
# Whether or not this node is disabled, i.e. cannot be activated.
|
52
|
+
#
|
53
|
+
# @return [Boolean]
|
54
|
+
attr_reader :disabled
|
55
|
+
alias disabled? disabled
|
56
|
+
|
51
57
|
DEFAULT_SELECT_VARIANT = :none
|
52
58
|
SELECT_VARIANT_OPTIONS = [
|
53
59
|
:multiple,
|
@@ -62,11 +68,13 @@ module Primer
|
|
62
68
|
]
|
63
69
|
|
64
70
|
# @param path [Array<String>] The node's "path," i.e. this node's label and the labels of all its ancestors. This node should be reachable by traversing the tree following this path.
|
65
|
-
# @param node_variant [Symbol] The node variant to use for the node's content, i.e. the `:button` or `:div`. <%= one_of(Primer::
|
71
|
+
# @param node_variant [Symbol] The node variant to use for the node's content, i.e. the `:button` or `:div`. <%= one_of(Primer::Alpha::TreeView::NODE_VARIANT_OPTIONS) %>
|
66
72
|
# @param href [String] The URL to use as the `href` attribute for this node. If set to a truthy value, the `tag:` parameter is ignored and assumed to be `:a`.
|
67
73
|
# @param current [Boolean] Whether or not this node is the current node. The current node is styled differently than regular nodes and is the first element that receives focus when tabbing to the `TreeView` component.
|
68
|
-
# @param select_variant [Symbol] Controls the type of checkbox that appears. <%= one_of(Primer::
|
69
|
-
# @param checked [Boolean | String] The checked state of the node's checkbox. <%= one_of(Primer::
|
74
|
+
# @param select_variant [Symbol] Controls the type of checkbox that appears. <%= one_of(Primer::Alpha::TreeView::Node::SELECT_VARIANT_OPTIONS) %>
|
75
|
+
# @param checked [Boolean | String] The checked state of the node's checkbox. <%= one_of(Primer::Alpha::TreeView::Node::CHECKED_STATES) %>
|
76
|
+
# @param disabled [Boolean] Whether or not the node can be activated. Passing `false` here will cause the node to appear visually disabled but it is still keyboard-focusable.
|
77
|
+
# @param value [String] If this node is checked, this value will be sent to the server on form submission.
|
70
78
|
# @param content_arguments [Hash] Arguments attached to the node's content, i.e the `<button>` or `<a>` element. <%= link_to_system_arguments_docs %>
|
71
79
|
def initialize(
|
72
80
|
path:,
|
@@ -75,6 +83,8 @@ module Primer
|
|
75
83
|
current: false,
|
76
84
|
select_variant: DEFAULT_SELECT_VARIANT,
|
77
85
|
checked: DEFAULT_CHECKED_STATE,
|
86
|
+
disabled: false,
|
87
|
+
value: nil,
|
78
88
|
**content_arguments
|
79
89
|
)
|
80
90
|
@system_arguments = {
|
@@ -89,6 +99,7 @@ module Primer
|
|
89
99
|
@current = current
|
90
100
|
@select_variant = fetch_or_fallback(SELECT_VARIANT_OPTIONS, select_variant, DEFAULT_SELECT_VARIANT)
|
91
101
|
@checked = fetch_or_fallback(CHECKED_STATES, checked, DEFAULT_CHECKED_STATE)
|
102
|
+
@disabled = disabled
|
92
103
|
@node_variant = fetch_or_fallback(NODE_VARIANT_TAG_OPTIONS, node_variant, DEFAULT_NODE_VARIANT)
|
93
104
|
|
94
105
|
@content_arguments[:tag] = NODE_VARIANT_TAG_MAP[@node_variant]
|
@@ -103,18 +114,23 @@ module Primer
|
|
103
114
|
|
104
115
|
@content_arguments[:aria] = merge_aria(
|
105
116
|
@content_arguments, {
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
117
|
+
aria: {
|
118
|
+
level: level,
|
119
|
+
selected: false,
|
120
|
+
checked: checked,
|
121
|
+
labelledby: content_id,
|
122
|
+
disabled: disabled?
|
112
123
|
}
|
124
|
+
}
|
113
125
|
)
|
114
126
|
|
115
127
|
@content_arguments[:data] = merge_data(
|
116
|
-
@content_arguments,
|
117
|
-
|
128
|
+
@content_arguments, {
|
129
|
+
data: {
|
130
|
+
value: value,
|
131
|
+
path: @path.to_json
|
132
|
+
}
|
133
|
+
}
|
118
134
|
)
|
119
135
|
|
120
136
|
return unless current?
|
@@ -4,13 +4,13 @@
|
|
4
4
|
|
5
5
|
<%= render(Primer::BaseComponent.new(tag: :"tree-view-include-fragment", src: @src, loading: :lazy, data: { target: "tree-view-sub-tree-node.subTree tree-view-sub-tree-node.includeFragment", path: @container.path.to_json }, hidden: @container.expanded?, accept: "text/fragment+html")) do %>
|
6
6
|
<%= render(@container) do %>
|
7
|
-
<%= render(Primer::
|
7
|
+
<%= render(Primer::Alpha::TreeView::Node.new(path: [*@container.path, :loader], node_variant: :div)) do |node| %>
|
8
8
|
<% node.with_text_content do %>
|
9
9
|
<div data-target="tree-view-sub-tree-node.loadingIndicator">
|
10
10
|
<% @count.times do %>
|
11
11
|
<span class="TreeViewSkeletonItemContainerStyle TreeViewItemSkeleton">
|
12
|
-
<%= render(Primer::
|
13
|
-
<%= render(Primer::
|
12
|
+
<%= render(Primer::Alpha::SkeletonBox.new(width: "16px")) %>
|
13
|
+
<%= render(Primer::Alpha::SkeletonBox.new(width: "100%", classes: "TreeItemSkeletonTextStyles")) %>
|
14
14
|
</span>
|
15
15
|
<% end %>
|
16
16
|
</div>
|
@@ -1,16 +1,16 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
module Primer
|
4
|
-
module
|
4
|
+
module Alpha
|
5
5
|
class TreeView
|
6
6
|
# Renders a loading skeleton for a `TreeView` sub-tree node.
|
7
7
|
#
|
8
|
-
# This component is part of the <%= link_to_component(Primer::
|
8
|
+
# This component is part of the <%= link_to_component(Primer::Alpha::TreeView) %> component and should
|
9
9
|
# not be used directly.
|
10
10
|
class SkeletonLoader < Primer::Component
|
11
11
|
# The failure message that appears if loading nodes from the server fails.
|
12
12
|
#
|
13
|
-
# @param system_arguments [Hash] The arguments accepted by <%= link_to_component(Primer::
|
13
|
+
# @param system_arguments [Hash] The arguments accepted by <%= link_to_component(Primer::Alpha::TreeView::LoadingFailureMessage) %>.
|
14
14
|
renders_one :loading_failure_message, lambda { |**system_arguments|
|
15
15
|
system_arguments[:retry_button_arguments] ||= {}
|
16
16
|
system_arguments[:retry_button_arguments][:data] = merge_data(
|
@@ -23,7 +23,7 @@ module Primer
|
|
23
23
|
|
24
24
|
# @param src [String] The URL to fetch nodes from.
|
25
25
|
# @param count [Integer] The number of skeleton nodes to render.
|
26
|
-
# @param system_arguments [Hash] The arguments accepted by <%= link_to_component(Primer::
|
26
|
+
# @param system_arguments [Hash] The arguments accepted by <%= link_to_component(Primer::Alpha::TreeView::SubTreeContainer) %>.
|
27
27
|
def initialize(src:, count: 3, **system_arguments)
|
28
28
|
@src = src
|
29
29
|
@count = count
|
@@ -4,14 +4,14 @@
|
|
4
4
|
|
5
5
|
<%= render(Primer::BaseComponent.new(tag: :"tree-view-include-fragment", src: @src, loading: :lazy, data: { target: "tree-view-sub-tree-node.subTree tree-view-sub-tree-node.includeFragment", path: @container.path.to_json }, hidden: @container.expanded?, accept: "text/fragment+html")) do %>
|
6
6
|
<%= render(@container) do %>
|
7
|
-
<%= render(Primer::
|
7
|
+
<%= render(Primer::Alpha::TreeView::Node.new(path: [*@container.path, :loader], data: { target: "tree-view-sub-tree-node.loadingIndicator" }, node_variant: :div)) do |node| %>
|
8
8
|
<% node.with_text_content { "Loading..." } %>
|
9
9
|
<% node.with_leading_visual do %>
|
10
10
|
<%= render(Primer::Beta::Spinner.new(size: :small, wrapper_arguments: { classes: "TreeViewItemVisual" })) %>
|
11
11
|
<% end %>
|
12
12
|
<% end %>
|
13
13
|
|
14
|
-
<%= render(Primer::
|
14
|
+
<%= render(Primer::Alpha::TreeView::Node.new(path: [*@container.path, :failure_msg], data: { target: "tree-view-sub-tree-node.loadingFailureMessage" }, hidden: true, node_variant: :div)) do |node| %>
|
15
15
|
<% node.with_text_content do %>
|
16
16
|
<%= loading_failure_message %>
|
17
17
|
<% end %>
|
@@ -1,16 +1,16 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
module Primer
|
4
|
-
module
|
4
|
+
module Alpha
|
5
5
|
class TreeView
|
6
6
|
# Renders a loading spinner for a `TreeView` sub-tree node.
|
7
7
|
#
|
8
|
-
# This component is part of the <%= link_to_component(Primer::
|
8
|
+
# This component is part of the <%= link_to_component(Primer::Alpha::TreeView) %> component and should
|
9
9
|
# not be used directly.
|
10
10
|
class SpinnerLoader < Primer::Component
|
11
11
|
# The failure message that appears if loading nodes from the server fails.
|
12
12
|
#
|
13
|
-
# @param system_arguments [Hash] The arguments accepted by <%= link_to_component(Primer::
|
13
|
+
# @param system_arguments [Hash] The arguments accepted by <%= link_to_component(Primer::Alpha::TreeView::LoadingFailureMessage) %>.
|
14
14
|
renders_one :loading_failure_message, lambda { |**system_arguments|
|
15
15
|
system_arguments[:retry_button_arguments] ||= {}
|
16
16
|
system_arguments[:retry_button_arguments][:data] = merge_data(
|
@@ -22,7 +22,7 @@ module Primer
|
|
22
22
|
}
|
23
23
|
|
24
24
|
# @param src [String] The URL to fetch nodes from.
|
25
|
-
# @param system_arguments [Hash] The arguments accepted by <%= link_to_component(Primer::
|
25
|
+
# @param system_arguments [Hash] The arguments accepted by <%= link_to_component(Primer::Alpha::TreeView::SubTreeContainer) %>.
|
26
26
|
def initialize(src:, **system_arguments)
|
27
27
|
@src = src
|
28
28
|
@container = SubTreeContainer.new(**system_arguments, expanded: true)
|
@@ -7,7 +7,7 @@
|
|
7
7
|
|
8
8
|
<%= render(@container) do %>
|
9
9
|
<% if nodes.empty? %>
|
10
|
-
<%= render(Primer::
|
10
|
+
<%= render(Primer::Alpha::TreeView::Node.new(path: path, data: { "no-items": true }, node_variant: :div)) do |node| %>
|
11
11
|
<% node.with_text_content do %>
|
12
12
|
<%= no_items_message %>
|
13
13
|
<% end %>
|