@hitachivantara/uikit-react-core 5.39.4 → 5.40.1

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 (58) hide show
  1. package/dist/cjs/AvatarGroup/AvatarGroup.cjs +103 -0
  2. package/dist/cjs/AvatarGroup/AvatarGroup.cjs.map +1 -0
  3. package/dist/cjs/AvatarGroup/AvatarGroup.styles.cjs +24 -0
  4. package/dist/cjs/AvatarGroup/AvatarGroup.styles.cjs.map +1 -0
  5. package/dist/cjs/QueryBuilder/Context.cjs.map +1 -1
  6. package/dist/cjs/QueryBuilder/QueryBuilder.cjs +5 -2
  7. package/dist/cjs/QueryBuilder/QueryBuilder.cjs.map +1 -1
  8. package/dist/cjs/QueryBuilder/QueryBuilder.styles.cjs +4 -2
  9. package/dist/cjs/QueryBuilder/QueryBuilder.styles.cjs.map +1 -1
  10. package/dist/cjs/QueryBuilder/Rule/Operator/Operator.cjs +1 -1
  11. package/dist/cjs/QueryBuilder/Rule/Operator/Operator.cjs.map +1 -1
  12. package/dist/cjs/QueryBuilder/Rule/Rule.cjs +1 -2
  13. package/dist/cjs/QueryBuilder/Rule/Rule.cjs.map +1 -1
  14. package/dist/cjs/QueryBuilder/Rule/Rule.styles.cjs +1 -1
  15. package/dist/cjs/QueryBuilder/Rule/Rule.styles.cjs.map +1 -1
  16. package/dist/cjs/QueryBuilder/Rule/Value/EmptyValue/EmptyValue.cjs +17 -0
  17. package/dist/cjs/QueryBuilder/Rule/Value/EmptyValue/EmptyValue.cjs.map +1 -0
  18. package/dist/cjs/QueryBuilder/Rule/Value/Value.cjs +29 -19
  19. package/dist/cjs/QueryBuilder/Rule/Value/Value.cjs.map +1 -1
  20. package/dist/cjs/QueryBuilder/RuleGroup/RuleGroup.cjs +2 -0
  21. package/dist/cjs/QueryBuilder/RuleGroup/RuleGroup.cjs.map +1 -1
  22. package/dist/cjs/QueryBuilder/types.cjs +5 -0
  23. package/dist/cjs/QueryBuilder/types.cjs.map +1 -0
  24. package/dist/cjs/TimePicker/TimePicker.cjs.map +1 -1
  25. package/dist/cjs/Typography/Typography.cjs +2 -1
  26. package/dist/cjs/Typography/Typography.cjs.map +1 -1
  27. package/dist/cjs/index.cjs +4 -0
  28. package/dist/cjs/index.cjs.map +1 -1
  29. package/dist/esm/AvatarGroup/AvatarGroup.js +104 -0
  30. package/dist/esm/AvatarGroup/AvatarGroup.js.map +1 -0
  31. package/dist/esm/AvatarGroup/AvatarGroup.styles.js +24 -0
  32. package/dist/esm/AvatarGroup/AvatarGroup.styles.js.map +1 -0
  33. package/dist/esm/QueryBuilder/Context.js.map +1 -1
  34. package/dist/esm/QueryBuilder/QueryBuilder.js +5 -2
  35. package/dist/esm/QueryBuilder/QueryBuilder.js.map +1 -1
  36. package/dist/esm/QueryBuilder/QueryBuilder.styles.js +4 -2
  37. package/dist/esm/QueryBuilder/QueryBuilder.styles.js.map +1 -1
  38. package/dist/esm/QueryBuilder/Rule/Operator/Operator.js +1 -1
  39. package/dist/esm/QueryBuilder/Rule/Operator/Operator.js.map +1 -1
  40. package/dist/esm/QueryBuilder/Rule/Rule.js +1 -2
  41. package/dist/esm/QueryBuilder/Rule/Rule.js.map +1 -1
  42. package/dist/esm/QueryBuilder/Rule/Rule.styles.js +1 -1
  43. package/dist/esm/QueryBuilder/Rule/Rule.styles.js.map +1 -1
  44. package/dist/esm/QueryBuilder/Rule/Value/EmptyValue/EmptyValue.js +17 -0
  45. package/dist/esm/QueryBuilder/Rule/Value/EmptyValue/EmptyValue.js.map +1 -0
  46. package/dist/esm/QueryBuilder/Rule/Value/Value.js +29 -19
  47. package/dist/esm/QueryBuilder/Rule/Value/Value.js.map +1 -1
  48. package/dist/esm/QueryBuilder/RuleGroup/RuleGroup.js +2 -0
  49. package/dist/esm/QueryBuilder/RuleGroup/RuleGroup.js.map +1 -1
  50. package/dist/esm/QueryBuilder/types.js +5 -0
  51. package/dist/esm/QueryBuilder/types.js.map +1 -0
  52. package/dist/esm/TimePicker/TimePicker.js.map +1 -1
  53. package/dist/esm/Typography/Typography.js +2 -1
  54. package/dist/esm/Typography/Typography.js.map +1 -1
  55. package/dist/esm/index.js +194 -190
  56. package/dist/esm/index.js.map +1 -1
  57. package/dist/types/index.d.ts +388 -322
  58. package/package.json +2 -2
@@ -0,0 +1,103 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const jsxRuntime = require("@emotion/react/jsx-runtime");
4
+ const React = require("react");
5
+ const css = require("@emotion/css");
6
+ const uikitStyles = require("@hitachivantara/uikit-styles");
7
+ const useDefaultProps = require("../hooks/useDefaultProps.cjs");
8
+ const AvatarGroup_styles = require("./AvatarGroup.styles.cjs");
9
+ const Avatar = require("../Avatar/Avatar.cjs");
10
+ const getSpacingValue = (spacing, size) => {
11
+ switch (size) {
12
+ case "xs":
13
+ return spacing === "compact" ? 24 : 16;
14
+ case "sm":
15
+ return spacing === "compact" ? 30 : 18;
16
+ case "md":
17
+ return spacing === "compact" ? 36 : 20;
18
+ case "lg":
19
+ return spacing === "compact" ? 44 : 24;
20
+ case "xl":
21
+ return spacing === "compact" ? 72 : 34;
22
+ default:
23
+ return spacing === "compact" ? 30 : 18;
24
+ }
25
+ };
26
+ const HvAvatarGroup = React.forwardRef(
27
+ (props, ref) => {
28
+ const {
29
+ className,
30
+ classes: classesProp,
31
+ children,
32
+ size = "sm",
33
+ spacing = "loose",
34
+ direction = "row",
35
+ toBack = true,
36
+ maxVisible = 3,
37
+ overflowComponent,
38
+ ...others
39
+ } = useDefaultProps.useDefaultProps("HvAvatarGroup", props);
40
+ const { classes, cx } = AvatarGroup_styles.useClasses(classesProp);
41
+ const spacingValue = getSpacingValue(spacing, size);
42
+ const totalChildren = React.Children.count(children);
43
+ const zIndexMultiplier = toBack ? -1 : 1;
44
+ const willOverflow = totalChildren > maxVisible;
45
+ return /* @__PURE__ */ jsxRuntime.jsxs(
46
+ "div",
47
+ {
48
+ className: cx(classes.root, classes[direction], className),
49
+ ref,
50
+ ...others,
51
+ children: [
52
+ React.Children.map(children, (child, index) => {
53
+ if (index < maxVisible) {
54
+ return React.cloneElement(child, {
55
+ style: {
56
+ zIndex: 100 + index * zIndexMultiplier
57
+ },
58
+ classes: {
59
+ container: css.css({
60
+ marginLeft: direction === "row" ? index !== 0 ? -spacingValue : 0 : 0,
61
+ marginTop: direction === "column" ? index !== 0 ? -spacingValue : 0 : 0
62
+ })
63
+ },
64
+ size
65
+ });
66
+ }
67
+ }),
68
+ willOverflow && /* @__PURE__ */ jsxRuntime.jsx(
69
+ "div",
70
+ {
71
+ style: {
72
+ marginLeft: direction === "row" ? -spacingValue : 0,
73
+ marginTop: direction === "column" ? -spacingValue : 0,
74
+ zIndex: 100 + maxVisible * zIndexMultiplier
75
+ },
76
+ children: overflowComponent ? overflowComponent(totalChildren - maxVisible) : /* @__PURE__ */ jsxRuntime.jsxs(
77
+ Avatar.HvAvatar,
78
+ {
79
+ size,
80
+ backgroundColor: uikitStyles.theme.colors.atmo4,
81
+ classes: {
82
+ avatar: css.css({
83
+ [`&.HvAvatar-${size}`]: {
84
+ fontSize: "unset"
85
+ }
86
+ })
87
+ },
88
+ children: [
89
+ "+",
90
+ totalChildren - maxVisible
91
+ ]
92
+ }
93
+ )
94
+ }
95
+ )
96
+ ]
97
+ }
98
+ );
99
+ }
100
+ );
101
+ exports.avatarGroupClasses = AvatarGroup_styles.staticClasses;
102
+ exports.HvAvatarGroup = HvAvatarGroup;
103
+ //# sourceMappingURL=AvatarGroup.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AvatarGroup.cjs","sources":["../../../src/AvatarGroup/AvatarGroup.tsx"],"sourcesContent":["import { Children, cloneElement, forwardRef } from \"react\";\n\nimport { css } from \"@emotion/css\";\n\nimport { HvSize, theme } from \"@hitachivantara/uikit-styles\";\n\nimport { useDefaultProps } from \"../hooks/useDefaultProps\";\n\nimport { HvBaseProps } from \"../types/generic\";\n\nimport { ExtractNames } from \"../utils/classes\";\n\nimport { staticClasses, useClasses } from \"./AvatarGroup.styles\";\n\nimport { HvAvatar } from \"../Avatar/Avatar\";\n\nexport { staticClasses as avatarGroupClasses };\n\nexport type HvAvatarGroupClasses = ExtractNames<typeof useClasses>;\n\nexport interface HvAvatarGroupProps extends HvBaseProps {\n /** A Jss Object used to override or extend the styles applied to the component. */\n classes?: HvAvatarGroupClasses;\n /** The avatar size. */\n size?: HvSize;\n /** The spacing between avatars. */\n spacing?: \"compact\" | \"loose\";\n /** The direction of the group. */\n direction?: \"row\" | \"column\";\n /** Whether the avatars display behind the previous avatar or on top. */\n toBack?: boolean;\n /**\n * The maximum number of visible avatars. If there are more avatars then the value of this property, an added avatar will\n * be added to the end of the list, indicating the number of hidden avatars.\n */\n maxVisible?: number;\n /**\n * What to show as an overflow representation.\n * If `undefined` a default `HvAvatar` will be displayed along with a HvTooltip with the count of overflowing items.\n * */\n overflowComponent?: (overflowCount: number) => React.ReactNode;\n}\n\nconst getSpacingValue = (\n spacing: HvAvatarGroupProps[\"spacing\"],\n size: HvAvatarGroupProps[\"size\"]\n) => {\n switch (size) {\n case \"xs\":\n return spacing === \"compact\" ? 24 : 16;\n case \"sm\":\n return spacing === \"compact\" ? 30 : 18;\n case \"md\":\n return spacing === \"compact\" ? 36 : 20;\n case \"lg\":\n return spacing === \"compact\" ? 44 : 24;\n case \"xl\":\n return spacing === \"compact\" ? 72 : 34;\n default:\n return spacing === \"compact\" ? 30 : 18;\n }\n};\n\n/**\n * The AvatarGroup component is used to group multiple avatars.\n */\nexport const HvAvatarGroup = forwardRef<HTMLDivElement, HvAvatarGroupProps>(\n (props, ref) => {\n const {\n className,\n classes: classesProp,\n children,\n size = \"sm\",\n spacing = \"loose\",\n direction = \"row\",\n toBack = true,\n maxVisible = 3,\n overflowComponent,\n ...others\n } = useDefaultProps(\"HvAvatarGroup\", props);\n const { classes, cx } = useClasses(classesProp);\n\n const spacingValue = getSpacingValue(spacing, size);\n\n const totalChildren = Children.count(children);\n const zIndexMultiplier = toBack ? -1 : 1;\n const willOverflow = totalChildren > maxVisible;\n\n return (\n <div\n className={cx(classes.root, classes[direction], className)}\n ref={ref}\n {...others}\n >\n {Children.map(children, (child: any, index: number) => {\n if (index < maxVisible) {\n return cloneElement(child, {\n style: {\n zIndex: 100 + index * zIndexMultiplier,\n },\n classes: {\n container: css({\n marginLeft:\n direction === \"row\" ? (index !== 0 ? -spacingValue : 0) : 0,\n marginTop:\n direction === \"column\"\n ? index !== 0\n ? -spacingValue\n : 0\n : 0,\n }),\n },\n size,\n });\n }\n })}\n {willOverflow && (\n <div\n style={{\n marginLeft: direction === \"row\" ? -spacingValue : 0,\n marginTop: direction === \"column\" ? -spacingValue : 0,\n zIndex: 100 + maxVisible * zIndexMultiplier,\n }}\n >\n {overflowComponent ? (\n overflowComponent(totalChildren - maxVisible)\n ) : (\n <HvAvatar\n size={size}\n backgroundColor={theme.colors.atmo4}\n classes={{\n avatar: css({\n [`&.HvAvatar-${size}`]: {\n fontSize: \"unset\",\n },\n }),\n }}\n >\n +{totalChildren - maxVisible}\n </HvAvatar>\n )}\n </div>\n )}\n </div>\n );\n }\n);\n"],"names":["forwardRef","useDefaultProps","useClasses","Children","jsxs","cloneElement","css","jsx","HvAvatar","theme"],"mappings":";;;;;;;;;AA2CA,MAAM,kBAAkB,CACtB,SACA,SACG;AACH,UAAQ,MAAM;AAAA,IACZ,KAAK;AACI,aAAA,YAAY,YAAY,KAAK;AAAA,IACtC,KAAK;AACI,aAAA,YAAY,YAAY,KAAK;AAAA,IACtC,KAAK;AACI,aAAA,YAAY,YAAY,KAAK;AAAA,IACtC,KAAK;AACI,aAAA,YAAY,YAAY,KAAK;AAAA,IACtC,KAAK;AACI,aAAA,YAAY,YAAY,KAAK;AAAA,IACtC;AACS,aAAA,YAAY,YAAY,KAAK;AAAA,EACxC;AACF;AAKO,MAAM,gBAAgBA,MAAA;AAAA,EAC3B,CAAC,OAAO,QAAQ;AACR,UAAA;AAAA,MACJ;AAAA,MACA,SAAS;AAAA,MACT;AAAA,MACA,OAAO;AAAA,MACP,UAAU;AAAA,MACV,YAAY;AAAA,MACZ,SAAS;AAAA,MACT,aAAa;AAAA,MACb;AAAA,MACA,GAAG;AAAA,IAAA,IACDC,gBAAgB,gBAAA,iBAAiB,KAAK;AAC1C,UAAM,EAAE,SAAS,GAAG,IAAIC,8BAAW,WAAW;AAExC,UAAA,eAAe,gBAAgB,SAAS,IAAI;AAE5C,UAAA,gBAAgBC,MAAAA,SAAS,MAAM,QAAQ;AACvC,UAAA,mBAAmB,SAAS,KAAK;AACvC,UAAM,eAAe,gBAAgB;AAGnC,WAAAC,2BAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAW,GAAG,QAAQ,MAAM,QAAQ,SAAS,GAAG,SAAS;AAAA,QACzD;AAAA,QACC,GAAG;AAAA,QAEH,UAAA;AAAA,UAAAD,MAAAA,SAAS,IAAI,UAAU,CAAC,OAAY,UAAkB;AACrD,gBAAI,QAAQ,YAAY;AACtB,qBAAOE,MAAAA,aAAa,OAAO;AAAA,gBACzB,OAAO;AAAA,kBACL,QAAQ,MAAM,QAAQ;AAAA,gBACxB;AAAA,gBACA,SAAS;AAAA,kBACP,WAAWC,IAAAA,IAAI;AAAA,oBACb,YACE,cAAc,QAAS,UAAU,IAAI,CAAC,eAAe,IAAK;AAAA,oBAC5D,WACE,cAAc,WACV,UAAU,IACR,CAAC,eACD,IACF;AAAA,kBAAA,CACP;AAAA,gBACH;AAAA,gBACA;AAAA,cAAA,CACD;AAAA,YACH;AAAA,UAAA,CACD;AAAA,UACA,gBACCC,2BAAA;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,OAAO;AAAA,gBACL,YAAY,cAAc,QAAQ,CAAC,eAAe;AAAA,gBAClD,WAAW,cAAc,WAAW,CAAC,eAAe;AAAA,gBACpD,QAAQ,MAAM,aAAa;AAAA,cAC7B;AAAA,cAEC,UACC,oBAAA,kBAAkB,gBAAgB,UAAU,IAE5CH,2BAAA;AAAA,gBAACI,OAAA;AAAA,gBAAA;AAAA,kBACC;AAAA,kBACA,iBAAiBC,YAAAA,MAAM,OAAO;AAAA,kBAC9B,SAAS;AAAA,oBACP,QAAQH,IAAAA,IAAI;AAAA,sBACV,CAAC,cAAc,IAAI,EAAE,GAAG;AAAA,wBACtB,UAAU;AAAA,sBACZ;AAAA,oBAAA,CACD;AAAA,kBACH;AAAA,kBACD,UAAA;AAAA,oBAAA;AAAA,oBACG,gBAAgB;AAAA,kBAAA;AAAA,gBAAA;AAAA,cACpB;AAAA,YAAA;AAAA,UAEJ;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EAIR;AACF;;;"}
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const uikitStyles = require("@hitachivantara/uikit-styles");
4
+ const classes = require("../utils/classes.cjs");
5
+ require("../Avatar/Avatar.cjs");
6
+ const Avatar_styles = require("../Avatar/Avatar.styles.cjs");
7
+ const { staticClasses, useClasses } = classes.createClasses("HvAvatarGroup", {
8
+ root: {
9
+ display: "flex",
10
+ [`& .${Avatar_styles.staticClasses.root}`]: {
11
+ border: `2px solid ${uikitStyles.theme.colors.atmo2}`,
12
+ boxSizing: "content-box"
13
+ }
14
+ },
15
+ row: {
16
+ flexDirection: "row"
17
+ },
18
+ column: {
19
+ flexDirection: "column"
20
+ }
21
+ });
22
+ exports.staticClasses = staticClasses;
23
+ exports.useClasses = useClasses;
24
+ //# sourceMappingURL=AvatarGroup.styles.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AvatarGroup.styles.cjs","sources":["../../../src/AvatarGroup/AvatarGroup.styles.tsx"],"sourcesContent":["import { theme } from \"@hitachivantara/uikit-styles\";\n\nimport { createClasses } from \"../utils/classes\";\n\nimport { avatarClasses } from \"../Avatar/Avatar\";\n\nexport const { staticClasses, useClasses } = createClasses(\"HvAvatarGroup\", {\n root: {\n display: \"flex\",\n [`& .${avatarClasses.root}`]: {\n border: `2px solid ${theme.colors.atmo2}`,\n boxSizing: \"content-box\",\n },\n },\n row: {\n flexDirection: \"row\",\n },\n column: {\n flexDirection: \"column\",\n },\n});\n"],"names":["createClasses","avatarClasses","theme"],"mappings":";;;;;;AAMO,MAAM,EAAE,eAAe,eAAeA,QAAAA,cAAc,iBAAiB;AAAA,EAC1E,MAAM;AAAA,IACJ,SAAS;AAAA,IACT,CAAC,MAAMC,4BAAc,IAAI,EAAE,GAAG;AAAA,MAC5B,QAAQ,aAAaC,YAAM,MAAA,OAAO,KAAK;AAAA,MACvC,WAAW;AAAA,IACb;AAAA,EACF;AAAA,EACA,KAAK;AAAA,IACH,eAAe;AAAA,EACjB;AAAA,EACA,QAAQ;AAAA,IACN,eAAe;AAAA,EACjB;AACF,CAAC;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"Context.cjs","sources":["../../../src/QueryBuilder/Context.tsx"],"sourcesContent":["import { createContext, useContext } from \"react\";\n\nimport {\n AskAction,\n HvQueryBuilderAttribute,\n QueryAction,\n HvQueryBuilderLabels,\n HvQueryBuilderQueryCombinator,\n HvQueryBuilderQueryOperator,\n HvQueryBuilderRenderers,\n} from \"./types\";\n\nexport const defaultOperators = {\n numeric: [\n {\n operator: \"greaterThan\",\n label: \"Greater than (>)\",\n combinators: [\"and\"],\n },\n {\n operator: \"lessThan\",\n label: \"Less than (<)\",\n combinators: [\"and\"],\n },\n {\n operator: \"equalsTo\",\n label: \"Equal to (=)\",\n combinators: [\"and\", \"or\"],\n },\n {\n operator: \"greaterThanEq\",\n label: \"Greater than or equal to (>=)\",\n combinators: [\"and\"],\n },\n {\n operator: \"lessThanEq\",\n label: \"Less than or equal to (<=)\",\n combinators: [\"and\"],\n },\n {\n operator: \"notEqual\",\n label: \"Not equal to (!=)\",\n combinators: [\"and\"],\n },\n {\n operator: \"range\",\n label: \"Range\",\n combinators: [\"and\"],\n },\n ],\n text: [\n {\n operator: \"equals\",\n label: \"Equals\",\n combinators: [\"and\", \"or\"],\n },\n {\n operator: \"equalsIgnoreCase\",\n label: \"Equals Ignore Case\",\n combinators: [\"and\", \"or\"],\n },\n {\n operator: \"Contains\",\n label: \"Contains\",\n combinators: [\"and\", \"or\"],\n },\n {\n operator: \"StartsWith\",\n label: \"A string begins with\",\n combinators: [\"and\", \"or\"],\n },\n {\n operator: \"EndsWith\",\n label: \"A string ends with\",\n combinators: [\"and\", \"or\"],\n },\n {\n operator: \"IsNotEmpty\",\n label: \"Is Not empty\",\n combinators: [\"and\"],\n },\n {\n operator: \"IsNot\",\n label: \"Is Not\",\n combinators: [\"and\"],\n },\n {\n operator: \"Empty\",\n label: \"Empty\",\n combinators: [\"and\"],\n },\n ],\n textarea: [\n {\n operator: \"equals\",\n label: \"Equals\",\n combinators: [\"and\", \"or\"],\n },\n {\n operator: \"equalsIgnoreCase\",\n label: \"Equals Ignore Case\",\n combinators: [\"and\", \"or\"],\n },\n {\n operator: \"Contains\",\n label: \"Contains\",\n combinators: [\"and\", \"or\"],\n },\n {\n operator: \"StartsWith\",\n label: \"A string begins with\",\n combinators: [\"and\", \"or\"],\n },\n {\n operator: \"EndsWith\",\n label: \"A string ends with\",\n combinators: [\"and\", \"or\"],\n },\n {\n operator: \"IsNotEmpty\",\n label: \"Is Not empty\",\n combinators: [\"and\"],\n },\n {\n operator: \"IsNot\",\n label: \"Is Not\",\n combinators: [\"and\"],\n },\n {\n operator: \"Empty\",\n label: \"Empty\",\n combinators: [\"and\"],\n },\n ],\n boolean: [\n {\n operator: \"equalsTo\",\n label: \"=\",\n combinators: [\"and\", \"or\"],\n },\n ],\n dateandtime: [\n {\n operator: \"greaterThan\",\n label: \"Greater than\",\n combinators: [\"and\"],\n },\n {\n operator: \"lessThan\",\n label: \"Less than\",\n combinators: [\"and\"],\n },\n {\n operator: \"equalsTo\",\n label: \"Equal to\",\n combinators: [\"and\", \"or\"],\n },\n {\n operator: \"greaterThanEq\",\n label: \"Greater than or equal to\",\n combinators: [\"and\"],\n },\n {\n operator: \"lessThanEq\",\n label: \"Less than or equal to\",\n combinators: [\"and\"],\n },\n {\n operator: \"notEqual\",\n label: \"Not equal to\",\n combinators: [\"and\"],\n },\n {\n operator: \"range\",\n label: \"Range\",\n combinators: [\"and\"],\n },\n ],\n};\n\nexport const defaultCombinators = [\n { operand: \"and\", label: \"AND\" },\n { operand: \"or\", label: \"OR\" },\n];\n\nexport const defaultLabels = {\n query: {\n delete: {\n ariaLabel: \"Reset query\",\n tooltip: \"Reset query\",\n dialogTitle: \"Remove all conditions?\",\n dialogMessage:\n \"Are you sure you want to remove all the conditions? They will be removed permanently.\",\n dialogConfirm: \"Yes\",\n dialogCancel: \"No\",\n dialogCloseTooltip: \"Close\",\n },\n },\n rule: {\n attribute: {\n label: \"Attribute\",\n placeholder: \"Select attribute...\",\n exists: \"Attribute already exists.\",\n },\n operator: {\n label: \"Operator\",\n placeholder: \"Select operator...\",\n },\n value: {\n distance: {\n label: \"Value\",\n connectorText: \"radius miles from\",\n button: \"Select location\",\n validation: {\n required: \"The value is required.\",\n invalid: \"Value must be a positive number.\",\n },\n },\n text: {\n label: \"Value\",\n placeholder: \"Enter value...\",\n validation: {\n required: \"The value is required.\",\n },\n },\n boolean: {\n label: \"Value\",\n placeholder: \"Enter value\",\n options: {\n true: \"True\",\n false: \"False\",\n },\n },\n numeric: {\n label: \"Value\",\n placeholder: \"Enter value\",\n validation: {\n required: \"The value is required.\",\n invalid: \"Value must be a number.\",\n equal: \"Cannot be equal.\",\n greaterThan: \"Needs to be greater.\",\n },\n range: {\n leftLabel: \"From\",\n rightLabel: \"To\",\n },\n },\n datetime: {\n dateLabel: \"Date\",\n datePlaceholder: \"Select Date\",\n timeLabel: \"Time\",\n timePlaceholder: \"Select Time\",\n startDateLabel: \"Start Date\",\n startDatePlaceholder: \"Select Start Date\",\n startTimeLabel: \"Start Time\",\n startTimePlaceholder: \"Select Start Time\",\n endDateLabel: \"End Date\",\n endDatePlaceholder: \"Select End Date\",\n endTimeLabel: \"End Time\",\n endTimePlaceholder: \"Select End Time\",\n validation: {\n required: \"The value is required.\",\n invalidInterval:\n \"End date and time must be after start date and time.\",\n },\n },\n },\n delete: {\n ariaLabel: \"Remove condition\",\n tooltip: \"Remove condition\",\n dialogTitle: \"Remove condition?\",\n dialogMessage:\n \"Are you sure you want to remove the condition? It will be removed permanently.\",\n dialogConfirm: \"Yes\",\n dialogCancel: \"No\",\n dialogCloseTooltip: \"Close\",\n },\n },\n group: {\n delete: {\n ariaLabel: \"Remove group\",\n tooltip: \"Remove group\",\n dialogTitle: \"Remove group?\",\n dialogMessage:\n \"Are you sure you want to remove the group? It will be removed permanently.\",\n dialogConfirm: \"Yes\",\n dialogCancel: \"No\",\n dialogCloseTooltip: \"Close\",\n },\n reset: {\n ariaLabel: \"Change operator\",\n tooltip: \"Change operator query\",\n dialogTitle: \"Change conditional operator?\",\n dialogMessage:\n \"Do you want to change conditional operator? You won't be able to undo this operation. Conditions and/or groups will be removed.\",\n dialogConfirm: \"Yes\",\n dialogCancel: \"No\",\n dialogCloseTooltip: \"Close\",\n },\n addRule: {\n label: \"Add condition\",\n },\n addGroup: {\n label: \"Add group\",\n },\n },\n empty: {\n title: \"No conditions created yet\",\n createCondition: \"Create a condition\",\n createGroup: \"condition group\",\n spacer: \" or a \",\n },\n};\n\nexport interface HvQueryBuilderContextValue {\n dispatchAction: React.Dispatch<QueryAction>;\n askAction: React.Dispatch<React.SetStateAction<AskAction | undefined>>;\n selectLocation?: React.Dispatch<unknown>;\n attributes?: Record<string, HvQueryBuilderAttribute>;\n operators: Record<string, HvQueryBuilderQueryOperator[]>;\n combinators: HvQueryBuilderQueryCombinator[];\n maxDepth: number;\n labels: HvQueryBuilderLabels;\n initialTouched: boolean;\n readOnly: boolean;\n disableConfirmation: boolean;\n renderers?: HvQueryBuilderRenderers;\n}\n\nexport const HvQueryBuilderContext = createContext<HvQueryBuilderContextValue>({\n dispatchAction: () => ({}),\n askAction: () => ({}),\n selectLocation: () => ({}),\n attributes: {},\n operators: defaultOperators,\n combinators: defaultCombinators,\n maxDepth: 1,\n labels: defaultLabels,\n initialTouched: false,\n disableConfirmation: false,\n readOnly: false,\n});\n\nexport interface HvQueryBuilderProviderProps {\n value: HvQueryBuilderContextValue;\n children: React.ReactNode;\n}\n\nexport const HvQueryBuilderProvider = ({\n children,\n value,\n}: HvQueryBuilderProviderProps) => {\n return (\n <HvQueryBuilderContext.Provider value={value}>\n {children}\n </HvQueryBuilderContext.Provider>\n );\n};\n\nexport const useQueryBuilderContext = () => {\n return useContext(HvQueryBuilderContext);\n};\n"],"names":["createContext","jsx","useContext"],"mappings":"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"}
1
+ {"version":3,"file":"Context.cjs","sources":["../../../src/QueryBuilder/Context.tsx"],"sourcesContent":["import { createContext, useContext } from \"react\";\n\nimport {\n AskAction,\n HvQueryBuilderAttribute,\n QueryAction,\n HvQueryBuilderLabels,\n HvQueryBuilderQueryCombinator,\n HvQueryBuilderQueryOperator,\n HvQueryBuilderRenderers,\n} from \"./types\";\n\nexport const defaultOperators = {\n numeric: [\n {\n operator: \"greaterThan\",\n label: \"Greater than (>)\",\n combinators: [\"and\"],\n },\n {\n operator: \"lessThan\",\n label: \"Less than (<)\",\n combinators: [\"and\"],\n },\n {\n operator: \"equalsTo\",\n label: \"Equal to (=)\",\n combinators: [\"and\", \"or\"],\n },\n {\n operator: \"greaterThanEq\",\n label: \"Greater than or equal to (>=)\",\n combinators: [\"and\"],\n },\n {\n operator: \"lessThanEq\",\n label: \"Less than or equal to (<=)\",\n combinators: [\"and\"],\n },\n {\n operator: \"notEqual\",\n label: \"Not equal to (!=)\",\n combinators: [\"and\"],\n },\n {\n operator: \"range\",\n label: \"Range\",\n combinators: [\"and\"],\n },\n ],\n text: [\n {\n operator: \"equals\",\n label: \"Equals\",\n combinators: [\"and\", \"or\"],\n },\n {\n operator: \"equalsIgnoreCase\",\n label: \"Equals Ignore Case\",\n combinators: [\"and\", \"or\"],\n },\n {\n operator: \"Contains\",\n label: \"Contains\",\n combinators: [\"and\", \"or\"],\n },\n {\n operator: \"StartsWith\",\n label: \"A string begins with\",\n combinators: [\"and\", \"or\"],\n },\n {\n operator: \"EndsWith\",\n label: \"A string ends with\",\n combinators: [\"and\", \"or\"],\n },\n {\n operator: \"IsNotEmpty\",\n label: \"Is Not empty\",\n combinators: [\"and\"],\n },\n {\n operator: \"IsNot\",\n label: \"Is Not\",\n combinators: [\"and\"],\n },\n {\n operator: \"Empty\",\n label: \"Empty\",\n combinators: [\"and\"],\n },\n ],\n textarea: [\n {\n operator: \"equals\",\n label: \"Equals\",\n combinators: [\"and\", \"or\"],\n },\n {\n operator: \"equalsIgnoreCase\",\n label: \"Equals Ignore Case\",\n combinators: [\"and\", \"or\"],\n },\n {\n operator: \"Contains\",\n label: \"Contains\",\n combinators: [\"and\", \"or\"],\n },\n {\n operator: \"StartsWith\",\n label: \"A string begins with\",\n combinators: [\"and\", \"or\"],\n },\n {\n operator: \"EndsWith\",\n label: \"A string ends with\",\n combinators: [\"and\", \"or\"],\n },\n {\n operator: \"IsNotEmpty\",\n label: \"Is Not empty\",\n combinators: [\"and\"],\n },\n {\n operator: \"IsNot\",\n label: \"Is Not\",\n combinators: [\"and\"],\n },\n {\n operator: \"Empty\",\n label: \"Empty\",\n combinators: [\"and\"],\n },\n ],\n boolean: [\n {\n operator: \"equalsTo\",\n label: \"=\",\n combinators: [\"and\", \"or\"],\n },\n ],\n dateandtime: [\n {\n operator: \"greaterThan\",\n label: \"Greater than\",\n combinators: [\"and\"],\n },\n {\n operator: \"lessThan\",\n label: \"Less than\",\n combinators: [\"and\"],\n },\n {\n operator: \"equalsTo\",\n label: \"Equal to\",\n combinators: [\"and\", \"or\"],\n },\n {\n operator: \"greaterThanEq\",\n label: \"Greater than or equal to\",\n combinators: [\"and\"],\n },\n {\n operator: \"lessThanEq\",\n label: \"Less than or equal to\",\n combinators: [\"and\"],\n },\n {\n operator: \"notEqual\",\n label: \"Not equal to\",\n combinators: [\"and\"],\n },\n {\n operator: \"range\",\n label: \"Range\",\n combinators: [\"and\"],\n },\n ],\n};\n\nexport const defaultCombinators = [\n { operand: \"and\", label: \"AND\" },\n { operand: \"or\", label: \"OR\" },\n];\n\nexport const defaultLabels = {\n query: {\n delete: {\n ariaLabel: \"Reset query\",\n tooltip: \"Reset query\",\n dialogTitle: \"Remove all conditions?\",\n dialogMessage:\n \"Are you sure you want to remove all the conditions? They will be removed permanently.\",\n dialogConfirm: \"Yes\",\n dialogCancel: \"No\",\n dialogCloseTooltip: \"Close\",\n },\n },\n rule: {\n attribute: {\n label: \"Attribute\",\n placeholder: \"Select attribute...\",\n exists: \"Attribute already exists.\",\n },\n operator: {\n label: \"Operator\",\n placeholder: \"Select operator...\",\n },\n value: {\n distance: {\n label: \"Value\",\n connectorText: \"radius miles from\",\n button: \"Select location\",\n validation: {\n required: \"The value is required.\",\n invalid: \"Value must be a positive number.\",\n },\n },\n text: {\n label: \"Value\",\n placeholder: \"Enter value...\",\n validation: {\n required: \"The value is required.\",\n },\n },\n boolean: {\n label: \"Value\",\n placeholder: \"Enter value\",\n options: {\n true: \"True\",\n false: \"False\",\n },\n },\n numeric: {\n label: \"Value\",\n placeholder: \"Enter value\",\n validation: {\n required: \"The value is required.\",\n invalid: \"Value must be a number.\",\n equal: \"Cannot be equal.\",\n greaterThan: \"Needs to be greater.\",\n },\n range: {\n leftLabel: \"From\",\n rightLabel: \"To\",\n },\n },\n datetime: {\n dateLabel: \"Date\",\n datePlaceholder: \"Select Date\",\n timeLabel: \"Time\",\n timePlaceholder: \"Select Time\",\n startDateLabel: \"Start Date\",\n startDatePlaceholder: \"Select Start Date\",\n startTimeLabel: \"Start Time\",\n startTimePlaceholder: \"Select Start Time\",\n endDateLabel: \"End Date\",\n endDatePlaceholder: \"Select End Date\",\n endTimeLabel: \"End Time\",\n endTimePlaceholder: \"Select End Time\",\n validation: {\n required: \"The value is required.\",\n invalidInterval:\n \"End date and time must be after start date and time.\",\n },\n },\n },\n delete: {\n ariaLabel: \"Remove condition\",\n tooltip: \"Remove condition\",\n dialogTitle: \"Remove condition?\",\n dialogMessage:\n \"Are you sure you want to remove the condition? It will be removed permanently.\",\n dialogConfirm: \"Yes\",\n dialogCancel: \"No\",\n dialogCloseTooltip: \"Close\",\n },\n },\n group: {\n delete: {\n ariaLabel: \"Remove group\",\n tooltip: \"Remove group\",\n dialogTitle: \"Remove group?\",\n dialogMessage:\n \"Are you sure you want to remove the group? It will be removed permanently.\",\n dialogConfirm: \"Yes\",\n dialogCancel: \"No\",\n dialogCloseTooltip: \"Close\",\n },\n reset: {\n ariaLabel: \"Change operator\",\n tooltip: \"Change operator query\",\n dialogTitle: \"Change conditional operator?\",\n dialogMessage:\n \"Do you want to change conditional operator? You won't be able to undo this operation. Conditions and/or groups will be removed.\",\n dialogConfirm: \"Yes\",\n dialogCancel: \"No\",\n dialogCloseTooltip: \"Close\",\n },\n addRule: {\n label: \"Add condition\",\n },\n addGroup: {\n label: \"Add group\",\n },\n },\n empty: {\n title: \"No conditions created yet\",\n createCondition: \"Create a condition\",\n createGroup: \"condition group\",\n spacer: \" or a \",\n },\n};\n\nexport interface HvQueryBuilderContextValue {\n dispatchAction: React.Dispatch<QueryAction>;\n askAction: React.Dispatch<React.SetStateAction<AskAction | undefined>>;\n selectLocation?: React.Dispatch<unknown>;\n attributes?: Record<string, HvQueryBuilderAttribute>;\n operators: Record<string, HvQueryBuilderQueryOperator[]>;\n combinators: HvQueryBuilderQueryCombinator[];\n maxDepth: number;\n labels: HvQueryBuilderLabels;\n initialTouched: boolean;\n readOnly: boolean;\n disableConfirmation: boolean;\n renderers?: HvQueryBuilderRenderers;\n emptyRenderer?: string[];\n}\n\nexport const HvQueryBuilderContext = createContext<HvQueryBuilderContextValue>({\n dispatchAction: () => ({}),\n askAction: () => ({}),\n selectLocation: () => ({}),\n attributes: {},\n operators: defaultOperators,\n combinators: defaultCombinators,\n maxDepth: 1,\n labels: defaultLabels,\n initialTouched: false,\n disableConfirmation: false,\n readOnly: false,\n});\n\nexport interface HvQueryBuilderProviderProps {\n value: HvQueryBuilderContextValue;\n children: React.ReactNode;\n}\n\nexport const HvQueryBuilderProvider = ({\n children,\n value,\n}: HvQueryBuilderProviderProps) => {\n return (\n <HvQueryBuilderContext.Provider value={value}>\n {children}\n </HvQueryBuilderContext.Provider>\n );\n};\n\nexport const useQueryBuilderContext = () => {\n return useContext(HvQueryBuilderContext);\n};\n"],"names":["createContext","jsx","useContext"],"mappings":"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"}
@@ -26,6 +26,7 @@ const HvQueryBuilder = (props) => {
26
26
  maxDepth = 1,
27
27
  labels = Context.defaultLabels,
28
28
  readOnly = false,
29
+ emptyRenderer = ["Empty", "IsNotEmpty"],
29
30
  classes: classesProp
30
31
  } = useDefaultProps.useDefaultProps("HvQueryBuilder", props);
31
32
  const { classes } = QueryBuilder_styles.useClasses(classesProp);
@@ -53,7 +54,8 @@ const HvQueryBuilder = (props) => {
53
54
  initialTouched: initialState,
54
55
  readOnly,
55
56
  renderers,
56
- disableConfirmation
57
+ disableConfirmation,
58
+ emptyRenderer
57
59
  }),
58
60
  [
59
61
  attributes,
@@ -64,7 +66,8 @@ const HvQueryBuilder = (props) => {
64
66
  readOnly,
65
67
  initialState,
66
68
  renderers,
67
- disableConfirmation
69
+ disableConfirmation,
70
+ emptyRenderer
68
71
  ]
69
72
  );
70
73
  React.useEffect(() => {
@@ -1 +1 @@
1
- {"version":3,"file":"QueryBuilder.cjs","sources":["../../../src/QueryBuilder/QueryBuilder.tsx"],"sourcesContent":["import { useEffect, useMemo, useReducer, useRef, useState } from \"react\";\nimport cloneDeep from \"lodash/cloneDeep\";\nimport isEqual from \"lodash/isEqual\";\n\nimport { useDefaultProps } from \"../hooks/useDefaultProps\";\nimport { ExtractNames } from \"../utils/classes\";\n\nimport { ConfirmationDialog } from \"./ConfirmationDialog\";\nimport {\n HvQueryBuilderProvider,\n defaultCombinators,\n defaultLabels,\n defaultOperators,\n} from \"./Context\";\nimport { RuleGroup } from \"./RuleGroup\";\nimport {\n AskAction,\n HvQueryBuilderAttribute,\n HvQueryBuilderQuery,\n HvQueryBuilderLabels,\n HvQueryBuilderQueryCombinator,\n HvQueryBuilderQueryOperator,\n HvQueryBuilderChangedQuery,\n HvQueryBuilderRenderers,\n} from \"./types\";\nimport { clearNodeIds, emptyGroup } from \"./utils\";\nimport reducer from \"./utils/reducer\";\nimport { useClasses, staticClasses } from \"./QueryBuilder.styles\";\n\nexport { staticClasses as queryBuilderClasses };\n\nexport type HvQueryBuilderClasses = ExtractNames<typeof useClasses>;\n\nexport interface HvQueryBuilderProps {\n /** The query attribute types. */\n attributes?: Record<string, HvQueryBuilderAttribute>;\n /** The query rules operators by attribute type and combinator. */\n operators?: Record<string, HvQueryBuilderQueryOperator[]>;\n /** The query combinators operands. */\n combinators?: HvQueryBuilderQueryCombinator[];\n /** The initial query representation. */\n query?: HvQueryBuilderQuery;\n /** Callback fired when query changes. */\n onChange?: (value: HvQueryBuilderChangedQuery) => void;\n /** Max depth of nested query groups. */\n maxDepth?: number;\n /** Object containing all the labels. */\n labels?: HvQueryBuilderLabels;\n /** Whether the query builder is in read-only mode. */\n readOnly?: boolean;\n /** Renderers for custom attribute types. */\n renderers?: HvQueryBuilderRenderers;\n /** Whether to opt-out of the confirmation dialogs shown before removing rules and rule groups. Default to `false`. */\n disableConfirmation?: boolean;\n /** A Jss Object used to override or extend the styles applied. */\n classes?: HvQueryBuilderClasses;\n}\n\n// TODO - v6\n// - uncontrolled vs controlled: users should be able to control the state\n// - \"query\" renamed to \"initialQuery\" and \"query\" used to control the state\n// - \"query\" provided with ids by the user but removed through \"onChange\"\n\n/**\n * This component allows you to create conditions and group them using logical operators.\n * It outputs a structured set of rules which can be easily parsed to create SQL/NoSQL/whatever queries.\n */\nexport const HvQueryBuilder = (props: HvQueryBuilderProps) => {\n const {\n attributes,\n renderers,\n query,\n onChange,\n disableConfirmation = false,\n operators = defaultOperators,\n combinators = defaultCombinators,\n maxDepth = 1,\n labels = defaultLabels,\n readOnly = false,\n classes: classesProp,\n } = useDefaultProps(\"HvQueryBuilder\", props);\n\n const { classes } = useClasses(classesProp);\n\n const currentAttributes = useRef<HvQueryBuilderProps[\"attributes\"] | null>(\n null\n );\n\n const initialQuery = useRef(query ?? emptyGroup());\n\n const [pendingAction, setPendingAction] = useState<AskAction>();\n const [prevState, setPrevState] = useState(initialQuery.current);\n const [initialState, setInitialState] = useState(true);\n\n const [state, dispatchAction] = useReducer(\n reducer,\n // Deep clone is needed to make sure that the \"query\" prop and \"initialQuery\" are not mutated\n cloneDeep(initialQuery.current)\n );\n\n const value = useMemo(\n () => ({\n dispatchAction,\n askAction: setPendingAction,\n attributes,\n operators,\n combinators,\n maxDepth,\n labels,\n initialTouched: initialState,\n readOnly,\n renderers,\n disableConfirmation,\n }),\n [\n attributes,\n operators,\n combinators,\n maxDepth,\n labels,\n readOnly,\n initialState,\n renderers,\n disableConfirmation,\n ]\n );\n\n // Keep track of attributes\n useEffect(() => {\n if (currentAttributes.current == null) {\n // First run, nothing to do\n currentAttributes.current = attributes;\n } else if (currentAttributes.current !== attributes) {\n // Attributes changed. The existing query is almost certainly invalid, so reset it\n currentAttributes.current = attributes;\n dispatchAction({ type: \"reset-query\" });\n }\n }, [attributes]);\n\n // Propagate the change if the query is modified\n useEffect(() => {\n if (!isEqual(state, prevState)) {\n if (initialState) {\n setInitialState(false);\n }\n\n onChange?.(clearNodeIds(state) as HvQueryBuilderChangedQuery);\n setPrevState(cloneDeep(state));\n }\n }, [initialState, onChange, prevState, state]);\n\n const handleConfirm = () => {\n if (pendingAction) {\n setPendingAction(undefined);\n pendingAction.actions.forEach((action) => dispatchAction(action));\n }\n };\n\n const handleCancel = () => {\n setPendingAction(undefined);\n };\n\n return (\n <HvQueryBuilderProvider value={value}>\n <RuleGroup\n level={0}\n id={state.id}\n combinator={state.combinator}\n rules={state.rules}\n classes={classes}\n />\n <ConfirmationDialog\n isOpen={pendingAction != null}\n onConfirm={handleConfirm}\n onCancel={handleCancel}\n title={pendingAction?.dialog.dialogTitle || \"\"}\n message={pendingAction?.dialog.dialogMessage || \"\"}\n confirmButtonLabel={pendingAction?.dialog.dialogConfirm || \"\"}\n cancelButtonLabel={pendingAction?.dialog.dialogCancel || \"\"}\n closeButtonTooltip={pendingAction?.dialog.dialogCloseTooltip || \"\"}\n />\n </HvQueryBuilderProvider>\n );\n};\n"],"names":["defaultOperators","defaultCombinators","defaultLabels","useDefaultProps","useClasses","useRef","emptyGroup","useState","useReducer","reducer","cloneDeep","useMemo","useEffect","isEqual","clearNodeIds","jsxs","HvQueryBuilderProvider","jsx","RuleGroup","ConfirmationDialog"],"mappings":";;;;;;;;;;;;;;;;AAmEa,MAAA,iBAAiB,CAAC,UAA+B;AACtD,QAAA;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,sBAAsB;AAAA,IACtB,YAAYA,QAAA;AAAA,IACZ,cAAcC,QAAA;AAAA,IACd,WAAW;AAAA,IACX,SAASC,QAAA;AAAA,IACT,WAAW;AAAA,IACX,SAAS;AAAA,EAAA,IACPC,gBAAgB,gBAAA,kBAAkB,KAAK;AAE3C,QAAM,EAAE,QAAA,IAAYC,oBAAA,WAAW,WAAW;AAE1C,QAAM,oBAAoBC,MAAA;AAAA,IACxB;AAAA,EAAA;AAGF,QAAM,eAAeA,MAAA,OAAO,SAASC,MAAAA,WAAY,CAAA;AAEjD,QAAM,CAAC,eAAe,gBAAgB,IAAIC,MAAoB,SAAA;AAC9D,QAAM,CAAC,WAAW,YAAY,IAAIA,MAAAA,SAAS,aAAa,OAAO;AAC/D,QAAM,CAAC,cAAc,eAAe,IAAIA,eAAS,IAAI;AAE/C,QAAA,CAAC,OAAO,cAAc,IAAIC,MAAA;AAAA,IAC9BC,QAAA;AAAA;AAAA,IAEAC,mBAAA,QAAU,aAAa,OAAO;AAAA,EAAA;AAGhC,QAAM,QAAQC,MAAA;AAAA,IACZ,OAAO;AAAA,MACL;AAAA,MACA,WAAW;AAAA,MACX;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,gBAAgB;AAAA,MAChB;AAAA,MACA;AAAA,MACA;AAAA,IAAA;AAAA,IAEF;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EAAA;AAIFC,QAAAA,UAAU,MAAM;AACV,QAAA,kBAAkB,WAAW,MAAM;AAErC,wBAAkB,UAAU;AAAA,IAAA,WACnB,kBAAkB,YAAY,YAAY;AAEnD,wBAAkB,UAAU;AACb,qBAAA,EAAE,MAAM,cAAA,CAAe;AAAA,IACxC;AAAA,EAAA,GACC,CAAC,UAAU,CAAC;AAGfA,QAAAA,UAAU,MAAM;AACd,QAAI,CAACC,iBAAA,QAAQ,OAAO,SAAS,GAAG;AAC9B,UAAI,cAAc;AAChB,wBAAgB,KAAK;AAAA,MACvB;AAEW,iBAAAC,MAAAA,aAAa,KAAK,CAA+B;AAC/C,mBAAAJ,mBAAAA,QAAU,KAAK,CAAC;AAAA,IAC/B;AAAA,KACC,CAAC,cAAc,UAAU,WAAW,KAAK,CAAC;AAE7C,QAAM,gBAAgB,MAAM;AAC1B,QAAI,eAAe;AACjB,uBAAiB,MAAS;AAC1B,oBAAc,QAAQ,QAAQ,CAAC,WAAW,eAAe,MAAM,CAAC;AAAA,IAClE;AAAA,EAAA;AAGF,QAAM,eAAe,MAAM;AACzB,qBAAiB,MAAS;AAAA,EAAA;AAI1B,SAAAK,gCAACC,QAAAA,0BAAuB,OACtB,UAAA;AAAA,IAAAC,2BAAA;AAAA,MAACC,UAAA;AAAA,MAAA;AAAA,QACC,OAAO;AAAA,QACP,IAAI,MAAM;AAAA,QACV,YAAY,MAAM;AAAA,QAClB,OAAO,MAAM;AAAA,QACb;AAAA,MAAA;AAAA,IACF;AAAA,IACAD,2BAAA;AAAA,MAACE,mBAAA;AAAA,MAAA;AAAA,QACC,QAAQ,iBAAiB;AAAA,QACzB,WAAW;AAAA,QACX,UAAU;AAAA,QACV,OAAO,eAAe,OAAO,eAAe;AAAA,QAC5C,SAAS,eAAe,OAAO,iBAAiB;AAAA,QAChD,oBAAoB,eAAe,OAAO,iBAAiB;AAAA,QAC3D,mBAAmB,eAAe,OAAO,gBAAgB;AAAA,QACzD,oBAAoB,eAAe,OAAO,sBAAsB;AAAA,MAAA;AAAA,IAClE;AAAA,EACF,EAAA,CAAA;AAEJ;;;"}
1
+ {"version":3,"file":"QueryBuilder.cjs","sources":["../../../src/QueryBuilder/QueryBuilder.tsx"],"sourcesContent":["import { useEffect, useMemo, useReducer, useRef, useState } from \"react\";\nimport cloneDeep from \"lodash/cloneDeep\";\nimport isEqual from \"lodash/isEqual\";\n\nimport { useDefaultProps } from \"../hooks/useDefaultProps\";\nimport { ExtractNames } from \"../utils/classes\";\n\nimport { ConfirmationDialog } from \"./ConfirmationDialog\";\nimport {\n HvQueryBuilderProvider,\n defaultCombinators,\n defaultLabels,\n defaultOperators,\n} from \"./Context\";\nimport { RuleGroup } from \"./RuleGroup\";\nimport {\n AskAction,\n HvQueryBuilderAttribute,\n HvQueryBuilderQuery,\n HvQueryBuilderLabels,\n HvQueryBuilderQueryCombinator,\n HvQueryBuilderQueryOperator,\n HvQueryBuilderChangedQuery,\n HvQueryBuilderRenderers,\n defaultRendererKey,\n} from \"./types\";\nimport { clearNodeIds, emptyGroup } from \"./utils\";\nimport reducer from \"./utils/reducer\";\nimport { useClasses, staticClasses } from \"./QueryBuilder.styles\";\n\nexport { staticClasses as queryBuilderClasses };\n\nexport type HvQueryBuilderClasses = ExtractNames<typeof useClasses>;\n\nexport interface HvQueryBuilderProps {\n /** The query attribute types. */\n attributes?: Record<string, HvQueryBuilderAttribute>;\n /** The query rules operators by attribute type and combinator. */\n operators?: Record<string, HvQueryBuilderQueryOperator[]>;\n /** The query combinators operands. */\n combinators?: HvQueryBuilderQueryCombinator[];\n /** The initial query representation. */\n query?: HvQueryBuilderQuery;\n /** Callback fired when query changes. */\n onChange?: (value: HvQueryBuilderChangedQuery) => void;\n /** Max depth of nested query groups. */\n maxDepth?: number;\n /** Object containing all the labels. */\n labels?: HvQueryBuilderLabels;\n /** Whether the query builder is in read-only mode. */\n readOnly?: boolean;\n /**\n * Operators that should use the empty value renderer when selected.\n *\n * When one of the listed operators is selected, the rule value is reset and an empty component is rendered.\n * This property takes priority over `renderers`.\n *\n * @default [\"Empty\", \"IsNotEmpty\"]\n * */\n emptyRenderer?: string[];\n /** Custom renderers for the rules' value. */\n renderers?: HvQueryBuilderRenderers;\n /** Whether to opt-out of the confirmation dialogs shown before removing rules and rule groups. @default false. */\n disableConfirmation?: boolean;\n /** A Jss Object used to override or extend the styles applied. */\n classes?: HvQueryBuilderClasses;\n}\n\n// TODO - v6\n// - uncontrolled vs controlled: users should be able to control the state\n// - \"query\" renamed to \"initialQuery\" and \"query\" used to control the state\n// - \"query\" provided with ids by the user but removed through \"onChange\"\n// - \"range\", \"Empty\", and \"IsNotEmpty\" operators with internal/built-in logic\n\n/**\n * This component allows you to create conditions and group them using logical operators.\n * It outputs a structured set of rules which can be easily parsed to create SQL/NoSQL/whatever queries.\n *\n * Take a look at the [usage page](https://lumada-design.github.io/uikit/master/?path=/docs/widgets-query-builder-usage--docs) to learn more about this component.\n */\nexport const HvQueryBuilder = (props: HvQueryBuilderProps) => {\n const {\n attributes,\n renderers,\n query,\n onChange,\n disableConfirmation = false,\n operators = defaultOperators,\n combinators = defaultCombinators,\n maxDepth = 1,\n labels = defaultLabels,\n readOnly = false,\n emptyRenderer = [\"Empty\", \"IsNotEmpty\"],\n classes: classesProp,\n } = useDefaultProps(\"HvQueryBuilder\", props);\n\n if (\n import.meta.env.DEV &&\n [\n Object.values(attributes || {}).map(({ type }) => type),\n Object.values(operators || {})\n .map((ops) => ops.map(({ operator }) => operator))\n .flat(),\n ]\n .flat()\n ?.find((key) => key === defaultRendererKey)\n ) {\n // eslint-disable-next-line no-console\n console.error(\n `${defaultRendererKey} is a restricted key and shouldn't be used as an attribute or operator type. Update the key to avoid unexpected behaviors.`\n );\n }\n\n const { classes } = useClasses(classesProp);\n\n const currentAttributes = useRef<HvQueryBuilderProps[\"attributes\"] | null>(\n null\n );\n\n const initialQuery = useRef(query ?? emptyGroup());\n\n const [pendingAction, setPendingAction] = useState<AskAction>();\n const [prevState, setPrevState] = useState(initialQuery.current);\n const [initialState, setInitialState] = useState(true);\n\n const [state, dispatchAction] = useReducer(\n reducer,\n // Deep clone is needed to make sure that the \"query\" prop and \"initialQuery\" are not mutated\n cloneDeep(initialQuery.current)\n );\n\n const value = useMemo(\n () => ({\n dispatchAction,\n askAction: setPendingAction,\n attributes,\n operators,\n combinators,\n maxDepth,\n labels,\n initialTouched: initialState,\n readOnly,\n renderers,\n disableConfirmation,\n emptyRenderer,\n }),\n [\n attributes,\n operators,\n combinators,\n maxDepth,\n labels,\n readOnly,\n initialState,\n renderers,\n disableConfirmation,\n emptyRenderer,\n ]\n );\n\n // Keep track of attributes\n useEffect(() => {\n if (currentAttributes.current == null) {\n // First run, nothing to do\n currentAttributes.current = attributes;\n } else if (currentAttributes.current !== attributes) {\n // Attributes changed. The existing query is almost certainly invalid, so reset it\n currentAttributes.current = attributes;\n dispatchAction({ type: \"reset-query\" });\n }\n }, [attributes]);\n\n // Propagate the change if the query is modified\n useEffect(() => {\n if (!isEqual(state, prevState)) {\n if (initialState) {\n setInitialState(false);\n }\n\n onChange?.(clearNodeIds(state) as HvQueryBuilderChangedQuery);\n setPrevState(cloneDeep(state));\n }\n }, [initialState, onChange, prevState, state]);\n\n const handleConfirm = () => {\n if (pendingAction) {\n setPendingAction(undefined);\n pendingAction.actions.forEach((action) => dispatchAction(action));\n }\n };\n\n const handleCancel = () => {\n setPendingAction(undefined);\n };\n\n return (\n <HvQueryBuilderProvider value={value}>\n <RuleGroup\n level={0}\n id={state.id}\n combinator={state.combinator}\n rules={state.rules}\n classes={classes}\n />\n <ConfirmationDialog\n isOpen={pendingAction != null}\n onConfirm={handleConfirm}\n onCancel={handleCancel}\n title={pendingAction?.dialog.dialogTitle || \"\"}\n message={pendingAction?.dialog.dialogMessage || \"\"}\n confirmButtonLabel={pendingAction?.dialog.dialogConfirm || \"\"}\n cancelButtonLabel={pendingAction?.dialog.dialogCancel || \"\"}\n closeButtonTooltip={pendingAction?.dialog.dialogCloseTooltip || \"\"}\n />\n </HvQueryBuilderProvider>\n );\n};\n"],"names":["defaultOperators","defaultCombinators","defaultLabels","useDefaultProps","useClasses","useRef","emptyGroup","useState","useReducer","reducer","cloneDeep","useMemo","useEffect","isEqual","clearNodeIds","jsxs","HvQueryBuilderProvider","jsx","RuleGroup","ConfirmationDialog"],"mappings":"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"}
@@ -97,12 +97,14 @@ const { useClasses, staticClasses } = classes.createClasses("HvQueryBuilder", {
97
97
  createConditionButton: {
98
98
  cursor: "pointer",
99
99
  backgroundColor: "transparent",
100
- padding: 0
100
+ padding: 0,
101
+ "&:disabled": { cursor: "not-allowed", pointerEvents: "none" }
101
102
  },
102
103
  createGroupButton: {
103
104
  cursor: "pointer",
104
105
  backgroundColor: "transparent",
105
- padding: 0
106
+ padding: 0,
107
+ "&:disabled": { cursor: "not-allowed", pointerEvents: "none" }
106
108
  }
107
109
  });
108
110
  exports.staticClasses = staticClasses;
@@ -1 +1 @@
1
- {"version":3,"file":"QueryBuilder.styles.cjs","sources":["../../../src/QueryBuilder/QueryBuilder.styles.tsx"],"sourcesContent":["import { theme } from \"@hitachivantara/uikit-styles\";\n\nimport { createClasses } from \"../utils/classes\";\n\nexport const { useClasses, staticClasses } = createClasses(\"HvQueryBuilder\", {\n /** Styles applied to the component root class. */\n root: {\n position: \"relative\",\n padding: theme.space.sm,\n marginTop: 12,\n marginBottom: 32,\n border: `1px solid ${theme.colors.atmo4}`,\n },\n /** Styles applied to the top group container. */\n topGroup: {\n margin: theme.space.sm,\n backgroundColor: \"transparent\",\n maxWidth: \"100%\",\n paddingBottom: theme.space.lg,\n },\n /** Styles applied to the sub group containers. */\n subGroup: {\n margin: \"40px 14px 32px 20px\",\n minHeight: 120,\n paddingBottom: theme.space.md,\n\n \"&::before\": {\n content: '\"\"',\n position: \"absolute\",\n zIndex: 2,\n\n width: 21,\n height: 36,\n\n borderBottom: `1px solid ${theme.colors.atmo4}`,\n borderLeft: `1px solid ${theme.colors.atmo4}`,\n\n top: -38,\n left: -38,\n },\n \":not($topRulesContainer)>&:last-child::after\": {\n content: '\"\"',\n position: \"absolute\",\n zIndex: 1,\n\n width: 32,\n height: \"100%\",\n\n borderLeft: `1px solid ${theme.colors.atmo4}`,\n\n top: 0,\n left: `calc(${theme.space.sm} + 2)`,\n },\n },\n /** Styles applied to the radio button+label topGroup when the radio button is disabled. */\n combinator: { minWidth: 80 },\n /** Styles applied to the multi-button combinator container on the top group. */\n topCombinator: {\n position: \"absolute\",\n top: `calc(-1 * ${theme.space.sm})`,\n left: `calc(-1 * ${theme.space.sm})`,\n },\n /** Styles applied to each combinator button. */\n combinatorButton: {},\n /** Styles applied to the remove button. */\n removeButton: {},\n /** Styles applied to the remove button on the top group. */\n topRemoveButton: { position: \"absolute\", top: -16, right: -16 },\n /** Styles applied to the remove button when disabled on the top group. */\n topRemoveButtonDisabled: { backgroundColor: theme.colors.atmo2 },\n /** Styles applied to the rules container. */\n rulesContainer: {},\n /** Styles applied to the sub rules container. */\n subRulesContainer: {\n borderLeft: `1px solid ${theme.colors.atmo4}`,\n marginLeft: theme.space.sm,\n marginBottom: theme.space.md,\n paddingLeft: theme.space.sm,\n paddingTop: 7,\n position: \"relative\",\n left: -33,\n width: \"100%\",\n },\n /** Styles applied to the action button container. */\n actionButtonContainer: {\n marginLeft: \"auto\",\n\n \"&>*\": {\n marginLeft: theme.space.sm,\n },\n },\n /** Styles applied to the top action button container. */\n topActionButtonContainer: {\n position: \"absolute\",\n bottom: `calc(-1 * ${theme.space.md} * 0.5 - 3px)`,\n right: `calc(${theme.space.sm} * 1.75 + 2px)`,\n },\n /** Styles applied to the top rules container. */\n topRulesContainer: {},\n /** Styles applied to the background of buttons to remove transparency */\n buttonBackground: {\n backgroundColor: theme.colors.atmo2,\n display: \"inline-flex\",\n },\n createConditionButton: {\n cursor: \"pointer\",\n backgroundColor: \"transparent\",\n padding: 0,\n },\n createGroupButton: {\n cursor: \"pointer\",\n backgroundColor: \"transparent\",\n padding: 0,\n },\n});\n"],"names":["createClasses","theme"],"mappings":";;;;AAIO,MAAM,EAAE,YAAY,kBAAkBA,QAAAA,cAAc,kBAAkB;AAAA;AAAA,EAE3E,MAAM;AAAA,IACJ,UAAU;AAAA,IACV,SAASC,YAAAA,MAAM,MAAM;AAAA,IACrB,WAAW;AAAA,IACX,cAAc;AAAA,IACd,QAAQ,aAAaA,YAAM,MAAA,OAAO,KAAK;AAAA,EACzC;AAAA;AAAA,EAEA,UAAU;AAAA,IACR,QAAQA,YAAAA,MAAM,MAAM;AAAA,IACpB,iBAAiB;AAAA,IACjB,UAAU;AAAA,IACV,eAAeA,YAAAA,MAAM,MAAM;AAAA,EAC7B;AAAA;AAAA,EAEA,UAAU;AAAA,IACR,QAAQ;AAAA,IACR,WAAW;AAAA,IACX,eAAeA,YAAAA,MAAM,MAAM;AAAA,IAE3B,aAAa;AAAA,MACX,SAAS;AAAA,MACT,UAAU;AAAA,MACV,QAAQ;AAAA,MAER,OAAO;AAAA,MACP,QAAQ;AAAA,MAER,cAAc,aAAaA,YAAM,MAAA,OAAO,KAAK;AAAA,MAC7C,YAAY,aAAaA,YAAM,MAAA,OAAO,KAAK;AAAA,MAE3C,KAAK;AAAA,MACL,MAAM;AAAA,IACR;AAAA,IACA,gDAAgD;AAAA,MAC9C,SAAS;AAAA,MACT,UAAU;AAAA,MACV,QAAQ;AAAA,MAER,OAAO;AAAA,MACP,QAAQ;AAAA,MAER,YAAY,aAAaA,YAAM,MAAA,OAAO,KAAK;AAAA,MAE3C,KAAK;AAAA,MACL,MAAM,QAAQA,YAAAA,MAAM,MAAM,EAAE;AAAA,IAC9B;AAAA,EACF;AAAA;AAAA,EAEA,YAAY,EAAE,UAAU,GAAG;AAAA;AAAA,EAE3B,eAAe;AAAA,IACb,UAAU;AAAA,IACV,KAAK,aAAaA,YAAAA,MAAM,MAAM,EAAE;AAAA,IAChC,MAAM,aAAaA,YAAAA,MAAM,MAAM,EAAE;AAAA,EACnC;AAAA;AAAA,EAEA,kBAAkB,CAAC;AAAA;AAAA,EAEnB,cAAc,CAAC;AAAA;AAAA,EAEf,iBAAiB,EAAE,UAAU,YAAY,KAAK,KAAK,OAAO,IAAI;AAAA;AAAA,EAE9D,yBAAyB,EAAE,iBAAiBA,kBAAM,OAAO,MAAM;AAAA;AAAA,EAE/D,gBAAgB,CAAC;AAAA;AAAA,EAEjB,mBAAmB;AAAA,IACjB,YAAY,aAAaA,YAAM,MAAA,OAAO,KAAK;AAAA,IAC3C,YAAYA,YAAAA,MAAM,MAAM;AAAA,IACxB,cAAcA,YAAAA,MAAM,MAAM;AAAA,IAC1B,aAAaA,YAAAA,MAAM,MAAM;AAAA,IACzB,YAAY;AAAA,IACZ,UAAU;AAAA,IACV,MAAM;AAAA,IACN,OAAO;AAAA,EACT;AAAA;AAAA,EAEA,uBAAuB;AAAA,IACrB,YAAY;AAAA,IAEZ,OAAO;AAAA,MACL,YAAYA,YAAAA,MAAM,MAAM;AAAA,IAC1B;AAAA,EACF;AAAA;AAAA,EAEA,0BAA0B;AAAA,IACxB,UAAU;AAAA,IACV,QAAQ,aAAaA,YAAAA,MAAM,MAAM,EAAE;AAAA,IACnC,OAAO,QAAQA,YAAAA,MAAM,MAAM,EAAE;AAAA,EAC/B;AAAA;AAAA,EAEA,mBAAmB,CAAC;AAAA;AAAA,EAEpB,kBAAkB;AAAA,IAChB,iBAAiBA,YAAAA,MAAM,OAAO;AAAA,IAC9B,SAAS;AAAA,EACX;AAAA,EACA,uBAAuB;AAAA,IACrB,QAAQ;AAAA,IACR,iBAAiB;AAAA,IACjB,SAAS;AAAA,EACX;AAAA,EACA,mBAAmB;AAAA,IACjB,QAAQ;AAAA,IACR,iBAAiB;AAAA,IACjB,SAAS;AAAA,EACX;AACF,CAAC;;;"}
1
+ {"version":3,"file":"QueryBuilder.styles.cjs","sources":["../../../src/QueryBuilder/QueryBuilder.styles.tsx"],"sourcesContent":["import { theme } from \"@hitachivantara/uikit-styles\";\n\nimport { createClasses } from \"../utils/classes\";\n\nexport const { useClasses, staticClasses } = createClasses(\"HvQueryBuilder\", {\n /** Styles applied to the component root class. */\n root: {\n position: \"relative\",\n padding: theme.space.sm,\n marginTop: 12,\n marginBottom: 32,\n border: `1px solid ${theme.colors.atmo4}`,\n },\n /** Styles applied to the top group container. */\n topGroup: {\n margin: theme.space.sm,\n backgroundColor: \"transparent\",\n maxWidth: \"100%\",\n paddingBottom: theme.space.lg,\n },\n /** Styles applied to the sub group containers. */\n subGroup: {\n margin: \"40px 14px 32px 20px\",\n minHeight: 120,\n paddingBottom: theme.space.md,\n\n \"&::before\": {\n content: '\"\"',\n position: \"absolute\",\n zIndex: 2,\n\n width: 21,\n height: 36,\n\n borderBottom: `1px solid ${theme.colors.atmo4}`,\n borderLeft: `1px solid ${theme.colors.atmo4}`,\n\n top: -38,\n left: -38,\n },\n \":not($topRulesContainer)>&:last-child::after\": {\n content: '\"\"',\n position: \"absolute\",\n zIndex: 1,\n\n width: 32,\n height: \"100%\",\n\n borderLeft: `1px solid ${theme.colors.atmo4}`,\n\n top: 0,\n left: `calc(${theme.space.sm} + 2)`,\n },\n },\n /** Styles applied to the radio button+label topGroup when the radio button is disabled. */\n combinator: { minWidth: 80 },\n /** Styles applied to the multi-button combinator container on the top group. */\n topCombinator: {\n position: \"absolute\",\n top: `calc(-1 * ${theme.space.sm})`,\n left: `calc(-1 * ${theme.space.sm})`,\n },\n /** Styles applied to each combinator button. */\n combinatorButton: {},\n /** Styles applied to the remove button. */\n removeButton: {},\n /** Styles applied to the remove button on the top group. */\n topRemoveButton: { position: \"absolute\", top: -16, right: -16 },\n /** Styles applied to the remove button when disabled on the top group. */\n topRemoveButtonDisabled: { backgroundColor: theme.colors.atmo2 },\n /** Styles applied to the rules container. */\n rulesContainer: {},\n /** Styles applied to the sub rules container. */\n subRulesContainer: {\n borderLeft: `1px solid ${theme.colors.atmo4}`,\n marginLeft: theme.space.sm,\n marginBottom: theme.space.md,\n paddingLeft: theme.space.sm,\n paddingTop: 7,\n position: \"relative\",\n left: -33,\n width: \"100%\",\n },\n /** Styles applied to the action button container. */\n actionButtonContainer: {\n marginLeft: \"auto\",\n\n \"&>*\": {\n marginLeft: theme.space.sm,\n },\n },\n /** Styles applied to the top action button container. */\n topActionButtonContainer: {\n position: \"absolute\",\n bottom: `calc(-1 * ${theme.space.md} * 0.5 - 3px)`,\n right: `calc(${theme.space.sm} * 1.75 + 2px)`,\n },\n /** Styles applied to the top rules container. */\n topRulesContainer: {},\n /** Styles applied to the background of buttons to remove transparency */\n buttonBackground: {\n backgroundColor: theme.colors.atmo2,\n display: \"inline-flex\",\n },\n createConditionButton: {\n cursor: \"pointer\",\n backgroundColor: \"transparent\",\n padding: 0,\n\n \"&:disabled\": { cursor: \"not-allowed\", pointerEvents: \"none\" },\n },\n createGroupButton: {\n cursor: \"pointer\",\n backgroundColor: \"transparent\",\n padding: 0,\n\n \"&:disabled\": { cursor: \"not-allowed\", pointerEvents: \"none\" },\n },\n});\n"],"names":["createClasses","theme"],"mappings":"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"}
@@ -41,7 +41,7 @@ const Operator = ({
41
41
  type: "set-operator",
42
42
  id,
43
43
  operator: selected.id.toString(),
44
- value: value === "range" || selected.id === "range" || selected.id === "IsNotEmpty" || selected.id === "Empty" ? null : void 0
44
+ value: value === "range" || selected.id === "range" ? null : void 0
45
45
  });
46
46
  } else {
47
47
  dispatchAction({
@@ -1 +1 @@
1
- {"version":3,"file":"Operator.cjs","sources":["../../../../../src/QueryBuilder/Rule/Operator/Operator.tsx"],"sourcesContent":["import { memo, useMemo } from \"react\";\n\nimport { HvDropdown } from \"../../../Dropdown\";\n\nimport { useQueryBuilderContext } from \"../../Context\";\nimport { isBigList } from \"../../utils\";\n\nexport interface OperatorProps {\n id: React.Key;\n combinator: string;\n attribute: string;\n operator?: string;\n}\n\nexport const Operator = ({\n id,\n combinator,\n attribute,\n operator,\n}: OperatorProps) => {\n const { dispatchAction, attributes, operators, labels, readOnly } =\n useQueryBuilderContext();\n\n const value = operator ?? null;\n\n const values = useMemo(() => {\n const attributeSpec =\n attribute && attributes ? attributes[attribute] : null;\n const options = attributeSpec\n ? operators[attributeSpec.type].filter((o) =>\n o.combinators.includes(combinator)\n ) ?? []\n : [];\n return options.map((key) => ({\n id: key.operator,\n label: key.label,\n selected: key.operator === value,\n }));\n }, [attribute, attributes, operators, combinator, value]);\n\n return (\n <HvDropdown\n required\n status=\"valid\"\n singleSelectionToggle={false}\n label={labels.rule.operator.label}\n placeholder={labels.rule.operator.placeholder}\n values={values}\n disabled={values.length === 0}\n readOnly={readOnly}\n onChange={(selected) => {\n if (selected && !Array.isArray(selected) && selected.id) {\n dispatchAction({\n type: \"set-operator\",\n id,\n operator: selected.id.toString(),\n value:\n value === \"range\" ||\n selected.id === \"range\" ||\n selected.id === \"IsNotEmpty\" ||\n selected.id === \"Empty\"\n ? null\n : undefined,\n });\n } else {\n dispatchAction({\n type: \"set-operator\",\n id,\n operator: null,\n value: null,\n });\n }\n }}\n showSearch={isBigList(values)}\n {...(isBigList(values) && { virtualized: true, height: 300 })}\n />\n );\n};\n\nexport default memo(Operator);\n"],"names":["useQueryBuilderContext","useMemo","jsx","HvDropdown","isBigList","memo"],"mappings":";;;;;;;AAcO,MAAM,WAAW,CAAC;AAAA,EACvB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAAqB;AACnB,QAAM,EAAE,gBAAgB,YAAY,WAAW,QAAQ,SAAA,IACrDA,QAAAA;AAEF,QAAM,QAAQ,YAAY;AAEpB,QAAA,SAASC,MAAAA,QAAQ,MAAM;AAC3B,UAAM,gBACJ,aAAa,aAAa,WAAW,SAAS,IAAI;AACpD,UAAM,UAAU,gBACZ,UAAU,cAAc,IAAI,EAAE;AAAA,MAAO,CAAC,MACpC,EAAE,YAAY,SAAS,UAAU;AAAA,IAAA,KAC9B,CAAA,IACL,CAAA;AACG,WAAA,QAAQ,IAAI,CAAC,SAAS;AAAA,MAC3B,IAAI,IAAI;AAAA,MACR,OAAO,IAAI;AAAA,MACX,UAAU,IAAI,aAAa;AAAA,IAC3B,EAAA;AAAA,EAAA,GACD,CAAC,WAAW,YAAY,WAAW,YAAY,KAAK,CAAC;AAGtD,SAAAC,2BAAA;AAAA,IAACC,SAAA;AAAA,IAAA;AAAA,MACC,UAAQ;AAAA,MACR,QAAO;AAAA,MACP,uBAAuB;AAAA,MACvB,OAAO,OAAO,KAAK,SAAS;AAAA,MAC5B,aAAa,OAAO,KAAK,SAAS;AAAA,MAClC;AAAA,MACA,UAAU,OAAO,WAAW;AAAA,MAC5B;AAAA,MACA,UAAU,CAAC,aAAa;AACtB,YAAI,YAAY,CAAC,MAAM,QAAQ,QAAQ,KAAK,SAAS,IAAI;AACxC,yBAAA;AAAA,YACb,MAAM;AAAA,YACN;AAAA,YACA,UAAU,SAAS,GAAG,SAAS;AAAA,YAC/B,OACE,UAAU,WACV,SAAS,OAAO,WAChB,SAAS,OAAO,gBAChB,SAAS,OAAO,UACZ,OACA;AAAA,UAAA,CACP;AAAA,QAAA,OACI;AACU,yBAAA;AAAA,YACb,MAAM;AAAA,YACN;AAAA,YACA,UAAU;AAAA,YACV,OAAO;AAAA,UAAA,CACR;AAAA,QACH;AAAA,MACF;AAAA,MACA,YAAYC,gBAAU,MAAM;AAAA,MAC3B,GAAIA,MAAAA,UAAU,MAAM,KAAK,EAAE,aAAa,MAAM,QAAQ,IAAI;AAAA,IAAA;AAAA,EAAA;AAGjE;AAEeC,WAAK,QAAQ;;"}
1
+ {"version":3,"file":"Operator.cjs","sources":["../../../../../src/QueryBuilder/Rule/Operator/Operator.tsx"],"sourcesContent":["import { memo, useMemo } from \"react\";\n\nimport { HvDropdown } from \"../../../Dropdown\";\n\nimport { useQueryBuilderContext } from \"../../Context\";\nimport { isBigList } from \"../../utils\";\n\nexport interface OperatorProps {\n id: React.Key;\n combinator: string;\n attribute: string;\n operator?: string;\n}\n\nexport const Operator = ({\n id,\n combinator,\n attribute,\n operator,\n}: OperatorProps) => {\n const { dispatchAction, attributes, operators, labels, readOnly } =\n useQueryBuilderContext();\n\n const value = operator ?? null;\n\n const values = useMemo(() => {\n const attributeSpec =\n attribute && attributes ? attributes[attribute] : null;\n const options = attributeSpec\n ? operators[attributeSpec.type].filter((o) =>\n o.combinators.includes(combinator)\n ) ?? []\n : [];\n return options.map((key) => ({\n id: key.operator,\n label: key.label,\n selected: key.operator === value,\n }));\n }, [attribute, attributes, operators, combinator, value]);\n\n return (\n <HvDropdown\n required\n status=\"valid\"\n singleSelectionToggle={false}\n label={labels.rule.operator.label}\n placeholder={labels.rule.operator.placeholder}\n values={values}\n disabled={values.length === 0}\n readOnly={readOnly}\n onChange={(selected) => {\n if (selected && !Array.isArray(selected) && selected.id) {\n dispatchAction({\n type: \"set-operator\",\n id,\n operator: selected.id.toString(),\n value:\n value === \"range\" || selected.id === \"range\" ? null : undefined,\n });\n } else {\n dispatchAction({\n type: \"set-operator\",\n id,\n operator: null,\n value: null,\n });\n }\n }}\n showSearch={isBigList(values)}\n {...(isBigList(values) && { virtualized: true, height: 300 })}\n />\n );\n};\n\nexport default memo(Operator);\n"],"names":["useQueryBuilderContext","useMemo","jsx","HvDropdown","isBigList","memo"],"mappings":";;;;;;;AAcO,MAAM,WAAW,CAAC;AAAA,EACvB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAAqB;AACnB,QAAM,EAAE,gBAAgB,YAAY,WAAW,QAAQ,SAAA,IACrDA,QAAAA;AAEF,QAAM,QAAQ,YAAY;AAEpB,QAAA,SAASC,MAAAA,QAAQ,MAAM;AAC3B,UAAM,gBACJ,aAAa,aAAa,WAAW,SAAS,IAAI;AACpD,UAAM,UAAU,gBACZ,UAAU,cAAc,IAAI,EAAE;AAAA,MAAO,CAAC,MACpC,EAAE,YAAY,SAAS,UAAU;AAAA,IAAA,KAC9B,CAAA,IACL,CAAA;AACG,WAAA,QAAQ,IAAI,CAAC,SAAS;AAAA,MAC3B,IAAI,IAAI;AAAA,MACR,OAAO,IAAI;AAAA,MACX,UAAU,IAAI,aAAa;AAAA,IAC3B,EAAA;AAAA,EAAA,GACD,CAAC,WAAW,YAAY,WAAW,YAAY,KAAK,CAAC;AAGtD,SAAAC,2BAAA;AAAA,IAACC,SAAA;AAAA,IAAA;AAAA,MACC,UAAQ;AAAA,MACR,QAAO;AAAA,MACP,uBAAuB;AAAA,MACvB,OAAO,OAAO,KAAK,SAAS;AAAA,MAC5B,aAAa,OAAO,KAAK,SAAS;AAAA,MAClC;AAAA,MACA,UAAU,OAAO,WAAW;AAAA,MAC5B;AAAA,MACA,UAAU,CAAC,aAAa;AACtB,YAAI,YAAY,CAAC,MAAM,QAAQ,QAAQ,KAAK,SAAS,IAAI;AACxC,yBAAA;AAAA,YACb,MAAM;AAAA,YACN;AAAA,YACA,UAAU,SAAS,GAAG,SAAS;AAAA,YAC/B,OACE,UAAU,WAAW,SAAS,OAAO,UAAU,OAAO;AAAA,UAAA,CACzD;AAAA,QAAA,OACI;AACU,yBAAA;AAAA,YACb,MAAM;AAAA,YACN;AAAA,YACA,UAAU;AAAA,YACV,OAAO;AAAA,UAAA,CACR;AAAA,QACH;AAAA,MACF;AAAA,MACA,YAAYC,gBAAU,MAAM;AAAA,MAC3B,GAAIA,MAAAA,UAAU,MAAM,KAAK,EAAE,aAAa,MAAM,QAAQ,IAAI;AAAA,IAAA;AAAA,EAAA;AAGjE;AAEeC,WAAK,QAAQ;;"}
@@ -51,7 +51,6 @@ const Rule = (props) => {
51
51
  }
52
52
  return -1;
53
53
  }, [attribute, attributes, combinator, operators]);
54
- const shouldShowValueInput = operator !== "Empty" && operator !== "IsNotEmpty";
55
54
  return /* @__PURE__ */ jsxRuntime.jsxs(
56
55
  Grid.HvGrid,
57
56
  {
@@ -77,7 +76,7 @@ const Rule = (props) => {
77
76
  operator
78
77
  }
79
78
  ) }),
80
- attribute != null && (operator != null || availableOperators === 0) && /* @__PURE__ */ jsxRuntime.jsx(Grid.HvGrid, { item: true, xs: 12, md: true, children: shouldShowValueInput && /* @__PURE__ */ jsxRuntime.jsx(
79
+ attribute != null && (operator != null || availableOperators === 0) && /* @__PURE__ */ jsxRuntime.jsx(Grid.HvGrid, { item: true, xs: 12, md: true, children: /* @__PURE__ */ jsxRuntime.jsx(
81
80
  Value.Value,
82
81
  {
83
82
  attribute,
@@ -1 +1 @@
1
- {"version":3,"file":"Rule.cjs","sources":["../../../../src/QueryBuilder/Rule/Rule.tsx"],"sourcesContent":["import { useMemo } from \"react\";\nimport { Delete } from \"@hitachivantara/uikit-react-icons\";\nimport { useTheme } from \"@mui/material/styles\";\nimport useMediaQuery from \"@mui/material/useMediaQuery\";\n\nimport { HvGrid } from \"../../Grid\";\nimport { IconButton } from \"../../utils/IconButton\";\nimport { useDefaultProps } from \"../../hooks/useDefaultProps\";\nimport { ExtractNames } from \"../../utils/classes\";\n\nimport { useQueryBuilderContext } from \"../Context\";\nimport { Attribute } from \"./Attribute\";\nimport { Operator } from \"./Operator\";\nimport { Value } from \"./Value\";\nimport { staticClasses, useClasses } from \"./Rule.styles\";\n\nexport { staticClasses as queryBuilderRuleClasses };\n\nexport type HvQueryBuilderRuleClasses = ExtractNames<typeof useClasses>;\n\nexport interface RuleProps {\n id: React.Key;\n combinator: string;\n attribute?: string;\n operator?: string;\n value?: any;\n disabled?: boolean;\n isInvalid: boolean;\n classes?: HvQueryBuilderRuleClasses;\n}\n\nexport const Rule = (props: RuleProps) => {\n const {\n id,\n combinator,\n attribute,\n operator,\n value,\n disabled,\n isInvalid,\n classes: classesProp,\n } = useDefaultProps(\"HvQueryBuilderRule\", props);\n\n const { classes, cx } = useClasses(classesProp);\n\n const {\n askAction,\n dispatchAction,\n attributes,\n operators,\n labels,\n readOnly,\n disableConfirmation,\n } = useQueryBuilderContext();\n\n const theme = useTheme();\n\n const isMdDown = useMediaQuery(theme.breakpoints.down(\"md\"));\n\n const availableOperators = useMemo(() => {\n const attributeSpec =\n attribute != null && attributes ? attributes[attribute] : null;\n if (attributeSpec != null) {\n const typeOperators = operators[attributeSpec.type];\n if (typeOperators != null) {\n return typeOperators.reduce(\n (count, item) =>\n count + (item.combinators.includes(combinator) ? 1 : 0),\n 0\n );\n }\n }\n\n return -1;\n }, [attribute, attributes, combinator, operators]);\n\n const shouldShowValueInput =\n operator !== \"Empty\" && operator !== \"IsNotEmpty\";\n\n return (\n <HvGrid\n container\n className={cx(classes.root, { [classes.isMdDown]: isMdDown })}\n spacing={0}\n >\n <HvGrid item xs={12} md={3}>\n <Attribute\n attribute={attribute}\n id={id}\n disabled={disabled}\n isInvalid={isInvalid}\n />\n </HvGrid>\n {attribute != null && availableOperators > 0 && (\n <HvGrid item xs={12} md={3}>\n <Operator\n id={id}\n combinator={combinator}\n attribute={attribute}\n operator={operator}\n />\n </HvGrid>\n )}\n {attribute != null && (operator != null || availableOperators === 0) && (\n <HvGrid item xs={12} md>\n {shouldShowValueInput && (\n <Value\n attribute={attribute}\n id={id}\n operator={operator}\n value={value}\n />\n )}\n </HvGrid>\n )}\n <HvGrid item className={classes.actionsContainer}>\n <IconButton\n placement=\"bottom\"\n title={labels.rule.delete.tooltip || labels.rule.delete.ariaLabel}\n onClick={() =>\n disableConfirmation\n ? dispatchAction({ type: \"remove-node\", id })\n : askAction({\n actions: [{ type: \"remove-node\", id }],\n dialog: labels.rule.delete,\n })\n }\n disabled={readOnly}\n >\n <Delete role=\"none\" />\n </IconButton>\n </HvGrid>\n </HvGrid>\n );\n};\n"],"names":["useDefaultProps","useClasses","useQueryBuilderContext","useTheme","useMediaQuery","useMemo","jsxs","HvGrid","jsx","Attribute","Operator","Value","IconButton","Delete"],"mappings":";;;;;;;;;;;;;;;;;AA+Ba,MAAA,OAAO,CAAC,UAAqB;AAClC,QAAA;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,SAAS;AAAA,EAAA,IACPA,gBAAgB,gBAAA,sBAAsB,KAAK;AAE/C,QAAM,EAAE,SAAS,GAAG,IAAIC,uBAAW,WAAW;AAExC,QAAA;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,MACEC,QAAuB,uBAAA;AAE3B,QAAM,QAAQC,OAAAA;AAEd,QAAM,WAAWC,uBAAAA,QAAc,MAAM,YAAY,KAAK,IAAI,CAAC;AAErD,QAAA,qBAAqBC,MAAAA,QAAQ,MAAM;AACvC,UAAM,gBACJ,aAAa,QAAQ,aAAa,WAAW,SAAS,IAAI;AAC5D,QAAI,iBAAiB,MAAM;AACnB,YAAA,gBAAgB,UAAU,cAAc,IAAI;AAClD,UAAI,iBAAiB,MAAM;AACzB,eAAO,cAAc;AAAA,UACnB,CAAC,OAAO,SACN,SAAS,KAAK,YAAY,SAAS,UAAU,IAAI,IAAI;AAAA,UACvD;AAAA,QAAA;AAAA,MAEJ;AAAA,IACF;AAEO,WAAA;AAAA,KACN,CAAC,WAAW,YAAY,YAAY,SAAS,CAAC;AAE3C,QAAA,uBACJ,aAAa,WAAW,aAAa;AAGrC,SAAAC,2BAAA;AAAA,IAACC,KAAA;AAAA,IAAA;AAAA,MACC,WAAS;AAAA,MACT,WAAW,GAAG,QAAQ,MAAM,EAAE,CAAC,QAAQ,QAAQ,GAAG,UAAU;AAAA,MAC5D,SAAS;AAAA,MAET,UAAA;AAAA,QAAAC,+BAACD,KAAAA,UAAO,MAAI,MAAC,IAAI,IAAI,IAAI,GACvB,UAAAC,2BAAA;AAAA,UAACC,UAAA;AAAA,UAAA;AAAA,YACC;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UAAA;AAAA,QAAA,GAEJ;AAAA,QACC,aAAa,QAAQ,qBAAqB,KACzCD,2BAAAA,IAACD,KAAAA,QAAO,EAAA,MAAI,MAAC,IAAI,IAAI,IAAI,GACvB,UAAAC,2BAAA;AAAA,UAACE,SAAA;AAAA,UAAA;AAAA,YACC;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UAAA;AAAA,QAAA,GAEJ;AAAA,QAED,aAAa,SAAS,YAAY,QAAQ,uBAAuB,MAChEF,2BAAAA,IAACD,KAAO,QAAA,EAAA,MAAI,MAAC,IAAI,IAAI,IAAE,MACpB,UACC,wBAAAC,2BAAA;AAAA,UAACG,MAAA;AAAA,UAAA;AAAA,YACC;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UAAA;AAAA,QAAA,GAGN;AAAA,uCAEDJ,KAAAA,QAAO,EAAA,MAAI,MAAC,WAAW,QAAQ,kBAC9B,UAAAC,2BAAA;AAAA,UAACI,WAAA;AAAA,UAAA;AAAA,YACC,WAAU;AAAA,YACV,OAAO,OAAO,KAAK,OAAO,WAAW,OAAO,KAAK,OAAO;AAAA,YACxD,SAAS,MACP,sBACI,eAAe,EAAE,MAAM,eAAe,IAAI,IAC1C,UAAU;AAAA,cACR,SAAS,CAAC,EAAE,MAAM,eAAe,IAAI;AAAA,cACrC,QAAQ,OAAO,KAAK;AAAA,YAAA,CACrB;AAAA,YAEP,UAAU;AAAA,YAEV,UAAAJ,2BAAAA,IAACK,gBAAAA,QAAO,EAAA,MAAK,OAAO,CAAA;AAAA,UAAA;AAAA,QAAA,GAExB;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGN;;;"}
1
+ {"version":3,"file":"Rule.cjs","sources":["../../../../src/QueryBuilder/Rule/Rule.tsx"],"sourcesContent":["import { useMemo } from \"react\";\nimport { Delete } from \"@hitachivantara/uikit-react-icons\";\nimport { useTheme } from \"@mui/material/styles\";\nimport useMediaQuery from \"@mui/material/useMediaQuery\";\n\nimport { HvGrid } from \"../../Grid\";\nimport { IconButton } from \"../../utils/IconButton\";\nimport { useDefaultProps } from \"../../hooks/useDefaultProps\";\nimport { ExtractNames } from \"../../utils/classes\";\n\nimport { useQueryBuilderContext } from \"../Context\";\nimport { Attribute } from \"./Attribute\";\nimport { Operator } from \"./Operator\";\nimport { Value } from \"./Value\";\nimport { staticClasses, useClasses } from \"./Rule.styles\";\n\nexport { staticClasses as queryBuilderRuleClasses };\n\nexport type HvQueryBuilderRuleClasses = ExtractNames<typeof useClasses>;\n\nexport interface RuleProps {\n id: React.Key;\n combinator: string;\n attribute?: string;\n operator?: string;\n value?: any;\n disabled?: boolean;\n isInvalid: boolean;\n classes?: HvQueryBuilderRuleClasses;\n}\n\nexport const Rule = (props: RuleProps) => {\n const {\n id,\n combinator,\n attribute,\n operator,\n value,\n disabled,\n isInvalid,\n classes: classesProp,\n } = useDefaultProps(\"HvQueryBuilderRule\", props);\n\n const { classes, cx } = useClasses(classesProp);\n\n const {\n askAction,\n dispatchAction,\n attributes,\n operators,\n labels,\n readOnly,\n disableConfirmation,\n } = useQueryBuilderContext();\n\n const theme = useTheme();\n\n const isMdDown = useMediaQuery(theme.breakpoints.down(\"md\"));\n\n const availableOperators = useMemo(() => {\n const attributeSpec =\n attribute != null && attributes ? attributes[attribute] : null;\n if (attributeSpec != null) {\n const typeOperators = operators[attributeSpec.type];\n if (typeOperators != null) {\n return typeOperators.reduce(\n (count, item) =>\n count + (item.combinators.includes(combinator) ? 1 : 0),\n 0\n );\n }\n }\n\n return -1;\n }, [attribute, attributes, combinator, operators]);\n\n return (\n <HvGrid\n container\n className={cx(classes.root, { [classes.isMdDown]: isMdDown })}\n spacing={0}\n >\n <HvGrid item xs={12} md={3}>\n <Attribute\n attribute={attribute}\n id={id}\n disabled={disabled}\n isInvalid={isInvalid}\n />\n </HvGrid>\n {attribute != null && availableOperators > 0 && (\n <HvGrid item xs={12} md={3}>\n <Operator\n id={id}\n combinator={combinator}\n attribute={attribute}\n operator={operator}\n />\n </HvGrid>\n )}\n {attribute != null && (operator != null || availableOperators === 0) && (\n <HvGrid item xs={12} md>\n <Value\n attribute={attribute}\n id={id}\n operator={operator}\n value={value}\n />\n </HvGrid>\n )}\n <HvGrid item className={classes.actionsContainer}>\n <IconButton\n placement=\"bottom\"\n title={labels.rule.delete.tooltip || labels.rule.delete.ariaLabel}\n onClick={() =>\n disableConfirmation\n ? dispatchAction({ type: \"remove-node\", id })\n : askAction({\n actions: [{ type: \"remove-node\", id }],\n dialog: labels.rule.delete,\n })\n }\n disabled={readOnly}\n >\n <Delete role=\"none\" />\n </IconButton>\n </HvGrid>\n </HvGrid>\n );\n};\n"],"names":["useDefaultProps","useClasses","useQueryBuilderContext","useTheme","useMediaQuery","useMemo","jsxs","HvGrid","jsx","Attribute","Operator","Value","IconButton","Delete"],"mappings":";;;;;;;;;;;;;;;;;AA+Ba,MAAA,OAAO,CAAC,UAAqB;AAClC,QAAA;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,SAAS;AAAA,EAAA,IACPA,gBAAgB,gBAAA,sBAAsB,KAAK;AAE/C,QAAM,EAAE,SAAS,GAAG,IAAIC,uBAAW,WAAW;AAExC,QAAA;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,MACEC,QAAuB,uBAAA;AAE3B,QAAM,QAAQC,OAAAA;AAEd,QAAM,WAAWC,uBAAAA,QAAc,MAAM,YAAY,KAAK,IAAI,CAAC;AAErD,QAAA,qBAAqBC,MAAAA,QAAQ,MAAM;AACvC,UAAM,gBACJ,aAAa,QAAQ,aAAa,WAAW,SAAS,IAAI;AAC5D,QAAI,iBAAiB,MAAM;AACnB,YAAA,gBAAgB,UAAU,cAAc,IAAI;AAClD,UAAI,iBAAiB,MAAM;AACzB,eAAO,cAAc;AAAA,UACnB,CAAC,OAAO,SACN,SAAS,KAAK,YAAY,SAAS,UAAU,IAAI,IAAI;AAAA,UACvD;AAAA,QAAA;AAAA,MAEJ;AAAA,IACF;AAEO,WAAA;AAAA,KACN,CAAC,WAAW,YAAY,YAAY,SAAS,CAAC;AAG/C,SAAAC,2BAAA;AAAA,IAACC,KAAA;AAAA,IAAA;AAAA,MACC,WAAS;AAAA,MACT,WAAW,GAAG,QAAQ,MAAM,EAAE,CAAC,QAAQ,QAAQ,GAAG,UAAU;AAAA,MAC5D,SAAS;AAAA,MAET,UAAA;AAAA,QAAAC,+BAACD,KAAAA,UAAO,MAAI,MAAC,IAAI,IAAI,IAAI,GACvB,UAAAC,2BAAA;AAAA,UAACC,UAAA;AAAA,UAAA;AAAA,YACC;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UAAA;AAAA,QAAA,GAEJ;AAAA,QACC,aAAa,QAAQ,qBAAqB,KACzCD,2BAAAA,IAACD,KAAAA,QAAO,EAAA,MAAI,MAAC,IAAI,IAAI,IAAI,GACvB,UAAAC,2BAAA;AAAA,UAACE,SAAA;AAAA,UAAA;AAAA,YACC;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UAAA;AAAA,QAAA,GAEJ;AAAA,QAED,aAAa,SAAS,YAAY,QAAQ,uBAAuB,MAC/DF,+BAAAD,KAAAA,QAAA,EAAO,MAAI,MAAC,IAAI,IAAI,IAAE,MACrB,UAAAC,2BAAA;AAAA,UAACG,MAAA;AAAA,UAAA;AAAA,YACC;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UAAA;AAAA,QAAA,GAEJ;AAAA,uCAEDJ,KAAAA,QAAO,EAAA,MAAI,MAAC,WAAW,QAAQ,kBAC9B,UAAAC,2BAAA;AAAA,UAACI,WAAA;AAAA,UAAA;AAAA,YACC,WAAU;AAAA,YACV,OAAO,OAAO,KAAK,OAAO,WAAW,OAAO,KAAK,OAAO;AAAA,YACxD,SAAS,MACP,sBACI,eAAe,EAAE,MAAM,eAAe,IAAI,IAC1C,UAAU;AAAA,cACR,SAAS,CAAC,EAAE,MAAM,eAAe,IAAI;AAAA,cACrC,QAAQ,OAAO,KAAK;AAAA,YAAA,CACrB;AAAA,YAEP,UAAU;AAAA,YAEV,UAAAJ,2BAAAA,IAACK,gBAAAA,QAAO,EAAA,MAAK,OAAO,CAAA;AAAA,UAAA;AAAA,QAAA,GAExB;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGN;;;"}
@@ -50,7 +50,7 @@ const { useClasses, staticClasses } = classes.createClasses(
50
50
  "&>div:not(:last-child)": {
51
51
  paddingRight: 0
52
52
  },
53
- "&>div:not(:first-child)": {
53
+ "&>div:not(:first-of-type)": {
54
54
  marginTop: uikitStyles.theme.space.xs
55
55
  }
56
56
  }
@@ -1 +1 @@
1
- {"version":3,"file":"Rule.styles.cjs","sources":["../../../../src/QueryBuilder/Rule/Rule.styles.tsx"],"sourcesContent":["import { theme } from \"@hitachivantara/uikit-styles\";\n\nimport { createClasses } from \"../../utils/classes\";\n\nimport { staticClasses as queryBuilderClasses } from \"../QueryBuilder.styles\";\n\nexport const { useClasses, staticClasses } = createClasses(\n \"HvQueryBuilder-Rule\",\n {\n root: {\n position: \"relative\",\n marginTop: theme.space.xs,\n minHeight: 94,\n\n \"&>div:not(:last-child)\": {\n paddingRight: theme.space.md,\n },\n\n // hide required * as all fields are required\n \"& label>span[aria-hidden]\": {\n visibility: \"hidden\",\n },\n\n \"&::before\": {\n content: '\"\"',\n position: \"absolute\",\n zIndex: 2,\n\n width: \"17px\",\n height: \"39px\",\n\n borderBottom: `1px solid ${theme.colors.atmo4}`,\n borderLeft: `1px solid ${theme.colors.atmo4}`,\n\n top: 0,\n left: `calc(-1 * 17px)`,\n },\n\n [`:not(.${queryBuilderClasses.topRulesContainer})>&:last-child::after`]: {\n content: '\"\"',\n position: \"absolute\",\n zIndex: 1,\n\n width: \"17px\",\n height: \"100%\",\n\n borderLeft: `1px solid ${theme.colors.atmo4}`,\n\n top: 0,\n left: `calc(-1 * 17px)`,\n },\n },\n actionsContainer: {\n marginLeft: \"auto\",\n marginTop: \"24px\",\n\n \"&>:not(:last-child)\": {\n marginRight: theme.space.xs,\n },\n },\n isMdDown: {\n \"&>div:not(:last-child)\": {\n paddingRight: 0,\n },\n \"&>div:not(:first-child)\": {\n marginTop: theme.space.xs,\n },\n },\n }\n);\n"],"names":["createClasses","theme","queryBuilderClasses"],"mappings":";;;;;AAMa,MAAA,EAAE,YAAY,cAAA,IAAkBA,QAAA;AAAA,EAC3C;AAAA,EACA;AAAA,IACE,MAAM;AAAA,MACJ,UAAU;AAAA,MACV,WAAWC,YAAAA,MAAM,MAAM;AAAA,MACvB,WAAW;AAAA,MAEX,0BAA0B;AAAA,QACxB,cAAcA,YAAAA,MAAM,MAAM;AAAA,MAC5B;AAAA;AAAA,MAGA,6BAA6B;AAAA,QAC3B,YAAY;AAAA,MACd;AAAA,MAEA,aAAa;AAAA,QACX,SAAS;AAAA,QACT,UAAU;AAAA,QACV,QAAQ;AAAA,QAER,OAAO;AAAA,QACP,QAAQ;AAAA,QAER,cAAc,aAAaA,YAAM,MAAA,OAAO,KAAK;AAAA,QAC7C,YAAY,aAAaA,YAAM,MAAA,OAAO,KAAK;AAAA,QAE3C,KAAK;AAAA,QACL,MAAM;AAAA,MACR;AAAA,MAEA,CAAC,SAASC,oBAAAA,cAAoB,iBAAiB,uBAAuB,GAAG;AAAA,QACvE,SAAS;AAAA,QACT,UAAU;AAAA,QACV,QAAQ;AAAA,QAER,OAAO;AAAA,QACP,QAAQ;AAAA,QAER,YAAY,aAAaD,YAAM,MAAA,OAAO,KAAK;AAAA,QAE3C,KAAK;AAAA,QACL,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,kBAAkB;AAAA,MAChB,YAAY;AAAA,MACZ,WAAW;AAAA,MAEX,uBAAuB;AAAA,QACrB,aAAaA,YAAAA,MAAM,MAAM;AAAA,MAC3B;AAAA,IACF;AAAA,IACA,UAAU;AAAA,MACR,0BAA0B;AAAA,QACxB,cAAc;AAAA,MAChB;AAAA,MACA,2BAA2B;AAAA,QACzB,WAAWA,YAAAA,MAAM,MAAM;AAAA,MACzB;AAAA,IACF;AAAA,EACF;AACF;;;"}
1
+ {"version":3,"file":"Rule.styles.cjs","sources":["../../../../src/QueryBuilder/Rule/Rule.styles.tsx"],"sourcesContent":["import { theme } from \"@hitachivantara/uikit-styles\";\n\nimport { createClasses } from \"../../utils/classes\";\n\nimport { staticClasses as queryBuilderClasses } from \"../QueryBuilder.styles\";\n\nexport const { useClasses, staticClasses } = createClasses(\n \"HvQueryBuilder-Rule\",\n {\n root: {\n position: \"relative\",\n marginTop: theme.space.xs,\n minHeight: 94,\n\n \"&>div:not(:last-child)\": {\n paddingRight: theme.space.md,\n },\n\n // hide required * as all fields are required\n \"& label>span[aria-hidden]\": {\n visibility: \"hidden\",\n },\n\n \"&::before\": {\n content: '\"\"',\n position: \"absolute\",\n zIndex: 2,\n\n width: \"17px\",\n height: \"39px\",\n\n borderBottom: `1px solid ${theme.colors.atmo4}`,\n borderLeft: `1px solid ${theme.colors.atmo4}`,\n\n top: 0,\n left: `calc(-1 * 17px)`,\n },\n\n [`:not(.${queryBuilderClasses.topRulesContainer})>&:last-child::after`]: {\n content: '\"\"',\n position: \"absolute\",\n zIndex: 1,\n\n width: \"17px\",\n height: \"100%\",\n\n borderLeft: `1px solid ${theme.colors.atmo4}`,\n\n top: 0,\n left: `calc(-1 * 17px)`,\n },\n },\n actionsContainer: {\n marginLeft: \"auto\",\n marginTop: \"24px\",\n\n \"&>:not(:last-child)\": {\n marginRight: theme.space.xs,\n },\n },\n isMdDown: {\n \"&>div:not(:last-child)\": {\n paddingRight: 0,\n },\n \"&>div:not(:first-of-type)\": {\n marginTop: theme.space.xs,\n },\n },\n }\n);\n"],"names":["createClasses","theme","queryBuilderClasses"],"mappings":";;;;;AAMa,MAAA,EAAE,YAAY,cAAA,IAAkBA,QAAA;AAAA,EAC3C;AAAA,EACA;AAAA,IACE,MAAM;AAAA,MACJ,UAAU;AAAA,MACV,WAAWC,YAAAA,MAAM,MAAM;AAAA,MACvB,WAAW;AAAA,MAEX,0BAA0B;AAAA,QACxB,cAAcA,YAAAA,MAAM,MAAM;AAAA,MAC5B;AAAA;AAAA,MAGA,6BAA6B;AAAA,QAC3B,YAAY;AAAA,MACd;AAAA,MAEA,aAAa;AAAA,QACX,SAAS;AAAA,QACT,UAAU;AAAA,QACV,QAAQ;AAAA,QAER,OAAO;AAAA,QACP,QAAQ;AAAA,QAER,cAAc,aAAaA,YAAM,MAAA,OAAO,KAAK;AAAA,QAC7C,YAAY,aAAaA,YAAM,MAAA,OAAO,KAAK;AAAA,QAE3C,KAAK;AAAA,QACL,MAAM;AAAA,MACR;AAAA,MAEA,CAAC,SAASC,oBAAAA,cAAoB,iBAAiB,uBAAuB,GAAG;AAAA,QACvE,SAAS;AAAA,QACT,UAAU;AAAA,QACV,QAAQ;AAAA,QAER,OAAO;AAAA,QACP,QAAQ;AAAA,QAER,YAAY,aAAaD,YAAM,MAAA,OAAO,KAAK;AAAA,QAE3C,KAAK;AAAA,QACL,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,kBAAkB;AAAA,MAChB,YAAY;AAAA,MACZ,WAAW;AAAA,MAEX,uBAAuB;AAAA,QACrB,aAAaA,YAAAA,MAAM,MAAM;AAAA,MAC3B;AAAA,IACF;AAAA,IACA,UAAU;AAAA,MACR,0BAA0B;AAAA,QACxB,cAAc;AAAA,MAChB;AAAA,MACA,6BAA6B;AAAA,QAC3B,WAAWA,YAAAA,MAAM,MAAM;AAAA,MACzB;AAAA,IACF;AAAA,EACF;AACF;;;"}
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const React = require("react");
4
+ const Context = require("../../../Context.cjs");
5
+ const EmptyValue = ({ id }) => {
6
+ const { dispatchAction } = Context.useQueryBuilderContext();
7
+ React.useEffect(() => {
8
+ dispatchAction({
9
+ type: "set-value",
10
+ id,
11
+ value: null
12
+ });
13
+ }, [dispatchAction, id]);
14
+ return null;
15
+ };
16
+ exports.EmptyValue = EmptyValue;
17
+ //# sourceMappingURL=EmptyValue.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EmptyValue.cjs","sources":["../../../../../../src/QueryBuilder/Rule/Value/EmptyValue/EmptyValue.tsx"],"sourcesContent":["import { useEffect } from \"react\";\n\nimport { useQueryBuilderContext } from \"../../../Context\";\n\nexport interface EmptyValueProps {\n id: React.Key;\n}\n\nexport const EmptyValue = ({ id }: EmptyValueProps) => {\n const { dispatchAction } = useQueryBuilderContext();\n\n // Clear value on first render\n useEffect(() => {\n dispatchAction({\n type: \"set-value\",\n id,\n value: null,\n });\n }, [dispatchAction, id]);\n\n return null;\n};\n"],"names":["useQueryBuilderContext","useEffect"],"mappings":";;;;AAQO,MAAM,aAAa,CAAC,EAAE,SAA0B;AAC/C,QAAA,EAAE,mBAAmBA,QAAAA;AAG3BC,QAAAA,UAAU,MAAM;AACC,mBAAA;AAAA,MACb,MAAM;AAAA,MACN;AAAA,MACA,OAAO;AAAA,IAAA,CACR;AAAA,EAAA,GACA,CAAC,gBAAgB,EAAE,CAAC;AAEhB,SAAA;AACT;;"}
@@ -3,20 +3,44 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
3
  const jsxRuntime = require("@emotion/react/jsx-runtime");
4
4
  const React = require("react");
5
5
  const Context = require("../../Context.cjs");
6
+ const types = require("../../types.cjs");
7
+ const EmptyValue = require("./EmptyValue/EmptyValue.cjs");
6
8
  const TextValue = require("./TextValue/TextValue.cjs");
7
9
  const DateTimeValue = require("./DateTimeValue/DateTimeValue.cjs");
8
10
  const NumericValue = require("./NumericValue/NumericValue.cjs");
9
11
  const BooleanValue = require("./BooleanValue/BooleanValue.cjs");
12
+ const getRenderer = (renderer, operator) => (
13
+ // 1. Custom renderer
14
+ typeof renderer === "function" && renderer || // 2. Custom operator renderer
15
+ typeof renderer === "object" && operator && renderer[operator] || // 3. Custom DEFAULT renderer
16
+ typeof renderer === "object" && renderer[types.defaultRendererKey]
17
+ );
10
18
  const Value = ({
11
19
  id,
12
20
  attribute,
13
21
  operator,
14
22
  value: valueProp
15
23
  }) => {
16
- const { attributes, initialTouched, renderers } = Context.useQueryBuilderContext();
17
- const value = attribute && attributes ? { ...attributes[attribute] } : { type: null };
18
- const { type } = value;
19
- switch (type) {
24
+ const { attributes, initialTouched, renderers, emptyRenderer } = Context.useQueryBuilderContext();
25
+ const attrType = attribute && attributes ? attributes[attribute].type : void 0;
26
+ if (emptyRenderer?.find((op) => op === operator)) {
27
+ return /* @__PURE__ */ jsxRuntime.jsx(EmptyValue.EmptyValue, { id });
28
+ }
29
+ if (attrType && renderers?.[attrType]) {
30
+ const Renderer = getRenderer(renderers[attrType], operator) || getRenderer(renderers[types.defaultRendererKey], operator) || void 0;
31
+ if (Renderer) {
32
+ return /* @__PURE__ */ jsxRuntime.jsx(
33
+ Renderer,
34
+ {
35
+ id,
36
+ attribute,
37
+ operator,
38
+ value: valueProp
39
+ }
40
+ );
41
+ }
42
+ }
43
+ switch (attrType) {
20
44
  case "boolean": {
21
45
  return /* @__PURE__ */ jsxRuntime.jsx(BooleanValue.BooleanValue, { id, value: !!valueProp });
22
46
  }
@@ -44,22 +68,8 @@ const Value = ({
44
68
  }
45
69
  case "text":
46
70
  case "textarea":
71
+ default:
47
72
  return /* @__PURE__ */ jsxRuntime.jsx(TextValue.TextValue, { id, value: valueProp, initialTouched });
48
- default: {
49
- if (type && renderers?.[type]) {
50
- const Renderer = renderers[type];
51
- return /* @__PURE__ */ jsxRuntime.jsx(
52
- Renderer,
53
- {
54
- id,
55
- attribute,
56
- operator,
57
- value: valueProp
58
- }
59
- );
60
- }
61
- return /* @__PURE__ */ jsxRuntime.jsx(TextValue.TextValue, { id, value: valueProp, initialTouched });
62
- }
63
73
  }
64
74
  };
65
75
  React.memo(Value);
@@ -1 +1 @@
1
- {"version":3,"file":"Value.cjs","sources":["../../../../../src/QueryBuilder/Rule/Value/Value.tsx"],"sourcesContent":["import { memo } from \"react\";\n\nimport { useQueryBuilderContext } from \"../../Context\";\nimport { BooleanValue } from \"./BooleanValue\";\nimport { NumericValue } from \"./NumericValue\";\nimport { TextValue } from \"./TextValue\";\nimport { DateTimeValue } from \"./DateTimeValue\";\n\nexport interface ValueProps {\n id: React.Key;\n attribute: string;\n operator?: string;\n value?: any;\n}\n\nexport const Value = ({\n id,\n attribute,\n operator,\n value: valueProp,\n}: ValueProps) => {\n const { attributes, initialTouched, renderers } = useQueryBuilderContext();\n\n const value =\n attribute && attributes ? { ...attributes[attribute] } : { type: null };\n const { type } = value;\n\n switch (type) {\n case \"boolean\": {\n return <BooleanValue id={id} value={!!valueProp} />;\n }\n case \"numeric\": {\n return (\n <NumericValue\n id={id}\n operator={operator}\n value={valueProp}\n initialTouched={initialTouched}\n />\n );\n }\n case \"dateandtime\": {\n return (\n <DateTimeValue\n id={id}\n operator={operator}\n value={valueProp}\n initialTouched={initialTouched}\n />\n );\n }\n case \"text\":\n case \"textarea\":\n return (\n <TextValue id={id} value={valueProp} initialTouched={initialTouched} />\n );\n default: {\n if (type && renderers?.[type]) {\n const Renderer = renderers[type];\n\n return (\n <Renderer\n id={id}\n attribute={attribute}\n operator={operator}\n value={valueProp}\n />\n );\n }\n\n return (\n <TextValue id={id} value={valueProp} initialTouched={initialTouched} />\n );\n }\n }\n};\n\nexport default memo(Value);\n"],"names":["useQueryBuilderContext","BooleanValue","jsx","NumericValue","DateTimeValue","TextValue","memo"],"mappings":";;;;;;;;;AAeO,MAAM,QAAQ,CAAC;AAAA,EACpB;AAAA,EACA;AAAA,EACA;AAAA,EACA,OAAO;AACT,MAAkB;AAChB,QAAM,EAAE,YAAY,gBAAgB,cAAcA,QAAuB,uBAAA;AAEnE,QAAA,QACJ,aAAa,aAAa,EAAE,GAAG,WAAW,SAAS,MAAM,EAAE,MAAM;AAC7D,QAAA,EAAE,KAAS,IAAA;AAEjB,UAAQ,MAAM;AAAA,IACZ,KAAK,WAAW;AACd,4CAAQC,aAAAA,cAAa,EAAA,IAAQ,OAAO,CAAC,CAAC,UAAW,CAAA;AAAA,IACnD;AAAA,IACA,KAAK,WAAW;AAEZ,aAAAC,2BAAA;AAAA,QAACC,aAAA;AAAA,QAAA;AAAA,UACC;AAAA,UACA;AAAA,UACA,OAAO;AAAA,UACP;AAAA,QAAA;AAAA,MAAA;AAAA,IAGN;AAAA,IACA,KAAK,eAAe;AAEhB,aAAAD,2BAAA;AAAA,QAACE,cAAA;AAAA,QAAA;AAAA,UACC;AAAA,UACA;AAAA,UACA,OAAO;AAAA,UACP;AAAA,QAAA;AAAA,MAAA;AAAA,IAGN;AAAA,IACA,KAAK;AAAA,IACL,KAAK;AACH,aACGF,2BAAAA,IAAAG,UAAAA,WAAA,EAAU,IAAQ,OAAO,WAAW,eAAgC,CAAA;AAAA,IAEzE,SAAS;AACH,UAAA,QAAQ,YAAY,IAAI,GAAG;AACvB,cAAA,WAAW,UAAU,IAAI;AAG7B,eAAAH,2BAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YACC;AAAA,YACA;AAAA,YACA;AAAA,YACA,OAAO;AAAA,UAAA;AAAA,QAAA;AAAA,MAGb;AAEA,aACGA,2BAAAA,IAAAG,UAAAA,WAAA,EAAU,IAAQ,OAAO,WAAW,eAAgC,CAAA;AAAA,IAEzE;AAAA,EACF;AACF;AAEeC,WAAK,KAAK;;"}
1
+ {"version":3,"file":"Value.cjs","sources":["../../../../../src/QueryBuilder/Rule/Value/Value.tsx"],"sourcesContent":["import { memo } from \"react\";\n\nimport { useQueryBuilderContext } from \"../../Context\";\nimport { BooleanValue } from \"./BooleanValue\";\nimport { NumericValue } from \"./NumericValue\";\nimport { TextValue } from \"./TextValue\";\nimport { DateTimeValue } from \"./DateTimeValue\";\nimport {\n HvQueryBuilderRendererProps,\n ValueRenderer,\n defaultRendererKey,\n} from \"../../types\";\nimport { EmptyValue } from \"./EmptyValue\";\n\nexport interface ValueProps {\n id: React.Key;\n attribute: string;\n operator?: string;\n value?: any;\n}\n\nconst getRenderer = (renderer: ValueRenderer, operator?: string) =>\n // 1. Custom renderer\n (typeof renderer === \"function\" && renderer) ||\n // 2. Custom operator renderer\n (typeof renderer === \"object\" && operator && renderer[operator]) ||\n // 3. Custom DEFAULT renderer\n (typeof renderer === \"object\" && renderer[defaultRendererKey]);\n\nexport const Value = ({\n id,\n attribute,\n operator,\n value: valueProp,\n}: ValueProps) => {\n const { attributes, initialTouched, renderers, emptyRenderer } =\n useQueryBuilderContext();\n\n const attrType =\n attribute && attributes ? attributes[attribute].type : undefined;\n\n // Empty value renderer\n if (emptyRenderer?.find((op) => op === operator)) {\n return <EmptyValue id={id} />;\n }\n\n // Custom renderer\n if (attrType && renderers?.[attrType]) {\n // Renderer to be used by order:\n // 1. Custom attribute renderer\n // 2. Custom attribute-operator renderer\n // 3. Custom attribute-DEFAULT renderer\n // 4. Custom master DEFAULT renderer\n // 5. Custom master DEFAULT-operator renderer\n // 6. Custom master DEFAULT-DEFAULT renderer\n const Renderer: React.FC<HvQueryBuilderRendererProps> | undefined =\n getRenderer(renderers[attrType], operator) ||\n getRenderer(renderers[defaultRendererKey], operator) ||\n undefined;\n\n if (Renderer) {\n return (\n <Renderer\n id={id}\n attribute={attribute}\n operator={operator}\n value={valueProp}\n />\n );\n }\n }\n\n // Built-in attributes\n switch (attrType) {\n case \"boolean\": {\n return <BooleanValue id={id} value={!!valueProp} />;\n }\n case \"numeric\": {\n return (\n <NumericValue\n id={id}\n operator={operator}\n value={valueProp}\n initialTouched={initialTouched}\n />\n );\n }\n case \"dateandtime\": {\n return (\n <DateTimeValue\n id={id}\n operator={operator}\n value={valueProp}\n initialTouched={initialTouched}\n />\n );\n }\n case \"text\":\n case \"textarea\":\n default:\n return (\n <TextValue id={id} value={valueProp} initialTouched={initialTouched} />\n );\n }\n};\n\nexport default memo(Value);\n"],"names":["defaultRendererKey","useQueryBuilderContext","jsx","EmptyValue","BooleanValue","NumericValue","DateTimeValue","TextValue","memo"],"mappings":";;;;;;;;;;;AAqBA,MAAM,cAAc,CAAC,UAAyB;AAAA;AAAA,EAE3C,OAAO,aAAa,cAAc;AAAA,EAElC,OAAO,aAAa,YAAY,YAAY,SAAS,QAAQ;AAAA,EAE7D,OAAO,aAAa,YAAY,SAASA,wBAAkB;AAAA;AAEvD,MAAM,QAAQ,CAAC;AAAA,EACpB;AAAA,EACA;AAAA,EACA;AAAA,EACA,OAAO;AACT,MAAkB;AAChB,QAAM,EAAE,YAAY,gBAAgB,WAAW,cAAA,IAC7CC,QAAAA;AAEF,QAAM,WACJ,aAAa,aAAa,WAAW,SAAS,EAAE,OAAO;AAGzD,MAAI,eAAe,KAAK,CAAC,OAAO,OAAO,QAAQ,GAAG;AACzC,WAAAC,+BAACC,WAAAA,cAAW,GAAQ,CAAA;AAAA,EAC7B;AAGI,MAAA,YAAY,YAAY,QAAQ,GAAG;AAQrC,UAAM,WACJ,YAAY,UAAU,QAAQ,GAAG,QAAQ,KACzC,YAAY,UAAUH,MAAkB,kBAAA,GAAG,QAAQ,KACnD;AAEF,QAAI,UAAU;AAEV,aAAAE,2BAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACC;AAAA,UACA;AAAA,UACA;AAAA,UACA,OAAO;AAAA,QAAA;AAAA,MAAA;AAAA,IAGb;AAAA,EACF;AAGA,UAAQ,UAAU;AAAA,IAChB,KAAK,WAAW;AACd,4CAAQE,aAAAA,cAAa,EAAA,IAAQ,OAAO,CAAC,CAAC,UAAW,CAAA;AAAA,IACnD;AAAA,IACA,KAAK,WAAW;AAEZ,aAAAF,2BAAA;AAAA,QAACG,aAAA;AAAA,QAAA;AAAA,UACC;AAAA,UACA;AAAA,UACA,OAAO;AAAA,UACP;AAAA,QAAA;AAAA,MAAA;AAAA,IAGN;AAAA,IACA,KAAK,eAAe;AAEhB,aAAAH,2BAAA;AAAA,QAACI,cAAA;AAAA,QAAA;AAAA,UACC;AAAA,UACA;AAAA,UACA,OAAO;AAAA,UACP;AAAA,QAAA;AAAA,MAAA;AAAA,IAGN;AAAA,IACA,KAAK;AAAA,IACL,KAAK;AAAA,IACL;AACE,aACGJ,2BAAAA,IAAAK,UAAAA,WAAA,EAAU,IAAQ,OAAO,WAAW,eAAgC,CAAA;AAAA,EAE3E;AACF;AAEeC,WAAK,KAAK;;"}
@@ -166,6 +166,7 @@ const RuleGroup = ({
166
166
  dispatchAction({ type: "add-rule", id });
167
167
  },
168
168
  className: classes.createConditionButton,
169
+ disabled: readOnly,
169
170
  children: `${labels.empty?.createCondition}`
170
171
  }
171
172
  ),
@@ -180,6 +181,7 @@ const RuleGroup = ({
180
181
  dispatchAction({ type: "add-group", id });
181
182
  },
182
183
  className: classes.createGroupButton,
184
+ disabled: readOnly,
183
185
  children: `${labels.empty?.createGroup}`
184
186
  }
185
187
  )