@iris-ui-kit/react 0.2.1 → 0.2.3

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 (52) hide show
  1. package/dist/admin.cjs +34 -27
  2. package/dist/admin.cjs.map +1 -1
  3. package/dist/admin.js +2 -2
  4. package/dist/behaviors.cjs +45 -0
  5. package/dist/behaviors.cjs.map +1 -1
  6. package/dist/behaviors.d.cts +38 -1
  7. package/dist/behaviors.d.ts +38 -1
  8. package/dist/behaviors.js +1 -1
  9. package/dist/{chunk-6BMFMCMQ.js → chunk-6S6MZC5G.js} +11 -4
  10. package/dist/chunk-6S6MZC5G.js.map +1 -0
  11. package/dist/{chunk-SJO74IB3.js → chunk-7ILMMLK6.js} +2 -2
  12. package/dist/chunk-7ILMMLK6.js.map +1 -0
  13. package/dist/{chunk-INEPOSCN.js → chunk-CYQO33XH.js} +3 -6
  14. package/dist/chunk-CYQO33XH.js.map +1 -0
  15. package/dist/{chunk-LXMTXHAS.js → chunk-KRFZ5KL4.js} +28 -28
  16. package/dist/chunk-KRFZ5KL4.js.map +1 -0
  17. package/dist/{chunk-53KFLVIZ.js → chunk-QZJXMCRR.js} +3 -2
  18. package/dist/chunk-QZJXMCRR.js.map +1 -0
  19. package/dist/{chunk-B4RS5WKC.js → chunk-V3KHE2WB.js} +137 -75
  20. package/dist/chunk-V3KHE2WB.js.map +1 -0
  21. package/dist/{chunk-BCL32KSE.js → chunk-ZE4GH2GV.js} +49 -5
  22. package/dist/chunk-ZE4GH2GV.js.map +1 -0
  23. package/dist/data.cjs +1 -0
  24. package/dist/data.cjs.map +1 -1
  25. package/dist/data.d.cts +4 -2
  26. package/dist/data.d.ts +4 -2
  27. package/dist/data.js +1 -1
  28. package/dist/floating.cjs +9 -2
  29. package/dist/floating.cjs.map +1 -1
  30. package/dist/floating.js +1 -1
  31. package/dist/index.cjs +4351 -2142
  32. package/dist/index.cjs.map +1 -1
  33. package/dist/index.d.cts +508 -23
  34. package/dist/index.d.ts +508 -23
  35. package/dist/index.js +3957 -1860
  36. package/dist/index.js.map +1 -1
  37. package/dist/layouts.cjs.map +1 -1
  38. package/dist/layouts.js +1 -1
  39. package/dist/skeletons.cjs +135 -73
  40. package/dist/skeletons.cjs.map +1 -1
  41. package/dist/skeletons.js +1 -1
  42. package/dist/undo.cjs +1 -4
  43. package/dist/undo.cjs.map +1 -1
  44. package/dist/undo.js +1 -1
  45. package/package.json +1 -1
  46. package/dist/chunk-53KFLVIZ.js.map +0 -1
  47. package/dist/chunk-6BMFMCMQ.js.map +0 -1
  48. package/dist/chunk-B4RS5WKC.js.map +0 -1
  49. package/dist/chunk-BCL32KSE.js.map +0 -1
  50. package/dist/chunk-INEPOSCN.js.map +0 -1
  51. package/dist/chunk-LXMTXHAS.js.map +0 -1
  52. package/dist/chunk-SJO74IB3.js.map +0 -1
@@ -8,9 +8,13 @@ import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
8
8
  import { composeEventHandlers } from '@iris-ui-kit/core';
9
9
 
10
10
  var SIZE_MAP = {
11
- sm: { padding: "4px 8px", fontSize: "12px", minHeight: "28px" },
12
- md: { padding: "6px 12px", fontSize: "14px", minHeight: "34px" },
13
- lg: { padding: "8px 12px", fontSize: "16px", minHeight: "40px" }
11
+ sm: { padding: "4px 8px", fontSize: "var(--iris-font-size-xs, 12px)", minHeight: "28px" },
12
+ md: {
13
+ padding: "var(--iris-padding-sm, 6px) var(--iris-padding-md, 12px)",
14
+ fontSize: "var(--iris-font-size-md, 14px)",
15
+ minHeight: "34px"
16
+ },
17
+ lg: { padding: "8px 12px", fontSize: "var(--iris-font-size-lg, 16px)", minHeight: "40px" }
14
18
  };
15
19
  var IrisInput = React4.forwardRef(function IrisInput2({
16
20
  size = "md",
@@ -27,11 +31,11 @@ var IrisInput = React4.forwardRef(function IrisInput2({
27
31
  const [focused, setFocused] = React4.useState(false);
28
32
  const sizeStyles = SIZE_MAP[size];
29
33
  const borderColor = invalid ? "var(--iris-danger)" : focused ? "var(--iris-primary)" : "var(--iris-border)";
30
- const boxShadow = focused ? `0 0 0 3px ${invalid ? "rgba(239, 68, 68, 0.18)" : "rgba(99, 102, 241, 0.18)"}` : "none";
34
+ const boxShadow = focused ? `0 0 0 3px ${invalid ? "color-mix(in srgb, var(--iris-danger) 18%, transparent)" : "color-mix(in srgb, var(--iris-primary) 18%, transparent)"}` : "none";
31
35
  const wrapperStyle = {
32
36
  display: "inline-flex",
33
37
  alignItems: "center",
34
- gap: "6px",
38
+ gap: "var(--iris-space-xs, 8px)",
35
39
  background: "var(--iris-background)",
36
40
  color: "var(--iris-foreground)",
37
41
  border: `1px solid ${borderColor}`,
@@ -124,8 +128,8 @@ var IrisPasswordInput = React4.forwardRef(
124
128
  border: "none",
125
129
  cursor: disabled ? "not-allowed" : "pointer",
126
130
  color: "var(--iris-muted)",
127
- padding: "0 2px",
128
- fontSize: 13,
131
+ padding: "0 var(--iris-space-xxs, 4px)",
132
+ fontSize: "var(--iris-font-size-sm, 13px)",
129
133
  lineHeight: 1
130
134
  },
131
135
  children: visible ? "\u{1F648}" : "\u{1F441}"
@@ -275,8 +279,12 @@ var CSS = `
275
279
  cursor: not-allowed;
276
280
  opacity: 0.6;
277
281
  }
278
- .iris-button[data-iris-button-variant="solid"]:not([disabled]):not([aria-busy="true"]):hover {
279
- filter: brightness(1.08);
282
+ .iris-button[data-iris-button-variant="solid"]:not([disabled]):not([aria-busy="true"]):hover,
283
+ .iris-button[data-iris-button-variant="danger"]:not([disabled]):not([aria-busy="true"]):hover {
284
+ background: color-mix(in srgb, var(--iris-danger) 92%, var(--iris-surface));
285
+ }
286
+ .iris-button:not([disabled]):not([aria-busy="true"]):active {
287
+ transform: scale(0.98);
280
288
  }
281
289
  .iris-button[data-iris-button-variant="outline"]:not([disabled]):not([aria-busy="true"]):hover,
282
290
  .iris-button[data-iris-button-variant="ghost"]:not([disabled]):not([aria-busy="true"]):hover {
@@ -314,9 +322,18 @@ function installButtonStyles() {
314
322
  installed = true;
315
323
  }
316
324
  var SIZE_STYLES = {
317
- sm: { padding: "var(--iris-padding-sm) var(--iris-padding-md)", fontSize: "12px" },
318
- md: { padding: "var(--iris-padding-sm) var(--iris-padding-lg)", fontSize: "14px" },
319
- lg: { padding: "var(--iris-padding-md) var(--iris-padding-lg)", fontSize: "16px" }
325
+ sm: {
326
+ padding: "var(--iris-padding-sm) var(--iris-padding-md)",
327
+ fontSize: "var(--iris-font-size-xs, 12px)"
328
+ },
329
+ md: {
330
+ padding: "var(--iris-padding-sm) var(--iris-padding-lg)",
331
+ fontSize: "var(--iris-font-size-md, 14px)"
332
+ },
333
+ lg: {
334
+ padding: "var(--iris-padding-md) var(--iris-padding-lg)",
335
+ fontSize: "var(--iris-font-size-lg, 16px)"
336
+ }
320
337
  };
321
338
  var VARIANT_STYLES = {
322
339
  solid: {
@@ -339,6 +356,11 @@ var VARIANT_STYLES = {
339
356
  color: "var(--iris-primary)",
340
357
  border: "1px solid transparent",
341
358
  textDecoration: "none"
359
+ },
360
+ danger: {
361
+ background: "var(--iris-danger)",
362
+ color: "var(--iris-on-color, #ffffff)",
363
+ border: "1px solid var(--iris-danger)"
342
364
  }
343
365
  };
344
366
  function buildInlineStyle(variant, size) {
@@ -486,7 +508,7 @@ var IrisFormField = React4.forwardRef(
486
508
  {
487
509
  id: hintId,
488
510
  "data-iris-form-field-hint": "",
489
- style: { fontSize: 12, color: "var(--iris-muted)" },
511
+ style: { fontSize: "var(--iris-font-size-xs, 12px)", color: "var(--iris-muted)" },
490
512
  children: hint
491
513
  }
492
514
  ) : null,
@@ -496,7 +518,7 @@ var IrisFormField = React4.forwardRef(
496
518
  id: errorId,
497
519
  "data-iris-form-field-error": "",
498
520
  role: "alert",
499
- style: { fontSize: 12, color: "var(--iris-danger)" },
521
+ style: { fontSize: "var(--iris-font-size-xs, 12px)", color: "var(--iris-danger)" },
500
522
  children: error
501
523
  }
502
524
  ) : null
@@ -506,7 +528,7 @@ var IrisFormField = React4.forwardRef(
506
528
  }
507
529
  );
508
530
  var TONE_TO_VAR = {
509
- info: "--iris-primary",
531
+ info: "--iris-info",
510
532
  success: "--iris-success",
511
533
  warning: "--iris-warning",
512
534
  danger: "--iris-danger"
@@ -587,7 +609,7 @@ function IrisAlert({
587
609
  border: "none",
588
610
  cursor: "pointer",
589
611
  color: "var(--iris-muted)",
590
- fontSize: 16,
612
+ fontSize: "var(--iris-font-size-lg, 16px)",
591
613
  padding: 0,
592
614
  lineHeight: 1,
593
615
  flexShrink: 0
@@ -666,9 +688,9 @@ function IrisDivider({
666
688
  gap: 8,
667
689
  margin: `${SPACING_MAP[spacing]} 0`,
668
690
  color: "var(--iris-muted)",
669
- fontSize: 12,
691
+ fontSize: "var(--iris-font-size-xs, 12px)",
670
692
  textTransform: "uppercase",
671
- letterSpacing: "0.04em",
693
+ letterSpacing: "var(--iris-letter-spacing-wide, 0.04em)",
672
694
  ...style
673
695
  },
674
696
  children: [
@@ -730,18 +752,28 @@ function IrisLoginTemplate({
730
752
  border: "1px solid var(--iris-border)",
731
753
  borderRadius: "var(--iris-radius-lg, 8px)",
732
754
  padding: 32,
733
- boxShadow: "0 6px 20px -8px rgba(0, 0, 0, 0.16)"
755
+ boxShadow: "var(--iris-shadow-md)"
734
756
  },
735
757
  children: /* @__PURE__ */ jsxs(IrisStack, { spacing: "lg", children: [
736
758
  header ?? /* @__PURE__ */ jsxs("div", { style: { textAlign: "center" }, children: [
737
- /* @__PURE__ */ jsx("h1", { style: { margin: "0 0 4px 0", fontSize: 22, fontWeight: 700 }, children: title }),
759
+ /* @__PURE__ */ jsx(
760
+ "h1",
761
+ {
762
+ style: {
763
+ margin: "0 0 4px 0",
764
+ fontSize: "var(--iris-font-size-2xl, 20px)",
765
+ fontWeight: 700
766
+ },
767
+ children: title
768
+ }
769
+ ),
738
770
  description ? /* @__PURE__ */ jsx(
739
771
  "p",
740
772
  {
741
773
  style: {
742
774
  margin: 0,
743
775
  color: "var(--iris-muted)",
744
- fontSize: 14
776
+ fontSize: "var(--iris-font-size-md, 14px)"
745
777
  },
746
778
  children: description
747
779
  }
@@ -848,7 +880,7 @@ function IrisDashboardTemplate({
848
880
  {
849
881
  style: {
850
882
  padding: "8px 12px",
851
- fontSize: 14,
883
+ fontSize: "var(--iris-font-size-md, 14px)",
852
884
  fontWeight: 600,
853
885
  color: "var(--iris-foreground)",
854
886
  opacity: state.collapsed ? 0 : 1,
@@ -859,60 +891,81 @@ function IrisDashboardTemplate({
859
891
  children: sidebarTitle
860
892
  }
861
893
  ) : null,
862
- /* @__PURE__ */ jsx("nav", { "aria-label": "Primary", style: { display: "flex", flexDirection: "column", gap: 2 }, children: nav.map((item) => {
863
- const isActive = item.id === activeId;
864
- return /* @__PURE__ */ jsxs(
865
- "button",
866
- {
867
- type: "button",
868
- "data-iris-dashboard-nav-item": item.id,
869
- "data-iris-dashboard-nav-active": isActive ? "true" : void 0,
870
- onClick: () => onActiveIdChange?.(item.id),
871
- style: {
872
- display: "flex",
873
- alignItems: "center",
874
- gap: 10,
875
- padding: "8px 12px",
876
- background: isActive ? "var(--iris-primary)" : "transparent",
877
- color: isActive ? "var(--iris-primary-foreground, #fff)" : "var(--iris-foreground)",
878
- border: "none",
879
- borderRadius: "var(--iris-radius-sm, 4px)",
880
- cursor: "pointer",
881
- fontSize: 14,
882
- fontFamily: "inherit",
883
- textAlign: "start",
884
- outline: "none"
885
- },
886
- children: [
887
- item.icon ? /* @__PURE__ */ jsx(
888
- "span",
889
- {
890
- "aria-hidden": "true",
891
- style: { width: 16, display: "inline-flex", justifyContent: "center" },
892
- children: item.icon
893
- }
894
- ) : null,
895
- /* @__PURE__ */ jsx(
896
- "span",
897
- {
898
- style: {
899
- opacity: state.collapsed ? 0 : 1,
900
- transition: "opacity 120ms ease",
901
- whiteSpace: "nowrap"
902
- },
903
- children: item.label
904
- }
905
- )
906
- ]
894
+ /* @__PURE__ */ jsx(
895
+ "nav",
896
+ {
897
+ "aria-label": "Primary",
898
+ style: {
899
+ display: "flex",
900
+ flexDirection: "column",
901
+ gap: "var(--iris-space-xxs, 4px)"
907
902
  },
908
- item.id
909
- );
910
- }) })
903
+ children: nav.map((item) => {
904
+ const isActive = item.id === activeId;
905
+ return /* @__PURE__ */ jsxs(
906
+ "button",
907
+ {
908
+ type: "button",
909
+ "data-iris-dashboard-nav-item": item.id,
910
+ "data-iris-dashboard-nav-active": isActive ? "true" : void 0,
911
+ onClick: () => onActiveIdChange?.(item.id),
912
+ style: {
913
+ display: "flex",
914
+ alignItems: "center",
915
+ gap: "var(--iris-space-sm, 12px)",
916
+ padding: "8px 12px",
917
+ background: isActive ? "var(--iris-primary)" : "transparent",
918
+ color: isActive ? "var(--iris-primary-foreground, #fff)" : "var(--iris-foreground)",
919
+ border: "none",
920
+ borderRadius: "var(--iris-radius-sm, 4px)",
921
+ cursor: "pointer",
922
+ fontSize: "var(--iris-font-size-md, 14px)",
923
+ fontFamily: "inherit",
924
+ textAlign: "start",
925
+ outline: "none"
926
+ },
927
+ children: [
928
+ item.icon ? /* @__PURE__ */ jsx(
929
+ "span",
930
+ {
931
+ "aria-hidden": "true",
932
+ style: { width: 16, display: "inline-flex", justifyContent: "center" },
933
+ children: item.icon
934
+ }
935
+ ) : null,
936
+ /* @__PURE__ */ jsx(
937
+ "span",
938
+ {
939
+ style: {
940
+ opacity: state.collapsed ? 0 : 1,
941
+ transition: "opacity 120ms ease",
942
+ whiteSpace: "nowrap"
943
+ },
944
+ children: item.label
945
+ }
946
+ )
947
+ ]
948
+ },
949
+ item.id
950
+ );
951
+ })
952
+ }
953
+ )
911
954
  ] }),
912
955
  children: /* @__PURE__ */ jsx(
913
956
  IrisHeaderLayout,
914
957
  {
915
- header: header ?? /* @__PURE__ */ jsx("div", { style: { padding: "12px 20px", fontSize: 16, fontWeight: 600 }, children: title }),
958
+ header: header ?? /* @__PURE__ */ jsx(
959
+ "div",
960
+ {
961
+ style: {
962
+ padding: "12px 20px",
963
+ fontSize: "var(--iris-font-size-lg, 16px)",
964
+ fontWeight: 600
965
+ },
966
+ children: title
967
+ }
968
+ ),
916
969
  children: children ?? /* @__PURE__ */ jsx("div", { style: { padding: 20 }, children: /* @__PURE__ */ jsx(IrisDashboardGrid, { columns: 12, gap: 16, children: cards.map((card) => /* @__PURE__ */ jsxs(
917
970
  IrisDashboardCard,
918
971
  {
@@ -925,14 +978,23 @@ function IrisDashboardTemplate({
925
978
  {
926
979
  style: {
927
980
  margin: "0 0 8px 0",
928
- fontSize: 14,
981
+ fontSize: "var(--iris-font-size-md, 14px)",
929
982
  fontWeight: 600,
930
983
  color: "var(--iris-foreground)"
931
984
  },
932
985
  children: card.title
933
986
  }
934
987
  ),
935
- cardSlots?.[card.id] !== void 0 ? cardSlots[card.id] : card.body ? /* @__PURE__ */ jsx("div", { style: { fontSize: 13, color: "var(--iris-muted)" }, children: card.body }) : null
988
+ cardSlots?.[card.id] !== void 0 ? cardSlots[card.id] : card.body ? /* @__PURE__ */ jsx(
989
+ "div",
990
+ {
991
+ style: {
992
+ fontSize: "var(--iris-font-size-sm, 13px)",
993
+ color: "var(--iris-muted)"
994
+ },
995
+ children: card.body
996
+ }
997
+ ) : null
936
998
  ]
937
999
  },
938
1000
  card.id
@@ -946,5 +1008,5 @@ function IrisDashboardTemplate({
946
1008
  }
947
1009
 
948
1010
  export { IrisAlert, IrisButton, IrisCheckbox, IrisDashboardTemplate, IrisDivider, IrisFormField, IrisInput, IrisLoginTemplate, IrisPasswordInput };
949
- //# sourceMappingURL=chunk-B4RS5WKC.js.map
950
- //# sourceMappingURL=chunk-B4RS5WKC.js.map
1011
+ //# sourceMappingURL=chunk-V3KHE2WB.js.map
1012
+ //# sourceMappingURL=chunk-V3KHE2WB.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/primitives/input/Input.tsx","../src/primitives/password-input/PasswordInput.tsx","../src/primitives/checkbox/Checkbox.tsx","../src/primitives/button/styles.ts","../src/primitives/button/Button.tsx","../src/primitives/form-field/FormField.tsx","../src/primitives/alert/Alert.tsx","../src/primitives/divider/Divider.tsx","../src/skeletons/LoginTemplate.tsx","../src/skeletons/DashboardTemplate.tsx"],"names":["React","IrisInput","React2","IrisPasswordInput","jsx","jsxs","React3","IrisCheckbox","useEffect","IrisFormField","React5","React6","React7"],"mappings":"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","file":"chunk-V3KHE2WB.js","sourcesContent":["import * as React from 'react'\n\nexport type IrisInputSize = 'sm' | 'md' | 'lg'\nexport type IrisInputType = 'text' | 'password' | 'email' | 'number' | 'search' | 'tel' | 'url'\n\nconst SIZE_MAP: Record<IrisInputSize, { padding: string; fontSize: string; minHeight: string }> = {\n sm: { padding: '4px 8px', fontSize: 'var(--iris-font-size-xs, 12px)', minHeight: '28px' },\n md: {\n padding: 'var(--iris-padding-sm, 6px) var(--iris-padding-md, 12px)',\n fontSize: 'var(--iris-font-size-md, 14px)',\n minHeight: '34px',\n },\n lg: { padding: '8px 12px', fontSize: 'var(--iris-font-size-lg, 16px)', minHeight: '40px' },\n}\n\nexport interface IrisInputProps extends Omit<\n React.InputHTMLAttributes<HTMLInputElement>,\n 'size' | 'type' | 'prefix'\n> {\n size?: IrisInputSize\n type?: IrisInputType\n invalid?: boolean\n /** Forwarded as aria-describedby. */\n ariaDescribedby?: string\n prefix?: React.ReactNode\n suffix?: React.ReactNode\n}\n\n/**\n * Single-line text input with size variants, an `invalid` state, and optional\n * `prefix`/`suffix` adornments. Forwards its ref to the native `<input>`.\n *\n * @example\n * <IrisInput value={name} onChange={(e) => setName(e.target.value)} placeholder=\"Name\" />\n */\nexport const IrisInput = React.forwardRef<HTMLInputElement, IrisInputProps>(function IrisInput(\n {\n size = 'md',\n type = 'text',\n invalid = false,\n ariaDescribedby,\n prefix,\n suffix,\n style,\n onFocus,\n onBlur,\n ...rest\n },\n ref,\n) {\n const [focused, setFocused] = React.useState(false)\n const sizeStyles = SIZE_MAP[size]\n\n const borderColor = invalid\n ? 'var(--iris-danger)'\n : focused\n ? 'var(--iris-primary)'\n : 'var(--iris-border)'\n const boxShadow = focused\n ? `0 0 0 3px ${invalid ? 'color-mix(in srgb, var(--iris-danger) 18%, transparent)' : 'color-mix(in srgb, var(--iris-primary) 18%, transparent)'}`\n : 'none'\n\n const wrapperStyle: React.CSSProperties = {\n display: 'inline-flex',\n alignItems: 'center',\n gap: 'var(--iris-space-xs, 8px)',\n background: 'var(--iris-background)',\n color: 'var(--iris-foreground)',\n border: `1px solid ${borderColor}`,\n borderRadius: 'var(--iris-radius-md, 6px)',\n cursor: rest.disabled ? 'not-allowed' : 'text',\n opacity: rest.disabled ? 0.6 : 1,\n transition: 'border-color 120ms ease, box-shadow 120ms ease',\n boxShadow,\n padding: sizeStyles.padding,\n minHeight: sizeStyles.minHeight,\n fontSize: sizeStyles.fontSize,\n ...style,\n }\n\n const inputStyle: React.CSSProperties = {\n flex: 1,\n minWidth: 0,\n border: 'none',\n outline: 'none',\n background: 'transparent',\n color: 'inherit',\n fontFamily: 'inherit',\n fontSize: 'inherit',\n padding: 0,\n }\n\n return (\n <label\n data-iris-input=\"\"\n data-iris-input-size={size}\n data-state={invalid ? 'invalid' : focused ? 'focused' : 'idle'}\n style={wrapperStyle}\n >\n {prefix ? (\n <span\n data-iris-input-prefix=\"\"\n style={{ display: 'inline-flex', alignItems: 'center', color: 'var(--iris-muted)' }}\n >\n {prefix}\n </span>\n ) : null}\n <input\n {...rest}\n ref={ref}\n type={type}\n aria-invalid={invalid ? 'true' : undefined}\n aria-describedby={ariaDescribedby}\n style={inputStyle}\n onFocus={(e) => {\n setFocused(true)\n onFocus?.(e)\n }}\n onBlur={(e) => {\n setFocused(false)\n onBlur?.(e)\n }}\n />\n {suffix ? (\n <span\n data-iris-input-suffix=\"\"\n style={{ display: 'inline-flex', alignItems: 'center', color: 'var(--iris-muted)' }}\n >\n {suffix}\n </span>\n ) : null}\n </label>\n )\n})\n","import * as React from 'react'\nimport { useI18n } from '../../i18n'\nimport { IrisInput, type IrisInputProps } from '../input/Input'\n\nexport interface IrisPasswordInputProps extends Omit<\n IrisInputProps,\n 'type' | 'prefix' | 'suffix' | 'children'\n> {\n /** Allow toggling visibility. Default true. */\n showToggle?: boolean\n /** Custom suffix slot (rendered before the toggle). */\n suffix?: React.ReactNode\n /** Custom prefix slot. */\n prefix?: React.ReactNode\n}\n\n/** React port of {@link import('@iris-ui-kit/vue').IrisPasswordInput}. */\nexport const IrisPasswordInput = React.forwardRef<HTMLInputElement, IrisPasswordInputProps>(\n function IrisPasswordInput(\n { showToggle = true, suffix, prefix, disabled, readOnly, ...rest },\n ref,\n ) {\n const { t } = useI18n()\n const [visible, setVisible] = React.useState(false)\n const toggle = () => {\n if (disabled || readOnly) return\n setVisible((v) => !v)\n }\n\n const toggleBtn = showToggle ? (\n <button\n type=\"button\"\n data-iris-password-input-toggle=\"\"\n aria-label={visible ? t('passwordInput.hide') : t('passwordInput.show')}\n aria-pressed={visible ? 'true' : 'false'}\n onClick={toggle}\n style={{\n background: 'transparent',\n border: 'none',\n cursor: disabled ? 'not-allowed' : 'pointer',\n color: 'var(--iris-muted)',\n padding: '0 var(--iris-space-xxs, 4px)',\n fontSize: 'var(--iris-font-size-sm, 13px)',\n lineHeight: 1,\n }}\n >\n {visible ? '🙈' : '👁'}\n </button>\n ) : null\n\n return (\n <IrisInput\n {...rest}\n ref={ref}\n type={visible ? 'text' : 'password'}\n disabled={disabled}\n readOnly={readOnly}\n prefix={prefix}\n suffix={\n <>\n {suffix}\n {toggleBtn}\n </>\n }\n data-iris-password-input=\"\"\n />\n )\n },\n)\n","import * as React from 'react'\n\nexport type IrisCheckboxSize = 'sm' | 'md' | 'lg'\nexport type IrisCheckboxValue = boolean | 'indeterminate'\n\nconst DIM_MAP: Record<IrisCheckboxSize, string> = {\n sm: '14px',\n md: '18px',\n lg: '22px',\n}\n\nexport interface IrisCheckboxProps extends Omit<\n React.InputHTMLAttributes<HTMLInputElement>,\n 'type' | 'size' | 'value' | 'checked' | 'defaultChecked' | 'onChange'\n> {\n /** `true`, `false`, or `'indeterminate'`. */\n checked?: IrisCheckboxValue\n defaultChecked?: IrisCheckboxValue\n onChange?: (next: boolean, event: React.ChangeEvent<HTMLInputElement>) => void\n size?: IrisCheckboxSize\n invalid?: boolean\n ariaDescribedby?: string\n /** Label content rendered next to the box. */\n children?: React.ReactNode\n}\n\n/**\n * Tri-state checkbox supporting `true`, `false`, and `'indeterminate'`, in both\n * controlled (`checked`) and uncontrolled (`defaultChecked`) modes.\n *\n * @example\n * <IrisCheckbox checked={agreed} onChange={(next) => setAgreed(next)}>\n * I agree to the terms\n * </IrisCheckbox>\n */\nexport const IrisCheckbox = React.forwardRef<HTMLInputElement, IrisCheckboxProps>(\n function IrisCheckbox(\n {\n checked,\n defaultChecked = false,\n onChange,\n size = 'md',\n disabled = false,\n invalid = false,\n ariaDescribedby,\n children,\n style,\n ...rest\n },\n ref,\n ) {\n const [internalChecked, setInternalChecked] = React.useState<IrisCheckboxValue>(defaultChecked)\n const isControlled = checked !== undefined\n const value: IrisCheckboxValue = isControlled ? (checked as IrisCheckboxValue) : internalChecked\n\n const innerRef = React.useRef<HTMLInputElement | null>(null)\n React.useImperativeHandle(ref, () => innerRef.current as HTMLInputElement, [])\n\n // Sync `indeterminate` (it's a DOM-only attribute, not a JSX prop).\n React.useEffect(() => {\n const el = innerRef.current\n if (el) el.indeterminate = value === 'indeterminate'\n }, [value])\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n if (disabled) return\n const next = e.target.checked\n if (!isControlled) setInternalChecked(next)\n onChange?.(next, e)\n }\n\n const state: 'checked' | 'unchecked' | 'indeterminate' =\n value === 'indeterminate' ? 'indeterminate' : value ? 'checked' : 'unchecked'\n\n const dim = DIM_MAP[size]\n\n const boxStyle: React.CSSProperties = {\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: dim,\n height: dim,\n borderRadius: 'var(--iris-radius-sm, 4px)',\n border: `1px solid ${state === 'unchecked' ? 'var(--iris-border)' : 'var(--iris-primary)'}`,\n background: state === 'unchecked' ? 'var(--iris-background)' : 'var(--iris-primary)',\n color: 'var(--iris-primary-foreground, #fff)',\n cursor: disabled ? 'not-allowed' : 'pointer',\n opacity: disabled ? 0.6 : 1,\n transition: 'background-color 120ms ease, border-color 120ms ease',\n flexShrink: 0,\n }\n\n const indicator = state === 'checked' ? '✓' : state === 'indeterminate' ? '—' : null\n\n return (\n <label\n data-iris-checkbox=\"\"\n data-iris-checkbox-size={size}\n data-state={state}\n style={{\n display: 'inline-flex',\n alignItems: 'center',\n gap: 8,\n cursor: disabled ? 'not-allowed' : 'pointer',\n userSelect: 'none',\n ...style,\n }}\n >\n <input\n {...rest}\n ref={innerRef}\n type=\"checkbox\"\n checked={value === true}\n disabled={disabled}\n aria-checked={\n state === 'indeterminate' ? 'mixed' : state === 'checked' ? 'true' : 'false'\n }\n aria-describedby={ariaDescribedby}\n aria-invalid={invalid ? 'true' : undefined}\n onChange={handleChange}\n style={{\n position: 'absolute',\n opacity: 0,\n width: 0,\n height: 0,\n pointerEvents: 'none',\n }}\n />\n <span aria-hidden=\"true\" style={boxStyle}>\n {indicator}\n </span>\n {children}\n </label>\n )\n },\n)\n","/**\n * Singleton stylesheet for the React `IrisButton`. Functionally identical to\n * the one in `@iris-ui-kit/vue` — both adapters end up writing the same DOM with\n * the same selectors, so the same CSS works. (Were we to ship both adapters\n * on the same page, the second installation would no-op because the\n * `<style id>` is shared.)\n */\nconst STYLE_ID = 'iris-button-styles'\n\nconst CSS = `\n.iris-button {\n cursor: pointer;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: var(--iris-gap-sm, 4px);\n font-family: inherit;\n font-weight: 500;\n line-height: 1.2;\n border-radius: var(--iris-radius-md, 6px);\n white-space: nowrap;\n user-select: none;\n position: relative;\n transition:\n background-color 120ms ease,\n border-color 120ms ease,\n color 120ms ease,\n filter 120ms ease;\n}\n.iris-button:focus-visible {\n outline: 2px solid var(--iris-primary);\n outline-offset: 2px;\n}\n.iris-button[disabled],\n.iris-button[aria-busy=\"true\"] {\n cursor: not-allowed;\n opacity: 0.6;\n}\n.iris-button[data-iris-button-variant=\"solid\"]:not([disabled]):not([aria-busy=\"true\"]):hover,\n.iris-button[data-iris-button-variant=\"danger\"]:not([disabled]):not([aria-busy=\"true\"]):hover {\n background: color-mix(in srgb, var(--iris-danger) 92%, var(--iris-surface));\n}\n.iris-button:not([disabled]):not([aria-busy=\"true\"]):active {\n transform: scale(0.98);\n}\n.iris-button[data-iris-button-variant=\"outline\"]:not([disabled]):not([aria-busy=\"true\"]):hover,\n.iris-button[data-iris-button-variant=\"ghost\"]:not([disabled]):not([aria-busy=\"true\"]):hover {\n background-color: var(--iris-surface-hover);\n}\n.iris-button[data-iris-button-variant=\"link\"]:not([disabled]):not([aria-busy=\"true\"]):hover {\n text-decoration: underline;\n}\n.iris-button-leading {\n display: inline-flex;\n align-items: center;\n}\n.iris-button-spinner {\n width: 1em;\n height: 1em;\n display: inline-block;\n animation: iris-button-spin 0.7s linear infinite;\n}\n@keyframes iris-button-spin {\n to { transform: rotate(360deg); }\n}\n`\n\nlet installed = false\n\nexport function installButtonStyles(): void {\n if (installed) return\n if (typeof document === 'undefined') return\n if (document.getElementById(STYLE_ID)) {\n installed = true\n return\n }\n const style = document.createElement('style')\n style.id = STYLE_ID\n style.textContent = CSS\n document.head.appendChild(style)\n installed = true\n}\n\n/** Test-only reset. */\nexport function __resetButtonStyles(): void {\n installed = false\n if (typeof document === 'undefined') return\n document.getElementById(STYLE_ID)?.remove()\n}\n\nexport const __BUTTON_STYLE_ID = STYLE_ID\n","import {\n Children,\n cloneElement,\n isValidElement,\n useEffect,\n type ButtonHTMLAttributes,\n type CSSProperties,\n type MouseEvent as ReactMouseEvent,\n type MouseEventHandler,\n type ReactElement,\n type ReactNode,\n} from 'react'\nimport { composeEventHandlers } from '@iris-ui-kit/core'\nimport type { IrisButtonSize, IrisButtonType, IrisButtonVariant } from './types'\nimport { installButtonStyles } from './styles'\n\ntype StyleMap = Record<string, string>\n\nconst SIZE_STYLES: Record<IrisButtonSize, StyleMap> = {\n sm: {\n padding: 'var(--iris-padding-sm) var(--iris-padding-md)',\n fontSize: 'var(--iris-font-size-xs, 12px)',\n },\n md: {\n padding: 'var(--iris-padding-sm) var(--iris-padding-lg)',\n fontSize: 'var(--iris-font-size-md, 14px)',\n },\n lg: {\n padding: 'var(--iris-padding-md) var(--iris-padding-lg)',\n fontSize: 'var(--iris-font-size-lg, 16px)',\n },\n}\n\nconst VARIANT_STYLES: Record<IrisButtonVariant, StyleMap> = {\n solid: {\n background: 'var(--iris-primary)',\n color: 'var(--iris-primary-foreground)',\n border: '1px solid var(--iris-primary)',\n },\n outline: {\n background: 'transparent',\n color: 'var(--iris-primary)',\n border: '1px solid var(--iris-border)',\n },\n ghost: {\n background: 'transparent',\n color: 'var(--iris-foreground)',\n border: '1px solid transparent',\n },\n link: {\n background: 'transparent',\n color: 'var(--iris-primary)',\n border: '1px solid transparent',\n textDecoration: 'none',\n },\n danger: {\n background: 'var(--iris-danger)',\n color: 'var(--iris-on-color, #ffffff)',\n border: '1px solid var(--iris-danger)',\n },\n}\n\nfunction buildInlineStyle(variant: IrisButtonVariant, size: IrisButtonSize): CSSProperties {\n const base: StyleMap = { ...SIZE_STYLES[size], ...VARIANT_STYLES[variant] }\n if (variant === 'link') base.padding = '0'\n return base as CSSProperties\n}\n\nfunction Spinner() {\n return (\n <svg className=\"iris-button-spinner\" viewBox=\"0 0 24 24\" fill=\"none\" aria-hidden=\"true\">\n <circle cx=\"12\" cy=\"12\" r=\"10\" stroke=\"currentColor\" strokeOpacity=\"0.25\" strokeWidth=\"3\" />\n <path\n d=\"M22 12a10 10 0 0 1-10 10\"\n stroke=\"currentColor\"\n strokeWidth=\"3\"\n strokeLinecap=\"round\"\n />\n </svg>\n )\n}\n\nexport interface IrisButtonProps extends Omit<\n ButtonHTMLAttributes<HTMLButtonElement>,\n 'type' | 'disabled' | 'onClick' | 'className' | 'style' | 'children'\n> {\n variant?: IrisButtonVariant\n size?: IrisButtonSize\n disabled?: boolean\n loading?: boolean\n type?: IrisButtonType\n asChild?: boolean\n leading?: ReactNode\n children?: ReactNode\n className?: string\n style?: CSSProperties\n onClick?: MouseEventHandler<HTMLElement>\n}\n\n/**\n * Primary action button. Supports four variants (`solid`, `outline`, `ghost`,\n * `link`) and three sizes (`sm`, `md`, `lg`). Each variant is styled via\n * CSS custom properties (`var(--iris-primary)`, `var(--iris-border)` etc.)\n * so the button automatically adapts to the active theme/skin.\n *\n * When `loading` is true a spinner replaces the leading icon and clicks are\n * suppressed. Pass `asChild` to delegate rendering to a single child element\n * (e.g. `<IrisButton asChild><a href=\"…\">link</a></IrisButton>`).\n *\n * All unlisted HTML attributes (`aria-*`, `data-*`, `id`, etc.) are forwarded\n * to the root `<button>` element via `{...rest}`.\n *\n * @example\n * <IrisButton variant=\"solid\" onClick={() => save()}>Save</IrisButton>\n *\n * @example\n * <IrisButton variant=\"outline\" size=\"sm\" loading>Processing</IrisButton>\n *\n * @example\n * <IrisButton asChild><a href=\"/dashboard\">Dashboard</a></IrisButton>\n */\nexport function IrisButton({\n variant = 'solid',\n size = 'md',\n disabled = false,\n loading = false,\n type = 'button',\n asChild = false,\n leading,\n children,\n className,\n style,\n onClick,\n ...rest\n}: IrisButtonProps) {\n useEffect(() => {\n installButtonStyles()\n }, [])\n\n const isInteractive = !disabled && !loading\n\n const handleClick = (event: ReactMouseEvent<HTMLElement>) => {\n if (!isInteractive) {\n event.preventDefault()\n event.stopPropagation()\n return\n }\n onClick?.(event)\n }\n\n const baseProps = {\n className: ['iris-button', className].filter(Boolean).join(' '),\n 'data-iris-button-variant': variant,\n 'data-iris-button-size': size,\n 'aria-disabled': disabled ? ('true' as const) : undefined,\n 'aria-busy': loading ? ('true' as const) : undefined,\n style: { ...buildInlineStyle(variant, size), ...(style ?? {}) },\n }\n\n if (asChild) {\n const only = Children.only(children) as ReactElement | undefined\n if (!only || !isValidElement(only)) {\n if (typeof process === 'undefined' || process.env?.NODE_ENV !== 'production') {\n console.warn('[iris-ui] IrisButton: as-child requires a single React element child')\n }\n return null\n }\n const childProps = only.props as {\n className?: string\n style?: CSSProperties\n onClick?: MouseEventHandler<HTMLElement>\n }\n return cloneElement(only, {\n ...rest,\n ...baseProps,\n className: [baseProps.className, childProps.className].filter(Boolean).join(' '),\n style: { ...baseProps.style, ...(childProps.style ?? {}) },\n onClick: composeEventHandlers(\n handleClick as (e: ReactMouseEvent<HTMLElement>) => void,\n (childProps.onClick ?? (() => {})) as (e: ReactMouseEvent<HTMLElement>) => void,\n ),\n ...(isInteractive ? {} : { disabled: true }),\n } as Record<string, unknown>)\n }\n\n return (\n <button {...rest} type={type} disabled={!isInteractive} onClick={handleClick} {...baseProps}>\n {(loading || leading) && (\n <span className=\"iris-button-leading\">{loading ? <Spinner /> : leading}</span>\n )}\n {children}\n </button>\n )\n}\n","import * as React from 'react'\n\nexport interface IrisFormFieldProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'children'> {\n label?: string\n hint?: string\n error?: string\n required?: boolean\n /** Override the auto-generated control id. */\n labelFor?: string\n /** Visual size of the label. */\n size?: 'sm' | 'md'\n children?: React.ReactNode\n}\n\ntype InjectableProps = {\n id?: string\n invalid?: boolean\n ariaDescribedby?: string\n}\n\n/**\n * Form-field wrapper that handles the label / hint / error trio with the\n * right a11y plumbing. Non-invasive wrapper around any Iris input primitive\n * (`IrisInput`, `IrisTextarea`, `IrisNumberInput`, `IrisSwitch`, `IrisCheckbox`,\n * `IrisPasswordInput`, …): locates the first valid React element in `children`\n * and clones it with the generated `id`, `aria-describedby`, and `invalid`.\n *\n * ```tsx\n * <IrisFormField label=\"Email\" error={errors.email} hint=\"We never share it.\">\n * <IrisInput value={email} onChange={setEmail} />\n * </IrisFormField>\n * ```\n */\nexport const IrisFormField = React.forwardRef<HTMLDivElement, IrisFormFieldProps>(\n function IrisFormField(\n { label, hint, error, required = false, labelFor, size = 'md', style, children, ...rest },\n ref,\n ) {\n const generated = React.useId()\n const controlId = labelFor || `${generated}-control`\n const hintId = `${generated}-hint`\n const errorId = `${generated}-error`\n\n const describedBy = React.useMemo(() => {\n const ids: string[] = []\n if (hint && !error) ids.push(hintId)\n if (error) ids.push(errorId)\n return ids.length > 0 ? ids.join(' ') : undefined\n }, [hint, error, hintId, errorId])\n\n let injected = false\n const decorated = React.Children.map(children, (child) => {\n if (!injected && React.isValidElement(child)) {\n injected = true\n const injectedProps: InjectableProps = {\n id: controlId,\n invalid: error ? true : undefined,\n ariaDescribedby: describedBy,\n }\n return React.cloneElement(child, injectedProps as Partial<unknown> as React.Attributes)\n }\n return child\n })\n\n const labelStyle: React.CSSProperties = {\n fontSize: size === 'sm' ? '12px' : '14px',\n fontWeight: 500,\n color: error ? 'var(--iris-danger)' : 'var(--iris-foreground)',\n display: 'inline-flex',\n alignItems: 'center',\n gap: '4px',\n }\n\n return (\n <div\n {...rest}\n ref={ref}\n data-iris-form-field=\"\"\n data-iris-form-field-state={error ? 'invalid' : 'valid'}\n style={{\n display: 'flex',\n flexDirection: 'column',\n gap: '4px',\n ...style,\n }}\n >\n {label ? (\n <label htmlFor={controlId} data-iris-form-field-label=\"\" style={labelStyle}>\n {label}\n {required ? (\n <span\n aria-hidden=\"true\"\n data-iris-form-field-required=\"\"\n style={{ color: 'var(--iris-danger)' }}\n >\n *\n </span>\n ) : null}\n </label>\n ) : null}\n {decorated}\n {hint && !error ? (\n <div\n id={hintId}\n data-iris-form-field-hint=\"\"\n style={{ fontSize: 'var(--iris-font-size-xs, 12px)', color: 'var(--iris-muted)' }}\n >\n {hint}\n </div>\n ) : null}\n {error ? (\n <div\n id={errorId}\n data-iris-form-field-error=\"\"\n role=\"alert\"\n style={{ fontSize: 'var(--iris-font-size-xs, 12px)', color: 'var(--iris-danger)' }}\n >\n {error}\n </div>\n ) : null}\n </div>\n )\n },\n)\n","import * as React from 'react'\nimport { useI18n } from '../../i18n'\n\nexport type IrisAlertTone = 'info' | 'success' | 'warning' | 'danger'\n\nconst TONE_TO_VAR: Record<IrisAlertTone, string> = {\n info: '--iris-info',\n success: '--iris-success',\n warning: '--iris-warning',\n danger: '--iris-danger',\n}\n\nexport interface IrisAlertProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'title'> {\n tone?: IrisAlertTone\n title?: React.ReactNode\n closable?: boolean\n open?: boolean\n onClose?: () => void\n icon?: React.ReactNode\n children?: React.ReactNode\n}\n\n/**\n * React port of {@link import('@iris-ui-kit/vue').IrisAlert}.\n *\n * @example\n * <IrisAlert tone=\"warning\" title=\"Heads up\" closable onClose={dismiss}>\n * Your session expires soon.\n * </IrisAlert>\n */\nexport function IrisAlert({\n tone = 'info',\n title,\n closable = false,\n open,\n onClose,\n icon,\n children,\n style,\n ...rest\n}: IrisAlertProps): React.ReactElement | null {\n const { t } = useI18n()\n const [internalOpen, setInternalOpen] = React.useState(true)\n React.useEffect(() => {\n if (open !== undefined) setInternalOpen(open)\n }, [open])\n\n const isOpen = open !== undefined ? open : internalOpen\n if (!isOpen) return null\n\n const tonalVar = `var(${TONE_TO_VAR[tone]})`\n\n const handleClose = () => {\n if (open === undefined) setInternalOpen(false)\n onClose?.()\n }\n\n return (\n <div\n {...rest}\n role={tone === 'danger' || tone === 'warning' ? 'alert' : 'status'}\n data-iris-alert=\"\"\n data-iris-alert-tone={tone}\n style={{\n display: 'flex',\n gap: 'var(--iris-gap-md, 12px)',\n padding: 'var(--iris-padding-md, 12px)',\n borderRadius: 'var(--iris-radius-md, 6px)',\n border: `1px solid ${tonalVar}`,\n // `backgroundColor` is the precomputed fallback under color-mix (engines\n // without it); the `background` shorthand overrides with the exact mix.\n backgroundColor: `var(${TONE_TO_VAR[tone]}-subtle)`,\n background: `color-mix(in srgb, ${tonalVar} 10%, var(--iris-background))`,\n color: 'var(--iris-foreground)',\n alignItems: 'flex-start',\n ...style,\n }}\n >\n {icon ? (\n <span\n data-iris-alert-icon=\"\"\n style={{ color: tonalVar, flexShrink: 0, display: 'inline-flex' }}\n >\n {icon}\n </span>\n ) : null}\n <div data-iris-alert-body=\"\" style={{ flex: 1, minWidth: 0 }}>\n {title ? (\n <div\n data-iris-alert-title=\"\"\n style={{ fontWeight: 600, marginBottom: 4, color: tonalVar }}\n >\n {title}\n </div>\n ) : null}\n <div data-iris-alert-content=\"\">{children}</div>\n </div>\n {closable ? (\n <button\n type=\"button\"\n data-iris-alert-close=\"\"\n aria-label={t('alert.close')}\n onClick={handleClose}\n style={{\n background: 'transparent',\n border: 'none',\n cursor: 'pointer',\n color: 'var(--iris-muted)',\n fontSize: 'var(--iris-font-size-lg, 16px)',\n padding: 0,\n lineHeight: 1,\n flexShrink: 0,\n }}\n >\n ✕\n </button>\n ) : null}\n </div>\n )\n}\n","import * as React from 'react'\n\nexport type IrisDividerOrientation = 'horizontal' | 'vertical'\nexport type IrisDividerSpacing = 'sm' | 'md' | 'lg'\n\nconst SPACING_MAP: Record<IrisDividerSpacing, string> = {\n sm: '8px',\n md: '16px',\n lg: '24px',\n}\n\nexport interface IrisDividerProps extends Omit<React.HTMLAttributes<HTMLElement>, 'children'> {\n orientation?: IrisDividerOrientation\n label?: React.ReactNode\n spacing?: IrisDividerSpacing\n children?: React.ReactNode\n}\n\n/** React port of {@link import('@iris-ui-kit/vue').IrisDivider}. */\nexport function IrisDivider({\n orientation = 'horizontal',\n label,\n spacing = 'md',\n children,\n style,\n ...rest\n}: IrisDividerProps): React.ReactElement {\n const isHorizontal = orientation === 'horizontal'\n const hasLabel = Boolean(label || children)\n\n if (isHorizontal && !hasLabel) {\n return (\n <hr\n {...rest}\n data-iris-divider=\"\"\n data-iris-divider-orientation=\"horizontal\"\n style={{\n border: 'none',\n borderTop: '1px solid var(--iris-border)',\n margin: `${SPACING_MAP[spacing]} 0`,\n width: '100%',\n ...style,\n }}\n />\n )\n }\n\n if (!isHorizontal) {\n return (\n <div\n {...rest}\n role=\"separator\"\n aria-orientation=\"vertical\"\n data-iris-divider=\"\"\n data-iris-divider-orientation=\"vertical\"\n style={{\n display: 'inline-block',\n width: 1,\n alignSelf: 'stretch',\n background: 'var(--iris-border)',\n margin: `0 ${SPACING_MAP[spacing]}`,\n ...style,\n }}\n />\n )\n }\n\n return (\n <div\n {...rest}\n role=\"separator\"\n aria-orientation=\"horizontal\"\n data-iris-divider=\"\"\n data-iris-divider-orientation=\"horizontal\"\n data-iris-divider-has-label=\"true\"\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: 8,\n margin: `${SPACING_MAP[spacing]} 0`,\n color: 'var(--iris-muted)',\n fontSize: 'var(--iris-font-size-xs, 12px)',\n textTransform: 'uppercase',\n letterSpacing: 'var(--iris-letter-spacing-wide, 0.04em)',\n ...style,\n }}\n >\n <span data-iris-divider-line=\"before\" style={lineStyle} />\n <span data-iris-divider-label=\"\">{children ?? label}</span>\n <span data-iris-divider-line=\"after\" style={lineStyle} />\n </div>\n )\n}\n\nconst lineStyle: React.CSSProperties = {\n flex: 1,\n height: 1,\n background: 'var(--iris-border)',\n}\n","import * as React from 'react'\nimport { IrisStack } from '../layouts/Stack'\nimport { IrisContainer } from '../layouts/Container'\nimport { IrisInput } from '../primitives/input/Input'\nimport { IrisPasswordInput } from '../primitives/password-input/PasswordInput'\nimport { IrisCheckbox } from '../primitives/checkbox/Checkbox'\nimport { IrisButton } from '../primitives/button/Button'\nimport { IrisFormField } from '../primitives/form-field/FormField'\nimport { IrisAlert } from '../primitives/alert/Alert'\nimport { IrisDivider } from '../primitives/divider/Divider'\n\nexport interface IrisLoginSubmitPayload {\n email: string\n password: string\n remember: boolean\n}\n\nexport interface IrisLoginTemplateProps {\n title?: string\n description?: string\n showRemember?: boolean\n error?: string\n submitLabel?: string\n loading?: boolean\n /** Custom header replaces title/description block. */\n header?: React.ReactNode\n /** Slot for \"Forgot password?\" link (rendered next to Remember checkbox). */\n forgot?: React.ReactNode\n /** Content rendered below the form (separated by a divider). */\n footer?: React.ReactNode\n onSubmit?: (payload: IrisLoginSubmitPayload) => void\n style?: React.CSSProperties\n className?: string\n}\n\n/**\n * Layer 4 system skeleton: centered login page composed from Iris primitives.\n */\nexport function IrisLoginTemplate({\n title = 'Sign in',\n description = '',\n showRemember = true,\n error = '',\n submitLabel = 'Sign in',\n loading = false,\n header,\n forgot,\n footer,\n onSubmit,\n style,\n className,\n}: IrisLoginTemplateProps): React.ReactElement {\n const [email, setEmail] = React.useState('')\n const [password, setPassword] = React.useState('')\n const [remember, setRemember] = React.useState(false)\n\n const handleSubmit = (e: React.FormEvent) => {\n e.preventDefault()\n onSubmit?.({ email, password, remember })\n }\n\n return (\n <div\n data-iris-login-template=\"\"\n className={className}\n style={{\n minHeight: '100vh',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n background: 'var(--iris-background)',\n color: 'var(--iris-foreground)',\n padding: 24,\n ...style,\n }}\n >\n <IrisContainer maxWidth=\"420px\" padding={0}>\n <form\n onSubmit={handleSubmit}\n data-iris-login-form=\"\"\n style={{\n background: 'var(--iris-surface)',\n border: '1px solid var(--iris-border)',\n borderRadius: 'var(--iris-radius-lg, 8px)',\n padding: 32,\n boxShadow: 'var(--iris-shadow-md)',\n }}\n >\n <IrisStack spacing=\"lg\">\n {header ?? (\n <div style={{ textAlign: 'center' }}>\n <h1\n style={{\n margin: '0 0 4px 0',\n fontSize: 'var(--iris-font-size-2xl, 20px)',\n fontWeight: 700,\n }}\n >\n {title}\n </h1>\n {description ? (\n <p\n style={{\n margin: 0,\n color: 'var(--iris-muted)',\n fontSize: 'var(--iris-font-size-md, 14px)',\n }}\n >\n {description}\n </p>\n ) : null}\n </div>\n )}\n {error ? <IrisAlert tone=\"danger\" title={error} /> : null}\n <IrisFormField label=\"Email\" required>\n <IrisInput\n type=\"email\"\n value={email}\n onChange={(e) => setEmail(e.target.value)}\n placeholder=\"you@example.com\"\n disabled={loading}\n autoComplete=\"email\"\n />\n </IrisFormField>\n <IrisFormField label=\"Password\" required>\n <IrisPasswordInput\n value={password}\n onChange={(e) => setPassword(e.target.value)}\n placeholder=\"Enter your password\"\n disabled={loading}\n autoComplete=\"current-password\"\n />\n </IrisFormField>\n {showRemember ? (\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n }}\n >\n <IrisCheckbox\n checked={remember}\n onChange={(next) => setRemember(next)}\n disabled={loading}\n >\n Remember me\n </IrisCheckbox>\n {forgot ?? null}\n </div>\n ) : null}\n <IrisButton type=\"submit\" variant=\"solid\" loading={loading} style={{ width: '100%' }}>\n {submitLabel}\n </IrisButton>\n {footer ? (\n <div>\n <IrisDivider spacing=\"md\" label=\"or\" />\n {footer}\n </div>\n ) : null}\n </IrisStack>\n </form>\n </IrisContainer>\n </div>\n )\n}\n","import * as React from 'react'\nimport { IrisSidebarLayout, type IrisSidebarLayoutSidebarState } from '../layouts/SidebarLayout'\nimport { IrisHeaderLayout } from '../layouts/HeaderLayout'\nimport { IrisDashboardGrid, IrisDashboardCard } from '../layouts/DashboardGrid'\nimport { IrisStack } from '../layouts/Stack'\n\nexport interface IrisDashboardNavItem {\n id: string\n label: string\n icon?: React.ReactNode\n}\n\nexport interface IrisDashboardCardSpec {\n id: string\n title: string\n colSpan?: number | 'full'\n rowSpan?: number\n body?: React.ReactNode\n}\n\nexport interface IrisDashboardTemplateProps {\n title?: string\n sidebarTitle?: string\n nav?: IrisDashboardNavItem[]\n activeId?: string\n onActiveIdChange?: (id: string) => void\n cards?: IrisDashboardCardSpec[]\n defaultCollapsed?: boolean\n onCollapsedChange?: (next: boolean) => void\n /** Custom header content (replaces default title). */\n header?: React.ReactNode\n /** Custom sidebar header. Receives `{ collapsed, setCollapsed }`. */\n sidebarHeader?: (state: IrisSidebarLayoutSidebarState) => React.ReactNode\n /** Custom main body content (replaces default grid). */\n children?: React.ReactNode\n /** Per-card body override, keyed by card id. */\n cardSlots?: Record<string, React.ReactNode>\n style?: React.CSSProperties\n className?: string\n}\n\n/**\n * Layer 4 system skeleton: 3-region dashboard shell — sidebar + header +\n * main grid. Built from `IrisSidebarLayout` + `IrisHeaderLayout` +\n * `IrisDashboardGrid`.\n */\nexport function IrisDashboardTemplate({\n title = 'Dashboard',\n sidebarTitle = '',\n nav = [],\n activeId = '',\n onActiveIdChange,\n cards = [],\n defaultCollapsed = false,\n onCollapsedChange,\n header,\n sidebarHeader,\n children,\n cardSlots,\n style,\n className,\n}: IrisDashboardTemplateProps): React.ReactElement {\n const [collapsed, setCollapsed] = React.useState(defaultCollapsed)\n\n const handleCollapsed = (next: boolean) => {\n setCollapsed(next)\n onCollapsedChange?.(next)\n }\n\n return (\n <div\n data-iris-dashboard-template=\"\"\n className={className}\n style={{\n width: '100%',\n height: '100vh',\n background: 'var(--iris-background)',\n color: 'var(--iris-foreground)',\n ...style,\n }}\n >\n <IrisSidebarLayout\n collapsed={collapsed}\n onCollapsedChange={handleCollapsed}\n width={240}\n collapsedWidth={64}\n sidebar={(state) => (\n <IrisStack spacing=\"sm\" style={{ padding: 12 }}>\n {sidebarHeader ? (\n sidebarHeader(state)\n ) : sidebarTitle ? (\n <div\n style={{\n padding: '8px 12px',\n fontSize: 'var(--iris-font-size-md, 14px)',\n fontWeight: 600,\n color: 'var(--iris-foreground)',\n opacity: state.collapsed ? 0 : 1,\n transition: 'opacity 120ms ease',\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n }}\n >\n {sidebarTitle}\n </div>\n ) : null}\n <nav\n aria-label=\"Primary\"\n style={{\n display: 'flex',\n flexDirection: 'column',\n gap: 'var(--iris-space-xxs, 4px)',\n }}\n >\n {nav.map((item) => {\n const isActive = item.id === activeId\n return (\n <button\n key={item.id}\n type=\"button\"\n data-iris-dashboard-nav-item={item.id}\n data-iris-dashboard-nav-active={isActive ? 'true' : undefined}\n onClick={() => onActiveIdChange?.(item.id)}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: 'var(--iris-space-sm, 12px)',\n padding: '8px 12px',\n background: isActive ? 'var(--iris-primary)' : 'transparent',\n color: isActive\n ? 'var(--iris-primary-foreground, #fff)'\n : 'var(--iris-foreground)',\n border: 'none',\n borderRadius: 'var(--iris-radius-sm, 4px)',\n cursor: 'pointer',\n fontSize: 'var(--iris-font-size-md, 14px)',\n fontFamily: 'inherit',\n textAlign: 'start',\n outline: 'none',\n }}\n >\n {item.icon ? (\n <span\n aria-hidden=\"true\"\n style={{ width: 16, display: 'inline-flex', justifyContent: 'center' }}\n >\n {item.icon}\n </span>\n ) : null}\n <span\n style={{\n opacity: state.collapsed ? 0 : 1,\n transition: 'opacity 120ms ease',\n whiteSpace: 'nowrap',\n }}\n >\n {item.label}\n </span>\n </button>\n )\n })}\n </nav>\n </IrisStack>\n )}\n >\n <IrisHeaderLayout\n header={\n header ?? (\n <div\n style={{\n padding: '12px 20px',\n fontSize: 'var(--iris-font-size-lg, 16px)',\n fontWeight: 600,\n }}\n >\n {title}\n </div>\n )\n }\n >\n {children ?? (\n <div style={{ padding: 20 }}>\n <IrisDashboardGrid columns={12} gap={16}>\n {cards.map((card) => (\n <IrisDashboardCard\n key={card.id}\n colSpan={card.colSpan ?? 4}\n rowSpan={card.rowSpan ?? 1}\n data-iris-dashboard-card-id={card.id}\n >\n <h3\n style={{\n margin: '0 0 8px 0',\n fontSize: 'var(--iris-font-size-md, 14px)',\n fontWeight: 600,\n color: 'var(--iris-foreground)',\n }}\n >\n {card.title}\n </h3>\n {cardSlots?.[card.id] !== undefined ? (\n cardSlots[card.id]\n ) : card.body ? (\n <div\n style={{\n fontSize: 'var(--iris-font-size-sm, 13px)',\n color: 'var(--iris-muted)',\n }}\n >\n {card.body}\n </div>\n ) : null}\n </IrisDashboardCard>\n ))}\n </IrisDashboardGrid>\n </div>\n )}\n </IrisHeaderLayout>\n </IrisSidebarLayout>\n </div>\n )\n}\n"]}
@@ -1,9 +1,9 @@
1
1
  'use client'
2
+ import { IrisSortable } from './chunk-K2F7SC2T.js';
2
3
  import * as React3 from 'react';
3
4
  import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
4
- import { createLongPress } from '@iris-ui-kit/core';
5
+ import { createLongPress, composeFeatures, hasComposableFeatures } from '@iris-ui-kit/core';
5
6
 
6
- // src/behaviors/Resizable.tsx
7
7
  function useDrag(options) {
8
8
  const { handle, buttons = [0], onStart, onDrag, onEnd, disabled = false } = options;
9
9
  const latest = React3.useRef({ onStart, onDrag, onEnd, disabled, buttons });
@@ -439,7 +439,51 @@ function IrisLongPress({
439
439
  }
440
440
  );
441
441
  }
442
+ function IrisCompose({
443
+ resizable,
444
+ movable,
445
+ sortable,
446
+ clickOutside,
447
+ hotkey,
448
+ children,
449
+ className,
450
+ style
451
+ }) {
452
+ const features = {
453
+ resizable,
454
+ movable,
455
+ sortable,
456
+ clickOutside,
457
+ hotkey
458
+ };
459
+ const active = composeFeatures(features);
460
+ let node = /* @__PURE__ */ jsx(Fragment, { children });
461
+ if (!hasComposableFeatures(features)) {
462
+ return /* @__PURE__ */ jsx(Fragment, { children });
463
+ }
464
+ for (const feature of active) {
465
+ switch (feature) {
466
+ case "hotkey":
467
+ if (hotkey) node = /* @__PURE__ */ jsx(IrisHotkey, { ...hotkey, children: node });
468
+ break;
469
+ case "clickOutside":
470
+ if (clickOutside) node = /* @__PURE__ */ jsx(IrisClickOutside, { ...clickOutside, children: node });
471
+ break;
472
+ case "sortable":
473
+ if (sortable) node = /* @__PURE__ */ jsx(IrisSortable, { ...sortable, children: node });
474
+ break;
475
+ case "movable":
476
+ if (movable) node = /* @__PURE__ */ jsx(IrisMovable, { ...movable, children: node });
477
+ break;
478
+ case "resizable":
479
+ if (resizable)
480
+ node = /* @__PURE__ */ jsx(IrisResizable, { ...resizable, className, style, children: node });
481
+ break;
482
+ }
483
+ }
484
+ return node;
485
+ }
442
486
 
443
- export { IrisClickOutside, IrisHotkey, IrisLongPress, IrisMovable, IrisResizable, useDrag };
444
- //# sourceMappingURL=chunk-BCL32KSE.js.map
445
- //# sourceMappingURL=chunk-BCL32KSE.js.map
487
+ export { IrisClickOutside, IrisCompose, IrisHotkey, IrisLongPress, IrisMovable, IrisResizable, useDrag };
488
+ //# sourceMappingURL=chunk-ZE4GH2GV.js.map
489
+ //# sourceMappingURL=chunk-ZE4GH2GV.js.map