@notis_ai/cli 0.2.14 → 0.2.16

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 (299) hide show
  1. package/README.md +83 -21
  2. package/dist/agent-hooks/notis-agent-hook.mjs +20168 -0
  3. package/{skills → dist/base-skills}/notis-apps/SKILL.md +167 -72
  4. package/{skills → dist/base-skills}/notis-cli/SKILL.md +86 -28
  5. package/dist/base-skills/notis-query/SKILL.md +705 -0
  6. package/dist/skill-sync/index.js +1528 -0
  7. package/dist/skill-sync/index.js.map +7 -0
  8. package/package.json +5 -2
  9. package/skills/notis-apps/cli.md +39 -18
  10. package/skills/notis-cli/AGENT_INSTRUCTIONS.md +39 -0
  11. package/skills/notis-onboarding/BRIEF.md +16 -0
  12. package/src/agent-hook-entry.js +5 -0
  13. package/src/cli.js +23 -14
  14. package/src/command-specs/agents.js +392 -0
  15. package/src/command-specs/apps.js +1021 -424
  16. package/src/command-specs/auth.js +63 -10
  17. package/src/command-specs/index.js +6 -0
  18. package/src/command-specs/onboarding.js +69 -5
  19. package/src/command-specs/skills.js +56 -0
  20. package/src/runtime/agent-memory-state.js +126 -0
  21. package/src/runtime/agent-setup.js +383 -0
  22. package/src/runtime/app-dev-consumers.js +154 -0
  23. package/src/runtime/app-dev-host-lock.js +80 -0
  24. package/src/runtime/app-dev-process-identity.js +111 -0
  25. package/src/runtime/app-dev-roots.js +284 -0
  26. package/src/runtime/app-dev-server.js +447 -29
  27. package/src/runtime/app-dev-sessions.js +105 -145
  28. package/src/runtime/app-platform.js +1314 -166
  29. package/src/runtime/app-registry-scaffolds.js +367 -0
  30. package/src/runtime/base-skills.d.ts +20 -0
  31. package/src/runtime/base-skills.js +167 -0
  32. package/src/runtime/login-listener.js +15 -0
  33. package/src/runtime/oauth.js +1506 -141
  34. package/src/runtime/output.js +7 -0
  35. package/src/runtime/ports.js +16 -0
  36. package/src/runtime/profiles.js +19 -16
  37. package/src/runtime/skill-sync/cloud-client.ts +96 -0
  38. package/src/runtime/skill-sync/index.ts +644 -0
  39. package/src/runtime/skill-sync/local-scanner.ts +1046 -0
  40. package/src/runtime/skill-sync/symlink-manager.ts +383 -0
  41. package/src/runtime/skill-sync/sync-plan.ts +22 -0
  42. package/src/runtime/skill-sync/types.ts +103 -0
  43. package/src/runtime/skill-sync/write-cloud-skill.ts +50 -0
  44. package/src/runtime/store-screenshot.js +6 -1
  45. package/src/runtime/sync-skills.d.ts +37 -0
  46. package/src/runtime/sync-skills.js +231 -0
  47. package/template/app/layout.tsx +5 -1
  48. package/template/notis.config.ts +1 -0
  49. package/template/packages/sdk/package.json +2 -1
  50. package/template/packages/sdk/src/components/DocumentEditor.tsx +13 -3
  51. package/template/packages/sdk/src/components/MarkdownEditor.tsx +121 -0
  52. package/template/packages/sdk/src/components/MultiSelectActionBar.tsx +43 -119
  53. package/template/packages/sdk/src/components/MultiSelectCheckbox.tsx +5 -1
  54. package/template/packages/sdk/src/components/MultiSelectDragOverlay.tsx +1 -1
  55. package/template/packages/sdk/src/components/NotisSelectionBoundary.tsx +55 -0
  56. package/template/packages/sdk/src/components/ShortcutHints.tsx +56 -0
  57. package/template/packages/sdk/src/config.ts +25 -0
  58. package/template/packages/sdk/src/documents.ts +7 -1
  59. package/template/packages/sdk/src/hooks/useActiveResource.ts +19 -0
  60. package/template/packages/sdk/src/hooks/useCollectionInteractions.ts +726 -0
  61. package/template/packages/sdk/src/hooks/useHandover.ts +3 -0
  62. package/template/packages/sdk/src/hooks/useMultiSelect.ts +44 -482
  63. package/template/packages/sdk/src/hooks/useNotis.ts +3 -0
  64. package/template/packages/sdk/src/hooks/useNotisNavigation.ts +7 -4
  65. package/template/packages/sdk/src/hooks/useTool.ts +5 -4
  66. package/template/packages/sdk/src/index.ts +47 -2
  67. package/template/packages/sdk/src/interactions/actions.ts +46 -0
  68. package/template/packages/sdk/src/interactions/shortcuts.tsx +634 -0
  69. package/template/packages/sdk/src/interactions.ts +41 -0
  70. package/template/packages/sdk/src/provider.tsx +2 -1
  71. package/template/packages/sdk/src/runtime.ts +92 -4
  72. package/dist/scaffolds/notis-database/CHANGELOG.md +0 -5
  73. package/dist/scaffolds/notis-database/app/globals.css +0 -44
  74. package/dist/scaffolds/notis-database/app/layout.tsx +0 -6
  75. package/dist/scaffolds/notis-database/app/page.tsx +0 -1088
  76. package/dist/scaffolds/notis-database/components/ui/badge.tsx +0 -28
  77. package/dist/scaffolds/notis-database/components/ui/button.tsx +0 -53
  78. package/dist/scaffolds/notis-database/components/ui/card.tsx +0 -56
  79. package/dist/scaffolds/notis-database/components/ui/table.tsx +0 -120
  80. package/dist/scaffolds/notis-database/components.json +0 -20
  81. package/dist/scaffolds/notis-database/index.html +0 -12
  82. package/dist/scaffolds/notis-database/lib/types.ts +0 -132
  83. package/dist/scaffolds/notis-database/lib/utils.ts +0 -6
  84. package/dist/scaffolds/notis-database/metadata/screenshot-1.png +0 -0
  85. package/dist/scaffolds/notis-database/metadata/screenshot-2.png +0 -0
  86. package/dist/scaffolds/notis-database/metadata/screenshot-3.png +0 -0
  87. package/dist/scaffolds/notis-database/metadata/screenshot-4.png +0 -0
  88. package/dist/scaffolds/notis-database/metadata/screenshot-5.png +0 -0
  89. package/dist/scaffolds/notis-database/metadata/screenshot-fixtures.json +0 -1839
  90. package/dist/scaffolds/notis-database/notis.config.ts +0 -73
  91. package/dist/scaffolds/notis-database/package-lock.json +0 -3935
  92. package/dist/scaffolds/notis-database/package.json +0 -32
  93. package/dist/scaffolds/notis-database/packages/sdk/package.json +0 -36
  94. package/dist/scaffolds/notis-database/packages/sdk/src/components/DocumentEditor.tsx +0 -93
  95. package/dist/scaffolds/notis-database/packages/sdk/src/components/Markdown.tsx +0 -60
  96. package/dist/scaffolds/notis-database/packages/sdk/src/components/MultiSelectActionBar.tsx +0 -278
  97. package/dist/scaffolds/notis-database/packages/sdk/src/components/MultiSelectCheckbox.tsx +0 -91
  98. package/dist/scaffolds/notis-database/packages/sdk/src/components/MultiSelectDragOverlay.tsx +0 -39
  99. package/dist/scaffolds/notis-database/packages/sdk/src/config.ts +0 -234
  100. package/dist/scaffolds/notis-database/packages/sdk/src/documents.ts +0 -250
  101. package/dist/scaffolds/notis-database/packages/sdk/src/hooks/useBackend.ts +0 -41
  102. package/dist/scaffolds/notis-database/packages/sdk/src/hooks/useCloudComputer.ts +0 -97
  103. package/dist/scaffolds/notis-database/packages/sdk/src/hooks/useDatabaseSchema.ts +0 -85
  104. package/dist/scaffolds/notis-database/packages/sdk/src/hooks/useDatabaseSubscription.ts +0 -76
  105. package/dist/scaffolds/notis-database/packages/sdk/src/hooks/useDocument.ts +0 -78
  106. package/dist/scaffolds/notis-database/packages/sdk/src/hooks/useDocuments.ts +0 -121
  107. package/dist/scaffolds/notis-database/packages/sdk/src/hooks/useHandover.ts +0 -75
  108. package/dist/scaffolds/notis-database/packages/sdk/src/hooks/useMultiSelect.ts +0 -539
  109. package/dist/scaffolds/notis-database/packages/sdk/src/hooks/useNotis.ts +0 -34
  110. package/dist/scaffolds/notis-database/packages/sdk/src/hooks/useNotisNavigation.ts +0 -49
  111. package/dist/scaffolds/notis-database/packages/sdk/src/hooks/useTool.ts +0 -64
  112. package/dist/scaffolds/notis-database/packages/sdk/src/hooks/useTools.ts +0 -56
  113. package/dist/scaffolds/notis-database/packages/sdk/src/hooks/useTopBarSearch.ts +0 -73
  114. package/dist/scaffolds/notis-database/packages/sdk/src/hooks/useUpsertDocument.ts +0 -95
  115. package/dist/scaffolds/notis-database/packages/sdk/src/index.ts +0 -100
  116. package/dist/scaffolds/notis-database/packages/sdk/src/provider.tsx +0 -43
  117. package/dist/scaffolds/notis-database/packages/sdk/src/runtime.ts +0 -351
  118. package/dist/scaffolds/notis-database/packages/sdk/src/styles.css +0 -186
  119. package/dist/scaffolds/notis-database/packages/sdk/src/ui.ts +0 -15
  120. package/dist/scaffolds/notis-database/packages/sdk/src/vite.ts +0 -56
  121. package/dist/scaffolds/notis-database/packages/sdk/tsconfig.json +0 -15
  122. package/dist/scaffolds/notis-database/postcss.config.mjs +0 -8
  123. package/dist/scaffolds/notis-database/src/dev-main.tsx +0 -23
  124. package/dist/scaffolds/notis-database/src/mock-runtime.ts +0 -561
  125. package/dist/scaffolds/notis-database/tailwind.config.ts +0 -59
  126. package/dist/scaffolds/notis-database/tsconfig.json +0 -23
  127. package/dist/scaffolds/notis-database/vite.config.ts +0 -22
  128. package/dist/scaffolds/notis-journal/CHANGELOG.md +0 -29
  129. package/dist/scaffolds/notis-journal/app/globals.css +0 -37
  130. package/dist/scaffolds/notis-journal/app/insights/page.tsx +0 -513
  131. package/dist/scaffolds/notis-journal/app/journal-core.tsx +0 -362
  132. package/dist/scaffolds/notis-journal/app/journal-ui.tsx +0 -337
  133. package/dist/scaffolds/notis-journal/app/layout.tsx +0 -6
  134. package/dist/scaffolds/notis-journal/app/page.tsx +0 -486
  135. package/dist/scaffolds/notis-journal/components/ui/badge.tsx +0 -28
  136. package/dist/scaffolds/notis-journal/components/ui/button.tsx +0 -53
  137. package/dist/scaffolds/notis-journal/components/ui/card.tsx +0 -56
  138. package/dist/scaffolds/notis-journal/components.json +0 -20
  139. package/dist/scaffolds/notis-journal/index.html +0 -12
  140. package/dist/scaffolds/notis-journal/lib/utils.ts +0 -6
  141. package/dist/scaffolds/notis-journal/metadata/screenshot-1.png +0 -0
  142. package/dist/scaffolds/notis-journal/metadata/screenshot-2.png +0 -0
  143. package/dist/scaffolds/notis-journal/metadata/screenshot-3.png +0 -0
  144. package/dist/scaffolds/notis-journal/metadata/screenshot-4.png +0 -0
  145. package/dist/scaffolds/notis-journal/metadata/screenshot-5.png +0 -0
  146. package/dist/scaffolds/notis-journal/metadata/screenshot-6.png +0 -0
  147. package/dist/scaffolds/notis-journal/metadata/screenshot-fixtures.json +0 -132
  148. package/dist/scaffolds/notis-journal/notis.config.ts +0 -93
  149. package/dist/scaffolds/notis-journal/package-lock.json +0 -4615
  150. package/dist/scaffolds/notis-journal/package.json +0 -34
  151. package/dist/scaffolds/notis-journal/packages/sdk/package.json +0 -36
  152. package/dist/scaffolds/notis-journal/packages/sdk/src/components/DocumentEditor.tsx +0 -93
  153. package/dist/scaffolds/notis-journal/packages/sdk/src/components/Markdown.tsx +0 -60
  154. package/dist/scaffolds/notis-journal/packages/sdk/src/components/MultiSelectActionBar.tsx +0 -278
  155. package/dist/scaffolds/notis-journal/packages/sdk/src/components/MultiSelectCheckbox.tsx +0 -91
  156. package/dist/scaffolds/notis-journal/packages/sdk/src/components/MultiSelectDragOverlay.tsx +0 -39
  157. package/dist/scaffolds/notis-journal/packages/sdk/src/config.ts +0 -234
  158. package/dist/scaffolds/notis-journal/packages/sdk/src/documents.ts +0 -250
  159. package/dist/scaffolds/notis-journal/packages/sdk/src/hooks/useBackend.ts +0 -41
  160. package/dist/scaffolds/notis-journal/packages/sdk/src/hooks/useCloudComputer.ts +0 -97
  161. package/dist/scaffolds/notis-journal/packages/sdk/src/hooks/useDatabaseSchema.ts +0 -85
  162. package/dist/scaffolds/notis-journal/packages/sdk/src/hooks/useDatabaseSubscription.ts +0 -76
  163. package/dist/scaffolds/notis-journal/packages/sdk/src/hooks/useDocument.ts +0 -78
  164. package/dist/scaffolds/notis-journal/packages/sdk/src/hooks/useDocuments.ts +0 -121
  165. package/dist/scaffolds/notis-journal/packages/sdk/src/hooks/useHandover.ts +0 -75
  166. package/dist/scaffolds/notis-journal/packages/sdk/src/hooks/useMultiSelect.ts +0 -539
  167. package/dist/scaffolds/notis-journal/packages/sdk/src/hooks/useNotis.ts +0 -34
  168. package/dist/scaffolds/notis-journal/packages/sdk/src/hooks/useNotisNavigation.ts +0 -49
  169. package/dist/scaffolds/notis-journal/packages/sdk/src/hooks/useTool.ts +0 -64
  170. package/dist/scaffolds/notis-journal/packages/sdk/src/hooks/useTools.ts +0 -56
  171. package/dist/scaffolds/notis-journal/packages/sdk/src/hooks/useTopBarSearch.ts +0 -73
  172. package/dist/scaffolds/notis-journal/packages/sdk/src/hooks/useUpsertDocument.ts +0 -95
  173. package/dist/scaffolds/notis-journal/packages/sdk/src/index.ts +0 -100
  174. package/dist/scaffolds/notis-journal/packages/sdk/src/provider.tsx +0 -43
  175. package/dist/scaffolds/notis-journal/packages/sdk/src/runtime.ts +0 -351
  176. package/dist/scaffolds/notis-journal/packages/sdk/src/styles.css +0 -186
  177. package/dist/scaffolds/notis-journal/packages/sdk/src/ui.ts +0 -15
  178. package/dist/scaffolds/notis-journal/packages/sdk/src/vite.ts +0 -56
  179. package/dist/scaffolds/notis-journal/packages/sdk/tsconfig.json +0 -15
  180. package/dist/scaffolds/notis-journal/postcss.config.mjs +0 -8
  181. package/dist/scaffolds/notis-journal/skills/journal-onboarding/SKILL.md +0 -120
  182. package/dist/scaffolds/notis-journal/src/dev-main.tsx +0 -58
  183. package/dist/scaffolds/notis-journal/src/mock-runtime.ts +0 -199
  184. package/dist/scaffolds/notis-journal/tailwind.config.ts +0 -58
  185. package/dist/scaffolds/notis-journal/tsconfig.json +0 -23
  186. package/dist/scaffolds/notis-journal/vite.config.ts +0 -10
  187. package/dist/scaffolds/notis-notes/CHANGELOG.md +0 -5
  188. package/dist/scaffolds/notis-notes/app/globals.css +0 -3
  189. package/dist/scaffolds/notis-notes/app/layout.tsx +0 -6
  190. package/dist/scaffolds/notis-notes/app/page.tsx +0 -1943
  191. package/dist/scaffolds/notis-notes/app/phosphor-icons.ts +0 -596
  192. package/dist/scaffolds/notis-notes/components/ui/badge.tsx +0 -28
  193. package/dist/scaffolds/notis-notes/components/ui/button.tsx +0 -53
  194. package/dist/scaffolds/notis-notes/components/ui/card.tsx +0 -56
  195. package/dist/scaffolds/notis-notes/components.json +0 -20
  196. package/dist/scaffolds/notis-notes/lib/utils.ts +0 -6
  197. package/dist/scaffolds/notis-notes/lib/visible-properties.ts +0 -144
  198. package/dist/scaffolds/notis-notes/metadata/screenshot-1.png +0 -0
  199. package/dist/scaffolds/notis-notes/metadata/screenshot-2.png +0 -0
  200. package/dist/scaffolds/notis-notes/metadata/screenshot-3.png +0 -0
  201. package/dist/scaffolds/notis-notes/metadata/screenshot-4.png +0 -0
  202. package/dist/scaffolds/notis-notes/metadata/screenshot-5.png +0 -0
  203. package/dist/scaffolds/notis-notes/metadata/screenshot-fixtures.json +0 -752
  204. package/dist/scaffolds/notis-notes/notis.config.ts +0 -80
  205. package/dist/scaffolds/notis-notes/package-lock.json +0 -4636
  206. package/dist/scaffolds/notis-notes/package.json +0 -35
  207. package/dist/scaffolds/notis-notes/packages/sdk/package.json +0 -36
  208. package/dist/scaffolds/notis-notes/packages/sdk/src/components/DocumentEditor.tsx +0 -93
  209. package/dist/scaffolds/notis-notes/packages/sdk/src/components/Markdown.tsx +0 -60
  210. package/dist/scaffolds/notis-notes/packages/sdk/src/components/MultiSelectActionBar.tsx +0 -278
  211. package/dist/scaffolds/notis-notes/packages/sdk/src/components/MultiSelectCheckbox.tsx +0 -91
  212. package/dist/scaffolds/notis-notes/packages/sdk/src/components/MultiSelectDragOverlay.tsx +0 -39
  213. package/dist/scaffolds/notis-notes/packages/sdk/src/config.ts +0 -234
  214. package/dist/scaffolds/notis-notes/packages/sdk/src/documents.ts +0 -250
  215. package/dist/scaffolds/notis-notes/packages/sdk/src/hooks/useBackend.ts +0 -41
  216. package/dist/scaffolds/notis-notes/packages/sdk/src/hooks/useCloudComputer.ts +0 -97
  217. package/dist/scaffolds/notis-notes/packages/sdk/src/hooks/useDatabaseSchema.ts +0 -85
  218. package/dist/scaffolds/notis-notes/packages/sdk/src/hooks/useDatabaseSubscription.ts +0 -76
  219. package/dist/scaffolds/notis-notes/packages/sdk/src/hooks/useDocument.ts +0 -78
  220. package/dist/scaffolds/notis-notes/packages/sdk/src/hooks/useDocuments.ts +0 -121
  221. package/dist/scaffolds/notis-notes/packages/sdk/src/hooks/useHandover.ts +0 -75
  222. package/dist/scaffolds/notis-notes/packages/sdk/src/hooks/useMultiSelect.ts +0 -539
  223. package/dist/scaffolds/notis-notes/packages/sdk/src/hooks/useNotis.ts +0 -34
  224. package/dist/scaffolds/notis-notes/packages/sdk/src/hooks/useNotisNavigation.ts +0 -49
  225. package/dist/scaffolds/notis-notes/packages/sdk/src/hooks/useTool.ts +0 -64
  226. package/dist/scaffolds/notis-notes/packages/sdk/src/hooks/useTools.ts +0 -56
  227. package/dist/scaffolds/notis-notes/packages/sdk/src/hooks/useTopBarSearch.ts +0 -73
  228. package/dist/scaffolds/notis-notes/packages/sdk/src/hooks/useUpsertDocument.ts +0 -95
  229. package/dist/scaffolds/notis-notes/packages/sdk/src/index.ts +0 -100
  230. package/dist/scaffolds/notis-notes/packages/sdk/src/provider.tsx +0 -43
  231. package/dist/scaffolds/notis-notes/packages/sdk/src/runtime.ts +0 -351
  232. package/dist/scaffolds/notis-notes/packages/sdk/src/styles.css +0 -186
  233. package/dist/scaffolds/notis-notes/packages/sdk/src/ui.ts +0 -15
  234. package/dist/scaffolds/notis-notes/packages/sdk/src/vite.ts +0 -56
  235. package/dist/scaffolds/notis-notes/packages/sdk/tsconfig.json +0 -15
  236. package/dist/scaffolds/notis-notes/postcss.config.mjs +0 -8
  237. package/dist/scaffolds/notis-notes/tailwind.config.ts +0 -58
  238. package/dist/scaffolds/notis-notes/tsconfig.json +0 -23
  239. package/dist/scaffolds/notis-notes/vite.config.ts +0 -10
  240. package/dist/scaffolds/notis-random/CHANGELOG.md +0 -15
  241. package/dist/scaffolds/notis-random/README.md +0 -33
  242. package/dist/scaffolds/notis-random/app/globals.css +0 -11
  243. package/dist/scaffolds/notis-random/app/history/page.tsx +0 -67
  244. package/dist/scaffolds/notis-random/app/layout.tsx +0 -7
  245. package/dist/scaffolds/notis-random/app/page.tsx +0 -289
  246. package/dist/scaffolds/notis-random/components/ui/button.tsx +0 -50
  247. package/dist/scaffolds/notis-random/components/ui/card.tsx +0 -16
  248. package/dist/scaffolds/notis-random/components/ui/input.tsx +0 -23
  249. package/dist/scaffolds/notis-random/components.json +0 -20
  250. package/dist/scaffolds/notis-random/index.html +0 -12
  251. package/dist/scaffolds/notis-random/lib/notis-tools.ts +0 -128
  252. package/dist/scaffolds/notis-random/lib/rng.ts +0 -202
  253. package/dist/scaffolds/notis-random/lib/roll-record.ts +0 -189
  254. package/dist/scaffolds/notis-random/lib/utils.ts +0 -25
  255. package/dist/scaffolds/notis-random/metadata/screenshot-1.png +0 -0
  256. package/dist/scaffolds/notis-random/metadata/screenshot-2.png +0 -0
  257. package/dist/scaffolds/notis-random/metadata/screenshot-3.png +0 -0
  258. package/dist/scaffolds/notis-random/metadata/screenshot-4.png +0 -0
  259. package/dist/scaffolds/notis-random/metadata/screenshot-5.png +0 -0
  260. package/dist/scaffolds/notis-random/metadata/screenshot-fixtures.json +0 -753
  261. package/dist/scaffolds/notis-random/notis.config.ts +0 -86
  262. package/dist/scaffolds/notis-random/package-lock.json +0 -4513
  263. package/dist/scaffolds/notis-random/package.json +0 -36
  264. package/dist/scaffolds/notis-random/packages/sdk/package.json +0 -36
  265. package/dist/scaffolds/notis-random/packages/sdk/src/components/DocumentEditor.tsx +0 -93
  266. package/dist/scaffolds/notis-random/packages/sdk/src/components/Markdown.tsx +0 -60
  267. package/dist/scaffolds/notis-random/packages/sdk/src/components/MultiSelectActionBar.tsx +0 -278
  268. package/dist/scaffolds/notis-random/packages/sdk/src/components/MultiSelectCheckbox.tsx +0 -91
  269. package/dist/scaffolds/notis-random/packages/sdk/src/components/MultiSelectDragOverlay.tsx +0 -39
  270. package/dist/scaffolds/notis-random/packages/sdk/src/config.ts +0 -234
  271. package/dist/scaffolds/notis-random/packages/sdk/src/documents.ts +0 -250
  272. package/dist/scaffolds/notis-random/packages/sdk/src/hooks/useBackend.ts +0 -41
  273. package/dist/scaffolds/notis-random/packages/sdk/src/hooks/useCloudComputer.ts +0 -97
  274. package/dist/scaffolds/notis-random/packages/sdk/src/hooks/useDatabaseSchema.ts +0 -85
  275. package/dist/scaffolds/notis-random/packages/sdk/src/hooks/useDatabaseSubscription.ts +0 -76
  276. package/dist/scaffolds/notis-random/packages/sdk/src/hooks/useDocument.ts +0 -78
  277. package/dist/scaffolds/notis-random/packages/sdk/src/hooks/useDocuments.ts +0 -121
  278. package/dist/scaffolds/notis-random/packages/sdk/src/hooks/useHandover.ts +0 -75
  279. package/dist/scaffolds/notis-random/packages/sdk/src/hooks/useMultiSelect.ts +0 -539
  280. package/dist/scaffolds/notis-random/packages/sdk/src/hooks/useNotis.ts +0 -34
  281. package/dist/scaffolds/notis-random/packages/sdk/src/hooks/useNotisNavigation.ts +0 -49
  282. package/dist/scaffolds/notis-random/packages/sdk/src/hooks/useTool.ts +0 -64
  283. package/dist/scaffolds/notis-random/packages/sdk/src/hooks/useTools.ts +0 -56
  284. package/dist/scaffolds/notis-random/packages/sdk/src/hooks/useTopBarSearch.ts +0 -73
  285. package/dist/scaffolds/notis-random/packages/sdk/src/hooks/useUpsertDocument.ts +0 -95
  286. package/dist/scaffolds/notis-random/packages/sdk/src/index.ts +0 -100
  287. package/dist/scaffolds/notis-random/packages/sdk/src/provider.tsx +0 -43
  288. package/dist/scaffolds/notis-random/packages/sdk/src/runtime.ts +0 -351
  289. package/dist/scaffolds/notis-random/packages/sdk/src/styles.css +0 -186
  290. package/dist/scaffolds/notis-random/packages/sdk/src/ui.ts +0 -15
  291. package/dist/scaffolds/notis-random/packages/sdk/src/vite.ts +0 -56
  292. package/dist/scaffolds/notis-random/packages/sdk/tsconfig.json +0 -15
  293. package/dist/scaffolds/notis-random/postcss.config.mjs +0 -6
  294. package/dist/scaffolds/notis-random/src/dev-main.tsx +0 -70
  295. package/dist/scaffolds/notis-random/src/mock-runtime.ts +0 -129
  296. package/dist/scaffolds/notis-random/tailwind.config.ts +0 -50
  297. package/dist/scaffolds/notis-random/tsconfig.json +0 -23
  298. package/dist/scaffolds/notis-random/vite.config.ts +0 -11
  299. package/dist/scaffolds.json +0 -49
@@ -1,23 +0,0 @@
1
- {
2
- "compilerOptions": {
3
- "target": "ES2017",
4
- "lib": ["dom", "dom.iterable", "esnext"],
5
- "allowJs": true,
6
- "skipLibCheck": true,
7
- "strict": true,
8
- "noEmit": true,
9
- "esModuleInterop": true,
10
- "module": "esnext",
11
- "moduleResolution": "bundler",
12
- "preserveSymlinks": true,
13
- "resolveJsonModule": true,
14
- "isolatedModules": true,
15
- "jsx": "react-jsx",
16
- "types": ["vite/client", "node"],
17
- "paths": {
18
- "@/*": ["./*"]
19
- }
20
- },
21
- "include": ["**/*.ts", "**/*.tsx"],
22
- "exclude": ["node_modules"]
23
- }
@@ -1,10 +0,0 @@
1
- import { notisViteConfig } from '@notis/sdk/vite';
2
- import react from '@vitejs/plugin-react';
3
- import appConfig from './notis.config';
4
-
5
- const config = notisViteConfig(appConfig);
6
-
7
- export default {
8
- ...config,
9
- plugins: [react(), ...(config.plugins || [])],
10
- };
@@ -1,15 +0,0 @@
1
- # Random Number Generator Changelog
2
-
3
- ## [Reliable Range Editing] - 2026-07-29
4
-
5
- - Keeps empty and negative range drafts intact until they form a valid number.
6
-
7
- ## [Generator modes and history] - 2026-07-29
8
-
9
- - Added integer, decimal, and d4–d20 dice modes with live bounds validation.
10
- - Added a complete roll history with reliable saving and in-app navigation.
11
- - Refreshed the generator with native Notis controls and light and dark Store media.
12
-
13
- ## [Initial Release] - 2026-04-23
14
-
15
- - Generated random numbers with configurable bounds and saved recent rolls.
@@ -1,33 +0,0 @@
1
- # Random Number Generator
2
-
3
- A simple, well-designed generator that lets you roll integers, decimals, or dice and keeps a history of every result in a Notis database.
4
-
5
- ## Manifest
6
-
7
- - **Slug**: `notis-random`
8
- - **Database**: `rolls` — each roll persists as one row with `Value`, `Mode`, `Min`, `Max`, and `Rolled At`.
9
- - **Routes**: `/` (Generator) and `/history` (History, renders the `rolls` database as a flat collection).
10
-
11
- ## Database setup
12
-
13
- `notis.config.ts` only references the `rolls` slug. It does not create the database schema automatically.
14
-
15
- Provision the native schema before testing fresh installs:
16
-
17
- ```bash
18
- notis db upsert --operation update --database-id <rolls-db-id> --properties '[
19
- {"name":"Value","type":"number","action":"add"},
20
- {"name":"Mode","type":"select","action":"add","config":{"options":[
21
- {"name":"Integer","color":"blue"},
22
- {"name":"Decimal","color":"purple"},
23
- {"name":"Dice","color":"orange"}
24
- ]}},
25
- {"name":"Min","type":"number","action":"add"},
26
- {"name":"Max","type":"number","action":"add"},
27
- {"name":"Rolled At","type":"date","action":"add"}
28
- ]'
29
- ```
30
-
31
- ## Properties
32
-
33
- _None yet._ Once `app.properties` lands in the SDK, this app will declare `default_min`, `default_max`, and `default_mode` at install time.
@@ -1,11 +0,0 @@
1
- @tailwind base;
2
- @tailwind components;
3
- @tailwind utilities;
4
-
5
- .notis-random-shell {
6
- /* Portal already provides background / foreground tokens via @notis/sdk styles.
7
- This shell just enforces generous padding and centers content. */
8
- padding: clamp(1rem, 4vw, 2.5rem);
9
- max-width: 960px;
10
- margin-inline: auto;
11
- }
@@ -1,67 +0,0 @@
1
- 'use client';
2
-
3
- import { useMemo } from 'react';
4
- import { DiceFiveIcon as Dices, ClockCounterClockwiseIcon as History, HashIcon as Hash, PercentIcon as Percent } from '@phosphor-icons/react';
5
- import { Card } from '@/components/ui/card';
6
- import { formatNumber, relativeTime } from '@/lib/utils';
7
- import type { Mode } from '@/lib/rng';
8
- import { normalizeRollRecord, sortRollRecordsDesc } from '@/lib/roll-record';
9
- import { useRollDocuments } from '@/lib/notis-tools';
10
-
11
- const MODE_ICONS: Record<Mode, typeof Hash> = {
12
- integer: Hash,
13
- decimal: Percent,
14
- dice: Dices,
15
- };
16
-
17
- export default function HistoryPage() {
18
- const { documents, loading } = useRollDocuments(100, true);
19
-
20
- const rows = useMemo(
21
- () => documents
22
- .map(normalizeRollRecord)
23
- .sort(sortRollRecordsDesc),
24
- [documents],
25
- );
26
-
27
- return (
28
- <main data-store-screenshot="history" className="notis-random-shell space-y-6">
29
- <header className="flex items-center gap-2 text-sm text-muted-foreground">
30
- <History className="h-4 w-4" strokeWidth={1.5} />
31
- <span>Roll history</span>
32
- </header>
33
- <h1 className="text-2xl font-semibold tracking-tight text-foreground">
34
- {rows.length} {rows.length === 1 ? 'roll' : 'rolls'}
35
- </h1>
36
-
37
- {loading && rows.length === 0 ? (
38
- <p className="text-sm text-muted-foreground">Loading…</p>
39
- ) : rows.length === 0 ? (
40
- <div className="rounded-md border border-dashed border-border px-4 py-12 text-center text-sm text-muted-foreground">
41
- Nothing rolled yet. Head back to the generator and press Generate.
42
- </div>
43
- ) : (
44
- <Card className="divide-y divide-border">
45
- {rows.map((row) => {
46
- const Icon = MODE_ICONS[row.mode] ?? Hash;
47
- return (
48
- <div key={row.id} className="flex items-center gap-4 px-5 py-3.5">
49
- <Icon className="h-4 w-4 text-muted-foreground shrink-0" strokeWidth={1.5} />
50
- <span className="font-mono text-lg tabular-nums text-foreground">{formatNumber(row.value)}</span>
51
- <div className="flex-1 min-w-0 text-xs text-muted-foreground">
52
- {row.min != null && row.max != null ? (
53
- <span className="font-mono">[{formatNumber(row.min)}, {formatNumber(row.max)}]</span>
54
- ) : (
55
- <span>Legacy roll</span>
56
- )}
57
- {' · '}{row.mode}
58
- </div>
59
- <span className="text-xs text-muted-foreground shrink-0">{relativeTime(row.at)}</span>
60
- </div>
61
- );
62
- })}
63
- </Card>
64
- )}
65
- </main>
66
- );
67
- }
@@ -1,7 +0,0 @@
1
- import type { ReactNode } from 'react';
2
- import '@notis/sdk/styles.css';
3
- import './globals.css';
4
-
5
- export default function AppShell({ children }: { children: ReactNode }) {
6
- return children;
7
- }
@@ -1,289 +0,0 @@
1
- 'use client';
2
-
3
- import { useCallback, useMemo, useState } from 'react';
4
- import { useNotis, useNotisNavigation } from '@notis/sdk';
5
- import { DiceFiveIcon as Dices, SparkleIcon as Sparkles, ClockCounterClockwiseIcon as History, ArrowRightIcon as ArrowRight, HashIcon as Hash, PercentIcon as Percent, InfinityIcon, ArrowClockwiseIcon as RefreshCw, WarningCircleIcon as WarningCircle } from '@phosphor-icons/react';
6
- import { Button } from '@/components/ui/button';
7
- import { Card } from '@/components/ui/card';
8
- import { Input } from '@/components/ui/input';
9
- import { cn, formatNumber, relativeTime } from '@/lib/utils';
10
- import { DICE_SIDES, DEFAULT_DICE_SIDES, type DiceSides, type Mode, type Roll, checkBounds, parseBoundDraft, roll } from '@/lib/rng';
11
- import { normalizeRollRecord, sortRollRecordsDesc } from '@/lib/roll-record';
12
- import { usePersistRoll, useRollDocuments } from '@/lib/notis-tools';
13
-
14
- const MODES: Array<{ id: Mode; label: string; icon: typeof Hash; hint: string }> = [
15
- { id: 'integer', label: 'Integer', icon: Hash, hint: 'Whole numbers only' },
16
- { id: 'decimal', label: 'Decimal', icon: Percent, hint: 'Continuous range' },
17
- { id: 'dice', label: 'Dice', icon: Dices, hint: 'Standard polyhedral dice' },
18
- ];
19
-
20
- export default function HomePage() {
21
- const { app, ready } = useNotis();
22
- const nav = useNotisNavigation();
23
- const { documents, loading, refetch } = useRollDocuments(5);
24
- const { persist: persistRoll } = usePersistRoll();
25
-
26
- const [mode, setMode] = useState<Mode>('integer');
27
- const [minDraft, setMinDraft] = useState('1');
28
- const [maxDraft, setMaxDraft] = useState('100');
29
- const [sides, setSides] = useState<DiceSides>(DEFAULT_DICE_SIDES);
30
- const [current, setCurrent] = useState<Roll | null>(null);
31
- const [rolling, setRolling] = useState(false);
32
- const [saveError, setSaveError] = useState<string | null>(null);
33
-
34
- const recent = useMemo(
35
- () => documents
36
- .map(normalizeRollRecord)
37
- .sort(sortRollRecordsDesc)
38
- .slice(0, 5),
39
- [documents],
40
- );
41
-
42
- // Dice mode draws from 1..sides; the manual range inputs drive the other modes.
43
- const bounds = useMemo(
44
- () => (
45
- mode === 'dice'
46
- ? { min: 1, max: sides }
47
- : {
48
- min: parseBoundDraft(minDraft),
49
- max: parseBoundDraft(maxDraft),
50
- }
51
- ),
52
- [mode, sides, minDraft, maxDraft],
53
- );
54
- const check = useMemo(
55
- () => checkBounds(bounds.min, bounds.max, mode),
56
- [bounds.min, bounds.max, mode],
57
- );
58
-
59
- const generate = useCallback(async () => {
60
- if (rolling || !check.ok) return;
61
- setRolling(true);
62
- setSaveError(null);
63
- try {
64
- // roll() throws on unusable bounds, and persist() can fail on the network.
65
- // Both have to leave `rolling` false or the button would stay stuck.
66
- const next = roll(bounds.min, bounds.max, mode);
67
- setCurrent(next);
68
- await persistRoll(next);
69
- refetch();
70
- } catch (err) {
71
- setSaveError(err instanceof Error ? err.message : 'Could not save this roll.');
72
- } finally {
73
- setRolling(false);
74
- }
75
- }, [rolling, check.ok, bounds.min, bounds.max, mode, persistRoll, refetch]);
76
-
77
- return (
78
- <main data-store-screenshot="generator" className="notis-random-shell space-y-6">
79
- <header className="flex items-start justify-between gap-6">
80
- <div className="space-y-1.5">
81
- <div className="flex items-center gap-2 text-sm text-muted-foreground">
82
- <Sparkles className="h-3.5 w-3.5" />
83
- <span>{ready ? app?.name : 'Loading…'}</span>
84
- </div>
85
- <h1 className="text-2xl font-semibold tracking-tight text-foreground">Generator</h1>
86
- <p className="text-sm text-muted-foreground max-w-md">
87
- Pick a mode, set the range, and press generate. Every roll is saved to the History view.
88
- </p>
89
- </div>
90
- <Button
91
- type="button"
92
- variant="outline"
93
- size="sm"
94
- onClick={() => refetch()}
95
- className="gap-2 border-border text-muted-foreground hover:text-foreground"
96
- >
97
- <RefreshCw className={cn('h-3.5 w-3.5', loading && 'animate-spin')} />
98
- Refresh
99
- </Button>
100
- </header>
101
-
102
- {/* The dial and the controls sit side by side so the whole generator —
103
- result, mode, range, and recent rolls — stays above the fold. */}
104
- <section className="grid gap-6 lg:grid-cols-[1.05fr_1fr]">
105
- <Card className="flex flex-col items-center justify-center gap-5 rounded-2xl p-6">
106
- <div
107
- className={cn(
108
- 'flex items-center justify-center rounded-full border border-border bg-background',
109
- 'h-40 w-40 transition-transform',
110
- rolling && 'animate-pulse',
111
- )}
112
- >
113
- {current ? (
114
- <span className="font-mono text-5xl font-semibold tabular-nums text-foreground">
115
- {formatNumber(current.value)}
116
- </span>
117
- ) : (
118
- <InfinityIcon className="h-10 w-10 text-muted-foreground" strokeWidth={1.2} />
119
- )}
120
- </div>
121
- <Button
122
- type="button"
123
- size="lg"
124
- data-action="generate"
125
- onClick={generate}
126
- disabled={rolling || !check.ok}
127
- className="gap-2 rounded-full px-6"
128
- >
129
- <Dices className="h-4 w-4" />
130
- {rolling ? 'Rolling…' : current ? 'Roll again' : 'Generate'}
131
- </Button>
132
- {check.issue ? (
133
- <p className="flex items-center gap-1.5 text-xs text-destructive">
134
- <WarningCircle className="h-3.5 w-3.5 shrink-0" />
135
- {check.issue.message}
136
- </p>
137
- ) : current ? (
138
- <p className="text-xs text-muted-foreground">
139
- <span className="font-mono">[{formatNumber(current.min)}, {formatNumber(current.max)}]</span>
140
- {' · '}{current.mode}
141
- </p>
142
- ) : null}
143
- {saveError && (
144
- <p className="flex items-center gap-1.5 text-xs text-destructive">
145
- <WarningCircle className="h-3.5 w-3.5 shrink-0" />
146
- {saveError}
147
- </p>
148
- )}
149
- </Card>
150
-
151
- <div className="grid gap-4 sm:grid-cols-2 lg:grid-cols-1">
152
- <Card className="p-5">
153
- <h2 className="mb-3 text-sm font-medium text-foreground">Mode</h2>
154
- <div className="grid gap-2">
155
- {MODES.map(({ id, label, icon: Icon, hint }) => (
156
- <Button
157
- key={id}
158
- type="button"
159
- variant="outline"
160
- data-mode={id}
161
- onClick={() => setMode(id)}
162
- className={cn(
163
- 'h-auto w-full justify-start gap-3 px-3 py-2.5 text-left whitespace-normal',
164
- mode === id
165
- ? 'border-foreground bg-accent text-accent-foreground'
166
- : 'border-border hover:bg-accent/50',
167
- )}
168
- >
169
- <Icon className="h-4 w-4 shrink-0" strokeWidth={1.5} />
170
- <div className="flex-1 min-w-0">
171
- <div className="text-sm font-medium">{label}</div>
172
- <div className="text-xs text-muted-foreground">{hint}</div>
173
- </div>
174
- </Button>
175
- ))}
176
- </div>
177
- </Card>
178
-
179
- <Card className="space-y-4 p-5">
180
- <h2 className="text-sm font-medium text-foreground">
181
- {mode === 'dice' ? 'Die' : 'Range'}
182
- </h2>
183
- {mode === 'dice' ? (
184
- <>
185
- <div className="flex flex-wrap gap-2">
186
- {DICE_SIDES.map((n) => (
187
- <Button
188
- key={n}
189
- type="button"
190
- variant="outline"
191
- data-die={n}
192
- onClick={() => setSides(n)}
193
- className={cn(
194
- 'h-10 min-w-[3.25rem] px-3 font-mono',
195
- sides === n
196
- ? 'border-foreground bg-accent text-accent-foreground'
197
- : 'border-border hover:bg-accent/50',
198
- )}
199
- >
200
- d{n}
201
- </Button>
202
- ))}
203
- </div>
204
- <p className="text-xs text-muted-foreground">
205
- Rolls a whole number from 1 to {sides}, each equally likely.
206
- </p>
207
- </>
208
- ) : (
209
- <>
210
- <div className="grid grid-cols-2 gap-3">
211
- <RangeInput label="Minimum" name="min" value={minDraft} onChange={setMinDraft} />
212
- <RangeInput label="Maximum" name="max" value={maxDraft} onChange={setMaxDraft} />
213
- </div>
214
- <p className="text-xs text-muted-foreground">
215
- {mode === 'decimal'
216
- ? 'Decimal draws include the minimum but never reach the maximum.'
217
- : 'Integer draws include both ends of the range.'}
218
- </p>
219
- </>
220
- )}
221
- </Card>
222
- </div>
223
- </section>
224
-
225
- <Card className="p-5">
226
- <header className="mb-4 flex items-center justify-between gap-3">
227
- <h2 className="flex items-center gap-2 text-sm font-medium text-foreground">
228
- <History className="h-4 w-4 text-muted-foreground" strokeWidth={1.5} />
229
- Recent rolls
230
- </h2>
231
- <Button
232
- type="button"
233
- variant="ghost"
234
- size="sm"
235
- onClick={() => nav.toRoute('/history')}
236
- className="h-auto gap-1 px-2 py-1 text-xs text-muted-foreground hover:text-foreground"
237
- >
238
- View all <ArrowRight className="h-3 w-3" />
239
- </Button>
240
- </header>
241
- {loading && recent.length === 0 ? (
242
- <p className="text-sm text-muted-foreground">Loading…</p>
243
- ) : recent.length === 0 ? (
244
- <div className="rounded-md border border-dashed border-border px-4 py-8 text-center text-sm text-muted-foreground">
245
- Nothing rolled yet. Press Generate to see history here.
246
- </div>
247
- ) : (
248
- <ul className="divide-y divide-border">
249
- {recent.map((r) => (
250
- <li key={r.id} className="flex items-center justify-between py-2.5">
251
- <div className="flex items-center gap-3">
252
- <span className="font-mono text-lg tabular-nums text-foreground">{formatNumber(r.value)}</span>
253
- <span className="text-xs text-muted-foreground">{r.mode}</span>
254
- </div>
255
- <span className="text-xs text-muted-foreground">{relativeTime(r.at)}</span>
256
- </li>
257
- ))}
258
- </ul>
259
- )}
260
- </Card>
261
- </main>
262
- );
263
- }
264
-
265
- function RangeInput({
266
- label,
267
- name,
268
- value,
269
- onChange,
270
- }: {
271
- label: string;
272
- name: string;
273
- value: string;
274
- onChange: (v: string) => void;
275
- }) {
276
- return (
277
- <label className="block space-y-1.5">
278
- <span className="text-xs font-medium text-muted-foreground">{label}</span>
279
- <Input
280
- type="text"
281
- inputMode="decimal"
282
- data-bound={name}
283
- value={value}
284
- onChange={(e) => onChange(e.target.value)}
285
- className="border-border font-mono"
286
- />
287
- </label>
288
- );
289
- }
@@ -1,50 +0,0 @@
1
- import * as React from 'react';
2
- import { Slot } from '@radix-ui/react-slot';
3
- import { cva, type VariantProps } from 'class-variance-authority';
4
-
5
- import { cn } from '@/lib/utils';
6
-
7
- const buttonVariants = cva(
8
- 'inline-flex items-center justify-center whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50',
9
- {
10
- variants: {
11
- variant: {
12
- default: 'bg-foreground text-background hover:bg-foreground/90',
13
- outline: 'border border-input bg-background hover:bg-accent hover:text-accent-foreground',
14
- ghost: 'hover:bg-accent hover:text-accent-foreground',
15
- },
16
- size: {
17
- default: 'h-10 px-4 py-2',
18
- sm: 'h-9 rounded-md px-3',
19
- lg: 'h-11 rounded-md px-8',
20
- icon: 'h-10 w-10',
21
- },
22
- },
23
- defaultVariants: {
24
- variant: 'default',
25
- size: 'default',
26
- },
27
- },
28
- );
29
-
30
- export interface ButtonProps
31
- extends React.ButtonHTMLAttributes<HTMLButtonElement>,
32
- VariantProps<typeof buttonVariants> {
33
- asChild?: boolean;
34
- }
35
-
36
- const Button = React.forwardRef<HTMLButtonElement, ButtonProps>(
37
- ({ className, variant, size, asChild = false, ...props }, ref) => {
38
- const Comp = asChild ? Slot : 'button';
39
- return (
40
- <Comp
41
- className={cn(buttonVariants({ variant, size, className }))}
42
- ref={ref}
43
- {...props}
44
- />
45
- );
46
- },
47
- );
48
- Button.displayName = 'Button';
49
-
50
- export { Button, buttonVariants };
@@ -1,16 +0,0 @@
1
- import * as React from 'react';
2
-
3
- import { cn } from '@/lib/utils';
4
-
5
- const Card = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(
6
- ({ className, ...props }, ref) => (
7
- <div
8
- ref={ref}
9
- className={cn('rounded-xl border border-border bg-card text-card-foreground', className)}
10
- {...props}
11
- />
12
- ),
13
- );
14
- Card.displayName = 'Card';
15
-
16
- export { Card };
@@ -1,23 +0,0 @@
1
- import * as React from 'react';
2
-
3
- import { cn } from '@/lib/utils';
4
-
5
- const Input = React.forwardRef<HTMLInputElement, React.ComponentProps<'input'>>(
6
- ({ className, type, ...props }, ref) => (
7
- <input
8
- type={type}
9
- className={cn(
10
- 'flex h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-sm text-foreground ring-offset-background',
11
- 'file:border-0 file:bg-transparent file:text-sm file:font-medium',
12
- 'placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2',
13
- 'disabled:cursor-not-allowed disabled:opacity-50',
14
- className,
15
- )}
16
- ref={ref}
17
- {...props}
18
- />
19
- ),
20
- );
21
- Input.displayName = 'Input';
22
-
23
- export { Input };
@@ -1,20 +0,0 @@
1
- {
2
- "$schema": "https://ui.shadcn.com/schema.json",
3
- "style": "new-york",
4
- "rsc": false,
5
- "tsx": true,
6
- "tailwind": {
7
- "config": "tailwind.config.ts",
8
- "css": "app/globals.css",
9
- "baseColor": "zinc",
10
- "cssVariables": true,
11
- "prefix": ""
12
- },
13
- "aliases": {
14
- "components": "@/components",
15
- "utils": "@/lib/utils",
16
- "ui": "@/components/ui",
17
- "lib": "@/lib",
18
- "hooks": "@/hooks"
19
- }
20
- }
@@ -1,12 +0,0 @@
1
- <!doctype html>
2
- <html lang="en">
3
- <head>
4
- <meta charset="UTF-8" />
5
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
- <title>Random Number Generator (dev preview)</title>
7
- </head>
8
- <body>
9
- <div id="root"></div>
10
- <script type="module" src="/src/dev-main.tsx"></script>
11
- </body>
12
- </html>