@notis_ai/cli 0.2.13 → 0.2.15
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.
- package/README.md +125 -21
- package/dist/agent-hooks/notis-agent-hook.mjs +19750 -0
- package/{skills → dist/base-skills}/notis-apps/SKILL.md +93 -58
- package/{skills → dist/base-skills}/notis-cli/SKILL.md +9 -9
- package/dist/base-skills/notis-query/SKILL.md +705 -0
- package/dist/skill-sync/index.js +1528 -0
- package/dist/skill-sync/index.js.map +7 -0
- package/package.json +5 -2
- package/skills/notis-apps/cli.md +44 -18
- package/skills/notis-cli/AGENT_INSTRUCTIONS.md +39 -0
- package/skills/notis-onboarding/BRIEF.md +16 -0
- package/src/agent-hook-entry.js +5 -0
- package/src/cli.js +23 -14
- package/src/command-specs/agents.js +392 -0
- package/src/command-specs/apps.js +1090 -418
- package/src/command-specs/auth.js +63 -10
- package/src/command-specs/handover.js +374 -0
- package/src/command-specs/index.js +9 -0
- package/src/command-specs/onboarding.js +69 -5
- package/src/command-specs/skills.js +56 -0
- package/src/command-specs/tools.js +6 -0
- package/src/runtime/agent-memory-state.js +126 -0
- package/src/runtime/agent-setup.js +383 -0
- package/src/runtime/app-dev-consumers.js +154 -0
- package/src/runtime/app-dev-host-lock.js +80 -0
- package/src/runtime/app-dev-roots.js +284 -0
- package/src/runtime/app-dev-server.js +229 -30
- package/src/runtime/app-dev-sessions.js +105 -145
- package/src/runtime/app-platform.js +1499 -161
- package/src/runtime/app-registry-scaffolds.js +367 -0
- package/src/runtime/base-skills.d.ts +20 -0
- package/src/runtime/base-skills.js +167 -0
- package/src/runtime/delegated-context.js +68 -0
- package/src/runtime/git.js +233 -0
- package/src/runtime/login-listener.js +15 -0
- package/src/runtime/oauth.js +1506 -141
- package/src/runtime/output.js +7 -0
- package/src/runtime/ports.js +16 -0
- package/src/runtime/profiles.js +0 -5
- package/src/runtime/skill-sync/cloud-client.ts +96 -0
- package/src/runtime/skill-sync/index.ts +644 -0
- package/src/runtime/skill-sync/local-scanner.ts +1046 -0
- package/src/runtime/skill-sync/symlink-manager.ts +383 -0
- package/src/runtime/skill-sync/sync-plan.ts +22 -0
- package/src/runtime/skill-sync/types.ts +103 -0
- package/src/runtime/skill-sync/write-cloud-skill.ts +50 -0
- package/src/runtime/store-screenshot.js +6 -1
- package/src/runtime/sync-skills.d.ts +37 -0
- package/src/runtime/sync-skills.js +215 -0
- package/src/runtime/transport.js +19 -2
- package/template/.harness/index.html.tmpl +116 -47
- package/template/app/layout.tsx +5 -1
- package/template/notis.config.ts +1 -0
- package/template/packages/sdk/package.json +2 -1
- package/template/packages/sdk/src/components/DocumentEditor.tsx +13 -3
- package/template/packages/sdk/src/components/MarkdownEditor.tsx +121 -0
- package/template/packages/sdk/src/components/MultiSelectActionBar.tsx +37 -119
- package/template/packages/sdk/src/components/MultiSelectCheckbox.tsx +5 -1
- package/template/packages/sdk/src/components/MultiSelectDragOverlay.tsx +1 -1
- package/template/packages/sdk/src/components/NotisSelectionBoundary.tsx +55 -0
- package/template/packages/sdk/src/components/ShortcutHints.tsx +56 -0
- package/template/packages/sdk/src/config.ts +71 -0
- package/template/packages/sdk/src/documents.ts +28 -1
- package/template/packages/sdk/src/hooks/useActiveResource.ts +19 -0
- package/template/packages/sdk/src/hooks/useCloudComputer.ts +97 -0
- package/template/packages/sdk/src/hooks/useCollectionInteractions.ts +709 -0
- package/template/packages/sdk/src/hooks/useDatabaseSubscription.ts +76 -0
- package/template/packages/sdk/src/hooks/useHandover.ts +78 -0
- package/template/packages/sdk/src/hooks/useMultiSelect.ts +44 -482
- package/template/packages/sdk/src/hooks/useTool.ts +5 -4
- package/template/packages/sdk/src/index.ts +64 -2
- package/template/packages/sdk/src/interactions/actions.ts +46 -0
- package/template/packages/sdk/src/interactions/shortcuts.tsx +628 -0
- package/template/packages/sdk/src/interactions.ts +41 -0
- package/template/packages/sdk/src/provider.tsx +2 -1
- package/template/packages/sdk/src/runtime.ts +219 -3
- package/dist/scaffolds/notis-database/CHANGELOG.md +0 -5
- package/dist/scaffolds/notis-database/app/globals.css +0 -44
- package/dist/scaffolds/notis-database/app/layout.tsx +0 -6
- package/dist/scaffolds/notis-database/app/page.tsx +0 -1088
- package/dist/scaffolds/notis-database/components/ui/badge.tsx +0 -28
- package/dist/scaffolds/notis-database/components/ui/button.tsx +0 -53
- package/dist/scaffolds/notis-database/components/ui/card.tsx +0 -56
- package/dist/scaffolds/notis-database/components/ui/table.tsx +0 -120
- package/dist/scaffolds/notis-database/components.json +0 -20
- package/dist/scaffolds/notis-database/index.html +0 -12
- package/dist/scaffolds/notis-database/lib/types.ts +0 -132
- package/dist/scaffolds/notis-database/lib/utils.ts +0 -6
- package/dist/scaffolds/notis-database/metadata/screenshot-1.png +0 -0
- package/dist/scaffolds/notis-database/metadata/screenshot-2.png +0 -0
- package/dist/scaffolds/notis-database/metadata/screenshot-3.png +0 -0
- package/dist/scaffolds/notis-database/metadata/screenshot-4.png +0 -0
- package/dist/scaffolds/notis-database/metadata/screenshot-5.png +0 -0
- package/dist/scaffolds/notis-database/metadata/screenshot-fixtures.json +0 -1839
- package/dist/scaffolds/notis-database/notis.config.ts +0 -73
- package/dist/scaffolds/notis-database/package-lock.json +0 -3935
- package/dist/scaffolds/notis-database/package.json +0 -32
- package/dist/scaffolds/notis-database/packages/sdk/package.json +0 -36
- package/dist/scaffolds/notis-database/packages/sdk/src/components/DocumentEditor.tsx +0 -93
- package/dist/scaffolds/notis-database/packages/sdk/src/components/Markdown.tsx +0 -60
- package/dist/scaffolds/notis-database/packages/sdk/src/components/MultiSelectActionBar.tsx +0 -278
- package/dist/scaffolds/notis-database/packages/sdk/src/components/MultiSelectCheckbox.tsx +0 -91
- package/dist/scaffolds/notis-database/packages/sdk/src/components/MultiSelectDragOverlay.tsx +0 -39
- package/dist/scaffolds/notis-database/packages/sdk/src/config.ts +0 -196
- package/dist/scaffolds/notis-database/packages/sdk/src/documents.ts +0 -229
- package/dist/scaffolds/notis-database/packages/sdk/src/hooks/useBackend.ts +0 -41
- package/dist/scaffolds/notis-database/packages/sdk/src/hooks/useDatabaseSchema.ts +0 -85
- package/dist/scaffolds/notis-database/packages/sdk/src/hooks/useDocument.ts +0 -78
- package/dist/scaffolds/notis-database/packages/sdk/src/hooks/useDocuments.ts +0 -121
- package/dist/scaffolds/notis-database/packages/sdk/src/hooks/useMultiSelect.ts +0 -539
- package/dist/scaffolds/notis-database/packages/sdk/src/hooks/useNotis.ts +0 -34
- package/dist/scaffolds/notis-database/packages/sdk/src/hooks/useNotisNavigation.ts +0 -49
- package/dist/scaffolds/notis-database/packages/sdk/src/hooks/useTool.ts +0 -64
- package/dist/scaffolds/notis-database/packages/sdk/src/hooks/useTools.ts +0 -56
- package/dist/scaffolds/notis-database/packages/sdk/src/hooks/useTopBarSearch.ts +0 -73
- package/dist/scaffolds/notis-database/packages/sdk/src/hooks/useUpsertDocument.ts +0 -95
- package/dist/scaffolds/notis-database/packages/sdk/src/index.ts +0 -83
- package/dist/scaffolds/notis-database/packages/sdk/src/provider.tsx +0 -43
- package/dist/scaffolds/notis-database/packages/sdk/src/runtime.ts +0 -220
- package/dist/scaffolds/notis-database/packages/sdk/src/styles.css +0 -186
- package/dist/scaffolds/notis-database/packages/sdk/src/ui.ts +0 -15
- package/dist/scaffolds/notis-database/packages/sdk/src/vite.ts +0 -56
- package/dist/scaffolds/notis-database/packages/sdk/tsconfig.json +0 -15
- package/dist/scaffolds/notis-database/postcss.config.mjs +0 -8
- package/dist/scaffolds/notis-database/src/dev-main.tsx +0 -23
- package/dist/scaffolds/notis-database/src/mock-runtime.ts +0 -561
- package/dist/scaffolds/notis-database/tailwind.config.ts +0 -59
- package/dist/scaffolds/notis-database/tsconfig.json +0 -23
- package/dist/scaffolds/notis-database/vite.config.ts +0 -22
- package/dist/scaffolds/notis-journal/CHANGELOG.md +0 -29
- package/dist/scaffolds/notis-journal/app/globals.css +0 -37
- package/dist/scaffolds/notis-journal/app/insights/page.tsx +0 -513
- package/dist/scaffolds/notis-journal/app/journal-core.tsx +0 -362
- package/dist/scaffolds/notis-journal/app/journal-ui.tsx +0 -337
- package/dist/scaffolds/notis-journal/app/layout.tsx +0 -6
- package/dist/scaffolds/notis-journal/app/page.tsx +0 -486
- package/dist/scaffolds/notis-journal/components/ui/badge.tsx +0 -28
- package/dist/scaffolds/notis-journal/components/ui/button.tsx +0 -53
- package/dist/scaffolds/notis-journal/components/ui/card.tsx +0 -56
- package/dist/scaffolds/notis-journal/components.json +0 -20
- package/dist/scaffolds/notis-journal/index.html +0 -12
- package/dist/scaffolds/notis-journal/lib/utils.ts +0 -6
- package/dist/scaffolds/notis-journal/metadata/screenshot-1.png +0 -0
- package/dist/scaffolds/notis-journal/metadata/screenshot-2.png +0 -0
- package/dist/scaffolds/notis-journal/metadata/screenshot-3.png +0 -0
- package/dist/scaffolds/notis-journal/metadata/screenshot-4.png +0 -0
- package/dist/scaffolds/notis-journal/metadata/screenshot-5.png +0 -0
- package/dist/scaffolds/notis-journal/metadata/screenshot-6.png +0 -0
- package/dist/scaffolds/notis-journal/metadata/screenshot-fixtures.json +0 -132
- package/dist/scaffolds/notis-journal/notis.config.ts +0 -93
- package/dist/scaffolds/notis-journal/package-lock.json +0 -4615
- package/dist/scaffolds/notis-journal/package.json +0 -34
- package/dist/scaffolds/notis-journal/packages/sdk/package.json +0 -36
- package/dist/scaffolds/notis-journal/packages/sdk/src/components/DocumentEditor.tsx +0 -93
- package/dist/scaffolds/notis-journal/packages/sdk/src/components/Markdown.tsx +0 -60
- package/dist/scaffolds/notis-journal/packages/sdk/src/components/MultiSelectActionBar.tsx +0 -278
- package/dist/scaffolds/notis-journal/packages/sdk/src/components/MultiSelectCheckbox.tsx +0 -91
- package/dist/scaffolds/notis-journal/packages/sdk/src/components/MultiSelectDragOverlay.tsx +0 -39
- package/dist/scaffolds/notis-journal/packages/sdk/src/config.ts +0 -196
- package/dist/scaffolds/notis-journal/packages/sdk/src/documents.ts +0 -229
- package/dist/scaffolds/notis-journal/packages/sdk/src/hooks/useBackend.ts +0 -41
- package/dist/scaffolds/notis-journal/packages/sdk/src/hooks/useDatabaseSchema.ts +0 -85
- package/dist/scaffolds/notis-journal/packages/sdk/src/hooks/useDocument.ts +0 -78
- package/dist/scaffolds/notis-journal/packages/sdk/src/hooks/useDocuments.ts +0 -121
- package/dist/scaffolds/notis-journal/packages/sdk/src/hooks/useMultiSelect.ts +0 -539
- package/dist/scaffolds/notis-journal/packages/sdk/src/hooks/useNotis.ts +0 -34
- package/dist/scaffolds/notis-journal/packages/sdk/src/hooks/useNotisNavigation.ts +0 -49
- package/dist/scaffolds/notis-journal/packages/sdk/src/hooks/useTool.ts +0 -64
- package/dist/scaffolds/notis-journal/packages/sdk/src/hooks/useTools.ts +0 -56
- package/dist/scaffolds/notis-journal/packages/sdk/src/hooks/useTopBarSearch.ts +0 -73
- package/dist/scaffolds/notis-journal/packages/sdk/src/hooks/useUpsertDocument.ts +0 -95
- package/dist/scaffolds/notis-journal/packages/sdk/src/index.ts +0 -83
- package/dist/scaffolds/notis-journal/packages/sdk/src/provider.tsx +0 -43
- package/dist/scaffolds/notis-journal/packages/sdk/src/runtime.ts +0 -220
- package/dist/scaffolds/notis-journal/packages/sdk/src/styles.css +0 -186
- package/dist/scaffolds/notis-journal/packages/sdk/src/ui.ts +0 -15
- package/dist/scaffolds/notis-journal/packages/sdk/src/vite.ts +0 -56
- package/dist/scaffolds/notis-journal/packages/sdk/tsconfig.json +0 -15
- package/dist/scaffolds/notis-journal/postcss.config.mjs +0 -8
- package/dist/scaffolds/notis-journal/skills/journal-onboarding/SKILL.md +0 -120
- package/dist/scaffolds/notis-journal/src/dev-main.tsx +0 -58
- package/dist/scaffolds/notis-journal/src/mock-runtime.ts +0 -197
- package/dist/scaffolds/notis-journal/tailwind.config.ts +0 -58
- package/dist/scaffolds/notis-journal/tsconfig.json +0 -23
- package/dist/scaffolds/notis-journal/vite.config.ts +0 -10
- package/dist/scaffolds/notis-notes/CHANGELOG.md +0 -5
- package/dist/scaffolds/notis-notes/app/globals.css +0 -3
- package/dist/scaffolds/notis-notes/app/layout.tsx +0 -6
- package/dist/scaffolds/notis-notes/app/page.tsx +0 -1943
- package/dist/scaffolds/notis-notes/app/phosphor-icons.ts +0 -596
- package/dist/scaffolds/notis-notes/components/ui/badge.tsx +0 -28
- package/dist/scaffolds/notis-notes/components/ui/button.tsx +0 -53
- package/dist/scaffolds/notis-notes/components/ui/card.tsx +0 -56
- package/dist/scaffolds/notis-notes/components.json +0 -20
- package/dist/scaffolds/notis-notes/lib/utils.ts +0 -6
- package/dist/scaffolds/notis-notes/lib/visible-properties.ts +0 -144
- package/dist/scaffolds/notis-notes/metadata/screenshot-1.png +0 -0
- package/dist/scaffolds/notis-notes/metadata/screenshot-2.png +0 -0
- package/dist/scaffolds/notis-notes/metadata/screenshot-3.png +0 -0
- package/dist/scaffolds/notis-notes/metadata/screenshot-4.png +0 -0
- package/dist/scaffolds/notis-notes/metadata/screenshot-5.png +0 -0
- package/dist/scaffolds/notis-notes/metadata/screenshot-fixtures.json +0 -752
- package/dist/scaffolds/notis-notes/notis.config.ts +0 -80
- package/dist/scaffolds/notis-notes/package-lock.json +0 -4636
- package/dist/scaffolds/notis-notes/package.json +0 -35
- package/dist/scaffolds/notis-notes/packages/sdk/package.json +0 -36
- package/dist/scaffolds/notis-notes/packages/sdk/src/components/DocumentEditor.tsx +0 -93
- package/dist/scaffolds/notis-notes/packages/sdk/src/components/Markdown.tsx +0 -60
- package/dist/scaffolds/notis-notes/packages/sdk/src/components/MultiSelectActionBar.tsx +0 -278
- package/dist/scaffolds/notis-notes/packages/sdk/src/components/MultiSelectCheckbox.tsx +0 -91
- package/dist/scaffolds/notis-notes/packages/sdk/src/components/MultiSelectDragOverlay.tsx +0 -39
- package/dist/scaffolds/notis-notes/packages/sdk/src/config.ts +0 -196
- package/dist/scaffolds/notis-notes/packages/sdk/src/documents.ts +0 -229
- package/dist/scaffolds/notis-notes/packages/sdk/src/hooks/useBackend.ts +0 -41
- package/dist/scaffolds/notis-notes/packages/sdk/src/hooks/useDatabaseSchema.ts +0 -85
- package/dist/scaffolds/notis-notes/packages/sdk/src/hooks/useDocument.ts +0 -78
- package/dist/scaffolds/notis-notes/packages/sdk/src/hooks/useDocuments.ts +0 -121
- package/dist/scaffolds/notis-notes/packages/sdk/src/hooks/useMultiSelect.ts +0 -539
- package/dist/scaffolds/notis-notes/packages/sdk/src/hooks/useNotis.ts +0 -34
- package/dist/scaffolds/notis-notes/packages/sdk/src/hooks/useNotisNavigation.ts +0 -49
- package/dist/scaffolds/notis-notes/packages/sdk/src/hooks/useTool.ts +0 -64
- package/dist/scaffolds/notis-notes/packages/sdk/src/hooks/useTools.ts +0 -56
- package/dist/scaffolds/notis-notes/packages/sdk/src/hooks/useTopBarSearch.ts +0 -73
- package/dist/scaffolds/notis-notes/packages/sdk/src/hooks/useUpsertDocument.ts +0 -95
- package/dist/scaffolds/notis-notes/packages/sdk/src/index.ts +0 -83
- package/dist/scaffolds/notis-notes/packages/sdk/src/provider.tsx +0 -43
- package/dist/scaffolds/notis-notes/packages/sdk/src/runtime.ts +0 -220
- package/dist/scaffolds/notis-notes/packages/sdk/src/styles.css +0 -186
- package/dist/scaffolds/notis-notes/packages/sdk/src/ui.ts +0 -15
- package/dist/scaffolds/notis-notes/packages/sdk/src/vite.ts +0 -56
- package/dist/scaffolds/notis-notes/packages/sdk/tsconfig.json +0 -15
- package/dist/scaffolds/notis-notes/postcss.config.mjs +0 -8
- package/dist/scaffolds/notis-notes/tailwind.config.ts +0 -58
- package/dist/scaffolds/notis-notes/tsconfig.json +0 -23
- package/dist/scaffolds/notis-notes/vite.config.ts +0 -10
- package/dist/scaffolds/notis-random/CHANGELOG.md +0 -15
- package/dist/scaffolds/notis-random/README.md +0 -33
- package/dist/scaffolds/notis-random/app/globals.css +0 -11
- package/dist/scaffolds/notis-random/app/history/page.tsx +0 -67
- package/dist/scaffolds/notis-random/app/layout.tsx +0 -7
- package/dist/scaffolds/notis-random/app/page.tsx +0 -289
- package/dist/scaffolds/notis-random/components/ui/button.tsx +0 -50
- package/dist/scaffolds/notis-random/components/ui/card.tsx +0 -16
- package/dist/scaffolds/notis-random/components/ui/input.tsx +0 -23
- package/dist/scaffolds/notis-random/components.json +0 -20
- package/dist/scaffolds/notis-random/index.html +0 -12
- package/dist/scaffolds/notis-random/lib/notis-tools.ts +0 -128
- package/dist/scaffolds/notis-random/lib/rng.ts +0 -202
- package/dist/scaffolds/notis-random/lib/roll-record.ts +0 -189
- package/dist/scaffolds/notis-random/lib/utils.ts +0 -25
- package/dist/scaffolds/notis-random/metadata/screenshot-1.png +0 -0
- package/dist/scaffolds/notis-random/metadata/screenshot-2.png +0 -0
- package/dist/scaffolds/notis-random/metadata/screenshot-3.png +0 -0
- package/dist/scaffolds/notis-random/metadata/screenshot-4.png +0 -0
- package/dist/scaffolds/notis-random/metadata/screenshot-5.png +0 -0
- package/dist/scaffolds/notis-random/metadata/screenshot-fixtures.json +0 -753
- package/dist/scaffolds/notis-random/notis.config.ts +0 -86
- package/dist/scaffolds/notis-random/package-lock.json +0 -4513
- package/dist/scaffolds/notis-random/package.json +0 -36
- package/dist/scaffolds/notis-random/packages/sdk/package.json +0 -36
- package/dist/scaffolds/notis-random/packages/sdk/src/components/DocumentEditor.tsx +0 -93
- package/dist/scaffolds/notis-random/packages/sdk/src/components/Markdown.tsx +0 -60
- package/dist/scaffolds/notis-random/packages/sdk/src/components/MultiSelectActionBar.tsx +0 -278
- package/dist/scaffolds/notis-random/packages/sdk/src/components/MultiSelectCheckbox.tsx +0 -91
- package/dist/scaffolds/notis-random/packages/sdk/src/components/MultiSelectDragOverlay.tsx +0 -39
- package/dist/scaffolds/notis-random/packages/sdk/src/config.ts +0 -196
- package/dist/scaffolds/notis-random/packages/sdk/src/documents.ts +0 -229
- package/dist/scaffolds/notis-random/packages/sdk/src/hooks/useBackend.ts +0 -41
- package/dist/scaffolds/notis-random/packages/sdk/src/hooks/useDatabaseSchema.ts +0 -85
- package/dist/scaffolds/notis-random/packages/sdk/src/hooks/useDocument.ts +0 -78
- package/dist/scaffolds/notis-random/packages/sdk/src/hooks/useDocuments.ts +0 -121
- package/dist/scaffolds/notis-random/packages/sdk/src/hooks/useMultiSelect.ts +0 -539
- package/dist/scaffolds/notis-random/packages/sdk/src/hooks/useNotis.ts +0 -34
- package/dist/scaffolds/notis-random/packages/sdk/src/hooks/useNotisNavigation.ts +0 -49
- package/dist/scaffolds/notis-random/packages/sdk/src/hooks/useTool.ts +0 -64
- package/dist/scaffolds/notis-random/packages/sdk/src/hooks/useTools.ts +0 -56
- package/dist/scaffolds/notis-random/packages/sdk/src/hooks/useTopBarSearch.ts +0 -73
- package/dist/scaffolds/notis-random/packages/sdk/src/hooks/useUpsertDocument.ts +0 -95
- package/dist/scaffolds/notis-random/packages/sdk/src/index.ts +0 -83
- package/dist/scaffolds/notis-random/packages/sdk/src/provider.tsx +0 -43
- package/dist/scaffolds/notis-random/packages/sdk/src/runtime.ts +0 -220
- package/dist/scaffolds/notis-random/packages/sdk/src/styles.css +0 -186
- package/dist/scaffolds/notis-random/packages/sdk/src/ui.ts +0 -15
- package/dist/scaffolds/notis-random/packages/sdk/src/vite.ts +0 -56
- package/dist/scaffolds/notis-random/packages/sdk/tsconfig.json +0 -15
- package/dist/scaffolds/notis-random/postcss.config.mjs +0 -6
- package/dist/scaffolds/notis-random/src/dev-main.tsx +0 -70
- package/dist/scaffolds/notis-random/src/mock-runtime.ts +0 -129
- package/dist/scaffolds/notis-random/tailwind.config.ts +0 -50
- package/dist/scaffolds/notis-random/tsconfig.json +0 -23
- package/dist/scaffolds/notis-random/vite.config.ts +0 -11
- package/dist/scaffolds.json +0 -49
- package/template/metadata/screenshot-1.png +0 -0
- package/template/metadata/screenshot-2.png +0 -0
- package/template/metadata/screenshot-3.png +0 -0
|
@@ -1,186 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Notis theme CSS variables.
|
|
3
|
-
*
|
|
4
|
-
* Import this in your app layout:
|
|
5
|
-
*
|
|
6
|
-
* import '@notis/sdk/styles.css';
|
|
7
|
-
*
|
|
8
|
-
* The portal injects the live Notis theme variables at render time.
|
|
9
|
-
*/
|
|
10
|
-
|
|
11
|
-
@tailwind base;
|
|
12
|
-
@tailwind components;
|
|
13
|
-
@tailwind utilities;
|
|
14
|
-
|
|
15
|
-
@layer base {
|
|
16
|
-
* {
|
|
17
|
-
@apply border-border;
|
|
18
|
-
}
|
|
19
|
-
[data-notis-app-root] {
|
|
20
|
-
color: hsl(var(--foreground));
|
|
21
|
-
display: block;
|
|
22
|
-
min-height: 100%;
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
@layer components {
|
|
27
|
-
.notis-app-shell {
|
|
28
|
-
@apply mx-auto w-full max-w-[var(--portal-page-max-width)] px-4 py-6 md:px-4 md:py-8;
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
.notis-app-surface {
|
|
32
|
-
@apply rounded-2xl border border-border bg-card text-card-foreground shadow-sm;
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
.notis-app-section {
|
|
36
|
-
@apply p-5 md:p-6;
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
/*
|
|
41
|
-
* Markdown value-type rendering (see the `Markdown` component). Plain CSS on
|
|
42
|
-
* theme variables so it works inside the portal shadow root and the dev
|
|
43
|
-
* harness without depending on the app's Tailwind content scan.
|
|
44
|
-
*/
|
|
45
|
-
.notis-markdown {
|
|
46
|
-
font-size: 14px;
|
|
47
|
-
line-height: 1.65;
|
|
48
|
-
color: hsl(var(--foreground));
|
|
49
|
-
overflow-wrap: break-word;
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
.notis-markdown--sm {
|
|
53
|
-
font-size: 13px;
|
|
54
|
-
line-height: 1.55;
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
.notis-markdown > :first-child {
|
|
58
|
-
margin-top: 0;
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
.notis-markdown > :last-child {
|
|
62
|
-
margin-bottom: 0;
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
.notis-markdown p {
|
|
66
|
-
margin: 0.625em 0;
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
.notis-markdown h1,
|
|
70
|
-
.notis-markdown h2,
|
|
71
|
-
.notis-markdown h3,
|
|
72
|
-
.notis-markdown h4,
|
|
73
|
-
.notis-markdown h5,
|
|
74
|
-
.notis-markdown h6 {
|
|
75
|
-
margin: 1.25em 0 0.5em;
|
|
76
|
-
font-weight: 650;
|
|
77
|
-
letter-spacing: -0.01em;
|
|
78
|
-
line-height: 1.3;
|
|
79
|
-
color: hsl(var(--foreground));
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
.notis-markdown h1 { font-size: 1.5em; }
|
|
83
|
-
.notis-markdown h2 { font-size: 1.25em; }
|
|
84
|
-
.notis-markdown h3 { font-size: 1.1em; }
|
|
85
|
-
.notis-markdown h4,
|
|
86
|
-
.notis-markdown h5,
|
|
87
|
-
.notis-markdown h6 { font-size: 1em; }
|
|
88
|
-
|
|
89
|
-
.notis-markdown ul,
|
|
90
|
-
.notis-markdown ol {
|
|
91
|
-
margin: 0.625em 0;
|
|
92
|
-
padding-left: 1.5em;
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
.notis-markdown ul { list-style-type: disc; }
|
|
96
|
-
.notis-markdown ol { list-style-type: decimal; }
|
|
97
|
-
|
|
98
|
-
.notis-markdown li {
|
|
99
|
-
margin: 0.25em 0;
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
.notis-markdown li > ul,
|
|
103
|
-
.notis-markdown li > ol {
|
|
104
|
-
margin: 0.25em 0;
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
.notis-markdown ul.contains-task-list {
|
|
108
|
-
list-style: none;
|
|
109
|
-
padding-left: 0.375em;
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
.notis-markdown li.task-list-item input[type='checkbox'] {
|
|
113
|
-
margin-right: 0.5em;
|
|
114
|
-
accent-color: hsl(var(--primary));
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
.notis-markdown blockquote {
|
|
118
|
-
margin: 0.75em 0;
|
|
119
|
-
padding: 0.125em 0 0.125em 0.875em;
|
|
120
|
-
border-left: 3px solid hsl(var(--border));
|
|
121
|
-
color: hsl(var(--muted-foreground));
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
.notis-markdown a {
|
|
125
|
-
color: hsl(var(--primary));
|
|
126
|
-
text-decoration: underline;
|
|
127
|
-
text-decoration-color: hsl(var(--primary) / 0.35);
|
|
128
|
-
text-underline-offset: 2px;
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
.notis-markdown a:hover {
|
|
132
|
-
text-decoration-color: hsl(var(--primary));
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
.notis-markdown code {
|
|
136
|
-
font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
|
|
137
|
-
font-size: 0.875em;
|
|
138
|
-
padding: 0.125em 0.375em;
|
|
139
|
-
border-radius: 0.25rem;
|
|
140
|
-
background: hsl(var(--muted));
|
|
141
|
-
color: hsl(var(--foreground));
|
|
142
|
-
}
|
|
143
|
-
|
|
144
|
-
.notis-markdown pre {
|
|
145
|
-
margin: 0.75em 0;
|
|
146
|
-
padding: 0.75em 1em;
|
|
147
|
-
border-radius: 0.5rem;
|
|
148
|
-
background: hsl(var(--muted));
|
|
149
|
-
overflow-x: auto;
|
|
150
|
-
}
|
|
151
|
-
|
|
152
|
-
.notis-markdown pre code {
|
|
153
|
-
padding: 0;
|
|
154
|
-
background: transparent;
|
|
155
|
-
font-size: 0.875em;
|
|
156
|
-
}
|
|
157
|
-
|
|
158
|
-
.notis-markdown hr {
|
|
159
|
-
margin: 1.25em 0;
|
|
160
|
-
border: 0;
|
|
161
|
-
border-top: 1px solid hsl(var(--border));
|
|
162
|
-
}
|
|
163
|
-
|
|
164
|
-
.notis-markdown img {
|
|
165
|
-
max-width: 100%;
|
|
166
|
-
border-radius: 0.5rem;
|
|
167
|
-
}
|
|
168
|
-
|
|
169
|
-
.notis-markdown table {
|
|
170
|
-
margin: 0.75em 0;
|
|
171
|
-
width: 100%;
|
|
172
|
-
border-collapse: collapse;
|
|
173
|
-
font-size: 0.95em;
|
|
174
|
-
}
|
|
175
|
-
|
|
176
|
-
.notis-markdown th,
|
|
177
|
-
.notis-markdown td {
|
|
178
|
-
padding: 0.375em 0.75em;
|
|
179
|
-
border: 1px solid hsl(var(--border));
|
|
180
|
-
text-align: left;
|
|
181
|
-
}
|
|
182
|
-
|
|
183
|
-
.notis-markdown th {
|
|
184
|
-
background: hsl(var(--muted));
|
|
185
|
-
font-weight: 600;
|
|
186
|
-
}
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @notis/sdk/ui - Re-exported shadcn components for Notis apps.
|
|
3
|
-
*
|
|
4
|
-
* Apps include shadcn via their own `components.json` and `@/components/ui/*`
|
|
5
|
-
* imports. This entrypoint is provided as a convenience for apps that want to
|
|
6
|
-
* import directly from the SDK without setting up shadcn locally.
|
|
7
|
-
*
|
|
8
|
-
* For now, this is a placeholder. The scaffold template sets up shadcn
|
|
9
|
-
* directly in the app project, so components come from `@/components/ui/*`.
|
|
10
|
-
* This file can be expanded later to re-export a curated set of components
|
|
11
|
-
* pre-themed for Notis.
|
|
12
|
-
*/
|
|
13
|
-
|
|
14
|
-
// Placeholder -- apps use shadcn directly via their project's components/ui/
|
|
15
|
-
export {};
|
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Vite config builder for Notis apps.
|
|
3
|
-
*
|
|
4
|
-
* Usage:
|
|
5
|
-
* ```ts
|
|
6
|
-
* // vite.config.ts
|
|
7
|
-
* import { notisViteConfig } from '@notis/sdk/vite';
|
|
8
|
-
* import appConfig from './notis.config';
|
|
9
|
-
* export default notisViteConfig(appConfig);
|
|
10
|
-
* ```
|
|
11
|
-
*
|
|
12
|
-
* Produces a library-mode ES module bundle with React externalized.
|
|
13
|
-
* Output: .notis/output/bundle/app.js + app.css
|
|
14
|
-
*/
|
|
15
|
-
|
|
16
|
-
import type { NotisAppConfig } from './config';
|
|
17
|
-
|
|
18
|
-
export function notisViteConfig(appConfig: NotisAppConfig) {
|
|
19
|
-
return {
|
|
20
|
-
plugins: [
|
|
21
|
-
// @vitejs/plugin-react is added by the consumer's vite.config.ts
|
|
22
|
-
// or auto-detected. We provide the config shape only.
|
|
23
|
-
],
|
|
24
|
-
build: {
|
|
25
|
-
lib: {
|
|
26
|
-
entry: '.notis/_entry.tsx',
|
|
27
|
-
formats: ['es'] as const,
|
|
28
|
-
fileName: () => 'app.js',
|
|
29
|
-
},
|
|
30
|
-
rollupOptions: {
|
|
31
|
-
external: ['react', 'react-dom', 'react-dom/client', 'react/jsx-runtime', 'react/jsx-dev-runtime'],
|
|
32
|
-
output: {
|
|
33
|
-
globals: {
|
|
34
|
-
react: 'window.React',
|
|
35
|
-
'react-dom': 'window.ReactDOM',
|
|
36
|
-
'react-dom/client': 'window.ReactDOMClient',
|
|
37
|
-
'react/jsx-runtime': 'window.React',
|
|
38
|
-
},
|
|
39
|
-
assetFileNames: 'app[extname]',
|
|
40
|
-
inlineDynamicImports: true,
|
|
41
|
-
},
|
|
42
|
-
},
|
|
43
|
-
outDir: '.notis/output/bundle',
|
|
44
|
-
emptyOutDir: true,
|
|
45
|
-
cssCodeSplit: false,
|
|
46
|
-
},
|
|
47
|
-
resolve: {
|
|
48
|
-
alias: {
|
|
49
|
-
'@': process.cwd(),
|
|
50
|
-
},
|
|
51
|
-
},
|
|
52
|
-
define: {
|
|
53
|
-
'process.env.NODE_ENV': JSON.stringify('production'),
|
|
54
|
-
},
|
|
55
|
-
};
|
|
56
|
-
}
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"compilerOptions": {
|
|
3
|
-
"target": "ES2022",
|
|
4
|
-
"module": "ESNext",
|
|
5
|
-
"moduleResolution": "bundler",
|
|
6
|
-
"jsx": "react-jsx",
|
|
7
|
-
"strict": true,
|
|
8
|
-
"esModuleInterop": true,
|
|
9
|
-
"skipLibCheck": true,
|
|
10
|
-
"declaration": true,
|
|
11
|
-
"outDir": "dist",
|
|
12
|
-
"rootDir": "src"
|
|
13
|
-
},
|
|
14
|
-
"include": ["src"]
|
|
15
|
-
}
|
|
@@ -1,58 +0,0 @@
|
|
|
1
|
-
import type { Config } from 'tailwindcss';
|
|
2
|
-
import tailwindAnimate from 'tailwindcss-animate';
|
|
3
|
-
|
|
4
|
-
const config: Config = {
|
|
5
|
-
darkMode: ['class'],
|
|
6
|
-
content: [
|
|
7
|
-
'./app/**/*.{ts,tsx}',
|
|
8
|
-
'./components/**/*.{ts,tsx}',
|
|
9
|
-
'./lib/**/*.{ts,tsx}',
|
|
10
|
-
],
|
|
11
|
-
theme: {
|
|
12
|
-
extend: {
|
|
13
|
-
colors: {
|
|
14
|
-
border: 'hsl(var(--border))',
|
|
15
|
-
input: 'hsl(var(--input))',
|
|
16
|
-
ring: 'hsl(var(--ring))',
|
|
17
|
-
background: 'hsl(var(--background))',
|
|
18
|
-
foreground: 'hsl(var(--foreground))',
|
|
19
|
-
primary: {
|
|
20
|
-
DEFAULT: 'hsl(var(--primary))',
|
|
21
|
-
foreground: 'hsl(var(--primary-foreground))',
|
|
22
|
-
},
|
|
23
|
-
secondary: {
|
|
24
|
-
DEFAULT: 'hsl(var(--secondary))',
|
|
25
|
-
foreground: 'hsl(var(--secondary-foreground))',
|
|
26
|
-
},
|
|
27
|
-
destructive: {
|
|
28
|
-
DEFAULT: 'hsl(var(--destructive))',
|
|
29
|
-
foreground: 'hsl(var(--destructive-foreground))',
|
|
30
|
-
},
|
|
31
|
-
muted: {
|
|
32
|
-
DEFAULT: 'hsl(var(--muted))',
|
|
33
|
-
foreground: 'hsl(var(--muted-foreground))',
|
|
34
|
-
},
|
|
35
|
-
accent: {
|
|
36
|
-
DEFAULT: 'hsl(var(--accent))',
|
|
37
|
-
foreground: 'hsl(var(--accent-foreground))',
|
|
38
|
-
},
|
|
39
|
-
popover: {
|
|
40
|
-
DEFAULT: 'hsl(var(--popover))',
|
|
41
|
-
foreground: 'hsl(var(--popover-foreground))',
|
|
42
|
-
},
|
|
43
|
-
card: {
|
|
44
|
-
DEFAULT: 'hsl(var(--card))',
|
|
45
|
-
foreground: 'hsl(var(--card-foreground))',
|
|
46
|
-
},
|
|
47
|
-
},
|
|
48
|
-
borderRadius: {
|
|
49
|
-
lg: 'var(--radius)',
|
|
50
|
-
md: 'calc(var(--radius) - 2px)',
|
|
51
|
-
sm: 'calc(var(--radius) - 4px)',
|
|
52
|
-
},
|
|
53
|
-
},
|
|
54
|
-
},
|
|
55
|
-
plugins: [tailwindAnimate],
|
|
56
|
-
};
|
|
57
|
-
|
|
58
|
-
export default config;
|
|
@@ -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
|
-
}
|