@xihan-ui/vue 3.0.0 → 3.2.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 +148 -0
- package/README.md +1 -1
- 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.d.ts +2 -0
- package/dist/components/cascader/cascader.d.ts.map +1 -1
- package/dist/components/cascader/cascader.js +5 -2
- package/dist/components/cascader/cascader.js.map +1 -1
- package/dist/components/checkbox-group/checkbox-group.d.ts.map +1 -1
- package/dist/components/checkbox-group/checkbox-group.js +30 -11
- package/dist/components/checkbox-group/checkbox-group.js.map +1 -1
- package/dist/components/checkbox-group/use-checkbox-group.d.ts +6 -1
- package/dist/components/checkbox-group/use-checkbox-group.d.ts.map +1 -1
- package/dist/components/checkbox-group/use-checkbox-group.js +7 -3
- package/dist/components/checkbox-group/use-checkbox-group.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-field/color-field.d.ts +2 -0
- package/dist/components/color-field/color-field.d.ts.map +1 -1
- package/dist/components/color-field/color-field.js +3 -1
- package/dist/components/color-field/color-field.js.map +1 -1
- package/dist/components/color-picker/color-picker.d.ts +76 -9
- package/dist/components/color-picker/color-picker.d.ts.map +1 -1
- package/dist/components/color-picker/color-picker.js +89 -7
- package/dist/components/color-picker/color-picker.js.map +1 -1
- package/dist/components/color-picker/context.js +10 -1
- package/dist/components/color-picker/context.js.map +1 -1
- package/dist/components/color-picker/use-color-picker.js +14 -4
- package/dist/components/color-picker/use-color-picker.js.map +1 -1
- package/dist/components/color-swatch-picker/color-swatch-picker.d.ts.map +1 -1
- package/dist/components/color-swatch-picker/color-swatch-picker.js +21 -4
- package/dist/components/color-swatch-picker/color-swatch-picker.js.map +1 -1
- package/dist/components/color-swatch-picker/use-color-swatch-picker.d.ts +6 -1
- package/dist/components/color-swatch-picker/use-color-swatch-picker.d.ts.map +1 -1
- package/dist/components/color-swatch-picker/use-color-swatch-picker.js +7 -3
- package/dist/components/color-swatch-picker/use-color-swatch-picker.js.map +1 -1
- package/dist/components/combobox/combobox.d.ts +2 -0
- package/dist/components/combobox/combobox.d.ts.map +1 -1
- package/dist/components/combobox/combobox.js +6 -4
- 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.d.ts +9 -1
- package/dist/components/context-menu/context-menu.d.ts.map +1 -1
- package/dist/components/context-menu/context-menu.js +11 -1
- package/dist/components/context-menu/context-menu.js.map +1 -1
- package/dist/components/date-field/date-field.d.ts +6 -2
- package/dist/components/date-field/date-field.d.ts.map +1 -1
- package/dist/components/date-field/date-field.js +5 -2
- package/dist/components/date-field/date-field.js.map +1 -1
- package/dist/components/date-picker/context.js +10 -1
- package/dist/components/date-picker/context.js.map +1 -1
- package/dist/components/date-picker/date-picker.d.ts +58 -3
- package/dist/components/date-picker/date-picker.d.ts.map +1 -1
- package/dist/components/date-picker/date-picker.js +77 -5
- package/dist/components/date-picker/date-picker.js.map +1 -1
- package/dist/components/date-range-picker/date-range-picker.d.ts +27 -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 +10 -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/field/context.d.ts +6 -1
- package/dist/components/field/context.d.ts.map +1 -1
- package/dist/components/field/context.js +10 -1
- package/dist/components/field/context.js.map +1 -1
- package/dist/components/field/field.d.ts +9 -1
- package/dist/components/field/field.d.ts.map +1 -1
- package/dist/components/field/field.js +14 -2
- package/dist/components/field/field.js.map +1 -1
- package/dist/components/field/use-field-control.d.ts +8 -1
- package/dist/components/field/use-field-control.d.ts.map +1 -1
- package/dist/components/field/use-field-control.js +14 -1
- package/dist/components/field/use-field-control.js.map +1 -1
- package/dist/components/file-upload/file-upload.d.ts +2 -0
- package/dist/components/file-upload/file-upload.d.ts.map +1 -1
- package/dist/components/file-upload/file-upload.js +3 -1
- package/dist/components/file-upload/file-upload.js.map +1 -1
- package/dist/components/float-button/float-button.d.ts +26 -1
- package/dist/components/float-button/float-button.d.ts.map +1 -1
- package/dist/components/float-button/float-button.js +17 -5
- package/dist/components/float-button/float-button.js.map +1 -1
- package/dist/components/float-button/use-float-button.js +7 -1
- package/dist/components/float-button/use-float-button.js.map +1 -1
- package/dist/components/floating-panel/floating-panel.d.ts +2 -2
- 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/context.js +5 -1
- package/dist/components/form/context.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/form/use-form-control.js +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 +31 -2
- 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 +9 -1
- package/dist/components/menubar/menubar.d.ts.map +1 -1
- package/dist/components/menubar/menubar.js +29 -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/pin-input/pin-input.d.ts.map +1 -1
- package/dist/components/pin-input/pin-input.js +7 -1
- package/dist/components/pin-input/pin-input.js.map +1 -1
- package/dist/components/popconfirm/popconfirm.d.ts +20 -1
- package/dist/components/popconfirm/popconfirm.d.ts.map +1 -1
- package/dist/components/popconfirm/popconfirm.js +9 -1
- package/dist/components/popconfirm/popconfirm.js.map +1 -1
- package/dist/components/popconfirm/use-popconfirm.js +2 -0
- package/dist/components/popconfirm/use-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/radio-group/radio-group.d.ts.map +1 -1
- package/dist/components/radio-group/radio-group.js +25 -6
- package/dist/components/radio-group/radio-group.js.map +1 -1
- package/dist/components/radio-group/use-radio-group.d.ts +5 -0
- package/dist/components/radio-group/use-radio-group.d.ts.map +1 -1
- package/dist/components/radio-group/use-radio-group.js +4 -1
- package/dist/components/radio-group/use-radio-group.js.map +1 -1
- package/dist/components/rating/rating.d.ts.map +1 -1
- package/dist/components/rating/rating.js +7 -1
- package/dist/components/rating/rating.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 +13 -0
- package/dist/components/select/select.d.ts.map +1 -1
- package/dist/components/select/select.js +15 -4
- 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/signature-pad/signature-pad.d.ts +2 -0
- package/dist/components/signature-pad/signature-pad.d.ts.map +1 -1
- package/dist/components/signature-pad/signature-pad.js +3 -1
- package/dist/components/signature-pad/signature-pad.js.map +1 -1
- package/dist/components/slider/slider.d.ts.map +1 -1
- package/dist/components/slider/slider.js +7 -1
- package/dist/components/slider/slider.js.map +1 -1
- package/dist/components/tags-input/tags-input.d.ts +2 -0
- package/dist/components/tags-input/tags-input.d.ts.map +1 -1
- package/dist/components/tags-input/tags-input.js +3 -1
- package/dist/components/tags-input/tags-input.js.map +1 -1
- package/dist/components/text-field/text-field.d.ts +2 -0
- package/dist/components/text-field/text-field.d.ts.map +1 -1
- package/dist/components/text-field/text-field.js +3 -1
- package/dist/components/text-field/text-field.js.map +1 -1
- package/dist/components/time-field/time-field.d.ts +2 -0
- package/dist/components/time-field/time-field.d.ts.map +1 -1
- package/dist/components/time-field/time-field.js +3 -1
- package/dist/components/time-field/time-field.js.map +1 -1
- package/dist/components/time-picker/context.js +10 -1
- package/dist/components/time-picker/context.js.map +1 -1
- package/dist/components/time-picker/time-picker.d.ts +78 -9
- package/dist/components/time-picker/time-picker.d.ts.map +1 -1
- package/dist/components/time-picker/time-picker.js +91 -9
- package/dist/components/time-picker/time-picker.js.map +1 -1
- package/dist/components/time-range-picker/time-range-picker.d.ts +2 -0
- package/dist/components/time-range-picker/time-range-picker.d.ts.map +1 -1
- package/dist/components/time-range-picker/time-range-picker.js +5 -2
- package/dist/components/time-range-picker/time-range-picker.js.map +1 -1
- package/dist/components/toggle-group/toggle-group.d.ts.map +1 -1
- package/dist/components/toggle-group/toggle-group.js +7 -1
- package/dist/components/toggle-group/toggle-group.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/tree.d.ts +2 -2
- package/dist/components/tree/tree.js +1 -1
- package/dist/components/tree/tree.js.map +1 -1
- package/dist/components/tree-select/tree-select.d.ts +2 -0
- package/dist/components/tree-select/tree-select.d.ts.map +1 -1
- package/dist/components/tree-select/tree-select.js +6 -4
- package/dist/components/tree-select/tree-select.js.map +1 -1
- package/dist/components/truncate/truncate.d.ts.map +1 -1
- package/dist/components/truncate/truncate.js +4 -8
- package/dist/components/truncate/truncate.js.map +1 -1
- package/dist/index.d.ts +7 -7
- package/dist/index.js +8 -8
- 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 +13 -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/runtime/with-handlers.js +25 -0
- package/dist/runtime/with-handlers.js.map +1 -0
- 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
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"color-field.js","names":[],"sources":["../../../src/components/color-field/color-field.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// 提供 color field 相关实现。\n\nimport type { ControlVariant, Size, Tone } from '@xihan-ui/core'\nimport type { ColorFieldApi, ColorFieldSchema, ColorFormat } 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 { useFieldLabelWiring, useFieldStateWiring } from '../field/use-field-control'\nimport { useFormControlProps } from '../form/use-form-control'\nimport { provideColorField, useColorFieldContext } from './context'\nimport { useColorField } from './use-color-field'\n\ntype ColorFieldProps = ColorFieldSchema['props']\n\nexport type ColorFieldRootSlotProps = Pick<\n ColorFieldApi,\n 'value' | 'empty' | 'text' | 'editing' | 'valid' | 'invalid' | 'canClear' | 'setValue' | 'clear' | 'commit'\n>\n\nexport const XhColorFieldRoot = defineComponent({\n name: 'XhColorFieldRoot',\n props: {\n /** 颜色串;缺席即非受控。空串表示没有颜色。 */\n value: { type: String },\n defaultValue: { type: String },\n /** 值串的写法:hex / rgba / hsla / oklch,默认 hex。 */\n format: { type: String as PropType<ColorFormat> },\n /** 带透明度,默认关闭。 */\n alpha: { type: Boolean, default: undefined },\n placeholder: { type: String },\n disabled: { type: Boolean, default: undefined },\n readOnly: { type: Boolean, default: undefined },\n required: { type: Boolean, default: undefined },\n invalid: { type: Boolean, default: undefined },\n name: { type: String },\n clearable: Boolean,\n variant: { type: String as PropType<ControlVariant> },\n tone: { type: String as PropType<Tone> },\n size: { type: String as PropType<Size> },\n translations: { type: Object as PropType<ColorFieldProps['translations']> },\n },\n // value-change 携带 { value },update:value 携带裸串\n emits: {\n 'value-change': (_details: PayloadOf<ColorFieldProps, 'onValueChange'>) => true,\n 'update:value': (_value: PayloadOf<ColorFieldProps, 'onValueChange'>['value']) => true,\n },\n slots: Object as SlotsType<{\n default?: (props: ColorFieldRootSlotProps) => VNode[]\n }>,\n setup(props, { slots, emit }) {\n const notify: ColorFieldProps['onValueChange'] = (details) => {\n emit('value-change', details)\n emit('update:value', details.value)\n }\n const ctx = useColorField(withXhConfig('color-field', useFormControlProps(props)) as ColorFieldProps, notify)\n provideColorField(ctx)\n return () => h('div', ctx.api.value.getRootProps() as Record<string, unknown>, slots.default?.({\n value: ctx.api.value.value,\n empty: ctx.api.value.empty,\n text: ctx.api.value.text,\n editing: ctx.api.value.editing,\n valid: ctx.api.value.valid,\n invalid: ctx.api.value.invalid,\n canClear: ctx.api.value.canClear,\n setValue: ctx.api.value.setValue,\n clear: ctx.api.value.clear,\n commit: ctx.api.value.commit,\n }))\n },\n})\n\nexport const XhColorFieldLabel = defineComponent({\n name: 'XhColorFieldLabel',\n setup(_, { slots }) {\n const ctx = useColorFieldContext()\n // 必须是原生 <label>,connect 把 for 写向 input\n return () => h('label', ctx.api.value.getLabelProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhColorFieldControl = defineComponent({\n name: 'XhColorFieldControl',\n setup(_, { slots }) {\n const ctx = useColorFieldContext()\n // 视觉盒:色块、输入框与清空按钮都放进来,皮肤把描边、底色、聚焦环画在它身上\n return () => h('div', ctx.api.value.getControlProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\n/** 当前颜色的色块:色块面家族绘制棋盘格与描边,颜色由连接层写入私有槽。 */\nexport const XhColorFieldSwatch = defineComponent({\n name: 'XhColorFieldSwatch',\n setup() {\n const ctx = useColorFieldContext()\n return () => h('span', ctx.api.value.getSwatchProps() as Record<string, unknown>)\n },\n})\n\nexport const XhColorFieldInput = defineComponent({\n name: 'XhColorFieldInput',\n setup() {\n // 字段的说明与校验状态要落在真控件上,不能停在封装根的 div 上\n const fieldWiring = useFieldStateWiring()\n // 字段的标签也得并进名字链:控件自带的那条指的是它自己那个没渲染的 label 部件\n const fieldLabel = useFieldLabelWiring()\n const ctx = useColorFieldContext()\n return () => h('input', fieldLabel.value({\n ...fieldWiring.value,\n ...ctx.api.value.getInputProps() as Record<string, unknown>,\n }))\n },\n})\n\nexport const XhColorFieldClearTrigger = defineComponent({\n name: 'XhColorFieldClearTrigger',\n setup(_, { slots }) {\n const ctx = useColorFieldContext()\n return () => h('button', ctx.api.value.getClearTriggerProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhColorFieldHiddenInput = defineComponent({\n name: 'XhColorFieldHiddenInput',\n setup() {\n const ctx = useColorFieldContext()\n return () => h('input', ctx.api.value.getHiddenInputProps() as Record<string, unknown>)\n },\n})\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"color-field.js","names":[],"sources":["../../../src/components/color-field/color-field.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// 提供 color field 相关实现。\n\nimport type { ControlVariant, Size, Tone } from '@xihan-ui/core'\nimport type { ColorFieldApi, ColorFieldSchema, ColorFormat } 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 { withHandlers } from '../../runtime/with-handlers'\nimport { useFieldLabelWiring, useFieldStateWiring } from '../field/use-field-control'\nimport { useFormControlProps } from '../form/use-form-control'\nimport { provideColorField, useColorFieldContext } from './context'\nimport { useColorField } from './use-color-field'\n\ntype ColorFieldProps = ColorFieldSchema['props']\n\nexport type ColorFieldRootSlotProps = Pick<\n ColorFieldApi,\n 'value' | 'empty' | 'text' | 'editing' | 'valid' | 'invalid' | 'canClear' | 'setValue' | 'clear' | 'commit'\n>\n\nexport const XhColorFieldRoot = defineComponent({\n name: 'XhColorFieldRoot',\n props: {\n /** 颜色串;缺席即非受控。空串表示没有颜色。 */\n value: { type: String },\n defaultValue: { type: String },\n /** 值串的写法:hex / rgba / hsla / oklch,默认 hex。 */\n format: { type: String as PropType<ColorFormat> },\n /** 带透明度,默认关闭。 */\n alpha: { type: Boolean, default: undefined },\n placeholder: { type: String },\n disabled: { type: Boolean, default: undefined },\n readOnly: { type: Boolean, default: undefined },\n required: { type: Boolean, default: undefined },\n invalid: { type: Boolean, default: undefined },\n name: { type: String },\n clearable: Boolean,\n variant: { type: String as PropType<ControlVariant> },\n tone: { type: String as PropType<Tone> },\n size: { type: String as PropType<Size> },\n translations: { type: Object as PropType<ColorFieldProps['translations']> },\n },\n // value-change 携带 { value },update:value 携带裸串\n emits: {\n 'clear': () => true,\n 'value-change': (_details: PayloadOf<ColorFieldProps, 'onValueChange'>) => true,\n 'update:value': (_value: PayloadOf<ColorFieldProps, 'onValueChange'>['value']) => true,\n },\n slots: Object as SlotsType<{\n default?: (props: ColorFieldRootSlotProps) => VNode[]\n }>,\n setup(props, { slots, emit }) {\n const notify: ColorFieldProps['onValueChange'] = (details) => {\n emit('value-change', details)\n emit('update:value', details.value)\n }\n const ctx = useColorField(withHandlers(withXhConfig('color-field', useFormControlProps(props)), { onClear: () => emit('clear') }) as ColorFieldProps, notify)\n provideColorField(ctx)\n return () => h('div', ctx.api.value.getRootProps() as Record<string, unknown>, slots.default?.({\n value: ctx.api.value.value,\n empty: ctx.api.value.empty,\n text: ctx.api.value.text,\n editing: ctx.api.value.editing,\n valid: ctx.api.value.valid,\n invalid: ctx.api.value.invalid,\n canClear: ctx.api.value.canClear,\n setValue: ctx.api.value.setValue,\n clear: ctx.api.value.clear,\n commit: ctx.api.value.commit,\n }))\n },\n})\n\nexport const XhColorFieldLabel = defineComponent({\n name: 'XhColorFieldLabel',\n setup(_, { slots }) {\n const ctx = useColorFieldContext()\n // 必须是原生 <label>,connect 把 for 写向 input\n return () => h('label', ctx.api.value.getLabelProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhColorFieldControl = defineComponent({\n name: 'XhColorFieldControl',\n setup(_, { slots }) {\n const ctx = useColorFieldContext()\n // 视觉盒:色块、输入框与清空按钮都放进来,皮肤把描边、底色、聚焦环画在它身上\n return () => h('div', ctx.api.value.getControlProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\n/** 当前颜色的色块:色块面家族绘制棋盘格与描边,颜色由连接层写入私有槽。 */\nexport const XhColorFieldSwatch = defineComponent({\n name: 'XhColorFieldSwatch',\n setup() {\n const ctx = useColorFieldContext()\n return () => h('span', ctx.api.value.getSwatchProps() as Record<string, unknown>)\n },\n})\n\nexport const XhColorFieldInput = defineComponent({\n name: 'XhColorFieldInput',\n setup() {\n // 字段的说明与校验状态要落在真控件上,不能停在封装根的 div 上\n const fieldWiring = useFieldStateWiring()\n // 字段的标签也得并进名字链:控件自带的那条指的是它自己那个没渲染的 label 部件\n const fieldLabel = useFieldLabelWiring()\n const ctx = useColorFieldContext()\n return () => h('input', fieldLabel.value({\n ...fieldWiring.value,\n ...ctx.api.value.getInputProps() as Record<string, unknown>,\n }))\n },\n})\n\nexport const XhColorFieldClearTrigger = defineComponent({\n name: 'XhColorFieldClearTrigger',\n setup(_, { slots }) {\n const ctx = useColorFieldContext()\n return () => h('button', ctx.api.value.getClearTriggerProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhColorFieldHiddenInput = defineComponent({\n name: 'XhColorFieldHiddenInput',\n setup() {\n const ctx = useColorFieldContext()\n return () => h('input', ctx.api.value.getHiddenInputProps() as Record<string, unknown>)\n },\n})\n"],"mappings":"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"}
|
|
@@ -1,17 +1,30 @@
|
|
|
1
1
|
import { PayloadOf } from "../../runtime/payload.js";
|
|
2
2
|
import { PropType, SlotsType, VNode } from "vue";
|
|
3
3
|
import { ControlVariant, Direction, Placement, Size } from "@xihan-ui/core";
|
|
4
|
-
import { ColorFormat, ColorPickerApi, ColorPickerInputChannel, ColorPickerSchema, ColorPickerTranslations } from "@xihan-ui/headless";
|
|
4
|
+
import { ColorFormat, ColorPickerApi, ColorPickerInputChannel, ColorPickerSchema, ColorPickerSelectionMode, ColorPickerTranslations } from "@xihan-ui/headless";
|
|
5
5
|
//#region src/components/color-picker/color-picker.d.ts
|
|
6
6
|
type ColorPickerProps = ColorPickerSchema['props'];
|
|
7
7
|
/** 默认插槽的载荷:展开态、当前颜色的各种表示、预设色板、屏幕取色状态,以及修改展开与修改值两个动作。 */
|
|
8
|
-
type ColorPickerRootSlotProps = Pick<ColorPickerApi, 'open' | 'value' | 'rgba' | 'hsva' | 'swatches' | 'recentColors' | 'picking' | 'eyeDropperSupported' | 'errors' | 'setOpen' | 'setValue' | 'clearError' | 'clearRecentColors'>;
|
|
8
|
+
type ColorPickerRootSlotProps = Pick<ColorPickerApi, 'open' | 'value' | 'color' | 'canAdd' | 'rgba' | 'hsva' | 'swatches' | 'recentColors' | 'picking' | 'eyeDropperSupported' | 'errors' | 'setOpen' | 'setValue' | 'add' | 'clearError' | 'clearRecentColors'>;
|
|
9
9
|
declare const XhColorPickerRoot: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
|
|
10
|
+
/** 选中的颜色,值串数组;单选可写裸串。 */
|
|
10
11
|
value: {
|
|
11
|
-
type:
|
|
12
|
+
type: PropType<string | string[]>;
|
|
12
13
|
};
|
|
13
14
|
defaultValue: {
|
|
14
|
-
type:
|
|
15
|
+
type: PropType<string | string[]>;
|
|
16
|
+
};
|
|
17
|
+
/** 选择模式,默认 single;multiple 时工作色是草稿、按「添加」收进值,色块点一下切换,输入行里排成标签。 */
|
|
18
|
+
selectionMode: {
|
|
19
|
+
type: PropType<ColorPickerSelectionMode>;
|
|
20
|
+
};
|
|
21
|
+
/** multiple 下最多选几个颜色。 */
|
|
22
|
+
maxSelected: {
|
|
23
|
+
type: NumberConstructor;
|
|
24
|
+
};
|
|
25
|
+
/** 多选时输入行最多摆几枚标签,其余折进 +N 那一枚;默认 3。 */
|
|
26
|
+
maxTagCount: {
|
|
27
|
+
type: NumberConstructor;
|
|
15
28
|
};
|
|
16
29
|
format: {
|
|
17
30
|
type: PropType<ColorFormat>;
|
|
@@ -75,11 +88,24 @@ declare const XhColorPickerRoot: import("vue").DefineComponent<import("vue").Ext
|
|
|
75
88
|
'recent-colors-change': (_details: PayloadOf<ColorPickerProps, "onRecentColorsChange">) => true;
|
|
76
89
|
'update:recentColors': (_recentColors: PayloadOf<ColorPickerProps, "onRecentColorsChange">["recentColors"]) => true;
|
|
77
90
|
}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
|
|
91
|
+
/** 选中的颜色,值串数组;单选可写裸串。 */
|
|
78
92
|
value: {
|
|
79
|
-
type:
|
|
93
|
+
type: PropType<string | string[]>;
|
|
80
94
|
};
|
|
81
95
|
defaultValue: {
|
|
82
|
-
type:
|
|
96
|
+
type: PropType<string | string[]>;
|
|
97
|
+
};
|
|
98
|
+
/** 选择模式,默认 single;multiple 时工作色是草稿、按「添加」收进值,色块点一下切换,输入行里排成标签。 */
|
|
99
|
+
selectionMode: {
|
|
100
|
+
type: PropType<ColorPickerSelectionMode>;
|
|
101
|
+
};
|
|
102
|
+
/** multiple 下最多选几个颜色。 */
|
|
103
|
+
maxSelected: {
|
|
104
|
+
type: NumberConstructor;
|
|
105
|
+
};
|
|
106
|
+
/** 多选时输入行最多摆几枚标签,其余折进 +N 那一枚;默认 3。 */
|
|
107
|
+
maxTagCount: {
|
|
108
|
+
type: NumberConstructor;
|
|
83
109
|
};
|
|
84
110
|
format: {
|
|
85
111
|
type: PropType<ColorFormat>;
|
|
@@ -134,7 +160,7 @@ declare const XhColorPickerRoot: import("vue").DefineComponent<import("vue").Ext
|
|
|
134
160
|
};
|
|
135
161
|
}>> & Readonly<{
|
|
136
162
|
"onValue-change"?: ((_details: import("@xihan-ui/headless").ColorPickerValueChangeDetails) => any) | undefined;
|
|
137
|
-
"onUpdate:value"?: ((_value: string) => any) | undefined;
|
|
163
|
+
"onUpdate:value"?: ((_value: string[]) => any) | undefined;
|
|
138
164
|
"onOpen-change"?: ((_details: import("@xihan-ui/headless").ColorPickerOpenChangeDetails) => any) | undefined;
|
|
139
165
|
"onUpdate:open"?: ((_open: boolean) => any) | undefined;
|
|
140
166
|
"onColor-error"?: ((_details: import("@xihan-ui/headless").ColorPickerErrorDetails) => any) | undefined;
|
|
@@ -230,9 +256,50 @@ declare const XhColorPickerSwatchPicker: import("vue").DefineComponent<{}, () =>
|
|
|
230
256
|
declare const XhColorPickerRecentSwatchPicker: import("vue").DefineComponent<{}, () => VNode<import("vue").RendererNode, import("vue").RendererElement, {
|
|
231
257
|
[key: string]: any;
|
|
232
258
|
}>, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
|
|
233
|
-
|
|
259
|
+
/** 标签文字所在的块(tag 的 label)。 */
|
|
260
|
+
declare const XhColorPickerTagLabel: import("vue").DefineComponent<{}, () => VNode<import("vue").RendererNode, import("vue").RendererElement, {
|
|
261
|
+
[key: string]: any;
|
|
262
|
+
}>, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
|
|
263
|
+
/** 标签中的删除按钮:即所在标签那份 tag 的 close-trigger,可及名使用 translations.deleteItem;点按摘掉所在标签的颜色,焦点不动。 */
|
|
264
|
+
declare const XhColorPickerItemDeleteTrigger: 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
|
+
/** 多选时一个选中颜色一个标签,即库内 tag 的 root(data-scope="tag"),标签前由皮肤画一个色点。 */
|
|
268
|
+
declare const XhColorPickerTag: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
|
|
269
|
+
/** 它代表哪个选中颜色。 */
|
|
270
|
+
value: {
|
|
271
|
+
type: StringConstructor;
|
|
272
|
+
required: true;
|
|
273
|
+
};
|
|
274
|
+
}>, () => VNode<import("vue").RendererNode, import("vue").RendererElement, {
|
|
275
|
+
[key: string]: any;
|
|
276
|
+
}>, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
|
|
277
|
+
/** 它代表哪个选中颜色。 */
|
|
278
|
+
value: {
|
|
279
|
+
type: StringConstructor;
|
|
280
|
+
required: true;
|
|
281
|
+
};
|
|
282
|
+
}>> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
|
|
283
|
+
/** 折叠的标签合成的一个标签:有插槽时使用插槽,否则显示 +N。没有折叠的标签时连接层写 hidden。 */
|
|
284
|
+
declare const XhColorPickerOverflowTag: import("vue").DefineComponent<{}, () => VNode<import("vue").RendererNode, import("vue").RendererElement, {
|
|
234
285
|
[key: string]: any;
|
|
235
286
|
}>, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
|
|
287
|
+
/**
|
|
288
|
+
* 标签行:多选时放在盒里、触发钮之前;单选时连接层给 hidden。
|
|
289
|
+
* 不写插槽即按 tags 铺出带删除钮的标签与 +N 那一枚,写了插槽由作者自己铺。
|
|
290
|
+
*/
|
|
291
|
+
declare const XhColorPickerTagList: import("vue").DefineComponent<{}, () => VNode<import("vue").RendererNode, import("vue").RendererElement, {
|
|
292
|
+
[key: string]: any;
|
|
293
|
+
}>, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
|
|
294
|
+
/** 「添加」:多选时把工作色收进值,浮层不收;单选时连接层给 hidden。文字由作者写。 */
|
|
295
|
+
declare const XhColorPickerConfirmTrigger: import("vue").DefineComponent<{}, () => VNode<import("vue").RendererNode, import("vue").RendererElement, {
|
|
296
|
+
[key: string]: any;
|
|
297
|
+
}>, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
|
|
298
|
+
declare const XhColorPickerHiddenInput: import("vue").DefineComponent<{}, () => VNode<import("vue").RendererNode, import("vue").RendererElement, {
|
|
299
|
+
[key: string]: any;
|
|
300
|
+
}> | VNode<import("vue").RendererNode, import("vue").RendererElement, {
|
|
301
|
+
[key: string]: any;
|
|
302
|
+
}>[], {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
|
|
236
303
|
//#endregion
|
|
237
|
-
export { ColorPickerRootSlotProps, XhColorPickerAlphaSlider, XhColorPickerAreaThumb, XhColorPickerChannelInput, XhColorPickerContent, XhColorPickerControl, XhColorPickerEyeDropperTrigger, XhColorPickerHiddenInput, XhColorPickerHueSlider, XhColorPickerLabel, XhColorPickerPositioner, XhColorPickerRecentSwatchPicker, XhColorPickerRoot, XhColorPickerSaturationArea, XhColorPickerSwatch, XhColorPickerSwatchPicker, XhColorPickerTrigger, XhColorPickerValueText };
|
|
304
|
+
export { ColorPickerRootSlotProps, XhColorPickerAlphaSlider, XhColorPickerAreaThumb, XhColorPickerChannelInput, XhColorPickerConfirmTrigger, XhColorPickerContent, XhColorPickerControl, XhColorPickerEyeDropperTrigger, XhColorPickerHiddenInput, XhColorPickerHueSlider, XhColorPickerItemDeleteTrigger, XhColorPickerLabel, XhColorPickerOverflowTag, XhColorPickerPositioner, XhColorPickerRecentSwatchPicker, XhColorPickerRoot, XhColorPickerSaturationArea, XhColorPickerSwatch, XhColorPickerSwatchPicker, XhColorPickerTag, XhColorPickerTagLabel, XhColorPickerTagList, XhColorPickerTrigger, XhColorPickerValueText };
|
|
238
305
|
//# sourceMappingURL=color-picker.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"color-picker.d.ts","names":[],"sources":["../../../src/components/color-picker/color-picker.ts"],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"color-picker.d.ts","names":[],"sources":["../../../src/components/color-picker/color-picker.ts"],"mappings":"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"}
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import { withXhConfig } from "../../config/config.js";
|
|
2
2
|
import { XhPortal } from "../../runtime/portal.js";
|
|
3
|
+
import { slotIsPlainText } from "../../runtime/slot-content.js";
|
|
3
4
|
import { useScrollbars } from "../../runtime/use-scrollbars.js";
|
|
4
5
|
import { useFormControlProps } from "../form/use-form-control.js";
|
|
5
6
|
import { provideColorSlider } from "../color-slider/context.js";
|
|
6
7
|
import { XhColorSliderControl, XhColorSliderThumb, XhColorSliderTrack } from "../color-slider/color-slider.js";
|
|
7
8
|
import { provideColorSwatchPicker } from "../color-swatch-picker/context.js";
|
|
8
9
|
import { XhColorSwatchPickerItem } from "../color-swatch-picker/color-swatch-picker.js";
|
|
9
|
-
import { provideColorPicker, useColorPickerContext } from "./context.js";
|
|
10
|
+
import { provideColorPicker, provideColorPickerTag, useColorPickerContext, useColorPickerTagContext } from "./context.js";
|
|
10
11
|
import { useColorPicker } from "./use-color-picker.js";
|
|
11
12
|
import { computed, defineComponent, h, mergeProps } from "vue";
|
|
12
13
|
import { colorPickerToInputChannel } from "@xihan-ui/headless";
|
|
@@ -14,8 +15,15 @@ import { colorPickerToInputChannel } from "@xihan-ui/headless";
|
|
|
14
15
|
const XhColorPickerRoot = defineComponent({
|
|
15
16
|
name: "XhColorPickerRoot",
|
|
16
17
|
props: {
|
|
17
|
-
|
|
18
|
-
|
|
18
|
+
/** 选中的颜色,值串数组;单选可写裸串。 */
|
|
19
|
+
value: { type: [String, Array] },
|
|
20
|
+
defaultValue: { type: [String, Array] },
|
|
21
|
+
/** 选择模式,默认 single;multiple 时工作色是草稿、按「添加」收进值,色块点一下切换,输入行里排成标签。 */
|
|
22
|
+
selectionMode: { type: String },
|
|
23
|
+
/** multiple 下最多选几个颜色。 */
|
|
24
|
+
maxSelected: { type: Number },
|
|
25
|
+
/** 多选时输入行最多摆几枚标签,其余折进 +N 那一枚;默认 3。 */
|
|
26
|
+
maxTagCount: { type: Number },
|
|
19
27
|
format: { type: String },
|
|
20
28
|
open: {
|
|
21
29
|
type: Boolean,
|
|
@@ -78,6 +86,8 @@ const XhColorPickerRoot = defineComponent({
|
|
|
78
86
|
return () => h("div", ctx.api.value.getRootProps(), slots.default?.({
|
|
79
87
|
open: ctx.api.value.open,
|
|
80
88
|
value: ctx.api.value.value,
|
|
89
|
+
color: ctx.api.value.color,
|
|
90
|
+
canAdd: ctx.api.value.canAdd,
|
|
81
91
|
rgba: ctx.api.value.rgba,
|
|
82
92
|
hsva: ctx.api.value.hsva,
|
|
83
93
|
swatches: ctx.api.value.swatches,
|
|
@@ -87,6 +97,7 @@ const XhColorPickerRoot = defineComponent({
|
|
|
87
97
|
errors: ctx.api.value.errors,
|
|
88
98
|
setOpen: ctx.api.value.setOpen,
|
|
89
99
|
setValue: ctx.api.value.setValue,
|
|
100
|
+
add: ctx.api.value.add,
|
|
90
101
|
clearError: ctx.api.value.clearError,
|
|
91
102
|
clearRecentColors: ctx.api.value.clearRecentColors
|
|
92
103
|
}));
|
|
@@ -122,7 +133,7 @@ const XhColorPickerValueText = defineComponent({
|
|
|
122
133
|
name: "XhColorPickerValueText",
|
|
123
134
|
setup(_, { slots }) {
|
|
124
135
|
const ctx = useColorPickerContext();
|
|
125
|
-
return () => h("span", ctx.api.value.getValueTextProps(), slots.default?.() ?? ctx.api.value.
|
|
136
|
+
return () => h("span", ctx.api.value.getValueTextProps(), slots.default?.() ?? ctx.api.value.color);
|
|
126
137
|
}
|
|
127
138
|
});
|
|
128
139
|
const XhColorPickerSwatch = defineComponent({
|
|
@@ -146,7 +157,8 @@ container: { type: Object } },
|
|
|
146
157
|
});
|
|
147
158
|
return () => h(XhPortal, {
|
|
148
159
|
to: props.container ?? ctx.portalTarget.value,
|
|
149
|
-
source: ctx.triggerRef
|
|
160
|
+
source: ctx.triggerRef,
|
|
161
|
+
present: ctx.visible.value
|
|
150
162
|
}, () => [h("div", {
|
|
151
163
|
...mergeProps(ctx.api.value.getPositionerProps(), attrs),
|
|
152
164
|
ref: (el) => {
|
|
@@ -262,14 +274,84 @@ const XhColorPickerRecentSwatchPicker = defineComponent({
|
|
|
262
274
|
})));
|
|
263
275
|
}
|
|
264
276
|
});
|
|
277
|
+
/** 标签文字所在的块(tag 的 label)。 */
|
|
278
|
+
const XhColorPickerTagLabel = defineComponent({
|
|
279
|
+
name: "XhColorPickerTagLabel",
|
|
280
|
+
setup(_, { slots }) {
|
|
281
|
+
const ctx = useColorPickerContext();
|
|
282
|
+
return () => h("span", ctx.api.value.getTagLabelProps(), slots.default?.());
|
|
283
|
+
}
|
|
284
|
+
});
|
|
285
|
+
/** 标签内容:只有文字时替它包一层 label;作者自己写了节点则原样放行。库自身填入的文字(+N)恒包 label。 */
|
|
286
|
+
function tagChildren(content) {
|
|
287
|
+
if (typeof content === "string") return [h(XhColorPickerTagLabel, null, () => content)];
|
|
288
|
+
return slotIsPlainText(content) ? [h(XhColorPickerTagLabel, null, () => content)] : content;
|
|
289
|
+
}
|
|
290
|
+
/** 标签中的删除按钮:即所在标签那份 tag 的 close-trigger,可及名使用 translations.deleteItem;点按摘掉所在标签的颜色,焦点不动。 */
|
|
291
|
+
const XhColorPickerItemDeleteTrigger = defineComponent({
|
|
292
|
+
name: "XhColorPickerItemDeleteTrigger",
|
|
293
|
+
setup(_, { slots }) {
|
|
294
|
+
const ctx = useColorPickerContext();
|
|
295
|
+
const tag = useColorPickerTagContext();
|
|
296
|
+
return () => h("button", ctx.api.value.getItemDeleteTriggerProps({ value: tag.value() }), slots.default?.());
|
|
297
|
+
}
|
|
298
|
+
});
|
|
299
|
+
/** 多选时一个选中颜色一个标签,即库内 tag 的 root(data-scope="tag"),标签前由皮肤画一个色点。 */
|
|
300
|
+
const XhColorPickerTag = defineComponent({
|
|
301
|
+
name: "XhColorPickerTag",
|
|
302
|
+
props: {
|
|
303
|
+
/** 它代表哪个选中颜色。 */
|
|
304
|
+
value: {
|
|
305
|
+
type: String,
|
|
306
|
+
required: true
|
|
307
|
+
} },
|
|
308
|
+
setup(props, { slots }) {
|
|
309
|
+
const ctx = useColorPickerContext();
|
|
310
|
+
provideColorPickerTag({ value: () => props.value });
|
|
311
|
+
return () => h("span", ctx.api.value.getTagProps({ value: props.value }), tagChildren(slots.default?.()));
|
|
312
|
+
}
|
|
313
|
+
});
|
|
314
|
+
/** 折叠的标签合成的一个标签:有插槽时使用插槽,否则显示 +N。没有折叠的标签时连接层写 hidden。 */
|
|
315
|
+
const XhColorPickerOverflowTag = defineComponent({
|
|
316
|
+
name: "XhColorPickerOverflowTag",
|
|
317
|
+
setup(_, { slots }) {
|
|
318
|
+
const ctx = useColorPickerContext();
|
|
319
|
+
return () => h("span", ctx.api.value.getOverflowTagProps(), tagChildren(slots.default?.() ?? ctx.api.value.overflowText));
|
|
320
|
+
}
|
|
321
|
+
});
|
|
322
|
+
/**
|
|
323
|
+
* 标签行:多选时放在盒里、触发钮之前;单选时连接层给 hidden。
|
|
324
|
+
* 不写插槽即按 tags 铺出带删除钮的标签与 +N 那一枚,写了插槽由作者自己铺。
|
|
325
|
+
*/
|
|
326
|
+
const XhColorPickerTagList = defineComponent({
|
|
327
|
+
name: "XhColorPickerTagList",
|
|
328
|
+
setup(_, { slots }) {
|
|
329
|
+
const ctx = useColorPickerContext();
|
|
330
|
+
return () => h("span", ctx.api.value.getTagListProps(), slots.default ? slots.default() : [...ctx.api.value.tags.map((tag) => h(XhColorPickerTag, {
|
|
331
|
+
key: tag.value,
|
|
332
|
+
value: tag.value
|
|
333
|
+
}, () => [h(XhColorPickerTagLabel, null, () => tag.label), h(XhColorPickerItemDeleteTrigger)])), h(XhColorPickerOverflowTag)]);
|
|
334
|
+
}
|
|
335
|
+
});
|
|
336
|
+
/** 「添加」:多选时把工作色收进值,浮层不收;单选时连接层给 hidden。文字由作者写。 */
|
|
337
|
+
const XhColorPickerConfirmTrigger = defineComponent({
|
|
338
|
+
name: "XhColorPickerConfirmTrigger",
|
|
339
|
+
setup(_, { slots }) {
|
|
340
|
+
const ctx = useColorPickerContext();
|
|
341
|
+
return () => h("button", ctx.api.value.getConfirmTriggerProps(), slots.default?.());
|
|
342
|
+
}
|
|
343
|
+
});
|
|
265
344
|
const XhColorPickerHiddenInput = defineComponent({
|
|
266
345
|
name: "XhColorPickerHiddenInput",
|
|
267
346
|
setup() {
|
|
268
347
|
const ctx = useColorPickerContext();
|
|
269
|
-
return () =>
|
|
348
|
+
return () => ctx.api.value.selectionMode === "multiple" ? ctx.api.value.value.map((value) => h("input", {
|
|
349
|
+
key: value,
|
|
350
|
+
...ctx.api.value.getHiddenInputProps({ value })
|
|
351
|
+
})) : h("input", ctx.api.value.getHiddenInputProps());
|
|
270
352
|
}
|
|
271
353
|
});
|
|
272
354
|
//#endregion
|
|
273
|
-
export { XhColorPickerAlphaSlider, XhColorPickerAreaThumb, XhColorPickerChannelInput, XhColorPickerContent, XhColorPickerControl, XhColorPickerEyeDropperTrigger, XhColorPickerHiddenInput, XhColorPickerHueSlider, XhColorPickerLabel, XhColorPickerPositioner, XhColorPickerRecentSwatchPicker, XhColorPickerRoot, XhColorPickerSaturationArea, XhColorPickerSwatch, XhColorPickerSwatchPicker, XhColorPickerTrigger, XhColorPickerValueText };
|
|
355
|
+
export { XhColorPickerAlphaSlider, XhColorPickerAreaThumb, XhColorPickerChannelInput, XhColorPickerConfirmTrigger, XhColorPickerContent, XhColorPickerControl, XhColorPickerEyeDropperTrigger, XhColorPickerHiddenInput, XhColorPickerHueSlider, XhColorPickerItemDeleteTrigger, XhColorPickerLabel, XhColorPickerOverflowTag, XhColorPickerPositioner, XhColorPickerRecentSwatchPicker, XhColorPickerRoot, XhColorPickerSaturationArea, XhColorPickerSwatch, XhColorPickerSwatchPicker, XhColorPickerTag, XhColorPickerTagLabel, XhColorPickerTagList, XhColorPickerTrigger, XhColorPickerValueText };
|
|
274
356
|
|
|
275
357
|
//# sourceMappingURL=color-picker.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"color-picker.js","names":[],"sources":["../../../src/components/color-picker/color-picker.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// 提供 color picker 相关实现。\n\nimport type { ControlVariant, Direction, Placement, Size } from '@xihan-ui/core'\nimport type {\n ColorFormat,\n ColorPickerApi,\n ColorPickerInputChannel,\n ColorPickerSchema,\n ColorPickerTranslations,\n} from '@xihan-ui/headless'\nimport type { PropType, SlotsType, VNode } from 'vue'\nimport type { PayloadOf } from '../../runtime/payload'\nimport { colorPickerToInputChannel } from '@xihan-ui/headless'\nimport { computed, defineComponent, h, mergeProps } from 'vue'\nimport { withXhConfig } from '../../config/config'\nimport { XhPortal } from '../../runtime/portal'\nimport { useScrollbars } from '../../runtime/use-scrollbars'\nimport { XhColorSliderControl, XhColorSliderThumb, XhColorSliderTrack } from '../color-slider/color-slider'\nimport { provideColorSlider } from '../color-slider/context'\nimport { XhColorSwatchPickerItem } from '../color-swatch-picker/color-swatch-picker'\nimport { provideColorSwatchPicker } from '../color-swatch-picker/context'\nimport { useFormControlProps } from '../form/use-form-control'\nimport { provideColorPicker, useColorPickerContext } from './context'\nimport { useColorPicker } from './use-color-picker'\n\ntype ColorPickerProps = ColorPickerSchema['props']\n\n/** 默认插槽的载荷:展开态、当前颜色的各种表示、预设色板、屏幕取色状态,以及修改展开与修改值两个动作。 */\nexport type ColorPickerRootSlotProps = Pick<\n ColorPickerApi,\n 'open' | 'value' | 'rgba' | 'hsva' | 'swatches' | 'recentColors' | 'picking' | 'eyeDropperSupported' | 'errors' | 'setOpen' | 'setValue' | 'clearError' | 'clearRecentColors'\n>\n\nexport const XhColorPickerRoot = defineComponent({\n name: 'XhColorPickerRoot',\n // 缺省值由 connect 与机器给出;普通类型省略 default,Boolean 显式保留 undefined\n props: {\n value: { type: String },\n defaultValue: { type: String },\n format: { type: String as PropType<ColorFormat> },\n open: { type: Boolean, default: undefined },\n defaultOpen: Boolean,\n disabled: { type: Boolean, default: undefined },\n readOnly: { type: Boolean, default: undefined },\n alpha: Boolean,\n swatches: { type: Array as PropType<string[]> },\n inline: Boolean,\n // 缺席值 undefined 表示非受控\n recentColors: { type: Array as PropType<string[]> },\n defaultRecentColors: { type: Array as PropType<string[]> },\n maxRecentColors: { type: Number },\n name: { type: String },\n size: { type: String as PropType<Size> },\n variant: { type: String as PropType<ControlVariant> },\n dir: { type: String as PropType<Direction> },\n placement: { type: String as PropType<Placement> },\n offset: { type: Number },\n translations: { type: Object as PropType<Partial<ColorPickerTranslations>> },\n },\n // *-change 携带 details 对象,update:* 携带裸值\n emits: {\n 'value-change': (_details: PayloadOf<ColorPickerProps, 'onValueChange'>) => true,\n 'open-change': (_details: PayloadOf<ColorPickerProps, 'onOpenChange'>) => true,\n 'color-error': (_details: PayloadOf<ColorPickerProps, 'onColorError'>) => true,\n 'update:value': (_value: PayloadOf<ColorPickerProps, 'onValueChange'>['value']) => true,\n 'update:open': (_open: PayloadOf<ColorPickerProps, 'onOpenChange'>['open']) => true,\n 'recent-colors-change': (_details: PayloadOf<ColorPickerProps, 'onRecentColorsChange'>) => true,\n 'update:recentColors': (_recentColors: PayloadOf<ColorPickerProps, 'onRecentColorsChange'>['recentColors']) => true,\n },\n slots: Object as SlotsType<{\n default?: (props: ColorPickerRootSlotProps) => VNode[]\n }>,\n setup(props, { slots, emit }) {\n const notifyValue: ColorPickerProps['onValueChange'] = (details) => {\n emit('value-change', details)\n emit('update:value', details.value)\n }\n const notifyOpen: ColorPickerProps['onOpenChange'] = (details) => {\n emit('open-change', details)\n emit('update:open', details.open)\n }\n const notifyColorError: ColorPickerProps['onColorError'] = details => emit('color-error', details)\n const notifyRecent: ColorPickerProps['onRecentColorsChange'] = (details) => {\n emit('recent-colors-change', details)\n emit('update:recentColors', details.recentColors)\n }\n const ctx = useColorPicker(withXhConfig('color-picker', useFormControlProps(props)) as ColorPickerProps, {\n onValueChange: notifyValue,\n onOpenChange: notifyOpen,\n onColorError: notifyColorError,\n onRecentColorsChange: notifyRecent,\n })\n provideColorPicker(ctx)\n return () => h('div', ctx.api.value.getRootProps() as Record<string, unknown>, slots.default?.({\n open: ctx.api.value.open,\n value: ctx.api.value.value,\n rgba: ctx.api.value.rgba,\n hsva: ctx.api.value.hsva,\n swatches: ctx.api.value.swatches,\n recentColors: ctx.api.value.recentColors,\n picking: ctx.api.value.picking,\n eyeDropperSupported: ctx.api.value.eyeDropperSupported,\n errors: ctx.api.value.errors,\n setOpen: ctx.api.value.setOpen,\n setValue: ctx.api.value.setValue,\n clearError: ctx.api.value.clearError,\n clearRecentColors: ctx.api.value.clearRecentColors,\n }))\n },\n})\n\nexport const XhColorPickerLabel = defineComponent({\n name: 'XhColorPickerLabel',\n setup(_, { slots }) {\n const ctx = useColorPickerContext()\n return () => h('label', ctx.api.value.getLabelProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhColorPickerControl = defineComponent({\n name: 'XhColorPickerControl',\n setup(_, { slots }) {\n const ctx = useColorPickerContext()\n // 描边、底色与聚焦环所在的那一层,触发按钮与尾部动作钮在里面并排\n return () => h('div', ctx.api.value.getControlProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhColorPickerTrigger = defineComponent({\n name: 'XhColorPickerTrigger',\n setup(_, { slots }) {\n const ctx = useColorPickerContext()\n // 原生 button,激活交给平台;同时是浮层的定位锚点\n return () => h('button', {\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 XhColorPickerValueText = defineComponent({\n name: 'XhColorPickerValueText',\n setup(_, { slots }) {\n const ctx = useColorPickerContext()\n // 有插槽用插槽,否则显示当前值串\n return () => h(\n 'span',\n ctx.api.value.getValueTextProps() as Record<string, unknown>,\n slots.default?.() ?? ctx.api.value.value,\n )\n },\n})\n\nexport const XhColorPickerSwatch = defineComponent({\n name: 'XhColorPickerSwatch',\n setup(_, { slots }) {\n const ctx = useColorPickerContext()\n return () => h('span', ctx.api.value.getSwatchProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhColorPickerPositioner = defineComponent({\n name: 'XhColorPickerPositioner',\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 = useColorPickerContext()\n // 面板的自绘条:与 content 同级、绝对定位不占布局,壳是这层已经 fixed 的 positioner;条子走浮层 4px 档\n const bars = useScrollbars({ scrollable: () => ctx.contentRef.value, props: { size: 'sm' } })\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\nexport const XhColorPickerContent = defineComponent({\n name: 'XhColorPickerContent',\n setup(_, { slots }) {\n const ctx = useColorPickerContext()\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?.())\n },\n})\n\nexport const XhColorPickerSaturationArea = defineComponent({\n name: 'XhColorPickerSaturationArea',\n setup(_, { slots }) {\n const ctx = useColorPickerContext()\n // 区域节点交给机器,矩形在指针事件里现量\n return () => h('div', {\n ...ctx.api.value.getSaturationAreaProps() as Record<string, unknown>,\n ref: (el: unknown) => { ctx.areaRef.value = el as HTMLElement },\n }, slots.default?.())\n },\n})\n\nexport const XhColorPickerAreaThumb = defineComponent({\n name: 'XhColorPickerAreaThumb',\n setup(_, { slots }) {\n const ctx = useColorPickerContext()\n return () => h('div', ctx.api.value.getAreaThumbProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\n/**\n * 色相滑块的挂载点,同时充当该滑块的根节点:其中放置的是 XhColorSlider* 普通部件\n * (control / track / thumb / label / value-text),DOM 带 data-scope=\"color-slider\"。\n * 未写默认插槽时铺开最简结构:一条轨道加一个拇指。\n */\nexport const XhColorPickerHueSlider = defineComponent({\n name: 'XhColorPickerHueSlider',\n setup(_, { slots }) {\n const ctx = useColorPickerContext()\n provideColorSlider(ctx.hueSlider)\n return () => h('div', ctx.api.value.getHueSliderProps() as Record<string, unknown>, slots.default?.() ?? renderSliderTree())\n },\n})\n\n/** 透明度滑块的挂载点,同上;alpha 关闭时整条禁用。 */\nexport const XhColorPickerAlphaSlider = defineComponent({\n name: 'XhColorPickerAlphaSlider',\n setup(_, { slots }) {\n const ctx = useColorPickerContext()\n provideColorSlider(ctx.alphaSlider)\n return () => h('div', ctx.api.value.getAlphaSliderProps() as Record<string, unknown>, slots.default?.() ?? renderSliderTree())\n },\n})\n\n/** 未写默认插槽时的滑块内部:control 中一条 track 与一个 thumb,与手写部件产出的 DOM 一致。 */\nfunction renderSliderTree(): VNode[] {\n return [h(XhColorSliderControl, null, () => [h(XhColorSliderTrack), h(XhColorSliderThumb)])]\n}\n\nexport const XhColorPickerChannelInput = defineComponent({\n name: 'XhColorPickerChannelInput',\n props: {\n /** 该输入框编辑的通道:hex 是整串,r/g/b 是分量,a 是透明度百分数;默认或无法识别时按 hex 处理。 */\n channel: { type: String as PropType<ColorPickerInputChannel> },\n },\n setup(props) {\n const ctx = useColorPickerContext()\n const channel = computed(() => colorPickerToInputChannel(props.channel))\n // 通道身份由本部件自己声明,不必嵌在通道滑杆内\n return () => h('input', ctx.api.value.getChannelInputProps({ channel: channel.value }) as Record<string, unknown>)\n },\n})\n\nexport const XhColorPickerEyeDropperTrigger = defineComponent({\n name: 'XhColorPickerEyeDropperTrigger',\n setup(_, { slots }) {\n const ctx = useColorPickerContext()\n return () => h('button', ctx.api.value.getEyeDropperTriggerProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\n/**\n * 预设色板的挂载点,同时充当色板的根节点(role=radiogroup、方向键与 roving tabindex 都在它上面):\n * 其中放置的是 XhColorSwatchPickerItem,DOM 带 data-scope=\"color-swatch-picker\"。\n * 未写默认插槽时按 swatches 自动铺开格子。\n */\nexport const XhColorPickerSwatchPicker = defineComponent({\n name: 'XhColorPickerSwatchPicker',\n setup(_, { slots }) {\n const ctx = useColorPickerContext()\n provideColorSwatchPicker(ctx.swatchPicker)\n return () => h(\n 'div',\n ctx.api.value.getSwatchPickerProps() as Record<string, unknown>,\n slots.default?.() ?? ctx.api.value.swatchPicker.swatches.map(node => h(XhColorSwatchPickerItem, { key: node.value, value: node.value })),\n )\n },\n})\n\n/**\n * 最近使用色的挂载点,与预设色板同一套:其中放置的是 XhColorSwatchPickerItem。\n * 未写默认插槽时按 recentColors 自动铺开格子;还没有最近使用色时挂载点收起。\n */\nexport const XhColorPickerRecentSwatchPicker = defineComponent({\n name: 'XhColorPickerRecentSwatchPicker',\n setup(_, { slots }) {\n const ctx = useColorPickerContext()\n provideColorSwatchPicker(ctx.recentSwatchPicker)\n return () => h(\n 'div',\n ctx.api.value.getRecentSwatchPickerProps() as Record<string, unknown>,\n slots.default?.() ?? ctx.api.value.recentSwatchPicker.swatches.map(node => h(XhColorSwatchPickerItem, { key: node.value, value: node.value })),\n )\n },\n})\n\nexport const XhColorPickerHiddenInput = defineComponent({\n name: 'XhColorPickerHiddenInput',\n setup() {\n const ctx = useColorPickerContext()\n return () => h('input', ctx.api.value.getHiddenInputProps() as Record<string, unknown>)\n },\n})\n"],"mappings":";;;;;;;;;;;;;AAsCA,MAAa,oBAAoB,gBAAgB;CAC/C,MAAM;CAEN,OAAO;EACL,OAAO,EAAE,MAAM,OAAO;EACtB,cAAc,EAAE,MAAM,OAAO;EAC7B,QAAQ,EAAE,MAAM,OAAgC;EAChD,MAAM;GAAE,MAAM;GAAS,SAAS,KAAA;EAAU;EAC1C,aAAa;EACb,UAAU;GAAE,MAAM;GAAS,SAAS,KAAA;EAAU;EAC9C,UAAU;GAAE,MAAM;GAAS,SAAS,KAAA;EAAU;EAC9C,OAAO;EACP,UAAU,EAAE,MAAM,MAA4B;EAC9C,QAAQ;EAER,cAAc,EAAE,MAAM,MAA4B;EAClD,qBAAqB,EAAE,MAAM,MAA4B;EACzD,iBAAiB,EAAE,MAAM,OAAO;EAChC,MAAM,EAAE,MAAM,OAAO;EACrB,MAAM,EAAE,MAAM,OAAyB;EACvC,SAAS,EAAE,MAAM,OAAmC;EACpD,KAAK,EAAE,MAAM,OAA8B;EAC3C,WAAW,EAAE,MAAM,OAA8B;EACjD,QAAQ,EAAE,MAAM,OAAO;EACvB,cAAc,EAAE,MAAM,OAAqD;CAC7E;CAEA,OAAO;EACL,iBAAiB,aAA2D;EAC5E,gBAAgB,aAA0D;EAC1E,gBAAgB,aAA0D;EAC1E,iBAAiB,WAAkE;EACnF,gBAAgB,UAA+D;EAC/E,yBAAyB,aAAkE;EAC3F,wBAAwB,kBAAuF;CACjH;CACA,OAAO;CAGP,MAAM,OAAO,EAAE,OAAO,QAAQ;EAC5B,MAAM,eAAkD,YAAY;GAClE,KAAK,gBAAgB,OAAO;GAC5B,KAAK,gBAAgB,QAAQ,KAAK;EACpC;EACA,MAAM,cAAgD,YAAY;GAChE,KAAK,eAAe,OAAO;GAC3B,KAAK,eAAe,QAAQ,IAAI;EAClC;EACA,MAAM,oBAAqD,YAAW,KAAK,eAAe,OAAO;EACjG,MAAM,gBAA0D,YAAY;GAC1E,KAAK,wBAAwB,OAAO;GACpC,KAAK,uBAAuB,QAAQ,YAAY;EAClD;EACA,MAAM,MAAM,eAAe,aAAa,gBAAgB,oBAAoB,KAAK,CAAC,GAAuB;GACvG,eAAe;GACf,cAAc;GACd,cAAc;GACd,sBAAsB;EACxB,CAAC;EACD,mBAAmB,GAAG;EACtB,aAAa,EAAE,OAAO,IAAI,IAAI,MAAM,aAAa,GAA8B,MAAM,UAAU;GAC7F,MAAM,IAAI,IAAI,MAAM;GACpB,OAAO,IAAI,IAAI,MAAM;GACrB,MAAM,IAAI,IAAI,MAAM;GACpB,MAAM,IAAI,IAAI,MAAM;GACpB,UAAU,IAAI,IAAI,MAAM;GACxB,cAAc,IAAI,IAAI,MAAM;GAC5B,SAAS,IAAI,IAAI,MAAM;GACvB,qBAAqB,IAAI,IAAI,MAAM;GACnC,QAAQ,IAAI,IAAI,MAAM;GACtB,SAAS,IAAI,IAAI,MAAM;GACvB,UAAU,IAAI,IAAI,MAAM;GACxB,YAAY,IAAI,IAAI,MAAM;GAC1B,mBAAmB,IAAI,IAAI,MAAM;EACnC,CAAC,CAAC;CACJ;AACF,CAAC;AAED,MAAa,qBAAqB,gBAAgB;CAChD,MAAM;CACN,MAAM,GAAG,EAAE,SAAS;EAClB,MAAM,MAAM,sBAAsB;EAClC,aAAa,EAAE,SAAS,IAAI,IAAI,MAAM,cAAc,GAA8B,MAAM,UAAU,CAAC;CACrG;AACF,CAAC;AAED,MAAa,uBAAuB,gBAAgB;CAClD,MAAM;CACN,MAAM,GAAG,EAAE,SAAS;EAClB,MAAM,MAAM,sBAAsB;EAElC,aAAa,EAAE,OAAO,IAAI,IAAI,MAAM,gBAAgB,GAA8B,MAAM,UAAU,CAAC;CACrG;AACF,CAAC;AAED,MAAa,uBAAuB,gBAAgB;CAClD,MAAM;CACN,MAAM,GAAG,EAAE,SAAS;EAClB,MAAM,MAAM,sBAAsB;EAElC,aAAa,EAAE,UAAU;GACvB,GAAG,IAAI,IAAI,MAAM,gBAAgB;GACjC,MAAM,OAAgB;IAAE,IAAI,WAAW,QAAQ;GAAkB;EACnE,GAAG,MAAM,UAAU,CAAC;CACtB;AACF,CAAC;AAED,MAAa,yBAAyB,gBAAgB;CACpD,MAAM;CACN,MAAM,GAAG,EAAE,SAAS;EAClB,MAAM,MAAM,sBAAsB;EAElC,aAAa,EACX,QACA,IAAI,IAAI,MAAM,kBAAkB,GAChC,MAAM,UAAU,KAAK,IAAI,IAAI,MAAM,KACrC;CACF;AACF,CAAC;AAED,MAAa,sBAAsB,gBAAgB;CACjD,MAAM;CACN,MAAM,GAAG,EAAE,SAAS;EAClB,MAAM,MAAM,sBAAsB;EAClC,aAAa,EAAE,QAAQ,IAAI,IAAI,MAAM,eAAe,GAA8B,MAAM,UAAU,CAAC;CACrG;AACF,CAAC;AAED,MAAa,0BAA0B,gBAAgB;CACrD,MAAM;CACN,OAAO;;AAEL,WAAW,EAAE,MAAM,OAA4B,EACjD;CAEA,cAAc;CACd,MAAM,OAAO,EAAE,OAAO,SAAS;EAC7B,MAAM,MAAM,sBAAsB;EAElC,MAAM,OAAO,cAAc;GAAE,kBAAkB,IAAI,WAAW;GAAO,OAAO,EAAE,MAAM,KAAK;EAAE,CAAC;EAE5F,aAAa,EAAE,UAAU;GAAE,IAAI,MAAM,aAAa,IAAI,aAAa;GAAO,QAAQ,IAAI;EAAW,SAAS,CACxG,EAAE,OAAO;GACP,GAAG,WAAW,IAAI,IAAI,MAAM,mBAAmB,GAA8B,KAAK;GAClF,MAAM,OAAgB;IAAE,IAAI,cAAc,QAAQ;GAAkB;EACtE,GAAG,CAAC,GAAI,MAAM,UAAU,KAAK,CAAC,GAAI,GAAG,KAAK,OAAO,CAAC,CAAC,CACrD,CAAC;CACH;AACF,CAAC;AAED,MAAa,uBAAuB,gBAAgB;CAClD,MAAM;CACN,MAAM,GAAG,EAAE,SAAS;EAClB,MAAM,MAAM,sBAAsB;EAClC,aAAa,EAAE,OAAO;GACpB,GAAG,IAAI,IAAI,MAAM,gBAAgB;GAGjC,OAAO,IAAI,QAAQ,QAAQ,KAAA,IAAY,EAAE,SAAS,OAAO;GACzD,MAAM,OAAgB;IAAE,IAAI,WAAW,QAAQ;GAAkB;EACnE,GAAG,MAAM,UAAU,CAAC;CACtB;AACF,CAAC;AAED,MAAa,8BAA8B,gBAAgB;CACzD,MAAM;CACN,MAAM,GAAG,EAAE,SAAS;EAClB,MAAM,MAAM,sBAAsB;EAElC,aAAa,EAAE,OAAO;GACpB,GAAG,IAAI,IAAI,MAAM,uBAAuB;GACxC,MAAM,OAAgB;IAAE,IAAI,QAAQ,QAAQ;GAAkB;EAChE,GAAG,MAAM,UAAU,CAAC;CACtB;AACF,CAAC;AAED,MAAa,yBAAyB,gBAAgB;CACpD,MAAM;CACN,MAAM,GAAG,EAAE,SAAS;EAClB,MAAM,MAAM,sBAAsB;EAClC,aAAa,EAAE,OAAO,IAAI,IAAI,MAAM,kBAAkB,GAA8B,MAAM,UAAU,CAAC;CACvG;AACF,CAAC;;;;;;AAOD,MAAa,yBAAyB,gBAAgB;CACpD,MAAM;CACN,MAAM,GAAG,EAAE,SAAS;EAClB,MAAM,MAAM,sBAAsB;EAClC,mBAAmB,IAAI,SAAS;EAChC,aAAa,EAAE,OAAO,IAAI,IAAI,MAAM,kBAAkB,GAA8B,MAAM,UAAU,KAAK,iBAAiB,CAAC;CAC7H;AACF,CAAC;;AAGD,MAAa,2BAA2B,gBAAgB;CACtD,MAAM;CACN,MAAM,GAAG,EAAE,SAAS;EAClB,MAAM,MAAM,sBAAsB;EAClC,mBAAmB,IAAI,WAAW;EAClC,aAAa,EAAE,OAAO,IAAI,IAAI,MAAM,oBAAoB,GAA8B,MAAM,UAAU,KAAK,iBAAiB,CAAC;CAC/H;AACF,CAAC;;AAGD,SAAS,mBAA4B;CACnC,OAAO,CAAC,EAAE,sBAAsB,YAAY,CAAC,EAAE,kBAAkB,GAAG,EAAE,kBAAkB,CAAC,CAAC,CAAC;AAC7F;AAEA,MAAa,4BAA4B,gBAAgB;CACvD,MAAM;CACN,OAAO;;AAEL,SAAS,EAAE,MAAM,OAA4C,EAC/D;CACA,MAAM,OAAO;EACX,MAAM,MAAM,sBAAsB;EAClC,MAAM,UAAU,eAAe,0BAA0B,MAAM,OAAO,CAAC;EAEvE,aAAa,EAAE,SAAS,IAAI,IAAI,MAAM,qBAAqB,EAAE,SAAS,QAAQ,MAAM,CAAC,CAA4B;CACnH;AACF,CAAC;AAED,MAAa,iCAAiC,gBAAgB;CAC5D,MAAM;CACN,MAAM,GAAG,EAAE,SAAS;EAClB,MAAM,MAAM,sBAAsB;EAClC,aAAa,EAAE,UAAU,IAAI,IAAI,MAAM,0BAA0B,GAA8B,MAAM,UAAU,CAAC;CAClH;AACF,CAAC;;;;;;AAOD,MAAa,4BAA4B,gBAAgB;CACvD,MAAM;CACN,MAAM,GAAG,EAAE,SAAS;EAClB,MAAM,MAAM,sBAAsB;EAClC,yBAAyB,IAAI,YAAY;EACzC,aAAa,EACX,OACA,IAAI,IAAI,MAAM,qBAAqB,GACnC,MAAM,UAAU,KAAK,IAAI,IAAI,MAAM,aAAa,SAAS,KAAI,SAAQ,EAAE,yBAAyB;GAAE,KAAK,KAAK;GAAO,OAAO,KAAK;EAAM,CAAC,CAAC,CACzI;CACF;AACF,CAAC;;;;;AAMD,MAAa,kCAAkC,gBAAgB;CAC7D,MAAM;CACN,MAAM,GAAG,EAAE,SAAS;EAClB,MAAM,MAAM,sBAAsB;EAClC,yBAAyB,IAAI,kBAAkB;EAC/C,aAAa,EACX,OACA,IAAI,IAAI,MAAM,2BAA2B,GACzC,MAAM,UAAU,KAAK,IAAI,IAAI,MAAM,mBAAmB,SAAS,KAAI,SAAQ,EAAE,yBAAyB;GAAE,KAAK,KAAK;GAAO,OAAO,KAAK;EAAM,CAAC,CAAC,CAC/I;CACF;AACF,CAAC;AAED,MAAa,2BAA2B,gBAAgB;CACtD,MAAM;CACN,QAAQ;EACN,MAAM,MAAM,sBAAsB;EAClC,aAAa,EAAE,SAAS,IAAI,IAAI,MAAM,oBAAoB,CAA4B;CACxF;AACF,CAAC"}
|
|
1
|
+
{"version":3,"file":"color-picker.js","names":[],"sources":["../../../src/components/color-picker/color-picker.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// 提供 color picker 相关实现。\n\nimport type { ControlVariant, Direction, Placement, Size } from '@xihan-ui/core'\nimport type {\n ColorFormat,\n ColorPickerApi,\n ColorPickerInputChannel,\n ColorPickerSchema,\n ColorPickerSelectionMode,\n ColorPickerTranslations,\n} from '@xihan-ui/headless'\nimport type { PropType, SlotsType, VNode } from 'vue'\nimport type { PayloadOf } from '../../runtime/payload'\nimport { colorPickerToInputChannel } from '@xihan-ui/headless'\nimport { computed, defineComponent, h, mergeProps } from 'vue'\nimport { withXhConfig } from '../../config/config'\nimport { XhPortal } from '../../runtime/portal'\nimport { slotIsPlainText } from '../../runtime/slot-content'\nimport { useScrollbars } from '../../runtime/use-scrollbars'\nimport { XhColorSliderControl, XhColorSliderThumb, XhColorSliderTrack } from '../color-slider/color-slider'\nimport { provideColorSlider } from '../color-slider/context'\nimport { XhColorSwatchPickerItem } from '../color-swatch-picker/color-swatch-picker'\nimport { provideColorSwatchPicker } from '../color-swatch-picker/context'\nimport { useFormControlProps } from '../form/use-form-control'\nimport { provideColorPicker, provideColorPickerTag, useColorPickerContext, useColorPickerTagContext } from './context'\nimport { useColorPicker } from './use-color-picker'\n\ntype ColorPickerProps = ColorPickerSchema['props']\n\n/** 默认插槽的载荷:展开态、当前颜色的各种表示、预设色板、屏幕取色状态,以及修改展开与修改值两个动作。 */\nexport type ColorPickerRootSlotProps = Pick<\n ColorPickerApi,\n 'open' | 'value' | 'color' | 'canAdd' | 'rgba' | 'hsva' | 'swatches' | 'recentColors' | 'picking' | 'eyeDropperSupported' | 'errors' | 'setOpen' | 'setValue' | 'add' | 'clearError' | 'clearRecentColors'\n>\n\nexport const XhColorPickerRoot = defineComponent({\n name: 'XhColorPickerRoot',\n // 缺省值由 connect 与机器给出;普通类型省略 default,Boolean 显式保留 undefined\n props: {\n /** 选中的颜色,值串数组;单选可写裸串。 */\n value: { type: [String, Array] as PropType<string | string[]> },\n defaultValue: { type: [String, Array] as PropType<string | string[]> },\n /** 选择模式,默认 single;multiple 时工作色是草稿、按「添加」收进值,色块点一下切换,输入行里排成标签。 */\n selectionMode: { type: String as PropType<ColorPickerSelectionMode> },\n /** multiple 下最多选几个颜色。 */\n maxSelected: { type: Number },\n /** 多选时输入行最多摆几枚标签,其余折进 +N 那一枚;默认 3。 */\n maxTagCount: { type: Number },\n format: { type: String as PropType<ColorFormat> },\n open: { type: Boolean, default: undefined },\n defaultOpen: Boolean,\n disabled: { type: Boolean, default: undefined },\n readOnly: { type: Boolean, default: undefined },\n alpha: Boolean,\n swatches: { type: Array as PropType<string[]> },\n inline: Boolean,\n // 缺席值 undefined 表示非受控\n recentColors: { type: Array as PropType<string[]> },\n defaultRecentColors: { type: Array as PropType<string[]> },\n maxRecentColors: { type: Number },\n name: { type: String },\n size: { type: String as PropType<Size> },\n variant: { type: String as PropType<ControlVariant> },\n dir: { type: String as PropType<Direction> },\n placement: { type: String as PropType<Placement> },\n offset: { type: Number },\n translations: { type: Object as PropType<Partial<ColorPickerTranslations>> },\n },\n // *-change 携带 details 对象,update:* 携带裸值\n emits: {\n 'value-change': (_details: PayloadOf<ColorPickerProps, 'onValueChange'>) => true,\n 'open-change': (_details: PayloadOf<ColorPickerProps, 'onOpenChange'>) => true,\n 'color-error': (_details: PayloadOf<ColorPickerProps, 'onColorError'>) => true,\n 'update:value': (_value: PayloadOf<ColorPickerProps, 'onValueChange'>['value']) => true,\n 'update:open': (_open: PayloadOf<ColorPickerProps, 'onOpenChange'>['open']) => true,\n 'recent-colors-change': (_details: PayloadOf<ColorPickerProps, 'onRecentColorsChange'>) => true,\n 'update:recentColors': (_recentColors: PayloadOf<ColorPickerProps, 'onRecentColorsChange'>['recentColors']) => true,\n },\n slots: Object as SlotsType<{\n default?: (props: ColorPickerRootSlotProps) => VNode[]\n }>,\n setup(props, { slots, emit }) {\n const notifyValue: ColorPickerProps['onValueChange'] = (details) => {\n emit('value-change', details)\n emit('update:value', details.value)\n }\n const notifyOpen: ColorPickerProps['onOpenChange'] = (details) => {\n emit('open-change', details)\n emit('update:open', details.open)\n }\n const notifyColorError: ColorPickerProps['onColorError'] = details => emit('color-error', details)\n const notifyRecent: ColorPickerProps['onRecentColorsChange'] = (details) => {\n emit('recent-colors-change', details)\n emit('update:recentColors', details.recentColors)\n }\n const ctx = useColorPicker(withXhConfig('color-picker', useFormControlProps(props)) as ColorPickerProps, {\n onValueChange: notifyValue,\n onOpenChange: notifyOpen,\n onColorError: notifyColorError,\n onRecentColorsChange: notifyRecent,\n })\n provideColorPicker(ctx)\n return () => h('div', ctx.api.value.getRootProps() as Record<string, unknown>, slots.default?.({\n open: ctx.api.value.open,\n value: ctx.api.value.value,\n color: ctx.api.value.color,\n canAdd: ctx.api.value.canAdd,\n rgba: ctx.api.value.rgba,\n hsva: ctx.api.value.hsva,\n swatches: ctx.api.value.swatches,\n recentColors: ctx.api.value.recentColors,\n picking: ctx.api.value.picking,\n eyeDropperSupported: ctx.api.value.eyeDropperSupported,\n errors: ctx.api.value.errors,\n setOpen: ctx.api.value.setOpen,\n setValue: ctx.api.value.setValue,\n add: ctx.api.value.add,\n clearError: ctx.api.value.clearError,\n clearRecentColors: ctx.api.value.clearRecentColors,\n }))\n },\n})\n\nexport const XhColorPickerLabel = defineComponent({\n name: 'XhColorPickerLabel',\n setup(_, { slots }) {\n const ctx = useColorPickerContext()\n return () => h('label', ctx.api.value.getLabelProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhColorPickerControl = defineComponent({\n name: 'XhColorPickerControl',\n setup(_, { slots }) {\n const ctx = useColorPickerContext()\n // 描边、底色与聚焦环所在的那一层,触发按钮与尾部动作钮在里面并排\n return () => h('div', ctx.api.value.getControlProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhColorPickerTrigger = defineComponent({\n name: 'XhColorPickerTrigger',\n setup(_, { slots }) {\n const ctx = useColorPickerContext()\n // 原生 button,激活交给平台;同时是浮层的定位锚点\n return () => h('button', {\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 XhColorPickerValueText = defineComponent({\n name: 'XhColorPickerValueText',\n setup(_, { slots }) {\n const ctx = useColorPickerContext()\n // 有插槽用插槽,否则显示工作色的值串\n return () => h(\n 'span',\n ctx.api.value.getValueTextProps() as Record<string, unknown>,\n slots.default?.() ?? ctx.api.value.color,\n )\n },\n})\n\nexport const XhColorPickerSwatch = defineComponent({\n name: 'XhColorPickerSwatch',\n setup(_, { slots }) {\n const ctx = useColorPickerContext()\n return () => h('span', ctx.api.value.getSwatchProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhColorPickerPositioner = defineComponent({\n name: 'XhColorPickerPositioner',\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 = useColorPickerContext()\n // 面板的自绘条:与 content 同级、绝对定位不占布局,壳是这层已经 fixed 的 positioner;条子走浮层 4px 档\n const bars = useScrollbars({ scrollable: () => ctx.contentRef.value, props: { size: 'sm' } })\n // 搬到 portal 落点:留在原地的话,宿主祖先只要建了层叠上下文就能盖住浮层\n return () => h(XhPortal, { to: props.container ?? ctx.portalTarget.value, source: ctx.triggerRef, present: ctx.visible.value }, () => [\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\nexport const XhColorPickerContent = defineComponent({\n name: 'XhColorPickerContent',\n setup(_, { slots }) {\n const ctx = useColorPickerContext()\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?.())\n },\n})\n\nexport const XhColorPickerSaturationArea = defineComponent({\n name: 'XhColorPickerSaturationArea',\n setup(_, { slots }) {\n const ctx = useColorPickerContext()\n // 区域节点交给机器,矩形在指针事件里现量\n return () => h('div', {\n ...ctx.api.value.getSaturationAreaProps() as Record<string, unknown>,\n ref: (el: unknown) => { ctx.areaRef.value = el as HTMLElement },\n }, slots.default?.())\n },\n})\n\nexport const XhColorPickerAreaThumb = defineComponent({\n name: 'XhColorPickerAreaThumb',\n setup(_, { slots }) {\n const ctx = useColorPickerContext()\n return () => h('div', ctx.api.value.getAreaThumbProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\n/**\n * 色相滑块的挂载点,同时充当该滑块的根节点:其中放置的是 XhColorSlider* 普通部件\n * (control / track / thumb / label / value-text),DOM 带 data-scope=\"color-slider\"。\n * 未写默认插槽时铺开最简结构:一条轨道加一个拇指。\n */\nexport const XhColorPickerHueSlider = defineComponent({\n name: 'XhColorPickerHueSlider',\n setup(_, { slots }) {\n const ctx = useColorPickerContext()\n provideColorSlider(ctx.hueSlider)\n return () => h('div', ctx.api.value.getHueSliderProps() as Record<string, unknown>, slots.default?.() ?? renderSliderTree())\n },\n})\n\n/** 透明度滑块的挂载点,同上;alpha 关闭时整条禁用。 */\nexport const XhColorPickerAlphaSlider = defineComponent({\n name: 'XhColorPickerAlphaSlider',\n setup(_, { slots }) {\n const ctx = useColorPickerContext()\n provideColorSlider(ctx.alphaSlider)\n return () => h('div', ctx.api.value.getAlphaSliderProps() as Record<string, unknown>, slots.default?.() ?? renderSliderTree())\n },\n})\n\n/** 未写默认插槽时的滑块内部:control 中一条 track 与一个 thumb,与手写部件产出的 DOM 一致。 */\nfunction renderSliderTree(): VNode[] {\n return [h(XhColorSliderControl, null, () => [h(XhColorSliderTrack), h(XhColorSliderThumb)])]\n}\n\nexport const XhColorPickerChannelInput = defineComponent({\n name: 'XhColorPickerChannelInput',\n props: {\n /** 该输入框编辑的通道:hex 是整串,r/g/b 是分量,a 是透明度百分数;默认或无法识别时按 hex 处理。 */\n channel: { type: String as PropType<ColorPickerInputChannel> },\n },\n setup(props) {\n const ctx = useColorPickerContext()\n const channel = computed(() => colorPickerToInputChannel(props.channel))\n // 通道身份由本部件自己声明,不必嵌在通道滑杆内\n return () => h('input', ctx.api.value.getChannelInputProps({ channel: channel.value }) as Record<string, unknown>)\n },\n})\n\nexport const XhColorPickerEyeDropperTrigger = defineComponent({\n name: 'XhColorPickerEyeDropperTrigger',\n setup(_, { slots }) {\n const ctx = useColorPickerContext()\n return () => h('button', ctx.api.value.getEyeDropperTriggerProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\n/**\n * 预设色板的挂载点,同时充当色板的根节点(role=radiogroup、方向键与 roving tabindex 都在它上面):\n * 其中放置的是 XhColorSwatchPickerItem,DOM 带 data-scope=\"color-swatch-picker\"。\n * 未写默认插槽时按 swatches 自动铺开格子。\n */\nexport const XhColorPickerSwatchPicker = defineComponent({\n name: 'XhColorPickerSwatchPicker',\n setup(_, { slots }) {\n const ctx = useColorPickerContext()\n provideColorSwatchPicker(ctx.swatchPicker)\n return () => h(\n 'div',\n ctx.api.value.getSwatchPickerProps() as Record<string, unknown>,\n slots.default?.() ?? ctx.api.value.swatchPicker.swatches.map(node => h(XhColorSwatchPickerItem, { key: node.value, value: node.value })),\n )\n },\n})\n\n/**\n * 最近使用色的挂载点,与预设色板同一套:其中放置的是 XhColorSwatchPickerItem。\n * 未写默认插槽时按 recentColors 自动铺开格子;还没有最近使用色时挂载点收起。\n */\nexport const XhColorPickerRecentSwatchPicker = defineComponent({\n name: 'XhColorPickerRecentSwatchPicker',\n setup(_, { slots }) {\n const ctx = useColorPickerContext()\n provideColorSwatchPicker(ctx.recentSwatchPicker)\n return () => h(\n 'div',\n ctx.api.value.getRecentSwatchPickerProps() as Record<string, unknown>,\n slots.default?.() ?? ctx.api.value.recentSwatchPicker.swatches.map(node => h(XhColorSwatchPickerItem, { key: node.value, value: node.value })),\n )\n },\n})\n\n/** 标签文字所在的块(tag 的 label)。 */\nexport const XhColorPickerTagLabel = defineComponent({\n name: 'XhColorPickerTagLabel',\n setup(_, { slots }) {\n const ctx = useColorPickerContext()\n return () => h('span', ctx.api.value.getTagLabelProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\n/** 标签内容:只有文字时替它包一层 label;作者自己写了节点则原样放行。库自身填入的文字(+N)恒包 label。 */\nfunction tagChildren(content: VNode[] | string | undefined): VNode[] | string | undefined {\n if (typeof content === 'string')\n return [h(XhColorPickerTagLabel, null, () => content)]\n return slotIsPlainText(content) ? [h(XhColorPickerTagLabel, null, () => content)] : content\n}\n\n/** 标签中的删除按钮:即所在标签那份 tag 的 close-trigger,可及名使用 translations.deleteItem;点按摘掉所在标签的颜色,焦点不动。 */\nexport const XhColorPickerItemDeleteTrigger = defineComponent({\n name: 'XhColorPickerItemDeleteTrigger',\n setup(_, { slots }) {\n const ctx = useColorPickerContext()\n const tag = useColorPickerTagContext()\n return () => h('button', ctx.api.value.getItemDeleteTriggerProps({ value: tag.value() }) as Record<string, unknown>, slots.default?.())\n },\n})\n\n/** 多选时一个选中颜色一个标签,即库内 tag 的 root(data-scope=\"tag\"),标签前由皮肤画一个色点。 */\nexport const XhColorPickerTag = defineComponent({\n name: 'XhColorPickerTag',\n props: {\n /** 它代表哪个选中颜色。 */\n value: { type: String, required: true },\n },\n setup(props, { slots }) {\n const ctx = useColorPickerContext()\n provideColorPickerTag({ value: () => props.value })\n return () => h('span', ctx.api.value.getTagProps({ value: props.value }) as Record<string, unknown>, tagChildren(slots.default?.()))\n },\n})\n\n/** 折叠的标签合成的一个标签:有插槽时使用插槽,否则显示 +N。没有折叠的标签时连接层写 hidden。 */\nexport const XhColorPickerOverflowTag = defineComponent({\n name: 'XhColorPickerOverflowTag',\n setup(_, { slots }) {\n const ctx = useColorPickerContext()\n return () => h(\n 'span',\n ctx.api.value.getOverflowTagProps() as Record<string, unknown>,\n tagChildren(slots.default?.() ?? ctx.api.value.overflowText),\n )\n },\n})\n\n/**\n * 标签行:多选时放在盒里、触发钮之前;单选时连接层给 hidden。\n * 不写插槽即按 tags 铺出带删除钮的标签与 +N 那一枚,写了插槽由作者自己铺。\n */\nexport const XhColorPickerTagList = defineComponent({\n name: 'XhColorPickerTagList',\n setup(_, { slots }) {\n const ctx = useColorPickerContext()\n return () => h('span', ctx.api.value.getTagListProps() as Record<string, unknown>, slots.default\n ? slots.default()\n : [\n ...ctx.api.value.tags.map(tag => h(XhColorPickerTag, { key: tag.value, value: tag.value }, () => [\n h(XhColorPickerTagLabel, null, () => tag.label),\n h(XhColorPickerItemDeleteTrigger),\n ])),\n h(XhColorPickerOverflowTag),\n ])\n },\n})\n\n/** 「添加」:多选时把工作色收进值,浮层不收;单选时连接层给 hidden。文字由作者写。 */\nexport const XhColorPickerConfirmTrigger = defineComponent({\n name: 'XhColorPickerConfirmTrigger',\n setup(_, { slots }) {\n const ctx = useColorPickerContext()\n return () => h('button', ctx.api.value.getConfirmTriggerProps() as Record<string, unknown>, slots.default?.())\n },\n})\n\nexport const XhColorPickerHiddenInput = defineComponent({\n name: 'XhColorPickerHiddenInput',\n setup() {\n const ctx = useColorPickerContext()\n // 多选时一个选中值一份同名输入,表单按原生多值收;单选仍是一份\n return () => ctx.api.value.selectionMode === 'multiple'\n ? ctx.api.value.value.map(value => h('input', { key: value, ...ctx.api.value.getHiddenInputProps({ value }) as Record<string, unknown> }))\n : h('input', ctx.api.value.getHiddenInputProps() as Record<string, unknown>)\n },\n})\n"],"mappings":"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"}
|
|
@@ -9,7 +9,16 @@ function useColorPickerContext() {
|
|
|
9
9
|
if (!ctx) throw new Error("[xh] ColorPicker 部件必须用在 XhColorPickerRoot 内");
|
|
10
10
|
return ctx;
|
|
11
11
|
}
|
|
12
|
+
const TAG_KEY = Symbol.for("xh-color-picker-tag");
|
|
13
|
+
function provideColorPickerTag(ctx) {
|
|
14
|
+
provide(TAG_KEY, ctx);
|
|
15
|
+
}
|
|
16
|
+
function useColorPickerTagContext() {
|
|
17
|
+
const ctx = inject(TAG_KEY, null);
|
|
18
|
+
if (!ctx) throw new Error("[xh] ColorPicker 标签子部件必须用在 XhColorPickerTag 内");
|
|
19
|
+
return ctx;
|
|
20
|
+
}
|
|
12
21
|
//#endregion
|
|
13
|
-
export { provideColorPicker, useColorPickerContext };
|
|
22
|
+
export { provideColorPicker, provideColorPickerTag, useColorPickerContext, useColorPickerTagContext };
|
|
14
23
|
|
|
15
24
|
//# sourceMappingURL=context.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.js","names":[],"sources":["../../../src/components/color-picker/context.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// 提供 context 相关实现。\n\nimport type { InjectionKey } from 'vue'\nimport type { ColorPickerContext } from './use-color-picker'\nimport { inject, provide } from 'vue'\n\nconst KEY: InjectionKey<ColorPickerContext> = Symbol.for('xh-color-picker')\n\nexport function provideColorPicker(ctx: ColorPickerContext): void {\n provide(KEY, ctx)\n}\n\nexport function useColorPickerContext(): ColorPickerContext {\n const ctx = inject(KEY, null)\n if (!ctx)\n throw new Error('[xh] ColorPicker 部件必须用在 XhColorPickerRoot 内')\n return ctx\n}\n"],"mappings":";;AAWA,MAAM,MAAwC,OAAO,IAAI,iBAAiB;AAE1E,SAAgB,mBAAmB,KAA+B;CAChE,QAAQ,KAAK,GAAG;AAClB;AAEA,SAAgB,wBAA4C;CAC1D,MAAM,MAAM,OAAO,KAAK,IAAI;CAC5B,IAAI,CAAC,KACH,MAAM,IAAI,MAAM,6CAA6C;CAC/D,OAAO;AACT"}
|
|
1
|
+
{"version":3,"file":"context.js","names":[],"sources":["../../../src/components/color-picker/context.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// 提供 context 相关实现。\n\nimport type { InjectionKey } from 'vue'\nimport type { ColorPickerContext } from './use-color-picker'\nimport { inject, provide } from 'vue'\n\nconst KEY: InjectionKey<ColorPickerContext> = Symbol.for('xh-color-picker')\n\nexport function provideColorPicker(ctx: ColorPickerContext): void {\n provide(KEY, ctx)\n}\n\nexport function useColorPickerContext(): ColorPickerContext {\n const ctx = inject(KEY, null)\n if (!ctx)\n throw new Error('[xh] ColorPicker 部件必须用在 XhColorPickerRoot 内')\n return ctx\n}\n\n/** 标签声明的值,供标签中的删除按钮复用同一份声明。 */\nexport interface ColorPickerTagContext {\n value: () => string\n}\n\nconst TAG_KEY: InjectionKey<ColorPickerTagContext> = Symbol.for('xh-color-picker-tag')\n\nexport function provideColorPickerTag(ctx: ColorPickerTagContext): void {\n provide(TAG_KEY, ctx)\n}\n\nexport function useColorPickerTagContext(): ColorPickerTagContext {\n const ctx = inject(TAG_KEY, null)\n if (!ctx)\n throw new Error('[xh] ColorPicker 标签子部件必须用在 XhColorPickerTag 内')\n return ctx\n}\n"],"mappings":";;AAWA,MAAM,MAAwC,OAAO,IAAI,iBAAiB;AAE1E,SAAgB,mBAAmB,KAA+B;CAChE,QAAQ,KAAK,GAAG;AAClB;AAEA,SAAgB,wBAA4C;CAC1D,MAAM,MAAM,OAAO,KAAK,IAAI;CAC5B,IAAI,CAAC,KACH,MAAM,IAAI,MAAM,6CAA6C;CAC/D,OAAO;AACT;AAOA,MAAM,UAA+C,OAAO,IAAI,qBAAqB;AAErF,SAAgB,sBAAsB,KAAkC;CACtE,QAAQ,SAAS,GAAG;AACtB;AAEA,SAAgB,2BAAkD;CAChE,MAAM,MAAM,OAAO,SAAS,IAAI;CAChC,IAAI,CAAC,KACH,MAAM,IAAI,MAAM,+CAA+C;CACjE,OAAO;AACT"}
|
|
@@ -33,8 +33,16 @@ function useColorPicker(props, handlers = {}) {
|
|
|
33
33
|
};
|
|
34
34
|
const hue = colorSlider(colorPickerHueSliderProps);
|
|
35
35
|
const alpha = colorSlider(colorPickerAlphaSliderProps);
|
|
36
|
-
const
|
|
37
|
-
const
|
|
36
|
+
const swatchLabels = ref(0);
|
|
37
|
+
const recentSwatchLabels = ref(0);
|
|
38
|
+
const swatchPicker = useMachine(colorSwatchPickerMachine, () => ({
|
|
39
|
+
...colorPickerSwatchPickerProps(service),
|
|
40
|
+
labelled: swatchLabels.value > 0
|
|
41
|
+
}), scope);
|
|
42
|
+
const recentSwatchPicker = useMachine(colorSwatchPickerMachine, () => ({
|
|
43
|
+
...colorPickerRecentSwatchPickerProps(service),
|
|
44
|
+
labelled: recentSwatchLabels.value > 0
|
|
45
|
+
}), scope);
|
|
38
46
|
const services = {
|
|
39
47
|
root: service,
|
|
40
48
|
hueSlider: {
|
|
@@ -97,11 +105,13 @@ function useColorPicker(props, handlers = {}) {
|
|
|
97
105
|
},
|
|
98
106
|
swatchPicker: {
|
|
99
107
|
api: computed(() => api.value.swatchPicker),
|
|
100
|
-
service: swatchPicker
|
|
108
|
+
service: swatchPicker,
|
|
109
|
+
labelCount: swatchLabels
|
|
101
110
|
},
|
|
102
111
|
recentSwatchPicker: {
|
|
103
112
|
api: computed(() => api.value.recentSwatchPicker),
|
|
104
|
-
service: recentSwatchPicker
|
|
113
|
+
service: recentSwatchPicker,
|
|
114
|
+
labelCount: recentSwatchLabels
|
|
105
115
|
},
|
|
106
116
|
portalTarget
|
|
107
117
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-color-picker.js","names":[],"sources":["../../../src/components/color-picker/use-color-picker.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// 提供 use color picker 相关实现。\n\nimport type { Cleanup, Layer, RuntimeConfig, Service } from '@xihan-ui/core'\nimport type { ColorPickerApi, ColorPickerSchema, ColorPickerServices, ColorSliderSchema, ColorSliderServices, SliderSchema } from '@xihan-ui/headless'\nimport type { ComputedRef, Ref } from 'vue'\nimport type { ColorSliderContext } from '../color-slider/use-color-slider'\nimport type { ColorSwatchPickerContext } from '../color-swatch-picker/use-color-swatch-picker'\nimport { createRuntimeConfig, createScope } from '@xihan-ui/core'\nimport {\n colorPickerAlphaSliderProps,\n colorPickerHueSliderProps,\n colorPickerMachine,\n colorPickerRecentSwatchPickerProps,\n colorPickerSwatchPickerProps,\n colorSliderMachine,\n colorSliderSliderProps,\n colorSwatchPickerMachine,\n connectColorPicker,\n sliderMachine,\n} from '@xihan-ui/headless'\nimport { createPositionEngine } from '@xihan-ui/position'\nimport { computed, ref } from 'vue'\nimport { useXhConfig } from '../../config/config'\nimport { vueNormalize } from '../../runtime/normalize-props'\nimport { useMachine } from '../../runtime/use-machine'\nimport { useOverlayExit } from '../../runtime/use-overlay-exit'\nimport { createVueIdGenerator } from '../../runtime/vue-id'\n\nexport interface ColorPickerContext {\n service: Service<ColorPickerSchema>\n api: ComputedRef<ColorPickerApi>\n /** 触发器,同时是浮层的定位锚点。 */\n triggerRef: Ref<HTMLElement | null>\n positionerRef: Ref<HTMLElement | null>\n contentRef: Ref<HTMLElement | null>\n /** 当前是否应当渲染:退场动画播完之前仍为真。 */\n visible: Ref<boolean>\n /** 二维取色区,状态机在指针事件中读取它的矩形。 */\n areaRef: Ref<HTMLElement | null>\n /**\n * 三个内嵌组件各自的上下文:挂载点部件把它们 provide 下去,\n * 作者在挂载点中放置的就是 XhColorSlider* / XhColorSwatchPicker* 普通部件。\n */\n hueSlider: ColorSliderContext\n alphaSlider: ColorSliderContext\n swatchPicker: ColorSwatchPickerContext\n /** 最近使用色那台色块选择器。 */\n recentSwatchPicker: ColorSwatchPickerContext\n /** 浮层迁移到的位置:全局配置的 portalContainer > body。 */\n portalTarget: ComputedRef<string | Element>\n}\n\nexport function useColorPicker(\n props: ColorPickerSchema['props'],\n handlers: Pick<ColorPickerSchema['props'], 'onValueChange' | 'onOpenChange' | 'onColorError' | 'onRecentColorsChange'> = {},\n): ColorPickerContext {\n const xhConfig = useXhConfig()\n const triggerRef = ref<HTMLElement | null>(null)\n const positionerRef = ref<HTMLElement | null>(null)\n const contentRef = ref<HTMLElement | null>(null)\n const areaRef = ref<HTMLElement | null>(null)\n\n const idGen = createVueIdGenerator()\n const scope = createScope(null, idGen)\n const service = useMachine(colorPickerMachine, () => ({ ...props, ...handlers }), scope)\n\n // 两条颜色滑块各自一台机器再各内嵌一台滑杆:值与工作色从取色器现读,取色器须先建立;\n // 几台共用一份 scope,part id 里带组件名区分,不会撞\n const colorSlider = (sliderProps: (root: Service<ColorPickerSchema>) => ColorSliderSchema['props']): ColorSliderServices & { trackRef: Ref<HTMLElement | null> } => {\n const root = useMachine<ColorSliderSchema>(colorSliderMachine, () => sliderProps(service), scope)\n const slider = useMachine<SliderSchema>(sliderMachine, () => colorSliderSliderProps(root), scope)\n const trackRef = ref<HTMLElement | null>(null)\n // 传 getter 而非节点,轨道要到挂载后才有\n slider.refs.set('getTrackEl', () => trackRef.value)\n return { root, slider, trackRef }\n }\n const hue = colorSlider(colorPickerHueSliderProps)\n const alpha = colorSlider(colorPickerAlphaSliderProps)\n const swatchPicker = useMachine(colorSwatchPickerMachine, () => colorPickerSwatchPickerProps(service), scope)\n const recentSwatchPicker = useMachine(colorSwatchPickerMachine, () => colorPickerRecentSwatchPickerProps(service), scope)\n const services: ColorPickerServices = {\n root: service,\n hueSlider: { root: hue.root, slider: hue.slider },\n alphaSlider: { root: alpha.root, slider: alpha.slider },\n swatchPicker,\n recentSwatchPicker,\n }\n\n // 服务端没有 DOM、也就没有退场:config 传 null 时闸门退化成「跟着展开态」\n let config: RuntimeConfig | null = null\n\n if (typeof document !== 'undefined') {\n config = createRuntimeConfig({ scope, idGenerator: idGen })\n\n // 只提供注册函数,入栈出栈由机器的 trackLayer 效应按展开态驱动\n const registerLayer = (): { layer: Layer, dispose: Cleanup } => config!.layerRegistry.register({\n kind: 'popover',\n node: () => contentRef.value,\n // 触发器记为本层分支,点它算层内交互;\n // 浮层壳一并记上:content 之外还浮着自绘滚动条,按住它拖动不该把浮层消解掉\n branches: () => [triggerRef.value, positionerRef.value].filter(Boolean) as Element[],\n isModal: () => false,\n // 浮层不带遮罩,没有可点关闭的表面\n surfaces: () => [],\n })\n\n // 定位引擎由适配器注入,机器只经端口驱动\n service.refs.set('config', config!)\n service.refs.set('registerLayer', registerLayer)\n service.refs.set('position', createPositionEngine())\n service.refs.set('getAnchorEl', () => triggerRef.value)\n service.refs.set('getFloatingEl', () => positionerRef.value)\n service.refs.set('getContentEl', () => contentRef.value)\n // 传 getter 而非节点,ref 在挂载后才有值\n service.refs.set('getAreaEl', () => areaRef.value)\n }\n\n const api = computed(() => connectColorPicker(services, vueNormalize))\n // 退场闸门:收起从跟着 open 走,改成跟着 presence 走\n const visible = useOverlayExit({\n config,\n isOpen: () => api.value.open,\n contentRef,\n onPresence: presence => service.refs.set('presence', presence),\n })\n // 先问全局配置的落点,没有才落 body\n const portalTarget = computed<string | Element>(() => xhConfig.value.portalContainer?.() ?? config?.portalContainer() ?? 'body')\n\n // 内嵌组件的 api 从取色器那份 api 上取:同一帧算好的同一份,不另连一次\n const hueSlider: ColorSliderContext = { api: computed(() => api.value.hueSlider), service: hue.root, trackRef: hue.trackRef }\n const alphaSlider: ColorSliderContext = { api: computed(() => api.value.alphaSlider), service: alpha.root, trackRef: alpha.trackRef }\n const swatchPickerCtx: ColorSwatchPickerContext = { api: computed(() => api.value.swatchPicker), service: swatchPicker }\n const recentSwatchPickerCtx: ColorSwatchPickerContext = { api: computed(() => api.value.recentSwatchPicker), service: recentSwatchPicker }\n\n return {\n visible,\n service,\n api,\n triggerRef,\n positionerRef,\n contentRef,\n areaRef,\n hueSlider,\n alphaSlider,\n swatchPicker: swatchPickerCtx,\n recentSwatchPicker: recentSwatchPickerCtx,\n portalTarget,\n }\n}\n"],"mappings":";;;;;;;;;;AAyDA,SAAgB,eACd,OACA,WAAyH,CAAC,GACtG;CACpB,MAAM,WAAW,YAAY;CAC7B,MAAM,aAAa,IAAwB,IAAI;CAC/C,MAAM,gBAAgB,IAAwB,IAAI;CAClD,MAAM,aAAa,IAAwB,IAAI;CAC/C,MAAM,UAAU,IAAwB,IAAI;CAE5C,MAAM,QAAQ,qBAAqB;CACnC,MAAM,QAAQ,YAAY,MAAM,KAAK;CACrC,MAAM,UAAU,WAAW,2BAA2B;EAAE,GAAG;EAAO,GAAG;CAAS,IAAI,KAAK;CAIvF,MAAM,eAAe,gBAA+I;EAClK,MAAM,OAAO,WAA8B,0BAA0B,YAAY,OAAO,GAAG,KAAK;EAChG,MAAM,SAAS,WAAyB,qBAAqB,uBAAuB,IAAI,GAAG,KAAK;EAChG,MAAM,WAAW,IAAwB,IAAI;EAE7C,OAAO,KAAK,IAAI,oBAAoB,SAAS,KAAK;EAClD,OAAO;GAAE;GAAM;GAAQ;EAAS;CAClC;CACA,MAAM,MAAM,YAAY,yBAAyB;CACjD,MAAM,QAAQ,YAAY,2BAA2B;
|
|
1
|
+
{"version":3,"file":"use-color-picker.js","names":[],"sources":["../../../src/components/color-picker/use-color-picker.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// 提供 use color picker 相关实现。\n\nimport type { Cleanup, Layer, RuntimeConfig, Service } from '@xihan-ui/core'\nimport type { ColorPickerApi, ColorPickerSchema, ColorPickerServices, ColorSliderSchema, ColorSliderServices, SliderSchema } from '@xihan-ui/headless'\nimport type { ComputedRef, Ref } from 'vue'\nimport type { ColorSliderContext } from '../color-slider/use-color-slider'\nimport type { ColorSwatchPickerContext } from '../color-swatch-picker/use-color-swatch-picker'\nimport { createRuntimeConfig, createScope } from '@xihan-ui/core'\nimport {\n colorPickerAlphaSliderProps,\n colorPickerHueSliderProps,\n colorPickerMachine,\n colorPickerRecentSwatchPickerProps,\n colorPickerSwatchPickerProps,\n colorSliderMachine,\n colorSliderSliderProps,\n colorSwatchPickerMachine,\n connectColorPicker,\n sliderMachine,\n} from '@xihan-ui/headless'\nimport { createPositionEngine } from '@xihan-ui/position'\nimport { computed, ref } from 'vue'\nimport { useXhConfig } from '../../config/config'\nimport { vueNormalize } from '../../runtime/normalize-props'\nimport { useMachine } from '../../runtime/use-machine'\nimport { useOverlayExit } from '../../runtime/use-overlay-exit'\nimport { createVueIdGenerator } from '../../runtime/vue-id'\n\nexport interface ColorPickerContext {\n service: Service<ColorPickerSchema>\n api: ComputedRef<ColorPickerApi>\n /** 触发器,同时是浮层的定位锚点。 */\n triggerRef: Ref<HTMLElement | null>\n positionerRef: Ref<HTMLElement | null>\n contentRef: Ref<HTMLElement | null>\n /** 当前是否应当渲染:退场动画播完之前仍为真。 */\n visible: Ref<boolean>\n /** 二维取色区,状态机在指针事件中读取它的矩形。 */\n areaRef: Ref<HTMLElement | null>\n /**\n * 三个内嵌组件各自的上下文:挂载点部件把它们 provide 下去,\n * 作者在挂载点中放置的就是 XhColorSlider* / XhColorSwatchPicker* 普通部件。\n */\n hueSlider: ColorSliderContext\n alphaSlider: ColorSliderContext\n swatchPicker: ColorSwatchPickerContext\n /** 最近使用色那台色块选择器。 */\n recentSwatchPicker: ColorSwatchPickerContext\n /** 浮层迁移到的位置:全局配置的 portalContainer > body。 */\n portalTarget: ComputedRef<string | Element>\n}\n\nexport function useColorPicker(\n props: ColorPickerSchema['props'],\n handlers: Pick<ColorPickerSchema['props'], 'onValueChange' | 'onOpenChange' | 'onColorError' | 'onRecentColorsChange'> = {},\n): ColorPickerContext {\n const xhConfig = useXhConfig()\n const triggerRef = ref<HTMLElement | null>(null)\n const positionerRef = ref<HTMLElement | null>(null)\n const contentRef = ref<HTMLElement | null>(null)\n const areaRef = ref<HTMLElement | null>(null)\n\n const idGen = createVueIdGenerator()\n const scope = createScope(null, idGen)\n const service = useMachine(colorPickerMachine, () => ({ ...props, ...handlers }), scope)\n\n // 两条颜色滑块各自一台机器再各内嵌一台滑杆:值与工作色从取色器现读,取色器须先建立;\n // 几台共用一份 scope,part id 里带组件名区分,不会撞\n const colorSlider = (sliderProps: (root: Service<ColorPickerSchema>) => ColorSliderSchema['props']): ColorSliderServices & { trackRef: Ref<HTMLElement | null> } => {\n const root = useMachine<ColorSliderSchema>(colorSliderMachine, () => sliderProps(service), scope)\n const slider = useMachine<SliderSchema>(sliderMachine, () => colorSliderSliderProps(root), scope)\n const trackRef = ref<HTMLElement | null>(null)\n // 传 getter 而非节点,轨道要到挂载后才有\n slider.refs.set('getTrackEl', () => trackRef.value)\n return { root, slider, trackRef }\n }\n const hue = colorSlider(colorPickerHueSliderProps)\n const alpha = colorSlider(colorPickerAlphaSliderProps)\n // 内嵌的两组色板同样可以放 label 部件:各自的登记数喂给各自的机器,根的 aria-labelledby 才只指向真渲染了的标题\n const swatchLabels = ref(0)\n const recentSwatchLabels = ref(0)\n const swatchPicker = useMachine(colorSwatchPickerMachine, () => ({ ...colorPickerSwatchPickerProps(service), labelled: swatchLabels.value > 0 }), scope)\n const recentSwatchPicker = useMachine(colorSwatchPickerMachine, () => ({ ...colorPickerRecentSwatchPickerProps(service), labelled: recentSwatchLabels.value > 0 }), scope)\n const services: ColorPickerServices = {\n root: service,\n hueSlider: { root: hue.root, slider: hue.slider },\n alphaSlider: { root: alpha.root, slider: alpha.slider },\n swatchPicker,\n recentSwatchPicker,\n }\n\n // 服务端没有 DOM、也就没有退场:config 传 null 时闸门退化成「跟着展开态」\n let config: RuntimeConfig | null = null\n\n if (typeof document !== 'undefined') {\n config = createRuntimeConfig({ scope, idGenerator: idGen })\n\n // 只提供注册函数,入栈出栈由机器的 trackLayer 效应按展开态驱动\n const registerLayer = (): { layer: Layer, dispose: Cleanup } => config!.layerRegistry.register({\n kind: 'popover',\n node: () => contentRef.value,\n // 触发器记为本层分支,点它算层内交互;\n // 浮层壳一并记上:content 之外还浮着自绘滚动条,按住它拖动不该把浮层消解掉\n branches: () => [triggerRef.value, positionerRef.value].filter(Boolean) as Element[],\n isModal: () => false,\n // 浮层不带遮罩,没有可点关闭的表面\n surfaces: () => [],\n })\n\n // 定位引擎由适配器注入,机器只经端口驱动\n service.refs.set('config', config!)\n service.refs.set('registerLayer', registerLayer)\n service.refs.set('position', createPositionEngine())\n service.refs.set('getAnchorEl', () => triggerRef.value)\n service.refs.set('getFloatingEl', () => positionerRef.value)\n service.refs.set('getContentEl', () => contentRef.value)\n // 传 getter 而非节点,ref 在挂载后才有值\n service.refs.set('getAreaEl', () => areaRef.value)\n }\n\n const api = computed(() => connectColorPicker(services, vueNormalize))\n // 退场闸门:收起从跟着 open 走,改成跟着 presence 走\n const visible = useOverlayExit({\n config,\n isOpen: () => api.value.open,\n contentRef,\n onPresence: presence => service.refs.set('presence', presence),\n })\n // 先问全局配置的落点,没有才落 body\n const portalTarget = computed<string | Element>(() => xhConfig.value.portalContainer?.() ?? config?.portalContainer() ?? 'body')\n\n // 内嵌组件的 api 从取色器那份 api 上取:同一帧算好的同一份,不另连一次\n const hueSlider: ColorSliderContext = { api: computed(() => api.value.hueSlider), service: hue.root, trackRef: hue.trackRef }\n const alphaSlider: ColorSliderContext = { api: computed(() => api.value.alphaSlider), service: alpha.root, trackRef: alpha.trackRef }\n const swatchPickerCtx: ColorSwatchPickerContext = { api: computed(() => api.value.swatchPicker), service: swatchPicker, labelCount: swatchLabels }\n const recentSwatchPickerCtx: ColorSwatchPickerContext = { api: computed(() => api.value.recentSwatchPicker), service: recentSwatchPicker, labelCount: recentSwatchLabels }\n\n return {\n visible,\n service,\n api,\n triggerRef,\n positionerRef,\n contentRef,\n areaRef,\n hueSlider,\n alphaSlider,\n swatchPicker: swatchPickerCtx,\n recentSwatchPicker: recentSwatchPickerCtx,\n portalTarget,\n }\n}\n"],"mappings":";;;;;;;;;;AAyDA,SAAgB,eACd,OACA,WAAyH,CAAC,GACtG;CACpB,MAAM,WAAW,YAAY;CAC7B,MAAM,aAAa,IAAwB,IAAI;CAC/C,MAAM,gBAAgB,IAAwB,IAAI;CAClD,MAAM,aAAa,IAAwB,IAAI;CAC/C,MAAM,UAAU,IAAwB,IAAI;CAE5C,MAAM,QAAQ,qBAAqB;CACnC,MAAM,QAAQ,YAAY,MAAM,KAAK;CACrC,MAAM,UAAU,WAAW,2BAA2B;EAAE,GAAG;EAAO,GAAG;CAAS,IAAI,KAAK;CAIvF,MAAM,eAAe,gBAA+I;EAClK,MAAM,OAAO,WAA8B,0BAA0B,YAAY,OAAO,GAAG,KAAK;EAChG,MAAM,SAAS,WAAyB,qBAAqB,uBAAuB,IAAI,GAAG,KAAK;EAChG,MAAM,WAAW,IAAwB,IAAI;EAE7C,OAAO,KAAK,IAAI,oBAAoB,SAAS,KAAK;EAClD,OAAO;GAAE;GAAM;GAAQ;EAAS;CAClC;CACA,MAAM,MAAM,YAAY,yBAAyB;CACjD,MAAM,QAAQ,YAAY,2BAA2B;CAErD,MAAM,eAAe,IAAI,CAAC;CAC1B,MAAM,qBAAqB,IAAI,CAAC;CAChC,MAAM,eAAe,WAAW,iCAAiC;EAAE,GAAG,6BAA6B,OAAO;EAAG,UAAU,aAAa,QAAQ;CAAE,IAAI,KAAK;CACvJ,MAAM,qBAAqB,WAAW,iCAAiC;EAAE,GAAG,mCAAmC,OAAO;EAAG,UAAU,mBAAmB,QAAQ;CAAE,IAAI,KAAK;CACzK,MAAM,WAAgC;EACpC,MAAM;EACN,WAAW;GAAE,MAAM,IAAI;GAAM,QAAQ,IAAI;EAAO;EAChD,aAAa;GAAE,MAAM,MAAM;GAAM,QAAQ,MAAM;EAAO;EACtD;EACA;CACF;CAGA,IAAI,SAA+B;CAEnC,IAAI,OAAO,aAAa,aAAa;EACnC,SAAS,oBAAoB;GAAE;GAAO,aAAa;EAAM,CAAC;EAG1D,MAAM,sBAA0D,OAAQ,cAAc,SAAS;GAC7F,MAAM;GACN,YAAY,WAAW;GAGvB,gBAAgB,CAAC,WAAW,OAAO,cAAc,KAAK,CAAC,CAAC,OAAO,OAAO;GACtE,eAAe;GAEf,gBAAgB,CAAC;EACnB,CAAC;EAGD,QAAQ,KAAK,IAAI,UAAU,MAAO;EAClC,QAAQ,KAAK,IAAI,iBAAiB,aAAa;EAC/C,QAAQ,KAAK,IAAI,YAAY,qBAAqB,CAAC;EACnD,QAAQ,KAAK,IAAI,qBAAqB,WAAW,KAAK;EACtD,QAAQ,KAAK,IAAI,uBAAuB,cAAc,KAAK;EAC3D,QAAQ,KAAK,IAAI,sBAAsB,WAAW,KAAK;EAEvD,QAAQ,KAAK,IAAI,mBAAmB,QAAQ,KAAK;CACnD;CAEA,MAAM,MAAM,eAAe,mBAAmB,UAAU,YAAY,CAAC;CAErE,MAAM,UAAU,eAAe;EAC7B;EACA,cAAc,IAAI,MAAM;EACxB;EACA,aAAY,aAAY,QAAQ,KAAK,IAAI,YAAY,QAAQ;CAC/D,CAAC;CAED,MAAM,eAAe,eAAiC,SAAS,MAAM,kBAAkB,KAAK,QAAQ,gBAAgB,KAAK,MAAM;CAQ/H,OAAO;EACL;EACA;EACA;EACA;EACA;EACA;EACA;EACA,WAAA;GAbsC,KAAK,eAAe,IAAI,MAAM,SAAS;GAAG,SAAS,IAAI;GAAM,UAAU,IAAI;EAazG;EACR,aAAA;GAbwC,KAAK,eAAe,IAAI,MAAM,WAAW;GAAG,SAAS,MAAM;GAAM,UAAU,MAAM;EAa/G;EACV,cAAc;GAboC,KAAK,eAAe,IAAI,MAAM,YAAY;GAAG,SAAS;GAAc,YAAY;EAatG;EAC5B,oBAAoB;GAboC,KAAK,eAAe,IAAI,MAAM,kBAAkB;GAAG,SAAS;GAAoB,YAAY;EAa5G;EACxC;CACF;AACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"color-swatch-picker.d.ts","names":[],"sources":["../../../src/components/color-swatch-picker/color-swatch-picker.ts"],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"color-swatch-picker.d.ts","names":[],"sources":["../../../src/components/color-swatch-picker/color-swatch-picker.ts"],"mappings":";;;;;KAkBK,yBAAyB;KAElB,iCAAiC,KAC3C;cAIW,uCAAuB,8BAAA;;;IAIL,MAAA,SAAS;;;;;;;IAGX,MAAA;;;IACO,MAAA;;;;;;;;;;;;;;;;;;;IAKT,MAAA,SAAS;;;;;;IAER,MAAA,SAAS;;;IACT,MAAA,SAAS;;;IACD,MAAA,SAAS;;;;;EAId,iBAAA,UAAA,UAAU;EACZ,iBAAA,QAAA,UAAU;;;;IAlBR,MAAA,SAAS;;;;;;;IAGX,MAAA;;;IACO,MAAA;;;;;;;;;;;;;;;;;;;IAKT,MAAA,SAAS;;;;;;IAER,MAAA,SAAS;;;IACT,MAAA,SAAS;;;IACD,MAAA,SAAS;;;;;;;;;;;EAQ/B,WAAC,OAAO,mCAAmC;EAC7C,cAAM;kCAkChB;cAEW,wCAAwB,0BAAA,oBAAA,4BAAA;;8BAanC,qCAAA,iDAAA,aAAA,eAAA,oDAAA;;cAGW,uCAAuB,8BAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qCAsClC"}
|