gdx-ui 1.15.4 → 2.0.2

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 (69) hide show
  1. package/base.css +1 -1
  2. package/components/autocomplete/Autocomplete.js +64 -53
  3. package/components/badge/Badge.js +2 -2
  4. package/components/box/Box.js +29 -32
  5. package/components/dialog/Dialog.js +15 -26
  6. package/components/editable/Editable.js +105 -95
  7. package/components/editable/EditableArea.js +3 -0
  8. package/components/flex/Flex.js +51 -22
  9. package/components/forms/LabelInput.js +13 -4
  10. package/components/forms/LabelValue.js +13 -4
  11. package/components/images/CarouselImages.js +11 -12
  12. package/components/images/Img.js +14 -26
  13. package/components/images/Thumb.js +16 -40
  14. package/components/images/{ImageZoom.js → ZoomImage.js} +74 -111
  15. package/components/images/{PictureZoomBtns.js → ZoomImageButtons.js} +50 -63
  16. package/components/images/{Picture.js → ZoomImageSquare.js} +3 -3
  17. package/components/images/index.js +33 -11
  18. package/components/images/useImageLoader.js +76 -0
  19. package/components/list/ScrollableList.js +1 -1
  20. package/components/navbar/NavbarResponsive.js +49 -18
  21. package/components/snackbar/Snackbar.js +1 -1
  22. package/components/table/Table.js +14 -1
  23. package/components/util/List.js +5 -4
  24. package/components/util/Note.js +14 -5
  25. package/components/util/Skeleton.js +9 -6
  26. package/components/util/Text.js +44 -9
  27. package/components/util/Title.js +39 -8
  28. package/components/util/index.js +0 -11
  29. package/components/widget/Widget.js +16 -5
  30. package/hooks/index.js +11 -0
  31. package/hooks/useAutocomplete.js +103 -0
  32. package/index.js +11 -0
  33. package/package.json +1 -1
  34. package/stories/box/Box.stories.js +1 -1
  35. package/stories/editable/Editable.stories.js +26 -0
  36. package/stories/editable/Editor.stories.js +33 -0
  37. package/stories/forms/Autocomplete.stories.js +101 -0
  38. package/stories/images/CarouselImages.stories.js +31 -0
  39. package/stories/images/{images.stories.js → Images.stories.js} +1 -1
  40. package/stories/images/ZoomImage.stories.js +24 -0
  41. package/stories/images/ZoomImageButtons.stories.js +23 -0
  42. package/stories/images/ZoomImageSquare.stories.js +23 -0
  43. package/stories/layout/Flex.stories.js +180 -0
  44. package/stories/layout/Navbar.stories.js +137 -0
  45. package/stories/layout/Skeleton.stories.js +30 -0
  46. package/stories/list/List.stories.js +31 -3
  47. package/stories/list/ScrollableList.stories.js +37 -8
  48. package/stories/utils/Badge.stories.js +29 -0
  49. package/stories/utils/Expanded.stories.js +18 -7
  50. package/stories/utils/Loader.stories.js +32 -0
  51. package/stories/utils/Note.stories.js +47 -0
  52. package/stories/utils/Snackbar.stories.js +46 -0
  53. package/stories/utils/Text.stories.js +41 -0
  54. package/stories/utils/Title.stories.js +26 -0
  55. package/stories/utils/TokensBorders.stories.js +41 -0
  56. package/stories/utils/TokensColors.stories.js +45 -0
  57. package/stories/utils/TokensFontSizes.stories.js +39 -0
  58. package/stories/utils/TokensMargins.stories.js +51 -0
  59. package/stories/utils/Tooltip.stories.js +22 -0
  60. package/stories/widget/Widget.stories.js +59 -0
  61. package/tokens.js +44 -0
  62. package/components/images/PictureZoomSquare.js +0 -60
  63. package/components/list/SortableList.js +0 -138
  64. package/components/list/SortableListOLD.js +0 -121
  65. package/components/scroller/ListScroller.js +0 -113
  66. package/components/util/Anchor.js +0 -30
  67. package/stories/flex/Flex.stories.js +0 -35
  68. package/stories/list/SorteableList.stories.js +0 -45
  69. /package/stories/images/{thumb.stories.js → Thumb.stories.js} +0 -0
@@ -0,0 +1,103 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.useAutocomplete = void 0;
7
+ var _react = require("react");
8
+ function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
9
+ function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
10
+ function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
11
+ function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
12
+ function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
13
+ function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
14
+ /**
15
+ * Hook para manejar la lógica de Autocomplete
16
+ * @param {Object} options
17
+ * @param {number} options.debounceMs - Tiempo de debounce en ms (default 300)
18
+ * @param {Function} options.onSearch - Callback cuando el usuario escribe (recibe el valor, debe retornar promesa con data)
19
+ * @param {number} options.minChars - Caracteres mínimos para disparar búsqueda (default 1)
20
+ * @returns {Object} - { value, setValue, data, isLoading, handleChange, handleSelect }
21
+ */
22
+ var useAutocomplete = exports.useAutocomplete = function useAutocomplete() {
23
+ var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
24
+ _ref$debounceMs = _ref.debounceMs,
25
+ debounceMs = _ref$debounceMs === void 0 ? 300 : _ref$debounceMs,
26
+ _ref$onSearch = _ref.onSearch,
27
+ onSearch = _ref$onSearch === void 0 ? null : _ref$onSearch,
28
+ _ref$minChars = _ref.minChars,
29
+ minChars = _ref$minChars === void 0 ? 1 : _ref$minChars;
30
+ var _useState = (0, _react.useState)(''),
31
+ _useState2 = _slicedToArray(_useState, 2),
32
+ value = _useState2[0],
33
+ setValue = _useState2[1];
34
+ var _useState3 = (0, _react.useState)([]),
35
+ _useState4 = _slicedToArray(_useState3, 2),
36
+ data = _useState4[0],
37
+ setData = _useState4[1];
38
+ var _useState5 = (0, _react.useState)(false),
39
+ _useState6 = _slicedToArray(_useState5, 2),
40
+ isLoading = _useState6[0],
41
+ setIsLoading = _useState6[1];
42
+ var debounceTimerId = (0, _react.useRef)(null);
43
+ var handleChange = (0, _react.useCallback)(function (newValue) {
44
+ setValue(newValue);
45
+
46
+ // Limpiar timer anterior
47
+ if (debounceTimerId.current) {
48
+ clearTimeout(debounceTimerId.current);
49
+ }
50
+
51
+ // Si no hay callback, no hacer nada
52
+ if (!onSearch) {
53
+ setData([]);
54
+ return;
55
+ }
56
+
57
+ // Si no hay suficientes caracteres, limpiar resultados
58
+ if (newValue.trim().length < minChars) {
59
+ setData([]);
60
+ setIsLoading(false);
61
+ return;
62
+ }
63
+
64
+ // Debounce: esperar antes de buscar
65
+ debounceTimerId.current = setTimeout(function () {
66
+ setIsLoading(true);
67
+
68
+ // Ejecutar búsqueda (esperamos que retorne promesa)
69
+ Promise.resolve(onSearch(newValue)).then(function (results) {
70
+ setData(Array.isArray(results) ? results : []);
71
+ setIsLoading(false);
72
+ })["catch"](function (error) {
73
+ console.error('Error en búsqueda de autocomplete:', error);
74
+ setData([]);
75
+ setIsLoading(false);
76
+ });
77
+ }, debounceMs);
78
+ }, [debounceMs, onSearch, minChars]);
79
+ var handleSelect = (0, _react.useCallback)(function (selectedItem) {
80
+ // El padre decide qué hacer con la selección
81
+ setValue('');
82
+ setData([]);
83
+ return selectedItem;
84
+ }, []);
85
+
86
+ // Limpiar timeout al desmontar
87
+ (0, _react.useEffect)(function () {
88
+ return function () {
89
+ if (debounceTimerId.current) {
90
+ clearTimeout(debounceTimerId.current);
91
+ }
92
+ };
93
+ }, []);
94
+ return {
95
+ value: value,
96
+ setValue: setValue,
97
+ data: data,
98
+ setData: setData,
99
+ isLoading: isLoading,
100
+ handleChange: handleChange,
101
+ handleSelect: handleSelect
102
+ };
103
+ };
package/index.js CHANGED
@@ -35,4 +35,15 @@ Object.keys(_layout).forEach(function (key) {
35
35
  return _layout[key];
36
36
  }
37
37
  });
38
+ });
39
+ var _tokens = require("./tokens");
40
+ Object.keys(_tokens).forEach(function (key) {
41
+ if (key === "default" || key === "__esModule") return;
42
+ if (key in exports && exports[key] === _tokens[key]) return;
43
+ Object.defineProperty(exports, key, {
44
+ enumerable: true,
45
+ get: function get() {
46
+ return _tokens[key];
47
+ }
48
+ });
38
49
  });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "gdx-ui",
3
- "version": "1.15.4",
3
+ "version": "2.0.2",
4
4
  "description": "UI gdx",
5
5
  "main": "index.js",
6
6
  "module": "index.js",
@@ -27,6 +27,6 @@ var BoxDefault = exports.BoxDefault = {
27
27
  style: {
28
28
  width: '400px'
29
29
  }
30
- }, /*#__PURE__*/_react["default"].createElement(_Box.Box, args, /*#__PURE__*/_react["default"].createElement(_Box.BoxHeader, null, "Box Header"), /*#__PURE__*/_react["default"].createElement(_Box.BoxContent, null, "The content of the box goes here.")));
30
+ }, /*#__PURE__*/_react["default"].createElement(_Box.Box, args, /*#__PURE__*/_react["default"].createElement(_Box.BoxHeader, null, "Box Header"), /*#__PURE__*/_react["default"].createElement(_Box.BoxContent, null, "The content of the box goes here. ", /*#__PURE__*/_react["default"].createElement("br", null), "The content of the box goes here. ", /*#__PURE__*/_react["default"].createElement("br", null), "The content of the box goes here. ", /*#__PURE__*/_react["default"].createElement("br", null))));
31
31
  }
32
32
  };
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports["default"] = exports.BoxDefault = void 0;
7
+ var _react = _interopRequireDefault(require("react"));
8
+ var _Box = require("../../components/box/Box");
9
+ var _components = require("../../components");
10
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }
11
+ var _default = exports["default"] = {
12
+ title: 'Editable/Editable',
13
+ component: _components.Editable,
14
+ parameters: {
15
+ layout: 'centered'
16
+ },
17
+ tags: ['autodocs']
18
+ };
19
+ var BoxDefault = exports.BoxDefault = {
20
+ args: {
21
+ placeHolder: 'Click to edit'
22
+ },
23
+ render: function render(args) {
24
+ return /*#__PURE__*/_react["default"].createElement(_components.Editable, args, "Hola mundo");
25
+ }
26
+ };
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports["default"] = exports.BoxDefault = void 0;
7
+ var _react = _interopRequireDefault(require("react"));
8
+ var _Box = require("../../components/box/Box");
9
+ var _components = require("../../components");
10
+ var _HTMLEditor = _interopRequireDefault(require("../../components/editor/HTMLEditor"));
11
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }
12
+ var _default = exports["default"] = {
13
+ title: 'Editable/HTMLEditor',
14
+ component: _HTMLEditor["default"],
15
+ parameters: {
16
+ layout: 'centered'
17
+ },
18
+ tags: ['autodocs']
19
+ };
20
+ var BoxDefault = exports.BoxDefault = {
21
+ args: {
22
+ content: 'Click to edit',
23
+ error: undefined,
24
+ height: 200
25
+ },
26
+ render: function render(args) {
27
+ return /*#__PURE__*/_react["default"].createElement("div", {
28
+ style: {
29
+ width: '600px'
30
+ }
31
+ }, /*#__PURE__*/_react["default"].createElement(_HTMLEditor["default"], args));
32
+ }
33
+ };
@@ -0,0 +1,101 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports["default"] = exports.Default = void 0;
7
+ var _react = _interopRequireDefault(require("react"));
8
+ var _Autocomplete = require("../../components/autocomplete/Autocomplete");
9
+ var _useAutocomplete2 = require("../../hooks/useAutocomplete");
10
+ var _Information = require("../../components/information/Information");
11
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }
12
+ function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
13
+ function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
14
+ function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
15
+ function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
16
+ function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
17
+ function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
18
+ var staticData = [{
19
+ key: '1',
20
+ text: 'David Antonio'
21
+ }, {
22
+ key: '2',
23
+ text: 'Juan Alberto'
24
+ }, {
25
+ key: '3',
26
+ text: 'Juan Carlos'
27
+ }, {
28
+ key: '4',
29
+ text: 'Carlos Alberto'
30
+ }, {
31
+ key: '5',
32
+ text: 'David'
33
+ }, {
34
+ key: '6',
35
+ text: 'Diana'
36
+ }];
37
+ var LocalSearchExample = function LocalSearchExample() {
38
+ var _React$useState = _react["default"].useState(null),
39
+ _React$useState2 = _slicedToArray(_React$useState, 2),
40
+ result = _React$useState2[0],
41
+ setResult = _React$useState2[1];
42
+ var _useAutocomplete = (0, _useAutocomplete2.useAutocomplete)({
43
+ debounceMs: 300,
44
+ minChars: 1,
45
+ onSearch: function onSearch(query) {
46
+ // Búsqueda local en staticData
47
+ var filtered = staticData.filter(function (item) {
48
+ return item.text.toLowerCase().includes(query.toLowerCase());
49
+ });
50
+ return filtered;
51
+ }
52
+ }),
53
+ value = _useAutocomplete.value,
54
+ data = _useAutocomplete.data,
55
+ isLoading = _useAutocomplete.isLoading,
56
+ handleChange = _useAutocomplete.handleChange,
57
+ handleSelect = _useAutocomplete.handleSelect;
58
+ return /*#__PURE__*/_react["default"].createElement("div", {
59
+ style: {
60
+ width: '400px'
61
+ }
62
+ }, /*#__PURE__*/_react["default"].createElement(_Information.Information, null, "Utilice el hook ", /*#__PURE__*/_react["default"].createElement("code", null, "useAutocomplete"), " para manejar la l\xF3gica de b\xFAsqueda y selecci\xF3n, mientras que el componente ", /*#__PURE__*/_react["default"].createElement("code", null, "Autocomplete"), " se encarga de la interfaz. En este ejemplo, se realiza una b\xFAsqueda local en un array est\xE1tico, pero el hook tambi\xE9n puede manejar b\xFAsquedas remotas."), /*#__PURE__*/_react["default"].createElement("br", null), /*#__PURE__*/_react["default"].createElement(_Autocomplete.Autocomplete, {
63
+ label: "Buscar nombre",
64
+ placeholder: "Escribe para buscar...",
65
+ expanded: true,
66
+ data: data,
67
+ value: value,
68
+ onChange: function onChange(e) {
69
+ return handleChange(e.target.value);
70
+ },
71
+ onSelect: function onSelect(item) {
72
+ handleSelect(item);
73
+ setResult(item);
74
+ },
75
+ renderItem: function renderItem(item) {
76
+ return item.text;
77
+ }
78
+ }), isLoading && /*#__PURE__*/_react["default"].createElement("p", {
79
+ style: {
80
+ marginTop: '10px',
81
+ fontSize: '12px'
82
+ }
83
+ }, "Buscando..."), result && /*#__PURE__*/_react["default"].createElement("div", {
84
+ style: {
85
+ marginTop: '10px'
86
+ }
87
+ }, /*#__PURE__*/_react["default"].createElement("strong", null, "Seleccionado:"), " ", result.text));
88
+ };
89
+ var _default = exports["default"] = {
90
+ title: 'Forms/Autocomplete',
91
+ component: _Autocomplete.Autocomplete,
92
+ parameters: {
93
+ layout: 'centered'
94
+ },
95
+ tags: ['autodocs']
96
+ };
97
+ var Default = exports.Default = {
98
+ render: function render() {
99
+ return /*#__PURE__*/_react["default"].createElement(LocalSearchExample, null);
100
+ }
101
+ };
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports["default"] = exports.Default = void 0;
7
+ var _react = _interopRequireDefault(require("react"));
8
+ var _components = require("../../components");
9
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }
10
+ var _default = exports["default"] = {
11
+ title: 'Images/CarouselImages',
12
+ component: _components.CarouselImages,
13
+ tags: ['autodocs']
14
+ };
15
+ var Default = exports.Default = {
16
+ args: {
17
+ data: [{
18
+ src: 'https://www.gadxe.com/files/imgs/i2409/b/5921blue.jpg',
19
+ alt: 'Example Image 1',
20
+ title: 'Use title prop to add a title to the image'
21
+ }, {
22
+ src: 'https://www.gadxe.com/files/imgs/i2409/b/88654000105981-847_blue_2.webp',
23
+ alt: 'Example Image 2'
24
+ }, {
25
+ src: 'https://www.gadxe.com/files/imgs/i2409/b/7340marino1.jpg',
26
+ alt: 'Example Image 3'
27
+ }],
28
+ height: 800,
29
+ interval: 5
30
+ }
31
+ };
@@ -16,7 +16,7 @@ var Default = exports.Default = {
16
16
  args: {
17
17
  src: 'https://www.gadxe.com/files/imgs/i2409/b/5921blue.jpg',
18
18
  alt: 'Example Image',
19
- width: 300,
19
+ width: '50%',
20
20
  align: 'center',
21
21
  bordered: false
22
22
  }
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports["default"] = exports.Default = void 0;
7
+ var _react = _interopRequireDefault(require("react"));
8
+ var _components = require("../../components");
9
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }
10
+ var _default = exports["default"] = {
11
+ title: 'Images/ZoomImage',
12
+ component: _components.ZoomImage,
13
+ tags: ['autodocs']
14
+ };
15
+ var Default = exports.Default = {
16
+ args: {
17
+ src: 'https://www.gadxe.com/files/imgs/i2409/b/5921blue.jpg',
18
+ alt: 'Example Image',
19
+ width: '50%',
20
+ bordered: true,
21
+ maxZoom: 2,
22
+ showHelper: true
23
+ }
24
+ };
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports["default"] = exports.Default = void 0;
7
+ var _react = _interopRequireDefault(require("react"));
8
+ var _components = require("../../components");
9
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }
10
+ var _default = exports["default"] = {
11
+ title: 'Images/ZoomImageButtons',
12
+ component: _components.ZoomImageButtons,
13
+ tags: ['autodocs']
14
+ };
15
+ var Default = exports.Default = {
16
+ args: {
17
+ src: 'https://www.gadxe.com/files/imgs/i2409/b/5921blue.jpg',
18
+ alt: 'Example Image',
19
+ width: 600,
20
+ bordered: true,
21
+ maxZoom: 2
22
+ }
23
+ };
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports["default"] = exports.Default = void 0;
7
+ var _react = _interopRequireDefault(require("react"));
8
+ var _ZoomImageSquare = require("../../components/images/ZoomImageSquare");
9
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }
10
+ var _default = exports["default"] = {
11
+ title: 'Images/ZoomImageSquare',
12
+ component: _ZoomImageSquare.ZoomImageSquare,
13
+ tags: ['autodocs']
14
+ };
15
+ var Default = exports.Default = {
16
+ args: {
17
+ src: 'https://www.gadxe.com/files/imgs/i2409/b/5921blue.jpg',
18
+ alt: 'Example Image',
19
+ width: '50%',
20
+ height: '50%',
21
+ bordered: false
22
+ }
23
+ };
@@ -0,0 +1,180 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports["default"] = exports.Inline = exports.Grid = void 0;
7
+ var _react = _interopRequireDefault(require("react"));
8
+ var _components = require("../../components");
9
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }
10
+ var _default = exports["default"] = {
11
+ title: 'Layout/Flex',
12
+ component: _components.Flex,
13
+ tags: ['autodocs']
14
+ }; // Simulates a page at a specific width — useful to see responsive grid behavior
15
+ var PageSimulator = function PageSimulator(_ref) {
16
+ var width = _ref.width,
17
+ children = _ref.children;
18
+ return /*#__PURE__*/_react["default"].createElement("div", {
19
+ style: {
20
+ width: width,
21
+ margin: '0 auto',
22
+ border: '1px dashed #717171',
23
+ boxSizing: 'border-box'
24
+ }
25
+ }, children);
26
+ };
27
+
28
+ // Grid story: N items, M columns (desktop), with phone/tablet overrides
29
+ var Grid = exports.Grid = {
30
+ render: function render(_ref2) {
31
+ var width = _ref2.width,
32
+ columns = _ref2.columns,
33
+ phone = _ref2.phone,
34
+ tablet = _ref2.tablet,
35
+ gap = _ref2.gap,
36
+ items = _ref2.items;
37
+ var data = Array.from({
38
+ length: items
39
+ }, function (_, i) {
40
+ return i + 1;
41
+ });
42
+ return /*#__PURE__*/_react["default"].createElement(PageSimulator, {
43
+ width: width
44
+ }, /*#__PURE__*/_react["default"].createElement(_components.Flex, {
45
+ columns: columns,
46
+ phone: phone,
47
+ tablet: tablet,
48
+ gap: gap,
49
+ alignItems: "stretch"
50
+ }, data.map(function (n) {
51
+ return /*#__PURE__*/_react["default"].createElement(_components.FlexItem, {
52
+ key: n
53
+ }, /*#__PURE__*/_react["default"].createElement(_components.Widget, {
54
+ hover: true
55
+ }, "Item ", n));
56
+ })));
57
+ },
58
+ argTypes: {
59
+ width: {
60
+ control: {
61
+ type: 'range',
62
+ min: 320,
63
+ max: 1400,
64
+ step: 10
65
+ },
66
+ description: 'Simulated page width in px (drag to test responsive breakpoints)'
67
+ },
68
+ columns: {
69
+ control: {
70
+ type: 'number',
71
+ min: 1,
72
+ max: 12
73
+ },
74
+ description: 'Columns per row on desktop (>1115px)'
75
+ },
76
+ phone: {
77
+ control: {
78
+ type: 'number',
79
+ min: 1,
80
+ max: 4
81
+ },
82
+ description: 'Columns per row on phone (≤550px)'
83
+ },
84
+ tablet: {
85
+ control: {
86
+ type: 'number',
87
+ min: 1,
88
+ max: 6
89
+ },
90
+ description: 'Columns per row on tablet (551px–1115px)'
91
+ },
92
+ gap: {
93
+ control: {
94
+ type: 'number',
95
+ min: 0,
96
+ max: 40
97
+ },
98
+ description: 'Gap between items in px'
99
+ },
100
+ items: {
101
+ control: {
102
+ type: 'number',
103
+ min: 1,
104
+ max: 48
105
+ },
106
+ description: 'Total number of items (N)'
107
+ }
108
+ },
109
+ args: {
110
+ width: 1100,
111
+ columns: 3,
112
+ phone: 1,
113
+ tablet: 2,
114
+ gap: 15,
115
+ items: 9
116
+ }
117
+ };
118
+ var data = Array.from({
119
+ length: 5
120
+ }, function (_, i) {
121
+ return {
122
+ id: i + 1,
123
+ title: "Item ".concat(i + 1)
124
+ };
125
+ });
126
+
127
+ // Simple flex (no grid) — original behavior
128
+ var Inline = exports.Inline = {
129
+ render: function render(_ref3) {
130
+ var width = _ref3.width,
131
+ gap = _ref3.gap,
132
+ justify = _ref3.justify,
133
+ alignItems = _ref3.alignItems;
134
+ return /*#__PURE__*/_react["default"].createElement(PageSimulator, {
135
+ width: width
136
+ }, /*#__PURE__*/_react["default"].createElement(_components.Flex, {
137
+ gap: gap,
138
+ justify: justify,
139
+ alignItems: alignItems
140
+ }, data.map(function (item) {
141
+ return /*#__PURE__*/_react["default"].createElement(_components.FlexItem, {
142
+ key: item.id,
143
+ align: "center"
144
+ }, /*#__PURE__*/_react["default"].createElement(_components.Widget, {
145
+ bordered: true
146
+ }, item.title));
147
+ })));
148
+ },
149
+ argTypes: {
150
+ width: {
151
+ control: {
152
+ type: 'range',
153
+ min: 320,
154
+ max: 1400,
155
+ step: 10
156
+ }
157
+ },
158
+ gap: {
159
+ control: {
160
+ type: 'number',
161
+ min: 0,
162
+ max: 40
163
+ }
164
+ },
165
+ justify: {
166
+ control: 'select',
167
+ options: ['left', 'center', 'right', 'between']
168
+ },
169
+ alignItems: {
170
+ control: 'select',
171
+ options: ['start', 'center', 'end', 'stretch', 'baseline']
172
+ }
173
+ },
174
+ args: {
175
+ width: 800,
176
+ gap: 15,
177
+ justify: 'left',
178
+ alignItems: 'center'
179
+ }
180
+ };