@heymantle/litho 0.0.4 → 0.0.5

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 (146) hide show
  1. package/dist/cjs/components/Autocomplete.js +23 -12
  2. package/dist/cjs/components/Button.js +44 -6
  3. package/dist/cjs/components/Card.js +1 -0
  4. package/dist/cjs/components/ColorField.js +2 -2
  5. package/dist/cjs/components/EmptyState.js +2 -2
  6. package/dist/cjs/components/Filters.js +4 -3
  7. package/dist/cjs/components/Frame.js +9 -9
  8. package/dist/cjs/components/HorizontalStack.js +9 -2
  9. package/dist/cjs/components/Icon.js +1 -0
  10. package/dist/cjs/components/List.js +3 -3
  11. package/dist/cjs/components/Pane.js +61 -17
  12. package/dist/cjs/components/Stack.js +223 -0
  13. package/dist/cjs/components/Table.js +1 -1
  14. package/dist/cjs/components/Tabs.js +41 -11
  15. package/dist/cjs/components/VerticalStack.js +8 -2
  16. package/dist/cjs/index.js +4 -0
  17. package/dist/cjs/stories/ActionList.stories.js +1 -1
  18. package/dist/cjs/stories/Autocomplete.stories.js +20 -17
  19. package/dist/cjs/stories/Box.stories.js +14 -12
  20. package/dist/cjs/stories/ButtonGroup.stories.js +5 -5
  21. package/dist/cjs/stories/Card.stories.js +8 -8
  22. package/dist/cjs/stories/Checkbox.stories.js +3 -3
  23. package/dist/cjs/stories/ChoiceList.stories.js +13 -12
  24. package/dist/cjs/stories/Collapsible.stories.js +51 -39
  25. package/dist/cjs/stories/ColorField.stories.js +23 -19
  26. package/dist/cjs/stories/ContextualSaveBar.stories.js +15 -14
  27. package/dist/cjs/stories/DatePicker.stories.js +3 -3
  28. package/dist/cjs/stories/Divider.stories.js +64 -57
  29. package/dist/cjs/stories/DropZone.stories.js +25 -20
  30. package/dist/cjs/stories/Filters.stories.js +62 -60
  31. package/dist/cjs/stories/FooterHelp.stories.js +36 -31
  32. package/dist/cjs/stories/Form.stories.js +23 -20
  33. package/dist/cjs/stories/Grid.stories.js +58 -58
  34. package/dist/cjs/stories/Icon.stories.js +31 -28
  35. package/dist/cjs/stories/Image.stories.js +36 -36
  36. package/dist/cjs/stories/InlineError.stories.js +35 -34
  37. package/dist/cjs/stories/Label.stories.js +59 -59
  38. package/dist/cjs/stories/Layout.stories.js +44 -42
  39. package/dist/cjs/stories/LayoutSection.stories.js +114 -106
  40. package/dist/cjs/stories/Link.stories.js +14 -12
  41. package/dist/cjs/stories/List.stories.js +67 -50
  42. package/dist/cjs/stories/Listbox.stories.js +26 -22
  43. package/dist/cjs/stories/Loading.stories.js +59 -50
  44. package/dist/cjs/stories/Modal.stories.js +7 -7
  45. package/dist/cjs/stories/Page.stories.js +38 -29
  46. package/dist/cjs/stories/Pane.stories.js +135 -120
  47. package/dist/cjs/stories/Popover.stories.js +12 -8
  48. package/dist/cjs/stories/PopoverManager.stories.js +91 -83
  49. package/dist/cjs/stories/ProgressBar.stories.js +61 -54
  50. package/dist/cjs/stories/RadioButtonCard.stories.js +21 -21
  51. package/dist/cjs/stories/RangeSlider.stories.js +44 -40
  52. package/dist/cjs/stories/ResourceList.stories.js +46 -37
  53. package/dist/cjs/stories/SkeletonText.stories.js +23 -22
  54. package/dist/cjs/stories/Spinner.stories.js +46 -39
  55. package/dist/cjs/stories/Stack.stories.js +1397 -0
  56. package/dist/cjs/stories/Tabs.stories.js +1 -2
  57. package/dist/cjs/stories/Tag.stories.js +44 -36
  58. package/dist/cjs/stories/Thumbnail.stories.js +42 -38
  59. package/dist/cjs/stories/TimePicker.stories.js +33 -32
  60. package/dist/cjs/stories/Tip.stories.js +21 -21
  61. package/dist/cjs/stories/TopBar.stories.js +7 -5
  62. package/dist/esm/components/Autocomplete.js +23 -12
  63. package/dist/esm/components/Button.js +44 -6
  64. package/dist/esm/components/Card.js +1 -0
  65. package/dist/esm/components/ColorField.js +2 -2
  66. package/dist/esm/components/EmptyState.js +2 -2
  67. package/dist/esm/components/Filters.js +4 -3
  68. package/dist/esm/components/Frame.js +9 -9
  69. package/dist/esm/components/HorizontalStack.js +9 -2
  70. package/dist/esm/components/Icon.js +1 -0
  71. package/dist/esm/components/List.js +3 -3
  72. package/dist/esm/components/Pane.js +62 -18
  73. package/dist/esm/components/Stack.js +213 -0
  74. package/dist/esm/components/Table.js +1 -1
  75. package/dist/esm/components/Tabs.js +41 -11
  76. package/dist/esm/components/VerticalStack.js +8 -2
  77. package/dist/esm/index.js +1 -0
  78. package/dist/esm/stories/ActionList.stories.js +1 -1
  79. package/dist/esm/stories/Autocomplete.stories.js +20 -17
  80. package/dist/esm/stories/Box.stories.js +14 -12
  81. package/dist/esm/stories/ButtonGroup.stories.js +5 -5
  82. package/dist/esm/stories/Card.stories.js +8 -8
  83. package/dist/esm/stories/Checkbox.stories.js +3 -3
  84. package/dist/esm/stories/ChoiceList.stories.js +13 -12
  85. package/dist/esm/stories/Collapsible.stories.js +51 -39
  86. package/dist/esm/stories/ColorField.stories.js +23 -19
  87. package/dist/esm/stories/ContextualSaveBar.stories.js +15 -14
  88. package/dist/esm/stories/DatePicker.stories.js +3 -3
  89. package/dist/esm/stories/Divider.stories.js +64 -57
  90. package/dist/esm/stories/DropZone.stories.js +25 -20
  91. package/dist/esm/stories/Filters.stories.js +62 -60
  92. package/dist/esm/stories/FooterHelp.stories.js +36 -31
  93. package/dist/esm/stories/Form.stories.js +23 -20
  94. package/dist/esm/stories/Grid.stories.js +58 -58
  95. package/dist/esm/stories/Icon.stories.js +31 -28
  96. package/dist/esm/stories/Image.stories.js +36 -36
  97. package/dist/esm/stories/InlineError.stories.js +27 -26
  98. package/dist/esm/stories/Label.stories.js +59 -59
  99. package/dist/esm/stories/Layout.stories.js +44 -42
  100. package/dist/esm/stories/LayoutSection.stories.js +114 -106
  101. package/dist/esm/stories/Link.stories.js +14 -12
  102. package/dist/esm/stories/List.stories.js +67 -50
  103. package/dist/esm/stories/Listbox.stories.js +12 -8
  104. package/dist/esm/stories/Loading.stories.js +59 -50
  105. package/dist/esm/stories/Modal.stories.js +7 -7
  106. package/dist/esm/stories/Page.stories.js +7 -3
  107. package/dist/esm/stories/Pane.stories.js +95 -80
  108. package/dist/esm/stories/Popover.stories.js +12 -8
  109. package/dist/esm/stories/PopoverManager.stories.js +91 -83
  110. package/dist/esm/stories/ProgressBar.stories.js +61 -54
  111. package/dist/esm/stories/RadioButtonCard.stories.js +21 -21
  112. package/dist/esm/stories/RangeSlider.stories.js +34 -30
  113. package/dist/esm/stories/ResourceList.stories.js +46 -37
  114. package/dist/esm/stories/SkeletonText.stories.js +23 -22
  115. package/dist/esm/stories/Spinner.stories.js +40 -33
  116. package/dist/esm/stories/Stack.stories.js +1338 -0
  117. package/dist/esm/stories/Tabs.stories.js +1 -2
  118. package/dist/esm/stories/Tag.stories.js +27 -19
  119. package/dist/esm/stories/Thumbnail.stories.js +42 -38
  120. package/dist/esm/stories/TimePicker.stories.js +33 -32
  121. package/dist/esm/stories/Tip.stories.js +21 -21
  122. package/dist/esm/stories/TopBar.stories.js +7 -5
  123. package/dist/types/components/Autocomplete.d.ts +34 -29
  124. package/dist/types/components/Autocomplete.d.ts.map +1 -1
  125. package/dist/types/components/Button.d.ts +10 -0
  126. package/dist/types/components/Button.d.ts.map +1 -1
  127. package/dist/types/components/Card.d.ts +2 -0
  128. package/dist/types/components/Card.d.ts.map +1 -1
  129. package/dist/types/components/EmptyState.d.ts.map +1 -1
  130. package/dist/types/components/Filters.d.ts +3 -1
  131. package/dist/types/components/Filters.d.ts.map +1 -1
  132. package/dist/types/components/Frame.d.ts +3 -3
  133. package/dist/types/components/Frame.d.ts.map +1 -1
  134. package/dist/types/components/HorizontalStack.d.ts +2 -2
  135. package/dist/types/components/HorizontalStack.d.ts.map +1 -1
  136. package/dist/types/components/Icon.d.ts.map +1 -1
  137. package/dist/types/components/Pane.d.ts.map +1 -1
  138. package/dist/types/components/Stack.d.ts +49 -0
  139. package/dist/types/components/Stack.d.ts.map +1 -0
  140. package/dist/types/components/Tabs.d.ts +2 -0
  141. package/dist/types/components/Tabs.d.ts.map +1 -1
  142. package/dist/types/components/VerticalStack.d.ts +2 -2
  143. package/dist/types/components/VerticalStack.d.ts.map +1 -1
  144. package/dist/types/index.d.ts +1 -0
  145. package/index.css +11 -0
  146. package/package.json +2 -2
@@ -46,18 +46,22 @@ function _unsupported_iterable_to_array(o, minLen) {
46
46
  if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _array_like_to_array(o, minLen);
47
47
  }
48
48
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
49
- import { CancelMajor } from "@shopify/polaris-icons";
49
+ import { CancelMajor, ArrowLeftMinor, MaximizeMajor, MinimizeMajor } from "@shopify/polaris-icons";
50
50
  import { tv } from "tailwind-variants";
51
51
  import { createContext, useContext, useEffect, Children, useState } from "react";
52
+ import Text from "./Text.js";
52
53
  import Button from "./Button.js";
53
54
  import Popover from "./Popover.js";
54
55
  import ActionList from "./ActionList.js";
55
56
  import { useFrame } from "./Frame.js";
56
57
  var styles = tv({
57
- base: "Litho-Pane hidden md:block fixed inset-0 w-full md:left-auto md:max-w-100 block bg-surface-highest shadow-card-strong pointer-events-auto"
58
+ base: "Litho-Pane hidden md:block fixed inset-0 w-full md:left-auto md:max-w-[var(--litho-pane-width)] block bg-surface-lowest shadow-pane-inner pointer-events-auto"
58
59
  });
59
60
  var innerStyles = tv({
60
- base: "flex flex-col overflow-y-auto h-full"
61
+ base: "relative flex flex-col overflow-y-auto h-full"
62
+ });
63
+ var dragHandleStyles = tv({
64
+ base: "cursor-col-resize absolute top-0 left-0 w-1 h-full transition-colors duration-300 hover-delay hover:bg-tint-3"
61
65
  });
62
66
  var PaneContext = /*#__PURE__*/ createContext({});
63
67
  function Pane() {
@@ -99,27 +103,57 @@ function Pane() {
99
103
  }
100
104
  function Header() {
101
105
  var props = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {};
102
- var children = props.children, _props_actions = props.actions, actions = _props_actions === void 0 ? [] : _props_actions, _props_showCloseButton = props.showCloseButton, showCloseButton = _props_showCloseButton === void 0 ? true : _props_showCloseButton, _props_bottomBorder = props.bottomBorder, bottomBorder = _props_bottomBorder === void 0 ? true : _props_bottomBorder, subHeader = props.subHeader;
106
+ var title = props.title, subtitle = props.subtitle, _props_actions = props.actions, actions = _props_actions === void 0 ? [] : _props_actions, _props_showCloseButton = props.showCloseButton, showCloseButton = _props_showCloseButton === void 0 ? true : _props_showCloseButton, _props_bottomBorder = props.bottomBorder, bottomBorder = _props_bottomBorder === void 0 ? true : _props_bottomBorder, subHeader = props.subHeader, tmp = props.backAction, _backAction = tmp === void 0 ? null : tmp, _props_expanded = props.expanded, expanded = _props_expanded === void 0 ? false : _props_expanded, _props_onToggleExpand = props.onToggleExpand, onToggleExpand = _props_onToggleExpand === void 0 ? function() {} : _props_onToggleExpand, _props_allowExpand = props.allowExpand, allowExpand = _props_allowExpand === void 0 ? true : _props_allowExpand;
103
107
  var onClose = useContext(PaneContext).onClose;
104
108
  var showActionsOrClose = actions.length > 0 || showCloseButton;
105
- var childCount = Children.count(children);
106
109
  var _useState = _sliced_to_array(useState(null), 2), showActionsPopover = _useState[0], setShowActionsPopover = _useState[1];
110
+ useEffect(function() {
111
+ var width = expanded ? 'var(--litho-pane-width-expanded)' : 'var(--litho-pane-width-default)';
112
+ document.documentElement.style.setProperty('--litho-pane-width', width);
113
+ }, [
114
+ expanded
115
+ ]);
116
+ var backAction = _backAction ? /*#__PURE__*/ _jsx("div", {
117
+ className: "Litho-Page__Header--BackAction",
118
+ children: /*#__PURE__*/ _jsx(Button, {
119
+ plain: true,
120
+ icon: ArrowLeftMinor,
121
+ onClick: function() {
122
+ return _backAction === null || _backAction === void 0 ? void 0 : _backAction.onAction();
123
+ },
124
+ accessibilityLabel: _backAction === null || _backAction === void 0 ? void 0 : _backAction.accessibilityLabel
125
+ })
126
+ }) : null;
107
127
  return /*#__PURE__*/ _jsxs("div", {
128
+ className: "Litho-Pane__Header",
108
129
  children: [
109
130
  /*#__PURE__*/ _jsxs("div", {
110
- className: "grid grid-cols-12 min-h-14 px-2 border-edge-subdued ".concat(bottomBorder ? "border-b" : ""),
131
+ className: "flex items-center justify-between min-h-14 px-2 border-edge-subdued ".concat(bottomBorder ? "border-b" : ""),
111
132
  children: [
112
- /*#__PURE__*/ _jsx("div", {
113
- className: "grid grid-cols-5 col-span-10",
114
- children: Children.map(children, function(child, index) {
115
- return /*#__PURE__*/ _jsx("div", {
116
- className: "flex col-span-2 items-center ".concat(childCount === 1 ? "col-span-5" : "", " ").concat(index > 0 ? "justify-center" : ""),
117
- children: child
118
- });
119
- })
133
+ /*#__PURE__*/ _jsxs("div", {
134
+ className: "flex items-center gap-2",
135
+ children: [
136
+ backAction,
137
+ /*#__PURE__*/ _jsxs("div", {
138
+ children: [
139
+ title && typeof title === "string" ? /*#__PURE__*/ _jsx(Text, {
140
+ variant: "headingMd",
141
+ className: "!leading-5",
142
+ clampLines: 1,
143
+ children: title
144
+ }) : title,
145
+ subtitle && typeof subtitle === "string" ? /*#__PURE__*/ _jsx(Text, {
146
+ color: "subdued",
147
+ className: "!leading-4",
148
+ clampLines: 1,
149
+ children: subtitle
150
+ }) : subtitle
151
+ ]
152
+ })
153
+ ]
120
154
  }),
121
155
  showActionsOrClose && /*#__PURE__*/ _jsxs("div", {
122
- className: "flex col-span-2 items-center justify-end",
156
+ className: "flex items-center justify-end",
123
157
  children: [
124
158
  actions.map(function(action, index) {
125
159
  var showPopover = action.subActions || action.subSections;
@@ -156,6 +190,16 @@ function Header() {
156
190
  }
157
191
  return innerContent;
158
192
  }),
193
+ allowExpand && /*#__PURE__*/ _jsx("div", {
194
+ className: "hidden xl:block",
195
+ children: /*#__PURE__*/ _jsx(Button, {
196
+ plain: true,
197
+ icon: expanded ? MinimizeMajor : MaximizeMajor,
198
+ onClick: onToggleExpand,
199
+ tooltip: expanded ? "Minimize" : "Expand",
200
+ tooltipPosition: "below"
201
+ })
202
+ }),
159
203
  showCloseButton && /*#__PURE__*/ _jsx(Button, {
160
204
  plain: true,
161
205
  icon: CancelMajor,
@@ -177,9 +221,9 @@ function Header() {
177
221
  Pane.Header = Header;
178
222
  function Content() {
179
223
  var props = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {};
180
- var children = props.children;
224
+ var children = props.children, _props_padded = props.padded, padded = _props_padded === void 0 ? true : _props_padded, className = props.className;
181
225
  return /*#__PURE__*/ _jsx("div", {
182
- className: "flex-1 overflow-auto",
226
+ className: "Litho-Pane__Content flex-1 overflow-auto ".concat(padded ? "p-2" : "", " ").concat(className),
183
227
  children: children
184
228
  });
185
229
  }
@@ -188,7 +232,7 @@ function Footer() {
188
232
  var props = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {};
189
233
  var children = props.children, _props_topBorder = props.topBorder, topBorder = _props_topBorder === void 0 ? true : _props_topBorder;
190
234
  return /*#__PURE__*/ _jsx("div", {
191
- className: "min-h-14 ".concat(topBorder ? "border-t border-edge-subdued" : ""),
235
+ className: "Litho-Pane__Footer min-h-12 ".concat(topBorder ? "border-t border-edge-subdued" : ""),
192
236
  children: children
193
237
  });
194
238
  }
@@ -0,0 +1,213 @@
1
+ "use client";
2
+ function _define_property(obj, key, value) {
3
+ if (key in obj) {
4
+ Object.defineProperty(obj, key, {
5
+ value: value,
6
+ enumerable: true,
7
+ configurable: true,
8
+ writable: true
9
+ });
10
+ } else {
11
+ obj[key] = value;
12
+ }
13
+ return obj;
14
+ }
15
+ function _object_spread(target) {
16
+ for(var i = 1; i < arguments.length; i++){
17
+ var source = arguments[i] != null ? arguments[i] : {};
18
+ var ownKeys = Object.keys(source);
19
+ if (typeof Object.getOwnPropertySymbols === "function") {
20
+ ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function(sym) {
21
+ return Object.getOwnPropertyDescriptor(source, sym).enumerable;
22
+ }));
23
+ }
24
+ ownKeys.forEach(function(key) {
25
+ _define_property(target, key, source[key]);
26
+ });
27
+ }
28
+ return target;
29
+ }
30
+ function ownKeys(object, enumerableOnly) {
31
+ var keys = Object.keys(object);
32
+ if (Object.getOwnPropertySymbols) {
33
+ var symbols = Object.getOwnPropertySymbols(object);
34
+ if (enumerableOnly) {
35
+ symbols = symbols.filter(function(sym) {
36
+ return Object.getOwnPropertyDescriptor(object, sym).enumerable;
37
+ });
38
+ }
39
+ keys.push.apply(keys, symbols);
40
+ }
41
+ return keys;
42
+ }
43
+ function _object_spread_props(target, source) {
44
+ source = source != null ? source : {};
45
+ if (Object.getOwnPropertyDescriptors) {
46
+ Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));
47
+ } else {
48
+ ownKeys(Object(source)).forEach(function(key) {
49
+ Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
50
+ });
51
+ }
52
+ return target;
53
+ }
54
+ function _object_without_properties(source, excluded) {
55
+ if (source == null) return {};
56
+ var target = _object_without_properties_loose(source, excluded);
57
+ var key, i;
58
+ if (Object.getOwnPropertySymbols) {
59
+ var sourceSymbolKeys = Object.getOwnPropertySymbols(source);
60
+ for(i = 0; i < sourceSymbolKeys.length; i++){
61
+ key = sourceSymbolKeys[i];
62
+ if (excluded.indexOf(key) >= 0) continue;
63
+ if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;
64
+ target[key] = source[key];
65
+ }
66
+ }
67
+ return target;
68
+ }
69
+ function _object_without_properties_loose(source, excluded) {
70
+ if (source == null) return {};
71
+ var target = {};
72
+ var sourceKeys = Object.keys(source);
73
+ var key, i;
74
+ for(i = 0; i < sourceKeys.length; i++){
75
+ key = sourceKeys[i];
76
+ if (excluded.indexOf(key) >= 0) continue;
77
+ target[key] = source[key];
78
+ }
79
+ return target;
80
+ }
81
+ import { jsx as _jsx } from "react/jsx-runtime";
82
+ import { tv } from "tailwind-variants";
83
+ var styles = tv({
84
+ base: "Litho-Stack flex",
85
+ variants: {
86
+ direction: {
87
+ vertical: "flex-col",
88
+ horizontal: "flex-row"
89
+ },
90
+ gap: {
91
+ // Semantic values (recommended)
92
+ none: "gap-0",
93
+ xs: "gap-1",
94
+ sm: "gap-2",
95
+ md: "gap-4",
96
+ lg: "gap-8",
97
+ // Numeric values (backwards compatibility)
98
+ "0": "gap-0",
99
+ "px": "gap-px",
100
+ "0.5": "gap-0.5",
101
+ "1": "gap-1",
102
+ "2": "gap-2",
103
+ "3": "gap-3",
104
+ "4": "gap-4",
105
+ "5": "gap-5",
106
+ "6": "gap-6",
107
+ "8": "gap-8",
108
+ "10": "gap-10"
109
+ },
110
+ align: {
111
+ start: "justify-start",
112
+ center: "justify-center",
113
+ end: "justify-end",
114
+ "space-between": "justify-between",
115
+ "space-evenly": "justify-evenly",
116
+ "space-around": "justify-around",
117
+ spaceBetween: "justify-between"
118
+ },
119
+ blockAlign: {
120
+ start: "items-start",
121
+ center: "items-center",
122
+ end: "items-end",
123
+ stretch: "items-stretch"
124
+ },
125
+ inlineAlign: {
126
+ start: "items-start",
127
+ center: "items-center",
128
+ end: "items-end",
129
+ stretch: "items-stretch"
130
+ },
131
+ wrap: {
132
+ true: "flex-wrap",
133
+ false: "flex-nowrap"
134
+ }
135
+ },
136
+ defaultVariants: {
137
+ direction: "vertical",
138
+ gap: "md",
139
+ align: "start"
140
+ }
141
+ });
142
+ /**
143
+ * Stack Component
144
+ *
145
+ * A flexible stack component for creating vertical or horizontal layouts with customizable spacing and alignment.
146
+ * By default, creates a vertical stack with medium gap spacing.
147
+ *
148
+ * @param {Object} [props={}] - Component props.
149
+ * @param {string} [props.as='div'] - The HTML element to render. Defaults to `div`.
150
+ * @param {React.ReactNode} [props.children] - Child elements to render inside the stack.
151
+ * @param {boolean} [props.horizontal=false] - If true, renders a horizontal stack (flex-row). Defaults to vertical (flex-col).
152
+ * @param {('none'|'xs'|'sm'|'md'|'lg'|'0'|'px'|'0.5'|'1'|'2'|'3'|'4'|'5'|'6'|'8'|'10')} [props.gap='md'] - Spacing between children. Semantic options: 'none' (0), 'xs' (1), 'sm' (2), 'md' (4), 'lg' (8). Numeric options: '0', 'px', '0.5', '1', '2', '3', '4', '5', '6', '8', '10'. Defaults to 'md'.
153
+ * @param {string} [props.id] - Optional ID for the component.
154
+ * @param {string} [props.className] - Additional custom class names to apply to the component.
155
+ * @param {('start'|'center'|'end'|'space-between'|'space-evenly'|'space-around'|'spaceBetween')} [props.align='start'] - Main axis alignment. Controls horizontal alignment for horizontal stacks and vertical alignment for vertical stacks.
156
+ * @param {('start'|'center'|'end'|'stretch')} [props.blockAlign] - Cross-axis alignment for horizontal stacks (vertical alignment). Only applicable when horizontal=true.
157
+ * @param {('start'|'center'|'end'|'stretch')} [props.inlineAlign] - Cross-axis alignment for vertical stacks (horizontal alignment). Only applicable when horizontal=false.
158
+ * @param {boolean} [props.wrap=false] - Whether children should wrap to the next line if necessary. Defaults to false.
159
+ * @param {Object} [restProps] - Additional props passed to the root element.
160
+ *
161
+ * @returns {JSX.Element} The rendered Stack component.
162
+ *
163
+ * @example
164
+ * // Vertical stack (default)
165
+ * <Stack gap="sm" inlineAlign="center">
166
+ * <div>Item 1</div>
167
+ * <div>Item 2</div>
168
+ * </Stack>
169
+ *
170
+ * @example
171
+ * // Horizontal stack
172
+ * <Stack horizontal gap="md" blockAlign="center" wrap={true}>
173
+ * <div>Item 1</div>
174
+ * <div>Item 2</div>
175
+ * </Stack>
176
+ */ function Stack() {
177
+ var props = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {};
178
+ var _props_as = props.as, as = _props_as === void 0 ? "div" : _props_as, children = props.children, _props_horizontal = props.horizontal, horizontal = _props_horizontal === void 0 ? false : _props_horizontal, _props_gap = props.gap, gap = _props_gap === void 0 ? "md" : _props_gap, id = props.id, className = props.className, align = props.align, blockAlign = props.blockAlign, inlineAlign = props.inlineAlign, _props_wrap = props.wrap, wrap = _props_wrap === void 0 ? false : _props_wrap, restProps = _object_without_properties(props, [
179
+ "as",
180
+ "children",
181
+ "horizontal",
182
+ "gap",
183
+ "id",
184
+ "className",
185
+ "align",
186
+ "blockAlign",
187
+ "inlineAlign",
188
+ "wrap"
189
+ ]);
190
+ var direction = horizontal ? "horizontal" : "vertical";
191
+ // For horizontal stacks, use blockAlign for cross-axis
192
+ // For vertical stacks, use inlineAlign for cross-axis
193
+ var crossAxisAlign = horizontal ? blockAlign : inlineAlign;
194
+ var classes = styles(_object_spread_props(_object_spread({
195
+ direction: direction,
196
+ gap: gap,
197
+ align: align
198
+ }, horizontal && blockAlign ? {
199
+ blockAlign: blockAlign
200
+ } : {}, !horizontal && inlineAlign ? {
201
+ inlineAlign: inlineAlign
202
+ } : {}), {
203
+ wrap: wrap
204
+ }));
205
+ var Element = as;
206
+ return /*#__PURE__*/ _jsx(Element, _object_spread_props(_object_spread({
207
+ id: id,
208
+ className: "".concat(classes).concat(className ? " ".concat(className) : "")
209
+ }, restProps), {
210
+ children: children
211
+ }));
212
+ }
213
+ export default Stack;
@@ -1027,7 +1027,7 @@ Table.Cell.displayName = "Table.Cell";
1027
1027
  borderTop: true,
1028
1028
  paddedHalf: paddedHalf,
1029
1029
  children: /*#__PURE__*/ _jsxs("div", {
1030
- className: "flex justify-start",
1030
+ className: "flex justify-start items-center gap-2",
1031
1031
  children: [
1032
1032
  /*#__PURE__*/ _jsx(Pagination, {
1033
1033
  hasPrevious: hasPreviousPage,
@@ -139,10 +139,11 @@ var containerStyles = tv({
139
139
  * @param {boolean} [props.activeDisclosure=false] - Whether the "More" disclosure is currently active.
140
140
  * @param {boolean} [props.padded=true] - If true, applies padding to the Tabs container.
141
141
  * @param {boolean} [props.borderBottom=true] - If true, applies a bottom border to the Tabs container.
142
+ * @param {boolean} [props.simpleTabs=false] - If true, simplifies the styling for the selected tab.
142
143
  * @returns {JSX.Element} The Tabs component.
143
144
  */ function Tabs() {
144
145
  var props = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {};
145
- var tmp = props.tabs, _tabs = tmp === void 0 ? [] : tmp, _selectedIndex = props.selected, onSelect = props.onSelect, fullWidth = props.fullWidth, _props_disclosureText = props.disclosureText, disclosureText = _props_disclosureText === void 0 ? "More" : _props_disclosureText, _props_disclosure = props.disclosure, disclosure = _props_disclosure === void 0 ? false : _props_disclosure, _props_activeDisclosure = props.activeDisclosure, activeDisclosure = _props_activeDisclosure === void 0 ? false : _props_activeDisclosure, _props_padded = props.padded, padded = _props_padded === void 0 ? true : _props_padded, _props_borderBottom = props.borderBottom, borderBottom = _props_borderBottom === void 0 ? true : _props_borderBottom;
146
+ var tmp = props.tabs, _tabs = tmp === void 0 ? [] : tmp, _selectedIndex = props.selected, onSelect = props.onSelect, fullWidth = props.fullWidth, _props_disclosureText = props.disclosureText, disclosureText = _props_disclosureText === void 0 ? "More" : _props_disclosureText, _props_disclosure = props.disclosure, disclosure = _props_disclosure === void 0 ? false : _props_disclosure, _props_activeDisclosure = props.activeDisclosure, activeDisclosure = _props_activeDisclosure === void 0 ? false : _props_activeDisclosure, _props_padded = props.padded, padded = _props_padded === void 0 ? true : _props_padded, _props_borderBottom = props.borderBottom, borderBottom = _props_borderBottom === void 0 ? true : _props_borderBottom, _props_simpleTabs = props.simpleTabs, simpleTabs = _props_simpleTabs === void 0 ? false : _props_simpleTabs;
146
147
  var selectedIndex = parseInt(_selectedIndex);
147
148
  var containerRef = useRef(null);
148
149
  var disclosureRef = useRef(null);
@@ -251,6 +252,7 @@ var containerStyles = tv({
251
252
  icon: tab.icon,
252
253
  fullWidth: fullWidth,
253
254
  hidden: tab.hidden,
255
+ simple: simpleTabs,
254
256
  children: tab.content
255
257
  }, "tab-".concat(tab.originalIndex));
256
258
  })
@@ -301,10 +303,6 @@ var tabStyles = tv({
301
303
  true: "pl-3 pr-1",
302
304
  false: "px-3"
303
305
  },
304
- selected: {
305
- true: "text-tab-active-fg bg-tab-active-bg hover:bg-tab-active-bg-hover active:bg-tab-active-bg-active",
306
- false: "text-tab-inactive-fg bg-tab-inactive-bg hover:bg-tab-inactive-bg-hover active:bg-tab-inactive-bg-active"
307
- },
308
306
  disabled: {
309
307
  true: "cursor-not-allowed",
310
308
  false: "cursor-pointer"
@@ -315,12 +313,41 @@ var tabStyles = tv({
315
313
  },
316
314
  hidden: {
317
315
  true: "invisible"
316
+ },
317
+ simple: {
318
+ true: "flex flex-col items-center justify-center rounded-none bg-transparent hover:bg-transparent active:bg-transparent"
319
+ },
320
+ selected: {
321
+ true: "",
322
+ false: ""
318
323
  }
319
- }
324
+ },
325
+ compoundVariants: [
326
+ {
327
+ selected: true,
328
+ simple: false,
329
+ class: "text-tab-active-fg bg-tab-active-bg hover:bg-tab-active-bg-hover active:bg-tab-active-bg-active"
330
+ },
331
+ {
332
+ selected: false,
333
+ simple: false,
334
+ class: "text-tab-inactive-fg bg-tab-inactive-bg hover:bg-tab-inactive-bg-hover active:bg-tab-inactive-bg-active"
335
+ },
336
+ {
337
+ selected: true,
338
+ simple: true,
339
+ class: "text-highest"
340
+ },
341
+ {
342
+ selected: false,
343
+ simple: true,
344
+ class: "text-lowest"
345
+ }
346
+ ]
320
347
  });
321
348
  function Tab() {
322
349
  var props = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {};
323
- var id = props.id, active = props.active, selected = props.selected, index = props.index, icon = props.icon, onSelect = props.onSelect, onClick = props.onClick, children = props.children, fullWidth = props.fullWidth, hidden = props.hidden, _props_disclosure = props.disclosure, disclosure = _props_disclosure === void 0 ? false : _props_disclosure, _props_alwaysShowDisclosureIcon = props.alwaysShowDisclosureIcon, alwaysShowDisclosureIcon = _props_alwaysShowDisclosureIcon === void 0 ? false : _props_alwaysShowDisclosureIcon, _props_disabled = props.disabled, disabled = _props_disabled === void 0 ? false : _props_disabled;
350
+ var id = props.id, active = props.active, selected = props.selected, index = props.index, icon = props.icon, onSelect = props.onSelect, onClick = props.onClick, children = props.children, fullWidth = props.fullWidth, hidden = props.hidden, simple = props.simple, _props_disclosure = props.disclosure, disclosure = _props_disclosure === void 0 ? false : _props_disclosure, _props_alwaysShowDisclosureIcon = props.alwaysShowDisclosureIcon, alwaysShowDisclosureIcon = _props_alwaysShowDisclosureIcon === void 0 ? false : _props_alwaysShowDisclosureIcon, _props_disabled = props.disabled, disabled = _props_disabled === void 0 ? false : _props_disabled;
324
351
  var polarisIcon = typeof icon === "string" ? PolarisIcons[icon] : PolarisIcons[icon === null || icon === void 0 ? void 0 : icon.displayName];
325
352
  var showDisclosure = disclosure && (selected || alwaysShowDisclosureIcon);
326
353
  var tabClasses = tabStyles({
@@ -328,7 +355,8 @@ function Tab() {
328
355
  disclosure: showDisclosure,
329
356
  disabled: disabled,
330
357
  fullWidth: fullWidth,
331
- hidden: hidden
358
+ hidden: hidden,
359
+ simple: simple
332
360
  });
333
361
  return /*#__PURE__*/ _jsxs("div", {
334
362
  id: id ? "tab-".concat(id) : undefined,
@@ -341,11 +369,12 @@ function Tab() {
341
369
  className: "Litho-Tabs__Tab-Icon mr-1",
342
370
  children: /*#__PURE__*/ _jsx(Icon, {
343
371
  source: polarisIcon,
344
- color: selected ? "active" : "subdued"
372
+ color: selected && simple ? "default" : selected ? "primary" : "subdued",
373
+ size: simple ? "lg" : undefined
345
374
  })
346
375
  }),
347
376
  icon && !!polarisIcon === false && /*#__PURE__*/ _jsx("span", {
348
- className: "Litho-Tabs__Tab-Icon mr-1",
377
+ className: "Litho-Tabs__Tab-Icon ".concat(simple ? "mr-0" : "mr-1"),
349
378
  children: icon
350
379
  }),
351
380
  /*#__PURE__*/ _jsx("span", {
@@ -356,7 +385,8 @@ function Tab() {
356
385
  className: "Litho-Tabs__Tab-Disclosure",
357
386
  children: /*#__PURE__*/ _jsx(Icon, {
358
387
  source: active ? CaretUpMinor : CaretDownMinor,
359
- color: selected ? "active" : "subdued"
388
+ color: selected && simple ? "default" : selected ? "active" : "subdued",
389
+ size: simple ? "lg" : undefined
360
390
  })
361
391
  })
362
392
  ]
@@ -83,7 +83,13 @@ var styles = tv({
83
83
  base: "Litho-VerticalStack flex flex-col",
84
84
  variants: {
85
85
  gap: {
86
- none: "",
86
+ none: "gap-0",
87
+ // Semantic values (recommended)
88
+ xs: "gap-1",
89
+ sm: "gap-2",
90
+ md: "gap-4",
91
+ lg: "gap-8",
92
+ // Numeric values (backwards compatibility)
87
93
  "0": "gap-0",
88
94
  "px": "gap-px",
89
95
  "0.5": "gap-0.5",
@@ -118,7 +124,7 @@ var styles = tv({
118
124
  * @param {React.ReactNode} [props.children] - The child elements to render within the stack.
119
125
  * @param {string} [props.align] - Vertical alignment of the stack content. Options: "start", "end", "center", "spaceBetween".
120
126
  * @param {string} [props.inlineAlign] - Horizontal alignment of the stack content. Options: "start", "end", "center", "spaceBetween".
121
- * @param {string} [props.gap="none"] - Spacing between child elements. Options: "none", "0", "px", "0.5", "1", "2", "3", "4", "6", "8", "10".
127
+ * @param {('none'|'xs'|'sm'|'md'|'lg'|'0'|'px'|'0.5'|'1'|'2'|'3'|'4'|'5'|'6'|'8'|'10')} [props.gap="none"] - Spacing between child elements. Semantic options: "none", "xs" (1), "sm" (2), "md" (4), "lg" (8). Numeric options: "0", "px", "0.5", "1", "2", "3", "4", "5", "6", "8", "10".
122
128
  * @param {string} [props.id] - The id for the root element of the stack.
123
129
  * @param {string} [props.className] - Additional CSS classes to append to the generated styles.
124
130
  * @param {object} [props.restProps] - Any additional properties to spread onto the root element.
package/dist/esm/index.js CHANGED
@@ -47,6 +47,7 @@ export { default as ResourceList } from "./components/ResourceList.js";
47
47
  export { default as Select } from "./components/Select.js";
48
48
  export { default as SkeletonText } from "./components/SkeletonText.js";
49
49
  export { default as Spinner } from "./components/Spinner.js";
50
+ export { default as Stack } from "./components/Stack.js";
50
51
  export { default as Table } from "./components/Table.js";
51
52
  export { default as Tabs } from "./components/Tabs.js";
52
53
  export { default as Tag } from "./components/Tag.js";
@@ -1,7 +1,7 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
- import ActionList from "../components/ActionList.js";
3
2
  import { EditMinor, DeleteMinor, DuplicateMinor, ViewMinor, ArchiveMinor, NoteMinor } from "@shopify/polaris-icons";
4
3
  import Card from "../components/Card.js";
4
+ import ActionList from "../components/ActionList.js";
5
5
  export default {
6
6
  title: "Litho/ActionList",
7
7
  component: ActionList,
@@ -103,8 +103,7 @@ import Text from "../components/Text.js";
103
103
  import Card from "../components/Card.js";
104
104
  import Button from "../components/Button.js";
105
105
  import { SearchMinor, ProductsMinor, CustomersMinor } from "@shopify/polaris-icons";
106
- import HorizontalStack from "../components/HorizontalStack.js";
107
- import VerticalStack from "../components/VerticalStack.js";
106
+ import Stack from "../components/Stack.js";
108
107
  import Tag from "../components/Tag.js";
109
108
  import Thumbnail from "../components/Thumbnail.js";
110
109
  import { transformStorySource } from "../utilities/transformers.js";
@@ -269,8 +268,8 @@ export var Default = {
269
268
  width: "400px"
270
269
  },
271
270
  padded: true,
272
- children: /*#__PURE__*/ _jsxs(VerticalStack, {
273
- gap: "2",
271
+ children: /*#__PURE__*/ _jsxs(Stack, {
272
+ gap: "sm",
274
273
  children: [
275
274
  /*#__PURE__*/ _jsx(Autocomplete, {
276
275
  options: filteredOptions,
@@ -282,7 +281,8 @@ export var Default = {
282
281
  onChange: setInputValue
283
282
  })
284
283
  }),
285
- /*#__PURE__*/ _jsx(HorizontalStack, {
284
+ /*#__PURE__*/ _jsx(Stack, {
285
+ horizontal: true,
286
286
  children: selected.length > 0 && selected.map(function(item) {
287
287
  return /*#__PURE__*/ _jsx(Tag, {
288
288
  children: item
@@ -354,8 +354,8 @@ export var MultipleSelection = {
354
354
  width: "400px"
355
355
  },
356
356
  padded: true,
357
- children: /*#__PURE__*/ _jsxs(VerticalStack, {
358
- gap: "2",
357
+ children: /*#__PURE__*/ _jsxs(Stack, {
358
+ gap: "sm",
359
359
  children: [
360
360
  /*#__PURE__*/ _jsx(Autocomplete, {
361
361
  options: filteredOptions,
@@ -368,8 +368,9 @@ export var MultipleSelection = {
368
368
  onChange: setInputValue
369
369
  })
370
370
  }),
371
- /*#__PURE__*/ _jsx(HorizontalStack, {
372
- gap: "2",
371
+ /*#__PURE__*/ _jsx(Stack, {
372
+ horizontal: true,
373
+ gap: "sm",
373
374
  children: selected.length > 0 && selected.map(function(item) {
374
375
  return /*#__PURE__*/ _jsx(Tag, {
375
376
  children: item
@@ -461,8 +462,8 @@ export var GroupedOptions = {
461
462
  width: "400px"
462
463
  },
463
464
  padded: true,
464
- children: /*#__PURE__*/ _jsxs(VerticalStack, {
465
- gap: "2",
465
+ children: /*#__PURE__*/ _jsxs(Stack, {
466
+ gap: "sm",
466
467
  children: [
467
468
  /*#__PURE__*/ _jsx(Autocomplete, {
468
469
  options: filteredOptions,
@@ -474,8 +475,9 @@ export var GroupedOptions = {
474
475
  onChange: setInputValue
475
476
  })
476
477
  }),
477
- /*#__PURE__*/ _jsx(HorizontalStack, {
478
- gap: "2",
478
+ /*#__PURE__*/ _jsx(Stack, {
479
+ horizontal: true,
480
+ gap: "sm",
479
481
  children: selected.length > 0 && selected.map(function(item) {
480
482
  return /*#__PURE__*/ _jsx(Tag, {
481
483
  children: item
@@ -751,8 +753,8 @@ export var CustomerSearch = {
751
753
  width: "500px"
752
754
  },
753
755
  padded: true,
754
- children: /*#__PURE__*/ _jsxs(VerticalStack, {
755
- gap: "2",
756
+ children: /*#__PURE__*/ _jsxs(Stack, {
757
+ gap: "sm",
756
758
  children: [
757
759
  /*#__PURE__*/ _jsx(Text, {
758
760
  variant: "bodySm",
@@ -799,8 +801,9 @@ export var CustomerSearch = {
799
801
  var customer = customers.find(function(c) {
800
802
  return c.value === customerId;
801
803
  });
802
- return /*#__PURE__*/ _jsxs(HorizontalStack, {
803
- gap: "2",
804
+ return /*#__PURE__*/ _jsxs(Stack, {
805
+ horizontal: true,
806
+ gap: "sm",
804
807
  blockAlign: "center",
805
808
  children: [
806
809
  /*#__PURE__*/ _jsx(Thumbnail, {