rahman-resources 1.8.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.
Files changed (2) hide show
  1. package/lib/manifest.json +146 -30
  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-23T06:29:18.092Z",
3
+ "generatedAt": "2026-05-28T06:14:32.508Z",
4
4
  "repo": "rahmanef63/resource-site",
5
5
  "branch": "main",
6
6
  "layouts": [
@@ -1825,20 +1825,63 @@
1825
1825
  "slug": "icon-picker",
1826
1826
  "title": "Icon Picker",
1827
1827
  "category": "ui",
1828
- "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-16 from notion-page-clone — full implementation (19 files) including emoji-keywords search index, twemoji renderer, lucide-catalog, recents store, style-pref hook.",
1829
- "source": "notion-page-clone",
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",
1830
1830
  "install": "npx rahman-resources add icon-picker",
1831
1831
  "npmPackages": [],
1832
1832
  "exampleCode": "",
1833
- "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.",
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.",
1834
1834
  "tags": [
1835
1835
  "icon",
1836
1836
  "emoji",
1837
1837
  "lucide",
1838
+ "phosphor",
1838
1839
  "picker",
1839
1840
  "twemoji",
1840
1841
  "notion",
1841
- "notion-like"
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"
1842
1885
  ]
1843
1886
  },
1844
1887
  {
@@ -2407,14 +2450,14 @@
2407
2450
  },
2408
2451
  {
2409
2452
  "slug": "notion-database",
2410
- "title": "Notion-like Database Table — full table with import/export (11 views · 16 cells · CSV + JSON)",
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)",
2411
2454
  "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).",
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.",
2413
2456
  "source": "open-silong",
2414
2457
  "install": "npx rahman-resources add notion-database",
2415
2458
  "npmPackages": [],
2416
2459
  "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.",
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.",
2418
2461
  "tags": [
2419
2462
  "ui",
2420
2463
  "notion",
@@ -2609,7 +2652,7 @@
2609
2652
  "title": "DOKU — Indonesia Payment",
2610
2653
  "category": "payment",
2611
2654
  "kind": "full",
2612
- "version": "0.1.0",
2655
+ "version": "0.1.1",
2613
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.",
2614
2657
  "source": "rahmanef63/resource-site",
2615
2658
  "slicePath": "frontend/slices/doku-payment",
@@ -2673,7 +2716,7 @@
2673
2716
  "title": "Midtrans — Indonesia Payment",
2674
2717
  "category": "payment",
2675
2718
  "kind": "full",
2676
- "version": "0.1.0",
2719
+ "version": "0.1.1",
2677
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.",
2678
2721
  "source": "rahmanef63/resource-site",
2679
2722
  "slicePath": "frontend/slices/midtrans-payment",
@@ -2730,7 +2773,7 @@
2730
2773
  "title": "Resend — Transactional & Newsletter",
2731
2774
  "category": "email",
2732
2775
  "kind": "backend",
2733
- "version": "0.1.0",
2776
+ "version": "0.1.1",
2734
2777
  "description": "Transactional email + newsletter blast via Resend. Double opt-in flow + audience segmentation. Magic-link delivery for Convex Auth.",
2735
2778
  "source": "rahmanef63/resource-site",
2736
2779
  "slicePath": "frontend/slices/resend-newsletter",
@@ -3498,14 +3541,17 @@
3498
3541
  "title": "Icon Picker",
3499
3542
  "category": "ui",
3500
3543
  "kind": "ui",
3501
- "version": "0.2.0",
3502
- "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-16 from notion-page-clone — full implementation (19 files) including emoji-keywords search index, twemoji renderer, lucide-catalog, recents store, style-pref hook.",
3503
- "source": "notion-page-clone",
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",
3504
3547
  "slicePath": "frontend/slices/icon-picker",
3505
3548
  "convexPaths": [],
3506
- "npm": [],
3549
+ "npm": [
3550
+ "@phosphor-icons/react@^2.1.10"
3551
+ ],
3507
3552
  "shadcn": [
3508
3553
  "popover",
3554
+ "dialog",
3509
3555
  "button",
3510
3556
  "input",
3511
3557
  "scroll-area",
@@ -3518,12 +3564,78 @@
3518
3564
  "icon",
3519
3565
  "emoji",
3520
3566
  "lucide",
3567
+ "phosphor",
3521
3568
  "picker",
3522
3569
  "twemoji",
3523
3570
  "notion",
3524
- "notion-like"
3571
+ "notion-like",
3572
+ "responsive"
3525
3573
  ],
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."
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."
3527
3639
  },
3528
3640
  {
3529
3641
  "slug": "cta",
@@ -3649,7 +3761,7 @@
3649
3761
  "title": "Testimonials",
3650
3762
  "category": "content",
3651
3763
  "kind": "backend",
3652
- "version": "0.1.0",
3764
+ "version": "0.1.1",
3653
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`.",
3654
3766
  "source": "rahmanef.com",
3655
3767
  "slicePath": "frontend/slices/testimonials",
@@ -3687,7 +3799,7 @@
3687
3799
  "title": "Services",
3688
3800
  "category": "content",
3689
3801
  "kind": "backend",
3690
- "version": "0.1.0",
3802
+ "version": "0.1.1",
3691
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`.",
3692
3804
  "source": "rahmanef.com",
3693
3805
  "slicePath": "frontend/slices/services",
@@ -3726,7 +3838,7 @@
3726
3838
  "title": "Socials",
3727
3839
  "category": "content",
3728
3840
  "kind": "backend",
3729
- "version": "0.1.0",
3841
+ "version": "0.1.1",
3730
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.",
3731
3843
  "source": "rahmanef.com",
3732
3844
  "slicePath": "frontend/slices/socials",
@@ -3984,7 +4096,7 @@
3984
4096
  "title": "Comments — Threaded",
3985
4097
  "category": "content",
3986
4098
  "kind": "full",
3987
- "version": "0.2.0",
4099
+ "version": "0.2.1",
3988
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.",
3989
4101
  "source": "rahmanef63/resource-site",
3990
4102
  "slicePath": "frontend/slices/comments",
@@ -4020,7 +4132,7 @@
4020
4132
  "title": "SEO — AI Metadata Generator",
4021
4133
  "category": "content",
4022
4134
  "kind": "full",
4023
- "version": "0.2.0",
4135
+ "version": "0.2.1",
4024
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).",
4025
4137
  "source": "rahmanef63/resource-site",
4026
4138
  "slicePath": "frontend/slices/seo",
@@ -4555,11 +4667,11 @@
4555
4667
  },
4556
4668
  {
4557
4669
  "slug": "notion-database",
4558
- "title": "Notion-like Database Table — full table with import/export (11 views · 16 cells · CSV + JSON)",
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)",
4559
4671
  "category": "ui",
4560
4672
  "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).",
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.",
4563
4675
  "source": "open-silong",
4564
4676
  "slicePath": "frontend/slices/notion-database",
4565
4677
  "convexPaths": [
@@ -4577,14 +4689,18 @@
4577
4689
  "dropdown-menu",
4578
4690
  "popover",
4579
4691
  "select",
4580
- "dialog"
4692
+ "dialog",
4693
+ "sheet",
4694
+ "toggle-group",
4695
+ "tooltip",
4696
+ "separator"
4581
4697
  ],
4582
4698
  "env": [],
4583
4699
  "peers": [
4584
4700
  {
4585
4701
  "slug": "notion-shell",
4586
- "range": "^0.4",
4587
- "reason": "Domain types (Database, Property, PropertyValue, DbView, etc.) live in 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."
4588
4704
  }
4589
4705
  ],
4590
4706
  "providers": [],
@@ -4626,7 +4742,7 @@
4626
4742
  "optional",
4627
4743
  "embeddable"
4628
4744
  ],
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."
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."
4630
4746
  },
4631
4747
  {
4632
4748
  "slug": "database-io",
@@ -4677,7 +4793,7 @@
4677
4793
  "title": "Notion Shell — page + sidebar + block editor primitives (pure, no database)",
4678
4794
  "category": "ui",
4679
4795
  "kind": "ui",
4680
- "version": "0.4.0",
4796
+ "version": "0.7.0",
4681
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.",
4682
4798
  "source": "notion-page-clone",
4683
4799
  "slicePath": "frontend/slices/notion-shell",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "rahman-resources",
3
- "version": "1.8.0",
3
+ "version": "1.9.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",