@hashsome/ui 0.1.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 (192) hide show
  1. package/LICENSE +674 -0
  2. package/dist/.tsbuildinfo +1 -0
  3. package/dist/entities/action-button.d.ts +17 -0
  4. package/dist/entities/action-button.js +56 -0
  5. package/dist/entities/action-button.js.map +1 -0
  6. package/dist/entities/artwork-ring.d.ts +17 -0
  7. package/dist/entities/artwork-ring.js +89 -0
  8. package/dist/entities/artwork-ring.js.map +1 -0
  9. package/dist/entities/climate-tile.d.ts +20 -0
  10. package/dist/entities/climate-tile.js +98 -0
  11. package/dist/entities/climate-tile.js.map +1 -0
  12. package/dist/entities/light-color.d.ts +52 -0
  13. package/dist/entities/light-color.js +148 -0
  14. package/dist/entities/light-color.js.map +1 -0
  15. package/dist/entities/light-tile.d.ts +24 -0
  16. package/dist/entities/light-tile.js +139 -0
  17. package/dist/entities/light-tile.js.map +1 -0
  18. package/dist/entities/media-browser.d.ts +15 -0
  19. package/dist/entities/media-browser.js +67 -0
  20. package/dist/entities/media-browser.js.map +1 -0
  21. package/dist/entities/media-controls.d.ts +20 -0
  22. package/dist/entities/media-controls.js +53 -0
  23. package/dist/entities/media-controls.js.map +1 -0
  24. package/dist/entities/media-player-bar.d.ts +14 -0
  25. package/dist/entities/media-player-bar.js +78 -0
  26. package/dist/entities/media-player-bar.js.map +1 -0
  27. package/dist/entities/media-player-body.d.ts +16 -0
  28. package/dist/entities/media-player-body.js +18 -0
  29. package/dist/entities/media-player-body.js.map +1 -0
  30. package/dist/entities/media-player-column.d.ts +18 -0
  31. package/dist/entities/media-player-column.js +34 -0
  32. package/dist/entities/media-player-column.js.map +1 -0
  33. package/dist/entities/media-player-page.d.ts +12 -0
  34. package/dist/entities/media-player-page.js +13 -0
  35. package/dist/entities/media-player-page.js.map +1 -0
  36. package/dist/entities/media-progress.d.ts +7 -0
  37. package/dist/entities/media-progress.js +30 -0
  38. package/dist/entities/media-progress.js.map +1 -0
  39. package/dist/entities/media-seek.d.ts +9 -0
  40. package/dist/entities/media-seek.js +19 -0
  41. package/dist/entities/media-seek.js.map +1 -0
  42. package/dist/entities/nav-dock.d.ts +13 -0
  43. package/dist/entities/nav-dock.js +22 -0
  44. package/dist/entities/nav-dock.js.map +1 -0
  45. package/dist/entities/nav-rail.d.ts +19 -0
  46. package/dist/entities/nav-rail.js +18 -0
  47. package/dist/entities/nav-rail.js.map +1 -0
  48. package/dist/entities/now-playing.d.ts +20 -0
  49. package/dist/entities/now-playing.js +34 -0
  50. package/dist/entities/now-playing.js.map +1 -0
  51. package/dist/entities/scene-button.d.ts +13 -0
  52. package/dist/entities/scene-button.js +6 -0
  53. package/dist/entities/scene-button.js.map +1 -0
  54. package/dist/entities/seek-line.d.ts +9 -0
  55. package/dist/entities/seek-line.js +71 -0
  56. package/dist/entities/seek-line.js.map +1 -0
  57. package/dist/entities/sensor-readout.d.ts +28 -0
  58. package/dist/entities/sensor-readout.js +95 -0
  59. package/dist/entities/sensor-readout.js.map +1 -0
  60. package/dist/entities/top-bar.d.ts +68 -0
  61. package/dist/entities/top-bar.js +248 -0
  62. package/dist/entities/top-bar.js.map +1 -0
  63. package/dist/entity-handle.d.ts +21 -0
  64. package/dist/entity-handle.js +16 -0
  65. package/dist/entity-handle.js.map +1 -0
  66. package/dist/gallery/fixtures.d.ts +4 -0
  67. package/dist/gallery/fixtures.js +119 -0
  68. package/dist/gallery/fixtures.js.map +1 -0
  69. package/dist/gallery/gallery.d.ts +9 -0
  70. package/dist/gallery/gallery.js +355 -0
  71. package/dist/gallery/gallery.js.map +1 -0
  72. package/dist/gallery/index.d.ts +2 -0
  73. package/dist/gallery/index.js +2 -0
  74. package/dist/gallery/index.js.map +1 -0
  75. package/dist/gallery/props-data.d.ts +10 -0
  76. package/dist/gallery/props-data.js +718 -0
  77. package/dist/gallery/props-data.js.map +1 -0
  78. package/dist/hooks.d.ts +19 -0
  79. package/dist/hooks.js +53 -0
  80. package/dist/hooks.js.map +1 -0
  81. package/dist/icon-data.d.ts +6 -0
  82. package/dist/icon-data.js +59193 -0
  83. package/dist/icon-data.js.map +1 -0
  84. package/dist/icon.d.ts +9 -0
  85. package/dist/icon.js +28 -0
  86. package/dist/icon.js.map +1 -0
  87. package/dist/index.d.ts +30 -0
  88. package/dist/index.js +24 -0
  89. package/dist/index.js.map +1 -0
  90. package/dist/layout/cover.d.ts +5 -0
  91. package/dist/layout/cover.js +8 -0
  92. package/dist/layout/cover.js.map +1 -0
  93. package/dist/layout/date-time-field.d.ts +15 -0
  94. package/dist/layout/date-time-field.js +108 -0
  95. package/dist/layout/date-time-field.js.map +1 -0
  96. package/dist/layout/detail-provider.d.ts +22 -0
  97. package/dist/layout/detail-provider.js +26 -0
  98. package/dist/layout/detail-provider.js.map +1 -0
  99. package/dist/layout/drawer-controls.d.ts +46 -0
  100. package/dist/layout/drawer-controls.js +93 -0
  101. package/dist/layout/drawer-controls.js.map +1 -0
  102. package/dist/layout/energy-chart.d.ts +37 -0
  103. package/dist/layout/energy-chart.js +85 -0
  104. package/dist/layout/energy-chart.js.map +1 -0
  105. package/dist/layout/energy-usage.d.ts +6 -0
  106. package/dist/layout/energy-usage.js +18 -0
  107. package/dist/layout/energy-usage.js.map +1 -0
  108. package/dist/layout/entity-drawer.d.ts +15 -0
  109. package/dist/layout/entity-drawer.js +77 -0
  110. package/dist/layout/entity-drawer.js.map +1 -0
  111. package/dist/layout/fade-scroll.d.ts +14 -0
  112. package/dist/layout/fade-scroll.js +59 -0
  113. package/dist/layout/fade-scroll.js.map +1 -0
  114. package/dist/layout/grid.d.ts +9 -0
  115. package/dist/layout/grid.js +6 -0
  116. package/dist/layout/grid.js.map +1 -0
  117. package/dist/layout/history-section.d.ts +19 -0
  118. package/dist/layout/history-section.js +39 -0
  119. package/dist/layout/history-section.js.map +1 -0
  120. package/dist/layout/hold-progress.d.ts +2 -0
  121. package/dist/layout/hold-progress.js +9 -0
  122. package/dist/layout/hold-progress.js.map +1 -0
  123. package/dist/layout/icon-button-styles.d.ts +9 -0
  124. package/dist/layout/icon-button-styles.js +28 -0
  125. package/dist/layout/icon-button-styles.js.map +1 -0
  126. package/dist/layout/page.d.ts +17 -0
  127. package/dist/layout/page.js +29 -0
  128. package/dist/layout/page.js.map +1 -0
  129. package/dist/layout/plain-button.d.ts +11 -0
  130. package/dist/layout/plain-button.js +17 -0
  131. package/dist/layout/plain-button.js.map +1 -0
  132. package/dist/layout/room-header.d.ts +12 -0
  133. package/dist/layout/room-header.js +11 -0
  134. package/dist/layout/room-header.js.map +1 -0
  135. package/dist/layout/round-button.d.ts +13 -0
  136. package/dist/layout/round-button.js +19 -0
  137. package/dist/layout/round-button.js.map +1 -0
  138. package/dist/layout/sensor-history.d.ts +15 -0
  139. package/dist/layout/sensor-history.js +91 -0
  140. package/dist/layout/sensor-history.js.map +1 -0
  141. package/dist/layout/sensor-stats.d.ts +21 -0
  142. package/dist/layout/sensor-stats.js +79 -0
  143. package/dist/layout/sensor-stats.js.map +1 -0
  144. package/dist/layout/series-chart.d.ts +25 -0
  145. package/dist/layout/series-chart.js +46 -0
  146. package/dist/layout/series-chart.js.map +1 -0
  147. package/dist/layout/stepper.d.ts +10 -0
  148. package/dist/layout/stepper.js +12 -0
  149. package/dist/layout/stepper.js.map +1 -0
  150. package/dist/layout/swatch-row.d.ts +19 -0
  151. package/dist/layout/swatch-row.js +20 -0
  152. package/dist/layout/swatch-row.js.map +1 -0
  153. package/dist/layout/tile.d.ts +67 -0
  154. package/dist/layout/tile.js +207 -0
  155. package/dist/layout/tile.js.map +1 -0
  156. package/dist/layout/use-drawer.d.ts +33 -0
  157. package/dist/layout/use-drawer.js +34 -0
  158. package/dist/layout/use-drawer.js.map +1 -0
  159. package/dist/layout/use-hold.d.ts +21 -0
  160. package/dist/layout/use-hold.js +61 -0
  161. package/dist/layout/use-hold.js.map +1 -0
  162. package/dist/provider.d.ts +37 -0
  163. package/dist/provider.js +95 -0
  164. package/dist/provider.js.map +1 -0
  165. package/dist/status.d.ts +8 -0
  166. package/dist/status.js +27 -0
  167. package/dist/status.js.map +1 -0
  168. package/dist/theme/density.d.ts +16 -0
  169. package/dist/theme/density.js +7 -0
  170. package/dist/theme/density.js.map +1 -0
  171. package/dist/theme/global-styles.d.ts +5 -0
  172. package/dist/theme/global-styles.js +44 -0
  173. package/dist/theme/global-styles.js.map +1 -0
  174. package/dist/theme/index.d.ts +19 -0
  175. package/dist/theme/index.js +106 -0
  176. package/dist/theme/index.js.map +1 -0
  177. package/dist/theme/overrides.d.ts +28 -0
  178. package/dist/theme/overrides.js +24 -0
  179. package/dist/theme/overrides.js.map +1 -0
  180. package/dist/theme/tokens.d.ts +78 -0
  181. package/dist/theme/tokens.js +1 -0
  182. package/dist/theme/tokens.js.map +1 -0
  183. package/dist/theme/use-typography.d.ts +4 -0
  184. package/dist/theme/use-typography.js +9 -0
  185. package/dist/theme/use-typography.js.map +1 -0
  186. package/dist/use-entity-history.d.ts +12 -0
  187. package/dist/use-entity-history.js +43 -0
  188. package/dist/use-entity-history.js.map +1 -0
  189. package/dist/use-media-browser.d.ts +31 -0
  190. package/dist/use-media-browser.js +87 -0
  191. package/dist/use-media-browser.js.map +1 -0
  192. package/package.json +57 -0
@@ -0,0 +1,355 @@
1
+ import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "@emotion/react/jsx-runtime";
2
+ /** @jsxImportSource @emotion/react */
3
+ import { Flex, Typography } from 'e-prim';
4
+ import { LocalClient } from '@hashsome/core';
5
+ import { useEffect, useMemo, useState } from 'react';
6
+ import { ActionButton } from '../entities/action-button.js';
7
+ import { ClimateTile } from '../entities/climate-tile.js';
8
+ import { LightTile } from '../entities/light-tile.js';
9
+ import { MediaBrowser } from '../entities/media-browser.js';
10
+ import { MediaPlayerBar } from '../entities/media-player-bar.js';
11
+ import { MediaPlayerColumn } from '../entities/media-player-column.js';
12
+ import { MediaPlayerPage } from '../entities/media-player-page.js';
13
+ import { NavDock } from '../entities/nav-dock.js';
14
+ import { NavRail } from '../entities/nav-rail.js';
15
+ import { Page } from '../layout/page.js';
16
+ import { SceneButton } from '../entities/scene-button.js';
17
+ import { SensorReadout } from '../entities/sensor-readout.js';
18
+ import { PresenceStack, SystemStatus, TopBar } from '../entities/top-bar.js';
19
+ import { Icon } from '../icon.js';
20
+ import { EnergyChart, } from '../layout/energy-chart.js';
21
+ import { Grid } from '../layout/grid.js';
22
+ import { HistorySection } from '../layout/history-section.js';
23
+ import { RoomHeader } from '../layout/room-header.js';
24
+ import { Tile } from '../layout/tile.js';
25
+ import { HashsomeProvider } from '../provider.js';
26
+ import { createGalleryIntegration } from './fixtures.js';
27
+ import { COMPONENT_PROPS } from './props-data.js';
28
+ const ICON_PACKS = [
29
+ { name: 'Lucide', prefix: 'lu', href: 'https://lucide.dev/icons/' },
30
+ { name: 'Tabler', prefix: 'tb', href: 'https://tabler.io/icons' },
31
+ ];
32
+ const NAV_ITEMS = [
33
+ { to: '', label: 'Home', icon: 'lu:house' },
34
+ { to: 'lights', label: 'Lights', icon: 'lu:lightbulb' },
35
+ { to: 'climate', label: 'Climate', icon: 'lu:thermometer' },
36
+ { to: 'music', label: 'Music', icon: 'lu:music' },
37
+ ];
38
+ const codeStyles = {
39
+ fontFamily: "ui-monospace, 'SF Mono', Menlo, monospace",
40
+ overflowWrap: 'anywhere',
41
+ };
42
+ /** A bounded "stage" card rendering real `@hashsome/ui` components on the app background, so the demos
43
+ * read as they would on a dashboard against the gallery's own page chrome. */
44
+ function Stage({ children }) {
45
+ return (_jsx(Flex, { direction: "column", gap: 3, background: "bg", color: "text", radius: "card", p: 8, minHeight: 72, children: children }));
46
+ }
47
+ /** One documented component: a heading, a one-line description, and a `Stage` demoing its
48
+ * supported states — interactive, not just a static picture. */
49
+ /** A component's props, read from its own prop interface and doc comments (`props-data.ts`, generated
50
+ * by `pnpm generate:catalog`), so what's listed here is exactly what the IDE shows on hover. */
51
+ function PropsTable({ name }) {
52
+ const entry = COMPONENT_PROPS[name];
53
+ if (!entry || entry.props.length === 0) {
54
+ return null;
55
+ }
56
+ return (_jsxs("details", { css: ({ palette }) => ({
57
+ marginTop: 12,
58
+ '& summary': { cursor: 'pointer', padding: '4px 0' },
59
+ '& table': { width: '100%', marginTop: 8, borderCollapse: 'collapse' },
60
+ '& th, & td': {
61
+ padding: '8px 12px 8px 0',
62
+ textAlign: 'left',
63
+ verticalAlign: 'top',
64
+ borderBottom: `1px solid ${palette.border}`,
65
+ },
66
+ }), children: [_jsx("summary", { children: _jsxs(Typography, { as: "span", variant: "label", color: "textMuted", children: ["Props \u00B7 ", name, " (", entry.props.length, ")"] }) }), _jsxs("table", { children: [_jsx("thead", { children: _jsx("tr", { children: ['Prop', 'Type', 'Description'].map((heading) => (_jsx("th", { scope: "col", children: _jsx(Typography, { as: "span", variant: "eyebrow", uppercase: true, color: "textMuted", children: heading }) }, heading))) }) }), _jsx("tbody", { children: entry.props.map((prop) => (_jsxs("tr", { children: [_jsx("td", { children: _jsxs(Typography, { as: "span", variant: "label", css: codeStyles, children: [prop.name, prop.optional ? '' : ' *'] }) }), _jsx("td", { children: _jsx(Typography, { as: "span", variant: "secondary", color: "textMuted", css: codeStyles, children: prop.type }) }), _jsx("td", { children: _jsx(Typography, { as: "span", variant: "body", color: "textMuted", children: prop.doc }) })] }, prop.name))) })] })] }));
67
+ }
68
+ function ComponentDoc({ title, description, components, children, }) {
69
+ return (_jsxs("section", { css: { marginBottom: 40 }, children: [_jsxs(Flex, { direction: "column", gap: 1, maxWidth: "60ch", mb: 4, children: [_jsx(Typography, { as: "h2", variant: "heading", children: title }), _jsx(Typography, { as: "p", variant: "body", color: "textMuted", children: description })] }), _jsx(Stage, { children: children }), components.map((name) => (_jsx(PropsTable, { name: name }, name)))] }));
70
+ }
71
+ /** Plain dimmable tile whose fill follows a local value, since `Tile` itself is controlled. */
72
+ function TileFillDemo() {
73
+ const [fill, setFill] = useState(0.6);
74
+ return (_jsx(Tile, { label: "With fill", icon: "lu:sun", active: true, fill: fill, onFillChange: setFill, secondary: `${Math.round(fill * 100)}%` }));
75
+ }
76
+ /** A labeled sub-preview within a `Stage`, for a component that isn't itself a tile (e.g. nav
77
+ * chrome). `NavDock` is `position: fixed`, which a plain wrapper can't contain — `transform` on
78
+ * an ancestor makes it establish a containing block for fixed-position descendants instead (a
79
+ * standard CSS escape hatch), confining it to this box instead of the real viewport. */
80
+ function SubPreview({ label, height, children, }) {
81
+ return (_jsxs(Flex, { direction: "column", gap: 2, children: [_jsx(Typography, { as: "span", variant: "eyebrow", uppercase: true, color: "textMuted", children: label }), _jsx(Flex, { position: "relative", overflow: "hidden", radius: "row", border: true, height: height, css: { transform: 'translateZ(0)' }, children: children })] }));
82
+ }
83
+ // No real integration exposes history data yet (see the "entity activity history" ticket) — this
84
+ // stands in so the drawer's History section has something to demo in the meantime.
85
+ const lampHistory = [
86
+ {
87
+ id: '1',
88
+ message: 'turned on',
89
+ actor: 'Dan',
90
+ timestamp: new Date(Date.now() - 2 * 60_000).toISOString(),
91
+ },
92
+ {
93
+ id: '2',
94
+ message: 'turned off',
95
+ actor: 'automation.bedtime',
96
+ actorKind: 'automation',
97
+ timestamp: new Date(Date.now() - 60 * 60_000).toISOString(),
98
+ },
99
+ {
100
+ id: '3',
101
+ message: 'turned on',
102
+ actor: 'Dan',
103
+ timestamp: new Date(Date.now() - 3 * 60 * 60_000).toISOString(),
104
+ },
105
+ ];
106
+ const ago = (minutes) => new Date(Date.now() - minutes * 60_000).toISOString();
107
+ const stairsHistory = [
108
+ {
109
+ id: '1',
110
+ message: 'turned off',
111
+ actor: 'automation.bedtime',
112
+ actorKind: 'automation',
113
+ timestamp: ago(45),
114
+ },
115
+ { id: '2', message: 'turned on', actor: 'Alex', timestamp: ago(4 * 60) },
116
+ { id: '3', message: 'turned off', actor: 'Alex', timestamp: ago(9 * 60) },
117
+ ];
118
+ const ledHistory = [
119
+ { id: '1', message: 'brightness set to 60%', actor: 'Dan', timestamp: ago(12) },
120
+ { id: '2', message: 'turned on', actor: 'Dan', timestamp: ago(14) },
121
+ {
122
+ id: '3',
123
+ message: 'turned off',
124
+ actor: 'automation.morning_routine',
125
+ actorKind: 'automation',
126
+ timestamp: ago(6 * 60),
127
+ },
128
+ ];
129
+ const heaterHistory = [
130
+ { id: '1', message: 'target set to 17 °C', actor: 'Dan', timestamp: ago(25) },
131
+ {
132
+ id: '2',
133
+ message: 'mode set to heat',
134
+ actor: 'automation.morning_routine',
135
+ actorKind: 'automation',
136
+ timestamp: ago(7 * 60),
137
+ },
138
+ { id: '3', message: 'mode set to off', actor: 'Alex', timestamp: ago(14 * 60) },
139
+ ];
140
+ const nightLampHistory = [
141
+ {
142
+ id: '1',
143
+ message: 'turned off',
144
+ actor: 'automation.bedtime',
145
+ actorKind: 'automation',
146
+ timestamp: ago(30),
147
+ },
148
+ { id: '2', message: 'color changed', actor: 'Alex', timestamp: ago(90) },
149
+ { id: '3', message: 'turned on', actor: 'Alex', timestamp: ago(2 * 60) },
150
+ ];
151
+ // Same story as the history demo data above — no real integration exposes energy history yet
152
+ // (see the same ticket); a small deterministic wave stands in so the chart has something to show.
153
+ function generateSeries(points, intervalMs, base, amplitude) {
154
+ const now = Date.now();
155
+ return Array.from({ length: points }, (_, i) => ({
156
+ timestamp: new Date(now - (points - 1 - i) * intervalMs).toISOString(),
157
+ watts: Math.max(0, Math.round(base + amplitude * Math.sin(i / 3) + Math.sin(i * 7) * amplitude * 0.15)),
158
+ }));
159
+ }
160
+ const lampEnergyByRange = {
161
+ '1h': generateSeries(30, 2 * 60_000, 9, 2),
162
+ '1d': generateSeries(48, 30 * 60_000, 8, 4),
163
+ '1w': generateSeries(28, 6 * 60 * 60_000, 7, 5),
164
+ '1m': generateSeries(30, 24 * 60 * 60_000, 8, 6),
165
+ };
166
+ // Demo usage totals (kWh) — real ones need a history/statistics source no integration provides yet.
167
+ const lampUsage = { today: 0.18, week: 1.1, month: 4.7, last7d: 1.3, last30d: 5.2 };
168
+ /** Mock live data for the lamp's power sensor: a small random walk every few seconds, also
169
+ * appended to the 1H series, so the drawer's headline and sparkline visibly move. */
170
+ function useLiveLampEnergy(ha) {
171
+ const [oneHour, setOneHour] = useState(lampEnergyByRange['1h'] ?? []);
172
+ useEffect(() => {
173
+ let watts = 9;
174
+ const id = setInterval(() => {
175
+ watts = Math.min(14, Math.max(5, Math.round(watts + (Math.random() - 0.5) * 3)));
176
+ ha.update('sensor.lamp_power', { value: String(watts), numeric: watts });
177
+ setOneHour((series) => [...series, { timestamp: new Date().toISOString(), watts }].slice(-60));
178
+ }, 2500);
179
+ return () => clearInterval(id);
180
+ }, [ha]);
181
+ return useMemo(() => ({
182
+ power: 'ha:sensor.lamp_power',
183
+ energy: 'ha:sensor.lamp_energy',
184
+ usage: lampUsage,
185
+ seriesByRange: { ...lampEnergyByRange, '1h': oneHour },
186
+ }), [oneHour]);
187
+ }
188
+ /** Mock power for a climate entity: near `maxWatts` (with a little jitter) while it isn't off, 0
189
+ * while it is — re-evaluated on every mode change and every few seconds, so switching a mode in the
190
+ * card or drawer visibly moves the drawer's power reading. */
191
+ function useClimateEnergy(ha, config) {
192
+ const { entity, power, energy, maxWatts, series, usage } = config;
193
+ const [oneHour, setOneHour] = useState(series['1h'] ?? []);
194
+ useEffect(() => {
195
+ const tick = () => {
196
+ const device = ha.getEntity(entity);
197
+ const off = device?.kind === 'climate' && device.mode === 'off';
198
+ const watts = off ? 0 : Math.round(maxWatts * (0.9 + Math.random() * 0.2));
199
+ ha.update(power, { value: String(watts), numeric: watts });
200
+ setOneHour((points) => [...points, { timestamp: new Date().toISOString(), watts }].slice(-60));
201
+ };
202
+ const unsubscribe = ha.subscribe(entity, tick);
203
+ const id = setInterval(tick, 2500);
204
+ return () => {
205
+ unsubscribe();
206
+ clearInterval(id);
207
+ };
208
+ }, [ha, entity, power, maxWatts]);
209
+ return useMemo(() => ({
210
+ power: `ha:${power}`,
211
+ energy: `ha:${energy}`,
212
+ usage,
213
+ seriesByRange: { ...series, '1h': oneHour },
214
+ }), [power, energy, usage, series, oneHour]);
215
+ }
216
+ const heaterSeries = {
217
+ '1h': generateSeries(30, 2 * 60_000, 1180, 140),
218
+ '1d': generateSeries(48, 30 * 60_000, 700, 600),
219
+ '1w': generateSeries(28, 6 * 60 * 60_000, 600, 500),
220
+ '1m': generateSeries(30, 24 * 60 * 60_000, 650, 450),
221
+ };
222
+ const thermostatSeries = {
223
+ '1h': generateSeries(30, 2 * 60_000, 20, 20),
224
+ '1d': generateSeries(48, 30 * 60_000, 500, 450),
225
+ '1w': generateSeries(28, 6 * 60 * 60_000, 450, 400),
226
+ '1m': generateSeries(30, 24 * 60 * 60_000, 480, 380),
227
+ };
228
+ const heaterUsage = { today: 6.2, week: 38, month: 142, last7d: 41, last30d: 148 };
229
+ const thermostatUsage = { today: 0.9, week: 11.5, month: 47, last7d: 12.3, last30d: 49 };
230
+ // Demo sensor history — no integration exposes it yet (same ticket). 35 days at 30-minute spacing,
231
+ // a daily cycle plus a slower drift, so every period (today / week / month / custom) has data.
232
+ function generateSensorHistory(base, daily, drift) {
233
+ const step = 30 * 60_000;
234
+ const count = 35 * 48;
235
+ const now = Date.now();
236
+ return Array.from({ length: count }, (_, i) => {
237
+ const t = now - (count - 1 - i) * step;
238
+ const hours = (t / 3_600_000) % 24;
239
+ const days = t / 86_400_000;
240
+ const value = base +
241
+ daily * Math.sin((hours / 24) * 2 * Math.PI) +
242
+ drift * Math.sin(days / 2.3) +
243
+ Math.sin(i * 1.7) * 0.4;
244
+ return { timestamp: new Date(t).toISOString(), value: Math.round(value * 10) / 10 };
245
+ });
246
+ }
247
+ const temperatureHistory = generateSensorHistory(19.5, 2.2, 1.6);
248
+ const humidityHistory = generateSensorHistory(52, 9, 11);
249
+ const bedroomHumidityHistory = generateSensorHistory(34, 7, 6);
250
+ const officeHumidityHistory = generateSensorHistory(46, 5, 4);
251
+ const LED_MAX_WATTS = 12;
252
+ /** Mock power for the dimmable LED strip that tracks its brightness: watts scale with the
253
+ * brightness percentage (0 when off), so dragging the slider visibly moves the reading. */
254
+ function useBrightnessLinkedEnergy(ha) {
255
+ const [oneHour, setOneHour] = useState(() => generateSeries(30, 2 * 60_000, 7, 1));
256
+ useEffect(() => ha.subscribe('light.dimmable', (light) => {
257
+ const on = light?.kind === 'light' && light.on;
258
+ const watts = on ? Math.round((light.brightness ?? 1) * LED_MAX_WATTS) : 0;
259
+ ha.update('sensor.led_power', { value: String(watts), numeric: watts });
260
+ setOneHour((series) => [...series, { timestamp: new Date().toISOString(), watts }].slice(-60));
261
+ }), [ha]);
262
+ return useMemo(() => ({
263
+ power: 'ha:sensor.led_power',
264
+ energy: 'ha:sensor.led_energy',
265
+ usage: { today: 0.09, week: 0.62, month: 2.4, last7d: 0.7, last30d: 2.6 },
266
+ seriesByRange: { ...lampEnergyByRange, '1h': oneHour },
267
+ }), [oneHour]);
268
+ }
269
+ /**
270
+ * Documentation for every `@hashsome/ui` component: what it is and the states it supports, each a
271
+ * live, interactive demo backed by an in-browser mock — not a dashboard itself (that's what
272
+ * `example/dashboards/*` are for). Served standalone by `pnpm --filter @hashsome/ui docs`. Must
273
+ * be rendered inside a router (nav components use router links).
274
+ */
275
+ export function Gallery({ density = 'comfortable' }) {
276
+ const ha = useMemo(() => createGalleryIntegration(), []);
277
+ const client = useMemo(() => new LocalClient([ha]), [ha]);
278
+ const lampEnergy = useLiveLampEnergy(ha);
279
+ const ledEnergy = useBrightnessLinkedEnergy(ha);
280
+ const heaterEnergy = useClimateEnergy(ha, {
281
+ entity: 'climate.heater',
282
+ power: 'sensor.heater_power',
283
+ energy: 'sensor.heater_energy',
284
+ maxWatts: 1200,
285
+ series: heaterSeries,
286
+ usage: heaterUsage,
287
+ });
288
+ const thermostatEnergy = useClimateEnergy(ha, {
289
+ entity: 'climate.off',
290
+ power: 'sensor.thermostat_power',
291
+ energy: 'sensor.thermostat_energy',
292
+ maxWatts: 1500,
293
+ series: thermostatSeries,
294
+ usage: thermostatUsage,
295
+ });
296
+ const [mode, setMode] = useState('dark');
297
+ return (_jsx(HashsomeProvider, { client: client, theme: mode, density: density, children: _jsx("div", { css: ({ palette }) => ({
298
+ background: palette.surfaceRaised,
299
+ color: palette.text,
300
+ minHeight: '100%',
301
+ padding: '32px 20px 64px',
302
+ }), children: _jsxs("div", { css: { maxWidth: 960, margin: '0 auto' }, children: [_jsxs("header", { css: {
303
+ display: 'flex',
304
+ alignItems: 'flex-start',
305
+ justifyContent: 'space-between',
306
+ gap: 16,
307
+ flexWrap: 'wrap',
308
+ marginBottom: 36,
309
+ }, children: [_jsxs(Flex, { direction: "column", gap: 1.5, maxWidth: "60ch", children: [_jsx(Typography, { as: "h1", variant: "stat", children: "@hashsome/ui component gallery" }), _jsx(Typography, { as: "p", variant: "body", color: "textMuted", children: "Every component `@hashsome/ui` ships, with the states it supports \u2014 a live, interactive reference for building a dashboard, not a dashboard of its own." })] }), _jsxs("button", { type: "button", css: ({ palette, radius }) => ({
310
+ position: 'relative',
311
+ display: 'inline-flex',
312
+ alignItems: 'center',
313
+ justifyContent: 'space-between',
314
+ flexShrink: 0,
315
+ boxSizing: 'border-box',
316
+ width: 60,
317
+ height: 32,
318
+ margin: 0,
319
+ padding: '0 8px',
320
+ borderRadius: radius.full,
321
+ border: `1px solid ${palette.border}`,
322
+ background: palette.border,
323
+ font: 'inherit',
324
+ lineHeight: 'normal',
325
+ cursor: 'pointer',
326
+ transition: 'border-color 0.15s',
327
+ '&:hover': { borderColor: palette.textMuted },
328
+ '& svg': {
329
+ position: 'relative',
330
+ zIndex: 1,
331
+ color: palette.textMuted,
332
+ transition: 'color 0.2s',
333
+ },
334
+ // Sun lit while in light mode, moon lit while in dark mode — both icons are always
335
+ // visible at fixed positions; only their color and the thumb underneath change.
336
+ "&[aria-pressed='false'] svg:first-of-type, &[aria-pressed='true'] svg:last-of-type": { color: palette.text },
337
+ }), onClick: () => setMode((m) => (m === 'dark' ? 'light' : 'dark')), "aria-label": `Switch to ${mode === 'dark' ? 'light' : 'dark'} theme`, "aria-pressed": mode === 'dark', children: [_jsx("span", { css: ({ palette, radius }) => ({
338
+ position: 'absolute',
339
+ // `top: 50%` + `translateY(-50%)` centers it despite the border eating into the
340
+ // button's content box; a fixed `top: 3px` sat 2px above true center.
341
+ top: '50%',
342
+ left: 3,
343
+ width: 26,
344
+ height: 26,
345
+ borderRadius: radius.full,
346
+ background: palette.surfaceRaised,
347
+ boxShadow: '0 1px 3px rgba(0, 0, 0, 0.25)',
348
+ transform: mode === 'dark' ? 'translate(28px, -50%)' : 'translateY(-50%)',
349
+ transition: 'transform 0.2s ease',
350
+ }) }), _jsx(Icon, { name: "lu:sun", size: 14 }), _jsx(Icon, { name: "lu:moon", size: 14 })] })] }), _jsx(ComponentDoc, { title: "Grid", components: ['Grid'], description: "Lays tiles out in equal-width columns (`columns`, default 2). Cells share the width and never overflow it.", children: _jsxs(Flex, { direction: "column", gap: 5, children: [_jsxs(Grid, { columns: 2, children: [_jsx(Tile, { label: "Two", icon: "lu:layout-grid", secondary: "columns={2}" }), _jsx(Tile, { label: "Columns", icon: "lu:layout-grid", secondary: "equal width" })] }), _jsxs(Grid, { columns: 3, children: [_jsx(Tile, { label: "Three", icon: "lu:layout-grid", secondary: "columns={3}" }), _jsx(Tile, { label: "Columns", icon: "lu:layout-grid", secondary: "equal width" }), _jsx(Tile, { label: "Wide", icon: "lu:layout-grid", secondary: "fits the row" })] })] }) }), _jsx(ComponentDoc, { title: "Room Header", components: ['RoomHeader'], description: "The header that starts a room: a muted icon and title, a hairline and readouts on the right, placed above a Grid (or any tiles). It adds its own space above, so consecutive rooms read as groups.", children: _jsxs(Flex, { direction: "column", gap: 4, children: [_jsx(RoomHeader, { title: "Kitchen", icon: "lu:utensils-crossed" }), _jsx(RoomHeader, { title: "Porch", icon: "lu:house", readouts: _jsxs(_Fragment, { children: [_jsx(SensorReadout, { entity: "ha:sensor.temperature" }), _jsx(SensorReadout, { entity: "ha:sensor.humidity" })] }) })] }) }), _jsx(ComponentDoc, { title: "Tile", components: ['Tile'], description: "The base card every entity tile is built from: icon, label, status line, optional fill bar (drag to change it), trailing controls, a hold-to-open drawer and pending / done / error feedback. Use it directly for something that isn't an entity.", children: _jsxs(Grid, { children: [_jsx(Tile, { label: "Plain", icon: "lu:lamp", secondary: "Off" }), _jsx(Tile, { label: "Active", icon: "lu:lamp", active: true }), _jsx(TileFillDemo, {}), _jsx(Tile, { label: "With controls", icon: "lu:fan", trailing: _jsx(Typography, { as: "span", variant: "secondary", color: "textMuted", children: "trailing" }) }), _jsx(Tile, { label: "Pending", icon: "lu:lamp", feedback: "pending" }), _jsx(Tile, { label: "Error", icon: "lu:lamp", feedback: "error" }), _jsx(Tile, { label: "Unavailable", icon: "lu:lamp", status: "unavailable" }), _jsx(Tile, { label: "Not found", icon: "lu:lamp", status: "missing" })] }) }), _jsx(ComponentDoc, { title: "Icon", components: ['Icon'], description: "A plain prefixed string, no import: `lu:` is Lucide, `tb:` is Tabler outline. It takes the surrounding text color and scales with `size` (default 24px).", children: _jsxs(Flex, { direction: "column", gap: 4, children: [_jsxs(Flex, { align: "center", gap: 4, children: [_jsx(Icon, { name: "lu:lightbulb" }), _jsx(Icon, { name: "lu:thermometer", size: 16 }), _jsx(Icon, { name: "lu:sofa", size: 32 }), _jsx(Icon, { name: "tb:vacuum-cleaner" }), _jsx(Icon, { name: "tb:car-fan", size: 16 })] }), _jsxs(Flex, { align: "center", gap: 4, css: { flexWrap: 'wrap' }, children: [_jsx(Typography, { as: "span", variant: "body", color: "textMuted", children: "Find an icon:" }), ICON_PACKS.map((pack) => (_jsx(Typography, { as: "span", variant: "body", children: _jsxs("a", { css: ({ palette }) => ({ color: palette.accent, textUnderlineOffset: 3 }), href: pack.href, target: "_blank", rel: "noreferrer", children: ["Search ", pack.name, " icons (", _jsxs("span", { css: codeStyles, children: [pack.prefix, ":"] }), ")"] }) }, pack.prefix)))] })] }) }), _jsx(ComponentDoc, { title: "Energy Chart", components: ['EnergyChart'], description: "A power section for a drawer, which tiles pass through `energy`: a live power reading, usage tiles and a sparkline. Expanded in a drawer it becomes the full chart with a range switcher.", children: _jsx(EnergyChart, { power: "ha:sensor.heater_power", energy: "ha:sensor.heater_energy", usage: heaterUsage, seriesByRange: heaterSeries }) }), _jsx(ComponentDoc, { title: "History Section", components: ['HistorySection'], description: "Recent activity for a drawer, which tiles pass through `history`: who or what changed the entity, and when. An empty list renders nothing.", children: _jsx(HistorySection, { entries: lampHistory }) }), _jsx(ComponentDoc, { title: "Light Tile", components: ['LightTile'], description: "Tap to toggle, hold to open its detail drawer. Dimmable lights drag to set brightness; color-capable lights add a palette button that opens swatches in the card (white temperatures by default, overridable with `colors`), and the card's icon shows the light's current color. The drawer has the full temperature and hue bars.", children: _jsxs(Grid, { children: [_jsx(LightTile, { entity: "ha:light.plain_on", energy: lampEnergy, history: lampHistory }), _jsx(LightTile, { entity: "ha:light.plain_off", history: stairsHistory }), _jsx(LightTile, { entity: "ha:light.dimmable", icon: "lu:sparkles", energy: ledEnergy, history: ledHistory }), _jsx(LightTile, { entity: "ha:light.color", icon: "lu:lamp-desk", history: nightLampHistory }), _jsx(LightTile, { entity: "ha:light.cct", icon: "lu:lamp-desk" }), _jsx(LightTile, { entity: "ha:light.unavailable" }), _jsx(LightTile, { entity: "ha:light.missing" })] }) }), _jsx(ComponentDoc, { title: "Climate Tile", components: ['ClimateTile'], description: "A heater/thermostat tile: a mode button that opens mode swatches in the card (like light colors), plus a target-temperature stepper. Hold for the drawer: modes, a target bar with fine +/- (hold to repeat), presets, energy and history.", children: _jsxs(Grid, { columns: 1, children: [_jsx(ClimateTile, { entity: "ha:climate.heater", energy: heaterEnergy, history: heaterHistory }), _jsx(ClimateTile, { entity: "ha:climate.off", energy: thermostatEnergy, history: heaterHistory }), _jsx(ClimateTile, { entity: "ha:climate.unavailable" })] }) }), _jsx(ComponentDoc, { title: "Sensor Readout", components: ['SensorReadout'], description: "An inline value with icon and unit, defaulting its icon by device class. Readings outside a safe range get a warning (humidity defaults to 30\u201360 %; override with `safeRange`). Pass `history` to make it tappable: the drawer charts it with min/max for today, this week and this month, and a custom date and time range when expanded.", children: _jsxs(Grid, { columns: 3, children: [_jsx(SensorReadout, { entity: "ha:sensor.temperature", history: temperatureHistory }), _jsx(SensorReadout, { entity: "ha:sensor.humidity", history: humidityHistory }), _jsx(SensorReadout, { entity: "ha:sensor.bedroom_humidity", history: bedroomHumidityHistory }), _jsx(SensorReadout, { entity: "ha:sensor.office_humidity", history: officeHumidityHistory }), _jsx(SensorReadout, { entity: "ha:sensor.unavailable" }), _jsx(SensorReadout, { entity: "ha:sensor.unknown" })] }) }), _jsx(ComponentDoc, { title: "Scene Button & Action Button", components: ['SceneButton', 'ActionButton'], description: "A scene is just an action entity. An action button triggers an action (or flips a switch) and shows pending / done / error feedback after a press; `onPress` runs your own logic instead.", children: _jsxs(Grid, { columns: 3, children: [_jsx(SceneButton, { entity: "ha:scene.tv_time" }), _jsx(ActionButton, { label: "Shower", icon: "tb:bath", entity: "ha:script.shower" }), _jsx(ActionButton, { label: "Always Fails", onPress: () => Promise.reject(new Error('That went wrong')) })] }) }), _jsx(ComponentDoc, { title: "Media Player Bar", components: ['MediaPlayerBar'], description: "Track info (with a small shuffle toggle by the title) and the time beside it, then volume, browse, previous, play/pause and next (the artwork opens the browser too), with a thin progress line along the bottom while something plays. The browse button opens the player's own library in the drawer; pass `browse` content to replace it, or `false` for no button. The volume button opens a volume slider in the bar (with a mute swatch, like the light colors and climate modes). Shows album art, or a note glyph when there is none.", children: _jsxs(Flex, { direction: "column", gap: 3, children: [_jsx(MediaPlayerBar, { entity: "ha:media_player.living_room" }), _jsx(MediaPlayerBar, { entity: "ha:media_player.off" })] }) }), _jsx(ComponentDoc, { title: "Media Player Column", components: ['MediaPlayerColumn'], description: "The player as an upright card for a narrow column beside a dashboard: the artwork in a ring that shows how far along playback is (drag around it to seek), title, transport, and a volume bar that is always visible. The browse button opens the library in the drawer.", children: _jsx(Flex, { width: 320, children: _jsx(MediaPlayerColumn, { entity: "ha:media_player.living_room" }) }) }), _jsx(ComponentDoc, { title: "Media Player Page", components: ['MediaPlayerPage'], description: "The player as a whole page: the player centered, and its library below it, so songs are picked right there instead of in a drawer. The expanded drawer is this same layout.", children: _jsx(Flex, { direction: "column", children: _jsx(MediaPlayerPage, { entity: "ha:media_player.living_room" }) }) }), _jsx(ComponentDoc, { title: "Media Browser", components: ['MediaBrowser'], description: "A player's own library in the app's style: tap a folder to open it, a track or station to play it, or the play button on an album, playlist or artist for all of it. The search box appears when the library can be searched. The `theater` layout (second demo) is one row of large cards that scrolls sideways, for a wide space; `list` is the compact default.", children: _jsxs(Flex, { direction: "column", gap: 6, children: [_jsx(Flex, { direction: "column", maxHeight: 420, overflow: "auto", children: _jsx(MediaBrowser, { entity: "ha:media_player.living_room" }) }), _jsx(MediaBrowser, { entity: "ha:media_player.living_room", layout: "theater" })] }) }), _jsx(ComponentDoc, { title: "Navigation", components: ['NavRail', 'NavDock', 'Page'], description: "Routes within one dashboard. A dashboard includes one itself, usually in its layout route: NavRail is fixed to the left and NavDock floats at the bottom, and both reserve the space they take in the Page around them, which pads so content never sits under them.", children: _jsxs(Flex, { direction: "column", gap: 5, children: [_jsx(SubPreview, { label: "NavRail, in a Page", height: 240, children: _jsxs(Page, { height: "100%", children: [_jsx(NavRail, { base: "/gallery", items: NAV_ITEMS }), _jsx(Typography, { as: "p", variant: "body", color: "textMuted", children: "Page content, padded clear of the rail." })] }) }), _jsx(SubPreview, { label: "NavDock", height: 140, children: _jsx(NavDock, { base: "/gallery", items: NAV_ITEMS }) })] }) }), _jsx(ComponentDoc, { title: "Top Bar", components: ['TopBar'], description: "Page chrome above a dashboard's content: a title (a dropdown to switch dashboards, once there's more than one to switch to), scene shortcuts, weather, presence, and a clock.", children: _jsx(TopBar, { title: "Living Room", dashboards: [
351
+ { id: 'living-room', title: 'Living Room', icon: 'lu:sofa' },
352
+ { id: 'bedroom', title: 'Bedroom', icon: 'lu:bed' },
353
+ { id: 'bathroom', title: 'Bathroom', icon: 'tb:bath' },
354
+ ], scenes: [{ entity: 'ha:scene.tv_time', icon: 'lu:tv' }], weather: "ha:sensor.temperature", people: ['ha:person.dan', 'ha:person.alex'] }) }), _jsx(ComponentDoc, { title: "Presence Stack", components: ['PresenceStack'], description: "Overlapping avatar circles for a handful of person entities (the Top Bar's presence), each with a picture or a colored initial.", children: _jsx(PresenceStack, { entities: ['ha:person.dan', 'ha:person.alex'] }) }), _jsx(ComponentDoc, { title: "System Status", components: ['SystemStatus'], description: "The dot at the top bar's right edge. Green when the runtime and every integration are up, amber while something is connecting, red when something is down; click it for per-system detail. Shown here open, in each state.", children: _jsxs(Flex, { gap: 6, px: 6, align: "flex-start", justify: "space-around", minHeight: 32, children: [_jsx(SystemStatus, { defaultOpen: true, link: "open", statuses: { ha: 'connected', ma: 'connected' } }), _jsx(SystemStatus, { defaultOpen: true, link: "open", statuses: { ha: 'connected', ma: 'connecting' } }), _jsx(SystemStatus, { defaultOpen: true, link: "open", statuses: { ha: 'error', ma: 'disconnected' } })] }) }), _jsx(ComponentDoc, { title: "Hashsome Provider", description: "The app provider: connects to the runtime, installs the theme, font and density globally, and renders the shared detail drawer. Everything on this page runs inside one \u2014 use the toggle above to flip its theme.", components: ['HashsomeProvider'], children: _jsx(Typography, { as: "span", variant: "body", color: "textMuted", children: `theme="${mode}" · density="${density}"` }) })] }) }) }));
355
+ }
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gallery.js","sourceRoot":"","sources":["../../src/gallery/gallery.tsx"],"names":[],"mappings":";AAAA,sCAAsC;AACtC,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAkB,MAAM,OAAO,CAAC;AACrE,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA+B,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA8B,CAAC;AAC3D,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA4B,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA+B,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,iCAAkC,CAAC;AAClE,OAAO,EAAE,iBAAiB,EAAE,MAAM,oCAAqC,CAAC;AACxE,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAmC,CAAC;AACpE,OAAO,EAAE,OAAO,EAAE,MAAM,yBAA0B,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,MAAM,yBAA0B,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAoB,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA8B,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,+BAAgC,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,wBAAyB,CAAC;AAC9E,OAAO,EAAE,IAAI,EAAE,MAAM,YAAa,CAAC;AACnC,OAAO,EACL,WAAW,GAIZ,MAAM,2BAA4B,CAAC;AACpC,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAoB,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA+B,CAAC;AAC/D,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA2B,CAAC;AACvD,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAoB,CAAC;AAE1C,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAiB,CAAC;AACnD,OAAO,EAAE,wBAAwB,EAAE,MAAM,eAAe,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAElD,MAAM,UAAU,GAAG;IACjB,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,2BAA2B,EAAE;IACnE,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,yBAAyB,EAAE;CAClE,CAAC;AAEF,MAAM,SAAS,GAAG;IAChB,EAAE,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,UAAmB,EAAE;IACpD,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,cAAuB,EAAE;IAChE,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,gBAAyB,EAAE;IACpE,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,UAAmB,EAAE;CAC3D,CAAC;AAEF,MAAM,UAAU,GAAG;IACjB,UAAU,EAAE,2CAA2C;IACvD,YAAY,EAAE,UAAU;CAChB,CAAC;AAEX;8EAC8E;AAC9E,SAAS,KAAK,CAAC,EAAE,QAAQ,EAA2B;IAClD,OAAO,CACL,KAAC,IAAI,IACH,SAAS,EAAC,QAAQ,EAClB,GAAG,EAAE,CAAC,EACN,UAAU,EAAC,IAAI,EACf,KAAK,EAAC,MAAM,EACZ,MAAM,EAAC,MAAM,EACb,CAAC,EAAE,CAAC,EACJ,SAAS,EAAE,EAAE,YAEZ,QAAQ,GACJ,CACR,CAAC;AACJ,CAAC;AAED;gEACgE;AAChE;gGACgG;AAChG,SAAS,UAAU,CAAC,EAAE,IAAI,EAAoB;IAC5C,MAAM,KAAK,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;IACpC,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,CACL,mBACE,GAAG,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;YACrB,SAAS,EAAE,EAAE;YACb,WAAW,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE;YACpD,SAAS,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,EAAE,cAAc,EAAE,UAAU,EAAE;YACtE,YAAY,EAAE;gBACZ,OAAO,EAAE,gBAAgB;gBACzB,SAAS,EAAE,MAAM;gBACjB,aAAa,EAAE,KAAK;gBACpB,YAAY,EAAE,aAAa,OAAO,CAAC,MAAM,EAAE;aAC5C;SACF,CAAC,aAEF,4BACE,MAAC,UAAU,IAAC,EAAE,EAAC,MAAM,EAAC,OAAO,EAAC,OAAO,EAAC,KAAK,EAAC,WAAW,8BAC5C,IAAI,QAAI,KAAK,CAAC,KAAK,CAAC,MAAM,SACxB,GACL,EACV,4BACE,0BACE,uBACG,CAAC,MAAM,EAAE,MAAM,EAAE,aAAa,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAChD,aAAkB,KAAK,EAAC,KAAK,YAC3B,KAAC,UAAU,IAAC,EAAE,EAAC,MAAM,EAAC,OAAO,EAAC,SAAS,EAAC,SAAS,QAAC,KAAK,EAAC,WAAW,YAChE,OAAO,GACG,IAHN,OAAO,CAIX,CACN,CAAC,GACC,GACC,EACR,0BACG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CACzB,yBACE,uBACE,MAAC,UAAU,IAAC,EAAE,EAAC,MAAM,EAAC,OAAO,EAAC,OAAO,EAAC,GAAG,EAAE,UAAU,aAClD,IAAI,CAAC,IAAI,EACT,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,IACf,GACV,EACL,uBACE,KAAC,UAAU,IAAC,EAAE,EAAC,MAAM,EAAC,OAAO,EAAC,WAAW,EAAC,KAAK,EAAC,WAAW,EAAC,GAAG,EAAE,UAAU,YACxE,IAAI,CAAC,IAAI,GACC,GACV,EACL,uBACE,KAAC,UAAU,IAAC,EAAE,EAAC,MAAM,EAAC,OAAO,EAAC,MAAM,EAAC,KAAK,EAAC,WAAW,YACnD,IAAI,CAAC,GAAG,GACE,GACV,KAhBE,IAAI,CAAC,IAAI,CAiBb,CACN,CAAC,GACI,IACF,IACA,CACX,CAAC;AACJ,CAAC;AAED,SAAS,YAAY,CAAC,EACpB,KAAK,EACL,WAAW,EACX,UAAU,EACV,QAAQ,GAQT;IACC,OAAO,CACL,mBAAS,GAAG,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,aAChC,MAAC,IAAI,IAAC,SAAS,EAAC,QAAQ,EAAC,GAAG,EAAE,CAAC,EAAE,QAAQ,EAAC,MAAM,EAAC,EAAE,EAAE,CAAC,aACpD,KAAC,UAAU,IAAC,EAAE,EAAC,IAAI,EAAC,OAAO,EAAC,SAAS,YAClC,KAAK,GACK,EACb,KAAC,UAAU,IAAC,EAAE,EAAC,GAAG,EAAC,OAAO,EAAC,MAAM,EAAC,KAAK,EAAC,WAAW,YAChD,WAAW,GACD,IACR,EACP,KAAC,KAAK,cAAE,QAAQ,GAAS,EACxB,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CACxB,KAAC,UAAU,IAAY,IAAI,EAAE,IAAI,IAAhB,IAAI,CAAgB,CACtC,CAAC,IACM,CACX,CAAC;AACJ,CAAC;AAED,+FAA+F;AAC/F,SAAS,YAAY;IACnB,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;IACtC,OAAO,CACL,KAAC,IAAI,IACH,KAAK,EAAC,WAAW,EACjB,IAAI,EAAC,QAAQ,EACb,MAAM,QACN,IAAI,EAAE,IAAI,EACV,YAAY,EAAE,OAAO,EACrB,SAAS,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,GAAG,CAAC,GAAG,GACvC,CACH,CAAC;AACJ,CAAC;AAED;;;wFAGwF;AACxF,SAAS,UAAU,CAAC,EAClB,KAAK,EACL,MAAM,EACN,QAAQ,GAKT;IACC,OAAO,CACL,MAAC,IAAI,IAAC,SAAS,EAAC,QAAQ,EAAC,GAAG,EAAE,CAAC,aAC7B,KAAC,UAAU,IAAC,EAAE,EAAC,MAAM,EAAC,OAAO,EAAC,SAAS,EAAC,SAAS,QAAC,KAAK,EAAC,WAAW,YAChE,KAAK,GACK,EACb,KAAC,IAAI,IACH,QAAQ,EAAC,UAAU,EACnB,QAAQ,EAAC,QAAQ,EACjB,MAAM,EAAC,KAAK,EACZ,MAAM,QACN,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,EAAE,SAAS,EAAE,eAAe,EAAE,YAElC,QAAQ,GACJ,IACF,CACR,CAAC;AACJ,CAAC;AAED,iGAAiG;AACjG,mFAAmF;AACnF,MAAM,WAAW,GAAmB;IAClC;QACE,EAAE,EAAE,GAAG;QACP,OAAO,EAAE,WAAW;QACpB,KAAK,EAAE,KAAK;QACZ,SAAS,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC,WAAW,EAAE;KAC3D;IACD;QACE,EAAE,EAAE,GAAG;QACP,OAAO,EAAE,YAAY;QACrB,KAAK,EAAE,oBAAoB;QAC3B,SAAS,EAAE,YAAY;QACvB,SAAS,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,MAAM,CAAC,CAAC,WAAW,EAAE;KAC5D;IACD;QACE,EAAE,EAAE,GAAG;QACP,OAAO,EAAE,WAAW;QACpB,KAAK,EAAE,KAAK;QACZ,SAAS,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,CAAC,WAAW,EAAE;KAChE;CACF,CAAC;AAEF,MAAM,GAAG,GAAG,CAAC,OAAe,EAAE,EAAE,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,GAAG,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC;AAEvF,MAAM,aAAa,GAAmB;IACpC;QACE,EAAE,EAAE,GAAG;QACP,OAAO,EAAE,YAAY;QACrB,KAAK,EAAE,oBAAoB;QAC3B,SAAS,EAAE,YAAY;QACvB,SAAS,EAAE,GAAG,CAAC,EAAE,CAAC;KACnB;IACD,EAAE,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE;IACxE,EAAE,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE;CAC1E,CAAC;AAEF,MAAM,UAAU,GAAmB;IACjC,EAAE,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,uBAAuB,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE;IAC/E,EAAE,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE;IACnE;QACE,EAAE,EAAE,GAAG;QACP,OAAO,EAAE,YAAY;QACrB,KAAK,EAAE,4BAA4B;QACnC,SAAS,EAAE,YAAY;QACvB,SAAS,EAAE,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;KACvB;CACF,CAAC;AAEF,MAAM,aAAa,GAAmB;IACpC,EAAE,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,qBAAqB,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE;IAC7E;QACE,EAAE,EAAE,GAAG;QACP,OAAO,EAAE,kBAAkB;QAC3B,KAAK,EAAE,4BAA4B;QACnC,SAAS,EAAE,YAAY;QACvB,SAAS,EAAE,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;KACvB;IACD,EAAE,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,iBAAiB,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE;CAChF,CAAC;AAEF,MAAM,gBAAgB,GAAmB;IACvC;QACE,EAAE,EAAE,GAAG;QACP,OAAO,EAAE,YAAY;QACrB,KAAK,EAAE,oBAAoB;QAC3B,SAAS,EAAE,YAAY;QACvB,SAAS,EAAE,GAAG,CAAC,EAAE,CAAC;KACnB;IACD,EAAE,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,eAAe,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE;IACxE,EAAE,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE;CACzE,CAAC;AAEF,6FAA6F;AAC7F,kGAAkG;AAClG,SAAS,cAAc,CAAC,MAAc,EAAE,UAAkB,EAAE,IAAY,EAAE,SAAiB;IACzF,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACvB,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;QAC/C,SAAS,EAAE,IAAI,IAAI,CAAC,GAAG,GAAG,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,WAAW,EAAE;QACtE,KAAK,EAAE,IAAI,CAAC,GAAG,CACb,CAAC,EACD,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,SAAS,GAAG,IAAI,CAAC,CACpF;KACF,CAAC,CAAC,CAAC;AACN,CAAC;AAED,MAAM,iBAAiB,GAAiD;IACtE,IAAI,EAAE,cAAc,CAAC,EAAE,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC;IAC1C,IAAI,EAAE,cAAc,CAAC,EAAE,EAAE,EAAE,GAAG,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC;IAC3C,IAAI,EAAE,cAAc,CAAC,EAAE,EAAE,CAAC,GAAG,EAAE,GAAG,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC;IAC/C,IAAI,EAAE,cAAc,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC;CACjD,CAAC;AAEF,oGAAoG;AACpG,MAAM,SAAS,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC;AAEpF;qFACqF;AACrF,SAAS,iBAAiB,CAAC,EAA+C;IACxE,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;IAEtE,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,MAAM,EAAE,GAAG,WAAW,CAAC,GAAG,EAAE;YAC1B,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YACjF,EAAE,CAAC,MAAM,CAAC,mBAAmB,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;YACzE,UAAU,CAAC,CAAC,MAAM,EAAE,EAAE,CACpB,CAAC,GAAG,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CACvE,CAAC;QACJ,CAAC,EAAE,IAAI,CAAC,CAAC;QAET,OAAO,GAAG,EAAE,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;IACjC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAET,OAAO,OAAO,CACZ,GAAG,EAAE,CAAC,CAAC;QACL,KAAK,EAAE,sBAA+B;QACtC,MAAM,EAAE,uBAAgC;QACxC,KAAK,EAAE,SAAS;QAChB,aAAa,EAAE,EAAE,GAAG,iBAAiB,EAAE,IAAI,EAAE,OAAO,EAAE;KACvD,CAAC,EACF,CAAC,OAAO,CAAC,CACV,CAAC;AACJ,CAAC;AAED;;8DAE8D;AAC9D,SAAS,gBAAgB,CACvB,EAA+C,EAC/C,MAOC;IAED,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,CAAC;IAClE,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;IAE3D,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,IAAI,GAAG,GAAG,EAAE;YAChB,MAAM,MAAM,GAAG,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;YACpC,MAAM,GAAG,GAAG,MAAM,EAAE,IAAI,KAAK,SAAS,IAAI,MAAM,CAAC,IAAI,KAAK,KAAK,CAAC;YAChE,MAAM,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,CAAC,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC;YAC3E,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;YAC3D,UAAU,CAAC,CAAC,MAAM,EAAE,EAAE,CACpB,CAAC,GAAG,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CACvE,CAAC;QACJ,CAAC,CAAC;QAEF,MAAM,WAAW,GAAG,EAAE,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QAC/C,MAAM,EAAE,GAAG,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QACnC,OAAO,GAAG,EAAE;YACV,WAAW,EAAE,CAAC;YACd,aAAa,CAAC,EAAE,CAAC,CAAC;QACpB,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC;IAElC,OAAO,OAAO,CACZ,GAAG,EAAE,CAAC,CAAC;QACL,KAAK,EAAE,MAAM,KAAK,EAAW;QAC7B,MAAM,EAAE,MAAM,MAAM,EAAW;QAC/B,KAAK;QACL,aAAa,EAAE,EAAE,GAAG,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE;KAC5C,CAAC,EACF,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,CACxC,CAAC;AACJ,CAAC;AAED,MAAM,YAAY,GAAiD;IACjE,IAAI,EAAE,cAAc,CAAC,EAAE,EAAE,CAAC,GAAG,MAAM,EAAE,IAAI,EAAE,GAAG,CAAC;IAC/C,IAAI,EAAE,cAAc,CAAC,EAAE,EAAE,EAAE,GAAG,MAAM,EAAE,GAAG,EAAE,GAAG,CAAC;IAC/C,IAAI,EAAE,cAAc,CAAC,EAAE,EAAE,CAAC,GAAG,EAAE,GAAG,MAAM,EAAE,GAAG,EAAE,GAAG,CAAC;IACnD,IAAI,EAAE,cAAc,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,MAAM,EAAE,GAAG,EAAE,GAAG,CAAC;CACrD,CAAC;AAEF,MAAM,gBAAgB,GAAiD;IACrE,IAAI,EAAE,cAAc,CAAC,EAAE,EAAE,CAAC,GAAG,MAAM,EAAE,EAAE,EAAE,EAAE,CAAC;IAC5C,IAAI,EAAE,cAAc,CAAC,EAAE,EAAE,EAAE,GAAG,MAAM,EAAE,GAAG,EAAE,GAAG,CAAC;IAC/C,IAAI,EAAE,cAAc,CAAC,EAAE,EAAE,CAAC,GAAG,EAAE,GAAG,MAAM,EAAE,GAAG,EAAE,GAAG,CAAC;IACnD,IAAI,EAAE,cAAc,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,MAAM,EAAE,GAAG,EAAE,GAAG,CAAC;CACrD,CAAC;AAEF,MAAM,WAAW,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC;AACnF,MAAM,eAAe,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;AAEzF,mGAAmG;AACnG,+FAA+F;AAC/F,SAAS,qBAAqB,CAC5B,IAAY,EACZ,KAAa,EACb,KAAa;IAEb,MAAM,IAAI,GAAG,EAAE,GAAG,MAAM,CAAC;IACzB,MAAM,KAAK,GAAG,EAAE,GAAG,EAAE,CAAC;IACtB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACvB,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QAC5C,MAAM,CAAC,GAAG,GAAG,GAAG,CAAC,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC;QACvC,MAAM,KAAK,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC,GAAG,EAAE,CAAC;QACnC,MAAM,IAAI,GAAG,CAAC,GAAG,UAAU,CAAC;QAC5B,MAAM,KAAK,GACT,IAAI;YACJ,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC;YAC5C,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC;YAC5B,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;QAE1B,OAAO,EAAE,SAAS,EAAE,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC;IACtF,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,kBAAkB,GAAG,qBAAqB,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;AACjE,MAAM,eAAe,GAAG,qBAAqB,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;AACzD,MAAM,sBAAsB,GAAG,qBAAqB,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAC/D,MAAM,qBAAqB,GAAG,qBAAqB,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAE9D,MAAM,aAAa,GAAG,EAAE,CAAC;AAEzB;2FAC2F;AAC3F,SAAS,yBAAyB,CAAC,EAA+C;IAChF,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,GAAG,EAAE,CAAC,cAAc,CAAC,EAAE,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAEnF,SAAS,CACP,GAAG,EAAE,CACH,EAAE,CAAC,SAAS,CAAC,gBAAgB,EAAE,CAAC,KAAK,EAAE,EAAE;QACvC,MAAM,EAAE,GAAG,KAAK,EAAE,IAAI,KAAK,OAAO,IAAI,KAAK,CAAC,EAAE,CAAC;QAC/C,MAAM,KAAK,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,UAAU,IAAI,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3E,EAAE,CAAC,MAAM,CAAC,kBAAkB,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;QACxE,UAAU,CAAC,CAAC,MAAM,EAAE,EAAE,CACpB,CAAC,GAAG,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CACvE,CAAC;IACJ,CAAC,CAAC,EACJ,CAAC,EAAE,CAAC,CACL,CAAC;IAEF,OAAO,OAAO,CACZ,GAAG,EAAE,CAAC,CAAC;QACL,KAAK,EAAE,qBAA8B;QACrC,MAAM,EAAE,sBAA+B;QACvC,KAAK,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE;QACzE,aAAa,EAAE,EAAE,GAAG,iBAAiB,EAAE,IAAI,EAAE,OAAO,EAAE;KACvD,CAAC,EACF,CAAC,OAAO,CAAC,CACV,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,OAAO,CAAC,EAAE,OAAO,GAAG,aAAa,EAA2C;IAC1F,MAAM,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,wBAAwB,EAAE,EAAE,EAAE,CAAC,CAAC;IACzD,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,IAAI,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAC1D,MAAM,UAAU,GAAG,iBAAiB,CAAC,EAAE,CAAC,CAAC;IACzC,MAAM,SAAS,GAAG,yBAAyB,CAAC,EAAE,CAAC,CAAC;IAChD,MAAM,YAAY,GAAG,gBAAgB,CAAC,EAAE,EAAE;QACxC,MAAM,EAAE,gBAAgB;QACxB,KAAK,EAAE,qBAAqB;QAC5B,MAAM,EAAE,sBAAsB;QAC9B,QAAQ,EAAE,IAAI;QACd,MAAM,EAAE,YAAY;QACpB,KAAK,EAAE,WAAW;KACnB,CAAC,CAAC;IAEH,MAAM,gBAAgB,GAAG,gBAAgB,CAAC,EAAE,EAAE;QAC5C,MAAM,EAAE,aAAa;QACrB,KAAK,EAAE,yBAAyB;QAChC,MAAM,EAAE,0BAA0B;QAClC,QAAQ,EAAE,IAAI;QACd,MAAM,EAAE,gBAAgB;QACxB,KAAK,EAAE,eAAe;KACvB,CAAC,CAAC;IAEH,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAmB,MAAM,CAAC,CAAC;IAC3D,OAAO,CACL,KAAC,gBAAgB,IAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,YAC7D,cACE,GAAG,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;gBACrB,UAAU,EAAE,OAAO,CAAC,aAAa;gBACjC,KAAK,EAAE,OAAO,CAAC,IAAI;gBACnB,SAAS,EAAE,MAAM;gBACjB,OAAO,EAAE,gBAAgB;aAC1B,CAAC,YAEF,eAAK,GAAG,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,aAC3C,kBACE,GAAG,EAAE;4BACH,OAAO,EAAE,MAAM;4BACf,UAAU,EAAE,YAAY;4BACxB,cAAc,EAAE,eAAe;4BAC/B,GAAG,EAAE,EAAE;4BACP,QAAQ,EAAE,MAAM;4BAChB,YAAY,EAAE,EAAE;yBACjB,aAED,MAAC,IAAI,IAAC,SAAS,EAAC,QAAQ,EAAC,GAAG,EAAE,GAAG,EAAE,QAAQ,EAAC,MAAM,aAChD,KAAC,UAAU,IAAC,EAAE,EAAC,IAAI,EAAC,OAAO,EAAC,MAAM,+CAErB,EACb,KAAC,UAAU,IAAC,EAAE,EAAC,GAAG,EAAC,OAAO,EAAC,MAAM,EAAC,KAAK,EAAC,WAAW,6KAGtC,IACR,EACP,kBACE,IAAI,EAAC,QAAQ,EACb,GAAG,EAAE,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC;oCAC7B,QAAQ,EAAE,UAAU;oCACpB,OAAO,EAAE,aAAa;oCACtB,UAAU,EAAE,QAAQ;oCACpB,cAAc,EAAE,eAAe;oCAC/B,UAAU,EAAE,CAAC;oCACb,SAAS,EAAE,YAAY;oCACvB,KAAK,EAAE,EAAE;oCACT,MAAM,EAAE,EAAE;oCACV,MAAM,EAAE,CAAC;oCACT,OAAO,EAAE,OAAO;oCAChB,YAAY,EAAE,MAAM,CAAC,IAAI;oCACzB,MAAM,EAAE,aAAa,OAAO,CAAC,MAAM,EAAE;oCACrC,UAAU,EAAE,OAAO,CAAC,MAAM;oCAC1B,IAAI,EAAE,SAAS;oCACf,UAAU,EAAE,QAAQ;oCACpB,MAAM,EAAE,SAAS;oCACjB,UAAU,EAAE,oBAAoB;oCAChC,SAAS,EAAE,EAAE,WAAW,EAAE,OAAO,CAAC,SAAS,EAAE;oCAC7C,OAAO,EAAE;wCACP,QAAQ,EAAE,UAAU;wCACpB,MAAM,EAAE,CAAC;wCACT,KAAK,EAAE,OAAO,CAAC,SAAS;wCACxB,UAAU,EAAE,YAAY;qCACzB;oCACD,mFAAmF;oCACnF,gFAAgF;oCAChF,oFAAoF,EAClF,EAAE,KAAK,EAAE,OAAO,CAAC,IAAI,EAAE;iCAC1B,CAAC,EACF,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,gBACpD,aAAa,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,QAAQ,kBACrD,IAAI,KAAK,MAAM,aAE7B,eACE,GAAG,EAAE,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC;4CAC7B,QAAQ,EAAE,UAAU;4CACpB,gFAAgF;4CAChF,sEAAsE;4CACtE,GAAG,EAAE,KAAK;4CACV,IAAI,EAAE,CAAC;4CACP,KAAK,EAAE,EAAE;4CACT,MAAM,EAAE,EAAE;4CACV,YAAY,EAAE,MAAM,CAAC,IAAI;4CACzB,UAAU,EAAE,OAAO,CAAC,aAAa;4CACjC,SAAS,EAAE,+BAA+B;4CAC1C,SAAS,EAAE,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC,kBAAkB;4CACzE,UAAU,EAAE,qBAAqB;yCAClC,CAAC,GACF,EACF,KAAC,IAAI,IAAC,IAAI,EAAC,QAAQ,EAAC,IAAI,EAAE,EAAE,GAAI,EAChC,KAAC,IAAI,IAAC,IAAI,EAAC,SAAS,EAAC,IAAI,EAAE,EAAE,GAAI,IAC1B,IACF,EAET,KAAC,YAAY,IACX,KAAK,EAAC,MAAM,EACZ,UAAU,EAAE,CAAC,MAAM,CAAC,EACpB,WAAW,EAAC,4GAA4G,YAExH,MAAC,IAAI,IAAC,SAAS,EAAC,QAAQ,EAAC,GAAG,EAAE,CAAC,aAC7B,MAAC,IAAI,IAAC,OAAO,EAAE,CAAC,aACd,KAAC,IAAI,IAAC,KAAK,EAAC,KAAK,EAAC,IAAI,EAAC,gBAAgB,EAAC,SAAS,EAAC,aAAa,GAAG,EAClE,KAAC,IAAI,IAAC,KAAK,EAAC,SAAS,EAAC,IAAI,EAAC,gBAAgB,EAAC,SAAS,EAAC,aAAa,GAAG,IACjE,EACP,MAAC,IAAI,IAAC,OAAO,EAAE,CAAC,aACd,KAAC,IAAI,IAAC,KAAK,EAAC,OAAO,EAAC,IAAI,EAAC,gBAAgB,EAAC,SAAS,EAAC,aAAa,GAAG,EACpE,KAAC,IAAI,IAAC,KAAK,EAAC,SAAS,EAAC,IAAI,EAAC,gBAAgB,EAAC,SAAS,EAAC,aAAa,GAAG,EACtE,KAAC,IAAI,IAAC,KAAK,EAAC,MAAM,EAAC,IAAI,EAAC,gBAAgB,EAAC,SAAS,EAAC,cAAc,GAAG,IAC/D,IACF,GACM,EAEf,KAAC,YAAY,IACX,KAAK,EAAC,aAAa,EACnB,UAAU,EAAE,CAAC,YAAY,CAAC,EAC1B,WAAW,EAAC,oMAAoM,YAEhN,MAAC,IAAI,IAAC,SAAS,EAAC,QAAQ,EAAC,GAAG,EAAE,CAAC,aAC7B,KAAC,UAAU,IAAC,KAAK,EAAC,SAAS,EAAC,IAAI,EAAC,qBAAqB,GAAG,EACzD,KAAC,UAAU,IACT,KAAK,EAAC,OAAO,EACb,IAAI,EAAC,UAAU,EACf,QAAQ,EACN,8BACE,KAAC,aAAa,IAAC,MAAM,EAAC,uBAAuB,GAAG,EAChD,KAAC,aAAa,IAAC,MAAM,EAAC,oBAAoB,GAAG,IAC5C,GAEL,IACG,GACM,EAEf,KAAC,YAAY,IACX,KAAK,EAAC,MAAM,EACZ,UAAU,EAAE,CAAC,MAAM,CAAC,EACpB,WAAW,EAAC,mPAAmP,YAE/P,MAAC,IAAI,eACH,KAAC,IAAI,IAAC,KAAK,EAAC,OAAO,EAAC,IAAI,EAAC,SAAS,EAAC,SAAS,EAAC,KAAK,GAAG,EACrD,KAAC,IAAI,IAAC,KAAK,EAAC,QAAQ,EAAC,IAAI,EAAC,SAAS,EAAC,MAAM,SAAG,EAC7C,KAAC,YAAY,KAAG,EAChB,KAAC,IAAI,IACH,KAAK,EAAC,eAAe,EACrB,IAAI,EAAC,QAAQ,EACb,QAAQ,EACN,KAAC,UAAU,IAAC,EAAE,EAAC,MAAM,EAAC,OAAO,EAAC,WAAW,EAAC,KAAK,EAAC,WAAW,yBAE9C,GAEf,EACF,KAAC,IAAI,IAAC,KAAK,EAAC,SAAS,EAAC,IAAI,EAAC,SAAS,EAAC,QAAQ,EAAC,SAAS,GAAG,EAC1D,KAAC,IAAI,IAAC,KAAK,EAAC,OAAO,EAAC,IAAI,EAAC,SAAS,EAAC,QAAQ,EAAC,OAAO,GAAG,EACtD,KAAC,IAAI,IAAC,KAAK,EAAC,aAAa,EAAC,IAAI,EAAC,SAAS,EAAC,MAAM,EAAC,aAAa,GAAG,EAChE,KAAC,IAAI,IAAC,KAAK,EAAC,WAAW,EAAC,IAAI,EAAC,SAAS,EAAC,MAAM,EAAC,SAAS,GAAG,IACrD,GACM,EAEf,KAAC,YAAY,IACX,KAAK,EAAC,MAAM,EACZ,UAAU,EAAE,CAAC,MAAM,CAAC,EACpB,WAAW,EAAC,0JAA0J,YAEtK,MAAC,IAAI,IAAC,SAAS,EAAC,QAAQ,EAAC,GAAG,EAAE,CAAC,aAC7B,MAAC,IAAI,IAAC,KAAK,EAAC,QAAQ,EAAC,GAAG,EAAE,CAAC,aACzB,KAAC,IAAI,IAAC,IAAI,EAAC,cAAc,GAAG,EAC5B,KAAC,IAAI,IAAC,IAAI,EAAC,gBAAgB,EAAC,IAAI,EAAE,EAAE,GAAI,EACxC,KAAC,IAAI,IAAC,IAAI,EAAC,SAAS,EAAC,IAAI,EAAE,EAAE,GAAI,EACjC,KAAC,IAAI,IAAC,IAAI,EAAC,mBAAmB,GAAG,EACjC,KAAC,IAAI,IAAC,IAAI,EAAC,YAAY,EAAC,IAAI,EAAE,EAAE,GAAI,IAC/B,EACP,MAAC,IAAI,IAAC,KAAK,EAAC,QAAQ,EAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,aACpD,KAAC,UAAU,IAAC,EAAE,EAAC,MAAM,EAAC,OAAO,EAAC,MAAM,EAAC,KAAK,EAAC,WAAW,8BAEzC,EACZ,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CACxB,KAAC,UAAU,IAAmB,EAAE,EAAC,MAAM,EAAC,OAAO,EAAC,MAAM,YACpD,aACE,GAAG,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,MAAM,EAAE,mBAAmB,EAAE,CAAC,EAAE,CAAC,EACzE,IAAI,EAAE,IAAI,CAAC,IAAI,EACf,MAAM,EAAC,QAAQ,EACf,GAAG,EAAC,YAAY,wBAER,IAAI,CAAC,IAAI,cAAS,gBAAM,GAAG,EAAE,UAAU,aAAG,IAAI,CAAC,MAAM,SAAS,SACpE,IARW,IAAI,CAAC,MAAM,CASf,CACd,CAAC,IACG,IACF,GACM,EAEf,KAAC,YAAY,IACX,KAAK,EAAC,cAAc,EACpB,UAAU,EAAE,CAAC,aAAa,CAAC,EAC3B,WAAW,EAAC,2LAA2L,YAEvM,KAAC,WAAW,IACV,KAAK,EAAC,wBAAwB,EAC9B,MAAM,EAAC,yBAAyB,EAChC,KAAK,EAAE,WAAW,EAClB,aAAa,EAAE,YAAY,GAC3B,GACW,EAEf,KAAC,YAAY,IACX,KAAK,EAAC,iBAAiB,EACvB,UAAU,EAAE,CAAC,gBAAgB,CAAC,EAC9B,WAAW,EAAC,4IAA4I,YAExJ,KAAC,cAAc,IAAC,OAAO,EAAE,WAAW,GAAI,GAC3B,EAEf,KAAC,YAAY,IACX,KAAK,EAAC,YAAY,EAClB,UAAU,EAAE,CAAC,WAAW,CAAC,EACzB,WAAW,EAAC,qUAAqU,YAEjV,MAAC,IAAI,eACH,KAAC,SAAS,IAAC,MAAM,EAAC,mBAAmB,EAAC,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,WAAW,GAAI,EAClF,KAAC,SAAS,IAAC,MAAM,EAAC,oBAAoB,EAAC,OAAO,EAAE,aAAa,GAAI,EACjE,KAAC,SAAS,IACR,MAAM,EAAC,mBAAmB,EAC1B,IAAI,EAAC,aAAa,EAClB,MAAM,EAAE,SAAS,EACjB,OAAO,EAAE,UAAU,GACnB,EACF,KAAC,SAAS,IAAC,MAAM,EAAC,gBAAgB,EAAC,IAAI,EAAC,cAAc,EAAC,OAAO,EAAE,gBAAgB,GAAI,EACpF,KAAC,SAAS,IAAC,MAAM,EAAC,cAAc,EAAC,IAAI,EAAC,cAAc,GAAG,EACvD,KAAC,SAAS,IAAC,MAAM,EAAC,sBAAsB,GAAG,EAC3C,KAAC,SAAS,IAAC,MAAM,EAAC,kBAAkB,GAAG,IAClC,GACM,EAEf,KAAC,YAAY,IACX,KAAK,EAAC,cAAc,EACpB,UAAU,EAAE,CAAC,aAAa,CAAC,EAC3B,WAAW,EAAC,4OAA4O,YAExP,MAAC,IAAI,IAAC,OAAO,EAAE,CAAC,aACd,KAAC,WAAW,IACV,MAAM,EAAC,mBAAmB,EAC1B,MAAM,EAAE,YAAY,EACpB,OAAO,EAAE,aAAa,GACtB,EACF,KAAC,WAAW,IACV,MAAM,EAAC,gBAAgB,EACvB,MAAM,EAAE,gBAAgB,EACxB,OAAO,EAAE,aAAa,GACtB,EACF,KAAC,WAAW,IAAC,MAAM,EAAC,wBAAwB,GAAG,IAC1C,GACM,EAEf,KAAC,YAAY,IACX,KAAK,EAAC,gBAAgB,EACtB,UAAU,EAAE,CAAC,eAAe,CAAC,EAC7B,WAAW,EAAC,iVAA4U,YAExV,MAAC,IAAI,IAAC,OAAO,EAAE,CAAC,aACd,KAAC,aAAa,IAAC,MAAM,EAAC,uBAAuB,EAAC,OAAO,EAAE,kBAAkB,GAAI,EAC7E,KAAC,aAAa,IAAC,MAAM,EAAC,oBAAoB,EAAC,OAAO,EAAE,eAAe,GAAI,EACvE,KAAC,aAAa,IAAC,MAAM,EAAC,4BAA4B,EAAC,OAAO,EAAE,sBAAsB,GAAI,EACtF,KAAC,aAAa,IAAC,MAAM,EAAC,2BAA2B,EAAC,OAAO,EAAE,qBAAqB,GAAI,EACpF,KAAC,aAAa,IAAC,MAAM,EAAC,uBAAuB,GAAG,EAChD,KAAC,aAAa,IAAC,MAAM,EAAC,mBAAmB,GAAG,IACvC,GACM,EAEf,KAAC,YAAY,IACX,KAAK,EAAC,8BAA8B,EACpC,UAAU,EAAE,CAAC,aAAa,EAAE,cAAc,CAAC,EAC3C,WAAW,EAAC,2LAA2L,YAEvM,MAAC,IAAI,IAAC,OAAO,EAAE,CAAC,aACd,KAAC,WAAW,IAAC,MAAM,EAAC,kBAAkB,GAAG,EACzC,KAAC,YAAY,IAAC,KAAK,EAAC,QAAQ,EAAC,IAAI,EAAC,SAAS,EAAC,MAAM,EAAC,kBAAkB,GAAG,EACxE,KAAC,YAAY,IACX,KAAK,EAAC,cAAc,EACpB,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC,GAC3D,IACG,GACM,EAEf,KAAC,YAAY,IACX,KAAK,EAAC,kBAAkB,EACxB,UAAU,EAAE,CAAC,gBAAgB,CAAC,EAC9B,WAAW,EAAC,+gBAA+gB,YAE3hB,MAAC,IAAI,IAAC,SAAS,EAAC,QAAQ,EAAC,GAAG,EAAE,CAAC,aAC7B,KAAC,cAAc,IAAC,MAAM,EAAC,6BAA6B,GAAG,EACvD,KAAC,cAAc,IAAC,MAAM,EAAC,qBAAqB,GAAG,IAC1C,GACM,EAEf,KAAC,YAAY,IACX,KAAK,EAAC,qBAAqB,EAC3B,UAAU,EAAE,CAAC,mBAAmB,CAAC,EACjC,WAAW,EAAC,0QAA0Q,YAEtR,KAAC,IAAI,IAAC,KAAK,EAAE,GAAG,YACd,KAAC,iBAAiB,IAAC,MAAM,EAAC,6BAA6B,GAAG,GACrD,GACM,EAEf,KAAC,YAAY,IACX,KAAK,EAAC,mBAAmB,EACzB,UAAU,EAAE,CAAC,iBAAiB,CAAC,EAC/B,WAAW,EAAC,6KAA6K,YAIzL,KAAC,IAAI,IAAC,SAAS,EAAC,QAAQ,YACtB,KAAC,eAAe,IAAC,MAAM,EAAC,6BAA6B,GAAG,GACnD,GACM,EAEf,KAAC,YAAY,IACX,KAAK,EAAC,eAAe,EACrB,UAAU,EAAE,CAAC,cAAc,CAAC,EAC5B,WAAW,EAAC,oWAAoW,YAEhX,MAAC,IAAI,IAAC,SAAS,EAAC,QAAQ,EAAC,GAAG,EAAE,CAAC,aAC7B,KAAC,IAAI,IAAC,SAAS,EAAC,QAAQ,EAAC,SAAS,EAAE,GAAG,EAAE,QAAQ,EAAC,MAAM,YACtD,KAAC,YAAY,IAAC,MAAM,EAAC,6BAA6B,GAAG,GAChD,EACP,KAAC,YAAY,IAAC,MAAM,EAAC,6BAA6B,EAAC,MAAM,EAAC,SAAS,GAAG,IACjE,GACM,EAEf,KAAC,YAAY,IACX,KAAK,EAAC,YAAY,EAClB,UAAU,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,MAAM,CAAC,EAC1C,WAAW,EAAC,sQAAsQ,YAElR,MAAC,IAAI,IAAC,SAAS,EAAC,QAAQ,EAAC,GAAG,EAAE,CAAC,aAC7B,KAAC,UAAU,IAAC,KAAK,EAAC,oBAAoB,EAAC,MAAM,EAAE,GAAG,YAChD,MAAC,IAAI,IAAC,MAAM,EAAC,MAAM,aACjB,KAAC,OAAO,IAAC,IAAI,EAAC,UAAU,EAAC,KAAK,EAAE,SAAS,GAAI,EAC7C,KAAC,UAAU,IAAC,EAAE,EAAC,GAAG,EAAC,OAAO,EAAC,MAAM,EAAC,KAAK,EAAC,WAAW,wDAEtC,IACR,GACI,EACb,KAAC,UAAU,IAAC,KAAK,EAAC,SAAS,EAAC,MAAM,EAAE,GAAG,YACrC,KAAC,OAAO,IAAC,IAAI,EAAC,UAAU,EAAC,KAAK,EAAE,SAAS,GAAI,GAClC,IACR,GACM,EAEf,KAAC,YAAY,IACX,KAAK,EAAC,SAAS,EACf,UAAU,EAAE,CAAC,QAAQ,CAAC,EACtB,WAAW,EAAC,+KAA+K,YAE3L,KAAC,MAAM,IACL,KAAK,EAAC,aAAa,EACnB,UAAU,EAAE;gCACV,EAAE,EAAE,EAAE,aAAa,EAAE,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,SAAS,EAAE;gCAC5D,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE;gCACnD,EAAE,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,SAAS,EAAE;6BACvD,EACD,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,kBAAkB,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,EACvD,OAAO,EAAC,uBAAuB,EAC/B,MAAM,EAAE,CAAC,eAAe,EAAE,gBAAgB,CAAC,GAC3C,GACW,EAEf,KAAC,YAAY,IACX,KAAK,EAAC,gBAAgB,EACtB,UAAU,EAAE,CAAC,eAAe,CAAC,EAC7B,WAAW,EAAC,iIAAiI,YAE7I,KAAC,aAAa,IAAC,QAAQ,EAAE,CAAC,eAAe,EAAE,gBAAgB,CAAC,GAAI,GACnD,EAEf,KAAC,YAAY,IACX,KAAK,EAAC,eAAe,EACrB,UAAU,EAAE,CAAC,cAAc,CAAC,EAC5B,WAAW,EAAC,4NAA4N,YAExO,MAAC,IAAI,IAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAC,YAAY,EAAC,OAAO,EAAC,cAAc,EAAC,SAAS,EAAE,EAAE,aAC1E,KAAC,YAAY,IACX,WAAW,QACX,IAAI,EAAC,MAAM,EACX,QAAQ,EAAE,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,WAAW,EAAE,GAC9C,EACF,KAAC,YAAY,IACX,WAAW,QACX,IAAI,EAAC,MAAM,EACX,QAAQ,EAAE,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,YAAY,EAAE,GAC/C,EACF,KAAC,YAAY,IACX,WAAW,QACX,IAAI,EAAC,MAAM,EACX,QAAQ,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,cAAc,EAAE,GAC7C,IACG,GACM,EACf,KAAC,YAAY,IACX,KAAK,EAAC,mBAAmB,EACzB,WAAW,EAAC,wNAAmN,EAC/N,UAAU,EAAE,CAAC,kBAAkB,CAAC,YAEhC,KAAC,UAAU,IAAC,EAAE,EAAC,MAAM,EAAC,OAAO,EAAC,MAAM,EAAC,KAAK,EAAC,WAAW,YACnD,UAAU,IAAI,gBAAgB,OAAO,GAAG,GAC9B,GACA,IACX,GACF,GACW,CACpB,CAAC;AACJ,CAAC"}
@@ -0,0 +1,2 @@
1
+ export * from './gallery.tsx';
2
+ export * from './fixtures.ts';
@@ -0,0 +1,2 @@
1
+ export * from './gallery.js';
2
+ export * from './fixtures.js';
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/gallery/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAe,CAAC;AAC9B,cAAc,eAAe,CAAC"}
@@ -0,0 +1,10 @@
1
+ export interface DocumentedProp {
2
+ name: string;
3
+ type: string;
4
+ optional: boolean;
5
+ doc: string;
6
+ }
7
+ export declare const COMPONENT_PROPS: Record<string, {
8
+ doc: string;
9
+ props: DocumentedProp[];
10
+ }>;