@ktnpm_devops/react-component 0.6.0 → 0.7.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 (238) hide show
  1. package/dist/composites/MultiSelectDropdown/MultiSelectDropdown.d.ts +5 -1
  2. package/dist/composites/MultiSelectDropdown/MultiSelectDropdown.d.ts.map +1 -1
  3. package/dist/index10.cjs +1 -1
  4. package/dist/index10.js +1 -1
  5. package/dist/index11.cjs +1 -1
  6. package/dist/index11.js +1 -1
  7. package/dist/index12.cjs +1 -1
  8. package/dist/index12.js +1 -1
  9. package/dist/index13.cjs +1 -1
  10. package/dist/index13.js +1 -1
  11. package/dist/index14.cjs +1 -1
  12. package/dist/index14.js +1 -1
  13. package/dist/index15.cjs +2 -2
  14. package/dist/index15.js +2 -2
  15. package/dist/index16.cjs +1 -1
  16. package/dist/index16.js +1 -1
  17. package/dist/index17.cjs +1 -1
  18. package/dist/index17.js +1 -1
  19. package/dist/index18.cjs +2 -2
  20. package/dist/index18.js +2 -2
  21. package/dist/index19.cjs +2 -2
  22. package/dist/index19.js +2 -2
  23. package/dist/index20.cjs +2 -2
  24. package/dist/index20.js +2 -2
  25. package/dist/index21.cjs +1 -1
  26. package/dist/index21.js +1 -1
  27. package/dist/index22.cjs +1 -1
  28. package/dist/index22.js +1 -1
  29. package/dist/index23.cjs +1 -1
  30. package/dist/index23.js +1 -1
  31. package/dist/index24.cjs +1 -1
  32. package/dist/index24.js +1 -1
  33. package/dist/index25.cjs +1 -1
  34. package/dist/index25.js +1 -1
  35. package/dist/index26.cjs +1 -1
  36. package/dist/index26.js +1 -1
  37. package/dist/index27.cjs +2 -2
  38. package/dist/index27.js +2 -2
  39. package/dist/index28.cjs +1 -1
  40. package/dist/index28.js +1 -1
  41. package/dist/index29.cjs +11 -9
  42. package/dist/index29.cjs.map +1 -1
  43. package/dist/index29.js +11 -9
  44. package/dist/index29.js.map +1 -1
  45. package/dist/index30.cjs +1 -1
  46. package/dist/index30.js +1 -1
  47. package/dist/index31.cjs +2 -2
  48. package/dist/index31.js +2 -2
  49. package/dist/index32.cjs +2 -2
  50. package/dist/index32.js +2 -2
  51. package/dist/index33.cjs +1 -1
  52. package/dist/index33.js +1 -1
  53. package/dist/index34.cjs +2 -2
  54. package/dist/index34.js +2 -2
  55. package/dist/index35.cjs +1 -1
  56. package/dist/index35.js +1 -1
  57. package/dist/index36.cjs +1 -1
  58. package/dist/index36.js +1 -1
  59. package/dist/index37.cjs +1 -1
  60. package/dist/index37.js +1 -1
  61. package/dist/index38.cjs +2 -2
  62. package/dist/index38.js +2 -2
  63. package/dist/index39.cjs +2 -2
  64. package/dist/index39.js +2 -2
  65. package/dist/index40.cjs +1 -1
  66. package/dist/index40.js +1 -1
  67. package/dist/index41.cjs +3 -3
  68. package/dist/index41.js +3 -3
  69. package/dist/index42.cjs +1 -1
  70. package/dist/index42.js +1 -1
  71. package/dist/index43.cjs +1 -1
  72. package/dist/index43.js +1 -1
  73. package/dist/index44.cjs +2 -2
  74. package/dist/index44.js +2 -2
  75. package/dist/index45.cjs +1 -1
  76. package/dist/index45.js +1 -1
  77. package/dist/index46.cjs +1 -1
  78. package/dist/index46.js +1 -1
  79. package/dist/index47.cjs +2 -2
  80. package/dist/index47.js +2 -2
  81. package/dist/index49.cjs +1 -1
  82. package/dist/index49.js +1 -1
  83. package/dist/index50.cjs +24 -15
  84. package/dist/index50.cjs.map +1 -1
  85. package/dist/index50.js +24 -15
  86. package/dist/index50.js.map +1 -1
  87. package/dist/index51.cjs +6 -76
  88. package/dist/index51.cjs.map +1 -1
  89. package/dist/index51.js +5 -75
  90. package/dist/index51.js.map +1 -1
  91. package/dist/index52.cjs +5 -14
  92. package/dist/index52.cjs.map +1 -1
  93. package/dist/index52.js +6 -15
  94. package/dist/index52.js.map +1 -1
  95. package/dist/index53.cjs +19 -22
  96. package/dist/index53.cjs.map +1 -1
  97. package/dist/index53.js +19 -22
  98. package/dist/index53.js.map +1 -1
  99. package/dist/index54.cjs +76 -24
  100. package/dist/index54.cjs.map +1 -1
  101. package/dist/index54.js +75 -23
  102. package/dist/index54.js.map +1 -1
  103. package/dist/index55.cjs +16 -22
  104. package/dist/index55.cjs.map +1 -1
  105. package/dist/index55.js +17 -23
  106. package/dist/index55.js.map +1 -1
  107. package/dist/index56.cjs +20 -2
  108. package/dist/index56.cjs.map +1 -1
  109. package/dist/index56.js +20 -2
  110. package/dist/index56.js.map +1 -1
  111. package/dist/index57.cjs +19 -19
  112. package/dist/index57.js +20 -20
  113. package/dist/index58.cjs +23 -5
  114. package/dist/index58.cjs.map +1 -1
  115. package/dist/index58.js +24 -6
  116. package/dist/index58.js.map +1 -1
  117. package/dist/index59.cjs +31 -10
  118. package/dist/index59.cjs.map +1 -1
  119. package/dist/index59.js +32 -11
  120. package/dist/index59.js.map +1 -1
  121. package/dist/index60.cjs +64 -10
  122. package/dist/index60.cjs.map +1 -1
  123. package/dist/index60.js +65 -11
  124. package/dist/index60.js.map +1 -1
  125. package/dist/index61.cjs +13 -64
  126. package/dist/index61.cjs.map +1 -1
  127. package/dist/index61.js +13 -64
  128. package/dist/index61.js.map +1 -1
  129. package/dist/index62.cjs +2 -11
  130. package/dist/index62.cjs.map +1 -1
  131. package/dist/index62.js +3 -12
  132. package/dist/index62.js.map +1 -1
  133. package/dist/index63.cjs +1 -1
  134. package/dist/index63.js +1 -1
  135. package/dist/index64.cjs +46 -34
  136. package/dist/index64.cjs.map +1 -1
  137. package/dist/index64.js +46 -34
  138. package/dist/index64.js.map +1 -1
  139. package/dist/index65.cjs +10 -19
  140. package/dist/index65.cjs.map +1 -1
  141. package/dist/index65.js +11 -20
  142. package/dist/index65.js.map +1 -1
  143. package/dist/index66.cjs +28 -13
  144. package/dist/index66.cjs.map +1 -1
  145. package/dist/index66.js +29 -14
  146. package/dist/index66.js.map +1 -1
  147. package/dist/index67.cjs +10 -28
  148. package/dist/index67.cjs.map +1 -1
  149. package/dist/index67.js +10 -28
  150. package/dist/index67.js.map +1 -1
  151. package/dist/index68.cjs +26 -32
  152. package/dist/index68.cjs.map +1 -1
  153. package/dist/index68.js +26 -32
  154. package/dist/index68.js.map +1 -1
  155. package/dist/index69.cjs +29 -14
  156. package/dist/index69.cjs.map +1 -1
  157. package/dist/index69.js +29 -14
  158. package/dist/index69.js.map +1 -1
  159. package/dist/index70.cjs +134 -19
  160. package/dist/index70.cjs.map +1 -1
  161. package/dist/index70.js +133 -18
  162. package/dist/index70.js.map +1 -1
  163. package/dist/index71.cjs +39 -15
  164. package/dist/index71.cjs.map +1 -1
  165. package/dist/index71.js +40 -16
  166. package/dist/index71.js.map +1 -1
  167. package/dist/index72.cjs +49 -4
  168. package/dist/index72.cjs.map +1 -1
  169. package/dist/index72.js +50 -5
  170. package/dist/index72.js.map +1 -1
  171. package/dist/index73.cjs +19 -37
  172. package/dist/index73.cjs.map +1 -1
  173. package/dist/index73.js +20 -38
  174. package/dist/index73.js.map +1 -1
  175. package/dist/index74.cjs +52 -16
  176. package/dist/index74.cjs.map +1 -1
  177. package/dist/index74.js +53 -17
  178. package/dist/index74.js.map +1 -1
  179. package/dist/index75.cjs +77 -35
  180. package/dist/index75.cjs.map +1 -1
  181. package/dist/index75.js +77 -35
  182. package/dist/index75.js.map +1 -1
  183. package/dist/index76.cjs +17 -2
  184. package/dist/index76.cjs.map +1 -1
  185. package/dist/index76.js +18 -3
  186. package/dist/index76.js.map +1 -1
  187. package/dist/index77.cjs +10 -52
  188. package/dist/index77.cjs.map +1 -1
  189. package/dist/index77.js +11 -53
  190. package/dist/index77.js.map +1 -1
  191. package/dist/index78.cjs +15 -27
  192. package/dist/index78.cjs.map +1 -1
  193. package/dist/index78.js +15 -27
  194. package/dist/index78.js.map +1 -1
  195. package/dist/index79.cjs +35 -47
  196. package/dist/index79.cjs.map +1 -1
  197. package/dist/index79.js +35 -47
  198. package/dist/index79.js.map +1 -1
  199. package/dist/index80.cjs +4 -46
  200. package/dist/index80.cjs.map +1 -1
  201. package/dist/index80.js +5 -47
  202. package/dist/index80.js.map +1 -1
  203. package/dist/index81.cjs +16 -31
  204. package/dist/index81.cjs.map +1 -1
  205. package/dist/index81.js +16 -31
  206. package/dist/index81.js.map +1 -1
  207. package/dist/index82.cjs +13 -16
  208. package/dist/index82.cjs.map +1 -1
  209. package/dist/index82.js +14 -17
  210. package/dist/index82.js.map +1 -1
  211. package/dist/index83.cjs +32 -50
  212. package/dist/index83.cjs.map +1 -1
  213. package/dist/index83.js +32 -50
  214. package/dist/index83.js.map +1 -1
  215. package/dist/index84.cjs +13 -16
  216. package/dist/index84.cjs.map +1 -1
  217. package/dist/index84.js +14 -17
  218. package/dist/index84.js.map +1 -1
  219. package/dist/index85.cjs +16 -79
  220. package/dist/index85.cjs.map +1 -1
  221. package/dist/index85.js +16 -79
  222. package/dist/index85.js.map +1 -1
  223. package/dist/index86.cjs +31 -134
  224. package/dist/index86.cjs.map +1 -1
  225. package/dist/index86.js +30 -133
  226. package/dist/index86.js.map +1 -1
  227. package/dist/index87.cjs +50 -38
  228. package/dist/index87.cjs.map +1 -1
  229. package/dist/index87.js +50 -38
  230. package/dist/index87.js.map +1 -1
  231. package/dist/index88.cjs +25 -16
  232. package/dist/index88.cjs.map +1 -1
  233. package/dist/index88.js +26 -17
  234. package/dist/index88.js.map +1 -1
  235. package/dist/index9.cjs +1 -1
  236. package/dist/index9.js +1 -1
  237. package/dist/style.css +5 -1
  238. package/package.json +1 -1
@@ -24,6 +24,10 @@ export interface MultiSelectDropdownProps {
24
24
  customTriggerLabel?: string;
25
25
  /** Explicit selection mode override. */
26
26
  selectionMode?: 'all' | 'custom';
27
+ /** Treat an empty `selected` array as "all selected" (opt-in, legacy behavior). */
28
+ emptyMeansAll?: boolean;
29
+ /** What the trigger shows as a summary: the value label ('text') or just the count badge ('count'). */
30
+ triggerSummary?: 'text' | 'count';
27
31
  }
28
- export declare const MultiSelectDropdown: ({ label, options, selected, onApply, isLoading, error, allowCustomValues, customTriggerLabel, selectionMode, }: MultiSelectDropdownProps) => import("react/jsx-runtime").JSX.Element;
32
+ export declare const MultiSelectDropdown: ({ label, options, selected, onApply, isLoading, error, allowCustomValues, customTriggerLabel, selectionMode, emptyMeansAll, triggerSummary, }: MultiSelectDropdownProps) => import("react/jsx-runtime").JSX.Element;
29
33
  //# sourceMappingURL=MultiSelectDropdown.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"MultiSelectDropdown.d.ts","sourceRoot":"","sources":["../../../src/composites/MultiSelectDropdown/MultiSelectDropdown.tsx"],"names":[],"mappings":"AAMA,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,wBAAwB;IACvC,6CAA6C;IAC7C,KAAK,EAAE,MAAM,CAAC;IACd,yBAAyB;IACzB,OAAO,EAAE,iBAAiB,EAAE,CAAC;IAC7B,8CAA8C;IAC9C,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,oDAAoD;IACpD,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE;QAAE,aAAa,EAAE,KAAK,GAAG,QAAQ,CAAA;KAAE,KAAK,IAAI,CAAC;IACnF,mDAAmD;IACnD,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,mDAAmD;IACnD,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,mDAAmD;IACnD,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,wCAAwC;IACxC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,wCAAwC;IACxC,aAAa,CAAC,EAAE,KAAK,GAAG,QAAQ,CAAC;CAClC;AAQD,eAAO,MAAM,mBAAmB,GAAI,gHAUjC,wBAAwB,4CAwP1B,CAAC"}
1
+ {"version":3,"file":"MultiSelectDropdown.d.ts","sourceRoot":"","sources":["../../../src/composites/MultiSelectDropdown/MultiSelectDropdown.tsx"],"names":[],"mappings":"AAMA,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,wBAAwB;IACvC,6CAA6C;IAC7C,KAAK,EAAE,MAAM,CAAC;IACd,yBAAyB;IACzB,OAAO,EAAE,iBAAiB,EAAE,CAAC;IAC7B,8CAA8C;IAC9C,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,oDAAoD;IACpD,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE;QAAE,aAAa,EAAE,KAAK,GAAG,QAAQ,CAAA;KAAE,KAAK,IAAI,CAAC;IACnF,mDAAmD;IACnD,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,mDAAmD;IACnD,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,mDAAmD;IACnD,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,wCAAwC;IACxC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,wCAAwC;IACxC,aAAa,CAAC,EAAE,KAAK,GAAG,QAAQ,CAAC;IACjC,mFAAmF;IACnF,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,uGAAuG;IACvG,cAAc,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;CACnC;AAQD,eAAO,MAAM,mBAAmB,GAAI,+IAYjC,wBAAwB,4CA0P1B,CAAC"}
package/dist/index10.cjs CHANGED
@@ -2,7 +2,7 @@
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
3
  const jsxRuntime = require("react/jsx-runtime");
4
4
  const clsx = require("./index48.cjs");
5
- const AuthLayout_module = require("./index60.cjs");
5
+ const AuthLayout_module = require("./index77.cjs");
6
6
  const AuthLayout = ({
7
7
  children,
8
8
  logo,
package/dist/index10.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import { jsxs, jsx } from "react/jsx-runtime";
2
2
  import { clsx } from "./index48.js";
3
- import styles from "./index60.js";
3
+ import styles from "./index77.js";
4
4
  const AuthLayout = ({
5
5
  children,
6
6
  logo,
package/dist/index11.cjs CHANGED
@@ -2,7 +2,7 @@
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
3
  const jsxRuntime = require("react/jsx-runtime");
4
4
  const clsx = require("./index48.cjs");
5
- const Avatar_module = require("./index62.cjs");
5
+ const Avatar_module = require("./index65.cjs");
6
6
  const Avatar = ({ label, size = "md", className, ...props }) => {
7
7
  const initials = label.split(" ").filter(Boolean).map((part) => part[0]).join("").slice(0, 2).toUpperCase();
8
8
  return /* @__PURE__ */ jsxRuntime.jsx(
package/dist/index11.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import { jsx } from "react/jsx-runtime";
2
2
  import { clsx } from "./index48.js";
3
- import styles from "./index62.js";
3
+ import styles from "./index65.js";
4
4
  const Avatar = ({ label, size = "md", className, ...props }) => {
5
5
  const initials = label.split(" ").filter(Boolean).map((part) => part[0]).join("").slice(0, 2).toUpperCase();
6
6
  return /* @__PURE__ */ jsx(
package/dist/index12.cjs CHANGED
@@ -2,7 +2,7 @@
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
3
  const jsxRuntime = require("react/jsx-runtime");
4
4
  const clsx = require("./index48.cjs");
5
- const Badge_module = require("./index52.cjs");
5
+ const Badge_module = require("./index61.cjs");
6
6
  const Badge = ({ className, variant = "info", ...props }) => /* @__PURE__ */ jsxRuntime.jsx("span", { className: clsx.clsx(Badge_module.default.root, Badge_module.default[variant], className), ...props });
7
7
  exports.Badge = Badge;
8
8
  //# sourceMappingURL=index12.cjs.map
package/dist/index12.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import { jsx } from "react/jsx-runtime";
2
2
  import { clsx } from "./index48.js";
3
- import styles from "./index52.js";
3
+ import styles from "./index61.js";
4
4
  const Badge = ({ className, variant = "info", ...props }) => /* @__PURE__ */ jsx("span", { className: clsx(styles.root, styles[variant], className), ...props });
5
5
  export {
6
6
  Badge
package/dist/index13.cjs CHANGED
@@ -3,7 +3,7 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
3
  const jsxRuntime = require("react/jsx-runtime");
4
4
  const react = require("react");
5
5
  const clsx = require("./index48.cjs");
6
- const Button_module = require("./index55.cjs");
6
+ const Button_module = require("./index50.cjs");
7
7
  const Button = react.forwardRef(
8
8
  ({ className, variant = "primary", size = "md", type = "button", ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
9
9
  "button",
package/dist/index13.js CHANGED
@@ -1,7 +1,7 @@
1
1
  import { jsx } from "react/jsx-runtime";
2
2
  import { forwardRef } from "react";
3
3
  import { clsx } from "./index48.js";
4
- import styles from "./index55.js";
4
+ import styles from "./index50.js";
5
5
  const Button = forwardRef(
6
6
  ({ className, variant = "primary", size = "md", type = "button", ...props }, ref) => /* @__PURE__ */ jsx(
7
7
  "button",
package/dist/index14.cjs CHANGED
@@ -2,7 +2,7 @@
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
3
  const jsxRuntime = require("react/jsx-runtime");
4
4
  const clsx = require("./index48.cjs");
5
- const Card_module = require("./index59.cjs");
5
+ const Card_module = require("./index67.cjs");
6
6
  const Card = ({ className, ...props }) => /* @__PURE__ */ jsxRuntime.jsx("div", { className: clsx.clsx(Card_module.default.root, className), ...props });
7
7
  const CardHeader = ({ className, ...props }) => /* @__PURE__ */ jsxRuntime.jsx("div", { className: clsx.clsx(Card_module.default.header, className), ...props });
8
8
  const CardContent = ({ className, ...props }) => /* @__PURE__ */ jsxRuntime.jsx("div", { className: clsx.clsx(Card_module.default.content, className), ...props });
package/dist/index14.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import { jsx } from "react/jsx-runtime";
2
2
  import { clsx } from "./index48.js";
3
- import styles from "./index59.js";
3
+ import styles from "./index67.js";
4
4
  const Card = ({ className, ...props }) => /* @__PURE__ */ jsx("div", { className: clsx(styles.root, className), ...props });
5
5
  const CardHeader = ({ className, ...props }) => /* @__PURE__ */ jsx("div", { className: clsx(styles.header, className), ...props });
6
6
  const CardContent = ({ className, ...props }) => /* @__PURE__ */ jsx("div", { className: clsx(styles.content, className), ...props });
package/dist/index15.cjs CHANGED
@@ -4,9 +4,9 @@ const jsxRuntime = require("react/jsx-runtime");
4
4
  const react = require("react");
5
5
  const reactDom = require("react-dom");
6
6
  const useEscapeKey = require("./index5.cjs");
7
- const constants = require("./index51.cjs");
7
+ const constants = require("./index54.cjs");
8
8
  const clsx = require("./index48.cjs");
9
- const ChartExpandModal_module = require("./index67.cjs");
9
+ const ChartExpandModal_module = require("./index68.cjs");
10
10
  const getInitialSize = (override) => {
11
11
  if (typeof window === "undefined") {
12
12
  return {
package/dist/index15.js CHANGED
@@ -2,9 +2,9 @@ import { jsx, jsxs } from "react/jsx-runtime";
2
2
  import { useState, useRef, useEffect, useCallback } from "react";
3
3
  import { createPortal } from "react-dom";
4
4
  import { useEscapeKey } from "./index5.js";
5
- import { SVG_STROKE_WIDTH, SVG_VIEWBOX, ICON_SIZE, CHART_MODAL, VIEWPORT_MARGIN } from "./index51.js";
5
+ import { SVG_STROKE_WIDTH, SVG_VIEWBOX, ICON_SIZE, CHART_MODAL, VIEWPORT_MARGIN } from "./index54.js";
6
6
  import { clsx } from "./index48.js";
7
- import styles from "./index67.js";
7
+ import styles from "./index68.js";
8
8
  const getInitialSize = (override) => {
9
9
  if (typeof window === "undefined") {
10
10
  return {
package/dist/index16.cjs CHANGED
@@ -2,7 +2,7 @@
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
3
  const jsxRuntime = require("react/jsx-runtime");
4
4
  const clsx = require("./index48.cjs");
5
- const ChatLayout_module = require("./index84.cjs");
5
+ const ChatLayout_module = require("./index76.cjs");
6
6
  const ChatLayout = ({
7
7
  sidebar,
8
8
  conversationList,
package/dist/index16.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import { jsxs, jsx } from "react/jsx-runtime";
2
2
  import { clsx } from "./index48.js";
3
- import styles from "./index84.js";
3
+ import styles from "./index76.js";
4
4
  const ChatLayout = ({
5
5
  sidebar,
6
6
  conversationList,
package/dist/index17.cjs CHANGED
@@ -3,7 +3,7 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
3
  const jsxRuntime = require("react/jsx-runtime");
4
4
  const react = require("react");
5
5
  const clsx = require("./index48.cjs");
6
- const Col_module = require("./index76.cjs");
6
+ const Col_module = require("./index49.cjs");
7
7
  const GRID_COLUMNS = 12;
8
8
  function toFlexValue(value) {
9
9
  if (value === true) return 1;
package/dist/index17.js CHANGED
@@ -1,7 +1,7 @@
1
1
  import { jsx } from "react/jsx-runtime";
2
2
  import { forwardRef } from "react";
3
3
  import { clsx } from "./index48.js";
4
- import styles from "./index76.js";
4
+ import styles from "./index49.js";
5
5
  const GRID_COLUMNS = 12;
6
6
  function toFlexValue(value) {
7
7
  if (value === true) return 1;
package/dist/index18.cjs CHANGED
@@ -4,9 +4,9 @@ const jsxRuntime = require("react/jsx-runtime");
4
4
  const react = require("react");
5
5
  const reactDom = require("react-dom");
6
6
  const useEscapeKey = require("./index5.cjs");
7
- const constants = require("./index51.cjs");
7
+ const constants = require("./index54.cjs");
8
8
  const clsx = require("./index48.cjs");
9
- const ContextMenu_module = require("./index70.cjs");
9
+ const ContextMenu_module = require("./index82.cjs");
10
10
  const ContextMenu = ({ x, y, items, onClose }) => {
11
11
  const menuRef = react.useRef(null);
12
12
  const [focusedIndex, setFocusedIndex] = react.useState(-1);
package/dist/index18.js CHANGED
@@ -2,9 +2,9 @@ import { jsx, jsxs } from "react/jsx-runtime";
2
2
  import { useRef, useState, useCallback, useEffect } from "react";
3
3
  import { createPortal } from "react-dom";
4
4
  import { useEscapeKey } from "./index5.js";
5
- import { CONTEXT_MENU_MARGIN } from "./index51.js";
5
+ import { CONTEXT_MENU_MARGIN } from "./index54.js";
6
6
  import { clsx } from "./index48.js";
7
- import styles from "./index70.js";
7
+ import styles from "./index82.js";
8
8
  const ContextMenu = ({ x, y, items, onClose }) => {
9
9
  const menuRef = useRef(null);
10
10
  const [focusedIndex, setFocusedIndex] = useState(-1);
package/dist/index19.cjs CHANGED
@@ -4,8 +4,8 @@ const jsxRuntime = require("react/jsx-runtime");
4
4
  const react = require("react");
5
5
  const ReactECharts = require("echarts-for-react");
6
6
  const clsx = require("./index48.cjs");
7
- const constants = require("./index51.cjs");
8
- const CounterTimeseriesChart_module = require("./index88.cjs");
7
+ const constants = require("./index54.cjs");
8
+ const CounterTimeseriesChart_module = require("./index66.cjs");
9
9
  const DEFAULT_TIME_RANGE_OPTIONS = ["auto", "1h", "6h", "24h", "7d", "30d"];
10
10
  const buildMarkAreas = (annotations) => annotations.filter((a) => a.end).map((a) => [
11
11
  { name: a.label, xAxis: a.start, itemStyle: { color: a.color ?? "rgba(255,107,90,0.12)" } },
package/dist/index19.js CHANGED
@@ -2,8 +2,8 @@ import { jsxs, jsx } from "react/jsx-runtime";
2
2
  import { useMemo } from "react";
3
3
  import ReactECharts from "echarts-for-react";
4
4
  import { clsx } from "./index48.js";
5
- import { CHART_COLORS } from "./index51.js";
6
- import styles from "./index88.js";
5
+ import { CHART_COLORS } from "./index54.js";
6
+ import styles from "./index66.js";
7
7
  const DEFAULT_TIME_RANGE_OPTIONS = ["auto", "1h", "6h", "24h", "7d", "30d"];
8
8
  const buildMarkAreas = (annotations) => annotations.filter((a) => a.end).map((a) => [
9
9
  { name: a.label, xAxis: a.start, itemStyle: { color: a.color ?? "rgba(255,107,90,0.12)" } },
package/dist/index20.cjs CHANGED
@@ -3,8 +3,8 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
3
  const jsxRuntime = require("react/jsx-runtime");
4
4
  const react = require("react");
5
5
  const clsx = require("./index48.cjs");
6
- const constants = require("./index51.cjs");
7
- const CountersAnalysisCard_module = require("./index77.cjs");
6
+ const constants = require("./index54.cjs");
7
+ const CountersAnalysisCard_module = require("./index74.cjs");
8
8
  const CounterTimeseriesChart = require("./index19.cjs");
9
9
  const COLUMN_HEADERS = [
10
10
  { key: "counter", label: "Counter" },
package/dist/index20.js CHANGED
@@ -1,8 +1,8 @@
1
1
  import { jsxs, jsx } from "react/jsx-runtime";
2
2
  import { useState, useMemo } from "react";
3
3
  import { clsx } from "./index48.js";
4
- import { COUNTERS_PAGE_SIZE } from "./index51.js";
5
- import styles from "./index77.js";
4
+ import { COUNTERS_PAGE_SIZE } from "./index54.js";
5
+ import styles from "./index74.js";
6
6
  import { CounterTimeseriesChart } from "./index19.js";
7
7
  const COLUMN_HEADERS = [
8
8
  { key: "counter", label: "Counter" },
package/dist/index21.cjs CHANGED
@@ -6,7 +6,7 @@ const clsx = require("./index48.cjs");
6
6
  const useClickOutside = require("./index4.cjs");
7
7
  const useEscapeKey = require("./index5.cjs");
8
8
  const format = require("./index7.cjs");
9
- const CustomRangePicker_module = require("./index64.cjs");
9
+ const CustomRangePicker_module = require("./index83.cjs");
10
10
  const formatInputValue = (iso) => {
11
11
  if (!iso) return "";
12
12
  const date = new Date(iso);
package/dist/index21.js CHANGED
@@ -4,7 +4,7 @@ import { clsx } from "./index48.js";
4
4
  import { useClickOutside } from "./index4.js";
5
5
  import { useEscapeKey } from "./index5.js";
6
6
  import { formatLocalISOString } from "./index7.js";
7
- import styles from "./index64.js";
7
+ import styles from "./index83.js";
8
8
  const formatInputValue = (iso) => {
9
9
  if (!iso) return "";
10
10
  const date = new Date(iso);
package/dist/index22.cjs CHANGED
@@ -2,7 +2,7 @@
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
3
  const jsxRuntime = require("react/jsx-runtime");
4
4
  const clsx = require("./index48.cjs");
5
- const DashboardLayout_module = require("./index82.cjs");
5
+ const DashboardLayout_module = require("./index85.cjs");
6
6
  const DashboardLayout = ({
7
7
  sidebar,
8
8
  filterBar,
package/dist/index22.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import { jsxs, jsx } from "react/jsx-runtime";
2
2
  import { clsx } from "./index48.js";
3
- import styles from "./index82.js";
3
+ import styles from "./index85.js";
4
4
  const DashboardLayout = ({
5
5
  sidebar,
6
6
  filterBar,
package/dist/index23.cjs CHANGED
@@ -5,7 +5,7 @@ const react = require("react");
5
5
  const clsx = require("./index48.cjs");
6
6
  const useClickOutside = require("./index4.cjs");
7
7
  const useEscapeKey = require("./index5.cjs");
8
- const DatePickerDropdown_module = require("./index80.cjs");
8
+ const DatePickerDropdown_module = require("./index64.cjs");
9
9
  const MONTHS = [
10
10
  "January",
11
11
  "February",
package/dist/index23.js CHANGED
@@ -3,7 +3,7 @@ import { useState, useRef, useCallback, useEffect, useMemo } from "react";
3
3
  import { clsx } from "./index48.js";
4
4
  import { useClickOutside } from "./index4.js";
5
5
  import { useEscapeKey } from "./index5.js";
6
- import styles from "./index80.js";
6
+ import styles from "./index64.js";
7
7
  const MONTHS = [
8
8
  "January",
9
9
  "February",
package/dist/index24.cjs CHANGED
@@ -5,7 +5,7 @@ const react = require("react");
5
5
  const clsx = require("./index48.cjs");
6
6
  const useClickOutside = require("./index4.cjs");
7
7
  const useEscapeKey = require("./index5.cjs");
8
- const FilterDropdown_module = require("./index81.cjs");
8
+ const FilterDropdown_module = require("./index59.cjs");
9
9
  const FilterDropdown = ({
10
10
  label,
11
11
  mode,
package/dist/index24.js CHANGED
@@ -3,7 +3,7 @@ import { useState, useRef, useEffect, useCallback, useMemo } from "react";
3
3
  import { clsx } from "./index48.js";
4
4
  import { useClickOutside } from "./index4.js";
5
5
  import { useEscapeKey } from "./index5.js";
6
- import styles from "./index81.js";
6
+ import styles from "./index59.js";
7
7
  const FilterDropdown = ({
8
8
  label,
9
9
  mode,
package/dist/index25.cjs CHANGED
@@ -3,7 +3,7 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
3
  const jsxRuntime = require("react/jsx-runtime");
4
4
  const react = require("react");
5
5
  const clsx = require("./index48.cjs");
6
- const HeatmapMatrix_module = require("./index78.cjs");
6
+ const HeatmapMatrix_module = require("./index86.cjs");
7
7
  function activateOnKey(event, action) {
8
8
  if (event.key === "Enter" || event.key === " ") {
9
9
  event.preventDefault();
package/dist/index25.js CHANGED
@@ -1,7 +1,7 @@
1
1
  import { jsx, jsxs } from "react/jsx-runtime";
2
2
  import { forwardRef } from "react";
3
3
  import { clsx } from "./index48.js";
4
- import styles from "./index78.js";
4
+ import styles from "./index86.js";
5
5
  function activateOnKey(event, action) {
6
6
  if (event.key === "Enter" || event.key === " ") {
7
7
  event.preventDefault();
package/dist/index26.cjs CHANGED
@@ -3,7 +3,7 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
3
  const jsxRuntime = require("react/jsx-runtime");
4
4
  const react = require("react");
5
5
  const clsx = require("./index48.cjs");
6
- const Input_module = require("./index56.cjs");
6
+ const Input_module = require("./index63.cjs");
7
7
  const Input = react.forwardRef(
8
8
  ({ className, type = "text", ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx("input", { ref, type, className: clsx.clsx(Input_module.default.root, className), ...props })
9
9
  );
package/dist/index26.js CHANGED
@@ -1,7 +1,7 @@
1
1
  import { jsx } from "react/jsx-runtime";
2
2
  import { forwardRef } from "react";
3
3
  import { clsx } from "./index48.js";
4
- import styles from "./index56.js";
4
+ import styles from "./index63.js";
5
5
  const Input = forwardRef(
6
6
  ({ className, type = "text", ...props }, ref) => /* @__PURE__ */ jsx("input", { ref, type, className: clsx(styles.root, className), ...props })
7
7
  );
package/dist/index27.cjs CHANGED
@@ -3,8 +3,8 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
3
  const jsxRuntime = require("react/jsx-runtime");
4
4
  const react = require("react");
5
5
  const clsx = require("./index48.cjs");
6
- const constants = require("./index51.cjs");
7
- const LiveExplorerTable_module = require("./index79.cjs");
6
+ const constants = require("./index54.cjs");
7
+ const LiveExplorerTable_module = require("./index72.cjs");
8
8
  const SKELETON_ROWS = 5;
9
9
  const FULL_PERCENT = 100;
10
10
  const LiveExplorerTable = ({
package/dist/index27.js CHANGED
@@ -1,8 +1,8 @@
1
1
  import { jsxs, jsx } from "react/jsx-runtime";
2
2
  import { useRef, useEffect, useCallback } from "react";
3
3
  import { clsx } from "./index48.js";
4
- import { MIN_COLUMN_WIDTH } from "./index51.js";
5
- import styles from "./index79.js";
4
+ import { MIN_COLUMN_WIDTH } from "./index54.js";
5
+ import styles from "./index72.js";
6
6
  const SKELETON_ROWS = 5;
7
7
  const FULL_PERCENT = 100;
8
8
  const LiveExplorerTable = ({
package/dist/index28.cjs CHANGED
@@ -4,7 +4,7 @@ const jsxRuntime = require("react/jsx-runtime");
4
4
  const reactDom = require("react-dom");
5
5
  const clsx = require("./index48.cjs");
6
6
  const useEscapeKey = require("./index5.cjs");
7
- const Modal_module = require("./index69.cjs");
7
+ const Modal_module = require("./index53.cjs");
8
8
  const Modal = ({
9
9
  open,
10
10
  title,
package/dist/index28.js CHANGED
@@ -2,7 +2,7 @@ import { jsx, jsxs } from "react/jsx-runtime";
2
2
  import { createPortal } from "react-dom";
3
3
  import { clsx } from "./index48.js";
4
4
  import { useEscapeKey } from "./index5.js";
5
- import styles from "./index69.js";
5
+ import styles from "./index53.js";
6
6
  const Modal = ({
7
7
  open,
8
8
  title,
package/dist/index29.cjs CHANGED
@@ -4,8 +4,8 @@ const jsxRuntime = require("react/jsx-runtime");
4
4
  const react = require("react");
5
5
  const clsx = require("./index48.cjs");
6
6
  const useClickOutside = require("./index4.cjs");
7
- const constants = require("./index51.cjs");
8
- const MultiSelectDropdown_module = require("./index85.cjs");
7
+ const constants = require("./index54.cjs");
8
+ const MultiSelectDropdown_module = require("./index75.cjs");
9
9
  const arraysMatch = (a, b) => {
10
10
  if (a.length !== b.length) return false;
11
11
  const set = new Set(b);
@@ -20,7 +20,9 @@ const MultiSelectDropdown = ({
20
20
  error = null,
21
21
  allowCustomValues = false,
22
22
  customTriggerLabel,
23
- selectionMode
23
+ selectionMode,
24
+ emptyMeansAll = false,
25
+ triggerSummary = "text"
24
26
  }) => {
25
27
  const [isOpen, setIsOpen] = react.useState(false);
26
28
  const [searchTerm, setSearchTerm] = react.useState("");
@@ -44,10 +46,10 @@ const MultiSelectDropdown = ({
44
46
  });
45
47
  }, [normalizedOptions, searchTerm]);
46
48
  const allOptionValues = react.useMemo(() => normalizedOptions.map((o) => o.value), [normalizedOptions]);
47
- const initialSelection = react.useMemo(
48
- () => Array.isArray(selected) && selected.length ? Array.from(new Set(selected)) : allOptionValues,
49
- [selected, allOptionValues]
50
- );
49
+ const initialSelection = react.useMemo(() => {
50
+ if (Array.isArray(selected) && selected.length) return Array.from(new Set(selected));
51
+ return emptyMeansAll ? allOptionValues : [];
52
+ }, [selected, allOptionValues, emptyMeansAll]);
51
53
  const [pendingSelection, setPendingSelection] = react.useState(initialSelection);
52
54
  const closeAndReset = react.useCallback(() => {
53
55
  setIsOpen(false);
@@ -134,8 +136,8 @@ const MultiSelectDropdown = ({
134
136
  /* @__PURE__ */ jsxRuntime.jsx("svg", { className: MultiSelectDropdown_module.default.chevron, width: constants.ICON_SIZE.MD, height: constants.ICON_SIZE.MD, viewBox: constants.SVG_VIEWBOX, fill: "none", stroke: "currentColor", strokeWidth: constants.SVG_STROKE_WIDTH, strokeLinecap: "round", strokeLinejoin: "round", children: /* @__PURE__ */ jsxRuntime.jsx("polyline", { points: "6 9 12 15 18 9" }) }),
135
137
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: MultiSelectDropdown_module.default.label, children: label }),
136
138
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: MultiSelectDropdown_module.default.valueGroup, children: [
137
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: MultiSelectDropdown_module.default.value, children: customTriggerLabel || getSelectedLabel() }),
138
- isActiveFilter && /* @__PURE__ */ jsxRuntime.jsx("span", { className: MultiSelectDropdown_module.default.badge, children: selectedCountValue }),
139
+ triggerSummary === "text" && /* @__PURE__ */ jsxRuntime.jsx("span", { className: MultiSelectDropdown_module.default.value, children: customTriggerLabel || getSelectedLabel() }),
140
+ (triggerSummary === "count" ? selectedSize > 0 : isActiveFilter) && /* @__PURE__ */ jsxRuntime.jsx("span", { className: MultiSelectDropdown_module.default.badge, children: selectedCountValue }),
139
141
  isActiveFilter && /* @__PURE__ */ jsxRuntime.jsx(
140
142
  "div",
141
143
  {
@@ -1 +1 @@
1
- {"version":3,"file":"index29.cjs","sources":["../src/composites/MultiSelectDropdown/MultiSelectDropdown.tsx"],"sourcesContent":["import { useState, useRef, useEffect, useMemo, useCallback } from 'react';\nimport clsx from 'clsx';\nimport { useClickOutside } from '../../hooks/useClickOutside';\nimport { ICON_SIZE, SVG_VIEWBOX, SVG_STROKE_WIDTH } from '../../constants';\nimport styles from './MultiSelectDropdown.module.css';\n\nexport interface MultiSelectOption {\n value: string;\n label?: string;\n count?: number;\n}\n\nexport interface MultiSelectDropdownProps {\n /** Label displayed on the trigger button. */\n label: string;\n /** Available options. */\n options: MultiSelectOption[];\n /** Currently selected values (controlled). */\n selected: string[];\n /** Called when the user applies a new selection. */\n onApply: (values: string[], metadata: { selectionMode: 'all' | 'custom' }) => void;\n /** Show loading indicator and disable controls. */\n isLoading?: boolean;\n /** Error message to display in the option list. */\n error?: string | null;\n /** Allow creating options from the search term. */\n allowCustomValues?: boolean;\n /** Override the trigger value label. */\n customTriggerLabel?: string;\n /** Explicit selection mode override. */\n selectionMode?: 'all' | 'custom';\n}\n\nconst arraysMatch = (a: string[], b: string[]): boolean => {\n if (a.length !== b.length) return false;\n const set = new Set(b);\n return a.every((v) => set.has(v));\n};\n\nexport const MultiSelectDropdown = ({\n label,\n options,\n selected,\n onApply,\n isLoading = false,\n error = null,\n allowCustomValues = false,\n customTriggerLabel,\n selectionMode,\n}: MultiSelectDropdownProps) => {\n const [isOpen, setIsOpen] = useState(false);\n const [searchTerm, setSearchTerm] = useState('');\n const containerRef = useRef<HTMLDivElement>(null);\n\n const normalizedOptions = useMemo<MultiSelectOption[]>(() => {\n const map = new Map<string, MultiSelectOption>();\n options.forEach((opt) => map.set(opt.value, opt));\n if (Array.isArray(selected)) {\n selected.forEach((v) => {\n if (v && !map.has(v)) map.set(v, { value: v });\n });\n }\n return Array.from(map.values());\n }, [options, selected]);\n\n const filteredOptions = useMemo<MultiSelectOption[]>(() => {\n if (!searchTerm.trim()) return normalizedOptions;\n const term = searchTerm.trim().toLowerCase();\n return normalizedOptions.filter((opt) => {\n const lbl = opt.label ?? opt.value;\n return lbl.toLowerCase().includes(term) || opt.value.toLowerCase().includes(term);\n });\n }, [normalizedOptions, searchTerm]);\n\n const allOptionValues = useMemo(() => normalizedOptions.map((o) => o.value), [normalizedOptions]);\n\n const initialSelection = useMemo(\n () => (Array.isArray(selected) && selected.length ? Array.from(new Set(selected)) : allOptionValues),\n [selected, allOptionValues],\n );\n\n const [pendingSelection, setPendingSelection] = useState<string[]>(initialSelection);\n\n const closeAndReset = useCallback(() => {\n setIsOpen(false);\n setPendingSelection(initialSelection);\n setSearchTerm('');\n }, [initialSelection]);\n\n useClickOutside(containerRef, closeAndReset);\n\n useEffect(() => {\n if (isOpen) {\n setPendingSelection(initialSelection);\n setSearchTerm('');\n }\n }, [isOpen, initialSelection]);\n\n useEffect(() => {\n if (!isOpen) setPendingSelection(initialSelection);\n }, [initialSelection, isOpen]);\n\n const handleToggleOption = (value: string) => {\n setPendingSelection((prev) => {\n const unique = Array.from(new Set(prev));\n return unique.includes(value) ? unique.filter((v) => v !== value) : [...unique, value];\n });\n };\n\n const handleSelectAll = () => {\n if (filteredOptions.length === 0) {\n setPendingSelection([]);\n return;\n }\n setPendingSelection(filteredOptions.map((o) => o.value));\n };\n\n const handleClearAll = () => setPendingSelection([]);\n\n const handleApply = () => {\n const unique = Array.from(new Set(pendingSelection));\n const mode: 'all' | 'custom' =\n unique.length === 0 || unique.length === normalizedOptions.length ? 'all' : 'custom';\n onApply(unique, { selectionMode: mode });\n setIsOpen(false);\n };\n\n const handleCancel = () => {\n setPendingSelection(Array.from(new Set(Array.isArray(selected) ? selected : [])));\n setIsOpen(false);\n };\n\n const pendingSet = useMemo(() => new Set(pendingSelection), [pendingSelection]);\n const selectedSet = useMemo(() => new Set(Array.isArray(selected) ? selected : []), [selected]);\n const hasChanges = !arraysMatch(Array.from(pendingSet), Array.from(selectedSet));\n\n const totalOptions = normalizedOptions.length;\n const selectedSize = selectedSet.size;\n const pendingSize = pendingSet.size;\n const isSelectedAll = selectedSize === 0 || selectedSize === totalOptions;\n const isPendingAll = pendingSize === 0 || pendingSize === totalOptions;\n const selectedCountValue = isSelectedAll ? totalOptions : selectedSize;\n const pendingCountValue = isPendingAll ? totalOptions : pendingSize;\n\n const isActiveFilter = selectionMode !== undefined ? selectionMode === 'custom' : !isSelectedAll;\n\n const getSelectedLabel = (): string => {\n if (isSelectedAll) return 'All';\n if (selectedSize === 1) {\n const val = Array.from(selectedSet)[0];\n const opt = normalizedOptions.find((o) => o.value === val);\n return opt?.label || opt?.value || String(selectedCountValue);\n }\n return String(selectedCountValue);\n };\n\n const shouldDisableControls = isLoading || options.length === 0;\n\n const normalizedSearch = searchTerm.trim();\n const canCreateCustom =\n allowCustomValues &&\n normalizedSearch.length > 0 &&\n !normalizedOptions.some((o) => o.value.toLowerCase() === normalizedSearch.toLowerCase());\n\n const handleCreateCustom = () => {\n if (!normalizedSearch) return;\n setPendingSelection((prev) => Array.from(new Set([...prev, normalizedSearch])));\n setSearchTerm('');\n };\n\n const handleClearFilter = (e: React.MouseEvent) => {\n e.preventDefault();\n e.stopPropagation();\n onApply([], { selectionMode: 'all' });\n };\n\n return (\n <div className={styles.root} ref={containerRef}>\n <button\n type=\"button\"\n className={clsx(styles.trigger, { [styles.active]: isOpen })}\n onClick={() => setIsOpen((prev) => !prev)}\n aria-expanded={isOpen}\n aria-haspopup=\"listbox\"\n >\n <div className={styles.triggerContent}>\n <svg className={styles.chevron} width={ICON_SIZE.MD} height={ICON_SIZE.MD} viewBox={SVG_VIEWBOX} fill=\"none\" stroke=\"currentColor\" strokeWidth={SVG_STROKE_WIDTH} strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <polyline points=\"6 9 12 15 18 9\" />\n </svg>\n <span className={styles.label}>{label}</span>\n <div className={styles.valueGroup}>\n <span className={styles.value}>{customTriggerLabel || getSelectedLabel()}</span>\n {isActiveFilter && (\n <span className={styles.badge}>{selectedCountValue}</span>\n )}\n {isActiveFilter && (\n <div\n role=\"button\"\n tabIndex={0}\n className={styles.clear}\n onClick={handleClearFilter}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n handleClearFilter(e as unknown as React.MouseEvent);\n }\n }}\n aria-label={`Clear ${label} filter`}\n >\n <svg width={ICON_SIZE.SM} height={ICON_SIZE.SM} viewBox={SVG_VIEWBOX} fill=\"none\" stroke=\"currentColor\" strokeWidth={SVG_STROKE_WIDTH} strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\" />\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\" />\n </svg>\n </div>\n )}\n </div>\n </div>\n </button>\n\n {isOpen && (\n <div className={styles.panel} role=\"dialog\" aria-label={`${label} filter`}>\n <div className={styles.header}>\n <input\n type=\"search\"\n className={styles.search}\n placeholder={`Search ${label.toLowerCase()}`}\n value={searchTerm}\n onChange={(e) => setSearchTerm(e.target.value)}\n disabled={shouldDisableControls}\n />\n <div className={styles.headerActions}>\n <button type=\"button\" className={styles.chip} onClick={handleSelectAll} disabled={shouldDisableControls}>\n Select all\n </button>\n <button type=\"button\" className={clsx(styles.chip, styles.chipGhost)} onClick={handleClearAll} disabled={pendingSize === 0}>\n Deselect all\n </button>\n </div>\n </div>\n\n <div className={styles.list} role=\"listbox\">\n {isLoading && <p className={styles.status}>Loading options...</p>}\n {!isLoading && error && <p className={clsx(styles.status, styles.statusError)}>{error}</p>}\n {!isLoading && !error && filteredOptions.length === 0 && (\n <p className={styles.status}>No matches</p>\n )}\n {!isLoading &&\n !error &&\n filteredOptions.map((opt) => {\n const checked = pendingSet.has(opt.value);\n return (\n <label key={opt.value} className={styles.option}>\n <input\n type=\"checkbox\"\n checked={checked}\n onChange={() => handleToggleOption(opt.value)}\n aria-checked={checked}\n />\n <span className={styles.optionLabel}>\n {opt.label ?? opt.value}\n {opt.count !== undefined && (\n <span className={styles.optionCount}>{opt.count}</span>\n )}\n </span>\n </label>\n );\n })}\n {!isLoading && !error && canCreateCustom && (\n <button type=\"button\" className={styles.create} onClick={handleCreateCustom}>\n Use &quot;{normalizedSearch}&quot;\n </button>\n )}\n </div>\n\n <div className={styles.footer}>\n <span className={styles.selection}>\n {isPendingAll ? 'All selected' : `${pendingCountValue} selected`}\n {hasChanges && (\n <span className={styles.selectionDelta}>\n ({pendingCountValue - selectedCountValue >= 0 ? '+' : ''}\n {pendingCountValue - selectedCountValue})\n </span>\n )}\n </span>\n <div className={styles.footerActions}>\n <button type=\"button\" className={clsx(styles.chip, styles.chipGhost)} onClick={handleCancel}>\n Cancel\n </button>\n <button type=\"button\" className={styles.chip} onClick={handleApply} disabled={!hasChanges}>\n Apply\n </button>\n </div>\n </div>\n </div>\n )}\n </div>\n );\n};\n"],"names":["useState","useRef","useMemo","useCallback","useClickOutside","useEffect","styles","jsx","clsx","jsxs","ICON_SIZE","SVG_VIEWBOX","SVG_STROKE_WIDTH"],"mappings":"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"}
1
+ {"version":3,"file":"index29.cjs","sources":["../src/composites/MultiSelectDropdown/MultiSelectDropdown.tsx"],"sourcesContent":["import { useState, useRef, useEffect, useMemo, useCallback } from 'react';\nimport clsx from 'clsx';\nimport { useClickOutside } from '../../hooks/useClickOutside';\nimport { ICON_SIZE, SVG_VIEWBOX, SVG_STROKE_WIDTH } from '../../constants';\nimport styles from './MultiSelectDropdown.module.css';\n\nexport interface MultiSelectOption {\n value: string;\n label?: string;\n count?: number;\n}\n\nexport interface MultiSelectDropdownProps {\n /** Label displayed on the trigger button. */\n label: string;\n /** Available options. */\n options: MultiSelectOption[];\n /** Currently selected values (controlled). */\n selected: string[];\n /** Called when the user applies a new selection. */\n onApply: (values: string[], metadata: { selectionMode: 'all' | 'custom' }) => void;\n /** Show loading indicator and disable controls. */\n isLoading?: boolean;\n /** Error message to display in the option list. */\n error?: string | null;\n /** Allow creating options from the search term. */\n allowCustomValues?: boolean;\n /** Override the trigger value label. */\n customTriggerLabel?: string;\n /** Explicit selection mode override. */\n selectionMode?: 'all' | 'custom';\n /** Treat an empty `selected` array as \"all selected\" (opt-in, legacy behavior). */\n emptyMeansAll?: boolean;\n /** What the trigger shows as a summary: the value label ('text') or just the count badge ('count'). */\n triggerSummary?: 'text' | 'count';\n}\n\nconst arraysMatch = (a: string[], b: string[]): boolean => {\n if (a.length !== b.length) return false;\n const set = new Set(b);\n return a.every((v) => set.has(v));\n};\n\nexport const MultiSelectDropdown = ({\n label,\n options,\n selected,\n onApply,\n isLoading = false,\n error = null,\n allowCustomValues = false,\n customTriggerLabel,\n selectionMode,\n emptyMeansAll = false,\n triggerSummary = 'text',\n}: MultiSelectDropdownProps) => {\n const [isOpen, setIsOpen] = useState(false);\n const [searchTerm, setSearchTerm] = useState('');\n const containerRef = useRef<HTMLDivElement>(null);\n\n const normalizedOptions = useMemo<MultiSelectOption[]>(() => {\n const map = new Map<string, MultiSelectOption>();\n options.forEach((opt) => map.set(opt.value, opt));\n if (Array.isArray(selected)) {\n selected.forEach((v) => {\n if (v && !map.has(v)) map.set(v, { value: v });\n });\n }\n return Array.from(map.values());\n }, [options, selected]);\n\n const filteredOptions = useMemo<MultiSelectOption[]>(() => {\n if (!searchTerm.trim()) return normalizedOptions;\n const term = searchTerm.trim().toLowerCase();\n return normalizedOptions.filter((opt) => {\n const lbl = opt.label ?? opt.value;\n return lbl.toLowerCase().includes(term) || opt.value.toLowerCase().includes(term);\n });\n }, [normalizedOptions, searchTerm]);\n\n const allOptionValues = useMemo(() => normalizedOptions.map((o) => o.value), [normalizedOptions]);\n\n const initialSelection = useMemo(() => {\n if (Array.isArray(selected) && selected.length) return Array.from(new Set(selected));\n return emptyMeansAll ? allOptionValues : [];\n }, [selected, allOptionValues, emptyMeansAll]);\n\n const [pendingSelection, setPendingSelection] = useState<string[]>(initialSelection);\n\n const closeAndReset = useCallback(() => {\n setIsOpen(false);\n setPendingSelection(initialSelection);\n setSearchTerm('');\n }, [initialSelection]);\n\n useClickOutside(containerRef, closeAndReset);\n\n useEffect(() => {\n if (isOpen) {\n setPendingSelection(initialSelection);\n setSearchTerm('');\n }\n }, [isOpen, initialSelection]);\n\n useEffect(() => {\n if (!isOpen) setPendingSelection(initialSelection);\n }, [initialSelection, isOpen]);\n\n const handleToggleOption = (value: string) => {\n setPendingSelection((prev) => {\n const unique = Array.from(new Set(prev));\n return unique.includes(value) ? unique.filter((v) => v !== value) : [...unique, value];\n });\n };\n\n const handleSelectAll = () => {\n if (filteredOptions.length === 0) {\n setPendingSelection([]);\n return;\n }\n setPendingSelection(filteredOptions.map((o) => o.value));\n };\n\n const handleClearAll = () => setPendingSelection([]);\n\n const handleApply = () => {\n const unique = Array.from(new Set(pendingSelection));\n const mode: 'all' | 'custom' =\n unique.length === 0 || unique.length === normalizedOptions.length ? 'all' : 'custom';\n onApply(unique, { selectionMode: mode });\n setIsOpen(false);\n };\n\n const handleCancel = () => {\n setPendingSelection(Array.from(new Set(Array.isArray(selected) ? selected : [])));\n setIsOpen(false);\n };\n\n const pendingSet = useMemo(() => new Set(pendingSelection), [pendingSelection]);\n const selectedSet = useMemo(() => new Set(Array.isArray(selected) ? selected : []), [selected]);\n const hasChanges = !arraysMatch(Array.from(pendingSet), Array.from(selectedSet));\n\n const totalOptions = normalizedOptions.length;\n const selectedSize = selectedSet.size;\n const pendingSize = pendingSet.size;\n const isSelectedAll = selectedSize === 0 || selectedSize === totalOptions;\n const isPendingAll = pendingSize === 0 || pendingSize === totalOptions;\n const selectedCountValue = isSelectedAll ? totalOptions : selectedSize;\n const pendingCountValue = isPendingAll ? totalOptions : pendingSize;\n\n const isActiveFilter = selectionMode !== undefined ? selectionMode === 'custom' : !isSelectedAll;\n\n const getSelectedLabel = (): string => {\n if (isSelectedAll) return 'All';\n if (selectedSize === 1) {\n const val = Array.from(selectedSet)[0];\n const opt = normalizedOptions.find((o) => o.value === val);\n return opt?.label || opt?.value || String(selectedCountValue);\n }\n return String(selectedCountValue);\n };\n\n const shouldDisableControls = isLoading || options.length === 0;\n\n const normalizedSearch = searchTerm.trim();\n const canCreateCustom =\n allowCustomValues &&\n normalizedSearch.length > 0 &&\n !normalizedOptions.some((o) => o.value.toLowerCase() === normalizedSearch.toLowerCase());\n\n const handleCreateCustom = () => {\n if (!normalizedSearch) return;\n setPendingSelection((prev) => Array.from(new Set([...prev, normalizedSearch])));\n setSearchTerm('');\n };\n\n const handleClearFilter = (e: React.MouseEvent) => {\n e.preventDefault();\n e.stopPropagation();\n onApply([], { selectionMode: 'all' });\n };\n\n return (\n <div className={styles.root} ref={containerRef}>\n <button\n type=\"button\"\n className={clsx(styles.trigger, { [styles.active]: isOpen })}\n onClick={() => setIsOpen((prev) => !prev)}\n aria-expanded={isOpen}\n aria-haspopup=\"listbox\"\n >\n <div className={styles.triggerContent}>\n <svg className={styles.chevron} width={ICON_SIZE.MD} height={ICON_SIZE.MD} viewBox={SVG_VIEWBOX} fill=\"none\" stroke=\"currentColor\" strokeWidth={SVG_STROKE_WIDTH} strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <polyline points=\"6 9 12 15 18 9\" />\n </svg>\n <span className={styles.label}>{label}</span>\n <div className={styles.valueGroup}>\n {triggerSummary === 'text' && (\n <span className={styles.value}>{customTriggerLabel || getSelectedLabel()}</span>\n )}\n {(triggerSummary === 'count' ? selectedSize > 0 : isActiveFilter) && (\n <span className={styles.badge}>{selectedCountValue}</span>\n )}\n {isActiveFilter && (\n <div\n role=\"button\"\n tabIndex={0}\n className={styles.clear}\n onClick={handleClearFilter}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n handleClearFilter(e as unknown as React.MouseEvent);\n }\n }}\n aria-label={`Clear ${label} filter`}\n >\n <svg width={ICON_SIZE.SM} height={ICON_SIZE.SM} viewBox={SVG_VIEWBOX} fill=\"none\" stroke=\"currentColor\" strokeWidth={SVG_STROKE_WIDTH} strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\" />\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\" />\n </svg>\n </div>\n )}\n </div>\n </div>\n </button>\n\n {isOpen && (\n <div className={styles.panel} role=\"dialog\" aria-label={`${label} filter`}>\n <div className={styles.header}>\n <input\n type=\"search\"\n className={styles.search}\n placeholder={`Search ${label.toLowerCase()}`}\n value={searchTerm}\n onChange={(e) => setSearchTerm(e.target.value)}\n disabled={shouldDisableControls}\n />\n <div className={styles.headerActions}>\n <button type=\"button\" className={styles.chip} onClick={handleSelectAll} disabled={shouldDisableControls}>\n Select all\n </button>\n <button type=\"button\" className={clsx(styles.chip, styles.chipGhost)} onClick={handleClearAll} disabled={pendingSize === 0}>\n Deselect all\n </button>\n </div>\n </div>\n\n <div className={styles.list} role=\"listbox\">\n {isLoading && <p className={styles.status}>Loading options...</p>}\n {!isLoading && error && <p className={clsx(styles.status, styles.statusError)}>{error}</p>}\n {!isLoading && !error && filteredOptions.length === 0 && (\n <p className={styles.status}>No matches</p>\n )}\n {!isLoading &&\n !error &&\n filteredOptions.map((opt) => {\n const checked = pendingSet.has(opt.value);\n return (\n <label key={opt.value} className={styles.option}>\n <input\n type=\"checkbox\"\n checked={checked}\n onChange={() => handleToggleOption(opt.value)}\n aria-checked={checked}\n />\n <span className={styles.optionLabel}>\n {opt.label ?? opt.value}\n {opt.count !== undefined && (\n <span className={styles.optionCount}>{opt.count}</span>\n )}\n </span>\n </label>\n );\n })}\n {!isLoading && !error && canCreateCustom && (\n <button type=\"button\" className={styles.create} onClick={handleCreateCustom}>\n Use &quot;{normalizedSearch}&quot;\n </button>\n )}\n </div>\n\n <div className={styles.footer}>\n <span className={styles.selection}>\n {isPendingAll ? 'All selected' : `${pendingCountValue} selected`}\n {hasChanges && (\n <span className={styles.selectionDelta}>\n ({pendingCountValue - selectedCountValue >= 0 ? '+' : ''}\n {pendingCountValue - selectedCountValue})\n </span>\n )}\n </span>\n <div className={styles.footerActions}>\n <button type=\"button\" className={clsx(styles.chip, styles.chipGhost)} onClick={handleCancel}>\n Cancel\n </button>\n <button type=\"button\" className={styles.chip} onClick={handleApply} disabled={!hasChanges}>\n Apply\n </button>\n </div>\n </div>\n </div>\n )}\n </div>\n );\n};\n"],"names":["useState","useRef","useMemo","useCallback","useClickOutside","useEffect","styles","jsx","clsx","jsxs","ICON_SIZE","SVG_VIEWBOX","SVG_STROKE_WIDTH"],"mappings":"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"}