rahman-resources 1.7.0 → 1.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/lib/manifest.json +957 -118
  2. package/package.json +1 -1
package/lib/manifest.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 2,
3
- "generatedAt": "2026-05-18T14:08:20.458Z",
3
+ "generatedAt": "2026-05-23T06:29:18.092Z",
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": "Public-only marketing site for a SaaS product — landing, pricing, features, blog, changelog, about, contact. MDX-driven blog + changelog. No admin (CMS via MDX files in repo).",
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,23 +1821,6 @@
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",
@@ -1730,7 +1837,8 @@
1730
1837
  "lucide",
1731
1838
  "picker",
1732
1839
  "twemoji",
1733
- "notion"
1840
+ "notion",
1841
+ "notion-like"
1734
1842
  ]
1735
1843
  },
1736
1844
  {
@@ -2048,6 +2156,24 @@
2048
2156
  "saas"
2049
2157
  ]
2050
2158
  },
2159
+ {
2160
+ "slug": "landing-sections",
2161
+ "title": "Landing Sections",
2162
+ "category": "infra",
2163
+ "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.",
2164
+ "source": "rahman-resources",
2165
+ "install": "npx rahman-resources add landing-sections",
2166
+ "npmPackages": [],
2167
+ "exampleCode": "",
2168
+ "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.",
2169
+ "tags": [
2170
+ "admin",
2171
+ "landing",
2172
+ "cms",
2173
+ "sections",
2174
+ "crud"
2175
+ ]
2176
+ },
2051
2177
  {
2052
2178
  "slug": "faq-section",
2053
2179
  "title": "FAQ Section",
@@ -2143,6 +2269,273 @@
2143
2269
  "list",
2144
2270
  "detail"
2145
2271
  ]
2272
+ },
2273
+ {
2274
+ "slug": "theme-presets",
2275
+ "title": "Theme Presets — unified switcher with bundled tweakcn registry",
2276
+ "category": "ui",
2277
+ "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.",
2278
+ "source": "CareerPack + notion-page-clone",
2279
+ "install": "npx rahman-resources add theme-presets",
2280
+ "npmPackages": [],
2281
+ "exampleCode": "",
2282
+ "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`.",
2283
+ "tags": [
2284
+ "ui",
2285
+ "theme",
2286
+ "tweakcn",
2287
+ "color",
2288
+ "preset",
2289
+ "switcher",
2290
+ "popover",
2291
+ "next-themes",
2292
+ "notion-like"
2293
+ ]
2294
+ },
2295
+ {
2296
+ "slug": "files",
2297
+ "title": "Files — pluggable upload + URL resolver with storage-adapter contract",
2298
+ "category": "data",
2299
+ "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, …).",
2300
+ "source": "notion-page-clone",
2301
+ "install": "npx rahman-resources add files",
2302
+ "npmPackages": [],
2303
+ "exampleCode": "",
2304
+ "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.",
2305
+ "tags": [
2306
+ "data",
2307
+ "upload",
2308
+ "files",
2309
+ "storage",
2310
+ "adapter",
2311
+ "portable",
2312
+ "notion-like"
2313
+ ]
2314
+ },
2315
+ {
2316
+ "slug": "equation",
2317
+ "title": "Equation — Notion-style KaTeX block primitive",
2318
+ "category": "ui",
2319
+ "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.",
2320
+ "source": "notion-page-clone",
2321
+ "install": "npx rahman-resources add equation",
2322
+ "npmPackages": [],
2323
+ "exampleCode": "",
2324
+ "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.",
2325
+ "tags": [
2326
+ "ui",
2327
+ "notion",
2328
+ "notion-like",
2329
+ "equation",
2330
+ "katex",
2331
+ "latex",
2332
+ "math",
2333
+ "block",
2334
+ "primitive",
2335
+ "editor"
2336
+ ]
2337
+ },
2338
+ {
2339
+ "slug": "code-block",
2340
+ "title": "Code Block — Notion-style syntax-highlighted code primitive",
2341
+ "category": "ui",
2342
+ "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.",
2343
+ "source": "notion-page-clone",
2344
+ "install": "npx rahman-resources add code-block",
2345
+ "npmPackages": [],
2346
+ "exampleCode": "",
2347
+ "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.",
2348
+ "tags": [
2349
+ "ui",
2350
+ "notion",
2351
+ "notion-like",
2352
+ "code",
2353
+ "syntax",
2354
+ "highlight",
2355
+ "highlight.js",
2356
+ "block",
2357
+ "primitive",
2358
+ "editor"
2359
+ ]
2360
+ },
2361
+ {
2362
+ "slug": "notifications",
2363
+ "title": "Notifications — Notion-style per-page Notify Me",
2364
+ "category": "ui",
2365
+ "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.",
2366
+ "source": "notion-page-clone",
2367
+ "install": "npx rahman-resources add notifications",
2368
+ "npmPackages": [],
2369
+ "exampleCode": "",
2370
+ "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.",
2371
+ "tags": [
2372
+ "ui",
2373
+ "notion",
2374
+ "notion-like",
2375
+ "notifications",
2376
+ "subscribe",
2377
+ "notify",
2378
+ "bell",
2379
+ "popover",
2380
+ "localstorage",
2381
+ "primitive"
2382
+ ]
2383
+ },
2384
+ {
2385
+ "slug": "database-cell-selection",
2386
+ "title": "Database Cell Selection — Notion-style drag-fill + multi-select",
2387
+ "category": "ui",
2388
+ "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.).",
2389
+ "source": "notion-page-clone",
2390
+ "install": "npx rahman-resources add database-cell-selection",
2391
+ "npmPackages": [],
2392
+ "exampleCode": "",
2393
+ "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.",
2394
+ "tags": [
2395
+ "ui",
2396
+ "notion",
2397
+ "notion-like",
2398
+ "database",
2399
+ "grid",
2400
+ "cell",
2401
+ "selection",
2402
+ "drag-fill",
2403
+ "spreadsheet",
2404
+ "primitive",
2405
+ "table"
2406
+ ]
2407
+ },
2408
+ {
2409
+ "slug": "notion-database",
2410
+ "title": "Notion-like Database Table — full table with import/export (11 views · 16 cells · CSV + JSON)",
2411
+ "category": "ui",
2412
+ "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).",
2413
+ "source": "open-silong",
2414
+ "install": "npx rahman-resources add notion-database",
2415
+ "npmPackages": [],
2416
+ "exampleCode": "",
2417
+ "agentRecipe": "Run `npx rr add notion-database` (cascades notion-shell as peer). Import: `import { NotionDatabase, NotionProperty, VIEW_REGISTRY, DatabaseIOActions } 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.",
2418
+ "tags": [
2419
+ "ui",
2420
+ "notion",
2421
+ "notion-like",
2422
+ "database",
2423
+ "table",
2424
+ "board",
2425
+ "list",
2426
+ "gallery",
2427
+ "calendar",
2428
+ "feed",
2429
+ "chart",
2430
+ "dashboard",
2431
+ "form",
2432
+ "map",
2433
+ "timeline",
2434
+ "gantt",
2435
+ "kanban",
2436
+ "views",
2437
+ "filter",
2438
+ "sort",
2439
+ "property",
2440
+ "files",
2441
+ "person",
2442
+ "formula",
2443
+ "timestamp",
2444
+ "unique-id",
2445
+ "csv",
2446
+ "json",
2447
+ "import",
2448
+ "export",
2449
+ "template",
2450
+ "data",
2451
+ "backup",
2452
+ "primitive",
2453
+ "optional",
2454
+ "embeddable"
2455
+ ]
2456
+ },
2457
+ {
2458
+ "slug": "database-io",
2459
+ "title": "[DEPRECATED] Database IO — merged into notion-database v0.6",
2460
+ "category": "ui",
2461
+ "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.",
2462
+ "source": "notion-page-clone",
2463
+ "install": "npx rahman-resources add database-io",
2464
+ "npmPackages": [],
2465
+ "exampleCode": "",
2466
+ "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.",
2467
+ "tags": [
2468
+ "ui",
2469
+ "notion",
2470
+ "notion-like",
2471
+ "database",
2472
+ "csv",
2473
+ "json",
2474
+ "import",
2475
+ "export",
2476
+ "template",
2477
+ "data",
2478
+ "backup",
2479
+ "spreadsheet",
2480
+ "wire-format",
2481
+ "primitive",
2482
+ "optional"
2483
+ ]
2484
+ },
2485
+ {
2486
+ "slug": "notion-shell",
2487
+ "title": "Notion Shell — page + sidebar + block editor primitives (pure, no database)",
2488
+ "category": "ui",
2489
+ "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.",
2490
+ "source": "notion-page-clone",
2491
+ "install": "npx rahman-resources add notion-shell",
2492
+ "npmPackages": [],
2493
+ "exampleCode": "",
2494
+ "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.**",
2495
+ "tags": [
2496
+ "ui",
2497
+ "notion",
2498
+ "shell",
2499
+ "wrapper",
2500
+ "sidebar",
2501
+ "page",
2502
+ "database",
2503
+ "primitive",
2504
+ "portable",
2505
+ "slash-menu",
2506
+ "decorator",
2507
+ "wysiwyg",
2508
+ "views",
2509
+ "kanban",
2510
+ "calendar",
2511
+ "gallery",
2512
+ "drag",
2513
+ "cover",
2514
+ "embed",
2515
+ "image",
2516
+ "notion-like"
2517
+ ]
2518
+ },
2519
+ {
2520
+ "slug": "workspace-shell",
2521
+ "title": "Workspace Shell — atomic (workspace × menuSet) NavContext",
2522
+ "category": "ui",
2523
+ "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.",
2524
+ "source": "superspace",
2525
+ "docsUrl": "",
2526
+ "install": "",
2527
+ "npmPackages": [],
2528
+ "exampleCode": "",
2529
+ "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).",
2530
+ "tags": [
2531
+ "ui",
2532
+ "navigation",
2533
+ "workspace",
2534
+ "menu",
2535
+ "shell",
2536
+ "convex",
2537
+ "rbac"
2538
+ ]
2146
2539
  }
2147
2540
  ],
2148
2541
  "slices": [
@@ -2841,7 +3234,8 @@
2841
3234
  "cmd-k",
2842
3235
  "navigation",
2843
3236
  "keyboard",
2844
- "search"
3237
+ "search",
3238
+ "notion-like"
2845
3239
  ],
2846
3240
  "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
3241
  },
@@ -2935,6 +3329,38 @@
2935
3329
  ],
2936
3330
  "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
3331
  },
3332
+ {
3333
+ "slug": "three-column",
3334
+ "title": "Three-Column Layout — Sidebar/Content/Inspector",
3335
+ "category": "ui",
3336
+ "kind": "ui",
3337
+ "version": "0.1.0",
3338
+ "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).",
3339
+ "source": "superspace",
3340
+ "slicePath": "template-base/frontend/slices/three-column",
3341
+ "convexPaths": [],
3342
+ "npm": [],
3343
+ "shadcn": [
3344
+ "sheet",
3345
+ "scroll-area",
3346
+ "separator",
3347
+ "tooltip"
3348
+ ],
3349
+ "env": [],
3350
+ "peers": [],
3351
+ "providers": [],
3352
+ "tags": [
3353
+ "ui",
3354
+ "layout",
3355
+ "three-column",
3356
+ "sidebar",
3357
+ "inspector",
3358
+ "panel-section",
3359
+ "responsive",
3360
+ "resizable"
3361
+ ],
3362
+ "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."
3363
+ },
2938
3364
  {
2939
3365
  "slug": "broadcast-channel-sync",
2940
3366
  "title": "BroadcastChannel — Cross-tab Sync",
@@ -3067,29 +3493,6 @@
3067
3493
  ],
3068
3494
  "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
3495
  },
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
3496
  {
3094
3497
  "slug": "icon-picker",
3095
3498
  "title": "Icon Picker",
@@ -3117,7 +3520,8 @@
3117
3520
  "lucide",
3118
3521
  "picker",
3119
3522
  "twemoji",
3120
- "notion"
3523
+ "notion",
3524
+ "notion-like"
3121
3525
  ],
3122
3526
  "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. <IconPicker> wraps any trigger (Popover); <IconPickerInline> for sheets/dialogs. <DynamicIcon> renders from parsed value."
3123
3527
  },
@@ -3758,6 +4162,42 @@
3758
4162
  ],
3759
4163
  "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
4164
  },
4165
+ {
4166
+ "slug": "landing-sections",
4167
+ "title": "Landing Sections",
4168
+ "category": "infra",
4169
+ "kind": "ui",
4170
+ "version": "0.1.0",
4171
+ "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.",
4172
+ "source": "rahman-resources",
4173
+ "slicePath": "frontend/slices/landing-sections",
4174
+ "convexPaths": [],
4175
+ "npm": [
4176
+ "lucide-react@^0.400.0"
4177
+ ],
4178
+ "shadcn": [
4179
+ "badge",
4180
+ "button",
4181
+ "dialog",
4182
+ "input",
4183
+ "label",
4184
+ "select",
4185
+ "switch",
4186
+ "table",
4187
+ "textarea"
4188
+ ],
4189
+ "env": [],
4190
+ "peers": [],
4191
+ "providers": [],
4192
+ "tags": [
4193
+ "admin",
4194
+ "landing",
4195
+ "cms",
4196
+ "sections",
4197
+ "crud"
4198
+ ],
4199
+ "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."
4200
+ },
3761
4201
  {
3762
4202
  "slug": "faq-section",
3763
4203
  "title": "FAQ Section",
@@ -3922,6 +4362,405 @@
3922
4362
  "detail"
3923
4363
  ],
3924
4364
  "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)."
4365
+ },
4366
+ {
4367
+ "slug": "theme-presets",
4368
+ "title": "Theme Presets — unified switcher with bundled tweakcn registry",
4369
+ "category": "ui",
4370
+ "kind": "ui",
4371
+ "version": "0.2.0",
4372
+ "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.",
4373
+ "source": "CareerPack + notion-page-clone",
4374
+ "slicePath": "frontend/slices/theme-presets",
4375
+ "convexPaths": [],
4376
+ "npm": [
4377
+ "next-themes@^0.4.6"
4378
+ ],
4379
+ "shadcn": [
4380
+ "button",
4381
+ "popover"
4382
+ ],
4383
+ "env": [],
4384
+ "peers": [],
4385
+ "providers": [],
4386
+ "tags": [
4387
+ "ui",
4388
+ "theme",
4389
+ "tweakcn",
4390
+ "color",
4391
+ "preset",
4392
+ "switcher",
4393
+ "popover",
4394
+ "next-themes",
4395
+ "notion-like"
4396
+ ],
4397
+ "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`."
4398
+ },
4399
+ {
4400
+ "slug": "files",
4401
+ "title": "Files — pluggable upload + URL resolver with storage-adapter contract",
4402
+ "category": "data",
4403
+ "kind": "ui",
4404
+ "version": "0.2.0",
4405
+ "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, …).",
4406
+ "source": "notion-page-clone",
4407
+ "slicePath": "frontend/slices/files",
4408
+ "convexPaths": [],
4409
+ "npm": [],
4410
+ "shadcn": [
4411
+ "button"
4412
+ ],
4413
+ "env": [],
4414
+ "peers": [],
4415
+ "providers": [],
4416
+ "tags": [
4417
+ "data",
4418
+ "upload",
4419
+ "files",
4420
+ "storage",
4421
+ "adapter",
4422
+ "portable",
4423
+ "notion-like"
4424
+ ],
4425
+ "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."
4426
+ },
4427
+ {
4428
+ "slug": "equation",
4429
+ "title": "Equation — Notion-style KaTeX block primitive",
4430
+ "category": "ui",
4431
+ "kind": "ui",
4432
+ "version": "0.1.0",
4433
+ "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.",
4434
+ "source": "notion-page-clone",
4435
+ "slicePath": "frontend/slices/equation",
4436
+ "convexPaths": [],
4437
+ "npm": [
4438
+ "katex@^0.16.45"
4439
+ ],
4440
+ "shadcn": [
4441
+ "button"
4442
+ ],
4443
+ "env": [],
4444
+ "peers": [],
4445
+ "providers": [],
4446
+ "tags": [
4447
+ "ui",
4448
+ "notion",
4449
+ "notion-like",
4450
+ "equation",
4451
+ "katex",
4452
+ "latex",
4453
+ "math",
4454
+ "block",
4455
+ "primitive",
4456
+ "editor"
4457
+ ],
4458
+ "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."
4459
+ },
4460
+ {
4461
+ "slug": "code-block",
4462
+ "title": "Code Block — Notion-style syntax-highlighted code primitive",
4463
+ "category": "ui",
4464
+ "kind": "ui",
4465
+ "version": "0.1.0",
4466
+ "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.",
4467
+ "source": "notion-page-clone",
4468
+ "slicePath": "frontend/slices/code-block",
4469
+ "convexPaths": [],
4470
+ "npm": [
4471
+ "highlight.js@^11.11.1"
4472
+ ],
4473
+ "shadcn": [
4474
+ "button",
4475
+ "dropdown-menu"
4476
+ ],
4477
+ "env": [],
4478
+ "peers": [],
4479
+ "providers": [],
4480
+ "tags": [
4481
+ "ui",
4482
+ "notion",
4483
+ "notion-like",
4484
+ "code",
4485
+ "syntax",
4486
+ "highlight",
4487
+ "highlight.js",
4488
+ "block",
4489
+ "primitive",
4490
+ "editor"
4491
+ ],
4492
+ "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."
4493
+ },
4494
+ {
4495
+ "slug": "notifications",
4496
+ "title": "Notifications — Notion-style per-page Notify Me",
4497
+ "category": "ui",
4498
+ "kind": "ui",
4499
+ "version": "0.1.0",
4500
+ "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.",
4501
+ "source": "notion-page-clone",
4502
+ "slicePath": "frontend/slices/notifications",
4503
+ "convexPaths": [],
4504
+ "npm": [],
4505
+ "shadcn": [
4506
+ "button",
4507
+ "popover"
4508
+ ],
4509
+ "env": [],
4510
+ "peers": [],
4511
+ "providers": [],
4512
+ "tags": [
4513
+ "ui",
4514
+ "notion",
4515
+ "notion-like",
4516
+ "notifications",
4517
+ "subscribe",
4518
+ "notify",
4519
+ "bell",
4520
+ "popover",
4521
+ "localstorage",
4522
+ "primitive"
4523
+ ],
4524
+ "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."
4525
+ },
4526
+ {
4527
+ "slug": "database-cell-selection",
4528
+ "title": "Database Cell Selection — Notion-style drag-fill + multi-select",
4529
+ "category": "ui",
4530
+ "kind": "ui",
4531
+ "version": "0.1.0",
4532
+ "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.).",
4533
+ "source": "notion-page-clone",
4534
+ "slicePath": "frontend/slices/database-cell-selection",
4535
+ "convexPaths": [],
4536
+ "npm": [],
4537
+ "shadcn": [],
4538
+ "env": [],
4539
+ "peers": [],
4540
+ "providers": [],
4541
+ "tags": [
4542
+ "ui",
4543
+ "notion",
4544
+ "notion-like",
4545
+ "database",
4546
+ "grid",
4547
+ "cell",
4548
+ "selection",
4549
+ "drag-fill",
4550
+ "spreadsheet",
4551
+ "primitive",
4552
+ "table"
4553
+ ],
4554
+ "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."
4555
+ },
4556
+ {
4557
+ "slug": "notion-database",
4558
+ "title": "Notion-like Database Table — full table with import/export (11 views · 16 cells · CSV + JSON)",
4559
+ "category": "ui",
4560
+ "kind": "ui",
4561
+ "version": "0.6.0",
4562
+ "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).",
4563
+ "source": "open-silong",
4564
+ "slicePath": "frontend/slices/notion-database",
4565
+ "convexPaths": [
4566
+ "template-base/database-silong/convex/handlers/databases.ts",
4567
+ "template-base/database-silong/convex/handlers/pages.ts",
4568
+ "template-base/database-silong/convex/schema.database-silong.ts"
4569
+ ],
4570
+ "npm": [
4571
+ "recharts@^2.13.0"
4572
+ ],
4573
+ "shadcn": [
4574
+ "button",
4575
+ "input",
4576
+ "checkbox",
4577
+ "dropdown-menu",
4578
+ "popover",
4579
+ "select",
4580
+ "dialog"
4581
+ ],
4582
+ "env": [],
4583
+ "peers": [
4584
+ {
4585
+ "slug": "notion-shell",
4586
+ "range": "^0.4",
4587
+ "reason": "Domain types (Database, Property, PropertyValue, DbView, etc.) live in notion-shell."
4588
+ }
4589
+ ],
4590
+ "providers": [],
4591
+ "tags": [
4592
+ "ui",
4593
+ "notion",
4594
+ "notion-like",
4595
+ "database",
4596
+ "table",
4597
+ "board",
4598
+ "list",
4599
+ "gallery",
4600
+ "calendar",
4601
+ "feed",
4602
+ "chart",
4603
+ "dashboard",
4604
+ "form",
4605
+ "map",
4606
+ "timeline",
4607
+ "gantt",
4608
+ "kanban",
4609
+ "views",
4610
+ "filter",
4611
+ "sort",
4612
+ "property",
4613
+ "files",
4614
+ "person",
4615
+ "formula",
4616
+ "timestamp",
4617
+ "unique-id",
4618
+ "csv",
4619
+ "json",
4620
+ "import",
4621
+ "export",
4622
+ "template",
4623
+ "data",
4624
+ "backup",
4625
+ "primitive",
4626
+ "optional",
4627
+ "embeddable"
4628
+ ],
4629
+ "agentRecipe": "Run `npx rr add notion-database` (cascades notion-shell as peer). Import: `import { NotionDatabase, NotionProperty, VIEW_REGISTRY, DatabaseIOActions } 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."
4630
+ },
4631
+ {
4632
+ "slug": "database-io",
4633
+ "title": "[DEPRECATED] Database IO — merged into notion-database v0.6",
4634
+ "category": "ui",
4635
+ "kind": "ui",
4636
+ "version": "0.2.0",
4637
+ "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.",
4638
+ "source": "notion-page-clone",
4639
+ "slicePath": "frontend/slices/database-io",
4640
+ "convexPaths": [],
4641
+ "npm": [],
4642
+ "shadcn": [
4643
+ "button",
4644
+ "dialog",
4645
+ "dropdown-menu"
4646
+ ],
4647
+ "env": [],
4648
+ "peers": [
4649
+ {
4650
+ "slug": "notion-database",
4651
+ "range": "^0.3",
4652
+ "reason": "Reuses Database / Page / Property / PropertyValue / PropertyType / SelectOption / DatabaseViewConfig types."
4653
+ }
4654
+ ],
4655
+ "providers": [],
4656
+ "tags": [
4657
+ "ui",
4658
+ "notion",
4659
+ "notion-like",
4660
+ "database",
4661
+ "csv",
4662
+ "json",
4663
+ "import",
4664
+ "export",
4665
+ "template",
4666
+ "data",
4667
+ "backup",
4668
+ "spreadsheet",
4669
+ "wire-format",
4670
+ "primitive",
4671
+ "optional"
4672
+ ],
4673
+ "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."
4674
+ },
4675
+ {
4676
+ "slug": "notion-shell",
4677
+ "title": "Notion Shell — page + sidebar + block editor primitives (pure, no database)",
4678
+ "category": "ui",
4679
+ "kind": "ui",
4680
+ "version": "0.4.0",
4681
+ "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.",
4682
+ "source": "notion-page-clone",
4683
+ "slicePath": "frontend/slices/notion-shell",
4684
+ "convexPaths": [],
4685
+ "npm": [
4686
+ "@dnd-kit/core",
4687
+ "@dnd-kit/sortable",
4688
+ "@dnd-kit/utilities"
4689
+ ],
4690
+ "shadcn": [
4691
+ "button",
4692
+ "input",
4693
+ "checkbox",
4694
+ "dropdown-menu",
4695
+ "popover"
4696
+ ],
4697
+ "env": [],
4698
+ "peers": [],
4699
+ "providers": [],
4700
+ "tags": [
4701
+ "ui",
4702
+ "notion",
4703
+ "shell",
4704
+ "wrapper",
4705
+ "sidebar",
4706
+ "page",
4707
+ "database",
4708
+ "primitive",
4709
+ "portable",
4710
+ "slash-menu",
4711
+ "decorator",
4712
+ "wysiwyg",
4713
+ "views",
4714
+ "kanban",
4715
+ "calendar",
4716
+ "gallery",
4717
+ "drag",
4718
+ "cover",
4719
+ "embed",
4720
+ "image",
4721
+ "notion-like"
4722
+ ],
4723
+ "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.**"
4724
+ },
4725
+ {
4726
+ "slug": "workspace-shell",
4727
+ "title": "Workspace Shell — atomic (workspace × menuSet) NavContext",
4728
+ "category": "ui",
4729
+ "kind": "full",
4730
+ "version": "1.0.0",
4731
+ "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.",
4732
+ "source": "superspace",
4733
+ "slicePath": "template-base/frontend/slices/workspace-shell",
4734
+ "convexPaths": [
4735
+ "template-base/convex/features/workspaceShell"
4736
+ ],
4737
+ "npm": [],
4738
+ "shadcn": [
4739
+ "dropdown-menu",
4740
+ "popover",
4741
+ "command",
4742
+ "tabs",
4743
+ "switch"
4744
+ ],
4745
+ "env": [],
4746
+ "peers": [
4747
+ {
4748
+ "slug": "convex-auth",
4749
+ "range": "^0.1",
4750
+ "reason": "User session required for menuSet assignment + nav-context cache."
4751
+ }
4752
+ ],
4753
+ "providers": [],
4754
+ "tags": [
4755
+ "ui",
4756
+ "navigation",
4757
+ "workspace",
4758
+ "menu",
4759
+ "shell",
4760
+ "convex",
4761
+ "rbac"
4762
+ ],
4763
+ "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
4764
  }
3926
4765
  ]
3927
4766
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "rahman-resources",
3
- "version": "1.7.0",
3
+ "version": "1.8.0",
4
4
  "description": "Rahman Resources (rr) — shadcn-style installer for vertical slices. `npx resources add <slug>` copies slice into your project's `slices/<slug>/`. You own the files.",
5
5
  "type": "module",
6
6
  "license": "MIT",