@oxyhq/bloom 1.0.0 → 1.0.2
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/README.md +16 -4
- package/docs/accordion.mdx +69 -0
- package/docs/activity-heatmap.mdx +71 -0
- package/docs/admonition.mdx +77 -0
- package/docs/alert-dialog.mdx +75 -0
- package/docs/alert.mdx +93 -0
- package/docs/animated-check.mdx +53 -0
- package/docs/aspect-ratio.mdx +45 -0
- package/docs/avatar-group.mdx +91 -0
- package/docs/avatar.mdx +126 -0
- package/docs/badge.mdx +74 -0
- package/docs/benefit-list.mdx +56 -0
- package/docs/bottom-sheet.mdx +103 -0
- package/docs/button.mdx +218 -0
- package/docs/card.mdx +106 -0
- package/docs/checkbox.mdx +59 -0
- package/docs/chip.mdx +53 -0
- package/docs/code.mdx +50 -0
- package/docs/combobox.mdx +64 -0
- package/docs/command.mdx +85 -0
- package/docs/composition-bar.mdx +63 -0
- package/docs/connection-dots.mdx +50 -0
- package/docs/connection-status.mdx +56 -0
- package/docs/content-panel.mdx +62 -0
- package/docs/context-menu.mdx +65 -0
- package/docs/design-tokens.mdx +254 -0
- package/docs/dialog.mdx +277 -0
- package/docs/divider.mdx +56 -0
- package/docs/dot-grid-meter.mdx +66 -0
- package/docs/dropdown-menu.mdx +161 -0
- package/docs/error-boundary.mdx +72 -0
- package/docs/fab.mdx +67 -0
- package/docs/field.mdx +70 -0
- package/docs/fill.mdx +58 -0
- package/docs/fonts.mdx +144 -0
- package/docs/frosted-icon-button.mdx +60 -0
- package/docs/getting-started.mdx +75 -0
- package/docs/grid.mdx +64 -0
- package/docs/hooks.mdx +81 -0
- package/docs/icon-circle.mdx +66 -0
- package/docs/icons.mdx +69 -0
- package/docs/image-aspect-ratio-cache.mdx +63 -0
- package/docs/image-resolver.mdx +66 -0
- package/docs/index.mdx +44 -0
- package/docs/input-group.mdx +58 -0
- package/docs/item.mdx +69 -0
- package/docs/kbd.mdx +57 -0
- package/docs/label.mdx +50 -0
- package/docs/link-preview.mdx +66 -0
- package/docs/list.mdx +72 -0
- package/docs/loading.mdx +129 -0
- package/docs/media-inset-border.mdx +52 -0
- package/docs/menubar.mdx +86 -0
- package/docs/migrating-to-1.0.mdx +434 -0
- package/docs/motion.mdx +83 -0
- package/docs/overlay.mdx +75 -0
- package/docs/popover.mdx +73 -0
- package/docs/portal.mdx +63 -0
- package/docs/pressable-scale.mdx +51 -0
- package/docs/profile-card.mdx +66 -0
- package/docs/progressive-blur.mdx +54 -0
- package/docs/prompt-input.mdx +183 -0
- package/docs/provider.mdx +64 -0
- package/docs/radio-indicator.mdx +60 -0
- package/docs/radio.mdx +65 -0
- package/docs/scroll.mdx +66 -0
- package/docs/search.mdx +67 -0
- package/docs/segmented-control.mdx +76 -0
- package/docs/select.mdx +93 -0
- package/docs/settings-list.mdx +186 -0
- package/docs/skeleton.mdx +66 -0
- package/docs/slider.mdx +73 -0
- package/docs/stat-bar.mdx +59 -0
- package/docs/stat-widgets.mdx +33 -0
- package/docs/styles.mdx +61 -0
- package/docs/subtle-hover.mdx +53 -0
- package/docs/surfaces.mdx +72 -0
- package/docs/switch.mdx +90 -0
- package/docs/tab-bar.mdx +386 -0
- package/docs/tabs.mdx +75 -0
- package/docs/text-field.mdx +187 -0
- package/docs/theme.mdx +67 -0
- package/docs/toast.mdx +285 -0
- package/docs/tooltip.mdx +67 -0
- package/docs/typography.mdx +88 -0
- package/docs/user-hover-card.mdx +140 -0
- package/docs/zoomable-image-gallery.mdx +66 -0
- package/lib/commonjs/design-tokens/color-roles.js +21 -1
- package/lib/commonjs/design-tokens/color-roles.js.map +1 -1
- package/lib/commonjs/design-tokens/index.js +6 -0
- package/lib/commonjs/design-tokens/index.js.map +1 -1
- package/lib/commonjs/design-tokens/tailwind-preset.js +3 -1
- package/lib/commonjs/design-tokens/tailwind-preset.js.map +1 -1
- package/lib/commonjs/design-tokens/theme-css.js +1 -0
- package/lib/commonjs/design-tokens/theme-css.js.map +1 -1
- package/lib/commonjs/design-tokens/theme.css +3 -0
- package/lib/commonjs/design-tokens/tokens-json.js +13 -4
- package/lib/commonjs/design-tokens/tokens-json.js.map +1 -1
- package/lib/commonjs/design-tokens/tokens.json +6227 -265
- package/lib/commonjs/index.js +7 -0
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/index.web.js +7 -0
- package/lib/commonjs/index.web.js.map +1 -1
- package/lib/commonjs/theme/ambient-store.js +16 -1
- package/lib/commonjs/theme/ambient-store.js.map +1 -1
- package/lib/commonjs/theme/color-policy.js +30 -33
- package/lib/commonjs/theme/color-policy.js.map +1 -1
- package/lib/commonjs/theme/color-presets.js +413 -166
- package/lib/commonjs/theme/color-presets.js.map +1 -1
- package/lib/commonjs/theme/color-scope/seed-scope.js +1 -0
- package/lib/commonjs/theme/color-scope/seed-scope.js.map +1 -1
- package/lib/commonjs/theme/glass-colors.js +18 -21
- package/lib/commonjs/theme/glass-colors.js.map +1 -1
- package/lib/commonjs/theme/index.js +30 -0
- package/lib/commonjs/theme/index.js.map +1 -1
- package/lib/commonjs/theme/index.web.js +30 -0
- package/lib/commonjs/theme/index.web.js.map +1 -1
- package/lib/module/design-tokens/color-roles.js +20 -0
- package/lib/module/design-tokens/color-roles.js.map +1 -1
- package/lib/module/design-tokens/index.js +2 -2
- package/lib/module/design-tokens/index.js.map +1 -1
- package/lib/module/design-tokens/tailwind-preset.js +4 -2
- package/lib/module/design-tokens/tailwind-preset.js.map +1 -1
- package/lib/module/design-tokens/theme-css.js +2 -1
- package/lib/module/design-tokens/theme-css.js.map +1 -1
- package/lib/module/design-tokens/theme.css +3 -0
- package/lib/module/design-tokens/tokens-json.js +14 -5
- package/lib/module/design-tokens/tokens-json.js.map +1 -1
- package/lib/module/design-tokens/tokens.json +6227 -265
- package/lib/module/index.js +1 -1
- package/lib/module/index.js.map +1 -1
- package/lib/module/index.web.js +1 -1
- package/lib/module/index.web.js.map +1 -1
- package/lib/module/theme/ambient-store.js +16 -1
- package/lib/module/theme/ambient-store.js.map +1 -1
- package/lib/module/theme/color-policy.js +30 -33
- package/lib/module/theme/color-policy.js.map +1 -1
- package/lib/module/theme/color-presets.js +412 -165
- package/lib/module/theme/color-presets.js.map +1 -1
- package/lib/module/theme/color-scope/seed-scope.js +2 -1
- package/lib/module/theme/color-scope/seed-scope.js.map +1 -1
- package/lib/module/theme/glass-colors.js +18 -21
- package/lib/module/theme/glass-colors.js.map +1 -1
- package/lib/module/theme/index.js +1 -1
- package/lib/module/theme/index.js.map +1 -1
- package/lib/module/theme/index.web.js +1 -1
- package/lib/module/theme/index.web.js.map +1 -1
- package/lib/typescript/commonjs/design-tokens/color-roles.d.ts +20 -0
- package/lib/typescript/commonjs/design-tokens/color-roles.d.ts.map +1 -1
- package/lib/typescript/commonjs/design-tokens/index.d.ts +3 -3
- package/lib/typescript/commonjs/design-tokens/index.d.ts.map +1 -1
- package/lib/typescript/commonjs/design-tokens/tailwind-preset.d.ts.map +1 -1
- package/lib/typescript/commonjs/design-tokens/theme-css.d.ts.map +1 -1
- package/lib/typescript/commonjs/design-tokens/tokens-json.d.ts +12 -3
- package/lib/typescript/commonjs/design-tokens/tokens-json.d.ts.map +1 -1
- package/lib/typescript/commonjs/index.d.ts +2 -2
- package/lib/typescript/commonjs/index.d.ts.map +1 -1
- package/lib/typescript/commonjs/index.web.d.ts +2 -2
- package/lib/typescript/commonjs/index.web.d.ts.map +1 -1
- package/lib/typescript/commonjs/theme/ambient-store.d.ts.map +1 -1
- package/lib/typescript/commonjs/theme/color-policy.d.ts.map +1 -1
- package/lib/typescript/commonjs/theme/color-presets.d.ts +386 -62
- package/lib/typescript/commonjs/theme/color-presets.d.ts.map +1 -1
- package/lib/typescript/commonjs/theme/color-scope/seed-scope.d.ts.map +1 -1
- package/lib/typescript/commonjs/theme/glass-colors.d.ts +18 -21
- package/lib/typescript/commonjs/theme/glass-colors.d.ts.map +1 -1
- package/lib/typescript/commonjs/theme/index.d.ts +2 -2
- package/lib/typescript/commonjs/theme/index.d.ts.map +1 -1
- package/lib/typescript/commonjs/theme/index.web.d.ts +2 -2
- package/lib/typescript/commonjs/theme/index.web.d.ts.map +1 -1
- package/lib/typescript/module/design-tokens/color-roles.d.ts +20 -0
- package/lib/typescript/module/design-tokens/color-roles.d.ts.map +1 -1
- package/lib/typescript/module/design-tokens/index.d.ts +3 -3
- package/lib/typescript/module/design-tokens/index.d.ts.map +1 -1
- package/lib/typescript/module/design-tokens/tailwind-preset.d.ts.map +1 -1
- package/lib/typescript/module/design-tokens/theme-css.d.ts.map +1 -1
- package/lib/typescript/module/design-tokens/tokens-json.d.ts +12 -3
- package/lib/typescript/module/design-tokens/tokens-json.d.ts.map +1 -1
- package/lib/typescript/module/index.d.ts +2 -2
- package/lib/typescript/module/index.d.ts.map +1 -1
- package/lib/typescript/module/index.web.d.ts +2 -2
- package/lib/typescript/module/index.web.d.ts.map +1 -1
- package/lib/typescript/module/theme/ambient-store.d.ts.map +1 -1
- package/lib/typescript/module/theme/color-policy.d.ts.map +1 -1
- package/lib/typescript/module/theme/color-presets.d.ts +386 -62
- package/lib/typescript/module/theme/color-presets.d.ts.map +1 -1
- package/lib/typescript/module/theme/color-scope/seed-scope.d.ts.map +1 -1
- package/lib/typescript/module/theme/glass-colors.d.ts +18 -21
- package/lib/typescript/module/theme/glass-colors.d.ts.map +1 -1
- package/lib/typescript/module/theme/index.d.ts +2 -2
- package/lib/typescript/module/theme/index.d.ts.map +1 -1
- package/lib/typescript/module/theme/index.web.d.ts +2 -2
- package/lib/typescript/module/theme/index.web.d.ts.map +1 -1
- package/package.json +5 -2
- package/src/__tests__/support/collision-fixture-barrel.ts +20 -0
- package/src/__tests__/support/constructed-style-sheets.ts +68 -0
- package/src/__tests__/support/press-host.ts +30 -0
- package/src/__tests__/support/rendered-style.ts +99 -0
- package/src/__tests__/support/unread-hook-fixture.ts +33 -0
- package/src/design-tokens/color-roles.ts +21 -0
- package/src/design-tokens/index.ts +3 -2
- package/src/design-tokens/tailwind-preset.ts +3 -2
- package/src/design-tokens/theme-css.ts +2 -1
- package/src/design-tokens/theme.css +3 -0
- package/src/design-tokens/tokens-json.ts +29 -9
- package/src/design-tokens/tokens.json +6227 -265
- package/src/glass/GlassSurface.tsx +2 -2
- package/src/index.ts +2 -0
- package/src/index.web.ts +2 -0
- package/src/theme/__tests__/__fixtures__/golden-resolved-tokens.json +4082 -0
- package/src/theme/__tests__/fixtures/color-engine-golden.json +1 -0
- package/src/theme/ambient-store.ts +21 -1
- package/src/theme/color-policy.ts +33 -38
- package/src/theme/color-presets.ts +473 -146
- package/src/theme/color-scope/seed-scope.ts +2 -1
- package/src/theme/glass-colors.ts +18 -21
- package/src/theme/index.ts +16 -1
- package/src/theme/index.web.ts +16 -1
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Typography
|
|
3
|
+
description: Text, headings and the semantic prose variants.
|
|
4
|
+
order: 22
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Typography
|
|
8
|
+
|
|
9
|
+
Bloom's text primitives. Every one is a flat component, and every one accepts `className` so a NativeWind consumer can override it — except `Blockquote`, for the reason below.
|
|
10
|
+
|
|
11
|
+
```tsx
|
|
12
|
+
import { H1, Lead, Muted, P, Small, Text } from '@oxyhq/bloom/typography';
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
Or as a namespace, which costs no tree-shaking because the family ships as its own subpath:
|
|
16
|
+
|
|
17
|
+
```tsx
|
|
18
|
+
import * as Typography from '@oxyhq/bloom/typography';
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
## Base
|
|
22
|
+
|
|
23
|
+
`Text` is the base: theme-aware colour, Bloom's sans family, 13px. `Span` is the same component under the name you reach for inline.
|
|
24
|
+
|
|
25
|
+
`H1` through `H6` are headings, and on web they carry `role="heading"` with the matching `aria-level` — which is what makes a screen reader's heading navigation work.
|
|
26
|
+
|
|
27
|
+
`P` is body copy at 16px over a 28px line, with a leading margin (`mt-3`, 24px from the `sm` breakpoint up) and `role="paragraph"` on web.
|
|
28
|
+
|
|
29
|
+
## The heading ramp
|
|
30
|
+
|
|
31
|
+
react-native-reusables' own numbers, resolved from its `text-4xl font-extrabold tracking-tight` and the three `font-semibold` levels under it. `tracking-tight` is −0.025em, so the letter-spacing is computed against each level's own size. `H5`/`H6` have no upstream counterpart and continue the ramp.
|
|
32
|
+
|
|
33
|
+
| | size / line | weight | also |
|
|
34
|
+
| --- | --- | --- | --- |
|
|
35
|
+
| `H1` | 36 / 40 | 800 | centred, like shadcn's `h1` |
|
|
36
|
+
| `H2` | 30 / 36 | 600 | a 1px rule underneath, 8px clear of the text |
|
|
37
|
+
| `H3` | 24 / 32 | 600 | |
|
|
38
|
+
| `H4` | 20 / 28 | 600 | |
|
|
39
|
+
| `H5` | 18 / 28 | 600 | |
|
|
40
|
+
| `H6` | 16 / 24 | 600 | |
|
|
41
|
+
|
|
42
|
+
The FAMILY is not upstream's. shadcn sets everything in one sans face; a Bloom heading is set in the display family, which is the same layer as the colour roles and is Bloom's own.
|
|
43
|
+
|
|
44
|
+
A caller's `className` replaces the size, weight and tracking (react-native-css merges utilities into `style` first, so an inline default repeating those keys would silently beat `text-2xl`). Only the family survives it.
|
|
45
|
+
|
|
46
|
+
## Prose variants
|
|
47
|
+
|
|
48
|
+
Ported from react-native-reusables, which spells them as a `variant` prop on one `Text`. Bloom keeps them flat, because `H1`–`H6` already are and a second way to ask for a heading is an ambiguity, not a feature.
|
|
49
|
+
|
|
50
|
+
```tsx
|
|
51
|
+
<H2>Device sessions</H2>
|
|
52
|
+
<Lead>Every device you sign in from gets its own session.</Lead>
|
|
53
|
+
<P>A session is minted per origin and refreshed in the background.</P>
|
|
54
|
+
<Blockquote>A session you cannot end from elsewhere is a key you cannot take back.</Blockquote>
|
|
55
|
+
<Large>Ending a session</Large>
|
|
56
|
+
<Small>Last active 4 minutes ago</Small>
|
|
57
|
+
<Muted>Sessions older than 90 days end on their own.</Muted>
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
| Component | What it is |
|
|
61
|
+
| --- | --- |
|
|
62
|
+
| `Lead` | An intro paragraph. Larger than body, in the secondary colour. |
|
|
63
|
+
| `Large` | Emphasised body text — a section's opening line. |
|
|
64
|
+
| `Small` | A dense label, set on its own baseline with no extra leading. |
|
|
65
|
+
| `Muted` | De-emphasised supporting text. |
|
|
66
|
+
| `Blockquote` | A quotation, with the rule down its left edge. |
|
|
67
|
+
|
|
68
|
+
react-native-reusables' `code` variant is deliberately absent: Bloom's [`code`](/docs/bloom/main/design-tokens) family already owns monospace text, and a second spelling of one thing is what this library removes rather than adds.
|
|
69
|
+
|
|
70
|
+
## `Blockquote` takes no `className`
|
|
71
|
+
|
|
72
|
+
The one exception, and it is a platform limit rather than a preference. React Native draws no border on a text node — Android renders a `TextView`, iOS an attributed string, and neither paints a left rule — so the rule has to be a `View` wrapping a `Text`.
|
|
73
|
+
|
|
74
|
+
That splits the component in two: the node the parent lays out is the `View`, while the utilities anybody would write (`text-lg`, `text-primary`) belong on the `Text` inside it. A `className` would land on one of them and silently do nothing for the other, which is exactly the failure Bloom's className rules exist to prevent. So it is not offered:
|
|
75
|
+
|
|
76
|
+
```tsx
|
|
77
|
+
<Blockquote style={{ borderLeftWidth: 4 }} textStyle={{ fontStyle: 'normal' }}>
|
|
78
|
+
Styled container and text, separately.
|
|
79
|
+
</Blockquote>
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
A caller who wants utility classes composes a `View` and a `Text` directly.
|
|
83
|
+
|
|
84
|
+
## `className` and inline defaults
|
|
85
|
+
|
|
86
|
+
Every other variant applies its size, weight and colour ONLY when no `className` is passed. react-native-css merges utilities into `style` first, so an inline default repeating `fontSize` or `color` would win the merge and silently break the caller's `text-lg` or `text-primary`. `fontFamily` is the exception and stays inline either way.
|
|
87
|
+
|
|
88
|
+
Layout classes on web need the consumer's Tailwind pipeline to be scanning Bloom's `lib/`. Colours work regardless, because Bloom applies those inline — which is what makes a missing pipeline look like a layout bug rather than a missing stylesheet.
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: UserHoverCard
|
|
3
|
+
description: A presentational profile card. Bloom holds no follow logic — the consumer passes the button in.
|
|
4
|
+
order: 23
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# UserHoverCard
|
|
8
|
+
|
|
9
|
+
The card that appears when you hover a name or an avatar: photo, display name,
|
|
10
|
+
handle, bio, a couple of stats, one action — and a `footer` slot for whatever
|
|
11
|
+
your app knows about a person that Bloom does not.
|
|
12
|
+
|
|
13
|
+
```tsx
|
|
14
|
+
import { UserHoverCard } from '@oxyhq/bloom/user-hover-card';
|
|
15
|
+
import { FollowButton } from '@oxyhq/services';
|
|
16
|
+
|
|
17
|
+
<UserHoverCard
|
|
18
|
+
avatar={user.avatar}
|
|
19
|
+
displayName={user.name.displayName ?? user.username}
|
|
20
|
+
username={user.username}
|
|
21
|
+
bio={user.bio}
|
|
22
|
+
stats={[
|
|
23
|
+
{ label: 'Following', value: formatCount(user.following) },
|
|
24
|
+
{ label: 'Followers', value: formatCount(user.followers) },
|
|
25
|
+
]}
|
|
26
|
+
verified={user.verified}
|
|
27
|
+
action={<FollowButton userId={user.id} />}
|
|
28
|
+
onPressProfile={() => router.push(`/@${user.username}`)}
|
|
29
|
+
/>
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
## `footer` is where your own content goes
|
|
33
|
+
|
|
34
|
+
The card renders what every Oxy app agrees a person is — photo, name, handle,
|
|
35
|
+
bio, a couple of counts — and nothing else. Anything past that is yours:
|
|
36
|
+
|
|
37
|
+
```tsx
|
|
38
|
+
<UserHoverCard
|
|
39
|
+
displayName={user.name.displayName ?? user.username}
|
|
40
|
+
username={user.username}
|
|
41
|
+
bio={user.bio}
|
|
42
|
+
stats={stats}
|
|
43
|
+
action={<FollowButton userId={user.id} />}
|
|
44
|
+
footer={
|
|
45
|
+
<View style={{ gap: 4 }}>
|
|
46
|
+
<Text>Activity</Text>
|
|
47
|
+
<ActivityHeatmap data={activity} endDate={today} numDays={112} cellSize={11} gap={3} />
|
|
48
|
+
</View>
|
|
49
|
+
}
|
|
50
|
+
/>
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
It renders **after** the stats, spanning the full inner width, with the same
|
|
54
|
+
vertical rhythm the bio and stats use. Bloom adds no label, no divider and no
|
|
55
|
+
clip — the block is yours to shape.
|
|
56
|
+
|
|
57
|
+
It is a **sibling** of the identity area, never a child, and that is the part
|
|
58
|
+
worth knowing. Nested, every press on your content would also fire
|
|
59
|
+
`onPressProfile`, and on web a screen reader would fold the whole block into the
|
|
60
|
+
identity button's accessible name — the identity area is a real `role="button"`,
|
|
61
|
+
and text inside a button becomes part of its name.
|
|
62
|
+
|
|
63
|
+
The card is 280px wide with 16px padding, so content has **248px** of inner
|
|
64
|
+
width, and the card does not clip: anything wider paints outside it. A
|
|
65
|
+
contribution graph of 17 columns at `cellSize={11} gap={3}` is 235px and fits;
|
|
66
|
+
119 days spans eighteen columns once the leading partial week is counted, which
|
|
67
|
+
is 249px and does not.
|
|
68
|
+
|
|
69
|
+
There is one named slot, not three. The positions a second consumer might want —
|
|
70
|
+
above the bio, beside the action — are still free to be added as their own named
|
|
71
|
+
slots; a `children` prop would have claimed the generic name for one arbitrary
|
|
72
|
+
position.
|
|
73
|
+
|
|
74
|
+
### Inside a hover card, everything you put here stays pressable
|
|
75
|
+
|
|
76
|
+
`AvatarGroup`'s `hoverCard` floats this card under a bridge that keeps it open
|
|
77
|
+
while the cursor is over it. That bridge is a `View` with
|
|
78
|
+
`onPointerEnter`/`onPointerLeave`, **not** a `Pressable`, and it has to be: a
|
|
79
|
+
`Pressable` bridge dismisses the card the moment the cursor reaches anything
|
|
80
|
+
pressable inside it. react-native-web's `Pressable` dispatches a bubbling
|
|
81
|
+
`react-gui:hover:lock` event, and an ancestor `Pressable` that is currently
|
|
82
|
+
hovered ends its own hover for any lock it did not send. If you build your own
|
|
83
|
+
hover trigger around this card, do the same.
|
|
84
|
+
|
|
85
|
+
## Bloom holds no follow state
|
|
86
|
+
|
|
87
|
+
`action` is a slot, and that is the whole design. Following is session-aware,
|
|
88
|
+
optimistic, and shared across every Oxy app — it belongs to `@oxyhq/services`,
|
|
89
|
+
which owns the mutation and the cache. A follow button living in Bloom would
|
|
90
|
+
either duplicate that or force Bloom to depend on the SDK.
|
|
91
|
+
|
|
92
|
+
The same reasoning applies to `onPressProfile`: Bloom does not know your router.
|
|
93
|
+
|
|
94
|
+
## `avatar` goes to `source`, and this fails silently
|
|
95
|
+
|
|
96
|
+
Internally the value is handed to `Avatar`'s **`source`** prop, so a bare Oxy
|
|
97
|
+
file id resolves through the app's `ImageResolver`. If you build a card by hand
|
|
98
|
+
somewhere and pass a file id as `uri` instead, the image 404s and you get a
|
|
99
|
+
placeholder letter with no error anywhere. That is the single most common way
|
|
100
|
+
avatars break across the ecosystem.
|
|
101
|
+
|
|
102
|
+
## Display name fallback
|
|
103
|
+
|
|
104
|
+
`displayName` is optional upstream. Fall back to the normalized handle —
|
|
105
|
+
`displayName?.trim() || handle` — and never recompose a name from
|
|
106
|
+
`name.first` / `name.last`. A wrong display name is fixed in the serializer or
|
|
107
|
+
the SDK type, not in a frontend helper.
|
|
108
|
+
|
|
109
|
+
## Stats are strings
|
|
110
|
+
|
|
111
|
+
`value` is a string, not a number: formatting a count (`4.8K`, `1,204`) is
|
|
112
|
+
locale- and product-specific, and a component that formatted it for you would be
|
|
113
|
+
wrong in one app or the other.
|
|
114
|
+
|
|
115
|
+
## Chrome
|
|
116
|
+
|
|
117
|
+
The card composes [`Card`](/docs/bloom/main/card) at the `radius-16` rung with a
|
|
118
|
+
`hairline` border and `shadow-m` — the overlay elevation role it shares with
|
|
119
|
+
menus, popovers and dialogs. It does not clip, so nothing inside it needs to
|
|
120
|
+
know it is in a card.
|
|
121
|
+
|
|
122
|
+
The border asks for **0.5px**, `BORDER_WIDTH.hairline`, the same width
|
|
123
|
+
[`BenefitList`](/docs/bloom/main/benefit-list) asks for — verified in Chrome,
|
|
124
|
+
both surfaces, both densities. That is worth stating because
|
|
125
|
+
`StyleSheet.hairlineWidth`, the older spelling, is hardcoded to **1** on web:
|
|
126
|
+
the two surfaces both called themselves hairline and did not match. Bloom's
|
|
127
|
+
scale defines the hairline as 0.5, and this card follows the scale.
|
|
128
|
+
|
|
129
|
+
**What the browser actually paints depends on pixel density**, and the 0.5 is
|
|
130
|
+
only visible on half of it. Measured in Chrome: at `devicePixelRatio` 1 the used
|
|
131
|
+
border width is **1px** — a sub-pixel border is snapped up to one device pixel,
|
|
132
|
+
never down to zero — so on an ordinary 1× monitor `hairline` and the 1px `thin`
|
|
133
|
+
are indistinguishable. At `devicePixelRatio` 2 it is 0.5px, one device pixel, and
|
|
134
|
+
visibly finer. Native does no such snapping — but it is not untouched either:
|
|
135
|
+
`StyleSheet.hairlineWidth` is 0.5 at @2x and ~0.333 at @3x, so the scale's flat
|
|
136
|
+
0.5 is identical at @2x and 0.167px thicker at @3x. So the distinction the scale
|
|
137
|
+
draws is real on HiDPI and inert on a 1× browser; that is the trade for one
|
|
138
|
+
number that holds on both platforms. The alternative, a density branch, is what
|
|
139
|
+
`MediaInsetBorder` does (`PixelRatio.get() > 1 ? 0.5 : StyleSheet.hairlineWidth`)
|
|
140
|
+
where the line sits on top of an image and 1px would read as a frame.
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: ZoomableImageGallery
|
|
3
|
+
description: The full-screen image viewer — mounted once, opened imperatively.
|
|
4
|
+
order: 71
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# ZoomableImageGallery
|
|
8
|
+
|
|
9
|
+
Full-screen images with pinch-zoom, swipe between, and drag-to-dismiss. Mount
|
|
10
|
+
it once near the app root and open it from anywhere.
|
|
11
|
+
|
|
12
|
+
```tsx
|
|
13
|
+
import { ZoomableImageGallery, type ZoomableImageGalleryHandle } from '@oxyhq/bloom/zoomable-image-gallery';
|
|
14
|
+
|
|
15
|
+
const gallery = useRef<ZoomableImageGalleryHandle>(null);
|
|
16
|
+
|
|
17
|
+
<ZoomableImageGallery ref={gallery} measureThumb={measureThumb} />
|
|
18
|
+
|
|
19
|
+
// from a thumbnail
|
|
20
|
+
gallery.current?.open(images, index);
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## Which prop decides what
|
|
24
|
+
|
|
25
|
+
| prop | decides |
|
|
26
|
+
| ------------------ | --------------------------------------------------------- |
|
|
27
|
+
| `measureThumb` | the rect the opening animation grows FROM |
|
|
28
|
+
| `cornerRadius` | the thumbnail's corner, so the transition matches it |
|
|
29
|
+
| `indicatorVariant` | `dots` or `thumbnails` for the page indicator |
|
|
30
|
+
|
|
31
|
+
`open(images, index, rect?)` takes the whole set and which one to show.
|
|
32
|
+
|
|
33
|
+
## Why it is imperative
|
|
34
|
+
|
|
35
|
+
One gallery serves every thumbnail on a screen. Making it declarative would
|
|
36
|
+
mean a piece of state per grid, or one shared "which image is open" flag
|
|
37
|
+
threaded through everything that can show an image. The ref is what lets a
|
|
38
|
+
thumbnail deep in a list open it without the list knowing the gallery exists.
|
|
39
|
+
|
|
40
|
+
## `measureThumb` is what makes the transition read
|
|
41
|
+
|
|
42
|
+
Without it the gallery fades in from nowhere. With it, the image grows out of
|
|
43
|
+
the thumbnail the user pressed, which tells them *which* image they opened —
|
|
44
|
+
useful precisely in the case where a grid has several similar photos.
|
|
45
|
+
|
|
46
|
+
It returns a promise because measuring is asynchronous on native. Returning
|
|
47
|
+
`null` is fine and degrades to the fade.
|
|
48
|
+
|
|
49
|
+
## `alt` is the caption and the accessible text
|
|
50
|
+
|
|
51
|
+
Set `alt` on each `GalleryImage`. It is shown as the caption for the active
|
|
52
|
+
image, and it is the only description a screen reader has — an image viewer
|
|
53
|
+
with no alt text is a screen with nothing on it.
|
|
54
|
+
|
|
55
|
+
## Peers
|
|
56
|
+
|
|
57
|
+
It requires `expo-image`, which is why the family is **not** on the root
|
|
58
|
+
barrel: Metro does not tree-shake, so importing the barrel would drag that peer
|
|
59
|
+
into every consumer's build whether or not they use a gallery. Import it from
|
|
60
|
+
its subpath.
|
|
61
|
+
|
|
62
|
+
## What a jest run can and cannot see
|
|
63
|
+
|
|
64
|
+
That it renders nothing until `open()` is called, and that it opens at the
|
|
65
|
+
index it was given. The gestures — pinch, pan-to-dismiss, the shared-element
|
|
66
|
+
transition — belong to a device build.
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.TEXT_ROLES = exports.FILL_ROLES = exports.BORDER_ROLES = void 0;
|
|
6
|
+
exports.TEXT_ROLES = exports.FILL_ROLES = exports.BORDER_ROLES = exports.ACCENT_TEXT_ROLES = void 0;
|
|
7
7
|
/**
|
|
8
8
|
* Semantic color-role vocabulary for the Oxy Unified Design Language.
|
|
9
9
|
*
|
|
@@ -86,6 +86,26 @@ const TEXT_ROLES = exports.TEXT_ROLES = {
|
|
|
86
86
|
'text-placeholder': ref('muted-foreground')
|
|
87
87
|
};
|
|
88
88
|
|
|
89
|
+
/**
|
|
90
|
+
* Decorative brand-accent text roles → text-color utilities.
|
|
91
|
+
*
|
|
92
|
+
* These are deliberately separate from the semantic status roles
|
|
93
|
+
* (`success-text`, `warning-text`, `info-text`, and `error-text`). Product
|
|
94
|
+
* copy, labels, and artwork captions can use the active palette's accent
|
|
95
|
+
* families without pretending that the text communicates a system state.
|
|
96
|
+
*
|
|
97
|
+
* | utility | canonical token |
|
|
98
|
+
* | --------------------- | ------------------ |
|
|
99
|
+
* | text-accent-primary | --primary-text |
|
|
100
|
+
* | text-accent-secondary | --secondary-text |
|
|
101
|
+
* | text-accent-tertiary | --tertiary-text |
|
|
102
|
+
*/
|
|
103
|
+
const ACCENT_TEXT_ROLES = exports.ACCENT_TEXT_ROLES = {
|
|
104
|
+
'accent-primary': ref('primary-text'),
|
|
105
|
+
'accent-secondary': ref('secondary-text'),
|
|
106
|
+
'accent-tertiary': ref('tertiary-text')
|
|
107
|
+
};
|
|
108
|
+
|
|
89
109
|
/**
|
|
90
110
|
* Border roles → border-color utilities (`border-<role>`).
|
|
91
111
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["ref","token","FILL_ROLES","exports","bg","fill","TEXT_ROLES","text","BORDER_ROLES","border"],"sourceRoot":"../../../src","sources":["design-tokens/color-roles.ts"],"mappings":";;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAGA,MAAMA,GAAG,GAAIC,KAAa,IAAe,SAASA,KAAK,GAAG;;AAE1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAMC,UAAU,GAAAC,OAAA,CAAAD,UAAA,GAAG;EACxBE,EAAE,EAAEJ,GAAG,CAAC,YAAY,CAAC;EACrBK,IAAI,EAAEL,GAAG,CAAC,MAAM,CAAC;EACjB,gBAAgB,EAAEA,GAAG,CAAC,OAAO,CAAC;EAC9B,YAAY,EAAEA,GAAG,CAAC,QAAQ,CAAC;EAC3B,YAAY,EAAEA,GAAG,CAAC,SAAS,CAAC;EAC5B,kBAAkB,EAAEA,GAAG,CAAC,MAAM,CAAC;EAC/B,cAAc,EAAEA,GAAG,CAAC,YAAY,CAAC;EACjC,oBAAoB,EAAEA,GAAG,CAAC,kBAAkB,CAAC;EAC7C,kBAAkB,EAAEA,GAAG,CAAC,OAAO;AACjC,CAAU;;AAEV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAMM,UAAU,GAAAH,OAAA,CAAAG,UAAA,GAAG;EACxBC,IAAI,EAAEP,GAAG,CAAC,YAAY,CAAC;EACvB,gBAAgB,EAAEA,GAAG,CAAC,kBAAkB,CAAC;EACzC,eAAe,EAAEA,GAAG,CAAC,kBAAkB,CAAC;EACxC,cAAc,EAAEA,GAAG,CAAC,oBAAoB,CAAC;EACzC,kBAAkB,EAAEA,GAAG,CAAC,oBAAoB,CAAC;EAC7C,kBAAkB,EAAEA,GAAG,CAAC,kBAAkB;AAC5C,CAAU;;AAEV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,
|
|
1
|
+
{"version":3,"names":["ref","token","FILL_ROLES","exports","bg","fill","TEXT_ROLES","text","ACCENT_TEXT_ROLES","BORDER_ROLES","border"],"sourceRoot":"../../../src","sources":["design-tokens/color-roles.ts"],"mappings":";;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAGA,MAAMA,GAAG,GAAIC,KAAa,IAAe,SAASA,KAAK,GAAG;;AAE1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAMC,UAAU,GAAAC,OAAA,CAAAD,UAAA,GAAG;EACxBE,EAAE,EAAEJ,GAAG,CAAC,YAAY,CAAC;EACrBK,IAAI,EAAEL,GAAG,CAAC,MAAM,CAAC;EACjB,gBAAgB,EAAEA,GAAG,CAAC,OAAO,CAAC;EAC9B,YAAY,EAAEA,GAAG,CAAC,QAAQ,CAAC;EAC3B,YAAY,EAAEA,GAAG,CAAC,SAAS,CAAC;EAC5B,kBAAkB,EAAEA,GAAG,CAAC,MAAM,CAAC;EAC/B,cAAc,EAAEA,GAAG,CAAC,YAAY,CAAC;EACjC,oBAAoB,EAAEA,GAAG,CAAC,kBAAkB,CAAC;EAC7C,kBAAkB,EAAEA,GAAG,CAAC,OAAO;AACjC,CAAU;;AAEV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAMM,UAAU,GAAAH,OAAA,CAAAG,UAAA,GAAG;EACxBC,IAAI,EAAEP,GAAG,CAAC,YAAY,CAAC;EACvB,gBAAgB,EAAEA,GAAG,CAAC,kBAAkB,CAAC;EACzC,eAAe,EAAEA,GAAG,CAAC,kBAAkB,CAAC;EACxC,cAAc,EAAEA,GAAG,CAAC,oBAAoB,CAAC;EACzC,kBAAkB,EAAEA,GAAG,CAAC,oBAAoB,CAAC;EAC7C,kBAAkB,EAAEA,GAAG,CAAC,kBAAkB;AAC5C,CAAU;;AAEV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAMQ,iBAAiB,GAAAL,OAAA,CAAAK,iBAAA,GAAG;EAC/B,gBAAgB,EAAER,GAAG,CAAC,cAAc,CAAC;EACrC,kBAAkB,EAAEA,GAAG,CAAC,gBAAgB,CAAC;EACzC,iBAAiB,EAAEA,GAAG,CAAC,eAAe;AACxC,CAAU;;AAEV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAMS,YAAY,GAAAN,OAAA,CAAAM,YAAA,GAAG;EAC1BC,MAAM,EAAEV,GAAG,CAAC,QAAQ,CAAC;EACrB,cAAc,EAAEA,GAAG,CAAC,QAAQ,CAAC;EAC7B,kBAAkB,EAAEA,GAAG,CAAC,OAAO,CAAC;EAChC,cAAc,EAAEA,GAAG,CAAC,OAAO,CAAC;EAC5B,qBAAqB,EAAEA,GAAG,CAAC,MAAM;AACnC,CAAU","ignoreList":[]}
|
|
@@ -3,6 +3,12 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
+
Object.defineProperty(exports, "ACCENT_TEXT_ROLES", {
|
|
7
|
+
enumerable: true,
|
|
8
|
+
get: function () {
|
|
9
|
+
return _colorRoles.ACCENT_TEXT_ROLES;
|
|
10
|
+
}
|
|
11
|
+
});
|
|
6
12
|
Object.defineProperty(exports, "BORDER_ROLES", {
|
|
7
13
|
enumerable: true,
|
|
8
14
|
get: function () {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_tailwindPreset","require","_themeCss","_tokensJson","_presetVars","_seedScope","_colorRoles","_scales","_shadows"],"sourceRoot":"../../../src","sources":["design-tokens/index.ts"],"mappings":"
|
|
1
|
+
{"version":3,"names":["_tailwindPreset","require","_themeCss","_tokensJson","_presetVars","_seedScope","_colorRoles","_scales","_shadows"],"sourceRoot":"../../../src","sources":["design-tokens/index.ts"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqBA,IAAAA,eAAA,GAAAC,OAAA;AAMA,IAAAC,SAAA,GAAAD,OAAA;AAMA,IAAAE,WAAA,GAAAF,OAAA;AA0BA,IAAAG,WAAA,GAAAH,OAAA;AAEA,IAAAI,UAAA,GAAAJ,OAAA;AAGA,IAAAK,WAAA,GAAAL,OAAA;AAQA,IAAAM,OAAA,GAAAN,OAAA;AASA,IAAAO,QAAA,GAAAP,OAAA","ignoreList":[]}
|
|
@@ -100,6 +100,7 @@ const BORDER_WIDTH_PX = toPxMap(_scales.BORDER_WIDTH);
|
|
|
100
100
|
const COLOR_ROLES = {
|
|
101
101
|
..._colorRoles.FILL_ROLES,
|
|
102
102
|
..._colorRoles.TEXT_ROLES,
|
|
103
|
+
..._colorRoles.ACCENT_TEXT_ROLES,
|
|
103
104
|
..._colorRoles.BORDER_ROLES
|
|
104
105
|
};
|
|
105
106
|
|
|
@@ -119,7 +120,8 @@ const bloomTailwindPreset = exports.bloomTailwindPreset = Object.freeze({
|
|
|
119
120
|
..._colorRoles.FILL_ROLES
|
|
120
121
|
},
|
|
121
122
|
textColor: {
|
|
122
|
-
..._colorRoles.TEXT_ROLES
|
|
123
|
+
..._colorRoles.TEXT_ROLES,
|
|
124
|
+
..._colorRoles.ACCENT_TEXT_ROLES
|
|
123
125
|
},
|
|
124
126
|
borderColor: {
|
|
125
127
|
..._colorRoles.BORDER_ROLES
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_colorRoles","require","_scales","_shadows","px","n","toPxMap","scale","out","key","value","Object","entries","buildFontSize","name","keys","TYPOGRAPHY","role","size","lineHeight","buildFontFamily","FONT_FAMILY_VARS","family","fontWeight","weight","sans","display","mono","SPACING_PX","SPACING","RADIUS_PX","RADIUS","BORDER_WIDTH_PX","BORDER_WIDTH","COLOR_ROLES","FILL_ROLES","TEXT_ROLES","BORDER_ROLES","bloomTailwindPreset","exports","freeze","theme","extend","colors","backgroundColor","textColor","borderColor","spacing","borderRadius","borderWidth","fontSize","fontFamily","boxShadow","s","SHADOW_BOX","m"],"sourceRoot":"../../../src","sources":["design-tokens/tailwind-preset.ts"],"mappings":";;;;;;AA4BA,IAAAA,WAAA,GAAAC,OAAA;AACA,IAAAC,OAAA,GAAAD,OAAA;AAQA,IAAAE,QAAA,GAAAF,OAAA;AArCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAaA;;AAEA;;AAoBA,MAAMG,EAAE,GAAIC,CAAS,IAAa,GAAGA,CAAC,IAAI;;AAE1C;AACA,SAASC,OAAOA,CAACC,KAA6B,EAA0B;EACtE,MAAMC,GAA2B,GAAG,CAAC,CAAC;EACtC,KAAK,MAAM,CAACC,GAAG,EAAEC,KAAK,CAAC,IAAIC,MAAM,CAACC,OAAO,CAACL,KAAK,CAAC,EAAE;IAChD;IACAC,GAAG,CAACC,GAAG,CAAC,GAAGL,EAAE,CAACM,KAAK,CAAC;EACtB;EACA,OAAOF,GAAG;AACZ;;AAEA;AACA,SAASK,aAAaA,CAAA,EAAkC;EACtD,MAAML,GAAkC,GAAG,CAAC,CAAC;EAC7C,KAAK,MAAMM,IAAI,IAAIH,MAAM,CAACI,IAAI,CAACC,kBAAU,CAAC,EAAoB;IAC5D,MAAMC,IAAI,GAAGD,kBAAU,CAACF,IAAI,CAAC;IAC7BN,GAAG,CAACM,IAAI,CAAC,GAAG,CAACV,EAAE,CAACa,IAAI,CAACC,IAAI,CAAC,EAAE;MAAEC,UAAU,EAAEf,EAAE,CAACa,IAAI,CAACE,UAAU;IAAE,CAAC,CAAC;EAClE;EACA,OAAOX,GAAG;AACZ;;AAEA;AACA,SAASY,eAAeA,CAAA,EAAoC;EAC1D,MAAMZ,GAAoC,GAAG,CAAC,CAAC;EAC/C,KAAK,MAAMM,IAAI,IAAIH,MAAM,CAACI,IAAI,CAACC,kBAAU,CAAC,EAAoB;IAC5D,MAAMC,IAAI,GAAGD,kBAAU,CAACF,IAAI,CAAC;IAC7BN,GAAG,CAACM,IAAI,CAAC,GAAG,CAACO,wBAAgB,CAACJ,IAAI,CAACK,MAAM,CAAC,EAAE;MAAEC,UAAU,EAAEN,IAAI,CAACO;IAAO,CAAC,CAAC;EAC1E;EACA;EACAhB,GAAG,CAAC,YAAY,CAAC,GAAG,CAACa,wBAAgB,CAACI,IAAI,EAAE;IAAEF,UAAU,EAAE;EAAM,CAAC,CAAC;EAClEf,GAAG,CAAC,eAAe,CAAC,GAAG,CAACa,wBAAgB,CAACK,OAAO,EAAE;IAAEH,UAAU,EAAE;EAAM,CAAC,CAAC;EACxEf,GAAG,CAAC,YAAY,CAAC,GAAG,CAACa,wBAAgB,CAACM,IAAI,EAAE;IAAEJ,UAAU,EAAE;EAAM,CAAC,CAAC;EAClE,OAAOf,GAAG;AACZ;AAEA,MAAMoB,UAAU,GAAGtB,OAAO,CAACuB,eAAO,CAAC;AACnC,MAAMC,SAAS,GAAGxB,OAAO,CAAC;EAAE,GAAGyB;AAAO,CAAC,CAAC;AACxC,MAAMC,eAAe,GAAG1B,OAAO,CAAC2B,oBAAY,CAAC;;AAE7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMC,WAAmC,GAAG;EAC1C,GAAGC,sBAAU;EACb,GAAGC,sBAAU;EACb,GAAGC;AACL,CAAC;;AAED;AACA;AACA;AACA;AACO,MAAMC,mBAAmC,GAAAC,OAAA,CAAAD,mBAAA,
|
|
1
|
+
{"version":3,"names":["_colorRoles","require","_scales","_shadows","px","n","toPxMap","scale","out","key","value","Object","entries","buildFontSize","name","keys","TYPOGRAPHY","role","size","lineHeight","buildFontFamily","FONT_FAMILY_VARS","family","fontWeight","weight","sans","display","mono","SPACING_PX","SPACING","RADIUS_PX","RADIUS","BORDER_WIDTH_PX","BORDER_WIDTH","COLOR_ROLES","FILL_ROLES","TEXT_ROLES","ACCENT_TEXT_ROLES","BORDER_ROLES","bloomTailwindPreset","exports","freeze","theme","extend","colors","backgroundColor","textColor","borderColor","spacing","borderRadius","borderWidth","fontSize","fontFamily","boxShadow","s","SHADOW_BOX","m"],"sourceRoot":"../../../src","sources":["design-tokens/tailwind-preset.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_colorRoles","require","_tokenRegistry","_scales","_shadows","bloomThemeCss","lines","role","value","Object","entries","FILL_ROLES","TEXT_ROLES","BORDER_ROLES","push","token","CANONICAL_TOKENS","key","SPACING","RADIUS","BORDER_WIDTH","name","keys","TYPOGRAPHY","size","lineHeight","weight","FONT_FAMILY_VARS","family","sans","display","mono","SHADOW_BOX","s","m","join","bloomThemeBlock"],"sourceRoot":"../../../src","sources":["design-tokens/theme-css.ts"],"mappings":";;;;;;;AAyBA,IAAAA,WAAA,GAAAC,OAAA;AACA,IAAAC,cAAA,GAAAD,OAAA;AACA,IAAAE,OAAA,GAAAF,OAAA;AAQA,IAAAG,QAAA,GAAAH,OAAA;AAnCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAcA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASI,aAAaA,CAAA,EAAW;EACtC,MAAMC,KAAe,GAAG,EAAE;;EAE1B;EACA,KAAK,MAAM,CAACC,IAAI,EAAEC,KAAK,CAAC,IAAIC,MAAM,CAACC,OAAO,CAAC;IACzC,GAAGC,sBAAU;IACb,GAAGC,sBAAU;IACb,GAAGC;EACL,CAAC,CAAC,EAAE;
|
|
1
|
+
{"version":3,"names":["_colorRoles","require","_tokenRegistry","_scales","_shadows","bloomThemeCss","lines","role","value","Object","entries","FILL_ROLES","TEXT_ROLES","ACCENT_TEXT_ROLES","BORDER_ROLES","push","token","CANONICAL_TOKENS","key","SPACING","RADIUS","BORDER_WIDTH","name","keys","TYPOGRAPHY","size","lineHeight","weight","FONT_FAMILY_VARS","family","sans","display","mono","SHADOW_BOX","s","m","join","bloomThemeBlock"],"sourceRoot":"../../../src","sources":["design-tokens/theme-css.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -21,6 +21,9 @@
|
|
|
21
21
|
--color-text-inverse: var(--primary-foreground);
|
|
22
22
|
--color-text-fixed-light: var(--primary-foreground);
|
|
23
23
|
--color-text-placeholder: var(--muted-foreground);
|
|
24
|
+
--color-accent-primary: var(--primary-text);
|
|
25
|
+
--color-accent-secondary: var(--secondary-text);
|
|
26
|
+
--color-accent-tertiary: var(--tertiary-text);
|
|
24
27
|
--color-border: var(--border);
|
|
25
28
|
--color-border-image: var(--border);
|
|
26
29
|
--color-border-secondary: var(--input);
|
|
@@ -70,18 +70,27 @@ function colorGroup() {
|
|
|
70
70
|
$type: 'color',
|
|
71
71
|
$description: 'One group per Bloom colour preset, each with a light and a dark scheme. Token names match the CSS custom properties without the leading "--".'
|
|
72
72
|
};
|
|
73
|
-
for (const
|
|
74
|
-
const
|
|
73
|
+
for (const preset of _colorPresets.COLOR_PRESET_REGISTRY) {
|
|
74
|
+
const {
|
|
75
|
+
name
|
|
76
|
+
} = preset;
|
|
75
77
|
const extensions = {
|
|
76
78
|
'so.oxy.bloom': {
|
|
77
79
|
seed: preset.hex,
|
|
78
|
-
variant: preset.variant
|
|
80
|
+
variant: preset.variant,
|
|
81
|
+
displayName: preset.displayName,
|
|
82
|
+
family: preset.family,
|
|
83
|
+
description: preset.description,
|
|
84
|
+
pairing: preset.pairing,
|
|
85
|
+
featured: preset.featured
|
|
79
86
|
}
|
|
80
87
|
};
|
|
88
|
+
if (preset.secondaryHex) extensions['so.oxy.bloom'].secondarySeed = preset.secondaryHex;
|
|
89
|
+
if (preset.tertiaryHex) extensions['so.oxy.bloom'].tertiarySeed = preset.tertiaryHex;
|
|
81
90
|
if (preset.gate) extensions['so.oxy.bloom'].gate = preset.gate;
|
|
82
91
|
if (preset.label) extensions['so.oxy.bloom'].label = preset.label;
|
|
83
92
|
group[name] = {
|
|
84
|
-
$description:
|
|
93
|
+
$description: preset.description,
|
|
85
94
|
$extensions: extensions,
|
|
86
95
|
light: schemeTokens(name, 'light'),
|
|
87
96
|
dark: schemeTokens(name, 'dark')
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_colorPresets","require","_tokenRegistry","_scales","FILE_DESCRIPTION","join","resolvedColorToHex","value","channels","exec","Error","JSON","stringify","red","green","blue","alpha","byte","channel","Math","round","Number","toString","padStart","hex","undefined","fraction","endsWith","slice","String","schemeTokens","preset","scheme","tokens","property","Object","entries","getResolvedTokens","replace","$value","colorGroup","group","$type","$description","name","
|
|
1
|
+
{"version":3,"names":["_colorPresets","require","_tokenRegistry","_scales","FILE_DESCRIPTION","join","resolvedColorToHex","value","channels","exec","Error","JSON","stringify","red","green","blue","alpha","byte","channel","Math","round","Number","toString","padStart","hex","undefined","fraction","endsWith","slice","String","schemeTokens","preset","scheme","tokens","property","Object","entries","getResolvedTokens","replace","$value","colorGroup","group","$type","$description","COLOR_PRESET_REGISTRY","name","extensions","seed","variant","displayName","family","description","pairing","featured","secondaryHex","secondarySeed","tertiaryHex","tertiarySeed","gate","label","$extensions","light","dark","dimensionGroup","scale","key","typographyGroup","keys","TYPOGRAPHY","role","fontSize","size","lineHeight","fontWeight","weight","bloomDesignTokens","color","spacing","SPACING","radius","RADIUS","borderWidth","BORDER_WIDTH","typography","renderBloomTokensJson"],"sourceRoot":"../../../src","sources":["design-tokens/tokens-json.ts"],"mappings":"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","ignoreList":[]}
|