@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.
Files changed (218) hide show
  1. package/README.md +16 -4
  2. package/docs/accordion.mdx +69 -0
  3. package/docs/activity-heatmap.mdx +71 -0
  4. package/docs/admonition.mdx +77 -0
  5. package/docs/alert-dialog.mdx +75 -0
  6. package/docs/alert.mdx +93 -0
  7. package/docs/animated-check.mdx +53 -0
  8. package/docs/aspect-ratio.mdx +45 -0
  9. package/docs/avatar-group.mdx +91 -0
  10. package/docs/avatar.mdx +126 -0
  11. package/docs/badge.mdx +74 -0
  12. package/docs/benefit-list.mdx +56 -0
  13. package/docs/bottom-sheet.mdx +103 -0
  14. package/docs/button.mdx +218 -0
  15. package/docs/card.mdx +106 -0
  16. package/docs/checkbox.mdx +59 -0
  17. package/docs/chip.mdx +53 -0
  18. package/docs/code.mdx +50 -0
  19. package/docs/combobox.mdx +64 -0
  20. package/docs/command.mdx +85 -0
  21. package/docs/composition-bar.mdx +63 -0
  22. package/docs/connection-dots.mdx +50 -0
  23. package/docs/connection-status.mdx +56 -0
  24. package/docs/content-panel.mdx +62 -0
  25. package/docs/context-menu.mdx +65 -0
  26. package/docs/design-tokens.mdx +254 -0
  27. package/docs/dialog.mdx +277 -0
  28. package/docs/divider.mdx +56 -0
  29. package/docs/dot-grid-meter.mdx +66 -0
  30. package/docs/dropdown-menu.mdx +161 -0
  31. package/docs/error-boundary.mdx +72 -0
  32. package/docs/fab.mdx +67 -0
  33. package/docs/field.mdx +70 -0
  34. package/docs/fill.mdx +58 -0
  35. package/docs/fonts.mdx +144 -0
  36. package/docs/frosted-icon-button.mdx +60 -0
  37. package/docs/getting-started.mdx +75 -0
  38. package/docs/grid.mdx +64 -0
  39. package/docs/hooks.mdx +81 -0
  40. package/docs/icon-circle.mdx +66 -0
  41. package/docs/icons.mdx +69 -0
  42. package/docs/image-aspect-ratio-cache.mdx +63 -0
  43. package/docs/image-resolver.mdx +66 -0
  44. package/docs/index.mdx +44 -0
  45. package/docs/input-group.mdx +58 -0
  46. package/docs/item.mdx +69 -0
  47. package/docs/kbd.mdx +57 -0
  48. package/docs/label.mdx +50 -0
  49. package/docs/link-preview.mdx +66 -0
  50. package/docs/list.mdx +72 -0
  51. package/docs/loading.mdx +129 -0
  52. package/docs/media-inset-border.mdx +52 -0
  53. package/docs/menubar.mdx +86 -0
  54. package/docs/migrating-to-1.0.mdx +434 -0
  55. package/docs/motion.mdx +83 -0
  56. package/docs/overlay.mdx +75 -0
  57. package/docs/popover.mdx +73 -0
  58. package/docs/portal.mdx +63 -0
  59. package/docs/pressable-scale.mdx +51 -0
  60. package/docs/profile-card.mdx +66 -0
  61. package/docs/progressive-blur.mdx +54 -0
  62. package/docs/prompt-input.mdx +183 -0
  63. package/docs/provider.mdx +64 -0
  64. package/docs/radio-indicator.mdx +60 -0
  65. package/docs/radio.mdx +65 -0
  66. package/docs/scroll.mdx +66 -0
  67. package/docs/search.mdx +67 -0
  68. package/docs/segmented-control.mdx +76 -0
  69. package/docs/select.mdx +93 -0
  70. package/docs/settings-list.mdx +186 -0
  71. package/docs/skeleton.mdx +66 -0
  72. package/docs/slider.mdx +73 -0
  73. package/docs/stat-bar.mdx +59 -0
  74. package/docs/stat-widgets.mdx +33 -0
  75. package/docs/styles.mdx +61 -0
  76. package/docs/subtle-hover.mdx +53 -0
  77. package/docs/surfaces.mdx +72 -0
  78. package/docs/switch.mdx +90 -0
  79. package/docs/tab-bar.mdx +386 -0
  80. package/docs/tabs.mdx +75 -0
  81. package/docs/text-field.mdx +187 -0
  82. package/docs/theme.mdx +67 -0
  83. package/docs/toast.mdx +285 -0
  84. package/docs/tooltip.mdx +67 -0
  85. package/docs/typography.mdx +88 -0
  86. package/docs/user-hover-card.mdx +140 -0
  87. package/docs/zoomable-image-gallery.mdx +66 -0
  88. package/lib/commonjs/design-tokens/color-roles.js +21 -1
  89. package/lib/commonjs/design-tokens/color-roles.js.map +1 -1
  90. package/lib/commonjs/design-tokens/index.js +6 -0
  91. package/lib/commonjs/design-tokens/index.js.map +1 -1
  92. package/lib/commonjs/design-tokens/tailwind-preset.js +3 -1
  93. package/lib/commonjs/design-tokens/tailwind-preset.js.map +1 -1
  94. package/lib/commonjs/design-tokens/theme-css.js +1 -0
  95. package/lib/commonjs/design-tokens/theme-css.js.map +1 -1
  96. package/lib/commonjs/design-tokens/theme.css +3 -0
  97. package/lib/commonjs/design-tokens/tokens-json.js +13 -4
  98. package/lib/commonjs/design-tokens/tokens-json.js.map +1 -1
  99. package/lib/commonjs/design-tokens/tokens.json +6227 -265
  100. package/lib/commonjs/index.js +7 -0
  101. package/lib/commonjs/index.js.map +1 -1
  102. package/lib/commonjs/index.web.js +7 -0
  103. package/lib/commonjs/index.web.js.map +1 -1
  104. package/lib/commonjs/theme/ambient-store.js +16 -1
  105. package/lib/commonjs/theme/ambient-store.js.map +1 -1
  106. package/lib/commonjs/theme/color-policy.js +30 -33
  107. package/lib/commonjs/theme/color-policy.js.map +1 -1
  108. package/lib/commonjs/theme/color-presets.js +413 -166
  109. package/lib/commonjs/theme/color-presets.js.map +1 -1
  110. package/lib/commonjs/theme/color-scope/seed-scope.js +1 -0
  111. package/lib/commonjs/theme/color-scope/seed-scope.js.map +1 -1
  112. package/lib/commonjs/theme/glass-colors.js +18 -21
  113. package/lib/commonjs/theme/glass-colors.js.map +1 -1
  114. package/lib/commonjs/theme/index.js +30 -0
  115. package/lib/commonjs/theme/index.js.map +1 -1
  116. package/lib/commonjs/theme/index.web.js +30 -0
  117. package/lib/commonjs/theme/index.web.js.map +1 -1
  118. package/lib/module/design-tokens/color-roles.js +20 -0
  119. package/lib/module/design-tokens/color-roles.js.map +1 -1
  120. package/lib/module/design-tokens/index.js +2 -2
  121. package/lib/module/design-tokens/index.js.map +1 -1
  122. package/lib/module/design-tokens/tailwind-preset.js +4 -2
  123. package/lib/module/design-tokens/tailwind-preset.js.map +1 -1
  124. package/lib/module/design-tokens/theme-css.js +2 -1
  125. package/lib/module/design-tokens/theme-css.js.map +1 -1
  126. package/lib/module/design-tokens/theme.css +3 -0
  127. package/lib/module/design-tokens/tokens-json.js +14 -5
  128. package/lib/module/design-tokens/tokens-json.js.map +1 -1
  129. package/lib/module/design-tokens/tokens.json +6227 -265
  130. package/lib/module/index.js +1 -1
  131. package/lib/module/index.js.map +1 -1
  132. package/lib/module/index.web.js +1 -1
  133. package/lib/module/index.web.js.map +1 -1
  134. package/lib/module/theme/ambient-store.js +16 -1
  135. package/lib/module/theme/ambient-store.js.map +1 -1
  136. package/lib/module/theme/color-policy.js +30 -33
  137. package/lib/module/theme/color-policy.js.map +1 -1
  138. package/lib/module/theme/color-presets.js +412 -165
  139. package/lib/module/theme/color-presets.js.map +1 -1
  140. package/lib/module/theme/color-scope/seed-scope.js +2 -1
  141. package/lib/module/theme/color-scope/seed-scope.js.map +1 -1
  142. package/lib/module/theme/glass-colors.js +18 -21
  143. package/lib/module/theme/glass-colors.js.map +1 -1
  144. package/lib/module/theme/index.js +1 -1
  145. package/lib/module/theme/index.js.map +1 -1
  146. package/lib/module/theme/index.web.js +1 -1
  147. package/lib/module/theme/index.web.js.map +1 -1
  148. package/lib/typescript/commonjs/design-tokens/color-roles.d.ts +20 -0
  149. package/lib/typescript/commonjs/design-tokens/color-roles.d.ts.map +1 -1
  150. package/lib/typescript/commonjs/design-tokens/index.d.ts +3 -3
  151. package/lib/typescript/commonjs/design-tokens/index.d.ts.map +1 -1
  152. package/lib/typescript/commonjs/design-tokens/tailwind-preset.d.ts.map +1 -1
  153. package/lib/typescript/commonjs/design-tokens/theme-css.d.ts.map +1 -1
  154. package/lib/typescript/commonjs/design-tokens/tokens-json.d.ts +12 -3
  155. package/lib/typescript/commonjs/design-tokens/tokens-json.d.ts.map +1 -1
  156. package/lib/typescript/commonjs/index.d.ts +2 -2
  157. package/lib/typescript/commonjs/index.d.ts.map +1 -1
  158. package/lib/typescript/commonjs/index.web.d.ts +2 -2
  159. package/lib/typescript/commonjs/index.web.d.ts.map +1 -1
  160. package/lib/typescript/commonjs/theme/ambient-store.d.ts.map +1 -1
  161. package/lib/typescript/commonjs/theme/color-policy.d.ts.map +1 -1
  162. package/lib/typescript/commonjs/theme/color-presets.d.ts +386 -62
  163. package/lib/typescript/commonjs/theme/color-presets.d.ts.map +1 -1
  164. package/lib/typescript/commonjs/theme/color-scope/seed-scope.d.ts.map +1 -1
  165. package/lib/typescript/commonjs/theme/glass-colors.d.ts +18 -21
  166. package/lib/typescript/commonjs/theme/glass-colors.d.ts.map +1 -1
  167. package/lib/typescript/commonjs/theme/index.d.ts +2 -2
  168. package/lib/typescript/commonjs/theme/index.d.ts.map +1 -1
  169. package/lib/typescript/commonjs/theme/index.web.d.ts +2 -2
  170. package/lib/typescript/commonjs/theme/index.web.d.ts.map +1 -1
  171. package/lib/typescript/module/design-tokens/color-roles.d.ts +20 -0
  172. package/lib/typescript/module/design-tokens/color-roles.d.ts.map +1 -1
  173. package/lib/typescript/module/design-tokens/index.d.ts +3 -3
  174. package/lib/typescript/module/design-tokens/index.d.ts.map +1 -1
  175. package/lib/typescript/module/design-tokens/tailwind-preset.d.ts.map +1 -1
  176. package/lib/typescript/module/design-tokens/theme-css.d.ts.map +1 -1
  177. package/lib/typescript/module/design-tokens/tokens-json.d.ts +12 -3
  178. package/lib/typescript/module/design-tokens/tokens-json.d.ts.map +1 -1
  179. package/lib/typescript/module/index.d.ts +2 -2
  180. package/lib/typescript/module/index.d.ts.map +1 -1
  181. package/lib/typescript/module/index.web.d.ts +2 -2
  182. package/lib/typescript/module/index.web.d.ts.map +1 -1
  183. package/lib/typescript/module/theme/ambient-store.d.ts.map +1 -1
  184. package/lib/typescript/module/theme/color-policy.d.ts.map +1 -1
  185. package/lib/typescript/module/theme/color-presets.d.ts +386 -62
  186. package/lib/typescript/module/theme/color-presets.d.ts.map +1 -1
  187. package/lib/typescript/module/theme/color-scope/seed-scope.d.ts.map +1 -1
  188. package/lib/typescript/module/theme/glass-colors.d.ts +18 -21
  189. package/lib/typescript/module/theme/glass-colors.d.ts.map +1 -1
  190. package/lib/typescript/module/theme/index.d.ts +2 -2
  191. package/lib/typescript/module/theme/index.d.ts.map +1 -1
  192. package/lib/typescript/module/theme/index.web.d.ts +2 -2
  193. package/lib/typescript/module/theme/index.web.d.ts.map +1 -1
  194. package/package.json +5 -2
  195. package/src/__tests__/support/collision-fixture-barrel.ts +20 -0
  196. package/src/__tests__/support/constructed-style-sheets.ts +68 -0
  197. package/src/__tests__/support/press-host.ts +30 -0
  198. package/src/__tests__/support/rendered-style.ts +99 -0
  199. package/src/__tests__/support/unread-hook-fixture.ts +33 -0
  200. package/src/design-tokens/color-roles.ts +21 -0
  201. package/src/design-tokens/index.ts +3 -2
  202. package/src/design-tokens/tailwind-preset.ts +3 -2
  203. package/src/design-tokens/theme-css.ts +2 -1
  204. package/src/design-tokens/theme.css +3 -0
  205. package/src/design-tokens/tokens-json.ts +29 -9
  206. package/src/design-tokens/tokens.json +6227 -265
  207. package/src/glass/GlassSurface.tsx +2 -2
  208. package/src/index.ts +2 -0
  209. package/src/index.web.ts +2 -0
  210. package/src/theme/__tests__/__fixtures__/golden-resolved-tokens.json +4082 -0
  211. package/src/theme/__tests__/fixtures/color-engine-golden.json +1 -0
  212. package/src/theme/ambient-store.ts +21 -1
  213. package/src/theme/color-policy.ts +33 -38
  214. package/src/theme/color-presets.ts +473 -146
  215. package/src/theme/color-scope/seed-scope.ts +2 -1
  216. package/src/theme/glass-colors.ts +18 -21
  217. package/src/theme/index.ts +16 -1
  218. 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,MAAMQ,YAAY,GAAAL,OAAA,CAAAK,YAAA,GAAG;EAC1BC,MAAM,EAAET,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":[]}
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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;AAOA,IAAAM,OAAA,GAAAN,OAAA;AASA,IAAAO,QAAA,GAAAP,OAAA","ignoreList":[]}
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":"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","ignoreList":[]}
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":[]}
@@ -52,6 +52,7 @@ function bloomThemeCss() {
52
52
  for (const [role, value] of Object.entries({
53
53
  ..._colorRoles.FILL_ROLES,
54
54
  ..._colorRoles.TEXT_ROLES,
55
+ ..._colorRoles.ACCENT_TEXT_ROLES,
55
56
  ..._colorRoles.BORDER_ROLES
56
57
  })) {
57
58
  lines.push(` --color-${role}: ${value};`);
@@ -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":"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","ignoreList":[]}
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 name of _colorPresets.APP_COLOR_NAMES) {
74
- const preset = _colorPresets.APP_COLOR_PRESETS[name];
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: `Derived by Bloom’s colour engine from seed ${preset.hex} (${preset.variant}).`,
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","APP_COLOR_NAMES","APP_COLOR_PRESETS","extensions","seed","variant","gate","label","$extensions","light","dark","dimensionGroup","description","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":[]}
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":";;;;;;;;AAmBA,IAAAA,aAAA,GAAAC,OAAA;AAQA,IAAAC,cAAA,GAAAD,OAAA;AACA,IAAAE,OAAA,GAAAF,OAAA;AA5BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAmBA;;AAOA;;AAqCA,MAAMG,gBAAgB,GAAG,CACvB,0EAA0E,EAC1E,uGAAuG,EACvG,oGAAoG,EACpG,yGAAyG,EACzG,kFAAkF,EAClF,mGAAmG,EACnG,yGAAyG,EACzG,uGAAuG,EACvG,0GAA0G,EAC1G,gHAAgH,EAChH,iBAAiB,EACjB,oGAAoG,CACrG,CAACC,IAAI,CAAC,GAAG,CAAC;;AAEX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASC,kBAAkBA,CAACC,KAAa,EAAU;EACxD,MAAMC,QAAQ,GAAG,gFAAgF,CAACC,IAAI,CACpGF,KACF,CAAC;EACD,IAAI,CAACC,QAAQ,EAAE;IACb,MAAM,IAAIE,KAAK,CACb,oDAAoDC,IAAI,CAACC,SAAS,CAACL,KAAK,CAAC,EAC3E,CAAC;EACH;EAEA,MAAM,GAAGM,GAAG,GAAG,GAAG,EAAEC,KAAK,GAAG,GAAG,EAAEC,IAAI,GAAG,GAAG,EAAEC,KAAK,CAAC,GAAGR,QAAQ;EAC9D,MAAMS,IAAI,GAAIC,OAAe,IAC3BC,IAAI,CAACC,KAAK,CAACC,MAAM,CAACH,OAAO,CAAC,CAAC,CAACI,QAAQ,CAAC,EAAE,CAAC,CAACC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;EAC3D,MAAMC,GAAG,GAAG,IAAIP,IAAI,CAACJ,GAAG,CAAC,GAAGI,IAAI,CAACH,KAAK,CAAC,GAAGG,IAAI,CAACF,IAAI,CAAC,EAAE;EAEtD,IAAIC,KAAK,KAAKS,SAAS,EAAE,OAAOD,GAAG;EACnC,MAAME,QAAQ,GAAGV,KAAK,CAACW,QAAQ,CAAC,GAAG,CAAC,GAChCN,MAAM,CAACL,KAAK,CAACY,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,GAChCP,MAAM,CAACL,KAAK,CAAC;EACjB,IAAIU,QAAQ,IAAI,CAAC,EAAE,OAAOF,GAAG;EAC7B,OAAO,GAAGA,GAAG,GAAGP,IAAI,CAACY,MAAM,CAACH,QAAQ,GAAG,GAAG,CAAC,CAAC,EAAE;AAChD;AAEA,SAASI,YAAYA,CACnBC,MAAoB,EACpBC,MAAwB,EACK;EAC7B,MAAMC,MAAmC,GAAG,CAAC,CAAC;EAC9C,KAAK,MAAM,CAACC,QAAQ,EAAE3B,KAAK,CAAC,IAAI4B,MAAM,CAACC,OAAO,CAAC,IAAAC,gCAAiB,EAACN,MAAM,EAAEC,MAAM,CAAC,CAAC,EAAE;IACjFC,MAAM,CAACC,QAAQ,CAACI,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,GAAG;MAAEC,MAAM,EAAEjC,kBAAkB,CAACC,KAAK;IAAE,CAAC;EAC7E;EACA,OAAO0B,MAAM;AACf;AAEA,SAASO,UAAUA,CAAA,EAA+B;EAChD,MAAMC,KAA8B,GAAG;IACrCC,KAAK,EAAE,OAAO;IACdC,YAAY,EACV;EACJ,CAAC;EAED,KAAK,MAAMZ,MAAM,IAAIa,mCAAqB,EAAE;IAC1C,MAAM;MAAEC;IAAK,CAAC,GAAGd,MAAM;IACvB,MAAMe,UAA4B,GAAG;MACnC,cAAc,EAAE;QACdC,IAAI,EAAEhB,MAAM,CAACP,GAAG;QAChBwB,OAAO,EAAEjB,MAAM,CAACiB,OAAO;QACvBC,WAAW,EAAElB,MAAM,CAACkB,WAAW;QAC/BC,MAAM,EAAEnB,MAAM,CAACmB,MAAM;QACrBC,WAAW,EAAEpB,MAAM,CAACoB,WAAW;QAC/BC,OAAO,EAAErB,MAAM,CAACqB,OAAO;QACvBC,QAAQ,EAAEtB,MAAM,CAACsB;MACnB;IACF,CAAC;IACD,IAAItB,MAAM,CAACuB,YAAY,EAAER,UAAU,CAAC,cAAc,CAAC,CAACS,aAAa,GAAGxB,MAAM,CAACuB,YAAY;IACvF,IAAIvB,MAAM,CAACyB,WAAW,EAAEV,UAAU,CAAC,cAAc,CAAC,CAACW,YAAY,GAAG1B,MAAM,CAACyB,WAAW;IACpF,IAAIzB,MAAM,CAAC2B,IAAI,EAAEZ,UAAU,CAAC,cAAc,CAAC,CAACY,IAAI,GAAG3B,MAAM,CAAC2B,IAAI;IAC9D,IAAI3B,MAAM,CAAC4B,KAAK,EAAEb,UAAU,CAAC,cAAc,CAAC,CAACa,KAAK,GAAG5B,MAAM,CAAC4B,KAAK;IAEjElB,KAAK,CAACI,IAAI,CAAC,GAAG;MACZF,YAAY,EAAEZ,MAAM,CAACoB,WAAW;MAChCS,WAAW,EAAEd,UAAU;MACvBe,KAAK,EAAE/B,YAAY,CAACe,IAAI,EAAE,OAAO,CAAC;MAClCiB,IAAI,EAAEhC,YAAY,CAACe,IAAI,EAAE,MAAM;IACjC,CAAuB;EACzB;EAEA,OAAOJ,KAAK;AACd;AAEA,SAASsB,cAAcA,CACrBZ,WAAmB,EACnBa,KAA6B,EACC;EAC9B,MAAMvB,KAA8B,GAAG;IACrCC,KAAK,EAAE,WAAW;IAClBC,YAAY,EAAEQ;EAChB,CAAC;EACD,KAAK,MAAM,CAACc,GAAG,EAAE1D,KAAK,CAAC,IAAI4B,MAAM,CAACC,OAAO,CAAC4B,KAAK,CAAC,EAAE;IAChDvB,KAAK,CAACwB,GAAG,CAAC,GAAG;MAAE1B,MAAM,EAAE,GAAGhC,KAAK;IAAK,CAAuB;EAC7D;EACA,OAAOkC,KAAK;AACd;AAEA,SAASyB,eAAeA,CAAA,EAAoC;EAC1D,MAAMzB,KAA8B,GAAG;IACrCE,YAAY,EACV;EACJ,CAAC;EACD,KAAK,MAAME,IAAI,IAAIV,MAAM,CAACgC,IAAI,CAACC,kBAAU,CAAC,EAAoB;IAC5D,MAAMC,IAAI,GAAGD,kBAAU,CAACvB,IAAI,CAAC;IAC7BJ,KAAK,CAACI,IAAI,CAAC,GAAG;MACZyB,QAAQ,EAAE;QAAE5B,KAAK,EAAE,WAAW;QAAEH,MAAM,EAAE,GAAG8B,IAAI,CAACE,IAAI;MAAK,CAAC;MAC1DC,UAAU,EAAE;QAAE9B,KAAK,EAAE,WAAW;QAAEH,MAAM,EAAE,GAAG8B,IAAI,CAACG,UAAU;MAAK,CAAC;MAClEC,UAAU,EAAE;QAAE/B,KAAK,EAAE,YAAY;QAAEH,MAAM,EAAElB,MAAM,CAACgD,IAAI,CAACK,MAAM;MAAE;IACjE,CAAC;EACH;EACA,OAAOjC,KAAK;AACd;;AAEA;AACO,SAASkC,iBAAiBA,CAAA,EAAsB;EACrD,OAAO;IACLhC,YAAY,EAAEvC,gBAAgB;IAC9BwE,KAAK,EAAEpC,UAAU,CAAC,CAAC;IACnBqC,OAAO,EAAEd,cAAc,CACrB,oHAAoH,EACpHe,eACF,CAAC;IACDC,MAAM,EAAEhB,cAAc,CACpB,+GAA+G,EAC/GiB,cACF,CAAC;IACDC,WAAW,EAAElB,cAAc,CACzB,yFAAyF,EACzFmB,oBACF,CAAC;IACDC,UAAU,EAAEjB,eAAe,CAAC;EAC9B,CAAC;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACO,SAASkB,qBAAqBA,CAAA,EAAW;EAC9C,OAAO,GAAGzE,IAAI,CAACC,SAAS,CAAC+D,iBAAiB,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI;AAC5D","ignoreList":[]}