@tomny-dev/uzi 0.6.3 → 0.7.0-pr.78.214.1.87d1ede

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 (118) hide show
  1. package/dist/components/conversation/Conversation.d.ts +18 -0
  2. package/dist/components/conversation/Conversation.d.ts.map +1 -0
  3. package/dist/components/conversation/Conversation.test.d.ts +2 -0
  4. package/dist/components/conversation/Conversation.test.d.ts.map +1 -0
  5. package/dist/components/multi-select/MultiSelect.d.ts +9 -0
  6. package/dist/components/multi-select/MultiSelect.d.ts.map +1 -1
  7. package/dist/components/multi-select/MultiSelect.test.d.ts +2 -0
  8. package/dist/components/multi-select/MultiSelect.test.d.ts.map +1 -0
  9. package/dist/index.cjs +19 -11
  10. package/dist/index.d.ts +2 -0
  11. package/dist/index.d.ts.map +1 -1
  12. package/dist/index.js +13 -12
  13. package/dist/index26.js +10 -2
  14. package/dist/index26.js.map +1 -1
  15. package/dist/index27.cjs +13 -1
  16. package/dist/index27.cjs.map +1 -1
  17. package/dist/index27.js +74 -37
  18. package/dist/index27.js.map +1 -1
  19. package/dist/index28.cjs +74 -37
  20. package/dist/index28.cjs.map +1 -1
  21. package/dist/index53.js +26 -16
  22. package/dist/index53.js.map +1 -1
  23. package/dist/index54.cjs +37 -20
  24. package/dist/index54.cjs.map +1 -1
  25. package/dist/index54.js +57 -23
  26. package/dist/index54.js.map +1 -1
  27. package/dist/index55.cjs +63 -24
  28. package/dist/index55.cjs.map +1 -1
  29. package/dist/index55.js +16 -16
  30. package/dist/index55.js.map +1 -1
  31. package/dist/index56.cjs +19 -20
  32. package/dist/index56.cjs.map +1 -1
  33. package/dist/index56.js +24 -21
  34. package/dist/index56.js.map +1 -1
  35. package/dist/index57.cjs +25 -22
  36. package/dist/index57.cjs.map +1 -1
  37. package/dist/index57.js +17 -10
  38. package/dist/index57.js.map +1 -1
  39. package/dist/index58.cjs +23 -11
  40. package/dist/index58.cjs.map +1 -1
  41. package/dist/index58.js +25 -14
  42. package/dist/index58.js.map +1 -1
  43. package/dist/index59.cjs +25 -13
  44. package/dist/index59.cjs.map +1 -1
  45. package/dist/index59.js +10 -11
  46. package/dist/index59.js.map +1 -1
  47. package/dist/index60.cjs +11 -13
  48. package/dist/index60.cjs.map +1 -1
  49. package/dist/index60.js +13 -16
  50. package/dist/index60.js.map +1 -1
  51. package/dist/index61.cjs +13 -16
  52. package/dist/index61.cjs.map +1 -1
  53. package/dist/index61.js +10 -8
  54. package/dist/index61.js.map +1 -1
  55. package/dist/index62.cjs +11 -10
  56. package/dist/index62.cjs.map +1 -1
  57. package/dist/index62.js +15 -87
  58. package/dist/index62.js.map +1 -1
  59. package/dist/index63.cjs +15 -89
  60. package/dist/index63.cjs.map +1 -1
  61. package/dist/index63.js +9 -21
  62. package/dist/index63.js.map +1 -1
  63. package/dist/index64.cjs +12 -30
  64. package/dist/index64.cjs.map +1 -1
  65. package/dist/index64.js +89 -43
  66. package/dist/index64.js.map +1 -1
  67. package/dist/index65.cjs +88 -42
  68. package/dist/index65.cjs.map +1 -1
  69. package/dist/index65.js +14 -50
  70. package/dist/index65.js.map +1 -1
  71. package/dist/index66.cjs +15 -69
  72. package/dist/index66.cjs.map +1 -1
  73. package/dist/index66.js +25 -414
  74. package/dist/index66.js.map +1 -1
  75. package/dist/index67.cjs +25 -416
  76. package/dist/index67.cjs.map +1 -1
  77. package/dist/index67.js +56 -58
  78. package/dist/index67.js.map +1 -1
  79. package/dist/index68.cjs +82 -85
  80. package/dist/index68.cjs.map +1 -1
  81. package/dist/index68.js +419 -226
  82. package/dist/index68.js.map +1 -1
  83. package/dist/index69.cjs +420 -225
  84. package/dist/index69.cjs.map +1 -1
  85. package/dist/index69.js +58 -42
  86. package/dist/index69.js.map +1 -1
  87. package/dist/index70.cjs +85 -61
  88. package/dist/index70.cjs.map +1 -1
  89. package/dist/index70.js +236 -76
  90. package/dist/index70.js.map +1 -1
  91. package/dist/index71.cjs +235 -75
  92. package/dist/index71.cjs.map +1 -1
  93. package/dist/index71.js +42 -20
  94. package/dist/index71.js.map +1 -1
  95. package/dist/index72.cjs +60 -27
  96. package/dist/index72.cjs.map +1 -1
  97. package/dist/index72.js +73 -88
  98. package/dist/index72.js.map +1 -1
  99. package/dist/index73.cjs +73 -90
  100. package/dist/index73.cjs.map +1 -1
  101. package/dist/index73.js +17 -15
  102. package/dist/index73.js.map +1 -1
  103. package/dist/index74.cjs +22 -19
  104. package/dist/index74.cjs.map +1 -1
  105. package/dist/index74.js +85 -143
  106. package/dist/index74.js.map +1 -1
  107. package/dist/index75.cjs +87 -143
  108. package/dist/index75.cjs.map +1 -1
  109. package/dist/index75.js +23 -0
  110. package/dist/index75.js.map +1 -0
  111. package/dist/index76.cjs +31 -0
  112. package/dist/index76.cjs.map +1 -0
  113. package/dist/index76.js +159 -0
  114. package/dist/index76.js.map +1 -0
  115. package/dist/index77.cjs +161 -0
  116. package/dist/index77.cjs.map +1 -0
  117. package/dist/style.css +150 -0
  118. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"index68.js","names":[],"sources":["../src/components/data-table/DataTable.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport { cx } from \"../../utils/cx\";\nimport styles from \"./data-table.module.css\";\n\nexport type SortDirection = \"asc\" | \"desc\";\n\nexport interface Column<T = Record<string, unknown>> {\n key: string;\n label: React.ReactNode;\n accessor?: (row: T) => React.ReactNode;\n sortable?: boolean;\n width?: string;\n align?: \"left\" | \"center\" | \"right\";\n}\n\nexport type DataTableRowAction = {\n label: string;\n onClick: (row: Record<string, unknown>) => void;\n};\n\nexport interface DataTableProps<T = Record<string, unknown>> {\n data: T[];\n columns: readonly Column<T>[];\n /** Array of action buttons to render per row */\n onRowAction?: DataTableRowAction[];\n /** Called when rows are selected; receives selected row IDs */\n onSelectionChange?: (selectedIds: string[]) => void;\n /** Whether the table is in a loading state */\n loading?: boolean;\n /** Message displayed when data is empty */\n emptyMessage?: string;\n /** Number of rows per page */\n pageSize?: number;\n /** Whether rows are selectable via checkbox */\n selectable?: boolean;\n /** Custom row key extractor (defaults to row.id) */\n rowKey?: (row: T) => string;\n /** Additional class name for the table wrapper */\n className?: string;\n}\n\nexport function DataTable<T extends Record<string, unknown> = Record<string, unknown>>({\n data,\n columns,\n onRowAction,\n onSelectionChange,\n loading = false,\n emptyMessage = \"No data found\",\n pageSize = 10,\n selectable = false,\n rowKey = (row: T) => String(row.id ?? \"\"),\n className,\n}: DataTableProps<T>) {\n const [sortKey, setSortKey] = React.useState<string | null>(null);\n const [sortDir, setSortDir] = React.useState<SortDirection>(\"asc\");\n const [page, setPage] = React.useState(1);\n const [selected, setSelected] = React.useState<Set<string>>(new Set());\n\n const handleSort = (key: string) => {\n if (key === sortKey) {\n setSortDir((d) => (d === \"asc\" ? \"desc\" : \"asc\"));\n } else {\n setSortKey(key);\n setSortDir(\"asc\");\n }\n };\n\n const toggleRow = (id: string) => {\n const next = new Set(selected);\n if (next.has(id)) {\n next.delete(id);\n } else {\n next.add(id);\n }\n setSelected(next);\n onSelectionChange?.(Array.from(next));\n };\n\n const toggleAll = () => {\n const allKeys = displayedData.map((r) => rowKey(r));\n const allSelected = allKeys.every((k) => selected.has(k));\n const next = new Set(selected);\n if (allSelected) {\n allKeys.forEach((k) => next.delete(k));\n } else {\n allKeys.forEach((k) => next.add(k));\n }\n setSelected(next);\n onSelectionChange?.(Array.from(next));\n };\n\n const totalPages = Math.max(1, Math.ceil(data.length / pageSize));\n const safePage = Math.min(page, totalPages);\n const columnSpan =\n columns.length + (selectable ? 1 : 0) + (onRowAction && onRowAction.length > 0 ? 1 : 0);\n\n React.useEffect(() => {\n if (page > totalPages) {\n setPage(totalPages);\n }\n }, [data.length, page, totalPages]);\n\n const sortedData = React.useMemo(() => {\n if (!sortKey) return data;\n\n const sortColumn = columns.find((column) => column.key === sortKey);\n const getSortValue = (row: T): unknown => {\n if (sortColumn?.accessor) {\n const accessed = sortColumn.accessor(row);\n if (typeof accessed === \"string\" || typeof accessed === \"number\") {\n return accessed;\n }\n }\n return row[sortKey as keyof T];\n };\n\n return [...data].sort((a, b) => {\n const aVal = getSortValue(a);\n const bVal = getSortValue(b);\n if (aVal == null) return 1;\n if (bVal == null) return -1;\n let cmp = 0;\n if (typeof aVal === \"number\" && typeof bVal === \"number\") {\n cmp = aVal - bVal;\n } else {\n cmp = String(aVal).localeCompare(String(bVal));\n }\n return sortDir === \"asc\" ? cmp : -cmp;\n });\n }, [columns, data, sortKey, sortDir]);\n\n const displayedData = React.useMemo(() => {\n const start = (safePage - 1) * pageSize;\n return sortedData.slice(start, start + pageSize);\n }, [sortedData, safePage, pageSize]);\n\n const displayedKeys = React.useMemo(() => displayedData.map(rowKey), [displayedData, rowKey]);\n const allPageSelected =\n displayedKeys.length > 0 && displayedKeys.every((k) => selected.has(k));\n const somePageSelected =\n displayedKeys.length > 0 && displayedKeys.some((k) => selected.has(k));\n\n return (\n <div className={cx(styles.wrapper, className)}>\n <div className={styles.tableContainer}>\n <table className={styles.table}>\n <thead className={styles.thead}>\n <tr>\n {selectable && (\n <th className={styles.headerCell} aria-label=\"Select all\">\n <input\n type=\"checkbox\"\n checked={allPageSelected}\n ref={(el) => {\n if (el) el.indeterminate = somePageSelected && !allPageSelected;\n }}\n onChange={toggleAll}\n className={styles.checkbox}\n aria-label=\"Select all rows on this page\"\n />\n </th>\n )}\n {columns.map((col) => {\n const ariaSort = col.sortable\n ? sortKey === col.key\n ? sortDir === \"asc\"\n ? \"ascending\"\n : \"descending\"\n : \"none\"\n : undefined;\n\n return (\n <th\n key={col.key}\n className={cx(\n styles.headerCell,\n col.width && styles.headerCellFixed,\n col.align && styles[`align${col.align.charAt(0).toUpperCase() + col.align.slice(1)}`],\n )}\n style={col.width ? { width: col.width } : undefined}\n aria-sort={ariaSort}\n >\n {col.sortable ? (\n <button\n type=\"button\"\n className={cx(styles.sortableHeader, styles.clickableHeader)}\n onClick={() => handleSort(col.key)}\n >\n <span className={styles.headerLabel}>{col.label}</span>\n <span className={styles.sortIcon} aria-hidden=\"true\">\n {sortKey === col.key ? (\n sortDir === \"asc\" ? (\n \"\\u25B2\"\n ) : (\n \"\\u25BC\"\n )\n ) : (\n \"\\u25B2\\u25BC\"\n )}\n </span>\n </button>\n ) : (\n <span className={styles.headerLabel}>{col.label}</span>\n )}\n </th>\n );\n })}\n {onRowAction && onRowAction.length > 0 && (\n <th className={styles.headerCell} style={{ width: \"5rem\" }}>\n <span className={styles.headerLabel}>Actions</span>\n </th>\n )}\n </tr>\n </thead>\n <tbody className={styles.tbody}>\n {loading ? (\n <tr>\n <td colSpan={columnSpan} className={styles.loadingCell}>\n <div className={styles.loadingRow} aria-busy=\"true\">\n <div className={styles.skeletonBar} />\n <div className={styles.skeletonBar} />\n <div className={styles.skeletonBar} />\n </div>\n <div className={styles.loadingRow} aria-busy=\"true\">\n <div className={styles.skeletonBar} />\n <div className={styles.skeletonBar} />\n <div className={styles.skeletonBar} />\n </div>\n <div className={styles.loadingRow} aria-busy=\"true\">\n <div className={styles.skeletonBar} />\n <div className={styles.skeletonBar} />\n <div className={styles.skeletonBar} />\n </div>\n </td>\n </tr>\n ) : data.length === 0 ? (\n <tr>\n <td colSpan={columnSpan} className={styles.emptyCell}>\n {emptyMessage}\n </td>\n </tr>\n ) : (\n displayedData.map((row) => {\n const id = rowKey(row);\n return (\n <tr key={id} className={cx(styles.row, selected.has(id) && styles.rowSelected)}>\n {selectable && (\n <td className={styles.cell}>\n <input\n type=\"checkbox\"\n checked={selected.has(id)}\n onChange={() => toggleRow(id)}\n className={styles.checkbox}\n aria-label={`Select row ${id}`}\n />\n </td>\n )}\n {columns.map((col) => (\n <td\n key={`${id}-${col.key}`}\n className={cx(\n styles.cell,\n col.align && styles[`align${col.align.charAt(0).toUpperCase() + col.align.slice(1)}`],\n )}\n >\n {col.accessor ? col.accessor(row) : String(row[col.key as keyof T] ?? \"\")}\n </td>\n ))}\n {onRowAction && onRowAction.length > 0 && (\n <td className={styles.cell}>\n <div className={styles.rowActions}>\n {onRowAction.map((action) => (\n <button\n key={action.label}\n type=\"button\"\n className={styles.actionBtn}\n onClick={() => action.onClick(row)}\n >\n {action.label}\n </button>\n ))}\n </div>\n </td>\n )}\n </tr>\n );\n })\n )}\n </tbody>\n </table>\n </div>\n\n {data.length > pageSize && (\n <div className={styles.pagination}>\n <span className={styles.paginationInfo}>\n Page {safePage} of {totalPages}\n </span>\n <div className={styles.paginationButtons}>\n <button\n type=\"button\"\n className={styles.pageBtn}\n disabled={safePage <= 1}\n onClick={() => setPage((p) => Math.max(1, p - 1))}\n aria-label=\"Previous page\"\n >\n &larr;\n </button>\n <button\n type=\"button\"\n className={styles.pageBtn}\n disabled={safePage >= totalPages}\n onClick={() => setPage((p) => Math.min(totalPages, p + 1))}\n aria-label=\"Next page\"\n >\n &rarr;\n </button>\n </div>\n </div>\n )}\n </div>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"index68.js","names":[],"sources":["../src/components/auth-pages/AuthPages.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { cx } from \"../../utils/cx\";\nimport styles from \"./auth-pages.module.css\";\n\n// ── Eye icon (show/hide password) ──\nfunction EyeIcon({ open }: { open: boolean }) {\n if (open) {\n return (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" aria-hidden=\"true\" className={styles.eyeIcon}>\n <path d=\"M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z\" stroke=\"currentColor\" strokeWidth=\"2\" />\n <circle cx=\"12\" cy=\"12\" r=\"3\" stroke=\"currentColor\" strokeWidth=\"2\" />\n </svg>\n );\n }\n return (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" aria-hidden=\"true\" className={styles.eyeIcon}>\n <path d=\"M17.94 17.94A10.07 10.07 0 0 1 12 20c-7 0-11-8-11-8a18.45 18.45 0 0 1 5.06-5.94\" stroke=\"currentColor\" strokeWidth=\"2\" />\n <path d=\"M9.9 4.24A9.12 9.12 0 0 1 12 4c7 0 11 8 11 8a18.5 18.5 0 0 1-2.16 3.19\" stroke=\"currentColor\" strokeWidth=\"2\" />\n <line x1=\"1\" y1=\"1\" x2=\"23\" y2=\"23\" stroke=\"currentColor\" strokeWidth=\"2\" />\n </svg>\n );\n}\n\n// ── Internal reusable field ──\ninterface FieldProps {\n label: string;\n id: string;\n children: React.ReactNode;\n error?: string;\n}\n\nfunction Field({ label, id, children, error }: FieldProps) {\n return (\n <div className={styles.field}>\n <label htmlFor={id} className={styles.label}>\n {label}\n </label>\n {children}\n {error && <span className={styles.error}>{error}</span>}\n </div>\n );\n}\n\n// ── Password input with visibility toggle ──\ninterface PasswordFieldProps {\n id: string;\n label?: string;\n placeholder?: string;\n value?: string;\n onChange?: (e: React.ChangeEvent<HTMLInputElement>) => void;\n error?: string;\n}\n\nfunction PasswordField({ id, label, placeholder, value, onChange, error }: PasswordFieldProps) {\n const [show, setShow] = React.useState(false);\n const toggleRef = React.useRef<HTMLButtonElement>(null);\n\n return (\n <Field label={label ?? \"Password\"} id={id} error={error}>\n <div className={styles.passwordWrapper}>\n <input\n id={id}\n type={show ? \"text\" : \"password\"}\n placeholder={placeholder}\n value={value}\n onChange={onChange}\n className={styles.input}\n />\n <button\n ref={toggleRef}\n type=\"button\"\n onClick={() => setShow((s) => !s)}\n className={styles.toggle}\n aria-label={show ? \"Hide password\" : \"Show password\"}\n >\n <EyeIcon open={show} />\n </button>\n </div>\n </Field>\n );\n}\n\n// ── Checkbox row ──\ninterface CheckboxRowProps {\n label?: string;\n linkText: string;\n linkHref?: string;\n}\n\ninterface CheckboxRowPropsExtended extends CheckboxRowProps {\n checked?: boolean;\n onChange?: (checked: boolean) => void;\n}\n\nfunction CheckboxRow({ label, linkText, linkHref, checked, onChange }: CheckboxRowPropsExtended) {\n if (!label) return null;\n return (\n <div className={styles.checkboxRow}>\n <label className={styles.checkboxLabel}>\n <input\n type=\"checkbox\"\n className={styles.checkbox}\n checked={checked}\n onChange={(e) => onChange?.(e.target.checked)}\n />\n <span>{label}</span>\n </label>\n {linkHref && (\n <a href={linkHref} className={styles.forgotLink}>\n {linkText}\n </a>\n )}\n </div>\n );\n}\n\n// ── Shared props ──\ninterface BaseAuthPageProps {\n /** Page title */\n title: string;\n /** Page subtitle */\n subtitle?: string;\n /** Footer content (e.g., \"No account? Sign up\") */\n footer?: React.ReactNode;\n /** Called with form data on valid submit */\n onSubmit?: (data: Record<string, string | boolean>) => void;\n /** Loading state for the submit button */\n loading?: boolean;\n /** Optional brand/logo element */\n brand?: React.ReactNode;\n /** Extra class for the outer wrapper */\n className?: string;\n}\n\n// ── Sign In Page ──\nexport interface SignInPageProps extends BaseAuthPageProps {\n /** Email placeholder (default \"Email address\") */\n emailPlaceholder?: string;\n /** Password placeholder (default \"Password\") */\n passwordPlaceholder?: string;\n /** \"Remember me\" checkbox label */\n rememberLabel?: string;\n /** \"Forgot password\" link text */\n forgotLinkText?: string;\n /** \"Forgot password\" link href */\n forgotLinkHref?: string;\n}\n\nexport function SignInPage({\n title = \"Sign in\",\n subtitle,\n footer,\n onSubmit,\n loading = false,\n brand,\n className,\n emailPlaceholder = \"Email address\",\n passwordPlaceholder = \"Password\",\n rememberLabel = \"Remember me\",\n forgotLinkText = \"Forgot password?\",\n forgotLinkHref,\n}: SignInPageProps) {\n const id = React.useId();\n const [email, setEmail] = React.useState(\"\");\n const [password, setPassword] = React.useState(\"\");\n const [rememberMe, setRememberMe] = React.useState(false);\n const [errors, setErrors] = React.useState<Record<string, string>>({});\n const [submitted, setSubmitted] = React.useState(false);\n\n const validate = (): boolean => {\n const newErrors: Record<string, string> = {};\n if (!email.trim()) newErrors.email = \"Email is required\";\n else if (!/^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/.test(email)) newErrors.email = \"Enter a valid email\";\n if (!password) newErrors.password = \"Password is required\";\n setErrors(newErrors);\n return Object.keys(newErrors).length === 0;\n };\n\n const handleSubmit = (e: React.FormEvent) => {\n e.preventDefault();\n setSubmitted(true);\n if (!validate()) return;\n onSubmit?.({ email, password, rememberMe });\n };\n\n return (\n <div className={cx(styles.authLayout, className)}>\n <div className={styles.authCard}>\n {brand && <div className={styles.authBrand}>{brand}</div>}\n <div className={styles.authHeader}>\n <h1 className={styles.authTitle}>{title}</h1>\n {subtitle && <p className={styles.authSubtitle}>{subtitle}</p>}\n </div>\n <form onSubmit={handleSubmit} className={styles.authForm}>\n <Field label={emailPlaceholder} id={id + \"-email\"} error={submitted ? errors.email : undefined}>\n <input\n id={id + \"-email\"}\n type=\"email\"\n placeholder=\"you@example.com\"\n value={email}\n onChange={(e) => setEmail(e.target.value)}\n className={styles.input}\n autoComplete=\"email\"\n autoFocus\n />\n </Field>\n <PasswordField\n label={passwordPlaceholder}\n id={id + \"-password\"}\n placeholder={passwordPlaceholder}\n value={password}\n onChange={(e) => { setPassword(e.target.value); if (submitted) setSubmitted(false); }}\n error={submitted ? errors.password : undefined}\n />\n <CheckboxRow\n label={rememberLabel}\n linkText={forgotLinkText}\n linkHref={forgotLinkHref}\n checked={rememberMe}\n onChange={(c) => { setRememberMe(c); if (submitted) setSubmitted(false); }}\n />\n <button\n type=\"submit\"\n disabled={loading}\n className={styles.submitButton}\n >\n {loading ? (\n <>\n <span className={styles.spinner} />\n Signing in...\n </>\n ) : (\n \"Sign in\"\n )}\n </button>\n </form>\n {footer && (\n <>\n <hr className={styles.divider} />\n <p className={styles.authFooter}>{footer}</p>\n </>\n )}\n </div>\n </div>\n );\n}\n\n// ── Sign Up Page ──\nexport interface SignUpPageProps extends BaseAuthPageProps {\n /** Email placeholder */\n emailPlaceholder?: string;\n /** Password placeholder */\n passwordPlaceholder?: string;\n /** Confirm password placeholder */\n confirmPasswordPlaceholder?: string;\n /** Checkbox label (e.g., \"I agree to the Terms of Service\") */\n checkboxLabel?: string;\n /** Checkbox href */\n checkboxLinkText?: string;\n /** Checkbox href */\n checkboxLinkHref?: string;\n}\n\nexport function SignUpPage({\n title = \"Create an account\",\n subtitle,\n footer,\n onSubmit,\n loading = false,\n brand,\n className,\n emailPlaceholder = \"Email address\",\n passwordPlaceholder = \"Password\",\n confirmPasswordPlaceholder = \"Confirm password\",\n checkboxLabel,\n checkboxLinkText,\n checkboxLinkHref,\n}: SignUpPageProps) {\n const id = React.useId();\n const [email, setEmail] = React.useState(\"\");\n const [password, setPassword] = React.useState(\"\");\n const [confirmPassword, setConfirmPassword] = React.useState(\"\");\n const [agreed, setAgreed] = React.useState(false);\n const [errors, setErrors] = React.useState<Record<string, string>>({});\n const [submitted, setSubmitted] = React.useState(false);\n\n const validate = (): boolean => {\n const newErrors: Record<string, string> = {};\n if (!email.trim()) newErrors.email = \"Email is required\";\n else if (!/^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/.test(email)) newErrors.email = \"Enter a valid email\";\n if (!password) newErrors.password = \"Password is required\";\n else if (password.length < 8) newErrors.password = \"At least 8 characters\";\n if (password !== confirmPassword) newErrors.confirmPassword = \"Passwords do not match\";\n if (!agreed) newErrors.agreed = \"You must agree to continue\";\n setErrors(newErrors);\n return Object.keys(newErrors).length === 0;\n };\n\n const handleSubmit = (e: React.FormEvent) => {\n e.preventDefault();\n setSubmitted(true);\n if (!validate()) return;\n onSubmit?.({ email, password, agreed });\n };\n\n return (\n <div className={cx(styles.authLayout, className)}>\n <div className={styles.authCard}>\n {brand && <div className={styles.authBrand}>{brand}</div>}\n <div className={styles.authHeader}>\n <h1 className={styles.authTitle}>{title}</h1>\n {subtitle && <p className={styles.authSubtitle}>{subtitle}</p>}\n </div>\n <form onSubmit={handleSubmit} className={styles.authForm}>\n <Field label={emailPlaceholder} id={id + \"-email\"} error={submitted ? errors.email : undefined}>\n <input\n id={id + \"-email\"}\n type=\"email\"\n placeholder=\"you@example.com\"\n value={email}\n onChange={(e) => { setEmail(e.target.value); if (submitted) setSubmitted(false); }}\n className={styles.input}\n autoComplete=\"email\"\n autoFocus\n />\n </Field>\n <PasswordField\n label={passwordPlaceholder}\n id={id + \"-password\"}\n placeholder={passwordPlaceholder}\n value={password}\n onChange={(e) => { setPassword(e.target.value); if (submitted) setSubmitted(false); }}\n error={submitted ? errors.password : undefined}\n />\n <PasswordField\n label={confirmPasswordPlaceholder}\n id={id + \"-confirm\"}\n placeholder={confirmPasswordPlaceholder}\n value={confirmPassword}\n onChange={(e) => { setConfirmPassword(e.target.value); if (submitted) setSubmitted(false); }}\n error={submitted ? errors.confirmPassword : undefined}\n />\n {checkboxLabel && (\n <div className={styles.checkboxRow}>\n <label className={styles.checkboxLabel}>\n <input\n id={id + \"-agreed\"}\n type=\"checkbox\"\n checked={agreed}\n onChange={(e) => { setAgreed(e.target.checked); if (submitted) setSubmitted(false); }}\n className={styles.checkbox}\n />\n <span>\n {checkboxLinkText ? (\n <>\n I agree to the{\" \"}\n <a href={checkboxLinkHref} className={styles.checkboxLink}>\n {checkboxLinkText}\n </a>\n </>\n ) : (\n checkboxLabel\n )}\n </span>\n </label>\n </div>\n )}\n {submitted && errors.agreed && <span className={styles.error}>{errors.agreed}</span>}\n <button\n type=\"submit\"\n disabled={loading}\n className={styles.submitButton}\n >\n {loading ? (\n <>\n <span className={styles.spinner} />\n Creating account...\n </>\n ) : (\n \"Create account\"\n )}\n </button>\n </form>\n {footer && (\n <>\n <hr className={styles.divider} />\n <p className={styles.authFooter}>{footer}</p>\n </>\n )}\n </div>\n </div>\n );\n}\n\n// ── Forgot Password Page ──\nexport interface ForgotPasswordPageProps extends BaseAuthPageProps {\n /** Email placeholder */\n emailPlaceholder?: string;\n /** Button text */\n buttonText?: string;\n /** Back to sign in link text */\n backLinkText?: string;\n /** Back to sign in link href */\n backLinkHref?: string;\n}\n\nexport function ForgotPasswordPage({\n title = \"Reset password\",\n subtitle = \"Enter your email and we'll send a reset link\",\n footer,\n onSubmit,\n loading = false,\n brand,\n className,\n emailPlaceholder = \"Email address\",\n buttonText = \"Send reset link\",\n backLinkText = \"Back to sign in\",\n backLinkHref = \"/signin\",\n}: ForgotPasswordPageProps) {\n const id = React.useId();\n const [email, setEmail] = React.useState(\"\");\n const [error, setError] = React.useState(\"\");\n const [sent, setSent] = React.useState(false);\n\n const handleSubmit = (e: React.FormEvent) => {\n e.preventDefault();\n if (!email.trim()) { setError(\"Email is required\"); return; }\n if (!/^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/.test(email)) { setError(\"Enter a valid email\"); return; }\n onSubmit?.({ email });\n setSent(true);\n };\n\n return (\n <div className={cx(styles.authLayout, className)}>\n <div className={styles.authCard}>\n {brand && <div className={styles.authBrand}>{brand}</div>}\n <div className={styles.authHeader}>\n <h1 className={styles.authTitle}>{title}</h1>\n {subtitle && <p className={styles.authSubtitle}>{subtitle}</p>}\n </div>\n {sent ? (\n <div className={styles.sentMessage}>\n <p className={styles.sentText}>\n If an account exists for <strong>{email}</strong>, you'll receive a reset link shortly.\n </p>\n <a href={backLinkHref} className={styles.backLink}>\n {backLinkText}\n </a>\n </div>\n ) : (\n <form onSubmit={handleSubmit} className={styles.authForm}>\n <Field label={emailPlaceholder} id={id + \"-email\"} error={error}>\n <input\n id={id + \"-email\"}\n type=\"email\"\n placeholder=\"you@example.com\"\n value={email}\n onChange={(e) => { setEmail(e.target.value); setError(\"\"); }}\n className={styles.input}\n autoComplete=\"email\"\n autoFocus\n />\n </Field>\n <button\n type=\"submit\"\n disabled={loading}\n className={styles.submitButton}\n >\n {loading ? (\n <>\n <span className={styles.spinner} />\n Sending...\n </>\n ) : (\n buttonText\n )}\n </button>\n </form>\n )}\n {footer && (\n <>\n <hr className={styles.divider} />\n <p className={styles.authFooter}>{footer}</p>\n </>\n )}\n </div>\n </div>\n );\n}\n"],"mappings":";;;;;AAKA,SAAS,QAAQ,EAAE,QAA2B;CAC5C,IAAI,MACF,OACE,qBAAC,OAAD;EAAK,SAAQ;EAAY,MAAK;EAAO,eAAY;EAAO,WAAW,0BAAO;YAA1E,CACE,oBAAC,QAAD;GAAM,GAAE;GAA+C,QAAO;GAAe,aAAY;EAAK,CAAA,GAC9F,oBAAC,UAAD;GAAQ,IAAG;GAAK,IAAG;GAAK,GAAE;GAAI,QAAO;GAAe,aAAY;EAAK,CAAA,CAClE;;CAGT,OACE,qBAAC,OAAD;EAAK,SAAQ;EAAY,MAAK;EAAO,eAAY;EAAO,WAAW,0BAAO;YAA1E;GACE,oBAAC,QAAD;IAAM,GAAE;IAAkF,QAAO;IAAe,aAAY;GAAK,CAAA;GACjI,oBAAC,QAAD;IAAM,GAAE;IAAyE,QAAO;IAAe,aAAY;GAAK,CAAA;GACxH,oBAAC,QAAD;IAAM,IAAG;IAAI,IAAG;IAAI,IAAG;IAAK,IAAG;IAAK,QAAO;IAAe,aAAY;GAAK,CAAA;EACxE;;AAET;AAUA,SAAS,MAAM,EAAE,OAAO,IAAI,UAAU,SAAqB;CACzD,OACE,qBAAC,OAAD;EAAK,WAAW,0BAAO;YAAvB;GACE,oBAAC,SAAD;IAAO,SAAS;IAAI,WAAW,0BAAO;cACnC;GACI,CAAA;GACN;GACA,SAAS,oBAAC,QAAD;IAAM,WAAW,0BAAO;cAAQ;GAAY,CAAA;EACnD;;AAET;AAYA,SAAS,cAAc,EAAE,IAAI,OAAO,aAAa,OAAO,UAAU,SAA6B;CAC7F,MAAM,CAAC,MAAM,WAAW,MAAM,SAAS,KAAK;CAC5C,MAAM,YAAY,MAAM,OAA0B,IAAI;CAEtD,OACE,oBAAC,OAAD;EAAO,OAAO,SAAS;EAAgB;EAAW;YAChD,qBAAC,OAAD;GAAK,WAAW,0BAAO;aAAvB,CACE,oBAAC,SAAD;IACM;IACJ,MAAM,OAAO,SAAS;IACT;IACN;IACG;IACV,WAAW,0BAAO;GACnB,CAAA,GACD,oBAAC,UAAD;IACE,KAAK;IACL,MAAK;IACL,eAAe,SAAS,MAAM,CAAC,CAAC;IAChC,WAAW,0BAAO;IAClB,cAAY,OAAO,kBAAkB;cAErC,oBAAC,SAAD,EAAS,MAAM,KAAO,CAAA;GAChB,CAAA,CACL;;CACA,CAAA;AAEX;AAcA,SAAS,YAAY,EAAE,OAAO,UAAU,UAAU,SAAS,YAAsC;CAC/F,IAAI,CAAC,OAAO,OAAO;CACnB,OACE,qBAAC,OAAD;EAAK,WAAW,0BAAO;YAAvB,CACE,qBAAC,SAAD;GAAO,WAAW,0BAAO;aAAzB,CACE,oBAAC,SAAD;IACE,MAAK;IACL,WAAW,0BAAO;IACT;IACT,WAAW,MAAM,WAAW,EAAE,OAAO,OAAO;GAC7C,CAAA,GACD,oBAAC,QAAD,EAAA,UAAO,MAAY,CAAA,CACd;MACN,YACC,oBAAC,KAAD;GAAG,MAAM;GAAU,WAAW,0BAAO;aAClC;EACA,CAAA,CAEF;;AAET;AAkCA,SAAgB,WAAW,EACzB,QAAQ,WACR,UACA,QACA,UACA,UAAU,OACV,OACA,WACA,mBAAmB,iBACnB,sBAAsB,YACtB,gBAAgB,eAChB,iBAAiB,oBACjB,kBACkB;CAClB,MAAM,KAAK,MAAM,MAAM;CACvB,MAAM,CAAC,OAAO,YAAY,MAAM,SAAS,EAAE;CAC3C,MAAM,CAAC,UAAU,eAAe,MAAM,SAAS,EAAE;CACjD,MAAM,CAAC,YAAY,iBAAiB,MAAM,SAAS,KAAK;CACxD,MAAM,CAAC,QAAQ,aAAa,MAAM,SAAiC,CAAC,CAAC;CACrE,MAAM,CAAC,WAAW,gBAAgB,MAAM,SAAS,KAAK;CAEtD,MAAM,iBAA0B;EAC9B,MAAM,YAAoC,CAAC;EAC3C,IAAI,CAAC,MAAM,KAAK,GAAG,UAAU,QAAQ;OAChC,IAAI,CAAC,6BAA6B,KAAK,KAAK,GAAG,UAAU,QAAQ;EACtE,IAAI,CAAC,UAAU,UAAU,WAAW;EACpC,UAAU,SAAS;EACnB,OAAO,OAAO,KAAK,SAAS,CAAC,CAAC,WAAW;CAC3C;CAEA,MAAM,gBAAgB,MAAuB;EAC3C,EAAE,eAAe;EACjB,aAAa,IAAI;EACjB,IAAI,CAAC,SAAS,GAAG;EACjB,WAAW;GAAE;GAAO;GAAU;EAAW,CAAC;CAC5C;CAEA,OACE,oBAAC,OAAD;EAAK,WAAW,GAAG,0BAAO,YAAY,SAAS;YAC7C,qBAAC,OAAD;GAAK,WAAW,0BAAO;aAAvB;IACG,SAAS,oBAAC,OAAD;KAAK,WAAW,0BAAO;eAAY;IAAW,CAAA;IACxD,qBAAC,OAAD;KAAK,WAAW,0BAAO;eAAvB,CACE,oBAAC,MAAD;MAAI,WAAW,0BAAO;gBAAY;KAAU,CAAA,GAC3C,YAAY,oBAAC,KAAD;MAAG,WAAW,0BAAO;gBAAe;KAAY,CAAA,CAC1D;;IACL,qBAAC,QAAD;KAAM,UAAU;KAAc,WAAW,0BAAO;eAAhD;MACE,oBAAC,OAAD;OAAO,OAAO;OAAkB,IAAI,KAAK;OAAU,OAAO,YAAY,OAAO,QAAQ,KAAA;iBACnF,oBAAC,SAAD;QACE,IAAI,KAAK;QACT,MAAK;QACL,aAAY;QACZ,OAAO;QACP,WAAW,MAAM,SAAS,EAAE,OAAO,KAAK;QACxC,WAAW,0BAAO;QAClB,cAAa;QACb,WAAA;OACD,CAAA;MACI,CAAA;MACP,oBAAC,eAAD;OACE,OAAO;OACP,IAAI,KAAK;OACT,aAAa;OACb,OAAO;OACP,WAAW,MAAM;QAAE,YAAY,EAAE,OAAO,KAAK;QAAG,IAAI,WAAW,aAAa,KAAK;OAAG;OACpF,OAAO,YAAY,OAAO,WAAW,KAAA;MACtC,CAAA;MACD,oBAAC,aAAD;OACE,OAAO;OACP,UAAU;OACV,UAAU;OACV,SAAS;OACT,WAAW,MAAM;QAAE,cAAc,CAAC;QAAG,IAAI,WAAW,aAAa,KAAK;OAAG;MAC1E,CAAA;MACD,oBAAC,UAAD;OACE,MAAK;OACL,UAAU;OACV,WAAW,0BAAO;iBAEjB,UACC,qBAAA,UAAA,EAAA,UAAA,CACE,oBAAC,QAAD,EAAM,WAAW,0BAAO,QAAU,CAAA,GAAC,eAEnC,EAAA,CAAA,IAEF;MAEI,CAAA;KACJ;;IACL,UACC,qBAAA,UAAA,EAAA,UAAA,CACE,oBAAC,MAAD,EAAI,WAAW,0BAAO,QAAU,CAAA,GAChC,oBAAC,KAAD;KAAG,WAAW,0BAAO;eAAa;IAAU,CAAA,CAC5C,EAAA,CAAA;GAED;;CACF,CAAA;AAET;AAkBA,SAAgB,WAAW,EACzB,QAAQ,qBACR,UACA,QACA,UACA,UAAU,OACV,OACA,WACA,mBAAmB,iBACnB,sBAAsB,YACtB,6BAA6B,oBAC7B,eACA,kBACA,oBACkB;CAClB,MAAM,KAAK,MAAM,MAAM;CACvB,MAAM,CAAC,OAAO,YAAY,MAAM,SAAS,EAAE;CAC3C,MAAM,CAAC,UAAU,eAAe,MAAM,SAAS,EAAE;CACjD,MAAM,CAAC,iBAAiB,sBAAsB,MAAM,SAAS,EAAE;CAC/D,MAAM,CAAC,QAAQ,aAAa,MAAM,SAAS,KAAK;CAChD,MAAM,CAAC,QAAQ,aAAa,MAAM,SAAiC,CAAC,CAAC;CACrE,MAAM,CAAC,WAAW,gBAAgB,MAAM,SAAS,KAAK;CAEtD,MAAM,iBAA0B;EAC9B,MAAM,YAAoC,CAAC;EAC3C,IAAI,CAAC,MAAM,KAAK,GAAG,UAAU,QAAQ;OAChC,IAAI,CAAC,6BAA6B,KAAK,KAAK,GAAG,UAAU,QAAQ;EACtE,IAAI,CAAC,UAAU,UAAU,WAAW;OAC/B,IAAI,SAAS,SAAS,GAAG,UAAU,WAAW;EACnD,IAAI,aAAa,iBAAiB,UAAU,kBAAkB;EAC9D,IAAI,CAAC,QAAQ,UAAU,SAAS;EAChC,UAAU,SAAS;EACnB,OAAO,OAAO,KAAK,SAAS,CAAC,CAAC,WAAW;CAC3C;CAEA,MAAM,gBAAgB,MAAuB;EAC3C,EAAE,eAAe;EACjB,aAAa,IAAI;EACjB,IAAI,CAAC,SAAS,GAAG;EACjB,WAAW;GAAE;GAAO;GAAU;EAAO,CAAC;CACxC;CAEA,OACE,oBAAC,OAAD;EAAK,WAAW,GAAG,0BAAO,YAAY,SAAS;YAC7C,qBAAC,OAAD;GAAK,WAAW,0BAAO;aAAvB;IACG,SAAS,oBAAC,OAAD;KAAK,WAAW,0BAAO;eAAY;IAAW,CAAA;IACxD,qBAAC,OAAD;KAAK,WAAW,0BAAO;eAAvB,CACE,oBAAC,MAAD;MAAI,WAAW,0BAAO;gBAAY;KAAU,CAAA,GAC3C,YAAY,oBAAC,KAAD;MAAG,WAAW,0BAAO;gBAAe;KAAY,CAAA,CAC1D;;IACL,qBAAC,QAAD;KAAM,UAAU;KAAc,WAAW,0BAAO;eAAhD;MACE,oBAAC,OAAD;OAAO,OAAO;OAAkB,IAAI,KAAK;OAAU,OAAO,YAAY,OAAO,QAAQ,KAAA;iBACnF,oBAAC,SAAD;QACE,IAAI,KAAK;QACT,MAAK;QACL,aAAY;QACZ,OAAO;QACP,WAAW,MAAM;SAAE,SAAS,EAAE,OAAO,KAAK;SAAG,IAAI,WAAW,aAAa,KAAK;QAAG;QACjF,WAAW,0BAAO;QAClB,cAAa;QACb,WAAA;OACD,CAAA;MACI,CAAA;MACP,oBAAC,eAAD;OACE,OAAO;OACP,IAAI,KAAK;OACT,aAAa;OACb,OAAO;OACP,WAAW,MAAM;QAAE,YAAY,EAAE,OAAO,KAAK;QAAG,IAAI,WAAW,aAAa,KAAK;OAAG;OACpF,OAAO,YAAY,OAAO,WAAW,KAAA;MACtC,CAAA;MACD,oBAAC,eAAD;OACE,OAAO;OACP,IAAI,KAAK;OACT,aAAa;OACb,OAAO;OACP,WAAW,MAAM;QAAE,mBAAmB,EAAE,OAAO,KAAK;QAAG,IAAI,WAAW,aAAa,KAAK;OAAG;OAC3F,OAAO,YAAY,OAAO,kBAAkB,KAAA;MAC7C,CAAA;MACA,iBACC,oBAAC,OAAD;OAAK,WAAW,0BAAO;iBACrB,qBAAC,SAAD;QAAO,WAAW,0BAAO;kBAAzB,CACE,oBAAC,SAAD;SACE,IAAI,KAAK;SACT,MAAK;SACL,SAAS;SACT,WAAW,MAAM;UAAE,UAAU,EAAE,OAAO,OAAO;UAAG,IAAI,WAAW,aAAa,KAAK;SAAG;SACpF,WAAW,0BAAO;QACnB,CAAA,GACD,oBAAC,QAAD,EAAA,UACG,mBACC,qBAAA,UAAA,EAAA,UAAA;SAAE;SACe;SACf,oBAAC,KAAD;UAAG,MAAM;UAAkB,WAAW,0BAAO;oBAC1C;SACA,CAAA;QACH,EAAA,CAAA,IAEF,cAEE,CAAA,CACD;;MACJ,CAAA;MAEN,aAAa,OAAO,UAAU,oBAAC,QAAD;OAAM,WAAW,0BAAO;iBAAQ,OAAO;MAAa,CAAA;MACnF,oBAAC,UAAD;OACE,MAAK;OACL,UAAU;OACV,WAAW,0BAAO;iBAEjB,UACC,qBAAA,UAAA,EAAA,UAAA,CACE,oBAAC,QAAD,EAAM,WAAW,0BAAO,QAAU,CAAA,GAAC,qBAEnC,EAAA,CAAA,IAEF;MAEI,CAAA;KACJ;;IACL,UACC,qBAAA,UAAA,EAAA,UAAA,CACE,oBAAC,MAAD,EAAI,WAAW,0BAAO,QAAU,CAAA,GAChC,oBAAC,KAAD;KAAG,WAAW,0BAAO;eAAa;IAAU,CAAA,CAC5C,EAAA,CAAA;GAED;;CACF,CAAA;AAET;AAcA,SAAgB,mBAAmB,EACjC,QAAQ,kBACR,WAAW,gDACX,QACA,UACA,UAAU,OACV,OACA,WACA,mBAAmB,iBACnB,aAAa,mBACb,eAAe,mBACf,eAAe,aACW;CAC1B,MAAM,KAAK,MAAM,MAAM;CACvB,MAAM,CAAC,OAAO,YAAY,MAAM,SAAS,EAAE;CAC3C,MAAM,CAAC,OAAO,YAAY,MAAM,SAAS,EAAE;CAC3C,MAAM,CAAC,MAAM,WAAW,MAAM,SAAS,KAAK;CAE5C,MAAM,gBAAgB,MAAuB;EAC3C,EAAE,eAAe;EACjB,IAAI,CAAC,MAAM,KAAK,GAAG;GAAE,SAAS,mBAAmB;GAAG;EAAQ;EAC5D,IAAI,CAAC,6BAA6B,KAAK,KAAK,GAAG;GAAE,SAAS,qBAAqB;GAAG;EAAQ;EAC1F,WAAW,EAAE,MAAM,CAAC;EACpB,QAAQ,IAAI;CACd;CAEA,OACE,oBAAC,OAAD;EAAK,WAAW,GAAG,0BAAO,YAAY,SAAS;YAC7C,qBAAC,OAAD;GAAK,WAAW,0BAAO;aAAvB;IACG,SAAS,oBAAC,OAAD;KAAK,WAAW,0BAAO;eAAY;IAAW,CAAA;IACxD,qBAAC,OAAD;KAAK,WAAW,0BAAO;eAAvB,CACE,oBAAC,MAAD;MAAI,WAAW,0BAAO;gBAAY;KAAU,CAAA,GAC3C,YAAY,oBAAC,KAAD;MAAG,WAAW,0BAAO;gBAAe;KAAY,CAAA,CAC1D;;IACJ,OACC,qBAAC,OAAD;KAAK,WAAW,0BAAO;eAAvB,CACE,qBAAC,KAAD;MAAG,WAAW,0BAAO;gBAArB;OAA+B;OACJ,oBAAC,UAAD,EAAA,UAAS,MAAc,CAAA;OAAC;MAChD;SACH,oBAAC,KAAD;MAAG,MAAM;MAAc,WAAW,0BAAO;gBACtC;KACA,CAAA,CACA;SAEL,qBAAC,QAAD;KAAM,UAAU;KAAc,WAAW,0BAAO;eAAhD,CACE,oBAAC,OAAD;MAAO,OAAO;MAAkB,IAAI,KAAK;MAAiB;gBACxD,oBAAC,SAAD;OACE,IAAI,KAAK;OACT,MAAK;OACL,aAAY;OACZ,OAAO;OACP,WAAW,MAAM;QAAE,SAAS,EAAE,OAAO,KAAK;QAAG,SAAS,EAAE;OAAG;OAC3D,WAAW,0BAAO;OAClB,cAAa;OACb,WAAA;MACD,CAAA;KACI,CAAA,GACP,oBAAC,UAAD;MACE,MAAK;MACL,UAAU;MACV,WAAW,0BAAO;gBAEjB,UACC,qBAAA,UAAA,EAAA,UAAA,CACE,oBAAC,QAAD,EAAM,WAAW,0BAAO,QAAU,CAAA,GAAC,YAEnC,EAAA,CAAA,IAEF;KAEI,CAAA,CACJ;;IAEP,UACC,qBAAA,UAAA,EAAA,UAAA,CACE,oBAAC,MAAD,EAAI,WAAW,0BAAO,QAAU,CAAA,GAChC,oBAAC,KAAD;KAAG,WAAW,0BAAO;eAAa;IAAU,CAAA,CAC5C,EAAA,CAAA;GAED;;CACF,CAAA;AAET"}