nuance-ui 0.2.7 → 0.2.9

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 (172) hide show
  1. package/LICENSE.md +9 -9
  2. package/README.md +75 -75
  3. package/dist/module.json +1 -1
  4. package/dist/runtime/components/action-icon/action-icon-group.vue +3 -3
  5. package/dist/runtime/components/action-icon/action-icon.d.vue.ts +1 -1
  6. package/dist/runtime/components/action-icon/action-icon.vue.d.ts +1 -1
  7. package/dist/runtime/components/app-shell/app-shell-aside.vue +30 -30
  8. package/dist/runtime/components/app-shell/app-shell-footer.vue +29 -29
  9. package/dist/runtime/components/app-shell/app-shell-header.vue +30 -30
  10. package/dist/runtime/components/app-shell/app-shell-main.vue +18 -18
  11. package/dist/runtime/components/app-shell/app-shell-navbar.vue +34 -34
  12. package/dist/runtime/components/app-shell/app-shell-section.vue +10 -10
  13. package/dist/runtime/components/app-shell/app-shell.vue +34 -34
  14. package/dist/runtime/components/breadcrumbs.vue +78 -78
  15. package/dist/runtime/components/button/button.d.vue.ts +5 -3
  16. package/dist/runtime/components/button/button.vue +7 -3
  17. package/dist/runtime/components/button/button.vue.d.ts +5 -3
  18. package/dist/runtime/components/button/unstyled-button.vue +23 -23
  19. package/dist/runtime/components/calendar/calendar.d.vue.ts +1 -1
  20. package/dist/runtime/components/calendar/calendar.vue.d.ts +1 -1
  21. package/dist/runtime/components/calendar/types.d.ts +4 -3
  22. package/dist/runtime/components/calendar/ui/core/calendar-header.d.vue.ts +7 -1
  23. package/dist/runtime/components/calendar/ui/core/calendar-header.vue +95 -95
  24. package/dist/runtime/components/calendar/ui/core/calendar-header.vue.d.ts +7 -1
  25. package/dist/runtime/components/calendar/ui/core/calendar-root.vue +3 -3
  26. package/dist/runtime/components/calendar/ui/levels/calendar-decade.d.vue.ts +3 -1
  27. package/dist/runtime/components/calendar/ui/levels/calendar-decade.vue +40 -40
  28. package/dist/runtime/components/calendar/ui/levels/calendar-decade.vue.d.ts +3 -1
  29. package/dist/runtime/components/calendar/ui/levels/calendar-month.d.vue.ts +2 -1
  30. package/dist/runtime/components/calendar/ui/levels/calendar-month.vue.d.ts +2 -1
  31. package/dist/runtime/components/calendar/ui/levels/calendar-year.d.vue.ts +3 -1
  32. package/dist/runtime/components/calendar/ui/levels/calendar-year.vue +40 -40
  33. package/dist/runtime/components/calendar/ui/levels/calendar-year.vue.d.ts +3 -1
  34. package/dist/runtime/components/card/card-section.d.vue.ts +2 -1
  35. package/dist/runtime/components/card/card-section.vue +3 -3
  36. package/dist/runtime/components/card/card-section.vue.d.ts +2 -1
  37. package/dist/runtime/components/card/card.d.vue.ts +1 -0
  38. package/dist/runtime/components/card/card.vue +3 -3
  39. package/dist/runtime/components/card/card.vue.d.ts +1 -0
  40. package/dist/runtime/components/checkbox/checkbox-card.d.vue.ts +4 -1
  41. package/dist/runtime/components/checkbox/checkbox-card.vue.d.ts +4 -1
  42. package/dist/runtime/components/checkbox/checkbox-indicator.d.vue.ts +6 -0
  43. package/dist/runtime/components/checkbox/checkbox-indicator.vue +117 -117
  44. package/dist/runtime/components/checkbox/checkbox-indicator.vue.d.ts +6 -0
  45. package/dist/runtime/components/checkbox/checkbox.d.vue.ts +12 -2
  46. package/dist/runtime/components/checkbox/checkbox.vue.d.ts +12 -2
  47. package/dist/runtime/components/chip/chip-group.d.vue.ts +3 -0
  48. package/dist/runtime/components/chip/chip-group.vue +2 -2
  49. package/dist/runtime/components/chip/chip-group.vue.d.ts +3 -0
  50. package/dist/runtime/components/chip/chip.d.vue.ts +9 -0
  51. package/dist/runtime/components/chip/chip.vue.d.ts +9 -0
  52. package/dist/runtime/components/combobox/combobox-dropdown.vue +14 -14
  53. package/dist/runtime/components/combobox/combobox-empty.vue +3 -3
  54. package/dist/runtime/components/combobox/combobox-group.d.vue.ts +1 -0
  55. package/dist/runtime/components/combobox/combobox-group.vue +21 -21
  56. package/dist/runtime/components/combobox/combobox-group.vue.d.ts +1 -0
  57. package/dist/runtime/components/combobox/combobox-option-list.vue +3 -3
  58. package/dist/runtime/components/combobox/combobox-option.d.vue.ts +3 -0
  59. package/dist/runtime/components/combobox/combobox-option.vue +22 -22
  60. package/dist/runtime/components/combobox/combobox-option.vue.d.ts +3 -0
  61. package/dist/runtime/components/combobox/combobox-options-dropdown.d.vue.ts +10 -0
  62. package/dist/runtime/components/combobox/combobox-options-dropdown.vue.d.ts +10 -0
  63. package/dist/runtime/components/combobox/combobox-root.d.vue.ts +8 -4
  64. package/dist/runtime/components/combobox/combobox-root.vue +3 -3
  65. package/dist/runtime/components/combobox/combobox-root.vue.d.ts +8 -4
  66. package/dist/runtime/components/combobox/combobox-target.vue +3 -3
  67. package/dist/runtime/components/combobox/types.d.ts +11 -0
  68. package/dist/runtime/components/container.d.vue.ts +2 -0
  69. package/dist/runtime/components/container.vue +8 -8
  70. package/dist/runtime/components/container.vue.d.ts +2 -0
  71. package/dist/runtime/components/date-time-picker.d.vue.ts +3 -3
  72. package/dist/runtime/components/date-time-picker.vue +66 -66
  73. package/dist/runtime/components/date-time-picker.vue.d.ts +3 -3
  74. package/dist/runtime/components/dialog/types.d.ts +1 -0
  75. package/dist/runtime/components/dialog/ui/dialog-close-button.vue +11 -11
  76. package/dist/runtime/components/dialog/ui/dialog-header.vue +5 -5
  77. package/dist/runtime/components/dialog/ui/dialog-title.vue +5 -5
  78. package/dist/runtime/components/drawer/drawer-close-button.vue +3 -3
  79. package/dist/runtime/components/drawer/drawer-header.vue +3 -3
  80. package/dist/runtime/components/drawer/drawer-root.vue +15 -15
  81. package/dist/runtime/components/drawer/drawer-title.vue +3 -3
  82. package/dist/runtime/components/files/file-upload-button.d.vue.ts +4 -2
  83. package/dist/runtime/components/files/file-upload-button.vue.d.ts +4 -2
  84. package/dist/runtime/components/files/file-upload-icon.d.vue.ts +4 -2
  85. package/dist/runtime/components/files/file-upload-icon.vue.d.ts +4 -2
  86. package/dist/runtime/components/input/date-picker.vue +85 -85
  87. package/dist/runtime/components/input/email-input.d.vue.ts +5 -5
  88. package/dist/runtime/components/input/email-input.vue +21 -22
  89. package/dist/runtime/components/input/email-input.vue.d.ts +5 -5
  90. package/dist/runtime/components/input/lib/input-wrapper.context.d.ts +8 -2
  91. package/dist/runtime/components/input/number-input.d.vue.ts +7 -5
  92. package/dist/runtime/components/input/number-input.vue +136 -132
  93. package/dist/runtime/components/input/number-input.vue.d.ts +7 -5
  94. package/dist/runtime/components/input/password-input.vue +29 -28
  95. package/dist/runtime/components/input/text-input.d.vue.ts +7 -5
  96. package/dist/runtime/components/input/text-input.vue +6 -3
  97. package/dist/runtime/components/input/text-input.vue.d.ts +7 -5
  98. package/dist/runtime/components/input/ui/input-inline.d.vue.ts +7 -3
  99. package/dist/runtime/components/input/ui/input-inline.vue.d.ts +7 -3
  100. package/dist/runtime/components/input/ui/input-wrapper.d.vue.ts +4 -1
  101. package/dist/runtime/components/input/ui/input-wrapper.vue.d.ts +4 -1
  102. package/dist/runtime/components/link/link-button.vue +17 -16
  103. package/dist/runtime/components/link/link.vue +10 -10
  104. package/dist/runtime/components/loader/_loaders/bars-loader.vue +5 -5
  105. package/dist/runtime/components/loader/_loaders/dots-loader.vue +5 -5
  106. package/dist/runtime/components/loader/_loaders/oval-loader.vue +1 -1
  107. package/dist/runtime/components/modal/modal-close-button.vue +3 -3
  108. package/dist/runtime/components/modal/modal-header.vue +3 -3
  109. package/dist/runtime/components/modal/modal-root.vue +13 -13
  110. package/dist/runtime/components/modal/modal-title.vue +3 -3
  111. package/dist/runtime/components/nav-link/nav-icon-link.vue +15 -15
  112. package/dist/runtime/components/nav-link/nav-link.d.vue.ts +6 -4
  113. package/dist/runtime/components/nav-link/nav-link.vue +135 -131
  114. package/dist/runtime/components/nav-link/nav-link.vue.d.ts +6 -4
  115. package/dist/runtime/components/paper.d.vue.ts +3 -1
  116. package/dist/runtime/components/paper.vue.d.ts +3 -1
  117. package/dist/runtime/components/popover/popover-dropdown.vue +69 -70
  118. package/dist/runtime/components/popover/popover-target.vue +8 -8
  119. package/dist/runtime/components/popover/popover.vue +1 -1
  120. package/dist/runtime/components/progress/progress-label.vue +3 -3
  121. package/dist/runtime/components/progress/progress-root.vue +3 -3
  122. package/dist/runtime/components/progress/progress-section.d.vue.ts +1 -1
  123. package/dist/runtime/components/progress/progress-section.vue +8 -8
  124. package/dist/runtime/components/progress/progress-section.vue.d.ts +1 -1
  125. package/dist/runtime/components/progress/progress.vue +9 -9
  126. package/dist/runtime/components/renderless/renderless.vue +3 -3
  127. package/dist/runtime/components/roving-focus/roving-focus-item.vue +14 -14
  128. package/dist/runtime/components/select.d.vue.ts +2 -0
  129. package/dist/runtime/components/select.vue.d.ts +2 -0
  130. package/dist/runtime/components/switch/switch-group.vue +16 -16
  131. package/dist/runtime/components/table/table.d.ts +30 -30
  132. package/dist/runtime/components/table/types.d.ts +10 -1
  133. package/dist/runtime/components/table/ui/table-sortable-header.vue +12 -11
  134. package/dist/runtime/components/tabs/tabs-list.d.vue.ts +2 -0
  135. package/dist/runtime/components/tabs/tabs-list.vue +10 -10
  136. package/dist/runtime/components/tabs/tabs-list.vue.d.ts +2 -0
  137. package/dist/runtime/components/tabs/tabs-panel.d.vue.ts +1 -0
  138. package/dist/runtime/components/tabs/tabs-panel.vue +11 -11
  139. package/dist/runtime/components/tabs/tabs-panel.vue.d.ts +1 -0
  140. package/dist/runtime/components/tabs/tabs-root.d.vue.ts +36 -9
  141. package/dist/runtime/components/tabs/tabs-root.vue +8 -8
  142. package/dist/runtime/components/tabs/tabs-root.vue.d.ts +36 -9
  143. package/dist/runtime/components/tabs/tabs-tab.d.vue.ts +7 -3
  144. package/dist/runtime/components/tabs/tabs-tab.vue +25 -22
  145. package/dist/runtime/components/tabs/tabs-tab.vue.d.ts +7 -3
  146. package/dist/runtime/components/text.d.vue.ts +6 -1
  147. package/dist/runtime/components/text.vue +67 -67
  148. package/dist/runtime/components/text.vue.d.ts +6 -1
  149. package/dist/runtime/components/textarea.d.vue.ts +7 -5
  150. package/dist/runtime/components/textarea.vue +38 -35
  151. package/dist/runtime/components/textarea.vue.d.ts +7 -5
  152. package/dist/runtime/components/title.d.vue.ts +5 -0
  153. package/dist/runtime/components/title.vue +14 -14
  154. package/dist/runtime/components/title.vue.d.ts +5 -0
  155. package/dist/runtime/components/transition.d.vue.ts +12 -2
  156. package/dist/runtime/components/transition.vue +3 -3
  157. package/dist/runtime/components/transition.vue.d.ts +12 -2
  158. package/dist/runtime/components/tree/_ui/tree-item.d.vue.ts +1 -0
  159. package/dist/runtime/components/tree/_ui/tree-item.vue +128 -129
  160. package/dist/runtime/components/tree/_ui/tree-item.vue.d.ts +1 -0
  161. package/dist/runtime/components/tree/_ui/tree-root.d.vue.ts +8 -0
  162. package/dist/runtime/components/tree/_ui/tree-root.vue +21 -21
  163. package/dist/runtime/components/tree/_ui/tree-root.vue.d.ts +8 -0
  164. package/dist/runtime/components/tree/lib/context.d.ts +15 -0
  165. package/dist/runtime/components/tree/types.d.ts +9 -0
  166. package/dist/runtime/components/visually-hidden/visually-hidden-input.d.vue.ts +2 -0
  167. package/dist/runtime/components/visually-hidden/visually-hidden-input.vue.d.ts +2 -0
  168. package/dist/runtime/components/visually-hidden/visually-hidden.d.vue.ts +1 -0
  169. package/dist/runtime/components/visually-hidden/visually-hidden.vue +9 -9
  170. package/dist/runtime/components/visually-hidden/visually-hidden.vue.d.ts +1 -0
  171. package/dist/runtime/styles/dark-theme.css +1 -1
  172. package/package.json +1 -1
@@ -1,9 +1,19 @@
1
1
  export type TransitionName = 'fade' | 'fade-down' | 'fade-up' | 'fade-left' | 'fade-right' | 'skew-up' | 'skew-down' | 'rotate-right' | 'rotate-left' | 'slide-down' | 'slide-up' | 'slide-right' | 'slide-left' | 'scale-y' | 'scale-x' | 'scale' | 'pop' | 'pop-top-left' | 'pop-top-right' | 'pop-bottom-left' | 'pop-bottom-right';
2
2
  export interface TransitionProps {
3
+ /**
4
+ * Transition animation name
5
+ * @default `'pop-bottom-left'`
6
+ */
3
7
  name?: TransitionName;
4
- /** Transition duration in ms, `250` default */
8
+ /**
9
+ * Transition duration in ms
10
+ * @default `250`
11
+ */
5
12
  duration?: number;
6
- /** Transition dilay in ms, `0` default */
13
+ /**
14
+ * Transition delay in ms
15
+ * @default `0`
16
+ */
7
17
  delay?: number;
8
18
  }
9
19
  declare var __VLS_9: {};
@@ -17,9 +17,9 @@ const style = computed(() => ({
17
17
  </script>
18
18
 
19
19
  <template>
20
- <Transition :class='$style.root' :style :name @after-leave='() => emit("afterLeave")'>
21
- <slot />
22
- </Transition>
20
+ <Transition :class='$style.root' :style :name @after-leave='() => emit("afterLeave")'>
21
+ <slot />
22
+ </Transition>
23
23
  </template>
24
24
 
25
25
  <style module>
@@ -1,9 +1,19 @@
1
1
  export type TransitionName = 'fade' | 'fade-down' | 'fade-up' | 'fade-left' | 'fade-right' | 'skew-up' | 'skew-down' | 'rotate-right' | 'rotate-left' | 'slide-down' | 'slide-up' | 'slide-right' | 'slide-left' | 'scale-y' | 'scale-x' | 'scale' | 'pop' | 'pop-top-left' | 'pop-top-right' | 'pop-bottom-left' | 'pop-bottom-right';
2
2
  export interface TransitionProps {
3
+ /**
4
+ * Transition animation name
5
+ * @default `'pop-bottom-left'`
6
+ */
3
7
  name?: TransitionName;
4
- /** Transition duration in ms, `250` default */
8
+ /**
9
+ * Transition duration in ms
10
+ * @default `250`
11
+ */
5
12
  duration?: number;
6
- /** Transition dilay in ms, `0` default */
13
+ /**
14
+ * Transition delay in ms
15
+ * @default `0`
16
+ */
7
17
  delay?: number;
8
18
  }
9
19
  declare var __VLS_9: {};
@@ -1,5 +1,6 @@
1
1
  import type { TreeItem } from '../types.js';
2
2
  export interface TreeItemProps extends TreeItem {
3
+ /** Nesting depth, starting at 1 for root items */
3
4
  level: number;
4
5
  }
5
6
  declare const __VLS_export: import("vue").DefineComponent<TreeItemProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<TreeItemProps> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
@@ -51,136 +51,135 @@ const { handleClick, handleKeyDown } = useTreeItemHandlers(path, isFolder, expan
51
51
  </script>
52
52
 
53
53
  <template>
54
- <li :class='$style.item' role='presentation'>
55
- <RovingFocusItem>
56
- <Button
57
- :size='ctx.size'
58
- :color='ctx.color'
59
- :variant='ctx.variant'
60
- :disabled
61
- role='treeitem'
62
- :classes='$style'
63
- :aria-level='level'
64
- :aria-selected='selected'
65
- :mod='{ active, selected, "tree-item": path }'
66
- right-section-p-e='all'
67
- @click.prevent='handleClick'
68
- @keydown.prevent='handleKeyDown'
69
- >
70
- <template #leftSection>
71
- <template v-if='pending'>
72
- <Loader :class='$style.icon' />
73
- </template>
74
-
75
- <template v-else-if='isFolder'>
76
- <Icon v-if='expanded' :class='$style.icon' :name='trailingIcon' />
77
- <Icon v-else :class='$style.icon' :name='icon' />
78
- </template>
79
-
80
- <template v-else>
81
- <Icon
82
- :class='$style.icon'
83
- :name='fileIcon'
84
- :style='{ color: color && getThemeColor(color, theme) }'
85
- />
86
- </template>
87
- </template>
88
-
89
- {{ name ?? path }}
90
-
91
- <template v-if='isFolder' #rightSection>
92
- <ActionIcon
93
- icon='gravity-ui:chevron-down'
94
- size='sm'
95
- :color='ctx.color'
96
- :classes='{ root: $style.chevron, icon: $style["chevron-icon"] }'
97
- :mod='{ expanded }'
98
- variant='subtle'
99
- @click.stop='ctx.toggle("expand", path)'
100
- />
101
- </template>
102
- </Button>
103
- </RovingFocusItem>
104
-
105
- <UTransition name='scale-y'>
106
- <ul
107
- v-if='expanded && data && data.length > 0'
108
- :class='$style.list'
109
- role='group'
110
- >
111
- <TreeItem
112
- v-for='child in data'
113
- :key='child.path'
114
- v-bind='child'
115
- :path='child.path'
116
- :level='level + 1'
117
- />
118
- </ul>
119
- </UTransition>
120
- </li>
54
+ <li :class='$style.item' role='presentation'>
55
+ <RovingFocusItem>
56
+ <Button
57
+ :size='ctx.size'
58
+ :color='ctx.color'
59
+ :variant='ctx.variant'
60
+ :disabled
61
+ role='treeitem'
62
+ :classes='$style'
63
+ :aria-level='level'
64
+ :aria-selected='selected'
65
+ :mod='{ active, selected, "tree-item": path }'
66
+ right-section-p-e='all'
67
+ @click.prevent='handleClick'
68
+ @keydown.prevent='handleKeyDown'
69
+ >
70
+ <template #leftSection>
71
+ <template v-if='pending'>
72
+ <Loader :class='$style.icon' />
73
+ </template>
74
+
75
+ <template v-else-if='isFolder'>
76
+ <Icon v-if='expanded' :class='$style.icon' :name='trailingIcon' />
77
+ <Icon v-else :class='$style.icon' :name='icon' />
78
+ </template>
79
+
80
+ <template v-else>
81
+ <Icon
82
+ :class='$style.icon'
83
+ :name='fileIcon'
84
+ :style='{ color: color && getThemeColor(color, theme) }'
85
+ />
86
+ </template>
87
+ </template>
88
+
89
+ {{ name ?? path }}
90
+
91
+ <template v-if='isFolder' #rightSection>
92
+ <ActionIcon
93
+ icon='gravity-ui:chevron-down'
94
+ size='sm'
95
+ :color='ctx.color'
96
+ :classes='{ root: $style.chevron, icon: $style["chevron-icon"] }'
97
+ :mod='{ expanded }'
98
+ variant='subtle'
99
+ @click.stop='ctx.toggle("expand", path)'
100
+ />
101
+ </template>
102
+ </Button>
103
+ </RovingFocusItem>
104
+
105
+ <UTransition name='scale-y'>
106
+ <ul
107
+ v-if='expanded && data && data.length > 0'
108
+ :class='$style.list'
109
+ role='group'
110
+ >
111
+ <TreeItem
112
+ v-for='child in data'
113
+ :key='child.path'
114
+ v-bind='child'
115
+ :path='child.path'
116
+ :level='level + 1'
117
+ />
118
+ </ul>
119
+ </UTransition>
120
+ </li>
121
121
  </template>
122
122
 
123
123
  <style module lang="postcss">
124
- .item {
125
- display: grid;
126
- gap: .25rem;
127
- }
128
-
129
- .icon {
130
- --loader-size: var(--tree-icon-size);
131
-
132
- width: var(--tree-icon-size);
133
- height: var(--tree-icon-size);
134
- }
135
-
136
- .chevron {
137
- color: var(--color-dimmed);
138
-
139
- transition: transform .3s ease-in-out;
140
-
141
- &:hover {
142
- color: var(--color-dimmed);
143
-
144
- background-color: transparent;
145
- }
146
-
147
- &[data-expanded] .chevron-icon {
148
- transform: rotate(-180deg);
149
- }
150
- }
151
-
152
-
153
- .list {
154
- display: grid;
155
- gap: .25rem;
156
-
157
- margin-inline-start: 1rem;
158
-
159
- padding-inline-start: .75rem;
160
- border-left: 1px solid var(--color-gray-4);
161
- }
162
-
163
- .root {
164
- .inner {
165
- display: grid;
166
- grid-template-columns: auto 1fr auto;
167
-
168
- color: var(--color-text);
169
-
170
- .label {
171
- font-weight: 500;
172
- }
173
- }
174
-
175
- &[data-active],
176
- &[data-selected] {
177
- .inner {
178
- color: var(--button-color);
179
- }
180
- }
181
-
182
- &[data-selected] {
183
- background: alpha(var(--button-color), .1);
184
- }
185
- }
124
+ .item {
125
+ display: grid;
126
+ gap: .25rem;
127
+ }
128
+
129
+ .icon {
130
+ --loader-size: var(--tree-icon-size);
131
+
132
+ width: var(--tree-icon-size);
133
+ height: var(--tree-icon-size);
134
+ }
135
+
136
+ .chevron {
137
+ color: var(--color-dimmed);
138
+
139
+ transition: transform .3s ease-in-out;
140
+
141
+ &:hover {
142
+ color: var(--color-dimmed);
143
+
144
+ background-color: transparent;
145
+ }
146
+
147
+ &[data-expanded] .chevron-icon {
148
+ transform: rotate(-180deg);
149
+ }
150
+ }
151
+
152
+ .list {
153
+ display: grid;
154
+ gap: .25rem;
155
+
156
+ margin-inline-start: 1rem;
157
+
158
+ padding-inline-start: .75rem;
159
+ border-left: 1px solid var(--color-gray-4);
160
+ }
161
+
162
+ .root {
163
+ .inner {
164
+ display: grid;
165
+ grid-template-columns: auto 1fr auto;
166
+
167
+ color: var(--color-text);
168
+
169
+ .label {
170
+ font-weight: 500;
171
+ }
172
+ }
173
+
174
+ &[data-active],
175
+ &[data-selected] {
176
+ .inner {
177
+ color: var(--button-color);
178
+ }
179
+ }
180
+
181
+ &[data-selected] {
182
+ background: alpha(var(--button-color), .1);
183
+ }
184
+ }
186
185
  </style>
@@ -1,5 +1,6 @@
1
1
  import type { TreeItem } from '../types.js';
2
2
  export interface TreeItemProps extends TreeItem {
3
+ /** Nesting depth, starting at 1 for root items */
3
4
  level: number;
4
5
  }
5
6
  declare const __VLS_export: import("vue").DefineComponent<TreeItemProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<TreeItemProps> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
@@ -2,13 +2,21 @@ import type { ButtonProps } from '@nui/components';
2
2
  import type { RovingFocusProps } from '../../roving-focus/roving-focus.vue.js';
3
3
  import type { TreeFilter, TreeIconResolver, TreeLoader, TreeModels } from '../types.js';
4
4
  export type TreeRootProps = RovingFocusProps & {
5
+ /** Resolves the icon for a given tree item */
5
6
  iconResolver?: TreeIconResolver;
7
+ /** If set, selected items can be deleted with the Delete key */
6
8
  removable?: boolean;
9
+ /** If set, multiple items can be selected */
7
10
  selectable?: boolean;
11
+ /** Async loader for branch data */
8
12
  loadBranch: TreeLoader;
13
+ /** Filters which items are rendered */
9
14
  filter?: TreeFilter;
15
+ /** Visual variant */
10
16
  variant?: ButtonProps['variant'];
17
+ /** Color from theme */
11
18
  color?: ButtonProps['color'];
19
+ /** Component size */
12
20
  size?: ButtonProps['size'];
13
21
  };
14
22
  type __VLS_Props = TreeRootProps;
@@ -64,28 +64,28 @@ if (removable) {
64
64
  </script>
65
65
 
66
66
  <template>
67
- <RovingFocus :attr :loop :orientation>
68
- <Box
69
- is='ul'
70
- ref='parent'
71
- role='tree'
72
- :style
73
- :class='$style.root'
74
- @keydown.esc.prevent='selected = []'
75
- >
76
- <slot />
77
- </Box>
78
- </RovingFocus>
67
+ <RovingFocus :attr :loop :orientation>
68
+ <Box
69
+ is='ul'
70
+ ref='parent'
71
+ role='tree'
72
+ :style
73
+ :class='$style.root'
74
+ @keydown.esc.prevent='selected = []'
75
+ >
76
+ <slot />
77
+ </Box>
78
+ </RovingFocus>
79
79
  </template>
80
80
 
81
81
  <style module lang="postcss">
82
- .root {
83
- --tree-icon-size: var(--spacing-md);
84
-
85
- display: flex;
86
- flex-direction: column;
87
- gap: .25rem;
88
-
89
- padding-inline-start: 0;
90
- }
82
+ .root {
83
+ --tree-icon-size: var(--spacing-md);
84
+
85
+ display: flex;
86
+ flex-direction: column;
87
+ gap: .25rem;
88
+
89
+ padding-inline-start: 0;
90
+ }
91
91
  </style>
@@ -2,13 +2,21 @@ import type { ButtonProps } from '@nui/components';
2
2
  import type { RovingFocusProps } from '../../roving-focus/roving-focus.vue.js';
3
3
  import type { TreeFilter, TreeIconResolver, TreeLoader, TreeModels } from '../types.js';
4
4
  export type TreeRootProps = RovingFocusProps & {
5
+ /** Resolves the icon for a given tree item */
5
6
  iconResolver?: TreeIconResolver;
7
+ /** If set, selected items can be deleted with the Delete key */
6
8
  removable?: boolean;
9
+ /** If set, multiple items can be selected */
7
10
  selectable?: boolean;
11
+ /** Async loader for branch data */
8
12
  loadBranch: TreeLoader;
13
+ /** Filters which items are rendered */
9
14
  filter?: TreeFilter;
15
+ /** Visual variant */
10
16
  variant?: ButtonProps['variant'];
17
+ /** Color from theme */
11
18
  color?: ButtonProps['color'];
19
+ /** Component size */
12
20
  size?: ButtonProps['size'];
13
21
  };
14
22
  type __VLS_Props = TreeRootProps;
@@ -4,22 +4,37 @@ import type { TreeFilter, TreeIconResolver, TreeLoader } from '../types.js';
4
4
  type EventType = 'select' | 'expand';
5
5
  type SelectMode = 'single' | 'multiple' | 'range';
6
6
  export interface TreeContext {
7
+ /** Ref to the root `<ul>` element */
7
8
  root: ShallowRef<HTMLUListElement | null>;
9
+ /** Path of the active (focused) item */
8
10
  active: ModelRef<string | null>;
11
+ /** Paths of selected items */
9
12
  selected: ModelRef<string[]>;
13
+ /** Paths of expanded directory items */
10
14
  expanded: ModelRef<string[]>;
15
+ /** Resolves the icon for a given tree item */
11
16
  iconResolver: TreeIconResolver;
17
+ /** Async loader for branch data */
12
18
  loadBranch: TreeLoader;
19
+ /** Filters which items are rendered */
13
20
  filter?: TreeFilter;
21
+ /** Whether multiple items can be selected */
14
22
  selectable: boolean;
23
+ /** Visual variant */
15
24
  variant: ButtonProps['variant'];
25
+ /** Color from theme */
16
26
  color: ButtonProps['color'];
27
+ /** Component size */
17
28
  size: ButtonProps['size'];
18
29
  }
19
30
  export interface TreeState extends Omit<TreeContext, 'root'> {
31
+ /** Toggles selection or expansion state of an item */
20
32
  toggle: (type: EventType, path: string, mode?: SelectMode) => void;
33
+ /** Activates selection or expansion for an item */
21
34
  on: ((type: 'expand', path: string) => void) & ((type: 'select', path: string, mode?: SelectMode) => void);
35
+ /** Deactivates selection or expansion for an item */
22
36
  off: (type: EventType, path: string) => void;
37
+ /** Sets the active (focused) item path */
23
38
  setActive: (path: string | null) => void;
24
39
  }
25
40
  export declare const useProvideTreeState: (args_0: TreeContext) => TreeState;
@@ -1,17 +1,25 @@
1
1
  import type { NuanceColor } from '@nui/types';
2
2
  import type { Ref } from 'vue';
3
3
  export interface TreeModels {
4
+ /** Path of the active (focused) item */
4
5
  active: string | null;
6
+ /** Flat tree data */
5
7
  tree: TreeItem[];
8
+ /** Paths of selected items */
6
9
  selected: string[];
10
+ /** Paths of expanded directory items */
7
11
  expanded: string[];
8
12
  }
9
13
  export interface TreeEmits {
14
+ /** Fired when selected items are deleted */
10
15
  delete: [path: string[]];
11
16
  }
12
17
  export interface TreeLoaderResult {
18
+ /** Loaded branch data */
13
19
  data: Ref<TreeItem[] | undefined>;
20
+ /** Whether the branch is loading */
14
21
  pending: Ref<boolean>;
22
+ /** Triggers data fetching */
15
23
  execute: () => Promise<unknown>;
16
24
  }
17
25
  /**
@@ -49,6 +57,7 @@ export interface TreeItem {
49
57
  * @default `file`
50
58
  */
51
59
  type?: TreeItemType;
60
+ /** Nested child items */
52
61
  children?: TreeItem[];
53
62
  }
54
63
  export type TreeIconResolver = (type: TreeItemType, name?: string, path?: string, disabled?: boolean) => {
@@ -2,7 +2,9 @@ import type { VisuallyHiddenProps } from './visually-hidden.vue.js';
2
2
  export interface VisuallyHiddenInputProps extends VisuallyHiddenProps {
3
3
  /** Input name */
4
4
  name?: string;
5
+ /** Marks the input as required */
5
6
  required?: boolean;
7
+ /** Disables the input */
6
8
  disabled?: boolean;
7
9
  }
8
10
  declare const __VLS_export: <T>(__VLS_props: NonNullable<Awaited<typeof __VLS_setup>>["props"], __VLS_ctx?: __VLS_PrettifyLocal<Pick<NonNullable<Awaited<typeof __VLS_setup>>, "attrs" | "emit" | "slots">>, __VLS_exposed?: NonNullable<Awaited<typeof __VLS_setup>>["expose"], __VLS_setup?: Promise<{
@@ -2,7 +2,9 @@ import type { VisuallyHiddenProps } from './visually-hidden.vue.js';
2
2
  export interface VisuallyHiddenInputProps extends VisuallyHiddenProps {
3
3
  /** Input name */
4
4
  name?: string;
5
+ /** Marks the input as required */
5
6
  required?: boolean;
7
+ /** Disables the input */
6
8
  disabled?: boolean;
7
9
  }
8
10
  declare const __VLS_export: <T>(__VLS_props: NonNullable<Awaited<typeof __VLS_setup>>["props"], __VLS_ctx?: __VLS_PrettifyLocal<Pick<NonNullable<Awaited<typeof __VLS_setup>>, "attrs" | "emit" | "slots">>, __VLS_exposed?: NonNullable<Awaited<typeof __VLS_setup>>["expose"], __VLS_setup?: Promise<{
@@ -1,5 +1,6 @@
1
1
  import type { BoxProps } from '../box.vue.js';
2
2
  export interface VisuallyHiddenProps extends BoxProps {
3
+ /** Controls accessibility behaviour: `'focusable'` adds `aria-hidden`, `'fully-hidden'` removes from tab order */
3
4
  feature?: 'focusable' | 'fully-hidden';
4
5
  }
5
6
  declare var __VLS_8: {};
@@ -8,15 +8,15 @@ const { feature, ...rest } = defineProps({
8
8
  </script>
9
9
 
10
10
  <template>
11
- <Box
12
- :aria-hidden='feature === "focusable" ? "true" : void 0'
13
- :data-hidden='feature === "fully-hidden" ? "true" : void 0'
14
- :tabindex='feature === "fully-hidden" ? "-1" : void 0'
15
- v-bind='rest'
16
- class='root'
17
- >
18
- <slot />
19
- </Box>
11
+ <Box
12
+ :aria-hidden='feature === "focusable" ? "true" : void 0'
13
+ :data-hidden='feature === "fully-hidden" ? "true" : void 0'
14
+ :tabindex='feature === "fully-hidden" ? "-1" : void 0'
15
+ v-bind='rest'
16
+ class='root'
17
+ >
18
+ <slot />
19
+ </Box>
20
20
  </template>
21
21
 
22
22
  <style scoped>
@@ -1,5 +1,6 @@
1
1
  import type { BoxProps } from '../box.vue.js';
2
2
  export interface VisuallyHiddenProps extends BoxProps {
3
+ /** Controls accessibility behaviour: `'focusable'` adds `aria-hidden`, `'fully-hidden'` removes from tab order */
3
4
  feature?: 'focusable' | 'fully-hidden';
4
5
  }
5
6
  declare var __VLS_8: {};
@@ -1 +1 @@
1
- :root{@mixin dark-root{--primary-color-contrast:var(--color-white);--color-bright:var(--color-white);--color-text:var(--color-slate-3);--color-body:var(--color-slate-9);--color-aside:var(--color-slate-7);--color-header:var(--color-slate-8);--color-error:var(--color-red-7);--color-placeholder:var(--color-dark-3);--color-anchor:var(--color-blue-4);--color-default:var(--color-dark-6);--color-default-hover:var(--color-dark-5);--color-default-color:var(--color-white);--color-default-border:var(--color-dark-4);--color-dimmed:var(--color-slate-5);--color-disabled:var(--color-dark-6);--color-disabled-text:var(--color-dark-3);--color-disabled-border:var(--color-gray-6);--color-dark-color:var(--color-dark-4);--color-dark-filled:var(--color-dark-8);--color-dark-filled-hover:var(--color-dark-9);--color-dark-light:rgba(46,46,46,.15);--color-dark-light-hover:rgba(46,46,46,.2);--color-dark-light-color:var(--color-dark-3);--color-dark-outline:var(--color-dark-4);--color-dark-outline-hover:rgba(66,66,66,.05);--color-slate-filled:var(--color-slate-6);--color-slate-filled-hover:var(--color-slate-7);--color-slate-light:alpha(var(--color-slate-3),.15);--color-slate-light-hover:var(--color-slate-2);--color-slate-light-color:var(--color-slate-8);--color-slate-outline:var(--color-slate-5);--color-slate-outline-hover:alpha(var(--color-slate-5),.1);--color-gray-color:var(--color-gray-4);--color-gray-filled:var(--color-gray-8);--color-gray-filled-hover:var(--color-gray-9);--color-gray-light:hsla(210,7%,56%,.15);--color-gray-light-hover:hsla(210,7%,56%,.2);--color-gray-light-color:var(--color-gray-3);--color-gray-outline:var(--color-gray-4);--color-gray-outline-hover:rgba(206,212,218,.05);--color-red-color:var(--color-red-4);--color-red-filled:var(--color-red-8);--color-red-filled-hover:var(--color-red-9);--color-red-light:rgba(250,82,82,.15);--color-red-light-hover:rgba(250,82,82,.2);--color-red-light-color:var(--color-red-3);--color-red-outline:var(--color-red-4);--color-red-outline-hover:hsla(0,100%,76%,.05);--color-pink-color:var(--color-pink-4);--color-pink-filled:var(--color-pink-8);--color-pink-filled-hover:var(--color-pink-9);--color-pink-light:rgba(230,73,128,.15);--color-pink-light-hover:rgba(230,73,128,.2);--color-pink-light-color:var(--color-pink-3);--color-pink-outline:var(--color-pink-4);--color-pink-outline-hover:rgba(247,131,172,.05);--color-grape-color:var(--color-grape-4);--color-grape-filled:var(--color-grape-8);--color-grape-filled-hover:var(--color-grape-9);--color-grape-light:rgba(190,75,219,.15);--color-grape-light-hover:rgba(190,75,219,.2);--color-grape-light-color:var(--color-grape-3);--color-grape-outline:var(--color-grape-4);--color-grape-outline-hover:rgba(218,119,242,.05);--color-violet-color:var(--color-violet-4);--color-violet-filled:var(--color-violet-8);--color-violet-filled-hover:var(--color-violet-9);--color-violet-light:rgba(121,80,242,.15);--color-violet-light-hover:rgba(121,80,242,.2);--color-violet-light-color:var(--color-violet-3);--color-violet-outline:var(--color-violet-4);--color-violet-outline-hover:rgba(151,117,250,.05);--color-indigo-color:var(--color-indigo-4);--color-indigo-filled:var(--color-indigo-8);--color-indigo-filled-hover:var(--color-indigo-9);--color-indigo-light:rgba(76,110,245,.15);--color-indigo-light-hover:rgba(76,110,245,.2);--color-indigo-light-color:var(--color-indigo-3);--color-indigo-outline:var(--color-indigo-4);--color-indigo-outline-hover:rgba(116,143,252,.05);--color-blue-color:var(--color-blue-4);--color-blue-filled:var(--color-blue-8);--color-blue-filled-hover:var(--color-blue-9);--color-blue-light:rgba(34,139,230,.15);--color-blue-light-hover:rgba(34,139,230,.2);--color-blue-light-color:var(--color-blue-3);--color-blue-outline:var(--color-blue-4);--color-blue-outline-hover:rgba(77,171,247,.05);--color-cyan-color:var(--color-cyan-4);--color-cyan-filled:var(--color-cyan-8);--color-cyan-filled-hover:var(--color-cyan-9);--color-cyan-light:rgba(21,170,191,.15);--color-cyan-light-hover:rgba(21,170,191,.2);--color-cyan-light-color:var(--color-cyan-3);--color-cyan-outline:var(--color-cyan-4);--color-cyan-outline-hover:rgba(59,201,219,.05);--color-teal-color:var(--color-teal-4);--color-teal-filled:var(--color-teal-8);--color-teal-filled-hover:var(--color-teal-9);--color-teal-light:rgba(18,184,134,.15);--color-teal-light-hover:rgba(18,184,134,.2);--color-teal-light-color:var(--color-teal-3);--color-teal-outline:var(--color-teal-4);--color-teal-outline-hover:rgba(56,217,169,.05);--color-green-color:var(--color-green-4);--color-green-filled:var(--color-green-8);--color-green-filled-hover:var(--color-green-9);--color-green-light:rgba(64,192,87,.15);--color-green-light-hover:rgba(64,192,87,.2);--color-green-light-color:var(--color-green-3);--color-green-outline:var(--color-green-4);--color-green-outline-hover:rgba(105,219,124,.05);--color-lime-color:var(--color-lime-4);--color-lime-filled:var(--color-lime-8);--color-lime-filled-hover:var(--color-lime-9);--color-lime-light:rgba(130,201,30,.15);--color-lime-light-hover:rgba(130,201,30,.2);--color-lime-light-color:var(--color-lime-3);--color-lime-outline:var(--color-lime-4);--color-lime-outline-hover:rgba(169,227,75,.05);--color-yellow-color:var(--color-yellow-4);--color-yellow-filled:var(--color-yellow-8);--color-yellow-filled-hover:var(--color-yellow-9);--color-yellow-light:rgba(250,176,5,.15);--color-yellow-light-hover:rgba(250,176,5,.2);--color-yellow-light-color:var(--color-yellow-3);--color-yellow-outline:var(--color-yellow-4);--color-yellow-outline-hover:rgba(255,212,59,.05);--color-orange-color:var(--color-orange-4);--color-orange-filled:var(--color-orange-8);--color-orange-filled-hover:var(--color-orange-9);--color-orange-light:rgba(253,126,20,.15);--color-orange-light-hover:rgba(253,126,20,.2);--color-orange-light-color:var(--color-orange-3);--color-orange-outline:var(--color-orange-4);--color-orange-outline-hover:rgba(255,169,77,.05)}}
1
+ :root{@mixin dark-root{--primary-color-contrast:var(--color-white);--color-bright:var(--color-white);--color-text:var(--color-slate-3);--color-body:var(--color-slate-9);--color-aside:var(--color-slate-7);--color-header:var(--color-slate-8);--color-error:var(--color-red-7);--color-placeholder:var(--color-dark-3);--color-anchor:var(--color-blue-4);--color-default:var(--color-dark-6);--color-default-hover:var(--color-dark-5);--color-default-color:var(--color-white);--color-default-border:var(--color-dark-4);--color-dimmed:var(--color-slate-5);--color-disabled:var(--color-dark-6);--color-disabled-text:var(--color-dark-3);--color-disabled-border:var(--color-gray-6);--color-dark-color:var(--color-dark-4);--color-dark-filled:var(--color-dark-8);--color-dark-filled-hover:var(--color-dark-9);--color-dark-light:rgba(46,46,46,.15);--color-dark-light-hover:rgba(46,46,46,.2);--color-dark-light-color:var(--color-dark-3);--color-dark-outline:var(--color-dark-4);--color-dark-outline-hover:rgba(66,66,66,.05);--color-slate-filled:var(--color-slate-6);--color-slate-filled-hover:var(--color-slate-7);--color-slate-light:alpha(var(--color-slate-3),.15);--color-slate-light-hover:var(--color-slate-2);--color-slate-light-color:var(--color-slate-8);--color-slate-outline:var(--color-slate-5);--color-slate-outline-hover:alpha(var(--color-slate-5),.1);--color-gray-color:var(--color-gray-4);--color-gray-filled:var(--color-gray-8);--color-gray-filled-hover:var(--color-gray-9);--color-gray-light:rgba(134,142,150,.15);--color-gray-light-hover:rgba(134,142,150,.2);--color-gray-light-color:var(--color-gray-3);--color-gray-outline:var(--color-gray-4);--color-gray-outline-hover:rgba(206,212,218,.05);--color-red-color:var(--color-red-4);--color-red-filled:var(--color-red-8);--color-red-filled-hover:var(--color-red-9);--color-red-light:rgba(250,82,82,.15);--color-red-light-hover:rgba(250,82,82,.2);--color-red-light-color:var(--color-red-3);--color-red-outline:var(--color-red-4);--color-red-outline-hover:rgba(255,135,135,.05);--color-pink-color:var(--color-pink-4);--color-pink-filled:var(--color-pink-8);--color-pink-filled-hover:var(--color-pink-9);--color-pink-light:rgba(230,73,128,.15);--color-pink-light-hover:rgba(230,73,128,.2);--color-pink-light-color:var(--color-pink-3);--color-pink-outline:var(--color-pink-4);--color-pink-outline-hover:rgba(247,131,172,.05);--color-grape-color:var(--color-grape-4);--color-grape-filled:var(--color-grape-8);--color-grape-filled-hover:var(--color-grape-9);--color-grape-light:rgba(190,75,219,.15);--color-grape-light-hover:rgba(190,75,219,.2);--color-grape-light-color:var(--color-grape-3);--color-grape-outline:var(--color-grape-4);--color-grape-outline-hover:rgba(218,119,242,.05);--color-violet-color:var(--color-violet-4);--color-violet-filled:var(--color-violet-8);--color-violet-filled-hover:var(--color-violet-9);--color-violet-light:rgba(121,80,242,.15);--color-violet-light-hover:rgba(121,80,242,.2);--color-violet-light-color:var(--color-violet-3);--color-violet-outline:var(--color-violet-4);--color-violet-outline-hover:rgba(151,117,250,.05);--color-indigo-color:var(--color-indigo-4);--color-indigo-filled:var(--color-indigo-8);--color-indigo-filled-hover:var(--color-indigo-9);--color-indigo-light:rgba(76,110,245,.15);--color-indigo-light-hover:rgba(76,110,245,.2);--color-indigo-light-color:var(--color-indigo-3);--color-indigo-outline:var(--color-indigo-4);--color-indigo-outline-hover:rgba(116,143,252,.05);--color-blue-color:var(--color-blue-4);--color-blue-filled:var(--color-blue-8);--color-blue-filled-hover:var(--color-blue-9);--color-blue-light:rgba(34,139,230,.15);--color-blue-light-hover:rgba(34,139,230,.2);--color-blue-light-color:var(--color-blue-3);--color-blue-outline:var(--color-blue-4);--color-blue-outline-hover:rgba(77,171,247,.05);--color-cyan-color:var(--color-cyan-4);--color-cyan-filled:var(--color-cyan-8);--color-cyan-filled-hover:var(--color-cyan-9);--color-cyan-light:rgba(21,170,191,.15);--color-cyan-light-hover:rgba(21,170,191,.2);--color-cyan-light-color:var(--color-cyan-3);--color-cyan-outline:var(--color-cyan-4);--color-cyan-outline-hover:rgba(59,201,219,.05);--color-teal-color:var(--color-teal-4);--color-teal-filled:var(--color-teal-8);--color-teal-filled-hover:var(--color-teal-9);--color-teal-light:rgba(18,184,134,.15);--color-teal-light-hover:rgba(18,184,134,.2);--color-teal-light-color:var(--color-teal-3);--color-teal-outline:var(--color-teal-4);--color-teal-outline-hover:rgba(56,217,169,.05);--color-green-color:var(--color-green-4);--color-green-filled:var(--color-green-8);--color-green-filled-hover:var(--color-green-9);--color-green-light:rgba(64,192,87,.15);--color-green-light-hover:rgba(64,192,87,.2);--color-green-light-color:var(--color-green-3);--color-green-outline:var(--color-green-4);--color-green-outline-hover:rgba(105,219,124,.05);--color-lime-color:var(--color-lime-4);--color-lime-filled:var(--color-lime-8);--color-lime-filled-hover:var(--color-lime-9);--color-lime-light:rgba(130,201,30,.15);--color-lime-light-hover:rgba(130,201,30,.2);--color-lime-light-color:var(--color-lime-3);--color-lime-outline:var(--color-lime-4);--color-lime-outline-hover:rgba(169,227,75,.05);--color-yellow-color:var(--color-yellow-4);--color-yellow-filled:var(--color-yellow-8);--color-yellow-filled-hover:var(--color-yellow-9);--color-yellow-light:rgba(250,176,5,.15);--color-yellow-light-hover:rgba(250,176,5,.2);--color-yellow-light-color:var(--color-yellow-3);--color-yellow-outline:var(--color-yellow-4);--color-yellow-outline-hover:rgba(255,212,59,.05);--color-orange-color:var(--color-orange-4);--color-orange-filled:var(--color-orange-8);--color-orange-filled-hover:var(--color-orange-9);--color-orange-light:rgba(253,126,20,.15);--color-orange-light-hover:rgba(253,126,20,.2);--color-orange-light-color:var(--color-orange-3);--color-orange-outline:var(--color-orange-4);--color-orange-outline-hover:rgba(255,169,77,.05)}}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "nuance-ui",
3
- "version": "0.2.7",
3
+ "version": "0.2.9",
4
4
  "description": "A modern Vue UI library inspired by the best of the React ecosystem.",
5
5
  "repository": {
6
6
  "type": "git",