7k-design-system 1.2.0 → 1.3.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.
@@ -463,20 +463,20 @@ var E = {
463
463
  D.displayName = "Drawer";
464
464
  //#endregion
465
465
  //#region src/react/components/Toast.tsx
466
- var ee = {
466
+ var O = {
467
467
  default: "",
468
468
  success: "toast-success",
469
469
  error: "toast-error",
470
470
  warning: "toast-warning",
471
471
  info: "toast-info"
472
- }, O = {
472
+ }, k = {
473
473
  halftone: "toast-halftone",
474
474
  texture: "toast-textured"
475
- }, k = t(({ children: e, variant: t = "default", onDismiss: n, texture: r, role: i = "status", className: a = "", style: o, ...s }, u) => {
475
+ }, A = t(({ children: e, variant: t = "default", onDismiss: n, texture: r, role: i = "status", className: a = "", style: o, ...s }, u) => {
476
476
  let d = [
477
477
  "toast",
478
- ee[t],
479
- r ? O[r] || O.texture : "",
478
+ O[t],
479
+ r ? k[r] || k.texture : "",
480
480
  a
481
481
  ].filter(Boolean).join(" ");
482
482
  return /* @__PURE__ */ l("div", {
@@ -503,10 +503,10 @@ var ee = {
503
503
  ]
504
504
  });
505
505
  });
506
- k.displayName = "Toast";
506
+ A.displayName = "Toast";
507
507
  //#endregion
508
508
  //#region src/react/components/Tooltip.tsx
509
- var te = {
509
+ var ee = {
510
510
  top: {
511
511
  bottom: "100%",
512
512
  left: "50%",
@@ -532,7 +532,7 @@ var te = {
532
532
  marginRight: 8
533
533
  }
534
534
  };
535
- function ne({ children: e, content: t, position: n = "top", className: r = "", style: i }) {
535
+ function te({ children: e, content: t, position: n = "top", className: r = "", style: i }) {
536
536
  let [a, u] = s(!1), d = o(null);
537
537
  return /* @__PURE__ */ l("span", {
538
538
  ref: d,
@@ -553,7 +553,7 @@ function ne({ children: e, content: t, position: n = "top", className: r = "", s
553
553
  position: "absolute",
554
554
  zIndex: "var(--z-overlay)",
555
555
  whiteSpace: "nowrap",
556
- ...te[n]
556
+ ...ee[n]
557
557
  },
558
558
  children: t
559
559
  })]
@@ -561,16 +561,16 @@ function ne({ children: e, content: t, position: n = "top", className: r = "", s
561
561
  }
562
562
  //#endregion
563
563
  //#region src/react/components/Alert.tsx
564
- var A = {
564
+ var j = {
565
565
  default: "",
566
566
  success: "alert-success",
567
567
  warning: "alert-warning",
568
568
  danger: "alert-danger",
569
569
  info: "alert-info"
570
- }, j = t(({ children: e, variant: t = "default", onClose: n, role: r = "alert", className: i = "", style: a, ...o }, s) => {
570
+ }, M = t(({ children: e, variant: t = "default", onClose: n, role: r = "alert", className: i = "", style: a, ...o }, s) => {
571
571
  let u = [
572
572
  "alert",
573
- A[t],
573
+ j[t],
574
574
  i
575
575
  ].filter(Boolean).join(" ");
576
576
  return /* @__PURE__ */ l("div", {
@@ -590,18 +590,18 @@ var A = {
590
590
  })]
591
591
  });
592
592
  });
593
- j.displayName = "Alert";
593
+ M.displayName = "Alert";
594
594
  //#endregion
595
595
  //#region src/react/components/Tabs.tsx
596
- var M = e(null);
597
- function N() {
598
- let e = r(M);
596
+ var N = e(null);
597
+ function P() {
598
+ let e = r(N);
599
599
  if (!e) throw Error("Tab components must be used within Tabs");
600
600
  return e;
601
601
  }
602
- function P({ children: e, defaultIndex: t = 0, index: n, onChange: r, className: i = "", style: o }) {
602
+ function F({ children: e, defaultIndex: t = 0, index: n, onChange: r, className: i = "", style: o }) {
603
603
  let [l, u] = s(t), d = n === void 0 ? l : n, f = a();
604
- return /* @__PURE__ */ c(M.Provider, {
604
+ return /* @__PURE__ */ c(N.Provider, {
605
605
  value: {
606
606
  selectedIndex: d,
607
607
  setSelectedIndex: (e) => {
@@ -616,7 +616,7 @@ function P({ children: e, defaultIndex: t = 0, index: n, onChange: r, className:
616
616
  })
617
617
  });
618
618
  }
619
- function F({ children: e, className: t = "", style: n }) {
619
+ function I({ children: e, className: t = "", style: n }) {
620
620
  return /* @__PURE__ */ c("div", {
621
621
  className: `tab-list ${t}`,
622
622
  role: "tablist",
@@ -624,8 +624,8 @@ function F({ children: e, className: t = "", style: n }) {
624
624
  children: e
625
625
  });
626
626
  }
627
- function I({ children: e, index: t, className: n = "", style: r }) {
628
- let { selectedIndex: i, setSelectedIndex: a, baseId: o } = N(), s = t ?? 0, l = i === s;
627
+ function L({ children: e, index: t, className: n = "", style: r }) {
628
+ let { selectedIndex: i, setSelectedIndex: a, baseId: o } = P(), s = t ?? 0, l = i === s;
629
629
  return /* @__PURE__ */ c("button", {
630
630
  role: "tab",
631
631
  "aria-selected": l,
@@ -661,8 +661,8 @@ function I({ children: e, index: t, className: n = "", style: r }) {
661
661
  children: e
662
662
  });
663
663
  }
664
- function L({ children: e, index: t, className: n = "", style: r }) {
665
- let { selectedIndex: i, baseId: a } = N(), o = t ?? 0;
664
+ function R({ children: e, index: t, className: n = "", style: r }) {
665
+ let { selectedIndex: i, baseId: a } = P(), o = t ?? 0;
666
666
  return i === o ? /* @__PURE__ */ c("div", {
667
667
  role: "tabpanel",
668
668
  id: `${a}-panel-${o}`,
@@ -675,7 +675,7 @@ function L({ children: e, index: t, className: n = "", style: r }) {
675
675
  }
676
676
  //#endregion
677
677
  //#region src/react/components/Nav.tsx
678
- var R = t(({ children: e, orientation: t = "horizontal", className: n = "", style: r, ...i }, a) => {
678
+ var z = t(({ children: e, orientation: t = "horizontal", className: n = "", style: r, ...i }, a) => {
679
679
  let o = [
680
680
  "nav",
681
681
  t === "vertical" ? "nav-vertical" : "nav-horizontal",
@@ -689,8 +689,8 @@ var R = t(({ children: e, orientation: t = "horizontal", className: n = "", styl
689
689
  children: e
690
690
  });
691
691
  });
692
- R.displayName = "Nav";
693
- var z = t(({ children: e, active: t = !1, href: n = "#", className: r = "", style: i, ...a }, o) => {
692
+ z.displayName = "Nav";
693
+ var B = t(({ children: e, active: t = !1, href: n = "#", className: r = "", style: i, ...a }, o) => {
694
694
  let s = [
695
695
  "nav-item",
696
696
  t ? "active" : "",
@@ -705,10 +705,10 @@ var z = t(({ children: e, active: t = !1, href: n = "#", className: r = "", styl
705
705
  children: e
706
706
  });
707
707
  });
708
- z.displayName = "NavItem";
708
+ B.displayName = "NavItem";
709
709
  //#endregion
710
710
  //#region src/react/components/Checkbox.tsx
711
- var B = t(({ label: e, indeterminate: t = !1, className: n = "", style: r, checked: i, ...a }, o) => {
711
+ var V = t(({ label: e, indeterminate: t = !1, className: n = "", style: r, checked: i, ...a }, o) => {
712
712
  let s = [
713
713
  "checkbox",
714
714
  i ? "checked" : "",
@@ -738,10 +738,10 @@ var B = t(({ label: e, indeterminate: t = !1, className: n = "", style: r, check
738
738
  ]
739
739
  });
740
740
  });
741
- B.displayName = "Checkbox";
741
+ V.displayName = "Checkbox";
742
742
  //#endregion
743
743
  //#region src/react/components/Radio.tsx
744
- var V = t(({ label: e, className: t = "", style: n, checked: r, ...i }, a) => {
744
+ var H = t(({ label: e, className: t = "", style: n, checked: r, ...i }, a) => {
745
745
  let o = [
746
746
  "radio",
747
747
  r ? "selected" : "",
@@ -769,10 +769,10 @@ var V = t(({ label: e, className: t = "", style: n, checked: r, ...i }, a) => {
769
769
  ]
770
770
  });
771
771
  });
772
- V.displayName = "Radio";
772
+ H.displayName = "Radio";
773
773
  //#endregion
774
774
  //#region src/react/components/Toggle.tsx
775
- var H = t(({ label: e, checked: t, onChange: n, className: r = "", style: i, ...a }, o) => {
775
+ var U = t(({ label: e, checked: t, onChange: n, className: r = "", style: i, ...a }, o) => {
776
776
  let s = [
777
777
  "toggle",
778
778
  t ? "on" : "",
@@ -803,27 +803,27 @@ var H = t(({ label: e, checked: t, onChange: n, className: r = "", style: i, ...
803
803
  ]
804
804
  });
805
805
  });
806
- H.displayName = "Toggle";
806
+ U.displayName = "Toggle";
807
807
  //#endregion
808
808
  //#region src/react/components/Select.tsx
809
- var U = t(({ children: e, className: t = "", style: n, ...r }, i) => /* @__PURE__ */ c("select", {
809
+ var W = t(({ children: e, className: t = "", style: n, ...r }, i) => /* @__PURE__ */ c("select", {
810
810
  ref: i,
811
811
  className: `select-native ${t}`,
812
812
  style: n,
813
813
  ...r,
814
814
  children: e
815
815
  }));
816
- U.displayName = "Select";
817
- var W = t(({ className: e = "", style: t, ...n }, r) => /* @__PURE__ */ c("textarea", {
816
+ W.displayName = "Select";
817
+ var G = t(({ className: e = "", style: t, ...n }, r) => /* @__PURE__ */ c("textarea", {
818
818
  ref: r,
819
819
  className: `textarea ${e}`,
820
820
  style: t,
821
821
  ...n
822
822
  }));
823
- W.displayName = "Textarea";
823
+ G.displayName = "Textarea";
824
824
  //#endregion
825
825
  //#region src/react/components/TextureOverlay.tsx
826
- var G = {
826
+ var K = {
827
827
  halftone: "texture-halftone",
828
828
  scanline: "texture-scanline",
829
829
  noise: "texture-noise",
@@ -832,9 +832,9 @@ var G = {
832
832
  "grid-dots": "texture-grid-dots",
833
833
  texture: "texture-overlay"
834
834
  };
835
- function K({ children: e, texture: t = "halftone", opacity: n, animate: r = !1, className: i = "", style: a }) {
835
+ function q({ children: e, texture: t = "halftone", opacity: n, animated: r = !1, className: i = "", style: a }) {
836
836
  let o = [
837
- G[t === !1 || t === null ? "texture" : t] || G.texture,
837
+ K[t === !1 || t === null ? "texture" : t] || K.texture,
838
838
  r ? "texture-animated" : "",
839
839
  i
840
840
  ].filter(Boolean).join(" ");
@@ -849,42 +849,42 @@ function K({ children: e, texture: t = "halftone", opacity: n, animate: r = !1,
849
849
  }
850
850
  //#endregion
851
851
  //#region src/react/components/IsometricBackground.tsx
852
- var q = {
852
+ var J = {
853
853
  grid: {
854
- static: "isometric-grid",
855
- animated: "isometric-grid-animated"
854
+ static: "iso-grid",
855
+ animated: "iso-grid-animated"
856
856
  },
857
857
  "grid-dense": {
858
- static: "isometric-grid-dense",
859
- animated: "isometric-grid-dense-animated"
858
+ static: "iso-grid-dense",
859
+ animated: "iso-grid-dense-animated"
860
860
  },
861
861
  cubes: {
862
- static: "isometric-cubes",
863
- animated: "isometric-cubes-animated"
862
+ static: "iso-cubes",
863
+ animated: "iso-cubes-animated"
864
864
  },
865
865
  terrain: {
866
- static: "isometric-terrain",
867
- animated: "isometric-terrain-animated"
866
+ static: "iso-terrain",
867
+ animated: "iso-terrain-animated"
868
868
  },
869
869
  pipes: {
870
- static: "isometric-pipes",
871
- animated: "isometric-pipes-animated"
870
+ static: "iso-pipes",
871
+ animated: "iso-pipes-animated"
872
872
  },
873
873
  hex: {
874
- static: "isometric-hex",
875
- animated: "isometric-hex-animated"
874
+ static: "iso-hex",
875
+ animated: "iso-hex-animated"
876
876
  },
877
877
  city: {
878
- static: "isometric-city",
879
- animated: "isometric-city-animated"
878
+ static: "iso-city",
879
+ animated: "iso-city-animated"
880
880
  },
881
881
  wave: {
882
- static: "isometric-wave",
883
- animated: "isometric-wave-animated"
882
+ static: "iso-wave",
883
+ animated: "iso-wave-animated"
884
884
  }
885
885
  };
886
- function J({ children: e, pattern: t = "grid", animated: n = !1, className: r = "", style: i }) {
887
- let a = q[t] || q.grid, o = [
886
+ function Y({ children: e, pattern: t = "grid", animated: n = !1, className: r = "", style: i }) {
887
+ let a = J[t] || J.grid, o = [
888
888
  a.static,
889
889
  n ? a.animated : "",
890
890
  r
@@ -897,7 +897,7 @@ function J({ children: e, pattern: t = "grid", animated: n = !1, className: r =
897
897
  }
898
898
  //#endregion
899
899
  //#region src/react/components/Spinner.tsx
900
- function Y({ size: e = "md", className: t = "", style: n }) {
900
+ function X({ size: e = "md", className: t = "", style: n }) {
901
901
  let r = [
902
902
  "spinner",
903
903
  e === "sm" ? "spinner-sm" : e === "lg" ? "spinner-lg" : "",
@@ -912,7 +912,7 @@ function Y({ size: e = "md", className: t = "", style: n }) {
912
912
  }
913
913
  //#endregion
914
914
  //#region src/react/components/Skeleton.tsx
915
- function X({ width: e, height: t = 16, className: n = "", style: r }) {
915
+ function Z({ width: e, height: t = 16, className: n = "", style: r }) {
916
916
  let i = ["skeleton", n].filter(Boolean).join(" ");
917
917
  return /* @__PURE__ */ c("span", {
918
918
  "aria-hidden": "true",
@@ -926,7 +926,7 @@ function X({ width: e, height: t = 16, className: n = "", style: r }) {
926
926
  }
927
927
  //#endregion
928
928
  //#region src/react/components/Avatar.tsx
929
- function re({ src: e, alt: t = "", initials: n, size: r = "md", circle: i = !1, className: a = "", style: o }) {
929
+ function ne({ src: e, alt: t = "", initials: n, size: r = "md", circle: i = !1, className: a = "", style: o }) {
930
930
  let s = [
931
931
  "avatar",
932
932
  r === "sm" ? "avatar-sm" : r === "lg" ? "avatar-lg" : "",
@@ -944,7 +944,7 @@ function re({ src: e, alt: t = "", initials: n, size: r = "md", circle: i = !1,
944
944
  }
945
945
  //#endregion
946
946
  //#region src/react/components/Progress.tsx
947
- function ie({ value: e, max: t = 100, variant: n, className: r = "", style: i }) {
947
+ function re({ value: e, max: t = 100, variant: n, className: r = "", style: i }) {
948
948
  let a = Math.min(100, Math.max(0, e / t * 100)), o = [
949
949
  "progress",
950
950
  n ? `progress-${n}` : "",
@@ -965,25 +965,25 @@ function ie({ value: e, max: t = 100, variant: n, className: r = "", style: i })
965
965
  }
966
966
  //#endregion
967
967
  //#region src/react/theme/projects.ts
968
- var ae = [
968
+ var ie = [
969
969
  "7kgroup",
970
970
  "7kminato",
971
971
  "inari"
972
- ], oe = "7k-project";
973
- function se(e) {
974
- return typeof e == "string" && ae.includes(e);
972
+ ], ae = "7k-project";
973
+ function oe(e) {
974
+ return typeof e == "string" && ie.includes(e);
975
975
  }
976
976
  //#endregion
977
977
  //#region src/react/theme/ProjectProvider.tsx
978
- var Z = e({
978
+ var Q = e({
979
979
  project: "7kgroup",
980
980
  setProject: () => {}
981
981
  });
982
- function Q({ children: e, defaultProject: t = "7kgroup", storageKey: r = oe }) {
982
+ function se({ children: e, defaultProject: t = "7kgroup", storageKey: r = ae }) {
983
983
  let [a, o] = s(() => {
984
984
  if (typeof window > "u") return t;
985
985
  let e = localStorage.getItem(r);
986
- return se(e) ? e : t;
986
+ return oe(e) ? e : t;
987
987
  });
988
988
  i(() => {
989
989
  document.documentElement.setAttribute("data-project", a), localStorage.setItem(r, a);
@@ -991,7 +991,7 @@ function Q({ children: e, defaultProject: t = "7kgroup", storageKey: r = oe }) {
991
991
  let l = n((e) => {
992
992
  o(e);
993
993
  }, []);
994
- return /* @__PURE__ */ c(Z.Provider, {
994
+ return /* @__PURE__ */ c(Q.Provider, {
995
995
  value: {
996
996
  project: a,
997
997
  setProject: l
@@ -1002,7 +1002,7 @@ function Q({ children: e, defaultProject: t = "7kgroup", storageKey: r = oe }) {
1002
1002
  //#endregion
1003
1003
  //#region src/react/theme/useProject.ts
1004
1004
  function $() {
1005
- return r(Z);
1005
+ return r(Q);
1006
1006
  }
1007
1007
  //#endregion
1008
1008
  //#region src/react/components/ProjectIcon.tsx
@@ -1160,9 +1160,104 @@ function fe({ options: e, value: t, onChange: n, placeholder: r = "Select…", d
1160
1160
  });
1161
1161
  }
1162
1162
  //#endregion
1163
+ //#region src/react/components/Stat.tsx
1164
+ function pe({ value: e, label: t, trend: n, accent: r = !1, status: i, className: a = "", style: o }) {
1165
+ let s = [
1166
+ "stat",
1167
+ r ? "stat-accent" : "",
1168
+ i ? `stat-${i}` : "",
1169
+ a
1170
+ ].filter(Boolean).join(" ");
1171
+ return /* @__PURE__ */ l("div", {
1172
+ className: s,
1173
+ style: o,
1174
+ children: [
1175
+ /* @__PURE__ */ c("span", {
1176
+ className: "stat-value",
1177
+ children: e
1178
+ }),
1179
+ /* @__PURE__ */ c("span", {
1180
+ className: "stat-label",
1181
+ children: t
1182
+ }),
1183
+ n != null && /* @__PURE__ */ c("span", {
1184
+ className: "stat-trend",
1185
+ children: n
1186
+ })
1187
+ ]
1188
+ });
1189
+ }
1190
+ //#endregion
1191
+ //#region src/react/components/EmptyState.tsx
1192
+ function me({ title: e, body: t, action: n, icon: r, className: i = "", style: a }) {
1193
+ let o = ["empty", i].filter(Boolean).join(" ");
1194
+ return /* @__PURE__ */ l("div", {
1195
+ className: o,
1196
+ style: a,
1197
+ children: [
1198
+ r == null ? null : /* @__PURE__ */ c("span", {
1199
+ className: "empty-icon",
1200
+ children: r
1201
+ }),
1202
+ /* @__PURE__ */ c("h3", {
1203
+ className: "empty-title",
1204
+ children: e
1205
+ }),
1206
+ t != null && /* @__PURE__ */ c("span", {
1207
+ className: "empty-text",
1208
+ children: t
1209
+ }),
1210
+ n != null && /* @__PURE__ */ c("span", {
1211
+ className: "empty-action",
1212
+ children: n
1213
+ })
1214
+ ]
1215
+ });
1216
+ }
1217
+ //#endregion
1218
+ //#region src/react/components/DataTable.tsx
1219
+ function he({ columns: e, rows: t, rowKey: n, loading: r = !1, skeletonRows: i = 6, empty: a, onSort: o, sortKey: s, sortDirection: u, pagination: d, className: f = "", style: p }) {
1220
+ let m = (e, t) => typeof n == "function" ? n(e, t) : String(e[n]);
1221
+ if ((typeof process > "u" || process.env.NODE_ENV !== "production") && !r) {
1222
+ let e = /* @__PURE__ */ new Set();
1223
+ t.forEach((t, n) => {
1224
+ let r = m(t, n);
1225
+ (r === "undefined" || e.has(r)) && console.warn(`DataTable: duplicate or missing rowKey "${r}" at row ${n}`), e.add(r);
1226
+ });
1227
+ }
1228
+ let h = ["datatable", f].filter(Boolean).join(" ");
1229
+ return /* @__PURE__ */ l("div", {
1230
+ className: h,
1231
+ style: p,
1232
+ children: [/* @__PURE__ */ l("table", {
1233
+ className: "table",
1234
+ children: [/* @__PURE__ */ c("thead", { children: /* @__PURE__ */ c("tr", { children: e.map((e) => /* @__PURE__ */ c("th", {
1235
+ style: e.width == null ? void 0 : { width: e.width },
1236
+ "aria-sort": e.sortable && o && s === e.key ? u === "desc" ? "descending" : "ascending" : void 0,
1237
+ children: e.sortable && o ? /* @__PURE__ */ l("button", {
1238
+ type: "button",
1239
+ className: "table-sort",
1240
+ onClick: () => o(e.key),
1241
+ children: [e.label, s === e.key ? u === "desc" ? " ↓" : " ↑" : ""]
1242
+ }) : e.label
1243
+ }, e.key)) }) }), /* @__PURE__ */ l("tbody", { children: [r ? Array.from({ length: i }, (t, n) => /* @__PURE__ */ c("tr", { children: e.map((e) => /* @__PURE__ */ c("td", { children: /* @__PURE__ */ c(Z, { height: 12 }) }, e.key)) }, `skeleton-${n}`)) : t.map((t, n) => /* @__PURE__ */ c("tr", { children: e.map((e) => /* @__PURE__ */ c("td", {
1244
+ className: e.mono ? "mono" : void 0,
1245
+ "data-label": e.mobileLabel ?? (typeof e.label == "string" ? e.label : void 0),
1246
+ children: e.render ? e.render(t, n) : String(t[e.key] ?? "")
1247
+ }, e.key)) }, m(t, n))), !r && t.length === 0 && a != null && /* @__PURE__ */ c("tr", { children: /* @__PURE__ */ c("td", {
1248
+ colSpan: e.length,
1249
+ children: a
1250
+ }) })] })]
1251
+ }), d != null && /* @__PURE__ */ c("div", {
1252
+ className: "datatable-pagination",
1253
+ children: d
1254
+ })]
1255
+ });
1256
+ }
1257
+ //#endregion
1163
1258
  //#region src/react/theme/ThemeProvider.tsx
1164
- var pe = "7k-theme";
1165
- function me({ children: e, defaultTheme: t = "dark", storageKey: r = pe }) {
1259
+ var ge = "7k-theme";
1260
+ function _e({ children: e, defaultTheme: t = "dark", storageKey: r = ge }) {
1166
1261
  let [a, o] = s(() => {
1167
1262
  if (typeof window > "u") return t;
1168
1263
  let e = localStorage.getItem(r);
@@ -1186,4 +1281,4 @@ function me({ children: e, defaultTheme: t = "dark", storageKey: r = pe }) {
1186
1281
  });
1187
1282
  }
1188
1283
  //#endregion
1189
- export { j as Alert, re as Avatar, f as Badge, u as Button, y as Card, x as CardBody, b as CardHeader, B as Checkbox, D as Drawer, m as Icon, d as Input, J as IsometricBackground, fe as Listbox, C as Modal, T as ModalFooter, w as ModalHeader, R as Nav, z as NavItem, ie as Progress, Z as ProjectContext, de as ProjectIcon, Q as ProjectProvider, V as Radio, U as Select, X as Skeleton, Y as Spinner, I as Tab, F as TabList, L as TabPanel, P as Tabs, W as Textarea, K as TextureOverlay, h as ThemeContext, me as ThemeProvider, _ as ThemeToggle, k as Toast, H as Toggle, ne as Tooltip, $ as useProject, g as useTheme };
1284
+ export { M as Alert, ne as Avatar, f as Badge, u as Button, y as Card, x as CardBody, b as CardHeader, V as Checkbox, he as DataTable, D as Drawer, me as EmptyState, m as Icon, d as Input, Y as IsometricBackground, fe as Listbox, C as Modal, T as ModalFooter, w as ModalHeader, z as Nav, B as NavItem, re as Progress, Q as ProjectContext, de as ProjectIcon, se as ProjectProvider, H as Radio, W as Select, Z as Skeleton, X as Spinner, pe as Stat, L as Tab, I as TabList, R as TabPanel, F as Tabs, G as Textarea, q as TextureOverlay, h as ThemeContext, _e as ThemeProvider, _ as ThemeToggle, A as Toast, U as Toggle, te as Tooltip, $ as useProject, g as useTheme };
@@ -105,7 +105,7 @@ export interface TextareaProps extends BaseProps, Omit<TextareaHTMLAttributes<HT
105
105
  export interface TextureOverlayProps extends BaseProps {
106
106
  texture?: Texture;
107
107
  opacity?: number;
108
- animate?: boolean;
108
+ animated?: boolean;
109
109
  }
110
110
  export interface IsometricBackgroundProps extends BaseProps {
111
111
  pattern?: IsometricPattern;
@@ -130,6 +130,42 @@ export interface ProgressProps extends BaseProps {
130
130
  max?: number;
131
131
  variant?: 'accent' | 'danger';
132
132
  }
133
+ export interface StatProps extends BaseProps {
134
+ value: ReactNode;
135
+ label: ReactNode;
136
+ trend?: ReactNode;
137
+ accent?: boolean;
138
+ status?: 'success' | 'warning' | 'danger' | 'neutral';
139
+ }
140
+ export interface EmptyStateProps extends BaseProps {
141
+ title: ReactNode;
142
+ body?: ReactNode;
143
+ action?: ReactNode;
144
+ icon?: ReactNode;
145
+ }
146
+ export interface DataTableColumn<Row> {
147
+ key: string;
148
+ label: ReactNode;
149
+ /** Plain-text label for the mobile stacked layout (`data-label`). Required
150
+ * when `label` is not a string, otherwise mobile cells show no label. */
151
+ mobileLabel?: string;
152
+ mono?: boolean;
153
+ sortable?: boolean;
154
+ width?: number | string;
155
+ render?: (row: Row, index: number) => ReactNode;
156
+ }
157
+ export interface DataTableProps<Row> extends BaseProps {
158
+ columns: DataTableColumn<Row>[];
159
+ rows: Row[];
160
+ rowKey: keyof Row | ((row: Row, index: number) => string);
161
+ loading?: boolean;
162
+ skeletonRows?: number;
163
+ empty?: ReactNode;
164
+ onSort?: (key: string) => void;
165
+ sortKey?: string;
166
+ sortDirection?: 'asc' | 'desc';
167
+ pagination?: ReactNode;
168
+ }
133
169
  export interface ListboxOption {
134
170
  value: string;
135
171
  label: string;
package/dist/textures.css CHANGED
@@ -1 +1 @@
1
- .scanline{position:relative;overflow:hidden}.scanline:after{content:"";background:repeating-linear-gradient(0deg,transparent,transparent 2px,var(--texture-03) 2px,var(--texture-03) 4px);pointer-events:none;z-index:1;animation:8s linear infinite scanline-scroll;position:absolute;inset:0}.scanline-fast{position:relative;overflow:hidden}.scanline-fast:after{content:"";background:repeating-linear-gradient(0deg,transparent,transparent 1px,var(--texture-05) 1px,var(--texture-05) 2px);pointer-events:none;z-index:1;animation:3s linear infinite scanline-scroll;position:absolute;inset:0}.halftone-sm{background-image:radial-gradient(var(--texture-08) .5px,transparent .5px);background-size:4px 4px}.halftone-md{background-image:radial-gradient(var(--texture-05) 1px,transparent 1px);background-size:6px 6px}.halftone-lg{background-image:radial-gradient(var(--texture-04) 1.5px,transparent 1.5px);background-size:10px 10px}.halftone-accent{background-image:radial-gradient(var(--brand-primary) 1px,transparent 1px);background-size:8px 8px}.dot-matrix{background-image:radial-gradient(var(--texture-07) .5px,transparent .5px);background-size:6px 6px}.dot-matrix-dense{background-image:radial-gradient(var(--texture-09) .5px,transparent .5px);background-size:3px 3px}.dot-matrix-sparse{background-image:radial-gradient(var(--texture-04) 1px,transparent 1px);background-size:12px 12px}.diagonal-stripes{background:repeating-linear-gradient(45deg,transparent,transparent 6px,var(--texture-04) 6px,var(--texture-04) 7px)}.diagonal-stripes-dense{background:repeating-linear-gradient(45deg,transparent,transparent 3px,var(--texture-08) 3px,var(--texture-08) 4px)}.diagonal-stripes-negative{background:repeating-linear-gradient(45deg,var(--color-ink),var(--color-ink) 6px,var(--color-paper) 6px,var(--color-paper) 7px)}.stripes-h{background:repeating-linear-gradient(0deg,transparent,transparent 8px,var(--texture-04) 8px,var(--texture-04) 9px)}.stripes-h-dense{background:repeating-linear-gradient(0deg,transparent,transparent 4px,var(--texture-08) 4px,var(--texture-08) 5px)}.stripes-v{background:repeating-linear-gradient(90deg,transparent,transparent 8px,var(--texture-04) 8px,var(--texture-04) 9px)}.stripes-v-dense{background:repeating-linear-gradient(90deg,transparent,transparent 4px,var(--texture-08) 4px,var(--texture-08) 5px)}.crosshatch{background-image:repeating-linear-gradient(45deg,transparent,transparent 6px,var(--texture-04) 6px,var(--texture-04) 7px),repeating-linear-gradient(-45deg,transparent,transparent 6px,var(--texture-04) 6px,var(--texture-04) 7px)}.crosshatch-dense{background-image:repeating-linear-gradient(45deg,transparent,transparent 3px,var(--texture-08) 3px,var(--texture-08) 4px),repeating-linear-gradient(-45deg,transparent,transparent 3px,var(--texture-08) 3px,var(--texture-08) 4px)}.checkerboard{background-image:linear-gradient(45deg,var(--texture-04) 25%,transparent 25%),linear-gradient(-45deg,var(--texture-04) 25%,transparent 25%),linear-gradient(45deg,transparent 75%,var(--texture-04) 75%),linear-gradient(-45deg,transparent 75%,var(--texture-04) 75%);background-position:0 0,0 6px,6px -6px,-6px 0;background-size:12px 12px}.checkerboard-contrast{background-image:linear-gradient(45deg,var(--color-ink) 25%,transparent 25%),linear-gradient(-45deg,var(--color-ink) 25%,transparent 25%),linear-gradient(45deg,transparent 75%,var(--color-ink) 75%),linear-gradient(-45deg,transparent 75%,var(--color-ink) 75%);background-position:0 0,0 8px,8px -8px,-8px 0;background-size:16px 16px}.noise{position:relative}.noise:before{content:"";background-image:var(--texture-noise-svg);pointer-events:none;opacity:.5;z-index:1;background-size:128px 128px;position:absolute;inset:0}.noise-heavy:before{opacity:.12}.vignette-ink{position:relative}.vignette-ink:after{content:"";background:radial-gradient(ellipse at center,transparent 50%,color-mix(in srgb,var(--color-ink) 80%,transparent) 100%);pointer-events:none;z-index:1;position:absolute;inset:0}.vignette-ink-sharp:after{background:radial-gradient(ellipse at center,transparent 30%,var(--color-ink) 100%)}.waves{background:radial-gradient(ellipse at 50% 0,transparent 60%,var(--texture-02) 60%,var(--texture-02) 61%),radial-gradient(ellipse at 50% 0,transparent 50%,var(--texture-02) 50%,var(--texture-02) 51%),radial-gradient(ellipse at 50% 0,transparent 40%,var(--texture-03) 40%,var(--texture-03) 41%),radial-gradient(ellipse at 50% 0,transparent 30%,var(--texture-02) 30%,var(--texture-02) 31%),radial-gradient(ellipse at 50% 0,transparent 20%,var(--texture-03) 20%,var(--texture-03) 21%),radial-gradient(ellipse at 50% 0,transparent 10%,var(--texture-02) 10%,var(--texture-02) 11%);background-position:0 0,0 10px,0 20px,0 30px,0 40px,0 50px;background-size:100px 80px,100px 80px,100px 80px,100px 80px,100px 80px,100px 80px}.waves-dense{background:radial-gradient(ellipse at 50% 0,transparent 65%,var(--texture-05) 65%,var(--texture-05) 66%),radial-gradient(ellipse at 50% 0,transparent 55%,var(--texture-04) 55%,var(--texture-04) 56%),radial-gradient(ellipse at 50% 0,transparent 45%,var(--texture-05) 45%,var(--texture-05) 46%),radial-gradient(ellipse at 50% 0,transparent 35%,var(--texture-04) 35%,var(--texture-04) 36%),radial-gradient(ellipse at 50% 0,transparent 25%,var(--texture-05) 25%,var(--texture-05) 26%),radial-gradient(ellipse at 50% 0,transparent 15%,var(--texture-04) 15%,var(--texture-04) 16%);background-position:0 0,0 8px,0 16px,0 24px,0 32px,0 40px;background-size:60px 50px,60px 50px,60px 50px,60px 50px,60px 50px,60px 50px}.concentric-rings{background:radial-gradient(circle at 50% 50%,transparent 10%,var(--texture-03) 10%,var(--texture-03) 11%,transparent 11%),radial-gradient(circle at 50% 50%,transparent 20%,var(--texture-03) 20%,var(--texture-03) 21%,transparent 21%),radial-gradient(circle at 50% 50%,transparent 30%,var(--texture-04) 30%,var(--texture-04) 31%,transparent 31%),radial-gradient(circle at 50% 50%,transparent 40%,var(--texture-03) 40%,var(--texture-03) 41%,transparent 41%),radial-gradient(circle at 50% 50%,transparent 50%,var(--texture-03) 50%,var(--texture-03) 51%,transparent 51%),radial-gradient(circle at 50% 50%,transparent 60%,var(--texture-02) 60%,var(--texture-02) 61%);background-position:50%;background-size:200px 200px}.concentric-rings-dense{background:radial-gradient(circle at 50% 50%,transparent 8%,var(--texture-06) 8%,var(--texture-06) 9%,transparent 9%),radial-gradient(circle at 50% 50%,transparent 16%,var(--texture-05) 16%,var(--texture-05) 17%,transparent 17%),radial-gradient(circle at 50% 50%,transparent 24%,var(--texture-06) 24%,var(--texture-06) 25%,transparent 25%),radial-gradient(circle at 50% 50%,transparent 32%,var(--texture-05) 32%,var(--texture-05) 33%,transparent 33%),radial-gradient(circle at 50% 50%,transparent 40%,var(--texture-06) 40%,var(--texture-06) 41%,transparent 41%),radial-gradient(circle at 50% 50%,transparent 48%,var(--texture-05) 48%,var(--texture-05) 49%);background-position:50%;background-size:120px 120px}.grid-dots{background-image:radial-gradient(var(--texture-06) 1px,transparent 1px),radial-gradient(var(--texture-06) 1px,transparent 1px);background-position:0 0,8px 8px;background-size:16px 16px,16px 16px}.grid-dots-dense{background-image:radial-gradient(var(--texture-09) .8px,transparent .8px),radial-gradient(var(--texture-09) .8px,transparent .8px);background-position:0 0,4px 4px;background-size:8px 8px,8px 8px}.grid-dots-accent{background-image:radial-gradient(color-mix(in srgb,var(--magenta-500) 15%,transparent) 1px,transparent 1px),radial-gradient(color-mix(in srgb,var(--magenta-500) 15%,transparent) 1px,transparent 1px);background-position:0 0,10px 10px;background-size:20px 20px,20px 20px}.rain{background:repeating-linear-gradient(20deg,transparent,transparent 3px,var(--texture-02) 3px,var(--texture-02) 4px);background-size:8px 20px}.rain-dense{background:repeating-linear-gradient(20deg,transparent,transparent 2px,var(--texture-05) 2px,var(--texture-05) 3px);background-size:6px 12px}.rain-angled{background:repeating-linear-gradient(35deg,transparent,transparent 3px,var(--texture-03) 3px,var(--texture-03) 4px),repeating-linear-gradient(-35deg,transparent,transparent 6px,var(--texture-02) 6px,var(--texture-02) 7px);background-size:12px 24px}.starburst{background:repeating-conic-gradient(var(--texture-03) 0,var(--texture-03) 0.5%,transparent 0.5%,transparent 5%);background-size:100% 100%}.starburst-dense{background:repeating-conic-gradient(var(--texture-06) 0,var(--texture-06) 0.3%,transparent 0.3%,transparent 3%)}.starburst-accent{background:repeating-conic-gradient(color-mix(in srgb,var(--brand-primary) 12%,transparent) 0,color-mix(in srgb,var(--brand-primary) 12%,transparent) 0.5%,transparent 0.5%,transparent 4%)}.zigzag{background:repeating-linear-gradient(75deg,transparent,transparent 8px,var(--texture-04) 8px,var(--texture-04) 9px),repeating-linear-gradient(-75deg,transparent,transparent 8px,var(--texture-04) 8px,var(--texture-04) 9px);background-size:24px 12px}.zigzag-dense{background:repeating-linear-gradient(75deg,transparent,transparent 4px,var(--texture-07) 4px,var(--texture-07) 5px),repeating-linear-gradient(-75deg,transparent,transparent 4px,var(--texture-07) 4px,var(--texture-07) 5px);background-size:12px 6px}.zigzag-horizontal{background:repeating-linear-gradient(165deg,transparent,transparent 8px,var(--texture-04) 8px,var(--texture-04) 9px),repeating-linear-gradient(-165deg,transparent,transparent 8px,var(--texture-04) 8px,var(--texture-04) 9px);background-size:24px 12px}.separator-solid{background:var(--texture-solid);opacity:.25;border:none;width:100%;height:1px;margin:0}.separator-thick{opacity:.4;height:2px}.separator-dashed{border-top:2px dashed var(--texture-solid);opacity:.3;background:0 0;height:0}.separator-dotted{border-top:2px dotted var(--texture-solid);opacity:.25;background:0 0;height:0}
1
+ .bg-scanline{position:relative;overflow:hidden}.bg-scanline:after{content:"";background:repeating-linear-gradient(0deg,transparent,transparent 2px,var(--texture-03) 2px,var(--texture-03) 4px);pointer-events:none;z-index:1;animation:8s linear infinite scanline-scroll;position:absolute;inset:0}.bg-scanline-fast{position:relative;overflow:hidden}.bg-scanline-fast:after{content:"";background:repeating-linear-gradient(0deg,transparent,transparent 1px,var(--texture-05) 1px,var(--texture-05) 2px);pointer-events:none;z-index:1;animation:3s linear infinite scanline-scroll;position:absolute;inset:0}.bg-halftone-sm{background-image:radial-gradient(var(--texture-08) .5px,transparent .5px);background-size:4px 4px}.bg-halftone-md{background-image:radial-gradient(var(--texture-05) 1px,transparent 1px);background-size:6px 6px}.bg-halftone-lg{background-image:radial-gradient(var(--texture-04) 1.5px,transparent 1.5px);background-size:10px 10px}.bg-halftone-accent{background-image:radial-gradient(var(--brand-primary) 1px,transparent 1px);background-size:8px 8px}.bg-dot-matrix{background-image:radial-gradient(var(--texture-07) .5px,transparent .5px);background-size:6px 6px}.bg-dot-matrix-dense{background-image:radial-gradient(var(--texture-09) .5px,transparent .5px);background-size:3px 3px}.bg-dot-matrix-sparse{background-image:radial-gradient(var(--texture-04) 1px,transparent 1px);background-size:12px 12px}.bg-diagonal-stripes{background:repeating-linear-gradient(45deg,transparent,transparent 6px,var(--texture-04) 6px,var(--texture-04) 7px)}.bg-diagonal-stripes-dense{background:repeating-linear-gradient(45deg,transparent,transparent 3px,var(--texture-08) 3px,var(--texture-08) 4px)}.bg-diagonal-stripes-negative{background:repeating-linear-gradient(45deg,var(--color-ink),var(--color-ink) 6px,var(--color-paper) 6px,var(--color-paper) 7px)}.bg-stripes-h{background:repeating-linear-gradient(0deg,transparent,transparent 8px,var(--texture-04) 8px,var(--texture-04) 9px)}.bg-stripes-h-dense{background:repeating-linear-gradient(0deg,transparent,transparent 4px,var(--texture-08) 4px,var(--texture-08) 5px)}.bg-stripes-v{background:repeating-linear-gradient(90deg,transparent,transparent 8px,var(--texture-04) 8px,var(--texture-04) 9px)}.bg-stripes-v-dense{background:repeating-linear-gradient(90deg,transparent,transparent 4px,var(--texture-08) 4px,var(--texture-08) 5px)}.bg-crosshatch{background-image:repeating-linear-gradient(45deg,transparent,transparent 6px,var(--texture-04) 6px,var(--texture-04) 7px),repeating-linear-gradient(-45deg,transparent,transparent 6px,var(--texture-04) 6px,var(--texture-04) 7px)}.bg-crosshatch-dense{background-image:repeating-linear-gradient(45deg,transparent,transparent 3px,var(--texture-08) 3px,var(--texture-08) 4px),repeating-linear-gradient(-45deg,transparent,transparent 3px,var(--texture-08) 3px,var(--texture-08) 4px)}.bg-checkerboard{background-image:linear-gradient(45deg,var(--texture-04) 25%,transparent 25%),linear-gradient(-45deg,var(--texture-04) 25%,transparent 25%),linear-gradient(45deg,transparent 75%,var(--texture-04) 75%),linear-gradient(-45deg,transparent 75%,var(--texture-04) 75%);background-position:0 0,0 6px,6px -6px,-6px 0;background-size:12px 12px}.bg-checkerboard-contrast{background-image:linear-gradient(45deg,var(--color-ink) 25%,transparent 25%),linear-gradient(-45deg,var(--color-ink) 25%,transparent 25%),linear-gradient(45deg,transparent 75%,var(--color-ink) 75%),linear-gradient(-45deg,transparent 75%,var(--color-ink) 75%);background-position:0 0,0 8px,8px -8px,-8px 0;background-size:16px 16px}.bg-noise{position:relative}.bg-noise:before{content:"";background-image:var(--texture-noise-svg);pointer-events:none;opacity:.5;z-index:1;background-size:128px 128px;position:absolute;inset:0}.bg-noise-heavy:before{opacity:.12}.bg-vignette-ink{position:relative}.bg-vignette-ink:after{content:"";background:radial-gradient(ellipse at center,transparent 50%,color-mix(in srgb,var(--color-ink) 80%,transparent) 100%);pointer-events:none;z-index:1;position:absolute;inset:0}.bg-vignette-ink-sharp:after{background:radial-gradient(ellipse at center,transparent 30%,var(--color-ink) 100%)}.bg-waves{background:radial-gradient(ellipse at 50% 0,transparent 60%,var(--texture-02) 60%,var(--texture-02) 61%),radial-gradient(ellipse at 50% 0,transparent 50%,var(--texture-02) 50%,var(--texture-02) 51%),radial-gradient(ellipse at 50% 0,transparent 40%,var(--texture-03) 40%,var(--texture-03) 41%),radial-gradient(ellipse at 50% 0,transparent 30%,var(--texture-02) 30%,var(--texture-02) 31%),radial-gradient(ellipse at 50% 0,transparent 20%,var(--texture-03) 20%,var(--texture-03) 21%),radial-gradient(ellipse at 50% 0,transparent 10%,var(--texture-02) 10%,var(--texture-02) 11%);background-position:0 0,0 10px,0 20px,0 30px,0 40px,0 50px;background-size:100px 80px,100px 80px,100px 80px,100px 80px,100px 80px,100px 80px}.bg-waves-dense{background:radial-gradient(ellipse at 50% 0,transparent 65%,var(--texture-05) 65%,var(--texture-05) 66%),radial-gradient(ellipse at 50% 0,transparent 55%,var(--texture-04) 55%,var(--texture-04) 56%),radial-gradient(ellipse at 50% 0,transparent 45%,var(--texture-05) 45%,var(--texture-05) 46%),radial-gradient(ellipse at 50% 0,transparent 35%,var(--texture-04) 35%,var(--texture-04) 36%),radial-gradient(ellipse at 50% 0,transparent 25%,var(--texture-05) 25%,var(--texture-05) 26%),radial-gradient(ellipse at 50% 0,transparent 15%,var(--texture-04) 15%,var(--texture-04) 16%);background-position:0 0,0 8px,0 16px,0 24px,0 32px,0 40px;background-size:60px 50px,60px 50px,60px 50px,60px 50px,60px 50px,60px 50px}.bg-concentric-rings{background:radial-gradient(circle at 50% 50%,transparent 10%,var(--texture-03) 10%,var(--texture-03) 11%,transparent 11%),radial-gradient(circle at 50% 50%,transparent 20%,var(--texture-03) 20%,var(--texture-03) 21%,transparent 21%),radial-gradient(circle at 50% 50%,transparent 30%,var(--texture-04) 30%,var(--texture-04) 31%,transparent 31%),radial-gradient(circle at 50% 50%,transparent 40%,var(--texture-03) 40%,var(--texture-03) 41%,transparent 41%),radial-gradient(circle at 50% 50%,transparent 50%,var(--texture-03) 50%,var(--texture-03) 51%,transparent 51%),radial-gradient(circle at 50% 50%,transparent 60%,var(--texture-02) 60%,var(--texture-02) 61%);background-position:50%;background-size:200px 200px}.bg-concentric-rings-dense{background:radial-gradient(circle at 50% 50%,transparent 8%,var(--texture-06) 8%,var(--texture-06) 9%,transparent 9%),radial-gradient(circle at 50% 50%,transparent 16%,var(--texture-05) 16%,var(--texture-05) 17%,transparent 17%),radial-gradient(circle at 50% 50%,transparent 24%,var(--texture-06) 24%,var(--texture-06) 25%,transparent 25%),radial-gradient(circle at 50% 50%,transparent 32%,var(--texture-05) 32%,var(--texture-05) 33%,transparent 33%),radial-gradient(circle at 50% 50%,transparent 40%,var(--texture-06) 40%,var(--texture-06) 41%,transparent 41%),radial-gradient(circle at 50% 50%,transparent 48%,var(--texture-05) 48%,var(--texture-05) 49%);background-position:50%;background-size:120px 120px}.bg-grid-dots{background-image:radial-gradient(var(--texture-06) 1px,transparent 1px),radial-gradient(var(--texture-06) 1px,transparent 1px);background-position:0 0,8px 8px;background-size:16px 16px,16px 16px}.bg-grid-dots-dense{background-image:radial-gradient(var(--texture-09) .8px,transparent .8px),radial-gradient(var(--texture-09) .8px,transparent .8px);background-position:0 0,4px 4px;background-size:8px 8px,8px 8px}.bg-grid-dots-accent{background-image:radial-gradient(color-mix(in srgb,var(--magenta-500) 15%,transparent) 1px,transparent 1px),radial-gradient(color-mix(in srgb,var(--magenta-500) 15%,transparent) 1px,transparent 1px);background-position:0 0,10px 10px;background-size:20px 20px,20px 20px}.bg-rain{background:repeating-linear-gradient(20deg,transparent,transparent 3px,var(--texture-02) 3px,var(--texture-02) 4px);background-size:8px 20px}.bg-rain-dense{background:repeating-linear-gradient(20deg,transparent,transparent 2px,var(--texture-05) 2px,var(--texture-05) 3px);background-size:6px 12px}.bg-rain-angled{background:repeating-linear-gradient(35deg,transparent,transparent 3px,var(--texture-03) 3px,var(--texture-03) 4px),repeating-linear-gradient(-35deg,transparent,transparent 6px,var(--texture-02) 6px,var(--texture-02) 7px);background-size:12px 24px}.bg-starburst{background:repeating-conic-gradient(var(--texture-03) 0,var(--texture-03) 0.5%,transparent 0.5%,transparent 5%);background-size:100% 100%}.bg-starburst-dense{background:repeating-conic-gradient(var(--texture-06) 0,var(--texture-06) 0.3%,transparent 0.3%,transparent 3%)}.bg-starburst-accent{background:repeating-conic-gradient(color-mix(in srgb,var(--brand-primary) 12%,transparent) 0,color-mix(in srgb,var(--brand-primary) 12%,transparent) 0.5%,transparent 0.5%,transparent 4%)}.bg-zigzag{background:repeating-linear-gradient(75deg,transparent,transparent 8px,var(--texture-04) 8px,var(--texture-04) 9px),repeating-linear-gradient(-75deg,transparent,transparent 8px,var(--texture-04) 8px,var(--texture-04) 9px);background-size:24px 12px}.bg-zigzag-dense{background:repeating-linear-gradient(75deg,transparent,transparent 4px,var(--texture-07) 4px,var(--texture-07) 5px),repeating-linear-gradient(-75deg,transparent,transparent 4px,var(--texture-07) 4px,var(--texture-07) 5px);background-size:12px 6px}.bg-zigzag-horizontal{background:repeating-linear-gradient(165deg,transparent,transparent 8px,var(--texture-04) 8px,var(--texture-04) 9px),repeating-linear-gradient(-165deg,transparent,transparent 8px,var(--texture-04) 8px,var(--texture-04) 9px);background-size:24px 12px}.bg-separator-solid{background:var(--texture-solid);opacity:.25;border:none;width:100%;height:1px;margin:0}.bg-separator-thick{opacity:.4;height:2px}.bg-separator-dashed{border-top:2px dashed var(--texture-solid);opacity:.3;background:0 0;height:0}.bg-separator-dotted{border-top:2px dotted var(--texture-solid);opacity:.25;background:0 0;height:0}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "7k-design-system",
3
- "version": "1.2.0",
3
+ "version": "1.3.0",
4
4
  "description": "Dark-first, neon-accented design system for multi-project tech company 7K. Three-font system (Geist sans + Geist Mono + Geist Pixel 5 geometric variants), #FF0FF brand pulse, Tokyo neon atmosphere with high-contrast texture punctuation.",
5
5
  "type": "module",
6
6
  "main": "./dist/7k-design-system.css",