@skewedaspect/sleekspace-ui 0.9.0 → 0.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (210) hide show
  1. package/dist/components/Accordion/context.d.ts +4 -0
  2. package/dist/components/Autocomplete/SkAutocomplete.vue.d.ts +87 -0
  3. package/dist/components/Autocomplete/SkAutocompleteEmpty.vue.d.ts +17 -0
  4. package/dist/components/Autocomplete/SkAutocompleteGroup.vue.d.ts +17 -0
  5. package/dist/components/Autocomplete/SkAutocompleteGroupLabel.vue.d.ts +17 -0
  6. package/dist/components/Autocomplete/SkAutocompleteItem.vue.d.ts +39 -0
  7. package/dist/components/Autocomplete/SkAutocompleteSeparator.vue.d.ts +2 -0
  8. package/dist/components/Autocomplete/index.d.ts +7 -0
  9. package/dist/components/Autocomplete/types.d.ts +3 -0
  10. package/dist/components/Breadcrumbs/context.d.ts +4 -0
  11. package/dist/components/Button/SkButton.vue.d.ts +8 -1
  12. package/dist/components/Button/types.d.ts +2 -0
  13. package/dist/components/Card/SkCard.vue.d.ts +1 -1
  14. package/dist/components/ContextMenu/context.d.ts +3 -0
  15. package/dist/components/Dropdown/SkDropdown.vue.d.ts +1 -1
  16. package/dist/components/Dropdown/context.d.ts +3 -0
  17. package/dist/components/Field/SkField.vue.d.ts +7 -6
  18. package/dist/components/Input/SkInput.vue.d.ts +9 -2
  19. package/dist/components/Input/types.d.ts +2 -0
  20. package/dist/components/InputGroup/SkInputGroup.vue.d.ts +23 -0
  21. package/dist/components/InputGroup/SkInputGroupAddon.vue.d.ts +33 -0
  22. package/dist/components/InputGroup/types.d.ts +13 -0
  23. package/dist/components/NumberInput/SkNumberInput.vue.d.ts +15 -1
  24. package/dist/components/NumberInput/types.d.ts +2 -0
  25. package/dist/components/Pagination/context.d.ts +5 -0
  26. package/dist/components/Panel/SkPanel.vue.d.ts +1 -1
  27. package/dist/components/Panel/types.d.ts +2 -1
  28. package/dist/components/Radio/context.d.ts +4 -0
  29. package/dist/components/Select/SkSelect.vue.d.ts +7 -1
  30. package/dist/components/Select/types.d.ts +2 -0
  31. package/dist/components/Sidebar/SkSidebar.vue.d.ts +1 -1
  32. package/dist/components/Tabs/context.d.ts +6 -0
  33. package/dist/components/Textarea/SkTextarea.vue.d.ts +1 -1
  34. package/dist/components/Tooltip/SkTooltip.vue.d.ts +1 -1
  35. package/dist/composables/injectionKeys.d.ts +9 -0
  36. package/dist/global.d.ts +4 -0
  37. package/dist/index.d.ts +18 -0
  38. package/dist/sleekspace-ui.css +836 -280
  39. package/dist/sleekspace-ui.es.js +3759 -2545
  40. package/dist/sleekspace-ui.umd.js +3765 -2543
  41. package/dist/static/components/alert.d.ts +2 -1
  42. package/dist/static/components/avatar.d.ts +2 -1
  43. package/dist/static/components/breadcrumbs.d.ts +2 -1
  44. package/dist/static/components/button.d.ts +4 -2
  45. package/dist/static/components/card.d.ts +2 -1
  46. package/dist/static/components/checkbox.d.ts +2 -1
  47. package/dist/static/components/colorPicker.d.ts +2 -1
  48. package/dist/static/components/divider.d.ts +2 -1
  49. package/dist/static/components/dropdown.d.ts +2 -1
  50. package/dist/static/components/field.d.ts +2 -1
  51. package/dist/static/components/group.d.ts +2 -1
  52. package/dist/static/components/input.d.ts +4 -2
  53. package/dist/static/components/inputGroup.d.ts +8 -0
  54. package/dist/static/components/inputGroupAddon.d.ts +7 -0
  55. package/dist/static/components/navBar.d.ts +2 -1
  56. package/dist/static/components/numberInput.d.ts +4 -2
  57. package/dist/static/components/page.d.ts +2 -1
  58. package/dist/static/components/pagination.d.ts +2 -1
  59. package/dist/static/components/panel.d.ts +2 -1
  60. package/dist/static/components/progress.d.ts +2 -1
  61. package/dist/static/components/radio.d.ts +2 -1
  62. package/dist/static/components/select.d.ts +4 -2
  63. package/dist/static/components/sidebar.d.ts +2 -1
  64. package/dist/static/components/skeleton.d.ts +2 -1
  65. package/dist/static/components/slider.d.ts +2 -1
  66. package/dist/static/components/spinner.d.ts +2 -1
  67. package/dist/static/components/switchInput.d.ts +2 -1
  68. package/dist/static/components/table.d.ts +2 -1
  69. package/dist/static/components/tag.d.ts +2 -1
  70. package/dist/static/components/tagsInput.d.ts +2 -1
  71. package/dist/static/components/textarea.d.ts +2 -1
  72. package/dist/static/components/toolbar.d.ts +2 -1
  73. package/dist/static/components/tooltip.d.ts +2 -1
  74. package/dist/static/h.d.ts +2 -0
  75. package/dist/static/index.cjs.js +1 -1
  76. package/dist/static/index.d.ts +6 -0
  77. package/dist/static/index.es.js +366 -216
  78. package/dist/static/render.d.ts +2 -1
  79. package/dist/static/stringH.d.ts +2 -0
  80. package/dist/static/types.d.ts +5 -0
  81. package/dist/tailwind.css +222 -0
  82. package/dist/tokens.css +0 -223
  83. package/dist/types/corners.d.ts +1 -0
  84. package/dist/utils/slots.d.ts +6 -0
  85. package/llms-full.txt +17 -9
  86. package/package.json +9 -3
  87. package/src/components/Accordion/SkAccordion.vue +5 -2
  88. package/src/components/Accordion/SkAccordionItem.vue +7 -4
  89. package/src/components/Accordion/context.ts +23 -0
  90. package/src/components/Alert/SkAlert.vue +4 -2
  91. package/src/components/Autocomplete/SkAutocomplete.test.ts +83 -0
  92. package/src/components/Autocomplete/SkAutocomplete.vue +305 -0
  93. package/src/components/Autocomplete/SkAutocompleteEmpty.vue +39 -0
  94. package/src/components/Autocomplete/SkAutocompleteGroup.vue +46 -0
  95. package/src/components/Autocomplete/SkAutocompleteGroupLabel.vue +39 -0
  96. package/src/components/Autocomplete/SkAutocompleteItem.vue +85 -0
  97. package/src/components/Autocomplete/SkAutocompleteSeparator.vue +39 -0
  98. package/src/components/Autocomplete/index.ts +13 -0
  99. package/src/components/Autocomplete/types.ts +10 -0
  100. package/src/components/Breadcrumbs/SkBreadcrumbItem.vue +8 -3
  101. package/src/components/Breadcrumbs/SkBreadcrumbSeparator.vue +8 -2
  102. package/src/components/Breadcrumbs/SkBreadcrumbs.vue +11 -14
  103. package/src/components/Breadcrumbs/context.ts +20 -0
  104. package/src/components/Button/SkButton.vue +54 -11
  105. package/src/components/Button/types.ts +6 -0
  106. package/src/components/Card/SkCard.vue +12 -5
  107. package/src/components/Checkbox/SkCheckbox.vue +9 -2
  108. package/src/components/ColorPicker/SkColorPicker.vue +27 -5
  109. package/src/components/ContextMenu/SkContextMenu.vue +4 -1
  110. package/src/components/ContextMenu/SkContextMenuSubmenu.vue +5 -2
  111. package/src/components/ContextMenu/context.ts +17 -0
  112. package/src/components/Dropdown/SkDropdown.vue +2 -1
  113. package/src/components/Dropdown/SkDropdownSubmenu.vue +4 -3
  114. package/src/components/Dropdown/context.ts +16 -0
  115. package/src/components/Field/SkField.test.ts +88 -0
  116. package/src/components/Field/SkField.vue +15 -7
  117. package/src/components/Input/SkInput.test.ts +61 -0
  118. package/src/components/Input/SkInput.vue +42 -7
  119. package/src/components/Input/types.ts +2 -0
  120. package/src/components/InputGroup/SkInputGroup.test.ts +171 -0
  121. package/src/components/InputGroup/SkInputGroup.vue +131 -0
  122. package/src/components/InputGroup/SkInputGroupAddon.test.ts +104 -0
  123. package/src/components/InputGroup/SkInputGroupAddon.vue +107 -0
  124. package/src/components/InputGroup/types.ts +27 -0
  125. package/src/components/Listbox/SkListbox.vue +27 -6
  126. package/src/components/Modal/SkModal.vue +11 -4
  127. package/src/components/NavBar/SkNavBar.vue +5 -4
  128. package/src/components/NumberInput/SkNumberInput.vue +49 -8
  129. package/src/components/NumberInput/types.ts +2 -0
  130. package/src/components/Page/SkPage.vue +18 -15
  131. package/src/components/Pagination/SkPagination.vue +6 -3
  132. package/src/components/Pagination/SkPaginationItem.vue +8 -5
  133. package/src/components/Pagination/context.ts +19 -0
  134. package/src/components/Panel/types.ts +3 -2
  135. package/src/components/Popover/SkPopover.vue +11 -4
  136. package/src/components/Radio/SkRadio.vue +14 -4
  137. package/src/components/Radio/SkRadioGroup.vue +4 -2
  138. package/src/components/Radio/context.ts +17 -0
  139. package/src/components/Select/SkSelect.vue +39 -7
  140. package/src/components/Select/types.ts +2 -0
  141. package/src/components/Switch/SkSwitch.vue +14 -13
  142. package/src/components/Tabs/SkTab.vue +10 -3
  143. package/src/components/Tabs/SkTabList.vue +4 -2
  144. package/src/components/Tabs/SkTabs.vue +5 -3
  145. package/src/components/Tabs/context.ts +19 -0
  146. package/src/components/TagsInput/SkTagsInput.vue +28 -7
  147. package/src/components/Textarea/SkTextarea.vue +27 -6
  148. package/src/components/TreeView/SkTreeItem.vue +10 -2
  149. package/src/composables/injectionKeys.ts +52 -0
  150. package/src/index.ts +28 -0
  151. package/src/static/__tests__/parity.test.ts +2 -1
  152. package/src/static/__tests__/parityHarness.ts +5 -2
  153. package/src/static/components/__tests__/helpers.test.ts +191 -99
  154. package/src/static/components/alert.ts +12 -11
  155. package/src/static/components/avatar.ts +15 -16
  156. package/src/static/components/breadcrumbs.ts +3 -2
  157. package/src/static/components/button.ts +23 -27
  158. package/src/static/components/card.ts +3 -2
  159. package/src/static/components/checkbox.ts +11 -14
  160. package/src/static/components/colorPicker.ts +7 -9
  161. package/src/static/components/divider.ts +4 -3
  162. package/src/static/components/dropdown.ts +15 -6
  163. package/src/static/components/field.ts +32 -15
  164. package/src/static/components/group.ts +3 -2
  165. package/src/static/components/input.ts +20 -15
  166. package/src/static/components/inputGroup.ts +30 -0
  167. package/src/static/components/inputGroupAddon.ts +29 -0
  168. package/src/static/components/navBar.ts +30 -17
  169. package/src/static/components/numberInput.ts +17 -17
  170. package/src/static/components/page.ts +3 -2
  171. package/src/static/components/pagination.ts +3 -2
  172. package/src/static/components/panel.ts +3 -2
  173. package/src/static/components/progress.ts +3 -2
  174. package/src/static/components/radio.ts +14 -20
  175. package/src/static/components/select.ts +18 -15
  176. package/src/static/components/sidebar.ts +9 -13
  177. package/src/static/components/skeleton.ts +7 -10
  178. package/src/static/components/slider.ts +7 -9
  179. package/src/static/components/spinner.ts +22 -22
  180. package/src/static/components/switchInput.ts +12 -14
  181. package/src/static/components/table.ts +8 -10
  182. package/src/static/components/tag.ts +17 -11
  183. package/src/static/components/tagsInput.ts +3 -3
  184. package/src/static/components/textarea.ts +8 -13
  185. package/src/static/components/toolbar.ts +7 -10
  186. package/src/static/components/tooltip.ts +3 -2
  187. package/src/static/generated/defaults.ts +25 -9
  188. package/src/static/generated/propTypes.ts +19 -2
  189. package/src/static/h.ts +16 -0
  190. package/src/static/index.ts +8 -0
  191. package/src/static/render.test.ts +14 -10
  192. package/src/static/render.ts +33 -18
  193. package/src/static/specs.test.ts +1 -0
  194. package/src/static/specs.ts +22 -2
  195. package/src/static/stringH.ts +104 -0
  196. package/src/static/types.ts +25 -0
  197. package/src/styles/components/_autocomplete.scss +498 -0
  198. package/src/styles/components/_button.scss +55 -6
  199. package/src/styles/components/_index.scss +2 -0
  200. package/src/styles/components/_input-group.scss +292 -0
  201. package/src/styles/components/_input.scss +57 -9
  202. package/src/styles/components/_number-input.scss +88 -14
  203. package/src/styles/components/_select.scss +56 -9
  204. package/src/styles/mixins/_cut-border.scss +83 -0
  205. package/src/styles/tailwind.scss +262 -0
  206. package/src/styles/tokens.scss +8 -255
  207. package/src/types/corners.ts +10 -0
  208. package/src/utils/slots.test.ts +89 -0
  209. package/src/utils/slots.ts +80 -0
  210. package/web-types.json +392 -12
@@ -64,7 +64,7 @@
64
64
  * @slot - Not applicable. This component does not accept slot content.
65
65
  */
66
66
 
67
- import { type ComputedRef, computed, inject, toRef } from 'vue';
67
+ import { computed, inject, toRef } from 'vue';
68
68
  import {
69
69
  TagsInputInput,
70
70
  TagsInputItem,
@@ -78,6 +78,13 @@
78
78
  import type { SkTagsInputKind, SkTagsInputSize } from './types';
79
79
 
80
80
  // Composables
81
+ import {
82
+ NO_KIND,
83
+ NO_SIZE,
84
+ inheritedKindKey,
85
+ inputGroupSizeKey,
86
+ validationKindKey,
87
+ } from '@/composables/injectionKeys';
81
88
  import { useCustomColors } from '@/composables/useCustomColors';
82
89
 
83
90
  //------------------------------------------------------------------------------------------------------------------
@@ -151,7 +158,7 @@
151
158
 
152
159
  const props = withDefaults(defineProps<SkTagsInputComponentProps>(), {
153
160
  kind: undefined,
154
- size: 'md',
161
+ size: undefined,
155
162
  placeholder: 'Add tag...',
156
163
  disabled: false,
157
164
  max: undefined,
@@ -172,12 +179,26 @@
172
179
 
173
180
  //------------------------------------------------------------------------------------------------------------------
174
181
 
175
- // Inject field kind
176
- const fieldKind = inject<ComputedRef<SkTagsInputKind | undefined>>('field-kind', computed(() => undefined));
182
+ const validationKind = inject(validationKindKey, NO_KIND);
183
+ const inheritedKind = inject(inheritedKindKey, NO_KIND);
184
+ const inputGroupSize = inject(inputGroupSizeKey, NO_SIZE);
177
185
 
178
186
  //------------------------------------------------------------------------------------------------------------------
179
187
 
180
- const effectiveKind = computed(() => fieldKind.value || props.kind || 'neutral');
188
+ const effectiveKind = computed<SkTagsInputKind>(() =>
189
+ {
190
+ if(validationKind.value !== undefined) { return validationKind.value; }
191
+ if(props.kind !== undefined) { return props.kind; }
192
+ if(inheritedKind.value !== undefined) { return inheritedKind.value; }
193
+ return 'neutral';
194
+ });
195
+
196
+ const effectiveSize = computed<SkTagsInputSize>(() =>
197
+ {
198
+ if(props.size !== undefined) { return props.size; }
199
+ if(inputGroupSize.value !== undefined) { return inputGroupSize.value; }
200
+ return 'md';
201
+ });
181
202
 
182
203
  //------------------------------------------------------------------------------------------------------------------
183
204
 
@@ -204,7 +225,7 @@
204
225
  const wrapperClasses = computed(() => ({
205
226
  'sk-tags-input': true,
206
227
  [`sk-${ effectiveKind.value }`]: true,
207
- [`sk-${ props.size }`]: true,
228
+ [`sk-${ effectiveSize.value }`]: true,
208
229
  }));
209
230
 
210
231
  //------------------------------------------------------------------------------------------------------------------
@@ -218,7 +239,7 @@
218
239
  const tagClasses = computed(() => ({
219
240
  [`sk-${ effectiveTagKind.value }`]: true,
220
241
  [`sk-${ props.tagVariant }`]: true,
221
- [`sk-${ props.size }`]: true,
242
+ [`sk-${ effectiveSize.value }`]: true,
222
243
  }));
223
244
 
224
245
  //------------------------------------------------------------------------------------------------------------------
@@ -43,13 +43,20 @@
43
43
  * ```
44
44
  */
45
45
 
46
- import { type ComputedRef, computed, inject, toRef } from 'vue';
46
+ import { computed, inject, toRef } from 'vue';
47
47
 
48
48
  // Types
49
49
  import type { ComponentCustomColors } from '@/types';
50
50
  import type { SkTextareaKind, SkTextareaSize } from './types';
51
51
 
52
52
  // Composables
53
+ import {
54
+ NO_KIND,
55
+ NO_SIZE,
56
+ inheritedKindKey,
57
+ inputGroupSizeKey,
58
+ validationKindKey,
59
+ } from '@/composables/injectionKeys';
53
60
  import { useCustomColors } from '@/composables/useCustomColors';
54
61
 
55
62
  //------------------------------------------------------------------------------------------------------------------
@@ -131,7 +138,7 @@
131
138
 
132
139
  const props = withDefaults(defineProps<SkTextareaComponentProps>(), {
133
140
  kind: undefined,
134
- size: 'md',
141
+ size: undefined,
135
142
  placeholder: undefined,
136
143
  disabled: false,
137
144
  readonly: false,
@@ -152,19 +159,33 @@
152
159
 
153
160
  //------------------------------------------------------------------------------------------------------------------
154
161
 
155
- // Inject kind from parent SkField if available
156
- const fieldKind = inject<ComputedRef<SkTextareaKind | undefined>>('field-kind', computed(() => undefined));
162
+ const validationKind = inject(validationKindKey, NO_KIND);
163
+ const inheritedKind = inject(inheritedKindKey, NO_KIND);
164
+ const inputGroupSize = inject(inputGroupSizeKey, NO_SIZE);
157
165
 
158
166
  //------------------------------------------------------------------------------------------------------------------
159
167
 
160
- const effectiveKind = computed(() => fieldKind.value || props.kind || 'neutral');
168
+ const effectiveKind = computed<SkTextareaKind>(() =>
169
+ {
170
+ if(validationKind.value !== undefined) { return validationKind.value; }
171
+ if(props.kind !== undefined) { return props.kind; }
172
+ if(inheritedKind.value !== undefined) { return inheritedKind.value; }
173
+ return 'neutral';
174
+ });
175
+
176
+ const effectiveSize = computed<SkTextareaSize>(() =>
177
+ {
178
+ if(props.size !== undefined) { return props.size; }
179
+ if(inputGroupSize.value !== undefined) { return inputGroupSize.value; }
180
+ return 'md';
181
+ });
161
182
 
162
183
  //------------------------------------------------------------------------------------------------------------------
163
184
 
164
185
  const classes = computed(() => ({
165
186
  'sk-textarea': true,
166
187
  [`sk-${ effectiveKind.value }`]: true,
167
- [`sk-${ props.size }`]: true,
188
+ [`sk-${ effectiveSize.value }`]: true,
168
189
  'sk-readonly': props.readonly,
169
190
  }));
170
191
 
@@ -32,7 +32,7 @@
32
32
  <div v-else-if="showChevron" class="sk-tree-item-chevron-spacer" />
33
33
 
34
34
  <!-- Leading slot (icons, checkboxes, etc.) -->
35
- <div v-if="$slots.leading" class="sk-tree-item-leading">
35
+ <div v-if="hasSlotContent(slots.leading)" class="sk-tree-item-leading">
36
36
  <slot name="leading" :is-expanded="isExpanded" :is-selected="isSelected" />
37
37
  </div>
38
38
 
@@ -47,7 +47,7 @@
47
47
  </div>
48
48
 
49
49
  <!-- Trailing slot -->
50
- <div v-if="$slots.trailing" class="sk-tree-item-trailing">
50
+ <div v-if="hasSlotContent(slots.trailing)" class="sk-tree-item-trailing">
51
51
  <slot name="trailing" :is-expanded="isExpanded" :is-selected="isSelected" />
52
52
  </div>
53
53
  </TreeItem>
@@ -62,8 +62,12 @@
62
62
  <!--------------------------------------------------------------------------------------------------------------------->
63
63
 
64
64
  <script setup lang="ts">
65
+ import { type Slots, useSlots } from 'vue';
65
66
  import { type FlattenedItem, TreeItem } from 'reka-ui';
66
67
 
68
+ // Utils
69
+ import { hasSlotContent } from '@/utils/slots';
70
+
67
71
  //------------------------------------------------------------------------------------------------------------------
68
72
 
69
73
  export interface SkTreeItemComponentProps
@@ -79,6 +83,10 @@
79
83
  disabled: false,
80
84
  showChevron: true,
81
85
  });
86
+
87
+ //------------------------------------------------------------------------------------------------------------------
88
+
89
+ const slots : Slots = useSlots();
82
90
  </script>
83
91
 
84
92
  <!--------------------------------------------------------------------------------------------------------------------->
@@ -0,0 +1,52 @@
1
+ //----------------------------------------------------------------------------------------------------------------------
2
+ // Injection Keys
3
+ //
4
+ // Typed Vue `InjectionKey` symbols for the cross-component context channels. Replaces the
5
+ // stringly-typed `inject('field-kind')` calls that used to be repeated at every consumer site.
6
+ //
7
+ // Two channels carry kind context, with deliberately distinct semantics:
8
+ //
9
+ // validation-kind — set ONLY by SkField when its `state` prop is true/false (validation
10
+ // override). Always wins over a component's explicit `kind` prop. Empty
11
+ // otherwise.
12
+ //
13
+ // inherited-kind — set by ambient kind providers (currently SkInputGroup). Used as the
14
+ // default when the component's own `kind` prop is undefined. Never
15
+ // overrides an explicit prop.
16
+ //
17
+ // The unified resolution rule for every form component is therefore:
18
+ //
19
+ // validationKind ?? props.kind ?? inheritedKind ?? 'neutral'
20
+ //
21
+ // Size has a single ambient channel (`input-group-size`); validation does not affect sizing.
22
+ //----------------------------------------------------------------------------------------------------------------------
23
+
24
+ import { type ComputedRef, type InjectionKey, computed } from 'vue';
25
+
26
+ // Types
27
+ import type { ComponentKind, ComponentSize } from '@/types';
28
+
29
+ //----------------------------------------------------------------------------------------------------------------------
30
+
31
+ export type KindContext = ComputedRef<ComponentKind | undefined>;
32
+ export type SizeContext = ComputedRef<ComponentSize | undefined>;
33
+
34
+ //----------------------------------------------------------------------------------------------------------------------
35
+
36
+ export const validationKindKey : InjectionKey<KindContext> = Symbol('validation-kind');
37
+
38
+ export const inheritedKindKey : InjectionKey<KindContext> = Symbol('inherited-kind');
39
+
40
+ export const inputGroupSizeKey : InjectionKey<SizeContext> = Symbol('input-group-size');
41
+
42
+ //----------------------------------------------------------------------------------------------------------------------
43
+ // Shared inject fallbacks. Use these as the default argument to `inject(key, NO_KIND)` instead of
44
+ // constructing a fresh `computed(() => undefined)` per component setup. Identity stable, so
45
+ // nothing memoises against them anyway, but it keeps the call sites tidy.
46
+ //----------------------------------------------------------------------------------------------------------------------
47
+
48
+ export const NO_KIND : KindContext = computed(() => undefined);
49
+
50
+ export const NO_SIZE : SizeContext = computed(() => undefined);
51
+
52
+ //----------------------------------------------------------------------------------------------------------------------
package/src/index.ts CHANGED
@@ -12,6 +12,14 @@ import type { SkThemeComponentProps } from './components/Theme/types';
12
12
  import SkAccordion, { type SkAccordionComponentProps } from './components/Accordion/SkAccordion.vue';
13
13
  import SkAccordionItem, { type SkAccordionItemComponentProps } from './components/Accordion/SkAccordionItem.vue';
14
14
  import SkAlert, { type SkAlertComponentProps } from './components/Alert/SkAlert.vue';
15
+ import SkAutocomplete, { type SkAutocompleteComponentProps } from './components/Autocomplete/SkAutocomplete.vue';
16
+ import SkAutocompleteEmpty from './components/Autocomplete/SkAutocompleteEmpty.vue';
17
+ import SkAutocompleteGroup from './components/Autocomplete/SkAutocompleteGroup.vue';
18
+ import SkAutocompleteGroupLabel from './components/Autocomplete/SkAutocompleteGroupLabel.vue';
19
+ import SkAutocompleteItem, {
20
+ type SkAutocompleteItemComponentProps,
21
+ } from './components/Autocomplete/SkAutocompleteItem.vue';
22
+ import SkAutocompleteSeparator from './components/Autocomplete/SkAutocompleteSeparator.vue';
15
23
  import SkAvatar, { type SkAvatarComponentProps } from './components/Avatar/SkAvatar.vue';
16
24
  import SkBreadcrumbItem, {
17
25
  type SkBreadcrumbItemComponentProps,
@@ -63,6 +71,8 @@ import SkDropdownSubmenu, {
63
71
  import SkField, { type SkFieldComponentProps } from './components/Field/SkField.vue';
64
72
  import SkGroup, { type SkGroupComponentProps } from './components/Group/SkGroup.vue';
65
73
  import SkInput, { type SkInputComponentProps } from './components/Input/SkInput.vue';
74
+ import SkInputGroup, { type SkInputGroupComponentProps } from './components/InputGroup/SkInputGroup.vue';
75
+ import SkInputGroupAddon, { type SkInputGroupAddonComponentProps } from './components/InputGroup/SkInputGroupAddon.vue';
66
76
  import SkListbox, { type SkListboxComponentProps } from './components/Listbox/SkListbox.vue';
67
77
  import SkListboxItem, { type SkListboxItemComponentProps } from './components/Listbox/SkListboxItem.vue';
68
78
  import SkListboxSeparator from './components/Listbox/SkListboxSeparator.vue';
@@ -139,6 +149,7 @@ export * from './types';
139
149
 
140
150
  export * from './components/Accordion/types';
141
151
  export * from './components/Alert/types';
152
+ export * from './components/Autocomplete/types';
142
153
  export * from './components/Avatar/types';
143
154
  export * from './components/Breadcrumbs/types';
144
155
  export * from './components/Button/types';
@@ -152,6 +163,7 @@ export * from './components/Dropdown/types';
152
163
  export * from './components/Field/types';
153
164
  export * from './components/Group/types';
154
165
  export * from './components/Input/types';
166
+ export * from './components/InputGroup/types';
155
167
  export * from './components/Listbox/types';
156
168
  export * from './components/Modal/types';
157
169
  export * from './components/NavBar/types';
@@ -195,6 +207,12 @@ export { useToast } from './components/Toast/useToast';
195
207
  export { SkAccordion, type SkAccordionComponentProps };
196
208
  export { SkAccordionItem, type SkAccordionItemComponentProps };
197
209
  export { SkAlert, type SkAlertComponentProps };
210
+ export { SkAutocomplete, type SkAutocompleteComponentProps };
211
+ export { SkAutocompleteEmpty };
212
+ export { SkAutocompleteGroup };
213
+ export { SkAutocompleteGroupLabel };
214
+ export { SkAutocompleteItem, type SkAutocompleteItemComponentProps };
215
+ export { SkAutocompleteSeparator };
198
216
  export { SkAvatar, type SkAvatarComponentProps };
199
217
  export { SkBreadcrumbItem, type SkBreadcrumbItemComponentProps };
200
218
  export { SkBreadcrumbs, type SkBreadcrumbsComponentProps };
@@ -224,6 +242,8 @@ export { SkDropdownSubmenu, type SkDropdownSubmenuComponentProps };
224
242
  export { SkField, type SkFieldComponentProps };
225
243
  export { SkGroup, type SkGroupComponentProps };
226
244
  export { SkInput, type SkInputComponentProps };
245
+ export { SkInputGroup, type SkInputGroupComponentProps };
246
+ export { SkInputGroupAddon, type SkInputGroupAddonComponentProps };
227
247
  export { SkListbox, type SkListboxComponentProps };
228
248
  export { SkListboxItem, type SkListboxItemComponentProps };
229
249
  export { SkListboxSeparator };
@@ -286,6 +306,12 @@ const SleekSpaceUI : Plugin = {
286
306
  app.component('SkAccordion', SkAccordion);
287
307
  app.component('SkAccordionItem', SkAccordionItem);
288
308
  app.component('SkAlert', SkAlert);
309
+ app.component('SkAutocomplete', SkAutocomplete);
310
+ app.component('SkAutocompleteEmpty', SkAutocompleteEmpty);
311
+ app.component('SkAutocompleteGroup', SkAutocompleteGroup);
312
+ app.component('SkAutocompleteGroupLabel', SkAutocompleteGroupLabel);
313
+ app.component('SkAutocompleteItem', SkAutocompleteItem);
314
+ app.component('SkAutocompleteSeparator', SkAutocompleteSeparator);
289
315
  app.component('SkAvatar', SkAvatar);
290
316
  app.component('SkBreadcrumbItem', SkBreadcrumbItem);
291
317
  app.component('SkBreadcrumbs', SkBreadcrumbs);
@@ -315,6 +341,8 @@ const SleekSpaceUI : Plugin = {
315
341
  app.component('SkField', SkField);
316
342
  app.component('SkGroup', SkGroup);
317
343
  app.component('SkInput', SkInput);
344
+ app.component('SkInputGroup', SkInputGroup);
345
+ app.component('SkInputGroupAddon', SkInputGroupAddon);
318
346
  app.component('SkListbox', SkListbox);
319
347
  app.component('SkListboxItem', SkListboxItem);
320
348
  app.component('SkListboxSeparator', SkListboxSeparator);
@@ -39,10 +39,11 @@ import { field } from '../components/field';
39
39
  import { table } from '../components/table';
40
40
 
41
41
  import { compareParity } from './parityHarness';
42
+ import type { H } from '../h';
42
43
 
43
44
  //----------------------------------------------------------------------------------------------------------------------
44
45
 
45
- type StaticFn = (p : Record<string, unknown>, c ?: string) => string;
46
+ type StaticFn = (h : H<string>, p : Record<string, unknown>, c ?: string) => string;
46
47
 
47
48
  function expectParity(result : ReturnType<typeof compareParity>) : void
48
49
  {
@@ -13,12 +13,15 @@
13
13
  import { mount } from '@vue/test-utils';
14
14
  import type { Component } from 'vue';
15
15
 
16
+ import { stringH } from '../stringH';
17
+ import type { H } from '../h';
18
+
16
19
  //----------------------------------------------------------------------------------------------------------------------
17
20
 
18
21
  export interface ParityInput
19
22
  {
20
23
  vueComponent : Component;
21
- staticHelper : (props : Record<string, unknown>, children ?: string) => string;
24
+ staticHelper : (h : H<string>, props : Record<string, unknown>, children ?: string) => string;
22
25
  props : Record<string, unknown>;
23
26
  children ?: string;
24
27
  }
@@ -235,7 +238,7 @@ export function compareParity(input : ParityInput) : ParityResult
235
238
  });
236
239
  const vueHtml = wrapper.html();
237
240
 
238
- const staticHtml = input.staticHelper(input.props, input.children);
241
+ const staticHtml = input.staticHelper(stringH, input.props, input.children);
239
242
 
240
243
  const parser = new DOMParser();
241
244
  const vueDoc = parser.parseFromString(`<div>${ vueHtml }</div>`, 'text/html');