@streamoid/ui 0.6.54 → 0.6.56
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/ScNewVersionNotice.md +189 -0
- package/dist/docs/ScWorkspaceAccountMenu.md +49 -1
- package/dist/docs/components.json +64 -2
- package/dist/index.d.mts +150 -2
- package/dist/index.d.ts +150 -2
- package/dist/index.js +1580 -1347
- package/dist/index.mjs +1558 -1325
- 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
|
+
128 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
|
|
@@ -141,6 +141,8 @@ theme-aware (dark on `:root`, light override) — never hardcode a colour.
|
|
|
141
141
|
- **`ScInfoPopup`** — use when a label or a table header needs a short explanation, and you want the standard ⓘ affordance next to it.
|
|
142
142
|
- **`ScMenuOptions`** — use when you need a row in a profile flyout, an account/settings menu, or a kebab/overflow menu.
|
|
143
143
|
- **`ScModal`** — use when you need a centered dialog that blocks the page — confirm, create/edit form, image preview, invite flow.
|
|
144
|
+
- **`ScNewVersionNotice`** — use when the app is a long-lived SPA tab and a deploy should not wait for the user to happen to reload.
|
|
145
|
+
- also documented here: `useNewVersionAvailable`, `parseVersionManifest`, `shouldPromptForNewVersion`
|
|
144
146
|
- **`ScPagination`** — use when you have a server-paged table or list and you already hold `page` + `offset` state and a refetch function.
|
|
145
147
|
- **`ScPopUpMenu`** _(legacy)_ — use when never, in new code.
|
|
146
148
|
- **`ScProgressBar`** — use when you have a known-percentage operation to show — an upload, a batch render, credits consumed.
|
|
@@ -181,8 +183,8 @@ theme-aware (dark on `:root`, light override) — never hardcode a colour.
|
|
|
181
183
|
- **`ScSidebarProfile`** _(legacy)_ — use when never. There is no way to pass a real user through it.
|
|
182
184
|
- **`ScSidebarSwitchMenu`** — use when you're building a "switch to another product" list inside a sidebar and each entry needs a name **and** a subtitle.
|
|
183
185
|
- **`ScVersion`** _(legacy)_ — use when never. `StreamoidSidebar` renders its own version footer inline from `versionText`.
|
|
184
|
-
- **`ScWorkspaceAccountMenu`** — use when building the standard workspace menu opened from the top-left of a Streamoid application sidebar. - Use `ScSidebarWorkspaceTrigger`, `ScSidebarSearchTrigger`, and `ScSidebarAppIdentity` for the matching constant rail controls. - Use the two preference hooks so theme and expanded/collapsed state survive an app switch across Streamoid subdomains. - Use `useStreamoidSidebarPopoverPosition` for a panel that belongs to the whole rail (the upper-right workspace menu) instead of hard-coded host coordinates. - Use `useStreamoidAnchoredPopoverPosition` for a panel that belongs to a BUTTON — the app switcher's grid trigger, a row's overflow menu. Pinning one of those to the sidebar card's edge leaves it floating mid-canvas with nothing connecting it to what was clicked; in Artifax it landed over the chat composer and its Send button.
|
|
185
|
-
- also documented here: `ScSidebarWorkspaceTrigger`, `ScSidebarSearchTrigger`, `ScSidebarAppIdentity`, `ScPopoverArrow`, `useStreamoidThemePreference`, `useStreamoidSidebarPreference`, `useStreamoidSidebarPopoverPosition`, `useStreamoidAnchoredPopover`, `useStreamoidAnchoredPopoverPosition`, `resolveAnchoredPopoverArrow`, `resolveAnchoredPopoverPosition`
|
|
186
|
+
- **`ScWorkspaceAccountMenu`** — use when building the standard workspace menu opened from the top-left of a Streamoid application sidebar. - Use `ScSidebarWorkspaceTrigger`, `ScSidebarSearchTrigger`, and `ScSidebarAppIdentity` for the matching constant rail controls. - Wire `ScSidebarSearchTrigger`'s `onPrefetch` AND `useStreamoidSearchShortcut` whenever the trigger opens a lazily-loaded dialog — which is every product. Without them the `⌘ K` the trigger draws does nothing, and the first click sits on a blank screen while the chunk downloads. - Use the two preference hooks so theme and expanded/collapsed state survive an app switch across Streamoid subdomains. - Use `useStreamoidSidebarPopoverPosition` for a panel that belongs to the whole rail (the upper-right workspace menu) instead of hard-coded host coordinates. - Use `useStreamoidAnchoredPopoverPosition` for a panel that belongs to a BUTTON — the app switcher's grid trigger, a row's overflow menu. Pinning one of those to the sidebar card's edge leaves it floating mid-canvas with nothing connecting it to what was clicked; in Artifax it landed over the chat composer and its Send button.
|
|
187
|
+
- also documented here: `ScSidebarWorkspaceTrigger`, `ScSidebarSearchTrigger`, `ScSidebarAppIdentity`, `ScPopoverArrow`, `useStreamoidThemePreference`, `useStreamoidSidebarPreference`, `useStreamoidSidebarPopoverPosition`, `useStreamoidAnchoredPopover`, `useStreamoidAnchoredPopoverPosition`, `useStreamoidSearchShortcut`, `matchesStreamoidSearchShortcut`, `resolveAnchoredPopoverArrow`, `resolveAnchoredPopoverPosition`
|
|
186
188
|
- **`StreamoidSidebar`** — use when you are building (or fixing) a desktop app's primary left navigation and you want the same chrome CXO, Photogenix and Catalogix use.
|
|
187
189
|
- also documented here: `ScSidebarResizeHandle`, `advanceSidebarResizeGesture`, `SIDEBAR_RESIZE_THRESHOLD_PX`
|
|
188
190
|
|
|
@@ -245,6 +247,7 @@ theme-aware (dark on `:root`, light override) — never hardcode a colour.
|
|
|
245
247
|
| `ScMobileBottomAction` | `ScButton`, `ScMobileTopNav`, `ScFieldButton`, `ScOnlyIcon` |
|
|
246
248
|
| `ScMobileTopNav` | `ScHeader`, `ScTableHeader`, `ScSideBarLogoUnit`, `ScMobileBottomAction`, `ScTabSwitcher` |
|
|
247
249
|
| `ScModal` | `ScDrawer`, `ScInfoPopup`, `ScProfilePopup` |
|
|
250
|
+
| `ScNewVersionNotice` | `ScBadges`, `CreditWarningBanner` |
|
|
248
251
|
| `ScOnlyIcon` | `ScOnlyField`, `ScButton`, `ScFieldButton`, `ScSidebarIcons` |
|
|
249
252
|
| `ScPagination` | `ScCounter`, `ScTabs`, `ScOnlyField` |
|
|
250
253
|
| `ScPairtext` | `ScCheckField`, `ScCheckbox`, `ScRadio`, `ScSelection`, `ScSelectionPill`, `ScMenuOptions` |
|
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
---
|
|
2
|
+
component: ScNewVersionNotice
|
|
3
|
+
package: "@streamoid/ui"
|
|
4
|
+
category: overlays
|
|
5
|
+
status: stable
|
|
6
|
+
renders: div
|
|
7
|
+
tags: [deploy, version, reload, notice, portal, toast]
|
|
8
|
+
related: [ScSidebarPopover, ScErrorBoundary]
|
|
9
|
+
do_not_confuse_with: [ScBadges, CreditWarningBanner]
|
|
10
|
+
used_by: [artifax, photogenix, tactix, cxo]
|
|
11
|
+
required_props: [buildId]
|
|
12
|
+
also_exports: [useNewVersionAvailable, parseVersionManifest, shouldPromptForNewVersion]
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
# New-version notice
|
|
16
|
+
|
|
17
|
+
Tells the user a newer build is deployed and lets them take it. Renders nothing
|
|
18
|
+
until there is something to say, and portals to `<body>` so no host layout has
|
|
19
|
+
to make room for it.
|
|
20
|
+
|
|
21
|
+
## TL;DR for agents
|
|
22
|
+
|
|
23
|
+
- **Reach for it when:** the app is a long-lived SPA tab and a deploy should not
|
|
24
|
+
wait for the user to happen to reload.
|
|
25
|
+
- **You must pass `buildId`.** It comes from a compile-time define, and every app
|
|
26
|
+
spells it differently (`__BUILD_ID__` in Artifax and Tactix,
|
|
27
|
+
`__PHOTOGENIX_BUILD_ID__` in Photogenix). A library cannot read another
|
|
28
|
+
bundle's define, so there is nothing to infer.
|
|
29
|
+
- Pass `enabled={!import.meta.env.DEV}`. In dev there is nothing to compare
|
|
30
|
+
against: the manifest is emitted by a build-only plugin and the dev server
|
|
31
|
+
rebuilds in place.
|
|
32
|
+
- Want the boolean without the UI? `useNewVersionAvailable({ buildId })`.
|
|
33
|
+
|
|
34
|
+
```tsx
|
|
35
|
+
<ScNewVersionNotice
|
|
36
|
+
buildId={typeof __BUILD_ID__ === 'string' ? __BUILD_ID__ : ''}
|
|
37
|
+
enabled={!import.meta.env.DEV}
|
|
38
|
+
/>
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
## 1. How to use it
|
|
42
|
+
|
|
43
|
+
```tsx
|
|
44
|
+
import { ScNewVersionNotice } from "@streamoid/ui"
|
|
45
|
+
|
|
46
|
+
<ScNewVersionNotice
|
|
47
|
+
buildId={typeof __BUILD_ID__ === 'string' ? __BUILD_ID__ : ''}
|
|
48
|
+
enabled={!import.meta.env.DEV}
|
|
49
|
+
/>
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
| Prop | Default | Notes |
|
|
53
|
+
| --- | --- | --- |
|
|
54
|
+
| `buildId` | — | The id baked into the bundle that is RUNNING. Required in practice: without it the check is disabled. |
|
|
55
|
+
| `manifestUrl` | `/version.json` | Where the DEPLOYED id is published. |
|
|
56
|
+
| `pollIntervalMs` | `300000` | Backstop only; the focus check is the one that matters. |
|
|
57
|
+
| `enabled` | `true` | Pass `!import.meta.env.DEV`. |
|
|
58
|
+
| `title` | `A new version is available` | |
|
|
59
|
+
| `description` | `Refresh to get the latest updates.` | |
|
|
60
|
+
| `refreshLabel` / `dismissLabel` | `Refresh` / `Later` | |
|
|
61
|
+
| `onRefresh` | `window.location.reload()` | Override only to save work first — then still reload. |
|
|
62
|
+
| `testId` | `new-version-notice` | |
|
|
63
|
+
|
|
64
|
+
Want the boolean without the UI: `useNewVersionAvailable({ buildId })`.
|
|
65
|
+
|
|
66
|
+
## 2. Where to use it
|
|
67
|
+
|
|
68
|
+
Mount it once, high in the tree — beside the router, not inside a route — so it
|
|
69
|
+
survives navigation. It portals to `<body>` and renders `null` until there is
|
|
70
|
+
something to say, so it costs a host nothing to mount early and needs no room
|
|
71
|
+
made for it in any layout.
|
|
72
|
+
|
|
73
|
+
## 3. When to use it
|
|
74
|
+
|
|
75
|
+
When the app is a long-lived SPA tab and a deploy should not wait for the user
|
|
76
|
+
to happen to reload. Skip it for short-lived surfaces, embedded widgets, and
|
|
77
|
+
anything already inside a host that prompts for it.
|
|
78
|
+
|
|
79
|
+
## What the host still owns
|
|
80
|
+
|
|
81
|
+
|
|
82
|
+
Two pieces of build plumbing, because they are the host's build:
|
|
83
|
+
|
|
84
|
+
1. **Emit the manifest.** A Vite plugin writes `version.json` next to the build
|
|
85
|
+
and bakes the same id in as a define:
|
|
86
|
+
|
|
87
|
+
```ts
|
|
88
|
+
function buildVersionManifest(buildId: string): Plugin {
|
|
89
|
+
return {
|
|
90
|
+
name: 'build-version-manifest',
|
|
91
|
+
apply: 'build',
|
|
92
|
+
generateBundle() {
|
|
93
|
+
this.emitFile({
|
|
94
|
+
type: 'asset',
|
|
95
|
+
fileName: 'version.json',
|
|
96
|
+
source: JSON.stringify({ buildId }, null, 2) + '\n',
|
|
97
|
+
})
|
|
98
|
+
},
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
const buildId = process.env.VITE_BUILD_ID?.trim() || String(Date.now())
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
2. **Serve it uncached.** This is not a tuning detail — a cached manifest
|
|
105
|
+
reports the version the tab already has, forever, which is exactly what the
|
|
106
|
+
check exists to detect:
|
|
107
|
+
|
|
108
|
+
```nginx
|
|
109
|
+
location = /version.json {
|
|
110
|
+
add_header Cache-Control "no-store" always;
|
|
111
|
+
try_files $uri =404; # not the SPA fallback: index.html is not JSON
|
|
112
|
+
}
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
## Design decisions worth not relitigating
|
|
116
|
+
|
|
117
|
+
|
|
118
|
+
**It asks; it does not reload.** Reloading under someone mid-sentence in a chat,
|
|
119
|
+
mid-upload or mid-form loses their work.
|
|
120
|
+
|
|
121
|
+
**It is persistent, and dismissible.** A notice that disappears after five
|
|
122
|
+
seconds is a notice nobody reads. Dismissing costs nothing, because the next
|
|
123
|
+
full page load picks the new build up anyway.
|
|
124
|
+
|
|
125
|
+
**Not knowing is never grounds to prompt.** Offline, mid-redeploy, a dev bundle
|
|
126
|
+
with no define, `/version.json` answered by the SPA catch-all with `index.html`
|
|
127
|
+
— all normal, none evidence of a newer build. `shouldPromptForNewVersion`
|
|
128
|
+
requires two known ids that differ. Getting this wrong shows the notice to
|
|
129
|
+
everyone, forever, which is worse than never showing it.
|
|
130
|
+
|
|
131
|
+
**It latches.** A build cannot become un-new, and flickering the prompt because
|
|
132
|
+
one poll failed is worse than not showing it.
|
|
133
|
+
|
|
134
|
+
**Polling is deliberately slow (5 min).** The check that matters is the one on
|
|
135
|
+
focus — someone returning to a tab they left open. The interval is a backstop.
|
|
136
|
+
|
|
137
|
+
**The refresh button does not use `--alias-text---icons-onfill`.** That token
|
|
138
|
+
looks right for a label on a filled button and is not: it resolves to the same
|
|
139
|
+
ramp step as the fill, so the label matches the background in *both* themes. It
|
|
140
|
+
cost Artifax a white label on a white card. Use
|
|
141
|
+
`--alias-text---icons-inverse`, which is `--alias-fill-base-base`'s actual
|
|
142
|
+
inverse. A test guards this.
|
|
143
|
+
|
|
144
|
+
## 4. Why to use it
|
|
145
|
+
|
|
146
|
+
Because this was three copies and a gap. Artifax and Photogenix each shipped a
|
|
147
|
+
`NewVersionNotice` plus a `useNewVersionAvailable`; CXO raises the same message
|
|
148
|
+
on a toast. The three were the same component down to the copy, and differed in
|
|
149
|
+
exactly the ways duplication gets expensive: quote style, the name of the
|
|
150
|
+
build-id global, and whether a `204` was handled — only one of them did. Tactix
|
|
151
|
+
had none at all, so a deployed Tactix tab stayed on its old bundle until someone
|
|
152
|
+
reloaded by chance. Fixing the `onfill` token bug in one app fixed it in one app.
|
|
153
|
+
|
|
154
|
+
## Gotchas
|
|
155
|
+
|
|
156
|
+
- **`buildId` is not optional in practice.** Omit it and the hook disables
|
|
157
|
+
itself — deliberately, because not knowing which build you are is not evidence
|
|
158
|
+
that a newer one exists. A notice that never appears looks identical to a
|
|
159
|
+
working one, so check the define reaches the bundle.
|
|
160
|
+
- **`/version.json` must not be cached, and must not fall through to the SPA
|
|
161
|
+
catch-all.** A cached manifest reports the version the tab already has,
|
|
162
|
+
forever. `index.html` is not JSON, and the parse failure is swallowed — so
|
|
163
|
+
both mistakes look like "the notice never shows".
|
|
164
|
+
- **Do not reach for `--alias-text---icons-onfill`** on the refresh button. It
|
|
165
|
+
resolves to the same ramp step as the fill, so the label matches the
|
|
166
|
+
background in both themes. Use `--alias-text---icons-inverse`. A test guards
|
|
167
|
+
this.
|
|
168
|
+
- **It latches.** Once true it stays true for the life of the tab.
|
|
169
|
+
|
|
170
|
+
## In the wild
|
|
171
|
+
|
|
172
|
+
The two local copies this component generalises, both mounted once beside the
|
|
173
|
+
router:
|
|
174
|
+
|
|
175
|
+
```tsx
|
|
176
|
+
// artifax apps/artifax/src/App.tsx:32
|
|
177
|
+
<NewVersionNotice />
|
|
178
|
+
// photogenix dashboard/client/src/App.tsx:129
|
|
179
|
+
<NewVersionNotice />
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
Photogenix's copy (`dashboard/client/src/lib/useNewVersionAvailable.ts`) is the
|
|
183
|
+
only one of the three that handled a `204`; that behaviour is kept here.
|
|
184
|
+
|
|
185
|
+
## Related
|
|
186
|
+
|
|
187
|
+
- `ScSidebarPopover` — the other portaled surface in this package; it owns its
|
|
188
|
+
own card chrome for the same reason this owns its own.
|
|
189
|
+
- `ScErrorBoundary` — the other app-level thing mounted once beside the router.
|
|
@@ -9,7 +9,7 @@ related: [StreamoidSidebar, ScArtifaxSidebar, ScAppSwitchPanel, ScProfilePopup]
|
|
|
9
9
|
do_not_confuse_with: [ScProfilePopup, ScWorkspaceSwitcher, ScAppSwitchPanel]
|
|
10
10
|
used_by: [cxo, artifax, catalogix, photogenix]
|
|
11
11
|
required_props: [workspaceName, accountName]
|
|
12
|
-
also_exports: [ScSidebarWorkspaceTrigger, ScSidebarSearchTrigger, ScSidebarAppIdentity, ScPopoverArrow, useStreamoidThemePreference, useStreamoidSidebarPreference, useStreamoidSidebarPopoverPosition, useStreamoidAnchoredPopover, useStreamoidAnchoredPopoverPosition, resolveAnchoredPopoverArrow, resolveAnchoredPopoverPosition]
|
|
12
|
+
also_exports: [ScSidebarWorkspaceTrigger, ScSidebarSearchTrigger, ScSidebarAppIdentity, ScPopoverArrow, useStreamoidThemePreference, useStreamoidSidebarPreference, useStreamoidSidebarPopoverPosition, useStreamoidAnchoredPopover, useStreamoidAnchoredPopoverPosition, useStreamoidSearchShortcut, matchesStreamoidSearchShortcut, resolveAnchoredPopoverArrow, resolveAnchoredPopoverPosition]
|
|
13
13
|
---
|
|
14
14
|
|
|
15
15
|
# Shared Streamoid sidebar shell
|
|
@@ -25,6 +25,10 @@ shared popover-position hook keeps the desktop anchors consistent.
|
|
|
25
25
|
top-left of a Streamoid application sidebar.
|
|
26
26
|
- Use `ScSidebarWorkspaceTrigger`, `ScSidebarSearchTrigger`, and
|
|
27
27
|
`ScSidebarAppIdentity` for the matching constant rail controls.
|
|
28
|
+
- Wire `ScSidebarSearchTrigger`'s `onPrefetch` AND `useStreamoidSearchShortcut`
|
|
29
|
+
whenever the trigger opens a lazily-loaded dialog — which is every product.
|
|
30
|
+
Without them the `⌘ K` the trigger draws does nothing, and the first click
|
|
31
|
+
sits on a blank screen while the chunk downloads.
|
|
28
32
|
- Use the two preference hooks so theme and expanded/collapsed state survive an
|
|
29
33
|
app switch across Streamoid subdomains.
|
|
30
34
|
- Use `useStreamoidSidebarPopoverPosition` for a panel that belongs to the
|
|
@@ -67,6 +71,40 @@ const appSwitcherPosition = useStreamoidAnchoredPopoverPosition(
|
|
|
67
71
|
);
|
|
68
72
|
```
|
|
69
73
|
|
|
74
|
+
### `ScSidebarSearchTrigger` — the two props nobody wired
|
|
75
|
+
|
|
76
|
+
The trigger renders a `⌘ K` hint and opens a dialog the host owns. Both halves
|
|
77
|
+
of that promise need wiring, and for a long time neither was:
|
|
78
|
+
|
|
79
|
+
```tsx
|
|
80
|
+
import {
|
|
81
|
+
ScSidebarSearchTrigger,
|
|
82
|
+
useStreamoidSearchShortcut,
|
|
83
|
+
} from "@streamoid/ui";
|
|
84
|
+
|
|
85
|
+
const [searchOpen, setSearchOpen] = useState(false);
|
|
86
|
+
|
|
87
|
+
// The chord the trigger advertises. A TOGGLE, not an open — every other
|
|
88
|
+
// command palette closes on the same keys that opened it.
|
|
89
|
+
useStreamoidSearchShortcut({ onTrigger: () => setSearchOpen((o) => !o) });
|
|
90
|
+
|
|
91
|
+
<ScSidebarSearchTrigger
|
|
92
|
+
expanded={expanded}
|
|
93
|
+
onClick={() => setSearchOpen(true)}
|
|
94
|
+
// Hover and focus, before the click. In CXO and Artifax this dialog lives in
|
|
95
|
+
// `@streamoid/agent` — 5.3MB behind a `Suspense` fallback of `null` — so the
|
|
96
|
+
// FIRST click looked like it did nothing at all. On intent rather than on
|
|
97
|
+
// idle: most sessions never open it and should not download it.
|
|
98
|
+
onPrefetch={() => void import("@streamoid/agent")}
|
|
99
|
+
/>;
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
`ScArtifaxSidebar` forwards the same thing as `header.onSearchPrefetch`.
|
|
103
|
+
|
|
104
|
+
`matchesStreamoidSearchShortcut(event, letter?)` is the hook's chord test,
|
|
105
|
+
exported separately so a host with its own key handling can ask the same
|
|
106
|
+
question rather than re-deriving the modifier rules.
|
|
107
|
+
|
|
70
108
|
### `useStreamoidAnchoredPopoverPosition(anchorRef, panelRef, options)`
|
|
71
109
|
|
|
72
110
|
| Option | Type | Default | Purpose |
|
|
@@ -146,6 +184,16 @@ copies of the same shell.
|
|
|
146
184
|
- Legacy sidebar keys describe the collapsed state, while the hook exposes the
|
|
147
185
|
positive `expanded` state. Both hooks continue mirroring supplied legacy keys
|
|
148
186
|
so older code in the same host stays synchronized during migration.
|
|
187
|
+
- `useStreamoidSearchShortcut` calls `preventDefault`. It has to: Chrome and
|
|
188
|
+
Firefox both send Ctrl+K to the address bar, so without it the rail's own
|
|
189
|
+
search loses to the browser. It also fires while a text field has focus,
|
|
190
|
+
which is deliberate — the chord is how you leave the field.
|
|
191
|
+
- `onPrefetch` fires on EVERY hover, so it must be cheap and idempotent. A bare
|
|
192
|
+
`() => void import("…")` is the intended shape; dynamic imports are cached,
|
|
193
|
+
so the second hover costs nothing. Do not put a fetch behind it.
|
|
194
|
+
- The shortcut matches on `event.key`, not `event.code`. `code` is physical, so
|
|
195
|
+
on AZERTY or Dvorak the key labelled K is not `KeyK` and the shortcut would
|
|
196
|
+
land somewhere other than the `⌘ K` the rail is showing.
|
|
149
197
|
|
|
150
198
|
## In the wild
|
|
151
199
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"package": "@streamoid/ui",
|
|
3
|
-
"count":
|
|
3
|
+
"count": 128,
|
|
4
4
|
"components": {
|
|
5
5
|
"ScAccess": {
|
|
6
6
|
"doc": "ScAccess.md",
|
|
@@ -1688,6 +1688,46 @@
|
|
|
1688
1688
|
"alsoExports": [],
|
|
1689
1689
|
"exported": true
|
|
1690
1690
|
},
|
|
1691
|
+
"ScNewVersionNotice": {
|
|
1692
|
+
"doc": "ScNewVersionNotice.md",
|
|
1693
|
+
"source": "src/SC-NewVersionNotice",
|
|
1694
|
+
"category": "overlays",
|
|
1695
|
+
"status": "stable",
|
|
1696
|
+
"renders": "div",
|
|
1697
|
+
"summary": "Reach for it when:",
|
|
1698
|
+
"reachForWhen": "the app is a long-lived SPA tab and a deploy should not wait for the user to happen to reload.",
|
|
1699
|
+
"tags": [
|
|
1700
|
+
"deploy",
|
|
1701
|
+
"version",
|
|
1702
|
+
"reload",
|
|
1703
|
+
"notice",
|
|
1704
|
+
"portal",
|
|
1705
|
+
"toast"
|
|
1706
|
+
],
|
|
1707
|
+
"related": [
|
|
1708
|
+
"ScSidebarPopover",
|
|
1709
|
+
"ScErrorBoundary"
|
|
1710
|
+
],
|
|
1711
|
+
"doNotConfuseWith": [
|
|
1712
|
+
"ScBadges",
|
|
1713
|
+
"CreditWarningBanner"
|
|
1714
|
+
],
|
|
1715
|
+
"requiredProps": [
|
|
1716
|
+
"buildId"
|
|
1717
|
+
],
|
|
1718
|
+
"usedBy": [
|
|
1719
|
+
"artifax",
|
|
1720
|
+
"photogenix",
|
|
1721
|
+
"tactix",
|
|
1722
|
+
"cxo"
|
|
1723
|
+
],
|
|
1724
|
+
"alsoExports": [
|
|
1725
|
+
"useNewVersionAvailable",
|
|
1726
|
+
"parseVersionManifest",
|
|
1727
|
+
"shouldPromptForNewVersion"
|
|
1728
|
+
],
|
|
1729
|
+
"exported": true
|
|
1730
|
+
},
|
|
1691
1731
|
"ScOnlyIcon": {
|
|
1692
1732
|
"doc": "ScOnlyIcon.md",
|
|
1693
1733
|
"source": "src/SC-OnlyIcon",
|
|
@@ -2789,7 +2829,7 @@
|
|
|
2789
2829
|
"status": "stable",
|
|
2790
2830
|
"renders": "div",
|
|
2791
2831
|
"summary": "Reach for it when:",
|
|
2792
|
-
"reachForWhen": "building the standard workspace menu opened from the top-left of a Streamoid application sidebar. - Use `ScSidebarWorkspaceTrigger`, `ScSidebarSearchTrigger`, and `ScSidebarAppIdentity` for the matching constant rail controls. - Use the two preference hooks so theme and expanded/collapsed state survive an app switch across Streamoid subdomains. - Use `useStreamoidSidebarPopoverPosition` for a panel that belongs to the whole rail (the upper-right workspace menu) instead of hard-coded host coordinates. - Use `useStreamoidAnchoredPopoverPosition` for a panel that belongs to a BUTTON — the app switcher's grid trigger, a row's overflow menu. Pinning one of those to the sidebar card's edge leaves it floating mid-canvas with nothing connecting it to what was clicked; in Artifax it landed over the chat composer and its Send button.",
|
|
2832
|
+
"reachForWhen": "building the standard workspace menu opened from the top-left of a Streamoid application sidebar. - Use `ScSidebarWorkspaceTrigger`, `ScSidebarSearchTrigger`, and `ScSidebarAppIdentity` for the matching constant rail controls. - Wire `ScSidebarSearchTrigger`'s `onPrefetch` AND `useStreamoidSearchShortcut` whenever the trigger opens a lazily-loaded dialog — which is every product. Without them the `⌘ K` the trigger draws does nothing, and the first click sits on a blank screen while the chunk downloads. - Use the two preference hooks so theme and expanded/collapsed state survive an app switch across Streamoid subdomains. - Use `useStreamoidSidebarPopoverPosition` for a panel that belongs to the whole rail (the upper-right workspace menu) instead of hard-coded host coordinates. - Use `useStreamoidAnchoredPopoverPosition` for a panel that belongs to a BUTTON — the app switcher's grid trigger, a row's overflow menu. Pinning one of those to the sidebar card's edge leaves it floating mid-canvas with nothing connecting it to what was clicked; in Artifax it landed over the chat composer and its Send button.",
|
|
2793
2833
|
"tags": [
|
|
2794
2834
|
"sidebar",
|
|
2795
2835
|
"workspace",
|
|
@@ -2829,6 +2869,8 @@
|
|
|
2829
2869
|
"useStreamoidSidebarPopoverPosition",
|
|
2830
2870
|
"useStreamoidAnchoredPopover",
|
|
2831
2871
|
"useStreamoidAnchoredPopoverPosition",
|
|
2872
|
+
"useStreamoidSearchShortcut",
|
|
2873
|
+
"matchesStreamoidSearchShortcut",
|
|
2832
2874
|
"resolveAnchoredPopoverArrow",
|
|
2833
2875
|
"resolveAnchoredPopoverPosition"
|
|
2834
2876
|
],
|
|
@@ -5001,6 +5043,18 @@
|
|
|
5001
5043
|
"documentedIn": "ScStreamoidWordmark",
|
|
5002
5044
|
"doc": "ScStreamoidWordmark.md"
|
|
5003
5045
|
},
|
|
5046
|
+
"useNewVersionAvailable": {
|
|
5047
|
+
"documentedIn": "ScNewVersionNotice",
|
|
5048
|
+
"doc": "ScNewVersionNotice.md"
|
|
5049
|
+
},
|
|
5050
|
+
"parseVersionManifest": {
|
|
5051
|
+
"documentedIn": "ScNewVersionNotice",
|
|
5052
|
+
"doc": "ScNewVersionNotice.md"
|
|
5053
|
+
},
|
|
5054
|
+
"shouldPromptForNewVersion": {
|
|
5055
|
+
"documentedIn": "ScNewVersionNotice",
|
|
5056
|
+
"doc": "ScNewVersionNotice.md"
|
|
5057
|
+
},
|
|
5004
5058
|
"useStreamoidPanelWidth": {
|
|
5005
5059
|
"documentedIn": "ScPanelResizeHandle",
|
|
5006
5060
|
"doc": "ScPanelResizeHandle.md"
|
|
@@ -5081,6 +5135,14 @@
|
|
|
5081
5135
|
"documentedIn": "ScWorkspaceAccountMenu",
|
|
5082
5136
|
"doc": "ScWorkspaceAccountMenu.md"
|
|
5083
5137
|
},
|
|
5138
|
+
"useStreamoidSearchShortcut": {
|
|
5139
|
+
"documentedIn": "ScWorkspaceAccountMenu",
|
|
5140
|
+
"doc": "ScWorkspaceAccountMenu.md"
|
|
5141
|
+
},
|
|
5142
|
+
"matchesStreamoidSearchShortcut": {
|
|
5143
|
+
"documentedIn": "ScWorkspaceAccountMenu",
|
|
5144
|
+
"doc": "ScWorkspaceAccountMenu.md"
|
|
5145
|
+
},
|
|
5084
5146
|
"resolveAnchoredPopoverArrow": {
|
|
5085
5147
|
"documentedIn": "ScWorkspaceAccountMenu",
|
|
5086
5148
|
"doc": "ScWorkspaceAccountMenu.md"
|
package/dist/index.d.mts
CHANGED
|
@@ -597,6 +597,80 @@ interface IScMenuOptionsProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
|
597
597
|
}
|
|
598
598
|
declare const ScMenuOptions: ({ icon, version, hover, variant, className, text, ...props }: IScMenuOptionsProps) => React.JSX.Element;
|
|
599
599
|
|
|
600
|
+
interface IUseNewVersionAvailableOptions {
|
|
601
|
+
/** The build id baked into the bundle that is RUNNING.
|
|
602
|
+
*
|
|
603
|
+
* The host has to pass this: it comes from a compile-time define, and every
|
|
604
|
+
* app spells it differently (`__BUILD_ID__` in Artifax and Tactix,
|
|
605
|
+
* `__PHOTOGENIX_BUILD_ID__` in Photogenix). A library cannot read another
|
|
606
|
+
* bundle's define, so there is nothing to guess here.
|
|
607
|
+
*
|
|
608
|
+
* Empty or undefined disables the check rather than prompting: not knowing
|
|
609
|
+
* which build you are is not evidence that a newer one exists. */
|
|
610
|
+
buildId?: string;
|
|
611
|
+
/** Where the DEPLOYED build id is published. Defaults to `/version.json`,
|
|
612
|
+
* which is what every Streamoid app's build emits. */
|
|
613
|
+
manifestUrl?: string;
|
|
614
|
+
pollIntervalMs?: number;
|
|
615
|
+
/** Pass `false` in dev. There is nothing to compare against: the manifest is
|
|
616
|
+
* emitted by a build-only plugin, and the dev server rebuilds in place. */
|
|
617
|
+
enabled?: boolean;
|
|
618
|
+
}
|
|
619
|
+
/** The deployed build id out of a `/version.json` body, or `null`.
|
|
620
|
+
*
|
|
621
|
+
* Exported because it is where the surprises live, and a hook is awkward to
|
|
622
|
+
* test: the SPA catch-all can answer this route with `index.html`, a partial
|
|
623
|
+
* deploy can serve `{}`, and a hand-edited manifest can put a number there.
|
|
624
|
+
* None of those are a newer build. */
|
|
625
|
+
declare function parseVersionManifest(body: unknown): string | null;
|
|
626
|
+
/** Whether `deployed` is grounds to prompt someone to reload.
|
|
627
|
+
*
|
|
628
|
+
* Only a KNOWN id that DIFFERS counts. Not knowing which build is deployed,
|
|
629
|
+
* and not knowing which build you are running, are both the normal state —
|
|
630
|
+
* offline, mid-redeploy, a dev server — and neither is evidence of a newer
|
|
631
|
+
* build. Prompting on either would show the notice to everyone, forever. */
|
|
632
|
+
declare function shouldPromptForNewVersion(current: string | null | undefined, deployed: string | null | undefined): boolean;
|
|
633
|
+
/**
|
|
634
|
+
* Whether the server is serving a newer build than this tab is running.
|
|
635
|
+
*
|
|
636
|
+
* Latches once true: a build cannot become un-new, and flickering the prompt
|
|
637
|
+
* because one poll failed would be worse than not showing it.
|
|
638
|
+
*
|
|
639
|
+
* This was three near-identical copies — Artifax's and Photogenix's hooks of
|
|
640
|
+
* this name and CXO's toast — differing only in quote style, the name of the
|
|
641
|
+
* build-id global, and whether they handled a 204. They handle it here.
|
|
642
|
+
*/
|
|
643
|
+
declare function useNewVersionAvailable(options?: IUseNewVersionAvailableOptions): boolean;
|
|
644
|
+
|
|
645
|
+
interface IScNewVersionNoticeProps extends IUseNewVersionAvailableOptions {
|
|
646
|
+
title?: ReactNode;
|
|
647
|
+
description?: ReactNode;
|
|
648
|
+
refreshLabel?: ReactNode;
|
|
649
|
+
dismissLabel?: ReactNode;
|
|
650
|
+
/** Defaults to a plain `window.location.reload()`. Override only to save
|
|
651
|
+
* work first — and then still reload. */
|
|
652
|
+
onRefresh?: () => void;
|
|
653
|
+
testId?: string;
|
|
654
|
+
className?: string;
|
|
655
|
+
style?: CSSProperties;
|
|
656
|
+
}
|
|
657
|
+
/**
|
|
658
|
+
* Tell the user a newer build is deployed, and let them take it.
|
|
659
|
+
*
|
|
660
|
+
* DELIBERATELY NOT AUTOMATIC. Reloading under someone mid-sentence in a chat,
|
|
661
|
+
* mid-upload, or mid-form loses their work; every app that does this well asks
|
|
662
|
+
* rather than acts. It is persistent for the same reason — a notice about an
|
|
663
|
+
* update that disappears after five seconds is a notice nobody reads — and
|
|
664
|
+
* dismissible, because the next full page load picks the new version up
|
|
665
|
+
* regardless, so nothing is lost by ignoring it.
|
|
666
|
+
*
|
|
667
|
+
* TOP-RIGHT, because CXO raises this on a `Toaster` pinned there and the rest
|
|
668
|
+
* of the family follows it. Bottom-right puts the same message in a different
|
|
669
|
+
* corner of the same product family, and tends to land on a composer or a
|
|
670
|
+
* grid's controls — which is where someone is working.
|
|
671
|
+
*/
|
|
672
|
+
declare function ScNewVersionNotice({ title, description, refreshLabel, dismissLabel, onRefresh, testId, className, style, ...availability }: IScNewVersionNoticeProps): React$1.ReactPortal | null;
|
|
673
|
+
|
|
600
674
|
interface IScOnlyIconProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
601
675
|
className?: string;
|
|
602
676
|
variant?: "default";
|
|
@@ -924,9 +998,26 @@ interface ScSidebarSearchTriggerProps {
|
|
|
924
998
|
label?: string;
|
|
925
999
|
shortcut?: string;
|
|
926
1000
|
onClick?: () => void;
|
|
1001
|
+
/**
|
|
1002
|
+
* Hover or keyboard-focus, BEFORE the click — the host's cue to start
|
|
1003
|
+
* fetching whatever the search dialog needs.
|
|
1004
|
+
*
|
|
1005
|
+
* Every product opens this trigger onto a lazily-loaded dialog, and in CXO
|
|
1006
|
+
* and Artifax that dialog lives in `@streamoid/agent`: 5.3MB, behind a
|
|
1007
|
+
* `Suspense` fallback of `null`. So the FIRST click looked like it did
|
|
1008
|
+
* nothing at all while the chunk downloaded. Hovering is a strong enough
|
|
1009
|
+
* signal to pay for the same bytes the click needs a moment later, and it is
|
|
1010
|
+
* the reason this is on hover rather than on idle — most sessions never open
|
|
1011
|
+
* the dialog and should not download it.
|
|
1012
|
+
*
|
|
1013
|
+
* Must be cheap and idempotent: it fires on EVERY hover. A bare
|
|
1014
|
+
* `() => void import('@streamoid/agent')` is the intended shape — dynamic
|
|
1015
|
+
* imports are cached, so the second call costs nothing.
|
|
1016
|
+
*/
|
|
1017
|
+
onPrefetch?: () => void;
|
|
927
1018
|
className?: string;
|
|
928
1019
|
}
|
|
929
|
-
declare function ScSidebarSearchTrigger({ expanded, label, shortcut, onClick, className, }: ScSidebarSearchTriggerProps): JSX.Element;
|
|
1020
|
+
declare function ScSidebarSearchTrigger({ expanded, label, shortcut, onClick, onPrefetch, className, }: ScSidebarSearchTriggerProps): JSX.Element;
|
|
930
1021
|
interface ScSidebarAppIdentityProps {
|
|
931
1022
|
expanded: boolean;
|
|
932
1023
|
product?: AppcardProduct | "streamoid";
|
|
@@ -969,6 +1060,58 @@ interface ScWorkspaceAccountMenuProps extends Omit<React.HTMLAttributes<HTMLDivE
|
|
|
969
1060
|
/** Shared workspace/account menu used by every Streamoid application sidebar. */
|
|
970
1061
|
declare function ScWorkspaceAccountMenu({ workspaceName, workspaceRole, workspaceImage, credits, onSwitchWorkspace, onInviteMembers, onBilling, organizationName, organizationRole, onOrganizationClick, accountName, accountEmail, accountImage, onAccountClick, themeMode, onThemeModeChange, className, ...props }: ScWorkspaceAccountMenuProps): JSX.Element;
|
|
971
1062
|
|
|
1063
|
+
/** The shape `matchesStreamoidSearchShortcut` needs — a subset of
|
|
1064
|
+
* `KeyboardEvent`, so the predicate is testable without a DOM. */
|
|
1065
|
+
interface StreamoidSearchShortcutEvent {
|
|
1066
|
+
key: string;
|
|
1067
|
+
metaKey: boolean;
|
|
1068
|
+
ctrlKey: boolean;
|
|
1069
|
+
altKey: boolean;
|
|
1070
|
+
}
|
|
1071
|
+
/**
|
|
1072
|
+
* Is this keydown the search chord?
|
|
1073
|
+
*
|
|
1074
|
+
* Pure and exported so the decision can be tested without a DOM, the same way
|
|
1075
|
+
* `resolvePanelResize` is split out of the resize handle.
|
|
1076
|
+
*
|
|
1077
|
+
* - `metaKey` OR `ctrlKey`, so one binding serves macOS and everything else.
|
|
1078
|
+
* - `altKey` is excluded, so ⌥⌘K and Ctrl+Alt+K stay with the browser.
|
|
1079
|
+
* - `event.key` and not `event.code`: `key` carries the CHARACTER, already
|
|
1080
|
+
* resolved through the keyboard layout. `code` is physical, so on AZERTY or
|
|
1081
|
+
* Dvorak the key labelled K is not `KeyK` and the shortcut would land under
|
|
1082
|
+
* a different letter than the `⌘ K` hint promises.
|
|
1083
|
+
*/
|
|
1084
|
+
declare function matchesStreamoidSearchShortcut(event: StreamoidSearchShortcutEvent, letter?: string): boolean;
|
|
1085
|
+
interface StreamoidSearchShortcutOptions {
|
|
1086
|
+
/** Fired on ⌘K / Ctrl+K. Its identity does not matter — it is read through a
|
|
1087
|
+
* ref, so an inline arrow will not rebind the listener each render. */
|
|
1088
|
+
onTrigger: () => void;
|
|
1089
|
+
/** Bind the key. `false` unbinds — e.g. while a modal owns the keyboard. */
|
|
1090
|
+
enabled?: boolean;
|
|
1091
|
+
/** The letter pressed with the modifier. Case-insensitive. */
|
|
1092
|
+
letter?: string;
|
|
1093
|
+
}
|
|
1094
|
+
/**
|
|
1095
|
+
* ⌘K / Ctrl+K, for the dialog `ScSidebarSearchTrigger` advertises.
|
|
1096
|
+
*
|
|
1097
|
+
* The trigger has drawn a `⌘ K` hint since it shipped and NO APP EVER BOUND THE
|
|
1098
|
+
* KEY — the one affordance telling people the rail has a command bar did
|
|
1099
|
+
* nothing when used. This lives here so the component that makes the promise
|
|
1100
|
+
* and the hook that keeps it ship together, rather than each product
|
|
1101
|
+
* rediscovering the same eight lines and getting the modifier handling
|
|
1102
|
+
* slightly different.
|
|
1103
|
+
*
|
|
1104
|
+
* The host still owns the dialog's open state, so this reports the chord and
|
|
1105
|
+
* decides nothing. Wire it to a TOGGLE rather than an open: every other command
|
|
1106
|
+
* palette closes on the same chord that opened it.
|
|
1107
|
+
*
|
|
1108
|
+
* It calls `preventDefault`, because Ctrl+K is taken — Chrome and Firefox both
|
|
1109
|
+
* send it to the address bar, and without this the rail's own search loses to
|
|
1110
|
+
* the browser. And it fires even while a text field has focus, which is
|
|
1111
|
+
* deliberate: the chord is how you leave the field.
|
|
1112
|
+
*/
|
|
1113
|
+
declare function useStreamoidSearchShortcut({ onTrigger, enabled, letter, }: StreamoidSearchShortcutOptions): void;
|
|
1114
|
+
|
|
972
1115
|
interface StreamoidThemePreferenceOptions {
|
|
973
1116
|
defaultMode?: ScShellThemeMode;
|
|
974
1117
|
legacyStorageKeys?: string[];
|
|
@@ -1248,6 +1391,11 @@ interface AppSidebarHeader {
|
|
|
1248
1391
|
searchLabel?: string;
|
|
1249
1392
|
searchShortcut?: string;
|
|
1250
1393
|
onSearchClick?: () => void;
|
|
1394
|
+
/** Hover/focus on the search trigger, so the host can start loading the
|
|
1395
|
+
* dialog before it is clicked. See `ScSidebarSearchTriggerProps.onPrefetch`
|
|
1396
|
+
* — the dialog is a 5.3MB lazy chunk in CXO and Artifax, and without this
|
|
1397
|
+
* the first click looks inert while it downloads. */
|
|
1398
|
+
onSearchPrefetch?: () => void;
|
|
1251
1399
|
/** Omit the search field entirely — a product that has no search yet. */
|
|
1252
1400
|
hideSearch?: boolean;
|
|
1253
1401
|
}
|
|
@@ -2617,4 +2765,4 @@ interface IScProfilePopupProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
|
2617
2765
|
*/
|
|
2618
2766
|
declare const ScProfilePopup: React$1.ForwardRefExoticComponent<IScProfilePopupProps & React$1.RefAttributes<HTMLDivElement>>;
|
|
2619
2767
|
|
|
2620
|
-
export { type AppSidebarAppIdentity, type AppSidebarAssistantCta, type AppSidebarCreditWarning, type AppSidebarHeader, type AppSidebarIconContext, type AppSidebarIconMap, type AppSidebarIconRenderer, type AppSidebarMenuItem, type AppSidebarProfile, type AppSidebarSection, type AppcardProduct, type ArtifaxMenuItem, type ArtifaxSection, type ArtifaxSidebarAppIdentity, type ArtifaxSidebarAssistantCta, type ArtifaxSidebarCreditWarning, type ArtifaxSidebarIconContext, type ArtifaxSidebarIconMap, type ArtifaxSidebarIconRenderer, type ArtifaxSidebarProfile, type AssistantCta, type CatalogixNavItem, type CatalogixSidebarCreditWarning, type CatalogixSidebarIconContext, type CatalogixSidebarIconMap, type CatalogixSidebarIconRenderer, type CatalogixSidebarProfile, type CatalogixSwitchApp, CreditWarningBanner, type CreditWarningBannerProps, type DescriptionVisibility, type IInvoiceHistoryMobileProps, type IScAccessProps, type IScAnnotatedError, type IScAppCardForCopilotProps, type IScAppCardProps, type IScAppCardV3Props, type IScAppFieldProps, type IScAppListingCardProps, type IScAppSidebarProps, type IScAppSwitchPanelProps, type IScAppcardLogosProps, type IScArtifaxInviteProps, type IScArtifaxSidebarProps, type IScAskAgentButtonProps, type IScBadgesProps, type IScBeaconProps, type IScBillingHistoryHeaderProps, type IScBillingHistoryTableListProps, type IScBillingLogsTableHeaderProps, type IScBillingLogsTableListProps, type IScBriefCardProps, type IScButtonProps, type IScCalendarDateCompsProps, type IScCalendarProps, type IScCatalogixInviteProps, type IScCatalogixSidebarProps, type IScCatalogixStoreHeaderProps, type IScCatalogixStoreTableListProps, type IScCheckFieldProps, type IScCheckboxProps, type IScCounterProps, type IScCreditsUsageCardMobileProps, type IScCreditsUsageCardProps, type IScCxoCopilotLogoProps, type IScCxoWordmarkProps, type IScDefaultCardProps, type IScDrawerProps, type IScErrorBoundaryProps, type IScErrorReport, type IScErrorReporterClient, type IScFieldButtonProps, type IScFileFieldProps, type IScGoogleSignInProps, type IScGuideProps, type IScHDividerProps, type IScHeaderProps, type IScImageFieldProps, type IScInChatListProps, type IScInChatMessageProps, type IScInfoPopupProps, type IScIntialProfileCoverProps, type IScLogoUnitProps, type IScMappingCardProps, type IScMediaApprovalProps, type IScMediaSelectProps, type IScMenuOptionsProps, type IScMobileBottomActionProps, type IScMobileTopNavProps, type IScModalProps, type IScOnlyFieldProps, type IScOnlyIconProps, type IScPaginationProps, type IScPairtextProps, type IScPanelResizeHandleProps, type IScPendingActionProps, type IScPhtogenixInviteProps, type IScPlanCardProps, type IScPlanComparisonProps, type IScPlanDetailsCardMobileProps, type IScPlanDetailsCardProps, type IScPopUpMenuProps, type IScPopoverArrowProps, type IScProfileImageUpdateProps, type IScProfileOptionsProps, type IScProfilePopupProps, type IScProfileProps, type IScProfileSettingsCompProps, type IScProfileV2MobileProps, type IScProgressBarProps, type IScQuickPromptProps, type IScRadioProps, type IScReferralCardMobileProps, type IScReferralTableHeaderProps, type IScReferralTableListProps, type IScRoleMobileProps, type IScRoleProps, type IScSelectOption, type IScSelectProps, type IScSelectionListProps, type IScSelectionPillGroupProps, type IScSelectionPillOption, type IScSelectionPillProps, type IScSelectionProps, type IScSettingsNavProps, type IScSettingsTabCompProps, type IScSideBarLogoUnitProps, type IScSidebarIconsProps, type IScSidebarMenuProps, type IScSidebarPopoverProps, type IScSidebarProfileProps, type IScSidebarProps, type IScSidebarSwitchMenuProps, type IScSliderProps, type IScStoreCardProps, type IScStrLogoProps, type IScStreamoidMascotProps, type IScStreamoidWordmarkProps, type IScSubAgentProps, type IScTabCompProps, type IScTabFieldProps, type IScTabSwitcherProps, type IScTableHeaderProps, type IScTableListMobileProps, type IScTableListProps, type IScTabsProps, type IScTaxonomyPillProps, type IScTextAreaProps, type IScTextFieldProps, type IScThinkingStepIconProps, type IScTodoItem, type IScTodoListProps, type IScToggleSwitchProps, type IScVDividerProps, type IScValueMappingL1Props, type IScVersionProps, type IScWorkspaceCardProps, type IScWorkspaceSettingsMobileProps, type IScWorkspaceSwitchMobileProps, type IScWorkspaceSwitchMobileV2Props, type IUsageHistoryMobileProps, type IcListIconState, InvoiceHistoryMobile, NscWorkspaceSwitch, PANEL_RESIZE_STEP_PX, type PanelResizeEdge, type PanelResizeGesture, type PanelWidthBounds, type PlanComparisonRow, type PlanComparisonSection, type PlanFeatureSection, ProductCollapsedMark, ProductWordmark, SC_APP_SWITCH_PANEL_WIDTH, SC_WORKSPACE_MENU_WIDTH, SIDEBAR_RESIZE_THRESHOLD_PX, STREAMOID_CHANGELOG_URL, STREAMOID_CHANGELOG_URLS, STREAMOID_STATUS_PAGE_URL, ScAccess, ScAppCard, ScAppCardForCopilot, ScAppCardV3, ScAppField, ScAppListingCard, ScAppSidebar, type ScAppSwitchItem, ScAppSwitchPanel, ScAppSwitchRow, type ScAppSwitchSystemItem, type ScAppSwitchUtilities, ScAppcardLogos, ScArtifaxInvite, ScArtifaxSidebar, ScAskAgentButton, ScAskAgentSlot, ScBadges, ScBeacon, type ScBeaconTone, ScBillingHistoryHeader, ScBillingHistoryTableList, ScBillingLogsTableHeader, ScBillingLogsTableList, ScBriefCard, ScButton, ScCalendar, ScCalendarDateComps, ScCatalogixInvite, ScCatalogixSidebar, ScCatalogixStoreHeader, ScCatalogixStoreTableList, ScCheckField, ScCheckbox, ScCounter, ScCreditsUsageCard, ScCreditsUsageCardMobile, ScCxoCopilotLogo, ScCxoWordmark, ScDefaultCard, ScDp, type ScDpProps, ScDrawer, ScErrorBoundary, type ScErrorReporter, ScFieldButton, ScFileField, ScGoogleSignIn, ScGuide, ScHDivider, ScHeader, ScImageField, ScInChatList, ScInChatMessage, ScInfoPopup, ScIntialProfileCover, ScLogoUnit, ScMappingCard, ScMediaApproval, ScMediaSelect, ScMenuOptions, ScMobileBottomAction, ScMobileTopNav, ScModal, ScOnlyField, ScOnlyIcon, ScPagination, ScPairtext, ScPanelResizeHandle, ScPendingAction, ScPhtogenixInvite, ScPlanCard, ScPlanComparison, ScPlanDetailsCard, ScPlanDetailsCardMobile, ScPopUpMenu, ScPopoverArrow, ScProfile, ScProfileImageUpdate, ScProfileOptions, ScProfilePopup, type ScProfilePopupThemeMode, ScProfileSettingsComp, ScProfileV2Mobile, ScProgressBar, ScQuickPrompt, ScRadio, ScReferralCardMobile, ScReferralTableHeader, ScReferralTableList, ScRole, ScRoleMobile, ScSelect, ScSelection, ScSelectionList, ScSelectionPill, ScSelectionPillGroup, ScSettingsNav, ScSettingsTabComp, type ScShellThemeMode, ScSideBarLogoUnit, ScSidebar, ScSidebarAppIdentity, type ScSidebarAppIdentityProps, ScSidebarIcons, ScSidebarMenu, ScSidebarPopover, ScSidebarProfile, ScSidebarResizeHandle, type ScSidebarResizeHandleProps, ScSidebarSearchTrigger, type ScSidebarSearchTriggerProps, ScSidebarSwitchMenu, ScSidebarWorkspaceTrigger, type ScSidebarWorkspaceTriggerProps, ScSlider, ScStoreCard, ScStrLogo, ScStreamoidMascot, ScStreamoidWordmark, ScSubAgent, type ScTab, ScTabComp, ScTabField, ScTabSwitcher, ScTableHeader, ScTableList, ScTableListMobile, ScTabs, ScTaxonomyPill, ScTextArea, ScTextField, ScThinkingStepIcon, ScTodoList, ScToggleSwitch, ScVDivider, ScValueMappingL1, ScVersion, ScWorkspaceAccountMenu, type ScWorkspaceAccountMenuProps, ScWorkspaceCard, ScWorkspaceSettingsMobile, ScWorkspaceSwitchCard, type ScWorkspaceSwitchCardProps, ScWorkspaceSwitchMobile, ScWorkspaceSwitchMobileV2, type SelectionListState, type SidebarAppIdentityConfig, type SidebarConfig, type SidebarIconContext, type SidebarIconMap, type SidebarIconRenderer, type SidebarMenuItemConfig, type SidebarProduct, type SidebarProfileConfig, type SidebarResizeGestureResult, type SidebarResizeGestureState, type SidebarSectionConfig, type StreamoidAnchorRect, type StreamoidAnchoredPopover, type StreamoidAnchoredPopoverArrow, type StreamoidAnchoredPopoverGeometry, type StreamoidAnchoredPopoverPosition, type StreamoidAnchoredPopoverPositionOptions, type StreamoidAppSwitchGroup, type StreamoidAppSwitchOptions, type StreamoidAppSwitchProduct, type StreamoidPanelWidthOptions, type StreamoidPanelWidthState, StreamoidSidebar, type StreamoidSidebarPopoverPlacement, type StreamoidSidebarPopoverPosition, type StreamoidSidebarPopoverPositionOptions, type StreamoidSidebarPreferenceOptions, type StreamoidSidebarPreferenceState, type StreamoidSidebarProps, type StreamoidThemePreferenceOptions, type StreamoidThemePreferenceState, StreamoidWorkspaceSwitcher, type StreamoidWorkspaceSwitcherProps, UsageHistoryMobile, type WorkspaceSwitcherConfig, type WorkspaceSwitcherItem, advanceSidebarResizeGesture, clampPanelWidth, createStreamoidAppSwitchUtilities, formatStreamoidAppVersion, formatSubAgentLabel, hasCollapsedMark, resolveAnchoredPopoverArrow, resolveAnchoredPopoverPosition, resolvePanelResize, resolvePanelResizeKey, scAppSwitchOrder, scCreatePostHogReporter, scGetErrorRef, streamoidAppSwitchGroups, streamoidAppSwitchTagline, streamoidChangelogUrl, useStreamoidAnchoredPopover, useStreamoidAnchoredPopoverPosition, useStreamoidPanelWidth, useStreamoidSidebarPopoverPosition, useStreamoidSidebarPreference, useStreamoidThemePreference };
|
|
2768
|
+
export { type AppSidebarAppIdentity, type AppSidebarAssistantCta, type AppSidebarCreditWarning, type AppSidebarHeader, type AppSidebarIconContext, type AppSidebarIconMap, type AppSidebarIconRenderer, type AppSidebarMenuItem, type AppSidebarProfile, type AppSidebarSection, type AppcardProduct, type ArtifaxMenuItem, type ArtifaxSection, type ArtifaxSidebarAppIdentity, type ArtifaxSidebarAssistantCta, type ArtifaxSidebarCreditWarning, type ArtifaxSidebarIconContext, type ArtifaxSidebarIconMap, type ArtifaxSidebarIconRenderer, type ArtifaxSidebarProfile, type AssistantCta, type CatalogixNavItem, type CatalogixSidebarCreditWarning, type CatalogixSidebarIconContext, type CatalogixSidebarIconMap, type CatalogixSidebarIconRenderer, type CatalogixSidebarProfile, type CatalogixSwitchApp, CreditWarningBanner, type CreditWarningBannerProps, type DescriptionVisibility, type IInvoiceHistoryMobileProps, type IScAccessProps, type IScAnnotatedError, type IScAppCardForCopilotProps, type IScAppCardProps, type IScAppCardV3Props, type IScAppFieldProps, type IScAppListingCardProps, type IScAppSidebarProps, type IScAppSwitchPanelProps, type IScAppcardLogosProps, type IScArtifaxInviteProps, type IScArtifaxSidebarProps, type IScAskAgentButtonProps, type IScBadgesProps, type IScBeaconProps, type IScBillingHistoryHeaderProps, type IScBillingHistoryTableListProps, type IScBillingLogsTableHeaderProps, type IScBillingLogsTableListProps, type IScBriefCardProps, type IScButtonProps, type IScCalendarDateCompsProps, type IScCalendarProps, type IScCatalogixInviteProps, type IScCatalogixSidebarProps, type IScCatalogixStoreHeaderProps, type IScCatalogixStoreTableListProps, type IScCheckFieldProps, type IScCheckboxProps, type IScCounterProps, type IScCreditsUsageCardMobileProps, type IScCreditsUsageCardProps, type IScCxoCopilotLogoProps, type IScCxoWordmarkProps, type IScDefaultCardProps, type IScDrawerProps, type IScErrorBoundaryProps, type IScErrorReport, type IScErrorReporterClient, type IScFieldButtonProps, type IScFileFieldProps, type IScGoogleSignInProps, type IScGuideProps, type IScHDividerProps, type IScHeaderProps, type IScImageFieldProps, type IScInChatListProps, type IScInChatMessageProps, type IScInfoPopupProps, type IScIntialProfileCoverProps, type IScLogoUnitProps, type IScMappingCardProps, type IScMediaApprovalProps, type IScMediaSelectProps, type IScMenuOptionsProps, type IScMobileBottomActionProps, type IScMobileTopNavProps, type IScModalProps, type IScNewVersionNoticeProps, type IScOnlyFieldProps, type IScOnlyIconProps, type IScPaginationProps, type IScPairtextProps, type IScPanelResizeHandleProps, type IScPendingActionProps, type IScPhtogenixInviteProps, type IScPlanCardProps, type IScPlanComparisonProps, type IScPlanDetailsCardMobileProps, type IScPlanDetailsCardProps, type IScPopUpMenuProps, type IScPopoverArrowProps, type IScProfileImageUpdateProps, type IScProfileOptionsProps, type IScProfilePopupProps, type IScProfileProps, type IScProfileSettingsCompProps, type IScProfileV2MobileProps, type IScProgressBarProps, type IScQuickPromptProps, type IScRadioProps, type IScReferralCardMobileProps, type IScReferralTableHeaderProps, type IScReferralTableListProps, type IScRoleMobileProps, type IScRoleProps, type IScSelectOption, type IScSelectProps, type IScSelectionListProps, type IScSelectionPillGroupProps, type IScSelectionPillOption, type IScSelectionPillProps, type IScSelectionProps, type IScSettingsNavProps, type IScSettingsTabCompProps, type IScSideBarLogoUnitProps, type IScSidebarIconsProps, type IScSidebarMenuProps, type IScSidebarPopoverProps, type IScSidebarProfileProps, type IScSidebarProps, type IScSidebarSwitchMenuProps, type IScSliderProps, type IScStoreCardProps, type IScStrLogoProps, type IScStreamoidMascotProps, type IScStreamoidWordmarkProps, type IScSubAgentProps, type IScTabCompProps, type IScTabFieldProps, type IScTabSwitcherProps, type IScTableHeaderProps, type IScTableListMobileProps, type IScTableListProps, type IScTabsProps, type IScTaxonomyPillProps, type IScTextAreaProps, type IScTextFieldProps, type IScThinkingStepIconProps, type IScTodoItem, type IScTodoListProps, type IScToggleSwitchProps, type IScVDividerProps, type IScValueMappingL1Props, type IScVersionProps, type IScWorkspaceCardProps, type IScWorkspaceSettingsMobileProps, type IScWorkspaceSwitchMobileProps, type IScWorkspaceSwitchMobileV2Props, type IUsageHistoryMobileProps, type IUseNewVersionAvailableOptions, type IcListIconState, InvoiceHistoryMobile, NscWorkspaceSwitch, PANEL_RESIZE_STEP_PX, type PanelResizeEdge, type PanelResizeGesture, type PanelWidthBounds, type PlanComparisonRow, type PlanComparisonSection, type PlanFeatureSection, ProductCollapsedMark, ProductWordmark, SC_APP_SWITCH_PANEL_WIDTH, SC_WORKSPACE_MENU_WIDTH, SIDEBAR_RESIZE_THRESHOLD_PX, STREAMOID_CHANGELOG_URL, STREAMOID_CHANGELOG_URLS, STREAMOID_STATUS_PAGE_URL, ScAccess, ScAppCard, ScAppCardForCopilot, ScAppCardV3, ScAppField, ScAppListingCard, ScAppSidebar, type ScAppSwitchItem, ScAppSwitchPanel, ScAppSwitchRow, type ScAppSwitchSystemItem, type ScAppSwitchUtilities, ScAppcardLogos, ScArtifaxInvite, ScArtifaxSidebar, ScAskAgentButton, ScAskAgentSlot, ScBadges, ScBeacon, type ScBeaconTone, ScBillingHistoryHeader, ScBillingHistoryTableList, ScBillingLogsTableHeader, ScBillingLogsTableList, ScBriefCard, ScButton, ScCalendar, ScCalendarDateComps, ScCatalogixInvite, ScCatalogixSidebar, ScCatalogixStoreHeader, ScCatalogixStoreTableList, ScCheckField, ScCheckbox, ScCounter, ScCreditsUsageCard, ScCreditsUsageCardMobile, ScCxoCopilotLogo, ScCxoWordmark, ScDefaultCard, ScDp, type ScDpProps, ScDrawer, ScErrorBoundary, type ScErrorReporter, ScFieldButton, ScFileField, ScGoogleSignIn, ScGuide, ScHDivider, ScHeader, ScImageField, ScInChatList, ScInChatMessage, ScInfoPopup, ScIntialProfileCover, ScLogoUnit, ScMappingCard, ScMediaApproval, ScMediaSelect, ScMenuOptions, ScMobileBottomAction, ScMobileTopNav, ScModal, ScNewVersionNotice, ScOnlyField, ScOnlyIcon, ScPagination, ScPairtext, ScPanelResizeHandle, ScPendingAction, ScPhtogenixInvite, ScPlanCard, ScPlanComparison, ScPlanDetailsCard, ScPlanDetailsCardMobile, ScPopUpMenu, ScPopoverArrow, ScProfile, ScProfileImageUpdate, ScProfileOptions, ScProfilePopup, type ScProfilePopupThemeMode, ScProfileSettingsComp, ScProfileV2Mobile, ScProgressBar, ScQuickPrompt, ScRadio, ScReferralCardMobile, ScReferralTableHeader, ScReferralTableList, ScRole, ScRoleMobile, ScSelect, ScSelection, ScSelectionList, ScSelectionPill, ScSelectionPillGroup, ScSettingsNav, ScSettingsTabComp, type ScShellThemeMode, ScSideBarLogoUnit, ScSidebar, ScSidebarAppIdentity, type ScSidebarAppIdentityProps, ScSidebarIcons, ScSidebarMenu, ScSidebarPopover, ScSidebarProfile, ScSidebarResizeHandle, type ScSidebarResizeHandleProps, ScSidebarSearchTrigger, type ScSidebarSearchTriggerProps, ScSidebarSwitchMenu, ScSidebarWorkspaceTrigger, type ScSidebarWorkspaceTriggerProps, ScSlider, ScStoreCard, ScStrLogo, ScStreamoidMascot, ScStreamoidWordmark, ScSubAgent, type ScTab, ScTabComp, ScTabField, ScTabSwitcher, ScTableHeader, ScTableList, ScTableListMobile, ScTabs, ScTaxonomyPill, ScTextArea, ScTextField, ScThinkingStepIcon, ScTodoList, ScToggleSwitch, ScVDivider, ScValueMappingL1, ScVersion, ScWorkspaceAccountMenu, type ScWorkspaceAccountMenuProps, ScWorkspaceCard, ScWorkspaceSettingsMobile, ScWorkspaceSwitchCard, type ScWorkspaceSwitchCardProps, ScWorkspaceSwitchMobile, ScWorkspaceSwitchMobileV2, type SelectionListState, type SidebarAppIdentityConfig, type SidebarConfig, type SidebarIconContext, type SidebarIconMap, type SidebarIconRenderer, type SidebarMenuItemConfig, type SidebarProduct, type SidebarProfileConfig, type SidebarResizeGestureResult, type SidebarResizeGestureState, type SidebarSectionConfig, type StreamoidAnchorRect, type StreamoidAnchoredPopover, type StreamoidAnchoredPopoverArrow, type StreamoidAnchoredPopoverGeometry, type StreamoidAnchoredPopoverPosition, type StreamoidAnchoredPopoverPositionOptions, type StreamoidAppSwitchGroup, type StreamoidAppSwitchOptions, type StreamoidAppSwitchProduct, type StreamoidPanelWidthOptions, type StreamoidPanelWidthState, type StreamoidSearchShortcutEvent, type StreamoidSearchShortcutOptions, StreamoidSidebar, type StreamoidSidebarPopoverPlacement, type StreamoidSidebarPopoverPosition, type StreamoidSidebarPopoverPositionOptions, type StreamoidSidebarPreferenceOptions, type StreamoidSidebarPreferenceState, type StreamoidSidebarProps, type StreamoidThemePreferenceOptions, type StreamoidThemePreferenceState, StreamoidWorkspaceSwitcher, type StreamoidWorkspaceSwitcherProps, UsageHistoryMobile, type WorkspaceSwitcherConfig, type WorkspaceSwitcherItem, advanceSidebarResizeGesture, clampPanelWidth, createStreamoidAppSwitchUtilities, formatStreamoidAppVersion, formatSubAgentLabel, hasCollapsedMark, matchesStreamoidSearchShortcut, parseVersionManifest, resolveAnchoredPopoverArrow, resolveAnchoredPopoverPosition, resolvePanelResize, resolvePanelResizeKey, scAppSwitchOrder, scCreatePostHogReporter, scGetErrorRef, shouldPromptForNewVersion, streamoidAppSwitchGroups, streamoidAppSwitchTagline, streamoidChangelogUrl, useNewVersionAvailable, useStreamoidAnchoredPopover, useStreamoidAnchoredPopoverPosition, useStreamoidPanelWidth, useStreamoidSearchShortcut, useStreamoidSidebarPopoverPosition, useStreamoidSidebarPreference, useStreamoidThemePreference };
|