@hanzo/ui 8.4.12 → 8.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (207) hide show
  1. package/dist/backends/gui/band.cjs +46 -0
  2. package/dist/backends/gui/band.d.ts +43 -0
  3. package/dist/backends/gui/band.d.ts.map +1 -0
  4. package/dist/backends/gui/band.js +44 -0
  5. package/dist/backends/gui/band.js.map +1 -0
  6. package/dist/backends/gui/index.cjs +15 -6
  7. package/dist/backends/gui/index.d.ts +5 -3
  8. package/dist/backends/gui/index.d.ts.map +1 -1
  9. package/dist/backends/gui/index.js +5 -3
  10. package/dist/backends/gui/index.js.map +1 -1
  11. package/dist/backends/gui/layout.cjs +12 -2
  12. package/dist/backends/gui/layout.d.ts +1 -1
  13. package/dist/backends/gui/layout.d.ts.map +1 -1
  14. package/dist/backends/gui/layout.js +11 -2
  15. package/dist/backends/gui/layout.js.map +1 -1
  16. package/dist/backends/gui/link.cjs +126 -0
  17. package/dist/backends/gui/link.d.ts +65 -0
  18. package/dist/backends/gui/link.d.ts.map +1 -0
  19. package/dist/backends/gui/link.js +88 -0
  20. package/dist/backends/gui/link.js.map +1 -0
  21. package/dist/backends/gui/prose.cjs +33 -0
  22. package/dist/backends/gui/prose.d.ts +39 -0
  23. package/dist/backends/gui/prose.d.ts.map +1 -0
  24. package/dist/backends/gui/prose.js +30 -0
  25. package/dist/backends/gui/prose.js.map +1 -0
  26. package/dist/backends/gui/video.cjs +89 -0
  27. package/dist/backends/gui/video.d.ts +33 -0
  28. package/dist/backends/gui/video.d.ts.map +1 -0
  29. package/dist/backends/gui/video.js +53 -0
  30. package/dist/backends/gui/video.js.map +1 -0
  31. package/dist/blocks/accordian.cjs +19 -0
  32. package/dist/blocks/accordian.d.ts +4 -0
  33. package/dist/blocks/accordian.d.ts.map +1 -0
  34. package/dist/blocks/accordian.js +16 -0
  35. package/dist/blocks/accordian.js.map +1 -0
  36. package/dist/blocks/bullet-cards.cjs +40 -0
  37. package/dist/blocks/bullet-cards.d.ts +10 -0
  38. package/dist/blocks/bullet-cards.d.ts.map +1 -0
  39. package/dist/blocks/bullet-cards.js +37 -0
  40. package/dist/blocks/bullet-cards.js.map +1 -0
  41. package/dist/blocks/card.cjs +58 -0
  42. package/dist/blocks/card.d.ts +14 -0
  43. package/dist/blocks/card.d.ts.map +1 -0
  44. package/dist/blocks/card.js +55 -0
  45. package/dist/blocks/card.js.map +1 -0
  46. package/dist/blocks/carte-blanche.cjs +38 -0
  47. package/dist/blocks/carte-blanche.d.ts +13 -0
  48. package/dist/blocks/carte-blanche.d.ts.map +1 -0
  49. package/dist/blocks/carte-blanche.js +35 -0
  50. package/dist/blocks/carte-blanche.js.map +1 -0
  51. package/dist/blocks/content.cjs +65 -0
  52. package/dist/blocks/content.d.ts +11 -0
  53. package/dist/blocks/content.d.ts.map +1 -0
  54. package/dist/blocks/content.js +61 -0
  55. package/dist/blocks/content.js.map +1 -0
  56. package/dist/blocks/cta.cjs +103 -0
  57. package/dist/blocks/cta.d.ts +13 -0
  58. package/dist/blocks/cta.d.ts.map +1 -0
  59. package/dist/blocks/cta.js +67 -0
  60. package/dist/blocks/cta.js.map +1 -0
  61. package/dist/blocks/def.cjs +24 -0
  62. package/dist/blocks/def.d.ts +191 -0
  63. package/dist/blocks/def.d.ts.map +1 -0
  64. package/dist/blocks/def.js +22 -0
  65. package/dist/blocks/def.js.map +1 -0
  66. package/dist/blocks/enh-heading.cjs +86 -0
  67. package/dist/blocks/enh-heading.d.ts +7 -0
  68. package/dist/blocks/enh-heading.d.ts.map +1 -0
  69. package/dist/blocks/enh-heading.js +83 -0
  70. package/dist/blocks/enh-heading.js.map +1 -0
  71. package/dist/blocks/grid.cjs +98 -0
  72. package/dist/blocks/grid.d.ts +18 -0
  73. package/dist/blocks/grid.d.ts.map +1 -0
  74. package/dist/blocks/grid.js +62 -0
  75. package/dist/blocks/grid.js.map +1 -0
  76. package/dist/blocks/group.cjs +43 -0
  77. package/dist/blocks/group.d.ts +4 -0
  78. package/dist/blocks/group.d.ts.map +1 -0
  79. package/dist/blocks/group.js +40 -0
  80. package/dist/blocks/group.js.map +1 -0
  81. package/dist/blocks/heading.cjs +22 -0
  82. package/dist/blocks/heading.d.ts +4 -0
  83. package/dist/blocks/heading.d.ts.map +1 -0
  84. package/dist/blocks/heading.js +19 -0
  85. package/dist/blocks/heading.js.map +1 -0
  86. package/dist/blocks/image.cjs +54 -0
  87. package/dist/blocks/image.d.ts +19 -0
  88. package/dist/blocks/image.d.ts.map +1 -0
  89. package/dist/blocks/image.js +51 -0
  90. package/dist/blocks/image.js.map +1 -0
  91. package/dist/blocks/index.cjs +65 -0
  92. package/dist/blocks/index.d.ts +18 -0
  93. package/dist/blocks/index.d.ts.map +1 -0
  94. package/dist/blocks/index.js +30 -0
  95. package/dist/blocks/index.js.map +1 -0
  96. package/dist/blocks/screenful.cjs +139 -0
  97. package/dist/blocks/screenful.d.ts +18 -0
  98. package/dist/blocks/screenful.d.ts.map +1 -0
  99. package/dist/blocks/screenful.js +103 -0
  100. package/dist/blocks/screenful.js.map +1 -0
  101. package/dist/blocks/space.cjs +38 -0
  102. package/dist/blocks/space.d.ts +4 -0
  103. package/dist/blocks/space.d.ts.map +1 -0
  104. package/dist/blocks/space.js +35 -0
  105. package/dist/blocks/space.js.map +1 -0
  106. package/dist/blocks/spec.cjs +58 -0
  107. package/dist/blocks/spec.d.ts +60 -0
  108. package/dist/blocks/spec.d.ts.map +1 -0
  109. package/dist/blocks/spec.js +52 -0
  110. package/dist/blocks/spec.js.map +1 -0
  111. package/dist/blocks/video.cjs +103 -0
  112. package/dist/blocks/video.d.ts +22 -0
  113. package/dist/blocks/video.d.ts.map +1 -0
  114. package/dist/blocks/video.js +67 -0
  115. package/dist/blocks/video.js.map +1 -0
  116. package/dist/gallery.cjs +1 -1
  117. package/dist/gallery.html +104 -7
  118. package/dist/gallery.js +2 -2
  119. package/dist/gallery.js.map +1 -1
  120. package/dist/index.cjs +12 -5
  121. package/dist/index.d.ts +1 -1
  122. package/dist/index.d.ts.map +1 -1
  123. package/dist/index.js +2 -2
  124. package/dist/index.js.map +1 -1
  125. package/dist/index.node.js +2 -2
  126. package/dist/primitives/ApplyTypography.cjs +8 -0
  127. package/dist/primitives/ApplyTypography.d.ts +2 -0
  128. package/dist/primitives/ApplyTypography.d.ts.map +1 -0
  129. package/dist/primitives/ApplyTypography.js +5 -0
  130. package/dist/primitives/ApplyTypography.js.map +1 -0
  131. package/dist/primitives/{Section.cjs → Band.cjs} +3 -3
  132. package/dist/primitives/Band.d.ts +2 -0
  133. package/dist/primitives/Band.d.ts.map +1 -0
  134. package/dist/primitives/{Section.js → Band.js} +2 -2
  135. package/dist/primitives/Band.js.map +1 -0
  136. package/dist/primitives/Fill.cjs +8 -0
  137. package/dist/primitives/Fill.d.ts +2 -0
  138. package/dist/primitives/Fill.d.ts.map +1 -0
  139. package/dist/primitives/Fill.js +5 -0
  140. package/dist/primitives/Fill.js.map +1 -0
  141. package/dist/primitives/Link.cjs +8 -0
  142. package/dist/primitives/Link.d.ts +2 -0
  143. package/dist/primitives/Link.d.ts.map +1 -0
  144. package/dist/primitives/Link.js +5 -0
  145. package/dist/primitives/Link.js.map +1 -0
  146. package/dist/primitives/LinkElement.cjs +8 -0
  147. package/dist/primitives/LinkElement.d.ts +2 -0
  148. package/dist/primitives/LinkElement.d.ts.map +1 -0
  149. package/dist/primitives/LinkElement.js +5 -0
  150. package/dist/primitives/LinkElement.js.map +1 -0
  151. package/dist/primitives/MDXLink.cjs +8 -0
  152. package/dist/primitives/MDXLink.d.ts +2 -0
  153. package/dist/primitives/MDXLink.d.ts.map +1 -0
  154. package/dist/primitives/MDXLink.js +5 -0
  155. package/dist/primitives/MDXLink.js.map +1 -0
  156. package/dist/primitives/Screen.cjs +8 -0
  157. package/dist/primitives/Screen.d.ts +2 -0
  158. package/dist/primitives/Screen.d.ts.map +1 -0
  159. package/dist/primitives/Screen.js +5 -0
  160. package/dist/primitives/Screen.js.map +1 -0
  161. package/dist/primitives/Separator.cjs +2 -2
  162. package/dist/primitives/Separator.d.ts +1 -1
  163. package/dist/primitives/Separator.d.ts.map +1 -1
  164. package/dist/primitives/Separator.js +1 -1
  165. package/dist/primitives/Separator.js.map +1 -1
  166. package/dist/primitives/VideoPlayer.cjs +8 -0
  167. package/dist/primitives/VideoPlayer.d.ts +2 -0
  168. package/dist/primitives/VideoPlayer.d.ts.map +1 -0
  169. package/dist/primitives/VideoPlayer.js +5 -0
  170. package/dist/primitives/VideoPlayer.js.map +1 -0
  171. package/dist/primitives/YouTubeEmbed.cjs +8 -0
  172. package/dist/primitives/YouTubeEmbed.d.ts +2 -0
  173. package/dist/primitives/YouTubeEmbed.d.ts.map +1 -0
  174. package/dist/primitives/YouTubeEmbed.js +5 -0
  175. package/dist/primitives/YouTubeEmbed.js.map +1 -0
  176. package/dist/primitives/useLink.cjs +8 -0
  177. package/dist/primitives/useLink.d.ts +2 -0
  178. package/dist/primitives/useLink.d.ts.map +1 -0
  179. package/dist/primitives/useLink.js +5 -0
  180. package/dist/primitives/useLink.js.map +1 -0
  181. package/dist/product/menu/items.d.ts +1 -1
  182. package/dist/product/menu/items.d.ts.map +1 -1
  183. package/dist/styles.css +101 -4
  184. package/dist/theme.css +101 -0
  185. package/dist/tw.cjs +52 -1
  186. package/dist/tw.d.ts.map +1 -1
  187. package/dist/tw.js +52 -1
  188. package/dist/tw.js.map +1 -1
  189. package/dist/types.cjs +32 -0
  190. package/dist/types.d.ts +136 -0
  191. package/dist/types.d.ts.map +1 -0
  192. package/dist/types.js +30 -0
  193. package/dist/types.js.map +1 -0
  194. package/package.json +29 -17
  195. package/dist/backends/gui/section.cjs +0 -39
  196. package/dist/backends/gui/section.d.ts +0 -29
  197. package/dist/backends/gui/section.d.ts.map +0 -1
  198. package/dist/backends/gui/section.js +0 -37
  199. package/dist/backends/gui/section.js.map +0 -1
  200. package/dist/backends/gui/separator.cjs +0 -10
  201. package/dist/backends/gui/separator.d.ts +0 -11
  202. package/dist/backends/gui/separator.d.ts.map +0 -1
  203. package/dist/backends/gui/separator.js +0 -8
  204. package/dist/backends/gui/separator.js.map +0 -1
  205. package/dist/primitives/Section.d.ts +0 -2
  206. package/dist/primitives/Section.d.ts.map +0 -1
  207. package/dist/primitives/Section.js.map +0 -1
package/dist/types.cjs ADDED
@@ -0,0 +1,32 @@
1
+ 'use client';"use strict";
2
+ // @hanzo/ui/types — the content vocabulary the block renderers read.
3
+ //
4
+ // These are the shapes a SITE authors: a grid, a link, an image, a video. They
5
+ // carry no behaviour and import no component, so content can be written, typed
6
+ // and tested without pulling a renderer in.
7
+ //
8
+ // Flat on purpose. The 5.x line spread these across ten files that each exported
9
+ // one type as `default`, so a consumer wanting three of them wrote three imports
10
+ // of a name the file did not state. One module, named exports, one import.
11
+ //
12
+ // The two that referenced Tailwind are the reason this could not simply be
13
+ // copied: `Breakpoint` was `keyof typeof` a tailwind screens config (under a
14
+ // blanket @ts-nocheck), and `LinkDef` reached `VariantProps<typeof
15
+ // buttonVariants>` from class-variance-authority. Both now name what they
16
+ // actually mean, and neither pulls an engine.
17
+ Object.defineProperty(exports, "__esModule", { value: true });
18
+ exports.COMMON_GRID_4_COL = exports.COMMON_GRID_3_COL = exports.COMMON_GRID_2_COL = exports.COMMON_GRID_1_COL = exports.Breakpoints = void 0;
19
+ exports.Breakpoints = ['xs', 'sm', 'md', 'lg', 'xl', '2xl'];
20
+ const grid = (md, lg) => ({
21
+ at: {
22
+ xs: { columns: 1, gap: 2 },
23
+ md: { columns: md, gap: 3 },
24
+ lg: { columns: lg, gap: 6 },
25
+ },
26
+ mobile: { columns: 1, gap: 2 },
27
+ });
28
+ // One column on a phone in every case; the name says where it lands on a desk.
29
+ exports.COMMON_GRID_1_COL = grid(1, 1);
30
+ exports.COMMON_GRID_2_COL = grid(2, 2);
31
+ exports.COMMON_GRID_3_COL = grid(3, 3);
32
+ exports.COMMON_GRID_4_COL = grid(2, 4);
@@ -0,0 +1,136 @@
1
+ import type { ReactNode } from 'react';
2
+ import type { ButtonProps, ButtonSize, ButtonVariant } from './backends/gui/button.js';
3
+ /**
4
+ * The responsive vocabulary, and the SAME one `tw()` maps class prefixes onto
5
+ * (`md:` → the `$md` gui media prop). A second list would be a second answer to
6
+ * "what is medium".
7
+ *
8
+ * `xs` is here and has no prefix in `tw()`: it is the base rung, which content
9
+ * authored on 5.x names explicitly in `GridDef.at` and `SpaceBlock.sizes`.
10
+ */
11
+ export type Breakpoint = 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl';
12
+ export declare const Breakpoints: Breakpoint[];
13
+ export interface Dimensions {
14
+ w: number;
15
+ h: number;
16
+ }
17
+ export type TShirtSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';
18
+ /** A size per rung, `md` required — the one every consumer can fall back to. */
19
+ export type TShirtDimensions = {
20
+ [k in Exclude<TShirtSize, 'md'>]?: Dimensions;
21
+ } & {
22
+ md: Dimensions;
23
+ };
24
+ /** Columns alone, or columns with the gap between them. */
25
+ export type GridColumnSpec = number | {
26
+ columns: number;
27
+ gap: number;
28
+ };
29
+ export interface GridDef {
30
+ /** Must be given in ASCENDING order. */
31
+ at: {
32
+ [k in Breakpoint]?: GridColumnSpec;
33
+ };
34
+ mobile?: GridColumnSpec;
35
+ }
36
+ export declare const COMMON_GRID_1_COL: GridDef;
37
+ export declare const COMMON_GRID_2_COL: GridDef;
38
+ export declare const COMMON_GRID_3_COL: GridDef;
39
+ export declare const COMMON_GRID_4_COL: GridDef;
40
+ /** @see https://nextjs.org/docs/app/api-reference/components/image */
41
+ export interface ImageDef {
42
+ /** Image url. */
43
+ src: string;
44
+ /** Defaults to the short filename. */
45
+ alt?: string;
46
+ sizes?: string;
47
+ /**
48
+ * A colour class for an svg. Every `fill` in the file must be
49
+ * `currentColor` for it to have any effect.
50
+ */
51
+ svgFillClass?: string;
52
+ /**
53
+ * Rendered dimensions, unless a style prop overrides them — in which case
54
+ * give the file's own resolution so both the server and the browser can work
55
+ * out the aspect ratio before the bytes arrive.
56
+ */
57
+ dim: Dimensions;
58
+ rounded?: string;
59
+ }
60
+ export interface VideoDef {
61
+ /**
62
+ * Passed through to `<video>`. Valueless HTML attributes are booleans here,
63
+ * and React's camelCase spelling is the one that reaches the element
64
+ * (`playsinline` → `playsInline`):
65
+ *
66
+ * videoProps: { autoPlay: true, loop: true, muted: true, playsInline: true }
67
+ */
68
+ videoProps?: Record<string, unknown>;
69
+ poster?: string;
70
+ sources?: string[];
71
+ dim: TShirtDimensions;
72
+ /** e.g. `{ vh: 60, mobile: { vw: 70 } }` */
73
+ sizing?: Record<string, unknown>;
74
+ }
75
+ export interface BulletItem {
76
+ text: string;
77
+ /** An icon is any node, so a string is a legal icon. */
78
+ icon?: ReactNode;
79
+ }
80
+ /**
81
+ * A link that renders with a button's clothes.
82
+ *
83
+ * `variant` and `size` were `VariantProps<typeof buttonVariants>` — a type
84
+ * class-variance-authority derives from a style table. Naming the two unions
85
+ * directly says the same thing, is readable at the call site, and drops a
86
+ * Tailwind-ecosystem dependency from a file that holds no styles.
87
+ */
88
+ export interface LinkDef {
89
+ variant?: ButtonVariant | null;
90
+ size?: ButtonSize | null;
91
+ /** Ignored when the element is rendered directly WITH children. */
92
+ title?: string;
93
+ /** Ignored when the element is rendered directly WITH children. */
94
+ icon?: ReactNode;
95
+ /** Ignored when the element is rendered directly WITH children. */
96
+ iconAfter?: boolean;
97
+ href: string;
98
+ /**
99
+ * External links open in a new tab, internal ones in the same tab.
100
+ * `newTab` overrides both. ('external' means the url starts with `http`.)
101
+ */
102
+ newTab?: boolean;
103
+ /** Renders disabled: default cursor, and pointer events stop here. */
104
+ disabled?: boolean;
105
+ contents?: string;
106
+ childMenu?: LinkDef[];
107
+ groupName?: string;
108
+ }
109
+ export type SubmitServerAction = (data: unknown, enclosure?: unknown) => Promise<unknown>;
110
+ export interface ButtonModalProps {
111
+ open: boolean;
112
+ onOpenChange: (b: boolean) => void;
113
+ buttonText: string;
114
+ buttonProps: ButtonProps;
115
+ title: string;
116
+ byline?: string;
117
+ action: SubmitServerAction;
118
+ actionEnclosure?: unknown;
119
+ }
120
+ export interface ButtonModalDef {
121
+ Comp: React.ComponentType<ButtonModalProps>;
122
+ title: string;
123
+ props?: Record<string, unknown>;
124
+ byline?: string;
125
+ action?: SubmitServerAction;
126
+ actionEnclosure?: unknown;
127
+ }
128
+ export interface ButtonDef {
129
+ text: string;
130
+ props: ButtonProps;
131
+ action: {
132
+ type: 'modal';
133
+ def: ButtonModalDef;
134
+ };
135
+ }
136
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AACtC,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAA;AAInF;;;;;;;GAOG;AACH,MAAM,MAAM,UAAU,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,KAAK,CAAA;AAEjE,eAAO,MAAM,WAAW,EAAE,UAAU,EAA0C,CAAA;AAI9E,MAAM,WAAW,UAAU;IACzB,CAAC,EAAE,MAAM,CAAA;IACT,CAAC,EAAE,MAAM,CAAA;CACV;AAED,MAAM,MAAM,UAAU,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAA;AAEzD,gFAAgF;AAChF,MAAM,MAAM,gBAAgB,GAAG;KAAG,CAAC,IAAI,OAAO,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,UAAU;CAAE,GAAG;IACjF,EAAE,EAAE,UAAU,CAAA;CACf,CAAA;AAID,2DAA2D;AAC3D,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAAA;AAEtE,MAAM,WAAW,OAAO;IACtB,wCAAwC;IACxC,EAAE,EAAE;SAAG,CAAC,IAAI,UAAU,CAAC,CAAC,EAAE,cAAc;KAAE,CAAA;IAC1C,MAAM,CAAC,EAAE,cAAc,CAAA;CACxB;AAYD,eAAO,MAAM,iBAAiB,SAAa,CAAA;AAC3C,eAAO,MAAM,iBAAiB,SAAa,CAAA;AAC3C,eAAO,MAAM,iBAAiB,SAAa,CAAA;AAC3C,eAAO,MAAM,iBAAiB,SAAa,CAAA;AAI3C,sEAAsE;AACtE,MAAM,WAAW,QAAQ;IACvB,iBAAiB;IACjB,GAAG,EAAE,MAAM,CAAA;IACX,sCAAsC;IACtC,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,KAAK,CAAC,EAAE,MAAM,CAAA;IACd;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB;;;;OAIG;IACH,GAAG,EAAE,UAAU,CAAA;IACf,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED,MAAM,WAAW,QAAQ;IACvB;;;;;;OAMG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACpC,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;IAClB,GAAG,EAAE,gBAAgB,CAAA;IACrB,4CAA4C;IAC5C,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CACjC;AAID,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAA;IACZ,wDAAwD;IACxD,IAAI,CAAC,EAAE,SAAS,CAAA;CACjB;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,OAAO;IACtB,OAAO,CAAC,EAAE,aAAa,GAAG,IAAI,CAAA;IAC9B,IAAI,CAAC,EAAE,UAAU,GAAG,IAAI,CAAA;IACxB,mEAAmE;IACnE,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,mEAAmE;IACnE,IAAI,CAAC,EAAE,SAAS,CAAA;IAChB,mEAAmE;IACnE,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,IAAI,EAAE,MAAM,CAAA;IACZ;;;OAGG;IACH,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,sEAAsE;IACtE,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,SAAS,CAAC,EAAE,OAAO,EAAE,CAAA;IACrB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,MAAM,MAAM,kBAAkB,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE,SAAS,CAAC,EAAE,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;AAEzF,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,OAAO,CAAA;IACb,YAAY,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,IAAI,CAAA;IAClC,UAAU,EAAE,MAAM,CAAA;IAClB,WAAW,EAAE,WAAW,CAAA;IACxB,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,kBAAkB,CAAA;IAC1B,eAAe,CAAC,EAAE,OAAO,CAAA;CAC1B;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,KAAK,CAAC,aAAa,CAAC,gBAAgB,CAAC,CAAA;IAC3C,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC/B,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,MAAM,CAAC,EAAE,kBAAkB,CAAA;IAC3B,eAAe,CAAC,EAAE,OAAO,CAAA;CAC1B;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,WAAW,CAAA;IAClB,MAAM,EAAE;QACN,IAAI,EAAE,OAAO,CAAA;QACb,GAAG,EAAE,cAAc,CAAA;KACpB,CAAA;CACF"}
package/dist/types.js ADDED
@@ -0,0 +1,30 @@
1
+ 'use client';// @hanzo/ui/types — the content vocabulary the block renderers read.
2
+ //
3
+ // These are the shapes a SITE authors: a grid, a link, an image, a video. They
4
+ // carry no behaviour and import no component, so content can be written, typed
5
+ // and tested without pulling a renderer in.
6
+ //
7
+ // Flat on purpose. The 5.x line spread these across ten files that each exported
8
+ // one type as `default`, so a consumer wanting three of them wrote three imports
9
+ // of a name the file did not state. One module, named exports, one import.
10
+ //
11
+ // The two that referenced Tailwind are the reason this could not simply be
12
+ // copied: `Breakpoint` was `keyof typeof` a tailwind screens config (under a
13
+ // blanket @ts-nocheck), and `LinkDef` reached `VariantProps<typeof
14
+ // buttonVariants>` from class-variance-authority. Both now name what they
15
+ // actually mean, and neither pulls an engine.
16
+ export const Breakpoints = ['xs', 'sm', 'md', 'lg', 'xl', '2xl'];
17
+ const grid = (md, lg) => ({
18
+ at: {
19
+ xs: { columns: 1, gap: 2 },
20
+ md: { columns: md, gap: 3 },
21
+ lg: { columns: lg, gap: 6 },
22
+ },
23
+ mobile: { columns: 1, gap: 2 },
24
+ });
25
+ // One column on a phone in every case; the name says where it lands on a desk.
26
+ export const COMMON_GRID_1_COL = grid(1, 1);
27
+ export const COMMON_GRID_2_COL = grid(2, 2);
28
+ export const COMMON_GRID_3_COL = grid(3, 3);
29
+ export const COMMON_GRID_4_COL = grid(2, 4);
30
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,qEAAqE;AACrE,EAAE;AACF,+EAA+E;AAC/E,+EAA+E;AAC/E,4CAA4C;AAC5C,EAAE;AACF,iFAAiF;AACjF,iFAAiF;AACjF,2EAA2E;AAC3E,EAAE;AACF,2EAA2E;AAC3E,6EAA6E;AAC7E,mEAAmE;AACnE,0EAA0E;AAC1E,8CAA8C;AAiB9C,MAAM,CAAC,MAAM,WAAW,GAAiB,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,CAAA;AA2B9E,MAAM,IAAI,GAAG,CAAC,EAAU,EAAE,EAAU,EAAW,EAAE,CAAC,CAAC;IACjD,EAAE,EAAE;QACF,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE;QAC1B,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE;QAC3B,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE;KAC5B;IACD,MAAM,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE;CAC/B,CAAC,CAAA;AAEF,+EAA+E;AAC/E,MAAM,CAAC,MAAM,iBAAiB,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;AAC3C,MAAM,CAAC,MAAM,iBAAiB,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;AAC3C,MAAM,CAAC,MAAM,iBAAiB,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;AAC3C,MAAM,CAAC,MAAM,iBAAiB,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hanzo/ui",
3
- "version": "8.4.12",
3
+ "version": "8.5.0",
4
4
  "type": "module",
5
5
  "description": "Hanzo UI — the one canonical Hanzo component library, on @hanzo/gui + @hanzo/design. ONE substrate: every component renders through @hanzo/gui primitives, so the same import works on web, native (expo) and desktop (Tauri). Self-contained (theme.css), presentational, host-agnostic, clean-room.",
6
6
  "exports": {
@@ -11,6 +11,12 @@
11
11
  "require": "./dist/index.cjs",
12
12
  "default": "./dist/index.js"
13
13
  },
14
+ "./blocks": {
15
+ "types": "./dist/blocks/index.d.ts",
16
+ "import": "./dist/blocks/index.js",
17
+ "require": "./dist/blocks/index.cjs",
18
+ "default": "./dist/blocks/index.js"
19
+ },
14
20
  "./gallery": {
15
21
  "types": "./dist/gallery.d.ts",
16
22
  "import": "./dist/gallery.js",
@@ -194,6 +200,12 @@
194
200
  "types": "./dist/grid.d.ts",
195
201
  "import": "./dist/grid.js",
196
202
  "require": "./dist/grid.cjs"
203
+ },
204
+ "./types": {
205
+ "types": "./dist/types.d.ts",
206
+ "import": "./dist/types.js",
207
+ "require": "./dist/types.cjs",
208
+ "default": "./dist/types.js"
197
209
  }
198
210
  },
199
211
  "main": "./dist/index.cjs",
@@ -223,14 +235,14 @@
223
235
  "@hanzo/cd": ">=0.1.0",
224
236
  "@hanzo/dashboard": ">=0.1.0",
225
237
  "@hanzo/data": ">=1.2.3",
226
- "@hanzo/gui": ">=8.1.0",
238
+ "@hanzo/gui": ">=8.2.1",
227
239
  "@hanzo/usage": ">=0.1.0",
228
- "@hanzogui/animations-css": ">=8.1.0",
229
- "@hanzogui/config": ">=8.1.0",
230
- "@hanzogui/lucide-icons-2": ">=8.1.0",
231
- "@hanzogui/next-theme": ">=8.1.0",
232
- "@hanzogui/telemetry": ">=8.1.0",
233
- "@hanzogui/toast": ">=8.1.0",
240
+ "@hanzogui/animations-css": ">=8.2.1",
241
+ "@hanzogui/config": ">=8.2.1",
242
+ "@hanzogui/lucide-icons-2": ">=8.2.1",
243
+ "@hanzogui/next-theme": ">=8.2.1",
244
+ "@hanzogui/telemetry": ">=8.2.1",
245
+ "@hanzogui/toast": ">=8.2.1",
234
246
  "next": ">=14",
235
247
  "next-themes": ">=0.2.1",
236
248
  "react": ">=19",
@@ -266,16 +278,16 @@
266
278
  "devDependencies": {
267
279
  "@hanzo/dashboard": "^0.2.0",
268
280
  "@hanzo/data": "1.2.3",
269
- "@hanzo/gui": "8.1.0",
281
+ "@hanzo/gui": "8.2.1",
270
282
  "@hanzo/usage": "^0.1.6",
271
- "@hanzogui/animations-css": "^8.1.1",
272
- "@hanzogui/config": "8.1.0",
273
- "@hanzogui/core": "8.1.0",
274
- "@hanzogui/lucide-icons-2": "8.1.0",
275
- "@hanzogui/next-theme": "8.1.0",
276
- "@hanzogui/telemetry": "8.1.0",
277
- "@hanzogui/toast": "8.1.0",
278
- "@hanzogui/web": "8.1.0",
283
+ "@hanzogui/animations-css": "8.2.1",
284
+ "@hanzogui/config": "8.2.1",
285
+ "@hanzogui/core": "8.2.1",
286
+ "@hanzogui/lucide-icons-2": "8.2.1",
287
+ "@hanzogui/next-theme": "8.2.1",
288
+ "@hanzogui/telemetry": "8.2.1",
289
+ "@hanzogui/toast": "8.2.1",
290
+ "@hanzogui/web": "8.2.1",
279
291
  "@playwright/test": "^1.61.0",
280
292
  "@types/node": "^22.10.2",
281
293
  "@types/react": "^19.1.10",
@@ -1,39 +0,0 @@
1
- 'use client';"use strict";
2
- 'use client';
3
- Object.defineProperty(exports, "__esModule", { value: true });
4
- exports.Section = void 0;
5
- const jsx_runtime_1 = require("react/jsx-runtime");
6
- /**
7
- * Section — the page's vertical rhythm, in one place.
8
- *
9
- * Components kept inventing their own vertical story: a margin here, a padding
10
- * there, a `<div style={{marginTop: 64}}>` somewhere else. The result is a page
11
- * whose spacing is the sum of everyone's guesses, and which is never the same
12
- * twice on a phone.
13
- *
14
- * So the page-level spacing decision is made once, from the space scale, and it
15
- * is mobile-first: phone values by default, stepping up past `$gtSm`. A caller
16
- * that writes nothing gets the right answer at every width, which is the point —
17
- * the failure mode being designed out is "had to remember something".
18
- *
19
- * Two boxes, because they do two different jobs and merging them is what breaks:
20
- * the OUTER runs full-bleed and owns the vertical rhythm and the side gutter, so
21
- * a background set on it reaches both edges; the INNER is the centred measure and
22
- * owns `maxWidth`. Put `maxWidth` on the outer box instead and a section can
23
- * never have a full-width background.
24
- */
25
- const gui_1 = require("@hanzo/gui");
26
- const slot_1 = require("./slot.cjs");
27
- const Section = ({ maxWidth = 1200, children, innerProps, ...props }) => ((0, jsx_runtime_1.jsx)(gui_1.YStack, { ...(0, slot_1.slot)('section'), width: "100%",
28
- // Values come from the space scale, never literals — a section spaced in
29
- // raw px drifts from everything else on the page. `$md` is a MAX-width
30
- // query in this config, so the base is the roomy value and the phone steps
31
- // it down; that is the direction every other responsive prop in this
32
- // package is written in ($md/$sm in Field, PageHeader, SiteNav) and mixing
33
- // both directions in one codebase is how a breakpoint ends up applying
34
- // twice.
35
- py: "$11", px: "$6", $md: { py: '$8', px: '$4' }, ...props, children: (0, jsx_runtime_1.jsx)(gui_1.YStack, { ...(0, slot_1.slot)('section-inner'), width: "100%", ...(maxWidth === false ? {} : { maxWidth }),
36
- // The centring. `self: center` is the cross-axis rule a YStack understands
37
- // on web AND native, where `margin: auto` is web-only.
38
- self: "center", ...innerProps, children: children }) }));
39
- exports.Section = Section;
@@ -1,29 +0,0 @@
1
- /**
2
- * Section — the page's vertical rhythm, in one place.
3
- *
4
- * Components kept inventing their own vertical story: a margin here, a padding
5
- * there, a `<div style={{marginTop: 64}}>` somewhere else. The result is a page
6
- * whose spacing is the sum of everyone's guesses, and which is never the same
7
- * twice on a phone.
8
- *
9
- * So the page-level spacing decision is made once, from the space scale, and it
10
- * is mobile-first: phone values by default, stepping up past `$gtSm`. A caller
11
- * that writes nothing gets the right answer at every width, which is the point —
12
- * the failure mode being designed out is "had to remember something".
13
- *
14
- * Two boxes, because they do two different jobs and merging them is what breaks:
15
- * the OUTER runs full-bleed and owns the vertical rhythm and the side gutter, so
16
- * a background set on it reaches both edges; the INNER is the centred measure and
17
- * owns `maxWidth`. Put `maxWidth` on the outer box instead and a section can
18
- * never have a full-width background.
19
- */
20
- import { type YStackProps } from '@hanzo/gui';
21
- export interface SectionProps extends YStackProps {
22
- /** The centred measure. `false` lets the content run the full width. */
23
- maxWidth?: number | false;
24
- /** Props for the inner centred column. */
25
- innerProps?: YStackProps;
26
- }
27
- declare const Section: ({ maxWidth, children, innerProps, ...props }: SectionProps) => import("react/jsx-runtime").JSX.Element;
28
- export { Section };
29
- //# sourceMappingURL=section.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"section.d.ts","sourceRoot":"","sources":["../../../src/backends/gui/section.tsx"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;GAkBG;AACH,OAAO,EAAU,KAAK,WAAW,EAAE,MAAM,YAAY,CAAA;AAGrD,MAAM,WAAW,YAAa,SAAQ,WAAW;IAC/C,wEAAwE;IACxE,QAAQ,CAAC,EAAE,MAAM,GAAG,KAAK,CAAA;IACzB,0CAA0C;IAC1C,UAAU,CAAC,EAAE,WAAW,CAAA;CACzB;AAED,QAAA,MAAM,OAAO,iDAAyD,YAAY,4CA4BjF,CAAA;AAED,OAAO,EAAE,OAAO,EAAE,CAAA"}
@@ -1,37 +0,0 @@
1
- 'use client';
2
- import { jsx as _jsx } from "react/jsx-runtime";
3
- /**
4
- * Section — the page's vertical rhythm, in one place.
5
- *
6
- * Components kept inventing their own vertical story: a margin here, a padding
7
- * there, a `<div style={{marginTop: 64}}>` somewhere else. The result is a page
8
- * whose spacing is the sum of everyone's guesses, and which is never the same
9
- * twice on a phone.
10
- *
11
- * So the page-level spacing decision is made once, from the space scale, and it
12
- * is mobile-first: phone values by default, stepping up past `$gtSm`. A caller
13
- * that writes nothing gets the right answer at every width, which is the point —
14
- * the failure mode being designed out is "had to remember something".
15
- *
16
- * Two boxes, because they do two different jobs and merging them is what breaks:
17
- * the OUTER runs full-bleed and owns the vertical rhythm and the side gutter, so
18
- * a background set on it reaches both edges; the INNER is the centred measure and
19
- * owns `maxWidth`. Put `maxWidth` on the outer box instead and a section can
20
- * never have a full-width background.
21
- */
22
- import { YStack } from '@hanzo/gui';
23
- import { slot } from './slot.js';
24
- const Section = ({ maxWidth = 1200, children, innerProps, ...props }) => (_jsx(YStack, { ...slot('section'), width: "100%",
25
- // Values come from the space scale, never literals — a section spaced in
26
- // raw px drifts from everything else on the page. `$md` is a MAX-width
27
- // query in this config, so the base is the roomy value and the phone steps
28
- // it down; that is the direction every other responsive prop in this
29
- // package is written in ($md/$sm in Field, PageHeader, SiteNav) and mixing
30
- // both directions in one codebase is how a breakpoint ends up applying
31
- // twice.
32
- py: "$11", px: "$6", $md: { py: '$8', px: '$4' }, ...props, children: _jsx(YStack, { ...slot('section-inner'), width: "100%", ...(maxWidth === false ? {} : { maxWidth }),
33
- // The centring. `self: center` is the cross-axis rule a YStack understands
34
- // on web AND native, where `margin: auto` is web-only.
35
- self: "center", ...innerProps, children: children }) }));
36
- export { Section };
37
- //# sourceMappingURL=section.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"section.js","sourceRoot":"","sources":["../../../src/backends/gui/section.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAEZ;;;;;;;;;;;;;;;;;;GAkBG;AACH,OAAO,EAAE,MAAM,EAAoB,MAAM,YAAY,CAAA;AACrD,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA;AAS7B,MAAM,OAAO,GAAG,CAAC,EAAE,QAAQ,GAAG,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,KAAK,EAAgB,EAAE,EAAE,CAAC,CACrF,KAAC,MAAM,OACD,IAAI,CAAC,SAAS,CAAC,EACnB,KAAK,EAAC,MAAM;IACZ,yEAAyE;IACzE,uEAAuE;IACvE,2EAA2E;IAC3E,qEAAqE;IACrE,2EAA2E;IAC3E,uEAAuE;IACvE,SAAS;IACT,EAAE,EAAC,KAAK,EACR,EAAE,EAAC,IAAI,EACP,GAAG,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,KACvB,KAAK,YAET,KAAC,MAAM,OACD,IAAI,CAAC,eAAe,CAAC,EACzB,KAAK,EAAC,MAAM,KACR,CAAC,QAAQ,KAAK,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC;QAC5C,2EAA2E;QAC3E,uDAAuD;QACvD,IAAI,EAAC,QAAQ,KACT,UAAU,YAEb,QAAQ,GACF,GACF,CACV,CAAA;AAED,OAAO,EAAE,OAAO,EAAE,CAAA"}
@@ -1,10 +0,0 @@
1
- 'use client';"use strict";
2
- 'use client';
3
- Object.defineProperty(exports, "__esModule", { value: true });
4
- exports.Separator = void 0;
5
- const jsx_runtime_1 = require("react/jsx-runtime");
6
- /** Separator — a 1px rule on either axis. */
7
- const gui_1 = require("@hanzo/gui");
8
- const slot_1 = require("./slot.cjs");
9
- const Separator = ({ orientation = 'horizontal', decorative: _decorative, ...props }) => ((0, jsx_runtime_1.jsx)(gui_1.Separator, { ...(0, slot_1.slot)('separator'), "data-orientation": orientation, vertical: orientation === 'vertical', borderColor: "$borderColor", ...props }));
10
- exports.Separator = Separator;
@@ -1,11 +0,0 @@
1
- /** Separator — a 1px rule on either axis. */
2
- import { Separator as GuiSeparator } from '@hanzo/gui';
3
- import type { ComponentProps } from 'react';
4
- export type SeparatorProps = Omit<ComponentProps<typeof GuiSeparator>, 'vertical'> & {
5
- orientation?: 'horizontal' | 'vertical';
6
- /** Radix parity — gui separators are always presentational. */
7
- decorative?: boolean;
8
- };
9
- declare const Separator: ({ orientation, decorative: _decorative, ...props }: SeparatorProps) => import("react/jsx-runtime").JSX.Element;
10
- export { Separator };
11
- //# sourceMappingURL=separator.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"separator.d.ts","sourceRoot":"","sources":["../../../src/backends/gui/separator.tsx"],"names":[],"mappings":"AAEA,6CAA6C;AAC7C,OAAO,EAAE,SAAS,IAAI,YAAY,EAAE,MAAM,YAAY,CAAA;AACtD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,OAAO,CAAA;AAG3C,MAAM,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,YAAY,CAAC,EAAE,UAAU,CAAC,GAAG;IACnF,WAAW,CAAC,EAAE,YAAY,GAAG,UAAU,CAAA;IACvC,+DAA+D;IAC/D,UAAU,CAAC,EAAE,OAAO,CAAA;CACrB,CAAA;AAED,QAAA,MAAM,SAAS,uDAAuE,cAAc,4CAQnG,CAAA;AAED,OAAO,EAAE,SAAS,EAAE,CAAA"}
@@ -1,8 +0,0 @@
1
- 'use client';
2
- import { jsx as _jsx } from "react/jsx-runtime";
3
- /** Separator — a 1px rule on either axis. */
4
- import { Separator as GuiSeparator } from '@hanzo/gui';
5
- import { slot } from './slot.js';
6
- const Separator = ({ orientation = 'horizontal', decorative: _decorative, ...props }) => (_jsx(GuiSeparator, { ...slot('separator'), "data-orientation": orientation, vertical: orientation === 'vertical', borderColor: "$borderColor", ...props }));
7
- export { Separator };
8
- //# sourceMappingURL=separator.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"separator.js","sourceRoot":"","sources":["../../../src/backends/gui/separator.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAEZ,6CAA6C;AAC7C,OAAO,EAAE,SAAS,IAAI,YAAY,EAAE,MAAM,YAAY,CAAA;AAEtD,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA;AAQ7B,MAAM,SAAS,GAAG,CAAC,EAAE,WAAW,GAAG,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,GAAG,KAAK,EAAkB,EAAE,EAAE,CAAC,CACvG,KAAC,YAAY,OACP,IAAI,CAAC,WAAW,CAAC,sBACH,WAAW,EAC7B,QAAQ,EAAE,WAAW,KAAK,UAAU,EACpC,WAAW,EAAC,cAAc,KACtB,KAAK,GACT,CACH,CAAA;AAED,OAAO,EAAE,SAAS,EAAE,CAAA"}
@@ -1,2 +0,0 @@
1
- export { Section } from '../backends/gui/section.js';
2
- //# sourceMappingURL=Section.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Section.d.ts","sourceRoot":"","sources":["../../src/primitives/Section.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"Section.js","sourceRoot":"","sources":["../../src/primitives/Section.tsx"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,kEAAkE;AAClE,qEAAqE;AACrE,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAA"}