@xihan-ui/vue 3.1.0 → 4.0.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/CHANGELOG.md +160 -0
- package/dist/components/carousel/carousel.d.ts +7 -1
- package/dist/components/carousel/carousel.d.ts.map +1 -1
- package/dist/components/carousel/carousel.js +1 -0
- package/dist/components/carousel/carousel.js.map +1 -1
- package/dist/components/cartesian-chart/cartesian-chart.d.ts.map +1 -1
- package/dist/components/cartesian-chart/cartesian-chart.js +2 -2
- package/dist/components/cartesian-chart/cartesian-chart.js.map +1 -1
- package/dist/components/cascader/cascader.js +2 -1
- package/dist/components/cascader/cascader.js.map +1 -1
- package/dist/components/citation/citation.d.ts.map +1 -1
- package/dist/components/citation/citation.js +8 -6
- package/dist/components/citation/citation.js.map +1 -1
- package/dist/components/color-picker/color-picker.js +2 -1
- package/dist/components/color-picker/color-picker.js.map +1 -1
- package/dist/components/combobox/combobox.js +3 -3
- package/dist/components/combobox/combobox.js.map +1 -1
- package/dist/components/command/command.d.ts +3 -3
- package/dist/components/context-menu/context-menu.js +2 -1
- package/dist/components/context-menu/context-menu.js.map +1 -1
- package/dist/components/date-picker/date-picker.d.ts +4 -1
- package/dist/components/date-picker/date-picker.d.ts.map +1 -1
- package/dist/components/date-picker/date-picker.js +9 -1
- package/dist/components/date-picker/date-picker.js.map +1 -1
- package/dist/components/date-range-picker/date-range-picker.d.ts +4 -1
- package/dist/components/date-range-picker/date-range-picker.d.ts.map +1 -1
- package/dist/components/date-range-picker/date-range-picker.js +9 -1
- package/dist/components/date-range-picker/date-range-picker.js.map +1 -1
- package/dist/components/dialog/dialog.d.ts +12 -1
- package/dist/components/dialog/dialog.d.ts.map +1 -1
- package/dist/components/dialog/dialog.js +14 -4
- package/dist/components/dialog/dialog.js.map +1 -1
- package/dist/components/drawer/drawer.d.ts +12 -1
- package/dist/components/drawer/drawer.d.ts.map +1 -1
- package/dist/components/drawer/drawer.js +14 -4
- package/dist/components/drawer/drawer.js.map +1 -1
- package/dist/components/fieldset/context.d.ts +1 -0
- package/dist/components/fieldset/context.d.ts.map +1 -1
- package/dist/components/fieldset/context.js +9 -1
- package/dist/components/fieldset/context.js.map +1 -1
- package/dist/components/fieldset/fieldset.d.ts.map +1 -1
- package/dist/components/fieldset/fieldset.js +8 -3
- package/dist/components/fieldset/fieldset.js.map +1 -1
- package/dist/components/floating-panel/floating-panel.js +4 -1
- package/dist/components/floating-panel/floating-panel.js.map +1 -1
- package/dist/components/form/form.d.ts +8 -0
- package/dist/components/form/form.d.ts.map +1 -1
- package/dist/components/form/form.js +4 -1
- package/dist/components/form/form.js.map +1 -1
- package/dist/components/funnel-chart/funnel-chart.d.ts.map +1 -1
- package/dist/components/funnel-chart/funnel-chart.js +2 -2
- package/dist/components/funnel-chart/funnel-chart.js.map +1 -1
- package/dist/components/graph-chart/graph-chart.d.ts.map +1 -1
- package/dist/components/graph-chart/graph-chart.js +2 -2
- package/dist/components/graph-chart/graph-chart.js.map +1 -1
- package/dist/components/hierarchy-chart/hierarchy-chart.d.ts.map +1 -1
- package/dist/components/hierarchy-chart/hierarchy-chart.js +2 -2
- package/dist/components/hierarchy-chart/hierarchy-chart.js.map +1 -1
- package/dist/components/hover-card/hover-card.js +2 -1
- package/dist/components/hover-card/hover-card.js.map +1 -1
- package/dist/components/image-viewer/image-viewer.d.ts +7 -1
- package/dist/components/image-viewer/image-viewer.d.ts.map +1 -1
- package/dist/components/image-viewer/image-viewer.js +1 -0
- package/dist/components/image-viewer/image-viewer.js.map +1 -1
- package/dist/components/mention/mention.d.ts +1 -1
- package/dist/components/mention/mention.js +5 -4
- package/dist/components/mention/mention.js.map +1 -1
- package/dist/components/menu/menu.js +2 -1
- package/dist/components/menu/menu.js.map +1 -1
- package/dist/components/menubar/context.d.ts.map +1 -1
- package/dist/components/menubar/context.js.map +1 -1
- package/dist/components/menubar/menubar.d.ts.map +1 -1
- package/dist/components/menubar/menubar.js +16 -2
- package/dist/components/menubar/menubar.js.map +1 -1
- package/dist/components/pagination/pagination.js +4 -2
- package/dist/components/pagination/pagination.js.map +1 -1
- package/dist/components/pie-chart/pie-chart.d.ts.map +1 -1
- package/dist/components/pie-chart/pie-chart.js +2 -2
- package/dist/components/pie-chart/pie-chart.js.map +1 -1
- package/dist/components/popconfirm/popconfirm.js +2 -1
- package/dist/components/popconfirm/popconfirm.js.map +1 -1
- package/dist/components/popover/popover.d.ts +1 -1
- package/dist/components/popover/popover.js +2 -1
- package/dist/components/popover/popover.js.map +1 -1
- package/dist/components/radar-chart/radar-chart.d.ts.map +1 -1
- package/dist/components/radar-chart/radar-chart.js +2 -2
- package/dist/components/radar-chart/radar-chart.js.map +1 -1
- package/dist/components/sankey-chart/sankey-chart.d.ts.map +1 -1
- package/dist/components/sankey-chart/sankey-chart.js +2 -2
- package/dist/components/sankey-chart/sankey-chart.js.map +1 -1
- package/dist/components/select/select.d.ts +11 -0
- package/dist/components/select/select.d.ts.map +1 -1
- package/dist/components/select/select.js +12 -3
- package/dist/components/select/select.js.map +1 -1
- package/dist/components/side-nav/side-nav.d.ts.map +1 -1
- package/dist/components/side-nav/side-nav.js +8 -2
- package/dist/components/side-nav/side-nav.js.map +1 -1
- package/dist/components/spinner/spinner.d.ts +9 -1
- package/dist/components/spinner/spinner.d.ts.map +1 -1
- package/dist/components/spinner/spinner.js +2 -0
- package/dist/components/spinner/spinner.js.map +1 -1
- package/dist/components/time-picker/time-picker.d.ts +4 -1
- package/dist/components/time-picker/time-picker.d.ts.map +1 -1
- package/dist/components/time-picker/time-picker.js +10 -2
- package/dist/components/time-picker/time-picker.js.map +1 -1
- package/dist/components/time-range-picker/time-range-picker.js +2 -1
- package/dist/components/time-range-picker/time-range-picker.js.map +1 -1
- package/dist/components/tooltip/tooltip.js +2 -1
- package/dist/components/tooltip/tooltip.js.map +1 -1
- package/dist/components/tour/tour.js +12 -3
- package/dist/components/tour/tour.js.map +1 -1
- package/dist/components/tree-select/tree-select.js +3 -3
- package/dist/components/tree-select/tree-select.js.map +1 -1
- package/dist/config/config.js +1 -0
- package/dist/config/config.js.map +1 -1
- package/dist/index.d.ts +4 -4
- package/dist/index.js +4 -4
- package/dist/locale.d.ts +2 -0
- package/dist/locale.js +2 -0
- package/dist/package.js +1 -1
- package/dist/runtime/as-child.js +7 -2
- package/dist/runtime/as-child.js.map +1 -1
- package/dist/runtime/portal.js +11 -1
- package/dist/runtime/portal.js.map +1 -1
- package/dist/runtime/use-overlay-exit.js +6 -1
- package/dist/runtime/use-overlay-exit.js.map +1 -1
- package/dist/services/dialog-service.d.ts +3 -3
- package/dist/services/dialog-service.d.ts.map +1 -1
- package/dist/services/dialog-service.js +8 -6
- package/dist/services/dialog-service.js.map +1 -1
- package/dist/services/service-config.js +2 -1
- package/dist/services/service-config.js.map +1 -1
- package/package.json +19 -15
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,165 @@
|
|
|
1
1
|
# @xihan-ui/vue
|
|
2
2
|
|
|
3
|
+
## 4.0.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- 144c5f1: DatePicker 新增底栏 `footer` 部件:浮层底部的通栏操作区,写在 `content` 里、排在面板主体之后,确认钮通常放在它里面。headless 新增 `getFooterProps`(只带 scope / part,不报角色、不占 Tab 位、不进任何集合的拥有关系);Vue / React 新增 `XhDatePickerFooter`,Web Components 认 `data-xh-part="footer"`。
|
|
8
|
+
|
|
9
|
+
皮肤:底栏独占一行,上沿一道 border-default 分隔线、四周 8px 内衬,字取 12px 次级前景;首个子节点占满余宽排在行首,确认钮落在行尾。底栏里只有确认钮、而确认钮因未开 `showTime` 收起时,底栏一并收起。新增 `--xh-date-picker-footer-gap / -footer-py / -footer-px / -footer-border / -footer-fg / -footer-font-size`。确认钮直接排在 `content` 里的写法照旧可用。
|
|
10
|
+
|
|
11
|
+
- 16ad922: DateRangePicker 新增底栏 `footer` 部件:浮层底部的通栏操作区,写在 `content` 里、排在面板主体之后,确认钮通常放在它里面。headless 新增 `getFooterProps`(只带 scope / part,不报角色、不占 Tab 位、不进任何集合的拥有关系);Vue / React 新增 `XhDateRangePickerFooter`,Web Components 认 `data-xh-part="footer"`。
|
|
12
|
+
|
|
13
|
+
皮肤:底栏落在日历与起止两组时间列下面独占一行,上沿一道 border-default 分隔线、四周 8px 内衬,字取 12px 次级前景;首个子节点占满余宽排在行首,确认钮落在行尾。底栏里只有确认钮、而确认钮因未开 `showTime` 收起时,底栏一并收起。新增 `--xh-date-range-picker-footer-gap / -footer-py / -footer-px / -footer-border / -footer-fg / -footer-font-size`。确认钮直接排在 `content` 里的写法照旧可用。
|
|
14
|
+
|
|
15
|
+
- 0b7fd0a: 字段集整组禁用压进子树:组内组件库的控件各自拿到 `disabled`,行为与禁用面一起到位。此前只靠原生 `fieldset[disabled]`:原生表单控件行为上被禁了,外观却不变灰(各家族认的是 `data-disabled`),滑块拇指这类 `div` 交互节点更是照样能用。现在 Fieldset 把禁用作为作用域配置下发(Vue `provideXhConfig`、React `XhConfigProvider`、`<xh-fieldset>` 本身就是作用域),与原生语义一致:外层禁了,组件自己写 `false` 也拦不住;首个 legend 里的控件不受本组禁用,常用来放「启用这一组」的开关。配置新增 `disabled` 键,`<xh-config>` / `provideXhConfig` / `XhConfigProvider` 也可以用它禁用一整棵子树。
|
|
16
|
+
- a00a675: Spinner 与加载环改为品牌色的 270° 弧:
|
|
17
|
+
|
|
18
|
+
- Spinner 三档形态的弧色缺省由 `currentColor` 改为 `--xh-fg-brand`;环档不再画轨道,改为一段 270° 的弧、起始边留缺口(`--xh-spinner-track` 现在给缺口那一段上色,缺省透明)
|
|
19
|
+
- 加载环家族配方同一口径:占位、图表等处的环取品牌色;压在动作钮上的环(Button、Clipboard、DownloadTrigger、Popconfirm、Form 提交)仍随钮的字色
|
|
20
|
+
- 配文改为品牌色、正文字号、中等字重;新增组件槽 `--xh-spinner-label-weight`
|
|
21
|
+
- Spinner 新增 `orientation`(`horizontal` | `vertical`,缺省 `horizontal`,投影 `data-orientation`):竖排时转圈在上、配文在下,间距 6px
|
|
22
|
+
- 强制色下弧取 Highlight、缺口取 Canvas
|
|
23
|
+
|
|
24
|
+
- 92acdb6: TimePicker 新增底栏 `footer` 部件:浮层底部的通栏操作区,写在 `content` 里、排在各列之后,多选的「添加」(`confirm-trigger`)通常放在它里面。headless 新增 `getFooterProps`(只带 scope / part,不报角色、不占 Tab 位、不进任何集合的拥有关系);Vue / React 新增 `XhTimePickerFooter`,Web Components 认 `data-xh-part="footer"`。
|
|
25
|
+
|
|
26
|
+
皮肤:有底栏时面板折行,底栏落在快捷选项列与各列下面独占一行,上沿一道 border-default 分隔线、四周 8px 内衬,字取 12px 次级前景;首个子节点占满余宽排在行首,「添加」落在行尾;底栏不参与撑宽,面板的宽仍由各列定。底栏里只有「添加」、而「添加」在单选下收起时,底栏一并收起。新增 `--xh-time-picker-footer-gap / -footer-py / -footer-px / -footer-border / -footer-fg / -footer-font-size`。「添加」直接排在 `content` 里的写法照旧可用。
|
|
27
|
+
|
|
28
|
+
### Patch Changes
|
|
29
|
+
|
|
30
|
+
- Updated dependencies [cda1da2]
|
|
31
|
+
- Updated dependencies [cb92464]
|
|
32
|
+
- Updated dependencies [8cd4faa]
|
|
33
|
+
- Updated dependencies [b79a2d7]
|
|
34
|
+
- Updated dependencies [b3153a4]
|
|
35
|
+
- Updated dependencies [ddd866c]
|
|
36
|
+
- Updated dependencies [2093b56]
|
|
37
|
+
- Updated dependencies [01c77ac]
|
|
38
|
+
- Updated dependencies [144c5f1]
|
|
39
|
+
- Updated dependencies [4ba24e3]
|
|
40
|
+
- Updated dependencies [16ad922]
|
|
41
|
+
- Updated dependencies [c4ffcb6]
|
|
42
|
+
- Updated dependencies [d545868]
|
|
43
|
+
- Updated dependencies [0b7fd0a]
|
|
44
|
+
- Updated dependencies [5fcee67]
|
|
45
|
+
- Updated dependencies [40c502e]
|
|
46
|
+
- Updated dependencies [0116647]
|
|
47
|
+
- Updated dependencies [2724f92]
|
|
48
|
+
- Updated dependencies [018b5b1]
|
|
49
|
+
- Updated dependencies [c2dc637]
|
|
50
|
+
- Updated dependencies [3473495]
|
|
51
|
+
- Updated dependencies [6cf0550]
|
|
52
|
+
- Updated dependencies [b06d0b7]
|
|
53
|
+
- Updated dependencies [4a3adf4]
|
|
54
|
+
- Updated dependencies [e2552fc]
|
|
55
|
+
- Updated dependencies [7eb3d48]
|
|
56
|
+
- Updated dependencies [318e66d]
|
|
57
|
+
- Updated dependencies [a00a675]
|
|
58
|
+
- Updated dependencies [355774f]
|
|
59
|
+
- Updated dependencies [92acdb6]
|
|
60
|
+
- Updated dependencies [adb26bd]
|
|
61
|
+
- Updated dependencies [6c85079]
|
|
62
|
+
- Updated dependencies [0ca08e5]
|
|
63
|
+
- Updated dependencies [9f1bc72]
|
|
64
|
+
- @xihan-ui/headless@4.0.0
|
|
65
|
+
- @xihan-ui/motion@4.0.0
|
|
66
|
+
- @xihan-ui/core@4.0.0
|
|
67
|
+
- @xihan-ui/code-highlight@4.0.0
|
|
68
|
+
- @xihan-ui/position@4.0.0
|
|
69
|
+
- @xihan-ui/pointer@4.0.0
|
|
70
|
+
- @xihan-ui/viz@4.0.0
|
|
71
|
+
- @xihan-ui/backgrounds@4.0.0
|
|
72
|
+
- @xihan-ui/sound@4.0.0
|
|
73
|
+
|
|
74
|
+
## 3.2.0
|
|
75
|
+
|
|
76
|
+
### Minor Changes
|
|
77
|
+
|
|
78
|
+
- 9b0a9d8: 新增十种常用语言的内建语言包:`zhCN`(简体中文)、`zhTW`(繁體中文)、`enUS`、`jaJP`、`koKR`、`frFR`、`deDE`、`esES`、`ptBR`、`ruRU`。
|
|
79
|
+
|
|
80
|
+
语言包放在新的 `locale` 子入口,四个包各一个:`@xihan-ui/headless/locale`、`@xihan-ui/vue/locale`、`@xihan-ui/react/locale`、`@xihan-ui/web-components/locale`,主入口体积不变,各语言是独立的具名导出,只打进用到的那几份。一份语言包就是一份全局配置 `{ locale, translations }`(类型 `XhLocale`),直接交给 `provideXhConfig` / `XhConfigProvider` / `setXhConfig`,日期时间类组件的 `locale` 随之一起切换;还要配别的项时展开合并,个别文案仍可在实例上覆盖。
|
|
81
|
+
|
|
82
|
+
语言包覆盖组件的每一条文案,含图表摘要、拖拽播报等函数式文案;`enUS` 与其余九份同形,也是组件没配语言包时用的那一份。没有缺省、或缺省取自实例内容的键(作者自写的可见文字与标签、条目自己的名字、`timestamp.justNow`)刻意不收,给了会改变行为。组件新增文案键时,各语言包在类型检查里一并报缺。
|
|
83
|
+
|
|
84
|
+
- bd63fd4: 组件不再自带英文:界面文字一律取语言包,没配语言包时取英文语言包 `enUS`(现为与其余九份同形的完整语言包)。英文输出与此前逐字相同;新门禁 `check-builtin-text` 拦住把英文兜底写回组件或适配器。
|
|
85
|
+
|
|
86
|
+
原先写死、语言包管不到的文字一并收进 translations,九种语言同步补齐:
|
|
87
|
+
|
|
88
|
+
- Dialog 新增 `ok` / `cancel` / `actionError`:命令式对话框服务(三端 `createDialogService`)的确定、取消钮与动作失败提示。没传 `okText` / `cancelText` / `actionErrorText` 时取服务 `config`(自定义元素侧取宿主所在处的 `setXhConfig`)里的语言包,此前固定为 `OK` / `Cancel` / 英文失败提示。新增导出 `dialogServiceTranslations()`。
|
|
89
|
+
- Form 新增 `translations` 属性,`FormTranslations` 收进校验报错模板(`required`、`type`、`minLength` 等,形状同 `validateMessages`),三端接全局配置。取值顺序:规则的 `message` → `validateMessages` → `translations`(含全局语言包)→ 英文语言包。`runFieldRules` / `runFormRules` 签名不变。
|
|
90
|
+
- Kbd:`keyName` 有了缺省(读屏键名,按平台区分 Option / Alt、Command / Windows),新增 `keyLabel`(键帽字,Mac 用系统符号)。两者第二个参数是平台;`formatHotkey` 新增可选的第三个参数接收这两条,缺省取英文语言包。
|
|
91
|
+
- Citation 新增 `previewLinkSource` / `previewLinkDocument`(预览卡里打开来源的链接字),API 新增 `previewLinkText(item)` 与 `sourceMetaText(source)`;Vue / React 的缺省渲染改用它们,来源副文字里没有媒体类型的文档不再写死 `Document`,改取 `translations.document`。
|
|
92
|
+
- Mention 新增 `empty`(缺省空态文字),API 新增 `emptyText`,Vue / React 的缺省渲染改用它。
|
|
93
|
+
|
|
94
|
+
带英文缺省的公开常量(`CHART_TRANSLATIONS`、`CARTESIAN_TRANSLATIONS` 等七种图表的文案表、`HEATMAP_LEGEND_TEXT`、`SPINNER_DEFAULT_LABEL`、`DATE_SEGMENT_LABEL`、`DATE_FIELD_CLEAR_LABEL`、`default*Summary` 一类函数)名字与签名不变,值改为取自英文语言包。
|
|
95
|
+
|
|
96
|
+
- 8b8d520: 浮在内容之上的圆钮(Action Control `floating` 档)整体下移一档:sm / md / lg 由 40 / 48 / 56px 改为 32 / 40 / 48px(compact 28 / 36 / 44px),图标 16 / 20 / 24px,缺省 md 即 40px。48px 的钮在矮视口与小卡片里会叠住内容与彼此(走马灯的翻页钮与播放钮、纵向轨道压住正文)。
|
|
97
|
+
|
|
98
|
+
视觉默认变化:BackTop、FloatButton(含展开列表里的动作项)缺省由 48px 变为 40px,`size="lg"` 由 56px 变为 48px;ImageViewer 翻页钮由 48px 变为 40px、关闭钮由 40px 变为 32px;Carousel 翻页与播放钮为 40px。Log / MessageFeed 的回到底部钮缺省仍是 32px。
|
|
99
|
+
|
|
100
|
+
新增尺寸档:
|
|
101
|
+
|
|
102
|
+
- Carousel 新增 `size`(sm / md / lg,缺省 md),翻页、播放三颗钮同档。
|
|
103
|
+
- ImageViewer 新增 `size`(sm / md / lg,缺省 md),翻页钮同档,关闭钮比它低一档、最低 sm。
|
|
104
|
+
- Log、MessageFeed 的回到底部钮随组件已有的 `size` 换档:比组件低一档、最低 sm(sm / md 时 32px,lg 时 40px)。
|
|
105
|
+
|
|
106
|
+
新增的 `size` 与其他组件一样接全局配置,没写时取全局尺寸。
|
|
107
|
+
|
|
108
|
+
- 68b0410: Dialog 与 Drawer 新增 `unmountOnExit`(缺省 true,行为不变:第一次打开才挂载,退场动画播完就卸载)。设为 false 时打开过之后收起只隐藏、不卸载:Vue 与 React 把定位层以内联 `display: none` 收起、遮罩不留、Portal 视觉桥断开,再打开不重挂,内容里的组件状态、输入与滚动位置都留着,反复开合的重内容面板(设置面板、长表单)不再每次付一遍挂载开销。
|
|
109
|
+
|
|
110
|
+
headless 的 Dialog / Drawer connect 多出 `isContentMounted(present)`,与 Collapsible、Accordion 共用同一条挂卸判定;机器 context 多出 `opened`(挂载之后打开过没有)。
|
|
111
|
+
|
|
112
|
+
Web Components 的作者节点一向常驻,行为不变;写进 content 里一个 `<template>` 的内容按同一规则挂卸:第一次打开克隆,缺省退场播完撤走,`unmount-on-exit="false"` 时克隆一次之后常驻。
|
|
113
|
+
|
|
114
|
+
- 5b21815: 四处写死英文的读屏角色说明(`aria-roledescription`)改为可经 `translations` 翻译,缺省仍是原来的英文:
|
|
115
|
+
|
|
116
|
+
- Carousel:`rootRoleDescription`(根,缺省 `carousel`)、`itemRoleDescription`(每一张,缺省 `slide`)。
|
|
117
|
+
- Sortable:`itemDragTriggerRoleDescription`(拖拽手柄,缺省 `sortable`)。
|
|
118
|
+
- Table:`columnDragRoleDescription`(列拖拽把手,缺省 `draggable column`)。
|
|
119
|
+
|
|
120
|
+
内建语言包同步补齐这四个键,切换语言后读屏不再夹着英文的角色名。
|
|
121
|
+
|
|
122
|
+
- 831acc9: 每个角色节点另带皮肤挂载类 `xh-scope-<组件名>`,与 `data-scope` 一一对应(`data-scope="dialog"` 的节点带 `xh-scope-dialog`)。解剖产出的 attrs 多一项 `class`,Vue 与作者的 class 合并、React 落成 `className` 并与作者的拼接、Web Components 按词增删不覆盖作者写的类;asChild 把部件属性合进自带解剖的子节点时,挂载类随 `data-scope` 一起让位,一个节点不会同时吃两个组件的皮肤。core 新增导出 `SCOPE_CLASS_PREFIX`、`scopeClass()` 与 `stripScopeClass()`。
|
|
123
|
+
|
|
124
|
+
挂载类是皮肤产物改以类名领头的前提:浏览器按类名给规则分桶,属性选择器只按属性名分桶,几千条以 `[data-scope=…]` 领头的皮肤规则挤在同一个桶里,每个组件节点每次样式重算都要逐条试一遍。`data-scope` / `data-part` 仍是公开的样式契约,作者的覆盖写法不变。节点的 class 属性因此多了一个词:对 DOM 做快照或精确比对 `className` 的测试需要随之更新。只用 `@xihan-ui/styles`、自己书写标记的页面,要给每个带 `data-scope="x"` 的节点补上 `class="xh-scope-x"`,否则皮肤不命中。
|
|
125
|
+
|
|
126
|
+
- ecd3fcf: Select 新增 `lazyMount`(缺省 false,行为不变):列表内容第一次展开时才挂载,之后常驻、来回开合不重建。页面上 Select 很多时,收起态每个实例都背着一整份条目,挂载开销大半在这里——300 个各带 20 个条目、传了 `collection` 的 Select 挂载由约 530ms 降到约 183ms。打开前的选中文字与收起态连打(焦点在触发器上直接打字选中)改按 `collection` 计算;没给 `collection` 时打开前选中文字退回值本身、连打不生效。headless 的 connect 新增 `isContentMounted()`,机器 context 记 `opened`。Web Components 里把条目写进 list 里的一个 `<template>`,第一次展开才克隆(未开 lazy-mount 时模板也照常克隆进来)。
|
|
127
|
+
|
|
128
|
+
自绘滚动条在 `disabled` 时容器暂缺不再报「找不到滚动容器」诊断:列表懒挂载、还没展开过时轴先禁用着。
|
|
129
|
+
|
|
130
|
+
### Patch Changes
|
|
131
|
+
|
|
132
|
+
- b986a55: 图表(CartesianChart、PieChart、FunnelChart、RadarChart、GraphChart、HierarchyChart、SankeyChart)在根末尾追加的视觉隐藏数据表不再撑出祖先的滚动条。此前 1px 的隐藏样式直接写在 `<table>` 上,而表格的 `block-size` 只当最小高度、`overflow` 对表格不生效,表格照样有几十行那么高,绝对定位的盒子算进祖先的可滚动溢出,图表放进 `overflow: auto` 的容器(卡片、面板、对话框正文)就多出一截空滚动。新增部件 `table-region`(`getTableRegionProps()`):块级、1px、裁掉,视觉隐藏落在它上面,表格放在里面照常排版,读屏读到的数据表不变;`table` 部件不再带隐藏样式。三个适配器同步改为「摘要 + 区域(内含表格)」。
|
|
133
|
+
- dfdbf5e: 两处缺省取自实例数据的文案改为实例内容优先,全局配置里的 `translations`(包括内建语言包)不再盖掉它们:
|
|
134
|
+
|
|
135
|
+
- CartesianChart 数据表的列名先取轴标题:x 轴写了 `title` 时首列就叫这个名字,`translations.keyLabel` 只在轴没有标题时使用;含散点时的数值列同理,先取 y 轴标题,再用 `translations.valueLabel`。此前 `keyLabel` / `valueLabel` 一旦给出就压过轴标题,全局注入一份中文「类别」会把作者写的「月份」换掉。
|
|
136
|
+
- Heatmap 发散色阶的对照条两端恒写数值(中点减去 / 加上两侧最远距离),`translations.legendLow` / `legendHigh` 只换顺序色阶两端的词。此前两者给出时发散色阶两端也被换成「少 / 多」,读不出哪端是负。需要在发散色阶两端写别的字时,改写 `legend-label` 部件的内容。
|
|
137
|
+
|
|
138
|
+
- e0bf1ee: HierarchyChart 的绘图区补上读屏角色说明(`aria-roledescription`),取 `translations.chartRoleDescription`,与其余六种图表一致。绘图区是 `role="tree"`、按方向键展开收起,缺省说法因此用 `tree chart`(各语言包同为「树状图表」一类保留「树」字的说法),不用笼统的 `chart`,读屏才不会把树的操作提示盖掉。
|
|
139
|
+
- 581ba6f: Portal 视觉桥只在浮层呈现期间存在。此前每个浮层定位层一挂载就建桥:在来源整条祖先链上挂观察、建时把候选自定义属性读一遍,页面上几十个关着的提示与下拉白付这笔账,含几十个提示的面板一打开就多出数万次计算样式读取;缓存页一进一出,页内每台桥还要各重算两遍。现在 Vue 与 React 的内部 `XhPortal` 多一个 `present`(缺省为真,常显与展开才渲染的落点不变),带退场闸门的浮层(Tooltip、Popover、HoverCard、Popconfirm、Menu、ContextMenu、Select、Combobox、Cascader、TreeSelect、Mention、ColorPicker、DatePicker、DateRangePicker、TimePicker、TimeRangePicker、FloatingPanel、Pagination、Tour)把可见与否交给它:关着时不建桥,转为呈现时在内容露出、定位引擎第一次量尺寸之前建桥,退场播完后撤掉。Web Components 不经视觉桥,不受影响。
|
|
140
|
+
- bdd28ca: 菜单栏、侧栏与引用悬停卡的浮层也只在呈现期间建 Portal 视觉桥。这几个部件的定位层随组件常驻——菜单栏每一项一个、折叠侧栏每个分支一个弹出面板外加一个名称提示、正文里每处 hover 档引用一个——此前一挂载就各建一台桥,在来源整条祖先链上挂观察、建时读一遍计算样式。现在 `XhMenubarPositioner` 跟着这张菜单的退场闸门(由 `XhMenubarContent` 写回)、`XhSideNavBranchContent` 的弹出面板与 `XhSideNavTooltip` 跟着各自的退场闸门、`XhCitationPositioner` 跟着卡片是否渲染(展开中或退场未播完)决定建不建桥:关着不建,展开时在内容露出前建,退场播完后撤掉。Web Components 不经视觉桥,不受影响。
|
|
141
|
+
- Updated dependencies [9b0a9d8]
|
|
142
|
+
- Updated dependencies [bd63fd4]
|
|
143
|
+
- Updated dependencies [b986a55]
|
|
144
|
+
- Updated dependencies [dfdbf5e]
|
|
145
|
+
- Updated dependencies [8b8d520]
|
|
146
|
+
- Updated dependencies [e0bf1ee]
|
|
147
|
+
- Updated dependencies [a566f82]
|
|
148
|
+
- Updated dependencies [3f54a40]
|
|
149
|
+
- Updated dependencies [68b0410]
|
|
150
|
+
- Updated dependencies [b33ae37]
|
|
151
|
+
- Updated dependencies [5b21815]
|
|
152
|
+
- Updated dependencies [831acc9]
|
|
153
|
+
- Updated dependencies [b991ede]
|
|
154
|
+
- Updated dependencies [ecd3fcf]
|
|
155
|
+
- Updated dependencies [736fc04]
|
|
156
|
+
- @xihan-ui/headless@3.2.0
|
|
157
|
+
- @xihan-ui/core@3.2.0
|
|
158
|
+
- @xihan-ui/motion@3.2.0
|
|
159
|
+
- @xihan-ui/position@3.2.0
|
|
160
|
+
- @xihan-ui/pointer@3.2.0
|
|
161
|
+
- @xihan-ui/viz@3.2.0
|
|
162
|
+
|
|
3
163
|
## 3.1.0
|
|
4
164
|
|
|
5
165
|
### Minor Changes
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { PayloadOf } from "../../runtime/payload.js";
|
|
2
2
|
import { PropType, SlotsType, VNode } from "vue";
|
|
3
|
-
import { Direction, Orientation } from "@xihan-ui/core";
|
|
3
|
+
import { Direction, Orientation, Size } from "@xihan-ui/core";
|
|
4
4
|
import { CarouselApi, CarouselEffect, CarouselSchema, CarouselTranslations } from "@xihan-ui/headless";
|
|
5
5
|
//#region src/components/carousel/carousel.d.ts
|
|
6
6
|
type CarouselProps = CarouselSchema['props'];
|
|
@@ -46,6 +46,9 @@ declare const XhCarouselRoot: import("vue").DefineComponent<import("vue").Extrac
|
|
|
46
46
|
effect: {
|
|
47
47
|
type: PropType<CarouselEffect>;
|
|
48
48
|
};
|
|
49
|
+
size: {
|
|
50
|
+
type: PropType<Size>;
|
|
51
|
+
};
|
|
49
52
|
translations: {
|
|
50
53
|
type: PropType<Partial<CarouselTranslations>>;
|
|
51
54
|
};
|
|
@@ -94,6 +97,9 @@ declare const XhCarouselRoot: import("vue").DefineComponent<import("vue").Extrac
|
|
|
94
97
|
effect: {
|
|
95
98
|
type: PropType<CarouselEffect>;
|
|
96
99
|
};
|
|
100
|
+
size: {
|
|
101
|
+
type: PropType<Size>;
|
|
102
|
+
};
|
|
97
103
|
translations: {
|
|
98
104
|
type: PropType<Partial<CarouselTranslations>>;
|
|
99
105
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"carousel.d.ts","names":[],"sources":["../../../src/components/carousel/carousel.ts"],"mappings":";;;;;KAgBK,gBAAgB;;KAGT,wBAAwB,KAClC;cAqBW,8BAAc,8BAAA;;;;;;;;;;;;;;;;;IASQ,MAAA,SAAS;;;IACjB,MAAA,SAAS;;;;;;;IAGO,MAAA;;;;;;;;;;;IAGb,MAAA,SAAS;;;
|
|
1
|
+
{"version":3,"file":"carousel.d.ts","names":[],"sources":["../../../src/components/carousel/carousel.ts"],"mappings":";;;;;KAgBK,gBAAgB;;KAGT,wBAAwB,KAClC;cAqBW,8BAAc,8BAAA;;;;;;;;;;;;;;;;;IASQ,MAAA,SAAS;;;IACjB,MAAA,SAAS;;;;;;;IAGO,MAAA;;;;;;;;;;;IAGb,MAAA,SAAS;;;IACX,MAAA,SAAS;;;IACD,MAAA,SAAS,QAAQ;;;;;EAIvB,gBAAA,UAAA,UAAU;EACb,gBAAA,OAAA,UAAU;;;;;;;;;;;;;;;;;;IAdF,MAAA,SAAS;;;IACjB,MAAA,SAAS;;;;;;;IAGO,MAAA;;;;;;;;;;;IAGb,MAAA,SAAS;;;IACX,MAAA,SAAS;;;IACD,MAAA,SAAS,QAAQ;;;;;;;;;;EAQvC,WAAC,OAAO,0BAA0B;kCA8B9C;cAEW,kCAAkB,0BAAA,oBAAA,4BAAA;;8BAM7B,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAEW,8BAAc,0BAAA,oBAAA,4BAAA;;8BAMzB,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAEW,8BAAc,8BAAA;;IAIY,MAAA;;;;;;;IAAA,MAAA;;;MAUrC,oDAAA;cAEW,qCAAqB,0BAAA,oBAAA,4BAAA;;8BAMhC,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAEW,qCAAqB,0BAAA,oBAAA,4BAAA;;8BAMhC,qCAAA,iDAAA,aAAA,eAAA,oDAAA;;;;;;;cAQW,yCAAyB,0BAAA,oBAAA,4BAAA;;;EAGxB,WAAC;IAAS;QAAuB;kCAU7C;cAEW,wCAAwB,0BAAA,oBAAA,4BAAA;;8BAMnC,qCAAA,iDAAA,aAAA,eAAA,oDAAA;cAEW,mCAAmB,8BAAA;;IAIO,MAAA;;;;;;;IAAA,MAAA;;;MAUrC,oDAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"carousel.js","names":[],"sources":["../../../src/components/carousel/carousel.ts"],"sourcesContent":["/*\n * Copyright (c) 2021-Present XiHanFun and contributors.\n * Licensed under the MIT License. See LICENSE in the project root for license information.\n */\n\n// 提供 carousel 相关实现。\n\nimport type { Direction, Orientation } from '@xihan-ui/core'\nimport type { CarouselApi, CarouselEffect, CarouselSchema, CarouselTranslations } from '@xihan-ui/headless'\nimport type { PropType, SlotsType, VNode } from 'vue'\nimport type { PayloadOf } from '../../runtime/payload'\nimport { defineComponent, h } from 'vue'\nimport { withXhConfig } from '../../config/config'\nimport { provideCarousel, useCarouselContext } from './context'\nimport { useCarousel } from './use-carousel'\n\ntype CarouselProps = CarouselSchema['props']\n\n/** 默认插槽的载荷:当前页与翻页区间、自动播放与拖拽状态,以及翻页、播放的命令。 */\nexport type CarouselRootSlotProps = Pick<\n CarouselApi,\n | 'page'\n | 'totalPages'\n | 'slideCount'\n | 'slideRange'\n | 'pageSnapPoints'\n | 'canScrollPrev'\n | 'canScrollNext'\n | 'autoplaying'\n | 'paused'\n | 'autoplayStopped'\n | 'dragging'\n | 'isInView'\n | 'setPage'\n | 'goToPrev'\n | 'goToNext'\n | 'play'\n | 'pause'\n | 'resume'\n>\n\nexport const XhCarouselRoot = defineComponent({\n name: 'XhCarouselRoot',\n // 缺省值由 connect 给出;普通类型省略 default,Boolean 显式保留 undefined\n props: {\n page: { type: Number },\n defaultPage: { type: Number },\n slideCount: { type: Number },\n slidesPerPage: { type: Number },\n slidesPerMove: { type: Number },\n orientation: { type: String as PropType<Orientation> },\n dir: { type: String as PropType<Direction> },\n loop: { type: Boolean, default: undefined },\n // 布尔或毫秒:true 用默认间隔,数值即间隔\n autoplay: { type: [Boolean, Number] as PropType<boolean | number>, default: undefined },\n allowPointerDrag: { type: Boolean, default: undefined },\n spacing: { type: String },\n effect: { type: String as PropType<CarouselEffect> },\n translations: { type: Object as PropType<Partial<CarouselTranslations>> },\n },\n // page-change 携带 { page },update:page 携带裸页码\n emits: {\n 'page-change': (_details: PayloadOf<CarouselProps, 'onPageChange'>) => true,\n 'update:page': (_page: PayloadOf<CarouselProps, 'onPageChange'>['page']) => true,\n },\n slots: Object as SlotsType<{\n default?: (props: CarouselRootSlotProps) => VNode[]\n }>,\n setup(props, { slots, emit }) {\n const notify: CarouselProps['onPageChange'] = (details) => {\n emit('page-change', details)\n emit('update:page', details.page)\n }\n const ctx = useCarousel(withXhConfig('carousel', props) as CarouselProps, notify)\n provideCarousel(ctx)\n return () => h('div', ctx.api.value.getRootProps() as Record<string, unknown>, slots.default?.({\n page: ctx.api.value.page,\n totalPages: ctx.api.value.totalPages,\n slideCount: ctx.api.value.slideCount,\n slideRange: ctx.api.value.slideRange,\n pageSnapPoints: ctx.api.value.pageSnapPoints,\n canScrollPrev: ctx.api.value.canScrollPrev,\n canScrollNext: ctx.api.value.canScrollNext,\n autoplaying: ctx.api.value.autoplaying,\n paused: ctx.api.value.paused,\n autoplayStopped: ctx.api.value.autoplayStopped,\n dragging: ctx.api.value.dragging,\n isInView: ctx.api.value.isInView,\n setPage: ctx.api.value.setPage,\n goToPrev: ctx.api.value.goToPrev,\n goToNext: ctx.api.value.goToNext,\n play: ctx.api.value.play,\n pause: ctx.api.value.pause,\n resume: ctx.api.value.resume,\n }))\n },\n})\n\nexport const XhCarouselViewport = defineComponent({\n name: 'XhCarouselViewport',\n setup(_, { slots }) {\n const ctx = useCarouselContext()\n return () => h('div', ctx.api.value.getViewportProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhCarouselList = defineComponent({\n name: 'XhCarouselList',\n setup(_, { slots }) {\n const ctx = useCarouselContext()\n return () => h('div', ctx.api.value.getListProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhCarouselItem = defineComponent({\n name: 'XhCarouselItem',\n props: {\n // 下标由作者声明,兼收字符串以支持模板里写 index=\"0\"\n index: { type: [Number, String] as PropType<number | string>, required: true },\n },\n setup(props, { slots }) {\n const ctx = useCarouselContext()\n return () => h(\n 'div',\n ctx.api.value.getItemProps({ index: Number(props.index) }) as Record<string, unknown>,\n slots.default?.(),\n )\n },\n})\n\nexport const XhCarouselPrevTrigger = defineComponent({\n name: 'XhCarouselPrevTrigger',\n setup(_, { slots }) {\n const ctx = useCarouselContext()\n return () => h('button', ctx.api.value.getPrevTriggerProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhCarouselNextTrigger = defineComponent({\n name: 'XhCarouselNextTrigger',\n setup(_, { slots }) {\n const ctx = useCarouselContext()\n return () => h('button', ctx.api.value.getNextTriggerProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\n/**\n * 播放 / 暂停开关。开启 autoplay 后应当渲染它:\n * 自动翻页必须有一处能够停止,且停止之后不会被其他交互重新启动。\n *\n * 插槽得到的 `stopped` 是用户是否已按下停止,不含悬停与焦点两路的临时暂停。\n */\nexport const XhCarouselAutoplayTrigger = defineComponent({\n name: 'XhCarouselAutoplayTrigger',\n slots: Object as SlotsType<{\n default?: (props: { stopped: boolean }) => VNode[]\n }>,\n setup(_, { slots }) {\n const ctx = useCarouselContext()\n return () => h(\n 'button',\n ctx.api.value.getAutoplayTriggerProps() as Record<string, unknown>,\n slots.default?.({ stopped: ctx.api.value.autoplayStopped }),\n )\n },\n})\n\nexport const XhCarouselIndicatorGroup = defineComponent({\n name: 'XhCarouselIndicatorGroup',\n setup(_, { slots }) {\n const ctx = useCarouselContext()\n return () => h('div', ctx.api.value.getIndicatorGroupProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhCarouselIndicator = defineComponent({\n name: 'XhCarouselIndicator',\n props: {\n // 指示点对应的页码,0 基;兼收字符串\n index: { type: [Number, String] as PropType<number | string>, required: true },\n },\n setup(props, { slots }) {\n const ctx = useCarouselContext()\n return () => h(\n 'button',\n ctx.api.value.getIndicatorProps({ index: Number(props.index) }) as Record<string, unknown>,\n slots.default?.(),\n )\n },\n})\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"carousel.js","names":[],"sources":["../../../src/components/carousel/carousel.ts"],"sourcesContent":["/*\n * Copyright (c) 2021-Present XiHanFun and contributors.\n * Licensed under the MIT License. See LICENSE in the project root for license information.\n */\n\n// 提供 carousel 相关实现。\n\nimport type { Direction, Orientation, Size } from '@xihan-ui/core'\nimport type { CarouselApi, CarouselEffect, CarouselSchema, CarouselTranslations } from '@xihan-ui/headless'\nimport type { PropType, SlotsType, VNode } from 'vue'\nimport type { PayloadOf } from '../../runtime/payload'\nimport { defineComponent, h } from 'vue'\nimport { withXhConfig } from '../../config/config'\nimport { provideCarousel, useCarouselContext } from './context'\nimport { useCarousel } from './use-carousel'\n\ntype CarouselProps = CarouselSchema['props']\n\n/** 默认插槽的载荷:当前页与翻页区间、自动播放与拖拽状态,以及翻页、播放的命令。 */\nexport type CarouselRootSlotProps = Pick<\n CarouselApi,\n | 'page'\n | 'totalPages'\n | 'slideCount'\n | 'slideRange'\n | 'pageSnapPoints'\n | 'canScrollPrev'\n | 'canScrollNext'\n | 'autoplaying'\n | 'paused'\n | 'autoplayStopped'\n | 'dragging'\n | 'isInView'\n | 'setPage'\n | 'goToPrev'\n | 'goToNext'\n | 'play'\n | 'pause'\n | 'resume'\n>\n\nexport const XhCarouselRoot = defineComponent({\n name: 'XhCarouselRoot',\n // 缺省值由 connect 给出;普通类型省略 default,Boolean 显式保留 undefined\n props: {\n page: { type: Number },\n defaultPage: { type: Number },\n slideCount: { type: Number },\n slidesPerPage: { type: Number },\n slidesPerMove: { type: Number },\n orientation: { type: String as PropType<Orientation> },\n dir: { type: String as PropType<Direction> },\n loop: { type: Boolean, default: undefined },\n // 布尔或毫秒:true 用默认间隔,数值即间隔\n autoplay: { type: [Boolean, Number] as PropType<boolean | number>, default: undefined },\n allowPointerDrag: { type: Boolean, default: undefined },\n spacing: { type: String },\n effect: { type: String as PropType<CarouselEffect> },\n size: { type: String as PropType<Size> },\n translations: { type: Object as PropType<Partial<CarouselTranslations>> },\n },\n // page-change 携带 { page },update:page 携带裸页码\n emits: {\n 'page-change': (_details: PayloadOf<CarouselProps, 'onPageChange'>) => true,\n 'update:page': (_page: PayloadOf<CarouselProps, 'onPageChange'>['page']) => true,\n },\n slots: Object as SlotsType<{\n default?: (props: CarouselRootSlotProps) => VNode[]\n }>,\n setup(props, { slots, emit }) {\n const notify: CarouselProps['onPageChange'] = (details) => {\n emit('page-change', details)\n emit('update:page', details.page)\n }\n const ctx = useCarousel(withXhConfig('carousel', props) as CarouselProps, notify)\n provideCarousel(ctx)\n return () => h('div', ctx.api.value.getRootProps() as Record<string, unknown>, slots.default?.({\n page: ctx.api.value.page,\n totalPages: ctx.api.value.totalPages,\n slideCount: ctx.api.value.slideCount,\n slideRange: ctx.api.value.slideRange,\n pageSnapPoints: ctx.api.value.pageSnapPoints,\n canScrollPrev: ctx.api.value.canScrollPrev,\n canScrollNext: ctx.api.value.canScrollNext,\n autoplaying: ctx.api.value.autoplaying,\n paused: ctx.api.value.paused,\n autoplayStopped: ctx.api.value.autoplayStopped,\n dragging: ctx.api.value.dragging,\n isInView: ctx.api.value.isInView,\n setPage: ctx.api.value.setPage,\n goToPrev: ctx.api.value.goToPrev,\n goToNext: ctx.api.value.goToNext,\n play: ctx.api.value.play,\n pause: ctx.api.value.pause,\n resume: ctx.api.value.resume,\n }))\n },\n})\n\nexport const XhCarouselViewport = defineComponent({\n name: 'XhCarouselViewport',\n setup(_, { slots }) {\n const ctx = useCarouselContext()\n return () => h('div', ctx.api.value.getViewportProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhCarouselList = defineComponent({\n name: 'XhCarouselList',\n setup(_, { slots }) {\n const ctx = useCarouselContext()\n return () => h('div', ctx.api.value.getListProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhCarouselItem = defineComponent({\n name: 'XhCarouselItem',\n props: {\n // 下标由作者声明,兼收字符串以支持模板里写 index=\"0\"\n index: { type: [Number, String] as PropType<number | string>, required: true },\n },\n setup(props, { slots }) {\n const ctx = useCarouselContext()\n return () => h(\n 'div',\n ctx.api.value.getItemProps({ index: Number(props.index) }) as Record<string, unknown>,\n slots.default?.(),\n )\n },\n})\n\nexport const XhCarouselPrevTrigger = defineComponent({\n name: 'XhCarouselPrevTrigger',\n setup(_, { slots }) {\n const ctx = useCarouselContext()\n return () => h('button', ctx.api.value.getPrevTriggerProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhCarouselNextTrigger = defineComponent({\n name: 'XhCarouselNextTrigger',\n setup(_, { slots }) {\n const ctx = useCarouselContext()\n return () => h('button', ctx.api.value.getNextTriggerProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\n/**\n * 播放 / 暂停开关。开启 autoplay 后应当渲染它:\n * 自动翻页必须有一处能够停止,且停止之后不会被其他交互重新启动。\n *\n * 插槽得到的 `stopped` 是用户是否已按下停止,不含悬停与焦点两路的临时暂停。\n */\nexport const XhCarouselAutoplayTrigger = defineComponent({\n name: 'XhCarouselAutoplayTrigger',\n slots: Object as SlotsType<{\n default?: (props: { stopped: boolean }) => VNode[]\n }>,\n setup(_, { slots }) {\n const ctx = useCarouselContext()\n return () => h(\n 'button',\n ctx.api.value.getAutoplayTriggerProps() as Record<string, unknown>,\n slots.default?.({ stopped: ctx.api.value.autoplayStopped }),\n )\n },\n})\n\nexport const XhCarouselIndicatorGroup = defineComponent({\n name: 'XhCarouselIndicatorGroup',\n setup(_, { slots }) {\n const ctx = useCarouselContext()\n return () => h('div', ctx.api.value.getIndicatorGroupProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhCarouselIndicator = defineComponent({\n name: 'XhCarouselIndicator',\n props: {\n // 指示点对应的页码,0 基;兼收字符串\n index: { type: [Number, String] as PropType<number | string>, required: true },\n },\n setup(props, { slots }) {\n const ctx = useCarouselContext()\n return () => h(\n 'button',\n ctx.api.value.getIndicatorProps({ index: Number(props.index) }) as Record<string, unknown>,\n slots.default?.(),\n )\n },\n})\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cartesian-chart.d.ts","names":[],"sources":["../../../src/components/cartesian-chart/cartesian-chart.ts"],"mappings":";;;;KAqCK,sBAAsB;;KAGf,8BAA8B,KAAK;;UAG9B;EACf,QAAQ;EACR,SAAS;;;
|
|
1
|
+
{"version":3,"file":"cartesian-chart.d.ts","names":[],"sources":["../../../src/components/cartesian-chart/cartesian-chart.ts"],"mappings":";;;;KAqCK,sBAAsB;;KAGf,8BAA8B,KAAK;;UAG9B;EACf,QAAQ;EACR,SAAS;;;cA0DE,uCAAuB,0BAAA,oBAAA,4BAAA;;8BAMlC,qCAAA,iDAAA,aAAA,eAAA,oDAAA;;cAgBW,sCAAsB,0BAAA,oBAAA,4BAAA;;8BAgBjC,qCAAA,iDAAA,aAAA,eAAA,oDAAA;;cAGW,wCAAwB,0BAAA,oBAAA,4BAAA;;8BASnC,qCAAA,iDAAA,aAAA,eAAA,oDAAA;;;;;;cAOW,oCAAoB,0BAAA,oBAAA,4BAAA;;gCAmB/B,qCAAA,iDAAA,aAAA,eAAA,oDAAA;;cAGW,0CAA0B,0BAAA,oBAAA,4BAAA;;8BAmBrC,qCAAA,iDAAA,aAAA,eAAA,oDAAA;;cAGW,uCAAuB,0BAAA,oBAAA,4BAAA;;;EAGtB,WAAC,OAAO,mCAAmC;kCAWvD;;cAGW,qCAAqB,0BAAA,oBAAA,4BAAA;;8BAMhC,qCAAA,iDAAA,aAAA,eAAA,oDAAA;;cAGW,oCAAoB,8BAAA;;IAII,MAAA,kBAAkB,aAAa;;;IACvC,MAAA,kBAAkB;;;IAClB,MAAA,SAAS;;;IACT,MAAA,SAAS;;;IACH,MAAA,SAAS;;;IACZ,MAAA,SAAS;;;IACV,MAAA,SAAS;;;;;;;IAEJ,MAAA,SAAS;;;IACd,MAAA,SAAS;;;IACN,MAAA,kBAAkB;;;IACxB,MAAA,SAAS;;;IACP,MAAA,SAAS;;;IACF,MAAA,SAAS;;;;;;;;;;;IAGjB,MAAA,SAAS;;;IACA,MAAA,SAAS;;;IACF,MAAA,SAAS;;;IACnB,MAAA;;;IACO,MAAA;;;IACa,MAAA,SAAS;;;;;;;;;;;;;;IAI5B,MAAA,SAAS,QAAQ;;;;;EAId,yBAAA,UAAA,UAAU;EACZ,wBAAA,SAAA,UAAU;EACX,sBAAA,UAAA,UAAU;EACf,qBAAA,MAAA,UAAU;EACT,kBAAA,UAAA,UAAU;EACX,kBAAA,SAAA,UAAU;EACT,kBAAA,UAAA,UAAU;EACX,kBAAA,SAAA,UAAU;EACA,2BAAA,UAAA,UAAU;EACT,0BAAA,YAAA,UAAU;EACrB,iBAAA,UAAA,UAAU;EACX,gBAAA,UAAA,UAAU;;;IAxCH,MAAA,kBAAkB,aAAa;;;IACvC,MAAA,kBAAkB;;;IAClB,MAAA,SAAS;;;IACT,MAAA,SAAS;;;IACH,MAAA,SAAS;;;IACZ,MAAA,SAAS;;;IACV,MAAA,SAAS;;;;;;;IAEJ,MAAA,SAAS;;;IACd,MAAA,SAAS;;;IACN,MAAA,kBAAkB;;;IACxB,MAAA,SAAS;;;IACP,MAAA,SAAS;;;IACF,MAAA,SAAS;;;;;;;;;;;IAGjB,MAAA,SAAS;;;IACA,MAAA,SAAS;;;IACF,MAAA,SAAS;;;IACnB,MAAA;;;IACO,MAAA;;;IACa,MAAA,SAAS;;;;;;;;;;;;;;IAI5B,MAAA,SAAS,QAAQ;;;;;;;;;;;;;;;;;;;;;;;EAmBvC,WAAC,OAAO,gCAAgC;;EAExC,gBAAM;;EAEN,WAAC,OAAO,mCAAmC;;EAE7C,cAAM;kCA2DhB"}
|
|
@@ -39,7 +39,7 @@ function renderTooltipContent(api) {
|
|
|
39
39
|
/** 摘要与数据表:由根自动生成、视觉隐藏,保证无障碍等价物始终存在。 */
|
|
40
40
|
function renderA11y(api) {
|
|
41
41
|
const { columns, rows } = api.table;
|
|
42
|
-
return [h("p", api.getSummaryProps(), api.summary), h("table", api.getTableProps(), [
|
|
42
|
+
return [h("p", api.getSummaryProps(), api.summary), h("div", api.getTableRegionProps(), [h("table", api.getTableProps(), [
|
|
43
43
|
h("caption", api.tableCaption),
|
|
44
44
|
h("thead", [h("tr", columns.map((column) => h("th", {
|
|
45
45
|
key: column.id,
|
|
@@ -49,7 +49,7 @@ function renderA11y(api) {
|
|
|
49
49
|
key: c,
|
|
50
50
|
scope: "row"
|
|
51
51
|
}, cell.text) : h("td", { key: c }, cell.text)))))
|
|
52
|
-
])];
|
|
52
|
+
])])];
|
|
53
53
|
}
|
|
54
54
|
/** 标题:图表的可及名来源。 */
|
|
55
55
|
const XhCartesianChartCaption = defineComponent({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cartesian-chart.js","names":[],"sources":["../../../src/components/cartesian-chart/cartesian-chart.ts"],"sourcesContent":["/*\n * Copyright (c) 2021-Present XiHanFun and contributors.\n * Licensed under the MIT License. See LICENSE in the project root for license information.\n */\n\n// 提供 cartesian chart 相关实现。\n\nimport type {\n CartesianAnnotation,\n CartesianAxis,\n CartesianBrush,\n CartesianBrushSelection,\n CartesianChartApi,\n CartesianChartSchema,\n CartesianChartTranslations,\n CartesianOrientation,\n CartesianRenderer,\n CartesianSeries,\n CartesianTooltipModel,\n CartesianTooltipOrder,\n CartesianTrigger,\n CartesianWindow,\n CartesianZoom,\n ChartDatumDetails,\n ChartKey,\n ChartMark,\n ChartPalette,\n ChartRow,\n ColumnSource,\n} from '@xihan-ui/headless'\nimport type { PropType, SlotsType, VNode } from 'vue'\nimport type { PayloadOf } from '../../runtime/payload'\nimport { defineComponent, h } from 'vue'\nimport { withXhConfig } from '../../config/config'\nimport { provideCartesianChart, useCartesianChartContext } from './context'\nimport { useCartesianChart } from './use-cartesian-chart'\n\ntype CartesianChartProps = CartesianChartSchema['props']\n\n/** 默认插槽的载荷:自行摆放部件时用得上的状态与动作。 */\nexport type CartesianChartRootSlotProps = Pick<CartesianChartApi, 'legendItems' | 'active' | 'tooltip' | 'empty' | 'hiddenSeries' | 'activeKey' | 'toggleSeries' | 'setFocusedDatum' | 'table'>\n\n/** 提示框插槽的载荷:激活的数据(axis 模式带 items)与缺省的内容模型。 */\nexport interface CartesianChartTooltipSlotProps {\n active: ChartDatumDetails | null\n tooltip: CartesianTooltipModel | null\n}\n\n/** 纹理定义:绘图区的第一个子节点,每种纹理一个 pattern、里面一条线。 */\nfunction renderDefs(api: CartesianChartApi): VNode {\n return h('defs', api.getDefsProps() as Record<string, unknown>, [\n ...api.patterns.map(pattern =>\n h('pattern', { ...api.getPatternProps(pattern) as Record<string, unknown>, key: pattern.id }, [\n h('path', api.getPatternLineProps(pattern) as Record<string, unknown>),\n ])),\n // 缩放后的裁剪区:窗外的系列与注释按它裁掉\n ...(api.clip ? [h('clipPath', { ...api.getClipPathProps() as Record<string, unknown>, key: 'clip' }, [h('rect', api.getClipRectProps() as Record<string, unknown>)])] : []),\n ])\n}\n\n/** 一个场景标记画成 SVG 元素;分组递归画子标记,文字标记带文字。 */\nfunction renderMark(api: CartesianChartApi, mark: ChartMark): VNode {\n const props = { ...api.getMarkProps(mark) as Record<string, unknown>, key: mark.key }\n if (mark.kind === 'group')\n return h('g', props, mark.children.map(child => renderMark(api, child)))\n if (mark.kind === 'text')\n return h('text', props, mark.text)\n return h('path', props)\n}\n\n/** 缺省的提示框内容:头部是自变量,每个系列一行(色标、数值、系列名)。 */\nfunction renderTooltipContent(api: CartesianChartApi): VNode[] {\n const tooltip = api.tooltip\n if (!tooltip)\n return []\n return [\n h('div', api.getTooltipHeaderProps() as Record<string, unknown>, tooltip.header),\n ...tooltip.rows.map(row => h('div', { ...api.getTooltipRowProps(row) as Record<string, unknown>, key: row.seriesId }, [\n h('span', api.getTooltipSwatchProps(row) as Record<string, unknown>),\n h('span', api.getTooltipValueProps(row) as Record<string, unknown>, row.value),\n h('span', api.getTooltipNameProps(row) as Record<string, unknown>, row.name),\n ])),\n ]\n}\n\n/** 摘要与数据表:由根自动生成、视觉隐藏,保证无障碍等价物始终存在。 */\nfunction renderA11y(api: CartesianChartApi): VNode[] {\n const { columns, rows } = api.table\n return [\n h('p', api.getSummaryProps() as Record<string, unknown>, api.summary),\n h('table', api.getTableProps() as Record<string, unknown>, [\n h('caption', api.tableCaption),\n h('thead', [h('tr', columns.map(column => h('th', { key: column.id, scope: 'col' }, column.label)))]),\n h('tbody', rows.map((row, i) => h('tr', { key: i }, row.cells.map((cell, c) =>\n c === 0 ? h('th', { key: c, scope: 'row' }, cell.text) : h('td', { key: c }, cell.text))))),\n ]),\n ]\n}\n\n/** 标题:图表的可及名来源。 */\nexport const XhCartesianChartCaption = defineComponent({\n name: 'XhCartesianChartCaption',\n setup(_, { slots }) {\n const ctx = useCartesianChartContext()\n return () => h('figcaption', ctx.api.value.getCaptionProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\n/** 色阶图例:按值着色时跟在图例项后面;没有按值着色时整块收起,节点常在。 */\nfunction renderLegendScale(api: CartesianChartApi): VNode {\n const scale = api.legendScale\n return h('div', { ...api.getLegendScaleProps() as Record<string, unknown>, key: 'legend-scale' }, scale\n ? [\n h('span', api.getLegendScaleNameProps() as Record<string, unknown>, scale.name),\n h('span', api.getLegendScaleValueProps('min') as Record<string, unknown>, scale.min),\n h('span', api.getLegendScaleBarProps() as Record<string, unknown>),\n h('span', api.getLegendScaleValueProps('max') as Record<string, unknown>, scale.max),\n ]\n : [])\n}\n\n/** 图例:项由组件按系列生成;只有一个系列时整条收起。 */\nexport const XhCartesianChartLegend = defineComponent({\n name: 'XhCartesianChartLegend',\n setup() {\n const ctx = useCartesianChartContext()\n return () => {\n const api = ctx.api.value\n return h('div', api.getLegendProps() as Record<string, unknown>, [\n ...api.legendItems.map(item =>\n h('button', { ...api.getLegendItemProps(item) as Record<string, unknown>, key: item.id }, [\n h('span', api.getLegendSwatchProps(item) as Record<string, unknown>),\n h('span', api.getLegendLabelProps(item) as Record<string, unknown>, item.name),\n ])),\n renderLegendScale(api),\n ])\n }\n },\n})\n\n/** 视口:尺寸观测的宿主,块尺寸由组件槽决定、含坐标轴带。 */\nexport const XhCartesianChartViewport = defineComponent({\n name: 'XhCartesianChartViewport',\n setup(_, { slots }) {\n const ctx = useCartesianChartContext()\n return () => h('div', {\n ...ctx.api.value.getViewportProps() as Record<string, unknown>,\n ref: (el: unknown) => { ctx.viewportRef.value = el as HTMLElement },\n }, slots.default?.())\n },\n})\n\n/**\n * 绘图区:按场景生成网格、坐标轴、系列与前景层,层序由连接层分好。\n * 数据层画在画布上时前面再垫一层 svg(网格、坐标轴、参考带、准线)与画布;绘图区始终以同一个 key 在最后,\n * 渲染器切换时它不重建,焦点不丢。\n */\nexport const XhCartesianChartPlot = defineComponent({\n name: 'XhCartesianChartPlot',\n setup() {\n const ctx = useCartesianChartContext()\n const bindCanvas = (el: unknown): void => {\n ctx.canvasRef.value = el as HTMLCanvasElement | null\n }\n return () => {\n const api = ctx.api.value\n const plot = h('svg', { ...api.getPlotProps() as Record<string, unknown>, key: 'plot' }, [renderDefs(api), ...api.layers.plot.map(mark => renderMark(api, mark))])\n if (api.renderer !== 'canvas')\n return [plot]\n return [\n h('svg', { ...api.getUnderlayProps() as Record<string, unknown>, key: 'underlay' }, api.layers.underlay.map(mark => renderMark(api, mark))),\n h('canvas', { ...api.getCanvasProps() as Record<string, unknown>, key: 'canvas', ref: bindCanvas }),\n plot,\n ]\n }\n },\n})\n\n/** 缩放条:一条轨道上的窗口与两端的手柄;自变量方向不能缩放时收起。 */\nexport const XhCartesianChartZoomSlider = defineComponent({\n name: 'XhCartesianChartZoomSlider',\n setup() {\n const ctx = useCartesianChartContext()\n return () => {\n const api = ctx.api.value\n return h('div', api.getZoomSliderProps() as Record<string, unknown>, [\n h('div', api.getZoomTrackProps() as Record<string, unknown>, [\n h('div', api.getZoomWindowProps() as Record<string, unknown>, [\n h('span', api.getZoomHandleProps('start') as Record<string, unknown>),\n h('span', api.getZoomHandleProps('end') as Record<string, unknown>),\n ]),\n h('svg', api.getZoomPreviewProps() as Record<string, unknown>, [\n h('path', api.getZoomPreviewLineProps() as Record<string, unknown>),\n ]),\n ]),\n ])\n }\n },\n})\n\n/** 提示框:缺省内容按激活的数据生成,作用域插槽可替换。 */\nexport const XhCartesianChartTooltip = defineComponent({\n name: 'XhCartesianChartTooltip',\n slots: Object as SlotsType<{\n default?: (props: CartesianChartTooltipSlotProps) => VNode[]\n }>,\n setup(_, { slots }) {\n const ctx = useCartesianChartContext()\n return () => {\n const api = ctx.api.value\n return h('div', api.getTooltipProps() as Record<string, unknown>, slots.default\n ? slots.default({ active: api.active, tooltip: api.tooltip })\n : renderTooltipContent(api))\n }\n },\n})\n\n/** 空态:没有可画的数据时显示,缺省文字取文案。 */\nexport const XhCartesianChartEmpty = defineComponent({\n name: 'XhCartesianChartEmpty',\n setup(_, { slots }) {\n const ctx = useCartesianChartContext()\n return () => h('div', ctx.api.value.getEmptyProps() as Record<string, unknown>, slots.default?.() ?? ctx.api.value.emptyText)\n },\n})\n\n/** 根:铺开缺省结构或交给默认插槽,并在末尾追加摘要与数据表。 */\nexport const XhCartesianChartRoot = defineComponent({\n name: 'XhCartesianChartRoot',\n // 缺省值由机器与 connect 决定;普通类型省略 default,Boolean 显式保留 undefined\n props: {\n data: { type: [Array, Object] as PropType<readonly ChartRow[] | ColumnSource> },\n series: { type: Array as PropType<readonly CartesianSeries[]> },\n xAxis: { type: Object as PropType<CartesianAxis> },\n yAxis: { type: Object as PropType<CartesianAxis> },\n orientation: { type: String as PropType<CartesianOrientation> },\n renderer: { type: String as PropType<CartesianRenderer> },\n trigger: { type: String as PropType<CartesianTrigger> },\n totals: { type: Boolean, default: undefined },\n tooltipOrder: { type: String as PropType<CartesianTooltipOrder> },\n palette: { type: String as PropType<ChartPalette> },\n annotations: { type: Array as PropType<readonly CartesianAnnotation[]> },\n zoom: { type: String as PropType<CartesianZoom> },\n window: { type: Object as PropType<CartesianWindow> },\n defaultWindow: { type: Object as PropType<CartesianWindow> },\n follow: { type: Boolean, default: undefined },\n defaultFollow: { type: Boolean, default: undefined },\n brush: { type: String as PropType<CartesianBrush> },\n brushSelection: { type: Object as PropType<CartesianBrushSelection | null> },\n defaultBrushSelection: { type: Object as PropType<CartesianBrushSelection | null> },\n hiddenSeries: { type: Array as PropType<string[]> },\n defaultHiddenSeries: { type: Array as PropType<string[]> },\n activeKey: { type: [String, Number, Date, null] as PropType<ChartKey | null> },\n pending: { type: Boolean, default: undefined },\n animated: { type: Boolean, default: undefined },\n locale: { type: String },\n translations: { type: Object as PropType<Partial<CartesianChartTranslations>> },\n },\n // hidden-series-change / active-key-change 携带 details;update:* 携带裸值,支持 v-model\n emits: {\n 'hidden-series-change': (_details: PayloadOf<CartesianChartProps, 'onHiddenSeriesChange'>) => true,\n 'update:hiddenSeries': (_hidden: PayloadOf<CartesianChartProps, 'onHiddenSeriesChange'>['hiddenSeries']) => true,\n 'active-key-change': (_details: PayloadOf<CartesianChartProps, 'onActiveKeyChange'>) => true,\n 'update:activeKey': (_key: PayloadOf<CartesianChartProps, 'onActiveKeyChange'>['activeKey']) => true,\n 'window-change': (_details: PayloadOf<CartesianChartProps, 'onWindowChange'>) => true,\n 'update:window': (_window: PayloadOf<CartesianChartProps, 'onWindowChange'>['window']) => true,\n 'follow-change': (_details: PayloadOf<CartesianChartProps, 'onFollowChange'>) => true,\n 'update:follow': (_follow: PayloadOf<CartesianChartProps, 'onFollowChange'>['follow']) => true,\n 'brush-selection-change': (_details: PayloadOf<CartesianChartProps, 'onBrushSelectionChange'>) => true,\n 'update:brushSelection': (_selection: PayloadOf<CartesianChartProps, 'onBrushSelectionChange'>['selection']) => true,\n 'datum-active': (_details: PayloadOf<CartesianChartProps, 'onDatumActive'>) => true,\n 'datum-press': (_details: PayloadOf<CartesianChartProps, 'onDatumPress'>) => true,\n },\n slots: Object as SlotsType<{\n /** 自行摆放部件;不写时铺开缺省结构:图例、视口(绘图区与空态)、提示框。 */\n default?: (props: CartesianChartRootSlotProps) => VNode[]\n /** 缺省结构里的标题内容。 */\n caption?: () => VNode[]\n /** 缺省结构里的提示框内容。 */\n tooltip?: (props: CartesianChartTooltipSlotProps) => VNode[]\n /** 缺省结构里的空态内容。 */\n empty?: () => VNode[]\n }>,\n setup(props, { slots, emit }) {\n const ctx = useCartesianChart(withXhConfig('cartesian-chart', props) as CartesianChartProps, {\n onHiddenSeriesChange: (details) => {\n emit('hidden-series-change', details)\n emit('update:hiddenSeries', details.hiddenSeries)\n },\n onActiveKeyChange: (details) => {\n emit('active-key-change', details)\n emit('update:activeKey', details.activeKey)\n },\n onWindowChange: (details) => {\n emit('window-change', details)\n emit('update:window', details.window)\n },\n onFollowChange: (details) => {\n emit('follow-change', details)\n emit('update:follow', details.follow)\n },\n onBrushSelectionChange: (details) => {\n emit('brush-selection-change', details)\n emit('update:brushSelection', details.selection)\n },\n onDatumActive: details => emit('datum-active', details),\n onDatumPress: details => emit('datum-press', details),\n })\n provideCartesianChart(ctx)\n return () => {\n const api = ctx.api.value\n const content = slots.default\n ? slots.default({\n legendItems: api.legendItems,\n active: api.active,\n tooltip: api.tooltip,\n empty: api.empty,\n table: api.table,\n hiddenSeries: api.hiddenSeries,\n activeKey: api.activeKey,\n toggleSeries: api.toggleSeries,\n setFocusedDatum: api.setFocusedDatum,\n })\n : [\n ...(slots.caption ? [h(XhCartesianChartCaption, null, () => slots.caption?.())] : []),\n h(XhCartesianChartLegend),\n // 空态放进视口:叠在绘图区上居中,标题与图例不被盖住\n h(XhCartesianChartViewport, null, () => [\n h(XhCartesianChartPlot),\n h(XhCartesianChartEmpty, null, slots.empty ? () => slots.empty?.() : undefined),\n ]),\n h(XhCartesianChartZoomSlider),\n h(XhCartesianChartTooltip, null, slots.tooltip ? { default: slots.tooltip } : undefined),\n ]\n return h('figure', {\n ...api.getRootProps() as Record<string, unknown>,\n ref: (el: unknown) => { ctx.rootRef.value = el as HTMLElement },\n }, [...content, ...renderA11y(api)])\n }\n },\n})\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cartesian-chart.js","names":[],"sources":["../../../src/components/cartesian-chart/cartesian-chart.ts"],"sourcesContent":["/*\n * Copyright (c) 2021-Present XiHanFun and contributors.\n * Licensed under the MIT License. See LICENSE in the project root for license information.\n */\n\n// 提供 cartesian chart 相关实现。\n\nimport type {\n CartesianAnnotation,\n CartesianAxis,\n CartesianBrush,\n CartesianBrushSelection,\n CartesianChartApi,\n CartesianChartSchema,\n CartesianChartTranslations,\n CartesianOrientation,\n CartesianRenderer,\n CartesianSeries,\n CartesianTooltipModel,\n CartesianTooltipOrder,\n CartesianTrigger,\n CartesianWindow,\n CartesianZoom,\n ChartDatumDetails,\n ChartKey,\n ChartMark,\n ChartPalette,\n ChartRow,\n ColumnSource,\n} from '@xihan-ui/headless'\nimport type { PropType, SlotsType, VNode } from 'vue'\nimport type { PayloadOf } from '../../runtime/payload'\nimport { defineComponent, h } from 'vue'\nimport { withXhConfig } from '../../config/config'\nimport { provideCartesianChart, useCartesianChartContext } from './context'\nimport { useCartesianChart } from './use-cartesian-chart'\n\ntype CartesianChartProps = CartesianChartSchema['props']\n\n/** 默认插槽的载荷:自行摆放部件时用得上的状态与动作。 */\nexport type CartesianChartRootSlotProps = Pick<CartesianChartApi, 'legendItems' | 'active' | 'tooltip' | 'empty' | 'hiddenSeries' | 'activeKey' | 'toggleSeries' | 'setFocusedDatum' | 'table'>\n\n/** 提示框插槽的载荷:激活的数据(axis 模式带 items)与缺省的内容模型。 */\nexport interface CartesianChartTooltipSlotProps {\n active: ChartDatumDetails | null\n tooltip: CartesianTooltipModel | null\n}\n\n/** 纹理定义:绘图区的第一个子节点,每种纹理一个 pattern、里面一条线。 */\nfunction renderDefs(api: CartesianChartApi): VNode {\n return h('defs', api.getDefsProps() as Record<string, unknown>, [\n ...api.patterns.map(pattern =>\n h('pattern', { ...api.getPatternProps(pattern) as Record<string, unknown>, key: pattern.id }, [\n h('path', api.getPatternLineProps(pattern) as Record<string, unknown>),\n ])),\n // 缩放后的裁剪区:窗外的系列与注释按它裁掉\n ...(api.clip ? [h('clipPath', { ...api.getClipPathProps() as Record<string, unknown>, key: 'clip' }, [h('rect', api.getClipRectProps() as Record<string, unknown>)])] : []),\n ])\n}\n\n/** 一个场景标记画成 SVG 元素;分组递归画子标记,文字标记带文字。 */\nfunction renderMark(api: CartesianChartApi, mark: ChartMark): VNode {\n const props = { ...api.getMarkProps(mark) as Record<string, unknown>, key: mark.key }\n if (mark.kind === 'group')\n return h('g', props, mark.children.map(child => renderMark(api, child)))\n if (mark.kind === 'text')\n return h('text', props, mark.text)\n return h('path', props)\n}\n\n/** 缺省的提示框内容:头部是自变量,每个系列一行(色标、数值、系列名)。 */\nfunction renderTooltipContent(api: CartesianChartApi): VNode[] {\n const tooltip = api.tooltip\n if (!tooltip)\n return []\n return [\n h('div', api.getTooltipHeaderProps() as Record<string, unknown>, tooltip.header),\n ...tooltip.rows.map(row => h('div', { ...api.getTooltipRowProps(row) as Record<string, unknown>, key: row.seriesId }, [\n h('span', api.getTooltipSwatchProps(row) as Record<string, unknown>),\n h('span', api.getTooltipValueProps(row) as Record<string, unknown>, row.value),\n h('span', api.getTooltipNameProps(row) as Record<string, unknown>, row.name),\n ])),\n ]\n}\n\n/** 摘要与数据表:由根自动生成、视觉隐藏,保证无障碍等价物始终存在。 */\nfunction renderA11y(api: CartesianChartApi): VNode[] {\n const { columns, rows } = api.table\n return [\n h('p', api.getSummaryProps() as Record<string, unknown>, api.summary),\n // 视觉隐藏落在包着表格的区域上,表格在里面照常排版:隐藏写在表格上收不住它的高度\n h('div', api.getTableRegionProps() as Record<string, unknown>, [\n h('table', api.getTableProps() as Record<string, unknown>, [\n h('caption', api.tableCaption),\n h('thead', [h('tr', columns.map(column => h('th', { key: column.id, scope: 'col' }, column.label)))]),\n h('tbody', rows.map((row, i) => h('tr', { key: i }, row.cells.map((cell, c) =>\n c === 0 ? h('th', { key: c, scope: 'row' }, cell.text) : h('td', { key: c }, cell.text))))),\n ]),\n ]),\n ]\n}\n\n/** 标题:图表的可及名来源。 */\nexport const XhCartesianChartCaption = defineComponent({\n name: 'XhCartesianChartCaption',\n setup(_, { slots }) {\n const ctx = useCartesianChartContext()\n return () => h('figcaption', ctx.api.value.getCaptionProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\n/** 色阶图例:按值着色时跟在图例项后面;没有按值着色时整块收起,节点常在。 */\nfunction renderLegendScale(api: CartesianChartApi): VNode {\n const scale = api.legendScale\n return h('div', { ...api.getLegendScaleProps() as Record<string, unknown>, key: 'legend-scale' }, scale\n ? [\n h('span', api.getLegendScaleNameProps() as Record<string, unknown>, scale.name),\n h('span', api.getLegendScaleValueProps('min') as Record<string, unknown>, scale.min),\n h('span', api.getLegendScaleBarProps() as Record<string, unknown>),\n h('span', api.getLegendScaleValueProps('max') as Record<string, unknown>, scale.max),\n ]\n : [])\n}\n\n/** 图例:项由组件按系列生成;只有一个系列时整条收起。 */\nexport const XhCartesianChartLegend = defineComponent({\n name: 'XhCartesianChartLegend',\n setup() {\n const ctx = useCartesianChartContext()\n return () => {\n const api = ctx.api.value\n return h('div', api.getLegendProps() as Record<string, unknown>, [\n ...api.legendItems.map(item =>\n h('button', { ...api.getLegendItemProps(item) as Record<string, unknown>, key: item.id }, [\n h('span', api.getLegendSwatchProps(item) as Record<string, unknown>),\n h('span', api.getLegendLabelProps(item) as Record<string, unknown>, item.name),\n ])),\n renderLegendScale(api),\n ])\n }\n },\n})\n\n/** 视口:尺寸观测的宿主,块尺寸由组件槽决定、含坐标轴带。 */\nexport const XhCartesianChartViewport = defineComponent({\n name: 'XhCartesianChartViewport',\n setup(_, { slots }) {\n const ctx = useCartesianChartContext()\n return () => h('div', {\n ...ctx.api.value.getViewportProps() as Record<string, unknown>,\n ref: (el: unknown) => { ctx.viewportRef.value = el as HTMLElement },\n }, slots.default?.())\n },\n})\n\n/**\n * 绘图区:按场景生成网格、坐标轴、系列与前景层,层序由连接层分好。\n * 数据层画在画布上时前面再垫一层 svg(网格、坐标轴、参考带、准线)与画布;绘图区始终以同一个 key 在最后,\n * 渲染器切换时它不重建,焦点不丢。\n */\nexport const XhCartesianChartPlot = defineComponent({\n name: 'XhCartesianChartPlot',\n setup() {\n const ctx = useCartesianChartContext()\n const bindCanvas = (el: unknown): void => {\n ctx.canvasRef.value = el as HTMLCanvasElement | null\n }\n return () => {\n const api = ctx.api.value\n const plot = h('svg', { ...api.getPlotProps() as Record<string, unknown>, key: 'plot' }, [renderDefs(api), ...api.layers.plot.map(mark => renderMark(api, mark))])\n if (api.renderer !== 'canvas')\n return [plot]\n return [\n h('svg', { ...api.getUnderlayProps() as Record<string, unknown>, key: 'underlay' }, api.layers.underlay.map(mark => renderMark(api, mark))),\n h('canvas', { ...api.getCanvasProps() as Record<string, unknown>, key: 'canvas', ref: bindCanvas }),\n plot,\n ]\n }\n },\n})\n\n/** 缩放条:一条轨道上的窗口与两端的手柄;自变量方向不能缩放时收起。 */\nexport const XhCartesianChartZoomSlider = defineComponent({\n name: 'XhCartesianChartZoomSlider',\n setup() {\n const ctx = useCartesianChartContext()\n return () => {\n const api = ctx.api.value\n return h('div', api.getZoomSliderProps() as Record<string, unknown>, [\n h('div', api.getZoomTrackProps() as Record<string, unknown>, [\n h('div', api.getZoomWindowProps() as Record<string, unknown>, [\n h('span', api.getZoomHandleProps('start') as Record<string, unknown>),\n h('span', api.getZoomHandleProps('end') as Record<string, unknown>),\n ]),\n h('svg', api.getZoomPreviewProps() as Record<string, unknown>, [\n h('path', api.getZoomPreviewLineProps() as Record<string, unknown>),\n ]),\n ]),\n ])\n }\n },\n})\n\n/** 提示框:缺省内容按激活的数据生成,作用域插槽可替换。 */\nexport const XhCartesianChartTooltip = defineComponent({\n name: 'XhCartesianChartTooltip',\n slots: Object as SlotsType<{\n default?: (props: CartesianChartTooltipSlotProps) => VNode[]\n }>,\n setup(_, { slots }) {\n const ctx = useCartesianChartContext()\n return () => {\n const api = ctx.api.value\n return h('div', api.getTooltipProps() as Record<string, unknown>, slots.default\n ? slots.default({ active: api.active, tooltip: api.tooltip })\n : renderTooltipContent(api))\n }\n },\n})\n\n/** 空态:没有可画的数据时显示,缺省文字取文案。 */\nexport const XhCartesianChartEmpty = defineComponent({\n name: 'XhCartesianChartEmpty',\n setup(_, { slots }) {\n const ctx = useCartesianChartContext()\n return () => h('div', ctx.api.value.getEmptyProps() as Record<string, unknown>, slots.default?.() ?? ctx.api.value.emptyText)\n },\n})\n\n/** 根:铺开缺省结构或交给默认插槽,并在末尾追加摘要与数据表。 */\nexport const XhCartesianChartRoot = defineComponent({\n name: 'XhCartesianChartRoot',\n // 缺省值由机器与 connect 决定;普通类型省略 default,Boolean 显式保留 undefined\n props: {\n data: { type: [Array, Object] as PropType<readonly ChartRow[] | ColumnSource> },\n series: { type: Array as PropType<readonly CartesianSeries[]> },\n xAxis: { type: Object as PropType<CartesianAxis> },\n yAxis: { type: Object as PropType<CartesianAxis> },\n orientation: { type: String as PropType<CartesianOrientation> },\n renderer: { type: String as PropType<CartesianRenderer> },\n trigger: { type: String as PropType<CartesianTrigger> },\n totals: { type: Boolean, default: undefined },\n tooltipOrder: { type: String as PropType<CartesianTooltipOrder> },\n palette: { type: String as PropType<ChartPalette> },\n annotations: { type: Array as PropType<readonly CartesianAnnotation[]> },\n zoom: { type: String as PropType<CartesianZoom> },\n window: { type: Object as PropType<CartesianWindow> },\n defaultWindow: { type: Object as PropType<CartesianWindow> },\n follow: { type: Boolean, default: undefined },\n defaultFollow: { type: Boolean, default: undefined },\n brush: { type: String as PropType<CartesianBrush> },\n brushSelection: { type: Object as PropType<CartesianBrushSelection | null> },\n defaultBrushSelection: { type: Object as PropType<CartesianBrushSelection | null> },\n hiddenSeries: { type: Array as PropType<string[]> },\n defaultHiddenSeries: { type: Array as PropType<string[]> },\n activeKey: { type: [String, Number, Date, null] as PropType<ChartKey | null> },\n pending: { type: Boolean, default: undefined },\n animated: { type: Boolean, default: undefined },\n locale: { type: String },\n translations: { type: Object as PropType<Partial<CartesianChartTranslations>> },\n },\n // hidden-series-change / active-key-change 携带 details;update:* 携带裸值,支持 v-model\n emits: {\n 'hidden-series-change': (_details: PayloadOf<CartesianChartProps, 'onHiddenSeriesChange'>) => true,\n 'update:hiddenSeries': (_hidden: PayloadOf<CartesianChartProps, 'onHiddenSeriesChange'>['hiddenSeries']) => true,\n 'active-key-change': (_details: PayloadOf<CartesianChartProps, 'onActiveKeyChange'>) => true,\n 'update:activeKey': (_key: PayloadOf<CartesianChartProps, 'onActiveKeyChange'>['activeKey']) => true,\n 'window-change': (_details: PayloadOf<CartesianChartProps, 'onWindowChange'>) => true,\n 'update:window': (_window: PayloadOf<CartesianChartProps, 'onWindowChange'>['window']) => true,\n 'follow-change': (_details: PayloadOf<CartesianChartProps, 'onFollowChange'>) => true,\n 'update:follow': (_follow: PayloadOf<CartesianChartProps, 'onFollowChange'>['follow']) => true,\n 'brush-selection-change': (_details: PayloadOf<CartesianChartProps, 'onBrushSelectionChange'>) => true,\n 'update:brushSelection': (_selection: PayloadOf<CartesianChartProps, 'onBrushSelectionChange'>['selection']) => true,\n 'datum-active': (_details: PayloadOf<CartesianChartProps, 'onDatumActive'>) => true,\n 'datum-press': (_details: PayloadOf<CartesianChartProps, 'onDatumPress'>) => true,\n },\n slots: Object as SlotsType<{\n /** 自行摆放部件;不写时铺开缺省结构:图例、视口(绘图区与空态)、提示框。 */\n default?: (props: CartesianChartRootSlotProps) => VNode[]\n /** 缺省结构里的标题内容。 */\n caption?: () => VNode[]\n /** 缺省结构里的提示框内容。 */\n tooltip?: (props: CartesianChartTooltipSlotProps) => VNode[]\n /** 缺省结构里的空态内容。 */\n empty?: () => VNode[]\n }>,\n setup(props, { slots, emit }) {\n const ctx = useCartesianChart(withXhConfig('cartesian-chart', props) as CartesianChartProps, {\n onHiddenSeriesChange: (details) => {\n emit('hidden-series-change', details)\n emit('update:hiddenSeries', details.hiddenSeries)\n },\n onActiveKeyChange: (details) => {\n emit('active-key-change', details)\n emit('update:activeKey', details.activeKey)\n },\n onWindowChange: (details) => {\n emit('window-change', details)\n emit('update:window', details.window)\n },\n onFollowChange: (details) => {\n emit('follow-change', details)\n emit('update:follow', details.follow)\n },\n onBrushSelectionChange: (details) => {\n emit('brush-selection-change', details)\n emit('update:brushSelection', details.selection)\n },\n onDatumActive: details => emit('datum-active', details),\n onDatumPress: details => emit('datum-press', details),\n })\n provideCartesianChart(ctx)\n return () => {\n const api = ctx.api.value\n const content = slots.default\n ? slots.default({\n legendItems: api.legendItems,\n active: api.active,\n tooltip: api.tooltip,\n empty: api.empty,\n table: api.table,\n hiddenSeries: api.hiddenSeries,\n activeKey: api.activeKey,\n toggleSeries: api.toggleSeries,\n setFocusedDatum: api.setFocusedDatum,\n })\n : [\n ...(slots.caption ? [h(XhCartesianChartCaption, null, () => slots.caption?.())] : []),\n h(XhCartesianChartLegend),\n // 空态放进视口:叠在绘图区上居中,标题与图例不被盖住\n h(XhCartesianChartViewport, null, () => [\n h(XhCartesianChartPlot),\n h(XhCartesianChartEmpty, null, slots.empty ? () => slots.empty?.() : undefined),\n ]),\n h(XhCartesianChartZoomSlider),\n h(XhCartesianChartTooltip, null, slots.tooltip ? { default: slots.tooltip } : undefined),\n ]\n return h('figure', {\n ...api.getRootProps() as Record<string, unknown>,\n ref: (el: unknown) => { ctx.rootRef.value = el as HTMLElement },\n }, [...content, ...renderA11y(api)])\n }\n },\n})\n"],"mappings":"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"}
|
|
@@ -270,7 +270,8 @@ container: { type: Object } },
|
|
|
270
270
|
});
|
|
271
271
|
return () => h(XhPortal, {
|
|
272
272
|
to: props.container ?? ctx.portalTarget.value,
|
|
273
|
-
source: ctx.triggerRef
|
|
273
|
+
source: ctx.triggerRef,
|
|
274
|
+
present: ctx.visible.value
|
|
274
275
|
}, () => [h("div", {
|
|
275
276
|
...mergeProps(ctx.api.value.getPositionerProps(), attrs),
|
|
276
277
|
ref: (el) => {
|