@heymantle/litho 0.0.14 → 0.0.15

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 (37) hide show
  1. package/README.md +52 -0
  2. package/dist/cjs/components/Card.js +1 -1
  3. package/dist/cjs/components/Disclosure.js +46 -15
  4. package/dist/cjs/components/DropZone.js +89 -37
  5. package/dist/cjs/components/Layout.js +4 -2
  6. package/dist/cjs/components/Modal.js +14 -3
  7. package/dist/cjs/components/Popover.js +26 -9
  8. package/dist/cjs/components/Table.js +27 -11
  9. package/dist/cjs/components/Tabs.js +33 -2
  10. package/dist/cjs/playwright.config.js +114 -0
  11. package/dist/cjs/styles/Table.js +2 -7
  12. package/dist/cjs/tests/visual/stories.spec.js +637 -0
  13. package/dist/cjs/utilities/dates.js +7 -7
  14. package/dist/esm/components/Card.js +1 -1
  15. package/dist/esm/components/Disclosure.js +36 -5
  16. package/dist/esm/components/DropZone.js +89 -37
  17. package/dist/esm/components/Layout.js +4 -2
  18. package/dist/esm/components/Modal.js +14 -3
  19. package/dist/esm/components/Popover.js +26 -9
  20. package/dist/esm/components/Table.js +27 -11
  21. package/dist/esm/components/Tabs.js +33 -2
  22. package/dist/esm/playwright.config.js +104 -0
  23. package/dist/esm/styles/Table.js +2 -7
  24. package/dist/esm/tests/visual/stories.spec.js +633 -0
  25. package/dist/esm/utilities/dates.js +7 -7
  26. package/dist/types/components/Disclosure.d.ts.map +1 -1
  27. package/dist/types/components/DropZone.d.ts +2 -0
  28. package/dist/types/components/DropZone.d.ts.map +1 -1
  29. package/dist/types/components/Layout.d.ts.map +1 -1
  30. package/dist/types/components/Modal.d.ts.map +1 -1
  31. package/dist/types/components/Popover.d.ts +2 -0
  32. package/dist/types/components/Popover.d.ts.map +1 -1
  33. package/dist/types/components/Table.d.ts.map +1 -1
  34. package/dist/types/components/Tabs.d.ts +45 -1
  35. package/dist/types/components/Tabs.d.ts.map +1 -1
  36. package/dist/types/styles/Table.d.ts.map +1 -1
  37. package/package.json +12 -3
@@ -17,6 +17,7 @@ var _ActionList = /*#__PURE__*/ _interop_require_default(require("./ActionList")
17
17
  var _Icon = /*#__PURE__*/ _interop_require_default(require("./Icon"));
18
18
  var _Popover = /*#__PURE__*/ _interop_require_default(require("./Popover"));
19
19
  var _polarisicons = /*#__PURE__*/ _interop_require_wildcard(require("@shopify/polaris-icons"));
20
+ var _Badge = /*#__PURE__*/ _interop_require_default(require("./Badge"));
20
21
  function _array_like_to_array(arr, len) {
21
22
  if (len == null || len > arr.length) len = arr.length;
22
23
  for(var i = 0, arr2 = new Array(len); i < len; i++)arr2[i] = arr[i];
@@ -195,6 +196,8 @@ var containerStyles = (0, _tailwindvariants.tv)({
195
196
  * @param {boolean} [props.padded=true] - If true, applies padding to the Tabs container.
196
197
  * @param {boolean} [props.borderBottom=true] - If true, applies a bottom border to the Tabs container.
197
198
  * @param {boolean} [props.simpleTabs=false] - If true, simplifies the styling for the selected tab.
199
+ * @param {number} [props.badgeCount] - The number of badges to display for the tab.
200
+ * @param {string} [props.badgeStatus="default"] - The status of the badge.
198
201
  * @returns {JSX.Element} The Tabs component.
199
202
  */ function Tabs() {
200
203
  var props = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {};
@@ -308,6 +311,8 @@ var containerStyles = (0, _tailwindvariants.tv)({
308
311
  fullWidth: fullWidth,
309
312
  hidden: tab.hidden,
310
313
  simple: simpleTabs,
314
+ badgeCount: tab.badgeCount,
315
+ badgeStatus: tab.badgeStatus,
311
316
  children: tab.content
312
317
  }, "tab-".concat(tab.originalIndex));
313
318
  })
@@ -400,9 +405,30 @@ var tabStyles = (0, _tailwindvariants.tv)({
400
405
  }
401
406
  ]
402
407
  });
403
- function Tab() {
408
+ /**
409
+ * Individual tab item component used within the Tabs component.
410
+ *
411
+ * @param {Object} props - Component props.
412
+ * @param {string} [props.id] - Unique identifier for the tab, used to generate the DOM element ID.
413
+ * @param {boolean} [props.active] - Whether the tab's disclosure popover is currently active/open.
414
+ * @param {boolean} [props.selected] - Whether this tab is currently selected.
415
+ * @param {number} [props.index] - The index position of this tab in the tabs array.
416
+ * @param {string|React.ReactNode} [props.icon] - Icon to display. Can be a Polaris icon name string or a custom React node.
417
+ * @param {Function} [props.onSelect] - Callback fired when the tab is selected, receives the tab's index.
418
+ * @param {Function} [props.onClick] - Custom click handler that overrides the default onSelect behavior.
419
+ * @param {React.ReactNode} [props.children] - The content/label to display inside the tab.
420
+ * @param {boolean} [props.fullWidth] - Whether the tab should expand to fill available space.
421
+ * @param {boolean} [props.hidden] - Whether the tab should be visually hidden (used for overflow handling).
422
+ * @param {boolean} [props.simple] - Whether to use simplified styling (no background, column layout).
423
+ * @param {boolean} [props.disclosure=false] - Whether to show a disclosure caret icon when selected.
424
+ * @param {boolean} [props.alwaysShowDisclosureIcon=false] - Whether to always show the disclosure icon regardless of selection state.
425
+ * @param {boolean} [props.disabled=false] - Whether the tab is disabled.
426
+ * @param {string} [props.badgeStatus="default"] - The status variant of the badge (e.g., "default", "success", "warning").
427
+ * @param {number} [props.badgeCount] - If provided (>= 0), displays a badge with this count.
428
+ * @returns {JSX.Element} The Tab component.
429
+ */ function Tab() {
404
430
  var props = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {};
405
- 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;
431
+ 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, _props_badgeStatus = props.badgeStatus, badgeStatus = _props_badgeStatus === void 0 ? "default" : _props_badgeStatus, badgeCount = props.badgeCount;
406
432
  var polarisIcon = typeof icon === "string" ? _polarisicons[icon] : _polarisicons[icon === null || icon === void 0 ? void 0 : icon.displayName];
407
433
  var showDisclosure = disclosure && (selected || alwaysShowDisclosureIcon);
408
434
  var tabClasses = tabStyles({
@@ -443,6 +469,11 @@ function Tab() {
443
469
  color: selected && simple ? "default" : selected ? "active" : "subdued",
444
470
  size: simple ? "lg" : undefined
445
471
  })
472
+ }),
473
+ badgeCount >= 0 && /*#__PURE__*/ (0, _jsxruntime.jsx)(_Badge.default, {
474
+ status: badgeStatus,
475
+ className: "ml-1",
476
+ children: badgeCount
446
477
  })
447
478
  ]
448
479
  });
@@ -0,0 +1,114 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "default", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return _default;
9
+ }
10
+ });
11
+ var _test = require("@playwright/test");
12
+ function _define_property(obj, key, value) {
13
+ if (key in obj) {
14
+ Object.defineProperty(obj, key, {
15
+ value: value,
16
+ enumerable: true,
17
+ configurable: true,
18
+ writable: true
19
+ });
20
+ } else {
21
+ obj[key] = value;
22
+ }
23
+ return obj;
24
+ }
25
+ function _object_spread(target) {
26
+ for(var i = 1; i < arguments.length; i++){
27
+ var source = arguments[i] != null ? arguments[i] : {};
28
+ var ownKeys = Object.keys(source);
29
+ if (typeof Object.getOwnPropertySymbols === "function") {
30
+ ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function(sym) {
31
+ return Object.getOwnPropertyDescriptor(source, sym).enumerable;
32
+ }));
33
+ }
34
+ ownKeys.forEach(function(key) {
35
+ _define_property(target, key, source[key]);
36
+ });
37
+ }
38
+ return target;
39
+ }
40
+ function ownKeys(object, enumerableOnly) {
41
+ var keys = Object.keys(object);
42
+ if (Object.getOwnPropertySymbols) {
43
+ var symbols = Object.getOwnPropertySymbols(object);
44
+ if (enumerableOnly) {
45
+ symbols = symbols.filter(function(sym) {
46
+ return Object.getOwnPropertyDescriptor(object, sym).enumerable;
47
+ });
48
+ }
49
+ keys.push.apply(keys, symbols);
50
+ }
51
+ return keys;
52
+ }
53
+ function _object_spread_props(target, source) {
54
+ source = source != null ? source : {};
55
+ if (Object.getOwnPropertyDescriptors) {
56
+ Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));
57
+ } else {
58
+ ownKeys(Object(source)).forEach(function(key) {
59
+ Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
60
+ });
61
+ }
62
+ return target;
63
+ }
64
+ var _default = (0, _test.defineConfig)({
65
+ testDir: './tests/visual',
66
+ // Run tests in parallel
67
+ fullyParallel: true,
68
+ // Fail the build on CI if you accidentally left test.only in the source code
69
+ forbidOnly: !!process.env.CI,
70
+ // Retry failed tests on CI
71
+ retries: process.env.CI ? 2 : 0,
72
+ // Limit parallel workers on CI
73
+ workers: process.env.CI ? 1 : undefined,
74
+ // Reporter configuration
75
+ reporter: process.env.CI ? 'github' : 'list',
76
+ // Shared settings for all projects
77
+ use: {
78
+ // Base URL for Storybook
79
+ baseURL: 'http://127.0.0.1:6006',
80
+ // Capture trace on failure
81
+ trace: 'on-first-retry'
82
+ },
83
+ // Snapshot naming - remove platform suffix for cross-platform baselines
84
+ snapshotPathTemplate: '{testDir}/{testFileDir}/{testFileName}-snapshots/{arg}{ext}',
85
+ // Visual comparison settings
86
+ expect: {
87
+ toHaveScreenshot: {
88
+ // Allow differences for anti-aliasing and sub-pixel text positioning
89
+ maxDiffPixelRatio: 0.04,
90
+ // Animation settings
91
+ animations: 'disabled'
92
+ }
93
+ },
94
+ // Configure projects for major browsers
95
+ projects: [
96
+ {
97
+ name: 'chromium',
98
+ use: _object_spread_props(_object_spread({}, _test.devices['Desktop Chrome']), {
99
+ // Consistent viewport
100
+ viewport: {
101
+ width: 1280,
102
+ height: 720
103
+ }
104
+ })
105
+ }
106
+ ],
107
+ // Web server configuration - start Storybook before running tests
108
+ webServer: {
109
+ command: 'npm run storybook -- --ci --quiet',
110
+ url: 'http://127.0.0.1:6006',
111
+ reuseExistingServer: !process.env.CI,
112
+ timeout: 120000
113
+ }
114
+ });
@@ -34,7 +34,7 @@ var headingStyles = (0, _tailwindvariants.tv)({
34
34
  base: "Litho-Table-Heading py-0 px-2 @md:first:pl-3 whitespace-nowrap font-semibold! text-high text-sm dark:text-normal",
35
35
  variants: {
36
36
  hidden: {
37
- true: "hidden opacity-0 pointer-events-none @md:block @md:opacity-100 @md:pointer-events-auto"
37
+ true: "hidden opacity-0 pointer-events-none @md:table-cell @md:opacity-100 @md:pointer-events-auto"
38
38
  },
39
39
  verticalAlign: {
40
40
  top: "align-top",
@@ -474,7 +474,7 @@ var fixedColumnsStyles = (0, _tailwindvariants.tv)({
474
474
  false: ""
475
475
  },
476
476
  firstColumns: {
477
- true: "left-0",
477
+ true: "left-0 hidden @md:block",
478
478
  false: "right-0 hidden @md:block"
479
479
  },
480
480
  selectable: {
@@ -491,11 +491,6 @@ var fixedColumnsStyles = (0, _tailwindvariants.tv)({
491
491
  }
492
492
  },
493
493
  compoundVariants: [
494
- {
495
- firstColumns: true,
496
- selectable: false,
497
- className: "hidden @md:block"
498
- },
499
494
  {
500
495
  firstColumns: true,
501
496
  canScrollLeft: true,