@pzerelles/headlessui-svelte 2.1.2-next.60 → 2.1.2-next.62
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/internal/FormFields.svelte +14 -19
- package/dist/internal/FormFieldsProvider.svelte +17 -11
- package/dist/internal/FormFieldsProvider.svelte.d.ts +5 -2
- package/dist/internal/FormResolver.svelte +1 -5
- package/dist/internal/Hidden.svelte +9 -5
- package/dist/internal/Hidden.svelte.d.ts +2 -2
- package/dist/internal/HoistFormFields.svelte +14 -0
- package/dist/internal/HoistFormFields.svelte.d.ts +7 -0
- package/package.json +19 -18
- package/dist/internal/form-fields.svelte.d.ts +0 -10
- package/dist/internal/form-fields.svelte.js +0 -23
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
import { disposables } from "../utils/disposables.js"
|
|
3
3
|
import { objectToFormEntries } from "../utils/form.js"
|
|
4
4
|
import FormResolver from "./FormResolver.svelte"
|
|
5
|
-
import { hoistFormFields } from "./form-fields.svelte.js"
|
|
6
5
|
import Hidden, { HiddenFeatures } from "./Hidden.svelte"
|
|
7
6
|
import { compact } from "../utils/object.js"
|
|
7
|
+
import HoistFormFields from "./HoistFormFields.svelte"
|
|
8
8
|
|
|
9
9
|
let {
|
|
10
10
|
data,
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
onReset?: (e: Event) => void
|
|
21
21
|
} = $props()
|
|
22
22
|
|
|
23
|
-
let form = $state<HTMLFormElement
|
|
23
|
+
let form = $state<HTMLFormElement>()
|
|
24
24
|
const d = disposables()
|
|
25
25
|
|
|
26
26
|
$effect(() => {
|
|
@@ -29,30 +29,25 @@
|
|
|
29
29
|
|
|
30
30
|
return d.addEventListener(form, "reset", onReset)
|
|
31
31
|
})
|
|
32
|
+
</script>
|
|
32
33
|
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
34
|
+
<HoistFormFields>
|
|
35
|
+
<FormResolver setForm={(value) => (form = value)} {formId} />
|
|
36
|
+
{#each objectToFormEntries(data) as [name, value]}
|
|
37
|
+
<Hidden
|
|
38
|
+
features={HiddenFeatures.Hidden}
|
|
39
|
+
{...compact({
|
|
36
40
|
key: name,
|
|
37
41
|
as: "input",
|
|
38
42
|
type: "hidden",
|
|
43
|
+
hidden: true,
|
|
44
|
+
readOnly: true,
|
|
39
45
|
form: formId,
|
|
40
46
|
disabled,
|
|
41
47
|
name,
|
|
42
48
|
value,
|
|
43
49
|
...overrides,
|
|
44
|
-
})
|
|
45
|
-
|
|
46
|
-
)
|
|
47
|
-
|
|
48
|
-
const hoisted = hoistFormFields(formFields)
|
|
49
|
-
</script>
|
|
50
|
-
|
|
51
|
-
{#snippet formFields()}
|
|
52
|
-
<FormResolver setForm={(value) => (form = value)} {formId} />
|
|
53
|
-
{#each fields as props}
|
|
54
|
-
<Hidden features={HiddenFeatures.Hidden} {...props} />
|
|
50
|
+
})}
|
|
51
|
+
/>
|
|
55
52
|
{/each}
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
{#if !hoisted}{@render formFields()}{/if}
|
|
53
|
+
</HoistFormFields>
|
|
@@ -1,17 +1,23 @@
|
|
|
1
|
+
<script lang="ts" module>
|
|
2
|
+
export type FormFieldsContext = {
|
|
3
|
+
target: HTMLElement | undefined
|
|
4
|
+
}
|
|
5
|
+
</script>
|
|
6
|
+
|
|
1
7
|
<script lang="ts">
|
|
2
|
-
import type
|
|
8
|
+
import { setContext, type Snippet } from "svelte"
|
|
3
9
|
import Hidden, { HiddenFeatures } from "./Hidden.svelte"
|
|
4
|
-
import { createFormFieldsContext } from "./form-fields.svelte.js"
|
|
5
10
|
|
|
6
|
-
const { children }: { children
|
|
11
|
+
const { children }: { children: Snippet } = $props()
|
|
7
12
|
|
|
8
|
-
|
|
9
|
-
const
|
|
13
|
+
let target = $state<HTMLElement>()
|
|
14
|
+
const context: FormFieldsContext = {
|
|
15
|
+
get target() {
|
|
16
|
+
return target
|
|
17
|
+
},
|
|
18
|
+
}
|
|
19
|
+
setContext("FormFieldsContext", context)
|
|
10
20
|
</script>
|
|
11
21
|
|
|
12
|
-
{
|
|
13
|
-
<Hidden features={HiddenFeatures.Hidden}
|
|
14
|
-
{#each fields as field}
|
|
15
|
-
{@render field()}
|
|
16
|
-
{/each}
|
|
17
|
-
</Hidden>
|
|
22
|
+
{@render children()}
|
|
23
|
+
<Hidden features={HiddenFeatures.Hidden} bind:element={target} />
|
|
@@ -1,6 +1,9 @@
|
|
|
1
|
-
|
|
1
|
+
export type FormFieldsContext = {
|
|
2
|
+
target: HTMLElement | undefined;
|
|
3
|
+
};
|
|
4
|
+
import { type Snippet } from "svelte";
|
|
2
5
|
type $$ComponentProps = {
|
|
3
|
-
children
|
|
6
|
+
children: Snippet;
|
|
4
7
|
};
|
|
5
8
|
declare const FormFieldsProvider: import("svelte").Component<$$ComponentProps, {}, "">;
|
|
6
9
|
type FormFieldsProvider = ReturnType<typeof FormFieldsProvider>;
|
|
@@ -21,9 +21,5 @@
|
|
|
21
21
|
</script>
|
|
22
22
|
|
|
23
23
|
{#if !formId}
|
|
24
|
-
<Hidden
|
|
25
|
-
{#snippet children({ props })}
|
|
26
|
-
<input {...props} type="hidden" hidden readonly bind:this={element} />
|
|
27
|
-
{/snippet}
|
|
28
|
-
</Hidden>
|
|
24
|
+
<Hidden features={HiddenFeatures.Hidden} as="input" type="hidden" hidden readonly bind:element />
|
|
29
25
|
{/if}
|
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
import ElementOrComponent from "../utils/ElementOrComponent.svelte"
|
|
3
3
|
import type { Props } from "../utils/types.js"
|
|
4
4
|
import { HiddenFeatures } from "./HiddenFeatures.js"
|
|
5
|
-
import type { SvelteHTMLElements } from "svelte/elements"
|
|
6
5
|
|
|
7
6
|
export * from "./HiddenFeatures.js"
|
|
8
7
|
|
|
@@ -11,14 +10,19 @@
|
|
|
11
10
|
export type HiddenRenderPropArg = {}
|
|
12
11
|
type HiddenPropsWeControl = never
|
|
13
12
|
export type HiddenProps = Props<
|
|
14
|
-
|
|
13
|
+
"input",
|
|
15
14
|
HiddenRenderPropArg,
|
|
16
|
-
{ element?: HTMLElement; features?: HiddenFeatures }
|
|
15
|
+
{ as?: string; element?: HTMLElement; features?: HiddenFeatures }
|
|
17
16
|
>
|
|
18
17
|
</script>
|
|
19
18
|
|
|
20
19
|
<script lang="ts">
|
|
21
|
-
let {
|
|
20
|
+
let {
|
|
21
|
+
as = DEFAULT_VISUALLY_HIDDEN_TAG,
|
|
22
|
+
element = $bindable(),
|
|
23
|
+
features = HiddenFeatures.None,
|
|
24
|
+
...theirProps
|
|
25
|
+
}: HiddenProps = $props()
|
|
22
26
|
|
|
23
27
|
let ourProps = {
|
|
24
28
|
"aria-hidden":
|
|
@@ -46,4 +50,4 @@
|
|
|
46
50
|
}
|
|
47
51
|
</script>
|
|
48
52
|
|
|
49
|
-
<ElementOrComponent {ourProps} {theirProps} defaultTag={
|
|
53
|
+
<ElementOrComponent {ourProps} {theirProps} defaultTag={as} name="Hidden" bind:element />
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import type { Props } from "../utils/types.js";
|
|
2
2
|
import { HiddenFeatures } from "./HiddenFeatures.js";
|
|
3
3
|
export * from "./HiddenFeatures.js";
|
|
4
|
-
declare const DEFAULT_VISUALLY_HIDDEN_TAG: "span";
|
|
5
4
|
export type HiddenRenderPropArg = {};
|
|
6
|
-
export type HiddenProps = Props<
|
|
5
|
+
export type HiddenProps = Props<"input", HiddenRenderPropArg, {
|
|
6
|
+
as?: string;
|
|
7
7
|
element?: HTMLElement;
|
|
8
8
|
features?: HiddenFeatures;
|
|
9
9
|
}>;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { getContext, type Snippet } from "svelte"
|
|
3
|
+
import type { FormFieldsContext } from "./FormFieldsProvider.svelte"
|
|
4
|
+
import Portal from "./Portal.svelte"
|
|
5
|
+
|
|
6
|
+
const { children }: { children: Snippet } = $props()
|
|
7
|
+
const formFieldsContext = getContext<FormFieldsContext>("FormFieldsContext")
|
|
8
|
+
</script>
|
|
9
|
+
|
|
10
|
+
{#if !formFieldsContext}
|
|
11
|
+
{@render children()}
|
|
12
|
+
{:else if formFieldsContext.target}
|
|
13
|
+
<Portal target={formFieldsContext.target}>{@render children()}</Portal>
|
|
14
|
+
{/if}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { type Snippet } from "svelte";
|
|
2
|
+
type $$ComponentProps = {
|
|
3
|
+
children: Snippet;
|
|
4
|
+
};
|
|
5
|
+
declare const HoistFormFields: import("svelte").Component<$$ComponentProps, {}, "">;
|
|
6
|
+
type HoistFormFields = ReturnType<typeof HoistFormFields>;
|
|
7
|
+
export default HoistFormFields;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pzerelles/headlessui-svelte",
|
|
3
|
-
"version": "2.1.2-next.
|
|
3
|
+
"version": "2.1.2-next.62",
|
|
4
4
|
"scripts": {
|
|
5
5
|
"dev": "vite dev",
|
|
6
6
|
"build": "vite build && npm run package",
|
|
@@ -20,7 +20,8 @@
|
|
|
20
20
|
"exports": {
|
|
21
21
|
".": {
|
|
22
22
|
"types": "./dist/index.d.ts",
|
|
23
|
-
"svelte": "./dist/index.js"
|
|
23
|
+
"svelte": "./dist/index.js",
|
|
24
|
+
"default": "./dist/index.js"
|
|
24
25
|
}
|
|
25
26
|
},
|
|
26
27
|
"files": [
|
|
@@ -32,37 +33,37 @@
|
|
|
32
33
|
"svelte": "^5.16.0"
|
|
33
34
|
},
|
|
34
35
|
"devDependencies": {
|
|
35
|
-
"@changesets/cli": "^2.29.
|
|
36
|
+
"@changesets/cli": "^2.29.5",
|
|
36
37
|
"@changesets/types": "^6.1.0",
|
|
37
|
-
"@playwright/test": "^1.
|
|
38
|
-
"@pzerelles/heroicons-svelte": "^2.2.
|
|
38
|
+
"@playwright/test": "^1.53.1",
|
|
39
|
+
"@pzerelles/heroicons-svelte": "^2.2.2",
|
|
39
40
|
"@sveltejs/adapter-auto": "^3.3.1",
|
|
40
|
-
"@sveltejs/kit": "^2.
|
|
41
|
-
"@sveltejs/package": "^2.3.
|
|
42
|
-
"@sveltejs/vite-plugin-svelte": "^5.0
|
|
43
|
-
"@tailwindcss/vite": "^4.1.
|
|
41
|
+
"@sveltejs/kit": "^2.22.2",
|
|
42
|
+
"@sveltejs/package": "^2.3.12",
|
|
43
|
+
"@sveltejs/vite-plugin-svelte": "^5.1.0",
|
|
44
|
+
"@tailwindcss/vite": "^4.1.10",
|
|
44
45
|
"@testing-library/jest-dom": "^6.6.3",
|
|
45
46
|
"@testing-library/svelte": "^5.2.8",
|
|
46
47
|
"@types/eslint": "^9.6.1",
|
|
47
|
-
"@types/node": "^22.15.
|
|
48
|
-
"eslint": "^9.
|
|
48
|
+
"@types/node": "^22.15.33",
|
|
49
|
+
"eslint": "^9.29.0",
|
|
49
50
|
"eslint-config-prettier": "^9.1.0",
|
|
50
51
|
"eslint-plugin-svelte": "^2.46.1",
|
|
51
52
|
"globals": "^16.2.0",
|
|
52
53
|
"jsdom": "^25.0.1",
|
|
53
54
|
"outdent": "^0.8.0",
|
|
54
|
-
"prettier": "^3.
|
|
55
|
+
"prettier": "^3.6.1",
|
|
55
56
|
"prettier-plugin-svelte": "^3.4.0",
|
|
56
|
-
"prettier-plugin-tailwindcss": "^0.6.
|
|
57
|
+
"prettier-plugin-tailwindcss": "^0.6.13",
|
|
57
58
|
"publint": "^0.3.12",
|
|
58
|
-
"svelte": "^5.
|
|
59
|
-
"svelte-check": "^4.2.
|
|
60
|
-
"tailwindcss": "^4.1.
|
|
59
|
+
"svelte": "^5.34.8",
|
|
60
|
+
"svelte-check": "^4.2.2",
|
|
61
|
+
"tailwindcss": "^4.1.10",
|
|
61
62
|
"tslib": "^2.8.1",
|
|
62
63
|
"typescript": "^5.8.3",
|
|
63
|
-
"typescript-eslint": "^8.
|
|
64
|
+
"typescript-eslint": "^8.35.0",
|
|
64
65
|
"vite": "^6.3.5",
|
|
65
|
-
"vitest": "^3.2.
|
|
66
|
+
"vitest": "^3.2.4"
|
|
66
67
|
},
|
|
67
68
|
"dependencies": {
|
|
68
69
|
"@floating-ui/core": "^1.7.1",
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import { type Snippet } from "svelte";
|
|
2
|
-
import { SvelteSet } from "svelte/reactivity";
|
|
3
|
-
export type FormFieldsContext = {
|
|
4
|
-
registerField: (field: Snippet) => () => void;
|
|
5
|
-
};
|
|
6
|
-
export declare const createFormFieldsContext: () => {
|
|
7
|
-
registerField: (field: Snippet) => () => boolean;
|
|
8
|
-
readonly fields: SvelteSet<Snippet<[]>>;
|
|
9
|
-
};
|
|
10
|
-
export declare const hoistFormFields: (fields: Snippet) => boolean;
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
import { getContext, setContext } from "svelte";
|
|
2
|
-
import { SvelteSet } from "svelte/reactivity";
|
|
3
|
-
export const createFormFieldsContext = () => {
|
|
4
|
-
const fields = new SvelteSet();
|
|
5
|
-
const context = {
|
|
6
|
-
registerField: (field) => {
|
|
7
|
-
fields.add(field);
|
|
8
|
-
return () => fields.delete(field);
|
|
9
|
-
},
|
|
10
|
-
get fields() {
|
|
11
|
-
return fields;
|
|
12
|
-
},
|
|
13
|
-
};
|
|
14
|
-
setContext("FormFieldsContext", context);
|
|
15
|
-
return context;
|
|
16
|
-
};
|
|
17
|
-
export const hoistFormFields = (fields) => {
|
|
18
|
-
const context = getContext("FormFieldsContext");
|
|
19
|
-
if (!context)
|
|
20
|
-
return false;
|
|
21
|
-
$effect(() => context.registerField(fields));
|
|
22
|
-
return true;
|
|
23
|
-
};
|