@donotdev/cli 0.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (281) hide show
  1. package/LICENSE.md +48 -0
  2. package/README.md +291 -0
  3. package/dependencies-matrix.json +694 -0
  4. package/dist/bin/commands/build.d.ts +11 -0
  5. package/dist/bin/commands/build.d.ts.map +1 -0
  6. package/dist/bin/commands/build.js +8162 -0
  7. package/dist/bin/commands/build.js.map +1 -0
  8. package/dist/bin/commands/bump.d.ts +11 -0
  9. package/dist/bin/commands/bump.d.ts.map +1 -0
  10. package/dist/bin/commands/bump.js +8004 -0
  11. package/dist/bin/commands/bump.js.map +1 -0
  12. package/dist/bin/commands/cacheout.d.ts +11 -0
  13. package/dist/bin/commands/cacheout.d.ts.map +1 -0
  14. package/dist/bin/commands/cacheout.js +7630 -0
  15. package/dist/bin/commands/cacheout.js.map +1 -0
  16. package/dist/bin/commands/create-app.d.ts +11 -0
  17. package/dist/bin/commands/create-app.d.ts.map +1 -0
  18. package/dist/bin/commands/create-app.js +9032 -0
  19. package/dist/bin/commands/create-app.js.map +1 -0
  20. package/dist/bin/commands/create-project.d.ts +11 -0
  21. package/dist/bin/commands/create-project.d.ts.map +1 -0
  22. package/dist/bin/commands/create-project.js +9643 -0
  23. package/dist/bin/commands/create-project.js.map +1 -0
  24. package/dist/bin/commands/deploy.d.ts +11 -0
  25. package/dist/bin/commands/deploy.d.ts.map +1 -0
  26. package/dist/bin/commands/deploy.js +9007 -0
  27. package/dist/bin/commands/deploy.js.map +1 -0
  28. package/dist/bin/commands/dev.d.ts +11 -0
  29. package/dist/bin/commands/dev.d.ts.map +1 -0
  30. package/dist/bin/commands/dev.js +7892 -0
  31. package/dist/bin/commands/dev.js.map +1 -0
  32. package/dist/bin/commands/emu.d.ts +11 -0
  33. package/dist/bin/commands/emu.d.ts.map +1 -0
  34. package/dist/bin/commands/emu.js +8302 -0
  35. package/dist/bin/commands/emu.js.map +1 -0
  36. package/dist/bin/commands/format.d.ts +11 -0
  37. package/dist/bin/commands/format.d.ts.map +1 -0
  38. package/dist/bin/commands/format.js +8009 -0
  39. package/dist/bin/commands/format.js.map +1 -0
  40. package/dist/bin/commands/lint.d.ts +11 -0
  41. package/dist/bin/commands/lint.d.ts.map +1 -0
  42. package/dist/bin/commands/lint.js +7481 -0
  43. package/dist/bin/commands/lint.js.map +1 -0
  44. package/dist/bin/commands/preview.d.ts +11 -0
  45. package/dist/bin/commands/preview.d.ts.map +1 -0
  46. package/dist/bin/commands/preview.js +7909 -0
  47. package/dist/bin/commands/preview.js.map +1 -0
  48. package/dist/bin/commands/sync-secrets.d.ts +11 -0
  49. package/dist/bin/commands/sync-secrets.d.ts.map +1 -0
  50. package/dist/bin/commands/sync-secrets.js +8227 -0
  51. package/dist/bin/commands/sync-secrets.js.map +1 -0
  52. package/dist/bin/dndev.js +222 -0
  53. package/dist/bin/donotdev.js +222 -0
  54. package/dist/index.d.ts +8 -0
  55. package/dist/index.d.ts.map +1 -0
  56. package/dist/index.js +12820 -0
  57. package/dist/index.js.map +1 -0
  58. package/package.json +71 -0
  59. package/templates/app-demo/index.html.example +20 -0
  60. package/templates/app-demo/public/favicon.ico.example +0 -0
  61. package/templates/app-demo/public/fonts/Roboto-400-cyrillic-ext.woff2.example +0 -0
  62. package/templates/app-demo/public/fonts/Roboto-400-cyrillic.woff2.example +0 -0
  63. package/templates/app-demo/public/fonts/Roboto-400-greek-ext.woff2.example +0 -0
  64. package/templates/app-demo/public/fonts/Roboto-400-greek.woff2.example +0 -0
  65. package/templates/app-demo/public/fonts/Roboto-400-latin-ext.woff2.example +0 -0
  66. package/templates/app-demo/public/fonts/Roboto-400-latin.woff2.example +0 -0
  67. package/templates/app-demo/public/fonts/Roboto-400-vietnamese.woff2.example +0 -0
  68. package/templates/app-demo/public/fonts/Roboto-700-cyrillic-ext.woff2.example +0 -0
  69. package/templates/app-demo/public/fonts/Roboto-700-cyrillic.woff2.example +0 -0
  70. package/templates/app-demo/public/fonts/Roboto-700-greek-ext.woff2.example +0 -0
  71. package/templates/app-demo/public/fonts/Roboto-700-greek.woff2.example +0 -0
  72. package/templates/app-demo/public/fonts/Roboto-700-latin-ext.woff2.example +0 -0
  73. package/templates/app-demo/public/fonts/Roboto-700-latin.woff2.example +0 -0
  74. package/templates/app-demo/public/fonts/Roboto-700-vietnamese.woff2.example +0 -0
  75. package/templates/app-demo/public/fonts/fonts.css.example +144 -0
  76. package/templates/app-demo/public/logo.png.example +0 -0
  77. package/templates/app-demo/public/logo.svg.example +1 -0
  78. package/templates/app-demo/public/manifest.json.example +10 -0
  79. package/templates/app-demo/src/App.tsx.example +17 -0
  80. package/templates/app-demo/src/Routes.tsx.example +20 -0
  81. package/templates/app-demo/src/components/ThemeToggle.tsx.example +48 -0
  82. package/templates/app-demo/src/globals.css.example +4 -0
  83. package/templates/app-demo/src/main.tsx.example +27 -0
  84. package/templates/app-demo/src/pages/DetailPage.tsx.example +103 -0
  85. package/templates/app-demo/src/pages/FullPage.tsx.example +142 -0
  86. package/templates/app-demo/src/pages/HomePage.tsx.example +79 -0
  87. package/templates/app-demo/src/pages/components/ComponentRenderer.tsx.example +511 -0
  88. package/templates/app-demo/src/pages/components/ComponentsData.tsx.example +152 -0
  89. package/templates/app-demo/src/pages/components/DemoLayout.tsx.example +266 -0
  90. package/templates/app-demo/src/pages/components/LayoutRoute.tsx.example +20 -0
  91. package/templates/app-demo/src/pages/components/componentConfig.ts.example +921 -0
  92. package/templates/app-demo/src/themes.css.example +179 -0
  93. package/templates/app-demo/tsconfig.json.example +9 -0
  94. package/templates/app-demo/vite.config.ts.example +53 -0
  95. package/templates/app-next/.env.example +92 -0
  96. package/templates/app-next/next.config.ts.example +8 -0
  97. package/templates/app-next/postcss.config.js.example +58 -0
  98. package/templates/app-next/service-account-key.json.example +2 -0
  99. package/templates/app-next/src/app/ClientLayout.tsx.example +39 -0
  100. package/templates/app-next/src/app/layout.tsx.example +52 -0
  101. package/templates/app-next/src/app/not-found.tsx.example +21 -0
  102. package/templates/app-next/src/config/app.ts.example +75 -0
  103. package/templates/app-next/src/config/legal.ts.example +170 -0
  104. package/templates/app-next/src/globals.css.example +15 -0
  105. package/templates/app-next/src/locales/dndev_en.json.example +516 -0
  106. package/templates/app-next/src/pages/HomePage.tsx.example +20 -0
  107. package/templates/app-next/src/pages/legal/LegalNoticePage.tsx.example +75 -0
  108. package/templates/app-next/src/pages/legal/PrivacyPage.tsx.example +69 -0
  109. package/templates/app-next/src/pages/legal/TermsPage.tsx.example +71 -0
  110. package/templates/app-next/src/themes.css.example +179 -0
  111. package/templates/app-next/tsconfig.json.example +11 -0
  112. package/templates/app-payload/.env.example +28 -0
  113. package/templates/app-payload/README.md.example +233 -0
  114. package/templates/app-payload/collections/Company.ts.example +125 -0
  115. package/templates/app-payload/collections/Hero.ts.example +62 -0
  116. package/templates/app-payload/collections/Media.ts.example +41 -0
  117. package/templates/app-payload/collections/Products.ts.example +115 -0
  118. package/templates/app-payload/collections/Services.ts.example +104 -0
  119. package/templates/app-payload/collections/Testimonials.ts.example +92 -0
  120. package/templates/app-payload/collections/Users.ts.example +35 -0
  121. package/templates/app-payload/src/server.ts.example +79 -0
  122. package/templates/app-payload/tsconfig.json.example +24 -0
  123. package/templates/app-vite/.env.example +77 -0
  124. package/templates/app-vite/index.html.example +127 -0
  125. package/templates/app-vite/service-account-key.json.example +2 -0
  126. package/templates/app-vite/src/App.tsx.example +39 -0
  127. package/templates/app-vite/src/Routes.tsx.example +16 -0
  128. package/templates/app-vite/src/config/app.ts.example +75 -0
  129. package/templates/app-vite/src/config/legal.ts.example +170 -0
  130. package/templates/app-vite/src/globals.css.example +11 -0
  131. package/templates/app-vite/src/locales/dndev_en.json.example +516 -0
  132. package/templates/app-vite/src/main.tsx.example +21 -0
  133. package/templates/app-vite/src/pages/HomePage.tsx.example +22 -0
  134. package/templates/app-vite/src/pages/NotFoundPage.tsx.example +33 -0
  135. package/templates/app-vite/src/pages/legal/LegalNoticePage.tsx.example +75 -0
  136. package/templates/app-vite/src/pages/legal/PrivacyPage.tsx.example +69 -0
  137. package/templates/app-vite/src/pages/legal/TermsPage.tsx.example +71 -0
  138. package/templates/app-vite/src/pages/locales/README.md.example +1 -0
  139. package/templates/app-vite/src/pages/locales/example_en.json.example +5 -0
  140. package/templates/app-vite/src/themes.css.example +179 -0
  141. package/templates/app-vite/tsconfig.json.example +9 -0
  142. package/templates/app-vite/vite.config.ts.example +9 -0
  143. package/templates/functions-firebase/README.md.example +129 -0
  144. package/templates/functions-firebase/build.mjs.example +52 -0
  145. package/templates/functions-firebase/functions-firebase/.env.example.example +45 -0
  146. package/templates/functions-firebase/functions-firebase/README.md.example +123 -0
  147. package/templates/functions-firebase/functions-firebase/build.mjs.example +52 -0
  148. package/templates/functions-firebase/functions-firebase/src/auth/getCustomClaims.ts.example +19 -0
  149. package/templates/functions-firebase/functions-firebase/src/auth/getUserAuthStatus.ts.example +21 -0
  150. package/templates/functions-firebase/functions-firebase/src/auth/index.ts.example +11 -0
  151. package/templates/functions-firebase/functions-firebase/src/auth/removeCustomClaims.ts.example +21 -0
  152. package/templates/functions-firebase/functions-firebase/src/auth/setCustomClaims.ts.example +21 -0
  153. package/templates/functions-firebase/functions-firebase/src/billing/handleStripeWebhook.ts.example +24 -0
  154. package/templates/functions-firebase/functions-firebase/src/billing/index.ts.example +10 -0
  155. package/templates/functions-firebase/functions-firebase/src/billing/processPaymentSuccess.ts.example +14 -0
  156. package/templates/functions-firebase/functions-firebase/src/billing/refreshSubscriptionStatus.ts.example +14 -0
  157. package/templates/functions-firebase/functions-firebase/src/crud/createEntity.ts.example +19 -0
  158. package/templates/functions-firebase/functions-firebase/src/crud/deleteEntity.ts.example +14 -0
  159. package/templates/functions-firebase/functions-firebase/src/crud/getEntity.ts.example +14 -0
  160. package/templates/functions-firebase/functions-firebase/src/crud/index.ts.example +12 -0
  161. package/templates/functions-firebase/functions-firebase/src/crud/listEntities.ts.example +14 -0
  162. package/templates/functions-firebase/functions-firebase/src/crud/updateEntity.ts.example +14 -0
  163. package/templates/functions-firebase/functions-firebase/src/index.ts.example +45 -0
  164. package/templates/functions-firebase/functions-firebase/src/oauth/checkGitHubAccess.ts.example +14 -0
  165. package/templates/functions-firebase/functions-firebase/src/oauth/disconnect.ts.example +14 -0
  166. package/templates/functions-firebase/functions-firebase/src/oauth/exchangeToken.ts.example +14 -0
  167. package/templates/functions-firebase/functions-firebase/src/oauth/getConnections.ts.example +14 -0
  168. package/templates/functions-firebase/functions-firebase/src/oauth/grantGitHubAccess.ts.example +14 -0
  169. package/templates/functions-firebase/functions-firebase/src/oauth/index.ts.example +17 -0
  170. package/templates/functions-firebase/functions-firebase/src/oauth/refreshToken.ts.example +14 -0
  171. package/templates/functions-firebase/functions-firebase/src/oauth/revokeGitHubAccess.ts.example +14 -0
  172. package/templates/functions-firebase/functions-firebase/tsconfig.json.example +21 -0
  173. package/templates/functions-firebase/functions.yaml.example +14 -0
  174. package/templates/functions-firebase/src/auth/getCustomClaims.ts.example +19 -0
  175. package/templates/functions-firebase/src/auth/getUserAuthStatus.ts.example +21 -0
  176. package/templates/functions-firebase/src/auth/index.ts.example +11 -0
  177. package/templates/functions-firebase/src/auth/removeCustomClaims.ts.example +21 -0
  178. package/templates/functions-firebase/src/auth/setCustomClaims.ts.example +21 -0
  179. package/templates/functions-firebase/src/billing/handleStripeWebhook.ts.example +24 -0
  180. package/templates/functions-firebase/src/billing/index.ts.example +10 -0
  181. package/templates/functions-firebase/src/billing/processPaymentSuccess.ts.example +14 -0
  182. package/templates/functions-firebase/src/billing/refreshSubscriptionStatus.ts.example +14 -0
  183. package/templates/functions-firebase/src/crud/createEntity.ts.example +19 -0
  184. package/templates/functions-firebase/src/crud/deleteEntity.ts.example +14 -0
  185. package/templates/functions-firebase/src/crud/getEntity.ts.example +14 -0
  186. package/templates/functions-firebase/src/crud/index.ts.example +12 -0
  187. package/templates/functions-firebase/src/crud/listEntities.ts.example +14 -0
  188. package/templates/functions-firebase/src/crud/updateEntity.ts.example +14 -0
  189. package/templates/functions-firebase/src/index.ts.example +45 -0
  190. package/templates/functions-firebase/src/oauth/checkGitHubAccess.ts.example +14 -0
  191. package/templates/functions-firebase/src/oauth/disconnect.ts.example +14 -0
  192. package/templates/functions-firebase/src/oauth/exchangeToken.ts.example +14 -0
  193. package/templates/functions-firebase/src/oauth/getConnections.ts.example +14 -0
  194. package/templates/functions-firebase/src/oauth/grantGitHubAccess.ts.example +14 -0
  195. package/templates/functions-firebase/src/oauth/index.ts.example +17 -0
  196. package/templates/functions-firebase/src/oauth/refreshToken.ts.example +14 -0
  197. package/templates/functions-firebase/src/oauth/revokeGitHubAccess.ts.example +14 -0
  198. package/templates/functions-firebase/tsconfig.json.example +24 -0
  199. package/templates/functions-vercel/README.md.example +116 -0
  200. package/templates/functions-vercel/build.mjs.example +52 -0
  201. package/templates/functions-vercel/functions-vercel/.env.example.example +37 -0
  202. package/templates/functions-vercel/functions-vercel/README.md.example +116 -0
  203. package/templates/functions-vercel/functions-vercel/build.mjs.example +52 -0
  204. package/templates/functions-vercel/functions-vercel/src/api/auth/getCustomClaims.ts.example +20 -0
  205. package/templates/functions-vercel/functions-vercel/src/api/auth/getUserAuthStatus.ts.example +20 -0
  206. package/templates/functions-vercel/functions-vercel/src/api/auth/removeCustomClaims.ts.example +20 -0
  207. package/templates/functions-vercel/functions-vercel/src/api/auth/setCustomClaims.ts.example +20 -0
  208. package/templates/functions-vercel/functions-vercel/src/api/billing/handleStripeWebhook.ts.example +20 -0
  209. package/templates/functions-vercel/functions-vercel/src/api/billing/processPaymentSuccess.ts.example +20 -0
  210. package/templates/functions-vercel/functions-vercel/src/api/billing/refreshSubscriptionStatus.ts.example +20 -0
  211. package/templates/functions-vercel/functions-vercel/src/api/crud/createEntity.ts.example +20 -0
  212. package/templates/functions-vercel/functions-vercel/src/api/crud/deleteEntity.ts.example +20 -0
  213. package/templates/functions-vercel/functions-vercel/src/api/crud/getEntity.ts.example +20 -0
  214. package/templates/functions-vercel/functions-vercel/src/api/crud/listEntities.ts.example +20 -0
  215. package/templates/functions-vercel/functions-vercel/src/api/crud/updateEntity.ts.example +20 -0
  216. package/templates/functions-vercel/functions-vercel/src/api/oauth/checkGitHubAccess.ts.example +20 -0
  217. package/templates/functions-vercel/functions-vercel/src/api/oauth/disconnect.ts.example +20 -0
  218. package/templates/functions-vercel/functions-vercel/src/api/oauth/exchangeToken.ts.example +20 -0
  219. package/templates/functions-vercel/functions-vercel/src/api/oauth/getConnections.ts.example +20 -0
  220. package/templates/functions-vercel/functions-vercel/src/api/oauth/grantGitHubAccess.ts.example +20 -0
  221. package/templates/functions-vercel/functions-vercel/src/api/oauth/refreshToken.ts.example +20 -0
  222. package/templates/functions-vercel/functions-vercel/src/api/oauth/revokeGitHubAccess.ts.example +20 -0
  223. package/templates/functions-vercel/functions-vercel/tsconfig.json.example +21 -0
  224. package/templates/functions-vercel/functions-vercel/vercel.json.example +14 -0
  225. package/templates/functions-vercel/src/api/auth/getCustomClaims.ts.example +20 -0
  226. package/templates/functions-vercel/src/api/auth/getUserAuthStatus.ts.example +20 -0
  227. package/templates/functions-vercel/src/api/auth/removeCustomClaims.ts.example +20 -0
  228. package/templates/functions-vercel/src/api/auth/setCustomClaims.ts.example +20 -0
  229. package/templates/functions-vercel/src/api/billing/handleStripeWebhook.ts.example +20 -0
  230. package/templates/functions-vercel/src/api/billing/processPaymentSuccess.ts.example +20 -0
  231. package/templates/functions-vercel/src/api/billing/refreshSubscriptionStatus.ts.example +20 -0
  232. package/templates/functions-vercel/src/api/crud/createEntity.ts.example +20 -0
  233. package/templates/functions-vercel/src/api/crud/deleteEntity.ts.example +20 -0
  234. package/templates/functions-vercel/src/api/crud/getEntity.ts.example +20 -0
  235. package/templates/functions-vercel/src/api/crud/listEntities.ts.example +20 -0
  236. package/templates/functions-vercel/src/api/crud/updateEntity.ts.example +20 -0
  237. package/templates/functions-vercel/src/api/oauth/checkGitHubAccess.ts.example +20 -0
  238. package/templates/functions-vercel/src/api/oauth/disconnect.ts.example +20 -0
  239. package/templates/functions-vercel/src/api/oauth/exchangeToken.ts.example +20 -0
  240. package/templates/functions-vercel/src/api/oauth/getConnections.ts.example +20 -0
  241. package/templates/functions-vercel/src/api/oauth/grantGitHubAccess.ts.example +20 -0
  242. package/templates/functions-vercel/src/api/oauth/refreshToken.ts.example +20 -0
  243. package/templates/functions-vercel/src/api/oauth/revokeGitHubAccess.ts.example +20 -0
  244. package/templates/functions-vercel/tsconfig.json.example +24 -0
  245. package/templates/functions-vercel/vercel.json.example +14 -0
  246. package/templates/github/github/workflows/firebase-deploy.yml.example +79 -0
  247. package/templates/github/workflows/firebase-deploy.yml.example +79 -0
  248. package/templates/root-consumer/.env.example +19 -0
  249. package/templates/root-consumer/.gitignore.example +82 -0
  250. package/templates/root-consumer/.prettierrc.cjs.example +12 -0
  251. package/templates/root-consumer/CLAUDE.md.example +73 -0
  252. package/templates/root-consumer/README.md.example +295 -0
  253. package/templates/root-consumer/bunfig.toml.example +68 -0
  254. package/templates/root-consumer/eslint.config.js.example +336 -0
  255. package/templates/root-consumer/firebase.json.example +348 -0
  256. package/templates/root-consumer/guides/AGENT_START_HERE.md.example +98 -0
  257. package/templates/root-consumer/guides/APP_CHECK_SETUP.md.example +111 -0
  258. package/templates/root-consumer/guides/AUTH_SETUP.md.example +92 -0
  259. package/templates/root-consumer/guides/BILLING_SETUP.md.example +120 -0
  260. package/templates/root-consumer/guides/CLI.md.example +293 -0
  261. package/templates/root-consumer/guides/COMPONENTS.md.example +875 -0
  262. package/templates/root-consumer/guides/CONFIG_SETUP.md.example +132 -0
  263. package/templates/root-consumer/guides/EMULATOR_SETUP.md.example +48 -0
  264. package/templates/root-consumer/guides/FEATURES.md.example +286 -0
  265. package/templates/root-consumer/guides/FRAMEWORK_OVERVIEW.md.example +97 -0
  266. package/templates/root-consumer/guides/FUNCTIONS.md.example +177 -0
  267. package/templates/root-consumer/guides/GETTING_STARTED.md.example +451 -0
  268. package/templates/root-consumer/guides/HOW_TO_USE.md.example +296 -0
  269. package/templates/root-consumer/guides/I18N_SETUP.md.example +204 -0
  270. package/templates/root-consumer/guides/IMPORT_PATTERNS.md.example +79 -0
  271. package/templates/root-consumer/guides/INDEX.md.example +50 -0
  272. package/templates/root-consumer/guides/INSTALLATION.md.example +296 -0
  273. package/templates/root-consumer/guides/LAYOUTS.md.example +310 -0
  274. package/templates/root-consumer/guides/PAGES_SETUP.md.example +123 -0
  275. package/templates/root-consumer/guides/STYLING.md.example +273 -0
  276. package/templates/root-consumer/guides/THEMING_SETUP.md.example +119 -0
  277. package/templates/root-consumer/guides/VERSION_CONTROL.md.example +181 -0
  278. package/templates/root-consumer/tsconfig.functions.json.example +15 -0
  279. package/templates/root-consumer/tsconfig.json.example +18 -0
  280. package/templates/root-consumer/turbo.json.example +46 -0
  281. package/templates/root-consumer/vercel.json.example +124 -0
@@ -0,0 +1,152 @@
1
+ // apps/demo/src/pages/components/ComponentsData.tsx
2
+ // Single source of truth for example prop values
3
+
4
+ import { Rocket, Check, X, AlertCircle } from 'lucide-react';
5
+ import { Button, Collapsible, Text, Badge } from '@donotdev/components';
6
+
7
+ export const PROP_VALUES = {
8
+ title: 'Title',
9
+ subtitle: 'Subtitle',
10
+ description: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.',
11
+ content: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.',
12
+ shortLabel: 'Lorem ipsum short',
13
+ collapsibleContent: (
14
+ <div className="dndev-p-md dndev-surface dndev-mt-sm">
15
+ <Text variant="muted" className="dndev-mb-sm">Advanced Configuration Details:</Text>
16
+ <Text>• Cache policy: 3600s</Text>
17
+ <Text>• Retries: 3</Text>
18
+ <Text>• Timeout: 5000ms</Text>
19
+ </div>
20
+ ),
21
+ label: 'Label',
22
+ placeholder: 'Placeholder',
23
+ tooltip: 'Tooltip',
24
+ icon: Rocket,
25
+ trigger: 'Trigger: Open component',
26
+ button: 'Button',
27
+ confirmLabel: 'Confirm',
28
+ cancelLabel: 'Cancel',
29
+ primaryAction: <Button icon={Rocket}>Primary</Button>,
30
+ secondaryAction: <Button variant="outline" icon={Rocket}>Secondary</Button>,
31
+ items: [
32
+ { label: 'Item 1', value: '1', content: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.' },
33
+ { label: 'Item 2', value: '2', content: 'Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit.' },
34
+ { label: 'Item 3', value: '3', content: 'Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Sed ut perspiciatis unde omnis iste natus error.' },
35
+ ],
36
+ accordionItems: [
37
+ { value: 'item-1', trigger: 'Trigger: Accordion Item 1', content: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.' },
38
+ { value: 'item-2', trigger: 'Trigger: Accordion Item 2', content: 'Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.' },
39
+ { value: 'item-3', trigger: 'Trigger: Accordion Item 3', content: 'Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo.' },
40
+ ],
41
+ tabsItems: [
42
+ { value: 'tab1', label: 'Tab 1', content: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.' },
43
+ { value: 'tab2', label: 'Tab 2', content: 'Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo.' },
44
+ ],
45
+ commandGroups: [
46
+ {
47
+ heading: 'Navigation',
48
+ items: [
49
+ { label: 'Home', description: 'Go to home', onSelect: () => {} },
50
+ { label: 'Components', description: 'Open components page', onSelect: () => {} },
51
+ { label: 'Settings', description: 'Open settings', onSelect: () => {} },
52
+ ],
53
+ },
54
+ ],
55
+ listItems: [
56
+ { icon: <Check className="dndev-size-md" />, content: 'Feature enabled with icon support' },
57
+ { icon: <Check className="dndev-size-md" />, content: <Text>Custom ReactNode content with <Badge>Badge</Badge></Text> },
58
+ { icon: <AlertCircle className="dndev-size-md" />, content: 'Warning item with different icon' },
59
+ { content: 'Simple text item without icon' },
60
+ ],
61
+ navigationItems: [
62
+ { label: 'Home', path: '#' },
63
+ { label: 'Products', path: '#' },
64
+ { label: 'Docs', path: '#' },
65
+ ],
66
+ descriptionListItems: [
67
+ { label: 'Status', value: <Badge variant="success">Active</Badge> },
68
+ { label: 'Plan', value: <Badge variant="primary">Pro</Badge> },
69
+ { label: 'Email', value: 'user@example.com' },
70
+ { label: 'Last Login', value: <Text variant="muted">2 hours ago</Text> },
71
+ ],
72
+ demoItems: ['Alpha', 'Bravo', 'Charlie', 'Delta', 'Echo'],
73
+ selectOptions: [
74
+ { value: 'option1', label: 'Option 1' },
75
+ { value: 'option2', label: 'Option 2' },
76
+ { value: 'option3', label: 'Option 3' },
77
+ ],
78
+ comboboxOptions: [
79
+ { value: 'tenant1', label: 'Tenant Alpha', description: 'Primary tenant account' },
80
+ { value: 'tenant2', label: 'Tenant Beta', description: 'Secondary tenant account' },
81
+ { value: 'tenant3', label: 'Tenant Gamma', description: 'Test tenant account' },
82
+ { value: 'owner1', label: 'John Smith', description: 'Owner - Marketing' },
83
+ { value: 'owner2', label: 'Jane Doe', description: 'Owner - Engineering' },
84
+ { value: 'owner3', label: 'Bob Johnson', description: 'Owner - Sales' },
85
+ ],
86
+ radioGroupItems: [
87
+ { value: 'option1', label: 'Option 1' },
88
+ { value: 'option2', label: 'Option 2' },
89
+ { value: 'option3', label: 'Option 3' },
90
+ ],
91
+ toggleGroupItems: [
92
+ { value: 'left', label: 'Left' },
93
+ { value: 'center', label: 'Center' },
94
+ { value: 'right', label: 'Right' },
95
+ ],
96
+ avatarSrc: '/logo.png',
97
+ avatarFallback: 'DN',
98
+ footer: (
99
+ <div className="dndev-command-footer">
100
+ <div className="dndev-command-footer-shortcuts">
101
+ <div className="dndev-command-footer-shortcut">
102
+ <kbd className="dndev-command-footer-key">↑</kbd>
103
+ <kbd className="dndev-command-footer-key">↓</kbd>
104
+ <span>Navigate</span>
105
+ </div>
106
+ <div className="dndev-command-footer-shortcut">
107
+ <kbd className="dndev-command-footer-key">↵</kbd>
108
+ <span>Select</span>
109
+ </div>
110
+ <div className="dndev-command-footer-shortcut">
111
+ <kbd className="dndev-command-footer-key">Esc</kbd>
112
+ <span>Close</span>
113
+ </div>
114
+ </div>
115
+ </div>
116
+ ),
117
+ };
118
+
119
+ export type CSSFamily = 'surface' | 'floating' | 'interactive' | 'layout' | 'input' | 'other';
120
+
121
+ export type PropType =
122
+ | 'title'
123
+ | 'subtitle'
124
+ | 'description'
125
+ | 'content'
126
+ | 'collapsibleContent'
127
+ | 'label'
128
+ | 'placeholder'
129
+ | 'tooltip'
130
+ | 'icon'
131
+ | 'trigger'
132
+ | 'button'
133
+ | 'confirmLabel'
134
+ | 'cancelLabel'
135
+ | 'primaryAction'
136
+ | 'secondaryAction'
137
+ | 'items'
138
+ | 'accordionItems'
139
+ | 'tabsItems'
140
+ | 'commandGroups'
141
+ | 'listItems'
142
+ | 'navigationItems'
143
+ | 'descriptionListItems'
144
+ | 'demoItems'
145
+ | 'selectOptions'
146
+ | 'comboboxOptions'
147
+ | 'radioGroupItems'
148
+ | 'toggleGroupItems'
149
+ | 'footer'
150
+ | 'avatarSrc'
151
+ | 'avatarFallback';
152
+
@@ -0,0 +1,266 @@
1
+ // apps/demo/src/pages/components/DemoLayout.tsx
2
+
3
+ import { useState, useEffect } from 'react';
4
+ import type { ChangeEvent } from 'react';
5
+ import { useLocation, useNavigate, Outlet } from 'react-router-dom';
6
+ import { ArrowLeft, ExternalLink, Menu } from 'lucide-react';
7
+
8
+ import {
9
+ Button,
10
+ Input,
11
+ Stack,
12
+ Tabs,
13
+ Text,
14
+ Sheet,
15
+ Grid,
16
+ GridArea,
17
+ } from '@donotdev/components';
18
+ import type { TextProps } from '@donotdev/components';
19
+
20
+ import { getCSSFamilies } from './componentConfig';
21
+ import type { CSSFamily } from './ComponentsData';
22
+ import { ThemeToggle } from '../../components/ThemeToggle';
23
+
24
+ function useMediaQuery(query: string) {
25
+ const [matches, setMatches] = useState(false);
26
+ useEffect(() => {
27
+ const media = window.matchMedia(query);
28
+ if (media.matches !== matches) setMatches(media.matches);
29
+ const listener = () => setMatches(media.matches);
30
+ media.addEventListener('change', listener);
31
+ return () => media.removeEventListener('change', listener);
32
+ }, [matches, query]);
33
+ return matches;
34
+ }
35
+
36
+ interface DemoLayoutProps {
37
+ selectedTab: CSSFamily | 'all';
38
+ onTabChange: (tab: CSSFamily | 'all') => void;
39
+ searchQuery: string;
40
+ onSearchChange: (query: string) => void;
41
+ }
42
+
43
+ export function DemoLayout({
44
+ selectedTab,
45
+ onTabChange,
46
+ searchQuery,
47
+ onSearchChange,
48
+ }: DemoLayoutProps) {
49
+ const [isMobileMenuOpen, setIsMobileMenuOpen] = useState(false);
50
+ const location = useLocation();
51
+ const navigate = useNavigate();
52
+ const isDesktop = useMediaQuery('(min-width: 1024px)');
53
+
54
+ const handleBack = () => {
55
+ if (location.pathname === '/full') {
56
+ navigate('/');
57
+ } else if (location.pathname.startsWith('/component/')) {
58
+ navigate('/');
59
+ } else if (selectedTab !== 'all') {
60
+ onTabChange('all');
61
+ }
62
+ };
63
+
64
+ const showBackButton =
65
+ location.pathname === '/full' ||
66
+ location.pathname.startsWith('/component/') ||
67
+ selectedTab !== 'all';
68
+
69
+ const SidebarContent = (
70
+ <Stack gap="large" className="dndev-h-full">
71
+ <Stack gap="tight">
72
+ <Text as="h1">
73
+ DoNotDev
74
+ </Text>
75
+ <Text variant="muted">Components Showcase</Text>
76
+ </Stack>
77
+
78
+ <Stack gap="large" className="dndev-flex-1 dndev-min-h-0 dndev-overflow-y-auto">
79
+ <Input
80
+ placeholder="Filter components..."
81
+ value={searchQuery}
82
+ onChange={(e: ChangeEvent<HTMLInputElement>) => onSearchChange(e.target.value)}
83
+ />
84
+
85
+ <Tabs
86
+ items={getCSSFamilies().map((family) => ({
87
+ value: family.id,
88
+ label: family.label,
89
+ className: 'dndev-w-full',
90
+ content: null,
91
+ }))}
92
+ value={selectedTab}
93
+ onValueChange={(value) => {
94
+ onTabChange(value as CSSFamily | 'all');
95
+ setIsMobileMenuOpen(false);
96
+ if (location.pathname !== '/') {
97
+ navigate('/');
98
+ }
99
+ }}
100
+ cols={1}
101
+ gap="tight"
102
+ />
103
+ </Stack>
104
+
105
+ <Stack gap="medium">
106
+ <Button
107
+ variant="primary"
108
+ fullWidth
109
+ icon={ExternalLink}
110
+ iconEnd
111
+ onClick={() =>
112
+ window.open(
113
+ 'https://donotdev.com/purchase',
114
+ '_blank',
115
+ 'noopener,noreferrer'
116
+ )
117
+ }
118
+ >
119
+ Get Full Framework
120
+ </Button>
121
+ <Button
122
+ variant="outline"
123
+ icon={ExternalLink}
124
+ iconEnd
125
+ fullWidth
126
+ onClick={() =>
127
+ window.open('https://donotdev.com', '_blank', 'noopener,noreferrer')
128
+ }
129
+ >
130
+ Check it more online
131
+ </Button>
132
+ </Stack>
133
+ </Stack>
134
+ );
135
+
136
+ function lowerCase(label: string): "body" | "code" | "small" | "heading" | "default" | "muted" | "primary" | "secondary" | undefined {
137
+ throw new Error('Function not implemented.');
138
+ }
139
+
140
+ return (
141
+ <Grid
142
+ className="dndev-h-screen dndev-w-full dndev-overflow-hidden"
143
+ templateColumns={isDesktop ? '280px 1fr' : '1fr'}
144
+ areas={isDesktop ? 'sidebar main' : 'main'}
145
+ gap="none"
146
+ >
147
+ {isDesktop && (
148
+ <GridArea
149
+ name="sidebar"
150
+ style={{
151
+ padding: 'var(--gap-sm) var(--gap-md)',
152
+ overflowY: 'auto',
153
+ background: 'var(--background)',
154
+ borderRadius: 0,
155
+ borderInlineEnd: 'var(--border-hairline) solid var(--border)',
156
+ }}
157
+ >
158
+ {SidebarContent}
159
+ </GridArea>
160
+ )}
161
+
162
+ <GridArea name="main" className="dndev-h-full dndev-overflow-hidden">
163
+ <Stack className="dndev-h-full" gap="none">
164
+ {/* Header */}
165
+ <Grid
166
+ templateColumns="1fr auto 1fr"
167
+ align="center"
168
+ style={{
169
+ padding: 'var(--gap-sm) var(--gap-md)',
170
+ background: 'var(--background)',
171
+ flexShrink: 0,
172
+ borderRadius: 0,
173
+ borderBottom: 'var(--border-hairline) solid var(--border)',
174
+ }}
175
+ >
176
+ <Stack direction="row" gap="medium" align="center" justify="start">
177
+ <Button
178
+ variant="ghost"
179
+ icon={ArrowLeft}
180
+ onClick={showBackButton ? handleBack : undefined}
181
+ disabled={!showBackButton}
182
+ className={!showBackButton ? 'dndev-opacity-0' : ''}
183
+ aria-hidden={!showBackButton}
184
+ >
185
+ Back
186
+ </Button>
187
+ </Stack>
188
+
189
+ <Stack align="center" gap="tight">
190
+ <Text variant="muted" level="body">
191
+ We use a high contrast theme to demonstrate component usage. Update themes.css to customize.
192
+ </Text>
193
+ <Grid cols={4} gap="tight">
194
+ {[
195
+ { label: 'Foreground', color: 'var(--foreground)', border: true },
196
+ { label: 'Primary', color: 'var(--primary)' },
197
+ { label: 'Secondary', color: 'var(--secondary)' },
198
+ { label: 'Accent', color: 'var(--accent)' },
199
+ ].map((item) => (
200
+ <Stack
201
+ key={item.label}
202
+ direction="row"
203
+ gap="tight"
204
+ align="center"
205
+ >
206
+ <span
207
+ style={{
208
+ width: '20px',
209
+ height: '20px',
210
+ background: item.color
211
+ }}
212
+ />
213
+ <Text
214
+ level="small"
215
+ style={{ color: item.color }}
216
+ >
217
+ {item.label}
218
+ </Text>
219
+ </Stack>
220
+ ))}
221
+ </Grid>
222
+ </Stack>
223
+
224
+ {/* Right side: Theme Toggle + Mobile Menu */}
225
+ <Stack direction="row" gap="medium" justify="end" align="center">
226
+ <ThemeToggle />
227
+ {!isDesktop && (
228
+ <Sheet
229
+ open={isMobileMenuOpen}
230
+ onOpenChange={setIsMobileMenuOpen}
231
+ side="left"
232
+ trigger={
233
+ <Button
234
+ variant="ghost"
235
+ display="compact"
236
+ aria-label="Open menu"
237
+ icon={Menu}
238
+ />
239
+ }
240
+ title="Components"
241
+ >
242
+ {SidebarContent}
243
+ </Sheet>
244
+ )}
245
+ </Stack>
246
+ </Grid>
247
+
248
+ {/* Content */}
249
+ <div
250
+ className="dndev-flex-1 dndev-overflow-y-auto dndev-w-full"
251
+ style={{ padding: 'var(--gap-md)' }}
252
+ >
253
+ <Outlet
254
+ context={{
255
+ selectedTab,
256
+ setSelectedTab: onTabChange,
257
+ searchQuery,
258
+ setSearchQuery: onSearchChange,
259
+ }}
260
+ />
261
+ </div>
262
+ </Stack>
263
+ </GridArea>
264
+ </Grid>
265
+ );
266
+ }
@@ -0,0 +1,20 @@
1
+ // apps/demo/src/pages/components/LayoutRoute.tsx
2
+
3
+ import { useState } from 'react';
4
+
5
+ import { DemoLayout } from './DemoLayout';
6
+ import type { CSSFamily } from './ComponentsData';
7
+
8
+ export function LayoutRoute() {
9
+ const [selectedTab, setSelectedTab] = useState<CSSFamily | 'all'>('all');
10
+ const [searchQuery, setSearchQuery] = useState('');
11
+
12
+ return (
13
+ <DemoLayout
14
+ selectedTab={selectedTab}
15
+ onTabChange={setSelectedTab}
16
+ searchQuery={searchQuery}
17
+ onSearchChange={setSearchQuery}
18
+ />
19
+ );
20
+ }