@sonicjs-cms/core 2.18.1 → 3.0.0-beta.2

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 (225) hide show
  1. package/README.md +4 -3
  2. package/dist/admin-documents-form.template-KN7JF66Q.cjs +19 -0
  3. package/dist/{admin-layout-catalyst.template-UMTIN66R.js.map → admin-documents-form.template-KN7JF66Q.cjs.map} +1 -1
  4. package/dist/admin-documents-form.template-NLSI6Z42.js +6 -0
  5. package/dist/{admin-layout-catalyst.template-HFD37TY5.cjs.map → admin-documents-form.template-NLSI6Z42.js.map} +1 -1
  6. package/dist/admin-layout-catalyst.template-WHJGSWWD.js +7 -0
  7. package/dist/admin-layout-catalyst.template-WHJGSWWD.js.map +1 -0
  8. package/dist/admin-layout-catalyst.template-ZK5HD545.cjs +17 -0
  9. package/dist/admin-layout-catalyst.template-ZK5HD545.cjs.map +1 -0
  10. package/dist/app-Bo0X1OWX.d.ts +1268 -0
  11. package/dist/app-Do66yCcV.d.cts +1268 -0
  12. package/dist/cache-DDARE4QE.js +4 -0
  13. package/dist/cache-DDARE4QE.js.map +1 -0
  14. package/dist/cache-LVYS4BPL.cjs +33 -0
  15. package/dist/cache-LVYS4BPL.cjs.map +1 -0
  16. package/dist/chunk-2CB4KY7I.cjs +771 -0
  17. package/dist/chunk-2CB4KY7I.cjs.map +1 -0
  18. package/dist/{chunk-55RDMDOP.js → chunk-3TB6AT6X.js} +148 -55
  19. package/dist/chunk-3TB6AT6X.js.map +1 -0
  20. package/dist/{chunk-ON5ZMSU4.js → chunk-6JQOUUOB.js} +3 -3
  21. package/dist/chunk-6JQOUUOB.js.map +1 -0
  22. package/dist/chunk-6OUHGKFD.js +387 -0
  23. package/dist/chunk-6OUHGKFD.js.map +1 -0
  24. package/dist/{chunk-DSUJ5YQH.cjs → chunk-AAWNRBRB.cjs} +537 -92
  25. package/dist/chunk-AAWNRBRB.cjs.map +1 -0
  26. package/dist/chunk-AI663NBO.js +821 -0
  27. package/dist/chunk-AI663NBO.js.map +1 -0
  28. package/dist/chunk-BDDABDAB.cjs +1149 -0
  29. package/dist/chunk-BDDABDAB.cjs.map +1 -0
  30. package/dist/chunk-BLMTL57B.js +767 -0
  31. package/dist/chunk-BLMTL57B.js.map +1 -0
  32. package/dist/chunk-DNQCEKUK.cjs +327 -0
  33. package/dist/chunk-DNQCEKUK.cjs.map +1 -0
  34. package/dist/chunk-DSA4UX5B.cjs +276 -0
  35. package/dist/chunk-DSA4UX5B.cjs.map +1 -0
  36. package/dist/chunk-EF2NQUIQ.js +323 -0
  37. package/dist/chunk-EF2NQUIQ.js.map +1 -0
  38. package/dist/chunk-GCDZZNIN.js +192 -0
  39. package/dist/chunk-GCDZZNIN.js.map +1 -0
  40. package/dist/{chunk-ABB34XUS.cjs → chunk-H2AXVCLS.cjs} +667 -19
  41. package/dist/chunk-H2AXVCLS.cjs.map +1 -0
  42. package/dist/{chunk-XWIA3HVX.js → chunk-HDWE5FRJ.js} +6 -1249
  43. package/dist/chunk-HDWE5FRJ.js.map +1 -0
  44. package/dist/chunk-HIKBY7MS.cjs +70 -0
  45. package/dist/chunk-HIKBY7MS.cjs.map +1 -0
  46. package/dist/chunk-IESEVHXL.js +66 -0
  47. package/dist/chunk-IESEVHXL.js.map +1 -0
  48. package/dist/chunk-IVPRUGTY.js +242 -0
  49. package/dist/chunk-IVPRUGTY.js.map +1 -0
  50. package/dist/{chunk-SQ6FNXU2.cjs → chunk-IXUHXTHW.cjs} +2 -151
  51. package/dist/chunk-IXUHXTHW.cjs.map +1 -0
  52. package/dist/chunk-J6JTWD2A.cjs +100 -0
  53. package/dist/chunk-J6JTWD2A.cjs.map +1 -0
  54. package/dist/chunk-JEQ7FLOD.cjs +199 -0
  55. package/dist/chunk-JEQ7FLOD.cjs.map +1 -0
  56. package/dist/chunk-K25XHMM3.js +566 -0
  57. package/dist/chunk-K25XHMM3.js.map +1 -0
  58. package/dist/chunk-LRZIAW7U.cjs +158 -0
  59. package/dist/chunk-LRZIAW7U.cjs.map +1 -0
  60. package/dist/{chunk-OHYBNCVL.cjs → chunk-MVIZJOO5.cjs} +10 -1256
  61. package/dist/chunk-MVIZJOO5.cjs.map +1 -0
  62. package/dist/{chunk-UYJ6TJHX.cjs → chunk-NAVPFIG5.cjs} +148 -55
  63. package/dist/chunk-NAVPFIG5.cjs.map +1 -0
  64. package/dist/chunk-NLJVSER2.js +273 -0
  65. package/dist/chunk-NLJVSER2.js.map +1 -0
  66. package/dist/chunk-NMPEMSU4.js +154 -0
  67. package/dist/chunk-NMPEMSU4.js.map +1 -0
  68. package/dist/chunk-NUKJ54GA.cjs +245 -0
  69. package/dist/chunk-NUKJ54GA.cjs.map +1 -0
  70. package/dist/{chunk-T3Q5V33G.cjs → chunk-QAYFOER6.cjs} +621 -829
  71. package/dist/chunk-QAYFOER6.cjs.map +1 -0
  72. package/dist/{chunk-MGFRZO24.js → chunk-QZGABF2M.js} +3 -149
  73. package/dist/chunk-QZGABF2M.js.map +1 -0
  74. package/dist/chunk-RNZFGN4R.js +88 -0
  75. package/dist/chunk-RNZFGN4R.js.map +1 -0
  76. package/dist/chunk-RZ6H7OZK.js +1134 -0
  77. package/dist/chunk-RZ6H7OZK.js.map +1 -0
  78. package/dist/{chunk-XXDFQERJ.js → chunk-VD2EA3WT.js} +7192 -9806
  79. package/dist/chunk-VD2EA3WT.js.map +1 -0
  80. package/dist/{chunk-SXXTQETM.cjs → chunk-VXE42MYF.cjs} +8722 -11323
  81. package/dist/chunk-VXE42MYF.cjs.map +1 -0
  82. package/dist/{chunk-4ZSNJDLS.cjs → chunk-WULONYGB.cjs} +9 -9
  83. package/dist/chunk-WULONYGB.cjs.map +1 -0
  84. package/dist/chunk-XW56B23A.cjs +408 -0
  85. package/dist/chunk-XW56B23A.cjs.map +1 -0
  86. package/dist/chunk-YA3TJ65D.cjs +575 -0
  87. package/dist/chunk-YA3TJ65D.cjs.map +1 -0
  88. package/dist/{chunk-TFNTM3OA.js → chunk-YHSQVQXX.js} +645 -15
  89. package/dist/chunk-YHSQVQXX.js.map +1 -0
  90. package/dist/chunk-YP7GW2G5.cjs +866 -0
  91. package/dist/chunk-YP7GW2G5.cjs.map +1 -0
  92. package/dist/{chunk-QFWHAFEO.js → chunk-ZEZ245PW.js} +148 -858
  93. package/dist/chunk-ZEZ245PW.js.map +1 -0
  94. package/dist/{chunk-EW5NOBVU.js → chunk-ZGGXCFR6.js} +611 -817
  95. package/dist/chunk-ZGGXCFR6.js.map +1 -0
  96. package/dist/{collection-config-B4PG-AaF.d.cts → collection-config-JgHOpFCG.d.cts} +30 -2
  97. package/dist/{collection-config-B4PG-AaF.d.ts → collection-config-JgHOpFCG.d.ts} +30 -2
  98. package/dist/config-HFXANXCC.js +6 -0
  99. package/dist/config-HFXANXCC.js.map +1 -0
  100. package/dist/config-ON6FNMYX.cjs +19 -0
  101. package/dist/config-ON6FNMYX.cjs.map +1 -0
  102. package/dist/define-plugin-BzNHc1ZI.d.ts +1321 -0
  103. package/dist/define-plugin-IWDKYaVm.d.cts +1321 -0
  104. package/dist/document-projection-TDWRJX3Z.cjs +13 -0
  105. package/dist/document-projection-TDWRJX3Z.cjs.map +1 -0
  106. package/dist/document-projection-YYMC6I4U.js +4 -0
  107. package/dist/document-projection-YYMC6I4U.js.map +1 -0
  108. package/dist/index.cjs +13735 -4329
  109. package/dist/index.cjs.map +1 -1
  110. package/dist/index.d.cts +329 -492
  111. package/dist/index.d.ts +329 -492
  112. package/dist/index.js +13386 -3999
  113. package/dist/index.js.map +1 -1
  114. package/dist/middleware.cjs +36 -32
  115. package/dist/middleware.d.cts +69 -7
  116. package/dist/middleware.d.ts +69 -7
  117. package/dist/middleware.js +7 -3
  118. package/dist/migrations-NJJWQUKK.cjs +13 -0
  119. package/dist/{migrations-IYNTWDC6.cjs.map → migrations-NJJWQUKK.cjs.map} +1 -1
  120. package/dist/migrations-WCAVBD7C.js +4 -0
  121. package/dist/{migrations-R337UD46.js.map → migrations-WCAVBD7C.js.map} +1 -1
  122. package/dist/{plugin-bootstrap-DfVerYV4.d.cts → plugin-bootstrap-B8ThJU21.d.cts} +4315 -1661
  123. package/dist/{plugin-bootstrap-P_ciLp_C.d.ts → plugin-bootstrap-qu8hJgUt.d.ts} +4315 -1661
  124. package/dist/plugins.cjs +171 -12
  125. package/dist/plugins.d.cts +36 -2
  126. package/dist/plugins.d.ts +36 -2
  127. package/dist/plugins.js +5 -2
  128. package/dist/rbac-O73MFKDA.js +5 -0
  129. package/dist/rbac-O73MFKDA.js.map +1 -0
  130. package/dist/rbac-VONLJJKB.cjs +14 -0
  131. package/dist/rbac-VONLJJKB.cjs.map +1 -0
  132. package/dist/routes.cjs +41 -45
  133. package/dist/routes.d.cts +56 -146
  134. package/dist/routes.d.ts +56 -146
  135. package/dist/routes.js +17 -9
  136. package/dist/services.cjs +39 -72
  137. package/dist/services.d.cts +79 -54
  138. package/dist/services.d.ts +79 -54
  139. package/dist/services.js +6 -3
  140. package/dist/templates.cjs +17 -29
  141. package/dist/templates.d.cts +1 -66
  142. package/dist/templates.d.ts +1 -66
  143. package/dist/templates.js +3 -3
  144. package/dist/types-Dea1eNxU.d.cts +286 -0
  145. package/dist/types-Dea1eNxU.d.ts +286 -0
  146. package/dist/types.d.cts +1 -1
  147. package/dist/types.d.ts +1 -1
  148. package/dist/utils.cjs +18 -17
  149. package/dist/utils.d.cts +1 -1
  150. package/dist/utils.d.ts +1 -1
  151. package/dist/utils.js +2 -1
  152. package/migrations/0001_core.sql +184 -0
  153. package/migrations/0002_documents.sql +163 -0
  154. package/package.json +12 -7
  155. package/dist/admin-layout-catalyst.template-HFD37TY5.cjs +0 -17
  156. package/dist/admin-layout-catalyst.template-UMTIN66R.js +0 -7
  157. package/dist/app-C9esKLmh.d.cts +0 -112
  158. package/dist/app-C9esKLmh.d.ts +0 -112
  159. package/dist/chunk-4R3NOOL3.js +0 -2217
  160. package/dist/chunk-4R3NOOL3.js.map +0 -1
  161. package/dist/chunk-4ZSNJDLS.cjs.map +0 -1
  162. package/dist/chunk-55RDMDOP.js.map +0 -1
  163. package/dist/chunk-635JAMSE.cjs +0 -653
  164. package/dist/chunk-635JAMSE.cjs.map +0 -1
  165. package/dist/chunk-ABB34XUS.cjs.map +0 -1
  166. package/dist/chunk-C54YUA23.cjs +0 -2219
  167. package/dist/chunk-C54YUA23.cjs.map +0 -1
  168. package/dist/chunk-DSUJ5YQH.cjs.map +0 -1
  169. package/dist/chunk-EW5NOBVU.js.map +0 -1
  170. package/dist/chunk-EXNEW5US.js +0 -648
  171. package/dist/chunk-EXNEW5US.js.map +0 -1
  172. package/dist/chunk-I2H5NGJQ.js +0 -692
  173. package/dist/chunk-I2H5NGJQ.js.map +0 -1
  174. package/dist/chunk-MGFRZO24.js.map +0 -1
  175. package/dist/chunk-OHYBNCVL.cjs.map +0 -1
  176. package/dist/chunk-ON5ZMSU4.js.map +0 -1
  177. package/dist/chunk-QFWHAFEO.js.map +0 -1
  178. package/dist/chunk-SQ6FNXU2.cjs.map +0 -1
  179. package/dist/chunk-SXXTQETM.cjs.map +0 -1
  180. package/dist/chunk-T3Q5V33G.cjs.map +0 -1
  181. package/dist/chunk-TFNTM3OA.js.map +0 -1
  182. package/dist/chunk-UYJ6TJHX.cjs.map +0 -1
  183. package/dist/chunk-WAEQXGCX.cjs +0 -1898
  184. package/dist/chunk-WAEQXGCX.cjs.map +0 -1
  185. package/dist/chunk-XWIA3HVX.js.map +0 -1
  186. package/dist/chunk-XXDFQERJ.js.map +0 -1
  187. package/dist/migrations-IYNTWDC6.cjs +0 -13
  188. package/dist/migrations-R337UD46.js +0 -4
  189. package/dist/plugin-manager-BoM3Q7o7.d.cts +0 -328
  190. package/dist/plugin-manager-Efx9RyDX.d.ts +0 -328
  191. package/migrations/001_initial_schema.sql +0 -170
  192. package/migrations/002_faq_plugin.sql +0 -86
  193. package/migrations/003_stage5_enhancements.sql +0 -121
  194. package/migrations/004_stage6_user_management.sql +0 -183
  195. package/migrations/005_stage7_workflow_automation.sql +0 -294
  196. package/migrations/006_plugin_system.sql +0 -155
  197. package/migrations/007_demo_login_plugin.sql +0 -23
  198. package/migrations/008_fix_slug_validation.sql +0 -22
  199. package/migrations/009_system_logging.sql +0 -57
  200. package/migrations/011_config_managed_collections.sql +0 -15
  201. package/migrations/012_testimonials_plugin.sql +0 -80
  202. package/migrations/013_code_examples_plugin.sql +0 -177
  203. package/migrations/014_fix_plugin_registry.sql +0 -88
  204. package/migrations/015_add_remaining_plugins.sql +0 -89
  205. package/migrations/016_remove_duplicate_cache_plugin.sql +0 -17
  206. package/migrations/017_auth_configurable_fields.sql +0 -49
  207. package/migrations/018_settings_table.sql +0 -23
  208. package/migrations/019_remove_blog_posts_collection.sql +0 -15
  209. package/migrations/020_add_email_plugin.sql +0 -22
  210. package/migrations/021_add_magic_link_auth_plugin.sql +0 -42
  211. package/migrations/022_add_tinymce_plugin.sql +0 -25
  212. package/migrations/023_add_easy_mdx_plugin.sql +0 -25
  213. package/migrations/024_add_quill_editor_plugin.sql +0 -25
  214. package/migrations/025_add_easymde_plugin.sql +0 -25
  215. package/migrations/026_add_otp_login.sql +0 -42
  216. package/migrations/027_fix_slug_field_type.sql +0 -18
  217. package/migrations/028_fix_slug_field_type_in_schemas.sql +0 -30
  218. package/migrations/029_add_forms_system.sql +0 -184
  219. package/migrations/030_add_turnstile_to_forms.sql +0 -14
  220. package/migrations/031_ai_search_plugin.sql +0 -45
  221. package/migrations/032_user_profiles.sql +0 -37
  222. package/migrations/033_form_content_integration.sql +0 -19
  223. package/migrations/034_security_audit_plugin.sql +0 -27
  224. package/migrations/035_user_profiles_data_column.sql +0 -16
  225. package/migrations/036_analytics_events.sql +0 -22
@@ -1,4 +1,4 @@
1
- import { init_logo_template, init_admin_layout_catalyst_template, admin_layout_catalyst_template_exports, renderLogo, renderAdminLayoutCatalyst } from './chunk-55RDMDOP.js';
1
+ import { init_logo_template, init_admin_layout_catalyst_template, admin_layout_catalyst_template_exports, renderLogo, renderAdminLayoutCatalyst } from './chunk-3TB6AT6X.js';
2
2
  import { escapeHtml } from './chunk-TQABQWOP.js';
3
3
  import { __toCommonJS } from './chunk-V4OQ3NZ2.js';
4
4
 
@@ -1007,13 +1007,6 @@ function adminLayoutV2(data) {
1007
1007
  }
1008
1008
  function renderSidebar(currentPath, user, dynamicMenuItems) {
1009
1009
  const baseMenuItems = [
1010
- {
1011
- label: "Dashboard",
1012
- path: "/admin",
1013
- icon: `<svg class="w-5 h-5" fill="currentColor" viewBox="0 0 20 20">
1014
- <path d="M3 4a1 1 0 011-1h12a1 1 0 011 1v2a1 1 0 01-1 1H4a1 1 0 01-1-1V4zM3 10a1 1 0 011-1h6a1 1 0 011 1v6a1 1 0 01-1 1H4a1 1 0 01-1-1v-6zM14 9a1 1 0 00-1 1v6a1 1 0 001 1h2a1 1 0 001-1v-6a1 1 0 00-1-1h-2z"/>
1015
- </svg>`
1016
- },
1017
1010
  {
1018
1011
  label: "Content",
1019
1012
  path: "/admin/content",
@@ -1056,13 +1049,6 @@ function renderSidebar(currentPath, user, dynamicMenuItems) {
1056
1049
  <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M13 10V3L4 14h7v7l9-11h-7z"/>
1057
1050
  </svg>`
1058
1051
  },
1059
- {
1060
- label: "Design",
1061
- path: "/admin/design",
1062
- icon: `<svg class="w-5 h-5" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5">
1063
- <path stroke-linecap="round" stroke-linejoin="round" d="M4.098 19.902a3.75 3.75 0 0 0 5.304 0l6.401-6.402M6.75 21A3.75 3.75 0 0 1 3 17.25V4.125C3 3.504 3.504 3 4.125 3h5.25c.621 0 1.125.504 1.125 1.125v4.072M6.75 21a3.75 3.75 0 0 0 3.75-3.75V8.197M6.75 21h13.125c.621 0 1.125-.504 1.125-1.125v-5.25c0-.621-.504-1.125-1.125-1.125h-4.072M10.5 8.197l2.88-2.88c.438-.439 1.15-.439 1.59 0l3.712 3.713c.44.44.44 1.152 0 1.59l-2.879 2.88M6.75 17.25h.008v.008H6.75v-.008Z" />
1064
- </svg>`
1065
- },
1066
1052
  {
1067
1053
  label: "Logs",
1068
1054
  path: "/admin/logs",
@@ -1321,842 +1307,6 @@ function renderTopBar(pageTitle, user) {
1321
1307
  `;
1322
1308
  }
1323
1309
 
1324
- // src/templates/pages/admin-design.template.ts
1325
- init_admin_layout_catalyst_template();
1326
- function renderDesignPage(data) {
1327
- const pageContent = `
1328
- <div class="space-y-8">
1329
- <!-- Header -->
1330
- <div class="sm:flex sm:items-center sm:justify-between">
1331
- <div>
1332
- <h1 class="text-2xl/8 font-semibold text-zinc-950 dark:text-white sm:text-xl/8">Catalyst Design System</h1>
1333
- <p class="mt-2 text-sm/6 text-zinc-500 dark:text-zinc-400">
1334
- A comprehensive showcase of all UI components and design patterns
1335
- </p>
1336
- </div>
1337
- <div class="mt-4 sm:mt-0 flex gap-x-2">
1338
- <a
1339
- href="/docs/design-system"
1340
- class="inline-flex items-center gap-x-2 rounded-lg bg-white dark:bg-zinc-800 px-3.5 py-2.5 text-sm font-semibold text-zinc-950 dark:text-white hover:bg-zinc-50 dark:hover:bg-zinc-700 ring-1 ring-inset ring-zinc-950/10 dark:ring-white/10 transition-colors shadow-sm"
1341
- >
1342
- <svg class="h-4 w-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
1343
- <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 12h6m-6 4h6m2 5H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z"/>
1344
- </svg>
1345
- Documentation
1346
- </a>
1347
- </div>
1348
- </div>
1349
-
1350
- <!-- Quick Navigation -->
1351
- <div class="rounded-xl bg-white dark:bg-zinc-900 shadow-sm ring-1 ring-zinc-950/5 dark:ring-white/10 p-6">
1352
- <div class="flex items-center justify-between mb-6">
1353
- <div>
1354
- <h2 class="text-lg font-semibold text-zinc-950 dark:text-white">Component Library</h2>
1355
- <p class="mt-1 text-sm text-zinc-500 dark:text-zinc-400">Browse all available components</p>
1356
- </div>
1357
- <span class="inline-flex items-center gap-x-1.5 rounded-lg bg-zinc-950 dark:bg-white px-3 py-1.5 text-xs font-semibold text-white dark:text-zinc-950">
1358
- <svg class="h-4 w-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
1359
- <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M13 10V3L4 14h7v7l9-11h-7z"/>
1360
- </svg>
1361
- Quick Nav
1362
- </span>
1363
- </div>
1364
- <div class="grid grid-cols-2 md:grid-cols-4 lg:grid-cols-5 gap-3">
1365
- <a href="#modern" class="text-sm font-medium text-cyan-600 dark:text-cyan-400 hover:text-cyan-700 dark:hover:text-cyan-300 transition-colors">Modern Patterns</a>
1366
- <a href="#typography" class="text-sm font-medium text-zinc-950 dark:text-white hover:text-zinc-600 dark:hover:text-zinc-300 transition-colors">Typography</a>
1367
- <a href="#colors" class="text-sm font-medium text-zinc-950 dark:text-white hover:text-zinc-600 dark:hover:text-zinc-300 transition-colors">Colors</a>
1368
- <a href="#buttons" class="text-sm font-medium text-zinc-950 dark:text-white hover:text-zinc-600 dark:hover:text-zinc-300 transition-colors">Buttons</a>
1369
- <a href="#forms" class="text-sm font-medium text-zinc-950 dark:text-white hover:text-zinc-600 dark:hover:text-zinc-300 transition-colors">Forms</a>
1370
- <a href="#checkboxes" class="text-sm font-medium text-zinc-950 dark:text-white hover:text-zinc-600 dark:hover:text-zinc-300 transition-colors">Checkboxes</a>
1371
- <a href="#tables" class="text-sm font-medium text-zinc-950 dark:text-white hover:text-zinc-600 dark:hover:text-zinc-300 transition-colors">Tables</a>
1372
- <a href="#alerts" class="text-sm font-medium text-zinc-950 dark:text-white hover:text-zinc-600 dark:hover:text-zinc-300 transition-colors">Alerts</a>
1373
- <a href="#badges" class="text-sm font-medium text-zinc-950 dark:text-white hover:text-zinc-600 dark:hover:text-zinc-300 transition-colors">Badges</a>
1374
- <a href="#cards" class="text-sm font-medium text-zinc-950 dark:text-white hover:text-zinc-600 dark:hover:text-zinc-300 transition-colors">Cards</a>
1375
- </div>
1376
- </div>
1377
-
1378
- <!-- Modern Patterns Section -->
1379
- <div id="modern">
1380
- <h2 class="text-xl font-semibold text-zinc-950 dark:text-white mb-6">Modern UI Patterns</h2>
1381
-
1382
- <!-- Gradient Filter Bar -->
1383
- <div class="space-y-6">
1384
- <div>
1385
- <h3 class="text-base font-semibold text-zinc-950 dark:text-white mb-4">Gradient Filter Bar</h3>
1386
- <div class="relative rounded-xl overflow-hidden">
1387
- <div class="absolute inset-0 bg-gradient-to-r from-cyan-500/10 via-blue-500/10 to-purple-500/10 dark:from-cyan-400/20 dark:via-blue-400/20 dark:to-purple-400/20"></div>
1388
- <div class="relative bg-white/80 dark:bg-zinc-900/80 backdrop-blur-xl shadow-sm ring-1 ring-zinc-950/5 dark:ring-white/10">
1389
- <div class="px-6 py-5">
1390
- <div class="flex items-center gap-x-4">
1391
- <div class="relative group flex-1 max-w-sm">
1392
- <div class="absolute left-3.5 top-2.5 flex items-center justify-center w-5 h-5 rounded-full bg-gradient-to-br from-cyan-400 to-blue-500 dark:from-cyan-300 dark:to-blue-400 opacity-90 group-focus-within:opacity-100 transition-opacity">
1393
- <svg class="h-3 w-3 text-white" fill="none" stroke="currentColor" viewBox="0 0 24 24" stroke-width="2.5">
1394
- <path stroke-linecap="round" stroke-linejoin="round" d="M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z"/>
1395
- </svg>
1396
- </div>
1397
- <input
1398
- type="text"
1399
- placeholder="Search with gradient icon..."
1400
- class="w-full rounded-full bg-transparent pl-11 pr-4 py-2 text-sm text-zinc-950 dark:text-white placeholder-zinc-500 dark:placeholder-zinc-400 border-2 border-cyan-200/50 dark:border-cyan-700/50 focus:outline-none focus:border-cyan-500 dark:focus:border-cyan-400 focus:shadow-lg focus:shadow-cyan-500/20 dark:focus:shadow-cyan-400/20 transition-all duration-300"
1401
- />
1402
- </div>
1403
- <button class="inline-flex items-center gap-x-1.5 px-3 py-1.5 bg-white/90 dark:bg-zinc-800/90 backdrop-blur-sm text-zinc-950 dark:text-white text-sm font-medium rounded-full ring-1 ring-inset ring-cyan-200/50 dark:ring-cyan-700/50 hover:bg-gradient-to-r hover:from-cyan-50 hover:to-blue-50 dark:hover:from-cyan-900/30 dark:hover:to-blue-900/30 hover:ring-cyan-300 dark:hover:ring-cyan-600 transition-all duration-200">
1404
- <svg class="h-4 w-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
1405
- <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 4v5h.582m15.356 2A8.001 8.001 0 004.582 9m0 0H9m11 11v-5h-.581m0 0a8.003 8.003 0 01-15.357-2m15.357 2H15"/>
1406
- </svg>
1407
- Refresh
1408
- </button>
1409
- </div>
1410
- </div>
1411
- </div>
1412
- </div>
1413
- </div>
1414
-
1415
- <!-- Colored Badges -->
1416
- <div>
1417
- <h3 class="text-base font-semibold text-zinc-950 dark:text-white mb-4">Colored Category Badges</h3>
1418
- <div class="rounded-xl bg-white dark:bg-zinc-900 shadow-sm ring-1 ring-zinc-950/5 dark:ring-white/10 p-6">
1419
- <div class="flex flex-wrap gap-2">
1420
- <span class="inline-flex items-center rounded-md bg-lime-50 dark:bg-lime-500/10 px-2.5 py-1 text-sm font-medium text-lime-700 dark:text-lime-300 ring-1 ring-inset ring-lime-700/10 dark:ring-lime-400/20">
1421
- Collection Name
1422
- </span>
1423
- <span class="inline-flex items-center rounded-md bg-pink-50 dark:bg-pink-500/10 px-2.5 py-1 text-sm font-medium text-pink-700 dark:text-pink-300 ring-1 ring-inset ring-pink-700/10 dark:ring-pink-400/20">
1424
- 5 fields
1425
- </span>
1426
- <span class="inline-flex items-center rounded-md bg-cyan-50 dark:bg-cyan-500/10 px-2.5 py-1 text-sm font-medium text-cyan-700 dark:text-cyan-300 ring-1 ring-inset ring-cyan-700/10 dark:ring-cyan-400/20">
1427
- Interactive
1428
- </span>
1429
- <span class="inline-flex items-center rounded-md bg-purple-50 dark:bg-purple-500/10 px-2.5 py-1 text-sm font-medium text-purple-700 dark:text-purple-300 ring-1 ring-inset ring-purple-700/10 dark:ring-purple-400/20">
1430
- Category
1431
- </span>
1432
- </div>
1433
- </div>
1434
- </div>
1435
-
1436
- <!-- Enhanced Table Row -->
1437
- <div>
1438
- <h3 class="text-base font-semibold text-zinc-950 dark:text-white mb-4">Enhanced Table with Gradient Hover</h3>
1439
- <div class="rounded-xl bg-white dark:bg-zinc-900 shadow-sm ring-1 ring-zinc-950/5 dark:ring-white/10 overflow-hidden">
1440
- <table class="min-w-full">
1441
- <thead class="bg-zinc-50 dark:bg-zinc-800/50">
1442
- <tr>
1443
- <th scope="col" class="px-6 py-3 text-left text-xs font-medium uppercase tracking-wider text-zinc-500 dark:text-zinc-400">Name</th>
1444
- <th scope="col" class="px-6 py-3 text-left text-xs font-medium uppercase tracking-wider text-zinc-500 dark:text-zinc-400">Type</th>
1445
- <th scope="col" class="px-6 py-3 text-left text-xs font-medium uppercase tracking-wider text-zinc-500 dark:text-zinc-400">Status</th>
1446
- </tr>
1447
- </thead>
1448
- <tbody>
1449
- <tr class="group border-t border-zinc-950/5 dark:border-white/5 hover:bg-gradient-to-r hover:from-cyan-50/50 hover:via-blue-50/30 hover:to-purple-50/50 dark:hover:from-cyan-900/20 dark:hover:via-blue-900/10 dark:hover:to-purple-900/20 hover:shadow-sm hover:shadow-cyan-500/5 dark:hover:shadow-cyan-400/5 hover:border-l-2 hover:border-l-cyan-500 dark:hover:border-l-cyan-400 transition-all duration-300">
1450
- <td class="px-6 py-4 text-sm font-medium text-zinc-950 dark:text-white">Example Item</td>
1451
- <td class="px-6 py-4 text-sm text-zinc-500 dark:text-zinc-400">
1452
- <span class="inline-flex items-center rounded-md bg-lime-50 dark:bg-lime-500/10 px-2.5 py-1 text-sm font-medium text-lime-700 dark:text-lime-300 ring-1 ring-inset ring-lime-700/10 dark:ring-lime-400/20">
1453
- Collection
1454
- </span>
1455
- </td>
1456
- <td class="px-6 py-4 text-sm text-zinc-500 dark:text-zinc-400">
1457
- <span class="inline-flex items-center rounded-md bg-green-50 dark:bg-green-500/10 px-2 py-1 text-xs font-medium text-green-700 dark:text-green-400 ring-1 ring-inset ring-green-600/20 dark:ring-green-500/20">
1458
- Active
1459
- </span>
1460
- </td>
1461
- </tr>
1462
- <tr class="group border-t border-zinc-950/5 dark:border-white/5 hover:bg-gradient-to-r hover:from-cyan-50/50 hover:via-blue-50/30 hover:to-purple-50/50 dark:hover:from-cyan-900/20 dark:hover:via-blue-900/10 dark:hover:to-purple-900/20 hover:shadow-sm hover:shadow-cyan-500/5 dark:hover:shadow-cyan-400/5 hover:border-l-2 hover:border-l-cyan-500 dark:hover:border-l-cyan-400 transition-all duration-300">
1463
- <td class="px-6 py-4 text-sm font-medium text-zinc-950 dark:text-white">Another Item</td>
1464
- <td class="px-6 py-4 text-sm text-zinc-500 dark:text-zinc-400">
1465
- <span class="inline-flex items-center rounded-md bg-pink-50 dark:bg-pink-500/10 px-2.5 py-1 text-sm font-medium text-pink-700 dark:text-pink-300 ring-1 ring-inset ring-pink-700/10 dark:ring-pink-400/20">
1466
- Content
1467
- </span>
1468
- </td>
1469
- <td class="px-6 py-4 text-sm text-zinc-500 dark:text-zinc-400">
1470
- <span class="inline-flex items-center rounded-md bg-amber-50 dark:bg-amber-500/10 px-2 py-1 text-xs font-medium text-amber-700 dark:text-amber-400 ring-1 ring-inset ring-amber-600/20 dark:ring-amber-500/20">
1471
- Draft
1472
- </span>
1473
- </td>
1474
- </tr>
1475
- </tbody>
1476
- </table>
1477
- </div>
1478
- </div>
1479
- </div>
1480
- </div>
1481
-
1482
- <!-- Typography Section -->
1483
- <div id="typography">
1484
- <h2 class="text-xl font-semibold text-zinc-950 dark:text-white mb-6">Typography</h2>
1485
-
1486
- <div class="rounded-xl bg-white dark:bg-zinc-900 shadow-sm ring-1 ring-zinc-950/5 dark:ring-white/10 p-8">
1487
- <div class="space-y-8">
1488
- <div>
1489
- <h1 class="text-3xl font-semibold text-zinc-950 dark:text-white">Heading 1</h1>
1490
- <code class="mt-2 block text-xs text-zinc-500 dark:text-zinc-400">text-3xl font-semibold</code>
1491
- </div>
1492
-
1493
- <div>
1494
- <h2 class="text-2xl font-semibold text-zinc-950 dark:text-white">Heading 2</h2>
1495
- <code class="mt-2 block text-xs text-zinc-500 dark:text-zinc-400">text-2xl font-semibold</code>
1496
- </div>
1497
-
1498
- <div>
1499
- <h3 class="text-xl font-semibold text-zinc-950 dark:text-white">Heading 3</h3>
1500
- <code class="mt-2 block text-xs text-zinc-500 dark:text-zinc-400">text-xl font-semibold</code>
1501
- </div>
1502
-
1503
- <div>
1504
- <p class="text-base text-zinc-950 dark:text-white">Body text - This is the standard body text used throughout the interface for content and descriptions.</p>
1505
- <code class="mt-2 block text-xs text-zinc-500 dark:text-zinc-400">text-base</code>
1506
- </div>
1507
-
1508
- <div>
1509
- <p class="text-sm text-zinc-500 dark:text-zinc-400">Small text - Used for secondary information and metadata.</p>
1510
- <code class="mt-2 block text-xs text-zinc-500 dark:text-zinc-400">text-sm text-zinc-500</code>
1511
- </div>
1512
- </div>
1513
- </div>
1514
- </div>
1515
-
1516
- <!-- Colors Section -->
1517
- <div id="colors">
1518
- <h2 class="text-xl font-semibold text-zinc-950 dark:text-white mb-6">Color Palette</h2>
1519
-
1520
- <div class="space-y-6">
1521
- <!-- Pastel Brand Colors -->
1522
- <div class="rounded-xl bg-white dark:bg-zinc-900 shadow-sm ring-1 ring-zinc-950/5 dark:ring-white/10 p-6">
1523
- <h3 class="text-base font-semibold text-zinc-950 dark:text-white mb-4">Pastel Brand Colors (Currently Used)</h3>
1524
- <div class="grid grid-cols-2 md:grid-cols-4 gap-4">
1525
- <div>
1526
- <div class="h-20 rounded-lg bg-cyan-400 dark:bg-cyan-400 shadow-sm"></div>
1527
- <span class="text-xs font-medium text-zinc-950 dark:text-white mt-2 block">cyan-400</span>
1528
- <span class="text-xs text-zinc-500 dark:text-zinc-400">#22d3ee</span>
1529
- </div>
1530
- <div>
1531
- <div class="h-20 rounded-lg bg-pink-400 dark:bg-pink-400 shadow-sm"></div>
1532
- <span class="text-xs font-medium text-zinc-950 dark:text-white mt-2 block">pink-400</span>
1533
- <span class="text-xs text-zinc-500 dark:text-zinc-400">#f472b6</span>
1534
- </div>
1535
- <div>
1536
- <div class="h-20 rounded-lg bg-purple-400 dark:bg-purple-400 shadow-sm"></div>
1537
- <span class="text-xs font-medium text-zinc-950 dark:text-white mt-2 block">purple-400</span>
1538
- <span class="text-xs text-zinc-500 dark:text-zinc-400">#c084fc</span>
1539
- </div>
1540
- <div>
1541
- <div class="h-20 rounded-lg bg-lime-400 dark:bg-lime-400 shadow-sm"></div>
1542
- <span class="text-xs font-medium text-zinc-950 dark:text-white mt-2 block">lime-400</span>
1543
- <span class="text-xs text-zinc-500 dark:text-zinc-400">#a3e635</span>
1544
- </div>
1545
- </div>
1546
- </div>
1547
-
1548
- <!-- Full Pastel Palette -->
1549
- <div class="rounded-xl bg-white dark:bg-zinc-900 shadow-sm ring-1 ring-zinc-950/5 dark:ring-white/10 p-6">
1550
- <h3 class="text-base font-semibold text-zinc-950 dark:text-white mb-4">Complete Pastel Color Set</h3>
1551
- <div class="grid grid-cols-2 md:grid-cols-4 lg:grid-cols-6 gap-4">
1552
- <div>
1553
- <div class="h-20 rounded-lg bg-cyan-400 shadow-sm"></div>
1554
- <span class="text-xs font-medium text-zinc-950 dark:text-white mt-2 block">cyan-400</span>
1555
- <span class="text-xs text-zinc-500 dark:text-zinc-400">#22d3ee</span>
1556
- </div>
1557
- <div>
1558
- <div class="h-20 rounded-lg bg-sky-400 shadow-sm"></div>
1559
- <span class="text-xs font-medium text-zinc-950 dark:text-white mt-2 block">sky-400</span>
1560
- <span class="text-xs text-zinc-500 dark:text-zinc-400">#38bdf8</span>
1561
- </div>
1562
- <div>
1563
- <div class="h-20 rounded-lg bg-blue-400 shadow-sm"></div>
1564
- <span class="text-xs font-medium text-zinc-950 dark:text-white mt-2 block">blue-400</span>
1565
- <span class="text-xs text-zinc-500 dark:text-zinc-400">#60a5fa</span>
1566
- </div>
1567
- <div>
1568
- <div class="h-20 rounded-lg bg-indigo-400 shadow-sm"></div>
1569
- <span class="text-xs font-medium text-zinc-950 dark:text-white mt-2 block">indigo-400</span>
1570
- <span class="text-xs text-zinc-500 dark:text-zinc-400">#818cf8</span>
1571
- </div>
1572
- <div>
1573
- <div class="h-20 rounded-lg bg-purple-400 shadow-sm"></div>
1574
- <span class="text-xs font-medium text-zinc-950 dark:text-white mt-2 block">purple-400</span>
1575
- <span class="text-xs text-zinc-500 dark:text-zinc-400">#c084fc</span>
1576
- </div>
1577
- <div>
1578
- <div class="h-20 rounded-lg bg-fuchsia-400 shadow-sm"></div>
1579
- <span class="text-xs font-medium text-zinc-950 dark:text-white mt-2 block">fuchsia-400</span>
1580
- <span class="text-xs text-zinc-500 dark:text-zinc-400">#e879f9</span>
1581
- </div>
1582
- <div>
1583
- <div class="h-20 rounded-lg bg-pink-400 shadow-sm"></div>
1584
- <span class="text-xs font-medium text-zinc-950 dark:text-white mt-2 block">pink-400</span>
1585
- <span class="text-xs text-zinc-500 dark:text-zinc-400">#f472b6</span>
1586
- </div>
1587
- <div>
1588
- <div class="h-20 rounded-lg bg-rose-400 shadow-sm"></div>
1589
- <span class="text-xs font-medium text-zinc-950 dark:text-white mt-2 block">rose-400</span>
1590
- <span class="text-xs text-zinc-500 dark:text-zinc-400">#fb7185</span>
1591
- </div>
1592
- <div>
1593
- <div class="h-20 rounded-lg bg-red-400 shadow-sm"></div>
1594
- <span class="text-xs font-medium text-zinc-950 dark:text-white mt-2 block">red-400</span>
1595
- <span class="text-xs text-zinc-500 dark:text-zinc-400">#f87171</span>
1596
- </div>
1597
- <div>
1598
- <div class="h-20 rounded-lg bg-orange-400 shadow-sm"></div>
1599
- <span class="text-xs font-medium text-zinc-950 dark:text-white mt-2 block">orange-400</span>
1600
- <span class="text-xs text-zinc-500 dark:text-zinc-400">#fb923c</span>
1601
- </div>
1602
- <div>
1603
- <div class="h-20 rounded-lg bg-amber-400 shadow-sm"></div>
1604
- <span class="text-xs font-medium text-zinc-950 dark:text-white mt-2 block">amber-400</span>
1605
- <span class="text-xs text-zinc-500 dark:text-zinc-400">#fbbf24</span>
1606
- </div>
1607
- <div>
1608
- <div class="h-20 rounded-lg bg-yellow-400 shadow-sm"></div>
1609
- <span class="text-xs font-medium text-zinc-950 dark:text-white mt-2 block">yellow-400</span>
1610
- <span class="text-xs text-zinc-500 dark:text-zinc-400">#facc15</span>
1611
- </div>
1612
- <div>
1613
- <div class="h-20 rounded-lg bg-lime-400 shadow-sm"></div>
1614
- <span class="text-xs font-medium text-zinc-950 dark:text-white mt-2 block">lime-400</span>
1615
- <span class="text-xs text-zinc-500 dark:text-zinc-400">#a3e635</span>
1616
- </div>
1617
- <div>
1618
- <div class="h-20 rounded-lg bg-green-400 shadow-sm"></div>
1619
- <span class="text-xs font-medium text-zinc-950 dark:text-white mt-2 block">green-400</span>
1620
- <span class="text-xs text-zinc-500 dark:text-zinc-400">#4ade80</span>
1621
- </div>
1622
- <div>
1623
- <div class="h-20 rounded-lg bg-emerald-400 shadow-sm"></div>
1624
- <span class="text-xs font-medium text-zinc-950 dark:text-white mt-2 block">emerald-400</span>
1625
- <span class="text-xs text-zinc-500 dark:text-zinc-400">#34d399</span>
1626
- </div>
1627
- <div>
1628
- <div class="h-20 rounded-lg bg-teal-400 shadow-sm"></div>
1629
- <span class="text-xs font-medium text-zinc-950 dark:text-white mt-2 block">teal-400</span>
1630
- <span class="text-xs text-zinc-500 dark:text-zinc-400">#2dd4bf</span>
1631
- </div>
1632
- </div>
1633
- </div>
1634
-
1635
- <!-- Zinc Scale & Semantic Colors -->
1636
- <div class="grid grid-cols-1 md:grid-cols-2 gap-6">
1637
- <!-- Zinc Scale -->
1638
- <div class="rounded-xl bg-white dark:bg-zinc-900 shadow-sm ring-1 ring-zinc-950/5 dark:ring-white/10 p-6">
1639
- <h3 class="text-base font-semibold text-zinc-950 dark:text-white mb-4">Zinc (Neutral Scale)</h3>
1640
- <div class="space-y-2">
1641
- <div class="flex items-center gap-x-3">
1642
- <div class="h-10 w-10 rounded-lg bg-zinc-50 ring-1 ring-inset ring-zinc-950/10"></div>
1643
- <span class="text-sm text-zinc-950 dark:text-white">zinc-50</span>
1644
- </div>
1645
- <div class="flex items-center gap-x-3">
1646
- <div class="h-10 w-10 rounded-lg bg-zinc-100 ring-1 ring-inset ring-zinc-950/10"></div>
1647
- <span class="text-sm text-zinc-950 dark:text-white">zinc-100</span>
1648
- </div>
1649
- <div class="flex items-center gap-x-3">
1650
- <div class="h-10 w-10 rounded-lg bg-zinc-500"></div>
1651
- <span class="text-sm text-zinc-950 dark:text-white">zinc-500</span>
1652
- </div>
1653
- <div class="flex items-center gap-x-3">
1654
- <div class="h-10 w-10 rounded-lg bg-zinc-900"></div>
1655
- <span class="text-sm text-zinc-950 dark:text-white">zinc-900</span>
1656
- </div>
1657
- <div class="flex items-center gap-x-3">
1658
- <div class="h-10 w-10 rounded-lg bg-zinc-950"></div>
1659
- <span class="text-sm text-zinc-950 dark:text-white">zinc-950</span>
1660
- </div>
1661
- </div>
1662
- </div>
1663
-
1664
- <!-- Semantic Colors -->
1665
- <div class="rounded-xl bg-white dark:bg-zinc-900 shadow-sm ring-1 ring-zinc-950/5 dark:ring-white/10 p-6">
1666
- <h3 class="text-base font-semibold text-zinc-950 dark:text-white mb-4">Semantic Colors</h3>
1667
- <div class="space-y-2">
1668
- <div class="flex items-center gap-x-3">
1669
- <div class="h-10 w-10 rounded-lg bg-blue-500"></div>
1670
- <span class="text-sm text-zinc-950 dark:text-white">Info - blue-500</span>
1671
- </div>
1672
- <div class="flex items-center gap-x-3">
1673
- <div class="h-10 w-10 rounded-lg bg-green-500"></div>
1674
- <span class="text-sm text-zinc-950 dark:text-white">Success - green-500</span>
1675
- </div>
1676
- <div class="flex items-center gap-x-3">
1677
- <div class="h-10 w-10 rounded-lg bg-amber-500"></div>
1678
- <span class="text-sm text-zinc-950 dark:text-white">Warning - amber-500</span>
1679
- </div>
1680
- <div class="flex items-center gap-x-3">
1681
- <div class="h-10 w-10 rounded-lg bg-red-500"></div>
1682
- <span class="text-sm text-zinc-950 dark:text-white">Error - red-500</span>
1683
- </div>
1684
- </div>
1685
- </div>
1686
- </div>
1687
- </div>
1688
- </div>
1689
-
1690
- <!-- Buttons Section -->
1691
- <div id="buttons">
1692
- <h2 class="text-xl font-semibold text-zinc-950 dark:text-white mb-6">Buttons</h2>
1693
-
1694
- <div class="rounded-xl bg-white dark:bg-zinc-900 shadow-sm ring-1 ring-zinc-950/5 dark:ring-white/10 p-8">
1695
- <div class="space-y-8">
1696
- <!-- Primary Buttons -->
1697
- <div>
1698
- <h3 class="text-base font-semibold text-zinc-950 dark:text-white mb-4">Primary</h3>
1699
- <div class="flex flex-wrap gap-3">
1700
- <button class="inline-flex items-center gap-x-2 rounded-lg bg-zinc-950 dark:bg-white px-4 py-2.5 text-sm font-semibold text-white dark:text-zinc-950 hover:bg-zinc-800 dark:hover:bg-zinc-100 transition-colors">
1701
- <svg class="h-4 w-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
1702
- <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 4v16m8-8H4"/>
1703
- </svg>
1704
- Create New
1705
- </button>
1706
- <button class="rounded-lg bg-zinc-950 dark:bg-white px-5 py-2.5 text-sm font-semibold text-white dark:text-zinc-950 hover:bg-zinc-800 dark:hover:bg-zinc-100 transition-colors">
1707
- Save Changes
1708
- </button>
1709
- </div>
1710
- </div>
1711
-
1712
- <!-- Secondary Buttons -->
1713
- <div>
1714
- <h3 class="text-base font-semibold text-zinc-950 dark:text-white mb-4">Secondary</h3>
1715
- <div class="flex flex-wrap gap-3">
1716
- <button class="inline-flex items-center gap-x-2 rounded-lg bg-white dark:bg-zinc-800 px-4 py-2.5 text-sm font-semibold text-zinc-950 dark:text-white shadow-sm ring-1 ring-inset ring-zinc-950/10 dark:ring-white/10 hover:bg-zinc-50 dark:hover:bg-zinc-700 transition-colors">
1717
- <svg class="h-4 w-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
1718
- <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M11 5H6a2 2 0 00-2 2v11a2 2 0 002 2h11a2 2 0 002-2v-5m-1.414-9.414a2 2 0 112.828 2.828L11.828 15H9v-2.828l8.586-8.586z"/>
1719
- </svg>
1720
- Edit
1721
- </button>
1722
- <button class="rounded-lg bg-white dark:bg-zinc-800 px-5 py-2.5 text-sm font-semibold text-zinc-950 dark:text-white shadow-sm ring-1 ring-inset ring-zinc-950/10 dark:ring-white/10 hover:bg-zinc-50 dark:hover:bg-zinc-700 transition-colors">
1723
- Cancel
1724
- </button>
1725
- </div>
1726
- </div>
1727
-
1728
- <!-- Danger Buttons -->
1729
- <div>
1730
- <h3 class="text-base font-semibold text-zinc-950 dark:text-white mb-4">Danger</h3>
1731
- <div class="flex flex-wrap gap-3">
1732
- <button class="inline-flex items-center gap-x-2 rounded-lg bg-red-600 px-4 py-2.5 text-sm font-semibold text-white hover:bg-red-700 transition-colors">
1733
- <svg class="h-4 w-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
1734
- <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M19 7l-.867 12.142A2 2 0 0116.138 21H7.862a2 2 0 01-1.995-1.858L5 7m5 4v6m4-6v6m1-10V4a1 1 0 00-1-1h-4a1 1 0 00-1 1v3M4 7h16"/>
1735
- </svg>
1736
- Delete
1737
- </button>
1738
- </div>
1739
- </div>
1740
-
1741
- <!-- Link Buttons -->
1742
- <div>
1743
- <h3 class="text-base font-semibold text-zinc-950 dark:text-white mb-4">Link Style</h3>
1744
- <div class="flex flex-wrap gap-3">
1745
- <button class="text-sm font-semibold text-zinc-950 dark:text-white hover:text-zinc-600 dark:hover:text-zinc-300 transition-colors">
1746
- Learn more \u2192
1747
- </button>
1748
- </div>
1749
- </div>
1750
- </div>
1751
- </div>
1752
- </div>
1753
-
1754
- <!-- Forms Section -->
1755
- <div id="forms">
1756
- <h2 class="text-xl font-semibold text-zinc-950 dark:text-white mb-6">Form Components</h2>
1757
-
1758
- <div class="rounded-xl bg-white dark:bg-zinc-900 shadow-sm ring-1 ring-zinc-950/5 dark:ring-white/10 p-8">
1759
- <form class="space-y-6">
1760
- <!-- Text Input -->
1761
- <div>
1762
- <label class="block text-sm font-medium text-zinc-950 dark:text-white mb-2">
1763
- Text Input
1764
- </label>
1765
- <input
1766
- type="text"
1767
- placeholder="Enter text..."
1768
- class="w-full rounded-lg bg-white dark:bg-zinc-800 px-3 py-2 text-sm text-zinc-950 dark:text-white shadow-sm ring-1 ring-inset ring-zinc-950/10 dark:ring-white/10 placeholder:text-zinc-400 dark:placeholder:text-zinc-500 focus:outline-none focus:ring-2 focus:ring-zinc-950 dark:focus:ring-white transition-shadow"
1769
- />
1770
- </div>
1771
-
1772
- <!-- Select -->
1773
- <div>
1774
- <label for="select-demo" class="block text-sm/6 font-medium text-zinc-950 dark:text-white">
1775
- Select Dropdown
1776
- </label>
1777
- <div class="mt-2 grid grid-cols-1">
1778
- <select id="select-demo" class="col-start-1 row-start-1 w-full appearance-none rounded-md bg-white/5 dark:bg-white/5 py-1.5 pl-3 pr-8 text-base text-zinc-950 dark:text-white outline outline-1 -outline-offset-1 outline-zinc-500/30 dark:outline-zinc-400/30 *:bg-white dark:*:bg-zinc-800 focus-visible:outline focus-visible:outline-2 focus-visible:-outline-offset-2 focus-visible:outline-zinc-500 dark:focus-visible:outline-zinc-400 sm:text-sm/6">
1779
- <option value="">Choose an option</option>
1780
- <option value="1">Option 1</option>
1781
- <option value="2" selected>Option 2</option>
1782
- <option value="3">Option 3</option>
1783
- </select>
1784
- <svg viewBox="0 0 16 16" fill="currentColor" data-slot="icon" aria-hidden="true" class="pointer-events-none col-start-1 row-start-1 mr-2 size-5 self-center justify-self-end text-zinc-600 dark:text-zinc-400 sm:size-4">
1785
- <path d="M4.22 6.22a.75.75 0 0 1 1.06 0L8 8.94l2.72-2.72a.75.75 0 1 1 1.06 1.06l-3.25 3.25a.75.75 0 0 1-1.06 0L4.22 7.28a.75.75 0 0 1 0-1.06Z" clip-rule="evenodd" fill-rule="evenodd" />
1786
- </svg>
1787
- </div>
1788
- </div>
1789
-
1790
- <!-- Textarea -->
1791
- <div>
1792
- <label class="block text-sm font-medium text-zinc-950 dark:text-white mb-2">
1793
- Textarea
1794
- </label>
1795
- <textarea
1796
- rows="3"
1797
- placeholder="Enter description..."
1798
- class="w-full rounded-lg bg-white dark:bg-zinc-800 px-3 py-2 text-sm text-zinc-950 dark:text-white shadow-sm ring-1 ring-inset ring-zinc-950/10 dark:ring-white/10 placeholder:text-zinc-400 dark:placeholder:text-zinc-500 focus:outline-none focus:ring-2 focus:ring-zinc-950 dark:focus:ring-white transition-shadow"
1799
- ></textarea>
1800
- </div>
1801
-
1802
- <!-- Radio -->
1803
- <div>
1804
- <label class="block text-sm font-medium text-zinc-950 dark:text-white mb-3">
1805
- Radio Group
1806
- </label>
1807
- <div class="space-y-2">
1808
- <div class="flex items-center gap-x-2">
1809
- <input
1810
- type="radio"
1811
- id="radio-1"
1812
- name="radio-demo"
1813
- class="h-4 w-4 border-zinc-300 dark:border-zinc-700 bg-white dark:bg-zinc-800 text-zinc-950 dark:text-white focus:ring-2 focus:ring-zinc-950 dark:focus:ring-white focus:ring-offset-0"
1814
- />
1815
- <label for="radio-1" class="text-sm text-zinc-950 dark:text-white">
1816
- Option 1
1817
- </label>
1818
- </div>
1819
- <div class="flex items-center gap-x-2">
1820
- <input
1821
- type="radio"
1822
- id="radio-2"
1823
- name="radio-demo"
1824
- class="h-4 w-4 border-zinc-300 dark:border-zinc-700 bg-white dark:bg-zinc-800 text-zinc-950 dark:text-white focus:ring-2 focus:ring-zinc-950 dark:focus:ring-white focus:ring-offset-0"
1825
- />
1826
- <label for="radio-2" class="text-sm text-zinc-950 dark:text-white">
1827
- Option 2
1828
- </label>
1829
- </div>
1830
- </div>
1831
- </div>
1832
- </form>
1833
- </div>
1834
- </div>
1835
-
1836
- <!-- Checkboxes Section -->
1837
- <div id="checkboxes">
1838
- <h2 class="text-xl font-semibold text-zinc-950 dark:text-white mb-6">Checkboxes</h2>
1839
-
1840
- <div class="rounded-xl bg-white dark:bg-zinc-900 shadow-sm ring-1 ring-zinc-950/5 dark:ring-white/10 p-8">
1841
- <div class="space-y-8">
1842
- <!-- Simple Checkboxes -->
1843
- <div>
1844
- <h3 class="text-base font-semibold text-zinc-950 dark:text-white mb-4">Simple Checkboxes</h3>
1845
- <fieldset>
1846
- <legend class="sr-only">Simple Checkboxes</legend>
1847
- <div class="space-y-3">
1848
- <div class="flex gap-3">
1849
- <div class="flex h-6 shrink-0 items-center">
1850
- <div class="group grid size-4 grid-cols-1">
1851
- <input id="checkbox-1" type="checkbox" name="simple" class="col-start-1 row-start-1 appearance-none rounded border border-zinc-950/10 dark:border-white/10 bg-white dark:bg-white/5 checked:border-indigo-500 checked:bg-indigo-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-indigo-500 disabled:border-zinc-950/5 dark:disabled:border-white/5 disabled:bg-zinc-950/10 dark:disabled:bg-white/10 forced-colors:appearance-auto" />
1852
- <svg viewBox="0 0 14 14" fill="none" class="pointer-events-none col-start-1 row-start-1 size-3.5 self-center justify-self-center stroke-white group-has-[:disabled]:stroke-zinc-950/25 dark:group-has-[:disabled]:stroke-white/25">
1853
- <path d="M3 8L6 11L11 3.5" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="opacity-0 group-has-[:checked]:opacity-100" />
1854
- </svg>
1855
- </div>
1856
- </div>
1857
- <div class="text-sm/6"><label for="checkbox-1" class="font-medium text-zinc-950 dark:text-white">Default checkbox</label></div>
1858
- </div>
1859
- <div class="flex gap-3">
1860
- <div class="flex h-6 shrink-0 items-center">
1861
- <div class="group grid size-4 grid-cols-1">
1862
- <input id="checkbox-2" type="checkbox" name="simple" checked class="col-start-1 row-start-1 appearance-none rounded border border-zinc-950/10 dark:border-white/10 bg-white dark:bg-white/5 checked:border-indigo-500 checked:bg-indigo-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-indigo-500 disabled:border-zinc-950/5 dark:disabled:border-white/5 disabled:bg-zinc-950/10 dark:disabled:bg-white/10 forced-colors:appearance-auto" />
1863
- <svg viewBox="0 0 14 14" fill="none" class="pointer-events-none col-start-1 row-start-1 size-3.5 self-center justify-self-center stroke-white group-has-[:disabled]:stroke-zinc-950/25 dark:group-has-[:disabled]:stroke-white/25">
1864
- <path d="M3 8L6 11L11 3.5" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="opacity-0 group-has-[:checked]:opacity-100" />
1865
- </svg>
1866
- </div>
1867
- </div>
1868
- <div class="text-sm/6"><label for="checkbox-2" class="font-medium text-zinc-950 dark:text-white">Checked checkbox</label></div>
1869
- </div>
1870
- <div class="flex gap-3">
1871
- <div class="flex h-6 shrink-0 items-center">
1872
- <div class="group grid size-4 grid-cols-1">
1873
- <input id="checkbox-3" type="checkbox" name="simple" disabled class="col-start-1 row-start-1 appearance-none rounded border border-zinc-950/10 dark:border-white/10 bg-white dark:bg-white/5 checked:border-indigo-500 checked:bg-indigo-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-indigo-500 disabled:border-zinc-950/5 dark:disabled:border-white/5 disabled:bg-zinc-950/10 dark:disabled:bg-white/10 forced-colors:appearance-auto" />
1874
- <svg viewBox="0 0 14 14" fill="none" class="pointer-events-none col-start-1 row-start-1 size-3.5 self-center justify-self-center stroke-white group-has-[:disabled]:stroke-zinc-950/25 dark:group-has-[:disabled]:stroke-white/25">
1875
- <path d="M3 8L6 11L11 3.5" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="opacity-0 group-has-[:checked]:opacity-100" />
1876
- </svg>
1877
- </div>
1878
- </div>
1879
- <div class="text-sm/6"><label for="checkbox-3" class="font-medium text-zinc-500 dark:text-zinc-500">Disabled checkbox</label></div>
1880
- </div>
1881
- <div class="flex gap-3">
1882
- <div class="flex h-6 shrink-0 items-center">
1883
- <div class="group grid size-4 grid-cols-1">
1884
- <input id="checkbox-4" type="checkbox" name="simple" checked disabled class="col-start-1 row-start-1 appearance-none rounded border border-zinc-950/10 dark:border-white/10 bg-white dark:bg-white/5 checked:border-indigo-500 checked:bg-indigo-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-indigo-500 disabled:border-zinc-950/5 dark:disabled:border-white/5 disabled:bg-zinc-950/10 dark:disabled:bg-white/10 forced-colors:appearance-auto" />
1885
- <svg viewBox="0 0 14 14" fill="none" class="pointer-events-none col-start-1 row-start-1 size-3.5 self-center justify-self-center stroke-white group-has-[:disabled]:stroke-zinc-950/25 dark:group-has-[:disabled]:stroke-white/25">
1886
- <path d="M3 8L6 11L11 3.5" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="opacity-0 group-has-[:checked]:opacity-100" />
1887
- </svg>
1888
- </div>
1889
- </div>
1890
- <div class="text-sm/6"><label for="checkbox-4" class="font-medium text-zinc-500 dark:text-zinc-500">Disabled & checked</label></div>
1891
- </div>
1892
- </div>
1893
- </fieldset>
1894
- </div>
1895
-
1896
- <!-- Checkboxes with Descriptions -->
1897
- <div>
1898
- <h3 class="text-base font-semibold text-zinc-950 dark:text-white mb-4">With Descriptions</h3>
1899
- <fieldset>
1900
- <legend class="sr-only">Notifications</legend>
1901
- <div class="space-y-5">
1902
- <div class="flex gap-3">
1903
- <div class="flex h-6 shrink-0 items-center">
1904
- <div class="group grid size-4 grid-cols-1">
1905
- <input id="email-notif" type="checkbox" name="notifications" checked aria-describedby="email-desc" class="col-start-1 row-start-1 appearance-none rounded border border-zinc-950/10 dark:border-white/10 bg-white dark:bg-white/5 checked:border-indigo-500 checked:bg-indigo-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-indigo-500 disabled:border-zinc-950/5 dark:disabled:border-white/5 disabled:bg-zinc-950/10 dark:disabled:bg-white/10 forced-colors:appearance-auto" />
1906
- <svg viewBox="0 0 14 14" fill="none" class="pointer-events-none col-start-1 row-start-1 size-3.5 self-center justify-self-center stroke-white group-has-[:disabled]:stroke-zinc-950/25 dark:group-has-[:disabled]:stroke-white/25">
1907
- <path d="M3 8L6 11L11 3.5" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="opacity-0 group-has-[:checked]:opacity-100" />
1908
- </svg>
1909
- </div>
1910
- </div>
1911
- <div class="text-sm/6">
1912
- <label for="email-notif" class="font-medium text-zinc-950 dark:text-white">Email notifications</label>
1913
- <p id="email-desc" class="text-zinc-500 dark:text-zinc-400">Receive email updates about new features and product announcements.</p>
1914
- </div>
1915
- </div>
1916
- <div class="flex gap-3">
1917
- <div class="flex h-6 shrink-0 items-center">
1918
- <div class="group grid size-4 grid-cols-1">
1919
- <input id="marketing" type="checkbox" name="notifications" aria-describedby="marketing-desc" class="col-start-1 row-start-1 appearance-none rounded border border-zinc-950/10 dark:border-white/10 bg-white dark:bg-white/5 checked:border-indigo-500 checked:bg-indigo-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-indigo-500 disabled:border-zinc-950/5 dark:disabled:border-white/5 disabled:bg-zinc-950/10 dark:disabled:bg-white/10 forced-colors:appearance-auto" />
1920
- <svg viewBox="0 0 14 14" fill="none" class="pointer-events-none col-start-1 row-start-1 size-3.5 self-center justify-self-center stroke-white group-has-[:disabled]:stroke-zinc-950/25 dark:group-has-[:disabled]:stroke-white/25">
1921
- <path d="M3 8L6 11L11 3.5" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="opacity-0 group-has-[:checked]:opacity-100" />
1922
- </svg>
1923
- </div>
1924
- </div>
1925
- <div class="text-sm/6">
1926
- <label for="marketing" class="font-medium text-zinc-950 dark:text-white">Marketing communications</label>
1927
- <p id="marketing-desc" class="text-zinc-500 dark:text-zinc-400">Get tips, special offers, and news about our products and services.</p>
1928
- </div>
1929
- </div>
1930
- <div class="flex gap-3">
1931
- <div class="flex h-6 shrink-0 items-center">
1932
- <div class="group grid size-4 grid-cols-1">
1933
- <input id="security" type="checkbox" name="notifications" checked disabled aria-describedby="security-desc" class="col-start-1 row-start-1 appearance-none rounded border border-zinc-950/10 dark:border-white/10 bg-white dark:bg-white/5 checked:border-indigo-500 checked:bg-indigo-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-indigo-500 disabled:border-zinc-950/5 dark:disabled:border-white/5 disabled:bg-zinc-950/10 dark:disabled:bg-white/10 forced-colors:appearance-auto" />
1934
- <svg viewBox="0 0 14 14" fill="none" class="pointer-events-none col-start-1 row-start-1 size-3.5 self-center justify-self-center stroke-white group-has-[:disabled]:stroke-zinc-950/25 dark:group-has-[:disabled]:stroke-white/25">
1935
- <path d="M3 8L6 11L11 3.5" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="opacity-0 group-has-[:checked]:opacity-100" />
1936
- </svg>
1937
- </div>
1938
- </div>
1939
- <div class="text-sm/6">
1940
- <label for="security" class="font-medium text-zinc-500 dark:text-zinc-500">Security alerts</label>
1941
- <p id="security-desc" class="text-zinc-500 dark:text-zinc-400">Important notifications about your account security and privacy.</p>
1942
- </div>
1943
- </div>
1944
- </div>
1945
- </fieldset>
1946
- </div>
1947
- </div>
1948
- </div>
1949
- </div>
1950
-
1951
- <!-- Tables Section -->
1952
- <div id="tables">
1953
- <h2 class="text-xl font-semibold text-zinc-950 dark:text-white mb-6">Tables</h2>
1954
-
1955
- <div class="rounded-xl bg-white dark:bg-zinc-900 shadow-sm ring-1 ring-zinc-950/5 dark:ring-white/10 overflow-hidden">
1956
- <table class="min-w-full divide-y divide-zinc-950/5 dark:divide-white/5">
1957
- <thead class="bg-zinc-50 dark:bg-zinc-800/50">
1958
- <tr>
1959
- <th scope="col" class="px-6 py-3 text-left text-xs font-medium uppercase tracking-wider text-zinc-500 dark:text-zinc-400">
1960
- Name
1961
- </th>
1962
- <th scope="col" class="px-6 py-3 text-left text-xs font-medium uppercase tracking-wider text-zinc-500 dark:text-zinc-400">
1963
- Status
1964
- </th>
1965
- <th scope="col" class="px-6 py-3 text-left text-xs font-medium uppercase tracking-wider text-zinc-500 dark:text-zinc-400">
1966
- Created
1967
- </th>
1968
- <th scope="col" class="relative px-6 py-3">
1969
- <span class="sr-only">Actions</span>
1970
- </th>
1971
- </tr>
1972
- </thead>
1973
- <tbody class="divide-y divide-zinc-950/5 dark:divide-white/5">
1974
- <tr class="hover:bg-zinc-50 dark:hover:bg-zinc-800/50 transition-colors">
1975
- <td class="whitespace-nowrap px-6 py-4 text-sm font-medium text-zinc-950 dark:text-white">
1976
- Sample Item 1
1977
- </td>
1978
- <td class="whitespace-nowrap px-6 py-4">
1979
- <span class="inline-flex items-center rounded-md bg-green-50 dark:bg-green-500/10 px-2 py-1 text-xs font-medium text-green-700 dark:text-green-400 ring-1 ring-inset ring-green-600/20 dark:ring-green-500/20">
1980
- Published
1981
- </span>
1982
- </td>
1983
- <td class="whitespace-nowrap px-6 py-4 text-sm text-zinc-500 dark:text-zinc-400">
1984
- Jan 15, 2025
1985
- </td>
1986
- <td class="whitespace-nowrap px-6 py-4 text-right text-sm font-medium">
1987
- <div class="flex justify-end gap-x-2">
1988
- <a href="#" class="text-zinc-950 dark:text-white hover:text-zinc-600 dark:hover:text-zinc-300 transition-colors">
1989
- Edit
1990
- </a>
1991
- <a href="#" class="text-red-600 hover:text-red-700 dark:hover:text-red-500 transition-colors">
1992
- Delete
1993
- </a>
1994
- </div>
1995
- </td>
1996
- </tr>
1997
- <tr class="hover:bg-zinc-50 dark:hover:bg-zinc-800/50 transition-colors">
1998
- <td class="whitespace-nowrap px-6 py-4 text-sm font-medium text-zinc-950 dark:text-white">
1999
- Sample Item 2
2000
- </td>
2001
- <td class="whitespace-nowrap px-6 py-4">
2002
- <span class="inline-flex items-center rounded-md bg-amber-50 dark:bg-amber-500/10 px-2 py-1 text-xs font-medium text-amber-700 dark:text-amber-400 ring-1 ring-inset ring-amber-600/20 dark:ring-amber-500/20">
2003
- Draft
2004
- </span>
2005
- </td>
2006
- <td class="whitespace-nowrap px-6 py-4 text-sm text-zinc-500 dark:text-zinc-400">
2007
- Jan 14, 2025
2008
- </td>
2009
- <td class="whitespace-nowrap px-6 py-4 text-right text-sm font-medium">
2010
- <div class="flex justify-end gap-x-2">
2011
- <a href="#" class="text-zinc-950 dark:text-white hover:text-zinc-600 dark:hover:text-zinc-300 transition-colors">
2012
- Edit
2013
- </a>
2014
- <a href="#" class="text-red-600 hover:text-red-700 dark:hover:text-red-500 transition-colors">
2015
- Delete
2016
- </a>
2017
- </div>
2018
- </td>
2019
- </tr>
2020
- </tbody>
2021
- </table>
2022
- </div>
2023
- </div>
2024
-
2025
- <!-- Alerts Section -->
2026
- <div id="alerts">
2027
- <h2 class="text-xl font-semibold text-zinc-950 dark:text-white mb-6">Alerts</h2>
2028
-
2029
- <div class="space-y-4">
2030
- <!-- Success Alert -->
2031
- <div class="rounded-lg bg-green-50 dark:bg-green-500/10 p-4 ring-1 ring-green-600/20 dark:ring-green-500/20">
2032
- <div class="flex items-start gap-x-3">
2033
- <svg class="h-5 w-5 text-green-600 dark:text-green-400" fill="none" stroke="currentColor" viewBox="0 0 24 24">
2034
- <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z"/>
2035
- </svg>
2036
- <div>
2037
- <h3 class="text-sm font-semibold text-green-900 dark:text-green-300">Success</h3>
2038
- <p class="mt-1 text-sm text-green-700 dark:text-green-400">Your changes have been saved successfully.</p>
2039
- </div>
2040
- </div>
2041
- </div>
2042
-
2043
- <!-- Error Alert -->
2044
- <div class="rounded-lg bg-red-50 dark:bg-red-500/10 p-4 ring-1 ring-red-600/20 dark:ring-red-500/20">
2045
- <div class="flex items-start gap-x-3">
2046
- <svg class="h-5 w-5 text-red-600 dark:text-red-400" fill="none" stroke="currentColor" viewBox="0 0 24 24">
2047
- <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"/>
2048
- </svg>
2049
- <div>
2050
- <h3 class="text-sm font-semibold text-red-900 dark:text-red-300">Error</h3>
2051
- <p class="mt-1 text-sm text-red-700 dark:text-red-400">There was a problem with your request.</p>
2052
- </div>
2053
- </div>
2054
- </div>
2055
-
2056
- <!-- Warning Alert -->
2057
- <div class="rounded-lg bg-amber-50 dark:bg-amber-500/10 p-4 ring-1 ring-amber-600/20 dark:ring-amber-500/20">
2058
- <div class="flex items-start gap-x-3">
2059
- <svg class="h-5 w-5 text-amber-600 dark:text-amber-400" fill="none" stroke="currentColor" viewBox="0 0 24 24">
2060
- <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-2.5L13.732 4c-.77-.833-1.865-.833-2.632 0L3.732 16.5c-.77.833.192 2.5 1.732 2.5z"/>
2061
- </svg>
2062
- <div>
2063
- <h3 class="text-sm font-semibold text-amber-900 dark:text-amber-300">Warning</h3>
2064
- <p class="mt-1 text-sm text-amber-700 dark:text-amber-400">Please review your changes before continuing.</p>
2065
- </div>
2066
- </div>
2067
- </div>
2068
-
2069
- <!-- Info Alert -->
2070
- <div class="rounded-lg bg-blue-50 dark:bg-blue-500/10 p-4 ring-1 ring-blue-600/20 dark:ring-blue-500/20">
2071
- <div class="flex items-start gap-x-3">
2072
- <svg class="h-5 w-5 text-blue-600 dark:text-blue-400" fill="none" stroke="currentColor" viewBox="0 0 24 24">
2073
- <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"/>
2074
- </svg>
2075
- <div>
2076
- <h3 class="text-sm font-semibold text-blue-900 dark:text-blue-300">Information</h3>
2077
- <p class="mt-1 text-sm text-blue-700 dark:text-blue-400">Here's some helpful information about this feature.</p>
2078
- </div>
2079
- </div>
2080
- </div>
2081
- </div>
2082
- </div>
2083
-
2084
- <!-- Badges Section -->
2085
- <div id="badges">
2086
- <h2 class="text-xl font-semibold text-zinc-950 dark:text-white mb-6">Badges</h2>
2087
-
2088
- <div class="rounded-xl bg-white dark:bg-zinc-900 shadow-sm ring-1 ring-zinc-950/5 dark:ring-white/10 p-8">
2089
- <div class="flex flex-wrap gap-2">
2090
- <span class="inline-flex items-center rounded-md bg-zinc-50 dark:bg-zinc-800 px-2 py-1 text-xs font-medium text-zinc-600 dark:text-zinc-400 ring-1 ring-inset ring-zinc-500/10 dark:ring-zinc-400/20">
2091
- Default
2092
- </span>
2093
- <span class="inline-flex items-center rounded-md bg-blue-50 dark:bg-blue-500/10 px-2 py-1 text-xs font-medium text-blue-700 dark:text-blue-400 ring-1 ring-inset ring-blue-700/10 dark:ring-blue-400/20">
2094
- Info
2095
- </span>
2096
- <span class="inline-flex items-center rounded-md bg-green-50 dark:bg-green-500/10 px-2 py-1 text-xs font-medium text-green-700 dark:text-green-400 ring-1 ring-inset ring-green-600/20 dark:ring-green-500/20">
2097
- Success
2098
- </span>
2099
- <span class="inline-flex items-center rounded-md bg-amber-50 dark:bg-amber-500/10 px-2 py-1 text-xs font-medium text-amber-700 dark:text-amber-400 ring-1 ring-inset ring-amber-600/20 dark:ring-amber-500/20">
2100
- Warning
2101
- </span>
2102
- <span class="inline-flex items-center rounded-md bg-red-50 dark:bg-red-500/10 px-2 py-1 text-xs font-medium text-red-700 dark:text-red-400 ring-1 ring-inset ring-red-600/20 dark:ring-red-500/20">
2103
- Error
2104
- </span>
2105
- </div>
2106
- </div>
2107
- </div>
2108
-
2109
- <!-- Cards Section -->
2110
- <div id="cards">
2111
- <h2 class="text-xl font-semibold text-zinc-950 dark:text-white mb-6">Cards</h2>
2112
-
2113
- <div class="grid grid-cols-1 md:grid-cols-3 gap-6">
2114
- <!-- Basic Card -->
2115
- <div class="rounded-xl bg-white dark:bg-zinc-900 shadow-sm ring-1 ring-zinc-950/5 dark:ring-white/10 p-6">
2116
- <h3 class="text-base font-semibold text-zinc-950 dark:text-white mb-2">Basic Card</h3>
2117
- <p class="text-sm text-zinc-500 dark:text-zinc-400">
2118
- A simple card with a title and description.
2119
- </p>
2120
- </div>
2121
-
2122
- <!-- Interactive Card -->
2123
- <div class="rounded-xl bg-white dark:bg-zinc-900 shadow-sm ring-1 ring-zinc-950/5 dark:ring-white/10 p-6 hover:shadow-md hover:ring-zinc-950/10 dark:hover:ring-white/20 transition-all cursor-pointer">
2124
- <h3 class="text-base font-semibold text-zinc-950 dark:text-white mb-2">Interactive Card</h3>
2125
- <p class="text-sm text-zinc-500 dark:text-zinc-400">
2126
- This card has hover effects and is clickable.
2127
- </p>
2128
- </div>
2129
-
2130
- <!-- Card with Icon -->
2131
- <div class="rounded-xl bg-white dark:bg-zinc-900 shadow-sm ring-1 ring-zinc-950/5 dark:ring-white/10 p-6">
2132
- <div class="flex items-center gap-x-3 mb-3">
2133
- <div class="flex h-10 w-10 items-center justify-center rounded-lg bg-zinc-950 dark:bg-white">
2134
- <svg class="h-5 w-5 text-white dark:text-zinc-950" fill="none" stroke="currentColor" viewBox="0 0 24 24">
2135
- <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M13 10V3L4 14h7v7l9-11h-7z"/>
2136
- </svg>
2137
- </div>
2138
- <h3 class="text-base font-semibold text-zinc-950 dark:text-white">With Icon</h3>
2139
- </div>
2140
- <p class="text-sm text-zinc-500 dark:text-zinc-400">
2141
- Card with an icon in the header.
2142
- </p>
2143
- </div>
2144
- </div>
2145
- </div>
2146
-
2147
- </div>
2148
- `;
2149
- const layoutData = {
2150
- title: "Catalyst Design System",
2151
- pageTitle: "Design System",
2152
- currentPath: "/admin/design",
2153
- user: data.user,
2154
- version: data.version,
2155
- content: pageContent
2156
- };
2157
- return renderAdminLayoutCatalyst(layoutData);
2158
- }
2159
-
2160
1310
  // src/templates/pages/admin-checkboxes.template.ts
2161
1311
  init_admin_layout_catalyst_template();
2162
1312
  function renderCheckboxPage(data) {
@@ -2172,13 +1322,13 @@ function renderCheckboxPage(data) {
2172
1322
  </div>
2173
1323
  <div class="mt-4 sm:mt-0">
2174
1324
  <a
2175
- href="/admin/design"
1325
+ href="/admin"
2176
1326
  class="inline-flex items-center gap-x-2 rounded-lg bg-white dark:bg-zinc-800 px-3.5 py-2.5 text-sm font-semibold text-zinc-950 dark:text-white hover:bg-zinc-50 dark:hover:bg-zinc-700 ring-1 ring-inset ring-zinc-950/10 dark:ring-white/10 transition-colors shadow-sm"
2177
1327
  >
2178
1328
  <svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
2179
1329
  <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M15 19l-7-7 7-7"/>
2180
1330
  </svg>
2181
- Back to Design System
1331
+ Back to Admin
2182
1332
  </a>
2183
1333
  </div>
2184
1334
  </div>
@@ -2350,399 +1500,6 @@ function renderCheckboxPage(data) {
2350
1500
  return renderAdminLayoutCatalyst(layoutData);
2351
1501
  }
2352
1502
 
2353
- // src/templates/pages/admin-testimonials-list.template.ts
2354
- init_admin_layout_catalyst_template();
2355
- function renderTestimonialsList(data) {
2356
- const { testimonials, totalCount, currentPage, totalPages, message, messageType } = data;
2357
- const pageContent = `
2358
- <div>
2359
- <!-- Header -->
2360
- <div class="flex flex-col sm:flex-row sm:items-center sm:justify-between mb-6">
2361
- <div>
2362
- <h1 class="text-2xl/8 font-semibold text-zinc-950 dark:text-white sm:text-xl/8">Testimonials</h1>
2363
- <p class="mt-2 text-sm/6 text-zinc-500 dark:text-zinc-400">Manage customer testimonials and reviews</p>
2364
- </div>
2365
- <div class="mt-4 sm:mt-0 sm:ml-16 sm:flex-none">
2366
- <a href="/admin/testimonials/new"
2367
- class="inline-flex items-center justify-center rounded-lg bg-zinc-950 dark:bg-white px-3.5 py-2.5 text-sm font-semibold text-white dark:text-zinc-950 hover:bg-zinc-800 dark:hover:bg-zinc-100 transition-colors shadow-sm">
2368
- <svg class="-ml-0.5 mr-1.5 h-5 w-5" viewBox="0 0 20 20" fill="currentColor">
2369
- <path d="M10.75 4.75a.75.75 0 00-1.5 0v4.5h-4.5a.75.75 0 000 1.5h4.5v4.5a.75.75 0 001.5 0v-4.5h4.5a.75.75 0 000-1.5h-4.5v-4.5z" />
2370
- </svg>
2371
- Add Testimonial
2372
- </a>
2373
- </div>
2374
- </div>
2375
-
2376
- ${message ? renderAlert({ type: messageType || "info", message, dismissible: true }) : ""}
2377
-
2378
- <!-- Filters -->
2379
- <div class="relative rounded-xl overflow-hidden mb-6">
2380
- <!-- Gradient Background -->
2381
- <div class="absolute inset-0 bg-gradient-to-r from-cyan-500/10 via-blue-500/10 to-purple-500/10 dark:from-cyan-400/20 dark:via-blue-400/20 dark:to-purple-400/20"></div>
2382
-
2383
- <div class="relative bg-white/80 dark:bg-zinc-900/80 backdrop-blur-xl shadow-sm ring-1 ring-zinc-950/5 dark:ring-white/10">
2384
- <div class="px-6 py-5">
2385
- <div class="flex items-center justify-between">
2386
- <div class="flex items-center space-x-4 flex-1">
2387
- <div>
2388
- <label for="published" class="block text-sm/6 font-medium text-zinc-950 dark:text-white">Status</label>
2389
- <div class="mt-2 grid grid-cols-1">
2390
- <select
2391
- name="published"
2392
- id="published"
2393
- hx-get="/admin/testimonials"
2394
- hx-trigger="change"
2395
- hx-target="#testimonials-list"
2396
- hx-include="[name='minRating'], [name='search']"
2397
- class="col-start-1 row-start-1 w-full appearance-none rounded-md bg-white/5 dark:bg-white/5 py-1.5 pl-3 pr-8 text-base text-zinc-950 dark:text-white outline outline-1 -outline-offset-1 outline-cyan-500/30 dark:outline-cyan-400/30 *:bg-white dark:*:bg-zinc-800 focus-visible:outline focus-visible:outline-2 focus-visible:-outline-offset-2 focus-visible:outline-cyan-500 dark:focus-visible:outline-cyan-400 sm:text-sm/6 min-w-48"
2398
- >
2399
- <option value="">All</option>
2400
- <option value="true">Published</option>
2401
- <option value="false">Draft</option>
2402
- </select>
2403
- <svg viewBox="0 0 16 16" fill="currentColor" data-slot="icon" aria-hidden="true" class="pointer-events-none col-start-1 row-start-1 mr-2 size-5 self-center justify-self-end text-cyan-600 dark:text-cyan-400 sm:size-4">
2404
- <path d="M4.22 6.22a.75.75 0 0 1 1.06 0L8 8.94l2.72-2.72a.75.75 0 1 1 1.06 1.06l-3.25 3.25a.75.75 0 0 1-1.06 0L4.22 7.28a.75.75 0 0 1 0-1.06Z" clip-rule="evenodd" fill-rule="evenodd" />
2405
- </svg>
2406
- </div>
2407
- </div>
2408
- <div>
2409
- <label for="minRating" class="block text-sm/6 font-medium text-zinc-950 dark:text-white">Min Rating</label>
2410
- <div class="mt-2 grid grid-cols-1">
2411
- <select
2412
- name="minRating"
2413
- id="minRating"
2414
- hx-get="/admin/testimonials"
2415
- hx-trigger="change"
2416
- hx-target="#testimonials-list"
2417
- hx-include="[name='published'], [name='search']"
2418
- class="col-start-1 row-start-1 w-full appearance-none rounded-md bg-white/5 dark:bg-white/5 py-1.5 pl-3 pr-8 text-base text-zinc-950 dark:text-white outline outline-1 -outline-offset-1 outline-cyan-500/30 dark:outline-cyan-400/30 *:bg-white dark:*:bg-zinc-800 focus-visible:outline focus-visible:outline-2 focus-visible:-outline-offset-2 focus-visible:outline-cyan-500 dark:focus-visible:outline-cyan-400 sm:text-sm/6 min-w-48"
2419
- >
2420
- <option value="">All Ratings</option>
2421
- <option value="5">5 Stars</option>
2422
- <option value="4">4+ Stars</option>
2423
- <option value="3">3+ Stars</option>
2424
- </select>
2425
- <svg viewBox="0 0 16 16" fill="currentColor" data-slot="icon" aria-hidden="true" class="pointer-events-none col-start-1 row-start-1 mr-2 size-5 self-center justify-self-end text-cyan-600 dark:text-cyan-400 sm:size-4">
2426
- <path d="M4.22 6.22a.75.75 0 0 1 1.06 0L8 8.94l2.72-2.72a.75.75 0 1 1 1.06 1.06l-3.25 3.25a.75.75 0 0 1-1.06 0L4.22 7.28a.75.75 0 0 1 0-1.06Z" clip-rule="evenodd" fill-rule="evenodd" />
2427
- </svg>
2428
- </div>
2429
- </div>
2430
- <div class="flex-1 max-w-md">
2431
- <label for="search" class="block text-sm font-medium text-zinc-950 dark:text-white mb-2">Search</label>
2432
- <div class="relative group">
2433
- <div class="absolute left-3.5 top-2.5 flex items-center justify-center w-5 h-5 rounded-full bg-gradient-to-br from-cyan-400 to-blue-500 dark:from-cyan-300 dark:to-blue-400 opacity-90 group-focus-within:opacity-100 transition-opacity">
2434
- <svg class="h-3 w-3 text-white" fill="none" stroke="currentColor" viewBox="0 0 24 24" stroke-width="2.5">
2435
- <path stroke-linecap="round" stroke-linejoin="round" d="M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z"/>
2436
- </svg>
2437
- </div>
2438
- <input
2439
- type="text"
2440
- name="search"
2441
- id="search"
2442
- placeholder="Search testimonials..."
2443
- hx-get="/admin/testimonials"
2444
- hx-trigger="keyup changed delay:300ms"
2445
- hx-target="#testimonials-list"
2446
- hx-include="[name='published'], [name='minRating']"
2447
- class="w-full rounded-full bg-transparent px-11 py-2 text-sm text-zinc-950 dark:text-white placeholder-zinc-500 dark:placeholder-zinc-400 border-2 border-cyan-200/50 dark:border-cyan-700/50 focus:outline-none focus:border-cyan-500 dark:focus:border-cyan-400 focus:shadow-lg focus:shadow-cyan-500/20 dark:focus:shadow-cyan-400/20 transition-all duration-300"
2448
- />
2449
- </div>
2450
- </div>
2451
- </div>
2452
- <div class="flex items-center gap-x-3 ml-4">
2453
- <span class="text-sm/6 font-medium text-zinc-700 dark:text-zinc-300 px-3 py-1.5 rounded-full bg-white/60 dark:bg-zinc-800/60 backdrop-blur-sm">${totalCount} ${totalCount === 1 ? "item" : "items"}</span>
2454
- <button
2455
- onclick="location.reload()"
2456
- class="inline-flex items-center gap-x-1.5 px-3 py-1.5 bg-white/90 dark:bg-zinc-800/90 backdrop-blur-sm text-zinc-950 dark:text-white text-sm font-medium rounded-full ring-1 ring-inset ring-cyan-200/50 dark:ring-cyan-700/50 hover:bg-gradient-to-r hover:from-cyan-50 hover:to-blue-50 dark:hover:from-cyan-900/30 dark:hover:to-blue-900/30 hover:ring-cyan-300 dark:hover:ring-cyan-600 transition-all duration-200"
2457
- >
2458
- <svg class="h-4 w-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
2459
- <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 4v5h.582m15.356 2A8.001 8.001 0 004.582 9m0 0H9m11 11v-5h-.581m0 0a8.003 8.003 0 01-15.357-2m15.357 2H15"/>
2460
- </svg>
2461
- Refresh
2462
- </button>
2463
- </div>
2464
- </div>
2465
- </div>
2466
- </div>
2467
- </div>
2468
-
2469
- <!-- Testimonials List -->
2470
- <div id="testimonials-list">
2471
- ${testimonials.length > 0 ? renderTable({
2472
- tableId: "testimonials-table",
2473
- rowClickable: true,
2474
- rowClickUrl: (row) => `/admin/testimonials/${row.id}`,
2475
- columns: [
2476
- { key: "author", label: "Author", sortable: true, sortType: "string" },
2477
- { key: "testimonial", label: "Testimonial", sortable: false },
2478
- { key: "status", label: "Status", sortable: true, sortType: "boolean" },
2479
- { key: "sortOrder", label: "Order", sortable: true, sortType: "number" },
2480
- { key: "created_at", label: "Created", sortable: true, sortType: "date" }
2481
- ],
2482
- rows: testimonials.map((testimonial) => {
2483
- const rating = testimonial.rating ? "\u2B50".repeat(testimonial.rating) : "";
2484
- const truncated = testimonial.testimonial_text.length > 100 ? testimonial.testimonial_text.substring(0, 100) + "..." : testimonial.testimonial_text;
2485
- return {
2486
- id: testimonial.id,
2487
- author: `
2488
- <div class="flex flex-col">
2489
- <div class="font-medium text-zinc-950 dark:text-white">${testimonial.author_name}</div>
2490
- ${testimonial.author_title || testimonial.author_company ? `
2491
- <div class="text-xs text-zinc-500 dark:text-zinc-400">
2492
- ${[testimonial.author_title, testimonial.author_company].filter(Boolean).join(" \xB7 ")}
2493
- </div>
2494
- ` : ""}
2495
- ${rating ? `<div class="text-xs mt-1">${rating}</div>` : ""}
2496
- </div>
2497
- `,
2498
- testimonial: `<div class="text-sm text-zinc-700 dark:text-zinc-300 max-w-md">${truncated}</div>`,
2499
- status: testimonial.isPublished ? '<span class="inline-flex items-center rounded-md bg-green-50 dark:bg-green-500/10 px-2 py-1 text-xs font-medium text-green-700 dark:text-green-400 ring-1 ring-inset ring-green-600/20 dark:ring-green-500/20">Published</span>' : '<span class="inline-flex items-center rounded-md bg-zinc-50 dark:bg-zinc-500/10 px-2 py-1 text-xs font-medium text-zinc-600 dark:text-zinc-400 ring-1 ring-inset ring-zinc-500/20 dark:ring-zinc-500/20">Draft</span>',
2500
- sortOrder: testimonial.sortOrder.toString(),
2501
- created_at: new Date(testimonial.created_at * 1e3).toLocaleDateString()
2502
- };
2503
- }),
2504
- selectable: true
2505
- }) : `
2506
- <div class="text-center py-12 bg-white dark:bg-zinc-900 rounded-lg shadow-sm ring-1 ring-zinc-950/5 dark:ring-white/10">
2507
- <svg class="mx-auto h-12 w-12 text-zinc-400 dark:text-zinc-600" fill="none" viewBox="0 0 24 24" stroke="currentColor">
2508
- <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M8 12h.01M12 12h.01M16 12h.01M21 12c0 4.418-4.03 8-9 8a9.863 9.863 0 01-4.255-.949L3 20l1.395-3.72C3.512 15.042 3 13.574 3 12c0-4.418 4.03-8 9-8s9 3.582 9 8z" />
2509
- </svg>
2510
- <h3 class="mt-2 text-sm font-semibold text-zinc-950 dark:text-white">No testimonials</h3>
2511
- <p class="mt-1 text-sm text-zinc-500 dark:text-zinc-400">Get started by creating a new testimonial.</p>
2512
- <div class="mt-6">
2513
- <a href="/admin/testimonials/new" class="inline-flex items-center rounded-md bg-zinc-950 dark:bg-white px-3 py-2 text-sm font-semibold text-white dark:text-zinc-950 shadow-sm hover:bg-zinc-800 dark:hover:bg-zinc-100 transition-colors">
2514
- <svg class="-ml-0.5 mr-1.5 h-5 w-5" viewBox="0 0 20 20" fill="currentColor">
2515
- <path d="M10.75 4.75a.75.75 0 00-1.5 0v4.5h-4.5a.75.75 0 000 1.5h4.5v4.5a.75.75 0 001.5 0v-4.5h4.5a.75.75 0 000-1.5h-4.5v-4.5z" />
2516
- </svg>
2517
- New Testimonial
2518
- </a>
2519
- </div>
2520
- </div>
2521
- `}
2522
- </div>
2523
-
2524
- ${totalPages > 1 ? renderPagination({
2525
- currentPage,
2526
- totalPages,
2527
- totalItems: totalCount,
2528
- itemsPerPage: 20,
2529
- startItem: (currentPage - 1) * 20 + 1,
2530
- endItem: Math.min(currentPage * 20, totalCount),
2531
- baseUrl: "/admin/testimonials"
2532
- }) : ""}
2533
- </div>
2534
- `;
2535
- const layoutData = {
2536
- title: "Testimonials",
2537
- pageTitle: "Testimonials",
2538
- currentPath: "/admin/testimonials",
2539
- user: data.user,
2540
- content: pageContent
2541
- };
2542
- return renderAdminLayoutCatalyst(layoutData);
2543
- }
2544
-
2545
- // src/templates/pages/admin-code-examples-list.template.ts
2546
- init_admin_layout_catalyst_template();
2547
- function renderCodeExamplesList(data) {
2548
- const { codeExamples, totalCount, currentPage, totalPages, message, messageType } = data;
2549
- const pageContent = `
2550
- <div>
2551
- <!-- Header -->
2552
- <div class="flex flex-col sm:flex-row sm:items-center sm:justify-between mb-6">
2553
- <div>
2554
- <h1 class="text-2xl/8 font-semibold text-zinc-950 dark:text-white sm:text-xl/8">Code Examples</h1>
2555
- <p class="mt-2 text-sm/6 text-zinc-500 dark:text-zinc-400">Manage code snippets and examples</p>
2556
- </div>
2557
- <div class="mt-4 sm:mt-0 sm:ml-16 sm:flex-none">
2558
- <a href="/admin/code-examples/new"
2559
- class="inline-flex items-center justify-center rounded-lg bg-zinc-950 dark:bg-white px-3.5 py-2.5 text-sm font-semibold text-white dark:text-zinc-950 hover:bg-zinc-800 dark:hover:bg-zinc-100 transition-colors shadow-sm">
2560
- <svg class="-ml-0.5 mr-1.5 h-5 w-5" viewBox="0 0 20 20" fill="currentColor">
2561
- <path d="M10.75 4.75a.75.75 0 00-1.5 0v4.5h-4.5a.75.75 0 000 1.5h4.5v4.5a.75.75 0 001.5 0v-4.5h4.5a.75.75 0 000-1.5h-4.5v-4.5z" />
2562
- </svg>
2563
- Add Code Example
2564
- </a>
2565
- </div>
2566
- </div>
2567
-
2568
- ${message ? renderAlert({ type: messageType || "info", message, dismissible: true }) : ""}
2569
-
2570
- <!-- Filters -->
2571
- <div class="relative rounded-xl overflow-hidden mb-6">
2572
- <!-- Gradient Background -->
2573
- <div class="absolute inset-0 bg-gradient-to-r from-purple-500/10 via-pink-500/10 to-orange-500/10 dark:from-purple-400/20 dark:via-pink-400/20 dark:to-orange-400/20"></div>
2574
-
2575
- <div class="relative bg-white/80 dark:bg-zinc-900/80 backdrop-blur-xl shadow-sm ring-1 ring-zinc-950/5 dark:ring-white/10">
2576
- <div class="px-6 py-5">
2577
- <div class="flex items-center justify-between">
2578
- <div class="flex items-center space-x-4 flex-1">
2579
- <div>
2580
- <label for="published" class="block text-sm/6 font-medium text-zinc-950 dark:text-white">Status</label>
2581
- <div class="mt-2 grid grid-cols-1">
2582
- <select
2583
- name="published"
2584
- id="published"
2585
- hx-get="/admin/code-examples"
2586
- hx-trigger="change"
2587
- hx-target="#code-examples-list"
2588
- hx-include="[name='language'], [name='search']"
2589
- class="col-start-1 row-start-1 w-full appearance-none rounded-md bg-white/5 dark:bg-white/5 py-1.5 pl-3 pr-8 text-base text-zinc-950 dark:text-white outline outline-1 -outline-offset-1 outline-purple-500/30 dark:outline-purple-400/30 *:bg-white dark:*:bg-zinc-800 focus-visible:outline focus-visible:outline-2 focus-visible:-outline-offset-2 focus-visible:outline-purple-500 dark:focus-visible:outline-purple-400 sm:text-sm/6 min-w-48"
2590
- >
2591
- <option value="">All</option>
2592
- <option value="true">Published</option>
2593
- <option value="false">Draft</option>
2594
- </select>
2595
- <svg viewBox="0 0 16 16" fill="currentColor" data-slot="icon" aria-hidden="true" class="pointer-events-none col-start-1 row-start-1 mr-2 size-5 self-center justify-self-end text-purple-600 dark:text-purple-400 sm:size-4">
2596
- <path d="M4.22 6.22a.75.75 0 0 1 1.06 0L8 8.94l2.72-2.72a.75.75 0 1 1 1.06 1.06l-3.25 3.25a.75.75 0 0 1-1.06 0L4.22 7.28a.75.75 0 0 1 0-1.06Z" clip-rule="evenodd" fill-rule="evenodd" />
2597
- </svg>
2598
- </div>
2599
- </div>
2600
- <div>
2601
- <label for="language" class="block text-sm/6 font-medium text-zinc-950 dark:text-white">Language</label>
2602
- <div class="mt-2 grid grid-cols-1">
2603
- <select
2604
- name="language"
2605
- id="language"
2606
- hx-get="/admin/code-examples"
2607
- hx-trigger="change"
2608
- hx-target="#code-examples-list"
2609
- hx-include="[name='published'], [name='search']"
2610
- class="col-start-1 row-start-1 w-full appearance-none rounded-md bg-white/5 dark:bg-white/5 py-1.5 pl-3 pr-8 text-base text-zinc-950 dark:text-white outline outline-1 -outline-offset-1 outline-purple-500/30 dark:outline-purple-400/30 *:bg-white dark:*:bg-zinc-800 focus-visible:outline focus-visible:outline-2 focus-visible:-outline-offset-2 focus-visible:outline-purple-500 dark:focus-visible:outline-purple-400 sm:text-sm/6 min-w-48"
2611
- >
2612
- <option value="">All Languages</option>
2613
- <option value="javascript">JavaScript</option>
2614
- <option value="typescript">TypeScript</option>
2615
- <option value="python">Python</option>
2616
- <option value="go">Go</option>
2617
- <option value="rust">Rust</option>
2618
- <option value="java">Java</option>
2619
- <option value="php">PHP</option>
2620
- <option value="ruby">Ruby</option>
2621
- <option value="sql">SQL</option>
2622
- </select>
2623
- <svg viewBox="0 0 16 16" fill="currentColor" data-slot="icon" aria-hidden="true" class="pointer-events-none col-start-1 row-start-1 mr-2 size-5 self-center justify-self-end text-purple-600 dark:text-purple-400 sm:size-4">
2624
- <path d="M4.22 6.22a.75.75 0 0 1 1.06 0L8 8.94l2.72-2.72a.75.75 0 1 1 1.06 1.06l-3.25 3.25a.75.75 0 0 1-1.06 0L4.22 7.28a.75.75 0 0 1 0-1.06Z" clip-rule="evenodd" fill-rule="evenodd" />
2625
- </svg>
2626
- </div>
2627
- </div>
2628
- <div class="flex-1 max-w-md">
2629
- <label for="search" class="block text-sm font-medium text-zinc-950 dark:text-white mb-2">Search</label>
2630
- <div class="relative group">
2631
- <div class="absolute left-3.5 top-2.5 flex items-center justify-center w-5 h-5 rounded-full bg-gradient-to-br from-purple-400 to-pink-500 dark:from-purple-300 dark:to-pink-400 opacity-90 group-focus-within:opacity-100 transition-opacity">
2632
- <svg class="h-3 w-3 text-white" fill="none" stroke="currentColor" viewBox="0 0 24 24" stroke-width="2.5">
2633
- <path stroke-linecap="round" stroke-linejoin="round" d="M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z"/>
2634
- </svg>
2635
- </div>
2636
- <input
2637
- type="text"
2638
- name="search"
2639
- id="search"
2640
- placeholder="Search code examples..."
2641
- hx-get="/admin/code-examples"
2642
- hx-trigger="keyup changed delay:300ms"
2643
- hx-target="#code-examples-list"
2644
- hx-include="[name='published'], [name='language']"
2645
- class="w-full rounded-full bg-transparent px-11 py-2 text-sm text-zinc-950 dark:text-white placeholder-zinc-500 dark:placeholder-zinc-400 border-2 border-purple-200/50 dark:border-purple-700/50 focus:outline-none focus:border-purple-500 dark:focus:border-purple-400 focus:shadow-lg focus:shadow-purple-500/20 dark:focus:shadow-purple-400/20 transition-all duration-300"
2646
- />
2647
- </div>
2648
- </div>
2649
- </div>
2650
- <div class="flex items-center gap-x-3 ml-4">
2651
- <span class="text-sm/6 font-medium text-zinc-700 dark:text-zinc-300 px-3 py-1.5 rounded-full bg-white/60 dark:bg-zinc-800/60 backdrop-blur-sm">${totalCount} ${totalCount === 1 ? "item" : "items"}</span>
2652
- <button
2653
- onclick="location.reload()"
2654
- class="inline-flex items-center gap-x-1.5 px-3 py-1.5 bg-white/90 dark:bg-zinc-800/90 backdrop-blur-sm text-zinc-950 dark:text-white text-sm font-medium rounded-full ring-1 ring-inset ring-purple-200/50 dark:ring-purple-700/50 hover:bg-gradient-to-r hover:from-purple-50 hover:to-pink-50 dark:hover:from-purple-900/30 dark:hover:to-pink-900/30 hover:ring-purple-300 dark:hover:ring-purple-600 transition-all duration-200"
2655
- >
2656
- <svg class="h-4 w-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
2657
- <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 4v5h.582m15.356 2A8.001 8.001 0 004.582 9m0 0H9m11 11v-5h-.581m0 0a8.003 8.003 0 01-15.357-2m15.357 2H15"/>
2658
- </svg>
2659
- Refresh
2660
- </button>
2661
- </div>
2662
- </div>
2663
- </div>
2664
- </div>
2665
- </div>
2666
-
2667
- <!-- Code Examples List -->
2668
- <div id="code-examples-list">
2669
- ${codeExamples.length > 0 ? renderTable({
2670
- tableId: "code-examples-table",
2671
- rowClickable: true,
2672
- rowClickUrl: (row) => `/admin/code-examples/${row.id}`,
2673
- columns: [
2674
- { key: "title", label: "Title", sortable: true, sortType: "string" },
2675
- { key: "language", label: "Language", sortable: true, sortType: "string" },
2676
- { key: "description", label: "Description", sortable: false },
2677
- { key: "status", label: "Status", sortable: true, sortType: "boolean" },
2678
- { key: "sortOrder", label: "Order", sortable: true, sortType: "number" },
2679
- { key: "created_at", label: "Created", sortable: true, sortType: "date" }
2680
- ],
2681
- rows: codeExamples.map((example) => {
2682
- const truncatedDesc = example.description ? example.description.length > 80 ? example.description.substring(0, 80) + "..." : example.description : "No description";
2683
- const languageColors = {
2684
- javascript: "bg-yellow-100 dark:bg-yellow-500/10 text-yellow-700 dark:text-yellow-400 ring-yellow-600/20 dark:ring-yellow-500/20",
2685
- typescript: "bg-blue-100 dark:bg-blue-500/10 text-blue-700 dark:text-blue-400 ring-blue-600/20 dark:ring-blue-500/20",
2686
- python: "bg-green-100 dark:bg-green-500/10 text-green-700 dark:text-green-400 ring-green-600/20 dark:ring-green-500/20",
2687
- go: "bg-cyan-100 dark:bg-cyan-500/10 text-cyan-700 dark:text-cyan-400 ring-cyan-600/20 dark:ring-cyan-500/20",
2688
- rust: "bg-orange-100 dark:bg-orange-500/10 text-orange-700 dark:text-orange-400 ring-orange-600/20 dark:ring-orange-500/20",
2689
- java: "bg-red-100 dark:bg-red-500/10 text-red-700 dark:text-red-400 ring-red-600/20 dark:ring-red-500/20",
2690
- php: "bg-indigo-100 dark:bg-indigo-500/10 text-indigo-700 dark:text-indigo-400 ring-indigo-600/20 dark:ring-indigo-500/20",
2691
- ruby: "bg-pink-100 dark:bg-pink-500/10 text-pink-700 dark:text-pink-400 ring-pink-600/20 dark:ring-pink-500/20",
2692
- sql: "bg-purple-100 dark:bg-purple-500/10 text-purple-700 dark:text-purple-400 ring-purple-600/20 dark:ring-purple-500/20"
2693
- };
2694
- const langColor = languageColors[example.language.toLowerCase()] || "bg-zinc-100 dark:bg-zinc-500/10 text-zinc-700 dark:text-zinc-400 ring-zinc-600/20 dark:ring-zinc-500/20";
2695
- return {
2696
- id: example.id,
2697
- title: `<div class="font-medium text-zinc-950 dark:text-white">${example.title}</div>`,
2698
- language: `<span class="inline-flex items-center rounded-md px-2 py-1 text-xs font-medium ring-1 ring-inset ${langColor}">${example.language}</span>`,
2699
- description: `<div class="text-sm text-zinc-700 dark:text-zinc-300 max-w-md">${truncatedDesc}</div>`,
2700
- status: example.isPublished ? '<span class="inline-flex items-center rounded-md bg-green-50 dark:bg-green-500/10 px-2 py-1 text-xs font-medium text-green-700 dark:text-green-400 ring-1 ring-inset ring-green-600/20 dark:ring-green-500/20">Published</span>' : '<span class="inline-flex items-center rounded-md bg-zinc-50 dark:bg-zinc-500/10 px-2 py-1 text-xs font-medium text-zinc-600 dark:text-zinc-400 ring-1 ring-inset ring-zinc-500/20 dark:ring-zinc-500/20">Draft</span>',
2701
- sortOrder: example.sortOrder.toString(),
2702
- created_at: new Date(example.created_at * 1e3).toLocaleDateString()
2703
- };
2704
- }),
2705
- selectable: true
2706
- }) : `
2707
- <div class="text-center py-12 bg-white dark:bg-zinc-900 rounded-lg shadow-sm ring-1 ring-zinc-950/5 dark:ring-white/10">
2708
- <svg class="mx-auto h-12 w-12 text-zinc-400 dark:text-zinc-600" fill="none" viewBox="0 0 24 24" stroke="currentColor">
2709
- <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 20l4-16m4 4l4 4-4 4M6 16l-4-4 4-4" />
2710
- </svg>
2711
- <h3 class="mt-2 text-sm font-semibold text-zinc-950 dark:text-white">No code examples</h3>
2712
- <p class="mt-1 text-sm text-zinc-500 dark:text-zinc-400">Get started by creating a new code example.</p>
2713
- <div class="mt-6">
2714
- <a href="/admin/code-examples/new" class="inline-flex items-center rounded-md bg-zinc-950 dark:bg-white px-3 py-2 text-sm font-semibold text-white dark:text-zinc-950 shadow-sm hover:bg-zinc-800 dark:hover:bg-zinc-100 transition-colors">
2715
- <svg class="-ml-0.5 mr-1.5 h-5 w-5" viewBox="0 0 20 20" fill="currentColor">
2716
- <path d="M10.75 4.75a.75.75 0 00-1.5 0v4.5h-4.5a.75.75 0 000 1.5h4.5v4.5a.75.75 0 001.5 0v-4.5h4.5a.75.75 0 000-1.5h-4.5v-4.5z" />
2717
- </svg>
2718
- New Code Example
2719
- </a>
2720
- </div>
2721
- </div>
2722
- `}
2723
- </div>
2724
-
2725
- ${totalPages > 1 ? renderPagination({
2726
- currentPage,
2727
- totalPages,
2728
- totalItems: totalCount,
2729
- itemsPerPage: 20,
2730
- startItem: (currentPage - 1) * 20 + 1,
2731
- endItem: Math.min(currentPage * 20, totalCount),
2732
- baseUrl: "/admin/code-examples"
2733
- }) : ""}
2734
- </div>
2735
- `;
2736
- const layoutData = {
2737
- title: "Code Examples",
2738
- pageTitle: "Code Examples",
2739
- currentPath: "/admin/code-examples",
2740
- user: data.user,
2741
- content: pageContent
2742
- };
2743
- return renderAdminLayoutCatalyst(layoutData);
2744
- }
2745
-
2746
1503
  // src/templates/form.template.ts
2747
1504
  function renderForm(data) {
2748
1505
  return `
@@ -2932,6 +1689,6 @@ function renderFormField(field) {
2932
1689
  `;
2933
1690
  }
2934
1691
 
2935
- export { adminLayoutV2, getConfirmationDialogScript, renderAdminLayout, renderAlert, renderCheckboxPage, renderCodeExamplesList, renderConfirmationDialog, renderDesignPage, renderForm, renderFormField, renderPagination, renderTable, renderTestimonialsList };
2936
- //# sourceMappingURL=chunk-XWIA3HVX.js.map
2937
- //# sourceMappingURL=chunk-XWIA3HVX.js.map
1692
+ export { adminLayoutV2, getConfirmationDialogScript, renderAdminLayout, renderAlert, renderCheckboxPage, renderConfirmationDialog, renderForm, renderFormField, renderPagination, renderTable };
1693
+ //# sourceMappingURL=chunk-HDWE5FRJ.js.map
1694
+ //# sourceMappingURL=chunk-HDWE5FRJ.js.map