@softize/opus 12.10.0 → 13.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/CHANGELOG.md +56 -0
- package/bin/lib/check.mjs +1098 -310
- package/bin/lib/copy.mjs +12 -5
- package/docs/adr/0003-dictionary-presentation-is-declared.md +3 -0
- package/docs/adr/0004-page-content-state-is-composed.md +65 -0
- package/docs/adr/0005-structural-surfaces-share-an-explicit-anatomy.md +180 -0
- package/docs/adr/0006-semantic-context-precedes-visual-variant.md +182 -0
- package/docs/adr/0007-toast-actions-form-an-ordered-collection.md +63 -0
- package/docs/adr/0008-hierarchical-navigation-is-composed-at-the-consumer-boundary.md +71 -0
- package/docs/radius-scale.md +1 -1
- package/package.json +1 -1
- package/registry/instructions/opus.md +5 -0
- package/registry/skills/build-opus-ui/SKILL.md +27 -16
- package/registry/skills/build-opus-ui/references/evaluations.md +16 -5
- package/registry/skills/build-opus-ui/references/ui-patterns.md +38 -15
- package/registry/skills/maintain-opus-docs/SKILL.md +83 -0
- package/registry/skills/maintain-opus-docs/agents/openai.yaml +4 -0
- package/registry/skills/maintain-opus-docs/references/editorial-standard.md +85 -0
- package/registry/skills/maintain-opus-docs/references/evaluations.md +34 -0
- package/registry/skills/maintain-opus-docs/scripts/audit-docs.mjs +81 -0
- package/registry/skills/model-opus-dictionary/SKILL.md +4 -2
- package/registry/skills/model-opus-dictionary/references/evaluations.md +4 -3
- package/registry/templates/app/src/App.tsx +1 -1
- package/src/core/dictionary.ts +52 -14
- package/src/core/index.ts +10 -0
- package/src/core/ui-context.ts +29 -0
- package/src/schema/drivers/zod.ts +17 -8
- package/src/ui/components/patterns/action-form-card.tsx +18 -12
- package/src/ui/components/patterns/confirm.tsx +163 -40
- package/src/ui/components/patterns/content-header.tsx +335 -61
- package/src/ui/components/patterns/data-state.tsx +23 -10
- package/src/ui/components/patterns/list.tsx +1097 -783
- package/src/ui/components/patterns/page-state.tsx +115 -0
- package/src/ui/components/patterns/page.tsx +231 -41
- package/src/ui/components/patterns/sidebar.tsx +357 -83
- package/src/ui/components/patterns/trigger.tsx +37 -30
- package/src/ui/components/patterns/view.tsx +7 -11
- package/src/ui/components/primitives/alert.tsx +298 -110
- package/src/ui/components/primitives/ask.tsx +2 -1
- package/src/ui/components/primitives/badge.tsx +91 -30
- package/src/ui/components/primitives/button.tsx +99 -60
- package/src/ui/components/primitives/calendar.tsx +39 -39
- package/src/ui/components/primitives/card.tsx +96 -23
- package/src/ui/components/primitives/detail.tsx +2 -2
- package/src/ui/components/primitives/dialog.tsx +196 -39
- package/src/ui/components/primitives/dictionary-value.tsx +9 -14
- package/src/ui/components/primitives/dot.tsx +74 -21
- package/src/ui/components/primitives/drawer.tsx +40 -24
- package/src/ui/components/primitives/empty.tsx +3 -3
- package/src/ui/components/primitives/item.tsx +135 -79
- package/src/ui/components/primitives/menu.tsx +11 -3
- package/src/ui/components/primitives/metric-card.tsx +133 -0
- package/src/ui/components/primitives/sonner.tsx +187 -8
- package/src/ui/components/primitives/table.tsx +2 -2
- package/src/ui/docs/DocBrowser.tsx +104 -25
- package/src/ui/docs/changelog.tsx +1 -1
- package/src/ui/docs/content/accordion.md +22 -16
- package/src/ui/docs/content/action-form-card.md +8 -8
- package/src/ui/docs/content/action-form-dialog.md +9 -9
- package/src/ui/docs/content/action-form.md +28 -34
- package/src/ui/docs/content/action-list-dialog.md +11 -6
- package/src/ui/docs/content/action-list.md +64 -39
- package/src/ui/docs/content/action-trigger.md +21 -14
- package/src/ui/docs/content/action-view.md +8 -8
- package/src/ui/docs/content/actions.md +9 -9
- package/src/ui/docs/content/ai.md +3 -3
- package/src/ui/docs/content/alert.md +54 -28
- package/src/ui/docs/content/aspect-ratio.md +4 -4
- package/src/ui/docs/content/audit.md +2 -2
- package/src/ui/docs/content/auth.md +3 -3
- package/src/ui/docs/content/avatar.md +34 -14
- package/src/ui/docs/content/badge.md +21 -22
- package/src/ui/docs/content/breadcrumb.md +13 -8
- package/src/ui/docs/content/button.md +93 -15
- package/src/ui/docs/content/calendar.md +5 -5
- package/src/ui/docs/content/card.md +6 -6
- package/src/ui/docs/content/carousel.md +16 -11
- package/src/ui/docs/content/chat.md +3 -3
- package/src/ui/docs/content/checkbox.md +7 -7
- package/src/ui/docs/content/cli.md +5 -5
- package/src/ui/docs/content/collapsible.md +8 -8
- package/src/ui/docs/content/command.md +16 -8
- package/src/ui/docs/content/composer.md +2 -2
- package/src/ui/docs/content/content.md +44 -0
- package/src/ui/docs/content/copyable.md +4 -3
- package/src/ui/docs/content/customization.md +7 -7
- package/src/ui/docs/content/cycle.md +3 -3
- package/src/ui/docs/content/data-state.md +11 -12
- package/src/ui/docs/content/data.md +26 -33
- package/src/ui/docs/content/detail.md +8 -5
- package/src/ui/docs/content/dialog.md +339 -31
- package/src/ui/docs/content/dictionary-value.md +19 -18
- package/src/ui/docs/content/dock.md +3 -3
- package/src/ui/docs/content/dot.md +7 -7
- package/src/ui/docs/content/drawer.md +32 -16
- package/src/ui/docs/content/empty-value.md +2 -2
- package/src/ui/docs/content/empty.md +19 -12
- package/src/ui/docs/content/events.md +4 -4
- package/src/ui/docs/content/field.md +34 -12
- package/src/ui/docs/content/getting-started.md +1 -1
- package/src/ui/docs/content/icon-picker.md +8 -4
- package/src/ui/docs/content/input-otp.md +20 -12
- package/src/ui/docs/content/input.md +121 -9
- package/src/ui/docs/content/item.md +64 -24
- package/src/ui/docs/content/kbd.md +19 -11
- package/src/ui/docs/content/label.md +5 -3
- package/src/ui/docs/content/log.md +4 -4
- package/src/ui/docs/content/markdown.md +7 -6
- package/src/ui/docs/content/mcp.md +13 -15
- package/src/ui/docs/content/menu.md +36 -17
- package/src/ui/docs/content/metric-card.md +41 -0
- package/src/ui/docs/content/observability.md +2 -2
- package/src/ui/docs/content/page.md +93 -10
- package/src/ui/docs/content/pagination.md +22 -17
- package/src/ui/docs/content/popover.md +16 -8
- package/src/ui/docs/content/progress.md +7 -5
- package/src/ui/docs/content/queue.md +5 -5
- package/src/ui/docs/content/radio-group.md +20 -12
- package/src/ui/docs/content/router.md +11 -6
- package/src/ui/docs/content/scheduler.md +4 -5
- package/src/ui/docs/content/scroll-area.md +12 -7
- package/src/ui/docs/content/select.md +42 -29
- package/src/ui/docs/content/semantic-context.md +63 -0
- package/src/ui/docs/content/separator.md +5 -5
- package/src/ui/docs/content/sidebar.md +325 -56
- package/src/ui/docs/content/skeleton.md +5 -4
- package/src/ui/docs/content/slider.md +8 -7
- package/src/ui/docs/content/spinner.md +8 -8
- package/src/ui/docs/content/split.md +8 -5
- package/src/ui/docs/content/storage.md +6 -8
- package/src/ui/docs/content/switch.md +8 -7
- package/src/ui/docs/content/table.md +16 -6
- package/src/ui/docs/content/tabs.md +28 -14
- package/src/ui/docs/content/testing.md +9 -11
- package/src/ui/docs/content/textarea.md +5 -4
- package/src/ui/docs/content/toast.md +47 -13
- package/src/ui/docs/content/toggle.md +75 -7
- package/src/ui/docs/content/tokens.md +31 -3
- package/src/ui/docs/content/tooltip.md +19 -11
- package/src/ui/docs/content/truncate.md +7 -8
- package/src/ui/docs/content/ui.md +10 -9
- package/src/ui/docs/content/upgrading.md +7 -8
- package/src/ui/docs/doc-client.tsx +2 -2
- package/src/ui/docs/registry.tsx +580 -229
- package/src/ui/lib/semantic-context.ts +30 -0
- package/src/ui/meta.ts +278 -286
- package/src/ui/react.tsx +377 -111
- package/src/ui/theme.css +116 -0
- package/src/ui/components/primitives/alert-dialog.tsx +0 -190
- package/src/ui/docs/content/alert-dialog.md +0 -73
- package/src/ui/docs/content/button-group.md +0 -71
- package/src/ui/docs/content/confirm.md +0 -120
- package/src/ui/docs/content/input-group.md +0 -78
- package/src/ui/docs/content/toggle-group.md +0 -81
package/src/ui/docs/registry.tsx
CHANGED
|
@@ -10,96 +10,94 @@
|
|
|
10
10
|
* componente ganham o cabeçalho (título + badge de origem + whenToUse) do `meta` central via o
|
|
11
11
|
* helper `comp`; páginas conceituais renderizam o markdown direto (o próprio md traz o H1/lead).
|
|
12
12
|
*/
|
|
13
|
-
import { useEffect } from
|
|
14
|
-
import * as lucideIcons from
|
|
15
|
-
import * as opusUi from
|
|
16
|
-
import { componentMeta } from
|
|
17
|
-
import { navigate } from
|
|
18
|
-
import { DocPage } from
|
|
19
|
-
import { DocMarkdown } from
|
|
20
|
-
import { OpusChangelog } from
|
|
13
|
+
import { useEffect } from "react";
|
|
14
|
+
import * as lucideIcons from "lucide-react";
|
|
15
|
+
import * as opusUi from "../react.tsx";
|
|
16
|
+
import { componentMeta } from "../meta.ts";
|
|
17
|
+
import { navigate } from "../router.ts";
|
|
18
|
+
import { DocPage } from "./doc.tsx";
|
|
19
|
+
import { DocMarkdown } from "./markdown.tsx";
|
|
20
|
+
import { OpusChangelog } from "./changelog.tsx";
|
|
21
21
|
|
|
22
22
|
// — Conceituais (Começar/Framework/Design/Introdução) —
|
|
23
|
-
import gettingStartedMd from
|
|
24
|
-
import upgradingMd from
|
|
25
|
-
import cycleMd from
|
|
26
|
-
import authMd from
|
|
27
|
-
import auditMd from
|
|
28
|
-
import eventsMd from
|
|
29
|
-
import logMd from
|
|
30
|
-
import
|
|
31
|
-
import
|
|
32
|
-
import
|
|
33
|
-
import
|
|
34
|
-
import
|
|
35
|
-
import
|
|
36
|
-
import
|
|
37
|
-
import
|
|
38
|
-
import
|
|
39
|
-
import
|
|
40
|
-
import
|
|
41
|
-
import
|
|
42
|
-
import
|
|
43
|
-
import
|
|
23
|
+
import gettingStartedMd from "./content/getting-started.md?raw";
|
|
24
|
+
import upgradingMd from "./content/upgrading.md?raw";
|
|
25
|
+
import cycleMd from "./content/cycle.md?raw";
|
|
26
|
+
import authMd from "./content/auth.md?raw";
|
|
27
|
+
import auditMd from "./content/audit.md?raw";
|
|
28
|
+
import eventsMd from "./content/events.md?raw";
|
|
29
|
+
import logMd from "./content/log.md?raw";
|
|
30
|
+
import observabilityMd from "./content/observability.md?raw";
|
|
31
|
+
import queueMd from "./content/queue.md?raw";
|
|
32
|
+
import schedulerMd from "./content/scheduler.md?raw";
|
|
33
|
+
import actionsMd from "./content/actions.md?raw";
|
|
34
|
+
import dataMd from "./content/data.md?raw";
|
|
35
|
+
import storageMd from "./content/storage.md?raw";
|
|
36
|
+
import aiMd from "./content/ai.md?raw";
|
|
37
|
+
import mcpMd from "./content/mcp.md?raw";
|
|
38
|
+
import testingMd from "./content/testing.md?raw";
|
|
39
|
+
import runtimeMd from "./content/runtime.md?raw";
|
|
40
|
+
import uiMd from "./content/ui.md?raw";
|
|
41
|
+
import cliMd from "./content/cli.md?raw";
|
|
42
|
+
import tokensMd from "./content/tokens.md?raw";
|
|
43
|
+
import semanticContextMd from "./content/semantic-context.md?raw";
|
|
44
|
+
import communicationMd from "./content/communication.md?raw";
|
|
45
|
+
import customizationMd from "./content/customization.md?raw";
|
|
44
46
|
|
|
45
47
|
// — Componentes —
|
|
46
|
-
import accordionMd from
|
|
47
|
-
import alertMd from
|
|
48
|
-
import
|
|
49
|
-
import
|
|
50
|
-
import
|
|
51
|
-
import
|
|
52
|
-
import
|
|
53
|
-
import
|
|
54
|
-
import
|
|
55
|
-
import
|
|
56
|
-
import
|
|
57
|
-
import
|
|
58
|
-
import
|
|
59
|
-
import
|
|
60
|
-
import
|
|
61
|
-
import
|
|
62
|
-
import
|
|
63
|
-
import
|
|
64
|
-
import
|
|
65
|
-
import
|
|
66
|
-
import
|
|
67
|
-
import
|
|
68
|
-
import
|
|
69
|
-
import
|
|
70
|
-
import
|
|
71
|
-
import
|
|
72
|
-
import
|
|
73
|
-
import
|
|
74
|
-
import
|
|
75
|
-
import
|
|
76
|
-
import
|
|
77
|
-
import
|
|
78
|
-
import
|
|
79
|
-
import
|
|
80
|
-
import
|
|
81
|
-
import
|
|
82
|
-
import
|
|
83
|
-
import
|
|
84
|
-
import
|
|
85
|
-
import
|
|
86
|
-
import
|
|
87
|
-
import
|
|
88
|
-
import
|
|
89
|
-
import
|
|
90
|
-
import
|
|
91
|
-
import
|
|
92
|
-
import
|
|
93
|
-
import
|
|
94
|
-
import
|
|
95
|
-
import
|
|
96
|
-
import
|
|
97
|
-
import
|
|
98
|
-
import
|
|
99
|
-
import toggleMd from './content/toggle.md?raw'
|
|
100
|
-
import toggleGroupMd from './content/toggle-group.md?raw'
|
|
101
|
-
import tooltipMd from './content/tooltip.md?raw'
|
|
102
|
-
import truncateMd from './content/truncate.md?raw'
|
|
48
|
+
import accordionMd from "./content/accordion.md?raw";
|
|
49
|
+
import alertMd from "./content/alert.md?raw";
|
|
50
|
+
import aspectRatioMd from "./content/aspect-ratio.md?raw";
|
|
51
|
+
import avatarMd from "./content/avatar.md?raw";
|
|
52
|
+
import badgeMd from "./content/badge.md?raw";
|
|
53
|
+
import dotMd from "./content/dot.md?raw";
|
|
54
|
+
import dockMd from "./content/dock.md?raw";
|
|
55
|
+
import breadcrumbMd from "./content/breadcrumb.md?raw";
|
|
56
|
+
import buttonMd from "./content/button.md?raw";
|
|
57
|
+
import calendarMd from "./content/calendar.md?raw";
|
|
58
|
+
import cardMd from "./content/card.md?raw";
|
|
59
|
+
import metricCardMd from "./content/metric-card.md?raw";
|
|
60
|
+
import carouselMd from "./content/carousel.md?raw";
|
|
61
|
+
import askMd from "./content/ask.md?raw";
|
|
62
|
+
import chatMd from "./content/chat.md?raw";
|
|
63
|
+
import checkboxMd from "./content/checkbox.md?raw";
|
|
64
|
+
import collapsibleMd from "./content/collapsible.md?raw";
|
|
65
|
+
import iconPickerMd from "./content/icon-picker.md?raw";
|
|
66
|
+
import commandMd from "./content/command.md?raw";
|
|
67
|
+
import composerMd from "./content/composer.md?raw";
|
|
68
|
+
import copyableMd from "./content/copyable.md?raw";
|
|
69
|
+
import dialogMd from "./content/dialog.md?raw";
|
|
70
|
+
import detailMd from "./content/detail.md?raw";
|
|
71
|
+
import dictionaryValueMd from "./content/dictionary-value.md?raw";
|
|
72
|
+
import emptyValueMd from "./content/empty-value.md?raw";
|
|
73
|
+
import drawerMd from "./content/drawer.md?raw";
|
|
74
|
+
import menuMd from "./content/menu.md?raw";
|
|
75
|
+
import emptyMd from "./content/empty.md?raw";
|
|
76
|
+
import fieldMd from "./content/field.md?raw";
|
|
77
|
+
import inputMd from "./content/input.md?raw";
|
|
78
|
+
import inputOtpMd from "./content/input-otp.md?raw";
|
|
79
|
+
import itemMd from "./content/item.md?raw";
|
|
80
|
+
import kbdMd from "./content/kbd.md?raw";
|
|
81
|
+
import labelMd from "./content/label.md?raw";
|
|
82
|
+
import markdownMd from "./content/markdown.md?raw";
|
|
83
|
+
import paginationMd from "./content/pagination.md?raw";
|
|
84
|
+
import popoverMd from "./content/popover.md?raw";
|
|
85
|
+
import progressMd from "./content/progress.md?raw";
|
|
86
|
+
import radioGroupMd from "./content/radio-group.md?raw";
|
|
87
|
+
import scrollAreaMd from "./content/scroll-area.md?raw";
|
|
88
|
+
import selectMd from "./content/select.md?raw";
|
|
89
|
+
import separatorMd from "./content/separator.md?raw";
|
|
90
|
+
import skeletonMd from "./content/skeleton.md?raw";
|
|
91
|
+
import sliderMd from "./content/slider.md?raw";
|
|
92
|
+
import spinnerMd from "./content/spinner.md?raw";
|
|
93
|
+
import switchMd from "./content/switch.md?raw";
|
|
94
|
+
import tableMd from "./content/table.md?raw";
|
|
95
|
+
import tabsMd from "./content/tabs.md?raw";
|
|
96
|
+
import textareaMd from "./content/textarea.md?raw";
|
|
97
|
+
import toastMd from "./content/toast.md?raw";
|
|
98
|
+
import toggleMd from "./content/toggle.md?raw";
|
|
99
|
+
import tooltipMd from "./content/tooltip.md?raw";
|
|
100
|
+
import truncateMd from "./content/truncate.md?raw";
|
|
103
101
|
|
|
104
102
|
// — Patterns (markdown + palco doc-client injetado no scope dos previews) —
|
|
105
103
|
import {
|
|
@@ -110,37 +108,40 @@ import {
|
|
|
110
108
|
docWorkspaceList,
|
|
111
109
|
docWorkspaceStatus,
|
|
112
110
|
docWorkspaceView,
|
|
113
|
-
} from
|
|
114
|
-
import actionFormMd from
|
|
115
|
-
import actionFormDialogMd from
|
|
116
|
-
import actionFormCardMd from
|
|
117
|
-
import actionSearchMd from
|
|
118
|
-
import actionViewMd from
|
|
119
|
-
import actionTriggerMd from
|
|
120
|
-
import actionSearchDialogMd from
|
|
121
|
-
import pageMd from
|
|
122
|
-
import
|
|
123
|
-
import
|
|
124
|
-
import
|
|
125
|
-
import
|
|
111
|
+
} from "./doc-client";
|
|
112
|
+
import actionFormMd from "./content/action-form.md?raw";
|
|
113
|
+
import actionFormDialogMd from "./content/action-form-dialog.md?raw";
|
|
114
|
+
import actionFormCardMd from "./content/action-form-card.md?raw";
|
|
115
|
+
import actionSearchMd from "./content/action-list.md?raw";
|
|
116
|
+
import actionViewMd from "./content/action-view.md?raw";
|
|
117
|
+
import actionTriggerMd from "./content/action-trigger.md?raw";
|
|
118
|
+
import actionSearchDialogMd from "./content/action-list-dialog.md?raw";
|
|
119
|
+
import pageMd from "./content/page.md?raw";
|
|
120
|
+
import contentMd from "./content/content.md?raw";
|
|
121
|
+
import sidebarMd from "./content/sidebar.md?raw";
|
|
122
|
+
import splitMd from "./content/split.md?raw";
|
|
123
|
+
import routerMd from "./content/router.md?raw";
|
|
124
|
+
import dataStateMd from "./content/data-state.md?raw";
|
|
126
125
|
|
|
127
126
|
export interface DocEntry {
|
|
128
|
-
slug: string
|
|
129
|
-
title: string
|
|
127
|
+
slug: string;
|
|
128
|
+
title: string;
|
|
130
129
|
/** Tag técnica opcional exibida na nav ao lado do título — o subpath do SDK (ex.: 'auth'). */
|
|
131
|
-
badge?: string
|
|
132
|
-
render: () => React.ReactElement
|
|
130
|
+
badge?: string;
|
|
131
|
+
render: () => React.ReactElement;
|
|
133
132
|
}
|
|
134
133
|
|
|
135
134
|
export interface DocGroup {
|
|
136
135
|
/** Sub-rótulo opcional dentro da seção (ex.: Primitivos). Ausente = páginas direto na seção. */
|
|
137
|
-
label?: string
|
|
138
|
-
|
|
136
|
+
label?: string;
|
|
137
|
+
/** Ícone opcional apresentado no nó expansível do grupo. */
|
|
138
|
+
icon?: React.ReactNode;
|
|
139
|
+
pages: DocEntry[];
|
|
139
140
|
}
|
|
140
141
|
|
|
141
142
|
export interface DocSection {
|
|
142
|
-
label: string
|
|
143
|
-
groups: DocGroup[]
|
|
143
|
+
label: string;
|
|
144
|
+
groups: DocGroup[];
|
|
144
145
|
}
|
|
145
146
|
|
|
146
147
|
/**
|
|
@@ -154,10 +155,12 @@ export interface DocSection {
|
|
|
154
155
|
// precisar, entra por alias no scope do chamador.
|
|
155
156
|
const iconScope: Record<string, unknown> = Object.fromEntries(
|
|
156
157
|
Object.entries(lucideIcons).filter(([name]) => !(name in opusUi)),
|
|
157
|
-
)
|
|
158
|
+
);
|
|
158
159
|
|
|
159
160
|
/** Página conceitual (Começar/Framework/Design/Intro): markdown direto (o H1/lead moram no md). */
|
|
160
|
-
const doc = (content: string) => (): React.ReactElement =>
|
|
161
|
+
const doc = (content: string) => (): React.ReactElement => (
|
|
162
|
+
<DocMarkdown content={content} scope={iconScope} />
|
|
163
|
+
);
|
|
161
164
|
|
|
162
165
|
/**
|
|
163
166
|
* Página de componente: o cabeçalho (título + badge de origem + whenToUse) vem do `meta` central
|
|
@@ -170,9 +173,9 @@ const comp =
|
|
|
170
173
|
<DocPage title={title} meta={componentMeta[key]}>
|
|
171
174
|
<DocMarkdown content={content} scope={iconScope} />
|
|
172
175
|
</DocPage>
|
|
173
|
-
)
|
|
176
|
+
);
|
|
174
177
|
|
|
175
|
-
/** O palco dos patterns no scope dos previews: ícones
|
|
178
|
+
/** O palco dos patterns no scope dos previews: ícones, cliente simulado e contratos de exemplo. */
|
|
176
179
|
const patternScope = {
|
|
177
180
|
...iconScope,
|
|
178
181
|
DocBrowserActionProvider,
|
|
@@ -182,7 +185,7 @@ const patternScope = {
|
|
|
182
185
|
docWorkspaceView,
|
|
183
186
|
docSessionArchive,
|
|
184
187
|
docSessionDelete,
|
|
185
|
-
}
|
|
188
|
+
};
|
|
186
189
|
|
|
187
190
|
/** Página de pattern: igual ao `comp`, mas os previews enxergam o palco doc-client no scope. */
|
|
188
191
|
const pattern =
|
|
@@ -191,18 +194,20 @@ const pattern =
|
|
|
191
194
|
<DocPage title={title} meta={componentMeta[key]}>
|
|
192
195
|
<DocMarkdown content={content} scope={patternScope} />
|
|
193
196
|
</DocPage>
|
|
194
|
-
)
|
|
197
|
+
);
|
|
195
198
|
|
|
196
199
|
/** Entrada 'UI' do Docs: a UI é um recurso do MESMO SDK, mas mora na superfície `/ui` (o
|
|
197
200
|
* catálogo é grande e visual). Em vez de duplicar, a página redireciona pra lá. */
|
|
198
201
|
function UiRedirect(): React.ReactElement {
|
|
199
202
|
useEffect(() => {
|
|
200
|
-
if (typeof window ===
|
|
203
|
+
if (typeof window === "undefined") return;
|
|
201
204
|
// `replace`: um redirect não merece uma entrada no histórico — com `push`, o "voltar"
|
|
202
205
|
// cairia aqui de novo e redirecionaria outra vez.
|
|
203
|
-
navigate(
|
|
204
|
-
}, [])
|
|
205
|
-
return
|
|
206
|
+
navigate("/ui", { replace: true });
|
|
207
|
+
}, []);
|
|
208
|
+
return (
|
|
209
|
+
<p className="text-sm text-muted-foreground">Redirecionando para a UI…</p>
|
|
210
|
+
);
|
|
206
211
|
}
|
|
207
212
|
|
|
208
213
|
/** As seções da doc do SDK (surface `/docs` do site). "Começar" fica na RAIZ (seção sem
|
|
@@ -210,13 +215,21 @@ function UiRedirect(): React.ReactElement {
|
|
|
210
215
|
export const PROTOCOL_SECTIONS: DocSection[] = [
|
|
211
216
|
{
|
|
212
217
|
// Sem label → páginas soltas no topo do menu (sem cabeçalho de seção).
|
|
213
|
-
label:
|
|
218
|
+
label: "",
|
|
214
219
|
groups: [
|
|
215
220
|
{
|
|
216
221
|
pages: [
|
|
217
|
-
{
|
|
218
|
-
|
|
219
|
-
|
|
222
|
+
{
|
|
223
|
+
slug: "getting-started",
|
|
224
|
+
title: "Getting started",
|
|
225
|
+
render: doc(gettingStartedMd),
|
|
226
|
+
},
|
|
227
|
+
{ slug: "cycle", title: "Evolução contínua", render: doc(cycleMd) },
|
|
228
|
+
{
|
|
229
|
+
slug: "upgrading",
|
|
230
|
+
title: "Atualizar a base",
|
|
231
|
+
render: doc(upgradingMd),
|
|
232
|
+
},
|
|
220
233
|
],
|
|
221
234
|
},
|
|
222
235
|
],
|
|
@@ -224,15 +237,27 @@ export const PROTOCOL_SECTIONS: DocSection[] = [
|
|
|
224
237
|
{
|
|
225
238
|
// O núcleo invariante do protocolo — uma página por recurso. Opus é protocolo + peças
|
|
226
239
|
// opcionais entregues como SDK (não Framework: a inversão de controle é do app).
|
|
227
|
-
label:
|
|
240
|
+
label: "Protocolo",
|
|
228
241
|
groups: [
|
|
229
242
|
{
|
|
230
243
|
pages: [
|
|
231
|
-
{
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
244
|
+
{
|
|
245
|
+
slug: "actions",
|
|
246
|
+
title: "Actions & contratos",
|
|
247
|
+
render: doc(actionsMd),
|
|
248
|
+
},
|
|
249
|
+
{
|
|
250
|
+
slug: "runtime",
|
|
251
|
+
title: "Runtime & adapters",
|
|
252
|
+
render: doc(runtimeMd),
|
|
253
|
+
},
|
|
254
|
+
{ slug: "data", title: "Camada de dados", render: doc(dataMd) },
|
|
255
|
+
{
|
|
256
|
+
slug: "testing",
|
|
257
|
+
title: "Testes de action",
|
|
258
|
+
render: doc(testingMd),
|
|
259
|
+
},
|
|
260
|
+
{ slug: "cli", title: "CLI opus", render: doc(cliMd) },
|
|
236
261
|
],
|
|
237
262
|
},
|
|
238
263
|
],
|
|
@@ -240,171 +265,490 @@ export const PROTOCOL_SECTIONS: DocSection[] = [
|
|
|
240
265
|
{
|
|
241
266
|
// As peças OPT-IN que você liga (adapter + driver). A UI também é recurso do SDK, mas
|
|
242
267
|
// com catálogo próprio — a entrada 'ui' redireciona pra superfície /ui.
|
|
243
|
-
label:
|
|
268
|
+
label: "Recursos",
|
|
244
269
|
groups: [
|
|
245
270
|
{
|
|
246
271
|
pages: [
|
|
247
|
-
{
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
{
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
272
|
+
{
|
|
273
|
+
slug: "auth",
|
|
274
|
+
title: "Autenticação",
|
|
275
|
+
badge: "auth",
|
|
276
|
+
render: doc(authMd),
|
|
277
|
+
},
|
|
278
|
+
{
|
|
279
|
+
slug: "audit",
|
|
280
|
+
title: "Auditoria",
|
|
281
|
+
badge: "audit",
|
|
282
|
+
render: doc(auditMd),
|
|
283
|
+
},
|
|
284
|
+
{
|
|
285
|
+
slug: "events",
|
|
286
|
+
title: "Eventos",
|
|
287
|
+
badge: "events",
|
|
288
|
+
render: doc(eventsMd),
|
|
289
|
+
},
|
|
290
|
+
{ slug: "log", title: "Log", badge: "log", render: doc(logMd) },
|
|
291
|
+
{
|
|
292
|
+
slug: "observability",
|
|
293
|
+
title: "Observabilidade",
|
|
294
|
+
badge: "observability",
|
|
295
|
+
render: doc(observabilityMd),
|
|
296
|
+
},
|
|
297
|
+
{
|
|
298
|
+
slug: "queue",
|
|
299
|
+
title: "Filas",
|
|
300
|
+
badge: "queue",
|
|
301
|
+
render: doc(queueMd),
|
|
302
|
+
},
|
|
303
|
+
{
|
|
304
|
+
slug: "scheduler",
|
|
305
|
+
title: "Agendador",
|
|
306
|
+
badge: "scheduler",
|
|
307
|
+
render: doc(schedulerMd),
|
|
308
|
+
},
|
|
309
|
+
{
|
|
310
|
+
slug: "storage",
|
|
311
|
+
title: "Armazenamento",
|
|
312
|
+
badge: "storage",
|
|
313
|
+
render: doc(storageMd),
|
|
314
|
+
},
|
|
315
|
+
{
|
|
316
|
+
slug: "ai",
|
|
317
|
+
title: "IA generativa",
|
|
318
|
+
badge: "ai",
|
|
319
|
+
render: doc(aiMd),
|
|
320
|
+
},
|
|
321
|
+
{ slug: "mcp", title: "MCP", badge: "mcp", render: doc(mcpMd) },
|
|
322
|
+
{ slug: "ui", title: "UI ↗", render: () => <UiRedirect /> },
|
|
257
323
|
],
|
|
258
324
|
},
|
|
259
325
|
],
|
|
260
326
|
},
|
|
261
|
-
]
|
|
327
|
+
];
|
|
262
328
|
|
|
263
329
|
/** As seções da parte de UI do SDK (`/ui`): consumo, design, catálogo de componentes e
|
|
264
330
|
* patterns. Mesma família das seções de protocolo — superfície própria só pelo volume. */
|
|
265
331
|
export const UI_SECTIONS: DocSection[] = [
|
|
266
332
|
{
|
|
267
333
|
// Raiz (sem label): o "getting started" da UI.
|
|
268
|
-
label:
|
|
269
|
-
groups: [
|
|
334
|
+
label: "",
|
|
335
|
+
groups: [
|
|
336
|
+
{
|
|
337
|
+
pages: [
|
|
338
|
+
{
|
|
339
|
+
slug: "como-consumir",
|
|
340
|
+
title: "Getting started",
|
|
341
|
+
render: doc(uiMd),
|
|
342
|
+
},
|
|
343
|
+
],
|
|
344
|
+
},
|
|
345
|
+
],
|
|
270
346
|
},
|
|
271
347
|
{
|
|
272
|
-
label:
|
|
348
|
+
label: "Design",
|
|
273
349
|
groups: [
|
|
274
350
|
{
|
|
275
351
|
pages: [
|
|
276
|
-
{ slug:
|
|
277
|
-
{
|
|
278
|
-
|
|
352
|
+
{ slug: "tokens", title: "Tokens & Tema", render: doc(tokensMd) },
|
|
353
|
+
{
|
|
354
|
+
slug: "semantic-context",
|
|
355
|
+
title: "Contexto & Variante",
|
|
356
|
+
render: doc(semanticContextMd),
|
|
357
|
+
},
|
|
358
|
+
{
|
|
359
|
+
slug: "communication",
|
|
360
|
+
title: "Comunicação",
|
|
361
|
+
render: doc(communicationMd),
|
|
362
|
+
},
|
|
363
|
+
{
|
|
364
|
+
slug: "customization",
|
|
365
|
+
title: "Customização",
|
|
366
|
+
render: doc(customizationMd),
|
|
367
|
+
},
|
|
279
368
|
],
|
|
280
369
|
},
|
|
281
370
|
],
|
|
282
371
|
},
|
|
283
372
|
{
|
|
284
|
-
label:
|
|
373
|
+
label: "Componentes",
|
|
285
374
|
groups: [
|
|
286
375
|
{
|
|
287
|
-
label:
|
|
376
|
+
label: "Fundamentos",
|
|
377
|
+
icon: <lucideIcons.Blocks className="size-4" />,
|
|
288
378
|
pages: [
|
|
289
|
-
{
|
|
379
|
+
{
|
|
380
|
+
slug: "router",
|
|
381
|
+
title: "Router",
|
|
382
|
+
render: pattern("Router", "router", routerMd),
|
|
383
|
+
},
|
|
290
384
|
],
|
|
291
385
|
},
|
|
292
386
|
{
|
|
293
|
-
label:
|
|
387
|
+
label: "Layout",
|
|
388
|
+
icon: <lucideIcons.PanelsTopLeft className="size-4" />,
|
|
294
389
|
pages: [
|
|
295
|
-
{
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
{
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
390
|
+
{
|
|
391
|
+
slug: "split",
|
|
392
|
+
title: "Split & Pane",
|
|
393
|
+
render: pattern("Split & Pane", "split", splitMd),
|
|
394
|
+
},
|
|
395
|
+
{
|
|
396
|
+
slug: "sidebar",
|
|
397
|
+
title: "Sidebar",
|
|
398
|
+
render: pattern("Sidebar", "sidebar", sidebarMd),
|
|
399
|
+
},
|
|
400
|
+
{
|
|
401
|
+
slug: "page",
|
|
402
|
+
title: "Page",
|
|
403
|
+
render: pattern("Page", "page", pageMd),
|
|
404
|
+
},
|
|
405
|
+
{
|
|
406
|
+
slug: "content",
|
|
407
|
+
title: "Content",
|
|
408
|
+
render: pattern("Content", "content", contentMd),
|
|
409
|
+
},
|
|
410
|
+
{
|
|
411
|
+
slug: "accordion",
|
|
412
|
+
title: "Accordion",
|
|
413
|
+
render: comp("Accordion", "accordion", accordionMd),
|
|
414
|
+
},
|
|
415
|
+
{
|
|
416
|
+
slug: "aspect-ratio",
|
|
417
|
+
title: "Aspect Ratio",
|
|
418
|
+
render: comp("Aspect Ratio", "aspect-ratio", aspectRatioMd),
|
|
419
|
+
},
|
|
420
|
+
{ slug: "card", title: "Card", render: comp("Card", "card", cardMd) },
|
|
421
|
+
{
|
|
422
|
+
slug: "metric-card",
|
|
423
|
+
title: "Metric Card",
|
|
424
|
+
render: comp("Metric Card", "metric-card", metricCardMd),
|
|
425
|
+
},
|
|
426
|
+
{
|
|
427
|
+
slug: "collapsible",
|
|
428
|
+
title: "Collapsible",
|
|
429
|
+
render: comp("Collapsible", "collapsible", collapsibleMd),
|
|
430
|
+
},
|
|
431
|
+
{
|
|
432
|
+
slug: "scroll-area",
|
|
433
|
+
title: "Scroll Area",
|
|
434
|
+
render: comp("Scroll Area", "scroll-area", scrollAreaMd),
|
|
435
|
+
},
|
|
436
|
+
{
|
|
437
|
+
slug: "separator",
|
|
438
|
+
title: "Separator",
|
|
439
|
+
render: comp("Separator", "separator", separatorMd),
|
|
440
|
+
},
|
|
304
441
|
],
|
|
305
442
|
},
|
|
306
443
|
{
|
|
307
|
-
label:
|
|
444
|
+
label: "Actions",
|
|
445
|
+
icon: <lucideIcons.Zap className="size-4" />,
|
|
308
446
|
pages: [
|
|
309
|
-
{
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
{
|
|
315
|
-
|
|
447
|
+
{
|
|
448
|
+
slug: "action-form",
|
|
449
|
+
title: "Action Form",
|
|
450
|
+
render: pattern("Action Form", "action-form", actionFormMd),
|
|
451
|
+
},
|
|
452
|
+
{
|
|
453
|
+
slug: "action-form-card",
|
|
454
|
+
title: "Action Form Card",
|
|
455
|
+
render: pattern(
|
|
456
|
+
"Action Form Card",
|
|
457
|
+
"action-form-card",
|
|
458
|
+
actionFormCardMd,
|
|
459
|
+
),
|
|
460
|
+
},
|
|
461
|
+
{
|
|
462
|
+
slug: "action-form-dialog",
|
|
463
|
+
title: "Action Form Dialog",
|
|
464
|
+
render: pattern(
|
|
465
|
+
"Action Form Dialog",
|
|
466
|
+
"action-form-dialog",
|
|
467
|
+
actionFormDialogMd,
|
|
468
|
+
),
|
|
469
|
+
},
|
|
470
|
+
{
|
|
471
|
+
slug: "action-list",
|
|
472
|
+
title: "Action List",
|
|
473
|
+
render: pattern("Action List", "action-list", actionSearchMd),
|
|
474
|
+
},
|
|
475
|
+
{
|
|
476
|
+
slug: "action-list-dialog",
|
|
477
|
+
title: "Action List Dialog",
|
|
478
|
+
render: pattern(
|
|
479
|
+
"Action List Dialog",
|
|
480
|
+
"action-list-dialog",
|
|
481
|
+
actionSearchDialogMd,
|
|
482
|
+
),
|
|
483
|
+
},
|
|
484
|
+
{
|
|
485
|
+
slug: "action-trigger",
|
|
486
|
+
title: "Action Trigger",
|
|
487
|
+
render: pattern(
|
|
488
|
+
"Action Trigger",
|
|
489
|
+
"action-trigger",
|
|
490
|
+
actionTriggerMd,
|
|
491
|
+
),
|
|
492
|
+
},
|
|
493
|
+
{
|
|
494
|
+
slug: "action-view",
|
|
495
|
+
title: "Action View",
|
|
496
|
+
render: pattern("Action View", "action-view", actionViewMd),
|
|
497
|
+
},
|
|
316
498
|
],
|
|
317
499
|
},
|
|
318
500
|
{
|
|
319
|
-
label:
|
|
501
|
+
label: "IA",
|
|
502
|
+
icon: <lucideIcons.Sparkles className="size-4" />,
|
|
320
503
|
pages: [
|
|
321
|
-
{ slug:
|
|
322
|
-
{ slug:
|
|
323
|
-
{
|
|
504
|
+
{ slug: "ask", title: "Ask", render: comp("Ask", "ask", askMd) },
|
|
505
|
+
{ slug: "chat", title: "Chat", render: comp("Chat", "chat", chatMd) },
|
|
506
|
+
{
|
|
507
|
+
slug: "composer",
|
|
508
|
+
title: "Composer",
|
|
509
|
+
render: comp("Composer", "composer", composerMd),
|
|
510
|
+
},
|
|
324
511
|
],
|
|
325
512
|
},
|
|
326
513
|
{
|
|
327
|
-
label:
|
|
514
|
+
label: "Formulário",
|
|
515
|
+
icon: <lucideIcons.TextCursorInput className="size-4" />,
|
|
328
516
|
pages: [
|
|
329
|
-
{
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
{
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
{
|
|
340
|
-
|
|
341
|
-
|
|
517
|
+
{
|
|
518
|
+
slug: "calendar",
|
|
519
|
+
title: "Calendar",
|
|
520
|
+
render: comp("Calendar", "calendar", calendarMd),
|
|
521
|
+
},
|
|
522
|
+
{
|
|
523
|
+
slug: "checkbox",
|
|
524
|
+
title: "Checkbox",
|
|
525
|
+
render: comp("Checkbox", "checkbox", checkboxMd),
|
|
526
|
+
},
|
|
527
|
+
{
|
|
528
|
+
slug: "field",
|
|
529
|
+
title: "Field",
|
|
530
|
+
render: comp("Field", "field", fieldMd),
|
|
531
|
+
},
|
|
532
|
+
{
|
|
533
|
+
slug: "icon-picker",
|
|
534
|
+
title: "Icon Picker",
|
|
535
|
+
render: comp("Icon Picker", "icon-picker", iconPickerMd),
|
|
536
|
+
},
|
|
537
|
+
{
|
|
538
|
+
slug: "input",
|
|
539
|
+
title: "Input",
|
|
540
|
+
render: comp("Input", "input", inputMd),
|
|
541
|
+
},
|
|
542
|
+
{
|
|
543
|
+
slug: "input-otp",
|
|
544
|
+
title: "Input OTP",
|
|
545
|
+
render: comp("Input OTP", "input-otp", inputOtpMd),
|
|
546
|
+
},
|
|
547
|
+
{
|
|
548
|
+
slug: "label",
|
|
549
|
+
title: "Label",
|
|
550
|
+
render: comp("Label", "label", labelMd),
|
|
551
|
+
},
|
|
552
|
+
{
|
|
553
|
+
slug: "radio-group",
|
|
554
|
+
title: "Radio Group",
|
|
555
|
+
render: comp("Radio Group", "radio-group", radioGroupMd),
|
|
556
|
+
},
|
|
557
|
+
{
|
|
558
|
+
slug: "select",
|
|
559
|
+
title: "Select",
|
|
560
|
+
render: comp("Select", "select", selectMd),
|
|
561
|
+
},
|
|
562
|
+
{
|
|
563
|
+
slug: "slider",
|
|
564
|
+
title: "Slider",
|
|
565
|
+
render: comp("Slider", "slider", sliderMd),
|
|
566
|
+
},
|
|
567
|
+
{
|
|
568
|
+
slug: "switch",
|
|
569
|
+
title: "Switch",
|
|
570
|
+
render: comp("Switch", "switch", switchMd),
|
|
571
|
+
},
|
|
572
|
+
{
|
|
573
|
+
slug: "textarea",
|
|
574
|
+
title: "Textarea",
|
|
575
|
+
render: comp("Textarea", "textarea", textareaMd),
|
|
576
|
+
},
|
|
342
577
|
],
|
|
343
578
|
},
|
|
344
579
|
{
|
|
345
|
-
label:
|
|
580
|
+
label: "Botões",
|
|
581
|
+
icon: <lucideIcons.MousePointerClick className="size-4" />,
|
|
346
582
|
pages: [
|
|
347
|
-
{
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
583
|
+
{
|
|
584
|
+
slug: "button",
|
|
585
|
+
title: "Button",
|
|
586
|
+
render: comp("Button", "button", buttonMd),
|
|
587
|
+
},
|
|
588
|
+
{
|
|
589
|
+
slug: "toggle",
|
|
590
|
+
title: "Toggle",
|
|
591
|
+
render: comp("Toggle", "toggle", toggleMd),
|
|
592
|
+
},
|
|
351
593
|
],
|
|
352
594
|
},
|
|
353
595
|
{
|
|
354
|
-
label:
|
|
596
|
+
label: "Navegação",
|
|
597
|
+
icon: <lucideIcons.Compass className="size-4" />,
|
|
355
598
|
pages: [
|
|
356
|
-
{
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
599
|
+
{
|
|
600
|
+
slug: "breadcrumb",
|
|
601
|
+
title: "Breadcrumb",
|
|
602
|
+
render: comp("Breadcrumb", "breadcrumb", breadcrumbMd),
|
|
603
|
+
},
|
|
604
|
+
{
|
|
605
|
+
slug: "command",
|
|
606
|
+
title: "Command",
|
|
607
|
+
render: comp("Command", "command", commandMd),
|
|
608
|
+
},
|
|
609
|
+
{
|
|
610
|
+
slug: "pagination",
|
|
611
|
+
title: "Pagination",
|
|
612
|
+
render: comp("Pagination", "pagination", paginationMd),
|
|
613
|
+
},
|
|
614
|
+
{ slug: "tabs", title: "Tabs", render: comp("Tabs", "tabs", tabsMd) },
|
|
360
615
|
],
|
|
361
616
|
},
|
|
362
617
|
{
|
|
363
|
-
label:
|
|
618
|
+
label: "Exibição",
|
|
619
|
+
icon: <lucideIcons.Eye className="size-4" />,
|
|
364
620
|
pages: [
|
|
365
|
-
{
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
{
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
{ slug:
|
|
376
|
-
{ slug:
|
|
377
|
-
{
|
|
378
|
-
|
|
621
|
+
{
|
|
622
|
+
slug: "avatar",
|
|
623
|
+
title: "Avatar",
|
|
624
|
+
render: comp("Avatar", "avatar", avatarMd),
|
|
625
|
+
},
|
|
626
|
+
{
|
|
627
|
+
slug: "badge",
|
|
628
|
+
title: "Badge",
|
|
629
|
+
render: comp("Badge", "badge", badgeMd),
|
|
630
|
+
},
|
|
631
|
+
{ slug: "dot", title: "Dot", render: comp("Dot", "dot", dotMd) },
|
|
632
|
+
{ slug: "dock", title: "Dock", render: comp("Dock", "dock", dockMd) },
|
|
633
|
+
{
|
|
634
|
+
slug: "carousel",
|
|
635
|
+
title: "Carousel",
|
|
636
|
+
render: comp("Carousel", "carousel", carouselMd),
|
|
637
|
+
},
|
|
638
|
+
{
|
|
639
|
+
slug: "copyable",
|
|
640
|
+
title: "Copyable",
|
|
641
|
+
render: comp("Copyable", "copyable", copyableMd),
|
|
642
|
+
},
|
|
643
|
+
{
|
|
644
|
+
slug: "detail",
|
|
645
|
+
title: "Detail",
|
|
646
|
+
render: comp("Detail", "detail", detailMd),
|
|
647
|
+
},
|
|
648
|
+
{
|
|
649
|
+
slug: "dictionary-value",
|
|
650
|
+
title: "Dictionary Value",
|
|
651
|
+
render: comp(
|
|
652
|
+
"Dictionary Value",
|
|
653
|
+
"dictionary-value",
|
|
654
|
+
dictionaryValueMd,
|
|
655
|
+
),
|
|
656
|
+
},
|
|
657
|
+
{
|
|
658
|
+
slug: "empty-value",
|
|
659
|
+
title: "Empty Value",
|
|
660
|
+
render: comp("Empty Value", "empty-value", emptyValueMd),
|
|
661
|
+
},
|
|
662
|
+
{ slug: "item", title: "Item", render: comp("Item", "item", itemMd) },
|
|
663
|
+
{ slug: "kbd", title: "Kbd", render: comp("Kbd", "kbd", kbdMd) },
|
|
664
|
+
{
|
|
665
|
+
slug: "markdown",
|
|
666
|
+
title: "Markdown",
|
|
667
|
+
render: comp("Markdown", "markdown", markdownMd),
|
|
668
|
+
},
|
|
669
|
+
{
|
|
670
|
+
slug: "table",
|
|
671
|
+
title: "Table",
|
|
672
|
+
render: comp("Table", "table", tableMd),
|
|
673
|
+
},
|
|
674
|
+
{
|
|
675
|
+
slug: "truncate",
|
|
676
|
+
title: "Truncate",
|
|
677
|
+
render: comp("Truncate", "truncate", truncateMd),
|
|
678
|
+
},
|
|
379
679
|
],
|
|
380
680
|
},
|
|
381
681
|
{
|
|
382
|
-
label:
|
|
682
|
+
label: "Feedback",
|
|
683
|
+
icon: <lucideIcons.MessageCircleWarning className="size-4" />,
|
|
383
684
|
pages: [
|
|
384
|
-
{
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
{
|
|
390
|
-
|
|
391
|
-
|
|
685
|
+
{
|
|
686
|
+
slug: "alert",
|
|
687
|
+
title: "Alert",
|
|
688
|
+
render: comp("Alert", "alert", alertMd),
|
|
689
|
+
},
|
|
690
|
+
{
|
|
691
|
+
slug: "data-state",
|
|
692
|
+
title: "Data State",
|
|
693
|
+
render: comp("Data State", "data-state", dataStateMd),
|
|
694
|
+
},
|
|
695
|
+
{
|
|
696
|
+
slug: "empty",
|
|
697
|
+
title: "Empty",
|
|
698
|
+
render: comp("Empty", "empty", emptyMd),
|
|
699
|
+
},
|
|
700
|
+
{
|
|
701
|
+
slug: "progress",
|
|
702
|
+
title: "Progress",
|
|
703
|
+
render: comp("Progress", "progress", progressMd),
|
|
704
|
+
},
|
|
705
|
+
{
|
|
706
|
+
slug: "skeleton",
|
|
707
|
+
title: "Skeleton",
|
|
708
|
+
render: comp("Skeleton", "skeleton", skeletonMd),
|
|
709
|
+
},
|
|
710
|
+
{
|
|
711
|
+
slug: "spinner",
|
|
712
|
+
title: "Spinner",
|
|
713
|
+
render: comp("Spinner", "spinner", spinnerMd),
|
|
714
|
+
},
|
|
715
|
+
{
|
|
716
|
+
slug: "toast",
|
|
717
|
+
title: "Toast",
|
|
718
|
+
render: comp("Toast", "toast", toastMd),
|
|
719
|
+
},
|
|
392
720
|
],
|
|
393
721
|
},
|
|
394
722
|
{
|
|
395
|
-
label:
|
|
723
|
+
label: "Sobreposição",
|
|
724
|
+
icon: <lucideIcons.Layers className="size-4" />,
|
|
396
725
|
pages: [
|
|
397
|
-
{
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
{
|
|
726
|
+
{
|
|
727
|
+
slug: "dialog",
|
|
728
|
+
title: "Dialog",
|
|
729
|
+
render: comp("Dialog", "dialog", dialogMd),
|
|
730
|
+
},
|
|
731
|
+
{
|
|
732
|
+
slug: "drawer",
|
|
733
|
+
title: "Drawer",
|
|
734
|
+
render: comp("Drawer", "drawer", drawerMd),
|
|
735
|
+
},
|
|
736
|
+
{ slug: "menu", title: "Menu", render: comp("Menu", "menu", menuMd) },
|
|
737
|
+
{
|
|
738
|
+
slug: "popover",
|
|
739
|
+
title: "Popover",
|
|
740
|
+
render: comp("Popover", "popover", popoverMd),
|
|
741
|
+
},
|
|
742
|
+
{
|
|
743
|
+
slug: "tooltip",
|
|
744
|
+
title: "Tooltip",
|
|
745
|
+
render: comp("Tooltip", "tooltip", tooltipMd),
|
|
746
|
+
},
|
|
403
747
|
],
|
|
404
748
|
},
|
|
405
749
|
],
|
|
406
750
|
},
|
|
407
|
-
]
|
|
751
|
+
];
|
|
408
752
|
|
|
409
753
|
/** O catálogo INTEIRO (compat): Maestro (lente) e `/__docs` mostram tudo numa nav só —
|
|
410
754
|
* inclusive o changelog, que no SITE é página do menu superior (fora destas seções);
|
|
@@ -417,7 +761,11 @@ export const DOC_SECTIONS: DocSection[] = [
|
|
|
417
761
|
{
|
|
418
762
|
pages: [
|
|
419
763
|
...PROTOCOL_SECTIONS[0]!.groups[0]!.pages,
|
|
420
|
-
{
|
|
764
|
+
{
|
|
765
|
+
slug: "changelog",
|
|
766
|
+
title: "Changelog",
|
|
767
|
+
render: () => <OpusChangelog />,
|
|
768
|
+
},
|
|
421
769
|
],
|
|
422
770
|
},
|
|
423
771
|
],
|
|
@@ -426,7 +774,10 @@ export const DOC_SECTIONS: DocSection[] = [
|
|
|
426
774
|
// à parte — então tira a entrada-redirect 'ui' (o catálogo já entra via UI_SECTIONS).
|
|
427
775
|
...PROTOCOL_SECTIONS.slice(1).map((s) => ({
|
|
428
776
|
...s,
|
|
429
|
-
groups: s.groups.map((g) => ({
|
|
777
|
+
groups: s.groups.map((g) => ({
|
|
778
|
+
...g,
|
|
779
|
+
pages: g.pages.filter((p) => p.slug !== "ui"),
|
|
780
|
+
})),
|
|
430
781
|
})),
|
|
431
782
|
...UI_SECTIONS,
|
|
432
|
-
]
|
|
783
|
+
];
|