@iris-ui-kit/react 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 (154) hide show
  1. package/LICENSE +21 -0
  2. package/dist/SidebarLayout-fWQRvK0a.d.cts +26 -0
  3. package/dist/SidebarLayout-fWQRvK0a.d.ts +26 -0
  4. package/dist/admin.cjs +1583 -0
  5. package/dist/admin.cjs.map +1 -0
  6. package/dist/admin.d.cts +183 -0
  7. package/dist/admin.d.ts +183 -0
  8. package/dist/admin.js +9 -0
  9. package/dist/admin.js.map +1 -0
  10. package/dist/async.cjs +97 -0
  11. package/dist/async.cjs.map +1 -0
  12. package/dist/async.d.cts +57 -0
  13. package/dist/async.d.ts +57 -0
  14. package/dist/async.js +5 -0
  15. package/dist/async.js.map +1 -0
  16. package/dist/behaviors.cjs +569 -0
  17. package/dist/behaviors.cjs.map +1 -0
  18. package/dist/behaviors.d.cts +188 -0
  19. package/dist/behaviors.d.ts +188 -0
  20. package/dist/behaviors.js +4 -0
  21. package/dist/behaviors.js.map +1 -0
  22. package/dist/chunk-2TQSTINK.js +541 -0
  23. package/dist/chunk-2TQSTINK.js.map +1 -0
  24. package/dist/chunk-53KFLVIZ.js +68 -0
  25. package/dist/chunk-53KFLVIZ.js.map +1 -0
  26. package/dist/chunk-6BMFMCMQ.js +140 -0
  27. package/dist/chunk-6BMFMCMQ.js.map +1 -0
  28. package/dist/chunk-AUA5GBT6.js +143 -0
  29. package/dist/chunk-AUA5GBT6.js.map +1 -0
  30. package/dist/chunk-DE6V6NOI.js +122 -0
  31. package/dist/chunk-DE6V6NOI.js.map +1 -0
  32. package/dist/chunk-HEJGN6UI.js +78 -0
  33. package/dist/chunk-HEJGN6UI.js.map +1 -0
  34. package/dist/chunk-IDD35UJ6.js +83 -0
  35. package/dist/chunk-IDD35UJ6.js.map +1 -0
  36. package/dist/chunk-J5FB2UB2.js +166 -0
  37. package/dist/chunk-J5FB2UB2.js.map +1 -0
  38. package/dist/chunk-OMOTUHYI.js +66 -0
  39. package/dist/chunk-OMOTUHYI.js.map +1 -0
  40. package/dist/chunk-RZNYIFV2.js +34 -0
  41. package/dist/chunk-RZNYIFV2.js.map +1 -0
  42. package/dist/chunk-SJO74IB3.js +54 -0
  43. package/dist/chunk-SJO74IB3.js.map +1 -0
  44. package/dist/chunk-SORLRLS4.js +53 -0
  45. package/dist/chunk-SORLRLS4.js.map +1 -0
  46. package/dist/chunk-TO7YVSAI.js +64 -0
  47. package/dist/chunk-TO7YVSAI.js.map +1 -0
  48. package/dist/chunk-TQ33XJIK.js +22 -0
  49. package/dist/chunk-TQ33XJIK.js.map +1 -0
  50. package/dist/chunk-UWUUEZCD.js +950 -0
  51. package/dist/chunk-UWUUEZCD.js.map +1 -0
  52. package/dist/chunk-VWCJJRSC.js +1200 -0
  53. package/dist/chunk-VWCJJRSC.js.map +1 -0
  54. package/dist/chunk-WIHBIDVJ.js +54 -0
  55. package/dist/chunk-WIHBIDVJ.js.map +1 -0
  56. package/dist/chunk-XCK4RIXB.js +66 -0
  57. package/dist/chunk-XCK4RIXB.js.map +1 -0
  58. package/dist/chunk-YAHXR2CJ.js +48 -0
  59. package/dist/chunk-YAHXR2CJ.js.map +1 -0
  60. package/dist/chunk-YXIO5THG.js +4 -0
  61. package/dist/chunk-YXIO5THG.js.map +1 -0
  62. package/dist/chunk-ZKBDUWUD.js +156 -0
  63. package/dist/chunk-ZKBDUWUD.js.map +1 -0
  64. package/dist/data.cjs +112 -0
  65. package/dist/data.cjs.map +1 -0
  66. package/dist/data.d.cts +53 -0
  67. package/dist/data.d.ts +53 -0
  68. package/dist/data.js +5 -0
  69. package/dist/data.js.map +1 -0
  70. package/dist/error-boundary.cjs +106 -0
  71. package/dist/error-boundary.cjs.map +1 -0
  72. package/dist/error-boundary.d.cts +41 -0
  73. package/dist/error-boundary.d.ts +41 -0
  74. package/dist/error-boundary.js +6 -0
  75. package/dist/error-boundary.js.map +1 -0
  76. package/dist/floating.cjs +163 -0
  77. package/dist/floating.cjs.map +1 -0
  78. package/dist/floating.d.cts +92 -0
  79. package/dist/floating.d.ts +92 -0
  80. package/dist/floating.js +5 -0
  81. package/dist/floating.js.map +1 -0
  82. package/dist/form.cjs +159 -0
  83. package/dist/form.cjs.map +1 -0
  84. package/dist/form.d.cts +120 -0
  85. package/dist/form.d.ts +120 -0
  86. package/dist/form.js +5 -0
  87. package/dist/form.js.map +1 -0
  88. package/dist/i18n.cjs +100 -0
  89. package/dist/i18n.cjs.map +1 -0
  90. package/dist/i18n.d.cts +50 -0
  91. package/dist/i18n.d.ts +50 -0
  92. package/dist/i18n.js +5 -0
  93. package/dist/i18n.js.map +1 -0
  94. package/dist/index.cjs +16635 -0
  95. package/dist/index.cjs.map +1 -0
  96. package/dist/index.d.cts +2964 -0
  97. package/dist/index.d.ts +2964 -0
  98. package/dist/index.js +12217 -0
  99. package/dist/index.js.map +1 -0
  100. package/dist/layouts.cjs +386 -0
  101. package/dist/layouts.cjs.map +1 -0
  102. package/dist/layouts.d.cts +92 -0
  103. package/dist/layouts.d.ts +92 -0
  104. package/dist/layouts.js +6 -0
  105. package/dist/layouts.js.map +1 -0
  106. package/dist/modal-utils.cjs +168 -0
  107. package/dist/modal-utils.cjs.map +1 -0
  108. package/dist/modal-utils.d.cts +43 -0
  109. package/dist/modal-utils.d.ts +43 -0
  110. package/dist/modal-utils.js +4 -0
  111. package/dist/modal-utils.js.map +1 -0
  112. package/dist/motion.cjs +104 -0
  113. package/dist/motion.cjs.map +1 -0
  114. package/dist/motion.d.cts +41 -0
  115. package/dist/motion.d.ts +41 -0
  116. package/dist/motion.js +4 -0
  117. package/dist/motion.js.map +1 -0
  118. package/dist/provider.cjs +191 -0
  119. package/dist/provider.cjs.map +1 -0
  120. package/dist/provider.d.cts +62 -0
  121. package/dist/provider.d.ts +62 -0
  122. package/dist/provider.js +8 -0
  123. package/dist/provider.js.map +1 -0
  124. package/dist/resource.cjs +61 -0
  125. package/dist/resource.cjs.map +1 -0
  126. package/dist/resource.d.cts +21 -0
  127. package/dist/resource.d.ts +21 -0
  128. package/dist/resource.js +5 -0
  129. package/dist/resource.js.map +1 -0
  130. package/dist/skeletons.cjs +1304 -0
  131. package/dist/skeletons.cjs.map +1 -0
  132. package/dist/skeletons.d.cts +70 -0
  133. package/dist/skeletons.d.ts +70 -0
  134. package/dist/skeletons.js +8 -0
  135. package/dist/skeletons.js.map +1 -0
  136. package/dist/skins.cjs +134 -0
  137. package/dist/skins.cjs.map +1 -0
  138. package/dist/skins.d.cts +45 -0
  139. package/dist/skins.d.ts +45 -0
  140. package/dist/skins.js +5 -0
  141. package/dist/skins.js.map +1 -0
  142. package/dist/theme.cjs +100 -0
  143. package/dist/theme.cjs.map +1 -0
  144. package/dist/theme.d.cts +71 -0
  145. package/dist/theme.d.ts +71 -0
  146. package/dist/theme.js +5 -0
  147. package/dist/theme.js.map +1 -0
  148. package/dist/undo.cjs +73 -0
  149. package/dist/undo.cjs.map +1 -0
  150. package/dist/undo.d.cts +47 -0
  151. package/dist/undo.d.ts +47 -0
  152. package/dist/undo.js +4 -0
  153. package/dist/undo.js.map +1 -0
  154. package/package.json +61 -0
@@ -0,0 +1,386 @@
1
+ 'use client'
2
+ 'use strict';
3
+
4
+ var React4 = require('react');
5
+ var jsxRuntime = require('react/jsx-runtime');
6
+
7
+ function _interopNamespace(e) {
8
+ if (e && e.__esModule) return e;
9
+ var n = Object.create(null);
10
+ if (e) {
11
+ Object.keys(e).forEach(function (k) {
12
+ if (k !== 'default') {
13
+ var d = Object.getOwnPropertyDescriptor(e, k);
14
+ Object.defineProperty(n, k, d.get ? d : {
15
+ enumerable: true,
16
+ get: function () { return e[k]; }
17
+ });
18
+ }
19
+ });
20
+ }
21
+ n.default = e;
22
+ return Object.freeze(n);
23
+ }
24
+
25
+ var React4__namespace = /*#__PURE__*/_interopNamespace(React4);
26
+
27
+ // src/layouts/Stack.tsx
28
+ var ALIGN_MAP = {
29
+ start: "flex-start",
30
+ center: "center",
31
+ end: "flex-end",
32
+ stretch: "stretch"
33
+ };
34
+ var JUSTIFY_MAP = {
35
+ start: "flex-start",
36
+ center: "center",
37
+ end: "flex-end",
38
+ between: "space-between",
39
+ around: "space-around"
40
+ };
41
+ function toCssSpacing(spacing) {
42
+ if (typeof spacing === "number") return `${spacing}px`;
43
+ if (spacing === "sm" || spacing === "md" || spacing === "lg") {
44
+ return `var(--iris-gap-${spacing})`;
45
+ }
46
+ return spacing;
47
+ }
48
+ var IrisStack = React4__namespace.forwardRef(function IrisStack2({
49
+ direction = "column",
50
+ spacing = "md",
51
+ align = "stretch",
52
+ justify = "start",
53
+ wrap = false,
54
+ inline = false,
55
+ style,
56
+ children,
57
+ ...rest
58
+ }, ref) {
59
+ return /* @__PURE__ */ jsxRuntime.jsx(
60
+ "div",
61
+ {
62
+ ...rest,
63
+ ref,
64
+ "data-iris-stack": "",
65
+ "data-iris-stack-direction": direction,
66
+ style: {
67
+ display: inline ? "inline-flex" : "flex",
68
+ flexDirection: direction,
69
+ gap: toCssSpacing(spacing),
70
+ alignItems: ALIGN_MAP[align],
71
+ justifyContent: JUSTIFY_MAP[justify],
72
+ flexWrap: wrap ? "wrap" : "nowrap",
73
+ ...style
74
+ },
75
+ children
76
+ }
77
+ );
78
+ });
79
+ var WIDTH_MAP = {
80
+ sm: "640px",
81
+ md: "768px",
82
+ lg: "1024px",
83
+ xl: "1280px",
84
+ full: "100%"
85
+ };
86
+ function resolveMaxWidth(input) {
87
+ if (input === "sm" || input === "md" || input === "lg" || input === "xl" || input === "full") {
88
+ return WIDTH_MAP[input];
89
+ }
90
+ return input;
91
+ }
92
+ function resolvePadding(input) {
93
+ if (typeof input === "number") return `${input}px`;
94
+ if (input === "sm" || input === "md" || input === "lg") {
95
+ return `var(--iris-padding-${input})`;
96
+ }
97
+ return input;
98
+ }
99
+ var IrisContainer = React4__namespace.forwardRef(
100
+ function IrisContainer2({ maxWidth = "lg", padding = "md", center = true, style, children, ...rest }, ref) {
101
+ return /* @__PURE__ */ jsxRuntime.jsx(
102
+ "div",
103
+ {
104
+ ...rest,
105
+ ref,
106
+ "data-iris-container": "",
107
+ "data-iris-container-max-width": maxWidth,
108
+ style: {
109
+ width: "100%",
110
+ maxWidth: resolveMaxWidth(maxWidth),
111
+ padding: `0 ${resolvePadding(padding)}`,
112
+ ...center ? { marginInlineStart: "auto", marginInlineEnd: "auto" } : {},
113
+ ...style
114
+ },
115
+ children
116
+ }
117
+ );
118
+ }
119
+ );
120
+ function resolveColumns(columns, minColWidth) {
121
+ if (typeof columns === "number") return `repeat(${columns}, minmax(0, 1fr))`;
122
+ if (columns === "auto-fit") return `repeat(auto-fit, minmax(${minColWidth}, 1fr))`;
123
+ if (columns === "auto-fill") return `repeat(auto-fill, minmax(${minColWidth}, 1fr))`;
124
+ return columns;
125
+ }
126
+ function toCssSpacing2(spacing) {
127
+ if (typeof spacing === "number") return `${spacing}px`;
128
+ if (spacing === "sm" || spacing === "md" || spacing === "lg") {
129
+ return `var(--iris-gap-${spacing})`;
130
+ }
131
+ return spacing;
132
+ }
133
+ var IrisGrid = React4__namespace.forwardRef(function IrisGrid2({
134
+ columns = "auto-fit",
135
+ minColWidth = "200px",
136
+ rowGap,
137
+ columnGap,
138
+ gap = "md",
139
+ inline = false,
140
+ style,
141
+ children,
142
+ ...rest
143
+ }, ref) {
144
+ const colTemplate = resolveColumns(columns, minColWidth);
145
+ const resolvedRowGap = rowGap !== void 0 ? toCssSpacing2(rowGap) : toCssSpacing2(gap);
146
+ const resolvedColGap = columnGap !== void 0 ? toCssSpacing2(columnGap) : toCssSpacing2(gap);
147
+ return /* @__PURE__ */ jsxRuntime.jsx(
148
+ "div",
149
+ {
150
+ ...rest,
151
+ ref,
152
+ "data-iris-grid": "",
153
+ "data-iris-grid-columns": String(columns),
154
+ style: {
155
+ display: inline ? "inline-grid" : "grid",
156
+ gridTemplateColumns: colTemplate,
157
+ rowGap: resolvedRowGap,
158
+ columnGap: resolvedColGap,
159
+ ...style
160
+ },
161
+ children
162
+ }
163
+ );
164
+ });
165
+ function asLen(v) {
166
+ return typeof v === "number" ? `${v}px` : v;
167
+ }
168
+ function IrisSidebarLayout({
169
+ collapsed: collapsedProp,
170
+ defaultCollapsed = false,
171
+ onCollapsedChange,
172
+ width = 240,
173
+ collapsedWidth = 60,
174
+ side = "left",
175
+ sidebar,
176
+ style,
177
+ children,
178
+ ...rest
179
+ }) {
180
+ const isControlled = collapsedProp !== void 0;
181
+ const [internal, setInternal] = React4__namespace.useState(defaultCollapsed);
182
+ const collapsed = isControlled ? Boolean(collapsedProp) : internal;
183
+ const setCollapsed = React4__namespace.useCallback(
184
+ (next) => {
185
+ if (!isControlled) setInternal(next);
186
+ onCollapsedChange?.(next);
187
+ },
188
+ [isControlled, onCollapsedChange]
189
+ );
190
+ const sidebarContent = typeof sidebar === "function" ? sidebar({
191
+ collapsed,
192
+ setCollapsed
193
+ }) : sidebar;
194
+ const sidebarStyle = {
195
+ width: collapsed ? asLen(collapsedWidth) : asLen(width),
196
+ flexShrink: 0,
197
+ background: "var(--iris-surface)",
198
+ borderRight: side === "left" ? "1px solid var(--iris-border)" : "none",
199
+ borderLeft: side === "right" ? "1px solid var(--iris-border)" : "none",
200
+ transition: "width 180ms ease",
201
+ overflow: "hidden",
202
+ display: "flex",
203
+ flexDirection: "column"
204
+ };
205
+ return /* @__PURE__ */ jsxRuntime.jsxs(
206
+ "div",
207
+ {
208
+ ...rest,
209
+ "data-iris-sidebar-layout": "",
210
+ "data-collapsed": collapsed ? "" : void 0,
211
+ "data-side": side,
212
+ style: {
213
+ display: "flex",
214
+ flexDirection: side === "right" ? "row-reverse" : "row",
215
+ width: "100%",
216
+ height: "100%",
217
+ minHeight: 0,
218
+ color: "var(--iris-foreground)",
219
+ ...style
220
+ },
221
+ children: [
222
+ /* @__PURE__ */ jsxRuntime.jsx(
223
+ "aside",
224
+ {
225
+ role: "complementary",
226
+ "data-iris-sidebar": "",
227
+ "data-collapsed": collapsed ? "" : void 0,
228
+ style: sidebarStyle,
229
+ children: sidebarContent
230
+ }
231
+ ),
232
+ /* @__PURE__ */ jsxRuntime.jsx(
233
+ "div",
234
+ {
235
+ "data-iris-sidebar-main": "",
236
+ style: {
237
+ flex: 1,
238
+ minWidth: 0,
239
+ overflow: "auto",
240
+ background: "var(--iris-background)"
241
+ },
242
+ children
243
+ }
244
+ )
245
+ ]
246
+ }
247
+ );
248
+ }
249
+ function asLen2(v) {
250
+ return typeof v === "number" ? `${v}px` : v;
251
+ }
252
+ function IrisHeaderLayout({
253
+ headerHeight = "auto",
254
+ footerHeight = "auto",
255
+ sticky = true,
256
+ header,
257
+ footer,
258
+ style,
259
+ children,
260
+ ...rest
261
+ }) {
262
+ return /* @__PURE__ */ jsxRuntime.jsxs(
263
+ "div",
264
+ {
265
+ ...rest,
266
+ "data-iris-header-layout": "",
267
+ style: {
268
+ display: "flex",
269
+ flexDirection: "column",
270
+ width: "100%",
271
+ height: "100%",
272
+ minHeight: 0,
273
+ background: "var(--iris-background)",
274
+ color: "var(--iris-foreground)",
275
+ ...style
276
+ },
277
+ children: [
278
+ header ? /* @__PURE__ */ jsxRuntime.jsx(
279
+ "header",
280
+ {
281
+ role: "banner",
282
+ "data-iris-header": "",
283
+ style: {
284
+ flexShrink: 0,
285
+ height: asLen2(headerHeight),
286
+ borderBottom: "1px solid var(--iris-border)",
287
+ background: "var(--iris-surface)",
288
+ position: sticky ? "sticky" : "static",
289
+ top: 0,
290
+ zIndex: 50
291
+ },
292
+ children: header
293
+ }
294
+ ) : null,
295
+ /* @__PURE__ */ jsxRuntime.jsx(
296
+ "main",
297
+ {
298
+ role: "main",
299
+ "data-iris-header-main": "",
300
+ style: { flex: 1, minHeight: 0, overflow: "auto" },
301
+ children
302
+ }
303
+ ),
304
+ footer ? /* @__PURE__ */ jsxRuntime.jsx(
305
+ "footer",
306
+ {
307
+ role: "contentinfo",
308
+ "data-iris-footer": "",
309
+ style: {
310
+ flexShrink: 0,
311
+ height: asLen2(footerHeight),
312
+ borderTop: "1px solid var(--iris-border)",
313
+ background: "var(--iris-surface)"
314
+ },
315
+ children: footer
316
+ }
317
+ ) : null
318
+ ]
319
+ }
320
+ );
321
+ }
322
+ function IrisDashboardGrid({
323
+ columns = 12,
324
+ gap = 16,
325
+ minColWidth,
326
+ style,
327
+ children,
328
+ ...rest
329
+ }) {
330
+ const gapCss = typeof gap === "number" ? `${gap}px` : gap;
331
+ const gridTemplateColumns = minColWidth ? `repeat(auto-fill, minmax(${typeof minColWidth === "number" ? `${minColWidth}px` : minColWidth}, 1fr))` : `repeat(${columns}, 1fr)`;
332
+ return /* @__PURE__ */ jsxRuntime.jsx(
333
+ "div",
334
+ {
335
+ ...rest,
336
+ "data-iris-dashboard-grid": "",
337
+ style: {
338
+ display: "grid",
339
+ gap: gapCss,
340
+ gridTemplateColumns,
341
+ width: "100%",
342
+ ...style
343
+ },
344
+ children
345
+ }
346
+ );
347
+ }
348
+ function IrisDashboardCard({
349
+ colSpan = 1,
350
+ rowSpan = 1,
351
+ surface = true,
352
+ style,
353
+ children,
354
+ ...rest
355
+ }) {
356
+ const gridColumn = colSpan === "full" ? "1 / -1" : `span ${colSpan}`;
357
+ const gridRow = rowSpan > 1 ? `span ${rowSpan}` : void 0;
358
+ return /* @__PURE__ */ jsxRuntime.jsx(
359
+ "div",
360
+ {
361
+ ...rest,
362
+ "data-iris-dashboard-card": "",
363
+ style: {
364
+ gridColumn,
365
+ gridRow,
366
+ background: surface ? "var(--iris-surface)" : "transparent",
367
+ border: surface ? "1px solid var(--iris-border)" : "none",
368
+ borderRadius: "var(--iris-radius-md, 6px)",
369
+ padding: surface ? "var(--iris-padding-lg, 20px)" : 0,
370
+ minWidth: 0,
371
+ ...style
372
+ },
373
+ children
374
+ }
375
+ );
376
+ }
377
+
378
+ exports.IrisContainer = IrisContainer;
379
+ exports.IrisDashboardCard = IrisDashboardCard;
380
+ exports.IrisDashboardGrid = IrisDashboardGrid;
381
+ exports.IrisGrid = IrisGrid;
382
+ exports.IrisHeaderLayout = IrisHeaderLayout;
383
+ exports.IrisSidebarLayout = IrisSidebarLayout;
384
+ exports.IrisStack = IrisStack;
385
+ //# sourceMappingURL=layouts.cjs.map
386
+ //# sourceMappingURL=layouts.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/layouts/Stack.tsx","../src/layouts/Container.tsx","../src/layouts/Grid.tsx","../src/layouts/SidebarLayout.tsx","../src/layouts/HeaderLayout.tsx","../src/layouts/DashboardGrid.tsx"],"names":["React","IrisStack","jsx","React2","IrisContainer","toCssSpacing","React3","IrisGrid","React4","jsxs","asLen"],"mappings":"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","file":"layouts.cjs","sourcesContent":["import * as React from 'react'\n\nexport type IrisStackDirection = 'row' | 'column'\nexport type IrisStackAlign = 'start' | 'center' | 'end' | 'stretch'\nexport type IrisStackJustify = 'start' | 'center' | 'end' | 'between' | 'around'\n\nconst ALIGN_MAP: Record<IrisStackAlign, string> = {\n start: 'flex-start',\n center: 'center',\n end: 'flex-end',\n stretch: 'stretch',\n}\n\nconst JUSTIFY_MAP: Record<IrisStackJustify, string> = {\n start: 'flex-start',\n center: 'center',\n end: 'flex-end',\n between: 'space-between',\n around: 'space-around',\n}\n\nfunction toCssSpacing(spacing: string | number): string {\n if (typeof spacing === 'number') return `${spacing}px`\n if (spacing === 'sm' || spacing === 'md' || spacing === 'lg') {\n return `var(--iris-gap-${spacing})`\n }\n return spacing\n}\n\nexport interface IrisStackProps extends React.HTMLAttributes<HTMLDivElement> {\n direction?: IrisStackDirection\n spacing?: string | number\n align?: IrisStackAlign\n justify?: IrisStackJustify\n wrap?: boolean\n /** When true, renders as `inline-flex`. */\n inline?: boolean\n}\n\n/**\n * Flex container with token-driven spacing. The lightest possible layout\n * primitive — saves hand-writing `display: flex` everywhere.\n */\nexport const IrisStack = React.forwardRef<HTMLDivElement, IrisStackProps>(function IrisStack(\n {\n direction = 'column',\n spacing = 'md',\n align = 'stretch',\n justify = 'start',\n wrap = false,\n inline = false,\n style,\n children,\n ...rest\n },\n ref,\n) {\n return (\n <div\n {...rest}\n ref={ref}\n data-iris-stack=\"\"\n data-iris-stack-direction={direction}\n style={{\n display: inline ? 'inline-flex' : 'flex',\n flexDirection: direction,\n gap: toCssSpacing(spacing),\n alignItems: ALIGN_MAP[align],\n justifyContent: JUSTIFY_MAP[justify],\n flexWrap: wrap ? 'wrap' : 'nowrap',\n ...style,\n }}\n >\n {children}\n </div>\n )\n})\n","import * as React from 'react'\n\nexport type IrisContainerMaxWidth = 'sm' | 'md' | 'lg' | 'xl' | 'full' | string\n\nconst WIDTH_MAP: Record<'sm' | 'md' | 'lg' | 'xl' | 'full', string> = {\n sm: '640px',\n md: '768px',\n lg: '1024px',\n xl: '1280px',\n full: '100%',\n}\n\nfunction resolveMaxWidth(input: IrisContainerMaxWidth): string {\n if (input === 'sm' || input === 'md' || input === 'lg' || input === 'xl' || input === 'full') {\n return WIDTH_MAP[input]\n }\n return input\n}\n\nfunction resolvePadding(input: string | number): string {\n if (typeof input === 'number') return `${input}px`\n if (input === 'sm' || input === 'md' || input === 'lg') {\n return `var(--iris-padding-${input})`\n }\n return input\n}\n\nexport interface IrisContainerProps extends React.HTMLAttributes<HTMLDivElement> {\n maxWidth?: IrisContainerMaxWidth\n padding?: string | number\n center?: boolean\n}\n\n/**\n * Centered max-width wrapper. Use to bound content width on large screens\n * without rewriting flex/grid plumbing.\n */\nexport const IrisContainer = React.forwardRef<HTMLDivElement, IrisContainerProps>(\n function IrisContainer(\n { maxWidth = 'lg', padding = 'md', center = true, style, children, ...rest },\n ref,\n ) {\n return (\n <div\n {...rest}\n ref={ref}\n data-iris-container=\"\"\n data-iris-container-max-width={maxWidth}\n style={{\n width: '100%',\n maxWidth: resolveMaxWidth(maxWidth),\n padding: `0 ${resolvePadding(padding)}`,\n ...(center ? { marginInlineStart: 'auto', marginInlineEnd: 'auto' } : {}),\n ...style,\n }}\n >\n {children}\n </div>\n )\n },\n)\n","import * as React from 'react'\n\nexport type IrisGridColumns =\n | number\n | 'auto-fit'\n | 'auto-fill'\n | string /* raw grid-template-columns value */\n\nfunction resolveColumns(columns: IrisGridColumns, minColWidth: string): string {\n if (typeof columns === 'number') return `repeat(${columns}, minmax(0, 1fr))`\n if (columns === 'auto-fit') return `repeat(auto-fit, minmax(${minColWidth}, 1fr))`\n if (columns === 'auto-fill') return `repeat(auto-fill, minmax(${minColWidth}, 1fr))`\n return columns\n}\n\nfunction toCssSpacing(spacing: string | number): string {\n if (typeof spacing === 'number') return `${spacing}px`\n if (spacing === 'sm' || spacing === 'md' || spacing === 'lg') {\n return `var(--iris-gap-${spacing})`\n }\n return spacing\n}\n\nexport interface IrisGridProps extends React.HTMLAttributes<HTMLDivElement> {\n columns?: IrisGridColumns\n /** Min width per column for `auto-fit` / `auto-fill`. */\n minColWidth?: string\n rowGap?: string | number\n columnGap?: string | number\n /** Shorthand for both row + column gap. Overridden if rowGap/columnGap given. */\n gap?: string | number\n inline?: boolean\n}\n\n/**\n * Two-dimensional grid layout primitive. Three column modes:\n * - Fixed integer (`columns={3}`)\n * - Responsive auto-fit (`columns=\"auto-fit\"` + `minColWidth`)\n * - Raw CSS (`columns=\"100px 1fr 100px\"`)\n */\nexport const IrisGrid = React.forwardRef<HTMLDivElement, IrisGridProps>(function IrisGrid(\n {\n columns = 'auto-fit',\n minColWidth = '200px',\n rowGap,\n columnGap,\n gap = 'md',\n inline = false,\n style,\n children,\n ...rest\n },\n ref,\n) {\n const colTemplate = resolveColumns(columns, minColWidth)\n const resolvedRowGap = rowGap !== undefined ? toCssSpacing(rowGap) : toCssSpacing(gap)\n const resolvedColGap = columnGap !== undefined ? toCssSpacing(columnGap) : toCssSpacing(gap)\n\n return (\n <div\n {...rest}\n ref={ref}\n data-iris-grid=\"\"\n data-iris-grid-columns={String(columns)}\n style={{\n display: inline ? 'inline-grid' : 'grid',\n gridTemplateColumns: colTemplate,\n rowGap: resolvedRowGap,\n columnGap: resolvedColGap,\n ...style,\n }}\n >\n {children}\n </div>\n )\n})\n","import * as React from 'react'\n\nexport interface IrisSidebarLayoutSidebarState {\n collapsed: boolean\n setCollapsed: (next: boolean) => void\n}\n\nexport interface IrisSidebarLayoutProps extends Omit<\n React.HTMLAttributes<HTMLDivElement>,\n 'children'\n> {\n collapsed?: boolean\n defaultCollapsed?: boolean\n onCollapsedChange?: (next: boolean) => void\n /** Sidebar width when expanded (px or CSS length). */\n width?: number | string\n /** Sidebar width when collapsed. */\n collapsedWidth?: number | string\n side?: 'left' | 'right'\n /** Sidebar content. May be a render function that receives `{ collapsed, setCollapsed }`. */\n sidebar?: React.ReactNode | ((state: IrisSidebarLayoutSidebarState) => React.ReactNode)\n children?: React.ReactNode\n}\n\nfunction asLen(v: number | string): string {\n return typeof v === 'number' ? `${v}px` : v\n}\n\n/**\n * Two-column layout with a collapsible sidebar. The sidebar is kept mounted\n * across collapses (only its width animates) so component state survives.\n */\nexport function IrisSidebarLayout({\n collapsed: collapsedProp,\n defaultCollapsed = false,\n onCollapsedChange,\n width = 240,\n collapsedWidth = 60,\n side = 'left',\n sidebar,\n style,\n children,\n ...rest\n}: IrisSidebarLayoutProps): React.ReactElement {\n const isControlled = collapsedProp !== undefined\n const [internal, setInternal] = React.useState(defaultCollapsed)\n const collapsed = isControlled ? Boolean(collapsedProp) : internal\n\n const setCollapsed = React.useCallback(\n (next: boolean) => {\n if (!isControlled) setInternal(next)\n onCollapsedChange?.(next)\n },\n [isControlled, onCollapsedChange],\n )\n\n const sidebarContent =\n typeof sidebar === 'function'\n ? (sidebar as (s: IrisSidebarLayoutSidebarState) => React.ReactNode)({\n collapsed,\n setCollapsed,\n })\n : sidebar\n\n const sidebarStyle: React.CSSProperties = {\n width: collapsed ? asLen(collapsedWidth) : asLen(width),\n flexShrink: 0,\n background: 'var(--iris-surface)',\n borderRight: side === 'left' ? '1px solid var(--iris-border)' : 'none',\n borderLeft: side === 'right' ? '1px solid var(--iris-border)' : 'none',\n transition: 'width 180ms ease',\n overflow: 'hidden',\n display: 'flex',\n flexDirection: 'column',\n }\n\n return (\n <div\n {...rest}\n data-iris-sidebar-layout=\"\"\n data-collapsed={collapsed ? '' : undefined}\n data-side={side}\n style={{\n display: 'flex',\n flexDirection: side === 'right' ? 'row-reverse' : 'row',\n width: '100%',\n height: '100%',\n minHeight: 0,\n color: 'var(--iris-foreground)',\n ...style,\n }}\n >\n <aside\n role=\"complementary\"\n data-iris-sidebar=\"\"\n data-collapsed={collapsed ? '' : undefined}\n style={sidebarStyle}\n >\n {sidebarContent}\n </aside>\n <div\n data-iris-sidebar-main=\"\"\n style={{\n flex: 1,\n minWidth: 0,\n overflow: 'auto',\n background: 'var(--iris-background)',\n }}\n >\n {children}\n </div>\n </div>\n )\n}\n","import * as React from 'react'\n\nexport interface IrisHeaderLayoutProps extends Omit<\n React.HTMLAttributes<HTMLDivElement>,\n 'children'\n> {\n /** Header height (px or CSS length). Default `'auto'`. */\n headerHeight?: number | string\n /** Footer height (px or CSS length). Default `'auto'`. */\n footerHeight?: number | string\n /** Header sticks via `position: sticky` instead of static. Default true. */\n sticky?: boolean\n header?: React.ReactNode\n footer?: React.ReactNode\n children?: React.ReactNode\n}\n\nfunction asLen(v: number | string): string {\n return typeof v === 'number' ? `${v}px` : v\n}\n\n/**\n * Two- (or three-) region vertical layout: a sticky header on top, a\n * scrollable main region, and an optional footer.\n */\nexport function IrisHeaderLayout({\n headerHeight = 'auto',\n footerHeight = 'auto',\n sticky = true,\n header,\n footer,\n style,\n children,\n ...rest\n}: IrisHeaderLayoutProps): React.ReactElement {\n return (\n <div\n {...rest}\n data-iris-header-layout=\"\"\n style={{\n display: 'flex',\n flexDirection: 'column',\n width: '100%',\n height: '100%',\n minHeight: 0,\n background: 'var(--iris-background)',\n color: 'var(--iris-foreground)',\n ...style,\n }}\n >\n {header ? (\n <header\n role=\"banner\"\n data-iris-header=\"\"\n style={{\n flexShrink: 0,\n height: asLen(headerHeight),\n borderBottom: '1px solid var(--iris-border)',\n background: 'var(--iris-surface)',\n position: sticky ? 'sticky' : 'static',\n top: 0,\n zIndex: 50,\n }}\n >\n {header}\n </header>\n ) : null}\n <main\n role=\"main\"\n data-iris-header-main=\"\"\n style={{ flex: 1, minHeight: 0, overflow: 'auto' }}\n >\n {children}\n </main>\n {footer ? (\n <footer\n role=\"contentinfo\"\n data-iris-footer=\"\"\n style={{\n flexShrink: 0,\n height: asLen(footerHeight),\n borderTop: '1px solid var(--iris-border)',\n background: 'var(--iris-surface)',\n }}\n >\n {footer}\n </footer>\n ) : null}\n </div>\n )\n}\n","import * as React from 'react'\n\nexport interface IrisDashboardGridProps extends React.HTMLAttributes<HTMLDivElement> {\n columns?: number\n gap?: number | string\n /** Use `repeat(auto-fill, minmax(<minColWidth>, 1fr))` instead of fixed `columns`. */\n minColWidth?: number | string\n}\n\n/**\n * 12-column responsive grid for dashboard composition. Each child controls\n * its span via `gridColumn` style or by wrapping with `IrisDashboardCard`.\n */\nexport function IrisDashboardGrid({\n columns = 12,\n gap = 16,\n minColWidth,\n style,\n children,\n ...rest\n}: IrisDashboardGridProps): React.ReactElement {\n const gapCss = typeof gap === 'number' ? `${gap}px` : gap\n const gridTemplateColumns = minColWidth\n ? `repeat(auto-fill, minmax(${\n typeof minColWidth === 'number' ? `${minColWidth}px` : minColWidth\n }, 1fr))`\n : `repeat(${columns}, 1fr)`\n\n return (\n <div\n {...rest}\n data-iris-dashboard-grid=\"\"\n style={{\n display: 'grid',\n gap: gapCss,\n gridTemplateColumns,\n width: '100%',\n ...style,\n }}\n >\n {children}\n </div>\n )\n}\n\nexport interface IrisDashboardCardProps extends React.HTMLAttributes<HTMLDivElement> {\n colSpan?: number | 'full'\n rowSpan?: number\n /** Show the styled card surface (background + border). Default true. */\n surface?: boolean\n}\n\n/**\n * A single dashboard grid cell. `colSpan='full'` makes it fill the row.\n */\nexport function IrisDashboardCard({\n colSpan = 1,\n rowSpan = 1,\n surface = true,\n style,\n children,\n ...rest\n}: IrisDashboardCardProps): React.ReactElement {\n const gridColumn = colSpan === 'full' ? '1 / -1' : `span ${colSpan}`\n const gridRow = rowSpan > 1 ? `span ${rowSpan}` : undefined\n\n return (\n <div\n {...rest}\n data-iris-dashboard-card=\"\"\n style={{\n gridColumn,\n gridRow,\n background: surface ? 'var(--iris-surface)' : 'transparent',\n border: surface ? '1px solid var(--iris-border)' : 'none',\n borderRadius: 'var(--iris-radius-md, 6px)',\n padding: surface ? 'var(--iris-padding-lg, 20px)' : 0,\n minWidth: 0,\n ...style,\n }}\n >\n {children}\n </div>\n )\n}\n"]}
@@ -0,0 +1,92 @@
1
+ import * as React from 'react';
2
+ export { I as IrisSidebarLayout, a as IrisSidebarLayoutProps, b as IrisSidebarLayoutSidebarState } from './SidebarLayout-fWQRvK0a.cjs';
3
+
4
+ type IrisStackDirection = 'row' | 'column';
5
+ type IrisStackAlign = 'start' | 'center' | 'end' | 'stretch';
6
+ type IrisStackJustify = 'start' | 'center' | 'end' | 'between' | 'around';
7
+ interface IrisStackProps extends React.HTMLAttributes<HTMLDivElement> {
8
+ direction?: IrisStackDirection;
9
+ spacing?: string | number;
10
+ align?: IrisStackAlign;
11
+ justify?: IrisStackJustify;
12
+ wrap?: boolean;
13
+ /** When true, renders as `inline-flex`. */
14
+ inline?: boolean;
15
+ }
16
+ /**
17
+ * Flex container with token-driven spacing. The lightest possible layout
18
+ * primitive — saves hand-writing `display: flex` everywhere.
19
+ */
20
+ declare const IrisStack: React.ForwardRefExoticComponent<IrisStackProps & React.RefAttributes<HTMLDivElement>>;
21
+
22
+ type IrisContainerMaxWidth = 'sm' | 'md' | 'lg' | 'xl' | 'full' | string;
23
+ interface IrisContainerProps extends React.HTMLAttributes<HTMLDivElement> {
24
+ maxWidth?: IrisContainerMaxWidth;
25
+ padding?: string | number;
26
+ center?: boolean;
27
+ }
28
+ /**
29
+ * Centered max-width wrapper. Use to bound content width on large screens
30
+ * without rewriting flex/grid plumbing.
31
+ */
32
+ declare const IrisContainer: React.ForwardRefExoticComponent<IrisContainerProps & React.RefAttributes<HTMLDivElement>>;
33
+
34
+ type IrisGridColumns = number | 'auto-fit' | 'auto-fill' | string;
35
+ interface IrisGridProps extends React.HTMLAttributes<HTMLDivElement> {
36
+ columns?: IrisGridColumns;
37
+ /** Min width per column for `auto-fit` / `auto-fill`. */
38
+ minColWidth?: string;
39
+ rowGap?: string | number;
40
+ columnGap?: string | number;
41
+ /** Shorthand for both row + column gap. Overridden if rowGap/columnGap given. */
42
+ gap?: string | number;
43
+ inline?: boolean;
44
+ }
45
+ /**
46
+ * Two-dimensional grid layout primitive. Three column modes:
47
+ * - Fixed integer (`columns={3}`)
48
+ * - Responsive auto-fit (`columns="auto-fit"` + `minColWidth`)
49
+ * - Raw CSS (`columns="100px 1fr 100px"`)
50
+ */
51
+ declare const IrisGrid: React.ForwardRefExoticComponent<IrisGridProps & React.RefAttributes<HTMLDivElement>>;
52
+
53
+ interface IrisHeaderLayoutProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'children'> {
54
+ /** Header height (px or CSS length). Default `'auto'`. */
55
+ headerHeight?: number | string;
56
+ /** Footer height (px or CSS length). Default `'auto'`. */
57
+ footerHeight?: number | string;
58
+ /** Header sticks via `position: sticky` instead of static. Default true. */
59
+ sticky?: boolean;
60
+ header?: React.ReactNode;
61
+ footer?: React.ReactNode;
62
+ children?: React.ReactNode;
63
+ }
64
+ /**
65
+ * Two- (or three-) region vertical layout: a sticky header on top, a
66
+ * scrollable main region, and an optional footer.
67
+ */
68
+ declare function IrisHeaderLayout({ headerHeight, footerHeight, sticky, header, footer, style, children, ...rest }: IrisHeaderLayoutProps): React.ReactElement;
69
+
70
+ interface IrisDashboardGridProps extends React.HTMLAttributes<HTMLDivElement> {
71
+ columns?: number;
72
+ gap?: number | string;
73
+ /** Use `repeat(auto-fill, minmax(<minColWidth>, 1fr))` instead of fixed `columns`. */
74
+ minColWidth?: number | string;
75
+ }
76
+ /**
77
+ * 12-column responsive grid for dashboard composition. Each child controls
78
+ * its span via `gridColumn` style or by wrapping with `IrisDashboardCard`.
79
+ */
80
+ declare function IrisDashboardGrid({ columns, gap, minColWidth, style, children, ...rest }: IrisDashboardGridProps): React.ReactElement;
81
+ interface IrisDashboardCardProps extends React.HTMLAttributes<HTMLDivElement> {
82
+ colSpan?: number | 'full';
83
+ rowSpan?: number;
84
+ /** Show the styled card surface (background + border). Default true. */
85
+ surface?: boolean;
86
+ }
87
+ /**
88
+ * A single dashboard grid cell. `colSpan='full'` makes it fill the row.
89
+ */
90
+ declare function IrisDashboardCard({ colSpan, rowSpan, surface, style, children, ...rest }: IrisDashboardCardProps): React.ReactElement;
91
+
92
+ export { IrisContainer, type IrisContainerMaxWidth, type IrisContainerProps, IrisDashboardCard, type IrisDashboardCardProps, IrisDashboardGrid, type IrisDashboardGridProps, IrisGrid, type IrisGridColumns, type IrisGridProps, IrisHeaderLayout, type IrisHeaderLayoutProps, IrisStack, type IrisStackAlign, type IrisStackDirection, type IrisStackJustify, type IrisStackProps };
@@ -0,0 +1,92 @@
1
+ import * as React from 'react';
2
+ export { I as IrisSidebarLayout, a as IrisSidebarLayoutProps, b as IrisSidebarLayoutSidebarState } from './SidebarLayout-fWQRvK0a.js';
3
+
4
+ type IrisStackDirection = 'row' | 'column';
5
+ type IrisStackAlign = 'start' | 'center' | 'end' | 'stretch';
6
+ type IrisStackJustify = 'start' | 'center' | 'end' | 'between' | 'around';
7
+ interface IrisStackProps extends React.HTMLAttributes<HTMLDivElement> {
8
+ direction?: IrisStackDirection;
9
+ spacing?: string | number;
10
+ align?: IrisStackAlign;
11
+ justify?: IrisStackJustify;
12
+ wrap?: boolean;
13
+ /** When true, renders as `inline-flex`. */
14
+ inline?: boolean;
15
+ }
16
+ /**
17
+ * Flex container with token-driven spacing. The lightest possible layout
18
+ * primitive — saves hand-writing `display: flex` everywhere.
19
+ */
20
+ declare const IrisStack: React.ForwardRefExoticComponent<IrisStackProps & React.RefAttributes<HTMLDivElement>>;
21
+
22
+ type IrisContainerMaxWidth = 'sm' | 'md' | 'lg' | 'xl' | 'full' | string;
23
+ interface IrisContainerProps extends React.HTMLAttributes<HTMLDivElement> {
24
+ maxWidth?: IrisContainerMaxWidth;
25
+ padding?: string | number;
26
+ center?: boolean;
27
+ }
28
+ /**
29
+ * Centered max-width wrapper. Use to bound content width on large screens
30
+ * without rewriting flex/grid plumbing.
31
+ */
32
+ declare const IrisContainer: React.ForwardRefExoticComponent<IrisContainerProps & React.RefAttributes<HTMLDivElement>>;
33
+
34
+ type IrisGridColumns = number | 'auto-fit' | 'auto-fill' | string;
35
+ interface IrisGridProps extends React.HTMLAttributes<HTMLDivElement> {
36
+ columns?: IrisGridColumns;
37
+ /** Min width per column for `auto-fit` / `auto-fill`. */
38
+ minColWidth?: string;
39
+ rowGap?: string | number;
40
+ columnGap?: string | number;
41
+ /** Shorthand for both row + column gap. Overridden if rowGap/columnGap given. */
42
+ gap?: string | number;
43
+ inline?: boolean;
44
+ }
45
+ /**
46
+ * Two-dimensional grid layout primitive. Three column modes:
47
+ * - Fixed integer (`columns={3}`)
48
+ * - Responsive auto-fit (`columns="auto-fit"` + `minColWidth`)
49
+ * - Raw CSS (`columns="100px 1fr 100px"`)
50
+ */
51
+ declare const IrisGrid: React.ForwardRefExoticComponent<IrisGridProps & React.RefAttributes<HTMLDivElement>>;
52
+
53
+ interface IrisHeaderLayoutProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'children'> {
54
+ /** Header height (px or CSS length). Default `'auto'`. */
55
+ headerHeight?: number | string;
56
+ /** Footer height (px or CSS length). Default `'auto'`. */
57
+ footerHeight?: number | string;
58
+ /** Header sticks via `position: sticky` instead of static. Default true. */
59
+ sticky?: boolean;
60
+ header?: React.ReactNode;
61
+ footer?: React.ReactNode;
62
+ children?: React.ReactNode;
63
+ }
64
+ /**
65
+ * Two- (or three-) region vertical layout: a sticky header on top, a
66
+ * scrollable main region, and an optional footer.
67
+ */
68
+ declare function IrisHeaderLayout({ headerHeight, footerHeight, sticky, header, footer, style, children, ...rest }: IrisHeaderLayoutProps): React.ReactElement;
69
+
70
+ interface IrisDashboardGridProps extends React.HTMLAttributes<HTMLDivElement> {
71
+ columns?: number;
72
+ gap?: number | string;
73
+ /** Use `repeat(auto-fill, minmax(<minColWidth>, 1fr))` instead of fixed `columns`. */
74
+ minColWidth?: number | string;
75
+ }
76
+ /**
77
+ * 12-column responsive grid for dashboard composition. Each child controls
78
+ * its span via `gridColumn` style or by wrapping with `IrisDashboardCard`.
79
+ */
80
+ declare function IrisDashboardGrid({ columns, gap, minColWidth, style, children, ...rest }: IrisDashboardGridProps): React.ReactElement;
81
+ interface IrisDashboardCardProps extends React.HTMLAttributes<HTMLDivElement> {
82
+ colSpan?: number | 'full';
83
+ rowSpan?: number;
84
+ /** Show the styled card surface (background + border). Default true. */
85
+ surface?: boolean;
86
+ }
87
+ /**
88
+ * A single dashboard grid cell. `colSpan='full'` makes it fill the row.
89
+ */
90
+ declare function IrisDashboardCard({ colSpan, rowSpan, surface, style, children, ...rest }: IrisDashboardCardProps): React.ReactElement;
91
+
92
+ export { IrisContainer, type IrisContainerMaxWidth, type IrisContainerProps, IrisDashboardCard, type IrisDashboardCardProps, IrisDashboardGrid, type IrisDashboardGridProps, IrisGrid, type IrisGridColumns, type IrisGridProps, IrisHeaderLayout, type IrisHeaderLayoutProps, IrisStack, type IrisStackAlign, type IrisStackDirection, type IrisStackJustify, type IrisStackProps };
@@ -0,0 +1,6 @@
1
+ 'use client'
2
+ export { IrisGrid } from './chunk-SJO74IB3.js';
3
+ export { IrisContainer, IrisDashboardCard, IrisDashboardGrid, IrisStack } from './chunk-ZKBDUWUD.js';
4
+ export { IrisHeaderLayout, IrisSidebarLayout } from './chunk-J5FB2UB2.js';
5
+ //# sourceMappingURL=layouts.js.map
6
+ //# sourceMappingURL=layouts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":";","file":"layouts.js"}