@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.
- package/dist/components/Accordion/context.d.ts +4 -0
- package/dist/components/Autocomplete/SkAutocomplete.vue.d.ts +87 -0
- package/dist/components/Autocomplete/SkAutocompleteEmpty.vue.d.ts +17 -0
- package/dist/components/Autocomplete/SkAutocompleteGroup.vue.d.ts +17 -0
- package/dist/components/Autocomplete/SkAutocompleteGroupLabel.vue.d.ts +17 -0
- package/dist/components/Autocomplete/SkAutocompleteItem.vue.d.ts +39 -0
- package/dist/components/Autocomplete/SkAutocompleteSeparator.vue.d.ts +2 -0
- package/dist/components/Autocomplete/index.d.ts +7 -0
- package/dist/components/Autocomplete/types.d.ts +3 -0
- package/dist/components/Breadcrumbs/context.d.ts +4 -0
- package/dist/components/Button/SkButton.vue.d.ts +8 -1
- package/dist/components/Button/types.d.ts +2 -0
- package/dist/components/Card/SkCard.vue.d.ts +1 -1
- package/dist/components/ContextMenu/context.d.ts +3 -0
- package/dist/components/Dropdown/SkDropdown.vue.d.ts +1 -1
- package/dist/components/Dropdown/context.d.ts +3 -0
- package/dist/components/Field/SkField.vue.d.ts +7 -6
- package/dist/components/Input/SkInput.vue.d.ts +9 -2
- package/dist/components/Input/types.d.ts +2 -0
- package/dist/components/InputGroup/SkInputGroup.vue.d.ts +23 -0
- package/dist/components/InputGroup/SkInputGroupAddon.vue.d.ts +33 -0
- package/dist/components/InputGroup/types.d.ts +13 -0
- package/dist/components/NumberInput/SkNumberInput.vue.d.ts +15 -1
- package/dist/components/NumberInput/types.d.ts +2 -0
- package/dist/components/Pagination/context.d.ts +5 -0
- package/dist/components/Panel/SkPanel.vue.d.ts +1 -1
- package/dist/components/Panel/types.d.ts +2 -1
- package/dist/components/Radio/context.d.ts +4 -0
- package/dist/components/Select/SkSelect.vue.d.ts +7 -1
- package/dist/components/Select/types.d.ts +2 -0
- package/dist/components/Sidebar/SkSidebar.vue.d.ts +1 -1
- package/dist/components/Tabs/context.d.ts +6 -0
- package/dist/components/Textarea/SkTextarea.vue.d.ts +1 -1
- package/dist/components/Tooltip/SkTooltip.vue.d.ts +1 -1
- package/dist/composables/injectionKeys.d.ts +9 -0
- package/dist/global.d.ts +4 -0
- package/dist/index.d.ts +18 -0
- package/dist/sleekspace-ui.css +836 -280
- package/dist/sleekspace-ui.es.js +3759 -2545
- package/dist/sleekspace-ui.umd.js +3765 -2543
- package/dist/static/components/alert.d.ts +2 -1
- package/dist/static/components/avatar.d.ts +2 -1
- package/dist/static/components/breadcrumbs.d.ts +2 -1
- package/dist/static/components/button.d.ts +4 -2
- package/dist/static/components/card.d.ts +2 -1
- package/dist/static/components/checkbox.d.ts +2 -1
- package/dist/static/components/colorPicker.d.ts +2 -1
- package/dist/static/components/divider.d.ts +2 -1
- package/dist/static/components/dropdown.d.ts +2 -1
- package/dist/static/components/field.d.ts +2 -1
- package/dist/static/components/group.d.ts +2 -1
- package/dist/static/components/input.d.ts +4 -2
- package/dist/static/components/inputGroup.d.ts +8 -0
- package/dist/static/components/inputGroupAddon.d.ts +7 -0
- package/dist/static/components/navBar.d.ts +2 -1
- package/dist/static/components/numberInput.d.ts +4 -2
- package/dist/static/components/page.d.ts +2 -1
- package/dist/static/components/pagination.d.ts +2 -1
- package/dist/static/components/panel.d.ts +2 -1
- package/dist/static/components/progress.d.ts +2 -1
- package/dist/static/components/radio.d.ts +2 -1
- package/dist/static/components/select.d.ts +4 -2
- package/dist/static/components/sidebar.d.ts +2 -1
- package/dist/static/components/skeleton.d.ts +2 -1
- package/dist/static/components/slider.d.ts +2 -1
- package/dist/static/components/spinner.d.ts +2 -1
- package/dist/static/components/switchInput.d.ts +2 -1
- package/dist/static/components/table.d.ts +2 -1
- package/dist/static/components/tag.d.ts +2 -1
- package/dist/static/components/tagsInput.d.ts +2 -1
- package/dist/static/components/textarea.d.ts +2 -1
- package/dist/static/components/toolbar.d.ts +2 -1
- package/dist/static/components/tooltip.d.ts +2 -1
- package/dist/static/h.d.ts +2 -0
- package/dist/static/index.cjs.js +1 -1
- package/dist/static/index.d.ts +6 -0
- package/dist/static/index.es.js +366 -216
- package/dist/static/render.d.ts +2 -1
- package/dist/static/stringH.d.ts +2 -0
- package/dist/static/types.d.ts +5 -0
- package/dist/tailwind.css +222 -0
- package/dist/tokens.css +0 -223
- package/dist/types/corners.d.ts +1 -0
- package/dist/utils/slots.d.ts +6 -0
- package/llms-full.txt +17 -9
- package/package.json +9 -3
- package/src/components/Accordion/SkAccordion.vue +5 -2
- package/src/components/Accordion/SkAccordionItem.vue +7 -4
- package/src/components/Accordion/context.ts +23 -0
- package/src/components/Alert/SkAlert.vue +4 -2
- package/src/components/Autocomplete/SkAutocomplete.test.ts +83 -0
- package/src/components/Autocomplete/SkAutocomplete.vue +305 -0
- package/src/components/Autocomplete/SkAutocompleteEmpty.vue +39 -0
- package/src/components/Autocomplete/SkAutocompleteGroup.vue +46 -0
- package/src/components/Autocomplete/SkAutocompleteGroupLabel.vue +39 -0
- package/src/components/Autocomplete/SkAutocompleteItem.vue +85 -0
- package/src/components/Autocomplete/SkAutocompleteSeparator.vue +39 -0
- package/src/components/Autocomplete/index.ts +13 -0
- package/src/components/Autocomplete/types.ts +10 -0
- package/src/components/Breadcrumbs/SkBreadcrumbItem.vue +8 -3
- package/src/components/Breadcrumbs/SkBreadcrumbSeparator.vue +8 -2
- package/src/components/Breadcrumbs/SkBreadcrumbs.vue +11 -14
- package/src/components/Breadcrumbs/context.ts +20 -0
- package/src/components/Button/SkButton.vue +54 -11
- package/src/components/Button/types.ts +6 -0
- package/src/components/Card/SkCard.vue +12 -5
- package/src/components/Checkbox/SkCheckbox.vue +9 -2
- package/src/components/ColorPicker/SkColorPicker.vue +27 -5
- package/src/components/ContextMenu/SkContextMenu.vue +4 -1
- package/src/components/ContextMenu/SkContextMenuSubmenu.vue +5 -2
- package/src/components/ContextMenu/context.ts +17 -0
- package/src/components/Dropdown/SkDropdown.vue +2 -1
- package/src/components/Dropdown/SkDropdownSubmenu.vue +4 -3
- package/src/components/Dropdown/context.ts +16 -0
- package/src/components/Field/SkField.test.ts +88 -0
- package/src/components/Field/SkField.vue +15 -7
- package/src/components/Input/SkInput.test.ts +61 -0
- package/src/components/Input/SkInput.vue +42 -7
- package/src/components/Input/types.ts +2 -0
- package/src/components/InputGroup/SkInputGroup.test.ts +171 -0
- package/src/components/InputGroup/SkInputGroup.vue +131 -0
- package/src/components/InputGroup/SkInputGroupAddon.test.ts +104 -0
- package/src/components/InputGroup/SkInputGroupAddon.vue +107 -0
- package/src/components/InputGroup/types.ts +27 -0
- package/src/components/Listbox/SkListbox.vue +27 -6
- package/src/components/Modal/SkModal.vue +11 -4
- package/src/components/NavBar/SkNavBar.vue +5 -4
- package/src/components/NumberInput/SkNumberInput.vue +49 -8
- package/src/components/NumberInput/types.ts +2 -0
- package/src/components/Page/SkPage.vue +18 -15
- package/src/components/Pagination/SkPagination.vue +6 -3
- package/src/components/Pagination/SkPaginationItem.vue +8 -5
- package/src/components/Pagination/context.ts +19 -0
- package/src/components/Panel/types.ts +3 -2
- package/src/components/Popover/SkPopover.vue +11 -4
- package/src/components/Radio/SkRadio.vue +14 -4
- package/src/components/Radio/SkRadioGroup.vue +4 -2
- package/src/components/Radio/context.ts +17 -0
- package/src/components/Select/SkSelect.vue +39 -7
- package/src/components/Select/types.ts +2 -0
- package/src/components/Switch/SkSwitch.vue +14 -13
- package/src/components/Tabs/SkTab.vue +10 -3
- package/src/components/Tabs/SkTabList.vue +4 -2
- package/src/components/Tabs/SkTabs.vue +5 -3
- package/src/components/Tabs/context.ts +19 -0
- package/src/components/TagsInput/SkTagsInput.vue +28 -7
- package/src/components/Textarea/SkTextarea.vue +27 -6
- package/src/components/TreeView/SkTreeItem.vue +10 -2
- package/src/composables/injectionKeys.ts +52 -0
- package/src/index.ts +28 -0
- package/src/static/__tests__/parity.test.ts +2 -1
- package/src/static/__tests__/parityHarness.ts +5 -2
- package/src/static/components/__tests__/helpers.test.ts +191 -99
- package/src/static/components/alert.ts +12 -11
- package/src/static/components/avatar.ts +15 -16
- package/src/static/components/breadcrumbs.ts +3 -2
- package/src/static/components/button.ts +23 -27
- package/src/static/components/card.ts +3 -2
- package/src/static/components/checkbox.ts +11 -14
- package/src/static/components/colorPicker.ts +7 -9
- package/src/static/components/divider.ts +4 -3
- package/src/static/components/dropdown.ts +15 -6
- package/src/static/components/field.ts +32 -15
- package/src/static/components/group.ts +3 -2
- package/src/static/components/input.ts +20 -15
- package/src/static/components/inputGroup.ts +30 -0
- package/src/static/components/inputGroupAddon.ts +29 -0
- package/src/static/components/navBar.ts +30 -17
- package/src/static/components/numberInput.ts +17 -17
- package/src/static/components/page.ts +3 -2
- package/src/static/components/pagination.ts +3 -2
- package/src/static/components/panel.ts +3 -2
- package/src/static/components/progress.ts +3 -2
- package/src/static/components/radio.ts +14 -20
- package/src/static/components/select.ts +18 -15
- package/src/static/components/sidebar.ts +9 -13
- package/src/static/components/skeleton.ts +7 -10
- package/src/static/components/slider.ts +7 -9
- package/src/static/components/spinner.ts +22 -22
- package/src/static/components/switchInput.ts +12 -14
- package/src/static/components/table.ts +8 -10
- package/src/static/components/tag.ts +17 -11
- package/src/static/components/tagsInput.ts +3 -3
- package/src/static/components/textarea.ts +8 -13
- package/src/static/components/toolbar.ts +7 -10
- package/src/static/components/tooltip.ts +3 -2
- package/src/static/generated/defaults.ts +25 -9
- package/src/static/generated/propTypes.ts +19 -2
- package/src/static/h.ts +16 -0
- package/src/static/index.ts +8 -0
- package/src/static/render.test.ts +14 -10
- package/src/static/render.ts +33 -18
- package/src/static/specs.test.ts +1 -0
- package/src/static/specs.ts +22 -2
- package/src/static/stringH.ts +104 -0
- package/src/static/types.ts +25 -0
- package/src/styles/components/_autocomplete.scss +498 -0
- package/src/styles/components/_button.scss +55 -6
- package/src/styles/components/_index.scss +2 -0
- package/src/styles/components/_input-group.scss +292 -0
- package/src/styles/components/_input.scss +57 -9
- package/src/styles/components/_number-input.scss +88 -14
- package/src/styles/components/_select.scss +56 -9
- package/src/styles/mixins/_cut-border.scss +83 -0
- package/src/styles/tailwind.scss +262 -0
- package/src/styles/tokens.scss +8 -255
- package/src/types/corners.ts +10 -0
- package/src/utils/slots.test.ts +89 -0
- package/src/utils/slots.ts +80 -0
- 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 {
|
|
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:
|
|
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
|
-
|
|
176
|
-
const
|
|
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(() =>
|
|
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-${
|
|
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-${
|
|
242
|
+
[`sk-${ effectiveSize.value }`]: true,
|
|
222
243
|
}));
|
|
223
244
|
|
|
224
245
|
//------------------------------------------------------------------------------------------------------------------
|
|
@@ -43,13 +43,20 @@
|
|
|
43
43
|
* ```
|
|
44
44
|
*/
|
|
45
45
|
|
|
46
|
-
import {
|
|
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:
|
|
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
|
-
|
|
156
|
-
const
|
|
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(() =>
|
|
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-${
|
|
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="
|
|
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="
|
|
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');
|