@utopia-studio-design/design-system-cli 0.8.0 → 0.8.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/bin/utopia-ds-mcp.mjs +5 -15
- package/bin/utopia-ds.mjs +3 -16
- package/data/docs/create-a-brandbook.md +11 -1
- package/data/manifests/blocks.json +21 -230
- package/data/manifests/patterns.json +0 -330
- package/lib/api.mjs +6 -193
- package/lib/brandbook-validation.mjs +112 -0
- package/package.json +2 -2
- package/data/blocks/semantic-pattern-parts/AuthParts.tsx +0 -48
- package/data/blocks/semantic-pattern-parts/ChoiceCards.tsx +0 -7
- package/data/blocks/semantic-pattern-parts/ListFilters.tsx +0 -9
- package/data/blocks/semantic-pattern-parts/OutcomeNotice.tsx +0 -7
- package/data/blocks/semantic-pattern-parts/PatternParts.tsx +0 -7
- package/data/blocks/semantic-pattern-parts/ProductParts.tsx +0 -38
- package/data/blocks/semantic-pattern-parts/ProgressSteps.tsx +0 -6
- package/data/blocks/semantic-pattern-parts/ReviewList.tsx +0 -7
- package/data/blocks/semantic-pattern-parts/ValidatedField.tsx +0 -8
- package/data/blocks/semantic-pattern-parts/WorkflowParts.tsx +0 -339
- package/data/blocks/semantic-pattern-parts/auth-parts.css +0 -27
- package/data/blocks/semantic-pattern-parts/pattern-parts.css +0 -25
- package/data/blocks/semantic-pattern-parts/product-parts.css +0 -25
- package/data/blocks/semantic-pattern-parts/types.ts +0 -3
- package/data/blocks/semantic-pattern-parts/workflow-parts.css +0 -118
- package/data/blocks/ux-pattern-examples/AccessExamples.tsx +0 -46
- package/data/blocks/ux-pattern-examples/AccountExamples.tsx +0 -133
- package/data/blocks/ux-pattern-examples/OnboardingExample.tsx +0 -15
- package/data/blocks/ux-pattern-examples/ProductExamples.tsx +0 -79
- package/data/blocks/ux-pattern-examples/ReviewExample.tsx +0 -14
- package/data/blocks/ux-pattern-examples/SignupExample.tsx +0 -22
- package/data/blocks/ux-pattern-examples/WorkflowExample.tsx +0 -1761
- package/data/blocks/ux-pattern-examples/WorkflowExamples.tsx +0 -190
- package/data/blocks/ux-pattern-examples/copy.ts +0 -6
- package/data/blocks/ux-pattern-examples/ux-examples.css +0 -18
- package/data/blocks/ux-pattern-examples/workflow-copy.ts +0 -76
- package/data/blocks/ux-pattern-examples/workflow-definitions.ts +0 -1291
- package/data/docs/ui-parts-qa.md +0 -172
- package/data/docs/ui-parts.md +0 -105
- package/data/docs/ux-pattern-adaptation-qa.md +0 -38
- package/data/docs/ux-pattern-adaptation.md +0 -41
- package/data/docs/ux-pattern-migration.md +0 -111
- package/data/docs/ux-pattern-release-2026-09-13.md +0 -26
- package/data/docs/ux-source-evidence/account-auth.json +0 -41
- package/data/docs/ux-source-evidence/account-forgot-password.json +0 -36
- package/data/docs/ux-source-evidence/account-invite.json +0 -63
- package/data/docs/ux-source-evidence/account-locked.json +0 -63
- package/data/docs/ux-source-evidence/account-login.json +0 -28
- package/data/docs/ux-source-evidence/account-mfa.json +0 -62
- package/data/docs/ux-source-evidence/account-onboarding-credentials.json +0 -52
- package/data/docs/ux-source-evidence/account-onboarding-legal.json +0 -56
- package/data/docs/ux-source-evidence/account-onboarding-orientation.json +0 -66
- package/data/docs/ux-source-evidence/account-onboarding-profile.json +0 -50
- package/data/docs/ux-source-evidence/account-onboarding.json +0 -69
- package/data/docs/ux-source-evidence/account-reset-password.json +0 -27
- package/data/docs/ux-source-evidence/account-session-expired.json +0 -62
- package/data/docs/ux-source-evidence/account-signup.json +0 -33
- package/data/docs/ux-source-evidence/account-verify-email.json +0 -34
- package/data/docs/ux-source-evidence/account-welcome.json +0 -41
- package/data/docs/ux-source-evidence/admin-analytics.json +0 -54
- package/data/docs/ux-source-evidence/admin-audit.json +0 -31
- package/data/docs/ux-source-evidence/admin-broadcasts-new.json +0 -36
- package/data/docs/ux-source-evidence/admin-broadcasts.json +0 -41
- package/data/docs/ux-source-evidence/admin-closures.json +0 -52
- package/data/docs/ux-source-evidence/admin-devices.json +0 -51
- package/data/docs/ux-source-evidence/admin-escalations.json +0 -35
- package/data/docs/ux-source-evidence/admin-incidents.json +0 -54
- package/data/docs/ux-source-evidence/admin-loading.json +0 -17
- package/data/docs/ux-source-evidence/admin-onboarding-detail.json +0 -80
- package/data/docs/ux-source-evidence/admin-onboarding.json +0 -62
- package/data/docs/ux-source-evidence/admin-payments.json +0 -45
- package/data/docs/ux-source-evidence/admin-providers.json +0 -38
- package/data/docs/ux-source-evidence/admin-settings.json +0 -18
- package/data/docs/ux-source-evidence/admin-subscriptions-detail-allocate.json +0 -42
- package/data/docs/ux-source-evidence/admin-subscriptions-detail.json +0 -48
- package/data/docs/ux-source-evidence/admin-subscriptions-new.json +0 -43
- package/data/docs/ux-source-evidence/admin-subscriptions.json +0 -41
- package/data/docs/ux-source-evidence/admin-transactions.json +0 -41
- package/data/docs/ux-source-evidence/error.json +0 -30
- package/data/docs/ux-source-evidence/loading.json +0 -19
- package/data/docs/ux-source-evidence/marketing-blog.json +0 -48
- package/data/docs/ux-source-evidence/marketing-contact.json +0 -36
- package/data/docs/ux-source-evidence/marketing.json +0 -64
- package/data/docs/ux-source-evidence/not-found.json +0 -28
- package/data/docs/ux-source-evidence/portal-loading.json +0 -17
- package/data/docs/ux-source-evidence/portal-mentor-messages.json +0 -31
- package/data/docs/ux-source-evidence/portal-mentor-profile.json +0 -23
- package/data/docs/ux-source-evidence/portal-mentor-requests-detail.json +0 -54
- package/data/docs/ux-source-evidence/portal-mentor-sessions-detail-assess.json +0 -42
- package/data/docs/ux-source-evidence/portal-mentor-settings.json +0 -18
- package/data/docs/ux-source-evidence/portal-mentor.json +0 -38
- package/data/docs/ux-source-evidence/portal-sessions-detail-live.json +0 -48
- package/data/docs/ux-source-evidence/portal-sponsor-billing.json +0 -28
- package/data/docs/ux-source-evidence/portal-sponsor-profile.json +0 -22
- package/data/docs/ux-source-evidence/portal-sponsor-sessions.json +0 -28
- package/data/docs/ux-source-evidence/portal-sponsor-settings.json +0 -18
- package/data/docs/ux-source-evidence/portal-sponsor-trainees.json +0 -36
- package/data/docs/ux-source-evidence/portal-sponsor.json +0 -52
- package/data/docs/ux-source-evidence/portal-trainee-competency.json +0 -42
- package/data/docs/ux-source-evidence/portal-trainee-credits.json +0 -40
- package/data/docs/ux-source-evidence/portal-trainee-mentors.json +0 -48
- package/data/docs/ux-source-evidence/portal-trainee-messages.json +0 -32
- package/data/docs/ux-source-evidence/portal-trainee-notifications.json +0 -35
- package/data/docs/ux-source-evidence/portal-trainee-profile.json +0 -26
- package/data/docs/ux-source-evidence/portal-trainee-request.json +0 -54
- package/data/docs/ux-source-evidence/portal-trainee-sessions-detail-feedback.json +0 -36
- package/data/docs/ux-source-evidence/portal-trainee-sessions-detail-precheck.json +0 -42
- package/data/docs/ux-source-evidence/portal-trainee-sessions-detail.json +0 -55
- package/data/docs/ux-source-evidence/portal-trainee-sessions.json +0 -36
- package/data/docs/ux-source-evidence/portal-trainee-settings-notifications.json +0 -38
- package/data/docs/ux-source-evidence/portal-trainee-settings.json +0 -18
- package/data/docs/ux-source-evidence/portal-trainee.json +0 -44
- package/data/docs/ux-source-evidence/portal-tv-detail.json +0 -39
- package/data/docs/ux-source-evidence/portal-tv.json +0 -44
- package/data/docs/ux-source-evidence/shared-admin-admin-shell.json +0 -35
- package/data/docs/ux-source-evidence/shared-auth-auth-primitives.json +0 -105
- package/data/docs/ux-source-evidence/shared-auth-auth-shell.json +0 -25
- package/data/docs/ux-source-evidence/shared-auth-onboarding-primitives.json +0 -52
- package/data/docs/ux-source-evidence/shared-auth-onboarding-shell.json +0 -28
- package/data/docs/ux-source-evidence/shared-auth-status-indicator.json +0 -41
- package/data/docs/ux-source-evidence/shared-portal-empty-state.json +0 -24
- package/data/docs/ux-source-evidence/shared-portal-loading-skeleton.json +0 -27
- package/data/docs/ux-source-evidence/shared-portal-notifications-dropdown.json +0 -39
- package/data/docs/ux-source-evidence/shared-portal-portal-shell.json +0 -36
- package/data/docs/ux-source-evidence/shared-portal-profile-form.json +0 -32
- package/data/docs/ux-source-evidence/shared-portal-settings-view.json +0 -81
- package/data/docs/ux-source-evidence/shared-portal-usage-sparkline.json +0 -18
- package/data/docs/ux-source-evidence/shared-portal-user-menu.json +0 -34
- package/data/manifests/ui-patterns.json +0 -1029
- package/data/manifests/ux-examples.json +0 -2177
- package/data/manifests/ux-patterns.json +0 -1135
- package/data/manifests/ux-source-inventory.json +0 -4669
- package/data/ui-parts/blocks/analytics-dashboard/AnalyticsMetricBlocks.tsx +0 -87
- package/data/ui-parts/blocks/analytics-dashboard/analytics-dashboard.css +0 -92
- package/data/ui-parts/blocks/semantic-pattern-parts/AuthParts.tsx +0 -48
- package/data/ui-parts/blocks/semantic-pattern-parts/ChoiceCards.tsx +0 -7
- package/data/ui-parts/blocks/semantic-pattern-parts/ListFilters.tsx +0 -9
- package/data/ui-parts/blocks/semantic-pattern-parts/OutcomeNotice.tsx +0 -7
- package/data/ui-parts/blocks/semantic-pattern-parts/ProductParts.tsx +0 -38
- package/data/ui-parts/blocks/semantic-pattern-parts/ProgressSteps.tsx +0 -6
- package/data/ui-parts/blocks/semantic-pattern-parts/ReviewList.tsx +0 -7
- package/data/ui-parts/blocks/semantic-pattern-parts/ValidatedField.tsx +0 -8
- package/data/ui-parts/blocks/semantic-pattern-parts/WorkflowParts.tsx +0 -339
- package/data/ui-parts/blocks/semantic-pattern-parts/auth-parts.css +0 -27
- package/data/ui-parts/blocks/semantic-pattern-parts/pattern-parts.css +0 -25
- package/data/ui-parts/blocks/semantic-pattern-parts/product-parts.css +0 -25
- package/data/ui-parts/blocks/semantic-pattern-parts/types.ts +0 -3
- package/data/ui-parts/blocks/semantic-pattern-parts/workflow-parts.css +0 -118
- package/data/ui-parts/blocks/ux-pattern-examples/AccessExamples.tsx +0 -46
- package/data/ui-parts/blocks/ux-pattern-examples/AccountExamples.tsx +0 -133
- package/data/ui-parts/blocks/ux-pattern-examples/ProductExamples.tsx +0 -79
- package/data/ui-parts/blocks/ux-pattern-examples/WorkflowExample.tsx +0 -1761
- package/data/ui-parts/blocks/ux-pattern-examples/WorkflowExamples.tsx +0 -190
- package/data/ui-parts/blocks/ux-pattern-examples/copy.ts +0 -6
- package/data/ui-parts/blocks/ux-pattern-examples/ux-examples.css +0 -18
- package/data/ui-parts/blocks/ux-pattern-examples/workflow-copy.ts +0 -76
- package/data/ui-parts/blocks/ux-pattern-examples/workflow-definitions.ts +0 -1291
- package/data/ux-source-evidence/account-auth.json +0 -41
- package/data/ux-source-evidence/account-forgot-password.json +0 -36
- package/data/ux-source-evidence/account-invite.json +0 -63
- package/data/ux-source-evidence/account-locked.json +0 -63
- package/data/ux-source-evidence/account-login.json +0 -28
- package/data/ux-source-evidence/account-mfa.json +0 -62
- package/data/ux-source-evidence/account-onboarding-credentials.json +0 -52
- package/data/ux-source-evidence/account-onboarding-legal.json +0 -56
- package/data/ux-source-evidence/account-onboarding-orientation.json +0 -66
- package/data/ux-source-evidence/account-onboarding-profile.json +0 -50
- package/data/ux-source-evidence/account-onboarding.json +0 -69
- package/data/ux-source-evidence/account-reset-password.json +0 -27
- package/data/ux-source-evidence/account-session-expired.json +0 -62
- package/data/ux-source-evidence/account-signup.json +0 -33
- package/data/ux-source-evidence/account-verify-email.json +0 -34
- package/data/ux-source-evidence/account-welcome.json +0 -41
- package/data/ux-source-evidence/admin-analytics.json +0 -54
- package/data/ux-source-evidence/admin-audit.json +0 -31
- package/data/ux-source-evidence/admin-broadcasts-new.json +0 -36
- package/data/ux-source-evidence/admin-broadcasts.json +0 -41
- package/data/ux-source-evidence/admin-closures.json +0 -52
- package/data/ux-source-evidence/admin-devices.json +0 -51
- package/data/ux-source-evidence/admin-escalations.json +0 -35
- package/data/ux-source-evidence/admin-incidents.json +0 -54
- package/data/ux-source-evidence/admin-loading.json +0 -17
- package/data/ux-source-evidence/admin-onboarding-detail.json +0 -80
- package/data/ux-source-evidence/admin-onboarding.json +0 -62
- package/data/ux-source-evidence/admin-payments.json +0 -45
- package/data/ux-source-evidence/admin-providers.json +0 -38
- package/data/ux-source-evidence/admin-settings.json +0 -18
- package/data/ux-source-evidence/admin-subscriptions-detail-allocate.json +0 -42
- package/data/ux-source-evidence/admin-subscriptions-detail.json +0 -48
- package/data/ux-source-evidence/admin-subscriptions-new.json +0 -43
- package/data/ux-source-evidence/admin-subscriptions.json +0 -41
- package/data/ux-source-evidence/admin-transactions.json +0 -41
- package/data/ux-source-evidence/error.json +0 -30
- package/data/ux-source-evidence/loading.json +0 -19
- package/data/ux-source-evidence/marketing-blog.json +0 -48
- package/data/ux-source-evidence/marketing-contact.json +0 -36
- package/data/ux-source-evidence/marketing.json +0 -64
- package/data/ux-source-evidence/not-found.json +0 -28
- package/data/ux-source-evidence/portal-loading.json +0 -17
- package/data/ux-source-evidence/portal-mentor-messages.json +0 -31
- package/data/ux-source-evidence/portal-mentor-profile.json +0 -23
- package/data/ux-source-evidence/portal-mentor-requests-detail.json +0 -54
- package/data/ux-source-evidence/portal-mentor-sessions-detail-assess.json +0 -42
- package/data/ux-source-evidence/portal-mentor-settings.json +0 -18
- package/data/ux-source-evidence/portal-mentor.json +0 -38
- package/data/ux-source-evidence/portal-sessions-detail-live.json +0 -48
- package/data/ux-source-evidence/portal-sponsor-billing.json +0 -28
- package/data/ux-source-evidence/portal-sponsor-profile.json +0 -22
- package/data/ux-source-evidence/portal-sponsor-sessions.json +0 -28
- package/data/ux-source-evidence/portal-sponsor-settings.json +0 -18
- package/data/ux-source-evidence/portal-sponsor-trainees.json +0 -36
- package/data/ux-source-evidence/portal-sponsor.json +0 -52
- package/data/ux-source-evidence/portal-trainee-competency.json +0 -42
- package/data/ux-source-evidence/portal-trainee-credits.json +0 -40
- package/data/ux-source-evidence/portal-trainee-mentors.json +0 -48
- package/data/ux-source-evidence/portal-trainee-messages.json +0 -32
- package/data/ux-source-evidence/portal-trainee-notifications.json +0 -35
- package/data/ux-source-evidence/portal-trainee-profile.json +0 -26
- package/data/ux-source-evidence/portal-trainee-request.json +0 -54
- package/data/ux-source-evidence/portal-trainee-sessions-detail-feedback.json +0 -36
- package/data/ux-source-evidence/portal-trainee-sessions-detail-precheck.json +0 -42
- package/data/ux-source-evidence/portal-trainee-sessions-detail.json +0 -55
- package/data/ux-source-evidence/portal-trainee-sessions.json +0 -36
- package/data/ux-source-evidence/portal-trainee-settings-notifications.json +0 -38
- package/data/ux-source-evidence/portal-trainee-settings.json +0 -18
- package/data/ux-source-evidence/portal-trainee.json +0 -44
- package/data/ux-source-evidence/portal-tv-detail.json +0 -39
- package/data/ux-source-evidence/portal-tv.json +0 -44
- package/data/ux-source-evidence/shared-admin-admin-shell.json +0 -35
- package/data/ux-source-evidence/shared-auth-auth-primitives.json +0 -105
- package/data/ux-source-evidence/shared-auth-auth-shell.json +0 -25
- package/data/ux-source-evidence/shared-auth-onboarding-primitives.json +0 -52
- package/data/ux-source-evidence/shared-auth-onboarding-shell.json +0 -28
- package/data/ux-source-evidence/shared-auth-status-indicator.json +0 -41
- package/data/ux-source-evidence/shared-portal-empty-state.json +0 -24
- package/data/ux-source-evidence/shared-portal-loading-skeleton.json +0 -27
- package/data/ux-source-evidence/shared-portal-notifications-dropdown.json +0 -39
- package/data/ux-source-evidence/shared-portal-portal-shell.json +0 -36
- package/data/ux-source-evidence/shared-portal-profile-form.json +0 -32
- package/data/ux-source-evidence/shared-portal-settings-view.json +0 -81
- package/data/ux-source-evidence/shared-portal-usage-sparkline.json +0 -18
- package/data/ux-source-evidence/shared-portal-user-menu.json +0 -34
package/bin/utopia-ds-mcp.mjs
CHANGED
|
@@ -2,23 +2,12 @@
|
|
|
2
2
|
import {
|
|
3
3
|
capabilityManifest, getBlock, getBlockDefinition, getBrandbookSkill, getComponent, getDoc, getLogoSkill, getMotionProfile, getRoomContext, getTemplate, getTheme,
|
|
4
4
|
listBlockDefinitions, listBlocks, listComponents, listDocs, listLogoSkills, listMotionProfiles, listTemplates, listThemes, prepareLogoMakerRun,
|
|
5
|
-
prepareBrandbookRun, repositoryDoctor, search, validateAgentMutation,
|
|
5
|
+
prepareBrandbookRun, repositoryDoctor, search, validateAgentMutation, validateBrandbook, validateLayout,
|
|
6
6
|
} from '../lib/api.mjs'
|
|
7
7
|
|
|
8
8
|
const tools = [
|
|
9
|
-
['list_ux_source_patterns', 'Inventory of all source-backed UX patterns and named reusable fragments, with explicit port status. Not runnable components. Prefer Ceramic examples when available.', {}, () => listUxSourcePatterns()],
|
|
10
|
-
['find_ux_source_patterns', 'AI finds relevant UX interactions across the complete source inventory. No user selection required. Source-only entries require Ceramic semantic adaptation, not whole-screen copying.', { goal: { type: 'string', minLength: 1, maxLength: 2000 } }, ({ goal }) => findUxSourcePatterns(goal)],
|
|
11
|
-
['get_ux_source_part', 'Read one named original interaction fragment with theme/motion mapping and dependency references. Evidence only, not executable Ceramic code. AI adapts only useful parts; never blindly copy page, branding or mock authorization.', { id: { type: 'string' }, part: { type: 'string' }, theme: { type: 'string' } }, input => getUxSourcePart(input)],
|
|
12
|
-
['list_ux_examples', 'List contextual UX page examples. Optional reference for humans and AI, never a required user selection workflow.', {}, () => listUxExamples()],
|
|
13
|
-
['get_ux_example', 'Read one contextual UX example, actual code and independent reusable parts. Adapt only what fits the goal. Theme defaults to room then Cloudblur. Demo results never authorize real signup, saving, review or deployment.', { id: { type: 'string' }, theme: { type: 'string' } }, input => getUxExample(input)],
|
|
14
|
-
['find_ui_parts', 'AI discovers optional composable Ceramic UI parts from the user goal. Check fit, use only needed parts, and never ask the user to choose a pattern. No match means use ordinary Ceramic components.', { goal: { type: 'string', minLength: 1, maxLength: 2000 } }, ({ goal }) => findUiParts(goal)],
|
|
15
|
-
['get_ui_part', 'Retrieve one reusable part, actual code, props, states and semantic theme/motion contract. The AI selects it, not the user. Omit theme to use the room theme or Cloudblur. No whole-screen import.', { id: { type: 'string' }, theme: { type: 'string' } }, input => getUiPart(input)],
|
|
16
|
-
['prepare_ui_composition', 'From a user goal, suggest only relevant optional parts with actual code and shared-state bindings. AI checks fit and composes them without a user selection step. Theme uses explicit user theme, room theme, then Cloudblur. Read-only; never authenticates, approves or deploys.', { goal: { type: 'string', minLength: 1, maxLength: 2000 }, theme: { type: 'string' } }, input => prepareUiComposition(input)],
|
|
17
9
|
['get_room_context', 'Read the Brand Room context connected to this local workspace.', {}, () => getRoomContext()],
|
|
18
|
-
['search', 'Search
|
|
19
|
-
['list_patterns', 'List brand-neutral UX recipes, suitable uses, allowed variants and required states. Recipes are not runnable templates.', {}, () => listUxPatterns()],
|
|
20
|
-
['get_pattern', 'Read a UX recipe with pinned provenance, Ceramic semantic mapping and safe adaptation rules.', { id: { type: 'string' } }, ({ id }) => getUxPattern(id)],
|
|
21
|
-
['prepare_pattern_adaptation', 'Prepare a read-only UX adaptation proposal for a goal, registered company theme and allowed variant. Returns real Ceramic component and motion contracts; does not build, deploy or authorize anything.', { id: { type: 'string' }, goal: { type: 'string', minLength: 1, maxLength: 2000 }, theme: { type: 'string' }, variant: { type: 'string' } }, (input) => preparePatternAdaptation(input)],
|
|
10
|
+
['search', 'Search components, docs, templates, themes, and motion profiles.', { query: { type: 'string' } }, ({ query }) => search(query)],
|
|
22
11
|
['list_components', 'List every Ceramic component contract.', {}, () => listComponents()],
|
|
23
12
|
['get_component', 'Get one component including imports, tokens, usage, and Arabic rules.', { name: { type: 'string' } }, ({ name }) => getComponent(name)],
|
|
24
13
|
['list_block_definitions', 'List Ceramic registry definitions for agent and editor composition.', {}, () => listBlockDefinitions()],
|
|
@@ -38,6 +27,7 @@ const tools = [
|
|
|
38
27
|
['prepare_logo_maker_run', 'Prepare a Brand Room-aware Logo Maker chat run using the same skill contract as Ceramic UI. This does not approve or publish the result.', { skillId: { type: 'string' }, brandName: { type: 'string' }, brief: { type: 'string' }, referenceIds: { type: 'array', items: { type: 'string' }, maxItems: 3 } }, (input) => prepareLogoMakerRun(input)],
|
|
39
28
|
['get_brandbook_skill', 'Read the Ceramic Brandbook workflow, GitHub source contract, provider rule, and Solution application rules.', {}, () => getBrandbookSkill()],
|
|
40
29
|
['prepare_brandbook_run', 'Prepare a Brand Room-aware Ceramic Brandbook run. Returns the required A/B/C direction phase and one-BRAND.md handoff prompt; it does not generate, save, or publish a release.', { brandName: { type: 'string' }, brief: { type: 'string', minLength: 12, maxLength: 4000 } }, (input) => prepareBrandbookRun(input)],
|
|
30
|
+
['validate_brandbook', 'Mechanically validate the Ceramic BRAND.md contract, A/B/C refinement record, bilingual handoff, assets, and Solution showcase structure.', { path: { type: 'string' } }, (input) => validateBrandbook(input)],
|
|
41
31
|
['list_docs', 'List AI-readable design-system documents.', {}, () => listDocs()],
|
|
42
32
|
['get_docs', 'Read one design-system document.', { topic: { type: 'string' } }, ({ topic }) => getDoc(topic)],
|
|
43
33
|
['doctor', 'Validate the Ceramic source of truth.', {}, () => repositoryDoctor()],
|
|
@@ -65,13 +55,13 @@ process.stdin.on('data', (chunk) => {
|
|
|
65
55
|
if (request.method === 'initialize') reply(request.id, { protocolVersion: '2025-03-26', capabilities: { tools: {} }, serverInfo: { name: 'ceramic-design-system', version: capabilityManifest().version } })
|
|
66
56
|
else if (request.method === 'notifications/initialized') continue
|
|
67
57
|
else if (request.method === 'ping') reply(request.id, {})
|
|
68
|
-
else if (request.method === 'tools/list') reply(request.id, { tools: tools.map(([name, description, properties]) => ({ name, description, inputSchema: { type: 'object', properties, required:
|
|
58
|
+
else if (request.method === 'tools/list') reply(request.id, { tools: tools.map(([name, description, properties]) => ({ name, description, inputSchema: { type: 'object', properties, required: Object.keys(properties) } })) })
|
|
69
59
|
else if (request.method === 'tools/call') {
|
|
70
60
|
const tool = tools.find(([name]) => name === request.params?.name)
|
|
71
61
|
if (!tool) error(request.id, -32602, `Unknown tool ${request.params?.name}`)
|
|
72
62
|
else {
|
|
73
63
|
const data = tool[3](request.params?.arguments ?? {})
|
|
74
|
-
reply(request.id, { content: [{ type: 'text', text: JSON.stringify(data, null, 2) }], structuredContent: data, isError: data == null
|
|
64
|
+
reply(request.id, { content: [{ type: 'text', text: JSON.stringify(data, null, 2) }], structuredContent: data, isError: data == null })
|
|
75
65
|
}
|
|
76
66
|
} else error(request.id, -32601, `Method not found: ${request.method}`)
|
|
77
67
|
} catch (cause) {
|
package/bin/utopia-ds.mjs
CHANGED
|
@@ -5,7 +5,7 @@ import { spawn } from 'node:child_process'
|
|
|
5
5
|
import {
|
|
6
6
|
capabilityManifest, envelope, getBlock, getBlockDefinition, getComponent, getDoc, getLogoSkill, getMotionProfile, getTemplate, getTheme,
|
|
7
7
|
listBlockDefinitions, listBlocks, listComponents, listDocs, listLogoSkills, listMotionProfiles, listTemplates, listThemes, mcpLaunch,
|
|
8
|
-
repositoryDoctor, search, serializeLayout, validateLayout,
|
|
8
|
+
repositoryDoctor, search, serializeLayout, validateLayout,
|
|
9
9
|
} from '../lib/api.mjs'
|
|
10
10
|
import { createTemplateSubmissionUrl, validateTemplateSubmission } from '../lib/template-submission.mjs'
|
|
11
11
|
import { resolveTemplateContract, TEMPLATE_MODES } from '../lib/template-runtime.mjs'
|
|
@@ -14,7 +14,7 @@ import { installCliTelemetry } from '../lib/telemetry.mjs'
|
|
|
14
14
|
const args = process.argv.slice(2)
|
|
15
15
|
const command = args.find((arg) => !arg.startsWith('--')) ?? 'help'
|
|
16
16
|
const commandIndex = args.indexOf(command)
|
|
17
|
-
const optionsWithValues = new Set(['--copy', '--theme', '--mode', '--id', '--slug', '--name', '--brand', '--source', '--client', '--directory'
|
|
17
|
+
const optionsWithValues = new Set(['--copy', '--theme', '--mode', '--id', '--slug', '--name', '--brand', '--source', '--client', '--directory'])
|
|
18
18
|
const values = commandIndex >= 0 ? positionalValues(args.slice(commandIndex + 1)) : []
|
|
19
19
|
const json = args.includes('--json')
|
|
20
20
|
const dense = args.includes('--dense')
|
|
@@ -75,9 +75,6 @@ Commands:
|
|
|
75
75
|
init [directory] [--theme <id>] [--yes] Add Ceramic and agent instructions
|
|
76
76
|
room connect --id <id> --brand <name> Connect this workspace to a Brand Room
|
|
77
77
|
search <query> Search every design-system domain
|
|
78
|
-
pattern <id>|--list Inspect semantic UX recipes
|
|
79
|
-
pattern <id> --goal <text> --theme <id> [--variant <id>]
|
|
80
|
-
Prepare a safe adaptation proposal
|
|
81
78
|
component <Name>|--list Inspect component contracts
|
|
82
79
|
registry <block-id>|--list Inspect agent-editable block definitions
|
|
83
80
|
layout validate <file> Validate versioned Ceramic Layout JSON
|
|
@@ -204,7 +201,7 @@ function init() {
|
|
|
204
201
|
const rules = `# Ceramic Design System agent rules
|
|
205
202
|
|
|
206
203
|
1. Run \`npm run ceramic -- manifest --json\` before generating UI.
|
|
207
|
-
2. Run \`npm run ceramic -- search <intent> --json\`, then inspect the selected
|
|
204
|
+
2. Run \`npm run ceramic -- search <intent> --json\`, then inspect the selected component or template.
|
|
208
205
|
3. Prefer \`@utopia-studio-design/design-system\` exports over raw shadcn/ui source.
|
|
209
206
|
4. Components consume semantic tokens only. The active theme is \`${theme}\`.
|
|
210
207
|
5. Request semantic motion only; inspect \`npm run ceramic -- motion ${getTheme(theme)?.motionProfile} --json\` before choosing an application runtime adapter.
|
|
@@ -501,16 +498,6 @@ else if (command === 'search') {
|
|
|
501
498
|
if (name === 'create') scaffoldTheme()
|
|
502
499
|
else if (!name || args.includes('--list')) output('theme-list', listThemes(), (rows) => rows.map((item) => `${item.id}|${item.name}|${item.role}|${item.policyManifest}`).join('\n'))
|
|
503
500
|
else { const item = getTheme(name); item ? output('theme', item) : fail(`Unknown theme "${name}".`, 'ERR_THEME') }
|
|
504
|
-
} else if (command === 'pattern') {
|
|
505
|
-
const name = values[0]
|
|
506
|
-
if (args.includes('--goal')) {
|
|
507
|
-
const goal = argAfter('--goal'), theme = argAfter('--theme'), variant = argAfter('--variant')
|
|
508
|
-
if (!process.exitCode) {
|
|
509
|
-
const plan = preparePatternAdaptation({ id: name, goal, theme, ...(variant ? { variant } : {}) })
|
|
510
|
-
plan.ok ? output('pattern-adaptation-plan', plan) : fail(plan.message, plan.code)
|
|
511
|
-
}
|
|
512
|
-
} else if (!name || args.includes('--list')) output('ux-pattern-list', listUxPatterns())
|
|
513
|
-
else { const item = getUxPattern(name); item ? output('ux-pattern', item) : fail(`Unknown UX pattern "${name}".`, 'ERR_PATTERN') }
|
|
514
501
|
} else if (command === 'motion') {
|
|
515
502
|
const name = values[0]
|
|
516
503
|
if (!name || args.includes('--list')) output('motion-profile-list', listMotionProfiles(), (rows) => rows.map((item) => `${item.id}|${item.themes.join(',')}|${item.label}|${item.description}`).join('\n'))
|
|
@@ -30,6 +30,17 @@ Call `prepare_brandbook_run` with a brand name and useful brief. A logo is optio
|
|
|
30
30
|
}
|
|
31
31
|
```
|
|
32
32
|
|
|
33
|
+
After the user selects and refines A, B, or C, write the single `BRAND.md` source and validate it before building or saving a release:
|
|
34
|
+
|
|
35
|
+
```json
|
|
36
|
+
{
|
|
37
|
+
"name": "validate_brandbook",
|
|
38
|
+
"arguments": { "path": "/absolute/path/to/brand-directory" }
|
|
39
|
+
}
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
Treat every validation error as blocking. A successful schema check does not replace visual, Arabic, licensing, or stakeholder review.
|
|
43
|
+
|
|
33
44
|
This call prepares work; it does not generate, save, or publish a release.
|
|
34
45
|
|
|
35
46
|
## Present A, B, and C
|
|
@@ -76,4 +87,3 @@ Release checks:
|
|
|
76
87
|
- Image provenance and rights metadata are present.
|
|
77
88
|
- Marketing and Solution applications reflect the selected direction.
|
|
78
89
|
- Brandbook validation passes before theme authoring begins.
|
|
79
|
-
|
|
@@ -122,14 +122,8 @@
|
|
|
122
122
|
"bundlePath": "blocks/database-workspace",
|
|
123
123
|
"sourcePath": "blocks/database-workspace/DatabaseWorkspaceBlocks.tsx",
|
|
124
124
|
"exportName": "DatabaseToolbar",
|
|
125
|
-
"requiredImports": [
|
|
126
|
-
|
|
127
|
-
],
|
|
128
|
-
"contracts": [
|
|
129
|
-
"query controls",
|
|
130
|
-
"saved view context",
|
|
131
|
-
"permission-aware create action"
|
|
132
|
-
],
|
|
125
|
+
"requiredImports": ["@utopia-studio-design/design-system/Database"],
|
|
126
|
+
"contracts": ["query controls", "saved view context", "permission-aware create action"],
|
|
133
127
|
"rtlReady": true,
|
|
134
128
|
"reducedMotion": true,
|
|
135
129
|
"responsiveMinimum": "320px"
|
|
@@ -143,15 +137,8 @@
|
|
|
143
137
|
"bundlePath": "blocks/database-workspace",
|
|
144
138
|
"sourcePath": "blocks/database-workspace/DatabaseWorkspaceBlocks.tsx",
|
|
145
139
|
"exportName": "DatabaseTableBlock",
|
|
146
|
-
"requiredImports": [
|
|
147
|
-
|
|
148
|
-
],
|
|
149
|
-
"contracts": [
|
|
150
|
-
"schema-driven properties",
|
|
151
|
-
"grid keyboard model",
|
|
152
|
-
"virtualization",
|
|
153
|
-
"optimistic recovery"
|
|
154
|
-
],
|
|
140
|
+
"requiredImports": ["@utopia-studio-design/design-system/Database"],
|
|
141
|
+
"contracts": ["schema-driven properties", "grid keyboard model", "virtualization", "optimistic recovery"],
|
|
155
142
|
"rtlReady": true,
|
|
156
143
|
"reducedMotion": true,
|
|
157
144
|
"responsiveMinimum": "320px"
|
|
@@ -165,13 +152,8 @@
|
|
|
165
152
|
"bundlePath": "blocks/database-workspace",
|
|
166
153
|
"sourcePath": "blocks/database-workspace/DatabaseWorkspaceBlocks.tsx",
|
|
167
154
|
"exportName": "SavedViewsBar",
|
|
168
|
-
"requiredImports": [
|
|
169
|
-
|
|
170
|
-
],
|
|
171
|
-
"contracts": [
|
|
172
|
-
"controlled active view",
|
|
173
|
-
"current view semantics"
|
|
174
|
-
],
|
|
155
|
+
"requiredImports": ["@utopia-studio-design/design-system/Database"],
|
|
156
|
+
"contracts": ["controlled active view", "current view semantics"],
|
|
175
157
|
"rtlReady": true,
|
|
176
158
|
"reducedMotion": true,
|
|
177
159
|
"responsiveMinimum": "320px"
|
|
@@ -185,14 +167,8 @@
|
|
|
185
167
|
"bundlePath": "blocks/database-workspace",
|
|
186
168
|
"sourcePath": "blocks/database-workspace/DatabaseWorkspaceBlocks.tsx",
|
|
187
169
|
"exportName": "RecordDetailDrawer",
|
|
188
|
-
"requiredImports": [
|
|
189
|
-
|
|
190
|
-
],
|
|
191
|
-
"contracts": [
|
|
192
|
-
"dialog semantics",
|
|
193
|
-
"complete property detail",
|
|
194
|
-
"logical inline-end placement"
|
|
195
|
-
],
|
|
170
|
+
"requiredImports": ["@utopia-studio-design/design-system/Database"],
|
|
171
|
+
"contracts": ["dialog semantics", "complete property detail", "logical inline-end placement"],
|
|
196
172
|
"rtlReady": true,
|
|
197
173
|
"reducedMotion": true,
|
|
198
174
|
"responsiveMinimum": "320px"
|
|
@@ -206,14 +182,8 @@
|
|
|
206
182
|
"bundlePath": "blocks/database-workspace",
|
|
207
183
|
"sourcePath": "blocks/database-workspace/DatabaseWorkspaceBlocks.tsx",
|
|
208
184
|
"exportName": "BulkActionBar",
|
|
209
|
-
"requiredImports": [
|
|
210
|
-
|
|
211
|
-
],
|
|
212
|
-
"contracts": [
|
|
213
|
-
"selection count",
|
|
214
|
-
"clear selection",
|
|
215
|
-
"bulk mutation action"
|
|
216
|
-
],
|
|
185
|
+
"requiredImports": ["@utopia-studio-design/design-system/Button"],
|
|
186
|
+
"contracts": ["selection count", "clear selection", "bulk mutation action"],
|
|
217
187
|
"rtlReady": true,
|
|
218
188
|
"reducedMotion": true,
|
|
219
189
|
"responsiveMinimum": "320px"
|
|
@@ -227,15 +197,8 @@
|
|
|
227
197
|
"bundlePath": "blocks/calendar-application",
|
|
228
198
|
"sourcePath": "blocks/calendar-application/CalendarApplicationBlocks.tsx",
|
|
229
199
|
"exportName": "SchedulerShell",
|
|
230
|
-
"requiredImports": [
|
|
231
|
-
|
|
232
|
-
],
|
|
233
|
-
"contracts": [
|
|
234
|
-
"controlled events and adapter",
|
|
235
|
-
"accessible agenda",
|
|
236
|
-
"keyboard and touch move alternatives",
|
|
237
|
-
"responsive view transition"
|
|
238
|
-
],
|
|
200
|
+
"requiredImports": ["@utopia-studio-design/design-system/Calendar"],
|
|
201
|
+
"contracts": ["controlled events and adapter", "accessible agenda", "keyboard and touch move alternatives", "responsive view transition"],
|
|
239
202
|
"rtlReady": true,
|
|
240
203
|
"reducedMotion": true,
|
|
241
204
|
"responsiveMinimum": "320px"
|
|
@@ -249,14 +212,8 @@
|
|
|
249
212
|
"bundlePath": "blocks/calendar-application",
|
|
250
213
|
"sourcePath": "blocks/calendar-application/CalendarApplicationBlocks.tsx",
|
|
251
214
|
"exportName": "CalendarSidebar",
|
|
252
|
-
"requiredImports": [
|
|
253
|
-
|
|
254
|
-
],
|
|
255
|
-
"contracts": [
|
|
256
|
-
"controlled date",
|
|
257
|
-
"resource visibility",
|
|
258
|
-
"logical sidebar placement"
|
|
259
|
-
],
|
|
215
|
+
"requiredImports": ["@utopia-studio-design/design-system/Calendar"],
|
|
216
|
+
"contracts": ["controlled date", "resource visibility", "logical sidebar placement"],
|
|
260
217
|
"rtlReady": true,
|
|
261
218
|
"reducedMotion": true,
|
|
262
219
|
"responsiveMinimum": "320px"
|
|
@@ -270,17 +227,8 @@
|
|
|
270
227
|
"bundlePath": "blocks/calendar-application",
|
|
271
228
|
"sourcePath": "blocks/calendar-application/CalendarApplicationBlocks.tsx",
|
|
272
229
|
"exportName": "EventEditorDrawer",
|
|
273
|
-
"requiredImports": [
|
|
274
|
-
|
|
275
|
-
],
|
|
276
|
-
"contracts": [
|
|
277
|
-
"modal focus and scroll lock",
|
|
278
|
-
"Escape dismissal",
|
|
279
|
-
"recurrence edit scope",
|
|
280
|
-
"required and chronological date validation",
|
|
281
|
-
"async save recovery with preserved draft",
|
|
282
|
-
"controlled save and delete"
|
|
283
|
-
],
|
|
230
|
+
"requiredImports": ["@utopia-studio-design/design-system/Calendar"],
|
|
231
|
+
"contracts": ["modal focus and scroll lock", "Escape dismissal", "recurrence edit scope", "required and chronological date validation", "async save recovery with preserved draft", "controlled save and delete"],
|
|
284
232
|
"rtlReady": true,
|
|
285
233
|
"reducedMotion": true,
|
|
286
234
|
"responsiveMinimum": "320px"
|
|
@@ -294,14 +242,8 @@
|
|
|
294
242
|
"bundlePath": "blocks/calendar-application",
|
|
295
243
|
"sourcePath": "blocks/calendar-application/CalendarApplicationBlocks.tsx",
|
|
296
244
|
"exportName": "AgendaPanel",
|
|
297
|
-
"requiredImports": [
|
|
298
|
-
|
|
299
|
-
],
|
|
300
|
-
"contracts": [
|
|
301
|
-
"chronological event order",
|
|
302
|
-
"screen-reader names",
|
|
303
|
-
"equivalent event activation"
|
|
304
|
-
],
|
|
245
|
+
"requiredImports": ["@utopia-studio-design/design-system/Calendar"],
|
|
246
|
+
"contracts": ["chronological event order", "screen-reader names", "equivalent event activation"],
|
|
305
247
|
"rtlReady": true,
|
|
306
248
|
"reducedMotion": true,
|
|
307
249
|
"responsiveMinimum": "320px"
|
|
@@ -315,14 +257,8 @@
|
|
|
315
257
|
"bundlePath": "blocks/calendar-application",
|
|
316
258
|
"sourcePath": "blocks/calendar-application/CalendarApplicationBlocks.tsx",
|
|
317
259
|
"exportName": "TimezoneSelector",
|
|
318
|
-
"requiredImports": [
|
|
319
|
-
|
|
320
|
-
],
|
|
321
|
-
"contracts": [
|
|
322
|
-
"IANA timezone values",
|
|
323
|
-
"controlled selection",
|
|
324
|
-
"visible display context"
|
|
325
|
-
],
|
|
260
|
+
"requiredImports": ["@utopia-studio-design/design-system/Calendar"],
|
|
261
|
+
"contracts": ["IANA timezone values", "controlled selection", "visible display context"],
|
|
326
262
|
"rtlReady": true,
|
|
327
263
|
"reducedMotion": true,
|
|
328
264
|
"responsiveMinimum": "320px"
|
|
@@ -416,9 +352,7 @@
|
|
|
416
352
|
"bundlePath": "blocks/dashboard-composer",
|
|
417
353
|
"sourcePath": "blocks/dashboard-composer/DashboardComposerBlocks.tsx",
|
|
418
354
|
"exportName": "CeramicDashboardRenderer",
|
|
419
|
-
"requiredImports": [
|
|
420
|
-
"@utopia-studio-design/design-system/Composition"
|
|
421
|
-
],
|
|
355
|
+
"requiredImports": ["@utopia-studio-design/design-system/Composition"],
|
|
422
356
|
"contracts": [
|
|
423
357
|
"versioned layout validation",
|
|
424
358
|
"product-supplied renderer map",
|
|
@@ -453,149 +387,6 @@
|
|
|
453
387
|
"rtlReady": true,
|
|
454
388
|
"reducedMotion": true,
|
|
455
389
|
"responsiveMinimum": "320px"
|
|
456
|
-
},
|
|
457
|
-
{
|
|
458
|
-
"id": "pattern-choice-cards",
|
|
459
|
-
"title": "Choice cards",
|
|
460
|
-
"status": "available",
|
|
461
|
-
"category": "semantic-ui-part",
|
|
462
|
-
"purpose": "A small set of mutually exclusive choices needs explanation.",
|
|
463
|
-
"bundlePath": "blocks/semantic-pattern-parts",
|
|
464
|
-
"sourcePath": "blocks/semantic-pattern-parts/ChoiceCards.tsx",
|
|
465
|
-
"exportName": "ChoiceCards",
|
|
466
|
-
"requiredImports": [
|
|
467
|
-
"@utopia-studio-design/design-system"
|
|
468
|
-
],
|
|
469
|
-
"contracts": [
|
|
470
|
-
"selected",
|
|
471
|
-
"unselected",
|
|
472
|
-
"Product-owned options and selected id",
|
|
473
|
-
"Server permission checks for access-affecting roles"
|
|
474
|
-
],
|
|
475
|
-
"rtlReady": true,
|
|
476
|
-
"reducedMotion": true,
|
|
477
|
-
"responsiveMinimum": "320px"
|
|
478
|
-
},
|
|
479
|
-
{
|
|
480
|
-
"id": "pattern-validated-field",
|
|
481
|
-
"title": "Validated input",
|
|
482
|
-
"status": "available",
|
|
483
|
-
"category": "semantic-ui-part",
|
|
484
|
-
"purpose": "A field needs a visible label, hint and validation feedback.",
|
|
485
|
-
"bundlePath": "blocks/semantic-pattern-parts",
|
|
486
|
-
"sourcePath": "blocks/semantic-pattern-parts/ValidatedField.tsx",
|
|
487
|
-
"exportName": "ValidatedField",
|
|
488
|
-
"requiredImports": [
|
|
489
|
-
"@utopia-studio-design/design-system"
|
|
490
|
-
],
|
|
491
|
-
"contracts": [
|
|
492
|
-
"empty",
|
|
493
|
-
"filled",
|
|
494
|
-
"invalid",
|
|
495
|
-
"Host validation policy",
|
|
496
|
-
"Form state and submit callback"
|
|
497
|
-
],
|
|
498
|
-
"rtlReady": true,
|
|
499
|
-
"reducedMotion": true,
|
|
500
|
-
"responsiveMinimum": "320px"
|
|
501
|
-
},
|
|
502
|
-
{
|
|
503
|
-
"id": "pattern-list-filters",
|
|
504
|
-
"title": "List filters",
|
|
505
|
-
"status": "available",
|
|
506
|
-
"category": "semantic-ui-part",
|
|
507
|
-
"purpose": "A list needs text search, one status filter and reset.",
|
|
508
|
-
"bundlePath": "blocks/semantic-pattern-parts",
|
|
509
|
-
"sourcePath": "blocks/semantic-pattern-parts/ListFilters.tsx",
|
|
510
|
-
"exportName": "ListFilters",
|
|
511
|
-
"requiredImports": [
|
|
512
|
-
"@utopia-studio-design/design-system"
|
|
513
|
-
],
|
|
514
|
-
"contracts": [
|
|
515
|
-
"default",
|
|
516
|
-
"filtered",
|
|
517
|
-
"reset",
|
|
518
|
-
"Shared host query/status state",
|
|
519
|
-
"Filtered or server-paginated data query",
|
|
520
|
-
"First option is the reset/all value"
|
|
521
|
-
],
|
|
522
|
-
"rtlReady": true,
|
|
523
|
-
"reducedMotion": true,
|
|
524
|
-
"responsiveMinimum": "320px"
|
|
525
|
-
},
|
|
526
|
-
{
|
|
527
|
-
"id": "pattern-review-list",
|
|
528
|
-
"title": "Review list",
|
|
529
|
-
"status": "available",
|
|
530
|
-
"category": "semantic-ui-part",
|
|
531
|
-
"purpose": "Authorized users inspect items with statuses and assignees.",
|
|
532
|
-
"bundlePath": "blocks/semantic-pattern-parts",
|
|
533
|
-
"sourcePath": "blocks/semantic-pattern-parts/ReviewList.tsx",
|
|
534
|
-
"exportName": "ReviewList",
|
|
535
|
-
"requiredImports": [
|
|
536
|
-
"@utopia-studio-design/design-system"
|
|
537
|
-
],
|
|
538
|
-
"contracts": [
|
|
539
|
-
"ready",
|
|
540
|
-
"empty",
|
|
541
|
-
"loading",
|
|
542
|
-
"error",
|
|
543
|
-
"retry",
|
|
544
|
-
"Authorized row query",
|
|
545
|
-
"Review callback must not auto-approve",
|
|
546
|
-
"Localized labels",
|
|
547
|
-
"Host filtering and retry"
|
|
548
|
-
],
|
|
549
|
-
"rtlReady": true,
|
|
550
|
-
"reducedMotion": true,
|
|
551
|
-
"responsiveMinimum": "320px"
|
|
552
|
-
},
|
|
553
|
-
{
|
|
554
|
-
"id": "pattern-progress-steps",
|
|
555
|
-
"title": "Progress steps",
|
|
556
|
-
"status": "available",
|
|
557
|
-
"category": "semantic-ui-part",
|
|
558
|
-
"purpose": "An ordered task has known prerequisites and a current step.",
|
|
559
|
-
"bundlePath": "blocks/semantic-pattern-parts",
|
|
560
|
-
"sourcePath": "blocks/semantic-pattern-parts/ProgressSteps.tsx",
|
|
561
|
-
"exportName": "ProgressSteps",
|
|
562
|
-
"requiredImports": [
|
|
563
|
-
"@utopia-studio-design/design-system"
|
|
564
|
-
],
|
|
565
|
-
"contracts": [
|
|
566
|
-
"done",
|
|
567
|
-
"current",
|
|
568
|
-
"locked",
|
|
569
|
-
"Host prerequisite rules",
|
|
570
|
-
"Current step",
|
|
571
|
-
"Navigation callback"
|
|
572
|
-
],
|
|
573
|
-
"rtlReady": true,
|
|
574
|
-
"reducedMotion": true,
|
|
575
|
-
"responsiveMinimum": "320px"
|
|
576
|
-
},
|
|
577
|
-
{
|
|
578
|
-
"id": "pattern-outcome-notice",
|
|
579
|
-
"title": "Outcome and next action",
|
|
580
|
-
"status": "available",
|
|
581
|
-
"category": "semantic-ui-part",
|
|
582
|
-
"purpose": "A confirmed result or recoverable issue needs a next action.",
|
|
583
|
-
"bundlePath": "blocks/semantic-pattern-parts",
|
|
584
|
-
"sourcePath": "blocks/semantic-pattern-parts/OutcomeNotice.tsx",
|
|
585
|
-
"exportName": "OutcomeNotice",
|
|
586
|
-
"requiredImports": [
|
|
587
|
-
"@utopia-studio-design/design-system"
|
|
588
|
-
],
|
|
589
|
-
"contracts": [
|
|
590
|
-
"info",
|
|
591
|
-
"success",
|
|
592
|
-
"warning",
|
|
593
|
-
"Confirmed result",
|
|
594
|
-
"Meaningful next-action/retry callback"
|
|
595
|
-
],
|
|
596
|
-
"rtlReady": true,
|
|
597
|
-
"reducedMotion": true,
|
|
598
|
-
"responsiveMinimum": "320px"
|
|
599
390
|
}
|
|
600
391
|
]
|
|
601
392
|
}
|