@bigbinary/neeto-molecules 5.2.20 → 5.2.21

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.
@@ -2,13 +2,13 @@
2
2
 
3
3
  var _defineProperty = require('@babel/runtime/helpers/defineProperty');
4
4
  var _objectWithoutProperties = require('@babel/runtime/helpers/objectWithoutProperties');
5
- var React = require('react');
6
5
  var neetoAtoms = require('@bigbinary/neeto-atoms');
7
6
  var neetoCist = require('@bigbinary/neeto-cist');
8
7
  var general = require('@bigbinary/neeto-commons-frontend/v2/utils/general');
9
8
  var ramda = require('ramda');
10
9
  var jsxRuntime = require('react/jsx-runtime');
11
10
  var createLucideIcon = require('../createLucideIcon-BbuuRL2u.js');
11
+ require('react');
12
12
 
13
13
  /**
14
14
  * @license lucide-react v1.24.0 - ISC
@@ -84,50 +84,73 @@ var DynamicVariables = function DynamicVariables(_ref) {
84
84
  dropdownProps = _objectWithoutProperties(_ref, _excluded);
85
85
  if (ramda.isEmpty(variables)) return null;
86
86
  var parsedVariables = parseVariables(variables);
87
- return /*#__PURE__*/jsxRuntime.jsx(neetoAtoms.DropdownMenu, _objectSpread(_objectSpread({
88
- customTarget: /*#__PURE__*/jsxRuntime.jsx(neetoAtoms.Button, _objectSpread({
89
- "data-testid": "dynamic-variables-button",
90
- icon: Braces,
91
- size: "icon",
92
- variant: "outline"
93
- }, buttonProps))
94
- }, dropdownProps), {}, {
95
- dropdownProps: _objectSpread({
96
- className: "min-w-56"
97
- }, dropdownProps === null || dropdownProps === void 0 ? void 0 : dropdownProps.dropdownProps),
98
- children: /*#__PURE__*/jsxRuntime.jsx("div", {
99
- className: "flex max-w-[22.5rem] min-w-[11.5rem] flex-col gap-1.5 p-2",
100
- "data-testid": "dynamic-variables-list",
101
- children: parsedVariables.map(function (_ref2) {
102
- var label = _ref2.label,
103
- variables = _ref2.variables;
104
- return /*#__PURE__*/jsxRuntime.jsxs(React.Fragment, {
105
- children: [label && /*#__PURE__*/jsxRuntime.jsxs("div", {
106
- className: "flex flex-row items-center gap-x-2",
107
- children: [/*#__PURE__*/jsxRuntime.jsx(neetoAtoms.Typography, {
108
- variant: "h6",
109
- children: label
110
- }), /*#__PURE__*/jsxRuntime.jsx("hr", {
111
- className: "border-border flex flex-grow"
87
+ return (
88
+ /*#__PURE__*/
89
+ // End-aligned with collision padding: the trigger usually sits at the
90
+ // content's right edge (e.g. the editor's variables button), so a
91
+ // start-aligned panel would hang past the viewport and get clipped.
92
+ jsxRuntime.jsx(neetoAtoms.DropdownMenu, _objectSpread(_objectSpread({
93
+ position: "bottom-end",
94
+ customTarget:
95
+ /*#__PURE__*/
96
+ // The inline-flex wrapper keeps the popper anchor button-sized;
97
+ // otherwise the trigger element can stretch with its container and
98
+ // end-align the panel far past the visible button.
99
+ jsxRuntime.jsx("div", {
100
+ className: "inline-flex",
101
+ children: /*#__PURE__*/jsxRuntime.jsx(neetoAtoms.Button, _objectSpread({
102
+ "data-testid": "dynamic-variables-button",
103
+ icon: Braces,
104
+ size: "icon",
105
+ variant: "outline"
106
+ }, buttonProps))
107
+ })
108
+ }, dropdownProps), {}, {
109
+ dropdownProps: _objectSpread({
110
+ // w-max frees the popup from the content wrapper's default
111
+ // trigger-width lock (which clips the chip grid via its
112
+ // overflow-x-hidden).
113
+ className: "w-max",
114
+ collisionPadding: 8
115
+ }, dropdownProps === null || dropdownProps === void 0 ? void 0 : dropdownProps.dropdownProps),
116
+ children: /*#__PURE__*/jsxRuntime.jsx("div", {
117
+ className: "flex max-w-[22.5rem] min-w-64 flex-col gap-3 p-3",
118
+ "data-testid": "dynamic-variables-list",
119
+ children: parsedVariables.map(function (_ref2) {
120
+ var label = _ref2.label,
121
+ variables = _ref2.variables;
122
+ return /*#__PURE__*/jsxRuntime.jsxs("div", {
123
+ className: "flex flex-col gap-1.5",
124
+ children: [label && /*#__PURE__*/jsxRuntime.jsxs("div", {
125
+ className: "flex flex-row items-center gap-x-2",
126
+ children: [/*#__PURE__*/jsxRuntime.jsx(neetoAtoms.Typography, {
127
+ className: "uppercase",
128
+ color: "muted",
129
+ variant: "caption",
130
+ weight: "medium",
131
+ children: label
132
+ }), /*#__PURE__*/jsxRuntime.jsx("hr", {
133
+ className: "border-border flex flex-grow"
134
+ })]
135
+ }), /*#__PURE__*/jsxRuntime.jsx("div", {
136
+ className: "flex flex-wrap items-center gap-2",
137
+ "data-testid": general.joinHyphenCase("dynamic-variables-list", label),
138
+ children: variables.map(function (item) {
139
+ return /*#__PURE__*/jsxRuntime.jsx("button", {
140
+ className: "border-border text-foreground hover:border-primary hover:text-primary focus-visible:border-primary focus-visible:text-primary cursor-pointer rounded-md border px-1.5 py-1 text-start text-sm leading-tight transition-colors select-none focus:outline-none",
141
+ "data-testid": general.joinHyphenCase("dynamic-variables-list-item", item.label),
142
+ onClick: function onClick() {
143
+ return onVariableClick(item);
144
+ },
145
+ children: item.label
146
+ }, item.label);
147
+ })
112
148
  })]
113
- }), /*#__PURE__*/jsxRuntime.jsx("div", {
114
- className: "flex flex-wrap items-center gap-2",
115
- "data-testid": general.joinHyphenCase("dynamic-variables-list", label),
116
- children: variables.map(function (item) {
117
- return /*#__PURE__*/jsxRuntime.jsx("button", {
118
- className: "border-border text-foreground hover:border-primary hover:text-primary focus-visible:border-primary focus-visible:text-primary rounded-md border p-1.5 text-start transition-colors select-none focus:outline-none",
119
- "data-testid": general.joinHyphenCase("dynamic-variables-list-item", item.label),
120
- onClick: function onClick() {
121
- return onVariableClick(item);
122
- },
123
- children: item.label
124
- }, item.label);
125
- })
126
- })]
127
- }, label);
149
+ }, label);
150
+ })
128
151
  })
129
- })
130
- }));
152
+ }))
153
+ );
131
154
  };
132
155
 
133
156
  module.exports = DynamicVariables;
@@ -1 +1 @@
1
- {"version":3,"file":"DynamicVariables.js","sources":["../../../node_modules/lucide-react/dist/esm/icons/braces.mjs","../../../src/v2/components/DynamicVariables/utils.js","../../../src/v2/components/DynamicVariables/index.jsx"],"sourcesContent":["/**\n * @license lucide-react v1.24.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconNode = [\n [\n \"path\",\n { d: \"M8 3H7a2 2 0 0 0-2 2v5a2 2 0 0 1-2 2 2 2 0 0 1 2 2v5c0 1.1.9 2 2 2h1\", key: \"ezmyqa\" }\n ],\n [\n \"path\",\n {\n d: \"M16 21h1a2 2 0 0 0 2-2v-5c0-1.1.9-2 2-2a2 2 0 0 1-2-2V5a2 2 0 0 0-2-2h-1\",\n key: \"e1hn23\"\n }\n ]\n];\nconst Braces = createLucideIcon(\"braces\", __iconNode);\n\nexport { __iconNode, Braces as default };\n//# sourceMappingURL=braces.mjs.map\n","import { findBy } from \"neetocist\";\nimport { prop, isEmpty, uniqBy, mergeLeft } from \"ramda\";\n\nexport const parseVariables = (variableArr = []) => {\n const uncategorized = [];\n const groupedVariables = [];\n const categorySet = new Set();\n\n variableArr.forEach(variable => {\n const { category, label, variables } = variable;\n if (category && variables) {\n const parsedVariables = variables.map(\n mergeLeft({ category, categoryLabel: label })\n );\n\n if (!categorySet.has(category)) {\n categorySet.add(category);\n groupedVariables.push({ label, variables: parsedVariables });\n } else {\n const existingGroup = findBy({ label }, groupedVariables);\n\n existingGroup.variables = uniqBy(\n prop(\"key\"),\n existingGroup.variables.concat(parsedVariables)\n );\n }\n } else {\n uncategorized.push(variable);\n }\n });\n\n if (!isEmpty(uncategorized)) {\n groupedVariables.push({\n label: !isEmpty(groupedVariables) ? \"Others\" : null,\n variables: uncategorized,\n });\n }\n\n return groupedVariables;\n};\n","import { Fragment } from \"react\";\n\nimport { Button, DropdownMenu, Typography } from \"@bigbinary/neeto-atoms\";\nimport { Braces } from \"lucide-react\";\nimport { noop } from \"neetocist\";\nimport { joinHyphenCase } from \"neetocommons/v2/utils/general\";\nimport PropTypes from \"prop-types\";\nimport { isEmpty } from \"ramda\";\n\nimport { parseVariables } from \"./utils\";\n\nconst DynamicVariables = ({\n onVariableClick = noop,\n variables = [],\n buttonProps,\n ...dropdownProps\n}) => {\n if (isEmpty(variables)) return null;\n\n const parsedVariables = parseVariables(variables);\n\n return (\n <DropdownMenu\n customTarget={\n <Button\n data-testid=\"dynamic-variables-button\"\n icon={Braces}\n size=\"icon\"\n variant=\"outline\"\n {...buttonProps}\n />\n }\n {...dropdownProps}\n dropdownProps={{\n className: \"min-w-56\",\n ...dropdownProps?.dropdownProps,\n }}\n >\n <div\n className=\"flex max-w-[22.5rem] min-w-[11.5rem] flex-col gap-1.5 p-2\"\n data-testid=\"dynamic-variables-list\"\n >\n {parsedVariables.map(({ label, variables }) => (\n <Fragment key={label}>\n {label && (\n <div className=\"flex flex-row items-center gap-x-2\">\n <Typography variant=\"h6\">{label}</Typography>\n <hr className=\"border-border flex flex-grow\" />\n </div>\n )}\n <div\n className=\"flex flex-wrap items-center gap-2\"\n data-testid={joinHyphenCase(\"dynamic-variables-list\", label)}\n >\n {variables.map(item => (\n <button\n className=\"border-border text-foreground hover:border-primary hover:text-primary focus-visible:border-primary focus-visible:text-primary rounded-md border p-1.5 text-start transition-colors select-none focus:outline-none\"\n key={item.label}\n data-testid={joinHyphenCase(\n \"dynamic-variables-list-item\",\n item.label\n )}\n onClick={() => onVariableClick(item)}\n >\n {item.label}\n </button>\n ))}\n </div>\n </Fragment>\n ))}\n </div>\n </DropdownMenu>\n );\n};\n\nDynamicVariables.propTypes = {\n onVariableClick: PropTypes.func,\n variables: PropTypes.arrayOf(\n PropTypes.shape({ label: PropTypes.string, key: PropTypes.string })\n ),\n};\n\nexport default DynamicVariables;\n"],"names":["createLucideIcon","parseVariables","variableArr","arguments","length","undefined","uncategorized","groupedVariables","categorySet","Set","forEach","variable","category","label","variables","parsedVariables","map","mergeLeft","categoryLabel","has","add","push","existingGroup","findBy","uniqBy","prop","concat","isEmpty","DynamicVariables","_ref","_ref$onVariableClick","onVariableClick","noop","_ref$variables","buttonProps","dropdownProps","_objectWithoutProperties","_excluded","_jsx","DropdownMenu","_objectSpread","customTarget","Button","icon","Braces","size","variant","className","children","_ref2","_jsxs","Fragment","Typography","joinHyphenCase","item","onClick"],"mappings":"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","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"DynamicVariables.js","sources":["../../../node_modules/lucide-react/dist/esm/icons/braces.mjs","../../../src/v2/components/DynamicVariables/utils.js","../../../src/v2/components/DynamicVariables/index.jsx"],"sourcesContent":["/**\n * @license lucide-react v1.24.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconNode = [\n [\n \"path\",\n { d: \"M8 3H7a2 2 0 0 0-2 2v5a2 2 0 0 1-2 2 2 2 0 0 1 2 2v5c0 1.1.9 2 2 2h1\", key: \"ezmyqa\" }\n ],\n [\n \"path\",\n {\n d: \"M16 21h1a2 2 0 0 0 2-2v-5c0-1.1.9-2 2-2a2 2 0 0 1-2-2V5a2 2 0 0 0-2-2h-1\",\n key: \"e1hn23\"\n }\n ]\n];\nconst Braces = createLucideIcon(\"braces\", __iconNode);\n\nexport { __iconNode, Braces as default };\n//# sourceMappingURL=braces.mjs.map\n","import { findBy } from \"neetocist\";\nimport { prop, isEmpty, uniqBy, mergeLeft } from \"ramda\";\n\nexport const parseVariables = (variableArr = []) => {\n const uncategorized = [];\n const groupedVariables = [];\n const categorySet = new Set();\n\n variableArr.forEach(variable => {\n const { category, label, variables } = variable;\n if (category && variables) {\n const parsedVariables = variables.map(\n mergeLeft({ category, categoryLabel: label })\n );\n\n if (!categorySet.has(category)) {\n categorySet.add(category);\n groupedVariables.push({ label, variables: parsedVariables });\n } else {\n const existingGroup = findBy({ label }, groupedVariables);\n\n existingGroup.variables = uniqBy(\n prop(\"key\"),\n existingGroup.variables.concat(parsedVariables)\n );\n }\n } else {\n uncategorized.push(variable);\n }\n });\n\n if (!isEmpty(uncategorized)) {\n groupedVariables.push({\n label: !isEmpty(groupedVariables) ? \"Others\" : null,\n variables: uncategorized,\n });\n }\n\n return groupedVariables;\n};\n","import { Button, DropdownMenu, Typography } from \"@bigbinary/neeto-atoms\";\nimport { Braces } from \"lucide-react\";\nimport { noop } from \"neetocist\";\nimport { joinHyphenCase } from \"neetocommons/v2/utils/general\";\nimport PropTypes from \"prop-types\";\nimport { isEmpty } from \"ramda\";\n\nimport { parseVariables } from \"./utils\";\n\nconst DynamicVariables = ({\n onVariableClick = noop,\n variables = [],\n buttonProps,\n ...dropdownProps\n}) => {\n if (isEmpty(variables)) return null;\n\n const parsedVariables = parseVariables(variables);\n\n return (\n // End-aligned with collision padding: the trigger usually sits at the\n // content's right edge (e.g. the editor's variables button), so a\n // start-aligned panel would hang past the viewport and get clipped.\n <DropdownMenu\n position=\"bottom-end\"\n customTarget={\n // The inline-flex wrapper keeps the popper anchor button-sized;\n // otherwise the trigger element can stretch with its container and\n // end-align the panel far past the visible button.\n <div className=\"inline-flex\">\n <Button\n data-testid=\"dynamic-variables-button\"\n icon={Braces}\n size=\"icon\"\n variant=\"outline\"\n {...buttonProps}\n />\n </div>\n }\n {...dropdownProps}\n dropdownProps={{\n // w-max frees the popup from the content wrapper's default\n // trigger-width lock (which clips the chip grid via its\n // overflow-x-hidden).\n className: \"w-max\",\n collisionPadding: 8,\n ...dropdownProps?.dropdownProps,\n }}\n >\n {/* Groups own their label-to-chips gap; the outer column spaces the\n groups themselves (the editor's old h6-based margin rule no longer\n matches now that the label is a caption span). */}\n <div\n className=\"flex max-w-[22.5rem] min-w-64 flex-col gap-3 p-3\"\n data-testid=\"dynamic-variables-list\"\n >\n {parsedVariables.map(({ label, variables }) => (\n <div className=\"flex flex-col gap-1.5\" key={label}>\n {label && (\n <div className=\"flex flex-row items-center gap-x-2\">\n {/* Group label, not a heading: caption keeps the v1 12px;\n medium weight so the uppercase run still reads muted. */}\n <Typography\n className=\"uppercase\"\n color=\"muted\"\n variant=\"caption\"\n weight=\"medium\"\n >\n {label}\n </Typography>\n <hr className=\"border-border flex flex-grow\" />\n </div>\n )}\n <div\n className=\"flex flex-wrap items-center gap-2\"\n data-testid={joinHyphenCase(\"dynamic-variables-list\", label)}\n >\n {variables.map(item => (\n <button\n className=\"border-border text-foreground hover:border-primary hover:text-primary focus-visible:border-primary focus-visible:text-primary cursor-pointer rounded-md border px-1.5 py-1 text-start text-sm leading-tight transition-colors select-none focus:outline-none\"\n key={item.label}\n data-testid={joinHyphenCase(\n \"dynamic-variables-list-item\",\n item.label\n )}\n onClick={() => onVariableClick(item)}\n >\n {item.label}\n </button>\n ))}\n </div>\n </div>\n ))}\n </div>\n </DropdownMenu>\n );\n};\n\nDynamicVariables.propTypes = {\n onVariableClick: PropTypes.func,\n variables: PropTypes.arrayOf(\n PropTypes.shape({ label: PropTypes.string, key: PropTypes.string })\n ),\n};\n\nexport default DynamicVariables;\n"],"names":["createLucideIcon","parseVariables","variableArr","arguments","length","undefined","uncategorized","groupedVariables","categorySet","Set","forEach","variable","category","label","variables","parsedVariables","map","mergeLeft","categoryLabel","has","add","push","existingGroup","findBy","uniqBy","prop","concat","isEmpty","DynamicVariables","_ref","_ref$onVariableClick","onVariableClick","noop","_ref$variables","buttonProps","dropdownProps","_objectWithoutProperties","_excluded","_jsx","DropdownMenu","_objectSpread","position","customTarget","className","children","Button","icon","Braces","size","variant","collisionPadding","_ref2","_jsxs","Typography","color","weight","joinHyphenCase","item","onClick"],"mappings":"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","x_google_ignoreList":[0]}
@@ -1,12 +1,12 @@
1
1
  import _defineProperty from '@babel/runtime/helpers/defineProperty';
2
2
  import _objectWithoutProperties from '@babel/runtime/helpers/objectWithoutProperties';
3
- import { Fragment } from 'react';
4
3
  import { DropdownMenu, Typography, Button } from '@bigbinary/neeto-atoms';
5
4
  import { findBy, noop } from '@bigbinary/neeto-cist';
6
5
  import { joinHyphenCase } from '@bigbinary/neeto-commons-frontend/v2/utils/general';
7
6
  import { mergeLeft, uniqBy, prop, isEmpty } from 'ramda';
8
7
  import { jsx, jsxs } from 'react/jsx-runtime';
9
8
  import { c as createLucideIcon } from '../createLucideIcon--oLqczpc.js';
9
+ import 'react';
10
10
 
11
11
  /**
12
12
  * @license lucide-react v1.24.0 - ISC
@@ -82,50 +82,73 @@ var DynamicVariables = function DynamicVariables(_ref) {
82
82
  dropdownProps = _objectWithoutProperties(_ref, _excluded);
83
83
  if (isEmpty(variables)) return null;
84
84
  var parsedVariables = parseVariables(variables);
85
- return /*#__PURE__*/jsx(DropdownMenu, _objectSpread(_objectSpread({
86
- customTarget: /*#__PURE__*/jsx(Button, _objectSpread({
87
- "data-testid": "dynamic-variables-button",
88
- icon: Braces,
89
- size: "icon",
90
- variant: "outline"
91
- }, buttonProps))
92
- }, dropdownProps), {}, {
93
- dropdownProps: _objectSpread({
94
- className: "min-w-56"
95
- }, dropdownProps === null || dropdownProps === void 0 ? void 0 : dropdownProps.dropdownProps),
96
- children: /*#__PURE__*/jsx("div", {
97
- className: "flex max-w-[22.5rem] min-w-[11.5rem] flex-col gap-1.5 p-2",
98
- "data-testid": "dynamic-variables-list",
99
- children: parsedVariables.map(function (_ref2) {
100
- var label = _ref2.label,
101
- variables = _ref2.variables;
102
- return /*#__PURE__*/jsxs(Fragment, {
103
- children: [label && /*#__PURE__*/jsxs("div", {
104
- className: "flex flex-row items-center gap-x-2",
105
- children: [/*#__PURE__*/jsx(Typography, {
106
- variant: "h6",
107
- children: label
108
- }), /*#__PURE__*/jsx("hr", {
109
- className: "border-border flex flex-grow"
85
+ return (
86
+ /*#__PURE__*/
87
+ // End-aligned with collision padding: the trigger usually sits at the
88
+ // content's right edge (e.g. the editor's variables button), so a
89
+ // start-aligned panel would hang past the viewport and get clipped.
90
+ jsx(DropdownMenu, _objectSpread(_objectSpread({
91
+ position: "bottom-end",
92
+ customTarget:
93
+ /*#__PURE__*/
94
+ // The inline-flex wrapper keeps the popper anchor button-sized;
95
+ // otherwise the trigger element can stretch with its container and
96
+ // end-align the panel far past the visible button.
97
+ jsx("div", {
98
+ className: "inline-flex",
99
+ children: /*#__PURE__*/jsx(Button, _objectSpread({
100
+ "data-testid": "dynamic-variables-button",
101
+ icon: Braces,
102
+ size: "icon",
103
+ variant: "outline"
104
+ }, buttonProps))
105
+ })
106
+ }, dropdownProps), {}, {
107
+ dropdownProps: _objectSpread({
108
+ // w-max frees the popup from the content wrapper's default
109
+ // trigger-width lock (which clips the chip grid via its
110
+ // overflow-x-hidden).
111
+ className: "w-max",
112
+ collisionPadding: 8
113
+ }, dropdownProps === null || dropdownProps === void 0 ? void 0 : dropdownProps.dropdownProps),
114
+ children: /*#__PURE__*/jsx("div", {
115
+ className: "flex max-w-[22.5rem] min-w-64 flex-col gap-3 p-3",
116
+ "data-testid": "dynamic-variables-list",
117
+ children: parsedVariables.map(function (_ref2) {
118
+ var label = _ref2.label,
119
+ variables = _ref2.variables;
120
+ return /*#__PURE__*/jsxs("div", {
121
+ className: "flex flex-col gap-1.5",
122
+ children: [label && /*#__PURE__*/jsxs("div", {
123
+ className: "flex flex-row items-center gap-x-2",
124
+ children: [/*#__PURE__*/jsx(Typography, {
125
+ className: "uppercase",
126
+ color: "muted",
127
+ variant: "caption",
128
+ weight: "medium",
129
+ children: label
130
+ }), /*#__PURE__*/jsx("hr", {
131
+ className: "border-border flex flex-grow"
132
+ })]
133
+ }), /*#__PURE__*/jsx("div", {
134
+ className: "flex flex-wrap items-center gap-2",
135
+ "data-testid": joinHyphenCase("dynamic-variables-list", label),
136
+ children: variables.map(function (item) {
137
+ return /*#__PURE__*/jsx("button", {
138
+ className: "border-border text-foreground hover:border-primary hover:text-primary focus-visible:border-primary focus-visible:text-primary cursor-pointer rounded-md border px-1.5 py-1 text-start text-sm leading-tight transition-colors select-none focus:outline-none",
139
+ "data-testid": joinHyphenCase("dynamic-variables-list-item", item.label),
140
+ onClick: function onClick() {
141
+ return onVariableClick(item);
142
+ },
143
+ children: item.label
144
+ }, item.label);
145
+ })
110
146
  })]
111
- }), /*#__PURE__*/jsx("div", {
112
- className: "flex flex-wrap items-center gap-2",
113
- "data-testid": joinHyphenCase("dynamic-variables-list", label),
114
- children: variables.map(function (item) {
115
- return /*#__PURE__*/jsx("button", {
116
- className: "border-border text-foreground hover:border-primary hover:text-primary focus-visible:border-primary focus-visible:text-primary rounded-md border p-1.5 text-start transition-colors select-none focus:outline-none",
117
- "data-testid": joinHyphenCase("dynamic-variables-list-item", item.label),
118
- onClick: function onClick() {
119
- return onVariableClick(item);
120
- },
121
- children: item.label
122
- }, item.label);
123
- })
124
- })]
125
- }, label);
147
+ }, label);
148
+ })
126
149
  })
127
- })
128
- }));
150
+ }))
151
+ );
129
152
  };
130
153
 
131
154
  export { DynamicVariables as default };
@@ -1 +1 @@
1
- {"version":3,"file":"DynamicVariables.js","sources":["../../node_modules/lucide-react/dist/esm/icons/braces.mjs","../../src/v2/components/DynamicVariables/utils.js","../../src/v2/components/DynamicVariables/index.jsx"],"sourcesContent":["/**\n * @license lucide-react v1.24.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconNode = [\n [\n \"path\",\n { d: \"M8 3H7a2 2 0 0 0-2 2v5a2 2 0 0 1-2 2 2 2 0 0 1 2 2v5c0 1.1.9 2 2 2h1\", key: \"ezmyqa\" }\n ],\n [\n \"path\",\n {\n d: \"M16 21h1a2 2 0 0 0 2-2v-5c0-1.1.9-2 2-2a2 2 0 0 1-2-2V5a2 2 0 0 0-2-2h-1\",\n key: \"e1hn23\"\n }\n ]\n];\nconst Braces = createLucideIcon(\"braces\", __iconNode);\n\nexport { __iconNode, Braces as default };\n//# sourceMappingURL=braces.mjs.map\n","import { findBy } from \"neetocist\";\nimport { prop, isEmpty, uniqBy, mergeLeft } from \"ramda\";\n\nexport const parseVariables = (variableArr = []) => {\n const uncategorized = [];\n const groupedVariables = [];\n const categorySet = new Set();\n\n variableArr.forEach(variable => {\n const { category, label, variables } = variable;\n if (category && variables) {\n const parsedVariables = variables.map(\n mergeLeft({ category, categoryLabel: label })\n );\n\n if (!categorySet.has(category)) {\n categorySet.add(category);\n groupedVariables.push({ label, variables: parsedVariables });\n } else {\n const existingGroup = findBy({ label }, groupedVariables);\n\n existingGroup.variables = uniqBy(\n prop(\"key\"),\n existingGroup.variables.concat(parsedVariables)\n );\n }\n } else {\n uncategorized.push(variable);\n }\n });\n\n if (!isEmpty(uncategorized)) {\n groupedVariables.push({\n label: !isEmpty(groupedVariables) ? \"Others\" : null,\n variables: uncategorized,\n });\n }\n\n return groupedVariables;\n};\n","import { Fragment } from \"react\";\n\nimport { Button, DropdownMenu, Typography } from \"@bigbinary/neeto-atoms\";\nimport { Braces } from \"lucide-react\";\nimport { noop } from \"neetocist\";\nimport { joinHyphenCase } from \"neetocommons/v2/utils/general\";\nimport PropTypes from \"prop-types\";\nimport { isEmpty } from \"ramda\";\n\nimport { parseVariables } from \"./utils\";\n\nconst DynamicVariables = ({\n onVariableClick = noop,\n variables = [],\n buttonProps,\n ...dropdownProps\n}) => {\n if (isEmpty(variables)) return null;\n\n const parsedVariables = parseVariables(variables);\n\n return (\n <DropdownMenu\n customTarget={\n <Button\n data-testid=\"dynamic-variables-button\"\n icon={Braces}\n size=\"icon\"\n variant=\"outline\"\n {...buttonProps}\n />\n }\n {...dropdownProps}\n dropdownProps={{\n className: \"min-w-56\",\n ...dropdownProps?.dropdownProps,\n }}\n >\n <div\n className=\"flex max-w-[22.5rem] min-w-[11.5rem] flex-col gap-1.5 p-2\"\n data-testid=\"dynamic-variables-list\"\n >\n {parsedVariables.map(({ label, variables }) => (\n <Fragment key={label}>\n {label && (\n <div className=\"flex flex-row items-center gap-x-2\">\n <Typography variant=\"h6\">{label}</Typography>\n <hr className=\"border-border flex flex-grow\" />\n </div>\n )}\n <div\n className=\"flex flex-wrap items-center gap-2\"\n data-testid={joinHyphenCase(\"dynamic-variables-list\", label)}\n >\n {variables.map(item => (\n <button\n className=\"border-border text-foreground hover:border-primary hover:text-primary focus-visible:border-primary focus-visible:text-primary rounded-md border p-1.5 text-start transition-colors select-none focus:outline-none\"\n key={item.label}\n data-testid={joinHyphenCase(\n \"dynamic-variables-list-item\",\n item.label\n )}\n onClick={() => onVariableClick(item)}\n >\n {item.label}\n </button>\n ))}\n </div>\n </Fragment>\n ))}\n </div>\n </DropdownMenu>\n );\n};\n\nDynamicVariables.propTypes = {\n onVariableClick: PropTypes.func,\n variables: PropTypes.arrayOf(\n PropTypes.shape({ label: PropTypes.string, key: PropTypes.string })\n ),\n};\n\nexport default DynamicVariables;\n"],"names":["parseVariables","variableArr","arguments","length","undefined","uncategorized","groupedVariables","categorySet","Set","forEach","variable","category","label","variables","parsedVariables","map","mergeLeft","categoryLabel","has","add","push","existingGroup","findBy","uniqBy","prop","concat","isEmpty","DynamicVariables","_ref","_ref$onVariableClick","onVariableClick","noop","_ref$variables","buttonProps","dropdownProps","_objectWithoutProperties","_excluded","_jsx","DropdownMenu","_objectSpread","customTarget","Button","icon","Braces","size","variant","className","children","_ref2","_jsxs","Fragment","Typography","joinHyphenCase","item","onClick"],"mappings":"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","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"DynamicVariables.js","sources":["../../node_modules/lucide-react/dist/esm/icons/braces.mjs","../../src/v2/components/DynamicVariables/utils.js","../../src/v2/components/DynamicVariables/index.jsx"],"sourcesContent":["/**\n * @license lucide-react v1.24.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconNode = [\n [\n \"path\",\n { d: \"M8 3H7a2 2 0 0 0-2 2v5a2 2 0 0 1-2 2 2 2 0 0 1 2 2v5c0 1.1.9 2 2 2h1\", key: \"ezmyqa\" }\n ],\n [\n \"path\",\n {\n d: \"M16 21h1a2 2 0 0 0 2-2v-5c0-1.1.9-2 2-2a2 2 0 0 1-2-2V5a2 2 0 0 0-2-2h-1\",\n key: \"e1hn23\"\n }\n ]\n];\nconst Braces = createLucideIcon(\"braces\", __iconNode);\n\nexport { __iconNode, Braces as default };\n//# sourceMappingURL=braces.mjs.map\n","import { findBy } from \"neetocist\";\nimport { prop, isEmpty, uniqBy, mergeLeft } from \"ramda\";\n\nexport const parseVariables = (variableArr = []) => {\n const uncategorized = [];\n const groupedVariables = [];\n const categorySet = new Set();\n\n variableArr.forEach(variable => {\n const { category, label, variables } = variable;\n if (category && variables) {\n const parsedVariables = variables.map(\n mergeLeft({ category, categoryLabel: label })\n );\n\n if (!categorySet.has(category)) {\n categorySet.add(category);\n groupedVariables.push({ label, variables: parsedVariables });\n } else {\n const existingGroup = findBy({ label }, groupedVariables);\n\n existingGroup.variables = uniqBy(\n prop(\"key\"),\n existingGroup.variables.concat(parsedVariables)\n );\n }\n } else {\n uncategorized.push(variable);\n }\n });\n\n if (!isEmpty(uncategorized)) {\n groupedVariables.push({\n label: !isEmpty(groupedVariables) ? \"Others\" : null,\n variables: uncategorized,\n });\n }\n\n return groupedVariables;\n};\n","import { Button, DropdownMenu, Typography } from \"@bigbinary/neeto-atoms\";\nimport { Braces } from \"lucide-react\";\nimport { noop } from \"neetocist\";\nimport { joinHyphenCase } from \"neetocommons/v2/utils/general\";\nimport PropTypes from \"prop-types\";\nimport { isEmpty } from \"ramda\";\n\nimport { parseVariables } from \"./utils\";\n\nconst DynamicVariables = ({\n onVariableClick = noop,\n variables = [],\n buttonProps,\n ...dropdownProps\n}) => {\n if (isEmpty(variables)) return null;\n\n const parsedVariables = parseVariables(variables);\n\n return (\n // End-aligned with collision padding: the trigger usually sits at the\n // content's right edge (e.g. the editor's variables button), so a\n // start-aligned panel would hang past the viewport and get clipped.\n <DropdownMenu\n position=\"bottom-end\"\n customTarget={\n // The inline-flex wrapper keeps the popper anchor button-sized;\n // otherwise the trigger element can stretch with its container and\n // end-align the panel far past the visible button.\n <div className=\"inline-flex\">\n <Button\n data-testid=\"dynamic-variables-button\"\n icon={Braces}\n size=\"icon\"\n variant=\"outline\"\n {...buttonProps}\n />\n </div>\n }\n {...dropdownProps}\n dropdownProps={{\n // w-max frees the popup from the content wrapper's default\n // trigger-width lock (which clips the chip grid via its\n // overflow-x-hidden).\n className: \"w-max\",\n collisionPadding: 8,\n ...dropdownProps?.dropdownProps,\n }}\n >\n {/* Groups own their label-to-chips gap; the outer column spaces the\n groups themselves (the editor's old h6-based margin rule no longer\n matches now that the label is a caption span). */}\n <div\n className=\"flex max-w-[22.5rem] min-w-64 flex-col gap-3 p-3\"\n data-testid=\"dynamic-variables-list\"\n >\n {parsedVariables.map(({ label, variables }) => (\n <div className=\"flex flex-col gap-1.5\" key={label}>\n {label && (\n <div className=\"flex flex-row items-center gap-x-2\">\n {/* Group label, not a heading: caption keeps the v1 12px;\n medium weight so the uppercase run still reads muted. */}\n <Typography\n className=\"uppercase\"\n color=\"muted\"\n variant=\"caption\"\n weight=\"medium\"\n >\n {label}\n </Typography>\n <hr className=\"border-border flex flex-grow\" />\n </div>\n )}\n <div\n className=\"flex flex-wrap items-center gap-2\"\n data-testid={joinHyphenCase(\"dynamic-variables-list\", label)}\n >\n {variables.map(item => (\n <button\n className=\"border-border text-foreground hover:border-primary hover:text-primary focus-visible:border-primary focus-visible:text-primary cursor-pointer rounded-md border px-1.5 py-1 text-start text-sm leading-tight transition-colors select-none focus:outline-none\"\n key={item.label}\n data-testid={joinHyphenCase(\n \"dynamic-variables-list-item\",\n item.label\n )}\n onClick={() => onVariableClick(item)}\n >\n {item.label}\n </button>\n ))}\n </div>\n </div>\n ))}\n </div>\n </DropdownMenu>\n );\n};\n\nDynamicVariables.propTypes = {\n onVariableClick: PropTypes.func,\n variables: PropTypes.arrayOf(\n PropTypes.shape({ label: PropTypes.string, key: PropTypes.string })\n ),\n};\n\nexport default DynamicVariables;\n"],"names":["parseVariables","variableArr","arguments","length","undefined","uncategorized","groupedVariables","categorySet","Set","forEach","variable","category","label","variables","parsedVariables","map","mergeLeft","categoryLabel","has","add","push","existingGroup","findBy","uniqBy","prop","concat","isEmpty","DynamicVariables","_ref","_ref$onVariableClick","onVariableClick","noop","_ref$variables","buttonProps","dropdownProps","_objectWithoutProperties","_excluded","_jsx","DropdownMenu","_objectSpread","position","customTarget","className","children","Button","icon","Braces","size","variant","collisionPadding","_ref2","_jsxs","Typography","color","weight","joinHyphenCase","item","onClick"],"mappings":"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","x_google_ignoreList":[0]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bigbinary/neeto-molecules",
3
- "version": "5.2.20",
3
+ "version": "5.2.21",
4
4
  "description": "A package of reusable molecular components for neeto products.",
5
5
  "repository": "git@github.com:bigbinary/neeto-molecules.git",
6
6
  "author": "Amaljith K <amaljith.k@bigbinary.com>",