@aloudata/aloudata-design 3.0.0-beta.8 → 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (168) hide show
  1. package/dist/AProgress/index.d.ts +1 -1
  2. package/dist/AProgress/index.js +19 -5
  3. package/dist/AProgress/index.js.map +1 -1
  4. package/dist/Alert/index.d.ts +1 -1
  5. package/dist/Alert/index.js +22 -8
  6. package/dist/Alert/index.js.map +1 -1
  7. package/dist/Avatar/component/Avatar/index.d.ts +1 -1
  8. package/dist/Avatar/component/Avatar/index.js +4 -4
  9. package/dist/Avatar/component/Avatar/index.js.map +1 -1
  10. package/dist/Avatar/component/Avatar/type.d.ts +1 -1
  11. package/dist/Avatar/component/Avatar/type.js +6 -1
  12. package/dist/Avatar/component/Avatar/type.js.map +1 -1
  13. package/dist/Avatar/index.js +67 -8
  14. package/dist/Avatar/index.js.map +1 -1
  15. package/dist/Badge/index.d.ts +1 -0
  16. package/dist/Badge/index.js +32 -9
  17. package/dist/Badge/index.js.map +1 -1
  18. package/dist/Breadcrumb/index.js +21 -12
  19. package/dist/Breadcrumb/index.js.map +1 -1
  20. package/dist/Button/index.d.ts +2 -0
  21. package/dist/Button/index.js +39 -32
  22. package/dist/Button/index.js.map +1 -1
  23. package/dist/Card/index.js +5 -5
  24. package/dist/Card/index.js.map +1 -1
  25. package/dist/Checkbox/index.js +5 -12
  26. package/dist/Checkbox/index.js.map +1 -1
  27. package/dist/Checkbox/type.d.ts +3 -1
  28. package/dist/Collapse/index.js +40 -24
  29. package/dist/Collapse/index.js.map +1 -1
  30. package/dist/DataPreviewTable/components/Body/Cell.js +5 -4
  31. package/dist/DataPreviewTable/components/Body/Cell.js.map +1 -1
  32. package/dist/DataPreviewTable/components/Body/Error.js +1 -1
  33. package/dist/DataPreviewTable/components/Body/Error.js.map +1 -1
  34. package/dist/DataPreviewTable/components/Body/index.js +2 -1
  35. package/dist/DataPreviewTable/components/Body/index.js.map +1 -1
  36. package/dist/DataPreviewTable/components/DragBar/index.js +1 -1
  37. package/dist/DataPreviewTable/components/DragBar/index.js.map +1 -1
  38. package/dist/DataPreviewTable/components/Header/index.js +14 -12
  39. package/dist/DataPreviewTable/components/Header/index.js.map +1 -1
  40. package/dist/DataPreviewTable/index.js +5 -6
  41. package/dist/DataPreviewTable/index.js.map +1 -1
  42. package/dist/DatePicker/index.d.ts +4 -0
  43. package/dist/DatePicker/index.js +8 -6
  44. package/dist/DatePicker/index.js.map +1 -1
  45. package/dist/Drawer/index.d.ts +1 -0
  46. package/dist/Drawer/index.js +102 -47
  47. package/dist/Drawer/index.js.map +1 -1
  48. package/dist/Dropdown/index.d.ts +5 -0
  49. package/dist/Dropdown/index.js +155 -34
  50. package/dist/Dropdown/index.js.map +1 -1
  51. package/dist/Form/index.d.ts +45 -5
  52. package/dist/Form/index.js +59 -34
  53. package/dist/Form/index.js.map +1 -1
  54. package/dist/HighlightText/index.js +1 -1
  55. package/dist/HighlightText/index.js.map +1 -1
  56. package/dist/Input/components/Input/index.d.ts +5 -2
  57. package/dist/Input/components/Input/index.js +18 -6
  58. package/dist/Input/components/Input/index.js.map +1 -1
  59. package/dist/InputNumber/type.d.ts +2 -2
  60. package/dist/InputSearch/index.js +0 -1
  61. package/dist/InputSearch/index.js.map +1 -1
  62. package/dist/Layout/index.js +1 -1
  63. package/dist/Layout/index.js.map +1 -1
  64. package/dist/LogicTree/DisplayLogicTree.d.ts +1 -1
  65. package/dist/LogicTree/DisplayLogicTree.js.map +1 -1
  66. package/dist/LogicTree/components/DisplayLogicItem/index.d.ts +1 -1
  67. package/dist/LogicTree/components/DisplayLogicItem/index.js +1 -1
  68. package/dist/LogicTree/components/DisplayLogicItem/index.js.map +1 -1
  69. package/dist/LogicTree/components/LogicItem/index.js +2 -3
  70. package/dist/LogicTree/components/LogicItem/index.js.map +1 -1
  71. package/dist/LogicTree/index.d.ts +1 -1
  72. package/dist/LogicTree/index.js +26 -10
  73. package/dist/LogicTree/index.js.map +1 -1
  74. package/dist/MemberPicker/components/NickLabel.js +1 -1
  75. package/dist/MemberPicker/components/NickLabel.js.map +1 -1
  76. package/dist/MemberPicker/components/Panel.js +13 -14
  77. package/dist/MemberPicker/components/Panel.js.map +1 -1
  78. package/dist/MemberPicker/index.js +10 -5
  79. package/dist/MemberPicker/index.js.map +1 -1
  80. package/dist/Menu/index.d.ts +4 -0
  81. package/dist/Menu/index.js +35 -13
  82. package/dist/Menu/index.js.map +1 -1
  83. package/dist/Modal/index.d.ts +5 -2
  84. package/dist/Modal/index.js +119 -66
  85. package/dist/Modal/index.js.map +1 -1
  86. package/dist/Popconfirm/index.js +6 -1
  87. package/dist/Popconfirm/index.js.map +1 -1
  88. package/dist/Popover/index.js +5 -3
  89. package/dist/Popover/index.js.map +1 -1
  90. package/dist/Progress/index.d.ts +0 -3
  91. package/dist/Progress/index.js +0 -3
  92. package/dist/Progress/index.js.map +1 -1
  93. package/dist/Radio/components/Radio/index.js +14 -25
  94. package/dist/Radio/components/Radio/index.js.map +1 -1
  95. package/dist/RenameInput/index.js +0 -1
  96. package/dist/RenameInput/index.js.map +1 -1
  97. package/dist/Select/BaseSelect.js +12 -7
  98. package/dist/Select/BaseSelect.js.map +1 -1
  99. package/dist/Select/Selector/MultipleSelector.js +10 -6
  100. package/dist/Select/Selector/MultipleSelector.js.map +1 -1
  101. package/dist/Select/Selector/index.d.ts +2 -0
  102. package/dist/Select/Selector/index.js +1 -1
  103. package/dist/Select/Selector/index.js.map +1 -1
  104. package/dist/Select/components/Suffix.js +1 -1
  105. package/dist/Select/components/Suffix.js.map +1 -1
  106. package/dist/Select/interface.d.ts +4 -0
  107. package/dist/Select/utils/getWidthStyle.js.map +1 -1
  108. package/dist/Steps/index.js +6 -6
  109. package/dist/Steps/index.js.map +1 -1
  110. package/dist/Switch/index.js +21 -7
  111. package/dist/Switch/index.js.map +1 -1
  112. package/dist/Table/components/Footer/index.js +1 -1
  113. package/dist/Table/components/Footer/index.js.map +1 -1
  114. package/dist/Table/hooks/useRowDnd.js +2 -8
  115. package/dist/Table/hooks/useRowDnd.js.map +1 -1
  116. package/dist/Table/hooks/useRowSelection.d.ts +1 -1
  117. package/dist/Table/hooks/useRowSelection.js +7 -9
  118. package/dist/Table/hooks/useRowSelection.js.map +1 -1
  119. package/dist/Table/index.js +1 -1
  120. package/dist/Table/index.js.map +1 -1
  121. package/dist/Tabs/index.js +37 -30
  122. package/dist/Tabs/index.js.map +1 -1
  123. package/dist/Tooltip/index.js +5 -3
  124. package/dist/Tooltip/index.js.map +1 -1
  125. package/dist/Tour/index.js +48 -38
  126. package/dist/Tour/index.js.map +1 -1
  127. package/dist/Tree/DirectoryTree.d.ts +2 -2
  128. package/dist/Tree/DirectoryTree.js.map +1 -1
  129. package/dist/Tree/Tree.d.ts +2 -2
  130. package/dist/Tree/Tree2.js +2 -2
  131. package/dist/Tree/Tree2.js.map +1 -1
  132. package/dist/Tree/index.d.ts +4 -2
  133. package/dist/Tree/index.js.map +1 -1
  134. package/dist/Upload/index.d.ts +15 -2
  135. package/dist/Upload/index.js +4 -2
  136. package/dist/Upload/index.js.map +1 -1
  137. package/dist/_utils/floatingLayer.d.ts +15 -0
  138. package/dist/_utils/floatingLayer.js +30 -0
  139. package/dist/_utils/floatingLayer.js.map +1 -0
  140. package/dist/_utils/storybookArgTypes.d.ts +11 -0
  141. package/dist/_utils/storybookArgTypes.js +2 -0
  142. package/dist/aloudata-design.css +1 -1
  143. package/dist/index.d.ts +15 -6
  144. package/dist/index.js +8 -3
  145. package/dist/theme/createTheme.d.ts +2 -0
  146. package/dist/theme/createTheme.js +46 -0
  147. package/dist/theme/createTheme.js.map +1 -0
  148. package/dist/theme/defaultTheme.d.ts +2 -0
  149. package/dist/theme/defaultTheme.js +19 -0
  150. package/dist/theme/defaultTheme.js.map +1 -0
  151. package/dist/theme/index.d.ts +5 -0
  152. package/dist/theme/index.js +4 -0
  153. package/dist/theme/initAldTheme.d.ts +2 -0
  154. package/dist/theme/initAldTheme.js +26 -0
  155. package/dist/theme/initAldTheme.js.map +1 -0
  156. package/dist/theme/themeToCssVars.d.ts +2 -0
  157. package/dist/theme/themeToCssVars.js +144 -0
  158. package/dist/theme/themeToCssVars.js.map +1 -0
  159. package/dist/theme/tokenMap.d.ts +5 -0
  160. package/dist/theme/tokenMap.js +12 -0
  161. package/dist/theme/tokenMap.js.map +1 -0
  162. package/dist/theme/types.d.ts +20 -0
  163. package/dist/theme/types.js +2 -0
  164. package/dist/theme.d.ts +2 -0
  165. package/package.json +12 -11
  166. package/dist/_utils/SimpleOverflow.d.ts +0 -14
  167. package/dist/_utils/SimpleOverflow.js +0 -61
  168. package/dist/_utils/SimpleOverflow.js.map +0 -1
@@ -1,5 +1,5 @@
1
1
  import { default as React } from 'react';
2
- interface AProgressProps {
2
+ export interface AProgressProps {
3
3
  percent?: number;
4
4
  type?: 'line' | 'circle' | 'dashboard';
5
5
  status?: 'success' | 'exception' | 'normal' | 'active';
@@ -6,10 +6,11 @@ function AProgress(props) {
6
6
  const { percent = 0, type = "line", status, showInfo = true, strokeColor = "var(--action-primary-normal)", trailColor = "var(--background-neutral-subtle)", strokeWidth, width = 120, format, className, style, size } = props;
7
7
  const clampedPercent = Math.min(100, Math.max(0, percent));
8
8
  const resolvedStatus = status || (clampedPercent >= 100 ? "success" : "normal");
9
- const statusColor = resolvedStatus === "success" ? "var(--content-positive-primary)" : resolvedStatus === "exception" ? "var(--content-negative-primary)" : strokeColor;
9
+ const statusColor = resolvedStatus === "success" ? "var(--content-positive-secondary)" : resolvedStatus === "exception" ? "var(--content-negative-secondary)" : resolvedStatus === "active" ? "var(--content-informative-secondary)" : strokeColor;
10
+ const resolvedStrokeWidth = strokeWidth || (size === "small" ? 3 : 4);
10
11
  if (type === "circle" || type === "dashboard") {
11
12
  const circleSize = width;
12
- const sw = strokeWidth || 6;
13
+ const sw = resolvedStrokeWidth;
13
14
  const radius = (circleSize - sw) / 2;
14
15
  const circumference = 2 * Math.PI * radius;
15
16
  const dashOffset = circumference * (1 - clampedPercent / 100);
@@ -45,12 +46,20 @@ function AProgress(props) {
45
46
  className: "tw-transition-all tw-duration-300"
46
47
  })]
47
48
  }), showInfo && /* @__PURE__ */ jsx("span", {
48
- className: "tw-absolute tw-text-sm tw-font-medium",
49
+ className: "tw-absolute tw-z-[1] tw-inline-flex tw-items-center tw-justify-center tw-rounded-full tw-text-sm tw-font-medium",
50
+ style: {
51
+ minWidth: "4ch",
52
+ padding: "0 4px",
53
+ color: "var(--content-primary)",
54
+ backgroundColor: "var(--background-neutral-surface)",
55
+ fontFamily: "ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace",
56
+ fontVariantNumeric: "tabular-nums"
57
+ },
49
58
  children: format ? format(clampedPercent) : `${clampedPercent}%`
50
59
  })]
51
60
  });
52
61
  }
53
- const lineHeight = strokeWidth || (size === "small" ? 6 : 8);
62
+ const lineHeight = resolvedStrokeWidth;
54
63
  return /* @__PURE__ */ jsx("div", {
55
64
  className: cn("ald-progress ald-progress-line tw-w-full", className),
56
65
  style,
@@ -70,7 +79,12 @@ function AProgress(props) {
70
79
  }
71
80
  })
72
81
  }), showInfo && /* @__PURE__ */ jsx("span", {
73
- className: "ald-progress-text tw-whitespace-nowrap tw-text-sm",
82
+ className: "ald-progress-text tw-inline-block tw-whitespace-nowrap tw-text-left tw-text-sm",
83
+ style: {
84
+ minWidth: "4ch",
85
+ fontFamily: "ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace",
86
+ fontVariantNumeric: "tabular-nums"
87
+ },
74
88
  children: format ? format(clampedPercent) : `${clampedPercent}%`
75
89
  })]
76
90
  })
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../src/AProgress/index.tsx"],"sourcesContent":["import React from 'react';\nimport { cn } from '../lib/utils';\n\ninterface AProgressProps {\n percent?: number;\n type?: 'line' | 'circle' | 'dashboard';\n status?: 'success' | 'exception' | 'normal' | 'active';\n showInfo?: boolean;\n strokeColor?: string;\n trailColor?: string;\n strokeWidth?: number;\n width?: number;\n format?: (percent?: number) => React.ReactNode;\n className?: string;\n style?: React.CSSProperties;\n size?: 'default' | 'small';\n}\n\nfunction AProgress(props: AProgressProps) {\n const {\n percent = 0,\n type = 'line',\n status,\n showInfo = true,\n strokeColor = 'var(--action-primary-normal)',\n trailColor = 'var(--background-neutral-subtle)',\n strokeWidth,\n width = 120,\n format,\n className,\n style,\n size,\n } = props;\n\n const clampedPercent = Math.min(100, Math.max(0, percent));\n const resolvedStatus =\n status || (clampedPercent >= 100 ? 'success' : 'normal');\n\n const statusColor =\n resolvedStatus === 'success'\n ? 'var(--content-positive-primary)'\n : resolvedStatus === 'exception'\n ? 'var(--content-negative-primary)'\n : strokeColor;\n\n if (type === 'circle' || type === 'dashboard') {\n const circleSize = width;\n const sw = strokeWidth || 6;\n const radius = (circleSize - sw) / 2;\n const circumference = 2 * Math.PI * radius;\n const dashOffset = circumference * (1 - clampedPercent / 100);\n\n return (\n <div\n className={cn(\n 'ald-progress ald-progress-circle tw-relative tw-inline-flex tw-items-center tw-justify-center',\n className,\n )}\n style={{ width: circleSize, height: circleSize, ...style }}\n >\n <svg\n viewBox={`0 0 ${circleSize} ${circleSize}`}\n width={circleSize}\n height={circleSize}\n >\n <circle\n cx={circleSize / 2}\n cy={circleSize / 2}\n r={radius}\n fill=\"none\"\n stroke={trailColor}\n strokeWidth={sw}\n />\n <circle\n cx={circleSize / 2}\n cy={circleSize / 2}\n r={radius}\n fill=\"none\"\n stroke={statusColor}\n strokeWidth={sw}\n strokeLinecap=\"round\"\n strokeDasharray={circumference}\n strokeDashoffset={dashOffset}\n transform={`rotate(-90 ${circleSize / 2} ${circleSize / 2})`}\n className=\"tw-transition-all tw-duration-300\"\n />\n </svg>\n {showInfo && (\n <span className=\"tw-absolute tw-text-sm tw-font-medium\">\n {format ? format(clampedPercent) : `${clampedPercent}%`}\n </span>\n )}\n </div>\n );\n }\n\n // Line type\n const lineHeight = strokeWidth || (size === 'small' ? 6 : 8);\n\n return (\n <div\n className={cn('ald-progress ald-progress-line tw-w-full', className)}\n style={style}\n >\n <div className=\"tw-flex tw-items-center tw-gap-2\">\n <div\n className=\"ald-progress-outer tw-flex-1 tw-overflow-hidden tw-rounded-full\"\n style={{ height: lineHeight, backgroundColor: trailColor }}\n >\n <div\n className=\"ald-progress-inner tw-h-full tw-rounded-full tw-transition-all tw-duration-300\"\n style={{\n width: `${clampedPercent}%`,\n backgroundColor: statusColor,\n }}\n />\n </div>\n {showInfo && (\n <span className=\"ald-progress-text tw-whitespace-nowrap tw-text-sm\">\n {format ? format(clampedPercent) : `${clampedPercent}%`}\n </span>\n )}\n </div>\n </div>\n );\n}\n\nexport default AProgress;\n"],"mappings":";;;;AAkBA,SAAS,UAAU,OAAuB;CACxC,MAAM,EACJ,UAAU,GACV,OAAO,QACP,QACA,WAAW,MACX,cAAc,gCACd,aAAa,oCACb,aACA,QAAQ,KACR,QACA,WACA,OACA,SACE;CAEJ,MAAM,iBAAiB,KAAK,IAAI,KAAK,KAAK,IAAI,GAAG,QAAQ,CAAC;CAC1D,MAAM,iBACJ,WAAW,kBAAkB,MAAM,YAAY;CAEjD,MAAM,cACJ,mBAAmB,YACf,oCACA,mBAAmB,cACnB,oCACA;AAEN,KAAI,SAAS,YAAY,SAAS,aAAa;EAC7C,MAAM,aAAa;EACnB,MAAM,KAAK,eAAe;EAC1B,MAAM,UAAU,aAAa,MAAM;EACnC,MAAM,gBAAgB,IAAI,KAAK,KAAK;EACpC,MAAM,aAAa,iBAAiB,IAAI,iBAAiB;AAEzD,SACE,qBAAC,OAAD;GACE,WAAW,GACT,iGACA,UACD;GACD,OAAO;IAAE,OAAO;IAAY,QAAQ;IAAY,GAAG;IAAO;aAL5D,CAOE,qBAAC,OAAD;IACE,SAAS,OAAO,WAAW,GAAG;IAC9B,OAAO;IACP,QAAQ;cAHV,CAKE,oBAAC,UAAD;KACE,IAAI,aAAa;KACjB,IAAI,aAAa;KACjB,GAAG;KACH,MAAK;KACL,QAAQ;KACR,aAAa;KACb,CAAA,EACF,oBAAC,UAAD;KACE,IAAI,aAAa;KACjB,IAAI,aAAa;KACjB,GAAG;KACH,MAAK;KACL,QAAQ;KACR,aAAa;KACb,eAAc;KACd,iBAAiB;KACjB,kBAAkB;KAClB,WAAW,cAAc,aAAa,EAAE,GAAG,aAAa,EAAE;KAC1D,WAAU;KACV,CAAA,CACE;OACL,YACC,oBAAC,QAAD;IAAM,WAAU;cACb,SAAS,OAAO,eAAe,GAAG,GAAG,eAAe;IAChD,CAAA,CAEL;;;CAKV,MAAM,aAAa,gBAAgB,SAAS,UAAU,IAAI;AAE1D,QACE,oBAAC,OAAD;EACE,WAAW,GAAG,4CAA4C,UAAU;EAC7D;YAEP,qBAAC,OAAD;GAAK,WAAU;aAAf,CACE,oBAAC,OAAD;IACE,WAAU;IACV,OAAO;KAAE,QAAQ;KAAY,iBAAiB;KAAY;cAE1D,oBAAC,OAAD;KACE,WAAU;KACV,OAAO;MACL,OAAO,GAAG,eAAe;MACzB,iBAAiB;MAClB;KACD,CAAA;IACE,CAAA,EACL,YACC,oBAAC,QAAD;IAAM,WAAU;cACb,SAAS,OAAO,eAAe,GAAG,GAAG,eAAe;IAChD,CAAA,CAEL;;EACF,CAAA"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../src/AProgress/index.tsx"],"sourcesContent":["import React from 'react';\nimport { cn } from '../lib/utils';\n\nexport interface AProgressProps {\n percent?: number;\n type?: 'line' | 'circle' | 'dashboard';\n status?: 'success' | 'exception' | 'normal' | 'active';\n showInfo?: boolean;\n strokeColor?: string;\n trailColor?: string;\n strokeWidth?: number;\n width?: number;\n format?: (percent?: number) => React.ReactNode;\n className?: string;\n style?: React.CSSProperties;\n size?: 'default' | 'small';\n}\n\nfunction AProgress(props: AProgressProps) {\n const {\n percent = 0,\n type = 'line',\n status,\n showInfo = true,\n strokeColor = 'var(--action-primary-normal)',\n trailColor = 'var(--background-neutral-subtle)',\n strokeWidth,\n width = 120,\n format,\n className,\n style,\n size,\n } = props;\n\n const clampedPercent = Math.min(100, Math.max(0, percent));\n const resolvedStatus =\n status || (clampedPercent >= 100 ? 'success' : 'normal');\n\n const statusColor =\n resolvedStatus === 'success'\n ? 'var(--content-positive-secondary)'\n : resolvedStatus === 'exception'\n ? 'var(--content-negative-secondary)'\n : resolvedStatus === 'active'\n ? 'var(--content-informative-secondary)'\n : strokeColor;\n const resolvedStrokeWidth = strokeWidth || (size === 'small' ? 3 : 4);\n\n if (type === 'circle' || type === 'dashboard') {\n const circleSize = width;\n const sw = resolvedStrokeWidth;\n const radius = (circleSize - sw) / 2;\n const circumference = 2 * Math.PI * radius;\n const dashOffset = circumference * (1 - clampedPercent / 100);\n\n return (\n <div\n className={cn(\n 'ald-progress ald-progress-circle tw-relative tw-inline-flex tw-items-center tw-justify-center',\n className,\n )}\n style={{ width: circleSize, height: circleSize, ...style }}\n >\n <svg\n viewBox={`0 0 ${circleSize} ${circleSize}`}\n width={circleSize}\n height={circleSize}\n >\n <circle\n cx={circleSize / 2}\n cy={circleSize / 2}\n r={radius}\n fill=\"none\"\n stroke={trailColor}\n strokeWidth={sw}\n />\n <circle\n cx={circleSize / 2}\n cy={circleSize / 2}\n r={radius}\n fill=\"none\"\n stroke={statusColor}\n strokeWidth={sw}\n strokeLinecap=\"round\"\n strokeDasharray={circumference}\n strokeDashoffset={dashOffset}\n transform={`rotate(-90 ${circleSize / 2} ${circleSize / 2})`}\n className=\"tw-transition-all tw-duration-300\"\n />\n </svg>\n {showInfo && (\n <span\n className=\"tw-absolute tw-z-[1] tw-inline-flex tw-items-center tw-justify-center tw-rounded-full tw-text-sm tw-font-medium\"\n style={{\n minWidth: '4ch',\n padding: '0 4px',\n color: 'var(--content-primary)',\n backgroundColor: 'var(--background-neutral-surface)',\n fontFamily:\n 'ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace',\n fontVariantNumeric: 'tabular-nums',\n }}\n >\n {format ? format(clampedPercent) : `${clampedPercent}%`}\n </span>\n )}\n </div>\n );\n }\n\n const lineHeight = resolvedStrokeWidth;\n\n return (\n <div\n className={cn('ald-progress ald-progress-line tw-w-full', className)}\n style={style}\n >\n <div className=\"tw-flex tw-items-center tw-gap-2\">\n <div\n className=\"ald-progress-outer tw-flex-1 tw-overflow-hidden tw-rounded-full\"\n style={{ height: lineHeight, backgroundColor: trailColor }}\n >\n <div\n className=\"ald-progress-inner tw-h-full tw-rounded-full tw-transition-all tw-duration-300\"\n style={{\n width: `${clampedPercent}%`,\n backgroundColor: statusColor,\n }}\n />\n </div>\n {showInfo && (\n <span\n className=\"ald-progress-text tw-inline-block tw-whitespace-nowrap tw-text-left tw-text-sm\"\n style={{\n minWidth: '4ch',\n fontFamily:\n 'ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace',\n fontVariantNumeric: 'tabular-nums',\n }}\n >\n {format ? format(clampedPercent) : `${clampedPercent}%`}\n </span>\n )}\n </div>\n </div>\n );\n}\n\nexport default AProgress;\n"],"mappings":";;;;AAkBA,SAAS,UAAU,OAAuB;CACxC,MAAM,EACJ,UAAU,GACV,OAAO,QACP,QACA,WAAW,MACX,cAAc,gCACd,aAAa,oCACb,aACA,QAAQ,KACR,QACA,WACA,OACA,SACE;CAEJ,MAAM,iBAAiB,KAAK,IAAI,KAAK,KAAK,IAAI,GAAG,QAAQ,CAAC;CAC1D,MAAM,iBACJ,WAAW,kBAAkB,MAAM,YAAY;CAEjD,MAAM,cACJ,mBAAmB,YACf,sCACA,mBAAmB,cACnB,sCACA,mBAAmB,WACnB,yCACA;CACN,MAAM,sBAAsB,gBAAgB,SAAS,UAAU,IAAI;AAEnE,KAAI,SAAS,YAAY,SAAS,aAAa;EAC7C,MAAM,aAAa;EACnB,MAAM,KAAK;EACX,MAAM,UAAU,aAAa,MAAM;EACnC,MAAM,gBAAgB,IAAI,KAAK,KAAK;EACpC,MAAM,aAAa,iBAAiB,IAAI,iBAAiB;AAEzD,SACE,qBAAC,OAAD;GACE,WAAW,GACT,iGACA,UACD;GACD,OAAO;IAAE,OAAO;IAAY,QAAQ;IAAY,GAAG;IAAO;aAL5D,CAOE,qBAAC,OAAD;IACE,SAAS,OAAO,WAAW,GAAG;IAC9B,OAAO;IACP,QAAQ;cAHV,CAKE,oBAAC,UAAD;KACE,IAAI,aAAa;KACjB,IAAI,aAAa;KACjB,GAAG;KACH,MAAK;KACL,QAAQ;KACR,aAAa;KACb,CAAA,EACF,oBAAC,UAAD;KACE,IAAI,aAAa;KACjB,IAAI,aAAa;KACjB,GAAG;KACH,MAAK;KACL,QAAQ;KACR,aAAa;KACb,eAAc;KACd,iBAAiB;KACjB,kBAAkB;KAClB,WAAW,cAAc,aAAa,EAAE,GAAG,aAAa,EAAE;KAC1D,WAAU;KACV,CAAA,CACE;OACL,YACC,oBAAC,QAAD;IACE,WAAU;IACV,OAAO;KACL,UAAU;KACV,SAAS;KACT,OAAO;KACP,iBAAiB;KACjB,YACE;KACF,oBAAoB;KACrB;cAEA,SAAS,OAAO,eAAe,GAAG,GAAG,eAAe;IAChD,CAAA,CAEL;;;CAIV,MAAM,aAAa;AAEnB,QACE,oBAAC,OAAD;EACE,WAAW,GAAG,4CAA4C,UAAU;EAC7D;YAEP,qBAAC,OAAD;GAAK,WAAU;aAAf,CACE,oBAAC,OAAD;IACE,WAAU;IACV,OAAO;KAAE,QAAQ;KAAY,iBAAiB;KAAY;cAE1D,oBAAC,OAAD;KACE,WAAU;KACV,OAAO;MACL,OAAO,GAAG,eAAe;MACzB,iBAAiB;MAClB;KACD,CAAA;IACE,CAAA,EACL,YACC,oBAAC,QAAD;IACE,WAAU;IACV,OAAO;KACL,UAAU;KACV,YACE;KACF,oBAAoB;KACrB;cAEA,SAAS,OAAO,eAAe,GAAG,GAAG,eAAe;IAChD,CAAA,CAEL;;EACF,CAAA"}
@@ -1,6 +1,6 @@
1
1
  import { default as React } from 'react';
2
2
  export interface AlertProps {
3
- type?: 'success' | 'info' | 'warning' | 'error';
3
+ type?: 'success' | 'info' | 'warning' | 'error' | 'none';
4
4
  message?: React.ReactNode;
5
5
  description?: React.ReactNode;
6
6
  closable?: boolean;
@@ -11,33 +11,46 @@ var typeConfig = {
11
11
  success: {
12
12
  bg: "tw-bg-[var(--background-positive-subtle)]",
13
13
  border: "tw-border-[var(--border-positive-subtle)]",
14
+ titleColor: "tw-text-[var(--content-positive-primary)]",
14
15
  icon: /* @__PURE__ */ jsx(Memo$1, {
15
16
  size: 16,
16
- color: "var(--content-positive-primary)"
17
+ color: "var(--content-positive-secondary)"
17
18
  })
18
19
  },
19
20
  info: {
20
21
  bg: "tw-bg-[var(--background-informative-subtle)]",
21
22
  border: "tw-border-[var(--border-informative-subtle)]",
23
+ titleColor: "tw-text-[var(--content-informative-primary)]",
22
24
  icon: /* @__PURE__ */ jsx(Memo$4, {
23
25
  size: 16,
24
- color: "var(--content-informative-primary)"
26
+ color: "var(--content-informative-secondary)"
25
27
  })
26
28
  },
27
29
  warning: {
28
30
  bg: "tw-bg-[var(--background-warning-subtle)]",
29
31
  border: "tw-border-[var(--border-warning-subtle)]",
32
+ titleColor: "tw-text-[var(--content-warning-primary)]",
30
33
  icon: /* @__PURE__ */ jsx(Memo, {
31
34
  size: 16,
32
- color: "var(--content-warning-primary)"
35
+ color: "var(--content-warning-secondary)"
33
36
  })
34
37
  },
35
38
  error: {
36
39
  bg: "tw-bg-[var(--background-negative-subtle)]",
37
40
  border: "tw-border-[var(--border-negative-subtle)]",
41
+ titleColor: "tw-text-[var(--content-negative-primary)]",
38
42
  icon: /* @__PURE__ */ jsx(Memo$2, {
39
43
  size: 16,
40
- color: "var(--content-negative-primary)"
44
+ color: "var(--content-negative-secondary)"
45
+ })
46
+ },
47
+ none: {
48
+ bg: "tw-bg-[var(--background-neutral-subtle)]",
49
+ border: "tw-border-[var(--border-neutral-subtle)]",
50
+ titleColor: "tw-text-[var(--content-primary)]",
51
+ icon: /* @__PURE__ */ jsx(Memo$4, {
52
+ size: 16,
53
+ color: "var(--content-secondary)"
41
54
  })
42
55
  }
43
56
  };
@@ -47,7 +60,7 @@ function Alert(props) {
47
60
  if (closed) return null;
48
61
  const config = typeConfig[type] || typeConfig.info;
49
62
  return /* @__PURE__ */ jsxs("div", {
50
- className: cn("ald-alert tw-flex tw-items-start tw-gap-2 tw-rounded-r-100 tw-border tw-border-solid tw-p-3", config.bg, config.border, className),
63
+ className: cn("ald-alert tw-flex tw-items-start tw-gap-2 tw-rounded-r-75 tw-border tw-border-solid tw-p-3", config.bg, config.border, className),
51
64
  style,
52
65
  role: "alert",
53
66
  children: [
@@ -58,10 +71,11 @@ function Alert(props) {
58
71
  /* @__PURE__ */ jsxs("div", {
59
72
  className: "ald-alert-content tw-min-w-0 tw-flex-1",
60
73
  children: [message && /* @__PURE__ */ jsx("div", {
61
- className: "ald-alert-message tw-text-sm tw-font-medium tw-text-[var(--content-primary)]",
74
+ className: cn("ald-alert-message tw-text-sm tw-font-medium tw-leading-5", config.titleColor),
62
75
  children: message
63
76
  }), description && /* @__PURE__ */ jsx("div", {
64
- className: "ald-alert-description tw-mt-1 tw-text-sm tw-text-[var(--content-secondary)]",
77
+ className: "ald-alert-description tw-mt-1 tw-text-sm tw-font-normal tw-leading-5 tw-text-[var(--content-secondary)]",
78
+ style: { fontFeatureSettings: "'liga' off, 'clig' off" },
65
79
  children: description
66
80
  })]
67
81
  }),
@@ -71,7 +85,7 @@ function Alert(props) {
71
85
  }),
72
86
  closable && /* @__PURE__ */ jsx("button", {
73
87
  type: "button",
74
- className: "ald-alert-close-icon tw-flex tw-cursor-pointer tw-items-center tw-border-0 tw-bg-transparent tw-p-0",
88
+ className: "ald-alert-close-icon tw-flex tw-cursor-pointer tw-items-center tw-self-start tw-border-0 tw-bg-transparent tw-p-0 tw-pt-0.5",
75
89
  onClick: (e) => {
76
90
  setClosed(true);
77
91
  onClose?.(e);
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../src/Alert/index.tsx"],"sourcesContent":["import React, { useState } from 'react';\nimport {\n AttentionTriangleFill,\n CheckCircleFill,\n CloseCircleFill,\n CloseLightLine,\n InformationCircleFill,\n} from '../Icon';\nimport { cn } from '../lib/utils';\n\nexport interface AlertProps {\n type?: 'success' | 'info' | 'warning' | 'error';\n message?: React.ReactNode;\n description?: React.ReactNode;\n closable?: boolean;\n onClose?: (e: React.MouseEvent<HTMLButtonElement>) => void;\n afterClose?: () => void;\n showIcon?: boolean;\n icon?: React.ReactNode;\n banner?: boolean;\n action?: React.ReactNode;\n className?: string;\n style?: React.CSSProperties;\n}\n\nconst typeConfig: Record<\n string,\n { bg: string; border: string; icon: React.ReactNode }\n> = {\n success: {\n bg: 'tw-bg-[var(--background-positive-subtle)]',\n border: 'tw-border-[var(--border-positive-subtle)]',\n icon: <CheckCircleFill size={16} color=\"var(--content-positive-primary)\" />,\n },\n info: {\n bg: 'tw-bg-[var(--background-informative-subtle)]',\n border: 'tw-border-[var(--border-informative-subtle)]',\n icon: (\n <InformationCircleFill\n size={16}\n color=\"var(--content-informative-primary)\"\n />\n ),\n },\n warning: {\n bg: 'tw-bg-[var(--background-warning-subtle)]',\n border: 'tw-border-[var(--border-warning-subtle)]',\n icon: (\n <AttentionTriangleFill size={16} color=\"var(--content-warning-primary)\" />\n ),\n },\n error: {\n bg: 'tw-bg-[var(--background-negative-subtle)]',\n border: 'tw-border-[var(--border-negative-subtle)]',\n icon: <CloseCircleFill size={16} color=\"var(--content-negative-primary)\" />,\n },\n};\n\nfunction Alert(props: AlertProps) {\n const {\n type = 'info',\n message,\n description,\n closable,\n onClose,\n afterClose,\n showIcon = true,\n icon,\n action,\n className,\n style,\n } = props;\n\n const [closed, setClosed] = useState(false);\n\n if (closed) return null;\n\n const config = typeConfig[type] || typeConfig.info;\n\n return (\n <div\n className={cn(\n 'ald-alert tw-flex tw-items-start tw-gap-2 tw-rounded-r-100 tw-border tw-border-solid tw-p-3',\n config.bg,\n config.border,\n className,\n )}\n style={style}\n role=\"alert\"\n >\n {showIcon && (\n <span className=\"ald-alert-icon tw-flex tw-items-center tw-pt-0.5\">\n {icon || config.icon}\n </span>\n )}\n <div className=\"ald-alert-content tw-min-w-0 tw-flex-1\">\n {message && (\n <div className=\"ald-alert-message tw-text-sm tw-font-medium tw-text-[var(--content-primary)]\">\n {message}\n </div>\n )}\n {description && (\n <div className=\"ald-alert-description tw-mt-1 tw-text-sm tw-text-[var(--content-secondary)]\">\n {description}\n </div>\n )}\n </div>\n {action && <div className=\"ald-alert-action\">{action}</div>}\n {closable && (\n <button\n type=\"button\"\n className=\"ald-alert-close-icon tw-flex tw-cursor-pointer tw-items-center tw-border-0 tw-bg-transparent tw-p-0\"\n onClick={(e) => {\n setClosed(true);\n onClose?.(e);\n afterClose?.();\n }}\n >\n <CloseLightLine size={16} color=\"var(--content-secondary)\" />\n </button>\n )}\n </div>\n );\n}\n\nexport default Alert;\n"],"mappings":";;;;;;;;;AAyBA,IAAM,aAGF;CACF,SAAS;EACP,IAAI;EACJ,QAAQ;EACR,MAAM,oBAAC,QAAD;GAAiB,MAAM;GAAI,OAAM;GAAoC,CAAA;EAC5E;CACD,MAAM;EACJ,IAAI;EACJ,QAAQ;EACR,MACE,oBAAC,QAAD;GACE,MAAM;GACN,OAAM;GACN,CAAA;EAEL;CACD,SAAS;EACP,IAAI;EACJ,QAAQ;EACR,MACE,oBAAC,MAAD;GAAuB,MAAM;GAAI,OAAM;GAAmC,CAAA;EAE7E;CACD,OAAO;EACL,IAAI;EACJ,QAAQ;EACR,MAAM,oBAAC,QAAD;GAAiB,MAAM;GAAI,OAAM;GAAoC,CAAA;EAC5E;CACF;AAED,SAAS,MAAM,OAAmB;CAChC,MAAM,EACJ,OAAO,QACP,SACA,aACA,UACA,SACA,YACA,WAAW,MACX,MACA,QACA,WACA,UACE;CAEJ,MAAM,CAAC,QAAQ,aAAa,SAAS,MAAM;AAE3C,KAAI,OAAQ,QAAO;CAEnB,MAAM,SAAS,WAAW,SAAS,WAAW;AAE9C,QACE,qBAAC,OAAD;EACE,WAAW,GACT,+FACA,OAAO,IACP,OAAO,QACP,UACD;EACM;EACP,MAAK;YARP;GAUG,YACC,oBAAC,QAAD;IAAM,WAAU;cACb,QAAQ,OAAO;IACX,CAAA;GAET,qBAAC,OAAD;IAAK,WAAU;cAAf,CACG,WACC,oBAAC,OAAD;KAAK,WAAU;eACZ;KACG,CAAA,EAEP,eACC,oBAAC,OAAD;KAAK,WAAU;eACZ;KACG,CAAA,CAEJ;;GACL,UAAU,oBAAC,OAAD;IAAK,WAAU;cAAoB;IAAa,CAAA;GAC1D,YACC,oBAAC,UAAD;IACE,MAAK;IACL,WAAU;IACV,UAAU,MAAM;AACd,eAAU,KAAK;AACf,eAAU,EAAE;AACZ,mBAAc;;cAGhB,oBAAC,QAAD;KAAgB,MAAM;KAAI,OAAM;KAA6B,CAAA;IACtD,CAAA;GAEP"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../src/Alert/index.tsx"],"sourcesContent":["import React, { useState } from 'react';\nimport {\n AttentionTriangleFill,\n CheckCircleFill,\n CloseCircleFill,\n CloseLightLine,\n InformationCircleFill,\n} from '../Icon';\nimport { cn } from '../lib/utils';\n\nexport interface AlertProps {\n type?: 'success' | 'info' | 'warning' | 'error' | 'none';\n message?: React.ReactNode;\n description?: React.ReactNode;\n closable?: boolean;\n onClose?: (e: React.MouseEvent<HTMLButtonElement>) => void;\n afterClose?: () => void;\n showIcon?: boolean;\n icon?: React.ReactNode;\n banner?: boolean;\n action?: React.ReactNode;\n className?: string;\n style?: React.CSSProperties;\n}\n\nconst typeConfig: Record<\n string,\n { bg: string; border: string; icon: React.ReactNode; titleColor: string }\n> = {\n success: {\n bg: 'tw-bg-[var(--background-positive-subtle)]',\n border: 'tw-border-[var(--border-positive-subtle)]',\n titleColor: 'tw-text-[var(--content-positive-primary)]',\n icon: (\n <CheckCircleFill size={16} color=\"var(--content-positive-secondary)\" />\n ),\n },\n info: {\n bg: 'tw-bg-[var(--background-informative-subtle)]',\n border: 'tw-border-[var(--border-informative-subtle)]',\n titleColor: 'tw-text-[var(--content-informative-primary)]',\n icon: (\n <InformationCircleFill\n size={16}\n color=\"var(--content-informative-secondary)\"\n />\n ),\n },\n warning: {\n bg: 'tw-bg-[var(--background-warning-subtle)]',\n border: 'tw-border-[var(--border-warning-subtle)]',\n titleColor: 'tw-text-[var(--content-warning-primary)]',\n icon: (\n <AttentionTriangleFill\n size={16}\n color=\"var(--content-warning-secondary)\"\n />\n ),\n },\n error: {\n bg: 'tw-bg-[var(--background-negative-subtle)]',\n border: 'tw-border-[var(--border-negative-subtle)]',\n titleColor: 'tw-text-[var(--content-negative-primary)]',\n icon: (\n <CloseCircleFill size={16} color=\"var(--content-negative-secondary)\" />\n ),\n },\n none: {\n bg: 'tw-bg-[var(--background-neutral-subtle)]',\n border: 'tw-border-[var(--border-neutral-subtle)]',\n titleColor: 'tw-text-[var(--content-primary)]',\n icon: (\n <InformationCircleFill size={16} color=\"var(--content-secondary)\" />\n ),\n },\n};\n\nfunction Alert(props: AlertProps) {\n const {\n type = 'info',\n message,\n description,\n closable,\n onClose,\n afterClose,\n showIcon = true,\n icon,\n action,\n className,\n style,\n } = props;\n\n const [closed, setClosed] = useState(false);\n\n if (closed) return null;\n\n const config = typeConfig[type] || typeConfig.info;\n\n return (\n <div\n className={cn(\n 'ald-alert tw-flex tw-items-start tw-gap-2 tw-rounded-r-75 tw-border tw-border-solid tw-p-3',\n config.bg,\n config.border,\n className,\n )}\n style={style}\n role=\"alert\"\n >\n {showIcon && (\n <span className=\"ald-alert-icon tw-flex tw-items-center tw-pt-0.5\">\n {icon || config.icon}\n </span>\n )}\n <div className=\"ald-alert-content tw-min-w-0 tw-flex-1\">\n {message && (\n <div\n className={cn(\n 'ald-alert-message tw-text-sm tw-font-medium tw-leading-5',\n config.titleColor,\n )}\n >\n {message}\n </div>\n )}\n {description && (\n <div\n className=\"ald-alert-description tw-mt-1 tw-text-sm tw-font-normal tw-leading-5 tw-text-[var(--content-secondary)]\"\n style={{ fontFeatureSettings: \"'liga' off, 'clig' off\" }}\n >\n {description}\n </div>\n )}\n </div>\n {action && <div className=\"ald-alert-action\">{action}</div>}\n {closable && (\n <button\n type=\"button\"\n className=\"ald-alert-close-icon tw-flex tw-cursor-pointer tw-items-center tw-self-start tw-border-0 tw-bg-transparent tw-p-0 tw-pt-0.5\"\n onClick={(e) => {\n setClosed(true);\n onClose?.(e);\n afterClose?.();\n }}\n >\n <CloseLightLine size={16} color=\"var(--content-secondary)\" />\n </button>\n )}\n </div>\n );\n}\n\nexport default Alert;\n"],"mappings":";;;;;;;;;AAyBA,IAAM,aAGF;CACF,SAAS;EACP,IAAI;EACJ,QAAQ;EACR,YAAY;EACZ,MACE,oBAAC,QAAD;GAAiB,MAAM;GAAI,OAAM;GAAsC,CAAA;EAE1E;CACD,MAAM;EACJ,IAAI;EACJ,QAAQ;EACR,YAAY;EACZ,MACE,oBAAC,QAAD;GACE,MAAM;GACN,OAAM;GACN,CAAA;EAEL;CACD,SAAS;EACP,IAAI;EACJ,QAAQ;EACR,YAAY;EACZ,MACE,oBAAC,MAAD;GACE,MAAM;GACN,OAAM;GACN,CAAA;EAEL;CACD,OAAO;EACL,IAAI;EACJ,QAAQ;EACR,YAAY;EACZ,MACE,oBAAC,QAAD;GAAiB,MAAM;GAAI,OAAM;GAAsC,CAAA;EAE1E;CACD,MAAM;EACJ,IAAI;EACJ,QAAQ;EACR,YAAY;EACZ,MACE,oBAAC,QAAD;GAAuB,MAAM;GAAI,OAAM;GAA6B,CAAA;EAEvE;CACF;AAED,SAAS,MAAM,OAAmB;CAChC,MAAM,EACJ,OAAO,QACP,SACA,aACA,UACA,SACA,YACA,WAAW,MACX,MACA,QACA,WACA,UACE;CAEJ,MAAM,CAAC,QAAQ,aAAa,SAAS,MAAM;AAE3C,KAAI,OAAQ,QAAO;CAEnB,MAAM,SAAS,WAAW,SAAS,WAAW;AAE9C,QACE,qBAAC,OAAD;EACE,WAAW,GACT,8FACA,OAAO,IACP,OAAO,QACP,UACD;EACM;EACP,MAAK;YARP;GAUG,YACC,oBAAC,QAAD;IAAM,WAAU;cACb,QAAQ,OAAO;IACX,CAAA;GAET,qBAAC,OAAD;IAAK,WAAU;cAAf,CACG,WACC,oBAAC,OAAD;KACE,WAAW,GACT,4DACA,OAAO,WACR;eAEA;KACG,CAAA,EAEP,eACC,oBAAC,OAAD;KACE,WAAU;KACV,OAAO,EAAE,qBAAqB,0BAA0B;eAEvD;KACG,CAAA,CAEJ;;GACL,UAAU,oBAAC,OAAD;IAAK,WAAU;cAAoB;IAAa,CAAA;GAC1D,YACC,oBAAC,UAAD;IACE,MAAK;IACL,WAAU;IACV,UAAU,MAAM;AACd,eAAU,KAAK;AACf,eAAU,EAAE;AACZ,mBAAc;;cAGhB,oBAAC,QAAD;KAAgB,MAAM;KAAI,OAAM;KAA6B,CAAA;IACtD,CAAA;GAEP"}
@@ -12,7 +12,7 @@ export interface IAvatarProps {
12
12
  onClick?: (e?: React.MouseEvent<HTMLElement>) => void;
13
13
  onError?: () => boolean;
14
14
  size?: TAvatarSize;
15
- type?: 'user' | 'userGroup' | 'count';
15
+ type?: 'user' | 'team' | 'count';
16
16
  className?: string;
17
17
  style?: React.CSSProperties;
18
18
  children?: React.ReactNode;
@@ -1,6 +1,6 @@
1
1
  import { cn } from "../../../lib/utils.js";
2
2
  import Memo from "../../../Icon/components/User.js";
3
- import { AVATAR_SIZE_MAP } from "./type.js";
3
+ import { AVATAR_SIZE_MAP, AVATAR_TYPE_TO_BG_COLOR } from "./type.js";
4
4
  import { getFontSize } from "./helper.js";
5
5
  import { useCallback, useMemo, useState } from "react";
6
6
  import { jsx } from "react/jsx-runtime";
@@ -8,7 +8,7 @@ import _ from "lodash";
8
8
  //#region src/Avatar/component/Avatar/index.tsx
9
9
  var ZERO = 0;
10
10
  var Avatar = (props) => {
11
- const { size = "middle", children, src, icon, shape = "circle", alt, onClick, onError, className, style } = props;
11
+ const { size = "middle", children, src, icon, shape = "circle", alt, type = "user", onClick, onError, className, style } = props;
12
12
  const [imgError, setImgError] = useState(false);
13
13
  const getSize = useCallback(() => {
14
14
  if (typeof size === "number") return size;
@@ -54,13 +54,13 @@ var Avatar = (props) => {
54
54
  shape
55
55
  ]);
56
56
  return /* @__PURE__ */ jsx("span", {
57
- className: cn("ald-avatar tw-inline-flex tw-items-center tw-justify-center tw-overflow-hidden tw-border-0 tw-text-[var(--non-semantic-content-blue-primary)]", shape === "circle" ? "tw-rounded-full" : "tw-rounded-r-50", !icon && _.isEmpty(children) && "ald-avatar-default", className),
57
+ className: cn("ald-avatar tw-inline-flex tw-items-center tw-justify-center tw-overflow-hidden tw-border-0", type === "team" ? "tw-text-[var(--non-semantic-content-green-primary)]" : "tw-text-[var(--non-semantic-content-blue-primary)]", shape === "circle" ? "tw-rounded-full" : "tw-rounded-r-50", !icon && _.isEmpty(children) && "ald-avatar-default", className),
58
58
  style: {
59
59
  width: sizeVal,
60
60
  height: sizeVal,
61
61
  fontSize: sizeVal * .4,
62
62
  lineHeight: `${sizeVal}px`,
63
- backgroundColor: !icon && _.isEmpty(children) && (!src || imgError) ? "white" : "var(--non-semantic-background-blue-muted)",
63
+ backgroundColor: !icon && _.isEmpty(children) && (!src || imgError) ? "white" : AVATAR_TYPE_TO_BG_COLOR[type] || "var(--non-semantic-background-blue-muted)",
64
64
  ...style
65
65
  },
66
66
  onClick,
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../../../src/Avatar/component/Avatar/index.tsx"],"sourcesContent":["import _ from 'lodash';\nimport * as React from 'react';\nimport { useCallback, useMemo, useState } from 'react';\nimport { User } from '../../../Icon';\nimport { cn } from '../../../lib/utils';\nimport { getFontSize } from './helper';\nimport { AVATAR_SIZE_MAP, TAvatarSize } from './type';\n\nexport interface IAvatarProps {\n shape?: 'circle' | 'square';\n gap?: number;\n src?: React.ReactNode;\n srcSet?: string;\n draggable?: boolean;\n icon?: React.ReactNode;\n alt?: string;\n crossOrigin?: '' | 'anonymous' | 'use-credentials';\n onClick?: (e?: React.MouseEvent<HTMLElement>) => void;\n onError?: () => boolean;\n size?: TAvatarSize;\n type?: 'user' | 'userGroup' | 'count';\n className?: string;\n style?: React.CSSProperties;\n children?: React.ReactNode;\n}\n\nconst ZERO = 0;\n\nconst Avatar = (props: IAvatarProps) => {\n const {\n size = 'middle',\n children,\n src,\n icon,\n shape = 'circle',\n alt,\n onClick,\n onError,\n className,\n style,\n } = props;\n\n const [imgError, setImgError] = useState(false);\n\n const getSize = useCallback(() => {\n if (typeof size === 'number') return size;\n return AVATAR_SIZE_MAP[size] || 32;\n }, [size]);\n\n const getChildren = useCallback(() => {\n if (_.isEmpty(children)) return null;\n if (typeof children === 'string') return children[ZERO].toLocaleUpperCase();\n return children;\n }, [children]);\n\n const sizeVal = getSize();\n\n const innerContent = useMemo(() => {\n if (src && !imgError) {\n if (typeof src === 'string') {\n return (\n <img\n src={src}\n alt={alt}\n className=\"tw-size-full tw-object-cover\"\n style={shape === 'circle' ? { borderRadius: '50%' } : undefined}\n onError={() => {\n const result = onError?.();\n if (result !== false) setImgError(true);\n }}\n />\n );\n }\n return src;\n }\n\n if (icon) return icon;\n\n if (!_.isEmpty(children)) {\n return (\n <div className=\"tw-flex tw-size-full tw-items-center tw-justify-center\">\n <span style={getFontSize(sizeVal)}>{getChildren()}</span>\n </div>\n );\n }\n\n return <User size={sizeVal} />;\n }, [\n src,\n icon,\n children,\n sizeVal,\n getChildren,\n imgError,\n alt,\n onError,\n shape,\n ]);\n\n return (\n <span\n className={cn(\n 'ald-avatar tw-inline-flex tw-items-center tw-justify-center tw-overflow-hidden tw-border-0 tw-text-[var(--non-semantic-content-blue-primary)]',\n shape === 'circle' ? 'tw-rounded-full' : 'tw-rounded-r-50',\n !icon && _.isEmpty(children) && 'ald-avatar-default',\n className,\n )}\n style={{\n width: sizeVal,\n height: sizeVal,\n fontSize: sizeVal * 0.4,\n lineHeight: `${sizeVal}px`,\n backgroundColor:\n !icon && _.isEmpty(children) && (!src || imgError)\n ? 'white'\n : 'var(--non-semantic-background-blue-muted)',\n ...style,\n }}\n onClick={onClick}\n >\n {innerContent}\n </span>\n );\n};\n\nexport default Avatar;\n"],"mappings":";;;;;;;;AA0BA,IAAM,OAAO;AAEb,IAAM,UAAU,UAAwB;CACtC,MAAM,EACJ,OAAO,UACP,UACA,KACA,MACA,QAAQ,UACR,KACA,SACA,SACA,WACA,UACE;CAEJ,MAAM,CAAC,UAAU,eAAe,SAAS,MAAM;CAE/C,MAAM,UAAU,kBAAkB;AAChC,MAAI,OAAO,SAAS,SAAU,QAAO;AACrC,SAAO,gBAAgB,SAAS;IAC/B,CAAC,KAAK,CAAC;CAEV,MAAM,cAAc,kBAAkB;AACpC,MAAI,EAAE,QAAQ,SAAS,CAAE,QAAO;AAChC,MAAI,OAAO,aAAa,SAAU,QAAO,SAAS,MAAM,mBAAmB;AAC3E,SAAO;IACN,CAAC,SAAS,CAAC;CAEd,MAAM,UAAU,SAAS;CAEzB,MAAM,eAAe,cAAc;AACjC,MAAI,OAAO,CAAC,UAAU;AACpB,OAAI,OAAO,QAAQ,SACjB,QACE,oBAAC,OAAD;IACO;IACA;IACL,WAAU;IACV,OAAO,UAAU,WAAW,EAAE,cAAc,OAAO,GAAG;IACtD,eAAe;AAEb,SADe,WAAW,KACX,MAAO,aAAY,KAAK;;IAEzC,CAAA;AAGN,UAAO;;AAGT,MAAI,KAAM,QAAO;AAEjB,MAAI,CAAC,EAAE,QAAQ,SAAS,CACtB,QACE,oBAAC,OAAD;GAAK,WAAU;aACb,oBAAC,QAAD;IAAM,OAAO,YAAY,QAAQ;cAAG,aAAa;IAAQ,CAAA;GACrD,CAAA;AAIV,SAAO,oBAAC,MAAD,EAAM,MAAM,SAAW,CAAA;IAC7B;EACD;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACD,CAAC;AAEF,QACE,oBAAC,QAAD;EACE,WAAW,GACT,iJACA,UAAU,WAAW,oBAAoB,mBACzC,CAAC,QAAQ,EAAE,QAAQ,SAAS,IAAI,sBAChC,UACD;EACD,OAAO;GACL,OAAO;GACP,QAAQ;GACR,UAAU,UAAU;GACpB,YAAY,GAAG,QAAQ;GACvB,iBACE,CAAC,QAAQ,EAAE,QAAQ,SAAS,KAAK,CAAC,OAAO,YACrC,UACA;GACN,GAAG;GACJ;EACQ;YAER;EACI,CAAA"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../../src/Avatar/component/Avatar/index.tsx"],"sourcesContent":["import _ from 'lodash';\nimport * as React from 'react';\nimport { useCallback, useMemo, useState } from 'react';\nimport { User } from '../../../Icon';\nimport { cn } from '../../../lib/utils';\nimport { getFontSize } from './helper';\nimport { AVATAR_SIZE_MAP, AVATAR_TYPE_TO_BG_COLOR, TAvatarSize } from './type';\n\nexport interface IAvatarProps {\n shape?: 'circle' | 'square';\n gap?: number;\n src?: React.ReactNode;\n srcSet?: string;\n draggable?: boolean;\n icon?: React.ReactNode;\n alt?: string;\n crossOrigin?: '' | 'anonymous' | 'use-credentials';\n onClick?: (e?: React.MouseEvent<HTMLElement>) => void;\n onError?: () => boolean;\n size?: TAvatarSize;\n type?: 'user' | 'team' | 'count';\n className?: string;\n style?: React.CSSProperties;\n children?: React.ReactNode;\n}\n\nconst ZERO = 0;\n\nconst Avatar = (props: IAvatarProps) => {\n const {\n size = 'middle',\n children,\n src,\n icon,\n shape = 'circle',\n alt,\n type = 'user',\n onClick,\n onError,\n className,\n style,\n } = props;\n\n const [imgError, setImgError] = useState(false);\n\n const getSize = useCallback(() => {\n if (typeof size === 'number') return size;\n return AVATAR_SIZE_MAP[size] || 32;\n }, [size]);\n\n const getChildren = useCallback(() => {\n if (_.isEmpty(children)) return null;\n if (typeof children === 'string') return children[ZERO].toLocaleUpperCase();\n return children;\n }, [children]);\n\n const sizeVal = getSize();\n\n const innerContent = useMemo(() => {\n if (src && !imgError) {\n if (typeof src === 'string') {\n return (\n <img\n src={src}\n alt={alt}\n className=\"tw-size-full tw-object-cover\"\n style={shape === 'circle' ? { borderRadius: '50%' } : undefined}\n onError={() => {\n const result = onError?.();\n if (result !== false) setImgError(true);\n }}\n />\n );\n }\n return src;\n }\n\n if (icon) return icon;\n\n if (!_.isEmpty(children)) {\n return (\n <div className=\"tw-flex tw-size-full tw-items-center tw-justify-center\">\n <span style={getFontSize(sizeVal)}>{getChildren()}</span>\n </div>\n );\n }\n\n return <User size={sizeVal} />;\n }, [\n src,\n icon,\n children,\n sizeVal,\n getChildren,\n imgError,\n alt,\n onError,\n shape,\n ]);\n\n return (\n <span\n className={cn(\n 'ald-avatar tw-inline-flex tw-items-center tw-justify-center tw-overflow-hidden tw-border-0',\n type === 'team'\n ? 'tw-text-[var(--non-semantic-content-green-primary)]'\n : 'tw-text-[var(--non-semantic-content-blue-primary)]',\n shape === 'circle' ? 'tw-rounded-full' : 'tw-rounded-r-50',\n !icon && _.isEmpty(children) && 'ald-avatar-default',\n className,\n )}\n style={{\n width: sizeVal,\n height: sizeVal,\n fontSize: sizeVal * 0.4,\n lineHeight: `${sizeVal}px`,\n backgroundColor:\n !icon && _.isEmpty(children) && (!src || imgError)\n ? 'white'\n : AVATAR_TYPE_TO_BG_COLOR[type] ||\n 'var(--non-semantic-background-blue-muted)',\n ...style,\n }}\n onClick={onClick}\n >\n {innerContent}\n </span>\n );\n};\n\nexport default Avatar;\n"],"mappings":";;;;;;;;AA0BA,IAAM,OAAO;AAEb,IAAM,UAAU,UAAwB;CACtC,MAAM,EACJ,OAAO,UACP,UACA,KACA,MACA,QAAQ,UACR,KACA,OAAO,QACP,SACA,SACA,WACA,UACE;CAEJ,MAAM,CAAC,UAAU,eAAe,SAAS,MAAM;CAE/C,MAAM,UAAU,kBAAkB;AAChC,MAAI,OAAO,SAAS,SAAU,QAAO;AACrC,SAAO,gBAAgB,SAAS;IAC/B,CAAC,KAAK,CAAC;CAEV,MAAM,cAAc,kBAAkB;AACpC,MAAI,EAAE,QAAQ,SAAS,CAAE,QAAO;AAChC,MAAI,OAAO,aAAa,SAAU,QAAO,SAAS,MAAM,mBAAmB;AAC3E,SAAO;IACN,CAAC,SAAS,CAAC;CAEd,MAAM,UAAU,SAAS;CAEzB,MAAM,eAAe,cAAc;AACjC,MAAI,OAAO,CAAC,UAAU;AACpB,OAAI,OAAO,QAAQ,SACjB,QACE,oBAAC,OAAD;IACO;IACA;IACL,WAAU;IACV,OAAO,UAAU,WAAW,EAAE,cAAc,OAAO,GAAG;IACtD,eAAe;AAEb,SADe,WAAW,KACX,MAAO,aAAY,KAAK;;IAEzC,CAAA;AAGN,UAAO;;AAGT,MAAI,KAAM,QAAO;AAEjB,MAAI,CAAC,EAAE,QAAQ,SAAS,CACtB,QACE,oBAAC,OAAD;GAAK,WAAU;aACb,oBAAC,QAAD;IAAM,OAAO,YAAY,QAAQ;cAAG,aAAa;IAAQ,CAAA;GACrD,CAAA;AAIV,SAAO,oBAAC,MAAD,EAAM,MAAM,SAAW,CAAA;IAC7B;EACD;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACD,CAAC;AAEF,QACE,oBAAC,QAAD;EACE,WAAW,GACT,8FACA,SAAS,SACL,wDACA,sDACJ,UAAU,WAAW,oBAAoB,mBACzC,CAAC,QAAQ,EAAE,QAAQ,SAAS,IAAI,sBAChC,UACD;EACD,OAAO;GACL,OAAO;GACP,QAAQ;GACR,UAAU,UAAU;GACpB,YAAY,GAAG,QAAQ;GACvB,iBACE,CAAC,QAAQ,EAAE,QAAQ,SAAS,KAAK,CAAC,OAAO,YACrC,UACA,wBAAwB,SACxB;GACN,GAAG;GACJ;EACQ;YAER;EACI,CAAA"}
@@ -26,6 +26,6 @@ export declare const AVATAR_SIZE_TO_FONT_SIZE: {
26
26
  };
27
27
  export declare const AVATAR_TYPE_TO_BG_COLOR: {
28
28
  user: string;
29
- userGroup: string;
29
+ team: string;
30
30
  count: string;
31
31
  };
@@ -14,7 +14,12 @@ var AVATAR_SIZE_TO_FONT_SIZE = {
14
14
  [48]: 16,
15
15
  [64]: 24
16
16
  };
17
+ var AVATAR_TYPE_TO_BG_COLOR = {
18
+ user: "var(--non-semantic-background-blue-muted)",
19
+ team: "var(--non-semantic-background-green-muted)",
20
+ count: "var(--non-semantic-background-grey-muted)"
21
+ };
17
22
  //#endregion
18
- export { AVATAR_SIZE_MAP, AVATAR_SIZE_TO_FONT_SIZE };
23
+ export { AVATAR_SIZE_MAP, AVATAR_SIZE_TO_FONT_SIZE, AVATAR_TYPE_TO_BG_COLOR };
19
24
 
20
25
  //# sourceMappingURL=type.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"type.js","names":[],"sources":["../../../../src/Avatar/component/Avatar/type.ts"],"sourcesContent":["export type TAvatarSize = 'large' | 'middle' | 'small' | number;\n\nexport interface GroupProps {\n maxCount?: number;\n maxStyle?: React.CSSProperties;\n maxPopoverPlacement?: 'top' | 'bottom';\n size?: TAvatarSize;\n className?: string;\n style?: React.CSSProperties;\n children?: React.ReactNode;\n}\nexport const AVATAR_SIZE_MAP = {\n large: 40,\n middle: 32,\n small: 28,\n};\n\nexport const AVATAR_SIZE_TO_FONT_SIZE = {\n [16]: 8,\n [20]: 10,\n [24]: 10,\n [28]: 12,\n [32]: 12,\n [40]: 14,\n [48]: 16,\n [64]: 24,\n};\n\nexport const AVATAR_TYPE_TO_BG_COLOR = {\n user: 'var(--non-semantic-background-blue-muted)',\n userGroup: 'var(--non-semantic-background-blue-muted)',\n count: 'var(--non-semantic-background-grey-muted)',\n};\n"],"mappings":";AAWA,IAAa,kBAAkB;CAC7B,OAAO;CACP,QAAQ;CACR,OAAO;CACR;AAED,IAAa,2BAA2B;EACrC,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;CACP"}
1
+ {"version":3,"file":"type.js","names":[],"sources":["../../../../src/Avatar/component/Avatar/type.ts"],"sourcesContent":["export type TAvatarSize = 'large' | 'middle' | 'small' | number;\n\nexport interface GroupProps {\n maxCount?: number;\n maxStyle?: React.CSSProperties;\n maxPopoverPlacement?: 'top' | 'bottom';\n size?: TAvatarSize;\n className?: string;\n style?: React.CSSProperties;\n children?: React.ReactNode;\n}\nexport const AVATAR_SIZE_MAP = {\n large: 40,\n middle: 32,\n small: 28,\n};\n\nexport const AVATAR_SIZE_TO_FONT_SIZE = {\n [16]: 8,\n [20]: 10,\n [24]: 10,\n [28]: 12,\n [32]: 12,\n [40]: 14,\n [48]: 16,\n [64]: 24,\n};\n\nexport const AVATAR_TYPE_TO_BG_COLOR = {\n user: 'var(--non-semantic-background-blue-muted)',\n team: 'var(--non-semantic-background-green-muted)',\n count: 'var(--non-semantic-background-grey-muted)',\n};\n"],"mappings":";AAWA,IAAa,kBAAkB;CAC7B,OAAO;CACP,QAAQ;CACR,OAAO;CACR;AAED,IAAa,2BAA2B;EACrC,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;CACP;AAED,IAAa,0BAA0B;CACrC,MAAM;CACN,MAAM;CACN,OAAO;CACR"}
@@ -1,26 +1,85 @@
1
1
  import { cn } from "../lib/utils.js";
2
+ import { getFontSize } from "./component/Avatar/helper.js";
2
3
  import Avatar$1 from "./component/Avatar/index.js";
3
4
  import React from "react";
4
5
  import { jsx, jsxs } from "react/jsx-runtime";
5
6
  //#region src/Avatar/index.tsx
7
+ var AVATAR_SIZE_MAP = {
8
+ large: 40,
9
+ middle: 32,
10
+ small: 28
11
+ };
6
12
  function AvatarGroup(props) {
7
- const { children, className, style, maxCount } = props;
13
+ const { children, className, style, maxCount, size } = props;
8
14
  const childArray = React.Children.toArray(children);
9
15
  const displayed = maxCount ? childArray.slice(0, maxCount) : childArray;
10
16
  const overflow = maxCount ? childArray.length - maxCount : 0;
17
+ const resolveSize = () => {
18
+ if (size) return typeof size === "number" ? size : AVATAR_SIZE_MAP[size] || 32;
19
+ const firstChild = childArray[0];
20
+ if (React.isValidElement(firstChild) && firstChild.props.size) {
21
+ const s = firstChild.props.size;
22
+ return typeof s === "number" ? s : AVATAR_SIZE_MAP[s] || 32;
23
+ }
24
+ return 32;
25
+ };
26
+ const sizeVal = resolveSize();
27
+ const resolveShape = () => {
28
+ const firstChild = childArray[0];
29
+ if (React.isValidElement(firstChild) && firstChild.props.shape) return firstChild.props.shape;
30
+ return "circle";
31
+ };
32
+ const borderRadius = resolveShape() === "circle" ? "50%" : 4;
33
+ const totalSize = sizeVal + (sizeVal <= 20 ? 1 : 2) * 2;
34
+ const innerSize = sizeVal;
35
+ const offset = Math.max(totalSize * .25, 4);
36
+ const { transform: countScale, ...countContainerFont } = getFontSize(innerSize);
11
37
  return /* @__PURE__ */ jsxs("div", {
12
38
  className: cn("ald-avatar-group tw-inline-flex tw-items-center", className),
13
39
  style,
14
40
  children: [displayed.map((child, i) => /* @__PURE__ */ jsx("span", {
15
- className: "tw--ml-2 first:tw-ml-0",
16
- children: child
17
- }, i)), overflow > 0 && /* @__PURE__ */ jsxs("span", {
18
- className: "tw--ml-2 tw-inline-flex tw-items-center tw-justify-center tw-rounded-full tw-bg-[var(--background-neutral-subtle)] tw-text-xs tw-text-[var(--content-secondary)]",
41
+ className: "tw-inline-flex tw-flex-none tw-items-center tw-justify-center",
19
42
  style: {
20
- width: 32,
21
- height: 32
43
+ width: totalSize,
44
+ height: totalSize,
45
+ marginLeft: i === 0 ? 0 : -offset,
46
+ borderRadius,
47
+ backgroundColor: "var(--background-default)",
48
+ position: "relative",
49
+ zIndex: i
22
50
  },
23
- children: ["+", overflow]
51
+ children: React.isValidElement(child) ? React.cloneElement(child, { size: innerSize }) : child
52
+ }, i)), overflow > 0 && /* @__PURE__ */ jsx("span", {
53
+ className: "tw-inline-flex tw-flex-none tw-items-center tw-justify-center",
54
+ style: {
55
+ marginLeft: -offset,
56
+ borderRadius,
57
+ backgroundColor: "var(--background-default)",
58
+ width: totalSize,
59
+ height: totalSize,
60
+ position: "relative",
61
+ zIndex: displayed.length
62
+ },
63
+ children: /* @__PURE__ */ jsx("span", {
64
+ className: "tw-inline-flex tw-size-full tw-items-center tw-justify-center tw-overflow-hidden tw-bg-[var(--background-neutral-subtle)] tw-text-[var(--content-secondary)]",
65
+ style: {
66
+ width: innerSize,
67
+ height: innerSize,
68
+ borderRadius,
69
+ lineHeight: 1
70
+ },
71
+ children: /* @__PURE__ */ jsxs("span", {
72
+ style: {
73
+ fontFamily: "monospace",
74
+ ...countContainerFont,
75
+ ...countScale ? {
76
+ transform: countScale,
77
+ display: "block"
78
+ } : {}
79
+ },
80
+ children: ["+", overflow]
81
+ })
82
+ })
24
83
  })]
25
84
  });
26
85
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../src/Avatar/index.tsx"],"sourcesContent":["import React from 'react';\nimport AvatarBase, { IAvatarProps } from './component/Avatar';\nimport { cn } from '../lib/utils';\n\ninterface AvatarGroupProps {\n maxCount?: number;\n size?: IAvatarProps['size'];\n className?: string;\n style?: React.CSSProperties;\n children?: React.ReactNode;\n}\n\nfunction AvatarGroup(props: AvatarGroupProps) {\n const { children, className, style, maxCount } = props;\n const childArray = React.Children.toArray(children);\n const displayed = maxCount ? childArray.slice(0, maxCount) : childArray;\n const overflow = maxCount ? childArray.length - maxCount : 0;\n\n return (\n <div\n className={cn(\n 'ald-avatar-group tw-inline-flex tw-items-center',\n className,\n )}\n style={style}\n >\n {displayed.map((child, i) => (\n <span key={i} className=\"tw--ml-2 first:tw-ml-0\">\n {child}\n </span>\n ))}\n {overflow > 0 && (\n <span\n className=\"tw--ml-2 tw-inline-flex tw-items-center tw-justify-center tw-rounded-full tw-bg-[var(--background-neutral-subtle)] tw-text-xs tw-text-[var(--content-secondary)]\"\n style={{ width: 32, height: 32 }}\n >\n +{overflow}\n </span>\n )}\n </div>\n );\n}\n\ntype AvatarComponent = typeof AvatarBase & {\n Group: typeof AvatarGroup;\n};\n\nconst Avatar = AvatarBase as AvatarComponent;\nAvatar.Group = AvatarGroup;\n\nexport type { IAvatarProps };\nexport default Avatar;\n"],"mappings":";;;;;AAYA,SAAS,YAAY,OAAyB;CAC5C,MAAM,EAAE,UAAU,WAAW,OAAO,aAAa;CACjD,MAAM,aAAa,MAAM,SAAS,QAAQ,SAAS;CACnD,MAAM,YAAY,WAAW,WAAW,MAAM,GAAG,SAAS,GAAG;CAC7D,MAAM,WAAW,WAAW,WAAW,SAAS,WAAW;AAE3D,QACE,qBAAC,OAAD;EACE,WAAW,GACT,mDACA,UACD;EACM;YALT,CAOG,UAAU,KAAK,OAAO,MACrB,oBAAC,QAAD;GAAc,WAAU;aACrB;GACI,EAFI,EAEJ,CACP,EACD,WAAW,KACV,qBAAC,QAAD;GACE,WAAU;GACV,OAAO;IAAE,OAAO;IAAI,QAAQ;IAAI;aAFlC,CAGC,KACG,SACG;KAEL;;;AAQV,IAAM,SAAS;AACf,OAAO,QAAQ"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../src/Avatar/index.tsx"],"sourcesContent":["import React from 'react';\nimport AvatarBase, { IAvatarProps } from './component/Avatar';\nimport { getFontSize } from './component/Avatar/helper';\nimport { cn } from '../lib/utils';\n\ninterface AvatarGroupProps {\n maxCount?: number;\n size?: IAvatarProps['size'];\n className?: string;\n style?: React.CSSProperties;\n children?: React.ReactNode;\n}\n\nconst AVATAR_SIZE_MAP: Record<string, number> = {\n large: 40,\n middle: 32,\n small: 28,\n};\n\nfunction AvatarGroup(props: AvatarGroupProps) {\n const { children, className, style, maxCount, size } = props;\n const childArray = React.Children.toArray(children);\n const displayed = maxCount ? childArray.slice(0, maxCount) : childArray;\n const overflow = maxCount ? childArray.length - maxCount : 0;\n\n // Resolve count badge size: from group size prop, or from first child's size, fallback 32\n const resolveSize = (): number => {\n if (size) {\n return typeof size === 'number' ? size : AVATAR_SIZE_MAP[size] || 32;\n }\n const firstChild = childArray[0];\n if (\n React.isValidElement<IAvatarProps>(firstChild) &&\n firstChild.props.size\n ) {\n const s = firstChild.props.size;\n return typeof s === 'number' ? s : AVATAR_SIZE_MAP[s] || 32;\n }\n return 32;\n };\n\n const sizeVal = resolveSize();\n\n // Resolve shape from first child, fallback 'circle'\n const resolveShape = (): 'circle' | 'square' => {\n const firstChild = childArray[0];\n if (\n React.isValidElement<IAvatarProps>(firstChild) &&\n firstChild.props.shape\n ) {\n return firstChild.props.shape;\n }\n return 'circle';\n };\n\n const shapeVal = resolveShape();\n\n const borderRadius = shapeVal === 'circle' ? '50%' : 4;\n const ringWidth = sizeVal <= 20 ? 1 : 2;\n // Total size includes the ring on each side\n const totalSize = sizeVal + ringWidth * 2;\n const innerSize = sizeVal;\n const offset = Math.max(totalSize * 0.25, 4);\n\n // Count badge font: separate container styles from text styles\n // getFontSize may return transform:scale() for small sizes — only apply that to the inner text\n const countFontRaw = getFontSize(innerSize);\n const { transform: countScale, ...countContainerFont } = countFontRaw as {\n transform?: string;\n fontSize: number;\n fontWeight?: number;\n };\n\n return (\n <div\n className={cn(\n 'ald-avatar-group tw-inline-flex tw-items-center',\n className,\n )}\n style={style}\n >\n {displayed.map((child, i) => (\n <span\n key={i}\n className=\"tw-inline-flex tw-flex-none tw-items-center tw-justify-center\"\n style={{\n width: totalSize,\n height: totalSize,\n marginLeft: i === 0 ? 0 : -offset,\n borderRadius,\n backgroundColor: 'var(--background-default)',\n position: 'relative',\n zIndex: i,\n }}\n >\n {React.isValidElement<IAvatarProps>(child)\n ? React.cloneElement(child, { size: innerSize })\n : child}\n </span>\n ))}\n {overflow > 0 && (\n <span\n className=\"tw-inline-flex tw-flex-none tw-items-center tw-justify-center\"\n style={{\n marginLeft: -offset,\n borderRadius,\n backgroundColor: 'var(--background-default)',\n width: totalSize,\n height: totalSize,\n position: 'relative',\n zIndex: displayed.length,\n }}\n >\n <span\n className=\"tw-inline-flex tw-size-full tw-items-center tw-justify-center tw-overflow-hidden tw-bg-[var(--background-neutral-subtle)] tw-text-[var(--content-secondary)]\"\n style={{\n width: innerSize,\n height: innerSize,\n borderRadius,\n lineHeight: 1,\n }}\n >\n <span\n style={{\n fontFamily: 'monospace',\n ...countContainerFont,\n ...(countScale ? { transform: countScale, display: 'block' } : {}),\n }}\n >\n +{overflow}\n </span>\n </span>\n </span>\n )}\n </div>\n );\n}\n\ntype AvatarComponent = typeof AvatarBase & {\n Group: typeof AvatarGroup;\n};\n\nconst Avatar = AvatarBase as AvatarComponent;\nAvatar.Group = AvatarGroup;\n\nexport type { IAvatarProps };\nexport default Avatar;\n"],"mappings":";;;;;;AAaA,IAAM,kBAA0C;CAC9C,OAAO;CACP,QAAQ;CACR,OAAO;CACR;AAED,SAAS,YAAY,OAAyB;CAC5C,MAAM,EAAE,UAAU,WAAW,OAAO,UAAU,SAAS;CACvD,MAAM,aAAa,MAAM,SAAS,QAAQ,SAAS;CACnD,MAAM,YAAY,WAAW,WAAW,MAAM,GAAG,SAAS,GAAG;CAC7D,MAAM,WAAW,WAAW,WAAW,SAAS,WAAW;CAG3D,MAAM,oBAA4B;AAChC,MAAI,KACF,QAAO,OAAO,SAAS,WAAW,OAAO,gBAAgB,SAAS;EAEpE,MAAM,aAAa,WAAW;AAC9B,MACE,MAAM,eAA6B,WAAW,IAC9C,WAAW,MAAM,MACjB;GACA,MAAM,IAAI,WAAW,MAAM;AAC3B,UAAO,OAAO,MAAM,WAAW,IAAI,gBAAgB,MAAM;;AAE3D,SAAO;;CAGT,MAAM,UAAU,aAAa;CAG7B,MAAM,qBAA0C;EAC9C,MAAM,aAAa,WAAW;AAC9B,MACE,MAAM,eAA6B,WAAW,IAC9C,WAAW,MAAM,MAEjB,QAAO,WAAW,MAAM;AAE1B,SAAO;;CAKT,MAAM,eAFW,cAAc,KAEG,WAAW,QAAQ;CAGrD,MAAM,YAAY,WAFA,WAAW,KAAK,IAAI,KAEE;CACxC,MAAM,YAAY;CAClB,MAAM,SAAS,KAAK,IAAI,YAAY,KAAM,EAAE;CAK5C,MAAM,EAAE,WAAW,YAAY,GAAG,uBADb,YAAY,UAAU;AAO3C,QACE,qBAAC,OAAD;EACE,WAAW,GACT,mDACA,UACD;EACM;YALT,CAOG,UAAU,KAAK,OAAO,MACrB,oBAAC,QAAD;GAEE,WAAU;GACV,OAAO;IACL,OAAO;IACP,QAAQ;IACR,YAAY,MAAM,IAAI,IAAI,CAAC;IAC3B;IACA,iBAAiB;IACjB,UAAU;IACV,QAAQ;IACT;aAEA,MAAM,eAA6B,MAAM,GACtC,MAAM,aAAa,OAAO,EAAE,MAAM,WAAW,CAAC,GAC9C;GACC,EAfA,EAeA,CACP,EACD,WAAW,KACV,oBAAC,QAAD;GACE,WAAU;GACV,OAAO;IACL,YAAY,CAAC;IACb;IACA,iBAAiB;IACjB,OAAO;IACP,QAAQ;IACR,UAAU;IACV,QAAQ,UAAU;IACnB;aAED,oBAAC,QAAD;IACE,WAAU;IACV,OAAO;KACL,OAAO;KACP,QAAQ;KACR;KACA,YAAY;KACb;cAED,qBAAC,QAAD;KACE,OAAO;MACL,YAAY;MACZ,GAAG;MACH,GAAI,aAAa;OAAE,WAAW;OAAY,SAAS;OAAS,GAAG,EAAE;MAClE;eALH,CAMC,KACG,SACG;;IACF,CAAA;GACF,CAAA,CAEL;;;AAQV,IAAM,SAAS;AACf,OAAO,QAAQ"}
@@ -13,6 +13,7 @@ export interface BadgeProps {
13
13
  */
14
14
  size?: 'default' | 'large';
15
15
  className?: string;
16
+ style?: React.CSSProperties;
16
17
  onClick?: React.MouseEventHandler;
17
18
  }
18
19
  export default function Badge(props: BadgeProps): import("react/jsx-runtime").JSX.Element;
@@ -3,18 +3,25 @@ import "react";
3
3
  import { jsx } from "react/jsx-runtime";
4
4
  import { cva } from "class-variance-authority";
5
5
  //#region src/Badge/index.tsx
6
- var badgeVariants = cva("ald-badge tw-inline-flex tw-cursor-default tw-items-center tw-rounded-[99px] tw-font-medium", {
6
+ var STATUS_DOT_COLORS = {
7
+ default: "tw-bg-[var(--content-secondary)]",
8
+ success: "tw-bg-[var(--content-positive-secondary)]",
9
+ error: "tw-bg-[var(--content-negative-secondary)]",
10
+ info: "tw-bg-[var(--content-informative-secondary)]",
11
+ warning: "tw-bg-[var(--content-warning-secondary)]"
12
+ };
13
+ var badgeVariants = cva("ald-badge tw-inline-flex tw-cursor-default tw-items-center tw-justify-center tw-rounded-[99px]", {
7
14
  variants: {
8
15
  size: {
9
- default: "tw-h-[20px] tw-min-w-[20px] tw-px-[var(--alias-padding-75)] tw-py-[var(--alias-padding-25)] tw-text-xs tw-leading-4",
10
- large: "ald-badge-large tw-h-[24px] tw-min-w-[24px] tw-px-[var(--alias-padding-75)] tw-py-[var(--alias-padding-25)] tw-text-sm tw-leading-5"
16
+ default: "tw-[font-feature-settings:\"liga\"_off,\"clig\"_off] tw-h-[var(--3xs)] tw-min-w-[var(--3xs)] tw-gap-[var(--component-gap-xs)] tw-px-[var(--component-padding-xs)] tw-text-xs tw-font-normal tw-leading-4",
17
+ large: "ald-badge-large tw-[font-feature-settings:\"liga\"_off,\"clig\"_off] tw-h-[var(--2xs)] tw-min-w-[var(--2xs)] tw-gap-[var(--component-gap-xs)] tw-px-[var(--component-padding-sm)] tw-text-sm tw-font-normal tw-leading-5"
11
18
  },
12
19
  status: {
13
- success: "ald-badge-success tw-bg-[var(--background-positive-muted)] tw-text-[var(--content-positive-primary)]",
14
- error: "ald-badge-error tw-bg-[var(--background-negative-muted)] tw-text-[var(--content-negative-primary)]",
15
- default: "ald-badge-default tw-bg-[var(--background-neutral-muted)] tw-text-[var(--content-neutral-primary)]",
16
- info: "ald-badge-info tw-bg-[var(--background-informative-muted)] tw-text-[var(--content-informative-primary)]",
17
- warning: "ald-badge-warning tw-bg-[var(--background-warning-muted)] tw-text-[var(--content-warning-primary)]"
20
+ default: "ald-badge-default tw-bg-[var(--non-semantic-background-grey-muted)] tw-text-[var(--non-semantic-content-grey-primary)]",
21
+ success: "ald-badge-success tw-bg-[var(--non-semantic-background-green-muted)] tw-text-[var(--non-semantic-content-green-primary)]",
22
+ error: "ald-badge-error tw-bg-[var(--non-semantic-background-red-muted)] tw-text-[var(--non-semantic-content-red-primary)]",
23
+ info: "ald-badge-info tw-bg-[var(--non-semantic-background-blue-muted)] tw-text-[var(--non-semantic-content-blue-primary)]",
24
+ warning: "ald-badge-warning tw-bg-[var(--non-semantic-background-orange-muted)] tw-text-[var(--non-semantic-content-orange-primary)]"
18
25
  },
19
26
  clickable: {
20
27
  true: "ald-badge-clickable tw-cursor-pointer",
@@ -28,7 +35,19 @@ var badgeVariants = cva("ald-badge tw-inline-flex tw-cursor-default tw-items-cen
28
35
  }
29
36
  });
30
37
  function Badge(props) {
31
- const { count, status = "default", size, className, onClick, ...rest } = props;
38
+ const { count, status = "default", size, className, style, onClick, ...rest } = props;
39
+ if (count === "" || count === void 0) return /* @__PURE__ */ jsx("div", {
40
+ ...rest,
41
+ className: cn("ald-badge ald-badge-dot tw-flex tw-aspect-square tw-items-start tw-rounded-full", STATUS_DOT_COLORS[status], typeof onClick === "function" && "tw-cursor-pointer", className),
42
+ style: {
43
+ width: 8,
44
+ height: 8,
45
+ gap: 8,
46
+ ...style
47
+ },
48
+ onClick
49
+ });
50
+ const isNumeric = typeof count === "number" || typeof count === "string" && /^[+-]?\d+$/.test(count.trim());
32
51
  return /* @__PURE__ */ jsx("div", {
33
52
  ...rest,
34
53
  className: cn(badgeVariants({
@@ -36,6 +55,10 @@ function Badge(props) {
36
55
  status,
37
56
  clickable: typeof onClick === "function"
38
57
  }), className),
58
+ style: isNumeric ? {
59
+ fontFamily: "monospace",
60
+ ...style
61
+ } : style,
39
62
  onClick,
40
63
  children: count
41
64
  });
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../src/Badge/index.tsx"],"sourcesContent":["import { cva } from 'class-variance-authority';\nimport React from 'react';\nimport { cn } from '../lib/utils';\n\nexport interface BadgeProps {\n /**\n * 展示的文本内容\n */\n count: string | number;\n /**\n * 状态\n */\n status?: 'success' | 'error' | 'default' | 'info' | 'warning';\n /**\n * 大小\n */\n size?: 'default' | 'large';\n className?: string;\n onClick?: React.MouseEventHandler;\n}\n\nconst badgeVariants = cva(\n 'ald-badge tw-inline-flex tw-cursor-default tw-items-center tw-rounded-[99px] tw-font-medium',\n {\n variants: {\n size: {\n default:\n 'tw-h-[20px] tw-min-w-[20px] tw-px-[var(--alias-padding-75)] tw-py-[var(--alias-padding-25)] tw-text-xs tw-leading-4',\n large:\n 'ald-badge-large tw-h-[24px] tw-min-w-[24px] tw-px-[var(--alias-padding-75)] tw-py-[var(--alias-padding-25)] tw-text-sm tw-leading-5',\n },\n status: {\n success:\n 'ald-badge-success tw-bg-[var(--background-positive-muted)] tw-text-[var(--content-positive-primary)]',\n error:\n 'ald-badge-error tw-bg-[var(--background-negative-muted)] tw-text-[var(--content-negative-primary)]',\n default:\n 'ald-badge-default tw-bg-[var(--background-neutral-muted)] tw-text-[var(--content-neutral-primary)]',\n info: 'ald-badge-info tw-bg-[var(--background-informative-muted)] tw-text-[var(--content-informative-primary)]',\n warning:\n 'ald-badge-warning tw-bg-[var(--background-warning-muted)] tw-text-[var(--content-warning-primary)]',\n },\n clickable: {\n true: 'ald-badge-clickable tw-cursor-pointer',\n false: '',\n },\n },\n defaultVariants: {\n size: 'default',\n status: 'default',\n clickable: false,\n },\n },\n);\n\nexport default function Badge(props: BadgeProps) {\n const {\n count,\n status = 'default',\n size,\n className,\n onClick,\n ...rest\n } = props;\n\n return (\n <div\n {...rest}\n className={cn(\n badgeVariants({\n size: size || 'default',\n status,\n clickable: typeof onClick === 'function',\n }),\n className,\n )}\n onClick={onClick}\n >\n {count}\n </div>\n );\n}\n"],"mappings":";;;;;AAqBA,IAAM,gBAAgB,IACpB,+FACA;CACE,UAAU;EACR,MAAM;GACJ,SACE;GACF,OACE;GACH;EACD,QAAQ;GACN,SACE;GACF,OACE;GACF,SACE;GACF,MAAM;GACN,SACE;GACH;EACD,WAAW;GACT,MAAM;GACN,OAAO;GACR;EACF;CACD,iBAAiB;EACf,MAAM;EACN,QAAQ;EACR,WAAW;EACZ;CACF,CACF;AAED,SAAwB,MAAM,OAAmB;CAC/C,MAAM,EACJ,OACA,SAAS,WACT,MACA,WACA,SACA,GAAG,SACD;AAEJ,QACE,oBAAC,OAAD;EACE,GAAI;EACJ,WAAW,GACT,cAAc;GACZ,MAAM,QAAQ;GACd;GACA,WAAW,OAAO,YAAY;GAC/B,CAAC,EACF,UACD;EACQ;YAER;EACG,CAAA"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../src/Badge/index.tsx"],"sourcesContent":["import { cva } from 'class-variance-authority';\nimport React from 'react';\nimport { cn } from '../lib/utils';\n\nexport interface BadgeProps {\n /**\n * 展示的文本内容\n */\n count: string | number;\n /**\n * 状态\n */\n status?: 'success' | 'error' | 'default' | 'info' | 'warning';\n /**\n * 大小\n */\n size?: 'default' | 'large';\n className?: string;\n style?: React.CSSProperties;\n onClick?: React.MouseEventHandler;\n}\n\nconst STATUS_DOT_COLORS: Record<string, string> = {\n default: 'tw-bg-[var(--content-secondary)]',\n success: 'tw-bg-[var(--content-positive-secondary)]',\n error: 'tw-bg-[var(--content-negative-secondary)]',\n info: 'tw-bg-[var(--content-informative-secondary)]',\n warning: 'tw-bg-[var(--content-warning-secondary)]',\n};\n\nconst badgeVariants = cva(\n 'ald-badge tw-inline-flex tw-cursor-default tw-items-center tw-justify-center tw-rounded-[99px]',\n {\n variants: {\n size: {\n default:\n 'tw-[font-feature-settings:\"liga\"_off,\"clig\"_off] tw-h-[var(--3xs)] tw-min-w-[var(--3xs)] tw-gap-[var(--component-gap-xs)] tw-px-[var(--component-padding-xs)] tw-text-xs tw-font-normal tw-leading-4',\n large:\n 'ald-badge-large tw-[font-feature-settings:\"liga\"_off,\"clig\"_off] tw-h-[var(--2xs)] tw-min-w-[var(--2xs)] tw-gap-[var(--component-gap-xs)] tw-px-[var(--component-padding-sm)] tw-text-sm tw-font-normal tw-leading-5',\n },\n status: {\n default:\n 'ald-badge-default tw-bg-[var(--non-semantic-background-grey-muted)] tw-text-[var(--non-semantic-content-grey-primary)]',\n success:\n 'ald-badge-success tw-bg-[var(--non-semantic-background-green-muted)] tw-text-[var(--non-semantic-content-green-primary)]',\n error:\n 'ald-badge-error tw-bg-[var(--non-semantic-background-red-muted)] tw-text-[var(--non-semantic-content-red-primary)]',\n info: 'ald-badge-info tw-bg-[var(--non-semantic-background-blue-muted)] tw-text-[var(--non-semantic-content-blue-primary)]',\n warning:\n 'ald-badge-warning tw-bg-[var(--non-semantic-background-orange-muted)] tw-text-[var(--non-semantic-content-orange-primary)]',\n },\n clickable: {\n true: 'ald-badge-clickable tw-cursor-pointer',\n false: '',\n },\n },\n defaultVariants: {\n size: 'default',\n status: 'default',\n clickable: false,\n },\n },\n);\n\nexport default function Badge(props: BadgeProps) {\n const {\n count,\n status = 'default',\n size,\n className,\n style,\n onClick,\n ...rest\n } = props;\n\n const isDot = count === '' || count === undefined;\n\n if (isDot) {\n return (\n <div\n {...rest}\n className={cn(\n 'ald-badge ald-badge-dot tw-flex tw-aspect-square tw-items-start tw-rounded-full',\n STATUS_DOT_COLORS[status],\n typeof onClick === 'function' && 'tw-cursor-pointer',\n className,\n )}\n style={{ width: 8, height: 8, gap: 8, ...style }}\n onClick={onClick}\n />\n );\n }\n\n const isNumeric =\n typeof count === 'number' ||\n (typeof count === 'string' && /^[+-]?\\d+$/.test(count.trim()));\n\n return (\n <div\n {...rest}\n className={cn(\n badgeVariants({\n size: size || 'default',\n status,\n clickable: typeof onClick === 'function',\n }),\n className,\n )}\n style={isNumeric ? { fontFamily: 'monospace', ...style } : style}\n onClick={onClick}\n >\n {count}\n </div>\n );\n}\n"],"mappings":";;;;;AAsBA,IAAM,oBAA4C;CAChD,SAAS;CACT,SAAS;CACT,OAAO;CACP,MAAM;CACN,SAAS;CACV;AAED,IAAM,gBAAgB,IACpB,kGACA;CACE,UAAU;EACR,MAAM;GACJ,SACE;GACF,OACE;GACH;EACD,QAAQ;GACN,SACE;GACF,SACE;GACF,OACE;GACF,MAAM;GACN,SACE;GACH;EACD,WAAW;GACT,MAAM;GACN,OAAO;GACR;EACF;CACD,iBAAiB;EACf,MAAM;EACN,QAAQ;EACR,WAAW;EACZ;CACF,CACF;AAED,SAAwB,MAAM,OAAmB;CAC/C,MAAM,EACJ,OACA,SAAS,WACT,MACA,WACA,OACA,SACA,GAAG,SACD;AAIJ,KAFc,UAAU,MAAM,UAAU,OAGtC,QACE,oBAAC,OAAD;EACE,GAAI;EACJ,WAAW,GACT,mFACA,kBAAkB,SAClB,OAAO,YAAY,cAAc,qBACjC,UACD;EACD,OAAO;GAAE,OAAO;GAAG,QAAQ;GAAG,KAAK;GAAG,GAAG;GAAO;EACvC;EACT,CAAA;CAIN,MAAM,YACJ,OAAO,UAAU,YAChB,OAAO,UAAU,YAAY,aAAa,KAAK,MAAM,MAAM,CAAC;AAE/D,QACE,oBAAC,OAAD;EACE,GAAI;EACJ,WAAW,GACT,cAAc;GACZ,MAAM,QAAQ;GACd;GACA,WAAW,OAAO,YAAY;GAC/B,CAAC,EACF,UACD;EACD,OAAO,YAAY;GAAE,YAAY;GAAa,GAAG;GAAO,GAAG;EAClD;YAER;EACG,CAAA"}
@@ -2,13 +2,22 @@ import { cn } from "../lib/utils.js";
2
2
  import React from "react";
3
3
  import { jsx, jsxs } from "react/jsx-runtime";
4
4
  //#region src/Breadcrumb/index.tsx
5
- var DEFAULT_SEPARATOR_SVG = "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTAiIGhlaWdodD0iMjAiIHZpZXdCb3g9IjAgMCAxMCAyMCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik05LjQ0NzE5IDAuMTA1NzkyQzkuOTQxMTcgMC4zNTI3ODEgMTAuMTQxNCAwLjk1MzQ1NCA5Ljg5NDQgMS40NDc0M0wxLjg5NDQgMTkuNDQ3NEMxLjY0NzQxIDE5Ljk0MTQgMS4wNDY3NCAyMC4xNDE2IDAuNTUyNzYxIDE5Ljg5NDZDMC4wNTg3ODI5IDE5LjY0NzcgLTAuMTQxNDQyIDE5LjA0NyAwLjEwNTU0OCAxOC41NTNMOC4xMDU1NSAwLjU1MzAwNkM4LjM1MjU0IDAuMDU5MDI3IDguOTUzMjEgLTAuMTQxMTk3IDkuNDQ3MTkgMC4xMDU3OTJaIiBmaWxsPSIjMDAxQTMzIiBmaWxsLW9wYWNpdHk9IjAuNSIvPgo8L3N2Zz4=";
6
5
  var DefaultSeparator = () => /* @__PURE__ */ jsx("span", {
7
- className: "default-separator tw-mx-2 tw-inline-block tw-h-[14px] tw-w-[7px] tw-opacity-60",
8
- style: {
9
- background: `url('${DEFAULT_SEPARATOR_SVG}') no-repeat center`,
10
- backgroundSize: "100% 100%"
11
- }
6
+ className: "default-separator tw-mx-1 tw-inline-flex tw-items-center tw-text-[var(--content-tertiary)]",
7
+ children: /* @__PURE__ */ jsx("svg", {
8
+ width: "16",
9
+ height: "16",
10
+ viewBox: "0 0 16 16",
11
+ fill: "none",
12
+ xmlns: "http://www.w3.org/2000/svg",
13
+ children: /* @__PURE__ */ jsx("path", {
14
+ d: "M6 3.5L10.5 8L6 12.5",
15
+ stroke: "currentColor",
16
+ strokeWidth: "1.5",
17
+ strokeLinecap: "round",
18
+ strokeLinejoin: "round"
19
+ })
20
+ })
12
21
  });
13
22
  var Breadcrumb = (props) => {
14
23
  const { className, style, separator = /* @__PURE__ */ jsx(DefaultSeparator, {}), items, children } = props;
@@ -16,9 +25,9 @@ var Breadcrumb = (props) => {
16
25
  if (items) return items.map((item, index) => {
17
26
  const isLast = index === items.length - 1;
18
27
  return /* @__PURE__ */ jsxs(React.Fragment, { children: [/* @__PURE__ */ jsx("span", {
19
- className: cn("ald-breadcrumb-item tw-cursor-pointer tw-text-sm", isLast ? "tw-text-[var(--content-primary)]" : "tw-text-[var(--content-secondary)] hover:tw-text-[var(--content-primary)]", item.className),
28
+ className: cn("ald-breadcrumb-item tw-cursor-pointer tw-text-sm [&_a]:tw-text-[var(--alias-colors-link-default)] [&_a:hover]:tw-text-[var(--alias-colors-link-hover)]", isLast ? "tw-text-[var(--content-primary)]" : "tw-text-[var(--content-tertiary)] hover:tw-text-[var(--content-primary)]", item.className),
20
29
  children: item.href ? /* @__PURE__ */ jsx("a", {
21
- className: "ald-breadcrumb-link tw-text-inherit",
30
+ className: "ald-breadcrumb-link tw-text-[var(--alias-colors-link-default)] hover:tw-text-[var(--alias-colors-link-hover)]",
22
31
  href: item.href,
23
32
  onClick: item.onClick,
24
33
  children: item.title
@@ -27,7 +36,7 @@ var Breadcrumb = (props) => {
27
36
  children: item.title
28
37
  })
29
38
  }), separator !== null && !isLast && /* @__PURE__ */ jsx("span", {
30
- className: "ald-breadcrumb-separator",
39
+ className: "ald-breadcrumb-separator tw-inline-flex tw-items-center",
31
40
  children: separator
32
41
  })] }, index);
33
42
  });
@@ -35,7 +44,7 @@ var Breadcrumb = (props) => {
35
44
  return childArray.map((child, index) => {
36
45
  const isLast = index === childArray.length - 1;
37
46
  return /* @__PURE__ */ jsxs(React.Fragment, { children: [React.isValidElement(child) ? React.cloneElement(child, { "data-last": isLast ? "true" : void 0 }) : child, separator !== null && !isLast && /* @__PURE__ */ jsx("span", {
38
- className: "ald-breadcrumb-separator",
47
+ className: "ald-breadcrumb-separator tw-inline-flex tw-items-center",
39
48
  children: separator
40
49
  })] }, index);
41
50
  });
@@ -49,10 +58,10 @@ var Breadcrumb = (props) => {
49
58
  var BreadcrumbItem = (props) => {
50
59
  const { className, children, href, onClick, ...rest } = props;
51
60
  return /* @__PURE__ */ jsx("span", {
52
- className: cn("ald-breadcrumb-item tw-cursor-pointer tw-text-sm", rest["data-last"] === "true" ? "tw-text-[var(--content-primary)]" : "tw-text-[var(--content-secondary)] hover:tw-text-[var(--content-primary)]", className),
61
+ className: cn("ald-breadcrumb-item tw-cursor-pointer tw-text-sm [&_a]:tw-text-[var(--alias-colors-link-default)] [&_a:hover]:tw-text-[var(--alias-colors-link-hover)]", rest["data-last"] === "true" ? "tw-text-[var(--content-primary)]" : "tw-text-[var(--content-tertiary)] hover:tw-text-[var(--content-primary)]", className),
53
62
  onClick,
54
63
  children: href ? /* @__PURE__ */ jsx("a", {
55
- className: "ald-breadcrumb-link tw-text-inherit",
64
+ className: "ald-breadcrumb-link tw-text-[var(--alias-colors-link-default)] hover:tw-text-[var(--alias-colors-link-hover)]",
56
65
  href,
57
66
  children
58
67
  }) : children