@zeturn/watercolor-react 1.2.4 → 1.2.6

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.
@@ -86,7 +86,7 @@ var te = ({ items: e = [], multiple: t = !1, variant: n = "default", onToggle: r
86
86
  };
87
87
  te.displayName = "Accordion";
88
88
  //#endregion
89
- //#region ../core/src/components/Alert/utils.jsx
89
+ //#region src/components/Alert/utils.js
90
90
  function ne(e, t) {
91
91
  return [
92
92
  "wc-alert",
@@ -512,7 +512,7 @@ var le = ({ value: e = null, onChange: t, options: n = [], placeholder: r = "Typ
512
512
  };
513
513
  le.displayName = "Autocomplete";
514
514
  //#endregion
515
- //#region ../core/src/components/Avatar/utils.jsx
515
+ //#region src/components/Avatar/utils.js
516
516
  function ue({ size: e, variant: t, color: n, src: r, imgError: i }) {
517
517
  let a = ["wc-avatar"];
518
518
  return typeof e == "string" && a.push(`wc-avatar--${e}`), a.push(`wc-avatar--${t}`), (!r || i) && a.push(`wc-avatar--${n}`), a;
@@ -562,7 +562,7 @@ var he = ({ src: e = "", alt: t = "", size: n = "md", variant: r = "circular", c
562
562
  };
563
563
  he.displayName = "Avatar";
564
564
  //#endregion
565
- //#region ../core/src/components/Badge/utils.js
565
+ //#region src/components/Badge/utils.js
566
566
  var X = [
567
567
  "primary",
568
568
  "secondary",
@@ -598,7 +598,7 @@ var ye = ({ children: e, variant: t = "primary", size: n = "md", dot: r = !1, cl
598
598
  });
599
599
  ye.displayName = "Badge";
600
600
  //#endregion
601
- //#region ../core/src/components/Banner/utils.js
601
+ //#region src/components/Banner/utils.js
602
602
  function be(e, t, n) {
603
603
  let r = [
604
604
  "wc-banner",
@@ -692,13 +692,13 @@ function Te({ type: t = "info", position: n = "top", title: r = "", message: i =
692
692
  });
693
693
  }
694
694
  //#endregion
695
- //#region ../core/src/components/Blockquote/utils.js
695
+ //#region src/components/Blockquote/utils.js
696
696
  function Ee(e = "", t = "default", n = !0, r = !0, i = "medium", a = "default") {
697
697
  let o = ["wc-blockquote"];
698
698
  return t && t !== "default" && t !== "card" && o.push(`wc-blockquote--${t}`), n && o.push("wc-blockquote--no-border"), r && o.push("wc-blockquote--interactive"), i && i !== "medium" && o.push(`wc-blockquote--${i}`), a && a !== "default" && o.push(`wc-blockquote--${a}`), e && o.push(e), o.filter(Boolean).join(" ");
699
699
  }
700
700
  //#endregion
701
- //#region ../core/src/components/Card/utils.jsx
701
+ //#region src/components/Card/utils.js
702
702
  function De(e = "", t = "minimal", n = "default", r = "medium", i = !1, a = !0) {
703
703
  let o = ["wc-card"];
704
704
  return t && o.push(`wc-card--${t}`), n && n !== "default" && o.push(`wc-card--${n}`), r && r !== "medium" && o.push(`wc-card--${r}`), i && o.push("wc-card--interactive"), a && o.push("wc-card--no-border"), e && o.push(e), o.filter(Boolean).join(" ");
@@ -776,7 +776,7 @@ function ke({ cite: e = "", children: t, className: n = "", variant: r = "defaul
776
776
  });
777
777
  }
778
778
  //#endregion
779
- //#region ../core/src/components/Box/utils.jsx
779
+ //#region src/components/Box/utils.js
780
780
  var Z = {
781
781
  0: "0",
782
782
  1: "0.25rem",
@@ -918,7 +918,7 @@ function Le({ component: e = "div", children: t, className: n = "", p: r, pt: i,
918
918
  });
919
919
  }
920
920
  //#endregion
921
- //#region ../core/src/components/Breadcrumb/utils.js
921
+ //#region src/components/Breadcrumb/utils.js
922
922
  function Re(e, t, n, r) {
923
923
  let i = [...e];
924
924
  if (t && i.length && i[0].label !== "首页" && i.unshift({
@@ -1007,7 +1007,7 @@ function We({ items: t = [], separator: n = "/", variant: r = "default", showHom
1007
1007
  });
1008
1008
  }
1009
1009
  //#endregion
1010
- //#region ../core/src/components/Button/utils.jsx
1010
+ //#region src/components/Button/utils.js
1011
1011
  var Ge = [
1012
1012
  "primary",
1013
1013
  "secondary",
@@ -1239,7 +1239,7 @@ var $e = [
1239
1239
  };
1240
1240
  tt.displayName = "Checkbox";
1241
1241
  //#endregion
1242
- //#region ../core/src/components/Chip/utils.jsx
1242
+ //#region src/components/Chip/utils.jsx
1243
1243
  function nt(e) {
1244
1244
  let { size: t = "md", variant: n = "filled", color: r = "default", clickable: i = !1, disabled: a = !1, className: o = "" } = e, s = ["wc-chip"];
1245
1245
  return s.push(`wc-chip--${t}`), s.push(`wc-chip--${n}`), s.push(`wc-chip--${r}`), i && !a && s.push("wc-chip--clickable"), a && s.push("wc-chip--disabled"), o && s.push(o), s.filter(Boolean).join(" ");
@@ -1314,7 +1314,7 @@ function ot({ label: e = "", avatar: t = "", deletable: n = !1, disabled: r = !1
1314
1314
  });
1315
1315
  }
1316
1316
  //#endregion
1317
- //#region ../core/src/components/CircularProgress/utils.jsx
1317
+ //#region src/components/CircularProgress/utils.js
1318
1318
  function st(e, t) {
1319
1319
  let n = typeof e == "string" ? parseInt(e, 10) : e, r = n / 2, i = (n - t) / 2;
1320
1320
  return {
@@ -1396,7 +1396,7 @@ function pt({ value: e = 0, size: t = 40, thickness: n = 3.6, variant: r = "inde
1396
1396
  });
1397
1397
  }
1398
1398
  //#endregion
1399
- //#region ../core/src/components/ColorPicker/utils.jsx
1399
+ //#region src/components/ColorPicker/utils.js
1400
1400
  function mt(e) {
1401
1401
  let { size: t = "md", shape: n = "circle", disabled: r = !1, className: i = "" } = e, a = ["wc-color-picker"];
1402
1402
  return a.push(`wc-color-picker--${t}`), a.push(`wc-color-picker--${n}`), r && a.push("wc-color-picker--disabled"), i && a.push(i), a.filter(Boolean);
@@ -1434,7 +1434,7 @@ function _t({ value: e = "#ffffff", onChange: t, size: n = "md", shape: r = "cir
1434
1434
  });
1435
1435
  }
1436
1436
  //#endregion
1437
- //#region ../core/src/components/Container/utils.jsx
1437
+ //#region src/components/Container/utils.js
1438
1438
  var vt = {
1439
1439
  xs: "max-w-xs",
1440
1440
  sm: "max-w-sm",
@@ -1461,7 +1461,7 @@ function bt({ maxWidth: e = "lg", fluid: t = !1, fixed: n = !1, className: r = "
1461
1461
  });
1462
1462
  }
1463
1463
  //#endregion
1464
- //#region ../core/src/components/Copy/utils.jsx
1464
+ //#region src/components/Copy/utils.js
1465
1465
  function xt(e) {
1466
1466
  let { variant: t = "default", size: n = "md", copied: r = !1, copyError: i = !1, className: a = "" } = e, o = ["wc-copy"];
1467
1467
  return o.push(`wc-copy--${t}`), o.push(`wc-copy--${n}`), r && o.push("wc-copy--copied"), i && o.push("wc-copy--error"), a && o.push(a), o.filter(Boolean);
@@ -1582,7 +1582,7 @@ function Ot({ text: e, variant: t = "default", size: n = "md", showLabel: r = !0
1582
1582
  });
1583
1583
  }
1584
1584
  //#endregion
1585
- //#region ../core/src/components/DatePicker/utils.jsx
1585
+ //#region src/components/DatePicker/utils.js
1586
1586
  function kt(e, t = "YYYY-MM-DD") {
1587
1587
  if (!e || !(e instanceof Date)) return "";
1588
1588
  let n = e.getFullYear(), r = String(e.getMonth() + 1).padStart(2, "0"), i = String(e.getDate()).padStart(2, "0");
@@ -1900,7 +1900,7 @@ var Lt = ({ item: e, showAvatar: t = !0, variant: n = "timeline", color: r = "va
1900
1900
  };
1901
1901
  Rt.displayName = "Feed";
1902
1902
  //#endregion
1903
- //#region ../core/src/components/Feature/utils.jsx
1903
+ //#region src/components/Feature/utils.js
1904
1904
  var zt = ({ align: e, size: t, background: n, reverse: r, vertical: i, clickable: a, disabled: o, className: s }) => [
1905
1905
  "wc-feature-card",
1906
1906
  a && "wc-feature-card--clickable",
@@ -2185,7 +2185,7 @@ var en = ({ disabled: e = !1, error: t = !1, filled: n = !1, focused: r = !1, ma
2185
2185
  };
2186
2186
  en.displayName = "FormHelperText";
2187
2187
  //#endregion
2188
- //#region ../core/src/components/Grid/utils.jsx
2188
+ //#region src/components/Grid/utils.js
2189
2189
  var tn = {
2190
2190
  xs: "xs",
2191
2191
  sm: "sm",
@@ -3414,7 +3414,7 @@ var Bn = ({ value: e = "", onChange: t, type: n = "text", placeholder: r = "", d
3414
3414
  };
3415
3415
  Bn.displayName = "Input";
3416
3416
  //#endregion
3417
- //#region ../core/src/components/List/utils.jsx
3417
+ //#region src/components/List/utils.js
3418
3418
  var Vn = (e) => {
3419
3419
  let { dense: t = !1, disablePadding: n = !1, variant: r, className: i = "" } = e, a = ["list"];
3420
3420
  return t && a.push("list--dense"), n && a.push("list--no-padding"), r && a.push(`list--${r}`), i && a.push(i), a;
@@ -3646,7 +3646,7 @@ var Vn = (e) => {
3646
3646
  };
3647
3647
  ir.displayName = "Menu";
3648
3648
  //#endregion
3649
- //#region ../core/src/components/Modal/utils.js
3649
+ //#region src/components/Modal/utils.js
3650
3650
  function ar({ size: e = "md", fullWidth: t = !1, fullScreen: n = !1, scroll: r = "paper", position: i = "center", className: a = "" } = {}) {
3651
3651
  let o = ["wc-modal"];
3652
3652
  return e && !n && o.push(`wc-modal--${e}`), n && o.push("wc-modal--fullscreen"), t && !n && o.push("wc-modal--full-width"), r === "body" ? o.push("wc-modal--scroll-body") : o.push("wc-modal--scroll-paper"), i && i !== "center" && o.push(`wc-modal--${i}`), a && o.push(a), o.filter(Boolean).join(" ");
@@ -3906,7 +3906,7 @@ dr.displayName = "Page", dr.propTypes = {
3906
3906
  children: $.default.node
3907
3907
  };
3908
3908
  //#endregion
3909
- //#region ../core/src/components/Paper/utils.jsx
3909
+ //#region src/components/Paper/utils.js
3910
3910
  var fr = {
3911
3911
  ELEVATION: "elevation",
3912
3912
  OUTLINED: "outlined"
@@ -4675,7 +4675,7 @@ function Nr({ open: e = !1, modelValue: t = void 0, message: n = "", title: r =
4675
4675
  }), document.body);
4676
4676
  }
4677
4677
  //#endregion
4678
- //#region ../core/src/components/Status/utils.js
4678
+ //#region src/components/Status/utils.js
4679
4679
  var Pr = [
4680
4680
  "default",
4681
4681
  "success",
@@ -5084,7 +5084,7 @@ var Qr = ({ value: e = "", onChange: t, type: n = "text", label: r = "", placeho
5084
5084
  };
5085
5085
  Qr.displayName = "TextField";
5086
5086
  //#endregion
5087
- //#region ../core/src/components/Toolbar/utils.js
5087
+ //#region src/components/Toolbar/utils.js
5088
5088
  var $r = (e, t, n = "") => {
5089
5089
  let r = ["flex items-center w-full"];
5090
5090
  return e === "dense" ? r.push("min-h-12 py-2") : r.push("min-h-16 py-3"), t || r.push("px-4 sm:px-6 lg:px-8"), n && r.push(n), r.join(" ");
@@ -5143,7 +5143,7 @@ function ai({ text: e, placement: t = "top", children: n, className: r = "" }) {
5143
5143
  });
5144
5144
  }
5145
5145
  //#endregion
5146
- //#region ../core/src/components/Typography/utils.js
5146
+ //#region src/components/Typography/utils.js
5147
5147
  var oi = {
5148
5148
  h1: "h1",
5149
5149
  h2: "h2",
@@ -5229,7 +5229,7 @@ var pi = ({ variant: e = "body1", component: t, color: n = "inherit", align: r =
5229
5229
  });
5230
5230
  pi.displayName = "Typography";
5231
5231
  //#endregion
5232
- //#region ../core/src/components/TypingText/utils.jsx
5232
+ //#region src/components/TypingText/utils.js
5233
5233
  var mi = class {
5234
5234
  constructor(e, t = {}) {
5235
5235
  this.text = e, this.speed = t.speed || 100, this.pause = t.pause || 1500, this.loop = t.loop || !1, this.erase = t.erase || !1, this.index = 0, this.direction = 1, this.timer = null, this.onUpdate = t.onUpdate || (() => {});
@@ -5330,7 +5330,7 @@ var gi = ({ length: e = 6, value: t = "", onChange: n, onComplete: r, autoFocus:
5330
5330
  };
5331
5331
  gi.displayName = "VerificationCodeInput";
5332
5332
  //#endregion
5333
- //#region ../core/src/components/VideoPlayer/utils.js
5333
+ //#region src/components/VideoPlayer/utils.js
5334
5334
  function _i(e) {
5335
5335
  return `${Math.floor(e / 60)}:${Math.floor(e % 60).toString().padStart(2, "0")}`;
5336
5336
  }
@@ -5439,7 +5439,7 @@ var bi = ({ src: e, autoplay: t = !1, loop: n = !1, className: r = "", style: i
5439
5439
  };
5440
5440
  bi.displayName = "VideoPlayer";
5441
5441
  //#endregion
5442
- //#region ../core/src/components/Watermark/utils.js
5442
+ //#region src/components/Watermark/utils.js
5443
5443
  var xi = {
5444
5444
  content: "",
5445
5445
  cross: !1,
package/index.d.ts CHANGED
@@ -7,6 +7,7 @@ import type {
7
7
  InputHTMLAttributes,
8
8
  ReactElement,
9
9
  ReactNode,
10
+ CSSProperties,
10
11
  TdHTMLAttributes,
11
12
  ThHTMLAttributes,
12
13
  } from 'react'
@@ -27,7 +28,9 @@ import type {
27
28
  WatercolorThemeConfig,
28
29
  } from '@zeturn/watercolor-core'
29
30
 
30
- type WatercolorComponent = ComponentType<Record<string, unknown>>
31
+ type FloatingPlacement = 'top' | 'bottom' | 'left' | 'right' | 'top-start' | 'top-end' | 'bottom-start' | 'bottom-end' | 'left-start' | 'left-end' | 'right-start' | 'right-end'
32
+ type HtmlComponentProps<T extends HTMLElement = HTMLElement> = HTMLAttributes<T> & { className?: string; style?: CSSProperties; children?: ReactNode }
33
+ type PolymorphicComponent<TDefault extends ElementType, OwnProps> = <T extends ElementType = TDefault>(props: PolymorphicProps<T, OwnProps>) => ReactElement | null
31
34
  type PolymorphicProps<T extends ElementType, OwnProps> = OwnProps &
32
35
  Omit<ComponentPropsWithoutRef<T>, keyof OwnProps | 'as'> & { as?: T }
33
36
  type CompositionBaseProps = { children?: ReactNode; className?: string }
@@ -52,6 +55,9 @@ export interface ButtonProps extends Omit<ButtonHTMLAttributes<HTMLButtonElement
52
55
  ripple?: boolean
53
56
  }
54
57
 
58
+ export interface FabProps extends Omit<ButtonProps, 'variant'> { variant?: 'circular' | 'extended'; color?: ComponentColor | 'default'; label?: ReactNode; icon?: ReactNode }
59
+ export interface IconButtonProps extends Omit<ButtonProps, 'variant' | 'buttonStyle' | 'fullWidth'> { color?: ComponentColor | 'default'; edge?: boolean | 'start' | 'end'; icon?: ReactNode }
60
+
55
61
  export interface InputProps extends Omit<InputHTMLAttributes<HTMLInputElement>, 'size' | 'color' | 'value'> {
56
62
  value?: string | number | readonly string[]
57
63
  readonly?: boolean
@@ -242,6 +248,66 @@ export interface TableCellProps extends Omit<TdHTMLAttributes<HTMLTableCellEleme
242
248
  variant?: 'head' | 'body' | 'footer'
243
249
  }
244
250
 
251
+ export interface AccordionItem { key?: string | number; title?: ReactNode; content?: ReactNode; disabled?: boolean; [key: string]: unknown }
252
+ export interface AccordionProps extends HtmlComponentProps<HTMLDivElement> { items?: readonly AccordionItem[]; multiple?: boolean; variant?: 'default' | 'bordered' | 'separated'; onToggle?: (key: string | number, expanded: boolean) => void }
253
+ export interface AlertProps extends HtmlComponentProps<HTMLDivElement> { type?: 'success' | 'warning' | 'error' | 'info'; severity?: 'success' | 'warning' | 'error' | 'info'; variant?: 'filled' | 'outlined' | 'standard'; title?: ReactNode; message?: ReactNode; closable?: boolean; onClose?: () => void; icon?: ReactNode; action?: ReactNode }
254
+ export interface AppBarProps extends HtmlComponentProps<HTMLElement> { position?: 'static' | 'fixed' | 'absolute' | 'sticky' | 'relative'; color?: string; elevation?: number; variant?: 'elevation' | 'outlined' | 'minimal' }
255
+ export interface AutocompleteProps<Value = unknown> extends Omit<SelectProps, 'value' | 'onChange' | 'onSearch'> { value?: Value | Value[] | null; onChange?: (value: Value | Value[] | null) => void; readonly?: boolean; freeSolo?: boolean; minSearchLength?: number; noOptionsText?: ReactNode; onInputChange?: (value: string) => void; filterOptions?: (options: readonly SelectOption[], query: string) => readonly SelectOption[]; renderInput?: (props: Record<string, unknown>) => ReactNode; getOptionLabel?: (option: Value | SelectOption) => string; getOptionValue?: (option: Value | SelectOption) => string | number }
256
+ export interface AvatarProps extends HtmlComponentProps<HTMLDivElement> { src?: string; alt?: string; size?: ComponentSize | 'xs' | 'xl' | number; variant?: 'circular' | 'rounded' | 'square'; color?: ComponentColor | 'default'; children?: ReactNode }
257
+ export interface BadgeProps extends HtmlComponentProps<HTMLSpanElement> { variant?: ComponentColor | 'primary' | 'default'; size?: ComponentSize; dot?: boolean; children?: ReactNode }
258
+ export interface BannerProps extends HtmlComponentProps<HTMLDivElement> { type?: 'info' | 'success' | 'warning' | 'error'; title?: ReactNode; message?: ReactNode; closable?: boolean; onClose?: () => void; sticky?: boolean; zIndex?: number; icon?: ReactNode; actions?: ReactNode }
259
+ export interface BlockquoteProps extends HtmlComponentProps<HTMLElement> { cite?: ReactNode; variant?: 'default' | 'minimal' | 'card'; noBorder?: boolean; interactive?: boolean; size?: ComponentSize | 'medium'; color?: ComponentColor | 'default' }
260
+ export interface BoxProps<T extends ElementType = 'div'> extends PolymorphicProps<T, { children?: ReactNode; className?: string; style?: CSSProperties; p?: unknown; pt?: unknown; pr?: unknown; pb?: unknown; pl?: unknown; px?: unknown; py?: unknown; m?: unknown; mt?: unknown; mr?: unknown; mb?: unknown; ml?: unknown; mx?: unknown; my?: unknown; display?: CSSProperties['display']; flexDirection?: CSSProperties['flexDirection']; justifyContent?: CSSProperties['justifyContent']; alignItems?: CSSProperties['alignItems']; flexWrap?: CSSProperties['flexWrap']; gap?: CSSProperties['gap']; bgcolor?: string; color?: string; border?: string | number; borderRadius?: string | number; width?: CSSProperties['width']; height?: CSSProperties['height']; minWidth?: CSSProperties['minWidth']; minHeight?: CSSProperties['minHeight']; maxWidth?: CSSProperties['maxWidth']; maxHeight?: CSSProperties['maxHeight'] }> { component?: T }
261
+ export interface BreadcrumbItem { label?: ReactNode; href?: string; icon?: ReactNode; disabled?: boolean; current?: boolean; [key: string]: unknown }
262
+ export interface BreadcrumbProps extends Omit<HtmlComponentProps<HTMLElement>, 'onClick'> { items?: readonly BreadcrumbItem[]; separator?: ReactNode; variant?: 'default' | 'compact'; showHome?: boolean; homeIcon?: ReactNode; maxItems?: number; onItemClick?: (item: BreadcrumbItem, index: number) => void }
263
+ export interface CardProps extends HtmlComponentProps<HTMLDivElement> { title?: ReactNode; variant?: 'minimal' | 'default' | 'outlined' | 'elevated'; color?: ComponentColor | 'default'; size?: ComponentSize | 'medium'; interactive?: boolean; noBorder?: boolean; header?: ReactNode; footer?: ReactNode }
264
+ export interface CardActionsProps extends HtmlComponentProps<HTMLDivElement> { disableSpacing?: boolean; disablePadding?: boolean; justifyContent?: CSSProperties['justifyContent'] }
265
+ export interface CardContentProps extends HtmlComponentProps<HTMLDivElement> { disablePadding?: boolean; padding?: 'none' | 'compact' | 'normal' | 'comfortable' }
266
+ export interface ChipProps extends HtmlComponentProps<HTMLDivElement> { label?: ReactNode; avatar?: ReactNode; deletable?: boolean; disabled?: boolean; clickable?: boolean; variant?: 'filled' | 'outlined' | 'minimal'; size?: ComponentSize; color?: ComponentColor | 'default'; deleteIcon?: ReactNode; onDelete?: () => void }
267
+ export interface CircularProgressProps extends HtmlComponentProps<HTMLDivElement> { value?: number; size?: number | string; thickness?: number; variant?: 'determinate' | 'indeterminate'; color?: ComponentColor | 'inherit'; showValue?: boolean; overlay?: boolean; centered?: boolean; inline?: boolean }
268
+ export interface ColorPickerProps extends Omit<HtmlComponentProps<HTMLDivElement>, 'onChange'> { value?: string; onChange?: (value: string) => void; size?: ComponentSize; shape?: 'circle' | 'square' | 'rounded'; disabled?: boolean }
269
+ export interface ContainerProps extends HtmlComponentProps<HTMLDivElement> { maxWidth?: 'xs' | 'sm' | 'md' | 'lg' | 'xl' | false | string; fluid?: boolean; fixed?: boolean }
270
+ export interface CopyProps extends HtmlComponentProps<HTMLButtonElement> { text?: string; value?: string; copied?: boolean; error?: boolean; label?: ReactNode; copiedLabel?: ReactNode; errorLabel?: ReactNode; onCopy?: (value: string) => void; icon?: ReactNode }
271
+ export interface DatePickerProps extends Omit<HtmlComponentProps<HTMLDivElement>, 'onChange'> { value?: Date | string | null; onChange?: (value: Date) => void; placeholder?: string; disabled?: boolean; size?: ComponentSize; variant?: 'default' | FieldVariant; format?: string; showToday?: boolean; minDate?: Date | string | null; maxDate?: Date | string | null }
272
+ export interface DividerProps extends HtmlComponentProps<HTMLHRElement> { variant?: 'solid' | 'dashed' | 'dotted'; orientation?: 'horizontal' | 'vertical'; flexItem?: boolean }
273
+ export interface FeatureProps extends HtmlComponentProps<HTMLDivElement> { title?: ReactNode; description?: ReactNode; icon?: ReactNode; iconSize?: number; size?: ComponentSize; align?: 'left' | 'center' | 'right'; background?: string; variant?: 'default' | 'minimal' | 'card'; bgColor?: string; reverse?: boolean; vertical?: boolean; ctaLabel?: ReactNode; ctaHref?: string; onCtaClick?: (event: unknown) => void }
274
+ export interface FeedItem { title?: ReactNode; description?: ReactNode; avatar?: ReactNode; time?: ReactNode; children?: FeedItem[]; [key: string]: unknown }
275
+ export interface FeedProps extends Omit<HtmlComponentProps<HTMLDivElement>, 'onClick'> { item?: FeedItem; items?: readonly FeedItem[]; showAvatar?: boolean; variant?: 'timeline' | 'list'; color?: string; dotSize?: number; lineWidth?: number; onItemClick?: (item: FeedItem) => void }
276
+ export interface FileInputProps extends Omit<InputHTMLAttributes<HTMLInputElement>, 'type' | 'onChange'> { onChange?: (files: FileList | File[]) => void; onInvalid?: (files: FileList | File[]) => void; label?: ReactNode; helperText?: ReactNode; accept?: string; multiple?: boolean; className?: string }
277
+ export interface FormControlProps extends HtmlComponentProps<HTMLDivElement> { disabled?: boolean; error?: boolean; required?: boolean; variant?: FieldVariant; size?: ComponentSize; fullWidth?: boolean; margin?: 'none' | 'dense' | 'normal' }
278
+ export interface FormControlLabelProps extends HtmlComponentProps<HTMLLabelElement> { label?: ReactNode; labelPlacement?: 'start' | 'end' | 'top' | 'bottom'; disabled?: boolean; required?: boolean; checked?: boolean; value?: unknown; control?: ReactNode; onChange?: (...args: unknown[]) => void }
279
+ export interface FormGroupProps extends HtmlComponentProps<HTMLDivElement> { row?: boolean; spacing?: 'compact' | 'normal' | 'comfortable' }
280
+ export interface FormHelperTextProps extends HtmlComponentProps<HTMLParagraphElement> { disabled?: boolean; error?: boolean; filled?: boolean; focused?: boolean; margin?: 'none' | 'dense' | 'normal'; required?: boolean; variant?: FieldVariant; id?: string; size?: ComponentSize }
281
+ export interface GridProps extends HtmlComponentProps<HTMLDivElement> { container?: boolean; item?: boolean; xs?: number | boolean; sm?: number | boolean; md?: number | boolean; lg?: number | boolean; xl?: number | boolean; spacing?: number | string; direction?: CSSProperties['flexDirection']; justifyContent?: CSSProperties['justifyContent']; alignItems?: CSSProperties['alignItems'] }
282
+ export interface HoverCardProps extends HtmlComponentProps<HTMLDivElement> { triggerText?: ReactNode; cardData?: Record<string, unknown>; variant?: 'default' | 'outlined' | 'filled' | 'minimal'; size?: ComponentSize; cardSize?: ComponentSize | 'xl'; position?: FloatingPlacement; delay?: number; hideDelay?: number; showArrow?: boolean; disabled?: boolean; onShow?: () => void; onHide?: () => void; onAction?: (...args: unknown[]) => void; card?: ReactNode }
283
+ export interface IconProps extends HtmlComponentProps<HTMLSpanElement> { name?: string; size?: number | string; color?: string; children?: ReactNode }
284
+ export interface ImageGalleryImage { src: string; alt?: string; title?: ReactNode; description?: ReactNode; [key: string]: unknown }
285
+ export interface ImageGalleryProps extends HtmlComponentProps<HTMLDivElement> { images?: readonly ImageGalleryImage[]; title?: ReactNode; layout?: 'grid' | 'masonry' | 'carousel'; size?: ComponentSize | 'xl'; columns?: number; gap?: number; showInfo?: boolean; showCount?: boolean; showDownload?: boolean; showPagination?: boolean; itemsPerPage?: number; lazyLoad?: boolean; loading?: boolean; onSelect?: (image: ImageGalleryImage, index: number) => void; onDownload?: (image: ImageGalleryImage) => void; onLightboxOpen?: (event: unknown) => void; onLightboxClose?: () => void }
286
+ export interface ListProps extends HtmlComponentProps<HTMLUListElement> { dense?: boolean; disablePadding?: boolean; nav?: boolean; subheader?: ReactNode }
287
+ export interface ListItemProps<T extends ElementType = 'li'> extends PolymorphicProps<T, { children?: ReactNode; className?: string; button?: boolean; disabled?: boolean; divider?: boolean; selected?: boolean; disableGutters?: boolean; multiselect?: boolean }> { component?: T }
288
+ export interface ListItemIconProps extends HtmlComponentProps<HTMLSpanElement> { position?: 'start' | 'end' }
289
+ export interface ListItemTextProps extends HtmlComponentProps<HTMLSpanElement> { primary?: ReactNode; secondary?: ReactNode; inset?: boolean }
290
+ export interface NumberAnimationProps extends HtmlComponentProps<HTMLSpanElement> { active?: boolean; duration?: number; from?: number; to?: number; locale?: string; precision?: number; showSeparator?: boolean; prefix?: ReactNode; suffix?: ReactNode; separator?: string; formatter?: (value: number) => ReactNode; easing?: 'linear' | 'easeIn' | 'easeOut' | 'easeInOut' | string; onFinish?: () => void }
291
+ export interface PaginationProps extends Omit<HtmlComponentProps<HTMLElement>, 'onChange'> { value?: number; page?: number; onChange?: (page: number) => void; total?: number; pageSize?: number; siblingCount?: number; boundaryCount?: number; size?: ComponentSize | 'xl' }
292
+ export interface PaperProps<T extends ElementType = 'div'> extends PolymorphicProps<T, { children?: ReactNode; className?: string; style?: CSSProperties; variant?: 'elevation' | 'outlined' | 'minimal'; elevation?: number; square?: boolean; hoverable?: boolean; clickable?: boolean; color?: ComponentColor | 'default'; size?: ComponentSize | null; shape?: string | null; gradient?: boolean; frosted?: boolean; textured?: boolean }> { component?: T }
293
+ export interface PopoverProps extends HtmlComponentProps<HTMLDivElement> { open?: boolean; onOpenChange?: (open: boolean) => void; triggerText?: ReactNode; trigger?: ReactNode; placement?: FloatingPlacement; offset?: number }
294
+ export interface PricingPlan { title?: ReactNode; price?: ReactNode; features?: readonly ReactNode[]; highlighted?: boolean; [key: string]: unknown }
295
+ export interface PricingTableProps extends HtmlComponentProps<HTMLDivElement> { plans?: readonly PricingPlan[]; columns?: number }
296
+ export interface ProgressProps extends HtmlComponentProps<HTMLDivElement> { value?: number; label?: ReactNode; showPercent?: boolean; color?: ComponentColor; size?: ComponentSize; animated?: boolean }
297
+ export interface RatingProps extends Omit<HtmlComponentProps<HTMLDivElement>, 'onChange'> { value?: number; max?: number; readOnly?: boolean; onChange?: (value: number) => void; ariaLabel?: string }
298
+ export interface SkeletonProps<T extends ElementType = 'div'> extends PolymorphicProps<T, { children?: ReactNode; className?: string; style?: CSSProperties; animation?: false | 'pulse' | 'wave'; height?: number | string; width?: number | string; variant?: 'text' | 'rectangular' | 'rounded' | 'circular' }> { component?: T }
299
+ export interface SliderProps extends Omit<InputHTMLAttributes<HTMLInputElement>, 'type' | 'onChange' | 'value' | 'defaultValue'> { value?: number; defaultValue?: number; min?: number; max?: number; step?: number; label?: ReactNode; valueLabelDisplay?: 'off' | 'auto' | 'on'; onChange?: (value: number) => void; className?: string; style?: CSSProperties }
300
+ export interface SlideOverProps extends HtmlComponentProps<HTMLDivElement> { open?: boolean; onClose?: () => void; placement?: 'left' | 'right' | 'top' | 'bottom'; width?: number | string; header?: ReactNode; footer?: ReactNode }
301
+ export interface SnackbarProps extends HtmlComponentProps<HTMLDivElement> { open?: boolean; message?: ReactNode; severity?: 'success' | 'warning' | 'error' | 'info'; closable?: boolean; showIcon?: boolean; showProgress?: boolean; autoHideDuration?: number; action?: ReactNode; onClose?: () => void; onAction?: () => void }
302
+ export interface StatusProps extends HtmlComponentProps<HTMLSpanElement> { status?: 'default' | 'success' | 'warning' | 'error' | 'info' | string; size?: ComponentSize; showText?: boolean; animated?: boolean; animationType?: 'auto' | 'glow' | 'spin' | 'bounce' | 'shake' | 'ripple'; text?: ReactNode }
303
+ export interface ToolbarProps extends HtmlComponentProps<HTMLDivElement> { variant?: 'regular' | 'dense'; disableGutters?: boolean }
304
+ export interface TooltipProps extends HtmlComponentProps<HTMLDivElement> { text?: ReactNode; placement?: 'top' | 'bottom' | 'left' | 'right'; children?: ReactNode }
305
+ export interface TypographyProps<T extends ElementType = 'p'> extends PolymorphicProps<T, { children?: ReactNode; className?: string; style?: CSSProperties; variant?: 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6' | 'subtitle1' | 'subtitle2' | 'body1' | 'body2' | 'caption' | 'overline'; component?: T; color?: string; align?: CSSProperties['textAlign']; gutterBottom?: boolean; noWrap?: boolean }> { component?: T }
306
+ export interface TypingTextProps extends HtmlComponentProps<HTMLSpanElement> { text?: string; speed?: number; pause?: number; loop?: boolean; erase?: boolean; showCursor?: boolean }
307
+ export interface VerificationCodeInputProps extends Omit<HtmlComponentProps<HTMLDivElement>, 'onChange'> { length?: number; value?: string; onChange?: (value: string) => void; onComplete?: (value: string) => void; autoFocus?: boolean }
308
+ export interface VideoPlayerProps extends HtmlComponentProps<HTMLDivElement> { src: string; autoplay?: boolean; loop?: boolean; muted?: boolean; poster?: string; controls?: boolean }
309
+ export interface WatermarkProps extends HtmlComponentProps<HTMLDivElement> { content?: ReactNode; image?: string; fullscreen?: boolean; gap?: [number, number]; offset?: [number, number]; rotate?: number; zIndex?: number; opacity?: number; debug?: boolean; cross?: boolean }
310
+
245
311
  export interface ThemeContextValue extends ThemeSnapshot {
246
312
  setMode: (mode: ThemeMode) => void
247
313
  toggleMode: () => void
@@ -342,66 +408,66 @@ export type {
342
408
  SplitRatio,
343
409
  } from '@zeturn/watercolor-core'
344
410
 
345
- export const Accordion: WatercolorComponent
346
- export const Alert: WatercolorComponent
347
- export const AppBar: WatercolorComponent
348
- export const Autocomplete: WatercolorComponent
349
- export const Avatar: WatercolorComponent
350
- export const Badge: WatercolorComponent
351
- export const Banner: WatercolorComponent
352
- export const Blockquote: WatercolorComponent
353
- export const Box: WatercolorComponent
354
- export const Breadcrumb: WatercolorComponent
411
+ export const Accordion: ComponentType<AccordionProps>
412
+ export const Alert: ComponentType<AlertProps>
413
+ export const AppBar: ComponentType<AppBarProps>
414
+ export const Autocomplete: ComponentType<AutocompleteProps>
415
+ export const Avatar: ComponentType<AvatarProps>
416
+ export const Badge: ComponentType<BadgeProps>
417
+ export const Banner: ComponentType<BannerProps>
418
+ export const Blockquote: ComponentType<BlockquoteProps>
419
+ export const Box: <T extends ElementType = 'div'>(props: BoxProps<T>) => ReactElement | null
420
+ export const Breadcrumb: ComponentType<BreadcrumbProps>
355
421
  export const Button: ComponentType<ButtonProps>
356
- export const Card: WatercolorComponent
357
- export const CardActions: WatercolorComponent
358
- export const CardContent: WatercolorComponent
422
+ export const Card: ComponentType<CardProps>
423
+ export const CardActions: ComponentType<CardActionsProps>
424
+ export const CardContent: ComponentType<CardContentProps>
359
425
  export const Checkbox: ComponentType<CheckboxProps>
360
- export const Chip: WatercolorComponent
361
- export const CircularProgress: WatercolorComponent
362
- export const ColorPicker: WatercolorComponent
363
- export const Container: WatercolorComponent
364
- export const Copy: WatercolorComponent
365
- export const DatePicker: WatercolorComponent
366
- export const Fab: WatercolorComponent
367
- export const Feed: WatercolorComponent
368
- export const Feature: WatercolorComponent
369
- export const FileInput: WatercolorComponent
370
- export const FormControl: WatercolorComponent
371
- export const FormControlLabel: WatercolorComponent
372
- export const FormGroup: WatercolorComponent
373
- export const FormHelperText: WatercolorComponent
374
- export const Grid: WatercolorComponent
375
- export const HoverCard: WatercolorComponent
376
- export const Icon: WatercolorComponent
377
- export const IconButton: WatercolorComponent
378
- export const ImageGallery: WatercolorComponent
426
+ export const Chip: ComponentType<ChipProps>
427
+ export const CircularProgress: ComponentType<CircularProgressProps>
428
+ export const ColorPicker: ComponentType<ColorPickerProps>
429
+ export const Container: ComponentType<ContainerProps>
430
+ export const Copy: ComponentType<CopyProps>
431
+ export const DatePicker: ComponentType<DatePickerProps>
432
+ export const Fab: ComponentType<FabProps>
433
+ export const Feed: ComponentType<FeedProps>
434
+ export const Feature: ComponentType<FeatureProps>
435
+ export const FileInput: ComponentType<FileInputProps>
436
+ export const FormControl: ComponentType<FormControlProps>
437
+ export const FormControlLabel: ComponentType<FormControlLabelProps>
438
+ export const FormGroup: ComponentType<FormGroupProps>
439
+ export const FormHelperText: ComponentType<FormHelperTextProps>
440
+ export const Grid: ComponentType<GridProps>
441
+ export const HoverCard: ComponentType<HoverCardProps>
442
+ export const Icon: ComponentType<IconProps>
443
+ export const IconButton: ComponentType<IconButtonProps>
444
+ export const ImageGallery: ComponentType<ImageGalleryProps>
379
445
  export const Inline: <T extends ElementType = 'div'>(props: InlineProps<T>) => ReactElement | null
380
446
  export const Input: ComponentType<InputProps>
381
- export const List: WatercolorComponent
382
- export const ListItem: WatercolorComponent
383
- export const ListItemIcon: WatercolorComponent
384
- export const ListItemText: WatercolorComponent
447
+ export const List: ComponentType<ListProps>
448
+ export const ListItem: <T extends ElementType = 'li'>(props: ListItemProps<T>) => ReactElement | null
449
+ export const ListItemIcon: ComponentType<ListItemIconProps>
450
+ export const ListItemText: ComponentType<ListItemTextProps>
385
451
  export const Menu: ComponentType<MenuProps>
386
452
  export const Modal: ComponentType<ModalProps>
387
- export const NumberAnimation: WatercolorComponent
388
- export const Pagination: WatercolorComponent
453
+ export const NumberAnimation: ComponentType<NumberAnimationProps>
454
+ export const Pagination: ComponentType<PaginationProps>
389
455
  export const Page: <T extends ElementType = 'div'>(props: PageProps<T>) => ReactElement | null
390
- export const Paper: WatercolorComponent
391
- export const Popover: WatercolorComponent
392
- export const PricingTable: WatercolorComponent
393
- export const Progress: WatercolorComponent
456
+ export const Paper: <T extends ElementType = 'div'>(props: PaperProps<T>) => ReactElement | null
457
+ export const Popover: ComponentType<PopoverProps>
458
+ export const PricingTable: ComponentType<PricingTableProps>
459
+ export const Progress: ComponentType<ProgressProps>
394
460
  export const Radio: <Value = string | number | boolean>(props: RadioProps<Value>) => ReactElement | null
395
461
  export const RadioGroup: <Value = string | number | boolean>(props: RadioGroupProps<Value>) => ReactElement | null
396
- export const Rating: WatercolorComponent
462
+ export const Rating: ComponentType<RatingProps>
397
463
  export const Select: <Value extends SelectValue = SelectValue>(props: SelectProps<Value>) => ReactElement | null
398
- export const Skeleton: WatercolorComponent
399
- export const Slider: WatercolorComponent
400
- export const SlideOver: WatercolorComponent
464
+ export const Skeleton: <T extends ElementType = 'div'>(props: SkeletonProps<T>) => ReactElement | null
465
+ export const Slider: ComponentType<SliderProps>
466
+ export const SlideOver: ComponentType<SlideOverProps>
401
467
  export const Split: <T extends ElementType = 'div'>(props: SplitProps<T>) => ReactElement | null
402
468
  export const Stack: <T extends ElementType = 'div'>(props: StackProps<T>) => ReactElement | null
403
- export const Snackbar: WatercolorComponent
404
- export const Status: WatercolorComponent
469
+ export const Snackbar: ComponentType<SnackbarProps>
470
+ export const Status: ComponentType<StatusProps>
405
471
  export const Switch: ComponentType<SwitchProps>
406
472
  export const Table: ComponentType<TableProps> & {
407
473
  Head: ComponentType<TableHeadProps>
@@ -415,13 +481,13 @@ export const TableHead: ComponentType<TableHeadProps>
415
481
  export const TableRow: ComponentType<TableRowProps>
416
482
  export const Tabs: ComponentType<TabsProps>
417
483
  export const TextField: ComponentType<TextFieldProps>
418
- export const Toolbar: WatercolorComponent
419
- export const Tooltip: WatercolorComponent
420
- export const Typography: WatercolorComponent
421
- export const TypingText: WatercolorComponent
422
- export const VerificationCodeInput: WatercolorComponent
423
- export const VideoPlayer: WatercolorComponent
424
- export const Watermark: WatercolorComponent
484
+ export const Toolbar: ComponentType<ToolbarProps>
485
+ export const Tooltip: ComponentType<TooltipProps>
486
+ export const Typography: <T extends ElementType = 'p'>(props: TypographyProps<T>) => ReactElement | null
487
+ export const TypingText: ComponentType<TypingTextProps>
488
+ export const VerificationCodeInput: ComponentType<VerificationCodeInputProps>
489
+ export const VideoPlayer: ComponentType<VideoPlayerProps>
490
+ export const Watermark: ComponentType<WatermarkProps>
425
491
  export const LocaleProvider: ComponentType<LocaleProviderProps>
426
492
  export const defaultLocaleMessages: WatercolorLocaleMessages
427
493
  export function useLocale(): LocaleContextValue
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zeturn/watercolor-react",
3
- "version": "1.2.4",
3
+ "version": "1.2.6",
4
4
  "type": "module",
5
5
  "license": "ISC",
6
6
  "main": "dist/watercolor-react.es.js",
@@ -41,11 +41,11 @@
41
41
  "directory": "packages/react"
42
42
  },
43
43
  "peerDependencies": {
44
- "@zeturn/watercolor-icons-feather": "1.2.4",
45
- "@zeturn/watercolor-icons-heroicons-react": "1.2.4",
46
- "@zeturn/watercolor-icons-lucide-react": "1.2.4",
47
- "@zeturn/watercolor-icons-phosphor-react": "1.2.4",
48
- "@zeturn/watercolor-icons-tabler-react": "1.2.4",
44
+ "@zeturn/watercolor-icons-feather": "1.2.6",
45
+ "@zeturn/watercolor-icons-heroicons-react": "1.2.6",
46
+ "@zeturn/watercolor-icons-lucide-react": "1.2.6",
47
+ "@zeturn/watercolor-icons-phosphor-react": "1.2.6",
48
+ "@zeturn/watercolor-icons-tabler-react": "1.2.6",
49
49
  "react": "^18.0.0 || ^19.0.0",
50
50
  "react-dom": "^18.0.0 || ^19.0.0"
51
51
  },
@@ -67,7 +67,7 @@
67
67
  }
68
68
  },
69
69
  "dependencies": {
70
- "@zeturn/watercolor-core": "1.2.4",
70
+ "@zeturn/watercolor-core": "1.2.6",
71
71
  "prop-types": "^15.8.1"
72
72
  },
73
73
  "devDependencies": {