@podosoft/podokit 0.1.1 → 0.3.0

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 (326) hide show
  1. package/README.md +17 -3
  2. package/dist/add.d.ts +40 -0
  3. package/dist/add.js +114 -0
  4. package/dist/create.d.ts +2 -1
  5. package/dist/create.js +3 -2
  6. package/dist/index.js +39 -1
  7. package/dist/prompt.d.ts +0 -1
  8. package/dist/prompt.js +6 -7
  9. package/dist/templates/fullstack-nest-svelte/README.md +20 -8
  10. package/dist/templates/fullstack-nest-svelte/apps/api/package.json +20 -8
  11. package/dist/templates/fullstack-nest-svelte/apps/api/src/app.module.ts +14 -1
  12. package/dist/templates/fullstack-nest-svelte/apps/api/src/config/env.validation.ts +20 -15
  13. package/dist/templates/fullstack-nest-svelte/apps/api/src/database/data-source.ts +19 -0
  14. package/dist/templates/fullstack-nest-svelte/apps/api/src/health/health.controller.ts +15 -5
  15. package/dist/templates/fullstack-nest-svelte/apps/api/src/main.ts +8 -0
  16. package/dist/templates/fullstack-nest-svelte/apps/web/components.json +1 -1
  17. package/dist/templates/fullstack-nest-svelte/apps/web/package.json +10 -2
  18. package/dist/templates/fullstack-nest-svelte/apps/web/src/app.css +72 -8
  19. package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/alert/alert-action.svelte +20 -0
  20. package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/alert/alert-description.svelte +23 -0
  21. package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/alert/alert-title.svelte +23 -0
  22. package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/alert/alert.svelte +43 -0
  23. package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/alert/index.ts +17 -0
  24. package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/avatar/avatar-badge.svelte +26 -0
  25. package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/avatar/avatar-fallback.svelte +20 -0
  26. package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/avatar/avatar-group-count.svelte +23 -0
  27. package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/avatar/avatar-group.svelte +23 -0
  28. package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/avatar/avatar-image.svelte +17 -0
  29. package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/avatar/avatar.svelte +26 -0
  30. package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/avatar/index.ts +22 -0
  31. package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/badge/badge.svelte +49 -0
  32. package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/badge/index.ts +2 -0
  33. package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/button/button.svelte +82 -0
  34. package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/button/index.ts +17 -0
  35. package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/card/card-action.svelte +23 -0
  36. package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/card/card-content.svelte +20 -0
  37. package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/card/card-description.svelte +20 -0
  38. package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/card/card-footer.svelte +20 -0
  39. package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/card/card-header.svelte +23 -0
  40. package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/card/card-title.svelte +20 -0
  41. package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/card/card.svelte +22 -0
  42. package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/card/index.ts +25 -0
  43. package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/checkbox/checkbox.svelte +39 -0
  44. package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/checkbox/index.ts +6 -0
  45. package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/dialog/dialog-close.svelte +11 -0
  46. package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/dialog/dialog-content.svelte +48 -0
  47. package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/dialog/dialog-description.svelte +17 -0
  48. package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/dialog/dialog-footer.svelte +32 -0
  49. package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/dialog/dialog-header.svelte +20 -0
  50. package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/dialog/dialog-overlay.svelte +17 -0
  51. package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/dialog/dialog-portal.svelte +7 -0
  52. package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/dialog/dialog-title.svelte +17 -0
  53. package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/dialog/dialog-trigger.svelte +11 -0
  54. package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/dialog/dialog.svelte +7 -0
  55. package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/dialog/index.ts +34 -0
  56. package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu-checkbox-group.svelte +16 -0
  57. package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu-checkbox-item.svelte +44 -0
  58. package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu-content.svelte +31 -0
  59. package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu-group-heading.svelte +22 -0
  60. package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu-group.svelte +7 -0
  61. package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu-item.svelte +27 -0
  62. package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu-label.svelte +24 -0
  63. package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu-portal.svelte +7 -0
  64. package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu-radio-group.svelte +16 -0
  65. package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu-radio-item.svelte +34 -0
  66. package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu-separator.svelte +17 -0
  67. package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu-shortcut.svelte +20 -0
  68. package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu-sub-content.svelte +17 -0
  69. package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu-sub-trigger.svelte +29 -0
  70. package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu-sub.svelte +7 -0
  71. package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu-trigger.svelte +7 -0
  72. package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu.svelte +7 -0
  73. package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/dropdown-menu/index.ts +54 -0
  74. package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/input/index.ts +7 -0
  75. package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/input/input.svelte +48 -0
  76. package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/label/index.ts +7 -0
  77. package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/label/label.svelte +20 -0
  78. package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/select/index.ts +37 -0
  79. package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/select/select-content.svelte +45 -0
  80. package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/select/select-group-heading.svelte +21 -0
  81. package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/select/select-group.svelte +17 -0
  82. package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/select/select-item.svelte +40 -0
  83. package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/select/select-label.svelte +20 -0
  84. package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/select/select-portal.svelte +7 -0
  85. package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/select/select-scroll-down-button.svelte +20 -0
  86. package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/select/select-scroll-up-button.svelte +20 -0
  87. package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/select/select-separator.svelte +18 -0
  88. package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/select/select-trigger.svelte +29 -0
  89. package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/select/select.svelte +11 -0
  90. package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/separator/index.ts +7 -0
  91. package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/separator/separator.svelte +23 -0
  92. package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/skeleton/index.ts +7 -0
  93. package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/skeleton/skeleton.svelte +17 -0
  94. package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/sonner/index.ts +1 -0
  95. package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/sonner/sonner.svelte +34 -0
  96. package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/table/index.ts +28 -0
  97. package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/table/table-body.svelte +15 -0
  98. package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/table/table-caption.svelte +20 -0
  99. package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/table/table-cell.svelte +15 -0
  100. package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/table/table-footer.svelte +20 -0
  101. package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/table/table-head.svelte +15 -0
  102. package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/table/table-header.svelte +20 -0
  103. package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/table/table-row.svelte +15 -0
  104. package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/table/table.svelte +17 -0
  105. package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/tabs/index.ts +18 -0
  106. package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/tabs/tabs-content.svelte +17 -0
  107. package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/tabs/tabs-list.svelte +40 -0
  108. package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/tabs/tabs-trigger.svelte +23 -0
  109. package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/tabs/tabs.svelte +19 -0
  110. package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/tooltip/index.ts +19 -0
  111. package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/tooltip/tooltip-content.svelte +52 -0
  112. package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/tooltip/tooltip-portal.svelte +7 -0
  113. package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/tooltip/tooltip-provider.svelte +7 -0
  114. package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/tooltip/tooltip-trigger.svelte +7 -0
  115. package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/components/ui/tooltip/tooltip.svelte +7 -0
  116. package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/i18n/ko.ts +5 -2
  117. package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/utils.ts +11 -0
  118. package/dist/templates/fullstack-nest-svelte/apps/web/src/routes/+page.svelte +19 -12
  119. package/dist/templates/modules/api-key-auth/files/apps/api/src/api-key/api-key.decorator.ts +9 -0
  120. package/dist/templates/modules/api-key-auth/files/apps/api/src/api-key/api-key.guard.ts +29 -0
  121. package/dist/templates/modules/api-key-auth/files/apps/api/src/api-key/api-key.module.ts +9 -0
  122. package/dist/templates/modules/api-key-auth/files/apps/api/src/machine/machine.controller.ts +14 -0
  123. package/dist/templates/modules/api-key-auth/module.manifest.json +19 -0
  124. package/dist/templates/modules/audit-log/files/apps/api/src/audit/audit-log.entity.ts +25 -0
  125. package/dist/templates/modules/audit-log/files/apps/api/src/audit/audit.controller.ts +16 -0
  126. package/dist/templates/modules/audit-log/files/apps/api/src/audit/audit.interceptor.ts +39 -0
  127. package/dist/templates/modules/audit-log/files/apps/api/src/audit/audit.module.ts +13 -0
  128. package/dist/templates/modules/audit-log/files/apps/api/src/migrations/1720300000000-InitAuditLogs.ts +25 -0
  129. package/dist/templates/modules/audit-log/module.manifest.json +16 -0
  130. package/dist/templates/modules/auth/files/apps/api/src/account/account.controller.ts +13 -0
  131. package/dist/templates/modules/auth/files/apps/api/src/account/account.module.ts +5 -0
  132. package/dist/templates/modules/auth/files/apps/api/src/auth/auth.ts +36 -0
  133. package/dist/templates/modules/auth/files/apps/api/src/health/health.controller.ts +26 -0
  134. package/dist/templates/modules/auth/module.manifest.json +70 -0
  135. package/dist/templates/modules/bullmq/files/apps/api/src/jobs/demo.processor.ts +12 -0
  136. package/dist/templates/modules/bullmq/files/apps/api/src/jobs/dto/create-job.dto.ts +9 -0
  137. package/dist/templates/modules/bullmq/files/apps/api/src/jobs/jobs.controller.ts +29 -0
  138. package/dist/templates/modules/bullmq/files/apps/api/src/jobs/jobs.module.ts +15 -0
  139. package/dist/templates/modules/bullmq/files/apps/api/src/jobs/queue.ts +8 -0
  140. package/dist/templates/modules/bullmq/files/apps/api/src/jobs/worker.module.ts +20 -0
  141. package/dist/templates/modules/bullmq/files/apps/api/src/main-worker.ts +14 -0
  142. package/dist/templates/modules/bullmq/files/infra/docker/worker.compose.example.yml +18 -0
  143. package/dist/templates/modules/bullmq/files/infra/k3s/worker-deployment.yaml +22 -0
  144. package/dist/templates/modules/bullmq/module.manifest.json +36 -0
  145. package/dist/templates/modules/file-upload/files/apps/api/src/files/files.controller.ts +29 -0
  146. package/dist/templates/modules/file-upload/files/apps/api/src/files/files.module.ts +9 -0
  147. package/dist/templates/modules/file-upload/module.manifest.json +19 -0
  148. package/dist/templates/modules/job-progress/files/apps/api/src/progress/dto/start-job.dto.ts +11 -0
  149. package/dist/templates/modules/job-progress/files/apps/api/src/progress/job-progress.module.ts +13 -0
  150. package/dist/templates/modules/job-progress/files/apps/api/src/progress/progress.bridge.ts +19 -0
  151. package/dist/templates/modules/job-progress/files/apps/api/src/progress/progress.controller.ts +17 -0
  152. package/dist/templates/modules/job-progress/files/apps/api/src/progress/progress.processor.ts +25 -0
  153. package/dist/templates/modules/job-progress/module.manifest.json +23 -0
  154. package/dist/templates/modules/logging/files/apps/api/src/logging/logging.module.ts +29 -0
  155. package/dist/templates/modules/logging/module.manifest.json +27 -0
  156. package/dist/templates/modules/object-storage-s3/files/apps/api/src/storage/dto/put-object.dto.ts +8 -0
  157. package/dist/templates/modules/object-storage-s3/files/apps/api/src/storage/storage.config.ts +31 -0
  158. package/dist/templates/modules/object-storage-s3/files/apps/api/src/storage/storage.controller.ts +29 -0
  159. package/dist/templates/modules/object-storage-s3/files/apps/api/src/storage/storage.module.ts +11 -0
  160. package/dist/templates/modules/object-storage-s3/files/apps/api/src/storage/storage.service.ts +37 -0
  161. package/dist/templates/modules/object-storage-s3/files/infra/docker/minio.compose.yml +33 -0
  162. package/dist/templates/modules/object-storage-s3/module.manifest.json +31 -0
  163. package/dist/templates/modules/rate-limit/files/apps/api/src/rate-limit/rate-limit.module.ts +26 -0
  164. package/dist/templates/modules/rate-limit/module.manifest.json +25 -0
  165. package/dist/templates/modules/redis/files/apps/api/src/redis/cache.controller.ts +21 -0
  166. package/dist/templates/modules/redis/files/apps/api/src/redis/dto/set-cache.dto.ts +14 -0
  167. package/dist/templates/modules/redis/files/apps/api/src/redis/redis.module.ts +12 -0
  168. package/dist/templates/modules/redis/files/apps/api/src/redis/redis.service.ts +43 -0
  169. package/dist/templates/modules/redis/module.manifest.json +21 -0
  170. package/dist/templates/modules/sse/files/apps/api/src/events/dto/publish-event.dto.ts +8 -0
  171. package/dist/templates/modules/sse/files/apps/api/src/events/events.controller.ts +25 -0
  172. package/dist/templates/modules/sse/files/apps/api/src/events/events.module.ts +12 -0
  173. package/dist/templates/modules/sse/files/apps/api/src/events/events.service.ts +17 -0
  174. package/dist/templates/modules/sse/module.manifest.json +16 -0
  175. package/dist/templates/todo/README.md +40 -0
  176. package/dist/templates/todo/apps/api/Dockerfile +22 -0
  177. package/dist/templates/todo/apps/api/nest-cli.json +5 -0
  178. package/dist/templates/todo/apps/api/package.json +44 -0
  179. package/dist/templates/todo/apps/api/src/app.module.ts +22 -0
  180. package/dist/templates/todo/apps/api/src/common/all-exceptions.filter.ts +43 -0
  181. package/dist/templates/todo/apps/api/src/common/app-exception.ts +12 -0
  182. package/dist/templates/todo/apps/api/src/config/env.validation.ts +23 -0
  183. package/dist/templates/todo/apps/api/src/database/data-source.ts +19 -0
  184. package/dist/templates/todo/apps/api/src/health/health.controller.ts +23 -0
  185. package/dist/templates/todo/apps/api/src/health/health.module.ts +7 -0
  186. package/dist/templates/todo/apps/api/src/main.ts +29 -0
  187. package/dist/templates/todo/apps/api/src/migrations/1720100000000-InitTodos.ts +22 -0
  188. package/dist/templates/todo/apps/api/src/todos/dto/create-todo.dto.ts +10 -0
  189. package/dist/templates/todo/apps/api/src/todos/dto/update-todo.dto.ts +10 -0
  190. package/dist/templates/todo/apps/api/src/todos/todo.entity.ts +16 -0
  191. package/dist/templates/todo/apps/api/src/todos/todos.controller.ts +38 -0
  192. package/dist/templates/todo/apps/api/src/todos/todos.module.ts +12 -0
  193. package/dist/templates/todo/apps/api/src/todos/todos.service.ts +41 -0
  194. package/dist/templates/todo/apps/api/test/health.e2e-spec.ts +23 -0
  195. package/dist/templates/todo/apps/api/tsconfig.json +21 -0
  196. package/dist/templates/todo/apps/web/Dockerfile +22 -0
  197. package/dist/templates/todo/apps/web/components.json +15 -0
  198. package/dist/templates/todo/apps/web/package.json +36 -0
  199. package/dist/templates/todo/apps/web/src/app.css +81 -0
  200. package/dist/templates/todo/apps/web/src/app.d.ts +11 -0
  201. package/dist/templates/todo/apps/web/src/app.html +11 -0
  202. package/dist/templates/todo/apps/web/src/lib/components/ui/alert/alert-action.svelte +20 -0
  203. package/dist/templates/todo/apps/web/src/lib/components/ui/alert/alert-description.svelte +23 -0
  204. package/dist/templates/todo/apps/web/src/lib/components/ui/alert/alert-title.svelte +23 -0
  205. package/dist/templates/todo/apps/web/src/lib/components/ui/alert/alert.svelte +43 -0
  206. package/dist/templates/todo/apps/web/src/lib/components/ui/alert/index.ts +17 -0
  207. package/dist/templates/todo/apps/web/src/lib/components/ui/avatar/avatar-badge.svelte +26 -0
  208. package/dist/templates/todo/apps/web/src/lib/components/ui/avatar/avatar-fallback.svelte +20 -0
  209. package/dist/templates/todo/apps/web/src/lib/components/ui/avatar/avatar-group-count.svelte +23 -0
  210. package/dist/templates/todo/apps/web/src/lib/components/ui/avatar/avatar-group.svelte +23 -0
  211. package/dist/templates/todo/apps/web/src/lib/components/ui/avatar/avatar-image.svelte +17 -0
  212. package/dist/templates/todo/apps/web/src/lib/components/ui/avatar/avatar.svelte +26 -0
  213. package/dist/templates/todo/apps/web/src/lib/components/ui/avatar/index.ts +22 -0
  214. package/dist/templates/todo/apps/web/src/lib/components/ui/badge/badge.svelte +49 -0
  215. package/dist/templates/todo/apps/web/src/lib/components/ui/badge/index.ts +2 -0
  216. package/dist/templates/todo/apps/web/src/lib/components/ui/button/button.svelte +82 -0
  217. package/dist/templates/todo/apps/web/src/lib/components/ui/button/index.ts +17 -0
  218. package/dist/templates/todo/apps/web/src/lib/components/ui/card/card-action.svelte +23 -0
  219. package/dist/templates/todo/apps/web/src/lib/components/ui/card/card-content.svelte +20 -0
  220. package/dist/templates/todo/apps/web/src/lib/components/ui/card/card-description.svelte +20 -0
  221. package/dist/templates/todo/apps/web/src/lib/components/ui/card/card-footer.svelte +20 -0
  222. package/dist/templates/todo/apps/web/src/lib/components/ui/card/card-header.svelte +23 -0
  223. package/dist/templates/todo/apps/web/src/lib/components/ui/card/card-title.svelte +20 -0
  224. package/dist/templates/todo/apps/web/src/lib/components/ui/card/card.svelte +22 -0
  225. package/dist/templates/todo/apps/web/src/lib/components/ui/card/index.ts +25 -0
  226. package/dist/templates/todo/apps/web/src/lib/components/ui/checkbox/checkbox.svelte +39 -0
  227. package/dist/templates/todo/apps/web/src/lib/components/ui/checkbox/index.ts +6 -0
  228. package/dist/templates/todo/apps/web/src/lib/components/ui/dialog/dialog-close.svelte +11 -0
  229. package/dist/templates/todo/apps/web/src/lib/components/ui/dialog/dialog-content.svelte +48 -0
  230. package/dist/templates/todo/apps/web/src/lib/components/ui/dialog/dialog-description.svelte +17 -0
  231. package/dist/templates/todo/apps/web/src/lib/components/ui/dialog/dialog-footer.svelte +32 -0
  232. package/dist/templates/todo/apps/web/src/lib/components/ui/dialog/dialog-header.svelte +20 -0
  233. package/dist/templates/todo/apps/web/src/lib/components/ui/dialog/dialog-overlay.svelte +17 -0
  234. package/dist/templates/todo/apps/web/src/lib/components/ui/dialog/dialog-portal.svelte +7 -0
  235. package/dist/templates/todo/apps/web/src/lib/components/ui/dialog/dialog-title.svelte +17 -0
  236. package/dist/templates/todo/apps/web/src/lib/components/ui/dialog/dialog-trigger.svelte +11 -0
  237. package/dist/templates/todo/apps/web/src/lib/components/ui/dialog/dialog.svelte +7 -0
  238. package/dist/templates/todo/apps/web/src/lib/components/ui/dialog/index.ts +34 -0
  239. package/dist/templates/todo/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu-checkbox-group.svelte +16 -0
  240. package/dist/templates/todo/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu-checkbox-item.svelte +44 -0
  241. package/dist/templates/todo/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu-content.svelte +31 -0
  242. package/dist/templates/todo/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu-group-heading.svelte +22 -0
  243. package/dist/templates/todo/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu-group.svelte +7 -0
  244. package/dist/templates/todo/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu-item.svelte +27 -0
  245. package/dist/templates/todo/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu-label.svelte +24 -0
  246. package/dist/templates/todo/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu-portal.svelte +7 -0
  247. package/dist/templates/todo/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu-radio-group.svelte +16 -0
  248. package/dist/templates/todo/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu-radio-item.svelte +34 -0
  249. package/dist/templates/todo/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu-separator.svelte +17 -0
  250. package/dist/templates/todo/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu-shortcut.svelte +20 -0
  251. package/dist/templates/todo/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu-sub-content.svelte +17 -0
  252. package/dist/templates/todo/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu-sub-trigger.svelte +29 -0
  253. package/dist/templates/todo/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu-sub.svelte +7 -0
  254. package/dist/templates/todo/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu-trigger.svelte +7 -0
  255. package/dist/templates/todo/apps/web/src/lib/components/ui/dropdown-menu/dropdown-menu.svelte +7 -0
  256. package/dist/templates/todo/apps/web/src/lib/components/ui/dropdown-menu/index.ts +54 -0
  257. package/dist/templates/todo/apps/web/src/lib/components/ui/input/index.ts +7 -0
  258. package/dist/templates/todo/apps/web/src/lib/components/ui/input/input.svelte +48 -0
  259. package/dist/templates/todo/apps/web/src/lib/components/ui/label/index.ts +7 -0
  260. package/dist/templates/todo/apps/web/src/lib/components/ui/label/label.svelte +20 -0
  261. package/dist/templates/todo/apps/web/src/lib/components/ui/select/index.ts +37 -0
  262. package/dist/templates/todo/apps/web/src/lib/components/ui/select/select-content.svelte +45 -0
  263. package/dist/templates/todo/apps/web/src/lib/components/ui/select/select-group-heading.svelte +21 -0
  264. package/dist/templates/todo/apps/web/src/lib/components/ui/select/select-group.svelte +17 -0
  265. package/dist/templates/todo/apps/web/src/lib/components/ui/select/select-item.svelte +40 -0
  266. package/dist/templates/todo/apps/web/src/lib/components/ui/select/select-label.svelte +20 -0
  267. package/dist/templates/todo/apps/web/src/lib/components/ui/select/select-portal.svelte +7 -0
  268. package/dist/templates/todo/apps/web/src/lib/components/ui/select/select-scroll-down-button.svelte +20 -0
  269. package/dist/templates/todo/apps/web/src/lib/components/ui/select/select-scroll-up-button.svelte +20 -0
  270. package/dist/templates/todo/apps/web/src/lib/components/ui/select/select-separator.svelte +18 -0
  271. package/dist/templates/todo/apps/web/src/lib/components/ui/select/select-trigger.svelte +29 -0
  272. package/dist/templates/todo/apps/web/src/lib/components/ui/select/select.svelte +11 -0
  273. package/dist/templates/todo/apps/web/src/lib/components/ui/separator/index.ts +7 -0
  274. package/dist/templates/todo/apps/web/src/lib/components/ui/separator/separator.svelte +23 -0
  275. package/dist/templates/todo/apps/web/src/lib/components/ui/skeleton/index.ts +7 -0
  276. package/dist/templates/todo/apps/web/src/lib/components/ui/skeleton/skeleton.svelte +17 -0
  277. package/dist/templates/todo/apps/web/src/lib/components/ui/sonner/index.ts +1 -0
  278. package/dist/templates/todo/apps/web/src/lib/components/ui/sonner/sonner.svelte +34 -0
  279. package/dist/templates/todo/apps/web/src/lib/components/ui/table/index.ts +28 -0
  280. package/dist/templates/todo/apps/web/src/lib/components/ui/table/table-body.svelte +15 -0
  281. package/dist/templates/todo/apps/web/src/lib/components/ui/table/table-caption.svelte +20 -0
  282. package/dist/templates/todo/apps/web/src/lib/components/ui/table/table-cell.svelte +15 -0
  283. package/dist/templates/todo/apps/web/src/lib/components/ui/table/table-footer.svelte +20 -0
  284. package/dist/templates/todo/apps/web/src/lib/components/ui/table/table-head.svelte +15 -0
  285. package/dist/templates/todo/apps/web/src/lib/components/ui/table/table-header.svelte +20 -0
  286. package/dist/templates/todo/apps/web/src/lib/components/ui/table/table-row.svelte +15 -0
  287. package/dist/templates/todo/apps/web/src/lib/components/ui/table/table.svelte +17 -0
  288. package/dist/templates/todo/apps/web/src/lib/components/ui/tabs/index.ts +18 -0
  289. package/dist/templates/todo/apps/web/src/lib/components/ui/tabs/tabs-content.svelte +17 -0
  290. package/dist/templates/todo/apps/web/src/lib/components/ui/tabs/tabs-list.svelte +40 -0
  291. package/dist/templates/todo/apps/web/src/lib/components/ui/tabs/tabs-trigger.svelte +23 -0
  292. package/dist/templates/todo/apps/web/src/lib/components/ui/tabs/tabs.svelte +19 -0
  293. package/dist/templates/todo/apps/web/src/lib/components/ui/tooltip/index.ts +19 -0
  294. package/dist/templates/todo/apps/web/src/lib/components/ui/tooltip/tooltip-content.svelte +52 -0
  295. package/dist/templates/todo/apps/web/src/lib/components/ui/tooltip/tooltip-portal.svelte +7 -0
  296. package/dist/templates/todo/apps/web/src/lib/components/ui/tooltip/tooltip-provider.svelte +7 -0
  297. package/dist/templates/todo/apps/web/src/lib/components/ui/tooltip/tooltip-trigger.svelte +7 -0
  298. package/dist/templates/todo/apps/web/src/lib/components/ui/tooltip/tooltip.svelte +7 -0
  299. package/dist/templates/todo/apps/web/src/lib/i18n/README.md +7 -0
  300. package/dist/templates/todo/apps/web/src/lib/i18n/en.ts +10 -0
  301. package/dist/templates/todo/apps/web/src/lib/i18n/ko.ts +11 -0
  302. package/dist/templates/todo/apps/web/src/lib/server/backend-proxy.ts +16 -0
  303. package/dist/templates/todo/apps/web/src/lib/utils.ts +11 -0
  304. package/dist/templates/todo/apps/web/src/routes/+layout.svelte +9 -0
  305. package/dist/templates/todo/apps/web/src/routes/+page.svelte +95 -0
  306. package/dist/templates/todo/apps/web/src/routes/api/health/+server.ts +12 -0
  307. package/dist/templates/todo/apps/web/src/routes/api/todos/+server.ts +24 -0
  308. package/dist/templates/todo/apps/web/src/routes/api/todos/[id]/+server.ts +24 -0
  309. package/dist/templates/todo/apps/web/static/.gitkeep +0 -0
  310. package/dist/templates/todo/apps/web/svelte.config.js +15 -0
  311. package/dist/templates/todo/apps/web/tsconfig.json +9 -0
  312. package/dist/templates/todo/apps/web/vite.config.ts +7 -0
  313. package/dist/templates/todo/dot-env.example +16 -0
  314. package/dist/templates/todo/dot-gitignore +9 -0
  315. package/dist/templates/todo/infra/docker/docker-compose.yml +29 -0
  316. package/dist/templates/todo/infra/k3s/api-deployment.yaml +24 -0
  317. package/dist/templates/todo/infra/k3s/configmap.yaml +10 -0
  318. package/dist/templates/todo/infra/k3s/ingress.yaml +18 -0
  319. package/dist/templates/todo/infra/k3s/namespace.yaml +4 -0
  320. package/dist/templates/todo/infra/k3s/secret.example.yaml +10 -0
  321. package/dist/templates/todo/infra/k3s/services.yaml +21 -0
  322. package/dist/templates/todo/infra/k3s/web-deployment.yaml +20 -0
  323. package/dist/templates/todo/package.json +13 -0
  324. package/dist/templates.d.ts +10 -0
  325. package/dist/templates.js +33 -0
  326. package/package.json +2 -2
@@ -0,0 +1,29 @@
1
+ <script lang="ts">
2
+ import { DropdownMenu as DropdownMenuPrimitive } from "bits-ui";
3
+ import ChevronRightIcon from '@lucide/svelte/icons/chevron-right';
4
+ import { cn } from "$lib/utils.js";
5
+
6
+ let {
7
+ ref = $bindable(null),
8
+ class: className,
9
+ inset,
10
+ children,
11
+ ...restProps
12
+ }: DropdownMenuPrimitive.SubTriggerProps & {
13
+ inset?: boolean;
14
+ } = $props();
15
+ </script>
16
+
17
+ <DropdownMenuPrimitive.SubTrigger
18
+ bind:ref
19
+ data-slot="dropdown-menu-sub-trigger"
20
+ data-inset={inset}
21
+ class={cn(
22
+ "focus:bg-accent focus:text-accent-foreground data-open:bg-accent data-open:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground gap-1.5 rounded-md px-1.5 py-1 text-sm data-inset:pl-7 [&_svg:not([class*='size-'])]:size-4 flex cursor-default items-center outline-hidden select-none data-[inset]:pl-8 [&_svg]:pointer-events-none [&_svg]:shrink-0",
23
+ className
24
+ )}
25
+ {...restProps}
26
+ >
27
+ {@render children?.()}
28
+ <ChevronRightIcon class="ml-auto" />
29
+ </DropdownMenuPrimitive.SubTrigger>
@@ -0,0 +1,7 @@
1
+ <script lang="ts">
2
+ import { DropdownMenu as DropdownMenuPrimitive } from "bits-ui";
3
+
4
+ let { open = $bindable(false), ...restProps }: DropdownMenuPrimitive.SubProps = $props();
5
+ </script>
6
+
7
+ <DropdownMenuPrimitive.Sub bind:open {...restProps} />
@@ -0,0 +1,7 @@
1
+ <script lang="ts">
2
+ import { DropdownMenu as DropdownMenuPrimitive } from "bits-ui";
3
+
4
+ let { ref = $bindable(null), ...restProps }: DropdownMenuPrimitive.TriggerProps = $props();
5
+ </script>
6
+
7
+ <DropdownMenuPrimitive.Trigger bind:ref data-slot="dropdown-menu-trigger" {...restProps} />
@@ -0,0 +1,7 @@
1
+ <script lang="ts">
2
+ import { DropdownMenu as DropdownMenuPrimitive } from "bits-ui";
3
+
4
+ let { open = $bindable(false), ...restProps }: DropdownMenuPrimitive.RootProps = $props();
5
+ </script>
6
+
7
+ <DropdownMenuPrimitive.Root bind:open {...restProps} />
@@ -0,0 +1,54 @@
1
+ import Root from "./dropdown-menu.svelte";
2
+ import Sub from "./dropdown-menu-sub.svelte";
3
+ import CheckboxGroup from "./dropdown-menu-checkbox-group.svelte";
4
+ import CheckboxItem from "./dropdown-menu-checkbox-item.svelte";
5
+ import Content from "./dropdown-menu-content.svelte";
6
+ import Group from "./dropdown-menu-group.svelte";
7
+ import Item from "./dropdown-menu-item.svelte";
8
+ import Label from "./dropdown-menu-label.svelte";
9
+ import RadioGroup from "./dropdown-menu-radio-group.svelte";
10
+ import RadioItem from "./dropdown-menu-radio-item.svelte";
11
+ import Separator from "./dropdown-menu-separator.svelte";
12
+ import Shortcut from "./dropdown-menu-shortcut.svelte";
13
+ import Trigger from "./dropdown-menu-trigger.svelte";
14
+ import SubContent from "./dropdown-menu-sub-content.svelte";
15
+ import SubTrigger from "./dropdown-menu-sub-trigger.svelte";
16
+ import GroupHeading from "./dropdown-menu-group-heading.svelte";
17
+ import Portal from "./dropdown-menu-portal.svelte";
18
+
19
+ export {
20
+ CheckboxGroup,
21
+ CheckboxItem,
22
+ Content,
23
+ Portal,
24
+ Root as DropdownMenu,
25
+ CheckboxGroup as DropdownMenuCheckboxGroup,
26
+ CheckboxItem as DropdownMenuCheckboxItem,
27
+ Content as DropdownMenuContent,
28
+ Portal as DropdownMenuPortal,
29
+ Group as DropdownMenuGroup,
30
+ Item as DropdownMenuItem,
31
+ Label as DropdownMenuLabel,
32
+ RadioGroup as DropdownMenuRadioGroup,
33
+ RadioItem as DropdownMenuRadioItem,
34
+ Separator as DropdownMenuSeparator,
35
+ Shortcut as DropdownMenuShortcut,
36
+ Sub as DropdownMenuSub,
37
+ SubContent as DropdownMenuSubContent,
38
+ SubTrigger as DropdownMenuSubTrigger,
39
+ Trigger as DropdownMenuTrigger,
40
+ GroupHeading as DropdownMenuGroupHeading,
41
+ Group,
42
+ GroupHeading,
43
+ Item,
44
+ Label,
45
+ RadioGroup,
46
+ RadioItem,
47
+ Root,
48
+ Separator,
49
+ Shortcut,
50
+ Sub,
51
+ SubContent,
52
+ SubTrigger,
53
+ Trigger,
54
+ };
@@ -0,0 +1,7 @@
1
+ import Root from "./input.svelte";
2
+
3
+ export {
4
+ Root,
5
+ //
6
+ Root as Input,
7
+ };
@@ -0,0 +1,48 @@
1
+ <script lang="ts">
2
+ import type { HTMLInputAttributes, HTMLInputTypeAttribute } from "svelte/elements";
3
+ import { cn, type WithElementRef } from "$lib/utils.js";
4
+
5
+ type InputType = Exclude<HTMLInputTypeAttribute, "file">;
6
+
7
+ type Props = WithElementRef<
8
+ Omit<HTMLInputAttributes, "type"> &
9
+ ({ type: "file"; files?: FileList } | { type?: InputType; files?: undefined })
10
+ >;
11
+
12
+ let {
13
+ ref = $bindable(null),
14
+ value = $bindable(),
15
+ type,
16
+ files = $bindable(),
17
+ class: className,
18
+ "data-slot": dataSlot = "input",
19
+ ...restProps
20
+ }: Props = $props();
21
+ </script>
22
+
23
+ {#if type === "file"}
24
+ <input
25
+ bind:this={ref}
26
+ data-slot={dataSlot}
27
+ class={cn(
28
+ "dark:bg-input/30 border-input focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:aria-invalid:border-destructive/50 disabled:bg-input/50 dark:disabled:bg-input/80 h-8 rounded-lg border bg-transparent px-2.5 py-1 text-base transition-colors file:h-6 file:text-sm file:font-medium focus-visible:ring-3 aria-invalid:ring-3 md:text-sm file:text-foreground placeholder:text-muted-foreground w-full min-w-0 outline-none file:inline-flex file:border-0 file:bg-transparent disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50",
29
+ className
30
+ )}
31
+ type="file"
32
+ bind:files
33
+ bind:value
34
+ {...restProps}
35
+ />
36
+ {:else}
37
+ <input
38
+ bind:this={ref}
39
+ data-slot={dataSlot}
40
+ class={cn(
41
+ "dark:bg-input/30 border-input focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:aria-invalid:border-destructive/50 disabled:bg-input/50 dark:disabled:bg-input/80 h-8 rounded-lg border bg-transparent px-2.5 py-1 text-base transition-colors file:h-6 file:text-sm file:font-medium focus-visible:ring-3 aria-invalid:ring-3 md:text-sm file:text-foreground placeholder:text-muted-foreground w-full min-w-0 outline-none file:inline-flex file:border-0 file:bg-transparent disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50",
42
+ className
43
+ )}
44
+ {type}
45
+ bind:value
46
+ {...restProps}
47
+ />
48
+ {/if}
@@ -0,0 +1,7 @@
1
+ import Root from "./label.svelte";
2
+
3
+ export {
4
+ Root,
5
+ //
6
+ Root as Label,
7
+ };
@@ -0,0 +1,20 @@
1
+ <script lang="ts">
2
+ import { Label as LabelPrimitive } from "bits-ui";
3
+ import { cn } from "$lib/utils.js";
4
+
5
+ let {
6
+ ref = $bindable(null),
7
+ class: className,
8
+ ...restProps
9
+ }: LabelPrimitive.RootProps = $props();
10
+ </script>
11
+
12
+ <LabelPrimitive.Root
13
+ bind:ref
14
+ data-slot="label"
15
+ class={cn(
16
+ "gap-2 text-sm leading-none font-medium group-data-[disabled=true]:opacity-50 peer-disabled:opacity-50 flex items-center select-none group-data-[disabled=true]:pointer-events-none peer-disabled:cursor-not-allowed",
17
+ className
18
+ )}
19
+ {...restProps}
20
+ />
@@ -0,0 +1,37 @@
1
+ import Root from "./select.svelte";
2
+ import Group from "./select-group.svelte";
3
+ import Label from "./select-label.svelte";
4
+ import Item from "./select-item.svelte";
5
+ import Content from "./select-content.svelte";
6
+ import Trigger from "./select-trigger.svelte";
7
+ import Separator from "./select-separator.svelte";
8
+ import ScrollDownButton from "./select-scroll-down-button.svelte";
9
+ import ScrollUpButton from "./select-scroll-up-button.svelte";
10
+ import GroupHeading from "./select-group-heading.svelte";
11
+ import Portal from "./select-portal.svelte";
12
+
13
+ export {
14
+ Root,
15
+ Group,
16
+ Label,
17
+ Item,
18
+ Content,
19
+ Trigger,
20
+ Separator,
21
+ ScrollDownButton,
22
+ ScrollUpButton,
23
+ GroupHeading,
24
+ Portal,
25
+ //
26
+ Root as Select,
27
+ Group as SelectGroup,
28
+ Label as SelectLabel,
29
+ Item as SelectItem,
30
+ Content as SelectContent,
31
+ Trigger as SelectTrigger,
32
+ Separator as SelectSeparator,
33
+ ScrollDownButton as SelectScrollDownButton,
34
+ ScrollUpButton as SelectScrollUpButton,
35
+ GroupHeading as SelectGroupHeading,
36
+ Portal as SelectPortal,
37
+ };
@@ -0,0 +1,45 @@
1
+ <script lang="ts">
2
+ import { Select as SelectPrimitive } from "bits-ui";
3
+ import SelectPortal from "./select-portal.svelte";
4
+ import SelectScrollUpButton from "./select-scroll-up-button.svelte";
5
+ import SelectScrollDownButton from "./select-scroll-down-button.svelte";
6
+ import { cn, type WithoutChild } from "$lib/utils.js";
7
+ import type { ComponentProps } from "svelte";
8
+ import type { WithoutChildrenOrChild } from "$lib/utils.js";
9
+
10
+ let {
11
+ ref = $bindable(null),
12
+ class: className,
13
+ sideOffset = 4,
14
+ portalProps,
15
+ children,
16
+ preventScroll = true,
17
+ ...restProps
18
+ }: WithoutChild<SelectPrimitive.ContentProps> & {
19
+ portalProps?: WithoutChildrenOrChild<ComponentProps<typeof SelectPortal>>;
20
+ } = $props();
21
+ </script>
22
+
23
+ <SelectPortal {...portalProps}>
24
+ <SelectPrimitive.Content
25
+ bind:ref
26
+ {sideOffset}
27
+ {preventScroll}
28
+ data-slot="select-content"
29
+ class={cn(
30
+ "bg-popover text-popover-foreground data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 data-closed:zoom-out-95 data-open:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 ring-foreground/10 min-w-36 rounded-lg shadow-md ring-1 duration-100 data-[side=inline-start]:slide-in-from-right-2 data-[side=inline-end]:slide-in-from-left-2 relative isolate z-50 overflow-x-hidden overflow-y-auto",
31
+ className
32
+ )}
33
+ {...restProps}
34
+ >
35
+ <SelectScrollUpButton />
36
+ <SelectPrimitive.Viewport
37
+ class={cn(
38
+ "h-(--bits-select-anchor-height) w-full min-w-(--bits-select-anchor-width) scroll-my-1"
39
+ )}
40
+ >
41
+ {@render children?.()}
42
+ </SelectPrimitive.Viewport>
43
+ <SelectScrollDownButton />
44
+ </SelectPrimitive.Content>
45
+ </SelectPortal>
@@ -0,0 +1,21 @@
1
+ <script lang="ts">
2
+ import { Select as SelectPrimitive } from "bits-ui";
3
+ import { cn } from "$lib/utils.js";
4
+ import type { ComponentProps } from "svelte";
5
+
6
+ let {
7
+ ref = $bindable(null),
8
+ class: className,
9
+ children,
10
+ ...restProps
11
+ }: ComponentProps<typeof SelectPrimitive.GroupHeading> = $props();
12
+ </script>
13
+
14
+ <SelectPrimitive.GroupHeading
15
+ bind:ref
16
+ data-slot="select-group-heading"
17
+ class={cn("text-muted-foreground px-2 py-1.5 text-xs", className)}
18
+ {...restProps}
19
+ >
20
+ {@render children?.()}
21
+ </SelectPrimitive.GroupHeading>
@@ -0,0 +1,17 @@
1
+ <script lang="ts">
2
+ import { Select as SelectPrimitive } from "bits-ui";
3
+ import { cn } from "$lib/utils.js";
4
+
5
+ let {
6
+ ref = $bindable(null),
7
+ class: className,
8
+ ...restProps
9
+ }: SelectPrimitive.GroupProps = $props();
10
+ </script>
11
+
12
+ <SelectPrimitive.Group
13
+ bind:ref
14
+ data-slot="select-group"
15
+ class={cn("scroll-my-1 p-1", className)}
16
+ {...restProps}
17
+ />
@@ -0,0 +1,40 @@
1
+ <script lang="ts">
2
+ import { Select as SelectPrimitive } from "bits-ui";
3
+ import { cn, type WithoutChild } from "$lib/utils.js";
4
+ import CheckIcon from '@lucide/svelte/icons/check';
5
+
6
+ let {
7
+ ref = $bindable(null),
8
+ class: className,
9
+ value,
10
+ label,
11
+ children: childrenProp,
12
+ ...restProps
13
+ }: WithoutChild<SelectPrimitive.ItemProps> = $props();
14
+ </script>
15
+
16
+ <SelectPrimitive.Item
17
+ bind:ref
18
+ {value}
19
+ data-slot="select-item"
20
+ class={cn(
21
+ "focus:bg-accent focus:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground gap-1.5 rounded-md py-1 pr-8 pl-1.5 text-sm [&_svg:not([class*='size-'])]:size-4 *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2 focus:bg-accent data-highlighted:bg-accent data-highlighted:text-accent-foreground focus:text-accent-foreground relative flex w-full cursor-default items-center outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0",
22
+ className
23
+ )}
24
+ {...restProps}
25
+ >
26
+ {#snippet children({ selected, highlighted })}
27
+ <span class="absolute end-2 flex size-3.5 items-center justify-center">
28
+ {#if selected}
29
+ <CheckIcon class="cn-select-item-indicator-icon" />
30
+ {/if}
31
+ </span>
32
+ <span class="flex flex-1 gap-2 shrink-0 whitespace-nowrap">
33
+ {#if childrenProp}
34
+ {@render childrenProp({ selected, highlighted })}
35
+ {:else}
36
+ {label || value}
37
+ {/if}
38
+ </span>
39
+ {/snippet}
40
+ </SelectPrimitive.Item>
@@ -0,0 +1,20 @@
1
+ <script lang="ts">
2
+ import { cn, type WithElementRef } from "$lib/utils.js";
3
+ import type { HTMLAttributes } from "svelte/elements";
4
+
5
+ let {
6
+ ref = $bindable(null),
7
+ class: className,
8
+ children,
9
+ ...restProps
10
+ }: WithElementRef<HTMLAttributes<HTMLDivElement>> & {} = $props();
11
+ </script>
12
+
13
+ <div
14
+ bind:this={ref}
15
+ data-slot="select-label"
16
+ class={cn("text-muted-foreground px-1.5 py-1 text-xs", className)}
17
+ {...restProps}
18
+ >
19
+ {@render children?.()}
20
+ </div>
@@ -0,0 +1,7 @@
1
+ <script lang="ts">
2
+ import { Select as SelectPrimitive } from "bits-ui";
3
+
4
+ let { ...restProps }: SelectPrimitive.PortalProps = $props();
5
+ </script>
6
+
7
+ <SelectPrimitive.Portal {...restProps} />
@@ -0,0 +1,20 @@
1
+ <script lang="ts">
2
+ import { Select as SelectPrimitive } from "bits-ui";
3
+ import { cn, type WithoutChildrenOrChild } from "$lib/utils.js";
4
+ import ChevronDownIcon from '@lucide/svelte/icons/chevron-down';
5
+
6
+ let {
7
+ ref = $bindable(null),
8
+ class: className,
9
+ ...restProps
10
+ }: WithoutChildrenOrChild<SelectPrimitive.ScrollDownButtonProps> = $props();
11
+ </script>
12
+
13
+ <SelectPrimitive.ScrollDownButton
14
+ bind:ref
15
+ data-slot="select-scroll-down-button"
16
+ class={cn("bg-popover z-10 flex cursor-default items-center justify-center py-1 [&_svg:not([class*='size-'])]:size-4 bottom-0 w-full", className)}
17
+ {...restProps}
18
+ >
19
+ <ChevronDownIcon />
20
+ </SelectPrimitive.ScrollDownButton>
@@ -0,0 +1,20 @@
1
+ <script lang="ts">
2
+ import { Select as SelectPrimitive } from "bits-ui";
3
+ import { cn, type WithoutChildrenOrChild } from "$lib/utils.js";
4
+ import ChevronUpIcon from '@lucide/svelte/icons/chevron-up';
5
+
6
+ let {
7
+ ref = $bindable(null),
8
+ class: className,
9
+ ...restProps
10
+ }: WithoutChildrenOrChild<SelectPrimitive.ScrollUpButtonProps> = $props();
11
+ </script>
12
+
13
+ <SelectPrimitive.ScrollUpButton
14
+ bind:ref
15
+ data-slot="select-scroll-up-button"
16
+ class={cn("bg-popover z-10 flex cursor-default items-center justify-center py-1 [&_svg:not([class*='size-'])]:size-4 top-0 w-full", className)}
17
+ {...restProps}
18
+ >
19
+ <ChevronUpIcon />
20
+ </SelectPrimitive.ScrollUpButton>
@@ -0,0 +1,18 @@
1
+ <script lang="ts">
2
+ import type { Separator as SeparatorPrimitive } from "bits-ui";
3
+ import { Separator } from "$lib/components/ui/separator/index.js";
4
+ import { cn } from "$lib/utils.js";
5
+
6
+ let {
7
+ ref = $bindable(null),
8
+ class: className,
9
+ ...restProps
10
+ }: SeparatorPrimitive.RootProps = $props();
11
+ </script>
12
+
13
+ <Separator
14
+ bind:ref
15
+ data-slot="select-separator"
16
+ class={cn("bg-border -mx-1 my-1 h-px pointer-events-none", className)}
17
+ {...restProps}
18
+ />
@@ -0,0 +1,29 @@
1
+ <script lang="ts">
2
+ import { Select as SelectPrimitive } from "bits-ui";
3
+ import { cn, type WithoutChild } from "$lib/utils.js";
4
+ import ChevronDownIcon from '@lucide/svelte/icons/chevron-down';
5
+
6
+ let {
7
+ ref = $bindable(null),
8
+ class: className,
9
+ children,
10
+ size = "default",
11
+ ...restProps
12
+ }: WithoutChild<SelectPrimitive.TriggerProps> & {
13
+ size?: "sm" | "default";
14
+ } = $props();
15
+ </script>
16
+
17
+ <SelectPrimitive.Trigger
18
+ bind:ref
19
+ data-slot="select-trigger"
20
+ data-size={size}
21
+ class={cn(
22
+ "border-input data-placeholder:text-muted-foreground dark:bg-input/30 dark:hover:bg-input/50 focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:aria-invalid:border-destructive/50 gap-1.5 rounded-lg border bg-transparent py-2 pr-2 pl-2.5 text-sm transition-colors select-none focus-visible:ring-3 aria-invalid:ring-3 data-[size=default]:h-8 data-[size=sm]:h-7 data-[size=sm]:rounded-[min(var(--radius-md),10px)] *:data-[slot=select-value]:flex *:data-[slot=select-value]:gap-1.5 [&_svg:not([class*='size-'])]:size-4 flex w-fit items-center justify-between whitespace-nowrap outline-none disabled:cursor-not-allowed disabled:opacity-50 *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center [&_svg]:pointer-events-none [&_svg]:shrink-0",
23
+ className
24
+ )}
25
+ {...restProps}
26
+ >
27
+ {@render children?.()}
28
+ <ChevronDownIcon class="text-muted-foreground size-4 pointer-events-none" />
29
+ </SelectPrimitive.Trigger>
@@ -0,0 +1,11 @@
1
+ <script lang="ts">
2
+ import { Select as SelectPrimitive } from "bits-ui";
3
+
4
+ let {
5
+ open = $bindable(false),
6
+ value = $bindable(),
7
+ ...restProps
8
+ }: SelectPrimitive.RootProps = $props();
9
+ </script>
10
+
11
+ <SelectPrimitive.Root bind:open bind:value={value as never} {...restProps} />
@@ -0,0 +1,7 @@
1
+ import Root from "./separator.svelte";
2
+
3
+ export {
4
+ Root,
5
+ //
6
+ Root as Separator,
7
+ };
@@ -0,0 +1,23 @@
1
+ <script lang="ts">
2
+ import { Separator as SeparatorPrimitive } from "bits-ui";
3
+ import { cn } from "$lib/utils.js";
4
+
5
+ let {
6
+ ref = $bindable(null),
7
+ class: className,
8
+ "data-slot": dataSlot = "separator",
9
+ ...restProps
10
+ }: SeparatorPrimitive.RootProps = $props();
11
+ </script>
12
+
13
+ <SeparatorPrimitive.Root
14
+ bind:ref
15
+ data-slot={dataSlot}
16
+ class={cn(
17
+ "bg-border shrink-0 data-[orientation=horizontal]:h-px data-[orientation=horizontal]:w-full data-[orientation=vertical]:w-px",
18
+ // this is different in shadcn/ui but self-stretch breaks things for us
19
+ "data-[orientation=vertical]:h-full",
20
+ className
21
+ )}
22
+ {...restProps}
23
+ />
@@ -0,0 +1,7 @@
1
+ import Root from "./skeleton.svelte";
2
+
3
+ export {
4
+ Root,
5
+ //
6
+ Root as Skeleton,
7
+ };
@@ -0,0 +1,17 @@
1
+ <script lang="ts">
2
+ import { cn, type WithElementRef, type WithoutChildren } from "$lib/utils.js";
3
+ import type { HTMLAttributes } from "svelte/elements";
4
+
5
+ let {
6
+ ref = $bindable(null),
7
+ class: className,
8
+ ...restProps
9
+ }: WithoutChildren<WithElementRef<HTMLAttributes<HTMLDivElement>>> = $props();
10
+ </script>
11
+
12
+ <div
13
+ bind:this={ref}
14
+ data-slot="skeleton"
15
+ class={cn("bg-muted rounded-md animate-pulse", className)}
16
+ {...restProps}
17
+ ></div>
@@ -0,0 +1 @@
1
+ export { default as Toaster } from "./sonner.svelte";
@@ -0,0 +1,34 @@
1
+ <script lang="ts">
2
+ import { Toaster as Sonner, type ToasterProps as SonnerProps } from "svelte-sonner";
3
+ import { mode } from "mode-watcher";
4
+ import Loader2Icon from '@lucide/svelte/icons/loader-2';
5
+ import CircleCheckIcon from '@lucide/svelte/icons/circle-check';
6
+ import OctagonXIcon from '@lucide/svelte/icons/octagon-x';
7
+ import InfoIcon from '@lucide/svelte/icons/info';
8
+ import TriangleAlertIcon from '@lucide/svelte/icons/triangle-alert';
9
+
10
+ let { ...restProps }: SonnerProps = $props();
11
+ </script>
12
+
13
+ <Sonner
14
+ theme={mode.current}
15
+ class="toaster group"
16
+ style="--normal-bg: var(--color-popover); --normal-text: var(--color-popover-foreground); --normal-border: var(--color-border);"
17
+ {...restProps}
18
+ >
19
+ {#snippet loadingIcon()}
20
+ <Loader2Icon class="size-4 animate-spin" />
21
+ {/snippet}
22
+ {#snippet successIcon()}
23
+ <CircleCheckIcon class="size-4" />
24
+ {/snippet}
25
+ {#snippet errorIcon()}
26
+ <OctagonXIcon class="size-4" />
27
+ {/snippet}
28
+ {#snippet infoIcon()}
29
+ <InfoIcon class="size-4" />
30
+ {/snippet}
31
+ {#snippet warningIcon()}
32
+ <TriangleAlertIcon class="size-4" />
33
+ {/snippet}
34
+ </Sonner>
@@ -0,0 +1,28 @@
1
+ import Root from "./table.svelte";
2
+ import Body from "./table-body.svelte";
3
+ import Caption from "./table-caption.svelte";
4
+ import Cell from "./table-cell.svelte";
5
+ import Footer from "./table-footer.svelte";
6
+ import Head from "./table-head.svelte";
7
+ import Header from "./table-header.svelte";
8
+ import Row from "./table-row.svelte";
9
+
10
+ export {
11
+ Root,
12
+ Body,
13
+ Caption,
14
+ Cell,
15
+ Footer,
16
+ Head,
17
+ Header,
18
+ Row,
19
+ //
20
+ Root as Table,
21
+ Body as TableBody,
22
+ Caption as TableCaption,
23
+ Cell as TableCell,
24
+ Footer as TableFooter,
25
+ Head as TableHead,
26
+ Header as TableHeader,
27
+ Row as TableRow,
28
+ };
@@ -0,0 +1,15 @@
1
+ <script lang="ts">
2
+ import { cn, type WithElementRef } from "$lib/utils.js";
3
+ import type { HTMLAttributes } from "svelte/elements";
4
+
5
+ let {
6
+ ref = $bindable(null),
7
+ class: className,
8
+ children,
9
+ ...restProps
10
+ }: WithElementRef<HTMLAttributes<HTMLTableSectionElement>> = $props();
11
+ </script>
12
+
13
+ <tbody bind:this={ref} data-slot="table-body" class={cn("[&_tr:last-child]:border-0", className)} {...restProps}>
14
+ {@render children?.()}
15
+ </tbody>