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

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