@streamoid/ui 0.6.28 → 0.6.30
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/dist/docs/AGENTS.md +6 -3
- package/dist/docs/ScAppSwitchPanel.md +18 -11
- package/dist/docs/ScAppcardLogos.md +12 -10
- package/dist/docs/ScPanelResizeHandle.md +80 -0
- package/dist/docs/ScStreamoidWordmark.md +26 -7
- package/dist/docs/components.json +72 -2
- package/dist/index.css +38 -0
- package/dist/index.d.mts +107 -2
- package/dist/index.d.ts +107 -2
- package/dist/index.js +1827 -1603
- package/dist/index.mjs +1459 -1235
- package/package.json +3 -2
package/dist/docs/AGENTS.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# @streamoid/ui — component router (for AI agents)
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
126 components. Full docs for each live beside this file as `<ScName>.md`;
|
|
4
4
|
the same metadata is machine-readable in `components.json`.
|
|
5
5
|
|
|
6
6
|
**How to use this file:** scan for the job you need below, then open only that
|
|
@@ -40,7 +40,7 @@ theme-aware (dark on `:root`, light override) — never hardcode a colour.
|
|
|
40
40
|
|
|
41
41
|
- **`ScAppcardLogos`** — use when you need a product's *name as artwork* — inside a card, chip or pill where a hover/theme colour change should recolour the mark for free.
|
|
42
42
|
- **`ScStreamoidWordmark`** — use when you need the *Streamoid* wordmark or mascot, or the *CXO Copilot* logo, as a bare mark you position yourself — typically as the `wordmark` node you hand to `ScSideBarLogoUnit`.
|
|
43
|
-
- also documented here: `ScStreamoidMascot`, `ScCxoCopilotLogo`
|
|
43
|
+
- also documented here: `ScCxoWordmark`, `ScStreamoidMascot`, `ScCxoCopilotLogo`
|
|
44
44
|
- **`ScStrLogo`** _(legacy)_ — use when you specifically need the **combined** wordmark + mascot lockup at large size (a splash / auth / print-ish surface), and you are willing to size it yourself. That combination exists nowhere else in the library.
|
|
45
45
|
|
|
46
46
|
## cards
|
|
@@ -104,6 +104,8 @@ theme-aware (dark on `:root`, light override) — never hardcode a colour.
|
|
|
104
104
|
|
|
105
105
|
- **`ScHDivider`** — use when you need a horizontal rule between stacked sections, rows, or card regions.
|
|
106
106
|
- **`ScHeader`** — use when you are building a bespoke table header row and want the column captions to match every other table in the product.
|
|
107
|
+
- **`ScPanelResizeHandle`** — Drag-to-resize edge for a side panel — a continuous width, remembered.
|
|
108
|
+
- also documented here: `useStreamoidPanelWidth`, `clampPanelWidth`, `resolvePanelResize`, `resolvePanelResizeKey`, `PANEL_RESIZE_STEP_PX`
|
|
107
109
|
- **`ScSettingsNav`** _(legacy)_ — use when you need a static visual placeholder of the settings nav (a design mock, a screenshot, a Figma-parity check).
|
|
108
110
|
- **`ScSettingsTabComp`** — use when you need a settings-style tab strip — Profile / Workspace, or a modal's section tabs — where the active tab is marked by an underline.
|
|
109
111
|
- **`ScTabComp`** — use when you need one segment of a compact 2–5 way view toggle — theme switcher, grid/list, Active/Pending, Fast/Pro.
|
|
@@ -210,7 +212,7 @@ theme-aware (dark on `:root`, light override) — never hardcode a colour.
|
|
|
210
212
|
| `ScBillingLogsTableHeader` | `ScBillingHistoryHeader`, `ScHeader`, `ScTableHeader` |
|
|
211
213
|
| `ScBillingLogsTableList` | `ScBillingHistoryTableList`, `ScTableList`, `ScBillingLogsTableHeader` |
|
|
212
214
|
| `ScBillingHistoryTableList` | `ScBillingLogsTableList`, `ScTableList`, `InvoiceHistoryMobile` |
|
|
213
|
-
| `ScStreamoidWordmark` | `ScStrLogo`, `ScLogoUnit`, `ScAppcardLogos`, `ProductWordmark`, `ScSideBarLogoUnit`, `ScCxoCopilotLogo` |
|
|
215
|
+
| `ScStreamoidWordmark` | `ScStrLogo`, `ScLogoUnit`, `ScAppcardLogos`, `ProductWordmark`, `ScSideBarLogoUnit`, `ScCxoCopilotLogo`, `ScCxoWordmark` |
|
|
214
216
|
| `ScBriefCard` | `ScQuickPrompt`, `ScAppCardV3`, `ScDefaultCard`, `ScAppCardForCopilot` |
|
|
215
217
|
| `ScButton` | `ScFieldButton`, `ScOnlyIcon`, `ScPopUpMenu` |
|
|
216
218
|
| `ScCalendar` | `ScCalendarDateComps`, `ScCounter`, `ScPagination` |
|
|
@@ -244,6 +246,7 @@ theme-aware (dark on `:root`, light override) — never hardcode a colour.
|
|
|
244
246
|
| `ScOnlyIcon` | `ScOnlyField`, `ScButton`, `ScFieldButton`, `ScSidebarIcons` |
|
|
245
247
|
| `ScPagination` | `ScCounter`, `ScTabs`, `ScOnlyField` |
|
|
246
248
|
| `ScPairtext` | `ScCheckField`, `ScCheckbox`, `ScRadio`, `ScSelection`, `ScSelectionPill`, `ScMenuOptions` |
|
|
249
|
+
| `ScPanelResizeHandle` | `ScSidebarResizeHandle`, `ScVDivider` |
|
|
247
250
|
| `ScPlanCard` | `ScPlanDetailsCard`, `ScPlanDetailsCardMobile`, `ScPlanComparison`, `ScAppCard` |
|
|
248
251
|
| `ScPlanDetailsCard` | `ScPlanCard`, `ScPlanDetailsCardMobile`, `ScCreditsUsageCard`, `ScPlanComparison` |
|
|
249
252
|
| `ScPlanDetailsCardMobile` | `ScPlanDetailsCard`, `ScPlanCard`, `ScPlanComparison`, `ScCreditsUsageCardMobile` |
|
|
@@ -5,7 +5,7 @@ package: "@streamoid/ui"
|
|
|
5
5
|
category: sidebar
|
|
6
6
|
status: stable
|
|
7
7
|
renders: div
|
|
8
|
-
tags: [app-switcher, switch-app, product-switcher, cross-product, tactix, artifax, photogenix, catalogix, streamoid, wordmark]
|
|
8
|
+
tags: [app-switcher, switch-app, product-switcher, cross-product, cxo, tactix, artifax, photogenix, catalogix, streamoid, wordmark]
|
|
9
9
|
related: [ScSideBarLogoUnit, StreamoidSidebar, ScSidebarSwitchMenu, ScWorkspaceSwitchCard]
|
|
10
10
|
do_not_confuse_with: [ScSidebarSwitchMenu, StreamoidWorkspaceSwitcher, ScWorkspaceSwitchCard, ScAppListingCard, ScAppCard]
|
|
11
11
|
used_by: [cxo, photogenix, catalogix, artifax]
|
|
@@ -34,7 +34,8 @@ card, no border and no background: the surrounding sidebar or flyout supplies th
|
|
|
34
34
|
planners"), not `description` and not the product `name`. Do not copy that
|
|
35
35
|
map into a host.
|
|
36
36
|
3. Matching is a **substring** test over `` `${key} ${name}`.toLowerCase() ``. A key
|
|
37
|
-
containing `"cxo"` or `"streamoid"` gets the
|
|
37
|
+
containing `"cxo"` or `"streamoid"` gets the **CXO** wordmark — but the four
|
|
38
|
+
product names are matched first, so `"Streamoid Catalogix"` is Catalogix.
|
|
38
39
|
4. It does **not** exclude the current app. That's the host's job.
|
|
39
40
|
|
|
40
41
|
---
|
|
@@ -98,13 +99,19 @@ import "@streamoid/ui/dist/index.css"; // once, at your app root
|
|
|
98
99
|
|
|
99
100
|
| Order | Matches (substring, case-insensitive, on `key + " " + name`) | Renders |
|
|
100
101
|
|---|---|---|
|
|
101
|
-
| 1 | `
|
|
102
|
-
| 2 | `
|
|
103
|
-
| 3 | `
|
|
104
|
-
| 4 | `
|
|
105
|
-
| 5 | `
|
|
102
|
+
| 1 | `cxo`, `streamoid` | CXO wordmark + "for CXOs" |
|
|
103
|
+
| 2 | `tactix` | Tactix wordmark + "for buyers and planners" |
|
|
104
|
+
| 3 | `artifax`, `design studio` | Artifax wordmark + "for design and development" |
|
|
105
|
+
| 4 | `photogenix`, `photo studio` | Photogenix wordmark + "for studio and content" |
|
|
106
|
+
| 5 | `catalogix`, `catalog studio` | Catalogix wordmark + "for catalog and ecommerce" |
|
|
106
107
|
| last | anything else | `name` (16px semibold) + host `description` (14px tertiary) |
|
|
107
108
|
|
|
109
|
+
**CXO leads the display order but trails the match order.** It is the hub every
|
|
110
|
+
other app hands back to, so it renders first; it also answers to the company name
|
|
111
|
+
`"streamoid"`, the one loose token in the table, so the four product names get
|
|
112
|
+
first refusal (`MATCH_PRECEDENCE` in the source). Do not collapse the two orders
|
|
113
|
+
back into one array.
|
|
114
|
+
|
|
108
115
|
### Recipes
|
|
109
116
|
|
|
110
117
|
```tsx
|
|
@@ -157,8 +164,8 @@ createPortal(
|
|
|
157
164
|
|
|
158
165
|
### Use it when
|
|
159
166
|
|
|
160
|
-
- The user is moving between **Streamoid products** (
|
|
161
|
-
|
|
167
|
+
- The user is moving between **Streamoid products** (CXO / Tactix / Artifax /
|
|
168
|
+
Photogenix / Catalogix).
|
|
162
169
|
- You want the canonical order and the embedded brand wordmarks for free.
|
|
163
170
|
- The list lives inside chrome you already own (a sidebar card, a flyout, a popover).
|
|
164
171
|
|
|
@@ -223,9 +230,9 @@ the canonical tagline. CMS copy like "Design generation" is discarded. Pass
|
|
|
223
230
|
```
|
|
224
231
|
|
|
225
232
|
**3. Matching is a loose substring test on `key + " " + name`.** `"cxo"` and
|
|
226
|
-
`"streamoid"` both map to the
|
|
233
|
+
`"streamoid"` both map to the CXO wordmark, `"design studio"` maps to Artifax,
|
|
227
234
|
`"photo studio"` to Photogenix, `"catalog studio"` to Catalogix. An internal key like
|
|
228
|
-
`"cxo-insights"` will render the **
|
|
235
|
+
`"cxo-insights"` will render the **CXO** wordmark, not a text row.
|
|
229
236
|
|
|
230
237
|
**4. The current app is not excluded.** The source comment is explicit — "The current
|
|
231
238
|
app is expected to be excluded by the host." Forget the filter and the sidebar offers
|
|
@@ -4,7 +4,7 @@ package: "@streamoid/ui"
|
|
|
4
4
|
category: brand
|
|
5
5
|
status: stable
|
|
6
6
|
renders: span[role="img"]
|
|
7
|
-
tags: [wordmark, logo, brand, product, tactix, artifax, photogenix, catalogix, svg, currentColor]
|
|
7
|
+
tags: [wordmark, logo, brand, product, cxo, tactix, artifax, photogenix, catalogix, svg, currentColor]
|
|
8
8
|
related: [ScAppCardForCopilot, ProductWordmark, ProductCollapsedMark, ScStreamoidWordmark, ScStrLogo]
|
|
9
9
|
do_not_confuse_with: [ProductWordmark, ScStreamoidWordmark, ScStreamoidMascot, ScCxoCopilotLogo, ScAppCard]
|
|
10
10
|
used_by: [agent]
|
|
@@ -13,23 +13,25 @@ required_props: [product]
|
|
|
13
13
|
|
|
14
14
|
# ScAppcardLogos
|
|
15
15
|
|
|
16
|
-
**One single-colour product wordmark, 14px tall.** Inline SVG for
|
|
17
|
-
Photogenix or Catalogix, filled with `currentColor` so the parent's text
|
|
18
|
-
paints it. Ships the type `AppcardProduct` used by `ScAppCardForCopilot`.
|
|
16
|
+
**One single-colour product wordmark, 14px tall.** Inline SVG for CXO, Tactix,
|
|
17
|
+
Artifax, Photogenix or Catalogix, filled with `currentColor` so the parent's text
|
|
18
|
+
colour paints it. Ships the type `AppcardProduct` used by `ScAppCardForCopilot`.
|
|
19
19
|
|
|
20
20
|
## TL;DR for agents
|
|
21
21
|
|
|
22
22
|
- **Reach for it when:** you need a product's *name as artwork* — inside a card,
|
|
23
23
|
chip or pill where a hover/theme colour change should recolour the mark for free.
|
|
24
24
|
- **Don't reach for it when:** you want the sidebar-header wordmark
|
|
25
|
-
(→ `ProductWordmark` / `ProductCollapsedMark`), the
|
|
25
|
+
(→ `ProductWordmark` / `ProductCollapsedMark`), the *company* brand
|
|
26
26
|
(→ `ScStreamoidWordmark` / `ScStreamoidMascot`), the CXO copilot mark
|
|
27
27
|
(→ `ScCxoCopilotLogo`), or an app icon plus a typed name (→ `ScAppCard`).
|
|
28
28
|
- **Four things that will bite you:**
|
|
29
|
-
1. `product` is **required** and the set is exactly
|
|
30
|
-
`artifax`, `photogenix`, `catalogix`. **There is no Streamoid
|
|
31
|
-
|
|
32
|
-
|
|
29
|
+
1. `product` is **required** and the set is exactly five keys — `cxo`,
|
|
30
|
+
`tactix`, `artifax`, `photogenix`, `catalogix`. **There is no Streamoid
|
|
31
|
+
wordmark here** — that is the company mark, `ScStreamoidWordmark` in SC-Brand.
|
|
32
|
+
2. Widths differ per product (35 / 56 / 54 / 88 / 72 px at a fixed 14px height),
|
|
33
|
+
so a row of them is **not** visually uniform. `cxo` is a three-letter mark and
|
|
34
|
+
by far the narrowest.
|
|
33
35
|
3. It sets `role="img"` with **`aria-label={product}` — the raw lowercase key**
|
|
34
36
|
("photogenix"), not a display name.
|
|
35
37
|
4. The SVG is injected with `dangerouslySetInnerHTML`. Safe here (the markup is a
|
|
@@ -137,7 +139,7 @@ Generated from Figma `AppcardLogos` (node `6383:9997`); the SVG strings live in
|
|
|
137
139
|
| You may actually want | Not this |
|
|
138
140
|
|---|---|
|
|
139
141
|
| `ProductWordmark` — the sidebar wordmark set, sized for the shell header | `ScAppcardLogos` is the 14px *appcard* set; different sizes, different Figma source |
|
|
140
|
-
| `ScStreamoidWordmark` — the company mark | This set has
|
|
142
|
+
| `ScStreamoidWordmark` — the *company* mark | This set has no Streamoid entry. `cxo` here is the *product* mark — the two are different artwork and are not interchangeable |
|
|
141
143
|
| `ScAppCard` — icon + name + subtitle row | This is only the name, as vector art |
|
|
142
144
|
|
|
143
145
|
---
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
---
|
|
2
|
+
component: ScPanelResizeHandle
|
|
3
|
+
also_exports: [useStreamoidPanelWidth, clampPanelWidth, resolvePanelResize, resolvePanelResizeKey, PANEL_RESIZE_STEP_PX]
|
|
4
|
+
package: "@streamoid/ui"
|
|
5
|
+
category: layout
|
|
6
|
+
status: stable
|
|
7
|
+
renders: div[role="separator"]
|
|
8
|
+
tags: [resize, panel, drag, width, splitter, separator, sidebar, chat]
|
|
9
|
+
related: [ScSidebarResizeHandle, StreamoidSidebar]
|
|
10
|
+
do_not_confuse_with: [ScSidebarResizeHandle, ScVDivider]
|
|
11
|
+
required_props: [width, onWidthChange, min, max]
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
# ScPanelResizeHandle · useStreamoidPanelWidth
|
|
15
|
+
|
|
16
|
+
**Drag-to-resize edge for a side panel — a continuous width, remembered.** Built
|
|
17
|
+
for the Ask CXO panel, which was a hardcoded `clamp(400px, 32vw, 560px)` that no
|
|
18
|
+
one could widen.
|
|
19
|
+
|
|
20
|
+
## Don't confuse with `ScSidebarResizeHandle`
|
|
21
|
+
|
|
22
|
+
| you want | use |
|
|
23
|
+
|---|---|
|
|
24
|
+
| any width between a min and max | **`ScPanelResizeHandle`** |
|
|
25
|
+
| snap between expanded and collapsed past a drag threshold | `ScSidebarResizeHandle` |
|
|
26
|
+
|
|
27
|
+
They look identical in use and do different things. The sidebar one takes
|
|
28
|
+
`expanded: boolean`; this one takes `width: number`.
|
|
29
|
+
|
|
30
|
+
## Use it
|
|
31
|
+
|
|
32
|
+
```tsx
|
|
33
|
+
const { width, setWidth, commitWidth } = useStreamoidPanelWidth({
|
|
34
|
+
storageKey: "artifax.assistant.width",
|
|
35
|
+
defaultWidth: 480, min: 360, max: 900,
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
<div style={{ position: "relative", width }}> {/* MUST be positioned */}
|
|
39
|
+
{children}
|
|
40
|
+
<ScPanelResizeHandle
|
|
41
|
+
width={width} onWidthChange={setWidth} onWidthCommit={commitWidth}
|
|
42
|
+
min={360} max={900} edge="right" ariaLabel="Resize Ask CXO"
|
|
43
|
+
/>
|
|
44
|
+
</div>
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
## Four things that will bite you
|
|
48
|
+
|
|
49
|
+
1. **The parent must be `position: relative`.** The handle is absolutely
|
|
50
|
+
positioned against it, and sits half outside the edge (`-6px`) so the 12px
|
|
51
|
+
hit area straddles the border. A static parent puts it somewhere unrelated.
|
|
52
|
+
2. **`setWidth` during the drag, `commitWidth` at the end.** `commitWidth`
|
|
53
|
+
writes to `localStorage`; pointermove fires dozens of times a second and each
|
|
54
|
+
write is synchronous. `onWidthCommit` already fires once per gesture.
|
|
55
|
+
3. **`edge` inverts the gesture AND the keys.** On `edge="left"` the panel grows
|
|
56
|
+
as the pointer moves left, and ArrowLeft grows it. Get this wrong and the
|
|
57
|
+
panel shrinks when dragged open.
|
|
58
|
+
4. **Width is absolute from the gesture start, not accumulated deltas.** Drag
|
|
59
|
+
past `max` and back and the edge returns to the cursor rather than sitting
|
|
60
|
+
offset by the overshoot. If you reimplement the maths, keep that property —
|
|
61
|
+
there is a test for it.
|
|
62
|
+
|
|
63
|
+
## Accessibility
|
|
64
|
+
|
|
65
|
+
`role="separator"` with `aria-valuenow/min/max`, focusable, and operable with
|
|
66
|
+
ArrowLeft/ArrowRight plus Home/End (`PANEL_RESIZE_STEP_PX`, 24px). Double-click
|
|
67
|
+
resets to `min`. A pointer-only resize is unusable for anyone who cannot drag,
|
|
68
|
+
which is why the keyboard path is part of the component rather than the host's
|
|
69
|
+
problem.
|
|
70
|
+
|
|
71
|
+
## Storage
|
|
72
|
+
|
|
73
|
+
`useStreamoidPanelWidth` wraps every `localStorage` access in try/catch —
|
|
74
|
+
it throws outright in a private window, with site data blocked, or in a
|
|
75
|
+
thumbnailer, and a resize handle is not worth taking the app down for. A failed
|
|
76
|
+
read yields `defaultWidth`; a failed write means the width applies for the
|
|
77
|
+
session but does not persist.
|
|
78
|
+
|
|
79
|
+
The stored value is re-clamped on read, so lowering `max` in a later release
|
|
80
|
+
cannot leave someone stuck with a panel wider than the app now allows.
|
|
@@ -1,24 +1,31 @@
|
|
|
1
1
|
---
|
|
2
2
|
component: ScStreamoidWordmark
|
|
3
|
-
also_exports: [ScStreamoidMascot, ScCxoCopilotLogo]
|
|
3
|
+
also_exports: [ScCxoWordmark, ScStreamoidMascot, ScCxoCopilotLogo]
|
|
4
4
|
package: "@streamoid/ui"
|
|
5
5
|
category: brand
|
|
6
6
|
status: stable
|
|
7
7
|
renders: span[aria-hidden] (wordmark) · svg[role="img"] (mascot, CXO logo)
|
|
8
8
|
tags: [brand, logo, wordmark, mascot, streamoid, cxo, copilot, mask, svg, gradient, sidebar-header]
|
|
9
9
|
related: [ScSideBarLogoUnit, StreamoidSidebar, ScAppcardLogos, ScAppSwitchPanel, ScStrLogo]
|
|
10
|
-
do_not_confuse_with: [ScStrLogo, ScLogoUnit, ScAppcardLogos, ProductWordmark, ScSideBarLogoUnit, ScCxoCopilotLogo]
|
|
10
|
+
do_not_confuse_with: [ScStrLogo, ScLogoUnit, ScAppcardLogos, ProductWordmark, ScSideBarLogoUnit, ScCxoCopilotLogo, ScCxoWordmark]
|
|
11
11
|
used_by: [cxo]
|
|
12
12
|
---
|
|
13
13
|
|
|
14
|
-
# ScStreamoidWordmark · ScStreamoidMascot · ScCxoCopilotLogo
|
|
14
|
+
# ScStreamoidWordmark · ScCxoWordmark · ScStreamoidMascot · ScCxoCopilotLogo
|
|
15
15
|
|
|
16
|
-
**The company's own brand marks, so no host app ships a brand SVG.**
|
|
16
|
+
**The company's own brand marks, so no host app ships a brand SVG.** Four leaf
|
|
17
17
|
components in one folder: the plain "streamoid" wordmark (110×16, painted as a CSS
|
|
18
|
-
mask so a token colours it), the
|
|
19
|
-
|
|
18
|
+
mask so a token colours it), the **CXO product wordmark** (50×16, same mask
|
|
19
|
+
treatment), the colourful mascot glyph used in the collapsed sidebar
|
|
20
|
+
(teal→purple gradient, 48×48 viewBox), and the CXO Copilot lockup
|
|
20
21
|
(98×32, red→orange gradient).
|
|
21
22
|
|
|
23
|
+
**`ScStreamoidWordmark` is the company, `ScCxoWordmark` is the product.** A CXO
|
|
24
|
+
surface — its sidebar header, its row in the app switcher — wants
|
|
25
|
+
`ScCxoWordmark`. Reach for `ScStreamoidWordmark` only where you mean Streamoid
|
|
26
|
+
*the company* (a corporate footer, a legal line). They are different artwork, not
|
|
27
|
+
two sizes of one mark.
|
|
28
|
+
|
|
22
29
|
## TL;DR for agents
|
|
23
30
|
|
|
24
31
|
- **Reach for it when:** you need the *Streamoid* wordmark or mascot, or the *CXO
|
|
@@ -59,7 +66,8 @@ import "@streamoid/ui/dist/index.css"; // once, at your app root
|
|
|
59
66
|
### Minimal usage
|
|
60
67
|
|
|
61
68
|
```tsx
|
|
62
|
-
<ScStreamoidWordmark /> {/* 110×16, primary-text colour */}
|
|
69
|
+
<ScStreamoidWordmark /> {/* 110×16, primary-text colour — the COMPANY */}
|
|
70
|
+
<ScCxoWordmark /> {/* 50×16, primary-text colour — the PRODUCT */}
|
|
63
71
|
<ScStreamoidMascot /> {/* 40×40 box */}
|
|
64
72
|
<ScCxoCopilotLogo /> {/* 98×32 */}
|
|
65
73
|
```
|
|
@@ -74,11 +82,22 @@ import "@streamoid/ui/dist/index.css"; // once, at your app root
|
|
|
74
82
|
| `className` | `string` | – | Set on the `<span>`. |
|
|
75
83
|
| `style` | `CSSProperties` | – | Spread **last**, so it overrides the inline width/height/mask. |
|
|
76
84
|
|
|
85
|
+
### Props — `ScCxoWordmark`
|
|
86
|
+
|
|
87
|
+
| Prop | Type | Default | Notes |
|
|
88
|
+
|---|---|---|---|
|
|
89
|
+
| `width` | `number` | `50` | Box width in **px**. Native width at `height` 16. |
|
|
90
|
+
| `height` | `number` | `16` | The mask is `contain` + `left center`, so keep the 50:16 ratio or it letterboxes rather than stretches. |
|
|
91
|
+
| `color` | `string` | `"var(--alias-text---icons-primary, #f5f5f5)"` | Becomes `background-color` behind the mask. Solid colours only — the official lockup's red→orange gradient **cannot** be reproduced here (Gotcha 3), which is deliberate: a gradient would not survive light mode. |
|
|
92
|
+
| `className` | `string` | – | Set on the `<span>`. |
|
|
93
|
+
| `style` | `CSSProperties` | – | Spread **last**, so it overrides the inline width/height/mask. |
|
|
94
|
+
|
|
77
95
|
### Props — `ScStreamoidMascot`
|
|
78
96
|
|
|
79
97
|
| Prop | Type | Default | Notes |
|
|
80
98
|
|---|---|---|---|
|
|
81
99
|
| `size` | `number` | `40` | Square box in px (`viewBox="0 0 48 48"`). ⚠️ The art occupies ~40×15 of those 48 units — see Gotcha 2. |
|
|
100
|
+
| `ariaLabel` | `string` | `"Streamoid"` | The mark's accessible name. Pass the **product** name where the mascot stands in for an app's own logo — CXO's collapsed sidebar passes `"CXO"`, so a screen reader does not announce the company there. |
|
|
82
101
|
| `className` | `string` | – | Set on the `<svg>`. |
|
|
83
102
|
| `style` | `CSSProperties` | – | Set on the `<svg>`. Does not override `width`/`height` attributes. |
|
|
84
103
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"package": "@streamoid/ui",
|
|
3
|
-
"count":
|
|
3
|
+
"count": 126,
|
|
4
4
|
"components": {
|
|
5
5
|
"ScAccess": {
|
|
6
6
|
"doc": "ScAccess.md",
|
|
@@ -130,6 +130,7 @@
|
|
|
130
130
|
"switch-app",
|
|
131
131
|
"product-switcher",
|
|
132
132
|
"cross-product",
|
|
133
|
+
"cxo",
|
|
133
134
|
"tactix",
|
|
134
135
|
"artifax",
|
|
135
136
|
"photogenix",
|
|
@@ -183,6 +184,7 @@
|
|
|
183
184
|
"logo",
|
|
184
185
|
"brand",
|
|
185
186
|
"product",
|
|
187
|
+
"cxo",
|
|
186
188
|
"tactix",
|
|
187
189
|
"artifax",
|
|
188
190
|
"photogenix",
|
|
@@ -513,13 +515,15 @@
|
|
|
513
515
|
"ScAppcardLogos",
|
|
514
516
|
"ProductWordmark",
|
|
515
517
|
"ScSideBarLogoUnit",
|
|
516
|
-
"ScCxoCopilotLogo"
|
|
518
|
+
"ScCxoCopilotLogo",
|
|
519
|
+
"ScCxoWordmark"
|
|
517
520
|
],
|
|
518
521
|
"requiredProps": [],
|
|
519
522
|
"usedBy": [
|
|
520
523
|
"cxo"
|
|
521
524
|
],
|
|
522
525
|
"alsoExports": [
|
|
526
|
+
"ScCxoWordmark",
|
|
523
527
|
"ScStreamoidMascot",
|
|
524
528
|
"ScCxoCopilotLogo"
|
|
525
529
|
],
|
|
@@ -1769,6 +1773,48 @@
|
|
|
1769
1773
|
"alsoExports": [],
|
|
1770
1774
|
"exported": true
|
|
1771
1775
|
},
|
|
1776
|
+
"ScPanelResizeHandle": {
|
|
1777
|
+
"doc": "ScPanelResizeHandle.md",
|
|
1778
|
+
"source": "src/SC-PanelResize",
|
|
1779
|
+
"category": "layout",
|
|
1780
|
+
"status": "stable",
|
|
1781
|
+
"renders": "div[role=\"separator\"]",
|
|
1782
|
+
"summary": "Drag-to-resize edge for a side panel — a continuous width, remembered.",
|
|
1783
|
+
"reachForWhen": "",
|
|
1784
|
+
"tags": [
|
|
1785
|
+
"resize",
|
|
1786
|
+
"panel",
|
|
1787
|
+
"drag",
|
|
1788
|
+
"width",
|
|
1789
|
+
"splitter",
|
|
1790
|
+
"separator",
|
|
1791
|
+
"sidebar",
|
|
1792
|
+
"chat"
|
|
1793
|
+
],
|
|
1794
|
+
"related": [
|
|
1795
|
+
"ScSidebarResizeHandle",
|
|
1796
|
+
"StreamoidSidebar"
|
|
1797
|
+
],
|
|
1798
|
+
"doNotConfuseWith": [
|
|
1799
|
+
"ScSidebarResizeHandle",
|
|
1800
|
+
"ScVDivider"
|
|
1801
|
+
],
|
|
1802
|
+
"requiredProps": [
|
|
1803
|
+
"width",
|
|
1804
|
+
"onWidthChange",
|
|
1805
|
+
"min",
|
|
1806
|
+
"max"
|
|
1807
|
+
],
|
|
1808
|
+
"usedBy": [],
|
|
1809
|
+
"alsoExports": [
|
|
1810
|
+
"useStreamoidPanelWidth",
|
|
1811
|
+
"clampPanelWidth",
|
|
1812
|
+
"resolvePanelResize",
|
|
1813
|
+
"resolvePanelResizeKey",
|
|
1814
|
+
"PANEL_RESIZE_STEP_PX"
|
|
1815
|
+
],
|
|
1816
|
+
"exported": true
|
|
1817
|
+
},
|
|
1772
1818
|
"ScPlanCard": {
|
|
1773
1819
|
"doc": "ScPlanCard.md",
|
|
1774
1820
|
"source": "src/SC-Plan card",
|
|
@@ -4898,6 +4944,10 @@
|
|
|
4898
4944
|
"documentedIn": "ScAskAgentButton",
|
|
4899
4945
|
"doc": "ScAskAgentButton.md"
|
|
4900
4946
|
},
|
|
4947
|
+
"ScCxoWordmark": {
|
|
4948
|
+
"documentedIn": "ScStreamoidWordmark",
|
|
4949
|
+
"doc": "ScStreamoidWordmark.md"
|
|
4950
|
+
},
|
|
4901
4951
|
"ScStreamoidMascot": {
|
|
4902
4952
|
"documentedIn": "ScStreamoidWordmark",
|
|
4903
4953
|
"doc": "ScStreamoidWordmark.md"
|
|
@@ -4906,6 +4956,26 @@
|
|
|
4906
4956
|
"documentedIn": "ScStreamoidWordmark",
|
|
4907
4957
|
"doc": "ScStreamoidWordmark.md"
|
|
4908
4958
|
},
|
|
4959
|
+
"useStreamoidPanelWidth": {
|
|
4960
|
+
"documentedIn": "ScPanelResizeHandle",
|
|
4961
|
+
"doc": "ScPanelResizeHandle.md"
|
|
4962
|
+
},
|
|
4963
|
+
"clampPanelWidth": {
|
|
4964
|
+
"documentedIn": "ScPanelResizeHandle",
|
|
4965
|
+
"doc": "ScPanelResizeHandle.md"
|
|
4966
|
+
},
|
|
4967
|
+
"resolvePanelResize": {
|
|
4968
|
+
"documentedIn": "ScPanelResizeHandle",
|
|
4969
|
+
"doc": "ScPanelResizeHandle.md"
|
|
4970
|
+
},
|
|
4971
|
+
"resolvePanelResizeKey": {
|
|
4972
|
+
"documentedIn": "ScPanelResizeHandle",
|
|
4973
|
+
"doc": "ScPanelResizeHandle.md"
|
|
4974
|
+
},
|
|
4975
|
+
"PANEL_RESIZE_STEP_PX": {
|
|
4976
|
+
"documentedIn": "ScPanelResizeHandle",
|
|
4977
|
+
"doc": "ScPanelResizeHandle.md"
|
|
4978
|
+
},
|
|
4909
4979
|
"ProductWordmark": {
|
|
4910
4980
|
"documentedIn": "ScSideBarLogoUnit",
|
|
4911
4981
|
"doc": "ScSideBarLogoUnit.md"
|
package/dist/index.css
CHANGED
|
@@ -914,6 +914,44 @@
|
|
|
914
914
|
color: #9e9e9e;
|
|
915
915
|
}
|
|
916
916
|
|
|
917
|
+
/* src/SC-PanelResize/ScPanelResizeHandle.module.css */
|
|
918
|
+
.ScPanelResizeHandle_handle {
|
|
919
|
+
position: absolute;
|
|
920
|
+
top: 0;
|
|
921
|
+
bottom: 0;
|
|
922
|
+
width: 12px;
|
|
923
|
+
display: flex;
|
|
924
|
+
align-items: stretch;
|
|
925
|
+
justify-content: center;
|
|
926
|
+
padding: 0;
|
|
927
|
+
border: none;
|
|
928
|
+
background: transparent;
|
|
929
|
+
cursor: col-resize;
|
|
930
|
+
touch-action: none;
|
|
931
|
+
z-index: 5;
|
|
932
|
+
}
|
|
933
|
+
.ScPanelResizeHandle_left {
|
|
934
|
+
left: -6px;
|
|
935
|
+
}
|
|
936
|
+
.ScPanelResizeHandle_right {
|
|
937
|
+
right: -6px;
|
|
938
|
+
}
|
|
939
|
+
.ScPanelResizeHandle_handle:focus-visible {
|
|
940
|
+
outline: 2px solid var(--alias-border-focus, #7850de);
|
|
941
|
+
outline-offset: -2px;
|
|
942
|
+
}
|
|
943
|
+
.ScPanelResizeHandle_line {
|
|
944
|
+
width: 2px;
|
|
945
|
+
align-self: stretch;
|
|
946
|
+
background: transparent;
|
|
947
|
+
transition: background-color 120ms ease;
|
|
948
|
+
}
|
|
949
|
+
.ScPanelResizeHandle_handle:hover .ScPanelResizeHandle_line,
|
|
950
|
+
.ScPanelResizeHandle_handle:focus-visible .ScPanelResizeHandle_line,
|
|
951
|
+
.ScPanelResizeHandle_handle[data-active=true] .ScPanelResizeHandle_line {
|
|
952
|
+
background: var(--alias-border-focus, #7850de);
|
|
953
|
+
}
|
|
954
|
+
|
|
917
955
|
/* src/SC-Badges/ScBadges.module.css */
|
|
918
956
|
.ScBadges_scBadges,
|
|
919
957
|
.ScBadges_scBadges * {
|