@scattered-light/loomiere-base-ui 0.15.6 → 0.16.0

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 (79) hide show
  1. package/README.md +16 -1
  2. package/dist/{chunk-RLXKWWZG.js → chunk-TVZOM4US.js} +24 -3
  3. package/dist/chunk-TVZOM4US.js.map +1 -0
  4. package/dist/custom/index.d.ts +1 -1
  5. package/dist/custom/index.js +1 -1
  6. package/dist/design-system/components/StatCard/README.md +50 -0
  7. package/dist/design-system/components/StatCard/preview.html +19 -0
  8. package/dist/design-system/components/bundle.js +7 -7
  9. package/dist/design-system/components/index.d.ts +1 -1
  10. package/dist/design-system/components/styles.css +158 -61
  11. package/dist/{index-BlPgd6jW.d.ts → index-CoS-HLC1.d.ts} +25 -1
  12. package/dist/index.d.ts +1 -1
  13. package/dist/index.js +1 -1
  14. package/dist/styles/components/Accordion.css +1 -1
  15. package/dist/styles/components/AlertDialog.css +1 -1
  16. package/dist/styles/components/Autocomplete.css +1 -1
  17. package/dist/styles/components/Avatar.css +1 -1
  18. package/dist/styles/components/Button.css +1 -1
  19. package/dist/styles/components/Checkbox.css +1 -1
  20. package/dist/styles/components/CheckboxGroup.css +1 -1
  21. package/dist/styles/components/Collapsible.css +1 -1
  22. package/dist/styles/components/Combobox.css +1 -1
  23. package/dist/styles/components/ContextMenu.css +1 -1
  24. package/dist/styles/components/Dialog.css +1 -1
  25. package/dist/styles/components/Drawer.css +1 -1
  26. package/dist/styles/components/Field.css +1 -1
  27. package/dist/styles/components/Fieldset.css +1 -1
  28. package/dist/styles/components/Form.css +1 -1
  29. package/dist/styles/components/Input.css +1 -1
  30. package/dist/styles/components/Menu.css +1 -1
  31. package/dist/styles/components/Menubar.css +1 -1
  32. package/dist/styles/components/Meter.css +1 -1
  33. package/dist/styles/components/NavigationMenu.css +1 -1
  34. package/dist/styles/components/NumberField.css +1 -1
  35. package/dist/styles/components/OTPField.css +1 -1
  36. package/dist/styles/components/Popover.css +1 -1
  37. package/dist/styles/components/PreviewCard.css +1 -1
  38. package/dist/styles/components/Progress.css +1 -1
  39. package/dist/styles/components/Radio.css +1 -1
  40. package/dist/styles/components/ScrollArea.css +1 -1
  41. package/dist/styles/components/Select.css +1 -1
  42. package/dist/styles/components/Separator.css +1 -1
  43. package/dist/styles/components/Slider.css +1 -1
  44. package/dist/styles/components/Switch.css +1 -1
  45. package/dist/styles/components/Tabs.css +1 -1
  46. package/dist/styles/components/Toast.css +1 -1
  47. package/dist/styles/components/Toggle.css +1 -1
  48. package/dist/styles/components/ToggleGroup.css +1 -1
  49. package/dist/styles/components/Toolbar.css +1 -1
  50. package/dist/styles/components/Tooltip.css +1 -1
  51. package/dist/styles/custom/AppBar.css +1 -1
  52. package/dist/styles/custom/Badge.css +1 -1
  53. package/dist/styles/custom/Collection.css +1 -1
  54. package/dist/styles/custom/CollectionPagination.css +1 -1
  55. package/dist/styles/custom/CollectionToolbar.css +1 -1
  56. package/dist/styles/custom/DataList.css +1 -1
  57. package/dist/styles/custom/DataTable.css +1 -1
  58. package/dist/styles/custom/DatePicker.css +1 -1
  59. package/dist/styles/custom/DescriptionList.css +1 -1
  60. package/dist/styles/custom/EditableList.css +1 -1
  61. package/dist/styles/custom/EmptyState.css +1 -1
  62. package/dist/styles/custom/ListDetail.css +1 -1
  63. package/dist/styles/custom/MoneyField.css +1 -1
  64. package/dist/styles/custom/PickerButton.css +1 -1
  65. package/dist/styles/custom/PickerSplit.css +1 -1
  66. package/dist/styles/custom/Sheet.css +1 -1
  67. package/dist/styles/custom/SideNav.css +1 -1
  68. package/dist/styles/custom/Splitter.css +1 -1
  69. package/dist/styles/custom/StatCard.css +96 -0
  70. package/dist/styles/custom/StatFigure.css +1 -1
  71. package/dist/styles/custom/Table.css +1 -1
  72. package/dist/styles/index.css +2 -1
  73. package/dist/styles/reset/accessibility.css +1 -1
  74. package/dist/styles/reset/reset-accessibility.css +1 -1
  75. package/dist/styles/reset/reset-tailwind.css +1 -1
  76. package/dist/styles/reset/reset.css +1 -1
  77. package/dist/styles/tailwind.css +2 -1
  78. package/package.json +2 -2
  79. package/dist/chunk-RLXKWWZG.js.map +0 -1
package/README.md CHANGED
@@ -31,7 +31,7 @@ Use Base UI as usual, with the class names the styles target, or the few wrapper
31
31
  import {
32
32
  Accordion, AlertDialog, Autocomplete, Avatar, Badge, Button, Calendar, Checkbox, CheckboxGroup, Collapsible,
33
33
  AppBar, AppBarSpacer, Combobox, ContextMenu, DatePicker, DatePresets, DescriptionItem, DescriptionList, Dialog, Drawer, EmptyState, Field, Form, Input, ListDetail, Menu, Menubar, Meter, MoneyField, NumberField, PickerButton, PickerSplit, PickerSplitMain, PickerSplitTrigger,
34
- OTPField, Popover, PreviewCard, Progress, Radio, ScrollArea, Select, Separator, Sheet, SideNav, SideNavGroup, SideNavItem, SideNavToggle, Slider, Splitter, StatFigure, Switch,
34
+ OTPField, Popover, PreviewCard, Progress, Radio, ScrollArea, Select, Separator, Sheet, SideNav, SideNavGroup, SideNavItem, SideNavToggle, Slider, Splitter, StatCard, StatFigure, Switch,
35
35
  Tabs, Toast, Toggle, ToggleGroup, Toolbar, Tooltip, useListDetail,
36
36
  } from '@scattered-light/loomiere-base-ui';
37
37
  ```
@@ -162,6 +162,21 @@ Pieces for pages that read like an accountant's working paper. They use the them
162
162
  <StatFigure label="Book balance" value="75.00" caption="DR · Oct 29" underline="double" />
163
163
  ```
164
164
 
165
+ `StatCard` is a card for one thing a page lists (an Entity, an account): a heading, a caption, and a row of figures ruled off under them. Give it `href` or `onOpen` and the whole card opens through its title, with one tab stop named by the title. `headingLevel` fits it to the page's outline.
166
+
167
+ ```tsx
168
+ <StatCard
169
+ title="North Company"
170
+ caption="USD · 1 account"
171
+ onOpen={() => open('north')}
172
+ facts={[
173
+ { label: 'Questions', value: '1', tone: 'accent' },
174
+ { label: 'Docs', value: '–' },
175
+ { label: 'Review', value: '2', tone: 'accent' },
176
+ ]}
177
+ />
178
+ ```
179
+
165
180
  `DescriptionList` holds `DescriptionItem` pairs (a `dt` and a `dd`). The default sets labels in a column beside their values; `variant="leader"` runs a dotted leader from each label to its value at the end of the row.
166
181
 
167
182
  Totals in a plain table are rows: `<tr data-total="subtotal">` rules a line above, `<tr data-total="grand">` adds a double rule under. Put `data-rule="none"` on label and blank cells so the rules only run under the figures. In a DataTable, `totalStyle="subtotal"` or `"grand"` does the same to the footer (the default, `"band"`, keeps the header tray).
@@ -3538,6 +3538,27 @@ var StatFigure = React10.forwardRef(function StatFigure2({ className, label, val
3538
3538
  }
3539
3539
  );
3540
3540
  });
3541
+ var StatCard = React10.forwardRef(function StatCard2({ className, title, caption, facts, href, onOpen, headingLevel = 3, footer, ...props }, ref) {
3542
+ const Heading = `h${headingLevel}`;
3543
+ const interactive = href != null || onOpen != null;
3544
+ return /* @__PURE__ */ jsxs(
3545
+ "article",
3546
+ {
3547
+ ref,
3548
+ className: cn("StatCard", className),
3549
+ "data-interactive": interactive ? "" : void 0,
3550
+ ...props,
3551
+ children: [
3552
+ /* @__PURE__ */ jsxs("header", { className: "StatCardHeader", children: [
3553
+ /* @__PURE__ */ jsx(Heading, { className: "StatCardTitle", children: href != null ? /* @__PURE__ */ jsx("a", { className: "StatCardLink", href, children: title }) : onOpen != null ? /* @__PURE__ */ jsx("button", { className: "StatCardLink", type: "button", onClick: onOpen, children: title }) : title }),
3554
+ caption != null ? /* @__PURE__ */ jsx("p", { className: "StatCardCaption", children: caption }) : null
3555
+ ] }),
3556
+ /* @__PURE__ */ jsx("div", { className: "StatCardFacts", style: { gridTemplateColumns: `repeat(${Math.max(facts.length, 1)}, minmax(0, 1fr))` }, children: facts.map((fact, index) => /* @__PURE__ */ jsx(StatFigure, { size: "sm", ...fact }, index)) }),
3557
+ footer != null ? /* @__PURE__ */ jsx("div", { className: "StatCardFooter", children: footer }) : null
3558
+ ]
3559
+ }
3560
+ );
3561
+ });
3541
3562
  var DescriptionList = React10.forwardRef(function DescriptionList2({ className, variant, ...props }, ref) {
3542
3563
  return /* @__PURE__ */ jsx("dl", { ref, className: cn("DescriptionList", className), "data-variant": variant === "leader" ? "leader" : void 0, ...props });
3543
3564
  });
@@ -3847,6 +3868,6 @@ var EditableList = {
3847
3868
  Balance: EditableListBalance
3848
3869
  };
3849
3870
 
3850
- export { AppBar, AppBarSpacer, Badge, CURRENCY_SEARCH_THRESHOLD, Calendar, CurrencySelect, DatePicker, DatePresets, DescriptionItem, DescriptionList, Drawer, EditableList, Field, ListDetail, ListDetailDetail, ListDetailList, ListDetailRoot, MAX_MINOR_UNITS, MoneyField, MoneyFieldAffix, MoneyFieldGroup, MoneyFieldInput, MoneyFieldRoot, NumberField, PickerButton, PickerSplit, PickerSplitMain, PickerSplitTrigger, Popover, Sheet, SideNav, SideNavGroup, SideNavItem, SideNavToggle, Splitter, SplitterHandle, SplitterPanel, SplitterRoot, StatFigure, addDays, addMonths, affixSide, applyKey, applyStored, ariaPercents, builtinPresets, clampDate, createPanels, cssSize, currencyName, currencySymbol, daysInMonth, defaultPresets, defaultWeekStartsOn, endOfWeek, formatDay, formatFull, formatMoney2 as formatMoney, fromMinorUnits, getCurrencyDigits, handleTarget, inclusiveDays, isValidCurrency, isoWeek, last30Days, last7Days, lastMonth, lastWeek, layoutOf, lengthBlockReason, measure, monthCells, moveFocusDate, nextMonth, nextWeek, normalizePaste, orderRange, parseDate, parseDecimalString, parseSize, presetInBounds, resetToDefault, resizeByDelta, resolvePreset, roundHalfExpand, roundingChangesValue, sameSelection, serializeSize, settle, sizeText, startOfWeek, syncPanels, thisMonth, thisQuarter, thisWeek, toDecimalString, toMinorUnits, today, todayDate, toggleCollapsed, tomorrow, useListDetail, valueText, yearToDate, yesterday };
3851
- //# sourceMappingURL=chunk-RLXKWWZG.js.map
3852
- //# sourceMappingURL=chunk-RLXKWWZG.js.map
3871
+ export { AppBar, AppBarSpacer, Badge, CURRENCY_SEARCH_THRESHOLD, Calendar, CurrencySelect, DatePicker, DatePresets, DescriptionItem, DescriptionList, Drawer, EditableList, Field, ListDetail, ListDetailDetail, ListDetailList, ListDetailRoot, MAX_MINOR_UNITS, MoneyField, MoneyFieldAffix, MoneyFieldGroup, MoneyFieldInput, MoneyFieldRoot, NumberField, PickerButton, PickerSplit, PickerSplitMain, PickerSplitTrigger, Popover, Sheet, SideNav, SideNavGroup, SideNavItem, SideNavToggle, Splitter, SplitterHandle, SplitterPanel, SplitterRoot, StatCard, StatFigure, addDays, addMonths, affixSide, applyKey, applyStored, ariaPercents, builtinPresets, clampDate, createPanels, cssSize, currencyName, currencySymbol, daysInMonth, defaultPresets, defaultWeekStartsOn, endOfWeek, formatDay, formatFull, formatMoney2 as formatMoney, fromMinorUnits, getCurrencyDigits, handleTarget, inclusiveDays, isValidCurrency, isoWeek, last30Days, last7Days, lastMonth, lastWeek, layoutOf, lengthBlockReason, measure, monthCells, moveFocusDate, nextMonth, nextWeek, normalizePaste, orderRange, parseDate, parseDecimalString, parseSize, presetInBounds, resetToDefault, resizeByDelta, resolvePreset, roundHalfExpand, roundingChangesValue, sameSelection, serializeSize, settle, sizeText, startOfWeek, syncPanels, thisMonth, thisQuarter, thisWeek, toDecimalString, toMinorUnits, today, todayDate, toggleCollapsed, tomorrow, useListDetail, valueText, yearToDate, yesterday };
3872
+ //# sourceMappingURL=chunk-TVZOM4US.js.map
3873
+ //# sourceMappingURL=chunk-TVZOM4US.js.map