@axtec/components 0.1.7 → 0.1.10

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 (158) hide show
  1. package/README.md +1 -0
  2. package/dist/components/AgentChat/AgentChat.d.ts +32 -0
  3. package/dist/components/AgentChat/index.d.ts +1 -0
  4. package/dist/components/AgentPanel/AgentPanel.d.ts +44 -0
  5. package/dist/components/AgentPanel/index.d.ts +1 -0
  6. package/dist/components/OptionDivider/OptionDivider.d.ts +2 -1
  7. package/dist/components/index.d.ts +2 -0
  8. package/dist/index.css +1 -1
  9. package/dist/index.js +161 -157
  10. package/dist/index.js.map +1 -1
  11. package/dist/index10.js +77 -99
  12. package/dist/index10.js.map +1 -1
  13. package/dist/index11.js +91 -36
  14. package/dist/index11.js.map +1 -1
  15. package/dist/index12.js +97 -75
  16. package/dist/index12.js.map +1 -1
  17. package/dist/index13.js +38 -24
  18. package/dist/index13.js.map +1 -1
  19. package/dist/index14.js +76 -16
  20. package/dist/index14.js.map +1 -1
  21. package/dist/index15.js +24 -38
  22. package/dist/index15.js.map +1 -1
  23. package/dist/index16.js +18 -72
  24. package/dist/index16.js.map +1 -1
  25. package/dist/index17.js +36 -47
  26. package/dist/index17.js.map +1 -1
  27. package/dist/index18.js +73 -13
  28. package/dist/index18.js.map +1 -1
  29. package/dist/index19.js +47 -151
  30. package/dist/index19.js.map +1 -1
  31. package/dist/index20.js +12 -17
  32. package/dist/index20.js.map +1 -1
  33. package/dist/index21.js +148 -40
  34. package/dist/index21.js.map +1 -1
  35. package/dist/index22.js +18 -50
  36. package/dist/index22.js.map +1 -1
  37. package/dist/index23.js +41 -74
  38. package/dist/index23.js.map +1 -1
  39. package/dist/index24.js +46 -216
  40. package/dist/index24.js.map +1 -1
  41. package/dist/index25.js +73 -46
  42. package/dist/index25.js.map +1 -1
  43. package/dist/index26.js +212 -70
  44. package/dist/index26.js.map +1 -1
  45. package/dist/index27.js +51 -23
  46. package/dist/index27.js.map +1 -1
  47. package/dist/index28.js +74 -74
  48. package/dist/index28.js.map +1 -1
  49. package/dist/index29.js +19 -28
  50. package/dist/index29.js.map +1 -1
  51. package/dist/index3.js +2 -2
  52. package/dist/index30.js +62 -76
  53. package/dist/index30.js.map +1 -1
  54. package/dist/index31.js +28 -55
  55. package/dist/index31.js.map +1 -1
  56. package/dist/index32.js +87 -40
  57. package/dist/index32.js.map +1 -1
  58. package/dist/index33.js +57 -45
  59. package/dist/index33.js.map +1 -1
  60. package/dist/index34.js +40 -47
  61. package/dist/index34.js.map +1 -1
  62. package/dist/index35.js +47 -27
  63. package/dist/index35.js.map +1 -1
  64. package/dist/index36.js +52 -54
  65. package/dist/index36.js.map +1 -1
  66. package/dist/index37.js +28 -49
  67. package/dist/index37.js.map +1 -1
  68. package/dist/index38.js +54 -13
  69. package/dist/index38.js.map +1 -1
  70. package/dist/index39.js +46 -79
  71. package/dist/index39.js.map +1 -1
  72. package/dist/index40.js +13 -49
  73. package/dist/index40.js.map +1 -1
  74. package/dist/index41.js +80 -17
  75. package/dist/index41.js.map +1 -1
  76. package/dist/index42.js +48 -33
  77. package/dist/index42.js.map +1 -1
  78. package/dist/index43.js +17 -11
  79. package/dist/index43.js.map +1 -1
  80. package/dist/index44.js +34 -15
  81. package/dist/index44.js.map +1 -1
  82. package/dist/index45.js +16 -89
  83. package/dist/index45.js.map +1 -1
  84. package/dist/index46.js +15 -69
  85. package/dist/index46.js.map +1 -1
  86. package/dist/index47.js +85 -116
  87. package/dist/index47.js.map +1 -1
  88. package/dist/index48.js +69 -40
  89. package/dist/index48.js.map +1 -1
  90. package/dist/index49.js +120 -42
  91. package/dist/index49.js.map +1 -1
  92. package/dist/index5.js +1 -1
  93. package/dist/index50.js +39 -55
  94. package/dist/index50.js.map +1 -1
  95. package/dist/index51.js +39 -11
  96. package/dist/index51.js.map +1 -1
  97. package/dist/index52.js +53 -62
  98. package/dist/index52.js.map +1 -1
  99. package/dist/index53.js +16 -54
  100. package/dist/index53.js.map +1 -1
  101. package/dist/index54.js +64 -36
  102. package/dist/index54.js.map +1 -1
  103. package/dist/index55.js +54 -66
  104. package/dist/index55.js.map +1 -1
  105. package/dist/index56.js +37 -22
  106. package/dist/index56.js.map +1 -1
  107. package/dist/index57.js +63 -101
  108. package/dist/index57.js.map +1 -1
  109. package/dist/index58.js +16 -67
  110. package/dist/index58.js.map +1 -1
  111. package/dist/index59.js +99 -213
  112. package/dist/index59.js.map +1 -1
  113. package/dist/index6.js +1 -1
  114. package/dist/index60.js +67 -62
  115. package/dist/index60.js.map +1 -1
  116. package/dist/index61.js +206 -224
  117. package/dist/index61.js.map +1 -1
  118. package/dist/index62.js +62 -96
  119. package/dist/index62.js.map +1 -1
  120. package/dist/index63.js +233 -33
  121. package/dist/index63.js.map +1 -1
  122. package/dist/index64.js +98 -14
  123. package/dist/index64.js.map +1 -1
  124. package/dist/index65.js +35 -59
  125. package/dist/index65.js.map +1 -1
  126. package/dist/index66.js +16 -59
  127. package/dist/index66.js.map +1 -1
  128. package/dist/index67.js +57 -72
  129. package/dist/index67.js.map +1 -1
  130. package/dist/index68.js +58 -106
  131. package/dist/index68.js.map +1 -1
  132. package/dist/index69.js +70 -43
  133. package/dist/index69.js.map +1 -1
  134. package/dist/index7.js +157 -69
  135. package/dist/index7.js.map +1 -1
  136. package/dist/index70.js +101 -40
  137. package/dist/index70.js.map +1 -1
  138. package/dist/index71.js +44 -72
  139. package/dist/index71.js.map +1 -1
  140. package/dist/index72.js +47 -53
  141. package/dist/index72.js.map +1 -1
  142. package/dist/index73.js +70 -62
  143. package/dist/index73.js.map +1 -1
  144. package/dist/index74.js +46 -28
  145. package/dist/index74.js.map +1 -1
  146. package/dist/index75.js +67 -13
  147. package/dist/index75.js.map +1 -1
  148. package/dist/index76.js +35 -2263
  149. package/dist/index76.js.map +1 -1
  150. package/dist/index77.js +17 -0
  151. package/dist/index77.js.map +1 -0
  152. package/dist/index78.js +2267 -0
  153. package/dist/index78.js.map +1 -0
  154. package/dist/index8.js +377 -70
  155. package/dist/index8.js.map +1 -1
  156. package/dist/index9.js +60 -77
  157. package/dist/index9.js.map +1 -1
  158. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"index54.js","sources":["../src/components/Row/Row.tsx"],"sourcesContent":["import { type ReactNode } from 'react'\nimport { cn } from '@/lib/utils'\n\nexport interface RowProps {\n children: ReactNode\n height?: number | string\n className?: string\n gap?: number\n align?: 'start' | 'center' | 'end' | 'stretch'\n justify?: 'start' | 'center' | 'end' | 'between' | 'around'\n}\n\nconst alignStyles = {\n start: 'items-start',\n center: 'items-center',\n end: 'items-end',\n stretch: 'items-stretch',\n}\n\nconst justifyStyles = {\n start: 'justify-start',\n center: 'justify-center',\n end: 'justify-end',\n between: 'justify-between',\n around: 'justify-around',\n}\n\nexport const Row = ({\n children,\n height = 48,\n className,\n gap,\n align = 'center',\n justify = 'start',\n}: RowProps) => {\n return (\n <div\n className={cn(\n 'flex flex-row w-full',\n alignStyles[align],\n justifyStyles[justify],\n className\n )}\n style={{\n height: typeof height === 'number' ? `${height}px` : height,\n gap: gap ? `${gap}px` : undefined,\n }}\n >\n {children}\n </div>\n )\n}\n"],"names":["alignStyles","justifyStyles","Row","children","height","className","gap","align","justify","jsx","cn"],"mappings":";;AAYA,MAAMA,IAAc;AAAA,EAClB,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,KAAK;AAAA,EACL,SAAS;AACX,GAEMC,IAAgB;AAAA,EACpB,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,KAAK;AAAA,EACL,SAAS;AAAA,EACT,QAAQ;AACV,GAEaC,IAAM,CAAC;AAAA,EAClB,UAAAC;AAAA,EACA,QAAAC,IAAS;AAAA,EACT,WAAAC;AAAA,EACA,KAAAC;AAAA,EACA,OAAAC,IAAQ;AAAA,EACR,SAAAC,IAAU;AACZ,MAEI,gBAAAC;AAAA,EAAC;AAAA,EAAA;AAAA,IACC,WAAWC;AAAA,MACT;AAAA,MACAV,EAAYO,CAAK;AAAA,MACjBN,EAAcO,CAAO;AAAA,MACrBH;AAAA,IAAA;AAAA,IAEF,OAAO;AAAA,MACL,QAAQ,OAAOD,KAAW,WAAW,GAAGA,CAAM,OAAOA;AAAA,MACrD,KAAKE,IAAM,GAAGA,CAAG,OAAO;AAAA,IAAA;AAAA,IAGzB,UAAAH;AAAA,EAAA;AAAA;"}
1
+ {"version":3,"file":"index54.js","sources":["../src/components/RadioGroup/RadioGroup.tsx"],"sourcesContent":["import { cn } from '@/lib/utils'\n\nexport interface RadioOption {\n value: string\n label: string\n description?: string\n disabled?: boolean\n}\n\nexport interface RadioGroupProps {\n options: RadioOption[]\n value?: string\n onChange?: (value: string) => void\n name: string\n orientation?: 'horizontal' | 'vertical'\n className?: string\n}\n\nexport function RadioGroup({\n options,\n value,\n onChange,\n name,\n orientation = 'vertical',\n className,\n}: RadioGroupProps) {\n return (\n <div\n className={cn(\n 'flex gap-3',\n orientation === 'vertical' ? 'flex-col' : 'flex-row flex-wrap',\n className\n )}\n role=\"radiogroup\"\n >\n {options.map((option) => (\n <label\n key={option.value}\n className={cn(\n 'flex items-start gap-3 cursor-pointer group',\n option.disabled && 'opacity-50 cursor-not-allowed'\n )}\n >\n <div className=\"relative flex-shrink-0 mt-0.5\">\n <input\n type=\"radio\"\n name={name}\n value={option.value}\n checked={value === option.value}\n onChange={() => onChange?.(option.value)}\n disabled={option.disabled}\n className=\"peer sr-only\"\n />\n <div\n className={cn(\n 'h-5 w-5 rounded-full border-2 transition-colors duration-200',\n 'flex items-center justify-center',\n 'peer-focus:ring-2 peer-focus:ring-primary-500 peer-focus:ring-offset-2',\n value === option.value\n ? 'border-primary-500'\n : 'border-slate-300 group-hover:border-slate-400'\n )}\n >\n {value === option.value && (\n <div className=\"h-2.5 w-2.5 rounded-full bg-primary-500\" />\n )}\n </div>\n </div>\n <div className=\"flex flex-col\">\n <span className=\"text-sm font-medium text-slate-900\">\n {option.label}\n </span>\n {option.description && (\n <span className=\"text-sm text-slate-500\">{option.description}</span>\n )}\n </div>\n </label>\n ))}\n </div>\n )\n}\n"],"names":["RadioGroup","options","value","onChange","name","orientation","className","jsx","cn","option","jsxs"],"mappings":";;AAkBO,SAASA,EAAW;AAAA,EACzB,SAAAC;AAAA,EACA,OAAAC;AAAA,EACA,UAAAC;AAAA,EACA,MAAAC;AAAA,EACA,aAAAC,IAAc;AAAA,EACd,WAAAC;AACF,GAAoB;AAClB,SACE,gBAAAC;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAWC;AAAA,QACT;AAAA,QACAH,MAAgB,aAAa,aAAa;AAAA,QAC1CC;AAAA,MAAA;AAAA,MAEF,MAAK;AAAA,MAEJ,UAAAL,EAAQ,IAAI,CAACQ,MACZ,gBAAAC;AAAA,QAAC;AAAA,QAAA;AAAA,UAEC,WAAWF;AAAA,YACT;AAAA,YACAC,EAAO,YAAY;AAAA,UAAA;AAAA,UAGrB,UAAA;AAAA,YAAA,gBAAAC,EAAC,OAAA,EAAI,WAAU,iCACb,UAAA;AAAA,cAAA,gBAAAH;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACC,MAAK;AAAA,kBACL,MAAAH;AAAA,kBACA,OAAOK,EAAO;AAAA,kBACd,SAASP,MAAUO,EAAO;AAAA,kBAC1B,UAAU,MAAMN,KAAA,gBAAAA,EAAWM,EAAO;AAAA,kBAClC,UAAUA,EAAO;AAAA,kBACjB,WAAU;AAAA,gBAAA;AAAA,cAAA;AAAA,cAEZ,gBAAAF;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACC,WAAWC;AAAA,oBACT;AAAA,oBACA;AAAA,oBACA;AAAA,oBACAN,MAAUO,EAAO,QACb,uBACA;AAAA,kBAAA;AAAA,kBAGL,gBAAUA,EAAO,SAChB,gBAAAF,EAAC,OAAA,EAAI,WAAU,0CAAA,CAA0C;AAAA,gBAAA;AAAA,cAAA;AAAA,YAE7D,GACF;AAAA,YACA,gBAAAG,EAAC,OAAA,EAAI,WAAU,iBACb,UAAA;AAAA,cAAA,gBAAAH,EAAC,QAAA,EAAK,WAAU,sCACb,UAAAE,EAAO,OACV;AAAA,cACCA,EAAO,eACN,gBAAAF,EAAC,UAAK,WAAU,0BAA0B,YAAO,YAAA,CAAY;AAAA,YAAA,EAAA,CAEjE;AAAA,UAAA;AAAA,QAAA;AAAA,QAtCKE,EAAO;AAAA,MAAA,CAwCf;AAAA,IAAA;AAAA,EAAA;AAGP;"}
package/dist/index55.js CHANGED
@@ -1,69 +1,57 @@
1
- import { jsxs as t, jsx as e } from "react/jsx-runtime";
2
- import { Dialog as x, DialogPanel as f, DialogTitle as h } from "@headlessui/react";
3
- import { cn as b } from "./index3.js";
4
- import { ArrowLeftIcon as p, XMarkIcon as u } from "@heroicons/react/24/outline";
5
- import { Button as N } from "./index17.js";
6
- const k = ({
7
- isOpen: o,
8
- onClose: a,
9
- title: d,
10
- children: n,
11
- onBack: r,
12
- onSkip: s,
13
- rightActions: i = [],
14
- className: c
15
- }) => /* @__PURE__ */ t(x, { open: o, onClose: a, className: "relative z-50", children: [
16
- /* @__PURE__ */ e("div", { className: "fixed inset-0 bg-black/50", "aria-hidden": "true" }),
17
- /* @__PURE__ */ e("div", { className: "fixed inset-0 flex items-center justify-center p-4", children: /* @__PURE__ */ t(
18
- f,
19
- {
20
- className: b(
21
- "bg-white rounded-lg shadow-xl w-full max-w-2xl max-h-[90vh] flex flex-col overflow-hidden",
22
- c
23
- ),
24
- children: [
25
- /* @__PURE__ */ t("div", { className: "flex items-center justify-between px-6 py-4 border-b border-slate-200", children: [
26
- /* @__PURE__ */ e("div", { className: "w-10", children: r && /* @__PURE__ */ e(
27
- "button",
28
- {
29
- onClick: r,
30
- className: "p-2 rounded-md hover:bg-slate-100 transition-colors",
31
- "aria-label": "Go back",
32
- children: /* @__PURE__ */ e(p, { className: "w-5 h-5 text-slate-500" })
33
- }
34
- ) }),
35
- /* @__PURE__ */ e(h, { className: "text-lg font-bold text-slate-900 flex-1 text-center", children: d }),
36
- /* @__PURE__ */ e("div", { className: "w-10 flex justify-end", children: s ? /* @__PURE__ */ e(
37
- "button",
38
- {
39
- onClick: s,
40
- className: "text-sm font-semibold text-slate-600 hover:text-slate-800",
41
- children: "Skip"
42
- }
43
- ) : /* @__PURE__ */ e(
44
- "button",
45
- {
46
- onClick: a,
47
- className: "p-2 rounded-md hover:bg-slate-100 transition-colors",
48
- "aria-label": "Close",
49
- children: /* @__PURE__ */ e(u, { className: "w-5 h-5 text-slate-500" })
50
- }
51
- ) })
52
- ] }),
53
- /* @__PURE__ */ e("div", { className: "flex-1 overflow-y-auto px-8 py-6", children: n }),
54
- i.length > 0 && /* @__PURE__ */ e("div", { className: "flex justify-end gap-2 px-8 py-4 border-t border-slate-200", children: i.map((l, m) => /* @__PURE__ */ e(
55
- N,
56
- {
57
- ...l,
58
- children: l.text || l.children
59
- },
60
- l.key || l.text || `action-${m}`
61
- )) })
62
- ]
63
- }
64
- ) })
65
- ] });
1
+ import { jsxs as S, jsx as e } from "react/jsx-runtime";
2
+ import { useState as M } from "react";
3
+ import { cn as r } from "./index3.js";
4
+ import { StarIcon as V } from "@heroicons/react/24/solid";
5
+ import { StarIcon as w } from "@heroicons/react/24/outline";
6
+ const y = {
7
+ sm: "w-4 h-4",
8
+ md: "w-6 h-6",
9
+ lg: "w-8 h-8"
10
+ }, E = ({
11
+ value: d = 0,
12
+ onChange: n,
13
+ max: a = 5,
14
+ size: p = "md",
15
+ readonly: t = !1,
16
+ label: l,
17
+ error: c,
18
+ className: h
19
+ }) => {
20
+ const [i, m] = M(null), x = (s) => {
21
+ !t && n && n(s);
22
+ }, b = (s) => {
23
+ t || m(s);
24
+ }, g = () => {
25
+ m(null);
26
+ }, v = i !== null ? i : d, u = y[p];
27
+ return /* @__PURE__ */ S("div", { className: r("flex flex-col", h), children: [
28
+ l && /* @__PURE__ */ e("span", { className: "text-sm font-semibold text-slate-700 mb-2", children: l }),
29
+ /* @__PURE__ */ e("div", { className: "flex items-center gap-1", children: Array.from({ length: a }, (s, f) => {
30
+ const o = f + 1, N = o <= v;
31
+ return /* @__PURE__ */ e(
32
+ "button",
33
+ {
34
+ type: "button",
35
+ onClick: () => x(o),
36
+ onMouseEnter: () => b(o),
37
+ onMouseLeave: g,
38
+ disabled: t,
39
+ className: r(
40
+ "p-0 border-0 bg-transparent",
41
+ t ? "cursor-default" : "cursor-pointer",
42
+ "transition-transform hover:scale-110",
43
+ "focus:outline-none focus:ring-2 focus:ring-primary-500 focus:ring-offset-1 rounded"
44
+ ),
45
+ "aria-label": `Rate ${o} out of ${a}`,
46
+ children: N ? /* @__PURE__ */ e(V, { className: r(u, "text-primary-500") }) : /* @__PURE__ */ e(w, { className: r(u, "text-slate-300") })
47
+ },
48
+ f
49
+ );
50
+ }) }),
51
+ c && /* @__PURE__ */ e("span", { className: "text-sm text-red-500 mt-1", children: c })
52
+ ] });
53
+ };
66
54
  export {
67
- k as ScrollableModal
55
+ E as Rating
68
56
  };
69
57
  //# sourceMappingURL=index55.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index55.js","sources":["../src/components/ScrollableModal/ScrollableModal.tsx"],"sourcesContent":["import { type ReactNode } from 'react'\nimport { Dialog, DialogPanel, DialogTitle } from '@headlessui/react'\nimport { cn } from '@/lib/utils'\nimport { XMarkIcon, ArrowLeftIcon } from '@heroicons/react/24/outline'\nimport { Button, type ButtonProps } from '../Button/Button'\n\nexport interface ScrollableModalAction extends Omit<ButtonProps, 'key'> {\n key?: string\n text?: string\n}\n\nexport interface ScrollableModalProps {\n isOpen: boolean\n onClose: () => void\n title?: string\n children: ReactNode\n onBack?: () => void\n onSkip?: () => void\n rightActions?: ScrollableModalAction[]\n className?: string\n}\n\nexport const ScrollableModal = ({\n isOpen,\n onClose,\n title,\n children,\n onBack,\n onSkip,\n rightActions = [],\n className,\n}: ScrollableModalProps) => {\n return (\n <Dialog open={isOpen} onClose={onClose} className=\"relative z-50\">\n {/* Backdrop */}\n <div className=\"fixed inset-0 bg-black/50\" aria-hidden=\"true\" />\n\n {/* Full-screen container */}\n <div className=\"fixed inset-0 flex items-center justify-center p-4\">\n <DialogPanel\n className={cn(\n 'bg-white rounded-lg shadow-xl w-full max-w-2xl max-h-[90vh] flex flex-col overflow-hidden',\n className\n )}\n >\n {/* Header */}\n <div className=\"flex items-center justify-between px-6 py-4 border-b border-slate-200\">\n <div className=\"w-10\">\n {onBack && (\n <button\n onClick={onBack}\n className=\"p-2 rounded-md hover:bg-slate-100 transition-colors\"\n aria-label=\"Go back\"\n >\n <ArrowLeftIcon className=\"w-5 h-5 text-slate-500\" />\n </button>\n )}\n </div>\n\n <DialogTitle className=\"text-lg font-bold text-slate-900 flex-1 text-center\">\n {title}\n </DialogTitle>\n\n <div className=\"w-10 flex justify-end\">\n {onSkip ? (\n <button\n onClick={onSkip}\n className=\"text-sm font-semibold text-slate-600 hover:text-slate-800\"\n >\n Skip\n </button>\n ) : (\n <button\n onClick={onClose}\n className=\"p-2 rounded-md hover:bg-slate-100 transition-colors\"\n aria-label=\"Close\"\n >\n <XMarkIcon className=\"w-5 h-5 text-slate-500\" />\n </button>\n )}\n </div>\n </div>\n\n {/* Scrollable Content */}\n <div className=\"flex-1 overflow-y-auto px-8 py-6\">\n {children}\n </div>\n\n {/* Footer Actions */}\n {rightActions.length > 0 && (\n <div className=\"flex justify-end gap-2 px-8 py-4 border-t border-slate-200\">\n {rightActions.map((action, index) => (\n <Button\n key={action.key || action.text || `action-${index}`}\n {...action}\n >\n {action.text || action.children}\n </Button>\n ))}\n </div>\n )}\n </DialogPanel>\n </div>\n </Dialog>\n )\n}\n"],"names":["ScrollableModal","isOpen","onClose","title","children","onBack","onSkip","rightActions","className","Dialog","jsx","jsxs","DialogPanel","cn","ArrowLeftIcon","DialogTitle","XMarkIcon","action","index","Button"],"mappings":";;;;;AAsBO,MAAMA,IAAkB,CAAC;AAAA,EAC9B,QAAAC;AAAA,EACA,SAAAC;AAAA,EACA,OAAAC;AAAA,EACA,UAAAC;AAAA,EACA,QAAAC;AAAA,EACA,QAAAC;AAAA,EACA,cAAAC,IAAe,CAAA;AAAA,EACf,WAAAC;AACF,wBAEKC,GAAA,EAAO,MAAMR,GAAQ,SAAAC,GAAkB,WAAU,iBAEhD,UAAA;AAAA,EAAA,gBAAAQ,EAAC,OAAA,EAAI,WAAU,6BAA4B,eAAY,QAAO;AAAA,EAG9D,gBAAAA,EAAC,OAAA,EAAI,WAAU,sDACb,UAAA,gBAAAC;AAAA,IAACC;AAAA,IAAA;AAAA,MACC,WAAWC;AAAA,QACT;AAAA,QACAL;AAAA,MAAA;AAAA,MAIF,UAAA;AAAA,QAAA,gBAAAG,EAAC,OAAA,EAAI,WAAU,yEACb,UAAA;AAAA,UAAA,gBAAAD,EAAC,OAAA,EAAI,WAAU,QACZ,UAAAL,KACC,gBAAAK;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,SAASL;AAAA,cACT,WAAU;AAAA,cACV,cAAW;AAAA,cAEX,UAAA,gBAAAK,EAACI,GAAA,EAAc,WAAU,yBAAA,CAAyB;AAAA,YAAA;AAAA,UAAA,GAGxD;AAAA,UAEA,gBAAAJ,EAACK,GAAA,EAAY,WAAU,uDACpB,UAAAZ,GACH;AAAA,UAEA,gBAAAO,EAAC,OAAA,EAAI,WAAU,yBACZ,UAAAJ,IACC,gBAAAI;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,SAASJ;AAAA,cACT,WAAU;AAAA,cACX,UAAA;AAAA,YAAA;AAAA,UAAA,IAID,gBAAAI;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,SAASR;AAAA,cACT,WAAU;AAAA,cACV,cAAW;AAAA,cAEX,UAAA,gBAAAQ,EAACM,GAAA,EAAU,WAAU,yBAAA,CAAyB;AAAA,YAAA;AAAA,UAAA,EAChD,CAEJ;AAAA,QAAA,GACF;AAAA,QAGA,gBAAAN,EAAC,OAAA,EAAI,WAAU,oCACZ,UAAAN,EAAA,CACH;AAAA,QAGCG,EAAa,SAAS,KACrB,gBAAAG,EAAC,OAAA,EAAI,WAAU,8DACZ,UAAAH,EAAa,IAAI,CAACU,GAAQC,MACzB,gBAAAR;AAAA,UAACS;AAAA,UAAA;AAAA,YAEE,GAAGF;AAAA,YAEH,UAAAA,EAAO,QAAQA,EAAO;AAAA,UAAA;AAAA,UAHlBA,EAAO,OAAOA,EAAO,QAAQ,UAAUC,CAAK;AAAA,QAAA,CAKpD,EAAA,CACH;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA,EAEJ,CACF;AAAA,GACF;"}
1
+ {"version":3,"file":"index55.js","sources":["../src/components/Rating/Rating.tsx"],"sourcesContent":["import { useState } from 'react'\nimport { cn } from '@/lib/utils'\nimport { StarIcon as StarSolid } from '@heroicons/react/24/solid'\nimport { StarIcon as StarOutline } from '@heroicons/react/24/outline'\n\nexport interface RatingProps {\n value?: number\n onChange?: (rating: number) => void\n max?: number\n size?: 'sm' | 'md' | 'lg'\n readonly?: boolean\n label?: string\n error?: string\n className?: string\n}\n\nconst sizeStyles = {\n sm: 'w-4 h-4',\n md: 'w-6 h-6',\n lg: 'w-8 h-8',\n}\n\nexport const Rating = ({\n value = 0,\n onChange,\n max = 5,\n size = 'md',\n readonly = false,\n label,\n error,\n className,\n}: RatingProps) => {\n const [hoverValue, setHoverValue] = useState<number | null>(null)\n\n const handleClick = (rating: number) => {\n if (!readonly && onChange) {\n onChange(rating)\n }\n }\n\n const handleMouseEnter = (rating: number) => {\n if (!readonly) {\n setHoverValue(rating)\n }\n }\n\n const handleMouseLeave = () => {\n setHoverValue(null)\n }\n\n const displayValue = hoverValue !== null ? hoverValue : value\n const iconClass = sizeStyles[size]\n\n return (\n <div className={cn('flex flex-col', className)}>\n {label && (\n <span className=\"text-sm font-semibold text-slate-700 mb-2\">\n {label}\n </span>\n )}\n <div className=\"flex items-center gap-1\">\n {Array.from({ length: max }, (_, index) => {\n const starValue = index + 1\n const isFilled = starValue <= displayValue\n\n return (\n <button\n key={index}\n type=\"button\"\n onClick={() => handleClick(starValue)}\n onMouseEnter={() => handleMouseEnter(starValue)}\n onMouseLeave={handleMouseLeave}\n disabled={readonly}\n className={cn(\n 'p-0 border-0 bg-transparent',\n readonly ? 'cursor-default' : 'cursor-pointer',\n 'transition-transform hover:scale-110',\n 'focus:outline-none focus:ring-2 focus:ring-primary-500 focus:ring-offset-1 rounded'\n )}\n aria-label={`Rate ${starValue} out of ${max}`}\n >\n {isFilled ? (\n <StarSolid className={cn(iconClass, 'text-primary-500')} />\n ) : (\n <StarOutline className={cn(iconClass, 'text-slate-300')} />\n )}\n </button>\n )\n })}\n </div>\n {error && (\n <span className=\"text-sm text-red-500 mt-1\">{error}</span>\n )}\n </div>\n )\n}\n"],"names":["sizeStyles","Rating","value","onChange","max","size","readonly","label","error","className","hoverValue","setHoverValue","useState","handleClick","rating","handleMouseEnter","handleMouseLeave","displayValue","iconClass","cn","jsx","_","index","starValue","isFilled","StarSolid","StarOutline"],"mappings":";;;;;AAgBA,MAAMA,IAAa;AAAA,EACjB,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AACN,GAEaC,IAAS,CAAC;AAAA,EACrB,OAAAC,IAAQ;AAAA,EACR,UAAAC;AAAA,EACA,KAAAC,IAAM;AAAA,EACN,MAAAC,IAAO;AAAA,EACP,UAAAC,IAAW;AAAA,EACX,OAAAC;AAAA,EACA,OAAAC;AAAA,EACA,WAAAC;AACF,MAAmB;AACjB,QAAM,CAACC,GAAYC,CAAa,IAAIC,EAAwB,IAAI,GAE1DC,IAAc,CAACC,MAAmB;AACtC,IAAI,CAACR,KAAYH,KACfA,EAASW,CAAM;AAAA,EAEnB,GAEMC,IAAmB,CAACD,MAAmB;AAC3C,IAAKR,KACHK,EAAcG,CAAM;AAAA,EAExB,GAEME,IAAmB,MAAM;AAC7B,IAAAL,EAAc,IAAI;AAAA,EACpB,GAEMM,IAAeP,MAAe,OAAOA,IAAaR,GAClDgB,IAAYlB,EAAWK,CAAI;AAEjC,2BACG,OAAA,EAAI,WAAWc,EAAG,iBAAiBV,CAAS,GAC1C,UAAA;AAAA,IAAAF,KACC,gBAAAa,EAAC,QAAA,EAAK,WAAU,6CACb,UAAAb,GACH;AAAA,IAEF,gBAAAa,EAAC,OAAA,EAAI,WAAU,2BACZ,UAAA,MAAM,KAAK,EAAE,QAAQhB,EAAA,GAAO,CAACiB,GAAGC,MAAU;AACzC,YAAMC,IAAYD,IAAQ,GACpBE,IAAWD,KAAaN;AAE9B,aACE,gBAAAG;AAAA,QAAC;AAAA,QAAA;AAAA,UAEC,MAAK;AAAA,UACL,SAAS,MAAMP,EAAYU,CAAS;AAAA,UACpC,cAAc,MAAMR,EAAiBQ,CAAS;AAAA,UAC9C,cAAcP;AAAA,UACd,UAAUV;AAAA,UACV,WAAWa;AAAA,YACT;AAAA,YACAb,IAAW,mBAAmB;AAAA,YAC9B;AAAA,YACA;AAAA,UAAA;AAAA,UAEF,cAAY,QAAQiB,CAAS,WAAWnB,CAAG;AAAA,UAE1C,UAAAoB,IACC,gBAAAJ,EAACK,GAAA,EAAU,WAAWN,EAAGD,GAAW,kBAAkB,EAAA,CAAG,sBAExDQ,GAAA,EAAY,WAAWP,EAAGD,GAAW,gBAAgB,EAAA,CAAG;AAAA,QAAA;AAAA,QAjBtDI;AAAA,MAAA;AAAA,IAqBX,CAAC,EAAA,CACH;AAAA,IACCd,KACC,gBAAAY,EAAC,QAAA,EAAK,WAAU,6BAA6B,UAAAZ,EAAA,CAAM;AAAA,EAAA,GAEvD;AAEJ;"}
package/dist/index56.js CHANGED
@@ -1,25 +1,40 @@
1
- import { jsx as a } from "react/jsx-runtime";
2
- import { cn as i } from "./index3.js";
3
- function b({
4
- children: r,
5
- withBorder: e = !1,
6
- leftBorder: o = !1,
7
- className: t
8
- }) {
9
- return /* @__PURE__ */ a(
10
- "h2",
11
- {
12
- className: i(
13
- "text-2xl font-semibold text-slate-900",
14
- e && "pb-3 border-b-2 border-primary-500",
15
- o && "pl-3 border-l-4 border-primary-500",
16
- t
17
- ),
18
- children: r
19
- }
20
- );
21
- }
1
+ import { jsx as o } from "react/jsx-runtime";
2
+ import { cn as c } from "./index3.js";
3
+ const f = {
4
+ start: "items-start",
5
+ center: "items-center",
6
+ end: "items-end",
7
+ stretch: "items-stretch"
8
+ }, u = {
9
+ start: "justify-start",
10
+ center: "justify-center",
11
+ end: "justify-end",
12
+ between: "justify-between",
13
+ around: "justify-around"
14
+ }, y = ({
15
+ children: s,
16
+ height: t = 48,
17
+ className: r,
18
+ gap: e,
19
+ align: n = "center",
20
+ justify: i = "start"
21
+ }) => /* @__PURE__ */ o(
22
+ "div",
23
+ {
24
+ className: c(
25
+ "flex flex-row w-full",
26
+ f[n],
27
+ u[i],
28
+ r
29
+ ),
30
+ style: {
31
+ height: typeof t == "number" ? `${t}px` : t,
32
+ gap: e ? `${e}px` : void 0
33
+ },
34
+ children: s
35
+ }
36
+ );
22
37
  export {
23
- b as SectionHeading
38
+ y as Row
24
39
  };
25
40
  //# sourceMappingURL=index56.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index56.js","sources":["../src/components/Typography/SectionHeading.tsx"],"sourcesContent":["import { cn } from '@/lib/utils'\nimport type { ReactNode } from 'react'\n\nexport interface SectionHeadingProps {\n children: ReactNode\n /** Bottom border accent */\n withBorder?: boolean\n /** Left border accent (RealtorIQ style) */\n leftBorder?: boolean\n className?: string\n}\n\nexport function SectionHeading({\n children,\n withBorder = false,\n leftBorder = false,\n className,\n}: SectionHeadingProps) {\n return (\n <h2\n className={cn(\n 'text-2xl font-semibold text-slate-900',\n withBorder && 'pb-3 border-b-2 border-primary-500',\n leftBorder && 'pl-3 border-l-4 border-primary-500',\n className\n )}\n >\n {children}\n </h2>\n )\n}\n"],"names":["SectionHeading","children","withBorder","leftBorder","className","jsx","cn"],"mappings":";;AAYO,SAASA,EAAe;AAAA,EAC7B,UAAAC;AAAA,EACA,YAAAC,IAAa;AAAA,EACb,YAAAC,IAAa;AAAA,EACb,WAAAC;AACF,GAAwB;AACtB,SACE,gBAAAC;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAWC;AAAA,QACT;AAAA,QACAJ,KAAc;AAAA,QACdC,KAAc;AAAA,QACdC;AAAA,MAAA;AAAA,MAGD,UAAAH;AAAA,IAAA;AAAA,EAAA;AAGP;"}
1
+ {"version":3,"file":"index56.js","sources":["../src/components/Row/Row.tsx"],"sourcesContent":["import { type ReactNode } from 'react'\nimport { cn } from '@/lib/utils'\n\nexport interface RowProps {\n children: ReactNode\n height?: number | string\n className?: string\n gap?: number\n align?: 'start' | 'center' | 'end' | 'stretch'\n justify?: 'start' | 'center' | 'end' | 'between' | 'around'\n}\n\nconst alignStyles = {\n start: 'items-start',\n center: 'items-center',\n end: 'items-end',\n stretch: 'items-stretch',\n}\n\nconst justifyStyles = {\n start: 'justify-start',\n center: 'justify-center',\n end: 'justify-end',\n between: 'justify-between',\n around: 'justify-around',\n}\n\nexport const Row = ({\n children,\n height = 48,\n className,\n gap,\n align = 'center',\n justify = 'start',\n}: RowProps) => {\n return (\n <div\n className={cn(\n 'flex flex-row w-full',\n alignStyles[align],\n justifyStyles[justify],\n className\n )}\n style={{\n height: typeof height === 'number' ? `${height}px` : height,\n gap: gap ? `${gap}px` : undefined,\n }}\n >\n {children}\n </div>\n )\n}\n"],"names":["alignStyles","justifyStyles","Row","children","height","className","gap","align","justify","jsx","cn"],"mappings":";;AAYA,MAAMA,IAAc;AAAA,EAClB,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,KAAK;AAAA,EACL,SAAS;AACX,GAEMC,IAAgB;AAAA,EACpB,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,KAAK;AAAA,EACL,SAAS;AAAA,EACT,QAAQ;AACV,GAEaC,IAAM,CAAC;AAAA,EAClB,UAAAC;AAAA,EACA,QAAAC,IAAS;AAAA,EACT,WAAAC;AAAA,EACA,KAAAC;AAAA,EACA,OAAAC,IAAQ;AAAA,EACR,SAAAC,IAAU;AACZ,MAEI,gBAAAC;AAAA,EAAC;AAAA,EAAA;AAAA,IACC,WAAWC;AAAA,MACT;AAAA,MACAV,EAAYO,CAAK;AAAA,MACjBN,EAAcO,CAAO;AAAA,MACrBH;AAAA,IAAA;AAAA,IAEF,OAAO;AAAA,MACL,QAAQ,OAAOD,KAAW,WAAW,GAAGA,CAAM,OAAOA;AAAA,MACrD,KAAKE,IAAM,GAAGA,CAAG,OAAO;AAAA,IAAA;AAAA,IAGzB,UAAAH;AAAA,EAAA;AAAA;"}
package/dist/index57.js CHANGED
@@ -1,107 +1,69 @@
1
- import { jsxs as s, jsx as e, Fragment as f } from "react/jsx-runtime";
2
- import { Fragment as h } from "react";
3
- import { Listbox as x, ListboxButton as g, Transition as y, ListboxOptions as v, ListboxOption as N } from "@headlessui/react";
4
- import { ChevronUpDownIcon as w, CheckIcon as k } from "@heroicons/react/20/solid";
5
- import { cn as t } from "./index3.js";
6
- function S({
7
- options: n,
8
- value: i,
9
- onChange: m,
10
- label: c,
11
- placeholder: u = "Select an option",
12
- error: o,
13
- disabled: d,
14
- className: p
15
- }) {
16
- const a = n.find((r) => r.value === i);
17
- return /* @__PURE__ */ s("div", { className: t("w-full", p), children: [
18
- c && /* @__PURE__ */ e("label", { className: "block text-sm font-medium text-slate-700 mb-1.5", children: c }),
19
- /* @__PURE__ */ e(x, { value: i, onChange: m, disabled: d, children: /* @__PURE__ */ s("div", { className: "relative", children: [
20
- /* @__PURE__ */ s(
21
- g,
22
- {
23
- className: t(
24
- "relative w-full py-2.5 pl-4 pr-10 text-left text-base",
25
- "bg-white border rounded-lg cursor-pointer",
26
- "transition-colors duration-200",
27
- "focus:outline-none focus:ring-2 focus:ring-offset-0",
28
- o ? "border-red-500 focus:border-red-500 focus:ring-red-500" : "border-slate-300 focus:border-primary-500 focus:ring-primary-500",
29
- d && "bg-slate-50 cursor-not-allowed opacity-50"
30
- ),
31
- children: [
32
- /* @__PURE__ */ e(
33
- "span",
34
- {
35
- className: t(
36
- "block truncate",
37
- !a && "text-slate-400"
38
- ),
39
- children: (a == null ? void 0 : a.label) || u
40
- }
41
- ),
42
- /* @__PURE__ */ e("span", { className: "pointer-events-none absolute inset-y-0 right-0 flex items-center pr-3", children: /* @__PURE__ */ e(
43
- w,
44
- {
45
- className: "h-5 w-5 text-slate-400",
46
- "aria-hidden": "true"
47
- }
48
- ) })
49
- ]
50
- }
1
+ import { jsxs as t, jsx as e } from "react/jsx-runtime";
2
+ import { Dialog as x, DialogPanel as f, DialogTitle as h } from "@headlessui/react";
3
+ import { cn as b } from "./index3.js";
4
+ import { ArrowLeftIcon as p, XMarkIcon as u } from "@heroicons/react/24/outline";
5
+ import { Button as N } from "./index19.js";
6
+ const k = ({
7
+ isOpen: o,
8
+ onClose: a,
9
+ title: d,
10
+ children: n,
11
+ onBack: r,
12
+ onSkip: s,
13
+ rightActions: i = [],
14
+ className: c
15
+ }) => /* @__PURE__ */ t(x, { open: o, onClose: a, className: "relative z-50", children: [
16
+ /* @__PURE__ */ e("div", { className: "fixed inset-0 bg-black/50", "aria-hidden": "true" }),
17
+ /* @__PURE__ */ e("div", { className: "fixed inset-0 flex items-center justify-center p-4", children: /* @__PURE__ */ t(
18
+ f,
19
+ {
20
+ className: b(
21
+ "bg-white rounded-lg shadow-xl w-full max-w-2xl max-h-[90vh] flex flex-col overflow-hidden",
22
+ c
51
23
  ),
52
- /* @__PURE__ */ e(
53
- y,
54
- {
55
- as: h,
56
- leave: "transition ease-in duration-100",
57
- leaveFrom: "opacity-100",
58
- leaveTo: "opacity-0",
59
- children: /* @__PURE__ */ e(
60
- v,
24
+ children: [
25
+ /* @__PURE__ */ t("div", { className: "flex items-center justify-between px-6 py-4 border-b border-slate-200", children: [
26
+ /* @__PURE__ */ e("div", { className: "w-10", children: r && /* @__PURE__ */ e(
27
+ "button",
61
28
  {
62
- className: t(
63
- "absolute z-10 mt-1 w-full max-h-60 overflow-auto",
64
- "bg-white rounded-lg border border-slate-200 shadow-lg",
65
- "py-1 text-base",
66
- "focus:outline-none"
67
- ),
68
- children: n.map((r) => /* @__PURE__ */ e(
69
- N,
70
- {
71
- value: r.value,
72
- disabled: r.disabled,
73
- className: ({ active: l, selected: b }) => t(
74
- "relative cursor-pointer select-none py-2.5 pl-10 pr-4",
75
- "transition-colors duration-150",
76
- l && "bg-primary-50",
77
- b && "bg-primary-50 text-primary-900",
78
- r.disabled && "opacity-50 cursor-not-allowed"
79
- ),
80
- children: ({ selected: l }) => /* @__PURE__ */ s(f, { children: [
81
- /* @__PURE__ */ e(
82
- "span",
83
- {
84
- className: t(
85
- "block truncate",
86
- l ? "font-semibold" : "font-normal"
87
- ),
88
- children: r.label
89
- }
90
- ),
91
- l && /* @__PURE__ */ e("span", { className: "absolute inset-y-0 left-0 flex items-center pl-3 text-primary-600", children: /* @__PURE__ */ e(k, { className: "h-5 w-5", "aria-hidden": "true" }) })
92
- ] })
93
- },
94
- r.value
95
- ))
29
+ onClick: r,
30
+ className: "p-2 rounded-md hover:bg-slate-100 transition-colors",
31
+ "aria-label": "Go back",
32
+ children: /* @__PURE__ */ e(p, { className: "w-5 h-5 text-slate-500" })
96
33
  }
97
- )
98
- }
99
- )
100
- ] }) }),
101
- o && /* @__PURE__ */ e("p", { className: "mt-1.5 text-sm text-red-600", children: o })
102
- ] });
103
- }
34
+ ) }),
35
+ /* @__PURE__ */ e(h, { className: "text-lg font-bold text-slate-900 flex-1 text-center", children: d }),
36
+ /* @__PURE__ */ e("div", { className: "w-10 flex justify-end", children: s ? /* @__PURE__ */ e(
37
+ "button",
38
+ {
39
+ onClick: s,
40
+ className: "text-sm font-semibold text-slate-600 hover:text-slate-800",
41
+ children: "Skip"
42
+ }
43
+ ) : /* @__PURE__ */ e(
44
+ "button",
45
+ {
46
+ onClick: a,
47
+ className: "p-2 rounded-md hover:bg-slate-100 transition-colors",
48
+ "aria-label": "Close",
49
+ children: /* @__PURE__ */ e(u, { className: "w-5 h-5 text-slate-500" })
50
+ }
51
+ ) })
52
+ ] }),
53
+ /* @__PURE__ */ e("div", { className: "flex-1 overflow-y-auto px-8 py-6", children: n }),
54
+ i.length > 0 && /* @__PURE__ */ e("div", { className: "flex justify-end gap-2 px-8 py-4 border-t border-slate-200", children: i.map((l, m) => /* @__PURE__ */ e(
55
+ N,
56
+ {
57
+ ...l,
58
+ children: l.text || l.children
59
+ },
60
+ l.key || l.text || `action-${m}`
61
+ )) })
62
+ ]
63
+ }
64
+ ) })
65
+ ] });
104
66
  export {
105
- S as Select
67
+ k as ScrollableModal
106
68
  };
107
69
  //# sourceMappingURL=index57.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index57.js","sources":["../src/components/Select/Select.tsx"],"sourcesContent":["import { Fragment } from 'react'\nimport {\n Listbox,\n ListboxButton,\n ListboxOptions,\n ListboxOption,\n Transition,\n} from '@headlessui/react'\nimport { CheckIcon, ChevronUpDownIcon } from '@heroicons/react/20/solid'\nimport { cn } from '@/lib/utils'\n\nexport interface SelectOption {\n value: string\n label: string\n disabled?: boolean\n}\n\nexport interface SelectProps {\n options: SelectOption[]\n value?: string\n onChange?: (value: string) => void\n label?: string\n placeholder?: string\n error?: string\n disabled?: boolean\n className?: string\n}\n\nexport function Select({\n options,\n value,\n onChange,\n label,\n placeholder = 'Select an option',\n error,\n disabled,\n className,\n}: SelectProps) {\n const selectedOption = options.find((opt) => opt.value === value)\n\n return (\n <div className={cn('w-full', className)}>\n {label && (\n <label className=\"block text-sm font-medium text-slate-700 mb-1.5\">\n {label}\n </label>\n )}\n <Listbox value={value} onChange={onChange} disabled={disabled}>\n <div className=\"relative\">\n <ListboxButton\n className={cn(\n 'relative w-full py-2.5 pl-4 pr-10 text-left text-base',\n 'bg-white border rounded-lg cursor-pointer',\n 'transition-colors duration-200',\n 'focus:outline-none focus:ring-2 focus:ring-offset-0',\n error\n ? 'border-red-500 focus:border-red-500 focus:ring-red-500'\n : 'border-slate-300 focus:border-primary-500 focus:ring-primary-500',\n disabled && 'bg-slate-50 cursor-not-allowed opacity-50'\n )}\n >\n <span\n className={cn(\n 'block truncate',\n !selectedOption && 'text-slate-400'\n )}\n >\n {selectedOption?.label || placeholder}\n </span>\n <span className=\"pointer-events-none absolute inset-y-0 right-0 flex items-center pr-3\">\n <ChevronUpDownIcon\n className=\"h-5 w-5 text-slate-400\"\n aria-hidden=\"true\"\n />\n </span>\n </ListboxButton>\n <Transition\n as={Fragment}\n leave=\"transition ease-in duration-100\"\n leaveFrom=\"opacity-100\"\n leaveTo=\"opacity-0\"\n >\n <ListboxOptions\n className={cn(\n 'absolute z-10 mt-1 w-full max-h-60 overflow-auto',\n 'bg-white rounded-lg border border-slate-200 shadow-lg',\n 'py-1 text-base',\n 'focus:outline-none'\n )}\n >\n {options.map((option) => (\n <ListboxOption\n key={option.value}\n value={option.value}\n disabled={option.disabled}\n className={({ active, selected }) =>\n cn(\n 'relative cursor-pointer select-none py-2.5 pl-10 pr-4',\n 'transition-colors duration-150',\n active && 'bg-primary-50',\n selected && 'bg-primary-50 text-primary-900',\n option.disabled && 'opacity-50 cursor-not-allowed'\n )\n }\n >\n {({ selected }) => (\n <>\n <span\n className={cn(\n 'block truncate',\n selected ? 'font-semibold' : 'font-normal'\n )}\n >\n {option.label}\n </span>\n {selected && (\n <span className=\"absolute inset-y-0 left-0 flex items-center pl-3 text-primary-600\">\n <CheckIcon className=\"h-5 w-5\" aria-hidden=\"true\" />\n </span>\n )}\n </>\n )}\n </ListboxOption>\n ))}\n </ListboxOptions>\n </Transition>\n </div>\n </Listbox>\n {error && <p className=\"mt-1.5 text-sm text-red-600\">{error}</p>}\n </div>\n )\n}\n"],"names":["Select","options","value","onChange","label","placeholder","error","disabled","className","selectedOption","opt","cn","jsx","Listbox","jsxs","ListboxButton","ChevronUpDownIcon","Transition","Fragment","ListboxOptions","option","ListboxOption","active","selected","CheckIcon"],"mappings":";;;;;AA4BO,SAASA,EAAO;AAAA,EACrB,SAAAC;AAAA,EACA,OAAAC;AAAA,EACA,UAAAC;AAAA,EACA,OAAAC;AAAA,EACA,aAAAC,IAAc;AAAA,EACd,OAAAC;AAAA,EACA,UAAAC;AAAA,EACA,WAAAC;AACF,GAAgB;AACd,QAAMC,IAAiBR,EAAQ,KAAK,CAACS,MAAQA,EAAI,UAAUR,CAAK;AAEhE,2BACG,OAAA,EAAI,WAAWS,EAAG,UAAUH,CAAS,GACnC,UAAA;AAAA,IAAAJ,KACC,gBAAAQ,EAAC,SAAA,EAAM,WAAU,mDACd,UAAAR,GACH;AAAA,IAEF,gBAAAQ,EAACC,KAAQ,OAAAX,GAAc,UAAAC,GAAoB,UAAAI,GACzC,UAAA,gBAAAO,EAAC,OAAA,EAAI,WAAU,YACb,UAAA;AAAA,MAAA,gBAAAA;AAAA,QAACC;AAAA,QAAA;AAAA,UACC,WAAWJ;AAAA,YACT;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACAL,IACI,2DACA;AAAA,YACJC,KAAY;AAAA,UAAA;AAAA,UAGd,UAAA;AAAA,YAAA,gBAAAK;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,WAAWD;AAAA,kBACT;AAAA,kBACA,CAACF,KAAkB;AAAA,gBAAA;AAAA,gBAGpB,kCAAgB,UAASJ;AAAA,cAAA;AAAA,YAAA;AAAA,YAE5B,gBAAAO,EAAC,QAAA,EAAK,WAAU,yEACd,UAAA,gBAAAA;AAAA,cAACI;AAAA,cAAA;AAAA,gBACC,WAAU;AAAA,gBACV,eAAY;AAAA,cAAA;AAAA,YAAA,EACd,CACF;AAAA,UAAA;AAAA,QAAA;AAAA,MAAA;AAAA,MAEF,gBAAAJ;AAAA,QAACK;AAAA,QAAA;AAAA,UACC,IAAIC;AAAAA,UACJ,OAAM;AAAA,UACN,WAAU;AAAA,UACV,SAAQ;AAAA,UAER,UAAA,gBAAAN;AAAA,YAACO;AAAA,YAAA;AAAA,cACC,WAAWR;AAAA,gBACT;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA;AAAA,cAAA;AAAA,cAGD,UAAAV,EAAQ,IAAI,CAACmB,MACZ,gBAAAR;AAAA,gBAACS;AAAA,gBAAA;AAAA,kBAEC,OAAOD,EAAO;AAAA,kBACd,UAAUA,EAAO;AAAA,kBACjB,WAAW,CAAC,EAAE,QAAAE,GAAQ,UAAAC,QACpBZ;AAAA,oBACE;AAAA,oBACA;AAAA,oBACAW,KAAU;AAAA,oBACVC,KAAY;AAAA,oBACZH,EAAO,YAAY;AAAA,kBAAA;AAAA,kBAItB,UAAA,CAAC,EAAE,UAAAG,EAAA,MACF,gBAAAT,EAAAI,GAAA,EACE,UAAA;AAAA,oBAAA,gBAAAN;AAAA,sBAAC;AAAA,sBAAA;AAAA,wBACC,WAAWD;AAAA,0BACT;AAAA,0BACAY,IAAW,kBAAkB;AAAA,wBAAA;AAAA,wBAG9B,UAAAH,EAAO;AAAA,sBAAA;AAAA,oBAAA;AAAA,oBAETG,KACC,gBAAAX,EAAC,QAAA,EAAK,WAAU,qEACd,UAAA,gBAAAA,EAACY,GAAA,EAAU,WAAU,WAAU,eAAY,OAAA,CAAO,EAAA,CACpD;AAAA,kBAAA,EAAA,CAEJ;AAAA,gBAAA;AAAA,gBA5BGJ,EAAO;AAAA,cAAA,CA+Bf;AAAA,YAAA;AAAA,UAAA;AAAA,QACH;AAAA,MAAA;AAAA,IACF,EAAA,CACF,EAAA,CACF;AAAA,IACCd,KAAS,gBAAAM,EAAC,KAAA,EAAE,WAAU,+BAA+B,UAAAN,EAAA,CAAM;AAAA,EAAA,GAC9D;AAEJ;"}
1
+ {"version":3,"file":"index57.js","sources":["../src/components/ScrollableModal/ScrollableModal.tsx"],"sourcesContent":["import { type ReactNode } from 'react'\nimport { Dialog, DialogPanel, DialogTitle } from '@headlessui/react'\nimport { cn } from '@/lib/utils'\nimport { XMarkIcon, ArrowLeftIcon } from '@heroicons/react/24/outline'\nimport { Button, type ButtonProps } from '../Button/Button'\n\nexport interface ScrollableModalAction extends Omit<ButtonProps, 'key'> {\n key?: string\n text?: string\n}\n\nexport interface ScrollableModalProps {\n isOpen: boolean\n onClose: () => void\n title?: string\n children: ReactNode\n onBack?: () => void\n onSkip?: () => void\n rightActions?: ScrollableModalAction[]\n className?: string\n}\n\nexport const ScrollableModal = ({\n isOpen,\n onClose,\n title,\n children,\n onBack,\n onSkip,\n rightActions = [],\n className,\n}: ScrollableModalProps) => {\n return (\n <Dialog open={isOpen} onClose={onClose} className=\"relative z-50\">\n {/* Backdrop */}\n <div className=\"fixed inset-0 bg-black/50\" aria-hidden=\"true\" />\n\n {/* Full-screen container */}\n <div className=\"fixed inset-0 flex items-center justify-center p-4\">\n <DialogPanel\n className={cn(\n 'bg-white rounded-lg shadow-xl w-full max-w-2xl max-h-[90vh] flex flex-col overflow-hidden',\n className\n )}\n >\n {/* Header */}\n <div className=\"flex items-center justify-between px-6 py-4 border-b border-slate-200\">\n <div className=\"w-10\">\n {onBack && (\n <button\n onClick={onBack}\n className=\"p-2 rounded-md hover:bg-slate-100 transition-colors\"\n aria-label=\"Go back\"\n >\n <ArrowLeftIcon className=\"w-5 h-5 text-slate-500\" />\n </button>\n )}\n </div>\n\n <DialogTitle className=\"text-lg font-bold text-slate-900 flex-1 text-center\">\n {title}\n </DialogTitle>\n\n <div className=\"w-10 flex justify-end\">\n {onSkip ? (\n <button\n onClick={onSkip}\n className=\"text-sm font-semibold text-slate-600 hover:text-slate-800\"\n >\n Skip\n </button>\n ) : (\n <button\n onClick={onClose}\n className=\"p-2 rounded-md hover:bg-slate-100 transition-colors\"\n aria-label=\"Close\"\n >\n <XMarkIcon className=\"w-5 h-5 text-slate-500\" />\n </button>\n )}\n </div>\n </div>\n\n {/* Scrollable Content */}\n <div className=\"flex-1 overflow-y-auto px-8 py-6\">\n {children}\n </div>\n\n {/* Footer Actions */}\n {rightActions.length > 0 && (\n <div className=\"flex justify-end gap-2 px-8 py-4 border-t border-slate-200\">\n {rightActions.map((action, index) => (\n <Button\n key={action.key || action.text || `action-${index}`}\n {...action}\n >\n {action.text || action.children}\n </Button>\n ))}\n </div>\n )}\n </DialogPanel>\n </div>\n </Dialog>\n )\n}\n"],"names":["ScrollableModal","isOpen","onClose","title","children","onBack","onSkip","rightActions","className","Dialog","jsx","jsxs","DialogPanel","cn","ArrowLeftIcon","DialogTitle","XMarkIcon","action","index","Button"],"mappings":";;;;;AAsBO,MAAMA,IAAkB,CAAC;AAAA,EAC9B,QAAAC;AAAA,EACA,SAAAC;AAAA,EACA,OAAAC;AAAA,EACA,UAAAC;AAAA,EACA,QAAAC;AAAA,EACA,QAAAC;AAAA,EACA,cAAAC,IAAe,CAAA;AAAA,EACf,WAAAC;AACF,wBAEKC,GAAA,EAAO,MAAMR,GAAQ,SAAAC,GAAkB,WAAU,iBAEhD,UAAA;AAAA,EAAA,gBAAAQ,EAAC,OAAA,EAAI,WAAU,6BAA4B,eAAY,QAAO;AAAA,EAG9D,gBAAAA,EAAC,OAAA,EAAI,WAAU,sDACb,UAAA,gBAAAC;AAAA,IAACC;AAAA,IAAA;AAAA,MACC,WAAWC;AAAA,QACT;AAAA,QACAL;AAAA,MAAA;AAAA,MAIF,UAAA;AAAA,QAAA,gBAAAG,EAAC,OAAA,EAAI,WAAU,yEACb,UAAA;AAAA,UAAA,gBAAAD,EAAC,OAAA,EAAI,WAAU,QACZ,UAAAL,KACC,gBAAAK;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,SAASL;AAAA,cACT,WAAU;AAAA,cACV,cAAW;AAAA,cAEX,UAAA,gBAAAK,EAACI,GAAA,EAAc,WAAU,yBAAA,CAAyB;AAAA,YAAA;AAAA,UAAA,GAGxD;AAAA,UAEA,gBAAAJ,EAACK,GAAA,EAAY,WAAU,uDACpB,UAAAZ,GACH;AAAA,UAEA,gBAAAO,EAAC,OAAA,EAAI,WAAU,yBACZ,UAAAJ,IACC,gBAAAI;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,SAASJ;AAAA,cACT,WAAU;AAAA,cACX,UAAA;AAAA,YAAA;AAAA,UAAA,IAID,gBAAAI;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,SAASR;AAAA,cACT,WAAU;AAAA,cACV,cAAW;AAAA,cAEX,UAAA,gBAAAQ,EAACM,GAAA,EAAU,WAAU,yBAAA,CAAyB;AAAA,YAAA;AAAA,UAAA,EAChD,CAEJ;AAAA,QAAA,GACF;AAAA,QAGA,gBAAAN,EAAC,OAAA,EAAI,WAAU,oCACZ,UAAAN,EAAA,CACH;AAAA,QAGCG,EAAa,SAAS,KACrB,gBAAAG,EAAC,OAAA,EAAI,WAAU,8DACZ,UAAAH,EAAa,IAAI,CAACU,GAAQC,MACzB,gBAAAR;AAAA,UAACS;AAAA,UAAA;AAAA,YAEE,GAAGF;AAAA,YAEH,UAAAA,EAAO,QAAQA,EAAO;AAAA,UAAA;AAAA,UAHlBA,EAAO,OAAOA,EAAO,QAAQ,UAAUC,CAAK;AAAA,QAAA,CAKpD,EAAA,CACH;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA,EAEJ,CACF;AAAA,GACF;"}
package/dist/index58.js CHANGED
@@ -1,76 +1,25 @@
1
- import { jsxs as n, jsx as e } from "react/jsx-runtime";
2
- import { cn as o } from "./index3.js";
3
- import { CheckIcon as c } from "@heroicons/react/20/solid";
4
- const x = {
5
- sm: "p-3",
6
- md: "p-5",
7
- lg: "p-6"
8
- }, b = {
9
- sm: "h-6 w-6",
10
- md: "h-8 w-8",
11
- lg: "h-10 w-10"
12
- }, h = {
13
- sm: "text-sm",
14
- md: "text-sm",
15
- lg: "text-base"
16
- }, y = {
17
- sm: "text-xs",
18
- md: "text-xs",
19
- lg: "text-sm"
20
- };
21
- function N({
22
- icon: l,
23
- label: i,
24
- description: m,
25
- selected: r = !1,
26
- onClick: p,
27
- variant: a = "default",
28
- size: t = "md",
29
- interactive: s = !0,
30
- className: d
1
+ import { jsx as a } from "react/jsx-runtime";
2
+ import { cn as i } from "./index3.js";
3
+ function b({
4
+ children: r,
5
+ withBorder: e = !1,
6
+ leftBorder: o = !1,
7
+ className: t
31
8
  }) {
32
- return /* @__PURE__ */ n(
33
- s ? "button" : "div",
9
+ return /* @__PURE__ */ a(
10
+ "h2",
34
11
  {
35
- ...s ? { type: "button", role: "radio", "aria-checked": r, onClick: p } : {},
36
- className: o(
37
- "relative rounded-xl border-2 transition-all text-center w-full",
38
- x[t],
39
- s && "cursor-pointer",
40
- r ? "bg-primary-50 border-primary-300 ring-1 ring-primary-200" : a === "branded" ? "bg-primary-50/50 border-primary-200" : "bg-slate-50 border-slate-200",
41
- !r && s && (a === "branded" ? "hover:border-primary-300 hover:bg-primary-50" : "hover:border-slate-300 hover:bg-slate-100"),
42
- d
12
+ className: i(
13
+ "text-2xl font-semibold text-slate-900",
14
+ e && "pb-3 border-b-2 border-primary-500",
15
+ o && "pl-3 border-l-4 border-primary-500",
16
+ t
43
17
  ),
44
- children: [
45
- r && /* @__PURE__ */ e("span", { className: "absolute top-2 right-2 flex h-5 w-5 items-center justify-center rounded-full bg-primary-500 text-white", children: /* @__PURE__ */ e(c, { className: "h-3.5 w-3.5" }) }),
46
- /* @__PURE__ */ n("div", { className: "flex flex-col items-center gap-2", children: [
47
- l && /* @__PURE__ */ e(
48
- l,
49
- {
50
- className: o(
51
- b[t],
52
- r ? "text-primary-600" : a === "branded" ? "text-primary-400" : "text-slate-400"
53
- )
54
- }
55
- ),
56
- /* @__PURE__ */ e(
57
- "span",
58
- {
59
- className: o(
60
- "font-semibold",
61
- h[t],
62
- r ? "text-primary-600" : "text-slate-800"
63
- ),
64
- children: i
65
- }
66
- ),
67
- m && /* @__PURE__ */ e("span", { className: o(y[t], "text-slate-500"), children: m })
68
- ] })
69
- ]
18
+ children: r
70
19
  }
71
20
  );
72
21
  }
73
22
  export {
74
- N as SelectionCard
23
+ b as SectionHeading
75
24
  };
76
25
  //# sourceMappingURL=index58.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index58.js","sources":["../src/components/SelectionCard/SelectionCard.tsx"],"sourcesContent":["import { cn } from '@/lib/utils'\nimport { CheckIcon } from '@heroicons/react/20/solid'\nimport type { ComponentType, SVGProps } from 'react'\n\nexport interface SelectionCardProps {\n icon?: ComponentType<SVGProps<SVGSVGElement>>\n label: string\n description?: string\n selected?: boolean\n onClick?: () => void\n variant?: 'default' | 'branded'\n size?: 'sm' | 'md' | 'lg'\n interactive?: boolean\n className?: string\n}\n\nconst sizeStyles = {\n sm: 'p-3',\n md: 'p-5',\n lg: 'p-6',\n}\n\nconst iconSizeStyles = {\n sm: 'h-6 w-6',\n md: 'h-8 w-8',\n lg: 'h-10 w-10',\n}\n\nconst labelSizeStyles = {\n sm: 'text-sm',\n md: 'text-sm',\n lg: 'text-base',\n}\n\nconst descriptionSizeStyles = {\n sm: 'text-xs',\n md: 'text-xs',\n lg: 'text-sm',\n}\n\nexport function SelectionCard({\n icon: Icon,\n label,\n description,\n selected = false,\n onClick,\n variant = 'default',\n size = 'md',\n interactive = true,\n className,\n}: SelectionCardProps) {\n const Component = interactive ? 'button' : 'div'\n\n const interactiveProps = interactive\n ? { type: 'button' as const, role: 'radio' as const, 'aria-checked': selected, onClick }\n : {}\n\n return (\n <Component\n {...interactiveProps}\n className={cn(\n 'relative rounded-xl border-2 transition-all text-center w-full',\n sizeStyles[size],\n interactive && 'cursor-pointer',\n selected\n ? 'bg-primary-50 border-primary-300 ring-1 ring-primary-200'\n : variant === 'branded'\n ? 'bg-primary-50/50 border-primary-200'\n : 'bg-slate-50 border-slate-200',\n !selected && interactive && (\n variant === 'branded'\n ? 'hover:border-primary-300 hover:bg-primary-50'\n : 'hover:border-slate-300 hover:bg-slate-100'\n ),\n className\n )}\n >\n {selected && (\n <span className=\"absolute top-2 right-2 flex h-5 w-5 items-center justify-center rounded-full bg-primary-500 text-white\">\n <CheckIcon className=\"h-3.5 w-3.5\" />\n </span>\n )}\n\n <div className=\"flex flex-col items-center gap-2\">\n {Icon && (\n <Icon\n className={cn(\n iconSizeStyles[size],\n selected ? 'text-primary-600' : variant === 'branded' ? 'text-primary-400' : 'text-slate-400'\n )}\n />\n )}\n <span\n className={cn(\n 'font-semibold',\n labelSizeStyles[size],\n selected ? 'text-primary-600' : 'text-slate-800'\n )}\n >\n {label}\n </span>\n {description && (\n <span className={cn(descriptionSizeStyles[size], 'text-slate-500')}>{description}</span>\n )}\n </div>\n </Component>\n )\n}\n"],"names":["sizeStyles","iconSizeStyles","labelSizeStyles","descriptionSizeStyles","SelectionCard","Icon","label","description","selected","onClick","variant","size","interactive","className","jsxs","cn","jsx","CheckIcon"],"mappings":";;;AAgBA,MAAMA,IAAa;AAAA,EACjB,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AACN,GAEMC,IAAiB;AAAA,EACrB,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AACN,GAEMC,IAAkB;AAAA,EACtB,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AACN,GAEMC,IAAwB;AAAA,EAC5B,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AACN;AAEO,SAASC,EAAc;AAAA,EAC5B,MAAMC;AAAA,EACN,OAAAC;AAAA,EACA,aAAAC;AAAA,EACA,UAAAC,IAAW;AAAA,EACX,SAAAC;AAAA,EACA,SAAAC,IAAU;AAAA,EACV,MAAAC,IAAO;AAAA,EACP,aAAAC,IAAc;AAAA,EACd,WAAAC;AACF,GAAuB;AAOrB,SACE,gBAAAC;AAAA,IAPgBF,IAAc,WAAW;AAAA,IAOxC;AAAA,MACE,GANoBA,IACrB,EAAE,MAAM,UAAmB,MAAM,SAAkB,gBAAgBJ,GAAU,SAAAC,EAAA,IAC7E,CAAA;AAAA,MAKA,WAAWM;AAAA,QACT;AAAA,QACAf,EAAWW,CAAI;AAAA,QACfC,KAAe;AAAA,QACfJ,IACI,6DACAE,MAAY,YACV,wCACA;AAAA,QACN,CAACF,KAAYI,MACXF,MAAY,YACR,iDACA;AAAA,QAENG;AAAA,MAAA;AAAA,MAGD,UAAA;AAAA,QAAAL,KACC,gBAAAQ,EAAC,UAAK,WAAU,0GACd,4BAACC,GAAA,EAAU,WAAU,eAAc,EAAA,CACrC;AAAA,QAGF,gBAAAH,EAAC,OAAA,EAAI,WAAU,oCACZ,UAAA;AAAA,UAAAT,KACC,gBAAAW;AAAA,YAACX;AAAA,YAAA;AAAA,cACC,WAAWU;AAAA,gBACTd,EAAeU,CAAI;AAAA,gBACnBH,IAAW,qBAAqBE,MAAY,YAAY,qBAAqB;AAAA,cAAA;AAAA,YAC/E;AAAA,UAAA;AAAA,UAGJ,gBAAAM;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,WAAWD;AAAA,gBACT;AAAA,gBACAb,EAAgBS,CAAI;AAAA,gBACpBH,IAAW,qBAAqB;AAAA,cAAA;AAAA,cAGjC,UAAAF;AAAA,YAAA;AAAA,UAAA;AAAA,UAEFC,KACC,gBAAAS,EAAC,QAAA,EAAK,WAAWD,EAAGZ,EAAsBQ,CAAI,GAAG,gBAAgB,GAAI,UAAAJ,EAAA,CAAY;AAAA,QAAA,EAAA,CAErF;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGN;"}
1
+ {"version":3,"file":"index58.js","sources":["../src/components/Typography/SectionHeading.tsx"],"sourcesContent":["import { cn } from '@/lib/utils'\nimport type { ReactNode } from 'react'\n\nexport interface SectionHeadingProps {\n children: ReactNode\n /** Bottom border accent */\n withBorder?: boolean\n /** Left border accent (RealtorIQ style) */\n leftBorder?: boolean\n className?: string\n}\n\nexport function SectionHeading({\n children,\n withBorder = false,\n leftBorder = false,\n className,\n}: SectionHeadingProps) {\n return (\n <h2\n className={cn(\n 'text-2xl font-semibold text-slate-900',\n withBorder && 'pb-3 border-b-2 border-primary-500',\n leftBorder && 'pl-3 border-l-4 border-primary-500',\n className\n )}\n >\n {children}\n </h2>\n )\n}\n"],"names":["SectionHeading","children","withBorder","leftBorder","className","jsx","cn"],"mappings":";;AAYO,SAASA,EAAe;AAAA,EAC7B,UAAAC;AAAA,EACA,YAAAC,IAAa;AAAA,EACb,YAAAC,IAAa;AAAA,EACb,WAAAC;AACF,GAAwB;AACtB,SACE,gBAAAC;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAWC;AAAA,QACT;AAAA,QACAJ,KAAc;AAAA,QACdC,KAAc;AAAA,QACdC;AAAA,MAAA;AAAA,MAGD,UAAAH;AAAA,IAAA;AAAA,EAAA;AAGP;"}