@ai-matrx/design-system 0.86.349 → 0.86.351

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 (96) hide show
  1. package/CHANGELOG.md +22 -2
  2. package/dist/carousel.cjs.map +1 -1
  3. package/dist/carousel.js +5 -5
  4. package/dist/chunk-4WSXAP24.js +51 -0
  5. package/dist/chunk-4WSXAP24.js.map +1 -0
  6. package/dist/{chunk-XTP6HOB6.js → chunk-6XNYYROM.js} +1 -1
  7. package/dist/chunk-6XNYYROM.js.map +1 -0
  8. package/dist/{chunk-CEA6X445.js → chunk-CFUXEGW2.js} +2 -2
  9. package/dist/{chunk-54UK6P7E.js → chunk-FLWSEDUW.js} +3 -3
  10. package/dist/{chunk-BC7LMEOD.js → chunk-GJ6UGQ4X.js} +7 -3
  11. package/dist/chunk-GJ6UGQ4X.js.map +1 -0
  12. package/dist/{chunk-6CDAHINE.js → chunk-GMNROZQJ.js} +4 -4
  13. package/dist/{chunk-6CDAHINE.js.map → chunk-GMNROZQJ.js.map} +1 -1
  14. package/dist/{chunk-6QKT52FR.js → chunk-MTE6N7XU.js} +2 -2
  15. package/dist/{chunk-S6F34AX5.js → chunk-QA7EHFRX.js} +2 -2
  16. package/dist/{chunk-CJBSBKG5.js → chunk-SOCNWQMX.js} +2 -2
  17. package/dist/{chunk-GLLPO66A.js → chunk-U46XUQI7.js} +2 -2
  18. package/dist/{chunk-KYH42WEX.js → chunk-UGQRAQTE.js} +433 -344
  19. package/dist/chunk-UGQRAQTE.js.map +1 -0
  20. package/dist/{chunk-TWRC7NP4.js → chunk-WUD23YTG.js} +4 -4
  21. package/dist/{chunk-MIJMP4WI.js → chunk-YRF22M5S.js} +6 -1
  22. package/dist/{chunk-MIJMP4WI.js.map → chunk-YRF22M5S.js.map} +1 -1
  23. package/dist/clipboard-fallback-dialog.cjs.map +1 -1
  24. package/dist/clipboard-fallback-dialog.js +1 -1
  25. package/dist/controls.cjs +547 -458
  26. package/dist/controls.cjs.map +1 -1
  27. package/dist/controls.css +52 -18
  28. package/dist/controls.d.cts +51 -3
  29. package/dist/controls.d.ts +51 -3
  30. package/dist/controls.js +13 -5
  31. package/dist/data-table/data-row-inspector.cjs.map +1 -1
  32. package/dist/data-table/data-row-inspector.js +4 -4
  33. package/dist/data-table/data-row-window.cjs.map +1 -1
  34. package/dist/data-table/data-row-window.js +5 -5
  35. package/dist/data-table/index.cjs +53 -43
  36. package/dist/data-table/index.cjs.map +1 -1
  37. package/dist/data-table/index.js +52 -45
  38. package/dist/data-table/index.js.map +1 -1
  39. package/dist/data-table/pagination.cjs.map +1 -1
  40. package/dist/data-table/pagination.js +2 -2
  41. package/dist/data-table/spreadsheet.cjs +6 -2
  42. package/dist/data-table/spreadsheet.cjs.map +1 -1
  43. package/dist/data-table/spreadsheet.d.cts +4 -1
  44. package/dist/data-table/spreadsheet.d.ts +4 -1
  45. package/dist/data-table/spreadsheet.js +3 -1
  46. package/dist/data-table/uuid-cell.cjs.map +1 -1
  47. package/dist/data-table/uuid-cell.js +2 -2
  48. package/dist/desktop.cjs +158 -16
  49. package/dist/desktop.cjs.map +1 -1
  50. package/dist/desktop.css +46 -0
  51. package/dist/desktop.d.cts +6 -5
  52. package/dist/desktop.d.ts +6 -5
  53. package/dist/desktop.js +127 -17
  54. package/dist/desktop.js.map +1 -1
  55. package/dist/index.cjs +19 -9
  56. package/dist/index.cjs.map +1 -1
  57. package/dist/index.d.cts +10 -1
  58. package/dist/index.d.ts +10 -1
  59. package/dist/index.js +21 -14
  60. package/dist/index.js.map +1 -1
  61. package/dist/item.cjs.map +1 -1
  62. package/dist/item.js +2 -2
  63. package/dist/lite-table.cjs.map +1 -1
  64. package/dist/lite-table.js +1 -1
  65. package/dist/notice-stack.cjs +70 -0
  66. package/dist/notice-stack.cjs.map +1 -0
  67. package/dist/notice-stack.d.cts +60 -0
  68. package/dist/notice-stack.d.ts +60 -0
  69. package/dist/notice-stack.js +16 -0
  70. package/dist/notice-stack.js.map +1 -0
  71. package/dist/record-list.cjs.map +1 -1
  72. package/dist/record-list.js +2 -2
  73. package/dist/settings.cjs +2 -2
  74. package/dist/settings.cjs.map +1 -1
  75. package/dist/settings.js +3 -3
  76. package/dist/swipe-deck.cjs +95 -25
  77. package/dist/swipe-deck.cjs.map +1 -1
  78. package/dist/swipe-deck.css +14 -0
  79. package/dist/swipe-deck.d.cts +20 -0
  80. package/dist/swipe-deck.d.ts +20 -0
  81. package/dist/swipe-deck.js +87 -25
  82. package/dist/swipe-deck.js.map +1 -1
  83. package/dist/writing-field.cjs +2 -2
  84. package/dist/writing-field.cjs.map +1 -1
  85. package/dist/writing-field.js +2 -2
  86. package/package.json +12 -18
  87. package/dist/chunk-BC7LMEOD.js.map +0 -1
  88. package/dist/chunk-KYH42WEX.js.map +0 -1
  89. package/dist/chunk-XTP6HOB6.js.map +0 -1
  90. /package/dist/{chunk-CEA6X445.js.map → chunk-CFUXEGW2.js.map} +0 -0
  91. /package/dist/{chunk-54UK6P7E.js.map → chunk-FLWSEDUW.js.map} +0 -0
  92. /package/dist/{chunk-6QKT52FR.js.map → chunk-MTE6N7XU.js.map} +0 -0
  93. /package/dist/{chunk-S6F34AX5.js.map → chunk-QA7EHFRX.js.map} +0 -0
  94. /package/dist/{chunk-CJBSBKG5.js.map → chunk-SOCNWQMX.js.map} +0 -0
  95. /package/dist/{chunk-GLLPO66A.js.map → chunk-U46XUQI7.js.map} +0 -0
  96. /package/dist/{chunk-TWRC7NP4.js.map → chunk-WUD23YTG.js.map} +0 -0
@@ -3,8 +3,8 @@ import "../chunk-QFP4BUKZ.js";
3
3
  import {
4
4
  RecordId,
5
5
  shortUuid
6
- } from "../chunk-GLLPO66A.js";
7
- import "../chunk-XTP6HOB6.js";
6
+ } from "../chunk-U46XUQI7.js";
7
+ import "../chunk-6XNYYROM.js";
8
8
  import "../chunk-BD77DHUO.js";
9
9
  import "../chunk-BKCJUFD3.js";
10
10
  import "../chunk-PIQJULQB.js";
package/dist/desktop.cjs CHANGED
@@ -2885,6 +2885,44 @@ function NavigatorCustomizeSheet({ open, onOpenChange, items, onChange, onRestor
2885
2885
  ] }) });
2886
2886
  }
2887
2887
 
2888
+ // src/notice-stack.ts
2889
+ var NOTICE_STACK = {
2890
+ /** The corner every notice floats in. */
2891
+ corner: "top-right",
2892
+ /** Cards shown at once; the rest fold into "N more". */
2893
+ maxVisible: 3,
2894
+ /** Info and success: gone after this long. */
2895
+ infoMs: 4e3,
2896
+ /** Errors and warnings: stay until dismissed, or this long at most. */
2897
+ errorMs: 3e4,
2898
+ /** The card's width: small, never the window's. */
2899
+ widthRem: 22
2900
+ };
2901
+ function noticeKey(tone, title, message) {
2902
+ const text = (v) => typeof v === "string" || typeof v === "number" ? String(v).trim() : "";
2903
+ return `${tone}\0${text(title)}\0${text(message)}`;
2904
+ }
2905
+ function collapseNotices(items, keyOf) {
2906
+ const groups = [];
2907
+ const byKey = /* @__PURE__ */ new Map();
2908
+ for (const item2 of items) {
2909
+ const key2 = keyOf(item2);
2910
+ const found = key2 !== null ? byKey.get(key2) : void 0;
2911
+ if (found) {
2912
+ found.members.push(item2);
2913
+ continue;
2914
+ }
2915
+ const group = { key: key2, members: [item2] };
2916
+ groups.push(group);
2917
+ if (key2 !== null) byKey.set(key2, group);
2918
+ }
2919
+ return groups.map((g) => ({ item: g.members[g.members.length - 1], members: g.members, count: g.members.length }));
2920
+ }
2921
+ function visibleNotices(groups, max = NOTICE_STACK.maxVisible) {
2922
+ if (groups.length <= max) return { shown: [...groups], folded: 0 };
2923
+ return { shown: groups.slice(groups.length - max), folded: groups.length - max };
2924
+ }
2925
+
2888
2926
  // src/desktop/layout.tsx
2889
2927
  var import_jsx_runtime20 = require("react/jsx-runtime");
2890
2928
  var WIDTH = {
@@ -2892,16 +2930,78 @@ var WIDTH = {
2892
2930
  wide: "max-w-none",
2893
2931
  full: "max-w-none"
2894
2932
  };
2895
- function hasNotices(children) {
2896
- return React16.Children.toArray(children).some((c) => React16.isValidElement(c) && c.type === React16.Fragment ? hasNotices(c.props.children) : Boolean(c));
2933
+ var EMPTY_LAYOUT = { drawn: /* @__PURE__ */ new Map(), folded: 0, total: 0 };
2934
+ function createNoticeRegistry() {
2935
+ let entries = [];
2936
+ let expanded = false;
2937
+ let layout = EMPTY_LAYOUT;
2938
+ const listeners = /* @__PURE__ */ new Set();
2939
+ const recompute = () => {
2940
+ const groups = collapseNotices(entries, (e) => e.key);
2941
+ const { shown, folded } = expanded ? { shown: groups, folded: 0 } : visibleNotices(groups);
2942
+ const drawn = /* @__PURE__ */ new Map();
2943
+ for (const g of shown) {
2944
+ const dismissers = g.members.map((m) => m.dismiss).filter((d) => typeof d === "function");
2945
+ drawn.set(g.item.id, { count: g.count, dismissAll: g.item.dismiss ? () => dismissers.forEach((d) => d()) : void 0 });
2946
+ }
2947
+ layout = { drawn, folded, total: entries.length };
2948
+ listeners.forEach((l) => l());
2949
+ };
2950
+ return {
2951
+ set(id, key2, dismiss) {
2952
+ const at = entries.findIndex((e) => e.id === id);
2953
+ if (at >= 0) {
2954
+ const old = entries[at];
2955
+ if (old.key === key2 && old.dismiss === dismiss) return;
2956
+ entries = entries.map((e, i) => i === at ? { id, key: key2, dismiss } : e);
2957
+ } else {
2958
+ entries = [...entries, { id, key: key2, dismiss }];
2959
+ }
2960
+ recompute();
2961
+ },
2962
+ remove(id) {
2963
+ if (!entries.some((e) => e.id === id)) return;
2964
+ entries = entries.filter((e) => e.id !== id);
2965
+ if (entries.length === 0) expanded = false;
2966
+ recompute();
2967
+ },
2968
+ subscribe(listener) {
2969
+ listeners.add(listener);
2970
+ return () => listeners.delete(listener);
2971
+ },
2972
+ snapshot: () => layout,
2973
+ expand() {
2974
+ expanded = true;
2975
+ recompute();
2976
+ }
2977
+ };
2978
+ }
2979
+ var NoticeStackContext = React16.createContext(null);
2980
+ function useNoticeStackLayout(registry3) {
2981
+ return React16.useSyncExternalStore(
2982
+ React16.useCallback((l) => registry3 ? registry3.subscribe(l) : () => void 0, [registry3]),
2983
+ () => registry3 ? registry3.snapshot() : EMPTY_LAYOUT,
2984
+ () => registry3 ? registry3.snapshot() : EMPTY_LAYOUT
2985
+ );
2986
+ }
2987
+ function bannerNoticeKey(tone, title, message) {
2988
+ if (typeof title !== "string" && typeof title !== "number") return null;
2989
+ return noticeKey(tone, title, message);
2990
+ }
2991
+ function holdsElements(children) {
2992
+ return React16.Children.toArray(children).some(
2993
+ (c) => React16.isValidElement(c) && c.type === React16.Fragment ? holdsElements(c.props.children) : React16.isValidElement(c)
2994
+ );
2897
2995
  }
2898
2996
  function Notices({ children, className, onHeight, ...props }) {
2899
2997
  const stack = React16.useRef(null);
2900
- const drawn = hasNotices(children);
2998
+ const [registry3] = React16.useState(createNoticeRegistry);
2999
+ const layout = useNoticeStackLayout(registry3);
3000
+ const drawn = layout.total > 0;
2901
3001
  React16.useLayoutEffect(() => {
2902
3002
  const el = stack.current;
2903
3003
  if (!onHeight) return;
2904
- if (!el) return onHeight(0);
3004
+ if (!el || !drawn) return onHeight(0);
2905
3005
  const report = () => onHeight(el.offsetHeight);
2906
3006
  report();
2907
3007
  if (typeof ResizeObserver === "undefined") return;
@@ -2912,8 +3012,27 @@ function Notices({ children, className, onHeight, ...props }) {
2912
3012
  onHeight(0);
2913
3013
  };
2914
3014
  }, [onHeight, drawn]);
2915
- if (!drawn) return null;
2916
- return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("div", { ref: stack, "data-slot": "notices", "aria-live": "polite", className: cn("flex shrink-0 flex-col gap-2 empty:hidden", className), ...props, children });
3015
+ if (!holdsElements(children)) return null;
3016
+ return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
3017
+ "div",
3018
+ {
3019
+ ref: stack,
3020
+ "data-slot": "notices",
3021
+ "data-float": "",
3022
+ "aria-live": "polite",
3023
+ hidden: !drawn || void 0,
3024
+ style: { width: `${NOTICE_STACK.widthRem}rem` },
3025
+ className: cn("flex flex-col items-stretch gap-2 empty:hidden", className),
3026
+ ...props,
3027
+ children: /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(NoticeStackContext.Provider, { value: registry3, children: [
3028
+ layout.folded > 0 ? /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("button", { type: "button", "data-slot": "notices-more", className: "order-first self-end rounded-full px-2 py-0.5", onClick: () => registry3.expand(), children: /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(Text, { variant: "caption", tone: "secondary", children: [
3029
+ layout.folded,
3030
+ " more"
3031
+ ] }) }) : null,
3032
+ children
3033
+ ] })
3034
+ }
3035
+ );
2917
3036
  }
2918
3037
  function NoticeSlot({ children, className, ...props }) {
2919
3038
  return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("div", { "data-slot": "notice-slot", "aria-live": "polite", className: cn("h-16 shrink-0 overflow-hidden [&>*]:h-full [&>*]:overflow-hidden", className), ...props, children });
@@ -2921,14 +3040,14 @@ function NoticeSlot({ children, className, ...props }) {
2921
3040
  var Page = React16.forwardRef(function Page2({ width = "wide", header, notices, sidebar, scopeBar, footer, flush, className, children, ...props }, ref) {
2922
3041
  const frame = (
2923
3042
  // The frame is always there (with or without notices), so a notice never remounts the page.
2924
- /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)("div", { "data-slot": "page-frame", className: "flex h-full min-w-0 flex-1 flex-col bg-content", children: [
3043
+ /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)("div", { "data-slot": "page-frame", className: "relative flex h-full min-w-0 flex-1 flex-col bg-content", children: [
2925
3044
  scopeBar ? /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("div", { "data-slot": "page-scope-bar", className: "flex h-control-lg shrink-0 items-center gap-2 border-b border-separator px-3", children: scopeBar }) : null,
2926
3045
  /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("div", { ref, "data-slot": "page", "data-flush": flush || void 0, className: cn("min-h-0 flex-1 overflow-y-auto bg-content", className), ...props, children: /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)("div", { className: cn("flex w-full flex-col", flush ? "min-h-full" : "gap-5 px-5 pb-5 pt-3", WIDTH[width]), children: [
2927
3046
  header,
2928
3047
  children
2929
3048
  ] }) }),
2930
3049
  footer ? /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("div", { "data-slot": "page-footer", className: "flex shrink-0 flex-col border-t border-separator bg-content", children: footer }) : null,
2931
- /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(Notices, { "data-page-notices": "", className: "border-t border-separator px-5 py-3", children: notices })
3050
+ /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(Notices, { "data-page-notices": "", children: notices })
2932
3051
  ] })
2933
3052
  );
2934
3053
  if (!sidebar) return frame;
@@ -5413,22 +5532,45 @@ var BANNER_ICON = {
5413
5532
  danger: /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(Glyph, { d: ALERT }),
5414
5533
  success: /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(Glyph, { d: DONE })
5415
5534
  };
5416
- function Banner({ tone, icon, title, message, actions, detail, onDismiss, className, ...props }) {
5535
+ function Banner({ tone, icon, title, message, actions, detail, onDismiss, count, className, ...props }) {
5417
5536
  const [copied, setCopied] = React34.useState(false);
5537
+ const registry3 = React34.useContext(NoticeStackContext);
5538
+ const floating = registry3 !== null;
5539
+ const id = React34.useId();
5540
+ const key2 = bannerNoticeKey(tone, title, message);
5541
+ React34.useLayoutEffect(() => {
5542
+ registry3?.set(id, key2, onDismiss);
5543
+ }, [registry3, id, key2, onDismiss]);
5544
+ React34.useLayoutEffect(() => registry3 ? () => registry3.remove(id) : void 0, [registry3, id]);
5545
+ const layout = useNoticeStackLayout(registry3);
5546
+ const slot = layout.drawn.get(id);
5547
+ if (floating && !slot) return null;
5548
+ if (slot) {
5549
+ count = Math.max(count ?? 1, slot.count);
5550
+ if (slot.dismissAll) onDismiss = slot.dismissAll;
5551
+ }
5418
5552
  return /* @__PURE__ */ (0, import_jsx_runtime42.jsxs)(
5419
5553
  "div",
5420
5554
  {
5421
5555
  role: tone === "danger" || tone === "warning" ? "alert" : "status",
5422
5556
  "data-slot": "banner",
5423
5557
  "data-tone": tone,
5424
- className: cn("flex min-h-row items-center gap-2.5 rounded-group px-3 py-2", BANNER_TONE[tone].box, className),
5558
+ "data-float": floating ? "" : void 0,
5559
+ "data-count": count && count > 1 ? count : void 0,
5560
+ className: cn("flex min-h-row items-center gap-2.5 rounded-group px-3 py-2", floating ? "items-start" : BANNER_TONE[tone].box, className),
5425
5561
  ...props,
5426
5562
  children: [
5427
5563
  /* @__PURE__ */ (0, import_jsx_runtime42.jsx)("span", { className: cn("flex shrink-0 self-start pt-px [&_svg]:size-icon", BANNER_TONE[tone].icon), children: icon ?? BANNER_ICON[tone] }),
5428
5564
  /* @__PURE__ */ (0, import_jsx_runtime42.jsxs)("div", { "data-slot": "banner-body", className: "flex min-w-0 flex-1 flex-wrap items-center gap-x-3 gap-y-2", children: [
5429
5565
  /* @__PURE__ */ (0, import_jsx_runtime42.jsxs)("div", { "data-slot": "banner-text", className: "flex min-w-0 flex-1 basis-56 flex-col gap-0.5", title: detail || void 0, children: [
5430
- /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(Text, { emphasized: true, children: title }),
5431
- message ? /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(Text, { as: "p", tone: "secondary", selectable: true, children: message }) : null
5566
+ /* @__PURE__ */ (0, import_jsx_runtime42.jsxs)(Text, { "data-slot": "banner-title", emphasized: true, ...floating && typeof title === "string" ? { title } : {}, children: [
5567
+ title,
5568
+ count && count > 1 ? /* @__PURE__ */ (0, import_jsx_runtime42.jsxs)("span", { "data-slot": "banner-count", className: "ml-1.5 font-normal text-label-secondary", children: [
5569
+ "\xD7",
5570
+ count
5571
+ ] }) : null
5572
+ ] }),
5573
+ message ? /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(Text, { "data-slot": "banner-message", as: "p", tone: "secondary", selectable: true, children: message }) : null
5432
5574
  ] }),
5433
5575
  actions || detail ? /* @__PURE__ */ (0, import_jsx_runtime42.jsxs)("div", { "data-slot": "banner-actions", className: "ml-auto flex shrink-0 items-center gap-2", children: [
5434
5576
  detail ? /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
@@ -6720,7 +6862,7 @@ function EndOfList({ onEndReached }) {
6720
6862
  var import_jsx_runtime47 = require("react/jsx-runtime");
6721
6863
  var LIST_WIDTH = { md: "w-70", lg: "w-85" };
6722
6864
  function SplitView({ header, notices, source, list, listHeader, listFooter, detail, listWidth = "lg", detailScrolls = true, narrow, className, ...props }) {
6723
- return /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("div", { "data-slot": "split-view", className: cn("flex h-full min-h-0 flex-col bg-content", className), ...props, children: [
6865
+ return /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("div", { "data-slot": "split-view", className: cn("relative flex h-full min-h-0 flex-col bg-content", className), ...props, children: [
6724
6866
  header ? /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("div", { className: "shrink-0 px-5 empty:hidden", children: header }) : null,
6725
6867
  /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("div", { "data-slot": "split-columns", "data-narrow": detail !== void 0 ? narrow : void 0, "data-has-source": source ? "" : void 0, className: "flex min-h-0 flex-1", children: [
6726
6868
  source ? /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("div", { "data-slot": "split-view-source", className: "flex w-52 min-w-40 shrink flex-col overflow-y-auto border-r border-separator py-2", children: source }) : null,
@@ -6731,7 +6873,7 @@ function SplitView({ header, notices, source, list, listHeader, listFooter, deta
6731
6873
  ] }),
6732
6874
  detail !== void 0 ? /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("div", { "data-slot": "split-view-detail", className: cn("flex min-w-80 flex-1 flex-col", detailScrolls ? "overflow-y-auto" : "min-h-0"), children: detail }) : null
6733
6875
  ] }),
6734
- /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(Notices, { "data-page-notices": "", className: "border-t border-separator px-5 py-3", children: notices })
6876
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(Notices, { "data-page-notices": "", children: notices })
6735
6877
  ] });
6736
6878
  }
6737
6879
 
@@ -8669,12 +8811,12 @@ function Skeleton({ className, animated = true, motion = "pulse", shape, height,
8669
8811
  // src/controls/surfaces.tsx
8670
8812
  var import_jsx_runtime68 = require("react/jsx-runtime");
8671
8813
  var Tile = React50.forwardRef(
8672
- ({ layout = "row", variant = "outline", icon, title, wrapTitle, line, end, selected, selectedStyle, tooltip, level, fit, endInset, oneLine, dashed, hoverStyle, danger, dimmed, glyphTone, hero, tone, dense, asChild = false, className, children, onClick, type, ...props }, ref) => {
8814
+ ({ layout = "row", variant = "outline", icon, title, wrapTitle, line, end, selected, selectedStyle, tooltip, level, fit, endInset, oneLine, dashed, hoverStyle, danger, dimmed, glyphTone, hero, tone, iconTone, dense, asChild = false, className, children, onClick, type, ...props }, ref) => {
8673
8815
  const Component = asChild ? import_react_slot5.Slot : "button";
8674
8816
  const ariaDisabled = props["aria-disabled"];
8675
8817
  const inert = ariaDisabled === true || ariaDisabled === "true";
8676
8818
  const body = /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)(import_jsx_runtime68.Fragment, { children: [
8677
- icon ? /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("span", { className: "matrx-tile-icon", children: icon }) : null,
8819
+ icon ? /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("span", { className: "matrx-tile-icon", "data-tone": iconTone && iconTone !== "neutral" ? iconTone : void 0, children: icon }) : null,
8678
8820
  /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)("span", { className: "matrx-tile-text", children: [
8679
8821
  /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("span", { className: "matrx-tile-title", children: title }),
8680
8822
  line ? /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("span", { className: "matrx-tile-line", children: line }) : null