@xihan-ui/vue 2.0.0 → 2.1.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 +258 -0
- package/dist/components/avatar-group/avatar-group.d.ts.map +1 -1
- package/dist/components/avatar-group/avatar-group.js +2 -1
- package/dist/components/avatar-group/avatar-group.js.map +1 -1
- package/dist/components/card/card.d.ts.map +1 -1
- package/dist/components/card/card.js +2 -1
- package/dist/components/card/card.js.map +1 -1
- package/dist/components/cascader/cascader.d.ts +9 -1
- package/dist/components/cascader/cascader.d.ts.map +1 -1
- package/dist/components/cascader/cascader.js +19 -1
- package/dist/components/cascader/cascader.js.map +1 -1
- package/dist/components/combobox/combobox.d.ts +18 -1
- package/dist/components/combobox/combobox.d.ts.map +1 -1
- package/dist/components/combobox/combobox.js +37 -4
- package/dist/components/combobox/combobox.js.map +1 -1
- package/dist/components/command/command.d.ts +23 -2
- package/dist/components/command/command.d.ts.map +1 -1
- package/dist/components/command/command.js +46 -4
- package/dist/components/command/command.js.map +1 -1
- package/dist/components/context-menu/context-menu.d.ts +14 -1
- package/dist/components/context-menu/context-menu.d.ts.map +1 -1
- package/dist/components/context-menu/context-menu.js +42 -12
- package/dist/components/context-menu/context-menu.js.map +1 -1
- package/dist/components/input-group/input-group.d.ts.map +1 -1
- package/dist/components/input-group/input-group.js +2 -1
- package/dist/components/input-group/input-group.js.map +1 -1
- package/dist/components/json-viewer/json-viewer.js.map +1 -1
- package/dist/components/kbd/kbd.d.ts.map +1 -1
- package/dist/components/kbd/kbd.js +27 -10
- package/dist/components/kbd/kbd.js.map +1 -1
- package/dist/components/listbox/listbox.d.ts +18 -1
- package/dist/components/listbox/listbox.d.ts.map +1 -1
- package/dist/components/listbox/listbox.js +37 -4
- package/dist/components/listbox/listbox.js.map +1 -1
- package/dist/components/mention/mention.d.ts +17 -1
- package/dist/components/mention/mention.d.ts.map +1 -1
- package/dist/components/mention/mention.js +36 -4
- package/dist/components/mention/mention.js.map +1 -1
- package/dist/components/menu/menu.d.ts +14 -1
- package/dist/components/menu/menu.d.ts.map +1 -1
- package/dist/components/menu/menu.js +63 -8
- package/dist/components/menu/menu.js.map +1 -1
- package/dist/components/menubar/menubar.d.ts +14 -2
- package/dist/components/menubar/menubar.d.ts.map +1 -1
- package/dist/components/menubar/menubar.js +43 -11
- package/dist/components/menubar/menubar.js.map +1 -1
- package/dist/components/page-header/page-header.d.ts.map +1 -1
- package/dist/components/page-header/page-header.js +2 -1
- package/dist/components/page-header/page-header.js.map +1 -1
- package/dist/components/pagination/pagination.js.map +1 -1
- package/dist/components/reasoning/reasoning.d.ts +1 -1
- package/dist/components/select/select.d.ts +18 -1
- package/dist/components/select/select.d.ts.map +1 -1
- package/dist/components/select/select.js +37 -4
- package/dist/components/select/select.js.map +1 -1
- package/dist/components/sortable/sortable.d.ts +1 -1
- package/dist/components/statistic/statistic.d.ts.map +1 -1
- package/dist/components/statistic/statistic.js +2 -1
- package/dist/components/statistic/statistic.js.map +1 -1
- package/dist/components/table/table.d.ts +2 -2
- package/dist/components/table/table.d.ts.map +1 -1
- package/dist/components/tag-group/tag-group.js +1 -1
- package/dist/components/tag-group/tag-group.js.map +1 -1
- package/dist/components/timeline/timeline.d.ts.map +1 -1
- package/dist/components/timeline/timeline.js +2 -1
- package/dist/components/timeline/timeline.js.map +1 -1
- package/dist/components/timer/timer.d.ts +1 -1
- package/dist/components/tour/tour.d.ts +1 -1
- package/dist/components/transfer/transfer.d.ts +9 -1
- package/dist/components/transfer/transfer.d.ts.map +1 -1
- package/dist/components/transfer/transfer.js +19 -1
- package/dist/components/transfer/transfer.js.map +1 -1
- package/dist/components/tree/tree.d.ts +9 -7
- package/dist/components/tree/tree.d.ts.map +1 -1
- package/dist/components/tree/tree.js +17 -15
- package/dist/components/tree/tree.js.map +1 -1
- package/dist/components/tree-select/tree-select.d.ts +9 -1
- package/dist/components/tree-select/tree-select.d.ts.map +1 -1
- package/dist/components/tree-select/tree-select.js +19 -1
- package/dist/components/tree-select/tree-select.js.map +1 -1
- package/dist/components/typography/typography.d.ts.map +1 -1
- package/dist/components/typography/typography.js +2 -1
- package/dist/components/typography/typography.js.map +1 -1
- package/dist/index.d.ts +13 -13
- package/dist/index.js +13 -13
- package/dist/package.js +1 -1
- package/dist/runtime/use-machine.js +3 -2
- package/dist/runtime/use-machine.js.map +1 -1
- package/dist/runtime/use-scrollbars.js +3 -1
- package/dist/runtime/use-scrollbars.js.map +1 -1
- package/package.json +14 -14
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tree.js","names":[],"sources":["../../../src/components/tree/tree.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// 提供 tree 相关实现。\n\nimport type { Direction } from '@xihan-ui/core'\nimport type { TreeApi, TreeNode, TreeNodeProps, TreeSchema } from '@xihan-ui/headless'\nimport type { PropType, Ref, SlotsType, VNode } from 'vue'\nimport type { PayloadOf } from '../../runtime/payload'\nimport type { TreeContext } from './use-tree'\nimport { computed, defineComponent, h, onBeforeUnmount, ref, watch } from 'vue'\nimport { withXhConfig } from '../../config/config'\nimport { provideTree, provideTreeNode, useTreeContext, useTreeNodeContext } from './context'\nimport { useTree } from './use-tree'\n\ntype TreeProps = TreeSchema['props']\n\n/** 默认插槽的载荷:可见行序列与展开、选中、焦点状态,以及按值判定与展开、收起、选中的动作。 */\nexport type TreeRootSlotProps = Pick<\n TreeApi,\n | 'visibleNodes'\n | 'expandedValue'\n | 'selection'\n | 'focusedValue'\n | 'isExpanded'\n | 'isSelected'\n | 'isIndeterminate'\n | 'expand'\n | 'collapse'\n | 'select'\n>\n\n/** 本节点持有焦点时,value 变更重新报告焦点节点,卸载时上报整树失焦 */\nfunction reportNodeFocus(ctx: TreeContext, el: Ref<HTMLElement | null>, value: () => string): void {\n watch(value, (next, prev) => {\n if (next === prev)\n return\n const { service } = ctx\n if (service.getStatus() !== 'Started')\n return\n if (el.value && service.scope.getActiveElement() === el.value)\n service.send({ type: 'NODE.FOCUS', value: next })\n })\n onBeforeUnmount(() => {\n const { service } = ctx\n // 整组一起卸载时根部件先停机,此刻送事件会在 dev 下抛\n if (service.getStatus() !== 'Started')\n return\n // 按「本节点当下正持有焦点」判定,不按 value 比对\n if (el.value && service.scope.getActiveElement() === el.value)\n service.send({ type: 'TREE.BLUR' })\n })\n}\n\nexport const XhTreeRoot = defineComponent({\n name: 'XhTreeRoot',\n // 有 connect 兜底的 prop:普通类型省略 default,Boolean 显式保留 undefined\n props: {\n collection: { type: Array as PropType<TreeNode[]> },\n /** 外框形态:outline 带描边与底色(默认),subtle 淡底无描边,ghost 去掉描边与底色只保留行。 */\n variant: { type: String as PropType<TreeProps['variant']> },\n expandedValue: { type: Array as PropType<string[]> },\n defaultExpandedValue: { type: Array as PropType<string[]> },\n selection: { type: Array as PropType<string[]> },\n defaultSelection: { type: Array as PropType<string[]> },\n multiple: { type: Boolean, default: undefined },\n /** 末端层的排布方式,默认 vertical;horizontal 使子节点全为叶子的层并排铺开。 */\n leafOrientation: { type: String as PropType<TreeProps['leafOrientation']> },\n cascade: Boolean,\n checkedStrategy: { type: String as PropType<TreeProps['checkedStrategy']> },\n expandOnClick: { type: Boolean, default: undefined },\n disabled: Boolean,\n loading: Boolean,\n loop: { type: Boolean, default: undefined },\n typeahead: { type: Boolean, default: undefined },\n dir: { type: String as PropType<Direction> },\n /** 节点可以拖动移动。整个节点都是拖动源,不另设把手。 */\n nodeDraggable: Boolean,\n /** 本次移动是否允许。收到的是折算后的落点(移动到哪个父节点下的第几位)。未提供时全部允许。 */\n allowDrop: { type: Function as PropType<TreeProps['allowDrop']> },\n translations: { type: Object as PropType<TreeProps['translations']> },\n },\n // *-change 携带 { value },update:* 携带裸集合;回传值恒为数组,单选时长度 ≤ 1\n emits: {\n 'expanded-value-change': (_details: PayloadOf<TreeProps, 'onExpandedValueChange'>) => true,\n 'update:expandedValue': (_value: PayloadOf<TreeProps, 'onExpandedValueChange'>['value']) => true,\n 'selection-change': (_details: PayloadOf<TreeProps, 'onSelectionChange'>) => true,\n 'update:selection': (_value: PayloadOf<TreeProps, 'onSelectionChange'>['value']) => true,\n // 搬家是通知,节点顺序的真源在使用者的数据里,故没有配对的 update:*\n 'node-move': (_move: PayloadOf<TreeProps, 'onNodeMove'>) => true,\n },\n slots: Object as SlotsType<{\n default?: (props: TreeRootSlotProps) => VNode[]\n }>,\n setup(props, { slots, emit }) {\n const onExpandedValueChange: TreeProps['onExpandedValueChange'] = (details) => {\n emit('expanded-value-change', details)\n emit('update:expandedValue', details.value)\n }\n const onSelectionChange: TreeProps['onSelectionChange'] = (details) => {\n emit('selection-change', details)\n emit('update:selection', details.value)\n }\n const onNodeMove: TreeProps['onNodeMove'] = (move) => {\n emit('node-move', move)\n }\n const ctx = useTree(withXhConfig('tree', props) as TreeProps, onExpandedValueChange, onSelectionChange, onNodeMove)\n provideTree(ctx)\n return () => h('div', ctx.api.value.getRootProps() as Record<string, unknown>, slots.default?.({\n visibleNodes: ctx.api.value.visibleNodes,\n expandedValue: ctx.api.value.expandedValue,\n selection: ctx.api.value.selection,\n focusedValue: ctx.api.value.focusedValue,\n isExpanded: ctx.api.value.isExpanded,\n isSelected: ctx.api.value.isSelected,\n isIndeterminate: ctx.api.value.isIndeterminate,\n expand: ctx.api.value.expand,\n collapse: ctx.api.value.collapse,\n select: ctx.api.value.select,\n }))\n },\n})\n\nexport const XhTreeLabel = defineComponent({\n name: 'XhTreeLabel',\n setup(_, { slots }) {\n const ctx = useTreeContext()\n return () => h('span', ctx.api.value.getLabelProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhTreeTree = defineComponent({\n name: 'XhTreeTree',\n setup(_, { slots }) {\n const ctx = useTreeContext()\n return () => h('div', ctx.api.value.getTreeProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhTreeEmpty = defineComponent({\n name: 'XhTreeEmpty',\n setup(_, { slots }) {\n const ctx = useTreeContext()\n // 空态占位:写在 root 里、tree 的兄弟,不进 role=tree 的拥有关系。\n // 给了 collection 时收放归连接层,节点手写时归作者\n return () => h('div', ctx.api.value.getEmptyProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhTreeLoading = defineComponent({\n name: 'XhTreeLoading',\n setup(_, { slots }) {\n const ctx = useTreeContext()\n // 在途占位:与空态占位同一个位置,取数期间顶上来\n return () => h('div', ctx.api.value.getLoadingProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\n/**\n * 拖动过程的读屏播报区,视觉上不可见。\n *\n * 放在 root 中、与 tree 部件平级。它必须在拖动开始之前就在 DOM 上:\n * 读屏不播报后插入的节点,等到拾起才渲染等于没有。\n */\nexport const XhTreeLiveRegion = defineComponent({\n name: 'XhTreeLiveRegion',\n setup() {\n const ctx = useTreeContext()\n return () => h(\n 'div',\n ctx.api.value.getLiveRegionProps() as Record<string, unknown>,\n ctx.service.context.get('announcement'),\n )\n },\n})\n\nexport const XhTreeItem = defineComponent({\n name: 'XhTreeItem',\n props: {\n value: { type: String, required: true },\n },\n setup(props, { slots }) {\n const ctx = useTreeContext()\n const node = computed<TreeNodeProps>(() => ({ value: props.value }))\n provideTreeNode({ node })\n const el = ref<HTMLElement | null>(null)\n reportNodeFocus(ctx, el, () => props.value)\n return () => h(\n 'div',\n { ...ctx.api.value.getItemProps(node.value) as Record<string, unknown>, ref: el },\n slots.default?.(),\n )\n },\n})\n\nexport const XhTreeItemText = defineComponent({\n name: 'XhTreeItemText',\n setup(_, { slots }) {\n const ctx = useTreeContext()\n const { node } = useTreeNodeContext()\n return () => h('span', ctx.api.value.getItemTextProps(node.value) as Record<string, unknown>, slots.default?.())\n },\n})\n\n/**\n * 节点拖拽把手。放在节点中,自带 touch-action: none,按下即拖动,不等待激活距离。\n * 对读屏隐藏、也不占 Tab 位;键盘移动由树上的 Alt + 方向键承担。\n * 整个节点拖动的路径照常可用,把手是叠加的第二个入口。\n */\nexport const XhTreeNodeDragTrigger = defineComponent({\n name: 'XhTreeNodeDragTrigger',\n setup(_, { slots }) {\n const ctx = useTreeContext()\n const { node } = useTreeNodeContext()\n return () => h('span', ctx.api.value.getNodeDragTriggerProps(node.value) as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhTreeItemCheckbox = defineComponent({\n name: 'XhTreeItemCheckbox',\n setup(_, { slots }) {\n const ctx = useTreeContext()\n const { node } = useTreeNodeContext()\n return () => h('span', ctx.api.value.getItemCheckboxProps(node.value) as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhTreeBranchCheckbox = defineComponent({\n name: 'XhTreeBranchCheckbox',\n setup(_, { slots }) {\n const ctx = useTreeContext()\n const { node } = useTreeNodeContext()\n return () => h('span', ctx.api.value.getBranchCheckboxProps(node.value) as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhTreeItemIndicator = defineComponent({\n name: 'XhTreeItemIndicator',\n setup(_, { slots }) {\n const ctx = useTreeContext()\n const { node } = useTreeNodeContext()\n return () => h('span', ctx.api.value.getItemIndicatorProps(node.value) as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhTreeBranch = defineComponent({\n name: 'XhTreeBranch',\n props: {\n value: { type: String, required: true },\n },\n setup(props, { slots }) {\n const ctx = useTreeContext()\n const node = computed<TreeNodeProps>(() => ({ value: props.value }))\n // 分支自身也是 treeitem,供其子部件读取;子节点各自再 provide 一层\n provideTreeNode({ node })\n const el = ref<HTMLElement | null>(null)\n reportNodeFocus(ctx, el, () => props.value)\n return () => h(\n 'div',\n { ...ctx.api.value.getBranchProps(node.value) as Record<string, unknown>, ref: el },\n slots.default?.(),\n )\n },\n})\n\nexport const XhTreeBranchControl = defineComponent({\n name: 'XhTreeBranchControl',\n setup(_, { slots }) {\n const ctx = useTreeContext()\n const { node } = useTreeNodeContext()\n return () => h('div', ctx.api.value.getBranchControlProps(node.value) as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhTreeBranchTrigger = defineComponent({\n name: 'XhTreeBranchTrigger',\n setup(_, { slots }) {\n const ctx = useTreeContext()\n const { node } = useTreeNodeContext()\n return () => h('span', ctx.api.value.getBranchTriggerProps(node.value) as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhTreeBranchIndicator = defineComponent({\n name: 'XhTreeBranchIndicator',\n setup(_, { slots }) {\n const ctx = useTreeContext()\n const { node } = useTreeNodeContext()\n return () => h('span', ctx.api.value.getBranchIndicatorProps(node.value) as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhTreeBranchText = defineComponent({\n name: 'XhTreeBranchText',\n setup(_, { slots }) {\n const ctx = useTreeContext()\n const { node } = useTreeNodeContext()\n return () => h('span', ctx.api.value.getBranchTextProps(node.value) as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhTreeBranchContent = defineComponent({\n name: 'XhTreeBranchContent',\n setup(_, { slots }) {\n const ctx = useTreeContext()\n const { node } = useTreeNodeContext()\n // 收起只加 hidden,不卸载子树节点\n return () => h('div', ctx.api.value.getBranchContentProps(node.value) as Record<string, unknown>, slots.default?.())\n },\n})\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"tree.js","names":[],"sources":["../../../src/components/tree/tree.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// 提供 tree 相关实现。\n\nimport type { Direction } from '@xihan-ui/core'\nimport type { TreeApi, TreeNode, TreeNodeProps, TreeSchema } from '@xihan-ui/headless'\nimport type { PropType, Ref, SlotsType, VNode } from 'vue'\nimport type { PayloadOf } from '../../runtime/payload'\nimport type { TreeContext } from './use-tree'\nimport { computed, defineComponent, h, onBeforeUnmount, ref, watch } from 'vue'\nimport { withXhConfig } from '../../config/config'\nimport { provideTree, provideTreeNode, useTreeContext, useTreeNodeContext } from './context'\nimport { useTree } from './use-tree'\n\ntype TreeProps = TreeSchema['props']\n\n/** 默认插槽的载荷:可见行序列与展开、选中、焦点状态,以及按值判定与展开、收起、选中的动作。 */\nexport type TreeRootSlotProps = Pick<\n TreeApi,\n | 'visibleNodes'\n | 'expandedValue'\n | 'selection'\n | 'focusedValue'\n | 'isExpanded'\n | 'isSelected'\n | 'isIndeterminate'\n | 'expand'\n | 'collapse'\n | 'select'\n>\n\n/** 本节点持有焦点时,value 变更重新报告焦点节点,卸载时上报整树失焦 */\nfunction reportNodeFocus(ctx: TreeContext, el: Ref<HTMLElement | null>, value: () => string): void {\n watch(value, (next, prev) => {\n if (next === prev)\n return\n const { service } = ctx\n if (service.getStatus() !== 'Started')\n return\n if (el.value && service.scope.getActiveElement() === el.value)\n service.send({ type: 'NODE.FOCUS', value: next })\n })\n onBeforeUnmount(() => {\n const { service } = ctx\n // 整组一起卸载时根部件先停机,此刻送事件会在 dev 下抛\n if (service.getStatus() !== 'Started')\n return\n // 按「本节点当下正持有焦点」判定,不按 value 比对\n if (el.value && service.scope.getActiveElement() === el.value)\n service.send({ type: 'TREE.BLUR' })\n })\n}\n\nexport const XhTreeRoot = defineComponent({\n name: 'XhTreeRoot',\n // 有 connect 兜底的 prop:普通类型省略 default,Boolean 显式保留 undefined\n props: {\n collection: { type: Array as PropType<TreeNode[]> },\n /** 外框形态:outline 带描边与底色(默认),subtle 淡底无描边,ghost 去掉描边与底色只保留行。 */\n variant: { type: String as PropType<TreeProps['variant']> },\n expandedValue: { type: Array as PropType<string[]> },\n defaultExpandedValue: { type: Array as PropType<string[]> },\n selection: { type: Array as PropType<string[]> },\n defaultSelection: { type: Array as PropType<string[]> },\n multiple: { type: Boolean, default: undefined },\n /** 末端层的排布方式,默认 vertical;horizontal 使子节点全为叶子的层并排铺开。 */\n leafOrientation: { type: String as PropType<TreeProps['leafOrientation']> },\n cascade: Boolean,\n checkedStrategy: { type: String as PropType<TreeProps['checkedStrategy']> },\n expandOnClick: { type: Boolean, default: undefined },\n disabled: Boolean,\n loading: Boolean,\n loop: { type: Boolean, default: undefined },\n typeahead: { type: Boolean, default: undefined },\n dir: { type: String as PropType<Direction> },\n /** 节点可以拖动移动。整个节点都是拖动源,不另设把手。 */\n nodeDraggable: Boolean,\n /** 本次移动是否允许。收到的是折算后的落点(移动到哪个父节点下的第几位)。未提供时全部允许。 */\n allowDrop: { type: Function as PropType<TreeProps['allowDrop']> },\n translations: { type: Object as PropType<TreeProps['translations']> },\n },\n // *-change 携带 { value },update:* 携带裸集合;回传值恒为数组,单选时长度 ≤ 1\n emits: {\n 'expanded-value-change': (_details: PayloadOf<TreeProps, 'onExpandedValueChange'>) => true,\n 'update:expandedValue': (_value: PayloadOf<TreeProps, 'onExpandedValueChange'>['value']) => true,\n 'selection-change': (_details: PayloadOf<TreeProps, 'onSelectionChange'>) => true,\n 'update:selection': (_value: PayloadOf<TreeProps, 'onSelectionChange'>['value']) => true,\n // 搬家是通知,节点顺序的真源在使用者的数据里,故没有配对的 update:*\n 'node-move': (_move: PayloadOf<TreeProps, 'onNodeMove'>) => true,\n },\n slots: Object as SlotsType<{\n default?: (props: TreeRootSlotProps) => VNode[]\n }>,\n setup(props, { slots, emit }) {\n const onExpandedValueChange: TreeProps['onExpandedValueChange'] = (details) => {\n emit('expanded-value-change', details)\n emit('update:expandedValue', details.value)\n }\n const onSelectionChange: TreeProps['onSelectionChange'] = (details) => {\n emit('selection-change', details)\n emit('update:selection', details.value)\n }\n const onNodeMove: TreeProps['onNodeMove'] = (move) => {\n emit('node-move', move)\n }\n const ctx = useTree(withXhConfig('tree', props) as TreeProps, onExpandedValueChange, onSelectionChange, onNodeMove)\n provideTree(ctx)\n return () => h('div', ctx.api.value.getRootProps() as Record<string, unknown>, slots.default?.({\n visibleNodes: ctx.api.value.visibleNodes,\n expandedValue: ctx.api.value.expandedValue,\n selection: ctx.api.value.selection,\n focusedValue: ctx.api.value.focusedValue,\n isExpanded: ctx.api.value.isExpanded,\n isSelected: ctx.api.value.isSelected,\n isIndeterminate: ctx.api.value.isIndeterminate,\n expand: ctx.api.value.expand,\n collapse: ctx.api.value.collapse,\n select: ctx.api.value.select,\n }))\n },\n})\n\nexport const XhTreeLabel = defineComponent({\n name: 'XhTreeLabel',\n setup(_, { slots }) {\n const ctx = useTreeContext()\n return () => h('span', ctx.api.value.getLabelProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhTreeTree = defineComponent({\n name: 'XhTreeTree',\n setup(_, { slots }) {\n const ctx = useTreeContext()\n return () => h('div', ctx.api.value.getTreeProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhTreeEmpty = defineComponent({\n name: 'XhTreeEmpty',\n setup(_, { slots }) {\n const ctx = useTreeContext()\n // 空态占位:写在 root 里、tree 的兄弟,不进 role=tree 的拥有关系。\n // 给了 collection 时收放归连接层,节点手写时归作者\n return () => h('div', ctx.api.value.getEmptyProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhTreeLoading = defineComponent({\n name: 'XhTreeLoading',\n setup(_, { slots }) {\n const ctx = useTreeContext()\n // 在途占位:与空态占位同一个位置,取数期间顶上来\n return () => h('div', ctx.api.value.getLoadingProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\n/**\n * 拖动过程的读屏播报区,视觉上不可见。\n *\n * 放在 root 中、与 tree 部件平级。它必须在拖动开始之前就在 DOM 上:\n * 读屏不播报后插入的节点,等到拾起才渲染等于没有。\n */\nexport const XhTreeLiveRegion = defineComponent({\n name: 'XhTreeLiveRegion',\n setup() {\n const ctx = useTreeContext()\n return () => h(\n 'div',\n ctx.api.value.getLiveRegionProps() as Record<string, unknown>,\n ctx.service.context.get('announcement'),\n )\n },\n})\n\nexport const XhTreeItem = defineComponent({\n name: 'XhTreeItem',\n props: {\n value: { type: String, required: true },\n },\n setup(props, { slots }) {\n const ctx = useTreeContext()\n const node = computed<TreeNodeProps>(() => ({ value: props.value }))\n provideTreeNode({ node })\n const el = ref<HTMLElement | null>(null)\n reportNodeFocus(ctx, el, () => props.value)\n return () => h(\n 'div',\n { ...ctx.api.value.getItemProps(node.value) as Record<string, unknown>, ref: el },\n slots.default?.(),\n )\n },\n})\n\nexport const XhTreeItemText = defineComponent({\n name: 'XhTreeItemText',\n setup(_, { slots }) {\n const ctx = useTreeContext()\n const { node } = useTreeNodeContext()\n return () => h('span', ctx.api.value.getItemTextProps(node.value) as Record<string, unknown>, slots.default?.())\n },\n})\n\n/** 条目的第 2 行副文本,跨文字槽、走 muted 档 */\nexport const XhTreeItemDescription = defineComponent({\n name: 'XhTreeItemDescription',\n setup(_, { slots }) {\n const ctx = useTreeContext()\n const { node } = useTreeNodeContext()\n return () => h('span', ctx.api.value.getItemDescriptionProps(node.value) as Record<string, unknown>, slots.default?.())\n },\n})\n\n/** 条目行尾的作者内容(计数、徽标) */\nexport const XhTreeItemSuffix = defineComponent({\n name: 'XhTreeItemSuffix',\n setup(_, { slots }) {\n const ctx = useTreeContext()\n const { node } = useTreeNodeContext()\n return () => h('span', ctx.api.value.getItemSuffixProps(node.value) as Record<string, unknown>, slots.default?.())\n },\n})\n\n/**\n * 节点拖拽把手。放在节点中,自带 touch-action: none,按下即拖动,不等待激活距离。\n * 对读屏隐藏、也不占 Tab 位;键盘移动由树上的 Alt + 方向键承担。\n * 整个节点拖动的路径照常可用,把手是叠加的第二个入口。\n */\nexport const XhTreeNodeDragTrigger = defineComponent({\n name: 'XhTreeNodeDragTrigger',\n setup(_, { slots }) {\n const ctx = useTreeContext()\n const { node } = useTreeNodeContext()\n return () => h('span', ctx.api.value.getNodeDragTriggerProps(node.value) as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhTreeItemIndicator = defineComponent({\n name: 'XhTreeItemIndicator',\n setup(_, { slots }) {\n const ctx = useTreeContext()\n const { node } = useTreeNodeContext()\n return () => h('span', ctx.api.value.getItemIndicatorProps(node.value) as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhTreeBranch = defineComponent({\n name: 'XhTreeBranch',\n props: {\n value: { type: String, required: true },\n },\n setup(props, { slots }) {\n const ctx = useTreeContext()\n const node = computed<TreeNodeProps>(() => ({ value: props.value }))\n // 分支自身也是 treeitem,供其子部件读取;子节点各自再 provide 一层\n provideTreeNode({ node })\n const el = ref<HTMLElement | null>(null)\n reportNodeFocus(ctx, el, () => props.value)\n return () => h(\n 'div',\n { ...ctx.api.value.getBranchProps(node.value) as Record<string, unknown>, ref: el },\n slots.default?.(),\n )\n },\n})\n\nexport const XhTreeBranchControl = defineComponent({\n name: 'XhTreeBranchControl',\n setup(_, { slots }) {\n const ctx = useTreeContext()\n const { node } = useTreeNodeContext()\n return () => h('div', ctx.api.value.getBranchControlProps(node.value) as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhTreeBranchTrigger = defineComponent({\n name: 'XhTreeBranchTrigger',\n setup(_, { slots }) {\n const ctx = useTreeContext()\n const { node } = useTreeNodeContext()\n return () => h('span', ctx.api.value.getBranchTriggerProps(node.value) as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhTreeBranchIndicator = defineComponent({\n name: 'XhTreeBranchIndicator',\n setup(_, { slots }) {\n const ctx = useTreeContext()\n const { node } = useTreeNodeContext()\n return () => h('span', ctx.api.value.getBranchIndicatorProps(node.value) as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhTreeBranchText = defineComponent({\n name: 'XhTreeBranchText',\n setup(_, { slots }) {\n const ctx = useTreeContext()\n const { node } = useTreeNodeContext()\n return () => h('span', ctx.api.value.getBranchTextProps(node.value) as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhTreeBranchContent = defineComponent({\n name: 'XhTreeBranchContent',\n setup(_, { slots }) {\n const ctx = useTreeContext()\n const { node } = useTreeNodeContext()\n // 收起只加 hidden,不卸载子树节点\n return () => h('div', ctx.api.value.getBranchContentProps(node.value) as Record<string, unknown>, slots.default?.())\n },\n})\n"],"mappings":"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"}
|
|
@@ -260,6 +260,14 @@ declare const XhTreeSelectItem: import("vue").DefineComponent<import("vue").Extr
|
|
|
260
260
|
declare const XhTreeSelectItemText: import("vue").DefineComponent<{}, () => VNode<import("vue").RendererNode, import("vue").RendererElement, {
|
|
261
261
|
[key: string]: any;
|
|
262
262
|
}>, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
|
|
263
|
+
/** 条目的第 2 行副文本,跨文字槽、走 muted 档 */
|
|
264
|
+
declare const XhTreeSelectItemDescription: import("vue").DefineComponent<{}, () => VNode<import("vue").RendererNode, import("vue").RendererElement, {
|
|
265
|
+
[key: string]: any;
|
|
266
|
+
}>, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
|
|
267
|
+
/** 条目行尾的作者内容(计数、徽标) */
|
|
268
|
+
declare const XhTreeSelectItemSuffix: import("vue").DefineComponent<{}, () => VNode<import("vue").RendererNode, import("vue").RendererElement, {
|
|
269
|
+
[key: string]: any;
|
|
270
|
+
}>, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
|
|
263
271
|
declare const XhTreeSelectItemIndicator: import("vue").DefineComponent<{}, () => VNode<import("vue").RendererNode, import("vue").RendererElement, {
|
|
264
272
|
[key: string]: any;
|
|
265
273
|
}>, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
|
|
@@ -316,5 +324,5 @@ declare const XhTreeSelectHiddenInput: import("vue").DefineComponent<{}, () => V
|
|
|
316
324
|
[key: string]: any;
|
|
317
325
|
}>[], {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
|
|
318
326
|
//#endregion
|
|
319
|
-
export { TreeSelectRootSlotProps, XhTreeSelectBranch, XhTreeSelectBranchContent, XhTreeSelectBranchControl, XhTreeSelectBranchEmpty, XhTreeSelectBranchError, XhTreeSelectBranchIndicator, XhTreeSelectBranchLoading, XhTreeSelectBranchRetryTrigger, XhTreeSelectBranchText, XhTreeSelectBranchTrigger, XhTreeSelectClearTrigger, XhTreeSelectContent, XhTreeSelectControl, XhTreeSelectEmpty, XhTreeSelectFooter, XhTreeSelectHiddenInput, XhTreeSelectIndicator, XhTreeSelectItem, XhTreeSelectItemIndicator, XhTreeSelectItemText, XhTreeSelectLabel, XhTreeSelectLoading, XhTreeSelectPositioner, XhTreeSelectRoot, XhTreeSelectTree, XhTreeSelectTrigger, XhTreeSelectValueText };
|
|
327
|
+
export { TreeSelectRootSlotProps, XhTreeSelectBranch, XhTreeSelectBranchContent, XhTreeSelectBranchControl, XhTreeSelectBranchEmpty, XhTreeSelectBranchError, XhTreeSelectBranchIndicator, XhTreeSelectBranchLoading, XhTreeSelectBranchRetryTrigger, XhTreeSelectBranchText, XhTreeSelectBranchTrigger, XhTreeSelectClearTrigger, XhTreeSelectContent, XhTreeSelectControl, XhTreeSelectEmpty, XhTreeSelectFooter, XhTreeSelectHiddenInput, XhTreeSelectIndicator, XhTreeSelectItem, XhTreeSelectItemDescription, XhTreeSelectItemIndicator, XhTreeSelectItemSuffix, XhTreeSelectItemText, XhTreeSelectLabel, XhTreeSelectLoading, XhTreeSelectPositioner, XhTreeSelectRoot, XhTreeSelectTree, XhTreeSelectTrigger, XhTreeSelectValueText };
|
|
320
328
|
//# sourceMappingURL=tree-select.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tree-select.d.ts","names":[],"sources":["../../../src/components/tree-select/tree-select.ts"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"tree-select.d.ts","names":[],"sources":["../../../src/components/tree-select/tree-select.ts"],"mappings":"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"}
|
|
@@ -325,6 +325,24 @@ const XhTreeSelectItemText = defineComponent({
|
|
|
325
325
|
return () => h("span", ctx.api.value.getItemTextProps(node.value), slots.default?.());
|
|
326
326
|
}
|
|
327
327
|
});
|
|
328
|
+
/** 条目的第 2 行副文本,跨文字槽、走 muted 档 */
|
|
329
|
+
const XhTreeSelectItemDescription = defineComponent({
|
|
330
|
+
name: "XhTreeSelectItemDescription",
|
|
331
|
+
setup(_, { slots }) {
|
|
332
|
+
const ctx = useTreeSelectContext();
|
|
333
|
+
const { node } = useTreeSelectNodeContext();
|
|
334
|
+
return () => h("span", ctx.api.value.getItemDescriptionProps(node.value), slots.default?.());
|
|
335
|
+
}
|
|
336
|
+
});
|
|
337
|
+
/** 条目行尾的作者内容(计数、徽标) */
|
|
338
|
+
const XhTreeSelectItemSuffix = defineComponent({
|
|
339
|
+
name: "XhTreeSelectItemSuffix",
|
|
340
|
+
setup(_, { slots }) {
|
|
341
|
+
const ctx = useTreeSelectContext();
|
|
342
|
+
const { node } = useTreeSelectNodeContext();
|
|
343
|
+
return () => h("span", ctx.api.value.getItemSuffixProps(node.value), slots.default?.());
|
|
344
|
+
}
|
|
345
|
+
});
|
|
328
346
|
const XhTreeSelectItemIndicator = defineComponent({
|
|
329
347
|
name: "XhTreeSelectItemIndicator",
|
|
330
348
|
setup(_, { slots }) {
|
|
@@ -493,6 +511,6 @@ function renderDefaultTree(collection, label, clearable) {
|
|
|
493
511
|
];
|
|
494
512
|
}
|
|
495
513
|
//#endregion
|
|
496
|
-
export { XhTreeSelectBranch, XhTreeSelectBranchContent, XhTreeSelectBranchControl, XhTreeSelectBranchEmpty, XhTreeSelectBranchError, XhTreeSelectBranchIndicator, XhTreeSelectBranchLoading, XhTreeSelectBranchRetryTrigger, XhTreeSelectBranchText, XhTreeSelectBranchTrigger, XhTreeSelectClearTrigger, XhTreeSelectContent, XhTreeSelectControl, XhTreeSelectEmpty, XhTreeSelectFooter, XhTreeSelectHiddenInput, XhTreeSelectIndicator, XhTreeSelectItem, XhTreeSelectItemIndicator, XhTreeSelectItemText, XhTreeSelectLabel, XhTreeSelectLoading, XhTreeSelectPositioner, XhTreeSelectRoot, XhTreeSelectTree, XhTreeSelectTrigger, XhTreeSelectValueText };
|
|
514
|
+
export { XhTreeSelectBranch, XhTreeSelectBranchContent, XhTreeSelectBranchControl, XhTreeSelectBranchEmpty, XhTreeSelectBranchError, XhTreeSelectBranchIndicator, XhTreeSelectBranchLoading, XhTreeSelectBranchRetryTrigger, XhTreeSelectBranchText, XhTreeSelectBranchTrigger, XhTreeSelectClearTrigger, XhTreeSelectContent, XhTreeSelectControl, XhTreeSelectEmpty, XhTreeSelectFooter, XhTreeSelectHiddenInput, XhTreeSelectIndicator, XhTreeSelectItem, XhTreeSelectItemDescription, XhTreeSelectItemIndicator, XhTreeSelectItemSuffix, XhTreeSelectItemText, XhTreeSelectLabel, XhTreeSelectLoading, XhTreeSelectPositioner, XhTreeSelectRoot, XhTreeSelectTree, XhTreeSelectTrigger, XhTreeSelectValueText };
|
|
497
515
|
|
|
498
516
|
//# sourceMappingURL=tree-select.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tree-select.js","names":[],"sources":["../../../src/components/tree-select/tree-select.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// 提供 tree select 相关实现。\n\nimport type { ControlVariant, Direction, Placement, Size, Tone } from '@xihan-ui/core'\nimport type { TreeSelectApi, TreeSelectNode, TreeSelectNodeProps, TreeSelectSchema } from '@xihan-ui/headless'\nimport type { PropType, Ref, SlotsType, VNode } from 'vue'\nimport type { PayloadOf } from '../../runtime/payload'\nimport type { TreeSelectContext } from './use-tree-select'\nimport { computed, defineComponent, h, mergeProps, onBeforeUnmount, onMounted, ref, watch } from 'vue'\nimport { withXhConfig } from '../../config/config'\nimport { XhPortal } from '../../runtime/portal'\nimport { useScrollbars } from '../../runtime/use-scrollbars'\nimport { useFieldLabelWiring, useFieldStateWiring } from '../field/use-field-control'\nimport { useFormControlProps } from '../form/use-form-control'\nimport { provideTreeSelect, provideTreeSelectContent, provideTreeSelectNode, useTreeSelectContentContext, useTreeSelectContext, useTreeSelectNodeContext } from './context'\nimport { useTreeSelect } from './use-tree-select'\n\ntype TreeSelectProps = TreeSelectSchema['props']\n\n/** 默认插槽的载荷:展开与选中状态、可见行序列、节点状态判定与写值方法。 */\nexport type TreeSelectRootSlotProps = Pick<\n TreeSelectApi,\n | 'open'\n | 'value'\n | 'expandedValue'\n | 'visibleNodes'\n | 'focusedValue'\n | 'empty'\n | 'loading'\n | 'displayText'\n | 'canClear'\n | 'isSelected'\n | 'isIndeterminate'\n | 'isExpanded'\n | 'branchLoadState'\n | 'setOpen'\n | 'setValue'\n | 'setExpandedValue'\n | 'expand'\n | 'collapse'\n | 'retryBranch'\n | 'select'\n | 'clear'\n>\n\n/** 本节点持有焦点时,value 变更重新报告焦点节点,卸载时上报焦点丢失 */\nfunction reportNodeFocus(ctx: TreeSelectContext, el: Ref<HTMLElement | null>, value: () => string): void {\n let registered: string | null = null\n watch(value, (next, prev) => {\n if (next === prev)\n return\n const { service } = ctx\n if (service.getStatus() !== 'Started')\n return\n if (el.value && service.scope.getActiveElement() === el.value)\n service.send({ type: 'NODE.FOCUS', value: next })\n if (registered !== null) {\n service.send({ type: 'NODE.UNMOUNT', value: prev })\n service.send({ type: 'NODE.MOUNT', value: next })\n registered = next\n }\n })\n onMounted(() => queueMicrotask(() => {\n if (ctx.service.getStatus() !== 'Started')\n return\n registered = value()\n ctx.service.send({ type: 'NODE.MOUNT', value: registered })\n }))\n onBeforeUnmount(() => {\n const { service } = ctx\n // 整组一起卸载时根部件先停机,此刻送事件会在 dev 下抛\n if (service.getStatus() !== 'Started')\n return\n if (registered !== null)\n service.send({ type: 'NODE.UNMOUNT', value: registered })\n // 按「本节点当下正持有焦点」判定,不按 value 比对\n if (el.value && service.scope.getActiveElement() === el.value)\n service.send({ type: 'NODE.LOST' })\n })\n}\n\nexport const XhTreeSelectRoot = defineComponent({\n name: 'XhTreeSelectRoot',\n // 有 connect 兜底的 prop:普通类型省略 default,Boolean 显式保留 undefined\n props: {\n collection: { type: Array as PropType<TreeSelectNode[]> },\n loadChildren: { type: Function as PropType<TreeSelectProps['loadChildren']> },\n /** 标题文字。提供后不必再写 label 部件;需要放置其他内容时改用 label 插槽。 */\n label: { type: String },\n /** 自动渲染树中是否带清空按钮;手写部件不使用它,写了节点即可清空。 */\n clearable: Boolean,\n value: { type: [String, Array] as PropType<string | string[]> },\n defaultValue: { type: [String, Array] as PropType<string | string[]> },\n expandedValue: { type: Array as PropType<string[]> },\n defaultExpandedValue: { type: Array as PropType<string[]> },\n open: { type: Boolean, default: undefined },\n defaultOpen: Boolean,\n multiple: Boolean,\n cascade: Boolean,\n checkedStrategy: { type: String as PropType<TreeSelectProps['checkedStrategy']> },\n disabled: { type: Boolean, default: undefined },\n readOnly: { type: Boolean, default: undefined },\n invalid: { type: Boolean, default: undefined },\n loading: Boolean,\n variant: { type: String as PropType<ControlVariant> },\n tone: { type: String as PropType<Tone> },\n size: { type: String as PropType<Size> },\n placeholder: { type: String },\n translations: { type: Object as PropType<TreeSelectProps['translations']> },\n placement: { type: String as PropType<Placement> },\n offset: { type: Number },\n loop: { type: Boolean, default: undefined },\n dir: { type: String as PropType<Direction> },\n name: { type: String },\n form: { type: String },\n },\n // *-change 携带 details 对象,update:* 携带裸值;选中值恒为数组,单选时长度 ≤ 1\n emits: {\n 'value-change': (_details: PayloadOf<TreeSelectProps, 'onValueChange'>) => true,\n 'expanded-value-change': (_details: PayloadOf<TreeSelectProps, 'onExpandedValueChange'>) => true,\n 'open-change': (_details: PayloadOf<TreeSelectProps, 'onOpenChange'>) => true,\n 'branch-load-start': (_details: PayloadOf<TreeSelectProps, 'onBranchLoadStart'>) => true,\n 'branch-load': (_details: PayloadOf<TreeSelectProps, 'onBranchLoad'>) => true,\n 'branch-load-error': (_details: PayloadOf<TreeSelectProps, 'onBranchLoadError'>) => true,\n 'update:value': (_value: PayloadOf<TreeSelectProps, 'onValueChange'>['value']) => true,\n 'update:expandedValue': (_value: PayloadOf<TreeSelectProps, 'onExpandedValueChange'>['value']) => true,\n 'update:open': (_open: PayloadOf<TreeSelectProps, 'onOpenChange'>['open']) => true,\n },\n slots: Object as SlotsType<{\n default?: (props: TreeSelectRootSlotProps) => VNode[]\n label?: () => VNode[]\n }>,\n setup(props, { slots, emit }) {\n const notifyValue: TreeSelectProps['onValueChange'] = (details) => {\n emit('value-change', details)\n emit('update:value', details.value)\n }\n const notifyExpanded: TreeSelectProps['onExpandedValueChange'] = (details) => {\n emit('expanded-value-change', details)\n emit('update:expandedValue', details.value)\n }\n const notifyOpen: TreeSelectProps['onOpenChange'] = (details) => {\n emit('open-change', details)\n emit('update:open', details.open)\n }\n const notifyBranchLoadStart: TreeSelectProps['onBranchLoadStart'] = details => emit('branch-load-start', details)\n const notifyBranchLoad: TreeSelectProps['onBranchLoad'] = details => emit('branch-load', details)\n const notifyBranchLoadError: TreeSelectProps['onBranchLoadError'] = details => emit('branch-load-error', details)\n const ctx = useTreeSelect(withXhConfig('tree-select', useFormControlProps(props)) as TreeSelectProps, {\n onValueChange: notifyValue,\n onExpandedValueChange: notifyExpanded,\n onOpenChange: notifyOpen,\n onBranchLoadStart: notifyBranchLoadStart,\n onBranchLoad: notifyBranchLoad,\n onBranchLoadError: notifyBranchLoadError,\n })\n provideTreeSelect(ctx)\n\n return () => h('div', ctx.api.value.getRootProps() as Record<string, unknown>, slots.default\n ? slots.default({\n open: ctx.api.value.open,\n value: ctx.api.value.value,\n expandedValue: ctx.api.value.expandedValue,\n visibleNodes: ctx.api.value.visibleNodes,\n focusedValue: ctx.api.value.focusedValue,\n empty: ctx.api.value.empty,\n loading: ctx.api.value.loading,\n displayText: ctx.api.value.displayText,\n canClear: ctx.api.value.canClear,\n isSelected: ctx.api.value.isSelected,\n isIndeterminate: ctx.api.value.isIndeterminate,\n isExpanded: ctx.api.value.isExpanded,\n branchLoadState: ctx.api.value.branchLoadState,\n setOpen: ctx.api.value.setOpen,\n setValue: ctx.api.value.setValue,\n setExpandedValue: ctx.api.value.setExpandedValue,\n expand: ctx.api.value.expand,\n collapse: ctx.api.value.collapse,\n retryBranch: ctx.api.value.retryBranch,\n select: ctx.api.value.select,\n clear: ctx.api.value.clear,\n })\n : props.collection\n ? renderDefaultTree(\n ctx.api.value.collection,\n slots.label?.() ?? (props.label != null ? [props.label] : null),\n props.clearable,\n )\n : [])\n },\n})\n\nexport const XhTreeSelectLabel = defineComponent({\n name: 'XhTreeSelectLabel',\n setup(_, { slots }) {\n const ctx = useTreeSelectContext()\n return () => h('span', ctx.api.value.getLabelProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhTreeSelectControl = defineComponent({\n name: 'XhTreeSelectControl',\n setup(_, { slots }) {\n const ctx = useTreeSelectContext()\n // 描边、底色与聚焦环所在的那一层,触发按钮与尾部动作钮在里面并排\n return () => h('div', ctx.api.value.getControlProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhTreeSelectTrigger = defineComponent({\n name: 'XhTreeSelectTrigger',\n setup(_, { slots }) {\n // 字段的说明与校验状态要落在真控件上,不能停在封装根的 div 上\n const fieldWiring = useFieldStateWiring()\n // 字段的标签也得并进名字链:控件自带的那条指的是它自己那个没渲染的 label 部件\n const fieldLabel = useFieldLabelWiring()\n const ctx = useTreeSelectContext()\n return () => h('button', fieldLabel.value({\n ...fieldWiring.value,\n ...ctx.api.value.getTriggerProps() as Record<string, unknown>,\n ref: (el: unknown) => { ctx.triggerRef.value = el as HTMLElement },\n }), slots.default?.())\n },\n})\n\nexport const XhTreeSelectValueText = defineComponent({\n name: 'XhTreeSelectValueText',\n setup(_, { slots }) {\n const ctx = useTreeSelectContext()\n // 有插槽用插槽,否则显示选中项文本或 placeholder\n return () => h(\n 'span',\n ctx.api.value.getValueTextProps() as Record<string, unknown>,\n slots.default?.() ?? ctx.api.value.displayText,\n )\n },\n})\n\nexport const XhTreeSelectIndicator = defineComponent({\n name: 'XhTreeSelectIndicator',\n setup(_, { slots }) {\n const ctx = useTreeSelectContext()\n return () => h('span', ctx.api.value.getIndicatorProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhTreeSelectClearTrigger = defineComponent({\n name: 'XhTreeSelectClearTrigger',\n setup(_, { slots }) {\n const ctx = useTreeSelectContext()\n return () => h('button', ctx.api.value.getClearTriggerProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhTreeSelectPositioner = defineComponent({\n name: 'XhTreeSelectPositioner',\n props: {\n /** 本实例的 Portal 容器;优先于应用级配置。 */\n container: { type: Object as PropType<Element> },\n },\n // 根是 Teleport,Vue 不会把直通属性合上去,作者写的 class 与 style 得自己接住落到 positioner 上\n inheritAttrs: false,\n setup(props, { slots, attrs }) {\n const ctx = useTreeSelectContext()\n // 树的自绘条:与 content 同级、绝对定位不占布局,壳是这层已经 fixed 的 positioner。\n // 两条轴都摆:深层节点靠缩进往行末推,横向溢出与纵向一样是常态。\n // 横条的正负按排版方向算,而组件不读计算样式,把 positioner 上那份显式交过去\n const bars = useScrollbars({\n scrollable: () => ctx.contentRef.value,\n axes: ['vertical', 'horizontal'],\n // 条子走浮层 4px 档\n props: () => ({ dir: (ctx.api.value.getPositionerProps() as { dir?: Direction }).dir, size: 'sm' }),\n })\n // 搬到 portal 落点:留在原地的话,宿主祖先只要建了层叠上下文就能盖住浮层\n return () => h(XhPortal, { to: props.container ?? ctx.portalTarget.value, source: ctx.triggerRef }, () => [\n h('div', {\n ...mergeProps(ctx.api.value.getPositionerProps() as Record<string, unknown>, attrs),\n ref: (el: unknown) => { ctx.positionerRef.value = el as HTMLElement },\n }, [...(slots.default?.() ?? []), ...bars.render()]),\n ])\n },\n})\n\nconst XhTreeSelectAutoEmpty = defineComponent({\n name: 'XhTreeSelectAutoEmpty',\n setup() {\n const ctx = useTreeSelectContext()\n const content = useTreeSelectContentContext()\n return () => content.authoredEmptyCount.value > 0\n ? null\n : h('div', {\n ...ctx.api.value.getEmptyProps() as Record<string, unknown>,\n 'data-xh-tree-select-auto-empty': '',\n }, ctx.api.value.translations.empty)\n },\n})\n\nconst XhTreeSelectAutoLoading = defineComponent({\n name: 'XhTreeSelectAutoLoading',\n setup() {\n const ctx = useTreeSelectContext()\n const content = useTreeSelectContentContext()\n return () => content.authoredLoadingCount.value > 0\n ? null\n : h('div', {\n ...ctx.api.value.getLoadingProps() as Record<string, unknown>,\n 'data-xh-tree-select-auto-loading': '',\n }, ctx.api.value.translations.loading)\n },\n})\n\nexport const XhTreeSelectContent = defineComponent({\n name: 'XhTreeSelectContent',\n setup(_, { slots }) {\n const ctx = useTreeSelectContext()\n const authoredEmptyCount = ref(0)\n const authoredLoadingCount = ref(0)\n const register = (count: Ref<number>): (() => void) => {\n count.value += 1\n let active = true\n return () => {\n if (!active)\n return\n active = false\n count.value -= 1\n }\n }\n provideTreeSelectContent({\n authoredEmptyCount,\n authoredLoadingCount,\n registerEmpty: () => register(authoredEmptyCount),\n registerLoading: () => register(authoredLoadingCount),\n })\n // 收起时只隐藏不卸载\n return () => h('div', {\n ...ctx.api.value.getContentProps() as Record<string, unknown>,\n // 收起跟着退场闸门走:皮肤刻意没给 content 补 [hidden]{display:none}(补了退场\n // 就一帧都播不出来),所以真正的收起落成内联 display——节点始终留在原地\n style: ctx.visible.value ? undefined : { display: 'none' },\n ref: (el: unknown) => { ctx.contentRef.value = el as HTMLElement },\n }, [slots.default?.(), h(XhTreeSelectAutoEmpty), h(XhTreeSelectAutoLoading)])\n },\n})\n\nexport const XhTreeSelectTree = defineComponent({\n name: 'XhTreeSelectTree',\n setup(_, { slots }) {\n const ctx = useTreeSelectContext()\n return () => h('div', ctx.api.value.getTreeProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhTreeSelectItem = defineComponent({\n name: 'XhTreeSelectItem',\n props: {\n value: { type: String, required: true },\n },\n setup(props, { slots }) {\n const ctx = useTreeSelectContext()\n const node = computed<TreeSelectNodeProps>(() => ({ value: props.value }))\n provideTreeSelectNode({ node })\n const el = ref<HTMLElement | null>(null)\n reportNodeFocus(ctx, el, () => props.value)\n return () => h(\n 'div',\n { ...ctx.api.value.getItemProps(node.value) as Record<string, unknown>, ref: el },\n slots.default?.(),\n )\n },\n})\n\nexport const XhTreeSelectItemText = defineComponent({\n name: 'XhTreeSelectItemText',\n setup(_, { slots }) {\n const ctx = useTreeSelectContext()\n const { node } = useTreeSelectNodeContext()\n return () => h('span', ctx.api.value.getItemTextProps(node.value) as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhTreeSelectItemIndicator = defineComponent({\n name: 'XhTreeSelectItemIndicator',\n setup(_, { slots }) {\n const ctx = useTreeSelectContext()\n const { node } = useTreeSelectNodeContext()\n return () => h('span', ctx.api.value.getItemIndicatorProps(node.value) as Record<string, unknown>, slots.default?.())\n },\n})\n\nfunction renderBranchFeedback(ctx: TreeSelectContext, node: TreeSelectNodeProps): VNode[] {\n if (ctx.api.value.branchLoadState(node.value) == null)\n return []\n return [\n h('div', ctx.api.value.getBranchLoadingProps(node) as Record<string, unknown>, ctx.api.value.translations.loading),\n h('div', ctx.api.value.getBranchErrorProps(node) as Record<string, unknown>, ctx.api.value.translations.branchError),\n h('button', ctx.api.value.getBranchRetryTriggerProps(node) as Record<string, unknown>, ctx.api.value.translations.retry),\n h('div', ctx.api.value.getBranchEmptyProps(node) as Record<string, unknown>, ctx.api.value.translations.branchEmpty),\n ]\n}\n\nexport const XhTreeSelectBranch = defineComponent({\n name: 'XhTreeSelectBranch',\n props: {\n value: { type: String, required: true },\n },\n setup(props, { slots }) {\n const ctx = useTreeSelectContext()\n const node = computed<TreeSelectNodeProps>(() => ({ value: props.value }))\n // 分支自身也是 treeitem,供其子部件读取;子节点各自再 provide 一层\n provideTreeSelectNode({ node })\n const el = ref<HTMLElement | null>(null)\n reportNodeFocus(ctx, el, () => props.value)\n return () => h(\n 'div',\n { ...ctx.api.value.getBranchProps(node.value) as Record<string, unknown>, ref: el },\n [slots.default?.(), ...renderBranchFeedback(ctx, node.value)],\n )\n },\n})\n\nexport const XhTreeSelectBranchControl = defineComponent({\n name: 'XhTreeSelectBranchControl',\n setup(_, { slots }) {\n const ctx = useTreeSelectContext()\n const { node } = useTreeSelectNodeContext()\n return () => h('div', ctx.api.value.getBranchControlProps(node.value) as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhTreeSelectBranchTrigger = defineComponent({\n name: 'XhTreeSelectBranchTrigger',\n setup(_, { slots }) {\n const ctx = useTreeSelectContext()\n const { node } = useTreeSelectNodeContext()\n return () => h('span', ctx.api.value.getBranchTriggerProps(node.value) as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhTreeSelectBranchIndicator = defineComponent({\n name: 'XhTreeSelectBranchIndicator',\n setup(_, { slots }) {\n const ctx = useTreeSelectContext()\n const { node } = useTreeSelectNodeContext()\n return () => h('span', ctx.api.value.getBranchIndicatorProps(node.value) as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhTreeSelectBranchText = defineComponent({\n name: 'XhTreeSelectBranchText',\n setup(_, { slots }) {\n const ctx = useTreeSelectContext()\n const { node } = useTreeSelectNodeContext()\n return () => h('span', ctx.api.value.getBranchTextProps(node.value) as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhTreeSelectBranchContent = defineComponent({\n name: 'XhTreeSelectBranchContent',\n setup(_, { slots }) {\n const ctx = useTreeSelectContext()\n const { node } = useTreeSelectNodeContext()\n // 收起只加 hidden,不卸载子树节点\n return () => h('div', ctx.api.value.getBranchContentProps(node.value) as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhTreeSelectBranchLoading = defineComponent({\n name: 'XhTreeSelectBranchLoading',\n setup(_, { slots }) {\n const ctx = useTreeSelectContext()\n const { node } = useTreeSelectNodeContext()\n return () => h('div', ctx.api.value.getBranchLoadingProps(node.value) as Record<string, unknown>, slots.default?.() ?? ctx.api.value.translations.loading)\n },\n})\n\nexport const XhTreeSelectBranchError = defineComponent({\n name: 'XhTreeSelectBranchError',\n setup(_, { slots }) {\n const ctx = useTreeSelectContext()\n const { node } = useTreeSelectNodeContext()\n return () => h('div', ctx.api.value.getBranchErrorProps(node.value) as Record<string, unknown>, slots.default?.() ?? ctx.api.value.translations.branchError)\n },\n})\n\nexport const XhTreeSelectBranchRetryTrigger = defineComponent({\n name: 'XhTreeSelectBranchRetryTrigger',\n setup(_, { slots }) {\n const ctx = useTreeSelectContext()\n const { node } = useTreeSelectNodeContext()\n return () => h('button', ctx.api.value.getBranchRetryTriggerProps(node.value) as Record<string, unknown>, slots.default?.() ?? ctx.api.value.translations.retry)\n },\n})\n\nexport const XhTreeSelectBranchEmpty = defineComponent({\n name: 'XhTreeSelectBranchEmpty',\n setup(_, { slots }) {\n const ctx = useTreeSelectContext()\n const { node } = useTreeSelectNodeContext()\n return () => h('div', ctx.api.value.getBranchEmptyProps(node.value) as Record<string, unknown>, slots.default?.() ?? ctx.api.value.translations.branchEmpty)\n },\n})\n\nexport const XhTreeSelectEmpty = defineComponent({\n name: 'XhTreeSelectEmpty',\n setup(_, { slots }) {\n const ctx = useTreeSelectContext()\n const content = useTreeSelectContentContext()\n const unregister = content.registerEmpty()\n onBeforeUnmount(unregister)\n return () => h('div', ctx.api.value.getEmptyProps() as Record<string, unknown>, slots.default?.() ?? ctx.api.value.translations.empty)\n },\n})\n\nexport const XhTreeSelectLoading = defineComponent({\n name: 'XhTreeSelectLoading',\n setup(_, { slots }) {\n const ctx = useTreeSelectContext()\n const content = useTreeSelectContentContext()\n const unregister = content.registerLoading()\n onBeforeUnmount(unregister)\n return () => h('div', ctx.api.value.getLoadingProps() as Record<string, unknown>, slots.default?.() ?? ctx.api.value.translations.loading)\n },\n})\n\nexport const XhTreeSelectFooter = defineComponent({\n name: 'XhTreeSelectFooter',\n setup(_, { slots }) {\n const ctx = useTreeSelectContext()\n // 浮层底部的操作区:写在 content 里、tree 的兄弟,\n // 放在这里的按钮既不进 role=tree 的拥有关系,也走不到方向键与连打检索\n return () => h('div', ctx.api.value.getFooterProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhTreeSelectHiddenInput = defineComponent({\n name: 'XhTreeSelectHiddenInput',\n inheritAttrs: false,\n setup(_, { attrs }) {\n const ctx = useTreeSelectContext()\n // 表单出口,不写这个部件即不参与表单提交\n return () => ctx.api.value.value.map(value => h('input', {\n ...ctx.api.value.getHiddenInputProps({ value }) as Record<string, unknown>,\n ...attrs,\n key: value,\n }))\n },\n})\n\n/** 按 collection 递归铺设节点:带 children 的渲染为 branch,其余渲染为 item。 */\nfunction renderNodes(nodes: readonly TreeSelectNode[]): VNode[] {\n return nodes.map(node => (node.children || node.hasChildren)\n ? h(XhTreeSelectBranch, { key: node.value, value: node.value }, () => [\n h(XhTreeSelectBranchControl, null, () => [\n h(XhTreeSelectBranchTrigger),\n h(XhTreeSelectBranchText, null, () => node.label ?? node.value),\n h(XhTreeSelectItemIndicator),\n ]),\n h(XhTreeSelectBranchContent, null, () => renderNodes(node.children ?? [])),\n ])\n : h(XhTreeSelectItem, { key: node.value, value: node.value }, () => [\n h(XhTreeSelectItemIndicator),\n h(XhTreeSelectItemText, null, () => node.label ?? node.value),\n ]))\n}\n\n/**\n * 未写默认插槽时按 collection 铺开的整套结构,作者只提供数据。\n * 与手写部件产出的 DOM 完全一致,需要修改结构时写默认插槽,行为不变。\n */\nfunction renderDefaultTree(\n collection: readonly TreeSelectNode[],\n label: (VNode | string)[] | null,\n clearable: boolean,\n): VNode[] {\n return [\n ...(label ? [h(XhTreeSelectLabel, null, () => label)] : []),\n // 盒里放触发器;清空钮是触发器的兄弟(按钮不能套按钮)\n h(XhTreeSelectControl, null, () => [\n h(XhTreeSelectTrigger, null, () => [h(XhTreeSelectValueText), h(XhTreeSelectIndicator)]),\n ...(clearable ? [h(XhTreeSelectClearTrigger)] : []),\n ]),\n h(XhTreeSelectPositioner, null, () => [\n h(XhTreeSelectContent, null, () => h(XhTreeSelectTree, null, () => renderNodes(collection))),\n ]),\n ]\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"tree-select.js","names":[],"sources":["../../../src/components/tree-select/tree-select.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// 提供 tree select 相关实现。\n\nimport type { ControlVariant, Direction, Placement, Size, Tone } from '@xihan-ui/core'\nimport type { TreeSelectApi, TreeSelectNode, TreeSelectNodeProps, TreeSelectSchema } from '@xihan-ui/headless'\nimport type { PropType, Ref, SlotsType, VNode } from 'vue'\nimport type { PayloadOf } from '../../runtime/payload'\nimport type { TreeSelectContext } from './use-tree-select'\nimport { computed, defineComponent, h, mergeProps, onBeforeUnmount, onMounted, ref, watch } from 'vue'\nimport { withXhConfig } from '../../config/config'\nimport { XhPortal } from '../../runtime/portal'\nimport { useScrollbars } from '../../runtime/use-scrollbars'\nimport { useFieldLabelWiring, useFieldStateWiring } from '../field/use-field-control'\nimport { useFormControlProps } from '../form/use-form-control'\nimport { provideTreeSelect, provideTreeSelectContent, provideTreeSelectNode, useTreeSelectContentContext, useTreeSelectContext, useTreeSelectNodeContext } from './context'\nimport { useTreeSelect } from './use-tree-select'\n\ntype TreeSelectProps = TreeSelectSchema['props']\n\n/** 默认插槽的载荷:展开与选中状态、可见行序列、节点状态判定与写值方法。 */\nexport type TreeSelectRootSlotProps = Pick<\n TreeSelectApi,\n | 'open'\n | 'value'\n | 'expandedValue'\n | 'visibleNodes'\n | 'focusedValue'\n | 'empty'\n | 'loading'\n | 'displayText'\n | 'canClear'\n | 'isSelected'\n | 'isIndeterminate'\n | 'isExpanded'\n | 'branchLoadState'\n | 'setOpen'\n | 'setValue'\n | 'setExpandedValue'\n | 'expand'\n | 'collapse'\n | 'retryBranch'\n | 'select'\n | 'clear'\n>\n\n/** 本节点持有焦点时,value 变更重新报告焦点节点,卸载时上报焦点丢失 */\nfunction reportNodeFocus(ctx: TreeSelectContext, el: Ref<HTMLElement | null>, value: () => string): void {\n let registered: string | null = null\n watch(value, (next, prev) => {\n if (next === prev)\n return\n const { service } = ctx\n if (service.getStatus() !== 'Started')\n return\n if (el.value && service.scope.getActiveElement() === el.value)\n service.send({ type: 'NODE.FOCUS', value: next })\n if (registered !== null) {\n service.send({ type: 'NODE.UNMOUNT', value: prev })\n service.send({ type: 'NODE.MOUNT', value: next })\n registered = next\n }\n })\n onMounted(() => queueMicrotask(() => {\n if (ctx.service.getStatus() !== 'Started')\n return\n registered = value()\n ctx.service.send({ type: 'NODE.MOUNT', value: registered })\n }))\n onBeforeUnmount(() => {\n const { service } = ctx\n // 整组一起卸载时根部件先停机,此刻送事件会在 dev 下抛\n if (service.getStatus() !== 'Started')\n return\n if (registered !== null)\n service.send({ type: 'NODE.UNMOUNT', value: registered })\n // 按「本节点当下正持有焦点」判定,不按 value 比对\n if (el.value && service.scope.getActiveElement() === el.value)\n service.send({ type: 'NODE.LOST' })\n })\n}\n\nexport const XhTreeSelectRoot = defineComponent({\n name: 'XhTreeSelectRoot',\n // 有 connect 兜底的 prop:普通类型省略 default,Boolean 显式保留 undefined\n props: {\n collection: { type: Array as PropType<TreeSelectNode[]> },\n loadChildren: { type: Function as PropType<TreeSelectProps['loadChildren']> },\n /** 标题文字。提供后不必再写 label 部件;需要放置其他内容时改用 label 插槽。 */\n label: { type: String },\n /** 自动渲染树中是否带清空按钮;手写部件不使用它,写了节点即可清空。 */\n clearable: Boolean,\n value: { type: [String, Array] as PropType<string | string[]> },\n defaultValue: { type: [String, Array] as PropType<string | string[]> },\n expandedValue: { type: Array as PropType<string[]> },\n defaultExpandedValue: { type: Array as PropType<string[]> },\n open: { type: Boolean, default: undefined },\n defaultOpen: Boolean,\n multiple: Boolean,\n cascade: Boolean,\n checkedStrategy: { type: String as PropType<TreeSelectProps['checkedStrategy']> },\n disabled: { type: Boolean, default: undefined },\n readOnly: { type: Boolean, default: undefined },\n invalid: { type: Boolean, default: undefined },\n loading: Boolean,\n variant: { type: String as PropType<ControlVariant> },\n tone: { type: String as PropType<Tone> },\n size: { type: String as PropType<Size> },\n placeholder: { type: String },\n translations: { type: Object as PropType<TreeSelectProps['translations']> },\n placement: { type: String as PropType<Placement> },\n offset: { type: Number },\n loop: { type: Boolean, default: undefined },\n dir: { type: String as PropType<Direction> },\n name: { type: String },\n form: { type: String },\n },\n // *-change 携带 details 对象,update:* 携带裸值;选中值恒为数组,单选时长度 ≤ 1\n emits: {\n 'value-change': (_details: PayloadOf<TreeSelectProps, 'onValueChange'>) => true,\n 'expanded-value-change': (_details: PayloadOf<TreeSelectProps, 'onExpandedValueChange'>) => true,\n 'open-change': (_details: PayloadOf<TreeSelectProps, 'onOpenChange'>) => true,\n 'branch-load-start': (_details: PayloadOf<TreeSelectProps, 'onBranchLoadStart'>) => true,\n 'branch-load': (_details: PayloadOf<TreeSelectProps, 'onBranchLoad'>) => true,\n 'branch-load-error': (_details: PayloadOf<TreeSelectProps, 'onBranchLoadError'>) => true,\n 'update:value': (_value: PayloadOf<TreeSelectProps, 'onValueChange'>['value']) => true,\n 'update:expandedValue': (_value: PayloadOf<TreeSelectProps, 'onExpandedValueChange'>['value']) => true,\n 'update:open': (_open: PayloadOf<TreeSelectProps, 'onOpenChange'>['open']) => true,\n },\n slots: Object as SlotsType<{\n default?: (props: TreeSelectRootSlotProps) => VNode[]\n label?: () => VNode[]\n }>,\n setup(props, { slots, emit }) {\n const notifyValue: TreeSelectProps['onValueChange'] = (details) => {\n emit('value-change', details)\n emit('update:value', details.value)\n }\n const notifyExpanded: TreeSelectProps['onExpandedValueChange'] = (details) => {\n emit('expanded-value-change', details)\n emit('update:expandedValue', details.value)\n }\n const notifyOpen: TreeSelectProps['onOpenChange'] = (details) => {\n emit('open-change', details)\n emit('update:open', details.open)\n }\n const notifyBranchLoadStart: TreeSelectProps['onBranchLoadStart'] = details => emit('branch-load-start', details)\n const notifyBranchLoad: TreeSelectProps['onBranchLoad'] = details => emit('branch-load', details)\n const notifyBranchLoadError: TreeSelectProps['onBranchLoadError'] = details => emit('branch-load-error', details)\n const ctx = useTreeSelect(withXhConfig('tree-select', useFormControlProps(props)) as TreeSelectProps, {\n onValueChange: notifyValue,\n onExpandedValueChange: notifyExpanded,\n onOpenChange: notifyOpen,\n onBranchLoadStart: notifyBranchLoadStart,\n onBranchLoad: notifyBranchLoad,\n onBranchLoadError: notifyBranchLoadError,\n })\n provideTreeSelect(ctx)\n\n return () => h('div', ctx.api.value.getRootProps() as Record<string, unknown>, slots.default\n ? slots.default({\n open: ctx.api.value.open,\n value: ctx.api.value.value,\n expandedValue: ctx.api.value.expandedValue,\n visibleNodes: ctx.api.value.visibleNodes,\n focusedValue: ctx.api.value.focusedValue,\n empty: ctx.api.value.empty,\n loading: ctx.api.value.loading,\n displayText: ctx.api.value.displayText,\n canClear: ctx.api.value.canClear,\n isSelected: ctx.api.value.isSelected,\n isIndeterminate: ctx.api.value.isIndeterminate,\n isExpanded: ctx.api.value.isExpanded,\n branchLoadState: ctx.api.value.branchLoadState,\n setOpen: ctx.api.value.setOpen,\n setValue: ctx.api.value.setValue,\n setExpandedValue: ctx.api.value.setExpandedValue,\n expand: ctx.api.value.expand,\n collapse: ctx.api.value.collapse,\n retryBranch: ctx.api.value.retryBranch,\n select: ctx.api.value.select,\n clear: ctx.api.value.clear,\n })\n : props.collection\n ? renderDefaultTree(\n ctx.api.value.collection,\n slots.label?.() ?? (props.label != null ? [props.label] : null),\n props.clearable,\n )\n : [])\n },\n})\n\nexport const XhTreeSelectLabel = defineComponent({\n name: 'XhTreeSelectLabel',\n setup(_, { slots }) {\n const ctx = useTreeSelectContext()\n return () => h('span', ctx.api.value.getLabelProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhTreeSelectControl = defineComponent({\n name: 'XhTreeSelectControl',\n setup(_, { slots }) {\n const ctx = useTreeSelectContext()\n // 描边、底色与聚焦环所在的那一层,触发按钮与尾部动作钮在里面并排\n return () => h('div', ctx.api.value.getControlProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhTreeSelectTrigger = defineComponent({\n name: 'XhTreeSelectTrigger',\n setup(_, { slots }) {\n // 字段的说明与校验状态要落在真控件上,不能停在封装根的 div 上\n const fieldWiring = useFieldStateWiring()\n // 字段的标签也得并进名字链:控件自带的那条指的是它自己那个没渲染的 label 部件\n const fieldLabel = useFieldLabelWiring()\n const ctx = useTreeSelectContext()\n return () => h('button', fieldLabel.value({\n ...fieldWiring.value,\n ...ctx.api.value.getTriggerProps() as Record<string, unknown>,\n ref: (el: unknown) => { ctx.triggerRef.value = el as HTMLElement },\n }), slots.default?.())\n },\n})\n\nexport const XhTreeSelectValueText = defineComponent({\n name: 'XhTreeSelectValueText',\n setup(_, { slots }) {\n const ctx = useTreeSelectContext()\n // 有插槽用插槽,否则显示选中项文本或 placeholder\n return () => h(\n 'span',\n ctx.api.value.getValueTextProps() as Record<string, unknown>,\n slots.default?.() ?? ctx.api.value.displayText,\n )\n },\n})\n\nexport const XhTreeSelectIndicator = defineComponent({\n name: 'XhTreeSelectIndicator',\n setup(_, { slots }) {\n const ctx = useTreeSelectContext()\n return () => h('span', ctx.api.value.getIndicatorProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhTreeSelectClearTrigger = defineComponent({\n name: 'XhTreeSelectClearTrigger',\n setup(_, { slots }) {\n const ctx = useTreeSelectContext()\n return () => h('button', ctx.api.value.getClearTriggerProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhTreeSelectPositioner = defineComponent({\n name: 'XhTreeSelectPositioner',\n props: {\n /** 本实例的 Portal 容器;优先于应用级配置。 */\n container: { type: Object as PropType<Element> },\n },\n // 根是 Teleport,Vue 不会把直通属性合上去,作者写的 class 与 style 得自己接住落到 positioner 上\n inheritAttrs: false,\n setup(props, { slots, attrs }) {\n const ctx = useTreeSelectContext()\n // 树的自绘条:与 content 同级、绝对定位不占布局,壳是这层已经 fixed 的 positioner。\n // 两条轴都摆:深层节点靠缩进往行末推,横向溢出与纵向一样是常态。\n // 横条的正负按排版方向算,而组件不读计算样式,把 positioner 上那份显式交过去\n const bars = useScrollbars({\n scrollable: () => ctx.contentRef.value,\n axes: ['vertical', 'horizontal'],\n // 条子走浮层 4px 档\n props: () => ({ dir: (ctx.api.value.getPositionerProps() as { dir?: Direction }).dir, size: 'sm' }),\n })\n // 搬到 portal 落点:留在原地的话,宿主祖先只要建了层叠上下文就能盖住浮层\n return () => h(XhPortal, { to: props.container ?? ctx.portalTarget.value, source: ctx.triggerRef }, () => [\n h('div', {\n ...mergeProps(ctx.api.value.getPositionerProps() as Record<string, unknown>, attrs),\n ref: (el: unknown) => { ctx.positionerRef.value = el as HTMLElement },\n }, [...(slots.default?.() ?? []), ...bars.render()]),\n ])\n },\n})\n\nconst XhTreeSelectAutoEmpty = defineComponent({\n name: 'XhTreeSelectAutoEmpty',\n setup() {\n const ctx = useTreeSelectContext()\n const content = useTreeSelectContentContext()\n return () => content.authoredEmptyCount.value > 0\n ? null\n : h('div', {\n ...ctx.api.value.getEmptyProps() as Record<string, unknown>,\n 'data-xh-tree-select-auto-empty': '',\n }, ctx.api.value.translations.empty)\n },\n})\n\nconst XhTreeSelectAutoLoading = defineComponent({\n name: 'XhTreeSelectAutoLoading',\n setup() {\n const ctx = useTreeSelectContext()\n const content = useTreeSelectContentContext()\n return () => content.authoredLoadingCount.value > 0\n ? null\n : h('div', {\n ...ctx.api.value.getLoadingProps() as Record<string, unknown>,\n 'data-xh-tree-select-auto-loading': '',\n }, ctx.api.value.translations.loading)\n },\n})\n\nexport const XhTreeSelectContent = defineComponent({\n name: 'XhTreeSelectContent',\n setup(_, { slots }) {\n const ctx = useTreeSelectContext()\n const authoredEmptyCount = ref(0)\n const authoredLoadingCount = ref(0)\n const register = (count: Ref<number>): (() => void) => {\n count.value += 1\n let active = true\n return () => {\n if (!active)\n return\n active = false\n count.value -= 1\n }\n }\n provideTreeSelectContent({\n authoredEmptyCount,\n authoredLoadingCount,\n registerEmpty: () => register(authoredEmptyCount),\n registerLoading: () => register(authoredLoadingCount),\n })\n // 收起时只隐藏不卸载\n return () => h('div', {\n ...ctx.api.value.getContentProps() as Record<string, unknown>,\n // 收起跟着退场闸门走:皮肤刻意没给 content 补 [hidden]{display:none}(补了退场\n // 就一帧都播不出来),所以真正的收起落成内联 display——节点始终留在原地\n style: ctx.visible.value ? undefined : { display: 'none' },\n ref: (el: unknown) => { ctx.contentRef.value = el as HTMLElement },\n }, [slots.default?.(), h(XhTreeSelectAutoEmpty), h(XhTreeSelectAutoLoading)])\n },\n})\n\nexport const XhTreeSelectTree = defineComponent({\n name: 'XhTreeSelectTree',\n setup(_, { slots }) {\n const ctx = useTreeSelectContext()\n return () => h('div', ctx.api.value.getTreeProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhTreeSelectItem = defineComponent({\n name: 'XhTreeSelectItem',\n props: {\n value: { type: String, required: true },\n },\n setup(props, { slots }) {\n const ctx = useTreeSelectContext()\n const node = computed<TreeSelectNodeProps>(() => ({ value: props.value }))\n provideTreeSelectNode({ node })\n const el = ref<HTMLElement | null>(null)\n reportNodeFocus(ctx, el, () => props.value)\n return () => h(\n 'div',\n { ...ctx.api.value.getItemProps(node.value) as Record<string, unknown>, ref: el },\n slots.default?.(),\n )\n },\n})\n\nexport const XhTreeSelectItemText = defineComponent({\n name: 'XhTreeSelectItemText',\n setup(_, { slots }) {\n const ctx = useTreeSelectContext()\n const { node } = useTreeSelectNodeContext()\n return () => h('span', ctx.api.value.getItemTextProps(node.value) as Record<string, unknown>, slots.default?.())\n },\n})\n\n/** 条目的第 2 行副文本,跨文字槽、走 muted 档 */\nexport const XhTreeSelectItemDescription = defineComponent({\n name: 'XhTreeSelectItemDescription',\n setup(_, { slots }) {\n const ctx = useTreeSelectContext()\n const { node } = useTreeSelectNodeContext()\n return () => h('span', ctx.api.value.getItemDescriptionProps(node.value) as Record<string, unknown>, slots.default?.())\n },\n})\n\n/** 条目行尾的作者内容(计数、徽标) */\nexport const XhTreeSelectItemSuffix = defineComponent({\n name: 'XhTreeSelectItemSuffix',\n setup(_, { slots }) {\n const ctx = useTreeSelectContext()\n const { node } = useTreeSelectNodeContext()\n return () => h('span', ctx.api.value.getItemSuffixProps(node.value) as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhTreeSelectItemIndicator = defineComponent({\n name: 'XhTreeSelectItemIndicator',\n setup(_, { slots }) {\n const ctx = useTreeSelectContext()\n const { node } = useTreeSelectNodeContext()\n return () => h('span', ctx.api.value.getItemIndicatorProps(node.value) as Record<string, unknown>, slots.default?.())\n },\n})\n\nfunction renderBranchFeedback(ctx: TreeSelectContext, node: TreeSelectNodeProps): VNode[] {\n if (ctx.api.value.branchLoadState(node.value) == null)\n return []\n return [\n h('div', ctx.api.value.getBranchLoadingProps(node) as Record<string, unknown>, ctx.api.value.translations.loading),\n h('div', ctx.api.value.getBranchErrorProps(node) as Record<string, unknown>, ctx.api.value.translations.branchError),\n h('button', ctx.api.value.getBranchRetryTriggerProps(node) as Record<string, unknown>, ctx.api.value.translations.retry),\n h('div', ctx.api.value.getBranchEmptyProps(node) as Record<string, unknown>, ctx.api.value.translations.branchEmpty),\n ]\n}\n\nexport const XhTreeSelectBranch = defineComponent({\n name: 'XhTreeSelectBranch',\n props: {\n value: { type: String, required: true },\n },\n setup(props, { slots }) {\n const ctx = useTreeSelectContext()\n const node = computed<TreeSelectNodeProps>(() => ({ value: props.value }))\n // 分支自身也是 treeitem,供其子部件读取;子节点各自再 provide 一层\n provideTreeSelectNode({ node })\n const el = ref<HTMLElement | null>(null)\n reportNodeFocus(ctx, el, () => props.value)\n return () => h(\n 'div',\n { ...ctx.api.value.getBranchProps(node.value) as Record<string, unknown>, ref: el },\n [slots.default?.(), ...renderBranchFeedback(ctx, node.value)],\n )\n },\n})\n\nexport const XhTreeSelectBranchControl = defineComponent({\n name: 'XhTreeSelectBranchControl',\n setup(_, { slots }) {\n const ctx = useTreeSelectContext()\n const { node } = useTreeSelectNodeContext()\n return () => h('div', ctx.api.value.getBranchControlProps(node.value) as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhTreeSelectBranchTrigger = defineComponent({\n name: 'XhTreeSelectBranchTrigger',\n setup(_, { slots }) {\n const ctx = useTreeSelectContext()\n const { node } = useTreeSelectNodeContext()\n return () => h('span', ctx.api.value.getBranchTriggerProps(node.value) as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhTreeSelectBranchIndicator = defineComponent({\n name: 'XhTreeSelectBranchIndicator',\n setup(_, { slots }) {\n const ctx = useTreeSelectContext()\n const { node } = useTreeSelectNodeContext()\n return () => h('span', ctx.api.value.getBranchIndicatorProps(node.value) as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhTreeSelectBranchText = defineComponent({\n name: 'XhTreeSelectBranchText',\n setup(_, { slots }) {\n const ctx = useTreeSelectContext()\n const { node } = useTreeSelectNodeContext()\n return () => h('span', ctx.api.value.getBranchTextProps(node.value) as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhTreeSelectBranchContent = defineComponent({\n name: 'XhTreeSelectBranchContent',\n setup(_, { slots }) {\n const ctx = useTreeSelectContext()\n const { node } = useTreeSelectNodeContext()\n // 收起只加 hidden,不卸载子树节点\n return () => h('div', ctx.api.value.getBranchContentProps(node.value) as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhTreeSelectBranchLoading = defineComponent({\n name: 'XhTreeSelectBranchLoading',\n setup(_, { slots }) {\n const ctx = useTreeSelectContext()\n const { node } = useTreeSelectNodeContext()\n return () => h('div', ctx.api.value.getBranchLoadingProps(node.value) as Record<string, unknown>, slots.default?.() ?? ctx.api.value.translations.loading)\n },\n})\n\nexport const XhTreeSelectBranchError = defineComponent({\n name: 'XhTreeSelectBranchError',\n setup(_, { slots }) {\n const ctx = useTreeSelectContext()\n const { node } = useTreeSelectNodeContext()\n return () => h('div', ctx.api.value.getBranchErrorProps(node.value) as Record<string, unknown>, slots.default?.() ?? ctx.api.value.translations.branchError)\n },\n})\n\nexport const XhTreeSelectBranchRetryTrigger = defineComponent({\n name: 'XhTreeSelectBranchRetryTrigger',\n setup(_, { slots }) {\n const ctx = useTreeSelectContext()\n const { node } = useTreeSelectNodeContext()\n return () => h('button', ctx.api.value.getBranchRetryTriggerProps(node.value) as Record<string, unknown>, slots.default?.() ?? ctx.api.value.translations.retry)\n },\n})\n\nexport const XhTreeSelectBranchEmpty = defineComponent({\n name: 'XhTreeSelectBranchEmpty',\n setup(_, { slots }) {\n const ctx = useTreeSelectContext()\n const { node } = useTreeSelectNodeContext()\n return () => h('div', ctx.api.value.getBranchEmptyProps(node.value) as Record<string, unknown>, slots.default?.() ?? ctx.api.value.translations.branchEmpty)\n },\n})\n\nexport const XhTreeSelectEmpty = defineComponent({\n name: 'XhTreeSelectEmpty',\n setup(_, { slots }) {\n const ctx = useTreeSelectContext()\n const content = useTreeSelectContentContext()\n const unregister = content.registerEmpty()\n onBeforeUnmount(unregister)\n return () => h('div', ctx.api.value.getEmptyProps() as Record<string, unknown>, slots.default?.() ?? ctx.api.value.translations.empty)\n },\n})\n\nexport const XhTreeSelectLoading = defineComponent({\n name: 'XhTreeSelectLoading',\n setup(_, { slots }) {\n const ctx = useTreeSelectContext()\n const content = useTreeSelectContentContext()\n const unregister = content.registerLoading()\n onBeforeUnmount(unregister)\n return () => h('div', ctx.api.value.getLoadingProps() as Record<string, unknown>, slots.default?.() ?? ctx.api.value.translations.loading)\n },\n})\n\nexport const XhTreeSelectFooter = defineComponent({\n name: 'XhTreeSelectFooter',\n setup(_, { slots }) {\n const ctx = useTreeSelectContext()\n // 浮层底部的操作区:写在 content 里、tree 的兄弟,\n // 放在这里的按钮既不进 role=tree 的拥有关系,也走不到方向键与连打检索\n return () => h('div', ctx.api.value.getFooterProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhTreeSelectHiddenInput = defineComponent({\n name: 'XhTreeSelectHiddenInput',\n inheritAttrs: false,\n setup(_, { attrs }) {\n const ctx = useTreeSelectContext()\n // 表单出口,不写这个部件即不参与表单提交\n return () => ctx.api.value.value.map(value => h('input', {\n ...ctx.api.value.getHiddenInputProps({ value }) as Record<string, unknown>,\n ...attrs,\n key: value,\n }))\n },\n})\n\n/** 按 collection 递归铺设节点:带 children 的渲染为 branch,其余渲染为 item。 */\nfunction renderNodes(nodes: readonly TreeSelectNode[]): VNode[] {\n return nodes.map(node => (node.children || node.hasChildren)\n ? h(XhTreeSelectBranch, { key: node.value, value: node.value }, () => [\n h(XhTreeSelectBranchControl, null, () => [\n h(XhTreeSelectBranchTrigger),\n h(XhTreeSelectBranchText, null, () => node.label ?? node.value),\n h(XhTreeSelectItemIndicator),\n ]),\n h(XhTreeSelectBranchContent, null, () => renderNodes(node.children ?? [])),\n ])\n : h(XhTreeSelectItem, { key: node.value, value: node.value }, () => [\n h(XhTreeSelectItemIndicator),\n h(XhTreeSelectItemText, null, () => node.label ?? node.value),\n ]))\n}\n\n/**\n * 未写默认插槽时按 collection 铺开的整套结构,作者只提供数据。\n * 与手写部件产出的 DOM 完全一致,需要修改结构时写默认插槽,行为不变。\n */\nfunction renderDefaultTree(\n collection: readonly TreeSelectNode[],\n label: (VNode | string)[] | null,\n clearable: boolean,\n): VNode[] {\n return [\n ...(label ? [h(XhTreeSelectLabel, null, () => label)] : []),\n // 盒里放触发器;清空钮是触发器的兄弟(按钮不能套按钮)\n h(XhTreeSelectControl, null, () => [\n h(XhTreeSelectTrigger, null, () => [h(XhTreeSelectValueText), h(XhTreeSelectIndicator)]),\n ...(clearable ? [h(XhTreeSelectClearTrigger)] : []),\n ]),\n h(XhTreeSelectPositioner, null, () => [\n h(XhTreeSelectContent, null, () => h(XhTreeSelectTree, null, () => renderNodes(collection))),\n ]),\n ]\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"typography.d.ts","names":[],"sources":["../../../src/components/typography/typography.ts"],"mappings":";;;;;cAiBa,gCAAgB,8BAAA;;IAGD,MAAA,SAAS;;;IACR,MAAA,SAAS;;;IACR,MAAA,SAAS;;;;;;IAFX,MAAA,SAAS;;;IACR,MAAA,SAAS;;;IACR,MAAA,SAAS;;
|
|
1
|
+
{"version":3,"file":"typography.d.ts","names":[],"sources":["../../../src/components/typography/typography.ts"],"mappings":";;;;;cAiBa,gCAAgB,8BAAA;;IAGD,MAAA,SAAS;;;IACR,MAAA,SAAS;;;IACR,MAAA,SAAS;;;;;;IAFX,MAAA,SAAS;;;IACR,MAAA,SAAS;;;IACR,MAAA,SAAS;;MASrC,oDAAA;;;;;cAMW,mCAAmB,8BAAA;;IAGO,MAAA,SAAS;;;;;;;;;;IAAT,MAAA,SAAS;;;;;;;;qCAW9C;cAEW,qCAAqB,wCAAA,oBAAA,4BAAA;;8BAMhC,qCAAA,iDAAA,aAAA,eAAA,oDAAA;;;;;cAMW,gCAAgB,8BAAA;;IAGD,MAAA,SAAS;;;IACN,MAAA,SAAS;;;IACV,MAAA,SAAS;;;;;;;;;;IAFX,MAAA,SAAS;;;IACN,MAAA,SAAS;;;IACV,MAAA,SAAS;;;;;;;;qCAWrC;;;;;cAMW,iCAAiB,8BAAA;;;;;;;;;;;;;;qCAS5B;cAGW,gCAAgB,wCAAA,oBAAA,4BAAA;;8BAM3B,qCAAA,iDAAA,aAAA,eAAA,oDAAA"}
|
|
@@ -13,7 +13,8 @@ const XhTypographyRoot = defineComponent({
|
|
|
13
13
|
weight: { type: String }
|
|
14
14
|
},
|
|
15
15
|
setup(props, { slots }) {
|
|
16
|
-
const
|
|
16
|
+
const configured = withXhConfig("typography", props);
|
|
17
|
+
const api = computed(() => connectTypography(configured, vueNormalize));
|
|
17
18
|
provideTypography({ api });
|
|
18
19
|
return () => h("div", api.value.getRootProps(), slots.default?.());
|
|
19
20
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"typography.js","names":[],"sources":["../../../src/components/typography/typography.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// 提供 typography 相关实现。\n\nimport type { Size, Tone } from '@xihan-ui/core'\nimport type { TypographyAlign, TypographyLevel, TypographyProps, TypographyVariant, TypographyWeight } from '@xihan-ui/headless'\nimport type { PropType } from 'vue'\nimport { connectTypography } from '@xihan-ui/headless'\nimport { computed, defineComponent, h } from 'vue'\nimport { withXhConfig } from '../../config/config'\nimport { vueNormalize } from '../../runtime/normalize-props'\nimport { provideTypography, useTypographyContext } from './context'\n\n/** 正文块容器,管理段间距与最大行宽;默认值由 connect 给出;普通类型省略 default,Boolean 显式保留 undefined */\nexport const XhTypographyRoot = defineComponent({\n name: 'XhTypographyRoot',\n props: {\n size: { type: String as PropType<Size> },\n align: { type: String as PropType<TypographyAlign> },\n weight: { type: String as PropType<TypographyWeight> },\n },\n setup(props, { slots }) {\n const api = computed(() => connectTypography(
|
|
1
|
+
{"version":3,"file":"typography.js","names":[],"sources":["../../../src/components/typography/typography.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// 提供 typography 相关实现。\n\nimport type { Size, Tone } from '@xihan-ui/core'\nimport type { TypographyAlign, TypographyLevel, TypographyProps, TypographyVariant, TypographyWeight } from '@xihan-ui/headless'\nimport type { PropType } from 'vue'\nimport { connectTypography } from '@xihan-ui/headless'\nimport { computed, defineComponent, h } from 'vue'\nimport { withXhConfig } from '../../config/config'\nimport { vueNormalize } from '../../runtime/normalize-props'\nimport { provideTypography, useTypographyContext } from './context'\n\n/** 正文块容器,管理段间距与最大行宽;默认值由 connect 给出;普通类型省略 default,Boolean 显式保留 undefined */\nexport const XhTypographyRoot = defineComponent({\n name: 'XhTypographyRoot',\n props: {\n size: { type: String as PropType<Size> },\n align: { type: String as PropType<TypographyAlign> },\n weight: { type: String as PropType<TypographyWeight> },\n },\n setup(props, { slots }) {\n // withXhConfig 只能在 setup 期调,连接层在渲染期读这份代理\n const configured = withXhConfig('typography', props)\n const api = computed(() => connectTypography(configured as TypographyProps, vueNormalize))\n provideTypography({ api })\n return () => h('div', api.value.getRootProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\n/**\n * 标题:level 只切换字号档位,不决定标签。\n * as 决定渲染为哪个标签,默认 p;需要进入文档大纲时写 as=\"h2\"。\n */\nexport const XhTypographyHeading = defineComponent({\n name: 'XhTypographyHeading',\n props: {\n level: { type: [Number, String] as PropType<TypographyLevel | string> },\n as: { type: String, default: 'p' },\n },\n setup(props, { slots }) {\n const ctx = useTypographyContext()\n return () => h(\n props.as,\n ctx.api.value.getHeadingProps({ level: props.level }) as Record<string, unknown>,\n slots.default?.(),\n )\n },\n})\n\nexport const XhTypographyParagraph = defineComponent({\n name: 'XhTypographyParagraph',\n setup(_, { slots }) {\n const ctx = useTypographyContext()\n return () => h('p', ctx.api.value.getParagraphProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\n/**\n * 行内文字:variant 切换形态,tone 切换语气色,weight 切换字重。\n * as 决定渲染为哪个标签,默认 span;需要 code / strong 的原生语义时自行写明。\n */\nexport const XhTypographyText = defineComponent({\n name: 'XhTypographyText',\n props: {\n tone: { type: String as PropType<Tone> },\n variant: { type: String as PropType<TypographyVariant> },\n weight: { type: String as PropType<TypographyWeight> },\n as: { type: String, default: 'span' },\n },\n setup(props, { slots }) {\n const ctx = useTypographyContext()\n return () => h(\n props.as,\n ctx.api.value.getTextProps({ tone: props.tone, variant: props.variant, weight: props.weight }) as Record<string, unknown>,\n slots.default?.(),\n )\n },\n})\n\n/**\n * 富文本容器:外来的 HTML(Markdown 渲染结果)铺入其中,样式按标签给出。\n * as 决定渲染为哪个标签,默认 div。\n */\nexport const XhTypographyProse = defineComponent({\n name: 'XhTypographyProse',\n props: {\n as: { type: String, default: 'div' },\n },\n setup(props, { slots }) {\n const ctx = useTypographyContext()\n return () => h(props.as, ctx.api.value.getProseProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\n// href、target、rel 由作者写,这里只给身份\nexport const XhTypographyLink = defineComponent({\n name: 'XhTypographyLink',\n setup(_, { slots }) {\n const ctx = useTypographyContext()\n return () => h('a', ctx.api.value.getLinkProps() as Record<string, unknown>, slots.default?.())\n },\n})\n"],"mappings":";;;;;;;AAiBA,MAAa,mBAAmB,gBAAgB;CAC9C,MAAM;CACN,OAAO;EACL,MAAM,EAAE,MAAM,OAAyB;EACvC,OAAO,EAAE,MAAM,OAAoC;EACnD,QAAQ,EAAE,MAAM,OAAqC;CACvD;CACA,MAAM,OAAO,EAAE,SAAS;EAEtB,MAAM,aAAa,aAAa,cAAc,KAAK;EACnD,MAAM,MAAM,eAAe,kBAAkB,YAA+B,YAAY,CAAC;EACzF,kBAAkB,EAAE,IAAI,CAAC;EACzB,aAAa,EAAE,OAAO,IAAI,MAAM,aAAa,GAA8B,MAAM,UAAU,CAAC;CAC9F;AACF,CAAC;;;;;AAMD,MAAa,sBAAsB,gBAAgB;CACjD,MAAM;CACN,OAAO;EACL,OAAO,EAAE,MAAM,CAAC,QAAQ,MAAM,EAAwC;EACtE,IAAI;GAAE,MAAM;GAAQ,SAAS;EAAI;CACnC;CACA,MAAM,OAAO,EAAE,SAAS;EACtB,MAAM,MAAM,qBAAqB;EACjC,aAAa,EACX,MAAM,IACN,IAAI,IAAI,MAAM,gBAAgB,EAAE,OAAO,MAAM,MAAM,CAAC,GACpD,MAAM,UAAU,CAClB;CACF;AACF,CAAC;AAED,MAAa,wBAAwB,gBAAgB;CACnD,MAAM;CACN,MAAM,GAAG,EAAE,SAAS;EAClB,MAAM,MAAM,qBAAqB;EACjC,aAAa,EAAE,KAAK,IAAI,IAAI,MAAM,kBAAkB,GAA8B,MAAM,UAAU,CAAC;CACrG;AACF,CAAC;;;;;AAMD,MAAa,mBAAmB,gBAAgB;CAC9C,MAAM;CACN,OAAO;EACL,MAAM,EAAE,MAAM,OAAyB;EACvC,SAAS,EAAE,MAAM,OAAsC;EACvD,QAAQ,EAAE,MAAM,OAAqC;EACrD,IAAI;GAAE,MAAM;GAAQ,SAAS;EAAO;CACtC;CACA,MAAM,OAAO,EAAE,SAAS;EACtB,MAAM,MAAM,qBAAqB;EACjC,aAAa,EACX,MAAM,IACN,IAAI,IAAI,MAAM,aAAa;GAAE,MAAM,MAAM;GAAM,SAAS,MAAM;GAAS,QAAQ,MAAM;EAAO,CAAC,GAC7F,MAAM,UAAU,CAClB;CACF;AACF,CAAC;;;;;AAMD,MAAa,oBAAoB,gBAAgB;CAC/C,MAAM;CACN,OAAO,EACL,IAAI;EAAE,MAAM;EAAQ,SAAS;CAAM,EACrC;CACA,MAAM,OAAO,EAAE,SAAS;EACtB,MAAM,MAAM,qBAAqB;EACjC,aAAa,EAAE,MAAM,IAAI,IAAI,IAAI,MAAM,cAAc,GAA8B,MAAM,UAAU,CAAC;CACtG;AACF,CAAC;AAGD,MAAa,mBAAmB,gBAAgB;CAC9C,MAAM;CACN,MAAM,GAAG,EAAE,SAAS;EAClB,MAAM,MAAM,qBAAqB;EACjC,aAAa,EAAE,KAAK,IAAI,IAAI,MAAM,aAAa,GAA8B,MAAM,UAAU,CAAC;CAChG;AACF,CAAC"}
|