@rfdtech/components 1.21.0 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +244 -74
- package/dist/adapters/context-adapter.d.ts +18 -0
- package/dist/adapters/context-adapter.d.ts.map +1 -0
- package/dist/adapters/next-adapter.d.ts +23 -0
- package/dist/adapters/next-adapter.d.ts.map +1 -0
- package/dist/adapters/react-router-adapter.d.ts +9 -0
- package/dist/adapters/react-router-adapter.d.ts.map +1 -0
- package/dist/adapters/registry.d.ts +19 -0
- package/dist/adapters/registry.d.ts.map +1 -0
- package/dist/components/app-header/AppHeader.d.ts +3 -2
- package/dist/components/app-header/AppHeader.d.ts.map +1 -1
- package/dist/components/app-header/AppHeaderNotificationItem.d.ts +3 -0
- package/dist/components/app-header/AppHeaderNotificationItem.d.ts.map +1 -0
- package/dist/components/app-header/AppHeaderProfile.d.ts +5 -0
- package/dist/components/app-header/AppHeaderProfile.d.ts.map +1 -1
- package/dist/components/app-header/index.d.ts +4 -2
- package/dist/components/app-header/index.d.ts.map +1 -1
- package/dist/components/app-layout/AppLayout.d.ts +6 -0
- package/dist/components/app-layout/AppLayout.d.ts.map +1 -1
- package/dist/components/app-layout/AppLayoutInner.d.ts +1 -0
- package/dist/components/app-layout/AppLayoutInner.d.ts.map +1 -1
- package/dist/components/app-switcher/AppIconTile.d.ts +10 -0
- package/dist/components/app-switcher/AppIconTile.d.ts.map +1 -0
- package/dist/components/app-switcher/AppSwitcher.d.ts +1 -1
- package/dist/components/app-switcher/AppSwitcher.d.ts.map +1 -1
- package/dist/components/app-switcher/AppSwitcherItem.d.ts.map +1 -1
- package/dist/components/app-switcher/IconPatterns.d.ts +8 -0
- package/dist/components/app-switcher/IconPatterns.d.ts.map +1 -0
- package/dist/components/app-switcher/SystemAppIcon.d.ts.map +1 -1
- package/dist/components/app-switcher/index.d.ts +2 -0
- package/dist/components/app-switcher/index.d.ts.map +1 -1
- package/dist/components/avatar/Avatar.d.ts.map +1 -1
- package/dist/components/bulk-import-modal/BulkImportModal.d.ts.map +1 -1
- package/dist/components/bulk-import-modal/steps/ValidateDataStep.d.ts.map +1 -1
- package/dist/components/button/Button.d.ts +1 -1
- package/dist/components/button/Button.d.ts.map +1 -1
- package/dist/components/button/Spinner.d.ts.map +1 -1
- package/dist/components/combobox/Combobox.d.ts +4 -0
- package/dist/components/combobox/Combobox.d.ts.map +1 -0
- package/dist/components/combobox/Combobox.test.d.ts +2 -0
- package/dist/components/combobox/Combobox.test.d.ts.map +1 -0
- package/dist/components/combobox/index.d.ts +3 -0
- package/dist/components/combobox/index.d.ts.map +1 -0
- package/dist/components/country-selector/CountrySelector.d.ts +7 -0
- package/dist/components/country-selector/CountrySelector.d.ts.map +1 -1
- package/dist/components/country-selector/index.d.ts +1 -0
- package/dist/components/country-selector/index.d.ts.map +1 -1
- package/dist/components/date-range-selector/DateRangeSelector.d.ts +2 -2
- package/dist/components/date-range-selector/DateRangeSelector.d.ts.map +1 -1
- package/dist/components/date-range-selector/index.d.ts +1 -1
- package/dist/components/date-range-selector/index.d.ts.map +1 -1
- package/dist/components/date-selector/DateSelector.d.ts.map +1 -1
- package/dist/components/dropdown/Dropdown.d.ts +1 -1
- package/dist/components/dropdown/Dropdown.d.ts.map +1 -1
- package/dist/components/export-button/ExportButton.d.ts +3 -0
- package/dist/components/export-button/ExportButton.d.ts.map +1 -0
- package/dist/components/export-button/ExportButton.test.d.ts +2 -0
- package/dist/components/export-button/ExportButton.test.d.ts.map +1 -0
- package/dist/components/export-button/index.d.ts +3 -0
- package/dist/components/export-button/index.d.ts.map +1 -0
- package/dist/components/launchpad/Launchpad.d.ts +4 -0
- package/dist/components/launchpad/Launchpad.d.ts.map +1 -0
- package/dist/components/launchpad/Launchpad.test.d.ts +2 -0
- package/dist/components/launchpad/Launchpad.test.d.ts.map +1 -0
- package/dist/components/launchpad/LaunchpadGridIcon.d.ts +2 -0
- package/dist/components/launchpad/LaunchpadGridIcon.d.ts.map +1 -0
- package/dist/components/launchpad/LaunchpadIconTile.d.ts +10 -0
- package/dist/components/launchpad/LaunchpadIconTile.d.ts.map +1 -0
- package/dist/components/launchpad/LaunchpadItem.d.ts +8 -0
- package/dist/components/launchpad/LaunchpadItem.d.ts.map +1 -0
- package/dist/components/launchpad/LaunchpadOverlays.d.ts +3 -0
- package/dist/components/launchpad/LaunchpadOverlays.d.ts.map +1 -0
- package/dist/components/launchpad/SystemLaunchpadIcon.d.ts +5 -0
- package/dist/components/launchpad/SystemLaunchpadIcon.d.ts.map +1 -0
- package/dist/components/launchpad/hooks/useLaunchpad.d.ts +3 -0
- package/dist/components/launchpad/hooks/useLaunchpad.d.ts.map +1 -0
- package/dist/components/launchpad/index.d.ts +10 -0
- package/dist/components/launchpad/index.d.ts.map +1 -0
- package/dist/components/metric-card/MetricCard.d.ts.map +1 -1
- package/dist/components/metric-card/index.d.ts +1 -1
- package/dist/components/metric-card/index.d.ts.map +1 -1
- package/dist/components/network-operator/NetworkOperator.d.ts +4 -0
- package/dist/components/network-operator/NetworkOperator.d.ts.map +1 -1
- package/dist/components/network-operator/index.d.ts +1 -0
- package/dist/components/network-operator/index.d.ts.map +1 -1
- package/dist/components/notice/Notice.d.ts +4 -0
- package/dist/components/notice/Notice.d.ts.map +1 -0
- package/dist/components/notice/Notice.test.d.ts +2 -0
- package/dist/components/notice/Notice.test.d.ts.map +1 -0
- package/dist/components/notice/index.d.ts +3 -0
- package/dist/components/notice/index.d.ts.map +1 -0
- package/dist/components/phone-number-input/PhoneNumberInput.d.ts.map +1 -1
- package/dist/components/popup/Popup.d.ts +15 -0
- package/dist/components/popup/Popup.d.ts.map +1 -0
- package/dist/components/popup/Popup.test.d.ts +2 -0
- package/dist/components/popup/Popup.test.d.ts.map +1 -0
- package/dist/components/popup/index.d.ts +3 -0
- package/dist/components/popup/index.d.ts.map +1 -0
- package/dist/components/profile-popover/ProfilePopover.d.ts +4 -0
- package/dist/components/profile-popover/ProfilePopover.d.ts.map +1 -0
- package/dist/components/profile-popover/ProfilePopover.test.d.ts +2 -0
- package/dist/components/profile-popover/ProfilePopover.test.d.ts.map +1 -0
- package/dist/components/profile-popover/index.d.ts +3 -0
- package/dist/components/profile-popover/index.d.ts.map +1 -0
- package/dist/components/role-select/RoleSelect.d.ts +4 -0
- package/dist/components/role-select/RoleSelect.d.ts.map +1 -0
- package/dist/components/role-select/RoleSelect.test.d.ts +2 -0
- package/dist/components/role-select/RoleSelect.test.d.ts.map +1 -0
- package/dist/components/role-select/index.d.ts +3 -0
- package/dist/components/role-select/index.d.ts.map +1 -0
- package/dist/components/section-header/SectionHeader.d.ts +7 -0
- package/dist/components/section-header/SectionHeader.d.ts.map +1 -0
- package/dist/components/section-header/SectionHeader.test.d.ts +2 -0
- package/dist/components/section-header/SectionHeader.test.d.ts.map +1 -0
- package/dist/components/section-header/index.d.ts +3 -0
- package/dist/components/section-header/index.d.ts.map +1 -0
- package/dist/components/sidebar/Sidebar.d.ts +3 -3
- package/dist/components/sidebar/Sidebar.d.ts.map +1 -1
- package/dist/components/sidebar/SidebarContext.d.ts +6 -0
- package/dist/components/sidebar/SidebarContext.d.ts.map +1 -1
- package/dist/components/sidebar/index.d.ts +1 -1
- package/dist/components/sidebar/index.d.ts.map +1 -1
- package/dist/components/stepper/Stepper.d.ts +12 -0
- package/dist/components/stepper/Stepper.d.ts.map +1 -0
- package/dist/components/stepper/Stepper.test.d.ts +2 -0
- package/dist/components/stepper/Stepper.test.d.ts.map +1 -0
- package/dist/components/stepper/StepperContext.d.ts +4 -0
- package/dist/components/stepper/StepperContext.d.ts.map +1 -0
- package/dist/components/stepper/index.d.ts +3 -0
- package/dist/components/stepper/index.d.ts.map +1 -0
- package/dist/components/switch/Switch.d.ts +4 -0
- package/dist/components/switch/Switch.d.ts.map +1 -0
- package/dist/components/switch/Switch.test.d.ts +2 -0
- package/dist/components/switch/Switch.test.d.ts.map +1 -0
- package/dist/components/switch/index.d.ts +3 -0
- package/dist/components/switch/index.d.ts.map +1 -0
- package/dist/components/table/Table.d.ts +3 -6
- package/dist/components/table/Table.d.ts.map +1 -1
- package/dist/components/table/TableHeader.d.ts +3 -10
- package/dist/components/table/TableHeader.d.ts.map +1 -1
- package/dist/components/table/TablePagination.d.ts.map +1 -1
- package/dist/components/table/index.d.ts +1 -1
- package/dist/components/table/index.d.ts.map +1 -1
- package/dist/components/tabs/Tabs.d.ts.map +1 -1
- package/dist/components/tabs/hooks/useTabsLineIndicator.d.ts.map +1 -1
- package/dist/components/theme/ThemeProvider.d.ts.map +1 -1
- package/dist/components/theme/cletTheme.d.ts +11 -0
- package/dist/components/theme/cletTheme.d.ts.map +1 -0
- package/dist/components/theme/cletTheme.test-d.d.ts +2 -0
- package/dist/components/theme/cletTheme.test-d.d.ts.map +1 -0
- package/dist/components/theme/cletTheme.test.d.ts +2 -0
- package/dist/components/theme/cletTheme.test.d.ts.map +1 -0
- package/dist/components/theme/index.d.ts +3 -1
- package/dist/components/theme/index.d.ts.map +1 -1
- package/dist/components/timeline/Timeline.d.ts +8 -0
- package/dist/components/timeline/Timeline.d.ts.map +1 -0
- package/dist/components/timeline/Timeline.test.d.ts +2 -0
- package/dist/components/timeline/Timeline.test.d.ts.map +1 -0
- package/dist/components/timeline/index.d.ts +3 -0
- package/dist/components/timeline/index.d.ts.map +1 -0
- package/dist/components/upload-field/UploadField.d.ts +5 -0
- package/dist/components/upload-field/UploadField.d.ts.map +1 -1
- package/dist/components/upload-field/index.d.ts +2 -2
- package/dist/components/upload-field/index.d.ts.map +1 -1
- package/dist/contexts/router-adapter-context.d.ts +27 -0
- package/dist/contexts/router-adapter-context.d.ts.map +1 -0
- package/dist/generated/components.theme.d.ts +313 -0
- package/dist/generated/components.theme.d.ts.map +1 -0
- package/dist/hooks/index.d.ts +1 -0
- package/dist/hooks/index.d.ts.map +1 -1
- package/dist/hooks/useHasMounted.d.ts +10 -0
- package/dist/hooks/useHasMounted.d.ts.map +1 -0
- package/dist/hooks/useTableFilter.d.ts.map +1 -1
- package/dist/hooks/useTablePagination.d.ts.map +1 -1
- package/dist/hooks/useTableState.d.ts +1 -1
- package/dist/hooks/useTableState.d.ts.map +1 -1
- package/dist/index.cjs +85 -55
- package/dist/index.css +1 -1
- package/dist/index.d.ts +15 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +19423 -31378
- package/dist/mcp/cli.js +75 -0
- package/dist/mcp/docs.js +122 -0
- package/dist/mcp/generated/components.json +3593 -0
- package/dist/mcp/generated/examples.json +1233 -0
- package/dist/mcp/generated/index.meta.json +252 -0
- package/dist/mcp/generated/rules.json +629 -0
- package/dist/mcp/generated/search.json +1618 -0
- package/dist/mcp/generated/tokens.json +1022 -0
- package/dist/mcp/index.js +337 -0
- package/dist/mcp/indexer.js +370 -0
- package/dist/mcp/installers/claude.js +37 -0
- package/dist/mcp/installers/codex.js +24 -0
- package/dist/mcp/installers/cursor.js +33 -0
- package/dist/mcp/installers/doctor.js +36 -0
- package/dist/mcp/installers/opencode.js +36 -0
- package/dist/mcp/installers/setup.js +34 -0
- package/dist/mcp/installers/util.js +41 -0
- package/dist/mcp/paths.js +63 -0
- package/dist/mcp/skill/SKILL.md +36 -0
- package/dist/mcp/skill/image-to-components.md +49 -0
- package/dist/next-index.d.ts +44 -0
- package/dist/next-index.d.ts.map +1 -0
- package/dist/next.cjs +282 -0
- package/dist/next.css +1 -0
- package/dist/next.d.ts +29 -0
- package/dist/next.js +37774 -0
- package/dist/types/app-header.d.ts +70 -10
- package/dist/types/app-header.d.ts.map +1 -1
- package/dist/types/app-switcher.d.ts +10 -1
- package/dist/types/app-switcher.d.ts.map +1 -1
- package/dist/types/avatar.d.ts +9 -0
- package/dist/types/avatar.d.ts.map +1 -1
- package/dist/types/combobox.d.ts +43 -0
- package/dist/types/combobox.d.ts.map +1 -0
- package/dist/types/country-selector.d.ts +4 -0
- package/dist/types/country-selector.d.ts.map +1 -1
- package/dist/types/date-range-selector.d.ts +11 -0
- package/dist/types/date-range-selector.d.ts.map +1 -1
- package/dist/types/dropdown.d.ts +8 -0
- package/dist/types/dropdown.d.ts.map +1 -1
- package/dist/types/export-button.d.ts +24 -0
- package/dist/types/export-button.d.ts.map +1 -0
- package/dist/types/launchpad.d.ts +79 -0
- package/dist/types/launchpad.d.ts.map +1 -0
- package/dist/types/metric-card.d.ts +7 -0
- package/dist/types/metric-card.d.ts.map +1 -1
- package/dist/types/network-operator.d.ts +8 -0
- package/dist/types/network-operator.d.ts.map +1 -1
- package/dist/types/notice.d.ts +24 -0
- package/dist/types/notice.d.ts.map +1 -0
- package/dist/types/popup.d.ts +43 -0
- package/dist/types/popup.d.ts.map +1 -0
- package/dist/types/profile-popover.d.ts +97 -0
- package/dist/types/profile-popover.d.ts.map +1 -0
- package/dist/types/role-select.d.ts +28 -0
- package/dist/types/role-select.d.ts.map +1 -0
- package/dist/types/router-adapter.d.ts +46 -0
- package/dist/types/router-adapter.d.ts.map +1 -0
- package/dist/types/section-header.d.ts +26 -0
- package/dist/types/section-header.d.ts.map +1 -0
- package/dist/types/sidebar.d.ts +16 -0
- package/dist/types/sidebar.d.ts.map +1 -1
- package/dist/types/stepper.d.ts +45 -0
- package/dist/types/stepper.d.ts.map +1 -0
- package/dist/types/switch.d.ts +24 -0
- package/dist/types/switch.d.ts.map +1 -0
- package/dist/types/table.d.ts +90 -1
- package/dist/types/table.d.ts.map +1 -1
- package/dist/types/tabs.d.ts +1 -1
- package/dist/types/tabs.d.ts.map +1 -1
- package/dist/types/theme.d.ts +28 -8
- package/dist/types/theme.d.ts.map +1 -1
- package/dist/types/timeline.d.ts +52 -0
- package/dist/types/timeline.d.ts.map +1 -0
- package/dist/types/upload-field.d.ts +23 -0
- package/dist/types/upload-field.d.ts.map +1 -1
- package/dist/utils/export.d.ts +15 -0
- package/dist/utils/export.d.ts.map +1 -0
- package/dist/utils/stringToColor.d.ts +25 -0
- package/dist/utils/stringToColor.d.ts.map +1 -1
- package/package.json +43 -7
- package/scripts/postinstall.mjs +40 -0
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import path from "node:path";
|
|
2
|
+
import { existsSync } from "node:fs";
|
|
3
|
+
import { fileURLToPath } from "node:url";
|
|
4
|
+
const thisFileUrl = import.meta.url;
|
|
5
|
+
const __dirname = path.dirname(fileURLToPath(thisFileUrl));
|
|
6
|
+
// Running via `tsx src/*.ts` keeps the .ts extension in the module URL; a
|
|
7
|
+
// compiled build (dist/*.js, whether tested locally or installed from npm)
|
|
8
|
+
// does not. This tells us which layer we're running from without relying on
|
|
9
|
+
// directory naming.
|
|
10
|
+
const isDevSource = thisFileUrl.endsWith(".ts");
|
|
11
|
+
// mcp/src/paths.ts (dev) and mcp/dist/paths.js (build output, local or
|
|
12
|
+
// published) both sit exactly one level inside the `mcp/` package dir, which
|
|
13
|
+
// in a repo checkout sits at the repo root alongside `demo/` and `src/`. When
|
|
14
|
+
// installed from npm, this resolves into node_modules and none of those
|
|
15
|
+
// sibling dirs exist — that absence is how we detect "published" mode.
|
|
16
|
+
const REPO_ROOT = path.resolve(__dirname, "..", "..");
|
|
17
|
+
export const SOURCE = {
|
|
18
|
+
pages: path.join(REPO_ROOT, "demo/docs/pages"),
|
|
19
|
+
examples: path.join(REPO_ROOT, "demo/docs/previews/examples"),
|
|
20
|
+
types: path.join(REPO_ROOT, "src/types"),
|
|
21
|
+
rules: path.join(REPO_ROOT, "demo/docs/rules"),
|
|
22
|
+
themeDir: path.join(REPO_ROOT, "src/styles/theme"),
|
|
23
|
+
componentsDir: path.join(REPO_ROOT, "src/components"),
|
|
24
|
+
// The generated, authoritative registry of every --clet-* token cletTheme()
|
|
25
|
+
// actually accepts (global + per-component) — see
|
|
26
|
+
// scripts/generate-theme-tokens.mjs. Parsed for token IDENTITY/grouping;
|
|
27
|
+
// actual values still come from the theme CSS files (global) and each
|
|
28
|
+
// component's own styles/*.css (component-scoped).
|
|
29
|
+
generatedTheme: path.join(REPO_ROOT, "src/generated/components.theme.ts"),
|
|
30
|
+
};
|
|
31
|
+
/**
|
|
32
|
+
* True only when this package is running from inside the gsl-components repo
|
|
33
|
+
* checkout (dev, or a local `npm run build` test) — i.e. there is live source
|
|
34
|
+
* to index. False when installed as a dependency (published, no sibling
|
|
35
|
+
* demo/src dirs), in which case we must never attempt to rebuild and only
|
|
36
|
+
* ever read the generated snapshot bundled at publish time.
|
|
37
|
+
*/
|
|
38
|
+
export const hasRepoSource = existsSync(SOURCE.pages) && existsSync(SOURCE.types);
|
|
39
|
+
/**
|
|
40
|
+
* Where the generated JSON knowledge base lives.
|
|
41
|
+
* - Dev (tsx from src): mcp/generated — gitignored, rebuilt from live source.
|
|
42
|
+
* - Local dist / published dist: <dist>/generated — bundled at publish time
|
|
43
|
+
* via `files: ["dist"]`, since the source it was built from won't travel.
|
|
44
|
+
*/
|
|
45
|
+
export const GENERATED_DIR = isDevSource
|
|
46
|
+
? path.join(__dirname, "..", "generated")
|
|
47
|
+
: path.join(__dirname, "generated");
|
|
48
|
+
/**
|
|
49
|
+
* The hand-authored skill doc. Same dev/dist split as GENERATED_DIR: in dev
|
|
50
|
+
* it's read straight from mcp/skill/ (committed source); in a build/publish
|
|
51
|
+
* it's read from the copy bundled next to the compiled JS.
|
|
52
|
+
*/
|
|
53
|
+
export const SKILL_SOURCE_PATH = isDevSource
|
|
54
|
+
? path.join(__dirname, "..", "skill", "SKILL.md")
|
|
55
|
+
: path.join(__dirname, "skill", "SKILL.md");
|
|
56
|
+
/**
|
|
57
|
+
* The hand-authored image/text-to-components skill doc. Same dev/dist split
|
|
58
|
+
* as SKILL_SOURCE_PATH; `prepare-dist.mjs` copies the whole `skill/` dir so
|
|
59
|
+
* this travels to the published tarball automatically.
|
|
60
|
+
*/
|
|
61
|
+
export const SKILL_IMAGE_SOURCE_PATH = isDevSource
|
|
62
|
+
? path.join(__dirname, "..", "skill", "image-to-components.md")
|
|
63
|
+
: path.join(__dirname, "skill", "image-to-components.md");
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: rfdtech-ui
|
|
3
|
+
description: Use before building or modifying UI with @rfdtech/components — search the component index, pull authoritative types and examples, and follow design rules instead of inventing APIs or styles.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
Before generating or editing UI code that uses `@rfdtech/components`:
|
|
7
|
+
|
|
8
|
+
1. **Search first.** Call `search_components` (or `search_docs`) with the feature you're building
|
|
9
|
+
("date range filter", "confirmation dialog", "wizard") before writing any markup — a component
|
|
10
|
+
for it may already exist.
|
|
11
|
+
2. **Never invent props or types.** Call `get_component_types` (or `get_component`) and use the
|
|
12
|
+
real prop names, variants, and types straight from `src/types/<slug>.ts` — do not guess from
|
|
13
|
+
memory or from a component's visual appearance. MDX prop tables are prose and can go stale;
|
|
14
|
+
the type source is authoritative.
|
|
15
|
+
3. **Read real examples.** Call `get_component_examples` before composing a non-trivial usage
|
|
16
|
+
(tables, forms in modals, async flows) — every known example is included, not just the ones
|
|
17
|
+
the doc page happens to show inline.
|
|
18
|
+
4. **Follow the rules.** Call `get_rules` (whole corpus, a category like `forms`/`theming`, or a
|
|
19
|
+
component slug) and follow its do/don't guidance — these are real conventions pulled from a
|
|
20
|
+
production consumer of this library, not generic advice.
|
|
21
|
+
5. **Prefer composition over new components.** If an existing component covers most of the need,
|
|
22
|
+
compose or extend it (`classNames`, slots, wrapping) rather than hand-rolling a replacement.
|
|
23
|
+
6. **Building a new page, screen, dashboard, or layout shell?** Call `get_rules("page-composition")`
|
|
24
|
+
first — it's a required, non-negotiable pattern set (not a style suggestion): the
|
|
25
|
+
`AppLayout`/`AppHeader`/`Sidebar` variant trio, required `SidebarFooter` + `ProfilePopover`,
|
|
26
|
+
`RoleSelect` wired into all three locations when the system has multiple roles, `Launchpad` over
|
|
27
|
+
the deprecated `AppSwitcher`, the `Table`/`MetricCard`/`Tabs` variant set, and more. Also see
|
|
28
|
+
`get_component("migration-v2")` for the full migration/adoption checklist.
|
|
29
|
+
7. **Migrating a project that already overrides tokens?** Never decide silently. Find every
|
|
30
|
+
existing override of a *known* token — `gslTheme()` calls, or CSS setting a real `--clet-*` or
|
|
31
|
+
legacy `--gsl-*` color token (not custom/arbitrary variables) — list them, and ask the user
|
|
32
|
+
about each one individually: keep it, or drop it for the new approved default. Every color
|
|
33
|
+
token has both a `--clet-*` name (preferred — use this for any *new* override you write) and a
|
|
34
|
+
`--gsl-*` alias (legacy, still functional — only relevant when reading/preserving existing
|
|
35
|
+
consumer code, never write new overrides with it). Non-color tokens (radius/shadow/font/
|
|
36
|
+
spacing/z-index) only have a `--gsl-*` name. See `get_rules("theming")`.
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: image-to-components
|
|
3
|
+
description: Use when the user hands over a screenshot, image, mockup, or textual description of a screen/interface to build — decompose it into existing `@rfdtech/components` components and variants via the MCP before writing any markup, instead of hand-rolling custom UI.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
Whenever the user gives you a screenshot, image, mockup, or a written description of a
|
|
7
|
+
screen, page, or dashboard they want built, treat it as a **translation** job: turn the
|
|
8
|
+
image/text into a page composed of `@rfdtech/components` that already exist — not a spec
|
|
9
|
+
for custom-built UI.
|
|
10
|
+
|
|
11
|
+
1. **Decompose the design first.** Before writing any code, break the screen into its
|
|
12
|
+
regions and elements: layout shell, header/nav, sidebar, tables, forms and their fields,
|
|
13
|
+
cards/metrics, tabs, modals, buttons, badges, empty/loading states, etc. Do this for
|
|
14
|
+
every distinct element visible in the image or described in the text — don't skip
|
|
15
|
+
anything because it looks "simple enough to just write."
|
|
16
|
+
|
|
17
|
+
2. **Map every element to an existing component via the MCP.** For each element:
|
|
18
|
+
- Call `search_components` (or `search_docs`) with what the element does or looks like
|
|
19
|
+
to find candidate matches.
|
|
20
|
+
- Call `get_component_types` / `get_component` to confirm the real prop names and
|
|
21
|
+
variants — never guess an API from how something looks in the image.
|
|
22
|
+
- Call `get_component_examples` for non-trivial compositions (a table inside a modal, a
|
|
23
|
+
multi-step form, etc.).
|
|
24
|
+
- Call `get_rules` for the component (and its category) to follow real do/don't
|
|
25
|
+
conventions.
|
|
26
|
+
- **Building a layout shell, full page, or dashboard?** Call
|
|
27
|
+
`get_rules("page-composition")` first — it's a required pattern set (the
|
|
28
|
+
`AppLayout`/`AppHeader`/`Sidebar` trio, `SidebarFooter` + `ProfilePopover`, `RoleSelect`
|
|
29
|
+
wiring, `Launchpad` over `AppSwitcher`, the `Table`/`MetricCard`/`Tabs` variant set),
|
|
30
|
+
not a style suggestion.
|
|
31
|
+
- Pick the variant that best aligns with what's in the image, not just the first result.
|
|
32
|
+
|
|
33
|
+
3. **Compose only from matched rfd components.** Build the page exclusively out of
|
|
34
|
+
`@rfdtech/components` you've confirmed via step 2. Prefer image → page and text → page
|
|
35
|
+
translation grounded in the component set that already exists — do not introduce new
|
|
36
|
+
one-off components or raw markup/CSS to reproduce something a real component already
|
|
37
|
+
covers.
|
|
38
|
+
|
|
39
|
+
4. **No match found? Stop and ask — never build custom silently.** If an element in the
|
|
40
|
+
image/description has no reasonable match in the component library, do not hand-roll
|
|
41
|
+
custom UI for it. Stop and ask the user exactly what they want for that specific
|
|
42
|
+
element. Only build custom UI when the user has explicitly said to build custom; if they
|
|
43
|
+
say "build custom" without specifics, ask exactly what they want (markup, behavior,
|
|
44
|
+
styling) before writing it. Never default to custom UI just because a match wasn't
|
|
45
|
+
obvious on the first search — exhaust `search_components`/`search_docs` first.
|
|
46
|
+
|
|
47
|
+
5. **Everything else about writing the code follows `rfdtech-ui`** — authoritative types
|
|
48
|
+
over guessed props, real examples over invented ones, and the do/don't rules — see that
|
|
49
|
+
skill for the full discipline once components are identified.
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import "./styles/theme.css";
|
|
2
|
+
export * from "./components/theme";
|
|
3
|
+
export * from "./components/app-switcher";
|
|
4
|
+
export * from "./components/app-header";
|
|
5
|
+
export * from "./components/app-layout";
|
|
6
|
+
export * from "./components/avatar";
|
|
7
|
+
export * from "./components/badge";
|
|
8
|
+
export * from "./components/breadcrumb";
|
|
9
|
+
export * from "./components/bulk-import-modal";
|
|
10
|
+
export * from "./components/button";
|
|
11
|
+
export * from "./components/card";
|
|
12
|
+
export * from "./components/checkbox";
|
|
13
|
+
export * from "./components/command";
|
|
14
|
+
export * from "./components/country-selector";
|
|
15
|
+
export * from "./components/date-selector";
|
|
16
|
+
export * from "./components/table";
|
|
17
|
+
export * from "./components/field";
|
|
18
|
+
export * from "./components/form";
|
|
19
|
+
export * from "./components/input";
|
|
20
|
+
export * from "./components/otp-input";
|
|
21
|
+
export * from "./components/phone-number-input";
|
|
22
|
+
export * from "./components/date-range-selector";
|
|
23
|
+
export * from "./components/dialog";
|
|
24
|
+
export * from "./components/draggable";
|
|
25
|
+
export * from "./components/dropdown";
|
|
26
|
+
export * from "./components/metric-card";
|
|
27
|
+
export * from "./components/modal";
|
|
28
|
+
export * from "./components/network-operator";
|
|
29
|
+
export * from "./components/popover";
|
|
30
|
+
export * from "./components/progress-bar";
|
|
31
|
+
export * from "./components/radio-group";
|
|
32
|
+
export * from "./components/sheet";
|
|
33
|
+
export * from "./components/sidebar";
|
|
34
|
+
export * from "./components/sortable";
|
|
35
|
+
export * from "./components/tabs";
|
|
36
|
+
export * from "./components/textarea";
|
|
37
|
+
export * from "./components/toast";
|
|
38
|
+
export * from "./components/tooltip";
|
|
39
|
+
export * from "./components/upload-field";
|
|
40
|
+
export * from "./hooks";
|
|
41
|
+
export { stringToHue, gradientFromString } from "./utils/stringToColor";
|
|
42
|
+
export { RouterAdapterProvider } from "./contexts/router-adapter-context";
|
|
43
|
+
export { useNextRouterAdapter } from "./adapters/next-adapter";
|
|
44
|
+
//# sourceMappingURL=next-index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"next-index.d.ts","sourceRoot":"","sources":["../src/next-index.ts"],"names":[],"mappings":"AAAA,OAAO,oBAAoB,CAAC;AAQ5B,cAAc,oBAAoB,CAAC;AACnC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,yBAAyB,CAAC;AACxC,cAAc,yBAAyB,CAAC;AACxC,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,yBAAyB,CAAC;AACxC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,uBAAuB,CAAC;AACtC,cAAc,sBAAsB,CAAC;AACrC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,wBAAwB,CAAC;AACvC,cAAc,iCAAiC,CAAC;AAChD,cAAc,kCAAkC,CAAC;AACjD,cAAc,qBAAqB,CAAC;AACpC,cAAc,wBAAwB,CAAC;AACvC,cAAc,uBAAuB,CAAC;AACtC,cAAc,0BAA0B,CAAC;AACzC,cAAc,oBAAoB,CAAC;AACnC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,sBAAsB,CAAC;AACrC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,0BAA0B,CAAC;AACzC,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,mBAAmB,CAAC;AAClC,cAAc,uBAAuB,CAAC;AACtC,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,SAAS,CAAC;AACxB,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAGxE,OAAO,EAAE,qBAAqB,EAAE,MAAM,mCAAmC,CAAC;AAG1E,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC"}
|