@iris-ui-kit/react 0.3.1 → 0.3.2

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.
@@ -854,11 +854,11 @@ var lineStyle = {
854
854
  background: "var(--iris-border)"
855
855
  };
856
856
  function IrisLoginTemplate({
857
- title = "Sign in",
857
+ title,
858
858
  description = "",
859
859
  showRemember = true,
860
860
  error = "",
861
- submitLabel = "Sign in",
861
+ submitLabel,
862
862
  loading = false,
863
863
  header,
864
864
  forgot,
@@ -867,6 +867,9 @@ function IrisLoginTemplate({
867
867
  style,
868
868
  className
869
869
  }) {
870
+ const { t } = useI18n();
871
+ const resolvedTitle = title ?? t("login.title");
872
+ const resolvedSubmitLabel = submitLabel ?? t("login.submit");
870
873
  const [email, setEmail] = React9__namespace.useState("");
871
874
  const [password, setPassword] = React9__namespace.useState("");
872
875
  const [remember, setRemember] = React9__namespace.useState(false);
@@ -911,7 +914,7 @@ function IrisLoginTemplate({
911
914
  fontSize: "var(--iris-font-size-2xl, 20px)",
912
915
  fontWeight: 700
913
916
  },
914
- children: title
917
+ children: resolvedTitle
915
918
  }
916
919
  ),
917
920
  description ? /* @__PURE__ */ jsxRuntime.jsx(
@@ -927,23 +930,23 @@ function IrisLoginTemplate({
927
930
  ) : null
928
931
  ] }),
929
932
  error ? /* @__PURE__ */ jsxRuntime.jsx(IrisAlert, { tone: "danger", title: error }) : null,
930
- /* @__PURE__ */ jsxRuntime.jsx(IrisFormField, { label: "Email", required: true, children: /* @__PURE__ */ jsxRuntime.jsx(
933
+ /* @__PURE__ */ jsxRuntime.jsx(IrisFormField, { label: t("login.email"), required: true, children: /* @__PURE__ */ jsxRuntime.jsx(
931
934
  IrisInput,
932
935
  {
933
936
  type: "email",
934
937
  value: email,
935
938
  onChange: (e) => setEmail(e.target.value),
936
- placeholder: "you@example.com",
939
+ placeholder: t("login.emailPlaceholder"),
937
940
  disabled: loading,
938
941
  autoComplete: "email"
939
942
  }
940
943
  ) }),
941
- /* @__PURE__ */ jsxRuntime.jsx(IrisFormField, { label: "Password", required: true, children: /* @__PURE__ */ jsxRuntime.jsx(
944
+ /* @__PURE__ */ jsxRuntime.jsx(IrisFormField, { label: t("login.password"), required: true, children: /* @__PURE__ */ jsxRuntime.jsx(
942
945
  IrisPasswordInput,
943
946
  {
944
947
  value: password,
945
948
  onChange: (e) => setPassword(e.target.value),
946
- placeholder: "Enter your password",
949
+ placeholder: t("login.passwordPlaceholder"),
947
950
  disabled: loading,
948
951
  autoComplete: "current-password"
949
952
  }
@@ -963,16 +966,16 @@ function IrisLoginTemplate({
963
966
  checked: remember,
964
967
  onChange: (next) => setRemember(next),
965
968
  disabled: loading,
966
- children: "Remember me"
969
+ children: t("login.remember")
967
970
  }
968
971
  ),
969
972
  forgot ?? null
970
973
  ]
971
974
  }
972
975
  ) : null,
973
- /* @__PURE__ */ jsxRuntime.jsx(IrisButton, { type: "submit", variant: "solid", loading, style: { width: "100%" }, children: submitLabel }),
976
+ /* @__PURE__ */ jsxRuntime.jsx(IrisButton, { type: "submit", variant: "solid", loading, style: { width: "100%" }, children: resolvedSubmitLabel }),
974
977
  footer ? /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
975
- /* @__PURE__ */ jsxRuntime.jsx(IrisDivider, { spacing: "md", label: "or" }),
978
+ /* @__PURE__ */ jsxRuntime.jsx(IrisDivider, { spacing: "md", label: t("login.footerDivider") }),
976
979
  footer
977
980
  ] }) : null
978
981
  ] })
@@ -1194,7 +1197,7 @@ function IrisDashboardCard({
1194
1197
  );
1195
1198
  }
1196
1199
  function IrisDashboardTemplate({
1197
- title = "Dashboard",
1200
+ title,
1198
1201
  sidebarTitle = "",
1199
1202
  nav = [],
1200
1203
  activeId = "",
@@ -1209,6 +1212,8 @@ function IrisDashboardTemplate({
1209
1212
  style,
1210
1213
  className
1211
1214
  }) {
1215
+ const { t } = useI18n();
1216
+ const resolvedTitle = title ?? t("dashboard.title");
1212
1217
  const [collapsed, setCollapsed] = React9__namespace.useState(defaultCollapsed);
1213
1218
  const handleCollapsed = (next) => {
1214
1219
  setCollapsed(next);
@@ -1253,7 +1258,7 @@ function IrisDashboardTemplate({
1253
1258
  /* @__PURE__ */ jsxRuntime.jsx(
1254
1259
  "nav",
1255
1260
  {
1256
- "aria-label": "Primary",
1261
+ "aria-label": t("dashboard.primaryNavigation"),
1257
1262
  style: {
1258
1263
  display: "flex",
1259
1264
  flexDirection: "column",
@@ -1322,7 +1327,7 @@ function IrisDashboardTemplate({
1322
1327
  fontSize: "var(--iris-font-size-lg, 16px)",
1323
1328
  fontWeight: 600
1324
1329
  },
1325
- children: title
1330
+ children: resolvedTitle
1326
1331
  }
1327
1332
  ),
1328
1333
  children: children ?? /* @__PURE__ */ jsxRuntime.jsx("div", { style: { padding: 20 }, children: /* @__PURE__ */ jsxRuntime.jsx(IrisDashboardGrid, { columns: 12, gap: 16, children: cards.map((card) => /* @__PURE__ */ jsxRuntime.jsxs(
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/layouts/Stack.tsx","../src/layouts/Container.tsx","../src/primitives/input/Input.tsx","../src/i18n/context.ts","../src/useStore.ts","../src/i18n/useI18n.ts","../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/layouts/SidebarLayout.tsx","../src/layouts/HeaderLayout.tsx","../src/layouts/DashboardGrid.tsx","../src/skeletons/DashboardTemplate.tsx"],"names":["React","IrisStack","jsx","React2","IrisContainer","React3","IrisInput","jsxs","React4","useSyncExternalStore","createI18n","React6","React7","IrisPasswordInput","Fragment","React8","IrisCheckbox","useEffect","Children","isValidElement","cloneElement","composeEventHandlers","React9","IrisFormField","React10","React11","React12","asLen","React13"],"mappings":"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","file":"skeletons.cjs","sourcesContent":["import * as React from 'react'\n\nexport type IrisStackDirection = 'row' | 'column'\nexport type IrisStackAlign = 'start' | 'center' | 'end' | 'stretch'\nexport type IrisStackJustify = 'start' | 'center' | 'end' | 'between' | 'around'\n\nconst ALIGN_MAP: Record<IrisStackAlign, string> = {\n start: 'flex-start',\n center: 'center',\n end: 'flex-end',\n stretch: 'stretch',\n}\n\nconst JUSTIFY_MAP: Record<IrisStackJustify, string> = {\n start: 'flex-start',\n center: 'center',\n end: 'flex-end',\n between: 'space-between',\n around: 'space-around',\n}\n\nfunction toCssSpacing(spacing: string | number): string {\n if (typeof spacing === 'number') return `${spacing}px`\n if (spacing === 'sm' || spacing === 'md' || spacing === 'lg') {\n return `var(--iris-gap-${spacing})`\n }\n return spacing\n}\n\nexport interface IrisStackProps extends React.HTMLAttributes<HTMLDivElement> {\n direction?: IrisStackDirection\n spacing?: string | number\n align?: IrisStackAlign\n justify?: IrisStackJustify\n wrap?: boolean\n /** When true, renders as `inline-flex`. */\n inline?: boolean\n}\n\n/**\n * Flex container with token-driven spacing. The lightest possible layout\n * primitive — saves hand-writing `display: flex` everywhere.\n */\nexport const IrisStack = React.forwardRef<HTMLDivElement, IrisStackProps>(function IrisStack(\n {\n direction = 'column',\n spacing = 'md',\n align = 'stretch',\n justify = 'start',\n wrap = false,\n inline = false,\n style,\n children,\n ...rest\n },\n ref,\n) {\n return (\n <div\n {...rest}\n ref={ref}\n data-iris-stack=\"\"\n data-iris-stack-direction={direction}\n style={{\n display: inline ? 'inline-flex' : 'flex',\n flexDirection: direction,\n gap: toCssSpacing(spacing),\n alignItems: ALIGN_MAP[align],\n justifyContent: JUSTIFY_MAP[justify],\n flexWrap: wrap ? 'wrap' : 'nowrap',\n ...style,\n }}\n >\n {children}\n </div>\n )\n})\n","import * as React from 'react'\n\nexport type IrisContainerMaxWidth = 'sm' | 'md' | 'lg' | 'xl' | 'full' | string\n\nconst WIDTH_MAP: Record<'sm' | 'md' | 'lg' | 'xl' | 'full', string> = {\n sm: '640px',\n md: '768px',\n lg: '1024px',\n xl: '1280px',\n full: '100%',\n}\n\nfunction resolveMaxWidth(input: IrisContainerMaxWidth): string {\n if (input === 'sm' || input === 'md' || input === 'lg' || input === 'xl' || input === 'full') {\n return WIDTH_MAP[input]\n }\n return input\n}\n\nfunction resolvePadding(input: string | number): string {\n if (typeof input === 'number') return `${input}px`\n if (input === 'sm' || input === 'md' || input === 'lg') {\n return `var(--iris-padding-${input})`\n }\n return input\n}\n\nexport interface IrisContainerProps extends React.HTMLAttributes<HTMLDivElement> {\n maxWidth?: IrisContainerMaxWidth\n padding?: string | number\n center?: boolean\n}\n\n/**\n * Centered max-width wrapper. Use to bound content width on large screens\n * without rewriting flex/grid plumbing.\n */\nexport const IrisContainer = React.forwardRef<HTMLDivElement, IrisContainerProps>(\n function IrisContainer(\n { maxWidth = 'lg', padding = 'md', center = true, style, children, ...rest },\n ref,\n ) {\n return (\n <div\n {...rest}\n ref={ref}\n data-iris-container=\"\"\n data-iris-container-max-width={maxWidth}\n style={{\n width: '100%',\n maxWidth: resolveMaxWidth(maxWidth),\n padding: `0 ${resolvePadding(padding)}`,\n ...(center ? { marginInlineStart: 'auto', marginInlineEnd: 'auto' } : {}),\n ...style,\n }}\n >\n {children}\n </div>\n )\n },\n)\n","import * as React from 'react'\n\nexport type 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: rest.readOnly ? 'var(--iris-surface)' : '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' : rest.readOnly ? 'default' : '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' : rest.readOnly ? 'readonly' : '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 type { I18n } from '@iris-ui-kit/core'\n\n/** Carries the active {@link I18n} instance to descendants via `useI18n`. */\nexport const I18nContext = React.createContext<I18n | null>(null)\n","import * as React from 'react'\nimport { useSyncExternalStore } from 'react'\nimport type { ReadonlyStore, Store } from '@iris-ui-kit/core'\n\n/**\n * Bridge a framework-agnostic `@iris-ui-kit/core` store into React reactivity.\n * Uses React 18's `useSyncExternalStore` — the contract is identical to the\n * one Vue uses via `ref + onMounted` and Solid uses via `createSignal`. The\n * **same** store can power Button, Popover, Dialog, etc. on any framework.\n */\nexport function useStore<T>(store: ReadonlyStore<T>): T {\n return useSyncExternalStore(\n store.subscribe,\n store.getState,\n store.getState, // SSR fallback — same as client snapshot in our case.\n )\n}\n\n/**\n * Subscribe to a DERIVED slice of a core store — the component re-renders only\n * when `selector(state)` changes per `isEqual` (default `Object.is`), not on\n * every store emission. Built on {@link Store.subscribeWith}. Inline closures\n * for `selector`/`isEqual` are fine (captured via refs; the subscription is not\n * re-created between renders).\n */\nexport function useStoreSelector<T, U>(\n store: Store<T>,\n selector: (state: T) => U,\n isEqual?: (a: U, b: U) => boolean,\n): U {\n const [slice, setSlice] = React.useState(() => selector(store.getState()))\n const selRef = React.useRef(selector)\n selRef.current = selector\n const eqRef = React.useRef(isEqual)\n eqRef.current = isEqual\n React.useEffect(() => {\n const read = (s: T): U => selRef.current(s)\n const eq = (a: U, b: U): boolean => (eqRef.current ?? Object.is)(a, b)\n // Re-sync in case the store moved between render and this effect.\n setSlice((prev) => {\n const next = read(store.getState())\n return eq(prev, next) ? prev : next\n })\n return store.subscribeWith(read, setSlice, eq)\n }, [store])\n return slice\n}\n","import * as React from 'react'\nimport { createI18n, type I18n } from '@iris-ui-kit/core'\nimport { useStore } from '../useStore'\nimport { I18nContext } from './context'\n\nexport interface UseI18nReturn {\n locale: string\n t: I18n['t']\n formatDate: I18n['formatDate']\n formatNumber: I18n['formatNumber']\n formatRelativeTime: I18n['formatRelativeTime']\n setLocale: I18n['setLocale']\n setMessages: I18n['setMessages']\n}\n\n// Shared fallback so components can call `useI18n()` without an enclosing\n// provider — they get English defaults rather than throwing.\nlet fallbackI18n: I18n | null = null\nfunction getFallback(): I18n {\n if (fallbackI18n === null) fallbackI18n = createI18n()\n return fallbackI18n\n}\n\n/**\n * Reactive access to the active locale + translation/formatting helpers.\n * Re-renders the host when the locale or messages change. Works with or\n * without an `<IrisI18nProvider>` (falls back to English defaults).\n */\nexport function useI18n(): UseI18nReturn {\n const ctx = React.useContext(I18nContext)\n const i18n = ctx ?? getFallback()\n const state = useStore(i18n.store)\n\n return {\n locale: state.locale,\n t: i18n.t,\n formatDate: i18n.formatDate,\n formatNumber: i18n.formatNumber,\n formatRelativeTime: i18n.formatRelativeTime,\n setLocale: i18n.setLocale,\n setMessages: i18n.setMessages,\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 minHeight: 'var(--iris-control-height-sm, 28px)',\n },\n md: {\n padding: 'var(--iris-padding-sm) var(--iris-padding-lg)',\n fontSize: 'var(--iris-font-size-md, 14px)',\n minHeight: 'var(--iris-control-height-md, 34px)',\n },\n lg: {\n padding: 'var(--iris-padding-md) var(--iris-padding-lg)',\n fontSize: 'var(--iris-font-size-lg, 16px)',\n minHeight: 'var(--iris-control-height-lg, 40px)',\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') {\n base.padding = '0'\n delete base.minHeight\n }\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'\n\nexport interface IrisSidebarLayoutSidebarState {\n collapsed: boolean\n setCollapsed: (next: boolean) => void\n}\n\nexport interface IrisSidebarLayoutProps extends Omit<\n React.HTMLAttributes<HTMLDivElement>,\n 'children'\n> {\n collapsed?: boolean\n defaultCollapsed?: boolean\n onCollapsedChange?: (next: boolean) => void\n /** Sidebar width when expanded (px or CSS length). */\n width?: number | string\n /** Sidebar width when collapsed. */\n collapsedWidth?: number | string\n side?: 'left' | 'right'\n /** Sidebar content. May be a render function that receives `{ collapsed, setCollapsed }`. */\n sidebar?: React.ReactNode | ((state: IrisSidebarLayoutSidebarState) => React.ReactNode)\n children?: React.ReactNode\n}\n\nfunction asLen(v: number | string): string {\n return typeof v === 'number' ? `${v}px` : v\n}\n\n/**\n * Two-column layout with a collapsible sidebar. The sidebar is kept mounted\n * across collapses (only its width animates) so component state survives.\n */\nexport function IrisSidebarLayout({\n collapsed: collapsedProp,\n defaultCollapsed = false,\n onCollapsedChange,\n width = 240,\n collapsedWidth = 60,\n side = 'left',\n sidebar,\n style,\n children,\n ...rest\n}: IrisSidebarLayoutProps): React.ReactElement {\n const isControlled = collapsedProp !== undefined\n const [internal, setInternal] = React.useState(defaultCollapsed)\n const collapsed = isControlled ? Boolean(collapsedProp) : internal\n\n const setCollapsed = React.useCallback(\n (next: boolean) => {\n if (!isControlled) setInternal(next)\n onCollapsedChange?.(next)\n },\n [isControlled, onCollapsedChange],\n )\n\n const sidebarContent =\n typeof sidebar === 'function'\n ? (sidebar as (s: IrisSidebarLayoutSidebarState) => React.ReactNode)({\n collapsed,\n setCollapsed,\n })\n : sidebar\n\n const sidebarStyle: React.CSSProperties = {\n width: collapsed ? asLen(collapsedWidth) : asLen(width),\n flexShrink: 0,\n background: 'var(--iris-surface)',\n borderRight: side === 'left' ? '1px solid var(--iris-border)' : 'none',\n borderLeft: side === 'right' ? '1px solid var(--iris-border)' : 'none',\n transition: 'width 180ms ease',\n overflow: 'hidden',\n display: 'flex',\n flexDirection: 'column',\n }\n\n return (\n <div\n {...rest}\n data-iris-sidebar-layout=\"\"\n data-collapsed={collapsed ? '' : undefined}\n data-side={side}\n style={{\n display: 'flex',\n flexDirection: side === 'right' ? 'row-reverse' : 'row',\n width: '100%',\n height: '100%',\n minHeight: 0,\n color: 'var(--iris-foreground)',\n ...style,\n }}\n >\n <aside\n role=\"complementary\"\n data-iris-sidebar=\"\"\n data-collapsed={collapsed ? '' : undefined}\n style={sidebarStyle}\n >\n {sidebarContent}\n </aside>\n <div\n data-iris-sidebar-main=\"\"\n style={{\n flex: 1,\n minWidth: 0,\n overflow: 'auto',\n background: 'var(--iris-background)',\n }}\n >\n {children}\n </div>\n </div>\n )\n}\n","import * as React from 'react'\n\nexport interface IrisHeaderLayoutProps extends Omit<\n React.HTMLAttributes<HTMLDivElement>,\n 'children'\n> {\n /** Header height (px or CSS length). Default `'auto'`. */\n headerHeight?: number | string\n /** Footer height (px or CSS length). Default `'auto'`. */\n footerHeight?: number | string\n /** Header sticks via `position: sticky` instead of static. Default true. */\n sticky?: boolean\n header?: React.ReactNode\n footer?: React.ReactNode\n children?: React.ReactNode\n}\n\nfunction asLen(v: number | string): string {\n return typeof v === 'number' ? `${v}px` : v\n}\n\n/**\n * Two- (or three-) region vertical layout: a sticky header on top, a\n * scrollable main region, and an optional footer.\n */\nexport function IrisHeaderLayout({\n headerHeight = 'auto',\n footerHeight = 'auto',\n sticky = true,\n header,\n footer,\n style,\n children,\n ...rest\n}: IrisHeaderLayoutProps): React.ReactElement {\n return (\n <div\n {...rest}\n data-iris-header-layout=\"\"\n style={{\n display: 'flex',\n flexDirection: 'column',\n width: '100%',\n height: '100%',\n minHeight: 0,\n background: 'var(--iris-background)',\n color: 'var(--iris-foreground)',\n ...style,\n }}\n >\n {header ? (\n <header\n role=\"banner\"\n data-iris-header=\"\"\n style={{\n flexShrink: 0,\n height: asLen(headerHeight),\n borderBottom: '1px solid var(--iris-border)',\n background: 'var(--iris-surface)',\n position: sticky ? 'sticky' : 'static',\n top: 0,\n zIndex: 50,\n }}\n >\n {header}\n </header>\n ) : null}\n <main\n role=\"main\"\n data-iris-header-main=\"\"\n style={{ flex: 1, minHeight: 0, overflow: 'auto' }}\n >\n {children}\n </main>\n {footer ? (\n <footer\n role=\"contentinfo\"\n data-iris-footer=\"\"\n style={{\n flexShrink: 0,\n height: asLen(footerHeight),\n borderTop: '1px solid var(--iris-border)',\n background: 'var(--iris-surface)',\n }}\n >\n {footer}\n </footer>\n ) : null}\n </div>\n )\n}\n","import * as React from 'react'\n\nexport interface IrisDashboardGridProps extends React.HTMLAttributes<HTMLDivElement> {\n columns?: number\n gap?: number | string\n /** Use `repeat(auto-fill, minmax(<minColWidth>, 1fr))` instead of fixed `columns`. */\n minColWidth?: number | string\n}\n\n/**\n * 12-column responsive grid for dashboard composition. Each child controls\n * its span via `gridColumn` style or by wrapping with `IrisDashboardCard`.\n */\nexport function IrisDashboardGrid({\n columns = 12,\n gap = 16,\n minColWidth,\n style,\n children,\n ...rest\n}: IrisDashboardGridProps): React.ReactElement {\n const gapCss = typeof gap === 'number' ? `${gap}px` : gap\n const gridTemplateColumns = minColWidth\n ? `repeat(auto-fill, minmax(${\n typeof minColWidth === 'number' ? `${minColWidth}px` : minColWidth\n }, 1fr))`\n : `repeat(${columns}, 1fr)`\n\n return (\n <div\n {...rest}\n data-iris-dashboard-grid=\"\"\n style={{\n display: 'grid',\n gap: gapCss,\n gridTemplateColumns,\n width: '100%',\n ...style,\n }}\n >\n {children}\n </div>\n )\n}\n\nexport interface IrisDashboardCardProps extends React.HTMLAttributes<HTMLDivElement> {\n colSpan?: number | 'full'\n rowSpan?: number\n /** Show the styled card surface (background + border). Default true. */\n surface?: boolean\n}\n\n/**\n * A single dashboard grid cell. `colSpan='full'` makes it fill the row.\n */\nexport function IrisDashboardCard({\n colSpan = 1,\n rowSpan = 1,\n surface = true,\n style,\n children,\n ...rest\n}: IrisDashboardCardProps): React.ReactElement {\n const gridColumn = colSpan === 'full' ? '1 / -1' : `span ${colSpan}`\n const gridRow = rowSpan > 1 ? `span ${rowSpan}` : undefined\n\n return (\n <div\n {...rest}\n data-iris-dashboard-card=\"\"\n style={{\n gridColumn,\n gridRow,\n background: surface ? 'var(--iris-surface)' : 'transparent',\n border: surface ? '1px solid var(--iris-border)' : 'none',\n borderRadius: 'var(--iris-radius-md, 6px)',\n padding: surface ? 'var(--iris-padding-lg, 20px)' : 0,\n minWidth: 0,\n ...style,\n }}\n >\n {children}\n </div>\n )\n}\n","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
+ {"version":3,"sources":["../src/layouts/Stack.tsx","../src/layouts/Container.tsx","../src/primitives/input/Input.tsx","../src/i18n/context.ts","../src/useStore.ts","../src/i18n/useI18n.ts","../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/layouts/SidebarLayout.tsx","../src/layouts/HeaderLayout.tsx","../src/layouts/DashboardGrid.tsx","../src/skeletons/DashboardTemplate.tsx"],"names":["React","IrisStack","jsx","React2","IrisContainer","React3","IrisInput","jsxs","React4","useSyncExternalStore","createI18n","React6","React7","IrisPasswordInput","Fragment","React8","IrisCheckbox","useEffect","Children","isValidElement","cloneElement","composeEventHandlers","React9","IrisFormField","React10","React11","React12","asLen","React13"],"mappings":"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","file":"skeletons.cjs","sourcesContent":["import * as React from 'react'\n\nexport type IrisStackDirection = 'row' | 'column'\nexport type IrisStackAlign = 'start' | 'center' | 'end' | 'stretch'\nexport type IrisStackJustify = 'start' | 'center' | 'end' | 'between' | 'around'\n\nconst ALIGN_MAP: Record<IrisStackAlign, string> = {\n start: 'flex-start',\n center: 'center',\n end: 'flex-end',\n stretch: 'stretch',\n}\n\nconst JUSTIFY_MAP: Record<IrisStackJustify, string> = {\n start: 'flex-start',\n center: 'center',\n end: 'flex-end',\n between: 'space-between',\n around: 'space-around',\n}\n\nfunction toCssSpacing(spacing: string | number): string {\n if (typeof spacing === 'number') return `${spacing}px`\n if (spacing === 'sm' || spacing === 'md' || spacing === 'lg') {\n return `var(--iris-gap-${spacing})`\n }\n return spacing\n}\n\nexport interface IrisStackProps extends React.HTMLAttributes<HTMLDivElement> {\n direction?: IrisStackDirection\n spacing?: string | number\n align?: IrisStackAlign\n justify?: IrisStackJustify\n wrap?: boolean\n /** When true, renders as `inline-flex`. */\n inline?: boolean\n}\n\n/**\n * Flex container with token-driven spacing. The lightest possible layout\n * primitive — saves hand-writing `display: flex` everywhere.\n */\nexport const IrisStack = React.forwardRef<HTMLDivElement, IrisStackProps>(function IrisStack(\n {\n direction = 'column',\n spacing = 'md',\n align = 'stretch',\n justify = 'start',\n wrap = false,\n inline = false,\n style,\n children,\n ...rest\n },\n ref,\n) {\n return (\n <div\n {...rest}\n ref={ref}\n data-iris-stack=\"\"\n data-iris-stack-direction={direction}\n style={{\n display: inline ? 'inline-flex' : 'flex',\n flexDirection: direction,\n gap: toCssSpacing(spacing),\n alignItems: ALIGN_MAP[align],\n justifyContent: JUSTIFY_MAP[justify],\n flexWrap: wrap ? 'wrap' : 'nowrap',\n ...style,\n }}\n >\n {children}\n </div>\n )\n})\n","import * as React from 'react'\n\nexport type IrisContainerMaxWidth = 'sm' | 'md' | 'lg' | 'xl' | 'full' | string\n\nconst WIDTH_MAP: Record<'sm' | 'md' | 'lg' | 'xl' | 'full', string> = {\n sm: '640px',\n md: '768px',\n lg: '1024px',\n xl: '1280px',\n full: '100%',\n}\n\nfunction resolveMaxWidth(input: IrisContainerMaxWidth): string {\n if (input === 'sm' || input === 'md' || input === 'lg' || input === 'xl' || input === 'full') {\n return WIDTH_MAP[input]\n }\n return input\n}\n\nfunction resolvePadding(input: string | number): string {\n if (typeof input === 'number') return `${input}px`\n if (input === 'sm' || input === 'md' || input === 'lg') {\n return `var(--iris-padding-${input})`\n }\n return input\n}\n\nexport interface IrisContainerProps extends React.HTMLAttributes<HTMLDivElement> {\n maxWidth?: IrisContainerMaxWidth\n padding?: string | number\n center?: boolean\n}\n\n/**\n * Centered max-width wrapper. Use to bound content width on large screens\n * without rewriting flex/grid plumbing.\n */\nexport const IrisContainer = React.forwardRef<HTMLDivElement, IrisContainerProps>(\n function IrisContainer(\n { maxWidth = 'lg', padding = 'md', center = true, style, children, ...rest },\n ref,\n ) {\n return (\n <div\n {...rest}\n ref={ref}\n data-iris-container=\"\"\n data-iris-container-max-width={maxWidth}\n style={{\n width: '100%',\n maxWidth: resolveMaxWidth(maxWidth),\n padding: `0 ${resolvePadding(padding)}`,\n ...(center ? { marginInlineStart: 'auto', marginInlineEnd: 'auto' } : {}),\n ...style,\n }}\n >\n {children}\n </div>\n )\n },\n)\n","import * as React from 'react'\n\nexport type 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: rest.readOnly ? 'var(--iris-surface)' : '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' : rest.readOnly ? 'default' : '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' : rest.readOnly ? 'readonly' : '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 type { I18n } from '@iris-ui-kit/core'\n\n/** Carries the active {@link I18n} instance to descendants via `useI18n`. */\nexport const I18nContext = React.createContext<I18n | null>(null)\n","import * as React from 'react'\nimport { useSyncExternalStore } from 'react'\nimport type { ReadonlyStore, Store } from '@iris-ui-kit/core'\n\n/**\n * Bridge a framework-agnostic `@iris-ui-kit/core` store into React reactivity.\n * Uses React 18's `useSyncExternalStore` — the contract is identical to the\n * one Vue uses via `ref + onMounted` and Solid uses via `createSignal`. The\n * **same** store can power Button, Popover, Dialog, etc. on any framework.\n */\nexport function useStore<T>(store: ReadonlyStore<T>): T {\n return useSyncExternalStore(\n store.subscribe,\n store.getState,\n store.getState, // SSR fallback — same as client snapshot in our case.\n )\n}\n\n/**\n * Subscribe to a DERIVED slice of a core store — the component re-renders only\n * when `selector(state)` changes per `isEqual` (default `Object.is`), not on\n * every store emission. Built on {@link Store.subscribeWith}. Inline closures\n * for `selector`/`isEqual` are fine (captured via refs; the subscription is not\n * re-created between renders).\n */\nexport function useStoreSelector<T, U>(\n store: Store<T>,\n selector: (state: T) => U,\n isEqual?: (a: U, b: U) => boolean,\n): U {\n const [slice, setSlice] = React.useState(() => selector(store.getState()))\n const selRef = React.useRef(selector)\n selRef.current = selector\n const eqRef = React.useRef(isEqual)\n eqRef.current = isEqual\n React.useEffect(() => {\n const read = (s: T): U => selRef.current(s)\n const eq = (a: U, b: U): boolean => (eqRef.current ?? Object.is)(a, b)\n // Re-sync in case the store moved between render and this effect.\n setSlice((prev) => {\n const next = read(store.getState())\n return eq(prev, next) ? prev : next\n })\n return store.subscribeWith(read, setSlice, eq)\n }, [store])\n return slice\n}\n","import * as React from 'react'\nimport { createI18n, type I18n } from '@iris-ui-kit/core'\nimport { useStore } from '../useStore'\nimport { I18nContext } from './context'\n\nexport interface UseI18nReturn {\n locale: string\n t: I18n['t']\n formatDate: I18n['formatDate']\n formatNumber: I18n['formatNumber']\n formatRelativeTime: I18n['formatRelativeTime']\n setLocale: I18n['setLocale']\n setMessages: I18n['setMessages']\n}\n\n// Shared fallback so components can call `useI18n()` without an enclosing\n// provider — they get English defaults rather than throwing.\nlet fallbackI18n: I18n | null = null\nfunction getFallback(): I18n {\n if (fallbackI18n === null) fallbackI18n = createI18n()\n return fallbackI18n\n}\n\n/**\n * Reactive access to the active locale + translation/formatting helpers.\n * Re-renders the host when the locale or messages change. Works with or\n * without an `<IrisI18nProvider>` (falls back to English defaults).\n */\nexport function useI18n(): UseI18nReturn {\n const ctx = React.useContext(I18nContext)\n const i18n = ctx ?? getFallback()\n const state = useStore(i18n.store)\n\n return {\n locale: state.locale,\n t: i18n.t,\n formatDate: i18n.formatDate,\n formatNumber: i18n.formatNumber,\n formatRelativeTime: i18n.formatRelativeTime,\n setLocale: i18n.setLocale,\n setMessages: i18n.setMessages,\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 minHeight: 'var(--iris-control-height-sm, 28px)',\n },\n md: {\n padding: 'var(--iris-padding-sm) var(--iris-padding-lg)',\n fontSize: 'var(--iris-font-size-md, 14px)',\n minHeight: 'var(--iris-control-height-md, 34px)',\n },\n lg: {\n padding: 'var(--iris-padding-md) var(--iris-padding-lg)',\n fontSize: 'var(--iris-font-size-lg, 16px)',\n minHeight: 'var(--iris-control-height-lg, 40px)',\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') {\n base.padding = '0'\n delete base.minHeight\n }\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'\nimport { useI18n } from '../i18n'\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,\n description = '',\n showRemember = true,\n error = '',\n submitLabel,\n loading = false,\n header,\n forgot,\n footer,\n onSubmit,\n style,\n className,\n}: IrisLoginTemplateProps): React.ReactElement {\n const { t } = useI18n()\n const resolvedTitle = title ?? t('login.title')\n const resolvedSubmitLabel = submitLabel ?? t('login.submit')\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 {resolvedTitle}\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={t('login.email')} required>\n <IrisInput\n type=\"email\"\n value={email}\n onChange={(e) => setEmail(e.target.value)}\n placeholder={t('login.emailPlaceholder')}\n disabled={loading}\n autoComplete=\"email\"\n />\n </IrisFormField>\n <IrisFormField label={t('login.password')} required>\n <IrisPasswordInput\n value={password}\n onChange={(e) => setPassword(e.target.value)}\n placeholder={t('login.passwordPlaceholder')}\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 {t('login.remember')}\n </IrisCheckbox>\n {forgot ?? null}\n </div>\n ) : null}\n <IrisButton type=\"submit\" variant=\"solid\" loading={loading} style={{ width: '100%' }}>\n {resolvedSubmitLabel}\n </IrisButton>\n {footer ? (\n <div>\n <IrisDivider spacing=\"md\" label={t('login.footerDivider')} />\n {footer}\n </div>\n ) : null}\n </IrisStack>\n </form>\n </IrisContainer>\n </div>\n )\n}\n","import * as React from 'react'\n\nexport interface IrisSidebarLayoutSidebarState {\n collapsed: boolean\n setCollapsed: (next: boolean) => void\n}\n\nexport interface IrisSidebarLayoutProps extends Omit<\n React.HTMLAttributes<HTMLDivElement>,\n 'children'\n> {\n collapsed?: boolean\n defaultCollapsed?: boolean\n onCollapsedChange?: (next: boolean) => void\n /** Sidebar width when expanded (px or CSS length). */\n width?: number | string\n /** Sidebar width when collapsed. */\n collapsedWidth?: number | string\n side?: 'left' | 'right'\n /** Sidebar content. May be a render function that receives `{ collapsed, setCollapsed }`. */\n sidebar?: React.ReactNode | ((state: IrisSidebarLayoutSidebarState) => React.ReactNode)\n children?: React.ReactNode\n}\n\nfunction asLen(v: number | string): string {\n return typeof v === 'number' ? `${v}px` : v\n}\n\n/**\n * Two-column layout with a collapsible sidebar. The sidebar is kept mounted\n * across collapses (only its width animates) so component state survives.\n */\nexport function IrisSidebarLayout({\n collapsed: collapsedProp,\n defaultCollapsed = false,\n onCollapsedChange,\n width = 240,\n collapsedWidth = 60,\n side = 'left',\n sidebar,\n style,\n children,\n ...rest\n}: IrisSidebarLayoutProps): React.ReactElement {\n const isControlled = collapsedProp !== undefined\n const [internal, setInternal] = React.useState(defaultCollapsed)\n const collapsed = isControlled ? Boolean(collapsedProp) : internal\n\n const setCollapsed = React.useCallback(\n (next: boolean) => {\n if (!isControlled) setInternal(next)\n onCollapsedChange?.(next)\n },\n [isControlled, onCollapsedChange],\n )\n\n const sidebarContent =\n typeof sidebar === 'function'\n ? (sidebar as (s: IrisSidebarLayoutSidebarState) => React.ReactNode)({\n collapsed,\n setCollapsed,\n })\n : sidebar\n\n const sidebarStyle: React.CSSProperties = {\n width: collapsed ? asLen(collapsedWidth) : asLen(width),\n flexShrink: 0,\n background: 'var(--iris-surface)',\n borderRight: side === 'left' ? '1px solid var(--iris-border)' : 'none',\n borderLeft: side === 'right' ? '1px solid var(--iris-border)' : 'none',\n transition: 'width 180ms ease',\n overflow: 'hidden',\n display: 'flex',\n flexDirection: 'column',\n }\n\n return (\n <div\n {...rest}\n data-iris-sidebar-layout=\"\"\n data-collapsed={collapsed ? '' : undefined}\n data-side={side}\n style={{\n display: 'flex',\n flexDirection: side === 'right' ? 'row-reverse' : 'row',\n width: '100%',\n height: '100%',\n minHeight: 0,\n color: 'var(--iris-foreground)',\n ...style,\n }}\n >\n <aside\n role=\"complementary\"\n data-iris-sidebar=\"\"\n data-collapsed={collapsed ? '' : undefined}\n style={sidebarStyle}\n >\n {sidebarContent}\n </aside>\n <div\n data-iris-sidebar-main=\"\"\n style={{\n flex: 1,\n minWidth: 0,\n overflow: 'auto',\n background: 'var(--iris-background)',\n }}\n >\n {children}\n </div>\n </div>\n )\n}\n","import * as React from 'react'\n\nexport interface IrisHeaderLayoutProps extends Omit<\n React.HTMLAttributes<HTMLDivElement>,\n 'children'\n> {\n /** Header height (px or CSS length). Default `'auto'`. */\n headerHeight?: number | string\n /** Footer height (px or CSS length). Default `'auto'`. */\n footerHeight?: number | string\n /** Header sticks via `position: sticky` instead of static. Default true. */\n sticky?: boolean\n header?: React.ReactNode\n footer?: React.ReactNode\n children?: React.ReactNode\n}\n\nfunction asLen(v: number | string): string {\n return typeof v === 'number' ? `${v}px` : v\n}\n\n/**\n * Two- (or three-) region vertical layout: a sticky header on top, a\n * scrollable main region, and an optional footer.\n */\nexport function IrisHeaderLayout({\n headerHeight = 'auto',\n footerHeight = 'auto',\n sticky = true,\n header,\n footer,\n style,\n children,\n ...rest\n}: IrisHeaderLayoutProps): React.ReactElement {\n return (\n <div\n {...rest}\n data-iris-header-layout=\"\"\n style={{\n display: 'flex',\n flexDirection: 'column',\n width: '100%',\n height: '100%',\n minHeight: 0,\n background: 'var(--iris-background)',\n color: 'var(--iris-foreground)',\n ...style,\n }}\n >\n {header ? (\n <header\n role=\"banner\"\n data-iris-header=\"\"\n style={{\n flexShrink: 0,\n height: asLen(headerHeight),\n borderBottom: '1px solid var(--iris-border)',\n background: 'var(--iris-surface)',\n position: sticky ? 'sticky' : 'static',\n top: 0,\n zIndex: 50,\n }}\n >\n {header}\n </header>\n ) : null}\n <main\n role=\"main\"\n data-iris-header-main=\"\"\n style={{ flex: 1, minHeight: 0, overflow: 'auto' }}\n >\n {children}\n </main>\n {footer ? (\n <footer\n role=\"contentinfo\"\n data-iris-footer=\"\"\n style={{\n flexShrink: 0,\n height: asLen(footerHeight),\n borderTop: '1px solid var(--iris-border)',\n background: 'var(--iris-surface)',\n }}\n >\n {footer}\n </footer>\n ) : null}\n </div>\n )\n}\n","import * as React from 'react'\n\nexport interface IrisDashboardGridProps extends React.HTMLAttributes<HTMLDivElement> {\n columns?: number\n gap?: number | string\n /** Use `repeat(auto-fill, minmax(<minColWidth>, 1fr))` instead of fixed `columns`. */\n minColWidth?: number | string\n}\n\n/**\n * 12-column responsive grid for dashboard composition. Each child controls\n * its span via `gridColumn` style or by wrapping with `IrisDashboardCard`.\n */\nexport function IrisDashboardGrid({\n columns = 12,\n gap = 16,\n minColWidth,\n style,\n children,\n ...rest\n}: IrisDashboardGridProps): React.ReactElement {\n const gapCss = typeof gap === 'number' ? `${gap}px` : gap\n const gridTemplateColumns = minColWidth\n ? `repeat(auto-fill, minmax(${\n typeof minColWidth === 'number' ? `${minColWidth}px` : minColWidth\n }, 1fr))`\n : `repeat(${columns}, 1fr)`\n\n return (\n <div\n {...rest}\n data-iris-dashboard-grid=\"\"\n style={{\n display: 'grid',\n gap: gapCss,\n gridTemplateColumns,\n width: '100%',\n ...style,\n }}\n >\n {children}\n </div>\n )\n}\n\nexport interface IrisDashboardCardProps extends React.HTMLAttributes<HTMLDivElement> {\n colSpan?: number | 'full'\n rowSpan?: number\n /** Show the styled card surface (background + border). Default true. */\n surface?: boolean\n}\n\n/**\n * A single dashboard grid cell. `colSpan='full'` makes it fill the row.\n */\nexport function IrisDashboardCard({\n colSpan = 1,\n rowSpan = 1,\n surface = true,\n style,\n children,\n ...rest\n}: IrisDashboardCardProps): React.ReactElement {\n const gridColumn = colSpan === 'full' ? '1 / -1' : `span ${colSpan}`\n const gridRow = rowSpan > 1 ? `span ${rowSpan}` : undefined\n\n return (\n <div\n {...rest}\n data-iris-dashboard-card=\"\"\n style={{\n gridColumn,\n gridRow,\n background: surface ? 'var(--iris-surface)' : 'transparent',\n border: surface ? '1px solid var(--iris-border)' : 'none',\n borderRadius: 'var(--iris-radius-md, 6px)',\n padding: surface ? 'var(--iris-padding-lg, 20px)' : 0,\n minWidth: 0,\n ...style,\n }}\n >\n {children}\n </div>\n )\n}\n","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'\nimport { useI18n } from '../i18n'\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,\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 { t } = useI18n()\n const resolvedTitle = title ?? t('dashboard.title')\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={t('dashboard.primaryNavigation')}\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 {resolvedTitle}\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"]}
package/dist/skeletons.js CHANGED
@@ -1,5 +1,5 @@
1
1
  'use client'
2
- export { IrisDashboardTemplate, IrisLoginTemplate } from './chunk-QKDOW7FG.js';
2
+ export { IrisDashboardTemplate, IrisLoginTemplate } from './chunk-EB5VUIPA.js';
3
3
  import './chunk-ZKBDUWUD.js';
4
4
  import './chunk-J5FB2UB2.js';
5
5
  import './chunk-OMOTUHYI.js';