@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 @@
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-UWUUEZCD.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: '12px', minHeight: '28px' },\n md: { padding: '6px 12px', fontSize: '14px', minHeight: '34px' },\n lg: { padding: '8px 12px', fontSize: '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 ? 'rgba(239, 68, 68, 0.18)' : 'rgba(99, 102, 241, 0.18)'}`\n : 'none'\n\n const wrapperStyle: React.CSSProperties = {\n display: 'inline-flex',\n alignItems: 'center',\n gap: '6px',\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 2px',\n fontSize: 13,\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 filter: brightness(1.08);\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: { padding: 'var(--iris-padding-sm) var(--iris-padding-md)', fontSize: '12px' },\n md: { padding: 'var(--iris-padding-sm) var(--iris-padding-lg)', fontSize: '14px' },\n lg: { padding: 'var(--iris-padding-md) var(--iris-padding-lg)', fontSize: '16px' },\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}\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 * React port of `IrisButton`. Same prop contract as `@iris-ui-kit/vue`'s\n * version. **No business logic is duplicated** — the `composeEventHandlers`\n * helper, variant token map, and singleton stylesheet are all from\n * `@iris-ui-kit/core` / a near-identical CSS file.\n *\n * Validates the React-readiness promise: any future primitive can be ported\n * by writing a thin .tsx wrapper around the same shared logic.\n *\n * @example\n * <IrisButton variant=\"solid\" onClick={() => save()}>\n * Save\n * </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: 12, 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: 12, 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-primary',\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: 16,\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: 12,\n textTransform: 'uppercase',\n letterSpacing: '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: '0 6px 20px -8px rgba(0, 0, 0, 0.16)',\n }}\n >\n <IrisStack spacing=\"lg\">\n {header ?? (\n <div style={{ textAlign: 'center' }}>\n <h1 style={{ margin: '0 0 4px 0', fontSize: 22, fontWeight: 700 }}>{title}</h1>\n {description ? (\n <p\n style={{\n margin: 0,\n color: 'var(--iris-muted)',\n fontSize: 14,\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: 14,\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 aria-label=\"Primary\" style={{ display: 'flex', flexDirection: 'column', gap: 2 }}>\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: 10,\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: 14,\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 style={{ padding: '12px 20px', fontSize: 16, fontWeight: 600 }}>{title}</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: 14,\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 style={{ fontSize: 13, color: 'var(--iris-muted)' }}>{card.body}</div>\n ) : null}\n </IrisDashboardCard>\n ))}\n </IrisDashboardGrid>\n </div>\n )}\n </IrisHeaderLayout>\n </IrisSidebarLayout>\n </div>\n )\n}\n"]}