rahman-resources 1.7.0 → 1.9.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.
- package/lib/manifest.json +1089 -134
- package/package.json +1 -1
package/lib/manifest.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 2,
|
|
3
|
-
"generatedAt": "2026-05-
|
|
3
|
+
"generatedAt": "2026-05-28T06:14:32.508Z",
|
|
4
4
|
"repo": "rahmanef63/resource-site",
|
|
5
5
|
"branch": "main",
|
|
6
6
|
"layouts": [
|
|
@@ -31,24 +31,24 @@
|
|
|
31
31
|
"app/preview/personal-brand-os/public/resources/page.tsx",
|
|
32
32
|
"app/preview/personal-brand-os/public/contact/page.tsx",
|
|
33
33
|
"app/preview/personal-brand-os/public/about/page.tsx",
|
|
34
|
-
"app/preview/personal-brand-os/admin/layout.tsx",
|
|
35
|
-
"app/preview/personal-brand-os/admin/page.tsx",
|
|
36
|
-
"app/preview/personal-brand-os/admin/posts/page.tsx",
|
|
37
|
-
"app/preview/personal-brand-os/admin/posts/new/page.tsx",
|
|
38
|
-
"app/preview/personal-brand-os/admin/posts/[id]/page.tsx",
|
|
39
|
-
"app/preview/personal-brand-os/admin/portfolio/page.tsx",
|
|
40
|
-
"app/preview/personal-brand-os/admin/portfolio/new/page.tsx",
|
|
41
|
-
"app/preview/personal-brand-os/admin/portfolio/[id]/page.tsx",
|
|
42
|
-
"app/preview/personal-brand-os/admin/services/page.tsx",
|
|
43
|
-
"app/preview/personal-brand-os/admin/resources/page.tsx",
|
|
44
|
-
"app/preview/personal-brand-os/admin/leads/page.tsx",
|
|
45
|
-
"app/preview/personal-brand-os/admin/comments/page.tsx",
|
|
46
|
-
"app/preview/personal-brand-os/admin/chatbot/page.tsx",
|
|
47
|
-
"app/preview/personal-brand-os/admin/newsletter/page.tsx",
|
|
48
|
-
"app/preview/personal-brand-os/admin/analytics/page.tsx",
|
|
49
|
-
"app/preview/personal-brand-os/admin/settings/site/page.tsx",
|
|
50
|
-
"app/preview/personal-brand-os/admin/settings/team/page.tsx",
|
|
51
|
-
"app/preview/personal-brand-os/admin/settings/ai/page.tsx",
|
|
34
|
+
"app/preview/personal-brand-os/dashboard/admin/layout.tsx",
|
|
35
|
+
"app/preview/personal-brand-os/dashboard/admin/page.tsx",
|
|
36
|
+
"app/preview/personal-brand-os/dashboard/admin/posts/page.tsx",
|
|
37
|
+
"app/preview/personal-brand-os/dashboard/admin/posts/new/page.tsx",
|
|
38
|
+
"app/preview/personal-brand-os/dashboard/admin/posts/[id]/page.tsx",
|
|
39
|
+
"app/preview/personal-brand-os/dashboard/admin/portfolio/page.tsx",
|
|
40
|
+
"app/preview/personal-brand-os/dashboard/admin/portfolio/new/page.tsx",
|
|
41
|
+
"app/preview/personal-brand-os/dashboard/admin/portfolio/[id]/page.tsx",
|
|
42
|
+
"app/preview/personal-brand-os/dashboard/admin/services/page.tsx",
|
|
43
|
+
"app/preview/personal-brand-os/dashboard/admin/resources/page.tsx",
|
|
44
|
+
"app/preview/personal-brand-os/dashboard/admin/leads/page.tsx",
|
|
45
|
+
"app/preview/personal-brand-os/dashboard/admin/comments/page.tsx",
|
|
46
|
+
"app/preview/personal-brand-os/dashboard/admin/chatbot/page.tsx",
|
|
47
|
+
"app/preview/personal-brand-os/dashboard/admin/newsletter/page.tsx",
|
|
48
|
+
"app/preview/personal-brand-os/dashboard/admin/analytics/page.tsx",
|
|
49
|
+
"app/preview/personal-brand-os/dashboard/admin/settings/site/page.tsx",
|
|
50
|
+
"app/preview/personal-brand-os/dashboard/admin/settings/team/page.tsx",
|
|
51
|
+
"app/preview/personal-brand-os/dashboard/admin/settings/ai/page.tsx",
|
|
52
52
|
"components/templates/_shared/index.ts",
|
|
53
53
|
"components/templates/_shared/types/common.ts",
|
|
54
54
|
"components/templates/_shared/utils/index.ts",
|
|
@@ -77,7 +77,7 @@
|
|
|
77
77
|
"components/templates/personal-brand/slices/resources/ResourcesPage.tsx",
|
|
78
78
|
"components/templates/personal-brand/slices/about/AboutPage.tsx",
|
|
79
79
|
"components/templates/personal-brand/slices/contact/ContactPage.tsx",
|
|
80
|
-
"app/preview/personal-brand-os/admin/admin-shell-client.tsx",
|
|
80
|
+
"app/preview/personal-brand-os/dashboard/admin/admin-shell-client.tsx",
|
|
81
81
|
"components/templates/personal-brand/slices/admin/dashboard/DashboardView.tsx",
|
|
82
82
|
"components/templates/personal-brand/slices/admin/posts/PostsList.tsx",
|
|
83
83
|
"components/templates/personal-brand/slices/admin/posts/PostEditor.tsx",
|
|
@@ -170,15 +170,15 @@
|
|
|
170
170
|
"app/preview/agency-studio-os/public/portfolio/[slug]/page.tsx",
|
|
171
171
|
"app/preview/agency-studio-os/public/about/page.tsx",
|
|
172
172
|
"app/preview/agency-studio-os/public/contact/page.tsx",
|
|
173
|
-
"app/preview/agency-studio-os/admin/layout.tsx",
|
|
174
|
-
"app/preview/agency-studio-os/admin/page.tsx",
|
|
175
|
-
"app/preview/agency-studio-os/admin/projects/page.tsx",
|
|
176
|
-
"app/preview/agency-studio-os/admin/projects/new/page.tsx",
|
|
177
|
-
"app/preview/agency-studio-os/admin/projects/[id]/page.tsx",
|
|
178
|
-
"app/preview/agency-studio-os/admin/clients/page.tsx",
|
|
179
|
-
"app/preview/agency-studio-os/admin/services/page.tsx",
|
|
180
|
-
"app/preview/agency-studio-os/admin/leads/page.tsx",
|
|
181
|
-
"app/preview/agency-studio-os/admin/settings/page.tsx",
|
|
173
|
+
"app/preview/agency-studio-os/dashboard/admin/layout.tsx",
|
|
174
|
+
"app/preview/agency-studio-os/dashboard/admin/page.tsx",
|
|
175
|
+
"app/preview/agency-studio-os/dashboard/admin/projects/page.tsx",
|
|
176
|
+
"app/preview/agency-studio-os/dashboard/admin/projects/new/page.tsx",
|
|
177
|
+
"app/preview/agency-studio-os/dashboard/admin/projects/[id]/page.tsx",
|
|
178
|
+
"app/preview/agency-studio-os/dashboard/admin/clients/page.tsx",
|
|
179
|
+
"app/preview/agency-studio-os/dashboard/admin/services/page.tsx",
|
|
180
|
+
"app/preview/agency-studio-os/dashboard/admin/leads/page.tsx",
|
|
181
|
+
"app/preview/agency-studio-os/dashboard/admin/settings/page.tsx",
|
|
182
182
|
"components/templates/agency-studio/shared/types.ts",
|
|
183
183
|
"components/templates/agency-studio/shared/store.tsx",
|
|
184
184
|
"components/templates/agency-studio/shared/seed.ts",
|
|
@@ -190,7 +190,7 @@
|
|
|
190
190
|
"components/templates/agency-studio/slices/portfolio/PortfolioDetailPage.tsx",
|
|
191
191
|
"components/templates/agency-studio/slices/about/AboutPage.tsx",
|
|
192
192
|
"components/templates/agency-studio/slices/contact/ContactPage.tsx",
|
|
193
|
-
"app/preview/agency-studio-os/admin/admin-shell-client.tsx",
|
|
193
|
+
"app/preview/agency-studio-os/dashboard/admin/admin-shell-client.tsx",
|
|
194
194
|
"components/templates/agency-studio/slices/admin/dashboard/DashboardView.tsx",
|
|
195
195
|
"components/templates/agency-studio/slices/admin/projects/ProjectsList.tsx",
|
|
196
196
|
"components/templates/agency-studio/slices/admin/projects/ProjectEditor.tsx",
|
|
@@ -416,12 +416,90 @@
|
|
|
416
416
|
],
|
|
417
417
|
"primaryFile": "README.md"
|
|
418
418
|
},
|
|
419
|
+
{
|
|
420
|
+
"slug": "notion-page-clone-os",
|
|
421
|
+
"title": "Notion Page Clone OS — localStorage demo (pointer to open-silong for production)",
|
|
422
|
+
"category": "website-template",
|
|
423
|
+
"status": "stable",
|
|
424
|
+
"description": "localStorage-only DEMO of a Notion-clone surface — tree-structured sidebar + page editor + embedded databases. Built from rr's notion-shell wrappers (NotionSidebar / NotionPage / NotionBlock / NotionDatabase) + notion-blocks primitives (equation / code / notify / drag-fill grid) + createTemplateStore (localStorage + BroadcastChannel). No Convex, no auth, no multi-user — drop-in starter for evaluating the UI or embedding a Notion-style editor in your own project. **For the production-grade Convex-backed product (multi-workspace + auth + sharing + comments + snapshots + MCP), use the open-source open-silong repo: https://github.com/rahmanef63/open-silong (silong.rahmanef.com).** This rr template is the DEMO; the github repo is the PRODUCT.",
|
|
425
|
+
"source": "synthesized + notion-shell wrappers + notion-blocks bundle; production stack at github.com/rahmanef63/open-silong",
|
|
426
|
+
"repoPath": "app/preview/notion-page-clone-os",
|
|
427
|
+
"pullPaths": [
|
|
428
|
+
"app/preview/notion-page-clone-os",
|
|
429
|
+
"components/templates/_shared",
|
|
430
|
+
"components/templates/notion-page-clone",
|
|
431
|
+
"frontend/slices/notion-blocks",
|
|
432
|
+
"frontend/slices/notion-shell",
|
|
433
|
+
"frontend/slices/icon-picker",
|
|
434
|
+
"frontend/slices/equation",
|
|
435
|
+
"frontend/slices/code-block",
|
|
436
|
+
"frontend/slices/notifications",
|
|
437
|
+
"frontend/slices/database-cell-selection"
|
|
438
|
+
],
|
|
439
|
+
"files": [
|
|
440
|
+
"app/preview/notion-page-clone-os/public/layout.tsx",
|
|
441
|
+
"app/preview/notion-page-clone-os/public/page.tsx",
|
|
442
|
+
"app/preview/notion-page-clone-os/public/d/[id]/page.tsx",
|
|
443
|
+
"app/preview/notion-page-clone-os/public/db/[id]/page.tsx",
|
|
444
|
+
"app/preview/notion-page-clone-os/dashboard/admin/layout.tsx",
|
|
445
|
+
"app/preview/notion-page-clone-os/dashboard/admin/admin-shell-client.tsx",
|
|
446
|
+
"app/preview/notion-page-clone-os/dashboard/admin/page.tsx",
|
|
447
|
+
"app/preview/notion-page-clone-os/dashboard/admin/snippets/page.tsx",
|
|
448
|
+
"components/templates/notion-page-clone/shared/site-config.ts",
|
|
449
|
+
"components/templates/notion-page-clone/shared/nav-config.ts",
|
|
450
|
+
"components/templates/notion-page-clone/shared/types.ts",
|
|
451
|
+
"components/templates/notion-page-clone/shared/store.tsx",
|
|
452
|
+
"components/templates/notion-page-clone/shared/seed.ts",
|
|
453
|
+
"components/templates/notion-page-clone/slices/admin/snippets/SnippetsView.tsx",
|
|
454
|
+
"components/templates/notion-page-clone/slices/notion-app/Dashboard.tsx",
|
|
455
|
+
"components/templates/notion-page-clone/slices/notion-app/DocView.tsx",
|
|
456
|
+
"components/templates/notion-page-clone/slices/notion-app/DatabaseView.tsx",
|
|
457
|
+
"components/templates/notion-page-clone/slices/notion-app/hooks.ts",
|
|
458
|
+
"components/templates/notion-page-clone/slices/notion-app/block-renderers.tsx",
|
|
459
|
+
"components/templates/notion-page-clone/shared/notion-reducer.ts",
|
|
460
|
+
"components/templates/notion-page-clone/shared/notion-db-reducer.ts"
|
|
461
|
+
],
|
|
462
|
+
"dependencies": [
|
|
463
|
+
"next@^16",
|
|
464
|
+
"react@^19",
|
|
465
|
+
"react-dom@^19",
|
|
466
|
+
"lucide-react",
|
|
467
|
+
"katex@^0.16.45",
|
|
468
|
+
"highlight.js@^11.11.1",
|
|
469
|
+
"rahman-shared@^0.2.0",
|
|
470
|
+
"tailwindcss@^4"
|
|
471
|
+
],
|
|
472
|
+
"shadcnComponents": [
|
|
473
|
+
"badge",
|
|
474
|
+
"button",
|
|
475
|
+
"popover",
|
|
476
|
+
"dropdown-menu",
|
|
477
|
+
"input",
|
|
478
|
+
"label",
|
|
479
|
+
"switch",
|
|
480
|
+
"textarea",
|
|
481
|
+
"select",
|
|
482
|
+
"dialog"
|
|
483
|
+
],
|
|
484
|
+
"agentRecipe": "Run `npx rr init <app> --template notion-page-clone-os`. Cascades notion-shell (wrappers) + notion-blocks (4 editor primitives) + icon-picker. Edit components/templates/notion-page-clone/shared/site-config.ts to set brand; seed.ts to bootstrap docs + databases. Sidebar CRUD already wired — hover a row → +/✎/🗑.",
|
|
485
|
+
"tags": [
|
|
486
|
+
"template",
|
|
487
|
+
"notion",
|
|
488
|
+
"notes",
|
|
489
|
+
"blocks",
|
|
490
|
+
"katex",
|
|
491
|
+
"code",
|
|
492
|
+
"editor",
|
|
493
|
+
"indonesia"
|
|
494
|
+
],
|
|
495
|
+
"primaryFile": "app/preview/notion-page-clone-os/public/page.tsx"
|
|
496
|
+
},
|
|
419
497
|
{
|
|
420
498
|
"slug": "saas-marketing-os",
|
|
421
499
|
"title": "SaaS Marketing OS",
|
|
422
500
|
"category": "website-template",
|
|
423
501
|
"status": "stable",
|
|
424
|
-
"description": "
|
|
502
|
+
"description": "Marketing site for a SaaS product — landing, pricing, features, blog, changelog, about, contact — backed by a full admin panel (Pages, Posts, Pricing, Features, Customers, Subscriptions, Leads, Changelog, Settings). Same grouped Pages + Features sidebar pattern as every other template.",
|
|
425
503
|
"source": "synthesized + mdx-blog feature",
|
|
426
504
|
"repoPath": "app/preview/saas-marketing-os",
|
|
427
505
|
"pullPaths": [
|
|
@@ -451,7 +529,29 @@
|
|
|
451
529
|
"components/templates/saas-marketing/slices/blog/BlogDetail.tsx",
|
|
452
530
|
"components/templates/saas-marketing/slices/changelog/ChangelogPage.tsx",
|
|
453
531
|
"components/templates/saas-marketing/slices/about/AboutPage.tsx",
|
|
454
|
-
"components/templates/saas-marketing/slices/contact/ContactPage.tsx"
|
|
532
|
+
"components/templates/saas-marketing/slices/contact/ContactPage.tsx",
|
|
533
|
+
"app/preview/saas-marketing-os/dashboard/layout.tsx",
|
|
534
|
+
"app/preview/saas-marketing-os/dashboard/dashboard-shell-client.tsx",
|
|
535
|
+
"app/preview/saas-marketing-os/dashboard/admin/page.tsx",
|
|
536
|
+
"app/preview/saas-marketing-os/dashboard/admin/pages/page.tsx",
|
|
537
|
+
"app/preview/saas-marketing-os/dashboard/admin/pages/[id]/page.tsx",
|
|
538
|
+
"app/preview/saas-marketing-os/dashboard/admin/landing/page.tsx",
|
|
539
|
+
"app/preview/saas-marketing-os/dashboard/admin/landing/[id]/page.tsx",
|
|
540
|
+
"app/preview/saas-marketing-os/dashboard/admin/posts/page.tsx",
|
|
541
|
+
"app/preview/saas-marketing-os/dashboard/admin/posts/[id]/page.tsx",
|
|
542
|
+
"app/preview/saas-marketing-os/dashboard/admin/pricing/page.tsx",
|
|
543
|
+
"app/preview/saas-marketing-os/dashboard/admin/pricing/[id]/page.tsx",
|
|
544
|
+
"app/preview/saas-marketing-os/dashboard/admin/features/page.tsx",
|
|
545
|
+
"app/preview/saas-marketing-os/dashboard/admin/features/[id]/page.tsx",
|
|
546
|
+
"app/preview/saas-marketing-os/dashboard/admin/customers/page.tsx",
|
|
547
|
+
"app/preview/saas-marketing-os/dashboard/admin/customers/[id]/page.tsx",
|
|
548
|
+
"app/preview/saas-marketing-os/dashboard/admin/subscriptions/page.tsx",
|
|
549
|
+
"app/preview/saas-marketing-os/dashboard/admin/subscriptions/[id]/page.tsx",
|
|
550
|
+
"app/preview/saas-marketing-os/dashboard/admin/leads/page.tsx",
|
|
551
|
+
"app/preview/saas-marketing-os/dashboard/admin/leads/[id]/page.tsx",
|
|
552
|
+
"app/preview/saas-marketing-os/dashboard/admin/changelog/page.tsx",
|
|
553
|
+
"app/preview/saas-marketing-os/dashboard/admin/changelog/[id]/page.tsx",
|
|
554
|
+
"app/preview/saas-marketing-os/dashboard/admin/settings/page.tsx"
|
|
455
555
|
],
|
|
456
556
|
"dependencies": [
|
|
457
557
|
"next@^16",
|
|
@@ -482,7 +582,8 @@
|
|
|
482
582
|
"marketing",
|
|
483
583
|
"mdx",
|
|
484
584
|
"blog",
|
|
485
|
-
"changelog"
|
|
585
|
+
"changelog",
|
|
586
|
+
"admin"
|
|
486
587
|
],
|
|
487
588
|
"primaryFile": "app/preview/saas-marketing-os/public/page.tsx"
|
|
488
589
|
},
|
|
@@ -506,18 +607,18 @@
|
|
|
506
607
|
"app/preview/kreator-studio-os/public/page.tsx",
|
|
507
608
|
"app/preview/kreator-studio-os/public/posts/page.tsx",
|
|
508
609
|
"app/preview/kreator-studio-os/public/about/page.tsx",
|
|
509
|
-
"app/preview/kreator-studio-os/admin/layout.tsx",
|
|
510
|
-
"app/preview/kreator-studio-os/admin/page.tsx",
|
|
511
|
-
"app/preview/kreator-studio-os/admin/admin-shell-client.tsx",
|
|
512
|
-
"app/preview/kreator-studio-os/admin/planner/page.tsx",
|
|
513
|
-
"app/preview/kreator-studio-os/admin/voice/page.tsx",
|
|
514
|
-
"app/preview/kreator-studio-os/admin/scripts/page.tsx",
|
|
515
|
-
"app/preview/kreator-studio-os/admin/carousels/page.tsx",
|
|
516
|
-
"app/preview/kreator-studio-os/admin/assets/page.tsx",
|
|
517
|
-
"app/preview/kreator-studio-os/admin/performance/page.tsx",
|
|
518
|
-
"app/preview/kreator-studio-os/admin/newsletter/page.tsx",
|
|
519
|
-
"app/preview/kreator-studio-os/admin/comments/page.tsx",
|
|
520
|
-
"app/preview/kreator-studio-os/admin/settings/page.tsx",
|
|
610
|
+
"app/preview/kreator-studio-os/dashboard/admin/layout.tsx",
|
|
611
|
+
"app/preview/kreator-studio-os/dashboard/admin/page.tsx",
|
|
612
|
+
"app/preview/kreator-studio-os/dashboard/admin/admin-shell-client.tsx",
|
|
613
|
+
"app/preview/kreator-studio-os/dashboard/admin/planner/page.tsx",
|
|
614
|
+
"app/preview/kreator-studio-os/dashboard/admin/voice/page.tsx",
|
|
615
|
+
"app/preview/kreator-studio-os/dashboard/admin/scripts/page.tsx",
|
|
616
|
+
"app/preview/kreator-studio-os/dashboard/admin/carousels/page.tsx",
|
|
617
|
+
"app/preview/kreator-studio-os/dashboard/admin/assets/page.tsx",
|
|
618
|
+
"app/preview/kreator-studio-os/dashboard/admin/performance/page.tsx",
|
|
619
|
+
"app/preview/kreator-studio-os/dashboard/admin/newsletter/page.tsx",
|
|
620
|
+
"app/preview/kreator-studio-os/dashboard/admin/comments/page.tsx",
|
|
621
|
+
"app/preview/kreator-studio-os/dashboard/admin/settings/page.tsx",
|
|
521
622
|
"components/templates/kreator-studio/shared/site-config.ts",
|
|
522
623
|
"components/templates/kreator-studio/shared/types.ts",
|
|
523
624
|
"components/templates/kreator-studio/shared/seed.ts",
|
|
@@ -588,16 +689,16 @@
|
|
|
588
689
|
"app/preview/konsultan-os/public/page.tsx",
|
|
589
690
|
"app/preview/konsultan-os/public/case-studies/page.tsx",
|
|
590
691
|
"app/preview/konsultan-os/public/contact/page.tsx",
|
|
591
|
-
"app/preview/konsultan-os/admin/layout.tsx",
|
|
592
|
-
"app/preview/konsultan-os/admin/page.tsx",
|
|
593
|
-
"app/preview/konsultan-os/admin/admin-shell-client.tsx",
|
|
594
|
-
"app/preview/konsultan-os/admin/clients/page.tsx",
|
|
595
|
-
"app/preview/konsultan-os/admin/proposals/page.tsx",
|
|
596
|
-
"app/preview/konsultan-os/admin/contracts/page.tsx",
|
|
597
|
-
"app/preview/konsultan-os/admin/projects/page.tsx",
|
|
598
|
-
"app/preview/konsultan-os/admin/billing/page.tsx",
|
|
599
|
-
"app/preview/konsultan-os/admin/documents/page.tsx",
|
|
600
|
-
"app/preview/konsultan-os/admin/settings/page.tsx",
|
|
692
|
+
"app/preview/konsultan-os/dashboard/admin/layout.tsx",
|
|
693
|
+
"app/preview/konsultan-os/dashboard/admin/page.tsx",
|
|
694
|
+
"app/preview/konsultan-os/dashboard/admin/admin-shell-client.tsx",
|
|
695
|
+
"app/preview/konsultan-os/dashboard/admin/clients/page.tsx",
|
|
696
|
+
"app/preview/konsultan-os/dashboard/admin/proposals/page.tsx",
|
|
697
|
+
"app/preview/konsultan-os/dashboard/admin/contracts/page.tsx",
|
|
698
|
+
"app/preview/konsultan-os/dashboard/admin/projects/page.tsx",
|
|
699
|
+
"app/preview/konsultan-os/dashboard/admin/billing/page.tsx",
|
|
700
|
+
"app/preview/konsultan-os/dashboard/admin/documents/page.tsx",
|
|
701
|
+
"app/preview/konsultan-os/dashboard/admin/settings/page.tsx",
|
|
601
702
|
"components/templates/konsultan/shared/site-config.ts",
|
|
602
703
|
"components/templates/konsultan/shared/types.ts",
|
|
603
704
|
"components/templates/konsultan/shared/seed.ts",
|
|
@@ -667,16 +768,16 @@
|
|
|
667
768
|
"app/preview/wirausaha-os/public/page.tsx",
|
|
668
769
|
"app/preview/wirausaha-os/public/services/page.tsx",
|
|
669
770
|
"app/preview/wirausaha-os/public/contact/page.tsx",
|
|
670
|
-
"app/preview/wirausaha-os/admin/layout.tsx",
|
|
671
|
-
"app/preview/wirausaha-os/admin/page.tsx",
|
|
672
|
-
"app/preview/wirausaha-os/admin/admin-shell-client.tsx",
|
|
673
|
-
"app/preview/wirausaha-os/admin/businesses/page.tsx",
|
|
674
|
-
"app/preview/wirausaha-os/admin/inventory/page.tsx",
|
|
675
|
-
"app/preview/wirausaha-os/admin/orders/page.tsx",
|
|
676
|
-
"app/preview/wirausaha-os/admin/customers/page.tsx",
|
|
677
|
-
"app/preview/wirausaha-os/admin/finance/page.tsx",
|
|
678
|
-
"app/preview/wirausaha-os/admin/staff/page.tsx",
|
|
679
|
-
"app/preview/wirausaha-os/admin/settings/page.tsx",
|
|
771
|
+
"app/preview/wirausaha-os/dashboard/admin/layout.tsx",
|
|
772
|
+
"app/preview/wirausaha-os/dashboard/admin/page.tsx",
|
|
773
|
+
"app/preview/wirausaha-os/dashboard/admin/admin-shell-client.tsx",
|
|
774
|
+
"app/preview/wirausaha-os/dashboard/admin/businesses/page.tsx",
|
|
775
|
+
"app/preview/wirausaha-os/dashboard/admin/inventory/page.tsx",
|
|
776
|
+
"app/preview/wirausaha-os/dashboard/admin/orders/page.tsx",
|
|
777
|
+
"app/preview/wirausaha-os/dashboard/admin/customers/page.tsx",
|
|
778
|
+
"app/preview/wirausaha-os/dashboard/admin/finance/page.tsx",
|
|
779
|
+
"app/preview/wirausaha-os/dashboard/admin/staff/page.tsx",
|
|
780
|
+
"app/preview/wirausaha-os/dashboard/admin/settings/page.tsx",
|
|
680
781
|
"components/templates/wirausaha/shared/site-config.ts",
|
|
681
782
|
"components/templates/wirausaha/shared/types.ts",
|
|
682
783
|
"components/templates/wirausaha/shared/seed.ts",
|
|
@@ -747,15 +848,15 @@
|
|
|
747
848
|
"app/preview/riset-kit/public/page.tsx",
|
|
748
849
|
"app/preview/riset-kit/public/library/page.tsx",
|
|
749
850
|
"app/preview/riset-kit/public/about/page.tsx",
|
|
750
|
-
"app/preview/riset-kit/admin/layout.tsx",
|
|
751
|
-
"app/preview/riset-kit/admin/page.tsx",
|
|
752
|
-
"app/preview/riset-kit/admin/admin-shell-client.tsx",
|
|
753
|
-
"app/preview/riset-kit/admin/documents/page.tsx",
|
|
754
|
-
"app/preview/riset-kit/admin/notes/page.tsx",
|
|
755
|
-
"app/preview/riset-kit/admin/citations/page.tsx",
|
|
756
|
-
"app/preview/riset-kit/admin/ai-reader/page.tsx",
|
|
757
|
-
"app/preview/riset-kit/admin/lit-review/page.tsx",
|
|
758
|
-
"app/preview/riset-kit/admin/settings/page.tsx",
|
|
851
|
+
"app/preview/riset-kit/dashboard/admin/layout.tsx",
|
|
852
|
+
"app/preview/riset-kit/dashboard/admin/page.tsx",
|
|
853
|
+
"app/preview/riset-kit/dashboard/admin/admin-shell-client.tsx",
|
|
854
|
+
"app/preview/riset-kit/dashboard/admin/documents/page.tsx",
|
|
855
|
+
"app/preview/riset-kit/dashboard/admin/notes/page.tsx",
|
|
856
|
+
"app/preview/riset-kit/dashboard/admin/citations/page.tsx",
|
|
857
|
+
"app/preview/riset-kit/dashboard/admin/ai-reader/page.tsx",
|
|
858
|
+
"app/preview/riset-kit/dashboard/admin/lit-review/page.tsx",
|
|
859
|
+
"app/preview/riset-kit/dashboard/admin/settings/page.tsx",
|
|
759
860
|
"components/templates/research/shared/site-config.ts",
|
|
760
861
|
"components/templates/research/shared/types.ts",
|
|
761
862
|
"components/templates/research/shared/seed.ts",
|
|
@@ -1559,7 +1660,8 @@
|
|
|
1559
1660
|
"cmd-k",
|
|
1560
1661
|
"navigation",
|
|
1561
1662
|
"keyboard",
|
|
1562
|
-
"search"
|
|
1663
|
+
"search",
|
|
1664
|
+
"notion-like"
|
|
1563
1665
|
]
|
|
1564
1666
|
},
|
|
1565
1667
|
{
|
|
@@ -1623,6 +1725,28 @@
|
|
|
1623
1725
|
"responsive"
|
|
1624
1726
|
]
|
|
1625
1727
|
},
|
|
1728
|
+
{
|
|
1729
|
+
"slug": "three-column",
|
|
1730
|
+
"title": "Three-Column Layout — Sidebar/Content/Inspector",
|
|
1731
|
+
"category": "ui",
|
|
1732
|
+
"description": "ThreeColumnLayoutAdvanced — collapsible left/right + resizable widths + responsive breakpoints + PanelSection compound (Header/Items/Footer) + per-panel footer slots. Models shadcn sidebar API for the panel interior. Pair with PanelGroup/PanelMenu/PanelSeparator primitives. Trigger ≠ header (V-wave separation rule).",
|
|
1733
|
+
"source": "superspace",
|
|
1734
|
+
"docsUrl": "",
|
|
1735
|
+
"install": "",
|
|
1736
|
+
"npmPackages": [],
|
|
1737
|
+
"exampleCode": "",
|
|
1738
|
+
"agentRecipe": "Run `npx rr add three-column`. <ThreeColumnLayoutAdvanced preset=\"feature\" storageKey persistState left={…PanelSection…} center={…PanelSection unstyled…} right={…PanelSection…} leftFooter centerFooter rightFooter />. Center column SHOULD pass `unstyled` to drop sidebar tokens — body is content surface. `storageKey` MUST differ per slice or persisted widths collide.",
|
|
1739
|
+
"tags": [
|
|
1740
|
+
"ui",
|
|
1741
|
+
"layout",
|
|
1742
|
+
"three-column",
|
|
1743
|
+
"sidebar",
|
|
1744
|
+
"inspector",
|
|
1745
|
+
"panel-section",
|
|
1746
|
+
"responsive",
|
|
1747
|
+
"resizable"
|
|
1748
|
+
]
|
|
1749
|
+
},
|
|
1626
1750
|
{
|
|
1627
1751
|
"slug": "broadcast-channel-sync",
|
|
1628
1752
|
"title": "BroadcastChannel — Cross-tab Sync",
|
|
@@ -1697,40 +1821,67 @@
|
|
|
1697
1821
|
"p0"
|
|
1698
1822
|
]
|
|
1699
1823
|
},
|
|
1700
|
-
{
|
|
1701
|
-
"slug": "theme-preset-switcher",
|
|
1702
|
-
"title": "Theme Preset Switcher",
|
|
1703
|
-
"category": "ui",
|
|
1704
|
-
"description": "Runtime theme swap (colors + fonts + shadows + tracking). OKLch CSS vars per preset. Persists to localStorage + Convex. Add a new preset by appending a CSS block in app/globals.css with [data-theme=\"<name>\"], then register in preset-groups.ts.",
|
|
1705
|
-
"source": "rahmanef.com",
|
|
1706
|
-
"install": "npx rahman-resources add theme-preset-switcher",
|
|
1707
|
-
"npmPackages": [],
|
|
1708
|
-
"exampleCode": "",
|
|
1709
|
-
"agentRecipe": "Run `npx rr add theme-preset-switcher`. Import ThemePresetSwitcher from @/frontend/shared/ui/components/theme-preset-switcher and mount in the topbar. Presets live in theme-presets.ts; preset-groups.ts groups them for the picker UI.",
|
|
1710
|
-
"tags": [
|
|
1711
|
-
"theme",
|
|
1712
|
-
"presets",
|
|
1713
|
-
"oklch",
|
|
1714
|
-
"design-system"
|
|
1715
|
-
]
|
|
1716
|
-
},
|
|
1717
1824
|
{
|
|
1718
1825
|
"slug": "icon-picker",
|
|
1719
1826
|
"title": "Icon Picker",
|
|
1720
1827
|
"category": "ui",
|
|
1721
|
-
"description": "Emoji + lucide icon picker with search, 10-color palette, Twemoji/native toggle, recents tracking. One string stores emoji OR lucide:Name OR with ?c=hex tint — backwards-compat with raw-emoji fields. Two variants: Popover (compact trigger) and Inline (full sheet/dialog use). Lifted 2026-05-
|
|
1722
|
-
"source": "
|
|
1828
|
+
"description": "Emoji + lucide (outline) + phosphor (fill) icon picker with search, 10-color palette, Twemoji/native toggle, recents tracking, and smart positioning. Two-tab layout (Emoji | Icon) with sub-variant pills (Native | Twemoji / Lucide | Phosphor fill). One string stores emoji OR lucide:Name OR phosphor:Name OR with ?c=hex tint — backwards-compat with raw-emoji fields. Popover auto-flips on collision (caps to Radix `--radix-popover-content-available-height`) and falls back to centered Dialog when neither side fits. Two variants: Popover (compact trigger) and Inline (full sheet/dialog use). Lifted 2026-05-25 from open-silong.",
|
|
1829
|
+
"source": "open-silong",
|
|
1723
1830
|
"install": "npx rahman-resources add icon-picker",
|
|
1724
1831
|
"npmPackages": [],
|
|
1725
1832
|
"exampleCode": "",
|
|
1726
|
-
"agentRecipe": "Run `npx rr add icon-picker`. parseIconValue() decodes; lucideValue()/withColor() build. Add 'icon: v.string()' to Convex table — no migration needed for existing emoji fields. <
|
|
1833
|
+
"agentRecipe": "Run `npx rr add icon-picker` then `pnpm add @phosphor-icons/react`. parseIconValue() decodes; lucideValue() / phosphorValue() / withColor() build. Storage forms: `lucide:Name?c=hex` (outline) or `phosphor:Name?c=hex` (fill) or raw emoji. Add 'icon: v.string()' to Convex table — no migration needed for existing emoji + lucide fields. <IconPickerPopover> wraps any trigger (auto-flips, falls back to centered Dialog on tight viewports); <IconPickerInline> for sheets/dialogs. <DynamicIcon> renders from parsed value.",
|
|
1727
1834
|
"tags": [
|
|
1728
1835
|
"icon",
|
|
1729
1836
|
"emoji",
|
|
1730
1837
|
"lucide",
|
|
1838
|
+
"phosphor",
|
|
1731
1839
|
"picker",
|
|
1732
1840
|
"twemoji",
|
|
1733
|
-
"notion"
|
|
1841
|
+
"notion",
|
|
1842
|
+
"notion-like",
|
|
1843
|
+
"responsive"
|
|
1844
|
+
]
|
|
1845
|
+
},
|
|
1846
|
+
{
|
|
1847
|
+
"slug": "activity",
|
|
1848
|
+
"title": "Activity — public productivity log",
|
|
1849
|
+
"category": "data",
|
|
1850
|
+
"description": "Public-facing weekly activity log. Lists user-facing activities grouped by ISO week with schema.org-friendly markup, designed to maximise SEO so the question 'what is <person> working on this week?' lands here. Convex-backed (schema + queries + unauthenticated mutations); MCP-friendly so AI workflows (Claude / GPT / custom agents) can append entries directly. All user-facing copy + per-category labels + date/time locale are prop-driven (English defaults). Lifted 2026-05-27 from rahmanef.com; 225-LOC view split into view + 2 sub-components + 4 lib helpers for the 200-LOC cap; Indonesian strings + custom primitives stripped; cross-slice auth import dropped (consumer wraps mutations).",
|
|
1851
|
+
"source": "rahmanef.com",
|
|
1852
|
+
"install": "npx rahman-resources add activity",
|
|
1853
|
+
"npmPackages": [],
|
|
1854
|
+
"exampleCode": "",
|
|
1855
|
+
"agentRecipe": "Run `npx rr add activity`. Spread `activityTables` into your root Convex schema. Wrap the unauthenticated `create`/`update`/`remove` `internalMutation`s with your auth model (see README Install section). Render `<ActivityFeed rows={await fetchQuery(api.activity.listPublic)} stats={await fetchQuery(api.activity.statsThisWeek)} />`. Override `copy`, `categoryLabels`, `locale` per consumer. MCP integration: map `activity_create` tool → your wrapped `create` mutation.",
|
|
1856
|
+
"tags": [
|
|
1857
|
+
"activity",
|
|
1858
|
+
"productivity",
|
|
1859
|
+
"log",
|
|
1860
|
+
"now-page",
|
|
1861
|
+
"feed",
|
|
1862
|
+
"mcp",
|
|
1863
|
+
"seo",
|
|
1864
|
+
"personal-brand"
|
|
1865
|
+
]
|
|
1866
|
+
},
|
|
1867
|
+
{
|
|
1868
|
+
"slug": "i18n-translate",
|
|
1869
|
+
"title": "i18n — Google Translate widget",
|
|
1870
|
+
"category": "ui",
|
|
1871
|
+
"description": "Drop-in Google Translate widget. Replaces hand-maintained locale dictionaries with on-the-fly translation to a curated locale list (16 default, prop-override). No API key, no Google Cloud billing. Auto-detect browser language on first visit, persist user choice via localStorage, click-to-reload language switching with router-refresh + in-place fallback strategies. Lifted 2026-05-27 from rahmanef.com; 510-LOC monolith split into 8 sub-files for the 200-LOC cap; project-specific Tailwind utilities stripped from defaults.",
|
|
1872
|
+
"source": "rahmanef.com",
|
|
1873
|
+
"install": "npx rahman-resources add i18n-translate",
|
|
1874
|
+
"npmPackages": [],
|
|
1875
|
+
"exampleCode": "",
|
|
1876
|
+
"agentRecipe": "Run `npx rr add i18n-translate`. Mount `<GoogleTranslate />` anywhere (e.g. header). Add the CSP allowlist from README.md to your middleware/proxy — without it Google's script fails silently. Override `languages`, `storageKey`, and the four `*ClassName` props for per-project styling. Default `fallbackRefresh=\"reload\"` is the only path that works reliably across Next Cache Components — only opt into `\"router\"` or `\"none\"` if you've tested it on your tree.",
|
|
1877
|
+
"tags": [
|
|
1878
|
+
"i18n",
|
|
1879
|
+
"translate",
|
|
1880
|
+
"google-translate",
|
|
1881
|
+
"ui",
|
|
1882
|
+
"language-switcher",
|
|
1883
|
+
"locale",
|
|
1884
|
+
"widget"
|
|
1734
1885
|
]
|
|
1735
1886
|
},
|
|
1736
1887
|
{
|
|
@@ -2048,6 +2199,24 @@
|
|
|
2048
2199
|
"saas"
|
|
2049
2200
|
]
|
|
2050
2201
|
},
|
|
2202
|
+
{
|
|
2203
|
+
"slug": "landing-sections",
|
|
2204
|
+
"title": "Landing Sections",
|
|
2205
|
+
"category": "infra",
|
|
2206
|
+
"description": "CRUD-driven admin editor for the public landing-page composition. Ships a pure reducer + LandingProvider store adapter + admin LandingView/LandingEditorView built on the shared CRUD primitives, plus a per-section LandingSectionShell that handles background image + custom Tailwind className overlay. Sections carry { kind, order, title, subtitle, enabled, imageUrl, imageRatio, bgImageUrl, className, config (JSON) } with up/down reorder arrows. Consumers map each `kind` (hero, features, pricing, blog, changelog, testimonials, portfolio, services, stats, newsletter, faq, cta, custom) to their own renderer wrapped in <LandingSectionShell>. Canonical pattern used by all 7 rr website templates.",
|
|
2207
|
+
"source": "rahman-resources",
|
|
2208
|
+
"install": "npx rahman-resources add landing-sections",
|
|
2209
|
+
"npmPackages": [],
|
|
2210
|
+
"exampleCode": "",
|
|
2211
|
+
"agentRecipe": "Run `npx rr add landing-sections`. Fold `landingReducer` into your root reducer (cases LANDING_UPSERT + LANDING_DELETE), seed State.landingSections with `defaultLandingSections()`, wrap your StoreProvider with `<LandingProvider value={adapter}/>` where adapter maps {items, publicBase, adminBase, create, update, remove} from your dispatch. Mount `<LandingView/>` at `/admin/landing` and `<LandingEditorView id={params.id}/>` at `/admin/landing/[id]`. In HomePage iterate `state.landingSections.filter(s => s.enabled).sort((a,b) => a.order - b.order)` and render each through `<LandingSectionShell section={s}>` wrapping your own per-`kind` renderer.",
|
|
2212
|
+
"tags": [
|
|
2213
|
+
"admin",
|
|
2214
|
+
"landing",
|
|
2215
|
+
"cms",
|
|
2216
|
+
"sections",
|
|
2217
|
+
"crud"
|
|
2218
|
+
]
|
|
2219
|
+
},
|
|
2051
2220
|
{
|
|
2052
2221
|
"slug": "faq-section",
|
|
2053
2222
|
"title": "FAQ Section",
|
|
@@ -2143,6 +2312,273 @@
|
|
|
2143
2312
|
"list",
|
|
2144
2313
|
"detail"
|
|
2145
2314
|
]
|
|
2315
|
+
},
|
|
2316
|
+
{
|
|
2317
|
+
"slug": "theme-presets",
|
|
2318
|
+
"title": "Theme Presets — unified switcher with bundled tweakcn registry",
|
|
2319
|
+
"category": "ui",
|
|
2320
|
+
"description": "Single unified theme controller for next-themes apps. ThemePresetSwitcher ships a Palette-icon Popover trigger with three stacked sections: (1) sticky light/dark/system mode tabs, (2) sticky preset-count row with a Default reset button, (3) scrollable color-preset list grouped by mood (Profesional / Bold / Hangat / Artistik / Gelap + Lainnya). Hover-to-preview + click-to-commit + restore-on-close semantics. ThemePresetProvider context wraps state so deeply-nested consumers read via useThemePreset() instead of mounting the switcher directly. ThemeColorSync wrapper enables live tweakcn-CSS-variable preview on routes that need it. Tweakcn registry (~30 curated presets after HIDDEN_PRESETS filter drops Doom 64 / Cyberpunk / Neo Brutalism / Bubblegum / Candyland / Pastel Dreams) ships inside the slice as registry-data.json and loads lazily via dynamic import — code-splits into its own chunk, zero consumer public/ setup, no network roundtrip to a hosted URL. localStorage key `host:theme-preset` (rename via slice fork). CK-1F (2026-05-23) — collapsed prior TweakcnSwitcher + ThemePicker + phantom `theme-preset-switcher` catalog entry into this single component.",
|
|
2321
|
+
"source": "CareerPack + notion-page-clone",
|
|
2322
|
+
"install": "npx rahman-resources add theme-presets",
|
|
2323
|
+
"npmPackages": [],
|
|
2324
|
+
"exampleCode": "",
|
|
2325
|
+
"agentRecipe": "Run `npx rr add theme-presets` (registry-data.json ships inside the slice — no separate public/ copy step). Wrap your tree once with `<ThemePresetProvider>` (inside next-themes' ThemeProvider). Mount `<ThemePresetSwitcher />` anywhere in your header / sidebar / settings — one component handles light/dark/system + preset palette. Wrap dashboard with `<ThemeColorSync>` if you need live tweakcn variable preview on inner routes. Deeply-nested consumers read state via `useThemePreset()` (returns `{ presetName, registry, setPreset, preview, restore, isReady }`). For lower-level access: `applyTweakcnPreset(name)`, `previewTweakcnPreset(name)`, `restoreTweakcnPreset()`, `groupTweakcnPresets(items)`, `tweakcnSwatches(preset)` all exported from `@/features/theme-presets`. To rename localStorage key, fork `STORAGE_KEY` in `lib/tweakcn/types.ts`.",
|
|
2326
|
+
"tags": [
|
|
2327
|
+
"ui",
|
|
2328
|
+
"theme",
|
|
2329
|
+
"tweakcn",
|
|
2330
|
+
"color",
|
|
2331
|
+
"preset",
|
|
2332
|
+
"switcher",
|
|
2333
|
+
"popover",
|
|
2334
|
+
"next-themes",
|
|
2335
|
+
"notion-like"
|
|
2336
|
+
]
|
|
2337
|
+
},
|
|
2338
|
+
{
|
|
2339
|
+
"slug": "files",
|
|
2340
|
+
"title": "Files — pluggable upload + URL resolver with storage-adapter contract",
|
|
2341
|
+
"category": "data",
|
|
2342
|
+
"description": "Host-pluggable file upload + URL resolution. Ships <FileUploadButton>, <FileChip>, useFileUpload(), useFileUrl() — all reading from a FilesAdapter the host wires via <FilesAdapterProvider>. Bundled localStorage demo adapter stores blobs as data URLs (small files only). Drop in your own adapter for Convex / S3 / GCS / R2. The slice itself has zero backend coupling, proving the storage-adapter pattern for the rest of the open-silong blocked-pending-adapter wave (cover, workspace-io, templates, …).",
|
|
2343
|
+
"source": "notion-page-clone",
|
|
2344
|
+
"install": "npx rahman-resources add files",
|
|
2345
|
+
"npmPackages": [],
|
|
2346
|
+
"exampleCode": "",
|
|
2347
|
+
"agentRecipe": "Run `npx rr add files`. Wrap your tree with `<FilesAdapterProvider adapter={...}>` — pass `useLocalStorageFilesAdapter()` for a quick demo or implement `FilesAdapter` (upload + remove + useUrl) against your backend. Then drop `<FileUploadButton onUploaded={...}>` anywhere; pair with `<FileChip fileRef={...}>` for rendered chips. Hooks: `useFileUpload()` returns `{upload, uploading, progress, removeFromStorage}`; `useFileUrl(storageId)` resolves to a fetchable URL (Convex adapter uses useQuery for live invalidation; demo reads localStorage synchronously). To wire S3: implement the FilesAdapter interface with presigned URLs + DELETE; the slice doesn't care which backend you pick.",
|
|
2348
|
+
"tags": [
|
|
2349
|
+
"data",
|
|
2350
|
+
"upload",
|
|
2351
|
+
"files",
|
|
2352
|
+
"storage",
|
|
2353
|
+
"adapter",
|
|
2354
|
+
"portable",
|
|
2355
|
+
"notion-like"
|
|
2356
|
+
]
|
|
2357
|
+
},
|
|
2358
|
+
{
|
|
2359
|
+
"slug": "equation",
|
|
2360
|
+
"title": "Equation — Notion-style KaTeX block primitive",
|
|
2361
|
+
"category": "ui",
|
|
2362
|
+
"description": "Inline-or-display LaTeX equation block — Notion-inspired primitive. KaTeX-rendered with edit/preview toggle, raw-text fallback when KaTeX fails to parse. Pure UI primitive (zero Convex tables, zero global state). Lifted from notion-page-clone (Nosion). Use standalone OR bundled via the notion-blocks bundle. Drop into any React surface — docs, marketing landing, editor.",
|
|
2363
|
+
"source": "notion-page-clone",
|
|
2364
|
+
"install": "npx rahman-resources add equation",
|
|
2365
|
+
"npmPackages": [],
|
|
2366
|
+
"exampleCode": "",
|
|
2367
|
+
"agentRecipe": "Run `npx rr add equation`. Single npm dep: katex. Import `import { EquationBlock } from \"@/features/equation\"`. Props-driven: pass `value` (LaTeX string) + `onChange`. For display-mode (block-level) pass `displayMode`. Renders raw text if KaTeX parse fails. Bundled inside notion-blocks if you also want code/notify/drag-fill.",
|
|
2368
|
+
"tags": [
|
|
2369
|
+
"ui",
|
|
2370
|
+
"notion",
|
|
2371
|
+
"notion-like",
|
|
2372
|
+
"equation",
|
|
2373
|
+
"katex",
|
|
2374
|
+
"latex",
|
|
2375
|
+
"math",
|
|
2376
|
+
"block",
|
|
2377
|
+
"primitive",
|
|
2378
|
+
"editor"
|
|
2379
|
+
]
|
|
2380
|
+
},
|
|
2381
|
+
{
|
|
2382
|
+
"slug": "code-block",
|
|
2383
|
+
"title": "Code Block — Notion-style syntax-highlighted code primitive",
|
|
2384
|
+
"category": "ui",
|
|
2385
|
+
"description": "Highlight.js-powered code block — Notion-inspired primitive. Language selector dropdown (auto-detect + 50+ language packs), copy-to-clipboard button, line-wrap toggle. Pure-UI primitive — no Convex tables. Lifted from notion-page-clone (Nosion). Use standalone OR bundled via notion-blocks.",
|
|
2386
|
+
"source": "notion-page-clone",
|
|
2387
|
+
"install": "npx rahman-resources add code-block",
|
|
2388
|
+
"npmPackages": [],
|
|
2389
|
+
"exampleCode": "",
|
|
2390
|
+
"agentRecipe": "Run `npx rr add code-block`. Single npm dep: highlight.js. Import `import { CodeBlock, languageLabel } from \"@/features/code-block\"`. Props: `value` + `onChange` + `language` + `onLanguageChange`. Bundled inside notion-blocks if you also want equation/notify/drag-fill.",
|
|
2391
|
+
"tags": [
|
|
2392
|
+
"ui",
|
|
2393
|
+
"notion",
|
|
2394
|
+
"notion-like",
|
|
2395
|
+
"code",
|
|
2396
|
+
"syntax",
|
|
2397
|
+
"highlight",
|
|
2398
|
+
"highlight.js",
|
|
2399
|
+
"block",
|
|
2400
|
+
"primitive",
|
|
2401
|
+
"editor"
|
|
2402
|
+
]
|
|
2403
|
+
},
|
|
2404
|
+
{
|
|
2405
|
+
"slug": "notifications",
|
|
2406
|
+
"title": "Notifications — Notion-style per-page Notify Me",
|
|
2407
|
+
"category": "ui",
|
|
2408
|
+
"description": "Pure-client per-page subscription primitive — Notion-inspired bell button + popover. State stored in localStorage (no backend needed). Shipped as a `NotifyMePopover` toggled from a page-action bell. Frequency choices: instant / daily digest / weekly digest. Lifted from notion-page-clone (Nosion). Use standalone OR bundled via notion-blocks.",
|
|
2409
|
+
"source": "notion-page-clone",
|
|
2410
|
+
"install": "npx rahman-resources add notifications",
|
|
2411
|
+
"npmPackages": [],
|
|
2412
|
+
"exampleCode": "",
|
|
2413
|
+
"agentRecipe": "Run `npx rr add notifications`. Zero npm deps (only shadcn button + popover). Import `import { NotifyMePopover, useSubscription } from \"@/features/notifications\"`. Drop the popover anywhere; useSubscription(pageId) hook returns `{ isSubscribed, frequency, subscribe, unsubscribe, setFrequency }` reading from localStorage. To wire a real backend, swap the localStorage hook for your own.",
|
|
2414
|
+
"tags": [
|
|
2415
|
+
"ui",
|
|
2416
|
+
"notion",
|
|
2417
|
+
"notion-like",
|
|
2418
|
+
"notifications",
|
|
2419
|
+
"subscribe",
|
|
2420
|
+
"notify",
|
|
2421
|
+
"bell",
|
|
2422
|
+
"popover",
|
|
2423
|
+
"localstorage",
|
|
2424
|
+
"primitive"
|
|
2425
|
+
]
|
|
2426
|
+
},
|
|
2427
|
+
{
|
|
2428
|
+
"slug": "database-cell-selection",
|
|
2429
|
+
"title": "Database Cell Selection — Notion-style drag-fill + multi-select",
|
|
2430
|
+
"category": "ui",
|
|
2431
|
+
"description": "Notion-style grid cell interaction primitives: drag-fill (Sheets/Excel-style range fill), multi-cell selection with shift-click + arrow-key extension, paste-from-clipboard column adapter. Pure-UI hooks + components, no Convex tables. Lifted from notion-page-clone (Nosion). Pair with any tabular UI (notion-shell databases, ag-grid, custom React table, etc.).",
|
|
2432
|
+
"source": "notion-page-clone",
|
|
2433
|
+
"install": "npx rahman-resources add database-cell-selection",
|
|
2434
|
+
"npmPackages": [],
|
|
2435
|
+
"exampleCode": "",
|
|
2436
|
+
"agentRecipe": "Run `npx rr add database-cell-selection`. Zero deps. Import `import { useDragFill, SelectableCell, useCellSelection } from \"@/features/database-cell-selection\"`. Wrap your grid container with the selection hook; per-cell `<SelectableCell row col>` provides the click-and-drag affordance. Drag handles supplied by useDragFill. Composable with notion-shell's NotionDatabase or any custom grid.",
|
|
2437
|
+
"tags": [
|
|
2438
|
+
"ui",
|
|
2439
|
+
"notion",
|
|
2440
|
+
"notion-like",
|
|
2441
|
+
"database",
|
|
2442
|
+
"grid",
|
|
2443
|
+
"cell",
|
|
2444
|
+
"selection",
|
|
2445
|
+
"drag-fill",
|
|
2446
|
+
"spreadsheet",
|
|
2447
|
+
"primitive",
|
|
2448
|
+
"table"
|
|
2449
|
+
]
|
|
2450
|
+
},
|
|
2451
|
+
{
|
|
2452
|
+
"slug": "notion-database",
|
|
2453
|
+
"title": "Notion-like Database Table — full table with import/export + row peek + relation/rollup + row multi-select + calendar drag + DB-level menu + full-page shell + AST formula engine (11 views · 18 cells · CSV + JSON)",
|
|
2454
|
+
"category": "ui",
|
|
2455
|
+
"description": "Portable Notion-style database table surface — full capability in one slice. Optional companion to notion-shell — install shell alone for pages + sidebar + block editor, add notion-database when you want embedded databases with full table capability. Ships NotionDatabase (full DB UI w/ ViewTabs + ViewOptions + per-column menu + FilterBuilder/SortBuilder popovers), NotionProperty (value + schema editor), 16 property-cell types (text / number / checkbox / select / multi_select / status / date / url / email / phone / files / person / formula / created_time / last_edited_time / unique_id), 11 built-in views: Table / Board / List / Gallery / Calendar / Feed PLUS Chart (recharts bar/line/area/pie/donut + inline kind/X/agg/Y pickers) / Dashboard (KPI strip + group breakdowns + recent updates) / Form (public-facing submit-to-create — title + per-property inputs, optional required-field validation, configurable show/hide + success message via inline Settings panel) / Map (SVG world + lat/lng pins, no leaflet) / Timeline (Gantt-style with drag-to-shift / drag-to-resize). FilterBuilder + SortBuilder exported standalone for toolbar embedding. Formula cells use a pure expression engine ({{title}}/{{prop}} interpolation + concat/upper/lower/round/if/etc fns + `=expr` math). Files cells store URL refs (paste-URL workflow; host can plug `files` slice adapter for upload). Person cells are simplified vs upstream — no user directory lookup, just initials chips. Created_time / last_edited_time read row.createdAt / row.updatedAt directly. unique_id auto-derives from row position + optional prefix. Pure helpers: applyView, groupBy, bucketByDate. Domain types live in notion-shell (single source of truth — Page.rowOfDatabaseId + rowProps reference them) and re-exported here. Relation + rollup property types deferred to upstream open-silong mega-bundle (need cross-DB context). v0.5 added drop-in Convex backend templates (dual-mode: minimal single-user OR full multi-workspace) from open-silong's template-base/. v0.6 (Phase 7.10) merges former database-io slice in-tree: DatabaseIOActions toolbar (Export CSV/JSON · Import CSV/JSON · Download dynamic CSV/JSON templates), CsvImportDialog (auto-map columns + create-new-of-type picker), JsonImportDialog (schema diff + import), exportDatabase / exportDatabaseToCsv / parseExport / parseCsv / buildCsvTemplate / buildJsonTemplate helpers — all from `@/features/notion-database`. CsvNewProperty + JsonImportResult.newProperties now expose `tempId` so host can remap rowProps keys when persisting (single import handler serves both formats). Cell editor UX consolidated v0.5.3 — SelectCell + MultiSelectCell share OptionPicker (shared/identical popover: search-as-create + per-option rename/color/delete). Property-type lists single-source via PROPERTY_TYPE_META registry (v0.5.2). v0.7 (CK-1D Phase 1) lifts row-detail subsystem from notion-page-clone: RowPeek (sheet + dialog + persisted mode toggle via useRowOpenMode localStorage hook), RowDetailSheet (right drawer), RowDetailDialog (centered modal), RowDetailBody (shared chrome), RowOpenModeSwitcher (sheet/dialog/page toggle). Pure slot-driven — host supplies icon picker, properties form, and block editor via render slots (iconSlot, propertiesSlot, blocksSlot); no Convex / comments / editor coupling. onOpenAsPage callback wires one-shot navigation without changing the persisted default. v0.8 (CK-1D Phase 2) lifts relation + rollup cells: RelationCell (cross-database link picker w/ search + create-new-row affordance + stale-link healing) and RollupCell (read-only aggregate display — count / count_unique / values / sum / avg / min / max / earliest / latest / checked / percent_checked). PropertyType union extended with 'relation' and 'rollup'. Property gained relationDatabaseId / rollupRelationPropertyId / rollupTargetPropertyId / rollupAggregate fields. NotionDatabase added new props pages, databases, onCreateRelatedRow so host stays the source of truth — cells gracefully no-op when omitted. v0.9 (CK-1D Phase 3) lifts row multi-select subsystem: RowSelectionProvider (React Context holding selected id set + anchor; drops stale ids when rowOrder shrinks), RowMarqueeOverlay (drag-to-select rubber-band over any container w/ data-row-shell-id markers — AutoCAD window/crossing modes, threshold + long-press text-origin activation, additive shift-drag), RowSelectionToolbar (floating bottom-center action bar w/ N-rows-selected count, optional locked badge, host-supplied extraSlot, Delete button via onDelete callback, Clear via Esc/X), RowSelectionKeyboard (Esc clear + Del/Backspace bulk delete + outside-click dismiss). TableView automatically tags rows with data-row-shell-id and applies a primary-tinted ring when wrapped in RowSelectionProvider. Marquee primitive + useMarqueeDrag hook exported for reuse on Board / Gallery / custom views. v0.10 (CK-1D Phase 5) adds HeaderCheckboxGutter (tri-state select-all/clear w/ aria-checked='mixed' indeterminate) + RowCheckbox (per-row toggle) — TableView auto-renders a checkbox gutter column whenever a RowSelectionProvider is in scope. Pure calendarDrag helpers (parseExistingDate, formatDateValue, shiftYmd, computeDateShift, parseDropTargetId) exported for hosts wiring CalendarView/Timeline drag-to-move without taking on @dnd-kit coupling inside the slice. Column drag-reorder + row drag-reorder primitives deferred — upstream's flexbox-table refactor conflicts with rr's semantic <table> + 200-LOC view cap. v0.11 (CK-1D Phase 7) lifts Intl-based number + date formatters: lib/numberFormat.ts (resolveNumberFormat / formatPropertyNumber + COMMON_CURRENCIES 16-code picker) and lib/dateFormat.ts (parseYmdToLocal / formatYmd / formatTime / formatDateValue + DATE_FORMAT_LABELS / TIME_FORMAT_LABELS). Property gained numberCurrencyCode + dateFormat + timeFormat + dateIncludeTime fields. NumberCell currency now honours per-property ISO code; DateCell accepts an optional `prop` and routes through formatDateValue when any date-related field is set on it. Notion-shell DatabaseViewConfig split into ./view-config-types.ts to keep types.ts under the 200-LOC cap. v0.12 (CK-1D Phase 4) adds database-shell subsystem: DatabaseMenu (rename / duplicate {structure | with rows} / lock-toggle / delete popover — every action hidden when its callback is omitted; native window.confirm + window.prompt fallbacks keep zero new dialog deps) and DatabasePage (full-page wrapper composing a big header — icon slot + inline title input + DatabaseMenu — over a NotionDatabase body). NotionDatabase grew a `headerActions` render slot so hosts can drop a DatabaseMenu inline without switching to DatabasePage. Database type gained an optional `locked` flag. Strip vs upstream: useDbAdapter (Convex coupling) + SubItemsPicker (sub-items tree) + IconPickerPopover (lives in icon-picker slice) + DataMenu (database-json slice) deferred — host wires those externally. v0.13 (CK-1D Phase 6) replaces the flat formula.ts evaluator with a typed AST engine under lib/formulaEngine/ (types, coerce, dateUtils, ParserClass, parser, functions, evaluator, deps): recursive-descent parser w/ source-position tracking; typed FormulaValue (string/number/boolean/date/null/list) instead of string-only; circular-reference guard via visited set + per-row memoisation cache; new fn surface — substring, dateAdd, dateSubtract, dateBetween, formatDate, count, sum, join (on top of existing concat/lower/upper/length/if/and/or/not/empty/contains/replace/round/floor/ceil/abs/min/max/now/today). Relation refs in formulas now resolve via the workspace pages passed through NotionDatabase. FormulaCell upgraded — popover now shows parse-error message + source position; cell display flips to destructive style on invalid. Legacy evaluateFormula() string wrapper preserved for existing callers; new code should import evalFormula / formatFormulaValue from `@/features/notion-database`. collectDeps() exported for hosts wiring formula-dependency invalidation.",
|
|
2456
|
+
"source": "open-silong",
|
|
2457
|
+
"install": "npx rahman-resources add notion-database",
|
|
2458
|
+
"npmPackages": [],
|
|
2459
|
+
"exampleCode": "",
|
|
2460
|
+
"agentRecipe": "Run `npx rr add notion-database` (cascades notion-shell as peer). Import: `import { NotionDatabase, NotionProperty, VIEW_REGISTRY, DatabaseIOActions, RowPeek } from \"@/features/notion-database\"`. NotionDatabase ships full props-driven DB UI — host owns rows + dispatches CRUD callbacks. For just one view in isolation, import the specific view component (TableView / BoardView / etc.). Property cells auto-render via renderPropertyCell helper. Pure helpers: applyView / groupBy / bucketByDate. For import/export, mount `<DatabaseIOActions db={db} rows={rows} onImport={async ({ newProperties, rows }) => { const tempToReal: Record<string, string> = {}; for (const np of newProperties) { const realId = await dispatchAddProperty(np); tempToReal[np.tempId] = realId; } for (const r of rows) { const rowId = await dispatchAddRow(r.title); for (const [propKey, v] of Object.entries(r.rowProps)) { await dispatchSetValue(rowId, tempToReal[propKey] ?? propKey, v); } } }} />` next to your DB toolbar — exports CSV/JSON + imports w/ schema diff + downloads dynamic templates from live db.properties. tempId on each new property lets host remap rowProps keys to its real backend ids. For backend persistence, copy template-base/database-silong/convex/ from the open-silong repo: handlers go to convex/, schema fragment merges into convex/schema.ts. Pick _shared/minimal/ (single-user, noop authz) or _shared/full/ (requires @convex-dev/auth + workspaces tables). See CONVEX-BACKEND.md.",
|
|
2461
|
+
"tags": [
|
|
2462
|
+
"ui",
|
|
2463
|
+
"notion",
|
|
2464
|
+
"notion-like",
|
|
2465
|
+
"database",
|
|
2466
|
+
"table",
|
|
2467
|
+
"board",
|
|
2468
|
+
"list",
|
|
2469
|
+
"gallery",
|
|
2470
|
+
"calendar",
|
|
2471
|
+
"feed",
|
|
2472
|
+
"chart",
|
|
2473
|
+
"dashboard",
|
|
2474
|
+
"form",
|
|
2475
|
+
"map",
|
|
2476
|
+
"timeline",
|
|
2477
|
+
"gantt",
|
|
2478
|
+
"kanban",
|
|
2479
|
+
"views",
|
|
2480
|
+
"filter",
|
|
2481
|
+
"sort",
|
|
2482
|
+
"property",
|
|
2483
|
+
"files",
|
|
2484
|
+
"person",
|
|
2485
|
+
"formula",
|
|
2486
|
+
"timestamp",
|
|
2487
|
+
"unique-id",
|
|
2488
|
+
"csv",
|
|
2489
|
+
"json",
|
|
2490
|
+
"import",
|
|
2491
|
+
"export",
|
|
2492
|
+
"template",
|
|
2493
|
+
"data",
|
|
2494
|
+
"backup",
|
|
2495
|
+
"primitive",
|
|
2496
|
+
"optional",
|
|
2497
|
+
"embeddable"
|
|
2498
|
+
]
|
|
2499
|
+
},
|
|
2500
|
+
{
|
|
2501
|
+
"slug": "database-io",
|
|
2502
|
+
"title": "[DEPRECATED] Database IO — merged into notion-database v0.6",
|
|
2503
|
+
"category": "ui",
|
|
2504
|
+
"description": "DEPRECATED — all functionality merged into `notion-database` v0.6 (Phase 7.10, 2026-05-22). This slice is now a thin re-export shim from `@/features/notion-database` to keep existing consumers compiling. New code should `npx rr add notion-database` (now bundles CSV + JSON import/export + dynamic templates) instead of installing this separately. Slice will be removed in v1.0. Original surface (DatabaseIOActions / CsvImportDialog / JsonImportDialog / exportDatabase / buildCsvTemplate / buildJsonTemplate) remains exported from notion-database — see its catalog entry. Merge rationale: 100% peer coupling to notion-database (every file imported Database/Page/Property types from it) + zero independent install path (always installed alongside notion-database in practice) = no modularity benefit from separation.",
|
|
2505
|
+
"source": "notion-page-clone",
|
|
2506
|
+
"install": "npx rahman-resources add database-io",
|
|
2507
|
+
"npmPackages": [],
|
|
2508
|
+
"exampleCode": "",
|
|
2509
|
+
"agentRecipe": "⚠️ DEPRECATED — use `npx rr add notion-database` (now bundles import/export). This slice is a thin re-export shim from `@/features/notion-database` for back-compat. New code: `import { DatabaseIOActions } from \"@/features/notion-database\"`. Remove when migration complete; slice scheduled for removal in v1.0.",
|
|
2510
|
+
"tags": [
|
|
2511
|
+
"ui",
|
|
2512
|
+
"notion",
|
|
2513
|
+
"notion-like",
|
|
2514
|
+
"database",
|
|
2515
|
+
"csv",
|
|
2516
|
+
"json",
|
|
2517
|
+
"import",
|
|
2518
|
+
"export",
|
|
2519
|
+
"template",
|
|
2520
|
+
"data",
|
|
2521
|
+
"backup",
|
|
2522
|
+
"spreadsheet",
|
|
2523
|
+
"wire-format",
|
|
2524
|
+
"primitive",
|
|
2525
|
+
"optional"
|
|
2526
|
+
]
|
|
2527
|
+
},
|
|
2528
|
+
{
|
|
2529
|
+
"slug": "notion-shell",
|
|
2530
|
+
"title": "Notion Shell — page + sidebar + block editor primitives (pure, no database)",
|
|
2531
|
+
"category": "ui",
|
|
2532
|
+
"description": "Portable Notion-style PAGE + SIDEBAR + BLOCK editor primitives. CI-wave (2026-05-21) split the database surface out — install the optional `notion-database` peer for embedded TableView / BoardView / ListView / GalleryView / CalendarView / FeedView, NotionDatabase, NotionProperty, ViewTabs, ViewOptions, ColumnHeaderMenu, property-cells. notion-shell alone gives you Notion-clone pages + sidebar + editor without the database weight. Domain types (Database, Property, PropertyValue, DbView, DatabaseViewConfig, DatabaseFilter, DatabaseSort) remain in notion-shell as the single source of truth (Page.rowOfDatabaseId + rowProps reference them). FULL OLD DESC BELOW: Portable Notion-style wrapper primitives. PAGE EDITOR: NotionPage (optional cover image band + header + body), NotionHeader / NotionSidebar / NotionBlock (live inline-markdown decorator, hover actions menu, optional dragHandle slot), SlashMenu (searchable block-type picker w/ keyboard nav), BlockActionsMenu (turn-into / duplicate / delete), InsertBlockButton (`+` trigger w/ SlashMenu), SortableBlockList (@dnd-kit render-prop wrapper for block reorder), PageActionsMenu (header dropdown: cover/favorite/duplicate/export/trash). DATABASE: NotionDatabase (full DB surface w/ tabs + options + per-column menu), NotionProperty (10 property-cell types), 6 built-in views (Table/Board/List/Gallery/Calendar/Feed), ViewTabs, ViewOptions (sort + filter + search popover), ColumnHeaderMenu. SPECIALISED BLOCK RENDERERS: ImageRenderer (URL + caption + preview), EmbedRenderer (YouTube/Vimeo/Loom/Figma/CodePen/Spotify auto-detect + iframe fallback). Pure helpers: applyView, groupBy, bucketByDate. Pure / props-driven — host owns data + change handlers.",
|
|
2533
|
+
"source": "notion-page-clone",
|
|
2534
|
+
"install": "npx rahman-resources add notion-shell",
|
|
2535
|
+
"npmPackages": [],
|
|
2536
|
+
"exampleCode": "",
|
|
2537
|
+
"agentRecipe": "Run `npx rr add notion-shell` for the portable UI wrappers ONLY (no backend). NPM deps: @dnd-kit/core, @dnd-kit/sortable, @dnd-kit/utilities. Import: `import { NotionPage, NotionSidebar, NotionBlock, NotionDatabase, SortableBlockList, PageActionsMenu, InsertBlockButton, ViewTabs, ImageRenderer, EmbedRenderer } from \"@/features/notion-shell\"`. NotionBlock ships slash menu + decorator + actions menu + dragHandle slot. NotionPage ships optional cover prop. SortableBlockList wraps a render-prop callback `(id, dragProps) => <NotionBlock dragHandle={...} />`. NotionDatabase ships 6 views via VIEW_REGISTRY. Property cells: text/number/checkbox/select/multi-select/status/date/url/email/phone all built in. For rich icon UX wire `renderIcon` + `renderIconPicker` to `@/features/icon-picker`. **PRODUCT POINTER: the full Convex-backed Notion-clone OS (multi-workspace + auth + sharing + comments + snapshots + MCP) lives at https://github.com/rahmanef63/open-silong — clone that repo for the production stack; use this slice when you only need to embed the Notion-style UI in another project.**",
|
|
2538
|
+
"tags": [
|
|
2539
|
+
"ui",
|
|
2540
|
+
"notion",
|
|
2541
|
+
"shell",
|
|
2542
|
+
"wrapper",
|
|
2543
|
+
"sidebar",
|
|
2544
|
+
"page",
|
|
2545
|
+
"database",
|
|
2546
|
+
"primitive",
|
|
2547
|
+
"portable",
|
|
2548
|
+
"slash-menu",
|
|
2549
|
+
"decorator",
|
|
2550
|
+
"wysiwyg",
|
|
2551
|
+
"views",
|
|
2552
|
+
"kanban",
|
|
2553
|
+
"calendar",
|
|
2554
|
+
"gallery",
|
|
2555
|
+
"drag",
|
|
2556
|
+
"cover",
|
|
2557
|
+
"embed",
|
|
2558
|
+
"image",
|
|
2559
|
+
"notion-like"
|
|
2560
|
+
]
|
|
2561
|
+
},
|
|
2562
|
+
{
|
|
2563
|
+
"slug": "workspace-shell",
|
|
2564
|
+
"title": "Workspace Shell — atomic (workspace × menuSet) NavContext",
|
|
2565
|
+
"category": "ui",
|
|
2566
|
+
"description": "Unified workspace + menu navigation primitive. NavContext = (workspaceId, menuSetId) atomic pair. 2-tier dropdown switcher (workspace radio + menuSet picker), ContextBadge header chip, full editor with tabs (menus / workspace tree / settings), tiered RBAC (admin menus.manage, user menus.fork). Replaces silo'd menu-store + workspace-store slices in superspace. Resolver chain: user nav-context cache > user assignment > workspace default > system. Source: superspace.",
|
|
2567
|
+
"source": "superspace",
|
|
2568
|
+
"docsUrl": "",
|
|
2569
|
+
"install": "",
|
|
2570
|
+
"npmPackages": [],
|
|
2571
|
+
"exampleCode": "",
|
|
2572
|
+
"agentRecipe": "Run `npx rr add workspace-shell`. Tables prefixed `workspaceShell_*` (menuSets, menuItems, itemComponents, wsAssignments, userAssignments, rolePerms, navContext). Mount `<NavContextProvider workspaceId={wsId}>` inside your auth provider; use `useNavContext(wsId)` to read `{workspace, menuSet, source, effectiveMenuItems, setMenuSet, forkMenuSet}`. Drop-in `<WorkspaceSwitcher canFork />` in sidebar header. Tiered RBAC: `menus.manage` for workspace-default editing, `menus.fork` for user-personal copy. Resolver chain: user cache → user assignment → workspace default → none. Pair with audit-log slice for context-switch / fork events (graceful try/catch if absent). Effective items query applies role filter via workspaceShell_rolePerms (no rolePerms → show all, pre-RBAC compat).",
|
|
2573
|
+
"tags": [
|
|
2574
|
+
"ui",
|
|
2575
|
+
"navigation",
|
|
2576
|
+
"workspace",
|
|
2577
|
+
"menu",
|
|
2578
|
+
"shell",
|
|
2579
|
+
"convex",
|
|
2580
|
+
"rbac"
|
|
2581
|
+
]
|
|
2146
2582
|
}
|
|
2147
2583
|
],
|
|
2148
2584
|
"slices": [
|
|
@@ -2216,7 +2652,7 @@
|
|
|
2216
2652
|
"title": "DOKU — Indonesia Payment",
|
|
2217
2653
|
"category": "payment",
|
|
2218
2654
|
"kind": "full",
|
|
2219
|
-
"version": "0.1.
|
|
2655
|
+
"version": "0.1.1",
|
|
2220
2656
|
"description": "Pembayaran lokal Indonesia via DOKU — Checkout (hosted) + Direct (VA / QRIS / e-Wallet / PayLater / Minimarket / Kartu). HMAC-signed REST + signature-verified webhook + idempotent retries. Sibling slice to midtrans-payment dengan paymentOrders schema yang dishare.",
|
|
2221
2657
|
"source": "rahmanef63/resource-site",
|
|
2222
2658
|
"slicePath": "frontend/slices/doku-payment",
|
|
@@ -2280,7 +2716,7 @@
|
|
|
2280
2716
|
"title": "Midtrans — Indonesia Payment",
|
|
2281
2717
|
"category": "payment",
|
|
2282
2718
|
"kind": "full",
|
|
2283
|
-
"version": "0.1.
|
|
2719
|
+
"version": "0.1.1",
|
|
2284
2720
|
"description": "Pembayaran lokal Indonesia via Midtrans Snap (BCA, Mandiri, BRI, e-wallet GoPay/OVO/Dana, QRIS). Webhook untuk konfirmasi. Provider-isolated under components/providers/midtrans + actions/midtrans so Doku/Stripe land as siblings.",
|
|
2285
2721
|
"source": "rahmanef63/resource-site",
|
|
2286
2722
|
"slicePath": "frontend/slices/midtrans-payment",
|
|
@@ -2337,7 +2773,7 @@
|
|
|
2337
2773
|
"title": "Resend — Transactional & Newsletter",
|
|
2338
2774
|
"category": "email",
|
|
2339
2775
|
"kind": "backend",
|
|
2340
|
-
"version": "0.1.
|
|
2776
|
+
"version": "0.1.1",
|
|
2341
2777
|
"description": "Transactional email + newsletter blast via Resend. Double opt-in flow + audience segmentation. Magic-link delivery for Convex Auth.",
|
|
2342
2778
|
"source": "rahmanef63/resource-site",
|
|
2343
2779
|
"slicePath": "frontend/slices/resend-newsletter",
|
|
@@ -2841,7 +3277,8 @@
|
|
|
2841
3277
|
"cmd-k",
|
|
2842
3278
|
"navigation",
|
|
2843
3279
|
"keyboard",
|
|
2844
|
-
"search"
|
|
3280
|
+
"search",
|
|
3281
|
+
"notion-like"
|
|
2845
3282
|
],
|
|
2846
3283
|
"agentRecipe": "Run `npx rr add command-menu`. Wire <CommandPalette groups={...} onHistorySelect={...} labels={...} /> at the dashboard shell. Build groups from your feature registry; each item.onSelect handles navigation. Use <SearchModal bindings={{ pages, databases, recents, isLoading, onQueryChange, onSelectPage, onSelectDatabase }} /> for the search dialog — see slice README.md for adapter shapes."
|
|
2847
3284
|
},
|
|
@@ -2935,6 +3372,38 @@
|
|
|
2935
3372
|
],
|
|
2936
3373
|
"agentRecipe": "Run `npx rr add dashboard-shell`. Wraps app/(admin) routes. <ResponsiveDashboardShell sidebar={<AppSidebar />} topbar={<TopBar />}>{children}</ResponsiveDashboardShell>. Mobile: sidebar collapses to <Sheet>. Desktop: persistent sidebar + topbar. Embed FullWidthToggle in topbar for instant container resize."
|
|
2937
3374
|
},
|
|
3375
|
+
{
|
|
3376
|
+
"slug": "three-column",
|
|
3377
|
+
"title": "Three-Column Layout — Sidebar/Content/Inspector",
|
|
3378
|
+
"category": "ui",
|
|
3379
|
+
"kind": "ui",
|
|
3380
|
+
"version": "0.1.0",
|
|
3381
|
+
"description": "ThreeColumnLayoutAdvanced — collapsible left/right + resizable widths + responsive breakpoints + PanelSection compound (Header/Items/Footer) + per-panel footer slots. Models shadcn sidebar API for the panel interior. Pair with PanelGroup/PanelMenu/PanelSeparator primitives. Trigger ≠ header (V-wave separation rule).",
|
|
3382
|
+
"source": "superspace",
|
|
3383
|
+
"slicePath": "template-base/frontend/slices/three-column",
|
|
3384
|
+
"convexPaths": [],
|
|
3385
|
+
"npm": [],
|
|
3386
|
+
"shadcn": [
|
|
3387
|
+
"sheet",
|
|
3388
|
+
"scroll-area",
|
|
3389
|
+
"separator",
|
|
3390
|
+
"tooltip"
|
|
3391
|
+
],
|
|
3392
|
+
"env": [],
|
|
3393
|
+
"peers": [],
|
|
3394
|
+
"providers": [],
|
|
3395
|
+
"tags": [
|
|
3396
|
+
"ui",
|
|
3397
|
+
"layout",
|
|
3398
|
+
"three-column",
|
|
3399
|
+
"sidebar",
|
|
3400
|
+
"inspector",
|
|
3401
|
+
"panel-section",
|
|
3402
|
+
"responsive",
|
|
3403
|
+
"resizable"
|
|
3404
|
+
],
|
|
3405
|
+
"agentRecipe": "Run `npx rr add three-column`. <ThreeColumnLayoutAdvanced preset=\"feature\" storageKey persistState left={…PanelSection…} center={…PanelSection unstyled…} right={…PanelSection…} leftFooter centerFooter rightFooter />. Center column SHOULD pass `unstyled` to drop sidebar tokens — body is content surface. `storageKey` MUST differ per slice or persisted widths collide."
|
|
3406
|
+
},
|
|
2938
3407
|
{
|
|
2939
3408
|
"slug": "broadcast-channel-sync",
|
|
2940
3409
|
"title": "BroadcastChannel — Cross-tab Sync",
|
|
@@ -3067,42 +3536,22 @@
|
|
|
3067
3536
|
],
|
|
3068
3537
|
"agentRecipe": "Run `npx rr add event-tracking`. Writes to analyticsEvents table (no new schema). Anonymous page_view allowed pre-signup; other events require workspaceId. Session id per tab (sessionStorage), first-touch UTM in localStorage. Flush every ~500ms via requestIdleCallback. Cap retry queue at 500."
|
|
3069
3538
|
},
|
|
3070
|
-
{
|
|
3071
|
-
"slug": "theme-preset-switcher",
|
|
3072
|
-
"title": "Theme Preset Switcher",
|
|
3073
|
-
"category": "ui",
|
|
3074
|
-
"kind": "ui",
|
|
3075
|
-
"version": "0.1.0",
|
|
3076
|
-
"description": "Runtime theme swap (colors + fonts + shadows + tracking). OKLch CSS vars per preset. Persists to localStorage + Convex. Add a new preset by appending a CSS block in app/globals.css with [data-theme=\"<name>\"], then register in preset-groups.ts.",
|
|
3077
|
-
"source": "rahmanef.com",
|
|
3078
|
-
"slicePath": "template-base/frontend/shared/theme",
|
|
3079
|
-
"convexPaths": [],
|
|
3080
|
-
"npm": [],
|
|
3081
|
-
"shadcn": [],
|
|
3082
|
-
"env": [],
|
|
3083
|
-
"peers": [],
|
|
3084
|
-
"providers": [],
|
|
3085
|
-
"tags": [
|
|
3086
|
-
"theme",
|
|
3087
|
-
"presets",
|
|
3088
|
-
"oklch",
|
|
3089
|
-
"design-system"
|
|
3090
|
-
],
|
|
3091
|
-
"agentRecipe": "Run `npx rr add theme-preset-switcher`. Import ThemePresetSwitcher from @/frontend/shared/ui/components/theme-preset-switcher and mount in the topbar. Presets live in theme-presets.ts; preset-groups.ts groups them for the picker UI."
|
|
3092
|
-
},
|
|
3093
3539
|
{
|
|
3094
3540
|
"slug": "icon-picker",
|
|
3095
3541
|
"title": "Icon Picker",
|
|
3096
3542
|
"category": "ui",
|
|
3097
3543
|
"kind": "ui",
|
|
3098
|
-
"version": "0.
|
|
3099
|
-
"description": "Emoji + lucide icon picker with search, 10-color palette, Twemoji/native toggle, recents tracking. One string stores emoji OR lucide:Name OR with ?c=hex tint — backwards-compat with raw-emoji fields. Two variants: Popover (compact trigger) and Inline (full sheet/dialog use). Lifted 2026-05-
|
|
3100
|
-
"source": "
|
|
3544
|
+
"version": "0.4.1",
|
|
3545
|
+
"description": "Emoji + lucide (outline) + phosphor (fill) icon picker with search, 10-color palette, Twemoji/native toggle, recents tracking, and smart positioning. Two-tab layout (Emoji | Icon) with sub-variant pills (Native | Twemoji / Lucide | Phosphor fill). One string stores emoji OR lucide:Name OR phosphor:Name OR with ?c=hex tint — backwards-compat with raw-emoji fields. Popover auto-flips on collision (caps to Radix `--radix-popover-content-available-height`) and falls back to centered Dialog when neither side fits. Two variants: Popover (compact trigger) and Inline (full sheet/dialog use). Lifted 2026-05-25 from open-silong.",
|
|
3546
|
+
"source": "open-silong",
|
|
3101
3547
|
"slicePath": "frontend/slices/icon-picker",
|
|
3102
3548
|
"convexPaths": [],
|
|
3103
|
-
"npm": [
|
|
3549
|
+
"npm": [
|
|
3550
|
+
"@phosphor-icons/react@^2.1.10"
|
|
3551
|
+
],
|
|
3104
3552
|
"shadcn": [
|
|
3105
3553
|
"popover",
|
|
3554
|
+
"dialog",
|
|
3106
3555
|
"button",
|
|
3107
3556
|
"input",
|
|
3108
3557
|
"scroll-area",
|
|
@@ -3115,11 +3564,78 @@
|
|
|
3115
3564
|
"icon",
|
|
3116
3565
|
"emoji",
|
|
3117
3566
|
"lucide",
|
|
3567
|
+
"phosphor",
|
|
3118
3568
|
"picker",
|
|
3119
3569
|
"twemoji",
|
|
3120
|
-
"notion"
|
|
3570
|
+
"notion",
|
|
3571
|
+
"notion-like",
|
|
3572
|
+
"responsive"
|
|
3121
3573
|
],
|
|
3122
|
-
"agentRecipe": "Run `npx rr add icon-picker`. parseIconValue() decodes; lucideValue()/withColor() build. Add 'icon: v.string()' to Convex table — no migration needed for existing emoji fields. <
|
|
3574
|
+
"agentRecipe": "Run `npx rr add icon-picker` then `pnpm add @phosphor-icons/react`. parseIconValue() decodes; lucideValue() / phosphorValue() / withColor() build. Storage forms: `lucide:Name?c=hex` (outline) or `phosphor:Name?c=hex` (fill) or raw emoji. Add 'icon: v.string()' to Convex table — no migration needed for existing emoji + lucide fields. <IconPickerPopover> wraps any trigger (auto-flips, falls back to centered Dialog on tight viewports); <IconPickerInline> for sheets/dialogs. <DynamicIcon> renders from parsed value."
|
|
3575
|
+
},
|
|
3576
|
+
{
|
|
3577
|
+
"slug": "activity",
|
|
3578
|
+
"title": "Activity — public productivity log",
|
|
3579
|
+
"category": "data",
|
|
3580
|
+
"kind": "full",
|
|
3581
|
+
"version": "0.1.0",
|
|
3582
|
+
"description": "Public-facing weekly activity log. Lists user-facing activities grouped by ISO week with schema.org-friendly markup, designed to maximise SEO so the question 'what is <person> working on this week?' lands here. Convex-backed (schema + queries + unauthenticated mutations); MCP-friendly so AI workflows (Claude / GPT / custom agents) can append entries directly. All user-facing copy + per-category labels + date/time locale are prop-driven (English defaults). Lifted 2026-05-27 from rahmanef.com; 225-LOC view split into view + 2 sub-components + 4 lib helpers for the 200-LOC cap; Indonesian strings + custom primitives stripped; cross-slice auth import dropped (consumer wraps mutations).",
|
|
3583
|
+
"source": "rahmanef.com",
|
|
3584
|
+
"slicePath": "frontend/slices/activity",
|
|
3585
|
+
"convexPaths": [
|
|
3586
|
+
"convex/features/activity"
|
|
3587
|
+
],
|
|
3588
|
+
"npm": [
|
|
3589
|
+
"convex@^1.17",
|
|
3590
|
+
"lucide-react@^0.400.0",
|
|
3591
|
+
"next@^15",
|
|
3592
|
+
"react@^18"
|
|
3593
|
+
],
|
|
3594
|
+
"shadcn": [],
|
|
3595
|
+
"env": [],
|
|
3596
|
+
"peers": [],
|
|
3597
|
+
"providers": [],
|
|
3598
|
+
"tags": [
|
|
3599
|
+
"activity",
|
|
3600
|
+
"productivity",
|
|
3601
|
+
"log",
|
|
3602
|
+
"now-page",
|
|
3603
|
+
"feed",
|
|
3604
|
+
"mcp",
|
|
3605
|
+
"seo",
|
|
3606
|
+
"personal-brand"
|
|
3607
|
+
],
|
|
3608
|
+
"agentRecipe": "Run `npx rr add activity`. Spread `activityTables` into your root Convex schema. Wrap the unauthenticated `create`/`update`/`remove` `internalMutation`s with your auth model (see README Install section). Render `<ActivityFeed rows={await fetchQuery(api.activity.listPublic)} stats={await fetchQuery(api.activity.statsThisWeek)} />`. Override `copy`, `categoryLabels`, `locale` per consumer. MCP integration: map `activity_create` tool → your wrapped `create` mutation."
|
|
3609
|
+
},
|
|
3610
|
+
{
|
|
3611
|
+
"slug": "i18n-translate",
|
|
3612
|
+
"title": "i18n — Google Translate widget",
|
|
3613
|
+
"category": "ui",
|
|
3614
|
+
"kind": "ui",
|
|
3615
|
+
"version": "0.1.0",
|
|
3616
|
+
"description": "Drop-in Google Translate widget. Replaces hand-maintained locale dictionaries with on-the-fly translation to a curated locale list (16 default, prop-override). No API key, no Google Cloud billing. Auto-detect browser language on first visit, persist user choice via localStorage, click-to-reload language switching with router-refresh + in-place fallback strategies. Lifted 2026-05-27 from rahmanef.com; 510-LOC monolith split into 8 sub-files for the 200-LOC cap; project-specific Tailwind utilities stripped from defaults.",
|
|
3617
|
+
"source": "rahmanef.com",
|
|
3618
|
+
"slicePath": "frontend/slices/i18n-translate",
|
|
3619
|
+
"convexPaths": [],
|
|
3620
|
+
"npm": [
|
|
3621
|
+
"lucide-react@^0.400.0",
|
|
3622
|
+
"next@^15",
|
|
3623
|
+
"react@^18"
|
|
3624
|
+
],
|
|
3625
|
+
"shadcn": [],
|
|
3626
|
+
"env": [],
|
|
3627
|
+
"peers": [],
|
|
3628
|
+
"providers": [],
|
|
3629
|
+
"tags": [
|
|
3630
|
+
"i18n",
|
|
3631
|
+
"translate",
|
|
3632
|
+
"google-translate",
|
|
3633
|
+
"ui",
|
|
3634
|
+
"language-switcher",
|
|
3635
|
+
"locale",
|
|
3636
|
+
"widget"
|
|
3637
|
+
],
|
|
3638
|
+
"agentRecipe": "Run `npx rr add i18n-translate`. Mount `<GoogleTranslate />` anywhere (e.g. header). Add the CSP allowlist from README.md to your middleware/proxy — without it Google's script fails silently. Override `languages`, `storageKey`, and the four `*ClassName` props for per-project styling. Default `fallbackRefresh=\"reload\"` is the only path that works reliably across Next Cache Components — only opt into `\"router\"` or `\"none\"` if you've tested it on your tree."
|
|
3123
3639
|
},
|
|
3124
3640
|
{
|
|
3125
3641
|
"slug": "cta",
|
|
@@ -3245,7 +3761,7 @@
|
|
|
3245
3761
|
"title": "Testimonials",
|
|
3246
3762
|
"category": "content",
|
|
3247
3763
|
"kind": "backend",
|
|
3248
|
-
"version": "0.1.
|
|
3764
|
+
"version": "0.1.1",
|
|
3249
3765
|
"description": "Quote/name/role rotator backend. Public `listAll` + `get` (no auth — testimonials are public), admin CRUD via `requireAdmin`, internal `seed` for one-shot bootstrap. Indexed by `order` so carousel/grid keeps stable rotation. Lifted 2026-05-16 from rahmanef.com; token-based admin gate swapped for rr `_shared/auth`.",
|
|
3250
3766
|
"source": "rahmanef.com",
|
|
3251
3767
|
"slicePath": "frontend/slices/testimonials",
|
|
@@ -3283,7 +3799,7 @@
|
|
|
3283
3799
|
"title": "Services",
|
|
3284
3800
|
"category": "content",
|
|
3285
3801
|
"kind": "backend",
|
|
3286
|
-
"version": "0.1.
|
|
3802
|
+
"version": "0.1.1",
|
|
3287
3803
|
"description": "Service offerings backend — title + summary + deliverables array + sort order. Public read, admin CRUD, internal seed. Pairs with a frontend services grid/list (consumer-side). Lifted 2026-05-16 from rahmanef.com; token-based admin gate swapped for rr `_shared/auth`.",
|
|
3288
3804
|
"source": "rahmanef.com",
|
|
3289
3805
|
"slicePath": "frontend/slices/services",
|
|
@@ -3322,7 +3838,7 @@
|
|
|
3322
3838
|
"title": "Socials",
|
|
3323
3839
|
"category": "content",
|
|
3324
3840
|
"kind": "backend",
|
|
3325
|
-
"version": "0.1.
|
|
3841
|
+
"version": "0.1.1",
|
|
3326
3842
|
"description": "Single source of truth for profile/social links. Powers JSON-LD `Person.sameAs` (Google entity graph), IndieWeb `<link rel=\"me\">` tags, and footer/contact/about UI surfaces. URL-deduped, ordered, `visible` / `featured` / `relMe` / `sameAs` flags. Lifted 2026-05-16 from rahmanef.com; token-based admin gate swapped, baked-in 14-platform rahmanef seed dropped — `seed` now takes items via args so each adopter ships their own list.",
|
|
3327
3843
|
"source": "rahmanef.com",
|
|
3328
3844
|
"slicePath": "frontend/slices/socials",
|
|
@@ -3580,7 +4096,7 @@
|
|
|
3580
4096
|
"title": "Comments — Threaded",
|
|
3581
4097
|
"category": "content",
|
|
3582
4098
|
"kind": "full",
|
|
3583
|
-
"version": "0.2.
|
|
4099
|
+
"version": "0.2.1",
|
|
3584
4100
|
"description": "Polymorphic-target threaded comments. Consumer picks `TargetRef = { kind, id, subId? }` (e.g. page+block, blog+slug, task+id). Renderless <CommentsThread> + <CommentsAnchor> wrappers. useComments(bindings, opts) hook returns items + openCount + CRUD + forbiddenWords guard. Adapter pattern — see contract-negotiations §1.",
|
|
3585
4101
|
"source": "rahmanef63/resource-site",
|
|
3586
4102
|
"slicePath": "frontend/slices/comments",
|
|
@@ -3616,7 +4132,7 @@
|
|
|
3616
4132
|
"title": "SEO — AI Metadata Generator",
|
|
3617
4133
|
"category": "content",
|
|
3618
4134
|
"kind": "full",
|
|
3619
|
-
"version": "0.2.
|
|
4135
|
+
"version": "0.2.1",
|
|
3620
4136
|
"description": "Service slice for SEO metadata generation — Anthropic-backed action with per-user 24h cost guard + portable persona prop. No public route. Backend exposes generate + generateAndApply mutations gated by requireAdmin; consumers inject brand voice via the personaContext arg (or buildSeoSystemPrompt factory).",
|
|
3621
4137
|
"source": "rahmanef63/resource-site",
|
|
3622
4138
|
"slicePath": "frontend/slices/seo",
|
|
@@ -3758,6 +4274,42 @@
|
|
|
3758
4274
|
],
|
|
3759
4275
|
"agentRecipe": "Run `npx rr add feature-grid`. <FeatureGridSection eyebrow title subtitle items columns layout align /> — only `items` required. Each item: `{ id, title, body, icon?, image?, link? }`. `icon` can be a LucideIcon component (rendered as 5×5 inline) or a string (rendered as letter fallback). `layout=\"alternating\"` produces image+text rows that flip per index — set `image` per item for that variant."
|
|
3760
4276
|
},
|
|
4277
|
+
{
|
|
4278
|
+
"slug": "landing-sections",
|
|
4279
|
+
"title": "Landing Sections",
|
|
4280
|
+
"category": "infra",
|
|
4281
|
+
"kind": "ui",
|
|
4282
|
+
"version": "0.1.0",
|
|
4283
|
+
"description": "CRUD-driven admin editor for the public landing-page composition. Ships a pure reducer + LandingProvider store adapter + admin LandingView/LandingEditorView built on the shared CRUD primitives, plus a per-section LandingSectionShell that handles background image + custom Tailwind className overlay. Sections carry { kind, order, title, subtitle, enabled, imageUrl, imageRatio, bgImageUrl, className, config (JSON) } with up/down reorder arrows. Consumers map each `kind` (hero, features, pricing, blog, changelog, testimonials, portfolio, services, stats, newsletter, faq, cta, custom) to their own renderer wrapped in <LandingSectionShell>. Canonical pattern used by all 7 rr website templates.",
|
|
4284
|
+
"source": "rahman-resources",
|
|
4285
|
+
"slicePath": "frontend/slices/landing-sections",
|
|
4286
|
+
"convexPaths": [],
|
|
4287
|
+
"npm": [
|
|
4288
|
+
"lucide-react@^0.400.0"
|
|
4289
|
+
],
|
|
4290
|
+
"shadcn": [
|
|
4291
|
+
"badge",
|
|
4292
|
+
"button",
|
|
4293
|
+
"dialog",
|
|
4294
|
+
"input",
|
|
4295
|
+
"label",
|
|
4296
|
+
"select",
|
|
4297
|
+
"switch",
|
|
4298
|
+
"table",
|
|
4299
|
+
"textarea"
|
|
4300
|
+
],
|
|
4301
|
+
"env": [],
|
|
4302
|
+
"peers": [],
|
|
4303
|
+
"providers": [],
|
|
4304
|
+
"tags": [
|
|
4305
|
+
"admin",
|
|
4306
|
+
"landing",
|
|
4307
|
+
"cms",
|
|
4308
|
+
"sections",
|
|
4309
|
+
"crud"
|
|
4310
|
+
],
|
|
4311
|
+
"agentRecipe": "Run `npx rr add landing-sections`. Fold `landingReducer` into your root reducer (cases LANDING_UPSERT + LANDING_DELETE), seed State.landingSections with `defaultLandingSections()`, wrap your StoreProvider with `<LandingProvider value={adapter}/>` where adapter maps {items, publicBase, adminBase, create, update, remove} from your dispatch. Mount `<LandingView/>` at `/admin/landing` and `<LandingEditorView id={params.id}/>` at `/admin/landing/[id]`. In HomePage iterate `state.landingSections.filter(s => s.enabled).sort((a,b) => a.order - b.order)` and render each through `<LandingSectionShell section={s}>` wrapping your own per-`kind` renderer."
|
|
4312
|
+
},
|
|
3761
4313
|
{
|
|
3762
4314
|
"slug": "faq-section",
|
|
3763
4315
|
"title": "FAQ Section",
|
|
@@ -3922,6 +4474,409 @@
|
|
|
3922
4474
|
"detail"
|
|
3923
4475
|
],
|
|
3924
4476
|
"agentRecipe": "Run `npx rr add portfolio-section`. <PortfolioListSection items hrefFor title columns layout limit /> for /portfolio — each item `{ id, slug, title, summary?, year?, client?, role?, tags?, cover: {src,alt}, gallery?, link? }`. <PortfolioDetailView item backHref renderBody related hrefForRelated /> for /portfolio/[slug] — `renderBody` defaults to paragraph split; override for project-specific layouts (problem/approach/result, brief/outcome, etc)."
|
|
4477
|
+
},
|
|
4478
|
+
{
|
|
4479
|
+
"slug": "theme-presets",
|
|
4480
|
+
"title": "Theme Presets — unified switcher with bundled tweakcn registry",
|
|
4481
|
+
"category": "ui",
|
|
4482
|
+
"kind": "ui",
|
|
4483
|
+
"version": "0.2.0",
|
|
4484
|
+
"description": "Single unified theme controller for next-themes apps. ThemePresetSwitcher ships a Palette-icon Popover trigger with three stacked sections: (1) sticky light/dark/system mode tabs, (2) sticky preset-count row with a Default reset button, (3) scrollable color-preset list grouped by mood (Profesional / Bold / Hangat / Artistik / Gelap + Lainnya). Hover-to-preview + click-to-commit + restore-on-close semantics. ThemePresetProvider context wraps state so deeply-nested consumers read via useThemePreset() instead of mounting the switcher directly. ThemeColorSync wrapper enables live tweakcn-CSS-variable preview on routes that need it. Tweakcn registry (~30 curated presets after HIDDEN_PRESETS filter drops Doom 64 / Cyberpunk / Neo Brutalism / Bubblegum / Candyland / Pastel Dreams) ships inside the slice as registry-data.json and loads lazily via dynamic import — code-splits into its own chunk, zero consumer public/ setup, no network roundtrip to a hosted URL. localStorage key `host:theme-preset` (rename via slice fork). CK-1F (2026-05-23) — collapsed prior TweakcnSwitcher + ThemePicker + phantom `theme-preset-switcher` catalog entry into this single component.",
|
|
4485
|
+
"source": "CareerPack + notion-page-clone",
|
|
4486
|
+
"slicePath": "frontend/slices/theme-presets",
|
|
4487
|
+
"convexPaths": [],
|
|
4488
|
+
"npm": [
|
|
4489
|
+
"next-themes@^0.4.6"
|
|
4490
|
+
],
|
|
4491
|
+
"shadcn": [
|
|
4492
|
+
"button",
|
|
4493
|
+
"popover"
|
|
4494
|
+
],
|
|
4495
|
+
"env": [],
|
|
4496
|
+
"peers": [],
|
|
4497
|
+
"providers": [],
|
|
4498
|
+
"tags": [
|
|
4499
|
+
"ui",
|
|
4500
|
+
"theme",
|
|
4501
|
+
"tweakcn",
|
|
4502
|
+
"color",
|
|
4503
|
+
"preset",
|
|
4504
|
+
"switcher",
|
|
4505
|
+
"popover",
|
|
4506
|
+
"next-themes",
|
|
4507
|
+
"notion-like"
|
|
4508
|
+
],
|
|
4509
|
+
"agentRecipe": "Run `npx rr add theme-presets` (registry-data.json ships inside the slice — no separate public/ copy step). Wrap your tree once with `<ThemePresetProvider>` (inside next-themes' ThemeProvider). Mount `<ThemePresetSwitcher />` anywhere in your header / sidebar / settings — one component handles light/dark/system + preset palette. Wrap dashboard with `<ThemeColorSync>` if you need live tweakcn variable preview on inner routes. Deeply-nested consumers read state via `useThemePreset()` (returns `{ presetName, registry, setPreset, preview, restore, isReady }`). For lower-level access: `applyTweakcnPreset(name)`, `previewTweakcnPreset(name)`, `restoreTweakcnPreset()`, `groupTweakcnPresets(items)`, `tweakcnSwatches(preset)` all exported from `@/features/theme-presets`. To rename localStorage key, fork `STORAGE_KEY` in `lib/tweakcn/types.ts`."
|
|
4510
|
+
},
|
|
4511
|
+
{
|
|
4512
|
+
"slug": "files",
|
|
4513
|
+
"title": "Files — pluggable upload + URL resolver with storage-adapter contract",
|
|
4514
|
+
"category": "data",
|
|
4515
|
+
"kind": "ui",
|
|
4516
|
+
"version": "0.2.0",
|
|
4517
|
+
"description": "Host-pluggable file upload + URL resolution. Ships <FileUploadButton>, <FileChip>, useFileUpload(), useFileUrl() — all reading from a FilesAdapter the host wires via <FilesAdapterProvider>. Bundled localStorage demo adapter stores blobs as data URLs (small files only). Drop in your own adapter for Convex / S3 / GCS / R2. The slice itself has zero backend coupling, proving the storage-adapter pattern for the rest of the open-silong blocked-pending-adapter wave (cover, workspace-io, templates, …).",
|
|
4518
|
+
"source": "notion-page-clone",
|
|
4519
|
+
"slicePath": "frontend/slices/files",
|
|
4520
|
+
"convexPaths": [],
|
|
4521
|
+
"npm": [],
|
|
4522
|
+
"shadcn": [
|
|
4523
|
+
"button"
|
|
4524
|
+
],
|
|
4525
|
+
"env": [],
|
|
4526
|
+
"peers": [],
|
|
4527
|
+
"providers": [],
|
|
4528
|
+
"tags": [
|
|
4529
|
+
"data",
|
|
4530
|
+
"upload",
|
|
4531
|
+
"files",
|
|
4532
|
+
"storage",
|
|
4533
|
+
"adapter",
|
|
4534
|
+
"portable",
|
|
4535
|
+
"notion-like"
|
|
4536
|
+
],
|
|
4537
|
+
"agentRecipe": "Run `npx rr add files`. Wrap your tree with `<FilesAdapterProvider adapter={...}>` — pass `useLocalStorageFilesAdapter()` for a quick demo or implement `FilesAdapter` (upload + remove + useUrl) against your backend. Then drop `<FileUploadButton onUploaded={...}>` anywhere; pair with `<FileChip fileRef={...}>` for rendered chips. Hooks: `useFileUpload()` returns `{upload, uploading, progress, removeFromStorage}`; `useFileUrl(storageId)` resolves to a fetchable URL (Convex adapter uses useQuery for live invalidation; demo reads localStorage synchronously). To wire S3: implement the FilesAdapter interface with presigned URLs + DELETE; the slice doesn't care which backend you pick."
|
|
4538
|
+
},
|
|
4539
|
+
{
|
|
4540
|
+
"slug": "equation",
|
|
4541
|
+
"title": "Equation — Notion-style KaTeX block primitive",
|
|
4542
|
+
"category": "ui",
|
|
4543
|
+
"kind": "ui",
|
|
4544
|
+
"version": "0.1.0",
|
|
4545
|
+
"description": "Inline-or-display LaTeX equation block — Notion-inspired primitive. KaTeX-rendered with edit/preview toggle, raw-text fallback when KaTeX fails to parse. Pure UI primitive (zero Convex tables, zero global state). Lifted from notion-page-clone (Nosion). Use standalone OR bundled via the notion-blocks bundle. Drop into any React surface — docs, marketing landing, editor.",
|
|
4546
|
+
"source": "notion-page-clone",
|
|
4547
|
+
"slicePath": "frontend/slices/equation",
|
|
4548
|
+
"convexPaths": [],
|
|
4549
|
+
"npm": [
|
|
4550
|
+
"katex@^0.16.45"
|
|
4551
|
+
],
|
|
4552
|
+
"shadcn": [
|
|
4553
|
+
"button"
|
|
4554
|
+
],
|
|
4555
|
+
"env": [],
|
|
4556
|
+
"peers": [],
|
|
4557
|
+
"providers": [],
|
|
4558
|
+
"tags": [
|
|
4559
|
+
"ui",
|
|
4560
|
+
"notion",
|
|
4561
|
+
"notion-like",
|
|
4562
|
+
"equation",
|
|
4563
|
+
"katex",
|
|
4564
|
+
"latex",
|
|
4565
|
+
"math",
|
|
4566
|
+
"block",
|
|
4567
|
+
"primitive",
|
|
4568
|
+
"editor"
|
|
4569
|
+
],
|
|
4570
|
+
"agentRecipe": "Run `npx rr add equation`. Single npm dep: katex. Import `import { EquationBlock } from \"@/features/equation\"`. Props-driven: pass `value` (LaTeX string) + `onChange`. For display-mode (block-level) pass `displayMode`. Renders raw text if KaTeX parse fails. Bundled inside notion-blocks if you also want code/notify/drag-fill."
|
|
4571
|
+
},
|
|
4572
|
+
{
|
|
4573
|
+
"slug": "code-block",
|
|
4574
|
+
"title": "Code Block — Notion-style syntax-highlighted code primitive",
|
|
4575
|
+
"category": "ui",
|
|
4576
|
+
"kind": "ui",
|
|
4577
|
+
"version": "0.1.0",
|
|
4578
|
+
"description": "Highlight.js-powered code block — Notion-inspired primitive. Language selector dropdown (auto-detect + 50+ language packs), copy-to-clipboard button, line-wrap toggle. Pure-UI primitive — no Convex tables. Lifted from notion-page-clone (Nosion). Use standalone OR bundled via notion-blocks.",
|
|
4579
|
+
"source": "notion-page-clone",
|
|
4580
|
+
"slicePath": "frontend/slices/code-block",
|
|
4581
|
+
"convexPaths": [],
|
|
4582
|
+
"npm": [
|
|
4583
|
+
"highlight.js@^11.11.1"
|
|
4584
|
+
],
|
|
4585
|
+
"shadcn": [
|
|
4586
|
+
"button",
|
|
4587
|
+
"dropdown-menu"
|
|
4588
|
+
],
|
|
4589
|
+
"env": [],
|
|
4590
|
+
"peers": [],
|
|
4591
|
+
"providers": [],
|
|
4592
|
+
"tags": [
|
|
4593
|
+
"ui",
|
|
4594
|
+
"notion",
|
|
4595
|
+
"notion-like",
|
|
4596
|
+
"code",
|
|
4597
|
+
"syntax",
|
|
4598
|
+
"highlight",
|
|
4599
|
+
"highlight.js",
|
|
4600
|
+
"block",
|
|
4601
|
+
"primitive",
|
|
4602
|
+
"editor"
|
|
4603
|
+
],
|
|
4604
|
+
"agentRecipe": "Run `npx rr add code-block`. Single npm dep: highlight.js. Import `import { CodeBlock, languageLabel } from \"@/features/code-block\"`. Props: `value` + `onChange` + `language` + `onLanguageChange`. Bundled inside notion-blocks if you also want equation/notify/drag-fill."
|
|
4605
|
+
},
|
|
4606
|
+
{
|
|
4607
|
+
"slug": "notifications",
|
|
4608
|
+
"title": "Notifications — Notion-style per-page Notify Me",
|
|
4609
|
+
"category": "ui",
|
|
4610
|
+
"kind": "ui",
|
|
4611
|
+
"version": "0.1.0",
|
|
4612
|
+
"description": "Pure-client per-page subscription primitive — Notion-inspired bell button + popover. State stored in localStorage (no backend needed). Shipped as a `NotifyMePopover` toggled from a page-action bell. Frequency choices: instant / daily digest / weekly digest. Lifted from notion-page-clone (Nosion). Use standalone OR bundled via notion-blocks.",
|
|
4613
|
+
"source": "notion-page-clone",
|
|
4614
|
+
"slicePath": "frontend/slices/notifications",
|
|
4615
|
+
"convexPaths": [],
|
|
4616
|
+
"npm": [],
|
|
4617
|
+
"shadcn": [
|
|
4618
|
+
"button",
|
|
4619
|
+
"popover"
|
|
4620
|
+
],
|
|
4621
|
+
"env": [],
|
|
4622
|
+
"peers": [],
|
|
4623
|
+
"providers": [],
|
|
4624
|
+
"tags": [
|
|
4625
|
+
"ui",
|
|
4626
|
+
"notion",
|
|
4627
|
+
"notion-like",
|
|
4628
|
+
"notifications",
|
|
4629
|
+
"subscribe",
|
|
4630
|
+
"notify",
|
|
4631
|
+
"bell",
|
|
4632
|
+
"popover",
|
|
4633
|
+
"localstorage",
|
|
4634
|
+
"primitive"
|
|
4635
|
+
],
|
|
4636
|
+
"agentRecipe": "Run `npx rr add notifications`. Zero npm deps (only shadcn button + popover). Import `import { NotifyMePopover, useSubscription } from \"@/features/notifications\"`. Drop the popover anywhere; useSubscription(pageId) hook returns `{ isSubscribed, frequency, subscribe, unsubscribe, setFrequency }` reading from localStorage. To wire a real backend, swap the localStorage hook for your own."
|
|
4637
|
+
},
|
|
4638
|
+
{
|
|
4639
|
+
"slug": "database-cell-selection",
|
|
4640
|
+
"title": "Database Cell Selection — Notion-style drag-fill + multi-select",
|
|
4641
|
+
"category": "ui",
|
|
4642
|
+
"kind": "ui",
|
|
4643
|
+
"version": "0.1.0",
|
|
4644
|
+
"description": "Notion-style grid cell interaction primitives: drag-fill (Sheets/Excel-style range fill), multi-cell selection with shift-click + arrow-key extension, paste-from-clipboard column adapter. Pure-UI hooks + components, no Convex tables. Lifted from notion-page-clone (Nosion). Pair with any tabular UI (notion-shell databases, ag-grid, custom React table, etc.).",
|
|
4645
|
+
"source": "notion-page-clone",
|
|
4646
|
+
"slicePath": "frontend/slices/database-cell-selection",
|
|
4647
|
+
"convexPaths": [],
|
|
4648
|
+
"npm": [],
|
|
4649
|
+
"shadcn": [],
|
|
4650
|
+
"env": [],
|
|
4651
|
+
"peers": [],
|
|
4652
|
+
"providers": [],
|
|
4653
|
+
"tags": [
|
|
4654
|
+
"ui",
|
|
4655
|
+
"notion",
|
|
4656
|
+
"notion-like",
|
|
4657
|
+
"database",
|
|
4658
|
+
"grid",
|
|
4659
|
+
"cell",
|
|
4660
|
+
"selection",
|
|
4661
|
+
"drag-fill",
|
|
4662
|
+
"spreadsheet",
|
|
4663
|
+
"primitive",
|
|
4664
|
+
"table"
|
|
4665
|
+
],
|
|
4666
|
+
"agentRecipe": "Run `npx rr add database-cell-selection`. Zero deps. Import `import { useDragFill, SelectableCell, useCellSelection } from \"@/features/database-cell-selection\"`. Wrap your grid container with the selection hook; per-cell `<SelectableCell row col>` provides the click-and-drag affordance. Drag handles supplied by useDragFill. Composable with notion-shell's NotionDatabase or any custom grid."
|
|
4667
|
+
},
|
|
4668
|
+
{
|
|
4669
|
+
"slug": "notion-database",
|
|
4670
|
+
"title": "Notion-like Database Table — full table with import/export + row peek + relation/rollup + row multi-select + calendar drag + DB-level menu + full-page shell + AST formula engine (11 views · 18 cells · CSV + JSON)",
|
|
4671
|
+
"category": "ui",
|
|
4672
|
+
"kind": "ui",
|
|
4673
|
+
"version": "0.13.0",
|
|
4674
|
+
"description": "Portable Notion-style database table surface — full capability in one slice. Optional companion to notion-shell — install shell alone for pages + sidebar + block editor, add notion-database when you want embedded databases with full table capability. Ships NotionDatabase (full DB UI w/ ViewTabs + ViewOptions + per-column menu + FilterBuilder/SortBuilder popovers), NotionProperty (value + schema editor), 16 property-cell types (text / number / checkbox / select / multi_select / status / date / url / email / phone / files / person / formula / created_time / last_edited_time / unique_id), 11 built-in views: Table / Board / List / Gallery / Calendar / Feed PLUS Chart (recharts bar/line/area/pie/donut + inline kind/X/agg/Y pickers) / Dashboard (KPI strip + group breakdowns + recent updates) / Form (public-facing submit-to-create — title + per-property inputs, optional required-field validation, configurable show/hide + success message via inline Settings panel) / Map (SVG world + lat/lng pins, no leaflet) / Timeline (Gantt-style with drag-to-shift / drag-to-resize). FilterBuilder + SortBuilder exported standalone for toolbar embedding. Formula cells use a pure expression engine ({{title}}/{{prop}} interpolation + concat/upper/lower/round/if/etc fns + `=expr` math). Files cells store URL refs (paste-URL workflow; host can plug `files` slice adapter for upload). Person cells are simplified vs upstream — no user directory lookup, just initials chips. Created_time / last_edited_time read row.createdAt / row.updatedAt directly. unique_id auto-derives from row position + optional prefix. Pure helpers: applyView, groupBy, bucketByDate. Domain types live in notion-shell (single source of truth — Page.rowOfDatabaseId + rowProps reference them) and re-exported here. Relation + rollup property types deferred to upstream open-silong mega-bundle (need cross-DB context). v0.5 added drop-in Convex backend templates (dual-mode: minimal single-user OR full multi-workspace) from open-silong's template-base/. v0.6 (Phase 7.10) merges former database-io slice in-tree: DatabaseIOActions toolbar (Export CSV/JSON · Import CSV/JSON · Download dynamic CSV/JSON templates), CsvImportDialog (auto-map columns + create-new-of-type picker), JsonImportDialog (schema diff + import), exportDatabase / exportDatabaseToCsv / parseExport / parseCsv / buildCsvTemplate / buildJsonTemplate helpers — all from `@/features/notion-database`. CsvNewProperty + JsonImportResult.newProperties now expose `tempId` so host can remap rowProps keys when persisting (single import handler serves both formats). Cell editor UX consolidated v0.5.3 — SelectCell + MultiSelectCell share OptionPicker (shared/identical popover: search-as-create + per-option rename/color/delete). Property-type lists single-source via PROPERTY_TYPE_META registry (v0.5.2). v0.7 (CK-1D Phase 1) lifts row-detail subsystem from notion-page-clone: RowPeek (sheet + dialog + persisted mode toggle via useRowOpenMode localStorage hook), RowDetailSheet (right drawer), RowDetailDialog (centered modal), RowDetailBody (shared chrome), RowOpenModeSwitcher (sheet/dialog/page toggle). Pure slot-driven — host supplies icon picker, properties form, and block editor via render slots (iconSlot, propertiesSlot, blocksSlot); no Convex / comments / editor coupling. onOpenAsPage callback wires one-shot navigation without changing the persisted default. v0.8 (CK-1D Phase 2) lifts relation + rollup cells: RelationCell (cross-database link picker w/ search + create-new-row affordance + stale-link healing) and RollupCell (read-only aggregate display — count / count_unique / values / sum / avg / min / max / earliest / latest / checked / percent_checked). PropertyType union extended with 'relation' and 'rollup'. Property gained relationDatabaseId / rollupRelationPropertyId / rollupTargetPropertyId / rollupAggregate fields. NotionDatabase added new props pages, databases, onCreateRelatedRow so host stays the source of truth — cells gracefully no-op when omitted. v0.9 (CK-1D Phase 3) lifts row multi-select subsystem: RowSelectionProvider (React Context holding selected id set + anchor; drops stale ids when rowOrder shrinks), RowMarqueeOverlay (drag-to-select rubber-band over any container w/ data-row-shell-id markers — AutoCAD window/crossing modes, threshold + long-press text-origin activation, additive shift-drag), RowSelectionToolbar (floating bottom-center action bar w/ N-rows-selected count, optional locked badge, host-supplied extraSlot, Delete button via onDelete callback, Clear via Esc/X), RowSelectionKeyboard (Esc clear + Del/Backspace bulk delete + outside-click dismiss). TableView automatically tags rows with data-row-shell-id and applies a primary-tinted ring when wrapped in RowSelectionProvider. Marquee primitive + useMarqueeDrag hook exported for reuse on Board / Gallery / custom views. v0.10 (CK-1D Phase 5) adds HeaderCheckboxGutter (tri-state select-all/clear w/ aria-checked='mixed' indeterminate) + RowCheckbox (per-row toggle) — TableView auto-renders a checkbox gutter column whenever a RowSelectionProvider is in scope. Pure calendarDrag helpers (parseExistingDate, formatDateValue, shiftYmd, computeDateShift, parseDropTargetId) exported for hosts wiring CalendarView/Timeline drag-to-move without taking on @dnd-kit coupling inside the slice. Column drag-reorder + row drag-reorder primitives deferred — upstream's flexbox-table refactor conflicts with rr's semantic <table> + 200-LOC view cap. v0.11 (CK-1D Phase 7) lifts Intl-based number + date formatters: lib/numberFormat.ts (resolveNumberFormat / formatPropertyNumber + COMMON_CURRENCIES 16-code picker) and lib/dateFormat.ts (parseYmdToLocal / formatYmd / formatTime / formatDateValue + DATE_FORMAT_LABELS / TIME_FORMAT_LABELS). Property gained numberCurrencyCode + dateFormat + timeFormat + dateIncludeTime fields. NumberCell currency now honours per-property ISO code; DateCell accepts an optional `prop` and routes through formatDateValue when any date-related field is set on it. Notion-shell DatabaseViewConfig split into ./view-config-types.ts to keep types.ts under the 200-LOC cap. v0.12 (CK-1D Phase 4) adds database-shell subsystem: DatabaseMenu (rename / duplicate {structure | with rows} / lock-toggle / delete popover — every action hidden when its callback is omitted; native window.confirm + window.prompt fallbacks keep zero new dialog deps) and DatabasePage (full-page wrapper composing a big header — icon slot + inline title input + DatabaseMenu — over a NotionDatabase body). NotionDatabase grew a `headerActions` render slot so hosts can drop a DatabaseMenu inline without switching to DatabasePage. Database type gained an optional `locked` flag. Strip vs upstream: useDbAdapter (Convex coupling) + SubItemsPicker (sub-items tree) + IconPickerPopover (lives in icon-picker slice) + DataMenu (database-json slice) deferred — host wires those externally. v0.13 (CK-1D Phase 6) replaces the flat formula.ts evaluator with a typed AST engine under lib/formulaEngine/ (types, coerce, dateUtils, ParserClass, parser, functions, evaluator, deps): recursive-descent parser w/ source-position tracking; typed FormulaValue (string/number/boolean/date/null/list) instead of string-only; circular-reference guard via visited set + per-row memoisation cache; new fn surface — substring, dateAdd, dateSubtract, dateBetween, formatDate, count, sum, join (on top of existing concat/lower/upper/length/if/and/or/not/empty/contains/replace/round/floor/ceil/abs/min/max/now/today). Relation refs in formulas now resolve via the workspace pages passed through NotionDatabase. FormulaCell upgraded — popover now shows parse-error message + source position; cell display flips to destructive style on invalid. Legacy evaluateFormula() string wrapper preserved for existing callers; new code should import evalFormula / formatFormulaValue from `@/features/notion-database`. collectDeps() exported for hosts wiring formula-dependency invalidation.",
|
|
4675
|
+
"source": "open-silong",
|
|
4676
|
+
"slicePath": "frontend/slices/notion-database",
|
|
4677
|
+
"convexPaths": [
|
|
4678
|
+
"template-base/database-silong/convex/handlers/databases.ts",
|
|
4679
|
+
"template-base/database-silong/convex/handlers/pages.ts",
|
|
4680
|
+
"template-base/database-silong/convex/schema.database-silong.ts"
|
|
4681
|
+
],
|
|
4682
|
+
"npm": [
|
|
4683
|
+
"recharts@^2.13.0"
|
|
4684
|
+
],
|
|
4685
|
+
"shadcn": [
|
|
4686
|
+
"button",
|
|
4687
|
+
"input",
|
|
4688
|
+
"checkbox",
|
|
4689
|
+
"dropdown-menu",
|
|
4690
|
+
"popover",
|
|
4691
|
+
"select",
|
|
4692
|
+
"dialog",
|
|
4693
|
+
"sheet",
|
|
4694
|
+
"toggle-group",
|
|
4695
|
+
"tooltip",
|
|
4696
|
+
"separator"
|
|
4697
|
+
],
|
|
4698
|
+
"env": [],
|
|
4699
|
+
"peers": [
|
|
4700
|
+
{
|
|
4701
|
+
"slug": "notion-shell",
|
|
4702
|
+
"range": "^0.7",
|
|
4703
|
+
"reason": "Domain types live in notion-shell. v0.7 extends Database with `locked` flag for the DatabaseMenu lock-toggle action."
|
|
4704
|
+
}
|
|
4705
|
+
],
|
|
4706
|
+
"providers": [],
|
|
4707
|
+
"tags": [
|
|
4708
|
+
"ui",
|
|
4709
|
+
"notion",
|
|
4710
|
+
"notion-like",
|
|
4711
|
+
"database",
|
|
4712
|
+
"table",
|
|
4713
|
+
"board",
|
|
4714
|
+
"list",
|
|
4715
|
+
"gallery",
|
|
4716
|
+
"calendar",
|
|
4717
|
+
"feed",
|
|
4718
|
+
"chart",
|
|
4719
|
+
"dashboard",
|
|
4720
|
+
"form",
|
|
4721
|
+
"map",
|
|
4722
|
+
"timeline",
|
|
4723
|
+
"gantt",
|
|
4724
|
+
"kanban",
|
|
4725
|
+
"views",
|
|
4726
|
+
"filter",
|
|
4727
|
+
"sort",
|
|
4728
|
+
"property",
|
|
4729
|
+
"files",
|
|
4730
|
+
"person",
|
|
4731
|
+
"formula",
|
|
4732
|
+
"timestamp",
|
|
4733
|
+
"unique-id",
|
|
4734
|
+
"csv",
|
|
4735
|
+
"json",
|
|
4736
|
+
"import",
|
|
4737
|
+
"export",
|
|
4738
|
+
"template",
|
|
4739
|
+
"data",
|
|
4740
|
+
"backup",
|
|
4741
|
+
"primitive",
|
|
4742
|
+
"optional",
|
|
4743
|
+
"embeddable"
|
|
4744
|
+
],
|
|
4745
|
+
"agentRecipe": "Run `npx rr add notion-database` (cascades notion-shell as peer). Import: `import { NotionDatabase, NotionProperty, VIEW_REGISTRY, DatabaseIOActions, RowPeek } from \"@/features/notion-database\"`. NotionDatabase ships full props-driven DB UI — host owns rows + dispatches CRUD callbacks. For just one view in isolation, import the specific view component (TableView / BoardView / etc.). Property cells auto-render via renderPropertyCell helper. Pure helpers: applyView / groupBy / bucketByDate. For import/export, mount `<DatabaseIOActions db={db} rows={rows} onImport={async ({ newProperties, rows }) => { const tempToReal: Record<string, string> = {}; for (const np of newProperties) { const realId = await dispatchAddProperty(np); tempToReal[np.tempId] = realId; } for (const r of rows) { const rowId = await dispatchAddRow(r.title); for (const [propKey, v] of Object.entries(r.rowProps)) { await dispatchSetValue(rowId, tempToReal[propKey] ?? propKey, v); } } }} />` next to your DB toolbar — exports CSV/JSON + imports w/ schema diff + downloads dynamic templates from live db.properties. tempId on each new property lets host remap rowProps keys to its real backend ids. For backend persistence, copy template-base/database-silong/convex/ from the open-silong repo: handlers go to convex/, schema fragment merges into convex/schema.ts. Pick _shared/minimal/ (single-user, noop authz) or _shared/full/ (requires @convex-dev/auth + workspaces tables). See CONVEX-BACKEND.md."
|
|
4746
|
+
},
|
|
4747
|
+
{
|
|
4748
|
+
"slug": "database-io",
|
|
4749
|
+
"title": "[DEPRECATED] Database IO — merged into notion-database v0.6",
|
|
4750
|
+
"category": "ui",
|
|
4751
|
+
"kind": "ui",
|
|
4752
|
+
"version": "0.2.0",
|
|
4753
|
+
"description": "DEPRECATED — all functionality merged into `notion-database` v0.6 (Phase 7.10, 2026-05-22). This slice is now a thin re-export shim from `@/features/notion-database` to keep existing consumers compiling. New code should `npx rr add notion-database` (now bundles CSV + JSON import/export + dynamic templates) instead of installing this separately. Slice will be removed in v1.0. Original surface (DatabaseIOActions / CsvImportDialog / JsonImportDialog / exportDatabase / buildCsvTemplate / buildJsonTemplate) remains exported from notion-database — see its catalog entry. Merge rationale: 100% peer coupling to notion-database (every file imported Database/Page/Property types from it) + zero independent install path (always installed alongside notion-database in practice) = no modularity benefit from separation.",
|
|
4754
|
+
"source": "notion-page-clone",
|
|
4755
|
+
"slicePath": "frontend/slices/database-io",
|
|
4756
|
+
"convexPaths": [],
|
|
4757
|
+
"npm": [],
|
|
4758
|
+
"shadcn": [
|
|
4759
|
+
"button",
|
|
4760
|
+
"dialog",
|
|
4761
|
+
"dropdown-menu"
|
|
4762
|
+
],
|
|
4763
|
+
"env": [],
|
|
4764
|
+
"peers": [
|
|
4765
|
+
{
|
|
4766
|
+
"slug": "notion-database",
|
|
4767
|
+
"range": "^0.3",
|
|
4768
|
+
"reason": "Reuses Database / Page / Property / PropertyValue / PropertyType / SelectOption / DatabaseViewConfig types."
|
|
4769
|
+
}
|
|
4770
|
+
],
|
|
4771
|
+
"providers": [],
|
|
4772
|
+
"tags": [
|
|
4773
|
+
"ui",
|
|
4774
|
+
"notion",
|
|
4775
|
+
"notion-like",
|
|
4776
|
+
"database",
|
|
4777
|
+
"csv",
|
|
4778
|
+
"json",
|
|
4779
|
+
"import",
|
|
4780
|
+
"export",
|
|
4781
|
+
"template",
|
|
4782
|
+
"data",
|
|
4783
|
+
"backup",
|
|
4784
|
+
"spreadsheet",
|
|
4785
|
+
"wire-format",
|
|
4786
|
+
"primitive",
|
|
4787
|
+
"optional"
|
|
4788
|
+
],
|
|
4789
|
+
"agentRecipe": "⚠️ DEPRECATED — use `npx rr add notion-database` (now bundles import/export). This slice is a thin re-export shim from `@/features/notion-database` for back-compat. New code: `import { DatabaseIOActions } from \"@/features/notion-database\"`. Remove when migration complete; slice scheduled for removal in v1.0."
|
|
4790
|
+
},
|
|
4791
|
+
{
|
|
4792
|
+
"slug": "notion-shell",
|
|
4793
|
+
"title": "Notion Shell — page + sidebar + block editor primitives (pure, no database)",
|
|
4794
|
+
"category": "ui",
|
|
4795
|
+
"kind": "ui",
|
|
4796
|
+
"version": "0.7.0",
|
|
4797
|
+
"description": "Portable Notion-style PAGE + SIDEBAR + BLOCK editor primitives. CI-wave (2026-05-21) split the database surface out — install the optional `notion-database` peer for embedded TableView / BoardView / ListView / GalleryView / CalendarView / FeedView, NotionDatabase, NotionProperty, ViewTabs, ViewOptions, ColumnHeaderMenu, property-cells. notion-shell alone gives you Notion-clone pages + sidebar + editor without the database weight. Domain types (Database, Property, PropertyValue, DbView, DatabaseViewConfig, DatabaseFilter, DatabaseSort) remain in notion-shell as the single source of truth (Page.rowOfDatabaseId + rowProps reference them). FULL OLD DESC BELOW: Portable Notion-style wrapper primitives. PAGE EDITOR: NotionPage (optional cover image band + header + body), NotionHeader / NotionSidebar / NotionBlock (live inline-markdown decorator, hover actions menu, optional dragHandle slot), SlashMenu (searchable block-type picker w/ keyboard nav), BlockActionsMenu (turn-into / duplicate / delete), InsertBlockButton (`+` trigger w/ SlashMenu), SortableBlockList (@dnd-kit render-prop wrapper for block reorder), PageActionsMenu (header dropdown: cover/favorite/duplicate/export/trash). DATABASE: NotionDatabase (full DB surface w/ tabs + options + per-column menu), NotionProperty (10 property-cell types), 6 built-in views (Table/Board/List/Gallery/Calendar/Feed), ViewTabs, ViewOptions (sort + filter + search popover), ColumnHeaderMenu. SPECIALISED BLOCK RENDERERS: ImageRenderer (URL + caption + preview), EmbedRenderer (YouTube/Vimeo/Loom/Figma/CodePen/Spotify auto-detect + iframe fallback). Pure helpers: applyView, groupBy, bucketByDate. Pure / props-driven — host owns data + change handlers.",
|
|
4798
|
+
"source": "notion-page-clone",
|
|
4799
|
+
"slicePath": "frontend/slices/notion-shell",
|
|
4800
|
+
"convexPaths": [],
|
|
4801
|
+
"npm": [
|
|
4802
|
+
"@dnd-kit/core",
|
|
4803
|
+
"@dnd-kit/sortable",
|
|
4804
|
+
"@dnd-kit/utilities"
|
|
4805
|
+
],
|
|
4806
|
+
"shadcn": [
|
|
4807
|
+
"button",
|
|
4808
|
+
"input",
|
|
4809
|
+
"checkbox",
|
|
4810
|
+
"dropdown-menu",
|
|
4811
|
+
"popover"
|
|
4812
|
+
],
|
|
4813
|
+
"env": [],
|
|
4814
|
+
"peers": [],
|
|
4815
|
+
"providers": [],
|
|
4816
|
+
"tags": [
|
|
4817
|
+
"ui",
|
|
4818
|
+
"notion",
|
|
4819
|
+
"shell",
|
|
4820
|
+
"wrapper",
|
|
4821
|
+
"sidebar",
|
|
4822
|
+
"page",
|
|
4823
|
+
"database",
|
|
4824
|
+
"primitive",
|
|
4825
|
+
"portable",
|
|
4826
|
+
"slash-menu",
|
|
4827
|
+
"decorator",
|
|
4828
|
+
"wysiwyg",
|
|
4829
|
+
"views",
|
|
4830
|
+
"kanban",
|
|
4831
|
+
"calendar",
|
|
4832
|
+
"gallery",
|
|
4833
|
+
"drag",
|
|
4834
|
+
"cover",
|
|
4835
|
+
"embed",
|
|
4836
|
+
"image",
|
|
4837
|
+
"notion-like"
|
|
4838
|
+
],
|
|
4839
|
+
"agentRecipe": "Run `npx rr add notion-shell` for the portable UI wrappers ONLY (no backend). NPM deps: @dnd-kit/core, @dnd-kit/sortable, @dnd-kit/utilities. Import: `import { NotionPage, NotionSidebar, NotionBlock, NotionDatabase, SortableBlockList, PageActionsMenu, InsertBlockButton, ViewTabs, ImageRenderer, EmbedRenderer } from \"@/features/notion-shell\"`. NotionBlock ships slash menu + decorator + actions menu + dragHandle slot. NotionPage ships optional cover prop. SortableBlockList wraps a render-prop callback `(id, dragProps) => <NotionBlock dragHandle={...} />`. NotionDatabase ships 6 views via VIEW_REGISTRY. Property cells: text/number/checkbox/select/multi-select/status/date/url/email/phone all built in. For rich icon UX wire `renderIcon` + `renderIconPicker` to `@/features/icon-picker`. **PRODUCT POINTER: the full Convex-backed Notion-clone OS (multi-workspace + auth + sharing + comments + snapshots + MCP) lives at https://github.com/rahmanef63/open-silong — clone that repo for the production stack; use this slice when you only need to embed the Notion-style UI in another project.**"
|
|
4840
|
+
},
|
|
4841
|
+
{
|
|
4842
|
+
"slug": "workspace-shell",
|
|
4843
|
+
"title": "Workspace Shell — atomic (workspace × menuSet) NavContext",
|
|
4844
|
+
"category": "ui",
|
|
4845
|
+
"kind": "full",
|
|
4846
|
+
"version": "1.0.0",
|
|
4847
|
+
"description": "Unified workspace + menu navigation primitive. NavContext = (workspaceId, menuSetId) atomic pair. 2-tier dropdown switcher (workspace radio + menuSet picker), ContextBadge header chip, full editor with tabs (menus / workspace tree / settings), tiered RBAC (admin menus.manage, user menus.fork). Replaces silo'd menu-store + workspace-store slices in superspace. Resolver chain: user nav-context cache > user assignment > workspace default > system. Source: superspace.",
|
|
4848
|
+
"source": "superspace",
|
|
4849
|
+
"slicePath": "template-base/frontend/slices/workspace-shell",
|
|
4850
|
+
"convexPaths": [
|
|
4851
|
+
"template-base/convex/features/workspaceShell"
|
|
4852
|
+
],
|
|
4853
|
+
"npm": [],
|
|
4854
|
+
"shadcn": [
|
|
4855
|
+
"dropdown-menu",
|
|
4856
|
+
"popover",
|
|
4857
|
+
"command",
|
|
4858
|
+
"tabs",
|
|
4859
|
+
"switch"
|
|
4860
|
+
],
|
|
4861
|
+
"env": [],
|
|
4862
|
+
"peers": [
|
|
4863
|
+
{
|
|
4864
|
+
"slug": "convex-auth",
|
|
4865
|
+
"range": "^0.1",
|
|
4866
|
+
"reason": "User session required for menuSet assignment + nav-context cache."
|
|
4867
|
+
}
|
|
4868
|
+
],
|
|
4869
|
+
"providers": [],
|
|
4870
|
+
"tags": [
|
|
4871
|
+
"ui",
|
|
4872
|
+
"navigation",
|
|
4873
|
+
"workspace",
|
|
4874
|
+
"menu",
|
|
4875
|
+
"shell",
|
|
4876
|
+
"convex",
|
|
4877
|
+
"rbac"
|
|
4878
|
+
],
|
|
4879
|
+
"agentRecipe": "Run `npx rr add workspace-shell`. Tables prefixed `workspaceShell_*` (menuSets, menuItems, itemComponents, wsAssignments, userAssignments, rolePerms, navContext). Mount `<NavContextProvider workspaceId={wsId}>` inside your auth provider; use `useNavContext(wsId)` to read `{workspace, menuSet, source, effectiveMenuItems, setMenuSet, forkMenuSet}`. Drop-in `<WorkspaceSwitcher canFork />` in sidebar header. Tiered RBAC: `menus.manage` for workspace-default editing, `menus.fork` for user-personal copy. Resolver chain: user cache → user assignment → workspace default → none. Pair with audit-log slice for context-switch / fork events (graceful try/catch if absent). Effective items query applies role filter via workspaceShell_rolePerms (no rolePerms → show all, pre-RBAC compat)."
|
|
3925
4880
|
}
|
|
3926
4881
|
]
|
|
3927
4882
|
}
|