@sprawlify/solid 0.0.14 → 0.0.16

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 (108) hide show
  1. package/dist/chunk-B5so6B0y.jsx +18 -0
  2. package/dist/chunk-B93cd-Dz.js +18 -0
  3. package/dist/collapsible-CX2tnXKq.js +131 -0
  4. package/dist/collapsible-sG-Rzvf2.jsx +119 -0
  5. package/dist/collection-BRr4O2_i.jsx +220 -0
  6. package/dist/collection-zj3lxnwW.js +220 -0
  7. package/dist/components/accordion/index.d.ts +69 -0
  8. package/dist/components/accordion/index.js +185 -0
  9. package/dist/components/accordion/index.jsx +159 -0
  10. package/dist/components/angle-slider/index.d.ts +74 -0
  11. package/dist/components/angle-slider/index.js +157 -0
  12. package/dist/components/angle-slider/index.jsx +146 -0
  13. package/dist/components/avatar/index.d.ts +49 -0
  14. package/dist/components/avatar/index.js +97 -0
  15. package/dist/components/avatar/index.jsx +90 -0
  16. package/dist/components/bottom-sheet/index.d.ts +80 -0
  17. package/dist/components/bottom-sheet/index.js +220 -0
  18. package/dist/components/bottom-sheet/index.jsx +179 -0
  19. package/dist/components/carousel/index.d.ts +98 -0
  20. package/dist/components/carousel/index.js +209 -0
  21. package/dist/components/carousel/index.jsx +194 -0
  22. package/dist/components/checkbox/index.d.ts +138 -0
  23. package/dist/components/checkbox/index.js +267 -0
  24. package/dist/components/checkbox/index.jsx +249 -0
  25. package/dist/components/client-only/index.d.ts +10 -0
  26. package/dist/components/client-only/index.js +24 -0
  27. package/dist/components/client-only/index.jsx +15 -0
  28. package/dist/components/clipboard/index.d.ts +72 -0
  29. package/dist/components/clipboard/index.js +151 -0
  30. package/dist/components/clipboard/index.jsx +134 -0
  31. package/dist/components/collapsible/index.d.ts +60 -0
  32. package/dist/components/collapsible/index.js +9 -0
  33. package/dist/components/collapsible/index.jsx +9 -0
  34. package/dist/components/collection/index.d.ts +3 -0
  35. package/dist/components/collection/index.js +4 -0
  36. package/dist/components/collection/index.jsx +4 -0
  37. package/dist/components/color-picker/index.d.ts +183 -0
  38. package/dist/components/color-picker/index.js +500 -0
  39. package/dist/components/color-picker/index.jsx +436 -0
  40. package/dist/components/combobox/index.d.ts +134 -0
  41. package/dist/components/combobox/index.js +357 -0
  42. package/dist/components/combobox/index.jsx +315 -0
  43. package/dist/components/date-picker/index.d.ts +165 -0
  44. package/dist/components/date-picker/index.js +476 -0
  45. package/dist/components/date-picker/index.jsx +415 -0
  46. package/dist/components/dialog/index.d.ts +80 -0
  47. package/dist/components/dialog/index.js +219 -0
  48. package/dist/components/dialog/index.jsx +173 -0
  49. package/dist/components/download-trigger/index.d.ts +25 -0
  50. package/dist/components/download-trigger/index.js +42 -0
  51. package/dist/components/download-trigger/index.jsx +38 -0
  52. package/dist/components/editable/index.d.ts +79 -0
  53. package/dist/components/editable/index.js +190 -0
  54. package/dist/components/editable/index.jsx +181 -0
  55. package/dist/components/field/index.d.ts +201 -0
  56. package/dist/components/field/index.js +10 -0
  57. package/dist/components/field/index.jsx +10 -0
  58. package/dist/components/fieldset/index.d.ts +109 -0
  59. package/dist/components/fieldset/index.js +9 -0
  60. package/dist/components/fieldset/index.jsx +9 -0
  61. package/dist/components/highlight/index.d.ts +15 -0
  62. package/dist/components/highlight/index.js +47 -0
  63. package/dist/components/highlight/index.jsx +31 -0
  64. package/dist/components/presence/index.d.ts +5 -0
  65. package/dist/components/presence/index.js +9 -0
  66. package/dist/components/presence/index.jsx +9 -0
  67. package/dist/components/select/index.d.ts +134 -0
  68. package/dist/components/select/index.js +363 -0
  69. package/dist/components/select/index.jsx +312 -0
  70. package/dist/compose-refs-BVVIB7xn.js +20 -0
  71. package/dist/compose-refs-icUeuyHm.jsx +20 -0
  72. package/dist/core-DbInRfhI.jsx +416 -0
  73. package/dist/core-oNB2jGcl.js +416 -0
  74. package/dist/create-split-props-B8A7_AF7.jsx +7 -0
  75. package/dist/create-split-props-pQu7jijw.js +7 -0
  76. package/dist/factory-4A25bngy.d.ts +14 -0
  77. package/dist/factory-Ch5jgk20.jsx +37 -0
  78. package/dist/factory-PGDAvOKb.js +43 -0
  79. package/dist/field-BRr9Zdes.jsx +260 -0
  80. package/dist/field-CoYiA2ek.js +288 -0
  81. package/dist/fieldset-B_LyllEa.jsx +169 -0
  82. package/dist/fieldset-BrJqMLEd.js +184 -0
  83. package/dist/index-C7N791Fc.d.ts +23 -0
  84. package/dist/index-GEfvAmRc.d.ts +76 -0
  85. package/dist/index-j2avJy7D.d.ts +38 -0
  86. package/dist/index-oc8gLl07.d.ts +38 -0
  87. package/dist/index.d.ts +5 -29
  88. package/dist/index.js +4 -511
  89. package/dist/index.jsx +4 -497
  90. package/dist/presence-Bmn43U_q.jsx +68 -0
  91. package/dist/presence-BpwBRlZW.js +81 -0
  92. package/dist/providers-Bo0OFe08.js +96 -0
  93. package/dist/providers-DFaRRd80.jsx +82 -0
  94. package/dist/render-strategy-BNECKEQk.d.ts +9 -0
  95. package/dist/render-strategy-CdJhRv3I.jsx +12 -0
  96. package/dist/render-strategy-DFlz7Uc4.js +12 -0
  97. package/dist/run-if-fn-A3VwXy-o.jsx +6 -0
  98. package/dist/run-if-fn-D5794CxE.js +6 -0
  99. package/dist/types-Dbw4va3W.d.ts +9 -0
  100. package/dist/utils/index.d.ts +1 -1
  101. package/dist/utils/index.js +2 -1
  102. package/dist/utils/index.jsx +2 -1
  103. package/dist/utils-DQi-Cen5.js +0 -0
  104. package/dist/utils-vSjszv0W.jsx +0 -0
  105. package/package.json +102 -2
  106. /package/dist/{utils-DSKoW7eB.jsx → create-context-C3rvZvkc.jsx} +0 -0
  107. /package/dist/{utils-GEMuT7an.js → create-context-GfQ_MylE.js} +0 -0
  108. /package/dist/{index-C_ThrXdH.d.ts → index-B6dBCfnB.d.ts} +0 -0
@@ -0,0 +1,260 @@
1
+ import { t as __export } from "./chunk-B5so6B0y.jsx";
2
+ import { r as mergeProps$1 } from "./core-DbInRfhI.jsx";
3
+ import { t as createContext$1 } from "./create-context-C3rvZvkc.jsx";
4
+ import { o as useEnvironmentContext } from "./providers-DFaRRd80.jsx";
5
+ import { t as createSplitProps } from "./create-split-props-B8A7_AF7.jsx";
6
+ import { t as sprawlify } from "./factory-Ch5jgk20.jsx";
7
+ import { t as composeRefs } from "./compose-refs-icUeuyHm.jsx";
8
+ import { u as useFieldsetContext } from "./fieldset-B_LyllEa.jsx";
9
+ import { Show, createMemo, createSignal, createUniqueId, mergeProps, onCleanup, onMount, splitProps } from "solid-js";
10
+ import { ariaAttr, dataAttr } from "@sprawlify/primitives/dom-query";
11
+ import { createAnatomy } from "@sprawlify/primitives/anatomy";
12
+ import { autoresizeTextarea } from "@sprawlify/primitives/auto-resize";
13
+
14
+ //#region src/components/field/use-field-context.ts
15
+ const [FieldProvider, useFieldContext] = createContext$1({
16
+ hookName: "useFieldContext",
17
+ providerName: "<FieldProvider />",
18
+ strict: false
19
+ });
20
+
21
+ //#endregion
22
+ //#region src/components/field/field-context.tsx
23
+ const FieldContext = (props) => props.children(useFieldContext());
24
+
25
+ //#endregion
26
+ //#region src/components/field/field-error-text.tsx
27
+ const FieldErrorText = (props) => {
28
+ const field = useFieldContext();
29
+ const mergedProps = mergeProps$1(() => field().getErrorTextProps(), props);
30
+ return <Show when={field?.().invalid}>
31
+ <sprawlify.span {...mergedProps} />
32
+ </Show>;
33
+ };
34
+
35
+ //#endregion
36
+ //#region src/components/field/field-helper-text.tsx
37
+ const FieldHelperText = (props) => {
38
+ const field = useFieldContext();
39
+ const mergedProps = mergeProps$1(() => field().getHelperTextProps(), props);
40
+ return <sprawlify.span {...mergedProps} />;
41
+ };
42
+
43
+ //#endregion
44
+ //#region src/components/field/field-input.tsx
45
+ const FieldInput = (props) => {
46
+ const field = useFieldContext();
47
+ const mergedProps = mergeProps$1(() => field?.().getInputProps(), props);
48
+ return <sprawlify.input {...mergedProps} />;
49
+ };
50
+
51
+ //#endregion
52
+ //#region src/components/field/field-label.tsx
53
+ const FieldLabel = (props) => {
54
+ const field = useFieldContext();
55
+ const mergedProps = mergeProps$1(() => field?.().getLabelProps(), props);
56
+ return <sprawlify.label {...mergedProps} />;
57
+ };
58
+
59
+ //#endregion
60
+ //#region src/components/field/field-required-indicator.tsx
61
+ const FieldRequiredIndicator = (props) => {
62
+ const field = useFieldContext();
63
+ const mergedProps = mergeProps$1(() => field().getRequiredIndicatorProps(), props);
64
+ return <Show when={field().required} fallback={props.fallback}>
65
+ <sprawlify.span {...mergedProps}>{props.children ?? "*"}</sprawlify.span>
66
+ </Show>;
67
+ };
68
+
69
+ //#endregion
70
+ //#region src/components/field/field-anatomy.ts
71
+ const fieldAnatomy = createAnatomy("field").parts("root", "errorText", "helperText", "input", "label", "select", "textarea", "requiredIndicator");
72
+ const parts = fieldAnatomy.build();
73
+
74
+ //#endregion
75
+ //#region src/components/field/use-field.ts
76
+ const useField = (props) => {
77
+ const fieldset = useFieldsetContext();
78
+ const env = useEnvironmentContext();
79
+ const fieldProps = mergeProps({
80
+ disabled: Boolean(fieldset?.().disabled),
81
+ required: false,
82
+ invalid: false,
83
+ readOnly: false
84
+ }, props);
85
+ const [hasErrorText, setHasErrorText] = createSignal(false);
86
+ const [hasHelperText, setHasHelperText] = createSignal(false);
87
+ const id = fieldProps.id ?? createUniqueId();
88
+ const [rootRef, setRootRef] = createSignal(void 0);
89
+ const rootId = fieldProps.ids?.control ?? `field::${id}`;
90
+ const errorTextId = fieldProps.ids?.errorText ?? `field::${id}::error-text`;
91
+ const helperTextId = fieldProps.ids?.helperText ?? `field::${id}::helper-text`;
92
+ const labelId = fieldProps.ids?.label ?? `field::${id}::label`;
93
+ onMount(() => {
94
+ const rootNode = rootRef();
95
+ if (!rootNode) return;
96
+ const checkTextElements = () => {
97
+ const docOrShadowRoot = env().getRootNode();
98
+ setHasErrorText(!!docOrShadowRoot.getElementById(errorTextId));
99
+ setHasHelperText(!!docOrShadowRoot.getElementById(helperTextId));
100
+ };
101
+ checkTextElements();
102
+ const observer = new (env().getWindow()).MutationObserver(checkTextElements);
103
+ observer.observe(rootNode, {
104
+ childList: true,
105
+ subtree: true
106
+ });
107
+ onCleanup(() => observer.disconnect());
108
+ });
109
+ const getRootProps = () => ({
110
+ ...parts.root.attrs,
111
+ id: rootId,
112
+ role: "group",
113
+ "data-disabled": dataAttr(fieldProps.disabled),
114
+ "data-invalid": dataAttr(fieldProps.invalid),
115
+ "data-readonly": dataAttr(fieldProps.readOnly)
116
+ });
117
+ const getLabelProps = () => ({
118
+ ...parts.label.attrs,
119
+ id: labelId,
120
+ "data-disabled": dataAttr(fieldProps.disabled),
121
+ "data-invalid": dataAttr(fieldProps.invalid),
122
+ "data-readonly": dataAttr(fieldProps.readOnly),
123
+ "data-required": dataAttr(fieldProps.required),
124
+ htmlFor: id
125
+ });
126
+ const labelIds = createMemo(() => {
127
+ const ids = [];
128
+ if (hasErrorText() && fieldProps.invalid) ids.push(errorTextId);
129
+ if (hasHelperText()) ids.push(helperTextId);
130
+ return ids;
131
+ });
132
+ const getControlProps = () => ({
133
+ "aria-describedby": labelIds().join(" ") || void 0,
134
+ "aria-invalid": ariaAttr(fieldProps.invalid),
135
+ "data-invalid": dataAttr(fieldProps.invalid),
136
+ "data-required": dataAttr(fieldProps.required),
137
+ "data-readonly": dataAttr(fieldProps.readOnly),
138
+ id,
139
+ required: fieldProps.required,
140
+ disabled: fieldProps.disabled,
141
+ readOnly: fieldProps.readOnly || void 0
142
+ });
143
+ const getInputProps = () => ({
144
+ ...getControlProps(),
145
+ ...parts.input.attrs
146
+ });
147
+ const getTextareaProps = () => ({
148
+ ...getControlProps(),
149
+ ...parts.textarea.attrs
150
+ });
151
+ const getSelectProps = () => ({
152
+ ...getControlProps(),
153
+ ...parts.select.attrs
154
+ });
155
+ const getHelperTextProps = () => ({
156
+ id: helperTextId,
157
+ ...parts.helperText.attrs,
158
+ "data-disabled": dataAttr(fieldProps.disabled)
159
+ });
160
+ const getErrorTextProps = () => ({
161
+ id: errorTextId,
162
+ ...parts.errorText.attrs,
163
+ "aria-live": "polite"
164
+ });
165
+ const getRequiredIndicatorProps = () => ({
166
+ "aria-hidden": true,
167
+ ...parts.requiredIndicator.attrs
168
+ });
169
+ return createMemo(() => ({
170
+ ariaDescribedby: labelIds().join(" "),
171
+ ids: {
172
+ control: id,
173
+ label: labelId,
174
+ errorText: errorTextId,
175
+ helperText: helperTextId
176
+ },
177
+ refs: { rootRef: setRootRef },
178
+ disabled: fieldProps.disabled,
179
+ invalid: fieldProps.invalid,
180
+ readOnly: fieldProps.readOnly,
181
+ required: fieldProps.required,
182
+ getLabelProps,
183
+ getRootProps,
184
+ getInputProps,
185
+ getTextareaProps,
186
+ getSelectProps,
187
+ getHelperTextProps,
188
+ getErrorTextProps,
189
+ getRequiredIndicatorProps
190
+ }));
191
+ };
192
+
193
+ //#endregion
194
+ //#region src/components/field/field-root.tsx
195
+ const FieldRoot = (props) => {
196
+ const [useFieldProps, localProps] = createSplitProps()(props, [
197
+ "id",
198
+ "ids",
199
+ "disabled",
200
+ "invalid",
201
+ "readOnly",
202
+ "required"
203
+ ]);
204
+ const field = useField(useFieldProps);
205
+ const mergedProps = mergeProps$1(() => field().getRootProps(), localProps);
206
+ return <FieldProvider value={field}>
207
+ <sprawlify.div {...mergedProps} ref={composeRefs(field().refs.rootRef, props.ref)} />
208
+ </FieldProvider>;
209
+ };
210
+
211
+ //#endregion
212
+ //#region src/components/field/field-root-provider.tsx
213
+ const FieldRootProvider = (props) => {
214
+ const [{ value: field }, localProps] = createSplitProps()(props, ["value"]);
215
+ const mergedProps = mergeProps$1(() => field().getRootProps(), localProps);
216
+ return <FieldProvider value={field}>
217
+ <sprawlify.div {...mergedProps} />
218
+ </FieldProvider>;
219
+ };
220
+
221
+ //#endregion
222
+ //#region src/components/field/field-select.tsx
223
+ const FieldSelect = (props) => {
224
+ const field = useFieldContext();
225
+ const mergedProps = mergeProps$1(() => field?.().getSelectProps(), props);
226
+ return <sprawlify.select {...mergedProps} />;
227
+ };
228
+
229
+ //#endregion
230
+ //#region src/components/field/field-textarea.tsx
231
+ const FieldTextarea = (props) => {
232
+ const field = useFieldContext();
233
+ let textareaRef;
234
+ const [autoresizeProps, textareaProps] = splitProps(props, ["autoresize"]);
235
+ const mergedProps = mergeProps$1(() => field?.().getTextareaProps(), () => ({ style: { resize: autoresizeProps.autoresize ? "none" : void 0 } }), textareaProps);
236
+ onMount(() => {
237
+ if (!autoresizeProps.autoresize) return;
238
+ const cleanup = autoresizeTextarea(textareaRef);
239
+ onCleanup(() => cleanup?.());
240
+ });
241
+ return <sprawlify.textarea {...mergedProps} ref={composeRefs((el) => textareaRef = el, props.ref)} />;
242
+ };
243
+
244
+ //#endregion
245
+ //#region src/components/field/field.ts
246
+ var field_exports = /* @__PURE__ */ __export({
247
+ Context: () => FieldContext,
248
+ ErrorText: () => FieldErrorText,
249
+ HelperText: () => FieldHelperText,
250
+ Input: () => FieldInput,
251
+ Label: () => FieldLabel,
252
+ RequiredIndicator: () => FieldRequiredIndicator,
253
+ Root: () => FieldRoot,
254
+ RootProvider: () => FieldRootProvider,
255
+ Select: () => FieldSelect,
256
+ Textarea: () => FieldTextarea
257
+ });
258
+
259
+ //#endregion
260
+ export { FieldRoot as a, FieldRequiredIndicator as c, FieldHelperText as d, FieldErrorText as f, FieldRootProvider as i, FieldLabel as l, useFieldContext as m, FieldTextarea as n, useField as o, FieldContext as p, FieldSelect as r, fieldAnatomy as s, field_exports as t, FieldInput as u };
@@ -0,0 +1,288 @@
1
+ import { t as __export } from "./chunk-B93cd-Dz.js";
2
+ import { r as mergeProps$2 } from "./core-oNB2jGcl.js";
3
+ import { t as createContext$1 } from "./create-context-GfQ_MylE.js";
4
+ import { o as useEnvironmentContext } from "./providers-Bo0OFe08.js";
5
+ import { t as createSplitProps } from "./create-split-props-pQu7jijw.js";
6
+ import { t as sprawlify } from "./factory-PGDAvOKb.js";
7
+ import { t as composeRefs } from "./compose-refs-BVVIB7xn.js";
8
+ import { u as useFieldsetContext } from "./fieldset-BrJqMLEd.js";
9
+ import { Show, createMemo, createSignal, createUniqueId, mergeProps, onCleanup, onMount, splitProps } from "solid-js";
10
+ import { createComponent, mergeProps as mergeProps$1 } from "solid-js/web";
11
+ import { ariaAttr, dataAttr } from "@sprawlify/primitives/dom-query";
12
+ import { createAnatomy } from "@sprawlify/primitives/anatomy";
13
+ import { autoresizeTextarea } from "@sprawlify/primitives/auto-resize";
14
+
15
+ //#region src/components/field/use-field-context.ts
16
+ const [FieldProvider, useFieldContext] = createContext$1({
17
+ hookName: "useFieldContext",
18
+ providerName: "<FieldProvider />",
19
+ strict: false
20
+ });
21
+
22
+ //#endregion
23
+ //#region src/components/field/field-context.tsx
24
+ const FieldContext = (props) => props.children(useFieldContext());
25
+
26
+ //#endregion
27
+ //#region src/components/field/field-error-text.tsx
28
+ const FieldErrorText = (props) => {
29
+ const field = useFieldContext();
30
+ const mergedProps = mergeProps$2(() => field().getErrorTextProps(), props);
31
+ return createComponent(Show, {
32
+ get when() {
33
+ return field?.().invalid;
34
+ },
35
+ get children() {
36
+ return createComponent(sprawlify.span, mergedProps);
37
+ }
38
+ });
39
+ };
40
+
41
+ //#endregion
42
+ //#region src/components/field/field-helper-text.tsx
43
+ const FieldHelperText = (props) => {
44
+ const field = useFieldContext();
45
+ const mergedProps = mergeProps$2(() => field().getHelperTextProps(), props);
46
+ return createComponent(sprawlify.span, mergedProps);
47
+ };
48
+
49
+ //#endregion
50
+ //#region src/components/field/field-input.tsx
51
+ const FieldInput = (props) => {
52
+ const field = useFieldContext();
53
+ const mergedProps = mergeProps$2(() => field?.().getInputProps(), props);
54
+ return createComponent(sprawlify.input, mergedProps);
55
+ };
56
+
57
+ //#endregion
58
+ //#region src/components/field/field-label.tsx
59
+ const FieldLabel = (props) => {
60
+ const field = useFieldContext();
61
+ const mergedProps = mergeProps$2(() => field?.().getLabelProps(), props);
62
+ return createComponent(sprawlify.label, mergedProps);
63
+ };
64
+
65
+ //#endregion
66
+ //#region src/components/field/field-required-indicator.tsx
67
+ const FieldRequiredIndicator = (props) => {
68
+ const field = useFieldContext();
69
+ const mergedProps = mergeProps$2(() => field().getRequiredIndicatorProps(), props);
70
+ return createComponent(Show, {
71
+ get when() {
72
+ return field().required;
73
+ },
74
+ get fallback() {
75
+ return props.fallback;
76
+ },
77
+ get children() {
78
+ return createComponent(sprawlify.span, mergeProps$1(mergedProps, { get children() {
79
+ return props.children ?? "*";
80
+ } }));
81
+ }
82
+ });
83
+ };
84
+
85
+ //#endregion
86
+ //#region src/components/field/field-anatomy.ts
87
+ const fieldAnatomy = createAnatomy("field").parts("root", "errorText", "helperText", "input", "label", "select", "textarea", "requiredIndicator");
88
+ const parts = fieldAnatomy.build();
89
+
90
+ //#endregion
91
+ //#region src/components/field/use-field.ts
92
+ const useField = (props) => {
93
+ const fieldset = useFieldsetContext();
94
+ const env = useEnvironmentContext();
95
+ const fieldProps = mergeProps({
96
+ disabled: Boolean(fieldset?.().disabled),
97
+ required: false,
98
+ invalid: false,
99
+ readOnly: false
100
+ }, props);
101
+ const [hasErrorText, setHasErrorText] = createSignal(false);
102
+ const [hasHelperText, setHasHelperText] = createSignal(false);
103
+ const id = fieldProps.id ?? createUniqueId();
104
+ const [rootRef, setRootRef] = createSignal(void 0);
105
+ const rootId = fieldProps.ids?.control ?? `field::${id}`;
106
+ const errorTextId = fieldProps.ids?.errorText ?? `field::${id}::error-text`;
107
+ const helperTextId = fieldProps.ids?.helperText ?? `field::${id}::helper-text`;
108
+ const labelId = fieldProps.ids?.label ?? `field::${id}::label`;
109
+ onMount(() => {
110
+ const rootNode = rootRef();
111
+ if (!rootNode) return;
112
+ const checkTextElements = () => {
113
+ const docOrShadowRoot = env().getRootNode();
114
+ setHasErrorText(!!docOrShadowRoot.getElementById(errorTextId));
115
+ setHasHelperText(!!docOrShadowRoot.getElementById(helperTextId));
116
+ };
117
+ checkTextElements();
118
+ const observer = new (env().getWindow()).MutationObserver(checkTextElements);
119
+ observer.observe(rootNode, {
120
+ childList: true,
121
+ subtree: true
122
+ });
123
+ onCleanup(() => observer.disconnect());
124
+ });
125
+ const getRootProps = () => ({
126
+ ...parts.root.attrs,
127
+ id: rootId,
128
+ role: "group",
129
+ "data-disabled": dataAttr(fieldProps.disabled),
130
+ "data-invalid": dataAttr(fieldProps.invalid),
131
+ "data-readonly": dataAttr(fieldProps.readOnly)
132
+ });
133
+ const getLabelProps = () => ({
134
+ ...parts.label.attrs,
135
+ id: labelId,
136
+ "data-disabled": dataAttr(fieldProps.disabled),
137
+ "data-invalid": dataAttr(fieldProps.invalid),
138
+ "data-readonly": dataAttr(fieldProps.readOnly),
139
+ "data-required": dataAttr(fieldProps.required),
140
+ htmlFor: id
141
+ });
142
+ const labelIds = createMemo(() => {
143
+ const ids = [];
144
+ if (hasErrorText() && fieldProps.invalid) ids.push(errorTextId);
145
+ if (hasHelperText()) ids.push(helperTextId);
146
+ return ids;
147
+ });
148
+ const getControlProps = () => ({
149
+ "aria-describedby": labelIds().join(" ") || void 0,
150
+ "aria-invalid": ariaAttr(fieldProps.invalid),
151
+ "data-invalid": dataAttr(fieldProps.invalid),
152
+ "data-required": dataAttr(fieldProps.required),
153
+ "data-readonly": dataAttr(fieldProps.readOnly),
154
+ id,
155
+ required: fieldProps.required,
156
+ disabled: fieldProps.disabled,
157
+ readOnly: fieldProps.readOnly || void 0
158
+ });
159
+ const getInputProps = () => ({
160
+ ...getControlProps(),
161
+ ...parts.input.attrs
162
+ });
163
+ const getTextareaProps = () => ({
164
+ ...getControlProps(),
165
+ ...parts.textarea.attrs
166
+ });
167
+ const getSelectProps = () => ({
168
+ ...getControlProps(),
169
+ ...parts.select.attrs
170
+ });
171
+ const getHelperTextProps = () => ({
172
+ id: helperTextId,
173
+ ...parts.helperText.attrs,
174
+ "data-disabled": dataAttr(fieldProps.disabled)
175
+ });
176
+ const getErrorTextProps = () => ({
177
+ id: errorTextId,
178
+ ...parts.errorText.attrs,
179
+ "aria-live": "polite"
180
+ });
181
+ const getRequiredIndicatorProps = () => ({
182
+ "aria-hidden": true,
183
+ ...parts.requiredIndicator.attrs
184
+ });
185
+ return createMemo(() => ({
186
+ ariaDescribedby: labelIds().join(" "),
187
+ ids: {
188
+ control: id,
189
+ label: labelId,
190
+ errorText: errorTextId,
191
+ helperText: helperTextId
192
+ },
193
+ refs: { rootRef: setRootRef },
194
+ disabled: fieldProps.disabled,
195
+ invalid: fieldProps.invalid,
196
+ readOnly: fieldProps.readOnly,
197
+ required: fieldProps.required,
198
+ getLabelProps,
199
+ getRootProps,
200
+ getInputProps,
201
+ getTextareaProps,
202
+ getSelectProps,
203
+ getHelperTextProps,
204
+ getErrorTextProps,
205
+ getRequiredIndicatorProps
206
+ }));
207
+ };
208
+
209
+ //#endregion
210
+ //#region src/components/field/field-root.tsx
211
+ const FieldRoot = (props) => {
212
+ const [useFieldProps, localProps] = createSplitProps()(props, [
213
+ "id",
214
+ "ids",
215
+ "disabled",
216
+ "invalid",
217
+ "readOnly",
218
+ "required"
219
+ ]);
220
+ const field = useField(useFieldProps);
221
+ const mergedProps = mergeProps$2(() => field().getRootProps(), localProps);
222
+ return createComponent(FieldProvider, {
223
+ value: field,
224
+ get children() {
225
+ return createComponent(sprawlify.div, mergeProps$1(mergedProps, { ref(r$) {
226
+ var _ref$ = composeRefs(field().refs.rootRef, props.ref);
227
+ typeof _ref$ === "function" && _ref$(r$);
228
+ } }));
229
+ }
230
+ });
231
+ };
232
+
233
+ //#endregion
234
+ //#region src/components/field/field-root-provider.tsx
235
+ const FieldRootProvider = (props) => {
236
+ const [{ value: field }, localProps] = createSplitProps()(props, ["value"]);
237
+ const mergedProps = mergeProps$2(() => field().getRootProps(), localProps);
238
+ return createComponent(FieldProvider, {
239
+ value: field,
240
+ get children() {
241
+ return createComponent(sprawlify.div, mergedProps);
242
+ }
243
+ });
244
+ };
245
+
246
+ //#endregion
247
+ //#region src/components/field/field-select.tsx
248
+ const FieldSelect = (props) => {
249
+ const field = useFieldContext();
250
+ const mergedProps = mergeProps$2(() => field?.().getSelectProps(), props);
251
+ return createComponent(sprawlify.select, mergedProps);
252
+ };
253
+
254
+ //#endregion
255
+ //#region src/components/field/field-textarea.tsx
256
+ const FieldTextarea = (props) => {
257
+ const field = useFieldContext();
258
+ let textareaRef;
259
+ const [autoresizeProps, textareaProps] = splitProps(props, ["autoresize"]);
260
+ const mergedProps = mergeProps$2(() => field?.().getTextareaProps(), () => ({ style: { resize: autoresizeProps.autoresize ? "none" : void 0 } }), textareaProps);
261
+ onMount(() => {
262
+ if (!autoresizeProps.autoresize) return;
263
+ const cleanup = autoresizeTextarea(textareaRef);
264
+ onCleanup(() => cleanup?.());
265
+ });
266
+ return createComponent(sprawlify.textarea, mergeProps$1(mergedProps, { ref(r$) {
267
+ var _ref$ = composeRefs((el) => textareaRef = el, props.ref);
268
+ typeof _ref$ === "function" && _ref$(r$);
269
+ } }));
270
+ };
271
+
272
+ //#endregion
273
+ //#region src/components/field/field.ts
274
+ var field_exports = /* @__PURE__ */ __export({
275
+ Context: () => FieldContext,
276
+ ErrorText: () => FieldErrorText,
277
+ HelperText: () => FieldHelperText,
278
+ Input: () => FieldInput,
279
+ Label: () => FieldLabel,
280
+ RequiredIndicator: () => FieldRequiredIndicator,
281
+ Root: () => FieldRoot,
282
+ RootProvider: () => FieldRootProvider,
283
+ Select: () => FieldSelect,
284
+ Textarea: () => FieldTextarea
285
+ });
286
+
287
+ //#endregion
288
+ export { FieldRoot as a, FieldRequiredIndicator as c, FieldHelperText as d, FieldErrorText as f, FieldRootProvider as i, FieldLabel as l, useFieldContext as m, FieldTextarea as n, useField as o, FieldContext as p, FieldSelect as r, fieldAnatomy as s, field_exports as t, FieldInput as u };