your-ai-workflow-firebase-os 2.0.1 → 2.0.3

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 (183) hide show
  1. package/dist/AccessNotice-BZ5Gt1nP.js +40 -0
  2. package/dist/AccessNotice-CN7kc70o.cjs +1 -0
  3. package/dist/{AddressField-R-HvndkG.js → AddressField-9Sqn8TvC.js} +3 -3
  4. package/dist/{AddressField-BkzFOo2t.cjs → AddressField-B7wtV8yA.cjs} +1 -1
  5. package/dist/Assets-DBMwZ3bN.cjs +1 -0
  6. package/dist/Assets-DT-NU_WO.js +296 -0
  7. package/dist/Attachments-Bl9_dfsu.js +46 -0
  8. package/dist/Attachments-UVK9SRXf.cjs +1 -0
  9. package/dist/Billing-0RIHayHy.cjs +1 -0
  10. package/dist/Billing-FNE2r3_d.js +379 -0
  11. package/dist/BookingCalendar-BP5kiv3d.cjs +1 -0
  12. package/dist/BookingCalendar-DZ2fEFja.js +309 -0
  13. package/dist/Button-4lzOE31p.js +48 -0
  14. package/dist/Button-5DlB2MCi.cjs +1 -0
  15. package/dist/CalendarView-BimoXy_k.cjs +1 -0
  16. package/dist/CalendarView-D-ykjpvI.js +664 -0
  17. package/dist/ConfirmModal-Di9GR-vV.cjs +1 -0
  18. package/dist/ConfirmModal-gKQEpd4d.js +113 -0
  19. package/dist/ContactPopup-BXnHrRwl.js +1114 -0
  20. package/dist/ContactPopup-lxmRMoIa.cjs +1 -0
  21. package/dist/CopyLink-BpEQWmfI.cjs +1 -0
  22. package/dist/CopyLink-CBAVfcm1.js +43 -0
  23. package/dist/DashboardNav-CXa_ci-_.cjs +1 -0
  24. package/dist/DashboardNav-Dmn7PVSp.js +886 -0
  25. package/dist/EmailAdmin-CjN_rvxT.js +318 -0
  26. package/dist/EmailAdmin-lAEBdY1s.cjs +1 -0
  27. package/dist/EventCard-46EquygT.cjs +1 -0
  28. package/dist/EventCard-B6xD-mk3.js +97 -0
  29. package/dist/FileViewerPopup-CX-J75TM.js +1283 -0
  30. package/dist/FileViewerPopup-D8-MmIoS.cjs +3 -0
  31. package/dist/FormNote-BivRNA3J.js +50 -0
  32. package/dist/FormNote-BtdTGpml.cjs +1 -0
  33. package/dist/FormsAdmin-B5PBCG2W.js +812 -0
  34. package/dist/FormsAdmin-BQCULvi5.cjs +1 -0
  35. package/dist/Inbox-BPk2ZkE5.js +779 -0
  36. package/dist/Inbox-DNrcBx0o.cjs +3 -0
  37. package/dist/Loader-Bu89fsbB.cjs +1 -0
  38. package/dist/Loader-D4gwgBOq.js +32 -0
  39. package/dist/ManagePlanButton-B0dwqZBd.cjs +1 -0
  40. package/dist/ManagePlanButton-BSrOHYze.js +29 -0
  41. package/dist/MyBookings-6qr0GgzO.cjs +1 -0
  42. package/dist/MyBookings-BQjGM2LQ.js +113 -0
  43. package/dist/PageTitle-CZhgmmDT.cjs +3 -0
  44. package/dist/PageTitle-D93YCiN8.js +1606 -0
  45. package/dist/PagesAdmin-BcHIcqM5.cjs +34 -0
  46. package/dist/PagesAdmin-D69P9nRb.js +5802 -0
  47. package/dist/PagesAdmin-DNwZOKjA.cjs +1 -0
  48. package/dist/PagesAdmin-HUITEcHx.js +3 -0
  49. package/dist/PaymentsAdmin-C2iCI9qC.js +1291 -0
  50. package/dist/PaymentsAdmin-CoXi2vCm.cjs +2 -0
  51. package/dist/{PhoneInputField-B3P_vUDW.cjs → PhoneInputField-BEwYZMB7.cjs} +1 -1
  52. package/dist/{PhoneInputField-BlYHb5e0.js → PhoneInputField-BG0L2djE.js} +2 -2
  53. package/dist/PhoneInputField-DfOtCIH_.js +2 -0
  54. package/dist/{PhoneInputField-CdNTvWXQ.cjs → PhoneInputField-jhWvto8C.cjs} +1 -1
  55. package/dist/Popup-DHYGFl2-.cjs +1 -0
  56. package/dist/Popup-xROLytgr.js +142 -0
  57. package/dist/ProviderMark-BBfaM5Yl.js +52 -0
  58. package/dist/ProviderMark-xLkUN3Fx.cjs +1 -0
  59. package/dist/PublishApp-Bm-6r3Td.js +595 -0
  60. package/dist/PublishApp-D4XJUkJa.cjs +2 -0
  61. package/dist/Said-CoC15awL.js +94 -0
  62. package/dist/Said-IqCNofdh.cjs +1 -0
  63. package/dist/ScheduleAdmin-BKfQkrR8.js +1853 -0
  64. package/dist/ScheduleAdmin-DwK36GAZ.cjs +1 -0
  65. package/dist/SchedulePicker--urIH2Eb.js +112 -0
  66. package/dist/SchedulePicker-nmqzUnUH.cjs +1 -0
  67. package/dist/Setup-CHLgd-ag.js +849 -0
  68. package/dist/Setup-CaDranTm.cjs +1374 -0
  69. package/dist/SetupPayments-CVIwh1eQ.js +411 -0
  70. package/dist/SetupPayments-HNXWA25X.cjs +1 -0
  71. package/dist/SignInAdmin-C94-A-0w.cjs +4 -0
  72. package/dist/SignInAdmin-Yxgv_8U4.js +766 -0
  73. package/dist/SupportBar-CDT0HwdP.cjs +1 -0
  74. package/dist/SupportBar-CN_JGC-9.js +117 -0
  75. package/dist/SystemTabContent-L3vGGF3P.cjs +1 -0
  76. package/dist/SystemTabContent-QdxxLILE.js +35 -0
  77. package/dist/TemplateDrive-DV8zNjYe.cjs +1 -0
  78. package/dist/TemplateDrive-NJY_AAvV.js +1197 -0
  79. package/dist/ThemeAdmin-BzFjJkLg.js +269 -0
  80. package/dist/ThemeAdmin-DVnPNxe7.cjs +1 -0
  81. package/dist/ThemeAdmin-DY7Vc4Sj.cjs +3 -0
  82. package/dist/ThemeAdmin-DnC-D2N3.js +2 -0
  83. package/dist/{ContactPopup-9J_YeJrb.js → TimeZoneField-DkI1Bkcz.js} +3382 -5513
  84. package/dist/TimeZoneField-qs7NPR30.cjs +12 -0
  85. package/dist/TransactionsAdmin-BsZ-oQWi.js +582 -0
  86. package/dist/TransactionsAdmin-CTSTiPld.cjs +1 -0
  87. package/dist/Trouble-9es_AI4F.cjs +1 -0
  88. package/dist/Trouble-oWt9fMsm.js +164 -0
  89. package/dist/Users-CTitWXyd.cjs +1 -0
  90. package/dist/Users-DJjQTWJF.js +1207 -0
  91. package/dist/aiModels-DIP9fn8T.cjs +1 -0
  92. package/dist/{aiModels-BHlEfuRJ.js → aiModels-DnDhNGup.js} +29 -61
  93. package/dist/arrivalRoads-BJ-35vkk.js +228 -0
  94. package/dist/arrivalRoads-qoU-B4jt.cjs +4 -0
  95. package/dist/{bake-D0gLVNTL.cjs → bake-n2wyFw0B.cjs} +1 -1
  96. package/dist/{bake-OErV2MLy.js → bake-naZeMu98.js} +14 -14
  97. package/dist/bookingPages-C7a3srPG.js +102 -0
  98. package/dist/bookingPages-DvbFbD9X.cjs +1 -0
  99. package/dist/components/CustomSelect.d.ts +7 -1
  100. package/dist/components/RegistrationFields.d.ts +6 -1
  101. package/dist/components/Reveal.d.ts +12 -0
  102. package/dist/components/ScrollToTop.d.ts +4 -0
  103. package/dist/contentFallback-C9MZjdq7.cjs +1 -0
  104. package/dist/contentFallback-CEDY0Pwp.js +96 -0
  105. package/dist/contentKey-Bwry4lDa.js +13 -0
  106. package/dist/contentKey-DJGYYnAE.cjs +1 -0
  107. package/dist/{dist-_zWHDDrc.js → dist-DUPvBnOA.js} +1 -1
  108. package/dist/email-BfnZnMwD.cjs +1 -0
  109. package/dist/email-Ddj8Dlu6.js +58 -0
  110. package/dist/{fileBytes-B0qxHYQL.cjs → fileBytes-BJPaiX9Y.cjs} +1 -1
  111. package/dist/{fileBytes-uhq3pGCS.js → fileBytes-bjgvCfWu.js} +2 -2
  112. package/dist/forms-Bvx9HTM6.js +75 -0
  113. package/dist/forms-CmNeTETW.cjs +1 -0
  114. package/dist/lib/ThemeContext.d.ts +0 -14
  115. package/dist/lib/bareImgWatch.d.ts +6 -1
  116. package/dist/lib/localEdits.d.ts +2 -0
  117. package/dist/lib/pageDesignLines.d.ts +1 -1
  118. package/dist/lib/paymentProducts.d.ts +8 -0
  119. package/dist/lib/payments.d.ts +11 -1
  120. package/dist/lib/people.d.ts +9 -0
  121. package/dist/lib/recordsKey.d.ts +24 -0
  122. package/dist/{lucide-react-DiyP8FA_.js → lucide-react-CA7GD7Nv.js} +8 -8
  123. package/dist/notices-B7iIrIEg.js +29 -0
  124. package/dist/notices-upMg8UVh.cjs +1 -0
  125. package/dist/openOnArrival-Buwqb86D.cjs +1 -0
  126. package/dist/openOnArrival-S2K6v-lB.js +35 -0
  127. package/dist/pageFiles--Ih60ITP.js +45 -0
  128. package/dist/pageFiles-UtBmlOcD.cjs +1 -0
  129. package/dist/pages/PagesAdmin.d.ts +69 -7
  130. package/dist/{pdf-DLuvpvHg.js → pdf-DRXcPGkr.js} +1 -1
  131. package/dist/{pdf.worker.min-C0gkd2Ec.js → pdf.worker.min-CfKZezeM.js} +1 -1
  132. package/dist/people-2jZE_pdI.js +102 -0
  133. package/dist/people-BpVvIr9-.cjs +1 -0
  134. package/dist/personName-CFw3pxuu.js +18 -0
  135. package/dist/personName-CbzN_i57.cjs +1 -0
  136. package/dist/publishSteps-C1cDFzzB.js +88 -0
  137. package/dist/publishSteps-SSm8afDw.cjs +1 -0
  138. package/dist/recordLock-DHVvI9bP.js +61 -0
  139. package/dist/recordLock-DWeIxiwh.cjs +1 -0
  140. package/dist/recordsKey-B7QrxdeU.cjs +1 -0
  141. package/dist/recordsKey-D5-wC0Aw.js +141 -0
  142. package/dist/registrationFields-CLeR2lQJ.js +181 -0
  143. package/dist/registrationFields-v4pOoRdn.cjs +1 -0
  144. package/dist/renderer.cjs.js +1 -1
  145. package/dist/renderer.es.js +1 -1
  146. package/dist/roles-D6VaHWfV.js +147 -0
  147. package/dist/roles-DQUFFBQe.cjs +1 -0
  148. package/dist/scheduleData-ATN8w5hI.js +727 -0
  149. package/dist/scheduleData-Cltj0ABZ.cjs +1 -0
  150. package/dist/server.cjs.js +6 -6
  151. package/dist/server.es.js +716 -715
  152. package/dist/serviceStatus-TQyZO_Y_.cjs +1 -0
  153. package/dist/serviceStatus-vS8AI7SZ.js +125 -0
  154. package/dist/tabAudience-BqpN6dsR.cjs +1 -0
  155. package/dist/tabAudience-CRyMvv0v.js +34 -0
  156. package/dist/transactions-BqMQDRx3.js +343 -0
  157. package/dist/transactions-CufFrdAM.cjs +1 -0
  158. package/dist/useIsPhone-BVGx_X3e.js +13 -0
  159. package/dist/useIsPhone-o63tNneA.cjs +1 -0
  160. package/dist/{validate-DzSJWuyL.js → validate-CmC_tLK-.js} +433 -351
  161. package/dist/validate-DZMwqSrb.cjs +103 -0
  162. package/dist/vite/validate.d.ts +14 -0
  163. package/dist/vite.cjs.js +1 -1
  164. package/dist/vite.es.js +1 -1
  165. package/dist/your-ai-workflow-firebase-os.cjs.js +15 -1431
  166. package/dist/your-ai-workflow-firebase-os.css +1 -1
  167. package/dist/your-ai-workflow-firebase-os.es.js +11695 -35911
  168. package/package.json +1 -1
  169. package/src/index.css +122 -2
  170. package/dist/ContactPopup-DF8qQCoY.cjs +0 -12
  171. package/dist/PhoneInputField-Btx07xvM.js +0 -2
  172. package/dist/aiModels-BIhoTNH0.cjs +0 -1
  173. package/dist/validate-e48WXJdP.cjs +0 -103
  174. /package/dist/{address-DI1YaCI4.cjs → address-Bsb8COq2.cjs} +0 -0
  175. /package/dist/{address-Ca1h_UZX.js → address-C2bHNxJU.js} +0 -0
  176. /package/dist/{dist-BLGlDv1e.cjs → dist-E4jTFPs7.cjs} +0 -0
  177. /package/dist/{lucide-react-BYniZ3lQ.cjs → lucide-react-BwV6L6Is.cjs} +0 -0
  178. /package/dist/{mediaKind-dk396a03.cjs → mediaKind-D0MWyv6b.cjs} +0 -0
  179. /package/dist/{mediaKind-De2Cx_kB.js → mediaKind-DmKMsjeY.js} +0 -0
  180. /package/dist/{pdf-CC5g01eC.cjs → pdf-jLjjhvjp.cjs} +0 -0
  181. /package/dist/{pdf.worker.min-pI_P-OCl.cjs → pdf.worker.min-bLgNWd7w.cjs} +0 -0
  182. /package/dist/{verifiedAccount-C1iCxopN.js → verifiedAccount-DRbRFJ6H.js} +0 -0
  183. /package/dist/{verifiedAccount-D3OeaOBo.cjs → verifiedAccount-DScyKk96.cjs} +0 -0
@@ -0,0 +1,1606 @@
1
+ import { Fn as e, Kn as t, Nn as n, Wn as r, dr as i, i as a, ir as o, l as s, o as c, p as l } from "./TimeZoneField-DkI1Bkcz.js";
2
+ import { Ct as u, F as d, Jt as f, Xt as p, ht as m, in as ee, n as h, o as g, sn as _, t as v } from "./lucide-react-CA7GD7Nv.js";
3
+ import { b as y } from "./mediaKind-DmKMsjeY.js";
4
+ import b, { createElement as x, useLayoutEffect as S, useMemo as C, useRef as w, useState as T } from "react";
5
+ import { Fragment as E, jsx as D, jsxs as O } from "react/jsx-runtime";
6
+ //#region src/configs/theme.config.ts
7
+ var k = {
8
+ appName: "Your AI Firebase",
9
+ defaultTheme: "light",
10
+ showThemeToggle: !0,
11
+ logoUrl: "https://firebasestorage.googleapis.com/v0/b/fir-os-47863.firebasestorage.app/o/pub_files%2F1776321238933_favicon_smaller.png?alt=media&token=efecb55c-2456-4cbe-a20a-b86db54a1e55",
12
+ faviconUrl: "https://firebasestorage.googleapis.com/v0/b/fir-os-47863.firebasestorage.app/o/pub_files%2F1776321238933_favicon_smaller.png?alt=media&token=efecb55c-2456-4cbe-a20a-b86db54a1e55",
13
+ fonts: {},
14
+ colors: {
15
+ dark: {
16
+ background: "#07070f",
17
+ backgroundSecondary: "#0a0a18",
18
+ foreground: "#f0eeff",
19
+ accent: "#a78bfa",
20
+ buttonText: "#ffffff"
21
+ },
22
+ light: {
23
+ background: "#fcfaff",
24
+ backgroundSecondary: "#f7f3ff",
25
+ foreground: "#1e1b4b",
26
+ accent: "#7c3aed",
27
+ buttonText: "#ffffff"
28
+ }
29
+ },
30
+ cornerRounding: "default",
31
+ cornerRadii: {
32
+ buttonRadius: .75,
33
+ inputRadius: .75,
34
+ cardRadius: 1.5,
35
+ modalRadius: 2.5
36
+ }
37
+ }, A = "2.0.3", j = (e) => e.trim().split("-").map((e) => e.charAt(0).toUpperCase() + e.slice(1)).join(""), M = (e) => e.replace(/([a-z0-9])([A-Z])/g, "$1-$2").replace(/([A-Z])([A-Z][a-z])/g, "$1-$2").toLowerCase(), N = (e) => {
38
+ let t = e.replace(/-/g, " ");
39
+ return t.charAt(0).toUpperCase() + t.slice(1);
40
+ }, P = (() => {
41
+ let e = h, t = e ? Object.keys(e) : [];
42
+ return t.length === 0 && (t = Object.keys(v).filter((e) => /^[A-Z]/.test(e) && !/Icon$/.test(e) && !/^Lucide/.test(e) && e !== "IconNode")), Array.from(new Set(t.map(M))).sort();
43
+ })(), F = /* @__PURE__ */ "layers.house.layout-dashboard.list.table.kanban.calendar.clock.file-text.files.folder.hard-drive.upload.download.paperclip.book-open.notebook-pen.users.user.user-plus.contact.building.briefcase.handshake.mail.message-square.message-circle.send.inbox.bell.megaphone.phone.shopping-cart.package.truck.receipt.credit-card.banknote.wallet.tag.percent.chart-bar.chart-line.chart-pie.trending-up.target.gauge.activity.settings.sliders-horizontal.wrench.shield.lock.key.eye.search.star.heart.bookmark.flag.pin.map-pin.globe.circle-check.circle-alert.info.circle-question-mark.life-buoy.sparkles.zap.rocket.camera.image.video.music.mic.palette.pen-tool.scissors.stethoscope.graduation-cap.utensils.plane.car.dumbbell.leaf.sun.moon".split("."), I = {
44
+ money: [
45
+ "banknote",
46
+ "wallet",
47
+ "credit-card",
48
+ "coins",
49
+ "dollar-sign",
50
+ "receipt"
51
+ ],
52
+ cash: [
53
+ "banknote",
54
+ "coins",
55
+ "wallet"
56
+ ],
57
+ payment: [
58
+ "credit-card",
59
+ "banknote",
60
+ "receipt"
61
+ ],
62
+ invoice: ["receipt", "file-text"],
63
+ price: [
64
+ "tag",
65
+ "dollar-sign",
66
+ "receipt"
67
+ ],
68
+ people: [
69
+ "users",
70
+ "user",
71
+ "contact"
72
+ ],
73
+ customer: [
74
+ "users",
75
+ "contact",
76
+ "user-round"
77
+ ],
78
+ client: [
79
+ "users",
80
+ "contact",
81
+ "briefcase"
82
+ ],
83
+ team: ["users", "users-round"],
84
+ staff: ["users", "id-card"],
85
+ chat: [
86
+ "message-circle",
87
+ "message-square",
88
+ "messages-square"
89
+ ],
90
+ message: [
91
+ "message-circle",
92
+ "mail",
93
+ "send"
94
+ ],
95
+ email: [
96
+ "mail",
97
+ "send",
98
+ "inbox"
99
+ ],
100
+ task: [
101
+ "list-checks",
102
+ "square-check",
103
+ "clipboard-check"
104
+ ],
105
+ todo: ["list-checks", "square-check"],
106
+ project: [
107
+ "kanban",
108
+ "folder-kanban",
109
+ "briefcase"
110
+ ],
111
+ board: ["kanban", "layout-dashboard"],
112
+ photo: [
113
+ "image",
114
+ "camera",
115
+ "images"
116
+ ],
117
+ picture: ["image", "images"],
118
+ document: [
119
+ "file-text",
120
+ "files",
121
+ "file"
122
+ ],
123
+ doc: ["file-text", "file"],
124
+ shop: [
125
+ "shopping-cart",
126
+ "store",
127
+ "shopping-bag"
128
+ ],
129
+ store: [
130
+ "store",
131
+ "shopping-bag",
132
+ "shopping-cart"
133
+ ],
134
+ order: [
135
+ "shopping-cart",
136
+ "package",
137
+ "receipt"
138
+ ],
139
+ delivery: ["truck", "package"],
140
+ home: ["house", "house-heart"],
141
+ booking: [
142
+ "calendar-check",
143
+ "calendar",
144
+ "clock"
145
+ ],
146
+ appointment: [
147
+ "calendar-clock",
148
+ "calendar",
149
+ "clock"
150
+ ],
151
+ schedule: [
152
+ "calendar-days",
153
+ "calendar",
154
+ "clock"
155
+ ],
156
+ event: [
157
+ "calendar",
158
+ "party-popper",
159
+ "ticket"
160
+ ],
161
+ report: [
162
+ "chart-bar",
163
+ "chart-line",
164
+ "file-chart-column"
165
+ ],
166
+ stats: [
167
+ "chart-bar",
168
+ "chart-line",
169
+ "chart-pie"
170
+ ],
171
+ analytics: [
172
+ "chart-line",
173
+ "chart-bar",
174
+ "activity"
175
+ ],
176
+ help: [
177
+ "circle-question-mark",
178
+ "life-buoy",
179
+ "info"
180
+ ],
181
+ support: [
182
+ "life-buoy",
183
+ "headset",
184
+ "circle-question-mark"
185
+ ],
186
+ idea: ["lightbulb", "sparkles"],
187
+ health: [
188
+ "heart-pulse",
189
+ "stethoscope",
190
+ "activity"
191
+ ],
192
+ food: [
193
+ "utensils",
194
+ "chef-hat",
195
+ "pizza"
196
+ ],
197
+ travel: [
198
+ "plane",
199
+ "map",
200
+ "luggage"
201
+ ],
202
+ location: [
203
+ "map-pin",
204
+ "map",
205
+ "globe"
206
+ ],
207
+ address: ["map-pin", "house"],
208
+ security: [
209
+ "shield",
210
+ "lock",
211
+ "key"
212
+ ],
213
+ password: ["key", "lock"],
214
+ settings: [
215
+ "settings",
216
+ "sliders-horizontal",
217
+ "wrench"
218
+ ],
219
+ file: [
220
+ "file",
221
+ "file-text",
222
+ "files",
223
+ "folder"
224
+ ],
225
+ upload: ["upload", "cloud-upload"],
226
+ video: [
227
+ "video",
228
+ "film",
229
+ "clapperboard"
230
+ ],
231
+ school: [
232
+ "graduation-cap",
233
+ "book-open",
234
+ "school"
235
+ ],
236
+ course: ["graduation-cap", "book-open"],
237
+ gym: ["dumbbell", "activity"],
238
+ garden: [
239
+ "leaf",
240
+ "flower",
241
+ "sprout"
242
+ ],
243
+ car: ["car", "car-front"],
244
+ pet: [
245
+ "paw-print",
246
+ "dog",
247
+ "cat"
248
+ ],
249
+ note: [
250
+ "notebook-pen",
251
+ "sticky-note",
252
+ "pencil"
253
+ ],
254
+ write: [
255
+ "pencil",
256
+ "pen-tool",
257
+ "notebook-pen"
258
+ ],
259
+ time: [
260
+ "clock",
261
+ "timer",
262
+ "hourglass"
263
+ ],
264
+ star: ["star", "sparkles"],
265
+ favourite: [
266
+ "star",
267
+ "heart",
268
+ "bookmark"
269
+ ],
270
+ favorite: [
271
+ "star",
272
+ "heart",
273
+ "bookmark"
274
+ ],
275
+ album: [
276
+ "images",
277
+ "image",
278
+ "camera"
279
+ ],
280
+ gallery: [
281
+ "images",
282
+ "image",
283
+ "camera"
284
+ ],
285
+ profile: [
286
+ "circle-user",
287
+ "user-round",
288
+ "id-card"
289
+ ],
290
+ account: [
291
+ "circle-user",
292
+ "user-round",
293
+ "id-card"
294
+ ],
295
+ member: [
296
+ "users",
297
+ "user-round",
298
+ "id-card"
299
+ ],
300
+ membership: [
301
+ "id-card",
302
+ "users",
303
+ "award"
304
+ ],
305
+ subscription: [
306
+ "credit-card",
307
+ "repeat",
308
+ "wallet"
309
+ ],
310
+ plan: [
311
+ "clipboard-list",
312
+ "layout-list",
313
+ "credit-card"
314
+ ],
315
+ ticket: [
316
+ "ticket",
317
+ "tickets",
318
+ "inbox"
319
+ ],
320
+ request: [
321
+ "inbox",
322
+ "send",
323
+ "file-text"
324
+ ],
325
+ progress: [
326
+ "trending-up",
327
+ "gauge",
328
+ "activity"
329
+ ],
330
+ result: [
331
+ "chart-bar",
332
+ "clipboard-check",
333
+ "trophy"
334
+ ],
335
+ score: [
336
+ "trophy",
337
+ "target",
338
+ "star"
339
+ ],
340
+ library: [
341
+ "library",
342
+ "book-open",
343
+ "folder"
344
+ ],
345
+ lesson: ["graduation-cap", "book-open"],
346
+ session: [
347
+ "calendar-clock",
348
+ "clock",
349
+ "video"
350
+ ],
351
+ service: [
352
+ "wrench",
353
+ "handshake",
354
+ "briefcase"
355
+ ],
356
+ statement: [
357
+ "file-text",
358
+ "receipt",
359
+ "banknote"
360
+ ],
361
+ saved: [
362
+ "bookmark",
363
+ "heart",
364
+ "star"
365
+ ],
366
+ list: [
367
+ "list",
368
+ "list-checks",
369
+ "layout-list"
370
+ ],
371
+ detail: ["file-text", "info"],
372
+ referral: [
373
+ "user-plus",
374
+ "share",
375
+ "gift"
376
+ ],
377
+ reward: [
378
+ "gift",
379
+ "trophy",
380
+ "award"
381
+ ],
382
+ badge: [
383
+ "award",
384
+ "badge",
385
+ "medal"
386
+ ],
387
+ certificate: [
388
+ "award",
389
+ "file-badge",
390
+ "scroll"
391
+ ],
392
+ download: ["download", "cloud-download"],
393
+ history: [
394
+ "rotate-ccw-clock",
395
+ "clock",
396
+ "rotate-ccw"
397
+ ],
398
+ feedback: [
399
+ "message-square",
400
+ "star",
401
+ "thumbs-up"
402
+ ],
403
+ review: ["star", "message-square"],
404
+ wishlist: [
405
+ "heart",
406
+ "bookmark",
407
+ "star"
408
+ ],
409
+ cart: ["shopping-cart", "shopping-bag"],
410
+ credit: [
411
+ "coins",
412
+ "wallet",
413
+ "credit-card"
414
+ ],
415
+ dashboard: ["layout-dashboard", "gauge"],
416
+ welcome: [
417
+ "hand",
418
+ "house",
419
+ "sparkles"
420
+ ],
421
+ onboarding: [
422
+ "rocket",
423
+ "list-checks",
424
+ "user-plus"
425
+ ],
426
+ benefit: [
427
+ "gift",
428
+ "sparkles",
429
+ "award"
430
+ ],
431
+ perk: ["gift", "sparkles"],
432
+ resource: [
433
+ "folder",
434
+ "book-open",
435
+ "files"
436
+ ],
437
+ guide: [
438
+ "book-open",
439
+ "compass",
440
+ "map"
441
+ ],
442
+ faq: ["circle-question-mark", "message-circle"],
443
+ contract: [
444
+ "file-pen",
445
+ "file-text",
446
+ "scroll"
447
+ ],
448
+ agreement: ["handshake", "file-pen"],
449
+ quote: [
450
+ "file-text",
451
+ "receipt",
452
+ "tag"
453
+ ],
454
+ enquiry: ["message-square", "mail"],
455
+ inquiry: ["message-square", "mail"],
456
+ application: [
457
+ "file-text",
458
+ "clipboard-list",
459
+ "send"
460
+ ],
461
+ form: ["clipboard-list", "file-text"],
462
+ submission: [
463
+ "inbox",
464
+ "send",
465
+ "file-text"
466
+ ],
467
+ record: [
468
+ "folder",
469
+ "file-text",
470
+ "database"
471
+ ],
472
+ log: [
473
+ "rotate-ccw-clock",
474
+ "list",
475
+ "file-text"
476
+ ],
477
+ product: [
478
+ "package",
479
+ "tag",
480
+ "shopping-bag"
481
+ ],
482
+ inventory: [
483
+ "package",
484
+ "boxes",
485
+ "warehouse"
486
+ ],
487
+ stock: [
488
+ "package",
489
+ "boxes",
490
+ "warehouse"
491
+ ],
492
+ catalogue: [
493
+ "book-open",
494
+ "package",
495
+ "layout-grid"
496
+ ],
497
+ catalog: [
498
+ "book-open",
499
+ "package",
500
+ "layout-grid"
501
+ ],
502
+ item: [
503
+ "package",
504
+ "tag",
505
+ "list"
506
+ ],
507
+ supplier: [
508
+ "truck",
509
+ "factory",
510
+ "handshake"
511
+ ],
512
+ vendor: [
513
+ "store",
514
+ "truck",
515
+ "handshake"
516
+ ],
517
+ checkout: [
518
+ "shopping-cart",
519
+ "credit-card",
520
+ "receipt"
521
+ ],
522
+ shipping: [
523
+ "truck",
524
+ "package",
525
+ "map-pin"
526
+ ],
527
+ sale: [
528
+ "trending-up",
529
+ "tag",
530
+ "banknote"
531
+ ],
532
+ pricing: [
533
+ "tag",
534
+ "banknote",
535
+ "receipt"
536
+ ],
537
+ deal: [
538
+ "handshake",
539
+ "tag",
540
+ "trending-up"
541
+ ],
542
+ lead: [
543
+ "user-plus",
544
+ "target",
545
+ "trending-up"
546
+ ],
547
+ discount: [
548
+ "percent",
549
+ "badge-percent",
550
+ "tag"
551
+ ],
552
+ coupon: [
553
+ "ticket-percent",
554
+ "tag",
555
+ "percent"
556
+ ],
557
+ return: [
558
+ "rotate-ccw",
559
+ "package",
560
+ "receipt"
561
+ ],
562
+ refund: [
563
+ "rotate-ccw",
564
+ "banknote",
565
+ "receipt"
566
+ ],
567
+ warranty: [
568
+ "shield-check",
569
+ "file-badge",
570
+ "wrench"
571
+ ],
572
+ licence: [
573
+ "file-badge",
574
+ "award",
575
+ "key"
576
+ ],
577
+ license: [
578
+ "file-badge",
579
+ "award",
580
+ "key"
581
+ ],
582
+ insurance: [
583
+ "shield",
584
+ "umbrella",
585
+ "file-text"
586
+ ],
587
+ job: [
588
+ "briefcase",
589
+ "hammer",
590
+ "clipboard-list"
591
+ ],
592
+ shift: [
593
+ "clock",
594
+ "calendar-clock",
595
+ "users"
596
+ ],
597
+ rota: [
598
+ "calendar-days",
599
+ "clock",
600
+ "users"
601
+ ],
602
+ timesheet: [
603
+ "clock",
604
+ "calendar-check",
605
+ "table"
606
+ ],
607
+ expense: [
608
+ "receipt",
609
+ "banknote",
610
+ "wallet"
611
+ ],
612
+ budget: [
613
+ "wallet",
614
+ "chart-pie",
615
+ "banknote"
616
+ ],
617
+ policy: [
618
+ "file-text",
619
+ "shield",
620
+ "book-open"
621
+ ],
622
+ handbook: [
623
+ "book-open",
624
+ "file-text",
625
+ "scroll"
626
+ ],
627
+ training: [
628
+ "graduation-cap",
629
+ "book-open",
630
+ "dumbbell"
631
+ ],
632
+ candidate: [
633
+ "user-search",
634
+ "user-plus",
635
+ "file-text"
636
+ ],
637
+ applicant: [
638
+ "user-search",
639
+ "user-plus",
640
+ "file-text"
641
+ ],
642
+ volunteer: [
643
+ "hand-heart",
644
+ "users",
645
+ "heart"
646
+ ],
647
+ partner: [
648
+ "handshake",
649
+ "users",
650
+ "building"
651
+ ],
652
+ sponsor: [
653
+ "handshake",
654
+ "badge-dollar-sign",
655
+ "award"
656
+ ],
657
+ donation: [
658
+ "heart-handshake",
659
+ "gift",
660
+ "banknote"
661
+ ],
662
+ listing: [
663
+ "list",
664
+ "house",
665
+ "tag"
666
+ ],
667
+ property: [
668
+ "house",
669
+ "building",
670
+ "key"
671
+ ],
672
+ room: [
673
+ "door-open",
674
+ "bed",
675
+ "layout-grid"
676
+ ],
677
+ venue: [
678
+ "building",
679
+ "map-pin",
680
+ "house"
681
+ ],
682
+ vehicle: [
683
+ "car",
684
+ "truck",
685
+ "car-front"
686
+ ],
687
+ equipment: [
688
+ "wrench",
689
+ "hard-hat",
690
+ "package"
691
+ ],
692
+ tool: [
693
+ "wrench",
694
+ "hammer",
695
+ "settings"
696
+ ],
697
+ maintenance: [
698
+ "wrench",
699
+ "hard-hat",
700
+ "settings"
701
+ ],
702
+ asset: [
703
+ "package",
704
+ "hard-drive",
705
+ "boxes"
706
+ ],
707
+ issue: [
708
+ "circle-alert",
709
+ "bug",
710
+ "triangle-alert"
711
+ ],
712
+ complaint: [
713
+ "message-square-warning",
714
+ "triangle-alert",
715
+ "face-slightly-frowning"
716
+ ],
717
+ case: [
718
+ "folder",
719
+ "briefcase",
720
+ "file-text"
721
+ ],
722
+ testimonial: [
723
+ "quote",
724
+ "star",
725
+ "message-square"
726
+ ],
727
+ patient: [
728
+ "stethoscope",
729
+ "user-round",
730
+ "heart-pulse"
731
+ ],
732
+ student: [
733
+ "graduation-cap",
734
+ "users",
735
+ "backpack"
736
+ ],
737
+ class: [
738
+ "graduation-cap",
739
+ "users",
740
+ "presentation"
741
+ ],
742
+ prescription: [
743
+ "pill",
744
+ "file-text",
745
+ "stethoscope"
746
+ ],
747
+ measurement: [
748
+ "ruler",
749
+ "scale",
750
+ "activity"
751
+ ],
752
+ habit: [
753
+ "repeat",
754
+ "circle-check",
755
+ "calendar-check"
756
+ ],
757
+ workout: [
758
+ "dumbbell",
759
+ "activity",
760
+ "heart-pulse"
761
+ ],
762
+ meal: [
763
+ "utensils",
764
+ "salad",
765
+ "chef-hat"
766
+ ],
767
+ recipe: [
768
+ "chef-hat",
769
+ "utensils",
770
+ "book-open"
771
+ ],
772
+ announcement: [
773
+ "megaphone",
774
+ "bell",
775
+ "newspaper"
776
+ ],
777
+ newsletter: [
778
+ "mail",
779
+ "newspaper",
780
+ "send"
781
+ ],
782
+ campaign: [
783
+ "megaphone",
784
+ "target",
785
+ "chart-line"
786
+ ],
787
+ advert: [
788
+ "megaphone",
789
+ "monitor-play",
790
+ "target"
791
+ ],
792
+ ads: [
793
+ "megaphone",
794
+ "monitor-play",
795
+ "target"
796
+ ],
797
+ blog: [
798
+ "rss",
799
+ "newspaper",
800
+ "pen-line"
801
+ ],
802
+ editor: [
803
+ "pen-line",
804
+ "file-pen",
805
+ "pencil"
806
+ ],
807
+ writer: [
808
+ "pen-line",
809
+ "notebook-pen",
810
+ "feather"
811
+ ],
812
+ author: [
813
+ "pen-line",
814
+ "book-open",
815
+ "feather"
816
+ ],
817
+ manager: [
818
+ "clipboard-list",
819
+ "briefcase",
820
+ "user-cog"
821
+ ],
822
+ owner: [
823
+ "crown",
824
+ "key",
825
+ "house"
826
+ ],
827
+ founder: [
828
+ "crown",
829
+ "rocket",
830
+ "star"
831
+ ],
832
+ director: [
833
+ "crown",
834
+ "briefcase",
835
+ "presentation"
836
+ ],
837
+ moderator: [
838
+ "shield-check",
839
+ "gavel",
840
+ "flag"
841
+ ],
842
+ reviewer: [
843
+ "star",
844
+ "clipboard-check",
845
+ "message-square"
846
+ ],
847
+ approver: [
848
+ "clipboard-check",
849
+ "stamp",
850
+ "circle-check"
851
+ ],
852
+ agent: [
853
+ "headset",
854
+ "briefcase",
855
+ "handshake"
856
+ ],
857
+ broker: [
858
+ "handshake",
859
+ "briefcase",
860
+ "chart-line"
861
+ ],
862
+ consultant: [
863
+ "briefcase",
864
+ "lightbulb",
865
+ "handshake"
866
+ ],
867
+ contractor: [
868
+ "hard-hat",
869
+ "hammer",
870
+ "wrench"
871
+ ],
872
+ freelancer: [
873
+ "laptop",
874
+ "pen-tool",
875
+ "briefcase"
876
+ ],
877
+ driver: [
878
+ "truck",
879
+ "car-front",
880
+ "map-pin"
881
+ ],
882
+ courier: [
883
+ "package",
884
+ "truck",
885
+ "bike"
886
+ ],
887
+ seller: [
888
+ "store",
889
+ "tag",
890
+ "handshake"
891
+ ],
892
+ buyer: [
893
+ "shopping-bag",
894
+ "shopping-cart",
895
+ "wallet"
896
+ ],
897
+ subscriber: [
898
+ "bell",
899
+ "repeat",
900
+ "credit-card"
901
+ ],
902
+ affiliate: [
903
+ "share",
904
+ "link",
905
+ "percent"
906
+ ],
907
+ guest: [
908
+ "door-open",
909
+ "bed",
910
+ "hand"
911
+ ],
912
+ host: [
913
+ "door-open",
914
+ "hand",
915
+ "calendar-check"
916
+ ],
917
+ visitor: [
918
+ "door-open",
919
+ "footprints",
920
+ "eye"
921
+ ],
922
+ coach: [
923
+ "megaphone",
924
+ "dumbbell",
925
+ "clipboard-check"
926
+ ],
927
+ trainer: [
928
+ "dumbbell",
929
+ "graduation-cap",
930
+ "activity"
931
+ ],
932
+ tutor: [
933
+ "graduation-cap",
934
+ "book-open",
935
+ "presentation"
936
+ ],
937
+ teacher: [
938
+ "presentation",
939
+ "graduation-cap",
940
+ "book-open"
941
+ ],
942
+ mentor: [
943
+ "graduation-cap",
944
+ "handshake",
945
+ "lightbulb"
946
+ ],
947
+ parent: [
948
+ "baby",
949
+ "house",
950
+ "heart"
951
+ ],
952
+ nurse: [
953
+ "stethoscope",
954
+ "heart-pulse",
955
+ "syringe"
956
+ ],
957
+ doctor: [
958
+ "stethoscope",
959
+ "heart-pulse",
960
+ "pill"
961
+ ],
962
+ therapist: [
963
+ "brain",
964
+ "heart-pulse",
965
+ "stethoscope"
966
+ ],
967
+ artist: [
968
+ "palette",
969
+ "paintbrush",
970
+ "pen-tool"
971
+ ],
972
+ designer: [
973
+ "palette",
974
+ "pen-tool",
975
+ "ruler"
976
+ ],
977
+ developer: [
978
+ "code",
979
+ "terminal",
980
+ "laptop"
981
+ ],
982
+ photographer: [
983
+ "camera",
984
+ "image",
985
+ "aperture"
986
+ ],
987
+ investor: [
988
+ "trending-up",
989
+ "banknote",
990
+ "chart-line"
991
+ ],
992
+ donor: [
993
+ "heart-handshake",
994
+ "gift",
995
+ "banknote"
996
+ ],
997
+ vip: [
998
+ "crown",
999
+ "gem",
1000
+ "star"
1001
+ ],
1002
+ guard: [
1003
+ "shield",
1004
+ "lock",
1005
+ "eye"
1006
+ ],
1007
+ cleaner: [
1008
+ "sparkles",
1009
+ "spray-can",
1010
+ "brush"
1011
+ ],
1012
+ chef: [
1013
+ "chef-hat",
1014
+ "utensils",
1015
+ "salad"
1016
+ ],
1017
+ waiter: [
1018
+ "utensils",
1019
+ "concierge-bell",
1020
+ "coffee"
1021
+ ],
1022
+ stylist: [
1023
+ "scissors",
1024
+ "palette",
1025
+ "sparkles"
1026
+ ],
1027
+ therapy: [
1028
+ "heart-pulse",
1029
+ "brain",
1030
+ "hand-heart"
1031
+ ],
1032
+ premium: [
1033
+ "crown",
1034
+ "gem",
1035
+ "star"
1036
+ ],
1037
+ gold: [
1038
+ "crown",
1039
+ "medal",
1040
+ "star"
1041
+ ],
1042
+ silver: [
1043
+ "medal",
1044
+ "award",
1045
+ "star"
1046
+ ],
1047
+ bronze: ["medal", "award"],
1048
+ platinum: [
1049
+ "gem",
1050
+ "crown",
1051
+ "award"
1052
+ ],
1053
+ elite: [
1054
+ "crown",
1055
+ "gem",
1056
+ "trophy"
1057
+ ],
1058
+ lifetime: [
1059
+ "infinity",
1060
+ "crown",
1061
+ "calendar-heart"
1062
+ ],
1063
+ starter: [
1064
+ "rocket",
1065
+ "sprout",
1066
+ "flag"
1067
+ ],
1068
+ basic: [
1069
+ "circle",
1070
+ "square",
1071
+ "layers"
1072
+ ]
1073
+ }, L = new Set([
1074
+ "my",
1075
+ "our",
1076
+ "your",
1077
+ "their",
1078
+ "the",
1079
+ "a",
1080
+ "an",
1081
+ "all",
1082
+ "new",
1083
+ "page",
1084
+ "pages",
1085
+ "of",
1086
+ "and",
1087
+ "for",
1088
+ "to",
1089
+ "in",
1090
+ "on",
1091
+ "at",
1092
+ "is",
1093
+ "it",
1094
+ "this",
1095
+ "that"
1096
+ ]), R = new Set([
1097
+ "item",
1098
+ "items",
1099
+ "list",
1100
+ "lists",
1101
+ "record",
1102
+ "records",
1103
+ "thing",
1104
+ "things"
1105
+ ]), te = (e) => {
1106
+ let t = [e];
1107
+ return e.endsWith("ies") && e.length > 4 && t.push(`${e.slice(0, -3)}y`), e.endsWith("es") && e.length > 3 && t.push(e.slice(0, -2)), e.endsWith("s") && t.push(e.slice(0, -1)), t;
1108
+ }, z = (e, t) => {
1109
+ if (Math.abs(e.length - t.length) > 2) return 3;
1110
+ let n = Array.from({ length: t.length + 1 }, (e, t) => t);
1111
+ for (let r = 1; r <= e.length; r++) {
1112
+ let i = n[0];
1113
+ n[0] = r;
1114
+ for (let a = 1; a <= t.length; a++) {
1115
+ let o = n[a];
1116
+ n[a] = Math.min(n[a] + 1, n[a - 1] + 1, i + (e[r - 1] === t[a - 1] ? 0 : 1)), i = o;
1117
+ }
1118
+ }
1119
+ return n[t.length];
1120
+ }, ne = (e, t) => {
1121
+ let n = 0;
1122
+ for (let r of t) r === e[n] && n++;
1123
+ return n === e.length;
1124
+ };
1125
+ function B(e, t = 96, n = P, r = !0) {
1126
+ let i = e.trim().toLowerCase().replace(/\s+/g, "-").replace(/[^a-z0-9-]/g, "");
1127
+ if (!i) return [];
1128
+ let a = i.split("-").filter(Boolean), o = new Set(n), s = /* @__PURE__ */ new Map(), c = (e, t) => {
1129
+ o.has(e) && s.set(e, Math.max(s.get(e) || 0, t));
1130
+ };
1131
+ for (let e of n) {
1132
+ let t = e.split("-");
1133
+ if (e === i) {
1134
+ c(e, 100);
1135
+ continue;
1136
+ }
1137
+ if (e.startsWith(i)) {
1138
+ c(e, 90);
1139
+ continue;
1140
+ }
1141
+ if (t.some((e) => e === i)) {
1142
+ c(e, 85);
1143
+ continue;
1144
+ }
1145
+ if (t.some((e) => e.startsWith(i))) {
1146
+ c(e, 75);
1147
+ continue;
1148
+ }
1149
+ if (e.includes(i)) {
1150
+ c(e, 65);
1151
+ continue;
1152
+ }
1153
+ if (a.length > 1 && a.every((e) => t.some((t) => t.startsWith(e)))) {
1154
+ c(e, 60);
1155
+ continue;
1156
+ }
1157
+ }
1158
+ let l = (e) => {
1159
+ let t = R.has(e) ? 80 : 95;
1160
+ for (let n of te(e)) (I[n] || []).forEach((e, n) => c(e, t - n));
1161
+ };
1162
+ for (let e of a) l(e);
1163
+ if (s.size === 0 && a.length > 1) {
1164
+ let e = [...a].reverse().filter((e) => !L.has(e) && e.length >= 3);
1165
+ for (let i of [...e.filter((e) => !R.has(e)), ...e.filter((e) => R.has(e))]) {
1166
+ let e = B(i, t, n, r);
1167
+ if (e.length) return e;
1168
+ }
1169
+ }
1170
+ if (r && s.size === 0 && i.length >= 3) for (let e of n) e.split("-").some((e) => z(i, e) <= (i.length > 5 ? 2 : 1)) ? c(e, 40) : i.length >= 4 && ne(i, e.replace(/-/g, "")) && c(e, 20);
1171
+ let u = (e) => {
1172
+ let t = F.indexOf(e);
1173
+ return t === -1 ? F.length : t;
1174
+ };
1175
+ return Array.from(s.entries()).sort((e, t) => t[1] - e[1] || u(e[0]) - u(t[0]) || e[0].length - t[0].length || e[0].localeCompare(t[0])).slice(0, t).map(([e]) => e);
1176
+ }
1177
+ //#endregion
1178
+ //#region src/components/fields/IconPicker.tsx
1179
+ function re(e) {
1180
+ if (!e) return u;
1181
+ let t = e.trim(), n = v;
1182
+ return n[j(t)] || n[t] || u;
1183
+ }
1184
+ function V({ name: e, className: t }) {
1185
+ return x(re(e), { className: t });
1186
+ }
1187
+ function ie({ label: e = "Icon", hint: t = "Shown next to the name in the menu.", value: n, onChange: r }) {
1188
+ let [i, o] = T(""), c = (n || "").trim(), u = C(() => B(i), [i]), f = i.trim().length > 0;
1189
+ return /* @__PURE__ */ D(a, {
1190
+ label: e,
1191
+ hint: t,
1192
+ children: /* @__PURE__ */ O("div", {
1193
+ className: "flex flex-col gap-2",
1194
+ children: [/* @__PURE__ */ O("div", {
1195
+ className: s,
1196
+ children: [c && !f ? /* @__PURE__ */ O("span", {
1197
+ className: "inline-flex items-center gap-2 mr-2.5 shrink-0 min-w-0 text-accent",
1198
+ children: [
1199
+ /* @__PURE__ */ D("span", {
1200
+ className: "w-7 h-7 -ml-1 rounded-lg bg-accent/[0.08] border border-accent/25 flex items-center justify-center shrink-0",
1201
+ children: /* @__PURE__ */ D(V, {
1202
+ name: c,
1203
+ className: "w-4 h-4"
1204
+ })
1205
+ }),
1206
+ /* @__PURE__ */ D("span", {
1207
+ className: "text-[13px] font-semibold truncate",
1208
+ children: N(M(c))
1209
+ }),
1210
+ /* @__PURE__ */ D(_, { className: "w-3.5 h-3.5 shrink-0" })
1211
+ ]
1212
+ }) : /* @__PURE__ */ D(d, { className: "w-4 h-4 mr-2.5 text-foreground/30 shrink-0" }), /* @__PURE__ */ D("input", {
1213
+ type: "text",
1214
+ value: i,
1215
+ onChange: (e) => o(e.target.value),
1216
+ placeholder: c ? "Type a word to change it" : "Type a word, e.g. calendar",
1217
+ "aria-label": "Search icons",
1218
+ className: `${l} no-glow`
1219
+ })]
1220
+ }), f && /* @__PURE__ */ D("div", {
1221
+ className: "rounded-[var(--input-radius,0.75rem)] border border-[var(--panel-border)] bg-[var(--panel-bg)] p-2 max-h-56 overflow-y-auto",
1222
+ children: u.length > 0 ? /* @__PURE__ */ D("div", {
1223
+ className: "flex flex-wrap gap-1",
1224
+ children: u.map((e) => {
1225
+ let t = M(c).toLowerCase() === e;
1226
+ return /* @__PURE__ */ D("button", {
1227
+ type: "button",
1228
+ title: N(e),
1229
+ "aria-label": N(e),
1230
+ "aria-pressed": t,
1231
+ onClick: () => {
1232
+ r(e), o("");
1233
+ },
1234
+ className: `w-9 h-9 rounded-lg flex items-center justify-center transition-all cursor-pointer ${t ? "bg-accent text-[var(--button-fg,#fff)] ring-2 ring-accent/40" : "text-foreground/60 hover:text-foreground hover:bg-foreground/[0.06]"}`,
1235
+ children: /* @__PURE__ */ D(V, {
1236
+ name: e,
1237
+ className: "w-4 h-4"
1238
+ })
1239
+ }, e);
1240
+ })
1241
+ }) : /* @__PURE__ */ D("span", {
1242
+ className: "block px-2 py-2 text-[12px] font-medium text-foreground/45",
1243
+ children: "Nothing close to that. Try a simpler word, like calendar or people."
1244
+ })
1245
+ })]
1246
+ })
1247
+ });
1248
+ }
1249
+ function ae({ name: e, glyph: t, label: n, open: r = !1, onClick: i, tone: a = "quiet" }) {
1250
+ let o = e || !t ? /* @__PURE__ */ D(V, {
1251
+ name: e,
1252
+ className: "w-4 h-4"
1253
+ }) : x(t, { className: "w-4 h-4" });
1254
+ return i ? /* @__PURE__ */ D("button", {
1255
+ type: "button",
1256
+ title: n,
1257
+ "aria-label": n,
1258
+ "aria-expanded": r,
1259
+ onClick: i,
1260
+ className: `w-8 h-8 shrink-0 rounded-xl border flex items-center justify-center transition-all cursor-pointer ${r ? "border-accent/50 bg-accent/[0.08] text-accent" : `border-[var(--panel-border)] bg-foreground/[0.03] ${a === "accent" ? "text-accent" : "text-foreground/60"} hover:border-accent/40 hover:text-accent`}`,
1261
+ children: o
1262
+ }) : /* @__PURE__ */ D("span", {
1263
+ "aria-hidden": "true",
1264
+ className: `w-8 h-8 shrink-0 rounded-xl border border-transparent flex items-center justify-center ${a === "accent" ? "text-accent/70" : "text-foreground/45"}`,
1265
+ children: o
1266
+ });
1267
+ }
1268
+ function oe({ label: e, hint: t, value: n, onPick: r, resetLabel: i, resetTitle: a, onReset: o }) {
1269
+ return /* @__PURE__ */ O("div", {
1270
+ className: "flex flex-col gap-2",
1271
+ children: [/* @__PURE__ */ D(ie, {
1272
+ label: e,
1273
+ hint: t,
1274
+ value: n,
1275
+ onChange: r
1276
+ }), o && i && /* @__PURE__ */ D(c, {
1277
+ icon: g,
1278
+ compact: !0,
1279
+ title: a || i,
1280
+ onClick: o,
1281
+ children: i
1282
+ })]
1283
+ });
1284
+ }
1285
+ //#endregion
1286
+ //#region src/components/fields/PromptCard.tsx
1287
+ var H = /(<[A-Z][A-Za-z0-9]*(?:\s[^<>]*)?\/?>|src\/[A-Za-z0-9_./-]*[A-Za-z0-9_-]|'[A-Za-z0-9_@./-]+')/g, U = /(https?:\/\/[^\s]+)/g, W = (e) => e.split(U).flatMap((e, t) => t % 2 == 1 ? [{
1288
+ text: e,
1289
+ kind: "value"
1290
+ }] : e.split(H).map((e, t) => ({
1291
+ text: e,
1292
+ kind: t % 2 == 1 ? "code" : void 0
1293
+ }))).filter((e) => e.text), G = /exactly: |Here is (?:what|how) [^:]*: |It should ask for: |Where the form belongs on the page: |a button that says /, K = (e) => {
1294
+ let t = G.exec(e);
1295
+ if (!t) return W(e);
1296
+ let n = t.index + t[0].length, r = e.slice(0, n), i = e.slice(n), a = i.indexOf(" — ");
1297
+ return [
1298
+ ...W(r),
1299
+ {
1300
+ text: a === -1 ? i : i.slice(0, a),
1301
+ kind: "value"
1302
+ },
1303
+ ...W(a === -1 ? "" : i.slice(a))
1304
+ ];
1305
+ }, se = "text-accent font-semibold bg-accent/[0.08] rounded-[4px] px-1 -mx-[1px] [overflow-wrap:anywhere]", ce = "font-mono text-[0.92em] text-foreground/75 bg-foreground/[0.055] border border-[var(--panel-border)]/60 rounded-[4px] px-1 py-[1px] [overflow-wrap:anywhere]";
1306
+ function q({ text: e }) {
1307
+ return /* @__PURE__ */ D(E, { children: K(e).map((e, t) => e.kind ? /* @__PURE__ */ D("span", {
1308
+ className: e.kind === "value" ? se : ce,
1309
+ children: e.text
1310
+ }, t) : /* @__PURE__ */ D(b.Fragment, { children: e.text }, t)) });
1311
+ }
1312
+ function le({ title: e = "Ask your assistant", description: t, prompt: n, compact: r = !1, locked: i = !1, busy: a = !1, onCopied: o }) {
1313
+ let [s, c] = T(!1), l = n.includes("\n");
1314
+ return i ? /* @__PURE__ */ D("div", {
1315
+ className: "prompt-card",
1316
+ hidden: !0
1317
+ }) : /* @__PURE__ */ O("div", {
1318
+ className: `prompt-card flex flex-col gap-2 min-w-0 max-w-full rounded-2xl border border-[var(--panel-border)] bg-[var(--panel-bg)] ${r ? "px-4 py-3.5" : "px-5 py-4"}`,
1319
+ children: [
1320
+ /* @__PURE__ */ O("div", {
1321
+ className: "flex items-center justify-between gap-3",
1322
+ children: [/* @__PURE__ */ D("span", {
1323
+ className: "text-[12px] font-extrabold tracking-tight text-gradient",
1324
+ children: e
1325
+ }), /* @__PURE__ */ O("button", {
1326
+ type: "button",
1327
+ onClick: () => {
1328
+ a || (navigator.clipboard?.writeText(n), c(!0), setTimeout(() => c(!1), 2e3), o && setTimeout(o, 550));
1329
+ },
1330
+ disabled: a,
1331
+ "aria-busy": a || void 0,
1332
+ "aria-label": a ? "Uploading" : s ? "Copied" : "Copy",
1333
+ title: a ? "Wait for the picture to finish uploading" : void 0,
1334
+ className: `inline-flex items-center justify-center gap-1.5 h-8 w-8 px-0 sm:w-auto sm:px-3 rounded-[var(--btn-radius,0.75rem)] text-[12px] font-semibold shrink-0 border ${a ? "border-[var(--panel-border)] text-foreground/45 cursor-wait" : s ? "copy-btn-done border-emerald-500/30 bg-emerald-500/10 text-emerald-500 cursor-pointer" : "copy-btn cursor-pointer"}`,
1335
+ children: [a ? /* @__PURE__ */ D(m, { className: "w-3.5 h-3.5 animate-spin" }) : D(s ? _ : f, { className: "copy-icon w-3.5 h-3.5" }), /* @__PURE__ */ D("span", {
1336
+ className: "max-sm:hidden",
1337
+ children: a ? "Uploading…" : s ? "Copied" : "Copy"
1338
+ })]
1339
+ })]
1340
+ }),
1341
+ t && /* @__PURE__ */ D("p", {
1342
+ className: "text-[12.5px] text-foreground/50 font-medium leading-relaxed break-words",
1343
+ children: t
1344
+ }),
1345
+ /* @__PURE__ */ D("div", {
1346
+ className: "text-[13.5px] font-medium leading-relaxed break-words [overflow-wrap:anywhere]",
1347
+ children: l ? /* @__PURE__ */ D("div", {
1348
+ className: "flex flex-col gap-2 text-foreground/80",
1349
+ children: n.split("\n").filter((e) => e.trim()).map((e, t) => /* @__PURE__ */ D("p", {
1350
+ className: "min-w-0",
1351
+ children: /* @__PURE__ */ D(q, { text: e })
1352
+ }, t))
1353
+ }) : /* @__PURE__ */ O("p", {
1354
+ className: "text-foreground/80",
1355
+ children: [
1356
+ "“",
1357
+ /* @__PURE__ */ D(q, { text: n }),
1358
+ "”"
1359
+ ]
1360
+ })
1361
+ })
1362
+ ]
1363
+ });
1364
+ }
1365
+ //#endregion
1366
+ //#region src/lib/trimEdges.ts
1367
+ var J = 10, Y = 14, ue = 1024, de = .06, fe = 2, pe = /^image\/(jpe?g|png|webp|avif)$/i, me = 4e3;
1368
+ function he(e, t, n) {
1369
+ if (!e || t < 1 || n < 1 || e.length < t * n * 4) return null;
1370
+ let r = (e, n) => (n * t + e) * 4, i = [
1371
+ r(0, 0),
1372
+ r(t - 1, 0),
1373
+ r(0, n - 1),
1374
+ r(t - 1, n - 1)
1375
+ ], a;
1376
+ if (i.some((t) => e[t + 3] <= J)) a = (t) => e[t + 3] <= J;
1377
+ else {
1378
+ let [t, n, r] = [
1379
+ 0,
1380
+ 1,
1381
+ 2
1382
+ ].map((t) => i.reduce((n, r) => n + e[r + t], 0) / i.length), o = (i) => Math.abs(e[i] - t) <= Y && Math.abs(e[i + 1] - n) <= Y && Math.abs(e[i + 2] - r) <= Y;
1383
+ if (!i.every(o)) return null;
1384
+ a = (e) => o(e);
1385
+ }
1386
+ let o = t, s = n, c = -1, l = -1;
1387
+ for (let e = 0; e < n; e++) for (let n = 0; n < t; n++) a(r(n, e)) || (n < o && (o = n), n > c && (c = n), e < s && (s = e), e > l && (l = e));
1388
+ return c < 0 ? null : {
1389
+ left: o,
1390
+ top: s,
1391
+ right: c + 1,
1392
+ bottom: l + 1
1393
+ };
1394
+ }
1395
+ function ge(e, t, n, r = 1) {
1396
+ if (!e) return null;
1397
+ let i = Math.floor(e.left / r), a = Math.floor(e.top / r), o = Math.ceil(e.right / r), s = Math.ceil(e.bottom / r), c = Math.max(fe, Math.round(de * Math.min(o - i, s - a))), l = {
1398
+ left: Math.max(0, i - c),
1399
+ top: Math.max(0, a - c),
1400
+ right: Math.min(t, o + c),
1401
+ bottom: Math.min(n, s + c)
1402
+ };
1403
+ return (l.right - l.left) * (l.bottom - l.top) >= t * n * .97 ? null : l;
1404
+ }
1405
+ var _e = (e, t, n) => new Promise((r) => {
1406
+ if (typeof e.toBlob != "function") {
1407
+ r(null);
1408
+ return;
1409
+ }
1410
+ e.toBlob((e) => r(e), t, n);
1411
+ }), ve = (e, t) => e.replace(/\.[a-z0-9]+$/i, "") + (t === "image/jpeg" ? ".jpg" : ".png");
1412
+ async function ye(e) {
1413
+ return !e || !pe.test(e.type || "") || typeof document > "u" || typeof createImageBitmap != "function" ? e : new Promise((t) => {
1414
+ let n = setTimeout(() => t(e), me);
1415
+ be(e).then((e) => {
1416
+ clearTimeout(n), t(e);
1417
+ }, () => {
1418
+ clearTimeout(n), t(e);
1419
+ });
1420
+ });
1421
+ }
1422
+ var be = async (e) => {
1423
+ try {
1424
+ let t = await createImageBitmap(e), { width: n, height: r } = t, i = () => t.close?.();
1425
+ try {
1426
+ if (!n || !r) return e;
1427
+ let i = Math.min(1, ue / Math.max(n, r)), a = document.createElement("canvas");
1428
+ a.width = Math.max(1, Math.round(n * i)), a.height = Math.max(1, Math.round(r * i));
1429
+ let o = a.getContext("2d", { willReadFrequently: !0 });
1430
+ if (!o || typeof o.getImageData != "function") return e;
1431
+ o.drawImage(t, 0, 0, a.width, a.height);
1432
+ let s = o.getImageData(0, 0, a.width, a.height).data, c = ge(he(s, a.width, a.height), n, r, a.width / n);
1433
+ if (!c) return e;
1434
+ let l = document.createElement("canvas");
1435
+ l.width = c.right - c.left, l.height = c.bottom - c.top;
1436
+ let u = l.getContext("2d");
1437
+ if (!u) return e;
1438
+ u.drawImage(t, c.left, c.top, l.width, l.height, 0, 0, l.width, l.height);
1439
+ let d = /jpe?g$/i.test(e.type) ? "image/jpeg" : "image/png", f = await _e(l, d, d === "image/jpeg" ? .92 : void 0);
1440
+ return f ? new File([f], ve(e.name, d), {
1441
+ type: d,
1442
+ lastModified: Date.now()
1443
+ }) : e;
1444
+ } finally {
1445
+ i();
1446
+ }
1447
+ } catch {
1448
+ return e;
1449
+ }
1450
+ }, X = "w-11 h-11 shrink-0 rounded-[var(--input-radius,0.75rem)] overflow-hidden border border-[var(--panel-border)]", xe = "h-11 min-w-11 max-w-[9rem] shrink-0 rounded-[var(--input-radius,0.75rem)] overflow-hidden border border-[var(--panel-border)] bg-[var(--panel-bg)]", Se = (e) => {
1451
+ try {
1452
+ return y(decodeURIComponent(new URL(e).pathname).split("/").pop() || "").replace(/^\d{10,}_/, "") || "Your picture";
1453
+ } catch {
1454
+ return "Your picture";
1455
+ }
1456
+ };
1457
+ function Z({ label: o, hint: c, value: l, onChange: u, accept: d = "image/*", action: f, clearable: h = !0, tips: _, onBusyChange: v, whole: y = !1, trim: b = !1 }) {
1458
+ let { user: x } = i(), [S, C] = T(!1), [w, E] = T(""), [k, A] = T(!1), [j, M] = T(!1), N = async (e) => {
1459
+ if (!S) {
1460
+ C(!0), v?.(!0), E("");
1461
+ try {
1462
+ u(await t(b ? await ye(e) : e, x));
1463
+ } catch (e) {
1464
+ E(r(e));
1465
+ }
1466
+ C(!1), v?.(!1), M(!1);
1467
+ }
1468
+ }, P = (e) => {
1469
+ let t = e.target.files?.[0];
1470
+ e.target.value = "", t && N(t);
1471
+ }, { over: F, dropProps: I } = e({
1472
+ accept: d,
1473
+ disabled: S,
1474
+ onFiles: ([e]) => N(e),
1475
+ onReject: () => E(d.startsWith("image") ? "That is not a picture — drop a JPG or a PNG." : "That kind of file does not go here.")
1476
+ }), L = /* @__PURE__ */ D("input", {
1477
+ type: "file",
1478
+ accept: d,
1479
+ "aria-label": l ? `Replace ${o}` : `Upload ${o}`,
1480
+ disabled: S,
1481
+ onChange: P,
1482
+ className: "sr-only"
1483
+ });
1484
+ return /* @__PURE__ */ O(a, {
1485
+ label: o,
1486
+ hint: c,
1487
+ error: w,
1488
+ action: f,
1489
+ children: [/* @__PURE__ */ D("div", {
1490
+ ...I,
1491
+ className: "min-w-0",
1492
+ children: l && !S ? /* @__PURE__ */ O("div", {
1493
+ className: "flex items-center gap-2",
1494
+ children: [/* @__PURE__ */ D("div", {
1495
+ className: `${s} min-w-0 ${F ? "border-accent bg-accent/[0.04]" : ""}`,
1496
+ children: /* @__PURE__ */ D("span", {
1497
+ className: `flex-1 min-w-0 truncate text-[14px] select-none ${F ? "text-accent" : "text-foreground/60"}`,
1498
+ children: F ? "Drop it to replace this one" : Se(l)
1499
+ })
1500
+ }), /* @__PURE__ */ O("div", {
1501
+ className: `${y ? xe : X} relative group/pic`,
1502
+ children: [/* @__PURE__ */ D("button", {
1503
+ type: "button",
1504
+ onClick: () => M((e) => !e),
1505
+ "aria-label": `Change ${o}`,
1506
+ "aria-expanded": j,
1507
+ className: "block w-full h-full cursor-pointer",
1508
+ children: y ? /* @__PURE__ */ D(n, {
1509
+ src: l,
1510
+ alt: o,
1511
+ fit: "contain",
1512
+ className: "h-11 w-auto max-w-[9rem] mx-auto"
1513
+ }) : /* @__PURE__ */ D(n, {
1514
+ src: l,
1515
+ alt: o,
1516
+ className: "w-full h-full"
1517
+ })
1518
+ }), /* @__PURE__ */ O("div", {
1519
+ className: `absolute inset-0 flex items-center justify-center gap-1 bg-background/85 transition-opacity duration-200 ${j ? "opacity-100" : "opacity-0 pointer-events-none group-hover/pic:opacity-100 group-hover/pic:pointer-events-auto focus-within:opacity-100 focus-within:pointer-events-auto"}`,
1520
+ children: [/* @__PURE__ */ O("label", {
1521
+ title: `Replace ${o}`,
1522
+ className: "w-6 h-6 rounded-md flex items-center justify-center text-foreground/60 hover:text-accent hover:bg-foreground/10 transition-colors cursor-pointer",
1523
+ children: [/* @__PURE__ */ D(p, { className: "w-3.5 h-3.5" }), L]
1524
+ }), h && /* @__PURE__ */ D("button", {
1525
+ type: "button",
1526
+ onClick: () => {
1527
+ E(""), M(!1), u("");
1528
+ },
1529
+ "aria-label": `Remove ${o}`,
1530
+ title: `Remove ${o}`,
1531
+ className: "w-6 h-6 rounded-md flex items-center justify-center text-foreground/60 hover:text-red-500 hover:bg-red-500/10 transition-colors cursor-pointer",
1532
+ children: /* @__PURE__ */ D(g, { className: "w-3.5 h-3.5" })
1533
+ })]
1534
+ })]
1535
+ })]
1536
+ }) : /* @__PURE__ */ O("label", {
1537
+ title: `Upload ${o}`,
1538
+ className: `group/up flex items-center gap-2 ${S ? "pointer-events-none" : "cursor-pointer"}`,
1539
+ children: [
1540
+ /* @__PURE__ */ D("span", {
1541
+ className: `${s} select-none text-[14px] truncate ${F ? "border-accent bg-accent/[0.04] text-accent" : S ? "text-foreground/50" : "text-foreground/35"} group-hover/up:border-accent/40 group-focus-within/up:border-accent`,
1542
+ children: F ? "Drop it here" : S ? "Uploading your picture…" : "Upload a picture, or drop one here"
1543
+ }),
1544
+ /* @__PURE__ */ D("span", {
1545
+ "aria-hidden": !0,
1546
+ className: `${X} flex items-center justify-center bg-[var(--panel-bg)] ${F ? "text-accent border-accent" : "text-foreground/40"} group-hover/up:text-accent group-hover/up:border-accent/40 transition-colors`,
1547
+ children: S ? /* @__PURE__ */ D(m, { className: "w-4 h-4 animate-spin text-accent" }) : /* @__PURE__ */ D(p, { className: "w-4 h-4" })
1548
+ }),
1549
+ L
1550
+ ]
1551
+ })
1552
+ }), !!_?.length && /* @__PURE__ */ O("div", {
1553
+ className: "mt-2 px-1",
1554
+ children: [/* @__PURE__ */ O("button", {
1555
+ type: "button",
1556
+ onClick: () => A((e) => !e),
1557
+ "aria-expanded": k,
1558
+ className: "inline-flex items-center gap-1 text-[11.5px] font-semibold text-foreground/40 hover:text-foreground/70 transition-colors cursor-pointer",
1559
+ children: [/* @__PURE__ */ D(ee, { className: `w-3 h-3 shrink-0 transition-transform duration-200 ${k ? "rotate-90" : ""}` }), "Which picture should I upload?"]
1560
+ }), k && /* @__PURE__ */ D("ul", {
1561
+ className: "flex flex-col gap-1 mt-1.5 ml-4",
1562
+ children: _.map((e) => /* @__PURE__ */ O("li", {
1563
+ className: "text-[11.5px] text-foreground/40 font-medium leading-snug flex gap-1.5",
1564
+ children: [/* @__PURE__ */ D("span", {
1565
+ "aria-hidden": !0,
1566
+ className: "text-accent/60",
1567
+ children: "•"
1568
+ }), e]
1569
+ }, e))
1570
+ })]
1571
+ })]
1572
+ });
1573
+ }
1574
+ var Ce = [
1575
+ "A wide picture, not a square one — it sits in a short bar about 40px tall.",
1576
+ "PNG with a see-through background looks right on both the light and the dark theme.",
1577
+ "Empty space round the edges is cut off for you as it uploads; the logo itself is never cut."
1578
+ ], we = ["A square picture — 64 by 64 is plenty.", "One shape or one letter. A whole logo turns to mush at this size."], Te = .72;
1579
+ function Q(e) {
1580
+ let t = w(null);
1581
+ return S(() => {
1582
+ let e = t.current, n = e?.parentElement;
1583
+ if (!e || !n) return;
1584
+ let r = () => {
1585
+ e.style.removeProperty("font-size"), e.removeAttribute("data-fold");
1586
+ let t = n.clientWidth, r = e.scrollWidth;
1587
+ if (!t || r <= t) return;
1588
+ let i = parseFloat(window.getComputedStyle(e).fontSize) || 24, a = t / r;
1589
+ e.style.setProperty("font-size", `${(i * Math.max(a, Te)).toFixed(2)}px`, "important"), a < .72 && e.setAttribute("data-fold", "");
1590
+ };
1591
+ if (r(), document.fonts?.ready.then(r).catch(() => {}), typeof ResizeObserver > "u") return;
1592
+ let i = new ResizeObserver(r);
1593
+ return i.observe(n), () => i.disconnect();
1594
+ }, e), t;
1595
+ }
1596
+ //#endregion
1597
+ //#region src/components/PageTitle.tsx
1598
+ var $ = ({ className: e, children: t, ...n }) => /* @__PURE__ */ D("h1", {
1599
+ ref: Q([t]),
1600
+ className: o("page-title w-fit inline-block tracking-tight mb-3 mt-1 text-gradient", e),
1601
+ ...n,
1602
+ children: t
1603
+ });
1604
+ $.displayName = "PageTitle";
1605
+ //#endregion
1606
+ export { Z as a, V as c, A as d, k as f, Ce as i, ae as l, Q as n, le as o, we as r, oe as s, $ as t, B as u };