@teamblind-chorus/ui 1.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/LICENSE +21 -0
- package/README.md +112 -0
- package/agents/AGENTS.md +143 -0
- package/agents/DESIGN.md +1311 -0
- package/agents/LOVABLE.md +472 -0
- package/agents/anti-patterns.md +533 -0
- package/agents/catalog.md +232 -0
- package/agents/components/avatar-rail/avatar-rail.family.json +46 -0
- package/agents/components/avatar-rail/avatar-rail.md +103 -0
- package/agents/components/avatar-rail/avatar-rail.spec.json +160 -0
- package/agents/components/badge/badge.family.json +45 -0
- package/agents/components/badge/badge.md +10 -0
- package/agents/components/badge/role.md +100 -0
- package/agents/components/badge/role.spec.json +75 -0
- package/agents/components/badge/update.md +132 -0
- package/agents/components/badge/update.spec.json +114 -0
- package/agents/components/banner/banner.family.json +28 -0
- package/agents/components/banner/banner.md +136 -0
- package/agents/components/banner/banner.spec.json +136 -0
- package/agents/components/bottom-sheet/bottom-sheet.family.json +29 -0
- package/agents/components/bottom-sheet/bottom-sheet.md +176 -0
- package/agents/components/bottom-sheet/bottom-sheet.spec.json +168 -0
- package/agents/components/bubble/bubble.family.json +29 -0
- package/agents/components/bubble/bubble.md +134 -0
- package/agents/components/bubble/bubble.spec.json +91 -0
- package/agents/components/button/button.family.json +76 -0
- package/agents/components/button/button.md +31 -0
- package/agents/components/button/check.md +138 -0
- package/agents/components/button/check.spec.json +161 -0
- package/agents/components/button/fab.md +161 -0
- package/agents/components/button/fab.spec.json +106 -0
- package/agents/components/button/icon.md +141 -0
- package/agents/components/button/icon.spec.json +164 -0
- package/agents/components/button/standard.md +219 -0
- package/agents/components/button/standard.spec.json +205 -0
- package/agents/components/button/text.md +186 -0
- package/agents/components/button/text.spec.json +215 -0
- package/agents/components/button/toggle.md +108 -0
- package/agents/components/button/toggle.spec.json +124 -0
- package/agents/components/button/toolbar.md +189 -0
- package/agents/components/button/toolbar.spec.json +109 -0
- package/agents/components/carousel/carousel.family.json +41 -0
- package/agents/components/carousel/carousel.md +40 -0
- package/agents/components/carousel/post.md +148 -0
- package/agents/components/carousel/post.spec.json +229 -0
- package/agents/components/carousel/profile.md +184 -0
- package/agents/components/carousel/profile.spec.json +219 -0
- package/agents/components/chip/chip.family.json +37 -0
- package/agents/components/chip/chip.md +10 -0
- package/agents/components/chip/filter.md +212 -0
- package/agents/components/chip/filter.spec.json +124 -0
- package/agents/components/chip/tag.md +137 -0
- package/agents/components/chip/tag.spec.json +104 -0
- package/agents/components/dialog/dialog.family.json +29 -0
- package/agents/components/dialog/dialog.md +113 -0
- package/agents/components/dialog/dialog.spec.json +156 -0
- package/agents/components/directory-list/directory-list.family.json +46 -0
- package/agents/components/directory-list/directory-list.md +87 -0
- package/agents/components/directory-list/directory-list.spec.json +104 -0
- package/agents/components/divider/divider.family.json +28 -0
- package/agents/components/divider/divider.md +78 -0
- package/agents/components/divider/divider.spec.json +51 -0
- package/agents/components/feed/ad.md +108 -0
- package/agents/components/feed/ad.spec.json +187 -0
- package/agents/components/feed/feed.family.json +48 -0
- package/agents/components/feed/feed.md +30 -0
- package/agents/components/feed/post.md +240 -0
- package/agents/components/feed/post.spec.json +361 -0
- package/agents/components/form-field/form-field.family.json +50 -0
- package/agents/components/form-field/form-field.md +11 -0
- package/agents/components/form-field/input.md +198 -0
- package/agents/components/form-field/input.spec.json +202 -0
- package/agents/components/form-field/search.md +81 -0
- package/agents/components/form-field/search.spec.json +135 -0
- package/agents/components/form-field/select.md +101 -0
- package/agents/components/form-field/select.spec.json +194 -0
- package/agents/components/form-field/textarea.md +89 -0
- package/agents/components/form-field/textarea.spec.json +176 -0
- package/agents/components/header/header.family.json +43 -0
- package/agents/components/header/header.md +18 -0
- package/agents/components/header/main.md +101 -0
- package/agents/components/header/main.spec.json +117 -0
- package/agents/components/header/sub.md +129 -0
- package/agents/components/header/sub.spec.json +81 -0
- package/agents/components/list/accordion.md +183 -0
- package/agents/components/list/accordion.spec.json +201 -0
- package/agents/components/list/entry.md +280 -0
- package/agents/components/list/entry.spec.json +237 -0
- package/agents/components/list/list.family.json +75 -0
- package/agents/components/list/list.md +24 -0
- package/agents/components/list/radio.md +144 -0
- package/agents/components/list/radio.spec.json +186 -0
- package/agents/components/list/standard.md +262 -0
- package/agents/components/list/standard.spec.json +221 -0
- package/agents/components/metadata/compact.md +69 -0
- package/agents/components/metadata/compact.spec.json +69 -0
- package/agents/components/metadata/metadata.family.json +42 -0
- package/agents/components/metadata/metadata.md +26 -0
- package/agents/components/metadata/standard.md +104 -0
- package/agents/components/metadata/standard.spec.json +152 -0
- package/agents/components/nav-card/nav-card.family.json +29 -0
- package/agents/components/nav-card/nav-card.md +179 -0
- package/agents/components/nav-card/nav-card.spec.json +161 -0
- package/agents/components/nav-list/nav-list.family.json +46 -0
- package/agents/components/nav-list/nav-list.md +91 -0
- package/agents/components/nav-list/nav-list.spec.json +107 -0
- package/agents/components/navigation-bar/main.md +201 -0
- package/agents/components/navigation-bar/main.spec.json +109 -0
- package/agents/components/navigation-bar/navigation-bar.family.json +44 -0
- package/agents/components/navigation-bar/navigation-bar.md +21 -0
- package/agents/components/navigation-bar/search.md +96 -0
- package/agents/components/navigation-bar/search.spec.json +142 -0
- package/agents/components/navigation-bar/sub.md +174 -0
- package/agents/components/navigation-bar/sub.spec.json +123 -0
- package/agents/components/page-shell/page-shell.family.json +22 -0
- package/agents/components/page-shell/page-shell.md +51 -0
- package/agents/components/profile-header/profile-header.family.json +29 -0
- package/agents/components/profile-header/profile-header.md +149 -0
- package/agents/components/profile-header/profile-header.spec.json +200 -0
- package/agents/components/progress/progress.family.json +27 -0
- package/agents/components/progress/progress.md +38 -0
- package/agents/components/progress/progress.spec.json +67 -0
- package/agents/components/side-sheet/side-sheet.family.json +30 -0
- package/agents/components/side-sheet/side-sheet.md +154 -0
- package/agents/components/side-sheet/side-sheet.spec.json +109 -0
- package/agents/components/skeleton/skeleton.family.json +28 -0
- package/agents/components/skeleton/skeleton.md +123 -0
- package/agents/components/skeleton/skeleton.spec.json +73 -0
- package/agents/components/status-tag/status-tag.family.json +26 -0
- package/agents/components/status-tag/status-tag.md +114 -0
- package/agents/components/status-tag/status-tag.spec.json +69 -0
- package/agents/components/suggestion-list/suggestion-list.family.json +46 -0
- package/agents/components/suggestion-list/suggestion-list.md +91 -0
- package/agents/components/suggestion-list/suggestion-list.spec.json +178 -0
- package/agents/components/switch/switch.family.json +27 -0
- package/agents/components/switch/switch.md +114 -0
- package/agents/components/switch/switch.spec.json +123 -0
- package/agents/components/tab-bar/tab-bar.family.json +27 -0
- package/agents/components/tab-bar/tab-bar.md +178 -0
- package/agents/components/tab-bar/tab-bar.spec.json +184 -0
- package/agents/components/tabs/rounded.md +150 -0
- package/agents/components/tabs/rounded.spec.json +140 -0
- package/agents/components/tabs/segmented.md +114 -0
- package/agents/components/tabs/segmented.spec.json +100 -0
- package/agents/components/tabs/tabs.family.json +59 -0
- package/agents/components/tabs/tabs.md +18 -0
- package/agents/components/tabs/underline.md +147 -0
- package/agents/components/tabs/underline.spec.json +139 -0
- package/agents/components/thumbnail/thumbnail.family.json +28 -0
- package/agents/components/thumbnail/thumbnail.md +152 -0
- package/agents/components/thumbnail/thumbnail.spec.json +172 -0
- package/agents/components/toast/toast.family.json +28 -0
- package/agents/components/toast/toast.md +133 -0
- package/agents/components/toast/toast.spec.json +89 -0
- package/agents/components/tooltip/tooltip.family.json +29 -0
- package/agents/components/tooltip/tooltip.md +139 -0
- package/agents/components/tooltip/tooltip.spec.json +110 -0
- package/agents/compose.md +240 -0
- package/agents/icons.json +831 -0
- package/agents/images.md +66 -0
- package/agents/manifest.json +87 -0
- package/agents/patterns/README.md +59 -0
- package/agents/patterns/actions.md +50 -0
- package/agents/patterns/browsing.md +52 -0
- package/agents/patterns/communications.md +56 -0
- package/agents/patterns/layout.md +72 -0
- package/agents/patterns/modals.md +50 -0
- package/agents/patterns/visual.md +55 -0
- package/agents/reconstruct.md +55 -0
- package/agents/scoped-adoption.md +111 -0
- package/agents/tokens.usage.json +1657 -0
- package/agents/usage.json +422 -0
- package/dist/icons/index.cjs +1332 -0
- package/dist/icons/index.cjs.map +1 -0
- package/dist/icons/index.d.cts +228 -0
- package/dist/icons/index.d.ts +228 -0
- package/dist/icons/index.js +1114 -0
- package/dist/icons/index.js.map +1 -0
- package/dist/index.cjs +5905 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +896 -0
- package/dist/index.d.ts +896 -0
- package/dist/index.js +5847 -0
- package/dist/index.js.map +1 -0
- package/dist/styles.css +5765 -0
- package/eslint/README.md +79 -0
- package/eslint/index.js +78 -0
- package/eslint/rules.js +472 -0
- package/eslint/test.mjs +135 -0
- package/package.json +96 -0
- package/placeholder.png +0 -0
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
# Scoped adoption — Chorus in a designated area of an existing app
|
|
2
|
+
|
|
3
|
+
Protocol for the third first-turn branch in `LOVABLE.md`: the user wants Chorus in a
|
|
4
|
+
**specific area** of an in-progress project — not a full migration (§D), not a blank
|
|
5
|
+
scaffold (greenfield). Triggers: the first message names a target area / route /
|
|
6
|
+
feature ("apply Chorus to the settings tab", "the community feed uses Chorus"), or
|
|
7
|
+
says to initialize and **stand by** for an area they'll designate next.
|
|
8
|
+
|
|
9
|
+
Everything in `LOVABLE.md` still applies *inside* the designated area. This file only
|
|
10
|
+
defines what changes **at and outside the boundary**.
|
|
11
|
+
|
|
12
|
+
## First-turn behaviour
|
|
13
|
+
|
|
14
|
+
1. Run §A.0 end-to-end (install, stylesheets, placeholder, lint preset — scoped, see
|
|
15
|
+
below) and post the readiness line.
|
|
16
|
+
2. Post a drift report **scoped to the designated area** (same shape as §D.1 — counts
|
|
17
|
+
+ worst offenders — but only for files the area renders). If no area is named yet,
|
|
18
|
+
skip the report and say so in one line.
|
|
19
|
+
3. **Stand by.** Do NOT reconstruct the entry screen, do NOT post an app-wide
|
|
20
|
+
migration plan, do NOT touch files outside the area. The §D "reconstruct the
|
|
21
|
+
representative screen immediately" step is **suspended** in this mode — the
|
|
22
|
+
reconstruction target is the designated area, on the user's brief.
|
|
23
|
+
|
|
24
|
+
## The boundary — declare it, then respect it
|
|
25
|
+
|
|
26
|
+
* **Declare the Chorus boundary at route / screen granularity** whenever possible.
|
|
27
|
+
State it explicitly in your first scoped reply: *"Chorus boundary: `/community/*`
|
|
28
|
+
(CommunityPage + children)."* Everything inside renders 100% Chorus; everything
|
|
29
|
+
outside stays untouched — visually and in code.
|
|
30
|
+
* **The zero-mixed-render rule applies per screen *inside* the boundary.** A screen
|
|
31
|
+
inside the boundary is 100% Chorus or not done. Screens outside the boundary are
|
|
32
|
+
out of scope — their drift is *reported, never edited*.
|
|
33
|
+
* **Sub-screen areas.** If the designated area is a region within a screen that also
|
|
34
|
+
has legacy UI (e.g. "only the comment section"), first propose widening the boundary
|
|
35
|
+
to the whole screen — that's the only way to honor zero-mixed-render literally. If
|
|
36
|
+
the user declines, the area's **container element is the declared boundary**: inside
|
|
37
|
+
it 100% Chorus, outside it untouched, and you state the exception in one line
|
|
38
|
+
("mixed render sanctioned at `<CommentSection>` per scoped boundary"). Never
|
|
39
|
+
restyle legacy siblings "for consistency".
|
|
40
|
+
* **§D.4 neighbor migration is capped at the boundary.** "Touched files AND immediate
|
|
41
|
+
visual neighbors" never drags in files outside the declared area. Out-of-boundary
|
|
42
|
+
drift goes on the next-PR shopping list (§D.5), nothing more.
|
|
43
|
+
* **Widening is the user's call.** They can grow the boundary ("now also the profile
|
|
44
|
+
page") or switch to full §D at any time. You may *suggest* widening when the
|
|
45
|
+
boundary forces an awkward seam; you never widen unilaterally.
|
|
46
|
+
|
|
47
|
+
## Embedded host shell — who pays the gutter
|
|
48
|
+
|
|
49
|
+
The §A.4 PageShell contract assumes Chorus owns the viewport. In scoped adoption it
|
|
50
|
+
usually doesn't:
|
|
51
|
+
|
|
52
|
+
* **Area = whole route/screen** → use `<PageShell>` normally inside that route.
|
|
53
|
+
* **Area = region embedded in a legacy frame** → do NOT install `<PageShell>` (a
|
|
54
|
+
100dvh flex column inside a host layout breaks the host's scroll). Instead, treat
|
|
55
|
+
the **legacy container as the shell**: it pays the horizontal gutter **once**, and
|
|
56
|
+
Chorus full-bleed children (`List`, `Feed`, `Carousel`, `Tabs`, …) are its direct
|
|
57
|
+
children with no extra `padding-inline` / `px-*` wrapper.
|
|
58
|
+
* If the legacy container already pays its own padding, that *is* the single
|
|
59
|
+
gutter — do not re-pay it on a Chorus wrapper.
|
|
60
|
+
* If it pays none, add it once at the area root:
|
|
61
|
+
`style={{ paddingInline: 'var(--sys-layout-page-md)' }}`.
|
|
62
|
+
* The rail self-diagnostic (LOVABLE.md § rail) still applies *within the area*: every
|
|
63
|
+
full-bleed child's left edge must align to the area's single gutter.
|
|
64
|
+
|
|
65
|
+
## ESLint preset — scope it to the area
|
|
66
|
+
|
|
67
|
+
`export default [ ...chorus ]` repo-wide would flood an unmigrated codebase with
|
|
68
|
+
`chorus/*` errors and push you toward either suppressing (forbidden) or migrating
|
|
69
|
+
everything (scope violation). Scope the preset with flat-config `files`:
|
|
70
|
+
|
|
71
|
+
```js
|
|
72
|
+
// eslint.config.js
|
|
73
|
+
import chorus from "@teamblind-chorus/ui/eslint";
|
|
74
|
+
export default [
|
|
75
|
+
...chorus.map((cfg) => ({
|
|
76
|
+
...cfg,
|
|
77
|
+
files: ["src/pages/community/**", "src/components/community/**"], // = the declared boundary
|
|
78
|
+
})),
|
|
79
|
+
];
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
* "Chorus lint green" (§E checklist) means green **within the scoped `files` globs**.
|
|
83
|
+
* When the user widens the boundary, widen the globs in the same change — the lint
|
|
84
|
+
scope and the declared boundary must never disagree.
|
|
85
|
+
* Never silence a `chorus/*` error inside the boundary; outside the boundary the
|
|
86
|
+
rules simply don't run.
|
|
87
|
+
|
|
88
|
+
## CSS coexistence — safe by construction
|
|
89
|
+
|
|
90
|
+
Importing `@teamblind-chorus/tokens/tokens.css` + `@teamblind-chorus/ui/styles.css` app-wide is
|
|
91
|
+
safe for the untouched legacy area. The only global effects are:
|
|
92
|
+
|
|
93
|
+
* a `button/input/select/textarea { font-family: inherit }` reset (form controls
|
|
94
|
+
inherit the body font — benign, usually invisible);
|
|
95
|
+
* `:root` custom properties (`--sys-*`, `--ref-*`, `--chorus-placeholder-image`) —
|
|
96
|
+
inert until something consumes them;
|
|
97
|
+
* `.chorus-*` / `.sys-typo-*` classes — inert on legacy markup.
|
|
98
|
+
|
|
99
|
+
The Pretendard `<link>` loads a font; it restyles nothing until a rule asks for it.
|
|
100
|
+
So: import the stylesheets once at app entry as §A.0 says — do NOT try to
|
|
101
|
+
conditionally load CSS per route, and do not warn the user about "global conflicts".
|
|
102
|
+
|
|
103
|
+
## Exit paths
|
|
104
|
+
|
|
105
|
+
* **Widen** — user names more areas; repeat the boundary declaration, widen the lint
|
|
106
|
+
globs, migrate the new area.
|
|
107
|
+
* **Graduate to §D** — user asks for the full conversion; run §D from step 1 with the
|
|
108
|
+
already-migrated areas as the reference target (skip §D.3's proactive
|
|
109
|
+
reconstruction — it exists).
|
|
110
|
+
* **Escape hatch (§D.7)** still works as documented: "just add the feature" demotes
|
|
111
|
+
everything to a drift note; new code stays pure Chorus.
|