ui-ingredients 0.5.0 → 0.7.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.
@@ -25,7 +25,6 @@ export function createField(props) {
|
|
25
25
|
readOnly: props.readOnly ?? false,
|
26
26
|
};
|
27
27
|
});
|
28
|
-
let focused = $state(false);
|
29
28
|
let hasErrorText = $state(false);
|
30
29
|
let hasHelperText = $state(false);
|
31
30
|
const ariaDescribedby = $derived.by(() => {
|
@@ -47,7 +46,6 @@ export function createField(props) {
|
|
47
46
|
'data-disabled': dataAttr(disabled),
|
48
47
|
'data-required': dataAttr(required),
|
49
48
|
'data-readonly': dataAttr(readOnly),
|
50
|
-
'data-focus': dataAttr(focused),
|
51
49
|
};
|
52
50
|
}
|
53
51
|
function getLabelProps() {
|
@@ -59,7 +57,6 @@ export function createField(props) {
|
|
59
57
|
'data-disabled': dataAttr(disabled),
|
60
58
|
'data-required': dataAttr(required),
|
61
59
|
'data-readonly': dataAttr(readOnly),
|
62
|
-
'data-focus': dataAttr(focused),
|
63
60
|
};
|
64
61
|
}
|
65
62
|
function getRequiredIndicatorProps() {
|
@@ -70,7 +67,6 @@ export function createField(props) {
|
|
70
67
|
'data-invalid': dataAttr(invalid),
|
71
68
|
'data-disabled': dataAttr(disabled),
|
72
69
|
'data-readonly': dataAttr(readOnly),
|
73
|
-
'data-focus': dataAttr(focused),
|
74
70
|
};
|
75
71
|
}
|
76
72
|
function getErrorTextProps() {
|
@@ -83,7 +79,6 @@ export function createField(props) {
|
|
83
79
|
'data-disabled': dataAttr(disabled),
|
84
80
|
'data-required': dataAttr(required),
|
85
81
|
'data-readonly': dataAttr(readOnly),
|
86
|
-
'data-focus': dataAttr(focused),
|
87
82
|
};
|
88
83
|
}
|
89
84
|
function getHelperTextProps() {
|
@@ -94,20 +89,11 @@ export function createField(props) {
|
|
94
89
|
'data-disabled': dataAttr(disabled),
|
95
90
|
'data-required': dataAttr(required),
|
96
91
|
'data-readonly': dataAttr(readOnly),
|
97
|
-
'data-focus': dataAttr(focused),
|
98
92
|
};
|
99
93
|
}
|
100
|
-
function onfocus() {
|
101
|
-
focused = true;
|
102
|
-
}
|
103
|
-
function onblur() {
|
104
|
-
focused = false;
|
105
|
-
}
|
106
94
|
function getControlProps() {
|
107
95
|
return {
|
108
96
|
id: ids.control,
|
109
|
-
onfocus,
|
110
|
-
onblur,
|
111
97
|
disabled,
|
112
98
|
required,
|
113
99
|
'aria-describedby': ariaDescribedby,
|
@@ -119,7 +105,6 @@ export function createField(props) {
|
|
119
105
|
'data-disabled': dataAttr(disabled),
|
120
106
|
'data-required': dataAttr(required),
|
121
107
|
'data-readonly': dataAttr(readOnly),
|
122
|
-
'data-focus': dataAttr(focused),
|
123
108
|
};
|
124
109
|
}
|
125
110
|
function getInputProps() {
|
@@ -161,7 +146,6 @@ export function createField(props) {
|
|
161
146
|
required,
|
162
147
|
readOnly,
|
163
148
|
invalid,
|
164
|
-
focused,
|
165
149
|
'aria-describedby': ariaDescribedby,
|
166
150
|
getRootProps,
|
167
151
|
getLabelProps,
|
@@ -1,12 +1,16 @@
|
|
1
1
|
<script lang="ts" module>
|
2
2
|
import type {HtmlIngredientProps} from '../types.js';
|
3
|
+
import type {Action} from 'svelte/action';
|
3
4
|
|
4
5
|
export interface FieldErrorTextProps
|
5
|
-
extends HtmlIngredientProps<'div', HTMLDivElement> {}
|
6
|
+
extends HtmlIngredientProps<'div', HTMLDivElement, never, Action> {}
|
6
7
|
</script>
|
7
8
|
|
8
9
|
<script lang="ts">
|
9
10
|
import {mergeProps} from '../merge-props.js';
|
11
|
+
import {createPresence} from '../presence/create-presence.svelte.js';
|
12
|
+
import {getPresenceStrategyPropsContext} from '../presence/presence-context.svelte.js';
|
13
|
+
import {reflect} from '@zag-js/svelte';
|
10
14
|
import {getFieldContext} from './field-context.svelte.js';
|
11
15
|
|
12
16
|
let {
|
@@ -18,15 +22,29 @@
|
|
18
22
|
|
19
23
|
let field = getFieldContext();
|
20
24
|
|
25
|
+
let presenceStrategyProps = getPresenceStrategyPropsContext();
|
26
|
+
let presence = createPresence(
|
27
|
+
reflect(() => ({
|
28
|
+
present: field?.invalid ?? true,
|
29
|
+
...presenceStrategyProps,
|
30
|
+
})),
|
31
|
+
);
|
32
|
+
|
21
33
|
let mergedProps = $derived(
|
22
|
-
mergeProps(
|
34
|
+
mergeProps(
|
35
|
+
field?.getErrorTextProps() ?? {},
|
36
|
+
presence.getPresenceProps(),
|
37
|
+
props,
|
38
|
+
),
|
23
39
|
);
|
24
40
|
</script>
|
25
41
|
|
26
|
-
{#if
|
27
|
-
{
|
28
|
-
{
|
29
|
-
|
30
|
-
{
|
31
|
-
|
42
|
+
{#if presence.mounted}
|
43
|
+
{#if asChild}
|
44
|
+
{@render asChild(presence.setReference, mergedProps)}
|
45
|
+
{:else}
|
46
|
+
<div use:presence.setReference bind:this={ref} {...mergedProps}>
|
47
|
+
{@render children?.()}
|
48
|
+
</div>
|
49
|
+
{/if}
|
32
50
|
{/if}
|
@@ -1,5 +1,6 @@
|
|
1
1
|
import type { HtmlIngredientProps } from '../types.js';
|
2
|
-
|
2
|
+
import type { Action } from 'svelte/action';
|
3
|
+
export interface FieldErrorTextProps extends HtmlIngredientProps<'div', HTMLDivElement, never, Action> {
|
3
4
|
}
|
4
5
|
interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> = any, Events extends Record<string, any> = any, Slots extends Record<string, any> = any, Exports = {}, Bindings = string> {
|
5
6
|
new (options: import('svelte').ComponentConstructorOptions<Props>): import('svelte').SvelteComponent<Props, Events, Slots> & {
|
@@ -7,13 +7,16 @@
|
|
7
7
|
|
8
8
|
export interface FieldProps
|
9
9
|
extends Assign<
|
10
|
-
|
11
|
-
|
12
|
-
|
10
|
+
HtmlIngredientProps<'div', HTMLDivElement, CreateFieldReturn>,
|
11
|
+
CreateFieldProps
|
12
|
+
>,
|
13
|
+
PresenceStrategyProps {}
|
13
14
|
</script>
|
14
15
|
|
15
16
|
<script lang="ts">
|
16
17
|
import {mergeProps} from '../merge-props.js';
|
18
|
+
import type {PresenceStrategyProps} from '../presence/create-presence.svelte.js';
|
19
|
+
import {setPresenceStrategyPropsContext} from '../presence/presence-context.svelte.js';
|
17
20
|
import {reflect} from '@zag-js/svelte';
|
18
21
|
import {createSplitProps} from '@zag-js/utils';
|
19
22
|
import {createField} from './create-field.svelte.js';
|
@@ -26,6 +29,12 @@
|
|
26
29
|
...props
|
27
30
|
}: FieldProps = $props();
|
28
31
|
|
32
|
+
let [presenceStrategyProps, rest] = $derived(
|
33
|
+
createSplitProps<PresenceStrategyProps>(['keepMounted', 'lazyMount'])(
|
34
|
+
props,
|
35
|
+
),
|
36
|
+
);
|
37
|
+
|
29
38
|
let [createFieldProps, localProps] = $derived(
|
30
39
|
createSplitProps<CreateFieldProps>([
|
31
40
|
'id',
|
@@ -34,7 +43,7 @@
|
|
34
43
|
'disabled',
|
35
44
|
'readOnly',
|
36
45
|
'required',
|
37
|
-
])(
|
46
|
+
])(rest),
|
38
47
|
);
|
39
48
|
|
40
49
|
let field = createField(reflect(() => createFieldProps));
|
@@ -42,6 +51,7 @@
|
|
42
51
|
let mergedProps = $derived(mergeProps(field.getRootProps(), localProps));
|
43
52
|
|
44
53
|
setFieldContext(field);
|
54
|
+
setPresenceStrategyPropsContext(() => presenceStrategyProps);
|
45
55
|
</script>
|
46
56
|
|
47
57
|
{#if asChild}
|
@@ -1,7 +1,8 @@
|
|
1
1
|
import type { Assign, HtmlIngredientProps } from '../types.js';
|
2
2
|
import type { CreateFieldProps, CreateFieldReturn } from './create-field.svelte.js';
|
3
|
-
export interface FieldProps extends Assign<HtmlIngredientProps<'div', HTMLDivElement, CreateFieldReturn>, CreateFieldProps
|
3
|
+
export interface FieldProps extends Assign<HtmlIngredientProps<'div', HTMLDivElement, CreateFieldReturn>, CreateFieldProps>, PresenceStrategyProps {
|
4
4
|
}
|
5
|
+
import type { PresenceStrategyProps } from '../presence/create-presence.svelte.js';
|
5
6
|
interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> = any, Events extends Record<string, any> = any, Slots extends Record<string, any> = any, Exports = {}, Bindings = string> {
|
6
7
|
new (options: import('svelte').ComponentConstructorOptions<Props>): import('svelte').SvelteComponent<Props, Events, Slots> & {
|
7
8
|
$$bindings?: Bindings;
|
package/package.json
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
"name": "ui-ingredients",
|
3
3
|
"type": "module",
|
4
4
|
"license": "MIT",
|
5
|
-
"version": "0.
|
5
|
+
"version": "0.7.0",
|
6
6
|
"packageManager": "pnpm@9.7.0",
|
7
7
|
"svelte": "./dist/index.js",
|
8
8
|
"types": "./dist/index.d.ts",
|
@@ -365,29 +365,29 @@
|
|
365
365
|
"devDependencies": {
|
366
366
|
"@faker-js/faker": "^9.0.3",
|
367
367
|
"@sveltejs/adapter-vercel": "^5.4.5",
|
368
|
-
"@sveltejs/kit": "^2.7.
|
368
|
+
"@sveltejs/kit": "^2.7.1",
|
369
369
|
"@sveltejs/package": "^2.3.5",
|
370
370
|
"@sveltejs/vite-plugin-svelte": "^4.0.0-next.6",
|
371
371
|
"@testing-library/jest-dom": "^6.5.0",
|
372
372
|
"@testing-library/svelte": "^5.2.3",
|
373
373
|
"@testing-library/user-event": "^14.5.2",
|
374
374
|
"@types/jsdom": "^21.1.7",
|
375
|
-
"@untitled-theme/icons-svelte": "^0.10.
|
375
|
+
"@untitled-theme/icons-svelte": "^0.10.11",
|
376
376
|
"autoprefixer": "^10.4.20",
|
377
377
|
"globals": "^15.11.0",
|
378
378
|
"jsdom": "^25.0.1",
|
379
379
|
"postcss": "^8.4.47",
|
380
380
|
"publint": "^0.2.11",
|
381
|
-
"release-it": "^17.
|
381
|
+
"release-it": "^17.9.0",
|
382
382
|
"resize-observer-polyfill": "^1.5.1",
|
383
|
-
"svelte": "^5.0.0-next.
|
383
|
+
"svelte": "^5.0.0-next.265",
|
384
384
|
"svelte-check": "^4.0.5",
|
385
|
-
"tailwind-merge": "^2.5.
|
385
|
+
"tailwind-merge": "^2.5.4",
|
386
386
|
"tailwind-variants": "^0.2.1",
|
387
387
|
"tailwindcss": "^3.4.13",
|
388
388
|
"typescript": "^5.6.3",
|
389
|
-
"vite": "^5.4.
|
390
|
-
"vitest": "^2.1.
|
389
|
+
"vite": "^5.4.9",
|
390
|
+
"vitest": "^2.1.3",
|
391
391
|
"vitest-axe": "^1.0.0-pre.3",
|
392
392
|
"vitest-canvas-mock": "^0.3.3"
|
393
393
|
},
|