@carbon/ibm-products 2.36.0-alpha.27 → 2.37.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (186) hide show
  1. package/css/index-full-carbon.css +5404 -5117
  2. package/css/index-full-carbon.css.map +1 -1
  3. package/css/index-full-carbon.min.css +1 -1
  4. package/css/index-full-carbon.min.css.map +1 -1
  5. package/css/index-without-carbon-released-only.css +4 -4
  6. package/css/index-without-carbon-released-only.css.map +1 -1
  7. package/css/index-without-carbon-released-only.min.css +1 -1
  8. package/css/index-without-carbon-released-only.min.css.map +1 -1
  9. package/css/index-without-carbon.css +820 -61
  10. package/css/index-without-carbon.css.map +1 -1
  11. package/css/index-without-carbon.min.css +1 -1
  12. package/css/index-without-carbon.min.css.map +1 -1
  13. package/css/index.css +329 -6
  14. package/css/index.css.map +1 -1
  15. package/css/index.min.css +1 -1
  16. package/css/index.min.css.map +1 -1
  17. package/es/_virtual/_rollupPluginBabelHelpers.js +9 -10
  18. package/es/components/BreadcrumbWithOverflow/BreadcrumbWithOverflow.d.ts +3 -1
  19. package/es/components/BreadcrumbWithOverflow/BreadcrumbWithOverflow.js +8 -2
  20. package/es/components/Carousel/Carousel.d.ts +46 -2
  21. package/es/components/Carousel/Carousel.js +36 -21
  22. package/es/components/Carousel/CarouselItem.d.ts +19 -2
  23. package/es/components/Carousel/CarouselItem.js +0 -1
  24. package/es/components/ConditionBuilder/ConditionBlock/ConditionBlock.d.ts +21 -0
  25. package/es/components/ConditionBuilder/ConditionBlock/ConditionBlock.js +261 -0
  26. package/es/components/ConditionBuilder/ConditionBuilder.js +45 -16
  27. package/es/components/ConditionBuilder/ConditionBuilderAdd/ConditionBuilderAdd.d.ts +12 -0
  28. package/es/components/ConditionBuilder/ConditionBuilderAdd/ConditionBuilderAdd.js +40 -0
  29. package/es/components/ConditionBuilder/ConditionBuilderButton/ConditionBuilderButton.d.ts +22 -0
  30. package/es/components/ConditionBuilder/ConditionBuilderButton/ConditionBuilderButton.js +74 -0
  31. package/es/components/ConditionBuilder/ConditionBuilderContent/ConditionBuilderContent.d.ts +18 -1
  32. package/es/components/ConditionBuilder/ConditionBuilderContent/ConditionBuilderContent.js +90 -42
  33. package/es/components/ConditionBuilder/ConditionBuilderContext/{DataTreeContext.d.ts → ConditionBuilderProvider.d.ts} +5 -2
  34. package/es/components/ConditionBuilder/ConditionBuilderContext/{DataTreeContext.js → ConditionBuilderProvider.js} +27 -8
  35. package/es/components/ConditionBuilder/ConditionBuilderContext/DataConfigs.d.ts +22 -0
  36. package/es/components/ConditionBuilder/ConditionBuilderContext/DataConfigs.js +112 -0
  37. package/es/components/ConditionBuilder/ConditionBuilderContext/translationObject.d.ts +31 -0
  38. package/es/components/ConditionBuilder/ConditionBuilderContext/translationObject.js +40 -0
  39. package/es/components/ConditionBuilder/ConditionBuilderItem/ConditionBuilderItem.d.ts +28 -0
  40. package/es/components/ConditionBuilder/ConditionBuilderItem/ConditionBuilderItem.js +151 -0
  41. package/es/components/ConditionBuilder/ConditionBuilderItem/ConditionBuilderItemDate/ConditionBuilderItemDate.d.ts +11 -0
  42. package/es/components/ConditionBuilder/ConditionBuilderItem/ConditionBuilderItemDate/ConditionBuilderItemDate.js +59 -0
  43. package/es/components/ConditionBuilder/ConditionBuilderItem/ConditionBuilderItemNumber/ConditionBuilderItemNumber.d.ts +13 -0
  44. package/es/components/ConditionBuilder/ConditionBuilderItem/ConditionBuilderItemNumber/ConditionBuilderItemNumber.js +52 -0
  45. package/es/components/ConditionBuilder/ConditionBuilderItem/ConditionBuilderItemOption/ConditionBuilderItemOption.d.ts +13 -0
  46. package/es/components/ConditionBuilder/ConditionBuilderItem/ConditionBuilderItemOption/ConditionBuilderItemOption.js +162 -0
  47. package/es/components/ConditionBuilder/ConditionBuilderItem/ConditionBuilderItemText/ConditionBuilderItemText.d.ts +11 -0
  48. package/es/components/ConditionBuilder/ConditionBuilderItem/ConditionBuilderItemText/ConditionBuilderItemText.js +40 -0
  49. package/es/components/ConditionBuilder/ConditionBuilderItem/ConditionBuilderItemTime/ConditionBuilderItemTime.d.ts +11 -0
  50. package/es/components/ConditionBuilder/ConditionBuilderItem/ConditionBuilderItemTime/ConditionBuilderItemTime.js +82 -0
  51. package/es/components/ConditionBuilder/ConditionConnector/ConditionConnector.d.ts +15 -0
  52. package/es/components/ConditionBuilder/ConditionConnector/ConditionConnector.js +85 -0
  53. package/es/components/ConditionBuilder/ConditionGroupBuilder/ConditionGroupBuilder.d.ts +24 -0
  54. package/es/components/ConditionBuilder/ConditionGroupBuilder/ConditionGroupBuilder.js +145 -0
  55. package/es/components/ConditionBuilder/utils/util.d.ts +4 -0
  56. package/es/components/ConditionBuilder/utils/util.js +16 -0
  57. package/es/components/CreateTearsheet/CreateTearsheet.d.ts +106 -4
  58. package/es/components/CreateTearsheet/CreateTearsheet.js +12 -32
  59. package/es/components/Datagrid/useParentDimensions.js +1 -1
  60. package/es/components/EditUpdateCards/EditUpdateCards.d.ts +104 -2
  61. package/es/components/EditUpdateCards/EditUpdateCards.js +3 -0
  62. package/es/components/EmptyStates/NotificationsEmptyState/NotificationsEmptyState.d.ts +61 -2
  63. package/es/components/EmptyStates/NotificationsEmptyState/NotificationsEmptyState.js +1 -3
  64. package/es/components/ExpressiveCard/ExpressiveCard.d.ts +97 -2
  65. package/es/components/ExpressiveCard/ExpressiveCard.js +4 -0
  66. package/es/components/InlineTip/InlineTipButton.d.ts +21 -2
  67. package/es/components/InterstitialScreen/InterstitialScreen.d.ts +100 -2
  68. package/es/components/InterstitialScreen/InterstitialScreen.js +25 -14
  69. package/es/components/Nav/NavItem.js +1 -1
  70. package/es/components/NotificationsPanel/NotificationsPanel.js +5 -6
  71. package/es/components/PageHeader/PageHeader.js +12 -3
  72. package/es/components/SidePanel/SidePanel.js +1 -1
  73. package/es/components/SimpleHeader/SimpleHeader.d.ts +1 -5
  74. package/es/components/SimpleHeader/SimpleHeader.js +2 -4
  75. package/es/components/Tearsheet/TearsheetNarrow.d.ts +4 -13
  76. package/es/components/Tearsheet/TearsheetShell.d.ts +119 -10
  77. package/es/components/Tearsheet/TearsheetShell.js +18 -8
  78. package/es/components/UserProfileImage/UserProfileImage.d.ts +66 -2
  79. package/es/components/UserProfileImage/UserProfileImage.js +5 -3
  80. package/es/components/WebTerminal/WebTerminal.d.ts +46 -2
  81. package/es/components/WebTerminal/WebTerminal.js +2 -2
  82. package/es/global/js/hooks/usePrefersReducedMotion.d.ts +2 -0
  83. package/es/global/js/hooks/usePrefersReducedMotion.js +28 -0
  84. package/es/global/js/utils/Wrap.d.ts +31 -2
  85. package/es/global/js/utils/Wrap.js +7 -9
  86. package/es/global/js/utils/getNodeTextContent.d.ts +1 -1
  87. package/es/global/js/utils/getNodeTextContent.js +1 -1
  88. package/es/global/js/utils/window.d.ts +2 -0
  89. package/es/global/js/utils/window.js +12 -0
  90. package/es/node_modules/@carbon/icons-react/es/generated/bucket-9.js +2780 -0
  91. package/lib/_virtual/_rollupPluginBabelHelpers.js +9 -10
  92. package/lib/components/BreadcrumbWithOverflow/BreadcrumbWithOverflow.d.ts +3 -1
  93. package/lib/components/BreadcrumbWithOverflow/BreadcrumbWithOverflow.js +8 -2
  94. package/lib/components/Carousel/Carousel.d.ts +46 -2
  95. package/lib/components/Carousel/Carousel.js +35 -20
  96. package/lib/components/Carousel/CarouselItem.d.ts +19 -2
  97. package/lib/components/Carousel/CarouselItem.js +0 -1
  98. package/lib/components/ConditionBuilder/ConditionBlock/ConditionBlock.d.ts +21 -0
  99. package/lib/components/ConditionBuilder/ConditionBlock/ConditionBlock.js +270 -0
  100. package/lib/components/ConditionBuilder/ConditionBuilder.js +46 -17
  101. package/lib/components/ConditionBuilder/ConditionBuilderAdd/ConditionBuilderAdd.d.ts +12 -0
  102. package/lib/components/ConditionBuilder/ConditionBuilderAdd/ConditionBuilderAdd.js +48 -0
  103. package/lib/components/ConditionBuilder/ConditionBuilderButton/ConditionBuilderButton.d.ts +22 -0
  104. package/lib/components/ConditionBuilder/ConditionBuilderButton/ConditionBuilderButton.js +83 -0
  105. package/lib/components/ConditionBuilder/ConditionBuilderContent/ConditionBuilderContent.d.ts +18 -1
  106. package/lib/components/ConditionBuilder/ConditionBuilderContent/ConditionBuilderContent.js +90 -42
  107. package/lib/components/ConditionBuilder/ConditionBuilderContext/{DataTreeContext.d.ts → ConditionBuilderProvider.d.ts} +5 -2
  108. package/lib/components/ConditionBuilder/ConditionBuilderContext/{DataTreeContext.js → ConditionBuilderProvider.js} +27 -8
  109. package/lib/components/ConditionBuilder/ConditionBuilderContext/DataConfigs.d.ts +22 -0
  110. package/lib/components/ConditionBuilder/ConditionBuilderContext/DataConfigs.js +121 -0
  111. package/lib/components/ConditionBuilder/ConditionBuilderContext/translationObject.d.ts +31 -0
  112. package/lib/components/ConditionBuilder/ConditionBuilderContext/translationObject.js +44 -0
  113. package/lib/components/ConditionBuilder/ConditionBuilderItem/ConditionBuilderItem.d.ts +28 -0
  114. package/lib/components/ConditionBuilder/ConditionBuilderItem/ConditionBuilderItem.js +159 -0
  115. package/lib/components/ConditionBuilder/ConditionBuilderItem/ConditionBuilderItemDate/ConditionBuilderItemDate.d.ts +11 -0
  116. package/lib/components/ConditionBuilder/ConditionBuilderItem/ConditionBuilderItemDate/ConditionBuilderItemDate.js +67 -0
  117. package/lib/components/ConditionBuilder/ConditionBuilderItem/ConditionBuilderItemNumber/ConditionBuilderItemNumber.d.ts +13 -0
  118. package/lib/components/ConditionBuilder/ConditionBuilderItem/ConditionBuilderItemNumber/ConditionBuilderItemNumber.js +60 -0
  119. package/lib/components/ConditionBuilder/ConditionBuilderItem/ConditionBuilderItemOption/ConditionBuilderItemOption.d.ts +13 -0
  120. package/lib/components/ConditionBuilder/ConditionBuilderItem/ConditionBuilderItemOption/ConditionBuilderItemOption.js +170 -0
  121. package/lib/components/ConditionBuilder/ConditionBuilderItem/ConditionBuilderItemText/ConditionBuilderItemText.d.ts +11 -0
  122. package/lib/components/ConditionBuilder/ConditionBuilderItem/ConditionBuilderItemText/ConditionBuilderItemText.js +48 -0
  123. package/lib/components/ConditionBuilder/ConditionBuilderItem/ConditionBuilderItemTime/ConditionBuilderItemTime.d.ts +11 -0
  124. package/lib/components/ConditionBuilder/ConditionBuilderItem/ConditionBuilderItemTime/ConditionBuilderItemTime.js +90 -0
  125. package/lib/components/ConditionBuilder/ConditionConnector/ConditionConnector.d.ts +15 -0
  126. package/lib/components/ConditionBuilder/ConditionConnector/ConditionConnector.js +93 -0
  127. package/lib/components/ConditionBuilder/ConditionGroupBuilder/ConditionGroupBuilder.d.ts +24 -0
  128. package/lib/components/ConditionBuilder/ConditionGroupBuilder/ConditionGroupBuilder.js +153 -0
  129. package/lib/components/ConditionBuilder/utils/util.d.ts +4 -0
  130. package/lib/components/ConditionBuilder/utils/util.js +20 -0
  131. package/lib/components/CreateTearsheet/CreateTearsheet.d.ts +106 -4
  132. package/lib/components/CreateTearsheet/CreateTearsheet.js +12 -32
  133. package/lib/components/Datagrid/useParentDimensions.js +1 -1
  134. package/lib/components/EditUpdateCards/EditUpdateCards.d.ts +104 -2
  135. package/lib/components/EditUpdateCards/EditUpdateCards.js +3 -0
  136. package/lib/components/EmptyStates/NotificationsEmptyState/NotificationsEmptyState.d.ts +61 -2
  137. package/lib/components/EmptyStates/NotificationsEmptyState/NotificationsEmptyState.js +1 -3
  138. package/lib/components/ExpressiveCard/ExpressiveCard.d.ts +97 -2
  139. package/lib/components/ExpressiveCard/ExpressiveCard.js +4 -0
  140. package/lib/components/InlineTip/InlineTipButton.d.ts +21 -2
  141. package/lib/components/InterstitialScreen/InterstitialScreen.d.ts +100 -2
  142. package/lib/components/InterstitialScreen/InterstitialScreen.js +24 -13
  143. package/lib/components/Nav/NavItem.js +2 -2
  144. package/lib/components/NotificationsPanel/NotificationsPanel.js +5 -6
  145. package/lib/components/PageHeader/PageHeader.js +11 -2
  146. package/lib/components/SidePanel/SidePanel.js +1 -1
  147. package/lib/components/SimpleHeader/SimpleHeader.d.ts +1 -5
  148. package/lib/components/SimpleHeader/SimpleHeader.js +2 -4
  149. package/lib/components/Tearsheet/TearsheetNarrow.d.ts +4 -13
  150. package/lib/components/Tearsheet/TearsheetShell.d.ts +119 -10
  151. package/lib/components/Tearsheet/TearsheetShell.js +16 -6
  152. package/lib/components/UserProfileImage/UserProfileImage.d.ts +66 -2
  153. package/lib/components/UserProfileImage/UserProfileImage.js +5 -3
  154. package/lib/components/WebTerminal/WebTerminal.d.ts +46 -2
  155. package/lib/components/WebTerminal/WebTerminal.js +2 -2
  156. package/lib/global/js/hooks/usePrefersReducedMotion.d.ts +2 -0
  157. package/lib/global/js/hooks/usePrefersReducedMotion.js +32 -0
  158. package/lib/global/js/utils/Wrap.d.ts +31 -2
  159. package/lib/global/js/utils/Wrap.js +7 -9
  160. package/lib/global/js/utils/getNodeTextContent.d.ts +1 -1
  161. package/lib/global/js/utils/getNodeTextContent.js +1 -1
  162. package/lib/global/js/utils/window.d.ts +2 -0
  163. package/lib/global/js/utils/window.js +16 -0
  164. package/lib/node_modules/@carbon/icons-react/es/generated/bucket-9.js +2912 -0
  165. package/package.json +5 -5
  166. package/scss/components/CoachmarkOverlayElements/_coachmark-overlay-elements.scss +1 -1
  167. package/scss/components/ConditionBuilder/_condition-builder.scss +26 -0
  168. package/scss/components/ConditionBuilder/styles/_conditionBuilderCondition.scss +46 -0
  169. package/scss/components/ConditionBuilder/styles/_conditionBuilderItem.scss +194 -0
  170. package/scss/components/ConditionBuilder/styles/_index.scss +2 -0
  171. package/scss/components/Guidebanner/_guidebanner.scss +3 -0
  172. package/scss/components/InterstitialScreen/_interstitial-screen.scss +1 -6
  173. package/scss/components/Tearsheet/_tearsheet.scss +3 -1
  174. package/telemetry.yml +3 -0
  175. package/es/components/ConditionBuilder/assets/sampleInput.d.ts +0 -58
  176. package/es/global/js/utils/keyboardNavigation.d.ts +0 -27
  177. package/es/global/js/utils/keyboardNavigation.js +0 -33
  178. package/es/global/js/utils/wrapFocus.d.ts +0 -25
  179. package/es/global/js/utils/wrapFocus.js +0 -68
  180. package/es/node_modules/@carbon/icons-react/es/generated/bucket-8.js +0 -3004
  181. package/lib/components/ConditionBuilder/assets/sampleInput.d.ts +0 -58
  182. package/lib/global/js/utils/keyboardNavigation.d.ts +0 -27
  183. package/lib/global/js/utils/keyboardNavigation.js +0 -39
  184. package/lib/global/js/utils/wrapFocus.d.ts +0 -25
  185. package/lib/global/js/utils/wrapFocus.js +0 -73
  186. package/lib/node_modules/@carbon/icons-react/es/generated/bucket-8.js +0 -3136
@@ -6,22 +6,21 @@
6
6
  */
7
7
 
8
8
  import { objectWithoutProperties as _objectWithoutProperties, extends as _extends } from '../../_virtual/_rollupPluginBabelHelpers.js';
9
- import React__default from 'react';
9
+ import React__default, { useRef } from 'react';
10
10
  import { VStack } from '@carbon/react';
11
11
  import PropTypes from '../../node_modules/prop-types/index.js';
12
12
  import cx from 'classnames';
13
13
  import { getDevtoolsProps } from '../../global/js/utils/devtools.js';
14
- import { pkg } from '../../settings.js';
15
14
  import ConditionBuilderContent from './ConditionBuilderContent/ConditionBuilderContent.js';
16
- import { ConditionBuilderProvider } from './ConditionBuilderContext/DataTreeContext.js';
15
+ import { ConditionBuilderProvider } from './ConditionBuilderContext/ConditionBuilderProvider.js';
16
+ import { pkg } from '../../settings.js';
17
+ import { blockClass } from './ConditionBuilderContext/DataConfigs.js';
17
18
 
18
- var _excluded = ["className", "inputConfig", "startConditionLabel", "popOverSearchThreshold"];
19
+ var _excluded = ["className", "inputConfig", "startConditionLabel", "popOverSearchThreshold", "getOptions", "initialState", "getConditionState", "variant"];
19
20
 
20
21
  // Carbon and package components we use.
21
22
  /* TODO: @import(s) of carbon components and other package components. */
22
23
 
23
- // The block part of our conventional BEM class names (blockClass__E--M).
24
- var blockClass = "".concat(pkg.prefix, "--condition-builder");
25
24
  var componentName = 'ConditionBuilder';
26
25
 
27
26
  // NOTE: the component SCSS is not imported here: it is rolled up separately.
@@ -49,10 +48,18 @@ var ConditionBuilder = /*#__PURE__*/React__default.forwardRef(function (_ref, re
49
48
  inputConfig = _ref.inputConfig,
50
49
  startConditionLabel = _ref.startConditionLabel,
51
50
  popOverSearchThreshold = _ref.popOverSearchThreshold,
51
+ getOptions = _ref.getOptions,
52
+ initialState = _ref.initialState,
53
+ getConditionState = _ref.getConditionState,
54
+ variant = _ref.variant,
52
55
  rest = _objectWithoutProperties(_ref, _excluded);
56
+ var localRef = useRef();
57
+ var conditionBuilderRef = ref || localRef;
53
58
  return /*#__PURE__*/React__default.createElement(ConditionBuilderProvider, {
54
59
  inputConfig: inputConfig,
55
- popOverSearchThreshold: popOverSearchThreshold
60
+ popOverSearchThreshold: popOverSearchThreshold,
61
+ getOptions: getOptions,
62
+ variant: variant
56
63
  }, /*#__PURE__*/React__default.createElement("div", _extends({}, rest, {
57
64
  className: cx(blockClass,
58
65
  // Apply the block class to the main HTML element
@@ -63,10 +70,15 @@ var ConditionBuilder = /*#__PURE__*/React__default.forwardRef(function (_ref, re
63
70
  // switched classes dependant on props or state
64
71
  // example: [`${blockClass}__here-if-small`]: size === 'sm',
65
72
  }),
66
- ref: ref,
67
- role: "main"
68
- }, getDevtoolsProps(componentName)), /*#__PURE__*/React__default.createElement(VStack, null, /*#__PURE__*/React__default.createElement(ConditionBuilderContent, {
69
- startConditionLabel: startConditionLabel
73
+ role: "main",
74
+ ref: conditionBuilderRef
75
+ }, getDevtoolsProps(componentName)), /*#__PURE__*/React__default.createElement(VStack, {
76
+ className: "".concat(blockClass, "__").concat(variant)
77
+ }, /*#__PURE__*/React__default.createElement(ConditionBuilderContent, {
78
+ startConditionLabel: startConditionLabel,
79
+ conditionBuilderRef: conditionBuilderRef,
80
+ getConditionState: getConditionState,
81
+ initialState: initialState
70
82
  }))));
71
83
  });
72
84
 
@@ -90,6 +102,20 @@ ConditionBuilder.propTypes = {
90
102
  * Provide an optional class to be applied to the containing node.
91
103
  */
92
104
  className: PropTypes.string,
105
+ getConditionState: PropTypes.func.isRequired,
106
+ getOptions: PropTypes.func,
107
+ initialState: PropTypes.shape({
108
+ groups: PropTypes.arrayOf(PropTypes.shape({
109
+ groupSeparateOperator: PropTypes.string,
110
+ groupOperator: PropTypes.string,
111
+ statement: PropTypes.string,
112
+ conditions: PropTypes.arrayOf(PropTypes.shape({
113
+ property: PropTypes.string,
114
+ operator: PropTypes.string,
115
+ value: PropTypes.string
116
+ }))
117
+ }))
118
+ }),
93
119
  /**
94
120
  * This is a mandatory prop that defines the input to the condition builder.
95
121
 
@@ -98,13 +124,13 @@ ConditionBuilder.propTypes = {
98
124
  properties: PropTypes.arrayOf(PropTypes.shape({
99
125
  id: PropTypes.string,
100
126
  label: PropTypes.string,
101
- icon: PropTypes.func,
102
- type: PropTypes.oneOf(['text', 'number', 'date', 'option']),
127
+ icon: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),
128
+ type: PropTypes.oneOf(['text', 'number', 'date', 'option', 'time']),
103
129
  config: PropTypes.shape({
104
130
  options: PropTypes.arrayOf(PropTypes.shape({
105
131
  id: PropTypes.string,
106
132
  label: PropTypes.string,
107
- icon: PropTypes.func
133
+ icon: PropTypes.oneOfType([PropTypes.func, PropTypes.object])
108
134
  })),
109
135
  includeSearch: PropTypes.bool
110
136
  })
@@ -117,9 +143,12 @@ ConditionBuilder.propTypes = {
117
143
  /**
118
144
  * Provide a label to the button that starts condition builder
119
145
  */
120
- startConditionLabel: PropTypes.string.isRequired
121
-
146
+ startConditionLabel: PropTypes.string.isRequired,
122
147
  /* TODO: add types and DocGen for all props. */
148
+ /**
149
+ * Provide the condition builder variant: sentence/ tree
150
+ */
151
+ variant: PropTypes.string.isRequired
123
152
  };
124
153
 
125
154
  export { ConditionBuilder };
@@ -0,0 +1,12 @@
1
+ export default ConditionBuilderAdd;
2
+ declare function ConditionBuilderAdd({ className, onClick }: {
3
+ className: any;
4
+ onClick: any;
5
+ }): import("react/jsx-runtime").JSX.Element;
6
+ declare namespace ConditionBuilderAdd {
7
+ namespace propTypes {
8
+ let className: PropTypes.Requireable<string>;
9
+ let onClick: PropTypes.Requireable<(...args: any[]) => any>;
10
+ }
11
+ }
12
+ import PropTypes from 'prop-types';
@@ -0,0 +1,40 @@
1
+ /**
2
+ * Copyright IBM Corp. 2020, 2024
3
+ *
4
+ * This source code is licensed under the Apache-2.0 license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ */
7
+
8
+ import React__default from 'react';
9
+ import { AddAlt } from '@carbon/react/icons';
10
+ import { ConditionBuilderButton } from '../ConditionBuilderButton/ConditionBuilderButton.js';
11
+ import PropTypes from '../../../node_modules/prop-types/index.js';
12
+ import { blockClass, translateWithId } from '../ConditionBuilderContext/DataConfigs.js';
13
+
14
+ var ConditionBuilderAdd = function ConditionBuilderAdd(_ref) {
15
+ var className = _ref.className,
16
+ onClick = _ref.onClick;
17
+ return /*#__PURE__*/React__default.createElement("div", {
18
+ className: className
19
+ }, /*#__PURE__*/React__default.createElement(ConditionBuilderButton, {
20
+ renderIcon: AddAlt,
21
+ onClick: onClick,
22
+ className: "".concat(blockClass, "__add-button"),
23
+ hideLabel: true,
24
+ label: translateWithId('add-condition'),
25
+ role: "gridcell"
26
+ }));
27
+ };
28
+ var ConditionBuilderAdd$1 = ConditionBuilderAdd;
29
+ ConditionBuilderAdd.propTypes = {
30
+ /**
31
+ * Provide an optional class to be applied to the containing node.
32
+ */
33
+ className: PropTypes.string,
34
+ /**
35
+ * callback triggered on click of add button
36
+ */
37
+ onClick: PropTypes.func
38
+ };
39
+
40
+ export { ConditionBuilderAdd$1 as default };
@@ -0,0 +1,22 @@
1
+ export function ConditionBuilderButton({ className, label, hideLabel, tooltipAlign, renderIcon: Icon, onClick, showToolTip, ...rest }: {
2
+ [x: string]: any;
3
+ className: any;
4
+ label: any;
5
+ hideLabel: any;
6
+ tooltipAlign: any;
7
+ renderIcon: any;
8
+ onClick: any;
9
+ showToolTip: any;
10
+ }): import("react/jsx-runtime").JSX.Element;
11
+ export namespace ConditionBuilderButton {
12
+ namespace propTypes {
13
+ let className: PropTypes.Requireable<string>;
14
+ let hideLabel: PropTypes.Requireable<boolean>;
15
+ let label: PropTypes.Requireable<string>;
16
+ let onClick: PropTypes.Requireable<(...args: any[]) => any>;
17
+ let renderIcon: PropTypes.Requireable<object>;
18
+ let showToolTip: PropTypes.Requireable<boolean>;
19
+ let tooltipAlign: PropTypes.Requireable<string>;
20
+ }
21
+ }
22
+ import PropTypes from 'prop-types';
@@ -0,0 +1,74 @@
1
+ /**
2
+ * Copyright IBM Corp. 2020, 2024
3
+ *
4
+ * This source code is licensed under the Apache-2.0 license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ */
7
+
8
+ import { objectWithoutProperties as _objectWithoutProperties, extends as _extends, defineProperty as _defineProperty } from '../../../_virtual/_rollupPluginBabelHelpers.js';
9
+ import React__default from 'react';
10
+ import cx from 'classnames';
11
+ import PropTypes from '../../../node_modules/prop-types/index.js';
12
+ import { Tooltip } from '@carbon/react';
13
+ import { blockClass } from '../ConditionBuilderContext/DataConfigs.js';
14
+
15
+ var _excluded = ["className", "label", "hideLabel", "tooltipAlign", "renderIcon", "onClick", "showToolTip"];
16
+ var ConditionBuilderButton = function ConditionBuilderButton(_ref) {
17
+ var _Icon;
18
+ var className = _ref.className,
19
+ label = _ref.label,
20
+ hideLabel = _ref.hideLabel,
21
+ tooltipAlign = _ref.tooltipAlign,
22
+ Icon = _ref.renderIcon,
23
+ onClick = _ref.onClick,
24
+ showToolTip = _ref.showToolTip,
25
+ rest = _objectWithoutProperties(_ref, _excluded);
26
+ var Button = function Button() {
27
+ return /*#__PURE__*/React__default.createElement("button", _extends({}, rest, {
28
+ // role={'gridcell'}
29
+ tabIndex: -1,
30
+ className: cx([className, "".concat(blockClass, "__condition-builder-button"), _defineProperty({}, "".concat(blockClass, "__text-ellipsis"), showToolTip && !hideLabel)]),
31
+ type: "button",
32
+ onClick: onClick
33
+ }), Icon && (_Icon || (_Icon = /*#__PURE__*/React__default.createElement(Icon, null))), !hideLabel && label);
34
+ };
35
+ return hideLabel || showToolTip ? /*#__PURE__*/React__default.createElement(Tooltip, _extends({
36
+ label: label,
37
+ align: tooltipAlign,
38
+ className: "".concat(blockClass, "__con-tooltip")
39
+ }, rest.wrapperProps), Button()) : /*#__PURE__*/React__default.createElement(React__default.Fragment, null, Button());
40
+ };
41
+ ConditionBuilderButton.propTypes = {
42
+ /**
43
+ * Provide an optional class to be applied to the containing node.
44
+ */
45
+ className: PropTypes.string,
46
+ /**
47
+ * decides if label and tooltip to be hidden
48
+ */
49
+ hideLabel: PropTypes.bool,
50
+ /**
51
+ * label of the button
52
+ */
53
+ label: PropTypes.string,
54
+ /**
55
+ * callback triggered on click of add button
56
+ */
57
+ onClick: PropTypes.func,
58
+ /**
59
+ * Optional prop to allow overriding the icon rendering.
60
+ */
61
+ renderIcon: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),
62
+ /**
63
+ */
64
+ /**
65
+ *decides if tooltip to be shown
66
+ */
67
+ showToolTip: PropTypes.bool,
68
+ /**
69
+ * tooltip position
70
+ */
71
+ tooltipAlign: PropTypes.string
72
+ };
73
+
74
+ export { ConditionBuilderButton };
@@ -1,9 +1,26 @@
1
1
  export default ConditionBuilderContent;
2
- declare function ConditionBuilderContent({ startConditionLabel }: {
2
+ declare function ConditionBuilderContent({ startConditionLabel, conditionBuilderRef, getConditionState, initialState, }: {
3
3
  startConditionLabel: any;
4
+ conditionBuilderRef: any;
5
+ getConditionState: any;
6
+ initialState: any;
4
7
  }): import("react/jsx-runtime").JSX.Element;
5
8
  declare namespace ConditionBuilderContent {
6
9
  namespace propTypes {
10
+ let conditionBuilderRef: PropTypes.Requireable<object>;
11
+ let getConditionState: PropTypes.Validator<(...args: any[]) => any>;
12
+ let initialState: PropTypes.Requireable<PropTypes.InferProps<{
13
+ groups: PropTypes.Requireable<(PropTypes.InferProps<{
14
+ groupSeparateOperator: PropTypes.Requireable<string>;
15
+ groupOperator: PropTypes.Requireable<string>;
16
+ statement: PropTypes.Requireable<string>;
17
+ conditions: PropTypes.Requireable<(PropTypes.InferProps<{
18
+ property: PropTypes.Requireable<string>;
19
+ operator: PropTypes.Requireable<string>;
20
+ value: PropTypes.Requireable<string>;
21
+ }> | null | undefined)[]>;
22
+ }> | null | undefined)[]>;
23
+ }>>;
7
24
  let startConditionLabel: PropTypes.Validator<string>;
8
25
  }
9
26
  }
@@ -5,18 +5,21 @@
5
5
  * LICENSE file in the root directory of this source tree.
6
6
  */
7
7
 
8
- import { slicedToArray as _slicedToArray, extends as _extends } from '../../../_virtual/_rollupPluginBabelHelpers.js';
9
- import React__default, { useContext, useState, useRef, useEffect } from 'react';
10
- import { pkg } from '../../../settings.js';
8
+ import { slicedToArray as _slicedToArray, objectSpread2 as _objectSpread2, extends as _extends } from '../../../_virtual/_rollupPluginBabelHelpers.js';
9
+ import React__default, { useContext, useState, useEffect, useCallback } from 'react';
11
10
  import PropTypes from '../../../node_modules/prop-types/index.js';
12
11
  import { Button } from '@carbon/react';
13
12
  import { Add } from '@carbon/react/icons';
14
- import { ConditionBuilderContext, emptyState } from '../ConditionBuilderContext/DataTreeContext.js';
13
+ import ConditionGroupBuilder from '../ConditionGroupBuilder/ConditionGroupBuilder.js';
14
+ import { ConditionBuilderContext, emptyState } from '../ConditionBuilderContext/ConditionBuilderProvider.js';
15
+ import { blockClass } from '../ConditionBuilderContext/DataConfigs.js';
15
16
 
16
- var blockClass = "".concat(pkg.prefix, "--condition-builder");
17
- function ConditionBuilderContent(_ref) {
17
+ var ConditionBuilderContent = function ConditionBuilderContent(_ref) {
18
18
  var _rootState$groups2;
19
- var startConditionLabel = _ref.startConditionLabel;
19
+ var startConditionLabel = _ref.startConditionLabel,
20
+ conditionBuilderRef = _ref.conditionBuilderRef,
21
+ getConditionState = _ref.getConditionState,
22
+ initialState = _ref.initialState;
20
23
  var _useContext = useContext(ConditionBuilderContext),
21
24
  rootState = _useContext.rootState,
22
25
  setRootState = _useContext.setRootState;
@@ -24,30 +27,56 @@ function ConditionBuilderContent(_ref) {
24
27
  _useState2 = _slicedToArray(_useState, 2),
25
28
  isConditionBuilderActive = _useState2[0],
26
29
  setIsConditionBuilderActive = _useState2[1];
27
- var conditionBuilderRef = useRef();
28
30
  useEffect(function () {
29
31
  var _rootState$groups;
30
32
  if (rootState !== null && rootState !== void 0 && (_rootState$groups = rootState.groups) !== null && _rootState$groups !== void 0 && _rootState$groups.length) {
31
33
  setIsConditionBuilderActive(false);
32
- if (rootState.groups[0].conditions.length == 1 && rootState.groups[0].conditions[0].property == undefined) {
33
- // when the add condition clicked to start the condition building, we by default open the popover of the first property
34
- setTimeout(function () {
35
- conditionBuilderRef.current.querySelector('.propertyField').click();
36
- }, 0);
37
- }
38
34
  } else {
39
35
  setIsConditionBuilderActive(true);
40
36
  }
41
- }, [rootState]);
37
+ if (getConditionState) {
38
+ getConditionState(rootState);
39
+ }
40
+
41
+ // eslint-disable-next-line react-hooks/exhaustive-deps
42
+ }, [rootState, conditionBuilderRef]);
43
+ useEffect(function () {
44
+ if (isConditionBuilderActive == false) {
45
+ if (conditionBuilderRef.current) {
46
+ var initial = conditionBuilderRef.current.querySelector('[role="gridcell"] button');
47
+ if (initial) {
48
+ initial.setAttribute('tabindex', '0');
49
+ }
50
+ }
51
+ }
52
+ }, [isConditionBuilderActive, conditionBuilderRef]);
42
53
  var onStartConditionBuilder = function onStartConditionBuilder() {
43
54
  //when add condition button is clicked.
44
55
  setIsConditionBuilderActive(false);
45
- setRootState(emptyState); //here we can set an empty skeleton object for an empty condition builder,
56
+ setRootState(initialState !== null && initialState !== void 0 ? initialState : emptyState); //here we can set an empty skeleton object for an empty condition builder,
46
57
  //or we can even pre-populate some existing builder and continue editing
47
58
  };
59
+ var _onRemove = useCallback(function (groupIndex) {
60
+ setRootState(_objectSpread2(_objectSpread2({}, rootState), {}, {
61
+ groups: rootState.groups.filter(function (group, gIndex) {
62
+ return groupIndex !== gIndex;
63
+ })
64
+ }));
65
+ }, [setRootState, rootState]);
66
+ var onChangeHandler = function onChangeHandler(updatedGroup, groupIndex) {
67
+ /**
68
+ * This method is triggered from inner components. This will be called every time when any change is to be updated in the rootState.
69
+ * This gets the updated group as argument.
70
+ */
71
+ setRootState(_objectSpread2(_objectSpread2({}, rootState), {}, {
72
+ groups: rootState.groups.map(function (group, gIndex) {
73
+ return groupIndex === gIndex ? updatedGroup : group;
74
+ })
75
+ }));
76
+ };
48
77
  return /*#__PURE__*/React__default.createElement("div", {
49
- ref: conditionBuilderRef,
50
- className: "".concat(blockClass, "__content-container")
78
+ className: "".concat(blockClass, "__content-container"),
79
+ tabIndex: -1
51
80
  }, isConditionBuilderActive && /*#__PURE__*/React__default.createElement(Button, {
52
81
  className: "".concat(blockClass, "__condition-builder"),
53
82
  renderIcon: function renderIcon(props) {
@@ -59,34 +88,53 @@ function ConditionBuilderContent(_ref) {
59
88
  kind: "ghost",
60
89
  size: "sm",
61
90
  onClick: onStartConditionBuilder
62
- }, startConditionLabel), rootState && (rootState === null || rootState === void 0 || (_rootState$groups2 = rootState.groups) === null || _rootState$groups2 === void 0 ? void 0 : _rootState$groups2.map(function () {
63
- return /*#__PURE__*/React__default.createElement(React__default.Fragment, null, "conditionBuilder group renders here")
64
- // <ConditionBuilderGroup
65
- // state={eachGroup}
66
- // onRemove={() => {
67
- // onRemove(groupIndex);
68
- // }}
69
- // onChange={(updatedGroup) => {
70
- // /**
71
- // * This method is triggered from inner components. This will be called every time when any change is to be updated in the rootState.
72
- // * This gets the updated group as argument.
73
- // */
74
- // setRootState({
75
- // ...rootState,
76
- // groups: rootState.groups.map((group, gIndex) =>
77
- // groupIndex === gIndex ? updatedGroup : group
78
- // ),
79
- // });
80
- // }}
81
- //>
82
- ;
91
+ }, startConditionLabel), rootState && (rootState === null || rootState === void 0 || (_rootState$groups2 = rootState.groups) === null || _rootState$groups2 === void 0 ? void 0 : _rootState$groups2.map(function (eachGroup, groupIndex) {
92
+ return /*#__PURE__*/React__default.createElement(ConditionGroupBuilder, {
93
+ key: groupIndex,
94
+ aria: {
95
+ level: 1,
96
+ posinset: groupIndex * 2 + 1,
97
+ setsize: rootState.groups.length * 2
98
+ },
99
+ state: eachGroup,
100
+ onRemove: function onRemove() {
101
+ _onRemove(groupIndex);
102
+ },
103
+ onChange: function onChange(updatedGroup) {
104
+ onChangeHandler(updatedGroup, groupIndex);
105
+ },
106
+ conditionBuilderRef: conditionBuilderRef
107
+ });
83
108
  })));
84
- }
109
+ };
110
+ var ConditionBuilderContent$1 = ConditionBuilderContent;
85
111
  ConditionBuilderContent.propTypes = {
86
112
  /**
87
- * Provide a label to the button that starts condition builder
113
+ * ref of condition builder
114
+ */
115
+ conditionBuilderRef: PropTypes.object,
116
+ /**
117
+ * This is a callback function that returns the updated state
118
+ */
119
+ getConditionState: PropTypes.func.isRequired,
120
+ /**
121
+ * Optional prop if the condition building need to start from a predefined initial state
122
+ */
123
+ initialState: PropTypes.shape({
124
+ groups: PropTypes.arrayOf(PropTypes.shape({
125
+ groupSeparateOperator: PropTypes.string,
126
+ groupOperator: PropTypes.string,
127
+ statement: PropTypes.string,
128
+ conditions: PropTypes.arrayOf(PropTypes.shape({
129
+ property: PropTypes.string,
130
+ operator: PropTypes.string,
131
+ value: PropTypes.string
132
+ }))
133
+ }))
134
+ }),
135
+ /* Provide a label to the button that starts condition builder
88
136
  */
89
137
  startConditionLabel: PropTypes.string.isRequired
90
138
  };
91
139
 
92
- export { ConditionBuilderContent as default };
140
+ export { ConditionBuilderContent$1 as default };
@@ -7,6 +7,7 @@ export namespace emptyState {
7
7
  property: undefined;
8
8
  operator: string;
9
9
  value: string;
10
+ popoverToOpen: string;
10
11
  }[];
11
12
  }[];
12
13
  }
@@ -15,23 +16,25 @@ export function ConditionBuilderProvider(props: any): import("react/jsx-runtime"
15
16
  export namespace ConditionBuilderProvider {
16
17
  namespace propTypes {
17
18
  let children: PropTypes.Validator<NonNullable<PropTypes.ReactNodeLike>>;
19
+ let getOptions: PropTypes.Requireable<(...args: any[]) => any>;
18
20
  let inputConfig: PropTypes.Validator<NonNullable<PropTypes.InferProps<{
19
21
  properties: PropTypes.Requireable<(PropTypes.InferProps<{
20
22
  id: PropTypes.Requireable<string>;
21
23
  label: PropTypes.Requireable<string>;
22
- icon: PropTypes.Requireable<(...args: any[]) => any>;
24
+ icon: PropTypes.Requireable<object>;
23
25
  type: PropTypes.Requireable<string>;
24
26
  config: PropTypes.Requireable<PropTypes.InferProps<{
25
27
  options: PropTypes.Requireable<(PropTypes.InferProps<{
26
28
  id: PropTypes.Requireable<string>;
27
29
  label: PropTypes.Requireable<string>;
28
- icon: PropTypes.Requireable<(...args: any[]) => any>;
30
+ icon: PropTypes.Requireable<object>;
29
31
  }> | null | undefined)[]>;
30
32
  includeSearch: PropTypes.Requireable<boolean>;
31
33
  }>>;
32
34
  }> | null | undefined)[]>;
33
35
  }>>>;
34
36
  let popOverSearchThreshold: PropTypes.Validator<number>;
37
+ let variant: PropTypes.Validator<string>;
35
38
  }
36
39
  }
37
40
  import React from 'react';
@@ -17,7 +17,8 @@ var emptyState = {
17
17
  conditions: [{
18
18
  property: undefined,
19
19
  operator: '',
20
- value: ''
20
+ value: '',
21
+ popoverToOpen: 'propertyField'
21
22
  }]
22
23
  }]
23
24
  };
@@ -50,7 +51,9 @@ var ConditionBuilderProvider = function ConditionBuilderProvider(props) {
50
51
  rootState: rootState,
51
52
  setRootState: setRootState,
52
53
  inputConfig: props.inputConfig,
53
- popOverSearchThreshold: props.popOverSearchThreshold
54
+ popOverSearchThreshold: props.popOverSearchThreshold,
55
+ getOptions: props.getOptions,
56
+ variant: props.variant
54
57
  }
55
58
  },
56
59
  // eslint-disable-next-line react/prop-types
@@ -61,28 +64,44 @@ ConditionBuilderProvider.propTypes = {
61
64
  * Provide the contents of the ConditionBuilder.
62
65
  */
63
66
  children: PropTypes.node.isRequired,
67
+ /**
68
+ * This is an optional callback function that will be triggered when options array is not passed in the inputConfig against a property.
69
+ * This can be a asynchronous function that need to return a promise, so it will allow to fetch options from API call.
70
+ * options has to be in valid format
71
+ * [{
72
+ label: 'label',
73
+ id: 'id',
74
+ },...]
75
+ */
76
+ getOptions: PropTypes.func,
64
77
  /**
65
78
  * This is a mandatory prop that defines the input to the condition builder.
66
-
79
+
67
80
  */
68
81
  inputConfig: PropTypes.shape({
69
82
  properties: PropTypes.arrayOf(PropTypes.shape({
70
83
  id: PropTypes.string,
71
84
  label: PropTypes.string,
72
- icon: PropTypes.func,
73
- type: PropTypes.oneOf(['text', 'number', 'date', 'option']),
85
+ icon: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),
86
+ type: PropTypes.oneOf(['text', 'number', 'date', 'option', 'time']),
74
87
  config: PropTypes.shape({
75
88
  options: PropTypes.arrayOf(PropTypes.shape({
76
89
  id: PropTypes.string,
77
90
  label: PropTypes.string,
78
- icon: PropTypes.func
91
+ icon: PropTypes.oneOfType([PropTypes.func, PropTypes.object])
79
92
  })),
80
93
  includeSearch: PropTypes.bool
81
94
  })
82
95
  }))
83
96
  }).isRequired,
84
- popOverSearchThreshold: PropTypes.number.isRequired
85
- /* TODO: add types and DocGen for all props. */
97
+ /**
98
+ * Provide an mandatory numeric value that will be used to enable search option in the popovers with list.
99
+ */
100
+ popOverSearchThreshold: PropTypes.number.isRequired,
101
+ /**
102
+ * Provide the condition builder variant: sentence/ tree
103
+ */
104
+ variant: PropTypes.string.isRequired
86
105
  };
87
106
 
88
107
  export { ConditionBuilderContext, ConditionBuilderProvider, emptyState };
@@ -0,0 +1,22 @@
1
+ export const statementConfig: {
2
+ label: string;
3
+ id: string;
4
+ }[];
5
+ export const connectorConfig: {
6
+ label: string;
7
+ id: string;
8
+ }[];
9
+ export const operatorConfig: {
10
+ label: string;
11
+ id: string;
12
+ type: string;
13
+ }[];
14
+ export const blockClass: string;
15
+ export function translateWithId(key: any): any;
16
+ export namespace valueRenderers {
17
+ function text(val: any): any;
18
+ function time(val: any): any;
19
+ function number(val: any, config: any): any;
20
+ function option(value: any): any;
21
+ function date(value: any): any;
22
+ }