@1337exp/taoui 1.7.0 → 1.8.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.
package/README.md CHANGED
@@ -28,6 +28,7 @@ change a handful of CSS variables and the whole kit follows.
28
28
  - **TaoContainer** — max-width (wide / slim / ultra-slim) and centering
29
29
  - **TaoFlex** — flexbox wrapper: justify / align / direction / wrap / gap
30
30
  - **TaoSpace** — even gap between children
31
+ - **TaoGrid** / **TaoGridItem** — tiles: `min` is a catalog (auto-fill), `cols` is bento. Item `col` / `row` span; below ~560px span resets. Not masonry
31
32
  - **TaoDivider** — `line` (hairline), `text` (line with a label), `gap` (empty space, size: small / medium / large)
32
33
  - **TaoSplit** — two panes and a gutter. `row` / `column` like Flex. `v-model` is the start size in `%` or `px`; `resizable="false"` locks the gutter. Not Divider.
33
34
  - **TaoFieldset** — grouped frame: `legend` sits on the top border, `align` is start / center / end
@@ -92,6 +93,9 @@ Control sizes: `small` | `medium` | `large`.
92
93
  Avatar also accepts short `s` / `m` / `l`. Divider `gap` used to call the large size `big` — that is an alias of `large`.
93
94
  Container lives on another axis: `wide` / `slim` / `ultra-slim`.
94
95
 
96
+ Font size scale (primitives): `xs` 12 … `xl` 18 for controls; `2xl` 24, `3xl` 32, `4xl` 36 for titles and prose.
97
+ There is no heading component — use `h1 { font-size: var(--tao-font-size-3xl) }`.
98
+
95
99
  ## Icons
96
100
 
97
101
  `TaoIcon` does not ship its own set — it renders `icon-<name>`
@@ -476,6 +480,7 @@ document.documentElement.setAttribute('data-tao-theme', 'light')
476
480
  - `--tao-color-input-*` — fields, because input bg/text often differs from surface/text
477
481
  - `--tao-radius-control`, `--tao-radius-panel` — radii (small controls vs large panels)
478
482
  - `--tao-shadow-panel`, `--tao-shadow-overlay` — shadows
483
+ - `--tao-font-size-*` — type scale in `primitives.css`: `xs`–`xl` controls, `2xl`–`4xl` titles / prose
479
484
 
480
485
  The full list lives in `src/styles/semantic.css` — the only file worth opening
481
486
  to see the whole theming API.
package/README.ru.md CHANGED
@@ -28,6 +28,7 @@
28
28
  - **TaoContainer** — контейнер с ограничением ширины (wide/slim/ultra-slim) и авто-центровкой
29
29
  - **TaoFlex** — обёртка над flexbox с пропами justify/align/direction/wrap/gap
30
30
  - **TaoSpace** — авто-расстановка дочерних элементов с равномерным gap
31
+ - **TaoGrid** / **TaoGridItem** — плитки: `min` — каталог (auto-fill), `cols` — bento. У item `col` / `row`; уже ~560px span сбрасывается. Не masonry
31
32
  - **TaoDivider** — разделитель: line (тонкая линия), text (линия с текстом), gap (пустой отступ, size: small/medium/large)
32
33
  - **TaoSplit** — две панели и полоса. `row` / `column` как у Flex. `v-model` — размер start в `%` или `px`; `resizable="false"` фиксирует полосу. Не Divider.
33
34
  - **TaoFieldset** — рамка-группа: `legend` сидит на верхней границе, `align` — start / center / end
@@ -92,6 +93,9 @@ Stages — это процесс, не тон: `wait` / `work` / `ok` / `bad` (`
92
93
  Avatar понимает и короткие `s` / `m` / `l`. Divider `gap` раньше называл крупный размер `big` — это алиас `large`.
93
94
  Container живёт на другой оси: `wide` / `slim` / `ultra-slim`.
94
95
 
96
+ Шкала кегля (примитивы): `xs` 12 … `xl` 18 для контролов; `2xl` 24, `3xl` 32, `4xl` 36 для заголовков и прозы.
97
+ Отдельного компонента заголовка нет — `h1 { font-size: var(--tao-font-size-3xl) }`.
98
+
95
99
  ## Иконки
96
100
 
97
101
  `TaoIcon` не поставляет собственный набор иконок — он рендерит класс `icon-<name>`
@@ -479,6 +483,7 @@ document.documentElement.setAttribute('data-tao-theme', 'light')
479
483
  - `--tao-color-input-*` — поля ввода отдельно, т.к. фон/текст полей часто не совпадают с surface/text
480
484
  - `--tao-radius-control`, `--tao-radius-panel` — скругления (мелкие контролы vs крупные панели)
481
485
  - `--tao-shadow-panel`, `--tao-shadow-overlay` — тени
486
+ - `--tao-font-size-*` — шкала кегля в `primitives.css`: `xs`–`xl` контролы, `2xl`–`4xl` заголовки / проза
482
487
 
483
488
  Полный список — в `src/styles/semantic.css`, он же единственный файл,
484
489
  который стоит открыть, чтобы понять весь доступный API темизации.
package/dist/index.cjs CHANGED
@@ -12,7 +12,7 @@
12
12
  class: "tao-button__icon"
13
13
  };
14
14
  const _hoisted_4$v = { class: "tao-button__content" };
15
- const _sfc_main$X = /* @__PURE__ */ vue.defineComponent({
15
+ const _sfc_main$Z = /* @__PURE__ */ vue.defineComponent({
16
16
  ...{ name: "TaoButton" },
17
17
  __name: "TaoButton",
18
18
  props: {
@@ -67,8 +67,8 @@
67
67
  }
68
68
  return target;
69
69
  };
70
- const TaoButton = /* @__PURE__ */ _export_sfc(_sfc_main$X, [["__scopeId", "data-v-c3034f66"]]);
71
- const _sfc_main$W = /* @__PURE__ */ vue.defineComponent({
70
+ const TaoButton = /* @__PURE__ */ _export_sfc(_sfc_main$Z, [["__scopeId", "data-v-c3034f66"]]);
71
+ const _sfc_main$Y = /* @__PURE__ */ vue.defineComponent({
72
72
  ...{ name: "TaoBlock" },
73
73
  __name: "TaoBlock",
74
74
  props: {
@@ -100,7 +100,7 @@
100
100
  };
101
101
  }
102
102
  });
103
- const TaoBlock = /* @__PURE__ */ _export_sfc(_sfc_main$W, [["__scopeId", "data-v-feb87e36"]]);
103
+ const TaoBlock = /* @__PURE__ */ _export_sfc(_sfc_main$Y, [["__scopeId", "data-v-feb87e36"]]);
104
104
  const formFieldKey = Symbol("taoFormField");
105
105
  const _hoisted_1$O = { class: "tao-input-wrapper" };
106
106
  const _hoisted_2$H = ["for"];
@@ -117,7 +117,7 @@
117
117
  key: 1,
118
118
  class: "tao-input__error"
119
119
  };
120
- const _sfc_main$V = /* @__PURE__ */ vue.defineComponent({
120
+ const _sfc_main$X = /* @__PURE__ */ vue.defineComponent({
121
121
  ...{ name: "TaoInput" },
122
122
  __name: "TaoInput",
123
123
  props: {
@@ -193,7 +193,7 @@
193
193
  };
194
194
  }
195
195
  });
196
- const TaoInput = /* @__PURE__ */ _export_sfc(_sfc_main$V, [["__scopeId", "data-v-b522e041"]]);
196
+ const TaoInput = /* @__PURE__ */ _export_sfc(_sfc_main$X, [["__scopeId", "data-v-b522e041"]]);
197
197
  const _hoisted_1$N = {
198
198
  key: 0,
199
199
  class: "tao-input-group__addon tao-input-group__addon--before"
@@ -203,7 +203,7 @@
203
203
  key: 1,
204
204
  class: "tao-input-group__addon tao-input-group__addon--after"
205
205
  };
206
- const _sfc_main$U = /* @__PURE__ */ vue.defineComponent({
206
+ const _sfc_main$W = /* @__PURE__ */ vue.defineComponent({
207
207
  ...{ name: "TaoInputGroup" },
208
208
  __name: "TaoInputGroup",
209
209
  setup(__props) {
@@ -238,7 +238,7 @@
238
238
  };
239
239
  }
240
240
  });
241
- const TaoInputGroup = /* @__PURE__ */ _export_sfc(_sfc_main$U, [["__scopeId", "data-v-f06bb3b1"]]);
241
+ const TaoInputGroup = /* @__PURE__ */ _export_sfc(_sfc_main$W, [["__scopeId", "data-v-f06bb3b1"]]);
242
242
  const _hoisted_1$M = ["id", "value", "placeholder", "disabled", "aria-invalid", "aria-describedby", "aria-valuenow", "aria-valuemin", "aria-valuemax"];
243
243
  const _hoisted_2$F = {
244
244
  key: 0,
@@ -248,7 +248,7 @@
248
248
  const _hoisted_4$t = { "aria-hidden": "true" };
249
249
  const _hoisted_5$l = ["aria-label", "disabled"];
250
250
  const _hoisted_6$g = { "aria-hidden": "true" };
251
- const _sfc_main$T = /* @__PURE__ */ vue.defineComponent({
251
+ const _sfc_main$V = /* @__PURE__ */ vue.defineComponent({
252
252
  ...{ name: "TaoInputNumber" },
253
253
  __name: "TaoInputNumber",
254
254
  props: {
@@ -434,13 +434,13 @@
434
434
  };
435
435
  }
436
436
  });
437
- const TaoInputNumber = /* @__PURE__ */ _export_sfc(_sfc_main$T, [["__scopeId", "data-v-331dd958"]]);
437
+ const TaoInputNumber = /* @__PURE__ */ _export_sfc(_sfc_main$V, [["__scopeId", "data-v-331dd958"]]);
438
438
  const _hoisted_1$L = ["aria-label", "disabled"];
439
439
  const _hoisted_2$E = { "aria-hidden": "true" };
440
440
  const _hoisted_3$x = ["id", "value", "disabled", "aria-invalid", "aria-describedby", "aria-valuenow", "aria-valuemin", "aria-valuemax"];
441
441
  const _hoisted_4$s = ["aria-label", "disabled"];
442
442
  const _hoisted_5$k = { "aria-hidden": "true" };
443
- const _sfc_main$S = /* @__PURE__ */ vue.defineComponent({
443
+ const _sfc_main$U = /* @__PURE__ */ vue.defineComponent({
444
444
  ...{ name: "TaoQuantity" },
445
445
  __name: "TaoQuantity",
446
446
  props: {
@@ -620,7 +620,7 @@
620
620
  };
621
621
  }
622
622
  });
623
- const TaoQuantity = /* @__PURE__ */ _export_sfc(_sfc_main$S, [["__scopeId", "data-v-c9c7c8b4"]]);
623
+ const TaoQuantity = /* @__PURE__ */ _export_sfc(_sfc_main$U, [["__scopeId", "data-v-c9c7c8b4"]]);
624
624
  const _hoisted_1$K = {
625
625
  key: 0,
626
626
  class: "tao-card__cover"
@@ -650,7 +650,7 @@
650
650
  key: 4,
651
651
  class: "tao-card__footer"
652
652
  };
653
- const _sfc_main$R = /* @__PURE__ */ vue.defineComponent({
653
+ const _sfc_main$T = /* @__PURE__ */ vue.defineComponent({
654
654
  ...{ name: "TaoCard" },
655
655
  __name: "TaoCard",
656
656
  props: {
@@ -722,7 +722,7 @@
722
722
  };
723
723
  }
724
724
  });
725
- const TaoCard = /* @__PURE__ */ _export_sfc(_sfc_main$R, [["__scopeId", "data-v-2ff3d055"]]);
725
+ const TaoCard = /* @__PURE__ */ _export_sfc(_sfc_main$T, [["__scopeId", "data-v-2ff3d055"]]);
726
726
  const FOCUSABLE = 'a[href], button:not([disabled]), input:not([disabled]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex="-1"])';
727
727
  function getFocusable(root) {
728
728
  return [...root.querySelectorAll(FOCUSABLE)].filter(
@@ -790,7 +790,7 @@
790
790
  key: 1,
791
791
  class: "tao-modal__footer"
792
792
  };
793
- const _sfc_main$Q = /* @__PURE__ */ vue.defineComponent({
793
+ const _sfc_main$S = /* @__PURE__ */ vue.defineComponent({
794
794
  ...{ name: "TaoModal" },
795
795
  __name: "TaoModal",
796
796
  props: {
@@ -932,11 +932,11 @@
932
932
  };
933
933
  }
934
934
  });
935
- const TaoModal = /* @__PURE__ */ _export_sfc(_sfc_main$Q, [["__scopeId", "data-v-102cfd66"]]);
935
+ const TaoModal = /* @__PURE__ */ _export_sfc(_sfc_main$S, [["__scopeId", "data-v-102cfd66"]]);
936
936
  const _hoisted_1$I = { class: "tao-tabs" };
937
937
  const _hoisted_2$B = ["id", "aria-selected", "aria-controls", "tabindex", "disabled", "onClick"];
938
938
  const _hoisted_3$u = ["id", "aria-labelledby"];
939
- const _sfc_main$P = /* @__PURE__ */ vue.defineComponent({
939
+ const _sfc_main$R = /* @__PURE__ */ vue.defineComponent({
940
940
  ...{ name: "TaoTabs" },
941
941
  __name: "TaoTabs",
942
942
  props: {
@@ -1040,7 +1040,7 @@
1040
1040
  };
1041
1041
  }
1042
1042
  });
1043
- const TaoTabs = /* @__PURE__ */ _export_sfc(_sfc_main$P, [["__scopeId", "data-v-bf16735e"]]);
1043
+ const TaoTabs = /* @__PURE__ */ _export_sfc(_sfc_main$R, [["__scopeId", "data-v-bf16735e"]]);
1044
1044
  function listenFocusLoss(onLoss) {
1045
1045
  function onVisibilityChange() {
1046
1046
  if (document.hidden) {
@@ -1056,7 +1056,7 @@
1056
1056
  window.removeEventListener("pagehide", onLoss);
1057
1057
  };
1058
1058
  }
1059
- const _sfc_main$O = /* @__PURE__ */ vue.defineComponent({
1059
+ const _sfc_main$Q = /* @__PURE__ */ vue.defineComponent({
1060
1060
  ...{ name: "TaoTooltip" },
1061
1061
  __name: "TaoTooltip",
1062
1062
  props: {
@@ -1218,9 +1218,9 @@
1218
1218
  };
1219
1219
  }
1220
1220
  });
1221
- const TaoTooltip = /* @__PURE__ */ _export_sfc(_sfc_main$O, [["__scopeId", "data-v-926dfa73"]]);
1221
+ const TaoTooltip = /* @__PURE__ */ _export_sfc(_sfc_main$Q, [["__scopeId", "data-v-926dfa73"]]);
1222
1222
  const _hoisted_1$H = { class: "tao-popover" };
1223
- const _sfc_main$N = /* @__PURE__ */ vue.defineComponent({
1223
+ const _sfc_main$P = /* @__PURE__ */ vue.defineComponent({
1224
1224
  ...{ name: "TaoPopover" },
1225
1225
  __name: "TaoPopover",
1226
1226
  props: {
@@ -1418,7 +1418,7 @@
1418
1418
  };
1419
1419
  }
1420
1420
  });
1421
- const TaoPopover = /* @__PURE__ */ _export_sfc(_sfc_main$N, [["__scopeId", "data-v-afd791a7"]]);
1421
+ const TaoPopover = /* @__PURE__ */ _export_sfc(_sfc_main$P, [["__scopeId", "data-v-afd791a7"]]);
1422
1422
  const spoilerGroupKey = Symbol("taoSpoilerGroup");
1423
1423
  const _hoisted_1$G = { class: "tao-spoiler" };
1424
1424
  const _hoisted_2$A = ["aria-expanded", "aria-controls"];
@@ -1428,7 +1428,7 @@
1428
1428
  };
1429
1429
  const _hoisted_4$p = ["id"];
1430
1430
  const _hoisted_5$h = { class: "tao-spoiler__content-inner" };
1431
- const _sfc_main$M = /* @__PURE__ */ vue.defineComponent({
1431
+ const _sfc_main$O = /* @__PURE__ */ vue.defineComponent({
1432
1432
  ...{ name: "TaoSpoiler" },
1433
1433
  __name: "TaoSpoiler",
1434
1434
  props: {
@@ -1524,9 +1524,9 @@
1524
1524
  };
1525
1525
  }
1526
1526
  });
1527
- const TaoSpoiler = /* @__PURE__ */ _export_sfc(_sfc_main$M, [["__scopeId", "data-v-ccb052cf"]]);
1527
+ const TaoSpoiler = /* @__PURE__ */ _export_sfc(_sfc_main$O, [["__scopeId", "data-v-ccb052cf"]]);
1528
1528
  const _hoisted_1$F = { class: "tao-spoiler-group" };
1529
- const _sfc_main$L = /* @__PURE__ */ vue.defineComponent({
1529
+ const _sfc_main$N = /* @__PURE__ */ vue.defineComponent({
1530
1530
  ...{ name: "TaoSpoilerGroup" },
1531
1531
  __name: "TaoSpoilerGroup",
1532
1532
  props: {
@@ -1557,9 +1557,9 @@
1557
1557
  };
1558
1558
  }
1559
1559
  });
1560
- const TaoSpoilerGroup = /* @__PURE__ */ _export_sfc(_sfc_main$L, [["__scopeId", "data-v-118970dd"]]);
1560
+ const TaoSpoilerGroup = /* @__PURE__ */ _export_sfc(_sfc_main$N, [["__scopeId", "data-v-118970dd"]]);
1561
1561
  const _hoisted_1$E = ["aria-label"];
1562
- const _sfc_main$K = /* @__PURE__ */ vue.defineComponent({
1562
+ const _sfc_main$M = /* @__PURE__ */ vue.defineComponent({
1563
1563
  ...{ name: "TaoCopy" },
1564
1564
  __name: "TaoCopy",
1565
1565
  props: {
@@ -1710,8 +1710,8 @@
1710
1710
  };
1711
1711
  }
1712
1712
  });
1713
- const TaoCopy = /* @__PURE__ */ _export_sfc(_sfc_main$K, [["__scopeId", "data-v-38d3381d"]]);
1714
- const _sfc_main$J = /* @__PURE__ */ vue.defineComponent({
1713
+ const TaoCopy = /* @__PURE__ */ _export_sfc(_sfc_main$M, [["__scopeId", "data-v-38d3381d"]]);
1714
+ const _sfc_main$L = /* @__PURE__ */ vue.defineComponent({
1715
1715
  ...{ name: "TaoContainer" },
1716
1716
  __name: "TaoContainer",
1717
1717
  props: {
@@ -1728,8 +1728,8 @@
1728
1728
  };
1729
1729
  }
1730
1730
  });
1731
- const TaoContainer = /* @__PURE__ */ _export_sfc(_sfc_main$J, [["__scopeId", "data-v-4c0deb90"]]);
1732
- const _sfc_main$I = /* @__PURE__ */ vue.defineComponent({
1731
+ const TaoContainer = /* @__PURE__ */ _export_sfc(_sfc_main$L, [["__scopeId", "data-v-4c0deb90"]]);
1732
+ const _sfc_main$K = /* @__PURE__ */ vue.defineComponent({
1733
1733
  ...{ name: "TaoFlex" },
1734
1734
  __name: "TaoFlex",
1735
1735
  props: {
@@ -1760,7 +1760,7 @@
1760
1760
  };
1761
1761
  }
1762
1762
  });
1763
- const _sfc_main$H = /* @__PURE__ */ vue.defineComponent({
1763
+ const _sfc_main$J = /* @__PURE__ */ vue.defineComponent({
1764
1764
  ...{ name: "TaoSpace" },
1765
1765
  __name: "TaoSpace",
1766
1766
  props: {
@@ -1780,7 +1780,58 @@
1780
1780
  };
1781
1781
  }
1782
1782
  });
1783
- const TaoSpace = /* @__PURE__ */ _export_sfc(_sfc_main$H, [["__scopeId", "data-v-698ca712"]]);
1783
+ const TaoSpace = /* @__PURE__ */ _export_sfc(_sfc_main$J, [["__scopeId", "data-v-698ca712"]]);
1784
+ const _sfc_main$I = /* @__PURE__ */ vue.defineComponent({
1785
+ ...{ name: "TaoGrid" },
1786
+ __name: "TaoGrid",
1787
+ props: {
1788
+ min: { default: "220px" },
1789
+ cols: { default: 0 },
1790
+ gap: { default: "var(--tao-space-4)" }
1791
+ },
1792
+ setup(__props) {
1793
+ const props = __props;
1794
+ const isFixed = vue.computed(() => props.cols > 0);
1795
+ const gridStyle = vue.computed(() => ({
1796
+ "--tao-grid-min": props.min,
1797
+ "--tao-grid-cols": isFixed.value ? String(props.cols) : void 0,
1798
+ "--tao-grid-gap": props.gap
1799
+ }));
1800
+ return (_ctx, _cache) => {
1801
+ return vue.openBlock(), vue.createElementBlock("div", {
1802
+ class: vue.normalizeClass(["tao-grid", { "tao-grid--fixed": isFixed.value }]),
1803
+ style: vue.normalizeStyle(gridStyle.value)
1804
+ }, [
1805
+ vue.renderSlot(_ctx.$slots, "default", {}, void 0, true)
1806
+ ], 6);
1807
+ };
1808
+ }
1809
+ });
1810
+ const TaoGrid = /* @__PURE__ */ _export_sfc(_sfc_main$I, [["__scopeId", "data-v-bd5bc452"]]);
1811
+ const _sfc_main$H = /* @__PURE__ */ vue.defineComponent({
1812
+ ...{ name: "TaoGridItem" },
1813
+ __name: "TaoGridItem",
1814
+ props: {
1815
+ col: { default: 1 },
1816
+ row: { default: 1 }
1817
+ },
1818
+ setup(__props) {
1819
+ const props = __props;
1820
+ const itemStyle = vue.computed(() => ({
1821
+ "--tao-grid-col": String(Math.max(1, props.col)),
1822
+ "--tao-grid-row": String(Math.max(1, props.row))
1823
+ }));
1824
+ return (_ctx, _cache) => {
1825
+ return vue.openBlock(), vue.createElementBlock("div", {
1826
+ class: "tao-grid-item",
1827
+ style: vue.normalizeStyle(itemStyle.value)
1828
+ }, [
1829
+ vue.renderSlot(_ctx.$slots, "default", {}, void 0, true)
1830
+ ], 4);
1831
+ };
1832
+ }
1833
+ });
1834
+ const TaoGridItem = /* @__PURE__ */ _export_sfc(_sfc_main$H, [["__scopeId", "data-v-43bd1e34"]]);
1784
1835
  const _hoisted_1$D = { class: "tao-split__pane tao-split__pane--start" };
1785
1836
  const _hoisted_2$z = ["aria-orientation", "aria-valuemin", "aria-valuemax", "aria-valuenow", "aria-valuetext", "aria-disabled", "tabindex"];
1786
1837
  const _hoisted_3$s = { class: "tao-split__pane tao-split__pane--end" };
@@ -8680,8 +8731,10 @@
8680
8731
  TaoSpoilerGroup,
8681
8732
  TaoCopy,
8682
8733
  TaoContainer,
8683
- _sfc_main$I,
8734
+ _sfc_main$K,
8684
8735
  TaoSpace,
8736
+ TaoGrid,
8737
+ TaoGridItem,
8685
8738
  TaoSplit,
8686
8739
  TaoIcon,
8687
8740
  TaoLoader,
@@ -8754,8 +8807,10 @@
8754
8807
  exports2.TaoEmpty = TaoEmpty;
8755
8808
  exports2.TaoFieldset = TaoFieldset;
8756
8809
  exports2.TaoFileDrop = TaoFileDrop;
8757
- exports2.TaoFlex = _sfc_main$I;
8810
+ exports2.TaoFlex = _sfc_main$K;
8758
8811
  exports2.TaoFormField = TaoFormField;
8812
+ exports2.TaoGrid = TaoGrid;
8813
+ exports2.TaoGridItem = TaoGridItem;
8759
8814
  exports2.TaoIcon = TaoIcon;
8760
8815
  exports2.TaoImage = TaoImage;
8761
8816
  exports2.TaoInput = TaoInput;