rahman-resources 1.8.0 → 1.9.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/manifest.json +210 -32
- package/package.json +1 -1
package/lib/manifest.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 2,
|
|
3
|
-
"generatedAt": "2026-05-
|
|
3
|
+
"generatedAt": "2026-05-30T14:50:08.155Z",
|
|
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-
|
|
1829
|
-
"source": "
|
|
1828
|
+
"description": "Emoji + lucide (outline) + phosphor (fill) icon picker with search, 10-color palette, Twemoji/native toggle, recents tracking, and smart positioning. Two-tab layout (Emoji | Icon) with sub-variant pills (Native | Twemoji / Lucide | Phosphor fill). One string stores emoji OR lucide:Name OR phosphor:Name OR with ?c=hex tint — backwards-compat with raw-emoji fields. Popover auto-flips on collision (caps to Radix `--radix-popover-content-available-height`) and falls back to centered Dialog when neither side fits. Two variants: Popover (compact trigger) and Inline (full sheet/dialog use). Lifted 2026-05-25 from open-silong.",
|
|
1829
|
+
"source": "open-silong",
|
|
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. <
|
|
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 ·
|
|
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",
|
|
@@ -2536,6 +2579,28 @@
|
|
|
2536
2579
|
"convex",
|
|
2537
2580
|
"rbac"
|
|
2538
2581
|
]
|
|
2582
|
+
},
|
|
2583
|
+
{
|
|
2584
|
+
"slug": "library",
|
|
2585
|
+
"title": "Library — resource hub (prompts · visuals · snippets · links)",
|
|
2586
|
+
"category": "data",
|
|
2587
|
+
"description": "Grab-bag resource hub. One polymorphic `libraryItems` table holds six kinds — prompt, image, video, link, download, snippet — with per-kind payload fields switched on `kind` (no joins). Attribution-first: every item carries optional source/license/tools so re-shares stay correct. Collections group items. Convex-backed (schema + queries + unauthenticated mutations); SEO override fields reused from the `seo` peer slice so the surface matches blog/projects rows. Public view = filterable card grid + per-item detail with copy-to-clipboard for prompts/snippets and an opt-in upvote control. Lifted 2026-05-28 from rahmanef.com; 432-LOC mutations + 330-LOC detail split for the 200-LOC cap; Indonesian copy + custom primitives stripped (prop-driven English defaults); cross-slice auth + comments-votes coupling dropped (consumer wraps mutations + supplies the upvote handler).",
|
|
2588
|
+
"source": "rahmanef.com",
|
|
2589
|
+
"install": "npx rahman-resources add library",
|
|
2590
|
+
"npmPackages": [],
|
|
2591
|
+
"exampleCode": "",
|
|
2592
|
+
"agentRecipe": "Run `npx rr add seo` (peer) then `npx rr add library`. Spread `seoTables` + `libraryTables` into your root Convex schema. Wrap the unauthenticated CRUD `internalMutation`s with your auth model (see README Install). Render `<LibraryIndex items={await fetchQuery(api.library.listPublic)} />` and `<LibraryDetail item={await fetchQuery(api.library.getBySlug, { slug })} />`. Pass `onUpvote` to enable voting (consumer-owned backend); override `copy` + `kindLabels` per consumer.",
|
|
2593
|
+
"tags": [
|
|
2594
|
+
"library",
|
|
2595
|
+
"resources",
|
|
2596
|
+
"prompts",
|
|
2597
|
+
"snippets",
|
|
2598
|
+
"moodboard",
|
|
2599
|
+
"downloads",
|
|
2600
|
+
"attribution",
|
|
2601
|
+
"seo",
|
|
2602
|
+
"personal-brand"
|
|
2603
|
+
]
|
|
2539
2604
|
}
|
|
2540
2605
|
],
|
|
2541
2606
|
"slices": [
|
|
@@ -2544,7 +2609,7 @@
|
|
|
2544
2609
|
"title": "Convex Auth — Multi-Provider Sign-in",
|
|
2545
2610
|
"category": "auth",
|
|
2546
2611
|
"kind": "backend",
|
|
2547
|
-
"version": "0.2.
|
|
2612
|
+
"version": "0.2.1",
|
|
2548
2613
|
"description": "@convex-dev/auth with Password (PBKDF2-SHA256 100k, self-hosted-friendly), Anonymous (guest), Google OAuth, and Resend magic-link. Ships a production SignInPage with i18n, prop-driven provider list, and split Login/Register tabs. No Clerk.",
|
|
2549
2614
|
"source": "rahmanef63/resource-site",
|
|
2550
2615
|
"slicePath": "frontend/slices/convex-auth",
|
|
@@ -2609,7 +2674,7 @@
|
|
|
2609
2674
|
"title": "DOKU — Indonesia Payment",
|
|
2610
2675
|
"category": "payment",
|
|
2611
2676
|
"kind": "full",
|
|
2612
|
-
"version": "0.1.
|
|
2677
|
+
"version": "0.1.1",
|
|
2613
2678
|
"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
2679
|
"source": "rahmanef63/resource-site",
|
|
2615
2680
|
"slicePath": "frontend/slices/doku-payment",
|
|
@@ -2673,7 +2738,7 @@
|
|
|
2673
2738
|
"title": "Midtrans — Indonesia Payment",
|
|
2674
2739
|
"category": "payment",
|
|
2675
2740
|
"kind": "full",
|
|
2676
|
-
"version": "0.1.
|
|
2741
|
+
"version": "0.1.1",
|
|
2677
2742
|
"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
2743
|
"source": "rahmanef63/resource-site",
|
|
2679
2744
|
"slicePath": "frontend/slices/midtrans-payment",
|
|
@@ -2730,7 +2795,7 @@
|
|
|
2730
2795
|
"title": "Resend — Transactional & Newsletter",
|
|
2731
2796
|
"category": "email",
|
|
2732
2797
|
"kind": "backend",
|
|
2733
|
-
"version": "0.1.
|
|
2798
|
+
"version": "0.1.2",
|
|
2734
2799
|
"description": "Transactional email + newsletter blast via Resend. Double opt-in flow + audience segmentation. Magic-link delivery for Convex Auth.",
|
|
2735
2800
|
"source": "rahmanef63/resource-site",
|
|
2736
2801
|
"slicePath": "frontend/slices/resend-newsletter",
|
|
@@ -3498,14 +3563,17 @@
|
|
|
3498
3563
|
"title": "Icon Picker",
|
|
3499
3564
|
"category": "ui",
|
|
3500
3565
|
"kind": "ui",
|
|
3501
|
-
"version": "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-
|
|
3503
|
-
"source": "
|
|
3566
|
+
"version": "0.4.1",
|
|
3567
|
+
"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.",
|
|
3568
|
+
"source": "open-silong",
|
|
3504
3569
|
"slicePath": "frontend/slices/icon-picker",
|
|
3505
3570
|
"convexPaths": [],
|
|
3506
|
-
"npm": [
|
|
3571
|
+
"npm": [
|
|
3572
|
+
"@phosphor-icons/react@^2.1.10"
|
|
3573
|
+
],
|
|
3507
3574
|
"shadcn": [
|
|
3508
3575
|
"popover",
|
|
3576
|
+
"dialog",
|
|
3509
3577
|
"button",
|
|
3510
3578
|
"input",
|
|
3511
3579
|
"scroll-area",
|
|
@@ -3518,12 +3586,78 @@
|
|
|
3518
3586
|
"icon",
|
|
3519
3587
|
"emoji",
|
|
3520
3588
|
"lucide",
|
|
3589
|
+
"phosphor",
|
|
3521
3590
|
"picker",
|
|
3522
3591
|
"twemoji",
|
|
3523
3592
|
"notion",
|
|
3524
|
-
"notion-like"
|
|
3593
|
+
"notion-like",
|
|
3594
|
+
"responsive"
|
|
3595
|
+
],
|
|
3596
|
+
"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."
|
|
3597
|
+
},
|
|
3598
|
+
{
|
|
3599
|
+
"slug": "activity",
|
|
3600
|
+
"title": "Activity — public productivity log",
|
|
3601
|
+
"category": "data",
|
|
3602
|
+
"kind": "full",
|
|
3603
|
+
"version": "0.1.0",
|
|
3604
|
+
"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).",
|
|
3605
|
+
"source": "rahmanef.com",
|
|
3606
|
+
"slicePath": "frontend/slices/activity",
|
|
3607
|
+
"convexPaths": [
|
|
3608
|
+
"convex/features/activity"
|
|
3609
|
+
],
|
|
3610
|
+
"npm": [
|
|
3611
|
+
"convex@^1.17",
|
|
3612
|
+
"lucide-react@^0.400.0",
|
|
3613
|
+
"next@^15",
|
|
3614
|
+
"react@^18"
|
|
3525
3615
|
],
|
|
3526
|
-
"
|
|
3616
|
+
"shadcn": [],
|
|
3617
|
+
"env": [],
|
|
3618
|
+
"peers": [],
|
|
3619
|
+
"providers": [],
|
|
3620
|
+
"tags": [
|
|
3621
|
+
"activity",
|
|
3622
|
+
"productivity",
|
|
3623
|
+
"log",
|
|
3624
|
+
"now-page",
|
|
3625
|
+
"feed",
|
|
3626
|
+
"mcp",
|
|
3627
|
+
"seo",
|
|
3628
|
+
"personal-brand"
|
|
3629
|
+
],
|
|
3630
|
+
"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."
|
|
3631
|
+
},
|
|
3632
|
+
{
|
|
3633
|
+
"slug": "i18n-translate",
|
|
3634
|
+
"title": "i18n — Google Translate widget",
|
|
3635
|
+
"category": "ui",
|
|
3636
|
+
"kind": "ui",
|
|
3637
|
+
"version": "0.1.0",
|
|
3638
|
+
"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.",
|
|
3639
|
+
"source": "rahmanef.com",
|
|
3640
|
+
"slicePath": "frontend/slices/i18n-translate",
|
|
3641
|
+
"convexPaths": [],
|
|
3642
|
+
"npm": [
|
|
3643
|
+
"lucide-react@^0.400.0",
|
|
3644
|
+
"next@^15",
|
|
3645
|
+
"react@^18"
|
|
3646
|
+
],
|
|
3647
|
+
"shadcn": [],
|
|
3648
|
+
"env": [],
|
|
3649
|
+
"peers": [],
|
|
3650
|
+
"providers": [],
|
|
3651
|
+
"tags": [
|
|
3652
|
+
"i18n",
|
|
3653
|
+
"translate",
|
|
3654
|
+
"google-translate",
|
|
3655
|
+
"ui",
|
|
3656
|
+
"language-switcher",
|
|
3657
|
+
"locale",
|
|
3658
|
+
"widget"
|
|
3659
|
+
],
|
|
3660
|
+
"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
3661
|
},
|
|
3528
3662
|
{
|
|
3529
3663
|
"slug": "cta",
|
|
@@ -3649,7 +3783,7 @@
|
|
|
3649
3783
|
"title": "Testimonials",
|
|
3650
3784
|
"category": "content",
|
|
3651
3785
|
"kind": "backend",
|
|
3652
|
-
"version": "0.1.
|
|
3786
|
+
"version": "0.1.1",
|
|
3653
3787
|
"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
3788
|
"source": "rahmanef.com",
|
|
3655
3789
|
"slicePath": "frontend/slices/testimonials",
|
|
@@ -3687,7 +3821,7 @@
|
|
|
3687
3821
|
"title": "Services",
|
|
3688
3822
|
"category": "content",
|
|
3689
3823
|
"kind": "backend",
|
|
3690
|
-
"version": "0.1.
|
|
3824
|
+
"version": "0.1.1",
|
|
3691
3825
|
"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
3826
|
"source": "rahmanef.com",
|
|
3693
3827
|
"slicePath": "frontend/slices/services",
|
|
@@ -3726,7 +3860,7 @@
|
|
|
3726
3860
|
"title": "Socials",
|
|
3727
3861
|
"category": "content",
|
|
3728
3862
|
"kind": "backend",
|
|
3729
|
-
"version": "0.1.
|
|
3863
|
+
"version": "0.1.1",
|
|
3730
3864
|
"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
3865
|
"source": "rahmanef.com",
|
|
3732
3866
|
"slicePath": "frontend/slices/socials",
|
|
@@ -3870,7 +4004,7 @@
|
|
|
3870
4004
|
"title": "Admin — Generic Shell",
|
|
3871
4005
|
"category": "infra",
|
|
3872
4006
|
"kind": "full",
|
|
3873
|
-
"version": "0.2.
|
|
4007
|
+
"version": "0.2.1",
|
|
3874
4008
|
"description": "Per-instance admin landing scaffold + portable nav-from-registry factory. Consumer supplies a SliceRegistryAdapter (each slice declares its own admin.activity[]) + queryTable reader; the slice's buildAdminStats(opts) emits the { counts, unreadMessages, activity } shape Convex's admin.stats query returns. Pulled UP from rahmanef.com (Wave N+3.1, commit b542389) — domain literals dropped at the kitab boundary. Gated by requireAdmin on Convex side; superadmin email gate via SUPER_ADMIN_EMAIL env.",
|
|
3875
4009
|
"source": "rahmanef63/resource-site",
|
|
3876
4010
|
"slicePath": "frontend/slices/admin",
|
|
@@ -3984,7 +4118,7 @@
|
|
|
3984
4118
|
"title": "Comments — Threaded",
|
|
3985
4119
|
"category": "content",
|
|
3986
4120
|
"kind": "full",
|
|
3987
|
-
"version": "0.2.
|
|
4121
|
+
"version": "0.2.1",
|
|
3988
4122
|
"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
4123
|
"source": "rahmanef63/resource-site",
|
|
3990
4124
|
"slicePath": "frontend/slices/comments",
|
|
@@ -4020,7 +4154,7 @@
|
|
|
4020
4154
|
"title": "SEO — AI Metadata Generator",
|
|
4021
4155
|
"category": "content",
|
|
4022
4156
|
"kind": "full",
|
|
4023
|
-
"version": "0.2.
|
|
4157
|
+
"version": "0.2.1",
|
|
4024
4158
|
"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
4159
|
"source": "rahmanef63/resource-site",
|
|
4026
4160
|
"slicePath": "frontend/slices/seo",
|
|
@@ -4555,11 +4689,11 @@
|
|
|
4555
4689
|
},
|
|
4556
4690
|
{
|
|
4557
4691
|
"slug": "notion-database",
|
|
4558
|
-
"title": "Notion-like Database Table — full table with import/export (11 views ·
|
|
4692
|
+
"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
4693
|
"category": "ui",
|
|
4560
4694
|
"kind": "ui",
|
|
4561
|
-
"version": "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).",
|
|
4695
|
+
"version": "0.13.0",
|
|
4696
|
+
"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
4697
|
"source": "open-silong",
|
|
4564
4698
|
"slicePath": "frontend/slices/notion-database",
|
|
4565
4699
|
"convexPaths": [
|
|
@@ -4577,14 +4711,18 @@
|
|
|
4577
4711
|
"dropdown-menu",
|
|
4578
4712
|
"popover",
|
|
4579
4713
|
"select",
|
|
4580
|
-
"dialog"
|
|
4714
|
+
"dialog",
|
|
4715
|
+
"sheet",
|
|
4716
|
+
"toggle-group",
|
|
4717
|
+
"tooltip",
|
|
4718
|
+
"separator"
|
|
4581
4719
|
],
|
|
4582
4720
|
"env": [],
|
|
4583
4721
|
"peers": [
|
|
4584
4722
|
{
|
|
4585
4723
|
"slug": "notion-shell",
|
|
4586
|
-
"range": "^0.
|
|
4587
|
-
"reason": "Domain types
|
|
4724
|
+
"range": "^0.7",
|
|
4725
|
+
"reason": "Domain types live in notion-shell. v0.7 extends Database with `locked` flag for the DatabaseMenu lock-toggle action."
|
|
4588
4726
|
}
|
|
4589
4727
|
],
|
|
4590
4728
|
"providers": [],
|
|
@@ -4626,7 +4764,7 @@
|
|
|
4626
4764
|
"optional",
|
|
4627
4765
|
"embeddable"
|
|
4628
4766
|
],
|
|
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."
|
|
4767
|
+
"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
4768
|
},
|
|
4631
4769
|
{
|
|
4632
4770
|
"slug": "database-io",
|
|
@@ -4677,7 +4815,7 @@
|
|
|
4677
4815
|
"title": "Notion Shell — page + sidebar + block editor primitives (pure, no database)",
|
|
4678
4816
|
"category": "ui",
|
|
4679
4817
|
"kind": "ui",
|
|
4680
|
-
"version": "0.
|
|
4818
|
+
"version": "0.7.0",
|
|
4681
4819
|
"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
4820
|
"source": "notion-page-clone",
|
|
4683
4821
|
"slicePath": "frontend/slices/notion-shell",
|
|
@@ -4761,6 +4899,46 @@
|
|
|
4761
4899
|
"rbac"
|
|
4762
4900
|
],
|
|
4763
4901
|
"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)."
|
|
4902
|
+
},
|
|
4903
|
+
{
|
|
4904
|
+
"slug": "library",
|
|
4905
|
+
"title": "Library — resource hub (prompts · visuals · snippets · links)",
|
|
4906
|
+
"category": "data",
|
|
4907
|
+
"kind": "full",
|
|
4908
|
+
"version": "0.1.0",
|
|
4909
|
+
"description": "Grab-bag resource hub. One polymorphic `libraryItems` table holds six kinds — prompt, image, video, link, download, snippet — with per-kind payload fields switched on `kind` (no joins). Attribution-first: every item carries optional source/license/tools so re-shares stay correct. Collections group items. Convex-backed (schema + queries + unauthenticated mutations); SEO override fields reused from the `seo` peer slice so the surface matches blog/projects rows. Public view = filterable card grid + per-item detail with copy-to-clipboard for prompts/snippets and an opt-in upvote control. Lifted 2026-05-28 from rahmanef.com; 432-LOC mutations + 330-LOC detail split for the 200-LOC cap; Indonesian copy + custom primitives stripped (prop-driven English defaults); cross-slice auth + comments-votes coupling dropped (consumer wraps mutations + supplies the upvote handler).",
|
|
4910
|
+
"source": "rahmanef.com",
|
|
4911
|
+
"slicePath": "frontend/slices/library",
|
|
4912
|
+
"convexPaths": [
|
|
4913
|
+
"convex/features/library"
|
|
4914
|
+
],
|
|
4915
|
+
"npm": [
|
|
4916
|
+
"convex@^1.17",
|
|
4917
|
+
"next@^15",
|
|
4918
|
+
"react@^18"
|
|
4919
|
+
],
|
|
4920
|
+
"shadcn": [],
|
|
4921
|
+
"env": [],
|
|
4922
|
+
"peers": [
|
|
4923
|
+
{
|
|
4924
|
+
"slug": "seo",
|
|
4925
|
+
"range": "^0.2",
|
|
4926
|
+
"reason": "Library item SEO override fields reuse the seo slice's metadata shape so the surface matches blog/projects rows."
|
|
4927
|
+
}
|
|
4928
|
+
],
|
|
4929
|
+
"providers": [],
|
|
4930
|
+
"tags": [
|
|
4931
|
+
"library",
|
|
4932
|
+
"resources",
|
|
4933
|
+
"prompts",
|
|
4934
|
+
"snippets",
|
|
4935
|
+
"moodboard",
|
|
4936
|
+
"downloads",
|
|
4937
|
+
"attribution",
|
|
4938
|
+
"seo",
|
|
4939
|
+
"personal-brand"
|
|
4940
|
+
],
|
|
4941
|
+
"agentRecipe": "Run `npx rr add seo` (peer) then `npx rr add library`. Spread `seoTables` + `libraryTables` into your root Convex schema. Wrap the unauthenticated CRUD `internalMutation`s with your auth model (see README Install). Render `<LibraryIndex items={await fetchQuery(api.library.listPublic)} />` and `<LibraryDetail item={await fetchQuery(api.library.getBySlug, { slug })} />`. Pass `onUpvote` to enable voting (consumer-owned backend); override `copy` + `kindLabels` per consumer."
|
|
4764
4942
|
}
|
|
4765
4943
|
]
|
|
4766
4944
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "rahman-resources",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.9.1",
|
|
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",
|