quirk-ui 0.1.176 → 0.1.177

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.
@@ -1,31 +1,31 @@
1
- import { jsx as n } from "react/jsx-runtime";
1
+ import { jsx as s } from "react/jsx-runtime";
2
2
  import { Input as v } from "./core/components/Input/index.mjs";
3
3
  import { Textarea as T } from "./core/components/Textarea/index.mjs";
4
4
  import { Select as m } from "./core/components/Select/index.mjs";
5
5
  import { Checkbox as _ } from "./core/components/Checkbox/index.mjs";
6
6
  import { Radio as W } from "./core/components/Radio/index.mjs";
7
- import { Fieldset as b } from "./core/components/Fieldset/index.mjs";
7
+ import { Fieldset as h } from "./core/components/Fieldset/index.mjs";
8
8
  import { DatePicker as f } from "./core/components/DatePicker/index.mjs";
9
9
  import { Range as k } from "./core/components/Range/index.mjs";
10
- import './FormField.css';const w = "_formBlock_1jbl0_1", L = "_container_1jbl0_7", C = "_formInner_1jbl0_20", F = "_maxWidthSm_1jbl0_26", y = "_maxWidthMd_1jbl0_29", B = "_maxWidthLg_1jbl0_32", q = "_maxWidthFull_1jbl0_35", S = "_heading_1jbl0_41", H = "_eyebrow_1jbl0_47", G = "_title_1jbl0_51", M = "_disclaimer_1jbl0_55", $ = "_progress_1jbl0_61", I = "_progressHeader_1jbl0_67", D = "_stepLabel_1jbl0_73", O = "_stepCount_1jbl0_79", V = "_stepDescription_1jbl0_84", P = "_fields_1jbl0_92", R = "_fieldFull_1jbl0_99", N = "_fieldHalf_1jbl0_103", z = "_fieldThird_1jbl0_111", A = "_actions_1jbl0_121", E = "_submitButton_1jbl0_128", J = "_success_1jbl0_134", K = "_errorBanner_1jbl0_149", u = {
10
+ import './FormField.css';const w = "_formBlock_8cqr5_1", L = "_container_8cqr5_7", C = "_formInner_8cqr5_20", F = "_maxWidthSm_8cqr5_26", y = "_maxWidthMd_8cqr5_29", B = "_maxWidthLg_8cqr5_32", S = "_maxWidthFull_8cqr5_35", H = "_heading_8cqr5_41", G = "_eyebrow_8cqr5_47", M = "_title_8cqr5_51", $ = "_disclaimer_8cqr5_55", I = "_progress_8cqr5_61", D = "_progressHeader_8cqr5_67", O = "_stepLabel_8cqr5_73", V = "_stepCount_8cqr5_79", P = "_stepDescription_8cqr5_84", R = "_fields_8cqr5_92", j = "_fieldFull_8cqr5_99", N = "_fieldHalf_8cqr5_103", z = "_fieldThird_8cqr5_111", A = "_actions_8cqr5_121", E = "_submitButton_8cqr5_128", J = "_success_8cqr5_134", K = "_errorBanner_8cqr5_149", u = {
11
11
  formBlock: w,
12
12
  container: L,
13
13
  formInner: C,
14
14
  maxWidthSm: F,
15
15
  maxWidthMd: y,
16
16
  maxWidthLg: B,
17
- maxWidthFull: q,
18
- heading: S,
19
- eyebrow: H,
20
- title: G,
21
- disclaimer: M,
22
- progress: $,
23
- progressHeader: I,
24
- stepLabel: D,
25
- stepCount: O,
26
- stepDescription: V,
27
- fields: P,
28
- fieldFull: R,
17
+ maxWidthFull: S,
18
+ heading: H,
19
+ eyebrow: G,
20
+ title: M,
21
+ disclaimer: $,
22
+ progress: I,
23
+ progressHeader: D,
24
+ stepLabel: O,
25
+ stepCount: V,
26
+ stepDescription: P,
27
+ fields: R,
28
+ fieldFull: j,
29
29
  fieldHalf: N,
30
30
  fieldThird: z,
31
31
  actions: A,
@@ -33,36 +33,36 @@ import './FormField.css';const w = "_formBlock_1jbl0_1", L = "_container_1jbl0_7
33
33
  success: J,
34
34
  errorBanner: K
35
35
  };
36
- function c(e) {
37
- return (e ?? []).map((r) => ({
38
- label: r.label,
39
- value: r.value.current,
40
- disabled: r.disabled
36
+ function i(e) {
37
+ return (e ?? []).map((t) => ({
38
+ label: t.label,
39
+ value: t.value.current,
40
+ disabled: t.disabled
41
41
  }));
42
42
  }
43
- function h(e) {
44
- return (e ?? []).map((r) => ({
45
- label: r.label,
46
- options: r.options.map((l) => ({
47
- label: l.label,
48
- value: l.value.current,
49
- disabled: l.disabled
43
+ function p(e) {
44
+ return (e ?? []).map((t) => ({
45
+ label: t.label,
46
+ options: t.options.map((n) => ({
47
+ label: n.label,
48
+ value: n.value.current,
49
+ disabled: n.disabled
50
50
  }))
51
51
  }));
52
52
  }
53
- function le({ field: e, value: r, error: l, onChange: o }) {
54
- const a = e.name.current, p = {
53
+ function ne({ field: e, value: t, error: n, onChange: c }) {
54
+ const a = e.name.current, b = {
55
55
  full: u.fieldFull,
56
56
  half: u.fieldHalf,
57
57
  third: u.fieldThird
58
- }[e.width ?? "full"], i = {
58
+ }[e.width ?? "full"], o = {
59
59
  id: a,
60
60
  name: a,
61
61
  label: e.label,
62
62
  required: e.required,
63
63
  disabled: e.disabled,
64
64
  helperText: e.helperText,
65
- error: l
65
+ error: n
66
66
  }, d = () => {
67
67
  switch (e.fieldType) {
68
68
  // ── Text-based inputs ──────────────────────────────────────────────
@@ -71,164 +71,164 @@ function le({ field: e, value: r, error: l, onChange: o }) {
71
71
  case "phone":
72
72
  case "number":
73
73
  case "url":
74
- return /* @__PURE__ */ n(
74
+ return /* @__PURE__ */ s(
75
75
  v,
76
76
  {
77
- ...i,
77
+ ...o,
78
78
  type: e.fieldType === "phone" ? "tel" : e.fieldType,
79
79
  placeholder: e.placeholder,
80
- value: r ?? "",
80
+ value: t ?? "",
81
81
  minLength: e.minLength,
82
82
  maxLength: e.maxLength,
83
83
  fullWidth: !0,
84
- onChange: (t) => o(a, t.target.value)
84
+ onChange: (r) => c(a, r.target.value)
85
85
  }
86
86
  );
87
87
  // ── Textarea ───────────────────────────────────────────────────────
88
88
  case "textarea":
89
- return /* @__PURE__ */ n(
89
+ return /* @__PURE__ */ s(
90
90
  T,
91
91
  {
92
- ...i,
92
+ ...o,
93
93
  placeholder: e.placeholder,
94
- value: r ?? "",
94
+ value: t ?? "",
95
95
  rows: e.rows ?? 4,
96
96
  maxLength: e.maxLength,
97
97
  showCharCount: e.showCharCount,
98
98
  fullWidth: !0,
99
- onChange: (t) => o(a, t.target.value)
99
+ onChange: (r) => c(a, r.target.value)
100
100
  }
101
101
  );
102
102
  // ── Select ─────────────────────────────────────────────────────────
103
103
  case "select": {
104
- const t = e.useOptionGroups ? h(e.optionGroups) : c(e.options);
105
- return /* @__PURE__ */ n(
104
+ const r = e.useOptionGroups ? p(e.optionGroups) : i(e.options);
105
+ return /* @__PURE__ */ s(
106
106
  m,
107
107
  {
108
- ...i,
108
+ ...o,
109
109
  placeholder: e.placeholder,
110
- options: t,
111
- value: r ?? "",
110
+ options: r,
111
+ value: t ?? "",
112
112
  fullWidth: !0,
113
- onChange: (s) => o(a, s.target.value)
113
+ onChange: (l) => c(a, l.target.value)
114
114
  }
115
115
  );
116
116
  }
117
117
  // ── Multi-select ───────────────────────────────────────────────────
118
118
  case "multiselect": {
119
- const t = e.useOptionGroups ? h(e.optionGroups) : c(e.options);
120
- return /* @__PURE__ */ n(
119
+ const r = e.useOptionGroups ? p(e.optionGroups) : i(e.options);
120
+ return /* @__PURE__ */ s(
121
121
  m,
122
122
  {
123
- ...i,
123
+ ...o,
124
124
  multiple: !0,
125
- options: t,
126
- value: r ?? [],
125
+ options: r,
126
+ value: t ?? [],
127
127
  showSelectedCount: !0,
128
- onChange: (s) => o(a, s)
128
+ onChange: (l) => c(a, l)
129
129
  }
130
130
  );
131
131
  }
132
132
  // ── Single checkbox ────────────────────────────────────────────────
133
133
  case "checkbox":
134
- return /* @__PURE__ */ n(
134
+ return /* @__PURE__ */ s(
135
135
  _,
136
136
  {
137
- id: i.id,
138
- name: i.name,
137
+ id: o.id,
138
+ name: o.name,
139
139
  label: e.label,
140
140
  required: e.required,
141
141
  disabled: e.disabled,
142
- helperText: l ?? e.helperText,
143
- error: !!l,
144
- checked: r ?? !1,
145
- onChange: (t) => o(a, t.target.checked)
142
+ helperText: n ?? e.helperText,
143
+ error: !!n,
144
+ checked: t ?? !1,
145
+ onChange: (r) => c(a, r.target.checked)
146
146
  }
147
147
  );
148
148
  // ── Checkbox group ─────────────────────────────────────────────────
149
149
  case "checkboxGroup": {
150
- const t = r ?? [];
151
- return /* @__PURE__ */ n(b, { legend: e.label, error: !!l, helperText: l, children: c(e.options).map((s) => /* @__PURE__ */ n(
150
+ const r = t ?? [];
151
+ return /* @__PURE__ */ s(h, { legend: e.label, error: !!n, helperText: n, children: i(e.options).map((l) => /* @__PURE__ */ s(
152
152
  _,
153
153
  {
154
- id: `${a}-${s.value}`,
154
+ id: `${a}-${l.value}`,
155
155
  name: `${a}[]`,
156
- label: s.label,
157
- checked: t.includes(s.value),
158
- disabled: s.disabled || e.disabled,
156
+ label: l.label,
157
+ checked: r.includes(l.value),
158
+ disabled: l.disabled || e.disabled,
159
159
  onChange: (x) => {
160
- const g = x.target.checked ? [...t, s.value] : t.filter((j) => j !== s.value);
161
- o(a, g);
160
+ const g = x.target.checked ? [...r, l.value] : r.filter((q) => q !== l.value);
161
+ c(a, g);
162
162
  }
163
163
  },
164
- s.value
164
+ l.value
165
165
  )) });
166
166
  }
167
167
  // ── Radio group ────────────────────────────────────────────────────
168
168
  case "radio":
169
- return /* @__PURE__ */ n(b, { legend: e.label, error: !!l, helperText: l, children: c(e.options).map((t) => /* @__PURE__ */ n(
169
+ return /* @__PURE__ */ s(h, { legend: e.label, error: !!n, helperText: n, children: i(e.options).map((r) => /* @__PURE__ */ s(
170
170
  W,
171
171
  {
172
- id: `${a}-${t.value}`,
172
+ id: `${a}-${r.value}`,
173
173
  name: a,
174
- value: t.value,
175
- label: t.label,
176
- checked: r === t.value,
177
- disabled: t.disabled || e.disabled,
174
+ value: r.value,
175
+ label: r.label,
176
+ checked: t === r.value,
177
+ disabled: r.disabled || e.disabled,
178
178
  required: e.required,
179
- onChange: () => o(a, t.value)
179
+ onChange: () => c(a, r.value)
180
180
  },
181
- t.value
181
+ r.value
182
182
  )) });
183
183
  // ── Date picker ────────────────────────────────────────────────────
184
184
  case "date":
185
- return /* @__PURE__ */ n(
185
+ return /* @__PURE__ */ s(
186
186
  f,
187
187
  {
188
- id: i.id,
189
- name: i.name,
188
+ id: o.id,
189
+ name: o.name,
190
190
  label: e.label,
191
191
  required: e.required,
192
192
  disabled: e.disabled,
193
- helperText: l ?? e.helperText,
194
- error: !!l,
195
- value: r ?? null,
196
- onChange: (t) => o(a, t)
193
+ helperText: n ?? e.helperText,
194
+ error: !!n,
195
+ value: t ?? null,
196
+ onChange: (r) => c(a, r)
197
197
  }
198
198
  );
199
199
  // ── Range ──────────────────────────────────────────────────────────
200
200
  case "range":
201
- return /* @__PURE__ */ n(
201
+ return /* @__PURE__ */ s(
202
202
  k,
203
203
  {
204
- ...i,
205
- value: r ?? e.rangeMin ?? 0,
204
+ ...o,
205
+ value: t ?? e.rangeMin ?? 0,
206
206
  min: e.rangeMin ?? 0,
207
207
  max: e.rangeMax ?? 100,
208
208
  step: e.rangeStep ?? 1,
209
209
  valuePrefix: e.rangeValuePrefix,
210
210
  valueSuffix: e.rangeValueSuffix,
211
211
  showValue: !0,
212
- onChange: (t) => o(a, t)
212
+ onChange: (r) => c(a, r)
213
213
  }
214
214
  );
215
215
  // ── Hidden ─────────────────────────────────────────────────────────
216
216
  case "hidden":
217
- return /* @__PURE__ */ n(
217
+ return /* @__PURE__ */ s(
218
218
  "input",
219
219
  {
220
220
  type: "hidden",
221
221
  name: a,
222
- value: r ?? e.hiddenValue ?? ""
222
+ value: t ?? e.hiddenValue ?? ""
223
223
  }
224
224
  );
225
225
  default:
226
226
  return null;
227
227
  }
228
228
  };
229
- return e.fieldType === "hidden" ? d() : /* @__PURE__ */ n("div", { className: `${p}`, children: d() });
229
+ return e.fieldType === "hidden" ? d() : /* @__PURE__ */ s("div", { className: `${b}`, children: d() });
230
230
  }
231
231
  export {
232
- le as F,
232
+ ne as F,
233
233
  u as s
234
234
  };
@@ -0,0 +1 @@
1
+ "use strict";require('./FormField.css');const a=require("react/jsx-runtime"),v=require("./core/components/Input/index.cjs"),T=require("./core/components/Textarea/index.cjs"),_=require("./core/components/Select/index.cjs"),h=require("./core/components/Checkbox/index.cjs"),k=require("./core/components/Radio/index.cjs"),p=require("./core/components/Fieldset/index.cjs"),W=require("./core/components/DatePicker/index.cjs"),F=require("./core/components/Range/index.cjs"),j="_formBlock_8cqr5_1",C="_container_8cqr5_7",w="_formInner_8cqr5_20",L="_maxWidthSm_8cqr5_26",y="_maxWidthMd_8cqr5_29",S="_maxWidthLg_8cqr5_32",B="_maxWidthFull_8cqr5_35",$="_heading_8cqr5_41",H="_eyebrow_8cqr5_47",G="_title_8cqr5_51",I="_disclaimer_8cqr5_55",M="_progress_8cqr5_61",D="_progressHeader_8cqr5_67",O="_stepLabel_8cqr5_73",P="_stepCount_8cqr5_79",R="_stepDescription_8cqr5_84",V="_fields_8cqr5_92",f="_fieldFull_8cqr5_99",N="_fieldHalf_8cqr5_103",z="_fieldThird_8cqr5_111",A="_actions_8cqr5_121",E="_submitButton_8cqr5_128",J="_success_8cqr5_134",K="_errorBanner_8cqr5_149",u={formBlock:j,container:C,formInner:w,maxWidthSm:L,maxWidthMd:y,maxWidthLg:S,maxWidthFull:B,heading:$,eyebrow:H,title:G,disclaimer:I,progress:M,progressHeader:D,stepLabel:O,stepCount:P,stepDescription:R,fields:V,fieldFull:f,fieldHalf:N,fieldThird:z,actions:A,submitButton:E,success:J,errorBanner:K};function i(e){return(e??[]).map(t=>({label:t.label,value:t.value.current,disabled:t.disabled}))}function m(e){return(e??[]).map(t=>({label:t.label,options:t.options.map(s=>({label:s.label,value:s.value.current,disabled:s.disabled}))}))}function Q({field:e,value:t,error:s,onChange:o}){const n=e.name.current,x={full:u.fieldFull,half:u.fieldHalf,third:u.fieldThird}[e.width??"full"],l={id:n,name:n,label:e.label,required:e.required,disabled:e.disabled,helperText:e.helperText,error:s},d=()=>{switch(e.fieldType){case"text":case"email":case"phone":case"number":case"url":return a.jsx(v.Input,{...l,type:e.fieldType==="phone"?"tel":e.fieldType,placeholder:e.placeholder,value:t??"",minLength:e.minLength,maxLength:e.maxLength,fullWidth:!0,onChange:r=>o(n,r.target.value)});case"textarea":return a.jsx(T.Textarea,{...l,placeholder:e.placeholder,value:t??"",rows:e.rows??4,maxLength:e.maxLength,showCharCount:e.showCharCount,fullWidth:!0,onChange:r=>o(n,r.target.value)});case"select":{const r=e.useOptionGroups?m(e.optionGroups):i(e.options);return a.jsx(_.Select,{...l,placeholder:e.placeholder,options:r,value:t??"",fullWidth:!0,onChange:c=>o(n,c.target.value)})}case"multiselect":{const r=e.useOptionGroups?m(e.optionGroups):i(e.options);return a.jsx(_.Select,{...l,multiple:!0,options:r,value:t??[],showSelectedCount:!0,onChange:c=>o(n,c)})}case"checkbox":return a.jsx(h.Checkbox,{id:l.id,name:l.name,label:e.label,required:e.required,disabled:e.disabled,helperText:s??e.helperText,error:!!s,checked:t??!1,onChange:r=>o(n,r.target.checked)});case"checkboxGroup":{const r=t??[];return a.jsx(p.Fieldset,{legend:e.label,error:!!s,helperText:s,children:i(e.options).map(c=>a.jsx(h.Checkbox,{id:`${n}-${c.value}`,name:`${n}[]`,label:c.label,checked:r.includes(c.value),disabled:c.disabled||e.disabled,onChange:b=>{const q=b.target.checked?[...r,c.value]:r.filter(g=>g!==c.value);o(n,q)}},c.value))})}case"radio":return a.jsx(p.Fieldset,{legend:e.label,error:!!s,helperText:s,children:i(e.options).map(r=>a.jsx(k.Radio,{id:`${n}-${r.value}`,name:n,value:r.value,label:r.label,checked:t===r.value,disabled:r.disabled||e.disabled,required:e.required,onChange:()=>o(n,r.value)},r.value))});case"date":return a.jsx(W.DatePicker,{id:l.id,name:l.name,label:e.label,required:e.required,disabled:e.disabled,helperText:s??e.helperText,error:!!s,value:t??null,onChange:r=>o(n,r)});case"range":return a.jsx(F.Range,{...l,value:t??e.rangeMin??0,min:e.rangeMin??0,max:e.rangeMax??100,step:e.rangeStep??1,valuePrefix:e.rangeValuePrefix,valueSuffix:e.rangeValueSuffix,showValue:!0,onChange:r=>o(n,r)});case"hidden":return a.jsx("input",{type:"hidden",name:n,value:t??e.hiddenValue??""});default:return null}};return e.fieldType==="hidden"?d():a.jsx("div",{className:`${x}`,children:d()})}exports.FormField=Q;exports.styles=u;
@@ -1 +1 @@
1
- ._formBlock_1jbl0_1{width:100%;padding-top:var(--spacing-xl);padding-bottom:var(--spacing-xl)}._container_1jbl0_7{width:100%;max-width:var(--layout-width, 1250px);margin:0 auto;padding-left:var(--spacing-md);padding-right:var(--spacing-md);display:flex;flex-direction:column;gap:var(--spacing-lg)}._formInner_1jbl0_20{width:100%;margin-left:auto;margin-right:auto}._maxWidthSm_1jbl0_26{max-width:480px}._maxWidthMd_1jbl0_29{max-width:640px}._maxWidthLg_1jbl0_32{max-width:800px}._maxWidthFull_1jbl0_35{max-width:100%}._heading_1jbl0_41{display:flex;flex-direction:column;gap:var(--spacing-sm)}._eyebrow_1jbl0_47{font-weight:var(--font-weight-bold)}._title_1jbl0_51{text-wrap:balance}._disclaimer_1jbl0_55{font-size:var(--font-size-sm)}._progress_1jbl0_61{display:flex;flex-direction:column;gap:var(--spacing-sm)}._progressHeader_1jbl0_67{display:flex;justify-content:space-between;align-items:center}._stepLabel_1jbl0_73{font-weight:var(--font-weight-semibold);font-size:var(--font-size-md);color:var(--color-text-primary)}._stepCount_1jbl0_79{font-size:var(--font-size-sm);color:var(--color-secondary-50)}._stepDescription_1jbl0_84{color:var(--color-secondary-75);font-size:var(--font-size-md);margin:0}._fields_1jbl0_92{display:flex;flex-wrap:wrap;gap:var(--spacing-md)}._fieldFull_1jbl0_99{width:100%}._fieldHalf_1jbl0_103{width:calc(50% - var(--spacing-md) / 2)}@media (max-width: 767px){._fieldHalf_1jbl0_103{width:100%}}._fieldThird_1jbl0_111{width:calc(33.333% - var(--spacing-md) * 2 / 3)}@media (max-width: 767px){._fieldThird_1jbl0_111{width:100%}}._actions_1jbl0_121{display:flex;align-items:center;gap:var(--spacing-md);padding-top:var(--spacing-sm)}._submitButton_1jbl0_128{margin-left:auto}._success_1jbl0_134{display:flex;flex-direction:column;align-items:flex-start;gap:var(--spacing-lg);padding:var(--spacing-md) 0 0}._success_1jbl0_134 p{color:var(--color-states-success-bg);font-weight:var(--font-weight-semibold)}._errorBanner_1jbl0_149{padding:var(--spacing-md);background-color:var(--color-states-error-bg);color:var(--color-states-error-text);border-radius:var(--radius-md);font-size:var(--font-size-sm)}
1
+ ._formBlock_8cqr5_1{width:100%;padding-top:var(--spacing-xl);padding-bottom:var(--spacing-xl)}._container_8cqr5_7{width:100%;max-width:var(--layout-width, 1250px);margin:0 auto;padding-left:var(--spacing-md);padding-right:var(--spacing-md);display:flex;flex-direction:column;gap:var(--spacing-lg)}._formInner_8cqr5_20{width:100%;margin-left:auto;margin-right:auto}._maxWidthSm_8cqr5_26{max-width:480px}._maxWidthMd_8cqr5_29{max-width:640px}._maxWidthLg_8cqr5_32{max-width:800px}._maxWidthFull_8cqr5_35{max-width:100%}._heading_8cqr5_41{display:flex;flex-direction:column;gap:var(--spacing-sm)}._eyebrow_8cqr5_47{font-weight:var(--font-weight-bold)}._title_8cqr5_51{text-wrap:balance}._disclaimer_8cqr5_55{font-size:var(--font-size-sm)}._progress_8cqr5_61{display:flex;flex-direction:column;gap:var(--spacing-sm)}._progressHeader_8cqr5_67{display:flex;justify-content:space-between;align-items:center}._stepLabel_8cqr5_73{font-weight:var(--font-weight-semibold);font-size:var(--font-size-md);color:var(--color-text-primary)}._stepCount_8cqr5_79{font-size:var(--font-size-sm);color:var(--color-secondary-50)}._stepDescription_8cqr5_84{color:var(--color-secondary-75);font-size:var(--font-size-md);margin:0}._fields_8cqr5_92{display:flex;flex-wrap:wrap;gap:var(--spacing-md)}._fieldFull_8cqr5_99{width:100%}._fieldHalf_8cqr5_103{width:calc(50% - var(--spacing-md) / 2)}@media (max-width: 767px){._fieldHalf_8cqr5_103{width:100%}}._fieldThird_8cqr5_111{width:calc(33.333% - var(--spacing-md) * 2 / 3)}@media (max-width: 767px){._fieldThird_8cqr5_111{width:100%}}._actions_8cqr5_121{display:flex;align-items:center;gap:var(--spacing-md);padding-top:var(--spacing-sm)}._submitButton_8cqr5_128{margin-left:auto}._success_8cqr5_134{display:flex;flex-direction:column;align-items:flex-start;gap:var(--spacing-lg);padding:var(--spacing-md) 0 0}._success_8cqr5_134 p{color:var(--color-states-success-bg);font-weight:var(--font-weight-semibold)}._errorBanner_8cqr5_149{padding:var(--spacing-md);background-color:var(--color-states-error-bg);color:var(--color-states-error-text);border-radius:var(--radius-md);font-size:var(--font-size-sm)}.split ._container_8cqr5_7{flex-direction:row;gap:3rem}.split ._heading_8cqr5_41,.split form{flex:.5}
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});require("react/jsx-runtime");require("../../../core/components/Input/index.cjs");require("../../../core/components/Textarea/index.cjs");require("../../../core/components/Select/index.cjs");require("../../../core/components/Checkbox/index.cjs");require("../../../core/components/Radio/index.cjs");require("../../../core/components/Fieldset/index.cjs");require("../../../core/components/DatePicker/index.cjs");require("../../../core/components/Range/index.cjs");const e=require("../../../FormField-3bxRYA4w.cjs");exports.FormField=e.FormField;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});require("react/jsx-runtime");require("../../../core/components/Input/index.cjs");require("../../../core/components/Textarea/index.cjs");require("../../../core/components/Select/index.cjs");require("../../../core/components/Checkbox/index.cjs");require("../../../core/components/Radio/index.cjs");require("../../../core/components/Fieldset/index.cjs");require("../../../core/components/DatePicker/index.cjs");require("../../../core/components/Range/index.cjs");const e=require("../../../FormField-Cy_aF1xz.cjs");exports.FormField=e.FormField;
@@ -7,7 +7,7 @@ import "../../../core/components/Radio/index.mjs";
7
7
  import "../../../core/components/Fieldset/index.mjs";
8
8
  import "../../../core/components/DatePicker/index.mjs";
9
9
  import "../../../core/components/Range/index.mjs";
10
- import { F as l } from "../../../FormField-UFRNSSdw.js";
10
+ import { F as l } from "../../../FormField-CWdr56Tp.js";
11
11
  export {
12
12
  l as FormField
13
13
  };
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("react/jsx-runtime"),i=require("react"),W=require("../../../core/components/Form/index.cjs"),E=require("../../../index-0SVQqhAg.cjs"),M=require("../../../core/components/ProgressBar/index.cjs"),A=require("../../hooks/useStyleClasses.cjs"),e=require("../../../FormField-3bxRYA4w.cjs"),_=require("./validate.cjs");function D(r,s){switch(s.type){case"SET_VALUE":return{...r,values:{...r.values,[s.name]:s.value},errors:{...r.errors,[s.name]:""}};case"SET_ERRORS":return{...r,errors:s.errors};case"CLEAR_ERROR":return{...r,errors:{...r.errors,[s.name]:""}};case"NEXT_STEP":return{...r,currentStep:r.currentStep+1,errors:{}};case"PREV_STEP":return{...r,currentStep:r.currentStep-1,errors:{}};case"SET_SUBMITTING":return{...r,isSubmitting:s.value};case"SET_RESULT":return{...r,submitResult:s.result,isSubmitting:!1};case"RESET":return{...r,currentStep:0,errors:{},submitResult:null,isSubmitting:!1};default:return r}}function G({id:r,heading:s,layout:B="vertical",maxWidth:x="md",steps:S,submitLabel:C="Submit",nextLabel:F="Next",backLabel:L="Back",successMessage:P="Thank you! Your submission has been received.",errorMessage:p="Something went wrong. Please try again.",styleOptions:$,renderRichText:c,onSubmit:v}){const N=A.useStyleClasses($??{}),j={sm:e.styles.maxWidthSm,md:e.styles.maxWidthMd,lg:e.styles.maxWidthLg,full:e.styles.maxWidthFull}[x],q=i.useMemo(()=>_.buildInitialValues(S),[]),[w,o]=i.useReducer(D,{values:q,errors:{},currentStep:0,isSubmitting:!1,submitResult:null}),{values:u,errors:T,currentStep:m,isSubmitting:b,submitResult:n}=w,y=S.length,k=y>1,f=m===y-1,I=(m+1)/y*100,a=S[m],O=i.useCallback((l,d)=>{o({type:"SET_VALUE",name:l,value:d})},[]),U=i.useCallback(()=>{const l=_.validateStep(a.fields,u);if(Object.keys(l).length>0){o({type:"SET_ERRORS",errors:l});return}o({type:"NEXT_STEP"})},[a.fields,u]),V=i.useCallback(()=>{o({type:"PREV_STEP"})},[]),R=i.useCallback(async()=>{const l=_.validateStep(a.fields,u);if(Object.keys(l).length>0){o({type:"SET_ERRORS",errors:l});return}o({type:"SET_SUBMITTING",value:!0});try{const d=await v(u);o({type:"SET_RESULT",result:d})}catch{o({type:"SET_RESULT",result:{success:!1,message:p}})}},[a.fields,u,v,p]);return n!=null&&n.success?t.jsx("section",{id:r,className:`${e.styles.formBlock} ${N}`,children:t.jsx("div",{className:`${e.styles.formInner} ${j}`,children:t.jsx("div",{className:e.styles.container,children:t.jsxs("div",{className:e.styles.success,children:[t.jsx("p",{children:n.message??P}),t.jsx(E.Button,{as:"button",variant:"secondary",onClick:()=>o({type:"RESET"}),children:"Submit another response"})]})})})}):t.jsx("section",{id:r,className:`${e.styles.formBlock} ${N}`,children:t.jsx("div",{className:`${e.styles.formInner} ${j}`,children:t.jsxs("div",{className:e.styles.container,children:[((s==null?void 0:s.title)||(s==null?void 0:s.description))&&t.jsxs("div",{className:e.styles.heading,children:[s.eyebrow&&(c==null?void 0:c({blocks:s.eyebrow,className:e.styles.eyebrow})),s.title&&(c==null?void 0:c({blocks:s.title,className:e.styles.title})),s.description&&(c==null?void 0:c({blocks:s.description}))]}),k&&t.jsxs("div",{className:e.styles.progress,children:[t.jsxs("div",{className:e.styles.progressHeader,children:[t.jsx("span",{className:e.styles.stepLabel,children:a.title}),t.jsxs("span",{className:e.styles.stepCount,children:[m+1," / ",y]})]}),t.jsx(M.ProgressBar,{progress:I,variant:"primary",size:"sm",showLabel:!1})]}),a.description&&t.jsx("p",{className:e.styles.stepDescription,children:a.description}),n&&!n.success&&t.jsx("div",{className:e.styles.errorBanner,role:"alert",children:n.message??p}),t.jsxs(W.Form,{layout:B,noValidate:!0,onSubmit:l=>{l.preventDefault(),f?R():U()},children:[t.jsx("div",{className:e.styles.fields,children:a.fields.map(l=>t.jsx(e.FormField,{field:l,value:u[l.name.current],error:T[l.name.current],onChange:O},l._key))}),(s==null?void 0:s.disclaimer)&&(c==null?void 0:c({blocks:s==null?void 0:s.disclaimer,className:e.styles.disclaimer})),t.jsxs("div",{className:e.styles.actions,children:[k&&m>0&&t.jsx(E.Button,{as:"button",type:"button",variant:"secondary",onClick:V,disabled:b,children:L}),t.jsx(E.Button,{as:"button",type:"submit",variant:"primary",disabled:b,className:e.styles.submitButton,children:b?"Submitting…":f?C:F})]})]})]})})})}exports.FormBlock=G;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("react/jsx-runtime"),i=require("react"),W=require("../../../core/components/Form/index.cjs"),E=require("../../../index-0SVQqhAg.cjs"),M=require("../../../core/components/ProgressBar/index.cjs"),A=require("../../hooks/useStyleClasses.cjs"),e=require("../../../FormField-Cy_aF1xz.cjs"),_=require("./validate.cjs");function D(r,s){switch(s.type){case"SET_VALUE":return{...r,values:{...r.values,[s.name]:s.value},errors:{...r.errors,[s.name]:""}};case"SET_ERRORS":return{...r,errors:s.errors};case"CLEAR_ERROR":return{...r,errors:{...r.errors,[s.name]:""}};case"NEXT_STEP":return{...r,currentStep:r.currentStep+1,errors:{}};case"PREV_STEP":return{...r,currentStep:r.currentStep-1,errors:{}};case"SET_SUBMITTING":return{...r,isSubmitting:s.value};case"SET_RESULT":return{...r,submitResult:s.result,isSubmitting:!1};case"RESET":return{...r,currentStep:0,errors:{},submitResult:null,isSubmitting:!1};default:return r}}function G({id:r,heading:s,layout:B="vertical",maxWidth:x="md",steps:S,submitLabel:C="Submit",nextLabel:F="Next",backLabel:L="Back",successMessage:P="Thank you! Your submission has been received.",errorMessage:p="Something went wrong. Please try again.",styleOptions:$,renderRichText:c,onSubmit:v}){const N=A.useStyleClasses($??{}),j={sm:e.styles.maxWidthSm,md:e.styles.maxWidthMd,lg:e.styles.maxWidthLg,full:e.styles.maxWidthFull}[x],q=i.useMemo(()=>_.buildInitialValues(S),[]),[w,o]=i.useReducer(D,{values:q,errors:{},currentStep:0,isSubmitting:!1,submitResult:null}),{values:u,errors:T,currentStep:m,isSubmitting:b,submitResult:n}=w,y=S.length,k=y>1,f=m===y-1,I=(m+1)/y*100,a=S[m],O=i.useCallback((l,d)=>{o({type:"SET_VALUE",name:l,value:d})},[]),U=i.useCallback(()=>{const l=_.validateStep(a.fields,u);if(Object.keys(l).length>0){o({type:"SET_ERRORS",errors:l});return}o({type:"NEXT_STEP"})},[a.fields,u]),V=i.useCallback(()=>{o({type:"PREV_STEP"})},[]),R=i.useCallback(async()=>{const l=_.validateStep(a.fields,u);if(Object.keys(l).length>0){o({type:"SET_ERRORS",errors:l});return}o({type:"SET_SUBMITTING",value:!0});try{const d=await v(u);o({type:"SET_RESULT",result:d})}catch{o({type:"SET_RESULT",result:{success:!1,message:p}})}},[a.fields,u,v,p]);return n!=null&&n.success?t.jsx("section",{id:r,className:`${e.styles.formBlock} ${N}`,children:t.jsx("div",{className:`${e.styles.formInner} ${j}`,children:t.jsx("div",{className:e.styles.container,children:t.jsxs("div",{className:e.styles.success,children:[t.jsx("p",{children:n.message??P}),t.jsx(E.Button,{as:"button",variant:"secondary",onClick:()=>o({type:"RESET"}),children:"Submit another response"})]})})})}):t.jsx("section",{id:r,className:`${e.styles.formBlock} ${N}`,children:t.jsx("div",{className:`${e.styles.formInner} ${j}`,children:t.jsxs("div",{className:e.styles.container,children:[((s==null?void 0:s.title)||(s==null?void 0:s.description))&&t.jsxs("div",{className:e.styles.heading,children:[s.eyebrow&&(c==null?void 0:c({blocks:s.eyebrow,className:e.styles.eyebrow})),s.title&&(c==null?void 0:c({blocks:s.title,className:e.styles.title})),s.description&&(c==null?void 0:c({blocks:s.description}))]}),k&&t.jsxs("div",{className:e.styles.progress,children:[t.jsxs("div",{className:e.styles.progressHeader,children:[t.jsx("span",{className:e.styles.stepLabel,children:a.title}),t.jsxs("span",{className:e.styles.stepCount,children:[m+1," / ",y]})]}),t.jsx(M.ProgressBar,{progress:I,variant:"primary",size:"sm",showLabel:!1})]}),a.description&&t.jsx("p",{className:e.styles.stepDescription,children:a.description}),n&&!n.success&&t.jsx("div",{className:e.styles.errorBanner,role:"alert",children:n.message??p}),t.jsxs(W.Form,{layout:B,noValidate:!0,onSubmit:l=>{l.preventDefault(),f?R():U()},children:[t.jsx("div",{className:e.styles.fields,children:a.fields.map(l=>t.jsx(e.FormField,{field:l,value:u[l.name.current],error:T[l.name.current],onChange:O},l._key))}),(s==null?void 0:s.disclaimer)&&(c==null?void 0:c({blocks:s==null?void 0:s.disclaimer,className:e.styles.disclaimer})),t.jsxs("div",{className:e.styles.actions,children:[k&&m>0&&t.jsx(E.Button,{as:"button",type:"button",variant:"secondary",onClick:V,disabled:b,children:L}),t.jsx(E.Button,{as:"button",type:"submit",variant:"primary",disabled:b,className:e.styles.submitButton,children:b?"Submitting…":f?C:F})]})]})]})})})}exports.FormBlock=G;
@@ -4,7 +4,7 @@ import { Form as X } from "../../../core/components/Form/index.mjs";
4
4
  import { B as d } from "../../../index-aWdsapYP.js";
5
5
  import { ProgressBar as z } from "../../../core/components/ProgressBar/index.mjs";
6
6
  import { useStyleClasses as H } from "../../hooks/useStyleClasses.mjs";
7
- import { s as r, F as Y } from "../../../FormField-UFRNSSdw.js";
7
+ import { s as r, F as Y } from "../../../FormField-CWdr56Tp.js";
8
8
  import { buildInitialValues as h, validateStep as L } from "./validate.mjs";
9
9
  function q(e, s) {
10
10
  switch (s.type) {
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "quirk-ui",
3
3
  "private": false,
4
- "version": "0.1.176",
4
+ "version": "0.1.177",
5
5
  "type": "module",
6
6
  "exports": {
7
7
  ".": {
@@ -1 +0,0 @@
1
- "use strict";require('./FormField.css');const l=require("react/jsx-runtime"),v=require("./core/components/Input/index.cjs"),q=require("./core/components/Textarea/index.cjs"),_=require("./core/components/Select/index.cjs"),b=require("./core/components/Checkbox/index.cjs"),T=require("./core/components/Radio/index.cjs"),h=require("./core/components/Fieldset/index.cjs"),k=require("./core/components/DatePicker/index.cjs"),W=require("./core/components/Range/index.cjs"),F="_formBlock_1jbl0_1",C="_container_1jbl0_7",w="_formInner_1jbl0_20",L="_maxWidthSm_1jbl0_26",y="_maxWidthMd_1jbl0_29",S="_maxWidthLg_1jbl0_32",B="_maxWidthFull_1jbl0_35",$="_heading_1jbl0_41",H="_eyebrow_1jbl0_47",G="_title_1jbl0_51",I="_disclaimer_1jbl0_55",M="_progress_1jbl0_61",D="_progressHeader_1jbl0_67",O="_stepLabel_1jbl0_73",P="_stepCount_1jbl0_79",R="_stepDescription_1jbl0_84",V="_fields_1jbl0_92",f="_fieldFull_1jbl0_99",N="_fieldHalf_1jbl0_103",z="_fieldThird_1jbl0_111",A="_actions_1jbl0_121",E="_submitButton_1jbl0_128",J="_success_1jbl0_134",K="_errorBanner_1jbl0_149",u={formBlock:F,container:C,formInner:w,maxWidthSm:L,maxWidthMd:y,maxWidthLg:S,maxWidthFull:B,heading:$,eyebrow:H,title:G,disclaimer:I,progress:M,progressHeader:D,stepLabel:O,stepCount:P,stepDescription:R,fields:V,fieldFull:f,fieldHalf:N,fieldThird:z,actions:A,submitButton:E,success:J,errorBanner:K};function i(e){return(e??[]).map(n=>({label:n.label,value:n.value.current,disabled:n.disabled}))}function p(e){return(e??[]).map(n=>({label:n.label,options:n.options.map(s=>({label:s.label,value:s.value.current,disabled:s.disabled}))}))}function Q({field:e,value:n,error:s,onChange:o}){const r=e.name.current,m={full:u.fieldFull,half:u.fieldHalf,third:u.fieldThird}[e.width??"full"],c={id:r,name:r,label:e.label,required:e.required,disabled:e.disabled,helperText:e.helperText,error:s},d=()=>{switch(e.fieldType){case"text":case"email":case"phone":case"number":case"url":return l.jsx(v.Input,{...c,type:e.fieldType==="phone"?"tel":e.fieldType,placeholder:e.placeholder,value:n??"",minLength:e.minLength,maxLength:e.maxLength,fullWidth:!0,onChange:t=>o(r,t.target.value)});case"textarea":return l.jsx(q.Textarea,{...c,placeholder:e.placeholder,value:n??"",rows:e.rows??4,maxLength:e.maxLength,showCharCount:e.showCharCount,fullWidth:!0,onChange:t=>o(r,t.target.value)});case"select":{const t=e.useOptionGroups?p(e.optionGroups):i(e.options);return l.jsx(_.Select,{...c,placeholder:e.placeholder,options:t,value:n??"",fullWidth:!0,onChange:a=>o(r,a.target.value)})}case"multiselect":{const t=e.useOptionGroups?p(e.optionGroups):i(e.options);return l.jsx(_.Select,{...c,multiple:!0,options:t,value:n??[],showSelectedCount:!0,onChange:a=>o(r,a)})}case"checkbox":return l.jsx(b.Checkbox,{id:c.id,name:c.name,label:e.label,required:e.required,disabled:e.disabled,helperText:s??e.helperText,error:!!s,checked:n??!1,onChange:t=>o(r,t.target.checked)});case"checkboxGroup":{const t=n??[];return l.jsx(h.Fieldset,{legend:e.label,error:!!s,helperText:s,children:i(e.options).map(a=>l.jsx(b.Checkbox,{id:`${r}-${a.value}`,name:`${r}[]`,label:a.label,checked:t.includes(a.value),disabled:a.disabled||e.disabled,onChange:x=>{const j=x.target.checked?[...t,a.value]:t.filter(g=>g!==a.value);o(r,j)}},a.value))})}case"radio":return l.jsx(h.Fieldset,{legend:e.label,error:!!s,helperText:s,children:i(e.options).map(t=>l.jsx(T.Radio,{id:`${r}-${t.value}`,name:r,value:t.value,label:t.label,checked:n===t.value,disabled:t.disabled||e.disabled,required:e.required,onChange:()=>o(r,t.value)},t.value))});case"date":return l.jsx(k.DatePicker,{id:c.id,name:c.name,label:e.label,required:e.required,disabled:e.disabled,helperText:s??e.helperText,error:!!s,value:n??null,onChange:t=>o(r,t)});case"range":return l.jsx(W.Range,{...c,value:n??e.rangeMin??0,min:e.rangeMin??0,max:e.rangeMax??100,step:e.rangeStep??1,valuePrefix:e.rangeValuePrefix,valueSuffix:e.rangeValueSuffix,showValue:!0,onChange:t=>o(r,t)});case"hidden":return l.jsx("input",{type:"hidden",name:r,value:n??e.hiddenValue??""});default:return null}};return e.fieldType==="hidden"?d():l.jsx("div",{className:`${m}`,children:d()})}exports.FormField=Q;exports.styles=u;