@nextsparkjs/core 0.1.0-beta.188 → 0.1.0-beta.189

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 (412) hide show
  1. package/dist/components/api/keys/ApiKeyDisplay.js +19 -19
  2. package/dist/components/api/keys/CreateApiKeyDialog.js +21 -21
  3. package/dist/components/app/layouts/PublicNavbar.d.ts.map +1 -1
  4. package/dist/components/app/layouts/PublicNavbar.js +34 -16
  5. package/dist/components/app/misc/ThemeToggle.d.ts.map +1 -1
  6. package/dist/components/app/misc/ThemeToggle.js +3 -4
  7. package/dist/components/auth/SessionCookieRefresher.d.ts +5 -0
  8. package/dist/components/auth/SessionCookieRefresher.d.ts.map +1 -1
  9. package/dist/components/auth/SessionCookieRefresher.js +7 -1
  10. package/dist/components/auth/forms/LoginForm.d.ts.map +1 -1
  11. package/dist/components/auth/forms/LoginForm.js +49 -12
  12. package/dist/components/auth/forms/SignupForm.d.ts.map +1 -1
  13. package/dist/components/auth/forms/SignupForm.js +4 -3
  14. package/dist/components/dashboard/block-editor/block-settings-panel.js +1 -1
  15. package/dist/components/dashboard/block-editor/floating-block-toolbar.js +1 -1
  16. package/dist/components/dashboard/block-editor/sortable-block.js +1 -1
  17. package/dist/components/dashboard/layouts/Sidebar.d.ts.map +1 -1
  18. package/dist/components/dashboard/layouts/Sidebar.js +8 -6
  19. package/dist/components/dashboard/layouts/TopNavbar.d.ts.map +1 -1
  20. package/dist/components/dashboard/layouts/TopNavbar.js +51 -54
  21. package/dist/components/dashboard/misc/NotificationsDropdown.d.ts.map +1 -1
  22. package/dist/components/dashboard/misc/NotificationsDropdown.js +17 -15
  23. package/dist/components/dashboard/misc/SearchDropdown.d.ts.map +1 -1
  24. package/dist/components/dashboard/misc/SearchDropdown.js +19 -22
  25. package/dist/components/dashboard/mobile/MobileBottomNav.js +1 -1
  26. package/dist/components/dashboard/mobile/MobileTopBar.js +2 -2
  27. package/dist/components/dashboard/navigation/DynamicNavigation.js +5 -5
  28. package/dist/components/devtools/BlockDetailViewer.js +1 -1
  29. package/dist/components/devtools/BlocksViewer.js +1 -1
  30. package/dist/components/entities/EntityChildManager.js +5 -5
  31. package/dist/components/entities/EntityDetailPage.d.ts.map +1 -1
  32. package/dist/components/entities/EntityDetailPage.js +16 -15
  33. package/dist/components/entities/EntityFieldRenderer.d.ts.map +1 -1
  34. package/dist/components/entities/EntityFieldRenderer.js +12 -7
  35. package/dist/components/entities/EntityPageHeader.js +5 -5
  36. package/dist/components/entities/ErrorBoundary.d.ts.map +1 -1
  37. package/dist/components/entities/ErrorBoundary.js +20 -21
  38. package/dist/components/entities/wrappers/EntityDetailWrapper.js +5 -5
  39. package/dist/components/entities/wrappers/EntityFormWrapper.js +2 -2
  40. package/dist/components/entities/wrappers/EntityListWrapper.js +3 -3
  41. package/dist/components/permissions/NoPermission.js +10 -10
  42. package/dist/components/public/pageBuilder/PageRenderer.d.ts.map +1 -1
  43. package/dist/components/public/pageBuilder/PageRenderer.js +2 -1
  44. package/dist/components/settings/SettingsPageSkeleton.js +4 -4
  45. package/dist/components/settings/layouts/SettingsSidebar.js +6 -6
  46. package/dist/components/shared/MultiSelectFilter.d.ts +3 -1
  47. package/dist/components/shared/MultiSelectFilter.d.ts.map +1 -1
  48. package/dist/components/shared/MultiSelectFilter.js +7 -3
  49. package/dist/components/shared/SearchInput.d.ts +2 -0
  50. package/dist/components/shared/SearchInput.d.ts.map +1 -1
  51. package/dist/components/shared/SearchInput.js +64 -6
  52. package/dist/components/ui/address-input.js +18 -18
  53. package/dist/components/ui/audio-upload.js +9 -9
  54. package/dist/components/ui/combobox.d.ts.map +1 -1
  55. package/dist/components/ui/combobox.js +4 -4
  56. package/dist/components/ui/country-select.d.ts.map +1 -1
  57. package/dist/components/ui/country-select.js +3 -3
  58. package/dist/components/ui/currency-select.d.ts.map +1 -1
  59. package/dist/components/ui/currency-select.js +3 -3
  60. package/dist/components/ui/dynamic-icon.d.ts.map +1 -1
  61. package/dist/components/ui/dynamic-icon.js +3 -2
  62. package/dist/components/ui/file-upload.js +7 -7
  63. package/dist/components/ui/image-upload.js +8 -8
  64. package/dist/components/ui/multi-select.d.ts +2 -1
  65. package/dist/components/ui/multi-select.d.ts.map +1 -1
  66. package/dist/components/ui/multi-select.js +4 -3
  67. package/dist/components/ui/phone-input.d.ts.map +1 -1
  68. package/dist/components/ui/phone-input.js +3 -3
  69. package/dist/components/ui/relation-display.js +1 -1
  70. package/dist/components/ui/simple-relation-select.d.ts +2 -1
  71. package/dist/components/ui/simple-relation-select.d.ts.map +1 -1
  72. package/dist/components/ui/simple-relation-select.js +7 -6
  73. package/dist/components/ui/tags-input.d.ts.map +1 -1
  74. package/dist/components/ui/tags-input.js +1 -1
  75. package/dist/components/ui/timezone-select.d.ts.map +1 -1
  76. package/dist/components/ui/timezone-select.js +3 -3
  77. package/dist/components/ui/user-display.js +4 -4
  78. package/dist/components/ui/user-select.d.ts.map +1 -1
  79. package/dist/components/ui/user-select.js +9 -9
  80. package/dist/components/ui/video-upload.js +9 -9
  81. package/dist/contexts/SubscriptionContext.d.ts.map +1 -1
  82. package/dist/contexts/SubscriptionContext.js +5 -1
  83. package/dist/contexts/TeamContext.d.ts.map +1 -1
  84. package/dist/contexts/TeamContext.js +83 -26
  85. package/dist/emails/otp-verification.d.ts.map +1 -1
  86. package/dist/emails/otp-verification.js +3 -2
  87. package/dist/hooks/useAccountPreferencesSync.d.ts +13 -0
  88. package/dist/hooks/useAccountPreferencesSync.d.ts.map +1 -0
  89. package/dist/hooks/useAccountPreferencesSync.js +95 -0
  90. package/dist/hooks/useAuth.d.ts +202 -15
  91. package/dist/hooks/useAuth.d.ts.map +1 -1
  92. package/dist/hooks/useAuth.js +49 -13
  93. package/dist/hooks/useEntityConfig.js +2 -2
  94. package/dist/hooks/useEntitySearch.js +10 -10
  95. package/dist/hooks/useNotifications.js +12 -12
  96. package/dist/hooks/usePrefetch.d.ts.map +1 -1
  97. package/dist/hooks/usePrefetch.js +6 -2
  98. package/dist/hooks/useSearch.js +15 -15
  99. package/dist/hooks/useSessionCookieRefresh.d.ts +18 -1
  100. package/dist/hooks/useSessionCookieRefresh.d.ts.map +1 -1
  101. package/dist/hooks/useSessionCookieRefresh.js +17 -4
  102. package/dist/hooks/useSessionHint.d.ts +12 -0
  103. package/dist/hooks/useSessionHint.d.ts.map +1 -0
  104. package/dist/hooks/useSessionHint.js +15 -0
  105. package/dist/hooks/useTranslationPreload.js +6 -6
  106. package/dist/i18n.d.ts +13 -0
  107. package/dist/i18n.d.ts.map +1 -1
  108. package/dist/i18n.js +2 -27
  109. package/dist/lib/actions/entity.actions.d.ts.map +1 -1
  110. package/dist/lib/actions/entity.actions.js +3 -2
  111. package/dist/lib/api/auth/dual-auth.d.ts +4 -1
  112. package/dist/lib/api/auth/dual-auth.d.ts.map +1 -1
  113. package/dist/lib/api/auth/dual-auth.js +5 -16
  114. package/dist/lib/api/entities.js +33 -33
  115. package/dist/lib/api/keys.d.ts +27 -27
  116. package/dist/lib/api/keys.js +27 -27
  117. package/dist/lib/auth/callback-url.d.ts +11 -0
  118. package/dist/lib/auth/callback-url.d.ts.map +1 -0
  119. package/dist/lib/auth/callback-url.js +14 -0
  120. package/dist/lib/auth/otp-config.d.ts +55 -0
  121. package/dist/lib/auth/otp-config.d.ts.map +1 -0
  122. package/dist/lib/auth/otp-config.js +48 -0
  123. package/dist/lib/auth/registration-helpers.d.ts.map +1 -1
  124. package/dist/lib/auth/registration-helpers.js +3 -1
  125. package/dist/lib/auth/session-hint.d.ts +31 -0
  126. package/dist/lib/auth/session-hint.d.ts.map +1 -0
  127. package/dist/lib/auth/session-hint.js +37 -0
  128. package/dist/lib/auth.d.ts.map +1 -1
  129. package/dist/lib/auth.js +6 -4
  130. package/dist/lib/blocks/loader.d.ts +3 -11
  131. package/dist/lib/blocks/loader.d.ts.map +1 -1
  132. package/dist/lib/blocks/loader.js +1 -9
  133. package/dist/lib/blocks/loader.server.d.ts +18 -0
  134. package/dist/lib/blocks/loader.server.d.ts.map +1 -0
  135. package/dist/lib/blocks/loader.server.js +11 -0
  136. package/dist/lib/blocks/sanitize-html.d.ts +31 -0
  137. package/dist/lib/blocks/sanitize-html.d.ts.map +1 -0
  138. package/dist/lib/blocks/sanitize-html.js +60 -0
  139. package/dist/lib/config/config-sync.d.ts +1 -0
  140. package/dist/lib/config/config-sync.d.ts.map +1 -1
  141. package/dist/lib/config/config-sync.js +4 -1
  142. package/dist/lib/config/types.d.ts +48 -0
  143. package/dist/lib/config/types.d.ts.map +1 -1
  144. package/dist/lib/email/types.d.ts +6 -0
  145. package/dist/lib/email/types.d.ts.map +1 -1
  146. package/dist/lib/entities/serialization.d.ts.map +1 -1
  147. package/dist/lib/entities/serialization.js +3 -6
  148. package/dist/lib/icons.d.ts +12 -0
  149. package/dist/lib/icons.d.ts.map +1 -0
  150. package/dist/lib/icons.js +30 -0
  151. package/dist/lib/locale.d.ts +25 -1
  152. package/dist/lib/locale.d.ts.map +1 -1
  153. package/dist/lib/locale.js +49 -35
  154. package/dist/lib/mcp/engine.js +1 -1
  155. package/dist/lib/mcp/errors.js +17 -17
  156. package/dist/lib/mcp/schema-builder.js +16 -16
  157. package/dist/lib/mcp/tool-generator.js +18 -18
  158. package/dist/lib/search-highlighting.d.ts +7 -0
  159. package/dist/lib/search-highlighting.d.ts.map +1 -1
  160. package/dist/lib/search-highlighting.js +6 -2
  161. package/dist/lib/selectors/core-selectors.d.ts +2 -0
  162. package/dist/lib/selectors/core-selectors.d.ts.map +1 -1
  163. package/dist/lib/selectors/domains/auth.selectors.d.ts +1 -0
  164. package/dist/lib/selectors/domains/auth.selectors.d.ts.map +1 -1
  165. package/dist/lib/selectors/domains/auth.selectors.js +1 -0
  166. package/dist/lib/selectors/domains/entities.selectors.d.ts +2 -0
  167. package/dist/lib/selectors/domains/entities.selectors.d.ts.map +1 -1
  168. package/dist/lib/selectors/domains/entities.selectors.js +2 -0
  169. package/dist/lib/selectors/selectors.d.ts +4 -0
  170. package/dist/lib/selectors/selectors.d.ts.map +1 -1
  171. package/dist/lib/services/block.service.js +1 -1
  172. package/dist/lib/teams/active-team-cookie.d.ts +24 -0
  173. package/dist/lib/teams/active-team-cookie.d.ts.map +1 -0
  174. package/dist/lib/teams/active-team-cookie.js +17 -0
  175. package/dist/lib/teams/dashboard-team.d.ts +20 -0
  176. package/dist/lib/teams/dashboard-team.d.ts.map +1 -0
  177. package/dist/lib/teams/dashboard-team.js +38 -0
  178. package/dist/lib/teams/schema.d.ts.map +1 -1
  179. package/dist/lib/teams/schema.js +1 -1
  180. package/dist/lib/template-resolver.d.ts.map +1 -1
  181. package/dist/lib/template-resolver.js +0 -1
  182. package/dist/lib/theme/get-default-theme-mode.d.ts +7 -4
  183. package/dist/lib/theme/get-default-theme-mode.d.ts.map +1 -1
  184. package/dist/lib/theme/get-default-theme-mode.js +2 -44
  185. package/dist/messages/de/auth.json +4 -2
  186. package/dist/messages/de/common.json +83 -3
  187. package/dist/messages/de/email.json +1 -1
  188. package/dist/messages/de/index.d.ts +87 -0
  189. package/dist/messages/de/index.d.ts.map +1 -1
  190. package/dist/messages/de/settings.json +5 -0
  191. package/dist/messages/en/auth.json +4 -2
  192. package/dist/messages/en/common.json +83 -3
  193. package/dist/messages/en/email.json +1 -1
  194. package/dist/messages/en/index.d.ts +86 -0
  195. package/dist/messages/en/index.d.ts.map +1 -1
  196. package/dist/messages/en/settings.json +4 -0
  197. package/dist/messages/es/auth.json +4 -2
  198. package/dist/messages/es/common.json +83 -3
  199. package/dist/messages/es/email.json +1 -1
  200. package/dist/messages/es/index.d.ts +86 -0
  201. package/dist/messages/es/index.d.ts.map +1 -1
  202. package/dist/messages/es/settings.json +4 -0
  203. package/dist/messages/fr/auth.json +4 -2
  204. package/dist/messages/fr/common.json +83 -3
  205. package/dist/messages/fr/email.json +1 -1
  206. package/dist/messages/fr/index.d.ts +87 -0
  207. package/dist/messages/fr/index.d.ts.map +1 -1
  208. package/dist/messages/fr/settings.json +5 -0
  209. package/dist/messages/it/auth.json +4 -2
  210. package/dist/messages/it/common.json +83 -3
  211. package/dist/messages/it/email.json +1 -1
  212. package/dist/messages/it/index.d.ts +87 -0
  213. package/dist/messages/it/index.d.ts.map +1 -1
  214. package/dist/messages/it/settings.json +5 -0
  215. package/dist/messages/pt/auth.json +4 -2
  216. package/dist/messages/pt/common.json +83 -3
  217. package/dist/messages/pt/email.json +1 -1
  218. package/dist/messages/pt/index.d.ts +87 -0
  219. package/dist/messages/pt/index.d.ts.map +1 -1
  220. package/dist/messages/pt/settings.json +5 -0
  221. package/dist/nextspark-registries.d.ts +54 -0
  222. package/dist/providers/DashboardProviders.d.ts +13 -10
  223. package/dist/providers/DashboardProviders.d.ts.map +1 -1
  224. package/dist/providers/DashboardProviders.js +7 -1
  225. package/dist/templates/app/(auth)/forgot-password/page.tsx +2 -2
  226. package/dist/templates/app/(auth)/reset-password/page.tsx +6 -6
  227. package/dist/templates/app/403/page.tsx +6 -6
  228. package/dist/templates/app/api/v1/teams/switch/route.ts +24 -5
  229. package/dist/templates/app/dashboard/(main)/[entity]/layout.tsx +9 -7
  230. package/dist/templates/app/dashboard/(main)/layout.tsx +4 -3
  231. package/dist/templates/app/dashboard/settings/api-keys/page.tsx +36 -34
  232. package/dist/templates/app/dashboard/settings/profile/page.tsx +7 -6
  233. package/dist/templates/app/dashboard/settings/security/page.tsx +5 -4
  234. package/dist/templates/app/layout.ppr.tsx +8 -8
  235. package/dist/templates/app/layout.tsx +12 -17
  236. package/dist/templates/blocks/cta-section/component.tsx +5 -2
  237. package/dist/templates/blocks/cta-section/config.ts +3 -2
  238. package/dist/templates/blocks/cta-section/fields.ts +2 -2
  239. package/dist/templates/blocks/cta-section/schema.ts +2 -2
  240. package/dist/templates/blocks/features-grid/component.tsx +10 -2
  241. package/dist/templates/blocks/features-grid/config.ts +3 -2
  242. package/dist/templates/blocks/features-grid/fields.ts +2 -2
  243. package/dist/templates/blocks/features-grid/schema.ts +2 -2
  244. package/dist/templates/blocks/hero/component.tsx +6 -3
  245. package/dist/templates/blocks/hero/config.ts +3 -2
  246. package/dist/templates/blocks/hero/fields.ts +2 -2
  247. package/dist/templates/blocks/hero/schema.ts +2 -2
  248. package/dist/templates/blocks/testimonials/component.tsx +6 -3
  249. package/dist/templates/blocks/testimonials/config.ts +3 -2
  250. package/dist/templates/blocks/testimonials/fields.ts +2 -2
  251. package/dist/templates/blocks/testimonials/schema.ts +2 -2
  252. package/dist/templates/blocks/text-content/component.tsx +7 -3
  253. package/dist/templates/blocks/text-content/config.ts +3 -2
  254. package/dist/templates/blocks/text-content/fields.ts +2 -2
  255. package/dist/templates/blocks/text-content/schema.ts +2 -2
  256. package/dist/templates/contents/themes/starter/blocks/cta-section/component.tsx +102 -0
  257. package/dist/templates/contents/themes/starter/blocks/cta-section/config.ts +11 -0
  258. package/dist/templates/contents/themes/starter/blocks/cta-section/fields.ts +89 -0
  259. package/dist/templates/contents/themes/starter/blocks/cta-section/index.ts +6 -0
  260. package/dist/templates/contents/themes/starter/blocks/cta-section/schema.ts +32 -0
  261. package/dist/templates/contents/themes/starter/blocks/cta-section/thumbnail.png +0 -0
  262. package/dist/templates/contents/themes/starter/blocks/features-grid/component.tsx +119 -0
  263. package/dist/templates/contents/themes/starter/blocks/features-grid/config.ts +11 -0
  264. package/dist/templates/contents/themes/starter/blocks/features-grid/fields.ts +97 -0
  265. package/dist/templates/contents/themes/starter/blocks/features-grid/index.ts +6 -0
  266. package/dist/templates/contents/themes/starter/blocks/features-grid/schema.ts +40 -0
  267. package/dist/templates/contents/themes/starter/blocks/features-grid/thumbnail.png +0 -0
  268. package/dist/templates/contents/themes/starter/blocks/hero/component.tsx +105 -0
  269. package/dist/templates/contents/themes/starter/blocks/hero/config.ts +11 -0
  270. package/dist/templates/contents/themes/starter/blocks/hero/fields.ts +60 -0
  271. package/dist/templates/contents/themes/starter/blocks/hero/index.ts +6 -0
  272. package/dist/templates/contents/themes/starter/blocks/hero/schema.ts +33 -0
  273. package/dist/templates/contents/themes/starter/blocks/hero/thumbnail.png +0 -0
  274. package/dist/templates/contents/themes/starter/blocks/testimonials/component.tsx +116 -0
  275. package/dist/templates/contents/themes/starter/blocks/testimonials/config.ts +11 -0
  276. package/dist/templates/contents/themes/starter/blocks/testimonials/fields.ts +105 -0
  277. package/dist/templates/contents/themes/starter/blocks/testimonials/index.ts +6 -0
  278. package/dist/templates/contents/themes/starter/blocks/testimonials/schema.ts +41 -0
  279. package/dist/templates/contents/themes/starter/blocks/testimonials/thumbnail.png +0 -0
  280. package/dist/templates/contents/themes/starter/blocks/text-content/component.tsx +100 -0
  281. package/dist/templates/contents/themes/starter/blocks/text-content/config.ts +11 -0
  282. package/dist/templates/contents/themes/starter/blocks/text-content/fields.ts +88 -0
  283. package/dist/templates/contents/themes/starter/blocks/text-content/index.ts +6 -0
  284. package/dist/templates/contents/themes/starter/blocks/text-content/schema.ts +30 -0
  285. package/dist/templates/contents/themes/starter/blocks/text-content/thumbnail.png +0 -0
  286. package/dist/templates/contents/themes/starter/config/app.config.ts +8 -0
  287. package/dist/templates/contents/themes/starter/entities/tasks/tasks.config.ts +7 -0
  288. package/dist/templates/contents/themes/starter/tests/cypress/e2e/_utils/devtools/access.cy.ts +9 -1
  289. package/dist/templates/contents/themes/starter/tests/cypress/e2e/api/entities/tasks/TaskAPIController.js +2 -2
  290. package/dist/templates/contents/themes/starter/tests/cypress/e2e/uat/entities/tasks/tasks-crud.cy.ts +45 -38
  291. package/dist/templates/contents/themes/starter/tests/cypress/fixtures/entities.json +16 -0
  292. package/dist/templates/contents/themes/starter/tests/cypress/src/components/DevKeyringPOM.ts +3 -1
  293. package/dist/templates/contents/themes/starter/tests/cypress/src/core/BlockEditorBasePOM.ts +3 -3
  294. package/dist/templates/contents/themes/starter/tests/cypress/src/entities/PagesPOM.ts +137 -0
  295. package/dist/templates/contents/themes/starter/tests/cypress/src/entities/index.ts +2 -0
  296. package/dist/templates/contents/themes/starter/tests/cypress/src/index.ts +1 -0
  297. package/dist/templates/contents/themes/starter/tests/cypress/src/session-helpers.ts +42 -11
  298. package/dist/templates/contents/themes/starter/tests/cypress/support/commands.ts +29 -18
  299. package/dist/templates/features/blog/blocks/post-content/component.tsx +5 -1
  300. package/dist/templates/features/blog/blocks/post-content/schema.ts +1 -1
  301. package/dist/templates/features/pages/blocks/hero/component.tsx +3 -0
  302. package/dist/templates/features/pages/blocks/hero/schema.ts +1 -1
  303. package/dist/templates/proxy.ts +138 -53
  304. package/dist/types/blocks.d.ts.map +1 -1
  305. package/dist/types/blocks.js +1 -1
  306. package/dist/types/task.types.d.ts +1 -1
  307. package/dist/types/task.types.js +7 -7
  308. package/dist/utils/dev/TranslationDebugger.js +2 -2
  309. package/package.json +14 -5
  310. package/scripts/build/registry/__tests__/block-registry.test.mjs +73 -0
  311. package/scripts/build/registry/__tests__/icons-discovery.test.mjs +130 -0
  312. package/scripts/build/registry/__tests__/identifier.test.mjs +65 -0
  313. package/scripts/build/registry/__tests__/page-generator.test.mjs +430 -0
  314. package/scripts/build/registry/__tests__/scheduled-actions-registry.test.mjs +41 -0
  315. package/scripts/build/registry/__tests__/template-registry.test.mjs +89 -0
  316. package/scripts/build/registry/discovery/icons.mjs +275 -0
  317. package/scripts/build/registry/discovery/index.mjs +1 -0
  318. package/scripts/build/registry/generators/block-registry.mjs +203 -55
  319. package/scripts/build/registry/generators/feature-registry.mjs +9 -2
  320. package/scripts/build/registry/generators/icon-registry.mjs +56 -0
  321. package/scripts/build/registry/generators/identifier.mjs +28 -0
  322. package/scripts/build/registry/generators/index.mjs +1 -0
  323. package/scripts/build/registry/generators/plugin-registry.mjs +4 -3
  324. package/scripts/build/registry/generators/scheduled-actions-registry.mjs +4 -2
  325. package/scripts/build/registry/generators/template-registry.mjs +49 -41
  326. package/scripts/build/registry/generators/theme-registry.mjs +6 -7
  327. package/scripts/build/registry/post-build/page-generator.mjs +380 -59
  328. package/scripts/build/registry.mjs +9 -1
  329. package/templates/app/(auth)/forgot-password/page.tsx +2 -2
  330. package/templates/app/(auth)/reset-password/page.tsx +6 -6
  331. package/templates/app/403/page.tsx +6 -6
  332. package/templates/app/api/v1/teams/switch/route.ts +24 -5
  333. package/templates/app/dashboard/(main)/[entity]/layout.tsx +9 -7
  334. package/templates/app/dashboard/(main)/layout.tsx +4 -3
  335. package/templates/app/dashboard/settings/api-keys/page.tsx +36 -34
  336. package/templates/app/dashboard/settings/profile/page.tsx +7 -6
  337. package/templates/app/dashboard/settings/security/page.tsx +5 -4
  338. package/templates/app/layout.ppr.tsx +8 -8
  339. package/templates/app/layout.tsx +12 -17
  340. package/templates/blocks/cta-section/component.tsx +5 -2
  341. package/templates/blocks/cta-section/config.ts +3 -2
  342. package/templates/blocks/cta-section/fields.ts +2 -2
  343. package/templates/blocks/cta-section/schema.ts +2 -2
  344. package/templates/blocks/features-grid/component.tsx +10 -2
  345. package/templates/blocks/features-grid/config.ts +3 -2
  346. package/templates/blocks/features-grid/fields.ts +2 -2
  347. package/templates/blocks/features-grid/schema.ts +2 -2
  348. package/templates/blocks/hero/component.tsx +6 -3
  349. package/templates/blocks/hero/config.ts +3 -2
  350. package/templates/blocks/hero/fields.ts +2 -2
  351. package/templates/blocks/hero/schema.ts +2 -2
  352. package/templates/blocks/testimonials/component.tsx +6 -3
  353. package/templates/blocks/testimonials/config.ts +3 -2
  354. package/templates/blocks/testimonials/fields.ts +2 -2
  355. package/templates/blocks/testimonials/schema.ts +2 -2
  356. package/templates/blocks/text-content/component.tsx +7 -3
  357. package/templates/blocks/text-content/config.ts +3 -2
  358. package/templates/blocks/text-content/fields.ts +2 -2
  359. package/templates/blocks/text-content/schema.ts +2 -2
  360. package/templates/contents/themes/starter/blocks/cta-section/component.tsx +102 -0
  361. package/templates/contents/themes/starter/blocks/cta-section/config.ts +11 -0
  362. package/templates/contents/themes/starter/blocks/cta-section/fields.ts +89 -0
  363. package/templates/contents/themes/starter/blocks/cta-section/index.ts +6 -0
  364. package/templates/contents/themes/starter/blocks/cta-section/schema.ts +32 -0
  365. package/templates/contents/themes/starter/blocks/cta-section/thumbnail.png +0 -0
  366. package/templates/contents/themes/starter/blocks/features-grid/component.tsx +119 -0
  367. package/templates/contents/themes/starter/blocks/features-grid/config.ts +11 -0
  368. package/templates/contents/themes/starter/blocks/features-grid/fields.ts +97 -0
  369. package/templates/contents/themes/starter/blocks/features-grid/index.ts +6 -0
  370. package/templates/contents/themes/starter/blocks/features-grid/schema.ts +40 -0
  371. package/templates/contents/themes/starter/blocks/features-grid/thumbnail.png +0 -0
  372. package/templates/contents/themes/starter/blocks/hero/component.tsx +105 -0
  373. package/templates/contents/themes/starter/blocks/hero/config.ts +11 -0
  374. package/templates/contents/themes/starter/blocks/hero/fields.ts +60 -0
  375. package/templates/contents/themes/starter/blocks/hero/index.ts +6 -0
  376. package/templates/contents/themes/starter/blocks/hero/schema.ts +33 -0
  377. package/templates/contents/themes/starter/blocks/hero/thumbnail.png +0 -0
  378. package/templates/contents/themes/starter/blocks/testimonials/component.tsx +116 -0
  379. package/templates/contents/themes/starter/blocks/testimonials/config.ts +11 -0
  380. package/templates/contents/themes/starter/blocks/testimonials/fields.ts +105 -0
  381. package/templates/contents/themes/starter/blocks/testimonials/index.ts +6 -0
  382. package/templates/contents/themes/starter/blocks/testimonials/schema.ts +41 -0
  383. package/templates/contents/themes/starter/blocks/testimonials/thumbnail.png +0 -0
  384. package/templates/contents/themes/starter/blocks/text-content/component.tsx +100 -0
  385. package/templates/contents/themes/starter/blocks/text-content/config.ts +11 -0
  386. package/templates/contents/themes/starter/blocks/text-content/fields.ts +88 -0
  387. package/templates/contents/themes/starter/blocks/text-content/index.ts +6 -0
  388. package/templates/contents/themes/starter/blocks/text-content/schema.ts +30 -0
  389. package/templates/contents/themes/starter/blocks/text-content/thumbnail.png +0 -0
  390. package/templates/contents/themes/starter/config/app.config.ts +8 -0
  391. package/templates/contents/themes/starter/entities/tasks/tasks.config.ts +7 -0
  392. package/templates/contents/themes/starter/tests/cypress/e2e/_utils/devtools/access.cy.ts +9 -1
  393. package/templates/contents/themes/starter/tests/cypress/e2e/api/entities/tasks/TaskAPIController.js +2 -2
  394. package/templates/contents/themes/starter/tests/cypress/e2e/uat/entities/tasks/tasks-crud.cy.ts +45 -38
  395. package/templates/contents/themes/starter/tests/cypress/fixtures/entities.json +16 -0
  396. package/templates/contents/themes/starter/tests/cypress/src/components/DevKeyringPOM.ts +3 -1
  397. package/templates/contents/themes/starter/tests/cypress/src/core/BlockEditorBasePOM.ts +3 -3
  398. package/templates/contents/themes/starter/tests/cypress/src/entities/PagesPOM.ts +137 -0
  399. package/templates/contents/themes/starter/tests/cypress/src/entities/index.ts +2 -0
  400. package/templates/contents/themes/starter/tests/cypress/src/index.ts +1 -0
  401. package/templates/contents/themes/starter/tests/cypress/src/session-helpers.ts +42 -11
  402. package/templates/contents/themes/starter/tests/cypress/support/commands.ts +29 -18
  403. package/templates/features/blog/blocks/post-content/component.tsx +5 -1
  404. package/templates/features/blog/blocks/post-content/schema.ts +1 -1
  405. package/templates/features/pages/blocks/hero/component.tsx +3 -0
  406. package/templates/features/pages/blocks/hero/schema.ts +1 -1
  407. package/templates/proxy.ts +138 -53
  408. package/tests/jest/__mocks__/@nextsparkjs/registries/block-registry.client.ts +9 -0
  409. package/tests/jest/__mocks__/@nextsparkjs/registries/block-registry.lazy.ts +5 -0
  410. package/tests/jest/__mocks__/@nextsparkjs/registries/icon-registry.ts +42 -0
  411. package/tests/jest/__mocks__/next-intl-server.js +85 -5
  412. package/tests/jest/__mocks__/next-server.js +32 -0
@@ -79,7 +79,7 @@ function EntityDetailWrapper({
79
79
  if (!entityConfig || !id) return;
80
80
  if (dataLoadedRef.current) return;
81
81
  if (!entityConfig.enabled) {
82
- const error = new Error(`Entidad "${entityType}" est\xE1 deshabilitada`);
82
+ const error = new Error(`Entity "${entityType}" is disabled`);
83
83
  setDataError(error.message);
84
84
  onError == null ? void 0 : onError(error);
85
85
  return;
@@ -124,7 +124,7 @@ function EntityDetailWrapper({
124
124
  dataLoadedRef.current = true;
125
125
  } catch (err) {
126
126
  console.error(`[EntityDetailWrapper] Error loading data for "${entityType}" ${id}:`, err);
127
- const errorMessage = `Error cargando datos: ${err instanceof Error ? err.message : "Error desconocido"}`;
127
+ const errorMessage = `Error loading data: ${err instanceof Error ? err.message : "Unknown error"}`;
128
128
  setDataError(errorMessage);
129
129
  setData(null);
130
130
  if (onError) {
@@ -179,7 +179,7 @@ function EntityDetailWrapper({
179
179
  setDataError(null);
180
180
  } catch (err) {
181
181
  console.error(`[EntityDetailWrapper] Error reloading data:`, err);
182
- const errorMessage = `Error recargando datos: ${err instanceof Error ? err.message : "Error desconocido"}`;
182
+ const errorMessage = `Error reloading data: ${err instanceof Error ? err.message : "Unknown error"}`;
183
183
  setDataError(errorMessage);
184
184
  } finally {
185
185
  setIsLoadingData(false);
@@ -266,7 +266,7 @@ function EntityDetailWrapper({
266
266
  return /* @__PURE__ */ jsx(SkeletonEntityDetail, {});
267
267
  }
268
268
  if (configError || !entityConfig) {
269
- return /* @__PURE__ */ jsx(Alert, { children: /* @__PURE__ */ jsx(AlertDescription, { children: configError || `No se pudo cargar la configuraci\xF3n para la entidad "${entityType}".` }) });
269
+ return /* @__PURE__ */ jsx(Alert, { children: /* @__PURE__ */ jsx(AlertDescription, { children: configError || `Could not load the configuration for entity "${entityType}".` }) });
270
270
  }
271
271
  if (isLoadingData) {
272
272
  return /* @__PURE__ */ jsx(SkeletonEntityDetail, {});
@@ -275,7 +275,7 @@ function EntityDetailWrapper({
275
275
  return /* @__PURE__ */ jsx(Alert, { children: /* @__PURE__ */ jsx(AlertDescription, { children: dataError }) });
276
276
  }
277
277
  if (!data) {
278
- return /* @__PURE__ */ jsx(Alert, { children: /* @__PURE__ */ jsx(AlertDescription, { children: "No se encontraron datos para esta entidad." }) });
278
+ return /* @__PURE__ */ jsx(Alert, { children: /* @__PURE__ */ jsx(AlertDescription, { children: "No data found for this entity." }) });
279
279
  }
280
280
  return /* @__PURE__ */ jsx(
281
281
  EntityDetail,
@@ -34,7 +34,7 @@ function EntityFormWrapper({
34
34
  const loadInitialData = async () => {
35
35
  if (mode === "edit" && id && entityConfig) {
36
36
  if (!entityConfig.enabled) {
37
- onError == null ? void 0 : onError(new Error(`Entidad "${entityType}" est\xE1 deshabilitada`));
37
+ onError == null ? void 0 : onError(new Error(`Entity "${entityType}" is disabled`));
38
38
  return;
39
39
  }
40
40
  try {
@@ -87,7 +87,7 @@ function EntityFormWrapper({
87
87
  );
88
88
  }
89
89
  if (configError || !entityConfig) {
90
- return /* @__PURE__ */ jsx(Alert, { children: /* @__PURE__ */ jsx(AlertDescription, { children: configError || `No se pudo cargar la configuraci\xF3n para la entidad "${entityType}".` }) });
90
+ return /* @__PURE__ */ jsx(Alert, { children: /* @__PURE__ */ jsx(AlertDescription, { children: configError || `Could not load the configuration for entity "${entityType}".` }) });
91
91
  }
92
92
  const customActions = additionalHeaderActions ? /* @__PURE__ */ jsx(Fragment, { children: additionalHeaderActions }) : void 0;
93
93
  return /* @__PURE__ */ jsx("div", { className: "p-6", children: /* @__PURE__ */ jsxs("div", { className: "max-w-7xl mx-auto space-y-6", children: [
@@ -68,7 +68,7 @@ function EntityListWrapper({
68
68
  const loadData = useCallback(async (isInitial = false) => {
69
69
  if (!entityConfig) return;
70
70
  if (!entityConfig.enabled) {
71
- setDataError(`Entidad "${entityType}" est\xE1 deshabilitada`);
71
+ setDataError(`Entity "${entityType}" is disabled`);
72
72
  return;
73
73
  }
74
74
  try {
@@ -90,7 +90,7 @@ function EntityListWrapper({
90
90
  setDataError(null);
91
91
  } catch (err) {
92
92
  console.error(`[EntityListWrapper] Error loading data for "${entityType}":`, err);
93
- setDataError(`Error cargando datos: ${err instanceof Error ? err.message : "Error desconocido"}`);
93
+ setDataError(`Error loading data: ${err instanceof Error ? err.message : "Unknown error"}`);
94
94
  setData([]);
95
95
  } finally {
96
96
  setIsInitialLoad(false);
@@ -191,7 +191,7 @@ function EntityListWrapper({
191
191
  return /* @__PURE__ */ jsx(SkeletonEntityList, {});
192
192
  }
193
193
  if (configError || !entityConfig) {
194
- return /* @__PURE__ */ jsx(Alert, { children: /* @__PURE__ */ jsx(AlertDescription, { children: configError || `No se pudo cargar la configuraci\xF3n para la entidad "${entityType}".` }) });
194
+ return /* @__PURE__ */ jsx(Alert, { children: /* @__PURE__ */ jsx(AlertDescription, { children: configError || `Could not load the configuration for entity "${entityType}".` }) });
195
195
  }
196
196
  if (dataError) {
197
197
  return /* @__PURE__ */ jsx(Alert, { children: /* @__PURE__ */ jsx(AlertDescription, { children: dataError }) });
@@ -18,21 +18,21 @@ function NoPermission({
18
18
  const getActionText = () => {
19
19
  switch (action) {
20
20
  case "list":
21
- return "ver la lista de";
21
+ return "view the list of";
22
22
  case "read":
23
- return "ver los detalles de";
23
+ return "view the details of";
24
24
  case "create":
25
- return "crear";
25
+ return "create";
26
26
  case "update":
27
- return "editar";
27
+ return "edit";
28
28
  case "delete":
29
- return "eliminar";
29
+ return "delete";
30
30
  default:
31
- return "acceder a";
31
+ return "access";
32
32
  }
33
33
  };
34
- const defaultTitle = title || "Acceso denegado";
35
- const defaultDescription = description || (entityName ? `No tienes permisos para ${getActionText()} ${entityName}. Contacta a tu administrador si necesitas acceso.` : "No tienes permisos para acceder a esta secci\xF3n. Contacta a tu administrador si necesitas acceso.");
34
+ const defaultTitle = title || "Access denied";
35
+ const defaultDescription = description || (entityName ? `You don't have permission to ${getActionText()} ${entityName}. Contact your administrator if you need access.` : "You don't have permission to access this section. Contact your administrator if you need access.");
36
36
  return /* @__PURE__ */ jsx(
37
37
  "div",
38
38
  {
@@ -53,13 +53,13 @@ function NoPermission({
53
53
  className: "w-full",
54
54
  children: [
55
55
  /* @__PURE__ */ jsx(ArrowLeft, { className: "mr-2 h-4 w-4" }),
56
- "Volver atr\xE1s"
56
+ "Go back"
57
57
  ]
58
58
  }
59
59
  ),
60
60
  showHomeButton && /* @__PURE__ */ jsx(Button, { asChild: true, className: "w-full", children: /* @__PURE__ */ jsxs(Link, { href: redirectPath, children: [
61
61
  /* @__PURE__ */ jsx(Home, { className: "mr-2 h-4 w-4" }),
62
- "Ir al Dashboard"
62
+ "Go to Dashboard"
63
63
  ] }) })
64
64
  ] })
65
65
  ] }) })
@@ -1 +1 @@
1
- {"version":3,"file":"PageRenderer.d.ts","sourceRoot":"","sources":["../../../../src/components/public/pageBuilder/PageRenderer.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAA;AAiC1D,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE;QACJ,EAAE,EAAE,MAAM,CAAA;QACV,KAAK,EAAE,MAAM,CAAA;QACb,IAAI,EAAE,MAAM,CAAA;QACZ,MAAM,EAAE,aAAa,EAAE,CAAA;QACvB,MAAM,EAAE,MAAM,CAAA;KACf,CAAA;CACF;AAED,wBAAgB,YAAY,CAAC,EAAE,IAAI,EAAE,EAAE,iBAAiB,2CA+BvD"}
1
+ {"version":3,"file":"PageRenderer.d.ts","sourceRoot":"","sources":["../../../../src/components/public/pageBuilder/PageRenderer.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAA;AAkC1D,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE;QACJ,EAAE,EAAE,MAAM,CAAA;QACV,KAAK,EAAE,MAAM,CAAA;QACb,IAAI,EAAE,MAAM,CAAA;QACZ,MAAM,EAAE,aAAa,EAAE,CAAA;QACvB,MAAM,EAAE,MAAM,CAAA;KACf,CAAA;CACF;AAED,wBAAgB,YAAY,CAAC,EAAE,IAAI,EAAE,EAAE,iBAAiB,2CA+BvD"}
@@ -1,5 +1,6 @@
1
1
  import { jsx, jsxs } from "react/jsx-runtime";
2
- import { getBlockComponentSSR, normalizeBlockProps } from "../../../lib/blocks/loader.js";
2
+ import { normalizeBlockProps } from "../../../lib/blocks/loader.js";
3
+ import { getBlockComponentSSR } from "../../../lib/blocks/loader.server.js";
3
4
  function BlockError({ blockSlug }) {
4
5
  return /* @__PURE__ */ jsx("div", { className: "w-full py-12 px-4 bg-destructive/10 border border-destructive/20 rounded", children: /* @__PURE__ */ jsxs("div", { className: "max-w-7xl mx-auto text-center", children: [
5
6
  /* @__PURE__ */ jsxs("p", { className: "text-destructive", children: [
@@ -56,8 +56,8 @@ function NotificationsPageSkeleton() {
56
56
  return /* @__PURE__ */ jsx(
57
57
  SettingsPageSkeleton,
58
58
  {
59
- title: "Notificaciones",
60
- description: "Configura c\xF3mo y cu\xE1ndo quieres recibir notificaciones.",
59
+ title: "Notifications",
60
+ description: "Choose how and when you want to be notified.",
61
61
  sectionsCount: 3,
62
62
  itemsPerSection: 3
63
63
  }
@@ -67,8 +67,8 @@ function SecurityPageSkeleton() {
67
67
  return /* @__PURE__ */ jsxs("div", { className: "container mx-auto p-6 max-w-4xl", children: [
68
68
  /* @__PURE__ */ jsx("div", { className: "mb-8", children: /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between mb-4", children: [
69
69
  /* @__PURE__ */ jsxs("div", { className: "space-y-2", children: [
70
- /* @__PURE__ */ jsx("h1", { className: "text-3xl font-bold tracking-tight", children: "Seguridad" }),
71
- /* @__PURE__ */ jsx("p", { className: "text-muted-foreground", children: "Mant\xE9n tu cuenta segura con estas configuraciones de seguridad." })
70
+ /* @__PURE__ */ jsx("h1", { className: "text-3xl font-bold tracking-tight", children: "Security" }),
71
+ /* @__PURE__ */ jsx("p", { className: "text-muted-foreground", children: "Keep your account safe with these security settings." })
72
72
  ] }),
73
73
  /* @__PURE__ */ jsx(Skeleton, { className: "h-10 w-32" }),
74
74
  " "
@@ -66,14 +66,14 @@ function SettingsSidebar({ className }) {
66
66
  }));
67
67
  }, [hasPassword]);
68
68
  const handleNavigation = useCallback((itemName, itemDescription) => {
69
- setStatusMessage(`Navegando a ${itemName} - ${itemDescription}`);
70
- }, []);
69
+ setStatusMessage(t("a11y.navigatingToAnnouncement", { name: itemName, description: itemDescription }));
70
+ }, [t]);
71
71
  const handleKeyDown = useCallback((e, href, itemName, itemDescription) => {
72
72
  if (e.key === "Enter" || e.key === " ") {
73
73
  e.preventDefault();
74
- setStatusMessage(`Navegando a ${itemName} - ${itemDescription}`);
74
+ setStatusMessage(t("a11y.navigatingToAnnouncement", { name: itemName, description: itemDescription }));
75
75
  }
76
- }, []);
76
+ }, [t]);
77
77
  return /* @__PURE__ */ jsxs(Fragment, { children: [
78
78
  /* @__PURE__ */ jsx(
79
79
  "div",
@@ -89,7 +89,7 @@ function SettingsSidebar({ className }) {
89
89
  {
90
90
  className: cn("space-y-2", className),
91
91
  role: "navigation",
92
- "aria-label": "Navegaci\xF3n de configuraci\xF3n",
92
+ "aria-label": t("a11y.settingsNavigation"),
93
93
  "data-cy": sel("settings.sidebar.container"),
94
94
  children: /* @__PURE__ */ jsxs("div", { className: "px-3 py-2", children: [
95
95
  /* @__PURE__ */ jsxs(
@@ -144,7 +144,7 @@ function SettingsSidebar({ className }) {
144
144
  {
145
145
  name: tSettings(`navigation.${item.name}`),
146
146
  description: tSettings(`overview.${item.name}Description`),
147
- current: isActive ? " (p\xE1gina actual)" : ""
147
+ current: isActive ? t("a11y.currentPageSuffix") : ""
148
148
  }
149
149
  ),
150
150
  className: cn(
@@ -13,6 +13,8 @@ export interface MultiSelectFilterProps {
13
13
  onChange: (values: string[]) => void;
14
14
  /** Additional class names for the trigger button */
15
15
  className?: string;
16
+ /** Label for the button that clears the whole field */
17
+ clearLabel?: string;
16
18
  /** data-cy attribute for E2E testing */
17
19
  'data-cy'?: string;
18
20
  }
@@ -37,5 +39,5 @@ export interface MultiSelectFilterProps {
37
39
  * data-cy="filter-status"
38
40
  * />
39
41
  */
40
- export declare function MultiSelectFilter({ label, options, values, onChange, className, 'data-cy': dataCy, }: MultiSelectFilterProps): import("react/jsx-runtime").JSX.Element;
42
+ export declare function MultiSelectFilter({ label, options, values, onChange, className, clearLabel, 'data-cy': dataCy, }: MultiSelectFilterProps): import("react/jsx-runtime").JSX.Element;
41
43
  //# sourceMappingURL=MultiSelectFilter.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"MultiSelectFilter.d.ts","sourceRoot":"","sources":["../../../src/components/shared/MultiSelectFilter.tsx"],"names":[],"mappings":"AAgBA,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;CACd;AAED,MAAM,WAAW,sBAAsB;IACrC,qCAAqC;IACrC,KAAK,EAAE,MAAM,CAAA;IACb,+BAA+B;IAC/B,OAAO,EAAE,YAAY,EAAE,CAAA;IACvB,gCAAgC;IAChC,MAAM,EAAE,MAAM,EAAE,CAAA;IAChB,sCAAsC;IACtC,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,IAAI,CAAA;IACpC,oDAAoD;IACpD,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,wCAAwC;IACxC,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAMD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,iBAAiB,CAAC,EAChC,KAAK,EACL,OAAO,EACP,MAAM,EACN,QAAQ,EACR,SAAS,EACT,SAAS,EAAE,MAA8B,GAC1C,EAAE,sBAAsB,2CA0HxB"}
1
+ {"version":3,"file":"MultiSelectFilter.d.ts","sourceRoot":"","sources":["../../../src/components/shared/MultiSelectFilter.tsx"],"names":[],"mappings":"AAgBA,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;CACd;AAED,MAAM,WAAW,sBAAsB;IACrC,qCAAqC;IACrC,KAAK,EAAE,MAAM,CAAA;IACb,+BAA+B;IAC/B,OAAO,EAAE,YAAY,EAAE,CAAA;IACvB,gCAAgC;IAChC,MAAM,EAAE,MAAM,EAAE,CAAA;IAChB,sCAAsC;IACtC,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,IAAI,CAAA;IACpC,oDAAoD;IACpD,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,uDAAuD;IACvD,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,wCAAwC;IACxC,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAMD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,iBAAiB,CAAC,EAChC,KAAK,EACL,OAAO,EACP,MAAM,EACN,QAAQ,EACR,SAAS,EACT,UAAoB,EACpB,SAAS,EAAE,MAA8B,GAC1C,EAAE,sBAAsB,2CA8HxB"}
@@ -15,6 +15,7 @@ function MultiSelectFilter({
15
15
  values,
16
16
  onChange,
17
17
  className,
18
+ clearLabel = "Clear",
18
19
  "data-cy": dataCy = "multi-select-filter"
19
20
  }) {
20
21
  const [open, setOpen] = useState(false);
@@ -74,6 +75,7 @@ function MultiSelectFilter({
74
75
  return /* @__PURE__ */ jsxs(
75
76
  "button",
76
77
  {
78
+ type: "button",
77
79
  onClick: () => handleToggle(option.value),
78
80
  className: cn(
79
81
  "w-full text-left px-3 py-2 text-sm rounded-md",
@@ -108,6 +110,7 @@ function MultiSelectFilter({
108
110
  /* @__PURE__ */ jsx(
109
111
  "button",
110
112
  {
113
+ type: "button",
111
114
  onClick: (e) => handleRemove(option.value, e),
112
115
  className: "hover:bg-primary/20 rounded-sm p-0.5 transition-colors",
113
116
  "aria-label": `Remove ${option.label}`,
@@ -119,17 +122,18 @@ function MultiSelectFilter({
119
122
  },
120
123
  option.value
121
124
  )),
122
- selectedOptions.length > 1 && /* @__PURE__ */ jsx(
125
+ /* @__PURE__ */ jsx(
123
126
  "button",
124
127
  {
128
+ type: "button",
125
129
  onClick: handleClearAll,
126
130
  className: cn(
127
131
  "text-xs text-muted-foreground hover:text-foreground",
128
132
  "px-1.5 py-1 transition-colors"
129
133
  ),
130
- "aria-label": "Clear all filters",
134
+ "aria-label": `Clear ${label} filter`,
131
135
  "data-cy": `${dataCy}-clear-all`,
132
- children: "Clear"
136
+ children: clearLabel
133
137
  }
134
138
  )
135
139
  ] })
@@ -4,6 +4,8 @@ export interface SearchInputProps extends Omit<InputHTMLAttributes<HTMLInputElem
4
4
  icon?: ReactNode;
5
5
  /** Container class name */
6
6
  containerClassName?: string;
7
+ /** Accessible name for the clear button */
8
+ clearLabel?: string;
7
9
  /** data-cy attribute for E2E testing */
8
10
  'data-cy'?: string;
9
11
  }
@@ -1 +1 @@
1
- {"version":3,"file":"SearchInput.d.ts","sourceRoot":"","sources":["../../../src/components/shared/SearchInput.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,SAAS,EAAE,mBAAmB,EAAE,MAAM,OAAO,CAAA;AAO3D,MAAM,WAAW,gBACf,SAAQ,IAAI,CAAC,mBAAmB,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC3D,oDAAoD;IACpD,IAAI,CAAC,EAAE,SAAS,CAAA;IAChB,2BAA2B;IAC3B,kBAAkB,CAAC,EAAE,MAAM,CAAA;IAC3B,wCAAwC;IACxC,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAMD;;;;;;;;;;GAUG;AACH,eAAO,MAAM,WAAW,+GA0BvB,CAAA"}
1
+ {"version":3,"file":"SearchInput.d.ts","sourceRoot":"","sources":["../../../src/components/shared/SearchInput.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,SAAS,EAAE,mBAAmB,EAAE,MAAM,OAAO,CAAA;AAO3D,MAAM,WAAW,gBACf,SAAQ,IAAI,CAAC,mBAAmB,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC3D,oDAAoD;IACpD,IAAI,CAAC,EAAE,SAAS,CAAA;IAChB,2BAA2B;IAC3B,kBAAkB,CAAC,EAAE,MAAM,CAAA;IAC3B,2CAA2C;IAC3C,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,wCAAwC;IACxC,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAMD;;;;;;;;;;GAUG;AACH,eAAO,MAAM,WAAW,+GAyGvB,CAAA"}
@@ -2,10 +2,48 @@
2
2
  import { jsx, jsxs } from "react/jsx-runtime";
3
3
  import { cn } from "../../lib/utils/index.js";
4
4
  import { Input } from "../ui/input.js";
5
- import { Search } from "lucide-react";
6
- import { forwardRef } from "react";
5
+ import { Search, X } from "lucide-react";
6
+ import { forwardRef, useEffect, useImperativeHandle, useRef, useState } from "react";
7
7
  const SearchInput = forwardRef(
8
- ({ className, containerClassName, icon, "data-cy": dataCy = "search-input", ...props }, ref) => {
8
+ ({
9
+ className,
10
+ containerClassName,
11
+ icon,
12
+ clearLabel = "Clear search",
13
+ "data-cy": dataCy = "search-input",
14
+ ...props
15
+ }, ref) => {
16
+ const innerRef = useRef(null);
17
+ useImperativeHandle(ref, () => innerRef.current);
18
+ const isControlled = props.value !== void 0;
19
+ const [typedValue, setTypedValue] = useState(() => String(props.defaultValue ?? ""));
20
+ const currentValue = isControlled ? props.value : typedValue;
21
+ const hasValue = currentValue !== null && currentValue !== void 0 && String(currentValue) !== "";
22
+ const showClear = hasValue && !props.disabled && !props.readOnly;
23
+ const handleChange = (event) => {
24
+ var _a;
25
+ if (!isControlled) setTypedValue(event.target.value);
26
+ (_a = props.onChange) == null ? void 0 : _a.call(props, event);
27
+ };
28
+ useEffect(() => {
29
+ var _a;
30
+ if (isControlled) return;
31
+ const inDom = ((_a = innerRef.current) == null ? void 0 : _a.value) ?? "";
32
+ setTypedValue((current) => current === inDom ? current : inDom);
33
+ });
34
+ const handleClear = () => {
35
+ var _a;
36
+ const input = innerRef.current;
37
+ if (!input) return;
38
+ const setValue = (_a = Object.getOwnPropertyDescriptor(
39
+ window.HTMLInputElement.prototype,
40
+ "value"
41
+ )) == null ? void 0 : _a.set;
42
+ setValue == null ? void 0 : setValue.call(input, "");
43
+ input.dispatchEvent(new Event("input", { bubbles: true }));
44
+ if (!isControlled) setTypedValue("");
45
+ input.focus();
46
+ };
9
47
  return /* @__PURE__ */ jsxs(
10
48
  "div",
11
49
  {
@@ -23,11 +61,31 @@ const SearchInput = forwardRef(
23
61
  /* @__PURE__ */ jsx(
24
62
  Input,
25
63
  {
26
- ref,
64
+ ref: innerRef,
27
65
  type: "search",
28
- className: cn("pl-10 h-10 rounded-lg", className),
66
+ className: cn(
67
+ "pl-10 h-10 rounded-lg",
68
+ // The browser draws its own clear affordance on type="search", which
69
+ // carries no test hook and would sit on top of the button below.
70
+ "[&::-webkit-search-cancel-button]:appearance-none",
71
+ showClear && "pr-10",
72
+ className
73
+ ),
29
74
  "data-cy": `${dataCy}-input`,
30
- ...props
75
+ ...props,
76
+ onChange: handleChange
77
+ }
78
+ ),
79
+ showClear && /* @__PURE__ */ jsx(
80
+ "button",
81
+ {
82
+ type: "button",
83
+ onClick: handleClear,
84
+ "aria-label": clearLabel,
85
+ title: clearLabel,
86
+ className: "absolute right-2 top-1/2 -translate-y-1/2 rounded-sm p-1 text-muted-foreground transition-colors hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",
87
+ "data-cy": `${dataCy}-clear`,
88
+ children: /* @__PURE__ */ jsx(X, { className: "h-4 w-4" })
31
89
  }
32
90
  )
33
91
  ]
@@ -52,7 +52,7 @@ function AddressInput({
52
52
  /* @__PURE__ */ jsx(
53
53
  Input,
54
54
  {
55
- placeholder: "Direcci\xF3n completa...",
55
+ placeholder: "Full address...",
56
56
  value: value.fullAddress || "",
57
57
  onChange: (e) => handleFullAddressChange(e.target.value),
58
58
  disabled,
@@ -64,7 +64,7 @@ function AddressInput({
64
64
  /* @__PURE__ */ jsx(
65
65
  Input,
66
66
  {
67
- placeholder: "Calle",
67
+ placeholder: "Street",
68
68
  value: value.street,
69
69
  onChange: (e) => updateField("street", e.target.value),
70
70
  disabled
@@ -73,7 +73,7 @@ function AddressInput({
73
73
  /* @__PURE__ */ jsx(
74
74
  Input,
75
75
  {
76
- placeholder: "Ciudad",
76
+ placeholder: "City",
77
77
  value: value.city,
78
78
  onChange: (e) => updateField("city", e.target.value),
79
79
  disabled
@@ -82,7 +82,7 @@ function AddressInput({
82
82
  /* @__PURE__ */ jsx(
83
83
  Input,
84
84
  {
85
- placeholder: "Estado/Provincia",
85
+ placeholder: "State/Province",
86
86
  value: value.state,
87
87
  onChange: (e) => updateField("state", e.target.value),
88
88
  disabled
@@ -91,7 +91,7 @@ function AddressInput({
91
91
  /* @__PURE__ */ jsx(
92
92
  Input,
93
93
  {
94
- placeholder: "C\xF3digo Postal",
94
+ placeholder: "Zip Code",
95
95
  value: value.zipCode,
96
96
  onChange: (e) => updateField("zipCode", e.target.value),
97
97
  disabled
@@ -101,7 +101,7 @@ function AddressInput({
101
101
  /* @__PURE__ */ jsx(
102
102
  Input,
103
103
  {
104
- placeholder: "Pa\xEDs",
104
+ placeholder: "Country",
105
105
  value: value.country,
106
106
  onChange: (e) => updateField("country", e.target.value),
107
107
  disabled
@@ -111,14 +111,14 @@ function AddressInput({
111
111
  }
112
112
  return /* @__PURE__ */ jsx(Card, { className, children: /* @__PURE__ */ jsxs(CardContent, { className: "p-4 space-y-4", children: [
113
113
  showFullAddress && /* @__PURE__ */ jsxs("div", { className: "space-y-2", children: [
114
- /* @__PURE__ */ jsx(Label, { htmlFor: "full-address", children: "Direcci\xF3n Completa" }),
114
+ /* @__PURE__ */ jsx(Label, { htmlFor: "full-address", children: "Full Address" }),
115
115
  /* @__PURE__ */ jsxs("div", { className: "relative", children: [
116
116
  /* @__PURE__ */ jsx(MapPin, { className: "absolute left-3 top-1/2 h-4 w-4 -translate-y-1/2 text-muted-foreground" }),
117
117
  /* @__PURE__ */ jsx(
118
118
  Input,
119
119
  {
120
120
  id: "full-address",
121
- placeholder: "Ingresa la direcci\xF3n completa...",
121
+ placeholder: "Enter the full address...",
122
122
  value: value.fullAddress || "",
123
123
  onChange: (e) => handleFullAddressChange(e.target.value),
124
124
  disabled,
@@ -129,12 +129,12 @@ function AddressInput({
129
129
  ] }),
130
130
  /* @__PURE__ */ jsxs("div", { className: "grid grid-cols-1 md:grid-cols-2 gap-4", children: [
131
131
  /* @__PURE__ */ jsxs("div", { className: "space-y-2 md:col-span-2", children: [
132
- /* @__PURE__ */ jsx(Label, { htmlFor: "street", children: "Calle y N\xFAmero" }),
132
+ /* @__PURE__ */ jsx(Label, { htmlFor: "street", children: "Street and Number" }),
133
133
  /* @__PURE__ */ jsx(
134
134
  Input,
135
135
  {
136
136
  id: "street",
137
- placeholder: "Ej: Av. Corrientes 1234",
137
+ placeholder: "E.g.: 123 Main St",
138
138
  value: value.street,
139
139
  onChange: (e) => updateField("street", e.target.value),
140
140
  disabled
@@ -142,12 +142,12 @@ function AddressInput({
142
142
  )
143
143
  ] }),
144
144
  /* @__PURE__ */ jsxs("div", { className: "space-y-2", children: [
145
- /* @__PURE__ */ jsx(Label, { htmlFor: "city", children: "Ciudad" }),
145
+ /* @__PURE__ */ jsx(Label, { htmlFor: "city", children: "City" }),
146
146
  /* @__PURE__ */ jsx(
147
147
  Input,
148
148
  {
149
149
  id: "city",
150
- placeholder: "Ej: Buenos Aires",
150
+ placeholder: "E.g.: New York",
151
151
  value: value.city,
152
152
  onChange: (e) => updateField("city", e.target.value),
153
153
  disabled
@@ -155,12 +155,12 @@ function AddressInput({
155
155
  )
156
156
  ] }),
157
157
  /* @__PURE__ */ jsxs("div", { className: "space-y-2", children: [
158
- /* @__PURE__ */ jsx(Label, { htmlFor: "state", children: "Estado/Provincia" }),
158
+ /* @__PURE__ */ jsx(Label, { htmlFor: "state", children: "State/Province" }),
159
159
  /* @__PURE__ */ jsx(
160
160
  Input,
161
161
  {
162
162
  id: "state",
163
- placeholder: "Ej: CABA",
163
+ placeholder: "E.g.: NY",
164
164
  value: value.state,
165
165
  onChange: (e) => updateField("state", e.target.value),
166
166
  disabled
@@ -168,12 +168,12 @@ function AddressInput({
168
168
  )
169
169
  ] }),
170
170
  /* @__PURE__ */ jsxs("div", { className: "space-y-2", children: [
171
- /* @__PURE__ */ jsx(Label, { htmlFor: "zipCode", children: "C\xF3digo Postal" }),
171
+ /* @__PURE__ */ jsx(Label, { htmlFor: "zipCode", children: "Zip Code" }),
172
172
  /* @__PURE__ */ jsx(
173
173
  Input,
174
174
  {
175
175
  id: "zipCode",
176
- placeholder: "Ej: C1043",
176
+ placeholder: "E.g.: 10001",
177
177
  value: value.zipCode,
178
178
  onChange: (e) => updateField("zipCode", e.target.value),
179
179
  disabled
@@ -181,12 +181,12 @@ function AddressInput({
181
181
  )
182
182
  ] }),
183
183
  /* @__PURE__ */ jsxs("div", { className: "space-y-2", children: [
184
- /* @__PURE__ */ jsx(Label, { htmlFor: "country", children: "Pa\xEDs" }),
184
+ /* @__PURE__ */ jsx(Label, { htmlFor: "country", children: "Country" }),
185
185
  /* @__PURE__ */ jsx(
186
186
  Input,
187
187
  {
188
188
  id: "country",
189
- placeholder: "Ej: Argentina",
189
+ placeholder: "E.g.: United States",
190
190
  value: value.country,
191
191
  onChange: (e) => updateField("country", e.target.value),
192
192
  disabled
@@ -38,16 +38,16 @@ function AudioUpload({
38
38
  return new Promise((resolve) => {
39
39
  var _a;
40
40
  if (maxSize && file.size > maxSize * 1024 * 1024) {
41
- resolve(`El audio es muy grande. M\xE1ximo ${maxSize}MB.`);
41
+ resolve(`Audio file is too large. Maximum ${maxSize}MB.`);
42
42
  return;
43
43
  }
44
44
  if (!file.type.startsWith("audio/")) {
45
- resolve("El archivo debe ser un audio.");
45
+ resolve("The file must be an audio file.");
46
46
  return;
47
47
  }
48
48
  const fileExtension = (_a = file.name.split(".").pop()) == null ? void 0 : _a.toLowerCase();
49
49
  if (fileExtension && !acceptedFormats.includes(fileExtension)) {
50
- resolve(`Formato no soportado. Formatos aceptados: ${acceptedFormats.join(", ")}`);
50
+ resolve(`Unsupported format. Accepted formats: ${acceptedFormats.join(", ")}`);
51
51
  return;
52
52
  }
53
53
  resolve(null);
@@ -72,7 +72,7 @@ function AudioUpload({
72
72
  const errors = [];
73
73
  for (const file of Array.from(files)) {
74
74
  if (value.length + newAudios.length >= maxAudios) {
75
- errors.push(`M\xE1ximo ${maxAudios} audios permitidos`);
75
+ errors.push(`Maximum ${maxAudios} audio files allowed`);
76
76
  break;
77
77
  }
78
78
  const error = await validateAudio(file);
@@ -181,16 +181,16 @@ function AudioUpload({
181
181
  children: [
182
182
  /* @__PURE__ */ jsx(Music, { className: "mx-auto h-8 w-8 text-muted-foreground" }),
183
183
  /* @__PURE__ */ jsxs("p", { className: "mt-2 text-sm text-muted-foreground", children: [
184
- "Arrastra audios aqu\xED o",
184
+ "Drag audio files here or",
185
185
  " ",
186
- /* @__PURE__ */ jsx("span", { className: "font-medium text-primary", children: "haz clic para seleccionar" })
186
+ /* @__PURE__ */ jsx("span", { className: "font-medium text-primary", children: "click to select" })
187
187
  ] }),
188
188
  /* @__PURE__ */ jsxs("p", { className: "text-xs text-muted-foreground mt-1", children: [
189
- maxAudios > 1 ? `Hasta ${maxAudios} audios` : "Un audio",
190
- maxSize && `, m\xE1ximo ${maxSize}MB cada uno`
189
+ maxAudios > 1 ? `Up to ${maxAudios} audio files` : "One audio file",
190
+ maxSize && `, maximum ${maxSize}MB each`
191
191
  ] }),
192
192
  /* @__PURE__ */ jsxs("p", { className: "text-xs text-muted-foreground", children: [
193
- "Formatos: ",
193
+ "Formats: ",
194
194
  acceptedFormats.join(", ")
195
195
  ] }),
196
196
  /* @__PURE__ */ jsx(
@@ -1 +1 @@
1
- {"version":3,"file":"combobox.d.ts","sourceRoot":"","sources":["../../../src/components/ui/combobox.tsx"],"names":[],"mappings":"AAmBA,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,GAAG,MAAM,CAAA;IACtB,KAAK,EAAE,MAAM,CAAA;IACb,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB;AAED,UAAU,aAAa;IACrB,OAAO,EAAE,cAAc,EAAE,CAAA;IACzB,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAA;IAClC,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,KAAK,IAAI,CAAA;IACtD,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB;;;OAGG;IACH,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,6CAA6C;IAC7C,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAED,wBAAgB,QAAQ,CAAC,EACvB,OAAO,EACP,KAAK,EACL,QAAQ,EACR,WAAqC,EACrC,iBAA+B,EAC/B,YAA4C,EAC5C,QAAgB,EAChB,SAAiB,EACjB,SAAS,EACT,EAAE,EACF,UAAgC,GACjC,EAAE,aAAa,2CAiGf"}
1
+ {"version":3,"file":"combobox.d.ts","sourceRoot":"","sources":["../../../src/components/ui/combobox.tsx"],"names":[],"mappings":"AAmBA,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,GAAG,MAAM,CAAA;IACtB,KAAK,EAAE,MAAM,CAAA;IACb,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB;AAED,UAAU,aAAa;IACrB,OAAO,EAAE,cAAc,EAAE,CAAA;IACzB,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAA;IAClC,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,KAAK,IAAI,CAAA;IACtD,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB;;;OAGG;IACH,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,6CAA6C;IAC7C,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAED,wBAAgB,QAAQ,CAAC,EACvB,OAAO,EACP,KAAK,EACL,QAAQ,EACR,WAAgC,EAChC,iBAA+B,EAC/B,YAAkC,EAClC,QAAgB,EAChB,SAAiB,EACjB,SAAS,EACT,EAAE,EACF,UAA8B,GAC/B,EAAE,aAAa,2CAiGf"}
@@ -20,14 +20,14 @@ function Combobox({
20
20
  options,
21
21
  value,
22
22
  onChange,
23
- placeholder = "Seleccionar opci\xF3n...",
24
- searchPlaceholder = "Buscar...",
25
- emptyMessage = "No se encontraron opciones.",
23
+ placeholder = "Select option...",
24
+ searchPlaceholder = "Search...",
25
+ emptyMessage = "No options found.",
26
26
  disabled = false,
27
27
  clearable = false,
28
28
  className,
29
29
  id,
30
- clearLabel = "Limpiar selecci\xF3n"
30
+ clearLabel = "Clear selection"
31
31
  }) {
32
32
  const [open, setOpen] = React.useState(false);
33
33
  const selectedOption = options.find((option) => option.value === value);
@@ -1 +1 @@
1
- {"version":3,"file":"country-select.d.ts","sourceRoot":"","sources":["../../../src/components/ui/country-select.tsx"],"names":[],"mappings":"AAoHA,UAAU,kBAAkB;IAC1B,KAAK,EAAE,MAAM,GAAG,SAAS,CAAA;IACzB,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,KAAK,IAAI,CAAA;IAC7C,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,4EAA4E;IAC5E,EAAE,CAAC,EAAE,MAAM,CAAA;CACZ;AAED,wBAAgB,aAAa,CAAC,EAC5B,KAAK,EACL,QAAQ,EACR,WAAmC,EACnC,QAAgB,EAChB,SAAS,EACT,SAAgB,EAChB,EAAE,GACH,EAAE,kBAAkB,2CAkBpB"}
1
+ {"version":3,"file":"country-select.d.ts","sourceRoot":"","sources":["../../../src/components/ui/country-select.tsx"],"names":[],"mappings":"AAoHA,UAAU,kBAAkB;IAC1B,KAAK,EAAE,MAAM,GAAG,SAAS,CAAA;IACzB,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,KAAK,IAAI,CAAA;IAC7C,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,4EAA4E;IAC5E,EAAE,CAAC,EAAE,MAAM,CAAA;CACZ;AAED,wBAAgB,aAAa,CAAC,EAC5B,KAAK,EACL,QAAQ,EACR,WAAiC,EACjC,QAAgB,EAChB,SAAS,EACT,SAAgB,EAChB,EAAE,GACH,EAAE,kBAAkB,2CAkBpB"}
@@ -113,7 +113,7 @@ const countries = [
113
113
  function CountrySelect({
114
114
  value,
115
115
  onChange,
116
- placeholder = "Seleccionar pa\xEDs...",
116
+ placeholder = "Select country...",
117
117
  disabled = false,
118
118
  className,
119
119
  clearable = true,
@@ -128,8 +128,8 @@ function CountrySelect({
128
128
  value,
129
129
  onChange: (value2) => onChange(value2),
130
130
  placeholder,
131
- searchPlaceholder: "Buscar pa\xEDs...",
132
- emptyMessage: "No se encontraron pa\xEDses.",
131
+ searchPlaceholder: "Search country...",
132
+ emptyMessage: "No countries found.",
133
133
  disabled,
134
134
  clearable,
135
135
  id,