@manohub/ui 0.7.0 → 0.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.
Files changed (75) hide show
  1. package/README.md +4 -4
  2. package/dist/components/button/index.d.ts +14 -8
  3. package/dist/components/capsule/index.d.ts +13 -9
  4. package/dist/components/capsule/index.js +1 -1
  5. package/dist/components/card/index.d.ts +1 -1
  6. package/dist/components/card/index.js +7 -4
  7. package/dist/components/checkbox/index.js +1 -0
  8. package/dist/components/dialog/index.d.ts +1 -1
  9. package/dist/components/form/index.d.ts +142 -62
  10. package/dist/components/form/index.js +41 -29
  11. package/dist/components/input/index.d.ts +74 -6
  12. package/dist/components/input/index.js +13 -1
  13. package/dist/components/layout/index.d.ts +43 -1
  14. package/dist/components/layout/index.js +22 -2
  15. package/dist/components/list-view/index.d.ts +1 -1
  16. package/dist/components/notice/index.d.ts +2 -2
  17. package/dist/components/notification/index.d.ts +2 -2
  18. package/dist/components/page/index.js +4 -4
  19. package/dist/components/pagination/index.d.ts +2 -2
  20. package/dist/components/pagination/index.js +1 -1
  21. package/dist/components/panel/index.js +4 -4
  22. package/dist/components/part-padding.d.ts +9 -6
  23. package/dist/components/part-padding.js +2 -1
  24. package/dist/components/query-state/index.d.ts +18 -2
  25. package/dist/components/radio/index.d.ts +1 -1
  26. package/dist/components/radio/index.js +1 -0
  27. package/dist/components/select/index.d.ts +32 -30
  28. package/dist/components/select/index.js +46 -82
  29. package/dist/components/select/select-list.d.ts +125 -0
  30. package/dist/components/select/select-list.js +95 -0
  31. package/dist/components/select/select-panel.d.ts +106 -0
  32. package/dist/components/select/select-panel.js +72 -0
  33. package/dist/components/select/select-shared.d.ts +64 -0
  34. package/dist/components/select/select-shared.js +24 -0
  35. package/dist/components/select/select-tree-filter.d.ts +61 -0
  36. package/dist/components/select/select-tree-filter.js +63 -0
  37. package/dist/components/select/select-tree.d.ts +274 -0
  38. package/dist/components/select/select-tree.js +263 -0
  39. package/dist/components/select/select-trigger.d.ts +132 -0
  40. package/dist/components/select/select-trigger.js +101 -0
  41. package/dist/components/steps/index.d.ts +232 -6
  42. package/dist/components/steps/index.js +84 -26
  43. package/dist/components/switch/index.d.ts +29 -5
  44. package/dist/components/switch/index.js +8 -2
  45. package/dist/components/tabbar/index.d.ts +184 -0
  46. package/dist/components/tabbar/index.js +161 -0
  47. package/dist/components/table/index.d.ts +99 -12
  48. package/dist/components/table/index.js +69 -16
  49. package/dist/components/tabs/index.d.ts +142 -126
  50. package/dist/components/tabs/index.js +87 -119
  51. package/dist/components/tag/index.d.ts +2 -2
  52. package/dist/components/text/index.d.ts +7 -2
  53. package/dist/components/toast/index.d.ts +8 -8
  54. package/dist/components/tree/index.d.ts +28 -2
  55. package/dist/components/tree/index.js +14 -1
  56. package/dist/index.d.ts +6 -6
  57. package/dist/index.js +6 -3
  58. package/dist/styles/components/capsule.css +4 -4
  59. package/dist/styles/components/form.css +198 -39
  60. package/dist/styles/components/input.css +53 -1
  61. package/dist/styles/components/layout.css +2 -0
  62. package/dist/styles/components/select.css +21 -0
  63. package/dist/styles/components/select.tokens.css +3 -0
  64. package/dist/styles/components/steps.css +48 -0
  65. package/dist/styles/components/{tabs.css → tabbar.css} +66 -65
  66. package/dist/styles/components/tabbar.tokens.css +30 -0
  67. package/dist/styles/components/table.css +50 -1
  68. package/dist/styles/components/table.tokens.css +3 -0
  69. package/dist/styles/index.css +3 -3
  70. package/dist/styles/operations/tabs.css +73 -0
  71. package/package.json +2 -2
  72. package/dist/components/tabset/index.d.ts +0 -109
  73. package/dist/components/tabset/index.js +0 -75
  74. package/dist/styles/components/tabs.tokens.css +0 -30
  75. package/dist/styles/operations/tabset.css +0 -57
@@ -1,75 +0,0 @@
1
- import { defineComponent, ref, computed, createVNode } from "vue";
2
- const Tabset = /* @__PURE__ */ defineComponent({
3
- name: "Tabset",
4
- inheritAttrs: false,
5
- props: {
6
- options: {
7
- type: Array,
8
- required: true
9
- },
10
- value: {
11
- type: [String, Number],
12
- default: void 0
13
- },
14
- defaultValue: {
15
- type: [String, Number],
16
- default: void 0
17
- },
18
- onChange: {
19
- type: Function,
20
- default: void 0
21
- },
22
- /** 惰性档:只有激活的面板才渲染(切走即卸载),用于面板很重(图表 / 大表格)的场景 */
23
- lazy: {
24
- type: Boolean,
25
- default: false
26
- }
27
- },
28
- /* 同 `Tabs`:受控值必须 emit 回 `update:value`,否则 `v-model:value="current"` 静默失效
29
- (受控时内部状态不更新、外部又收不到 ⇒ 点选项毫无反应)。 */
30
- emits: {
31
- "update:value": (value) => true
32
- },
33
- slots: Object,
34
- setup(props, {
35
- slots,
36
- attrs,
37
- emit
38
- }) {
39
- const innerValue = ref(props.value ?? props.defaultValue ?? props.options[0]?.value);
40
- const current = computed(() => props.value ?? innerValue.value);
41
- const select = (value) => {
42
- const target = props.options.find((option) => option.value === value);
43
- if (target?.disabled) return;
44
- if (props.value === void 0) innerValue.value = value;
45
- emit("update:value", value);
46
- props.onChange?.(value);
47
- };
48
- const panels = () => {
49
- const children = slots.default?.();
50
- const list = Array.isArray(children) ? children : children ? [children] : [];
51
- return list.map((child, index) => {
52
- const option = props.options[index];
53
- const active = option !== void 0 && option.value === current.value;
54
- if (props.lazy && !active) return null;
55
- return createVNode("div", {
56
- "class": "mh-tabset-panel",
57
- "hidden": !active
58
- }, [child]);
59
- });
60
- };
61
- return () => createVNode("div", {
62
- "class": ["mh-tabset", attrs.class].filter(Boolean).join(" "),
63
- "style": attrs.style
64
- }, [slots.selector?.({
65
- value: current.value,
66
- options: props.options,
67
- select
68
- }), createVNode("div", {
69
- "class": "mh-tabset-panels"
70
- }, [panels()])]);
71
- }
72
- });
73
- export {
74
- Tabset
75
- };
@@ -1,30 +0,0 @@
1
- /**
2
- * tabs —— 单件令牌(**基础值**)。
3
- *
4
- * 本件自己的几何 / 尺寸 / 色彩槽位;只服务本件,故不随主题进 `@manohub/theme`。
5
- *
6
- * ## 抽出说明
7
- * 本文件从面文件里抽出(原先混写在 `tabs.css` 顶部):这些是**基础值**,锚在
8
- * `[data-manohub-ui]` —— 跨包唯一作用域锚,由入口层无条件写在应用容器上,因此**任何落在
9
- * 容器里的分件都取得到值**,不再依赖「声明在某个组件根类上」这条脆弱假设
10
- * (历史症状:跨件消费的 `--ui-*-group-*` 取不到值,组内间距变 0)。
11
- *
12
- * ⚠️ `.mh-<件>--<档>` 这类**档位改写**留在面文件的修饰符块里 —— 它们靠「同一元素上两个
13
- * 选择器改写同一个令牌」生效,搬到本文件会让档位失效。
14
- * ⚠️ 新增组件要登记两处:本文件 + `src/styles/index.css`(见其文件头「五处齐备」)。
15
- */
16
- [data-manohub-ui] {
17
- /* 单件令牌 */
18
- --ui-tabs-height: var(--ui-control-height-md); /* 标准控件高 32 */
19
- --ui-tabs-gap: 30px; /* 项间距(规范实测) */
20
- --ui-tabs-font-size: var(--ui-font-body);
21
- --ui-tabs-text: var(--ui-base-content); /* 规范未选档 #446a9f(偏蓝的正文色),本仓取正文色 */
22
- --ui-tabs-text-hover: var(--ui-primary-hover); /* 规范 #529dff */
23
- --ui-tabs-text-active: var(--ui-primary); /* 规范 #4e94ff */
24
- --ui-tabs-text-disabled: var(--ui-base-content-subtle); /* 规范 Te07 */
25
- --ui-tabs-indicator: var(--ui-primary);
26
- --ui-tabs-indicator-gap: 3px; /* 指示条与文字的留白 */
27
- --ui-tabs-indicator-height: 3px;
28
- --ui-tabs-indicator-radius: var(--ui-radius-full);
29
- --ui-tabs-card-padding-x: var(--ui-space-4);
30
- }
@@ -1,57 +0,0 @@
1
- /**
2
- * 操作层 · 面板切换(把「一组同名 radio + 对应面板」接起来;零 JS,**只给操作、不给面**)。
3
- *
4
- * 出处:`@aihub/theme` 的 `playground/components/tabset.css`。
5
- * 映射:`--mh-*` → `--ui-*`;类名加 `.mh-` 前缀。
6
- *
7
- * 与折叠 / 浮层同一路数:本层只做三件事 —— ① 根(条带 → 面板的呼吸位)② 面板钩子与默认收起
8
- * ③ 档位表(第 n 个开关 ↔ 第 n 个面板)。
9
- * 开关的隐身与焦点环**归皮肤族**(谁家的选择控件谁自己画:胶囊见 `styles/components/capsule.css`),
10
- * 本层不碰 —— 这样同一层能伺候任意选择控件(胶囊 / 分段按钮 / 单选卡片 / 向导步骤),换皮肤不必动本文件。
11
- *
12
- * **与皮肤零互指**(两层连接点全部走原生元素,谁都不引用对方的类):
13
- * · 皮肤键在 `input:checked + <自家项>`(原生路径)与 `[data-state='active']`(组件路径)上;
14
- * · 本层只认 `input` 与面板的**顺序**,不认任何皮肤类名。
15
- *
16
- * 结构契约(开关与项平级相邻、开关在前;面板组顺序与开关**一一对应**):
17
- * <div class="mh-tabset">
18
- * <div class="[皮肤:轨道/选择控件]">
19
- * <input type="radio" name="t1" id="t1a" checked>
20
- * <label class="[皮肤项]" for="t1a">全部</label>
21
- * <input type="radio" name="t1" id="t1b">
22
- * <label class="[皮肤项]" for="t1b">进行中</label>
23
- * </div>
24
- * <div class="mh-tabset-panels">
25
- * <section class="mh-tabset-panel [皮肤类]">…</section>
26
- * </div>
27
- * </div>
28
- *
29
- * 禁写(与折叠 / 浮层同款):底 / 边 / 圆角 / 内距 / 宽高 / 字号 / 阴影 —— 写了就顶掉皮肤族属性面。
30
- * 面板的面与几何由皮肤族给(卡片一类),本层只写「哪一个显形」与根上的呼吸位。
31
- */
32
-
33
- /* ===== 操作根:选择控件在上、面板在下 ===== */
34
- .mh-tabset {
35
- display: flex;
36
- flex-direction: column;
37
- gap: var(--ui-space-4); /* 控件 → 面板的呼吸位 12px */
38
- }
39
-
40
- /* ===== 面板显隐:档位表(上限 8 档) ===== */
41
- /* 第 n 个开关 ↔ 第 n 个面板。写不出通式:CSS 没有「按被勾选开关的序号去选同序面板」的选择器
42
- (树的缩进档位表同一路数)。超过 8 个请扩表,或改走组件路径由 JS 下发 hidden。
43
- 注:`input:nth-of-type(n)` 按「同一父级里的第 n 个 input」计数 —— 故开关须集中在同一个轨道容器内。 */
44
- .mh-tabset-panel {
45
- display: none;
46
- }
47
-
48
- .mh-tabset:has(input:nth-of-type(1):checked) .mh-tabset-panels > :nth-child(1),
49
- .mh-tabset:has(input:nth-of-type(2):checked) .mh-tabset-panels > :nth-child(2),
50
- .mh-tabset:has(input:nth-of-type(3):checked) .mh-tabset-panels > :nth-child(3),
51
- .mh-tabset:has(input:nth-of-type(4):checked) .mh-tabset-panels > :nth-child(4),
52
- .mh-tabset:has(input:nth-of-type(5):checked) .mh-tabset-panels > :nth-child(5),
53
- .mh-tabset:has(input:nth-of-type(6):checked) .mh-tabset-panels > :nth-child(6),
54
- .mh-tabset:has(input:nth-of-type(7):checked) .mh-tabset-panels > :nth-child(7),
55
- .mh-tabset:has(input:nth-of-type(8):checked) .mh-tabset-panels > :nth-child(8) {
56
- display: block;
57
- }