foucui 1.0.1 → 1.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (234) hide show
  1. package/dist/components/QiuCanvasKit/QiuCanvasEditor.vue.d.ts +3 -1
  2. package/dist/components/QiuCanvasKit/components/DataModulesPanel.vue.d.ts +1 -0
  3. package/dist/components/QiuTable/index.vue.d.ts +12 -12
  4. package/dist/foucui.css +1 -1
  5. package/dist/foucui.js +7476 -7373
  6. package/dist/foucui.umd.cjs +19 -19
  7. package/package.json +23 -13
  8. package/components/QiuAffix/index.vue +0 -186
  9. package/components/QiuAlert/index.vue +0 -208
  10. package/components/QiuAnchor/context.ts +0 -18
  11. package/components/QiuAnchor/index.vue +0 -180
  12. package/components/QiuAnchorLink/index.vue +0 -67
  13. package/components/QiuApp/index.vue +0 -9
  14. package/components/QiuAutocomplete/index.vue +0 -408
  15. package/components/QiuAvatar/index.vue +0 -140
  16. package/components/QiuBacktop/index.vue +0 -121
  17. package/components/QiuBadge/api/index.ts +0 -389
  18. package/components/QiuBadge/components/BadgeImagePickerDialog.vue +0 -243
  19. package/components/QiuBadge/components/BadgeLibraryManagerDialog.vue +0 -30
  20. package/components/QiuBadge/components/BadgeLibraryPanel.vue +0 -182
  21. package/components/QiuBadge/composables/useTableHostHeight.ts +0 -53
  22. package/components/QiuBadge/index.ts +0 -18
  23. package/components/QiuBadge/shared/BadgeTemplateRenderer.vue +0 -32
  24. package/components/QiuBadge/shared/assetUrl.ts +0 -26
  25. package/components/QiuBadge/shared/badgeTemplate.ts +0 -309
  26. package/components/QiuBadge/utils/chinaAreaData.ts +0 -44
  27. package/components/QiuBadge/utils/hostRegion.ts +0 -22
  28. package/components/QiuBadge/utils/pca-code.json +0 -1
  29. package/components/QiuBadge/utils/pdfFromElement.ts +0 -348
  30. package/components/QiuBadge/views/BadgeLibraryView.vue +0 -32
  31. package/components/QiuBadge/views/BadgeManageView.vue +0 -1364
  32. package/components/QiuBadge/views/BadgeTemplateEditorView.vue +0 -10
  33. package/components/QiuBadge/views/BadgeTemplateListView.vue +0 -229
  34. package/components/QiuBadge/views/DeskLabelTemplateListView.vue +0 -227
  35. package/components/QiuBadge/views/DeskLabelView.vue +0 -683
  36. package/components/QiuBadgeDot/index.vue +0 -87
  37. package/components/QiuButton/index.vue +0 -247
  38. package/components/QiuButtonGroup/index.vue +0 -63
  39. package/components/QiuCanvasKit/QiuCanvasEditor.vue +0 -5503
  40. package/components/QiuCanvasKit/QiuCanvasRenderer.vue +0 -348
  41. package/components/QiuCanvasKit/assetUrl.ts +0 -11
  42. package/components/QiuCanvasKit/components/DataModulesPanel.vue +0 -352
  43. package/components/QiuCanvasKit/export/html.ts +0 -132
  44. package/components/QiuCanvasKit/export/pdf.ts +0 -48
  45. package/components/QiuCanvasKit/export/png.ts +0 -50
  46. package/components/QiuCanvasKit/index.ts +0 -20
  47. package/components/QiuCanvasKit/modules/badgeCompat.ts +0 -84
  48. package/components/QiuCanvasKit/modules/dataRegistry.ts +0 -207
  49. package/components/QiuCanvasKit/modules/merge.ts +0 -71
  50. package/components/QiuCanvasKit/presets/badge.ts +0 -67
  51. package/components/QiuCanvasKit/presets/banner.ts +0 -79
  52. package/components/QiuCanvasKit/types.ts +0 -138
  53. package/components/QiuCard/index.vue +0 -104
  54. package/components/QiuCarousel/context.ts +0 -16
  55. package/components/QiuCarousel/index.vue +0 -343
  56. package/components/QiuCarouselItem/index.vue +0 -47
  57. package/components/QiuCascader/index.vue +0 -879
  58. package/components/QiuCascader/types.ts +0 -48
  59. package/components/QiuCheckbox/QiuCheckboxGroup.vue +0 -78
  60. package/components/QiuCheckbox/index.vue +0 -231
  61. package/components/QiuCheckbox/types.ts +0 -8
  62. package/components/QiuCode/index.vue +0 -64
  63. package/components/QiuCol/col.scss +0 -55
  64. package/components/QiuCol/index.vue +0 -64
  65. package/components/QiuCollapse/context.ts +0 -10
  66. package/components/QiuCollapse/index.vue +0 -70
  67. package/components/QiuCollapseItem/index.vue +0 -167
  68. package/components/QiuColorField/index.vue +0 -296
  69. package/components/QiuColorPicker/README.md +0 -118
  70. package/components/QiuColorPicker/index.vue +0 -60
  71. package/components/QiuColorfulCard/index.vue +0 -101
  72. package/components/QiuCombobox/index.vue +0 -277
  73. package/components/QiuConfigProvider/index.vue +0 -31
  74. package/components/QiuContextMenu/index.vue +0 -209
  75. package/components/QiuDate/index.vue +0 -1134
  76. package/components/QiuDescriptions/context.ts +0 -20
  77. package/components/QiuDescriptions/index.vue +0 -115
  78. package/components/QiuDescriptionsItem/index.vue +0 -103
  79. package/components/QiuDialog/index.vue +0 -828
  80. package/components/QiuDigitalCard/index.vue +0 -159
  81. package/components/QiuDivider/index.vue +0 -185
  82. package/components/QiuDot/index.vue +0 -83
  83. package/components/QiuDrawer/index.vue +0 -350
  84. package/components/QiuDropdown/QiuDropdownItem.vue +0 -74
  85. package/components/QiuDropdown/QiuDropdownMenu.vue +0 -22
  86. package/components/QiuDropdown/context.ts +0 -9
  87. package/components/QiuDropdown/index.vue +0 -189
  88. package/components/QiuEmpty/index.vue +0 -73
  89. package/components/QiuForm/index.vue +0 -172
  90. package/components/QiuForm/types.ts +0 -39
  91. package/components/QiuFormItem/index.vue +0 -276
  92. package/components/QiuFullscreen/index.vue +0 -11
  93. package/components/QiuGrid/index.vue +0 -408
  94. package/components/QiuHoverCard/index.vue +0 -192
  95. package/components/QiuIcon/index.vue +0 -117
  96. package/components/QiuIconPicker/iconify.libraries.ts +0 -182
  97. package/components/QiuIconPicker/icons.catalog.ts +0 -3072
  98. package/components/QiuIconPicker/index.vue +0 -488
  99. package/components/QiuImage/index.vue +0 -177
  100. package/components/QiuInput/index.vue +0 -328
  101. package/components/QiuInputNumber/index.vue +0 -295
  102. package/components/QiuInputOtp/index.vue +0 -190
  103. package/components/QiuKbd/index.vue +0 -57
  104. package/components/QiuLayoutContainer/index.vue +0 -50
  105. package/components/QiuLinkPreview/index.vue +0 -224
  106. package/components/QiuLoading/index.ts +0 -176
  107. package/components/QiuLoading/spinner.vue +0 -820
  108. package/components/QiuLoading/types.ts +0 -44
  109. package/components/QiuMention/index.vue +0 -299
  110. package/components/QiuMenu/QiuMenuRoot.vue +0 -241
  111. package/components/QiuMenu/components/QiuMenuItem.vue +0 -340
  112. package/components/QiuMenu/components/QiuSubMenu.vue +0 -504
  113. package/components/QiuMenu/context.ts +0 -21
  114. package/components/QiuMenu/index.vue +0 -43
  115. package/components/QiuMenuNav/QiuMenuNavItem.vue +0 -100
  116. package/components/QiuMenuNav/QiuMenuNavSub.vue +0 -120
  117. package/components/QiuMenuNav/context.ts +0 -14
  118. package/components/QiuMenuNav/index.vue +0 -148
  119. package/components/QiuMsg/QiuMsgItem.vue +0 -180
  120. package/components/QiuMsg/index.ts +0 -158
  121. package/components/QiuMsg/types.ts +0 -23
  122. package/components/QiuMsgBox/index.ts +0 -147
  123. package/components/QiuNotification/QiuNotificationItem.vue +0 -168
  124. package/components/QiuNotification/index.ts +0 -155
  125. package/components/QiuNotification/types.ts +0 -14
  126. package/components/QiuPage/index.vue +0 -12
  127. package/components/QiuPageHeader/index.vue +0 -115
  128. package/components/QiuPageMain/index.vue +0 -78
  129. package/components/QiuPagination/index.vue +0 -421
  130. package/components/QiuPasswordStrength/index.vue +0 -101
  131. package/components/QiuPopconfirm/index.vue +0 -196
  132. package/components/QiuPopover/index.vue +0 -277
  133. package/components/QiuProgress/index.vue +0 -235
  134. package/components/QiuQrcode/index.vue +0 -302
  135. package/components/QiuQueryForm/components/QiuQueryFormBottomPanel.vue +0 -13
  136. package/components/QiuQueryForm/components/QiuQueryFormLeftPanel.vue +0 -37
  137. package/components/QiuQueryForm/components/QiuQueryFormRightPanel.vue +0 -37
  138. package/components/QiuQueryForm/components/QiuQueryFormTopPanel.vue +0 -13
  139. package/components/QiuQueryForm/index.vue +0 -117
  140. package/components/QiuRadio/QiuRadioGroup.vue +0 -75
  141. package/components/QiuRadio/index.vue +0 -191
  142. package/components/QiuRadio/types.ts +0 -9
  143. package/components/QiuRate/index.vue +0 -184
  144. package/components/QiuRefresh/index.vue +0 -32
  145. package/components/QiuResult/index.vue +0 -103
  146. package/components/QiuRow/index.vue +0 -60
  147. package/components/QiuRow/types.ts +0 -5
  148. package/components/QiuScrollbar/index.vue +0 -107
  149. package/components/QiuSearchBar/index.vue +0 -154
  150. package/components/QiuSegmented/index.vue +0 -120
  151. package/components/QiuSelect/QiuOption.vue +0 -93
  152. package/components/QiuSelect/index.vue +0 -452
  153. package/components/QiuSelect/types.ts +0 -15
  154. package/components/QiuSkeleton/index.vue +0 -78
  155. package/components/QiuSlider/index.vue +0 -266
  156. package/components/QiuSpace/index.vue +0 -95
  157. package/components/QiuSparkline/index.vue +0 -92
  158. package/components/QiuStatistic/index.vue +0 -4
  159. package/components/QiuStatistics/index.vue +0 -123
  160. package/components/QiuStep/index.vue +0 -220
  161. package/components/QiuSteps/context.ts +0 -25
  162. package/components/QiuSteps/index.vue +0 -84
  163. package/components/QiuSwitch/index.vue +0 -145
  164. package/components/QiuTabBar/index.vue +0 -218
  165. package/components/QiuTabBar/types.ts +0 -19
  166. package/components/QiuTabPane/index.vue +0 -82
  167. package/components/QiuTable/columns.ts +0 -16
  168. package/components/QiuTable/export.ts +0 -102
  169. package/components/QiuTable/index.ts +0 -24
  170. package/components/QiuTable/index.vue +0 -3503
  171. package/components/QiuTable/registry.ts +0 -75
  172. package/components/QiuTable/styles/table.scss +0 -1230
  173. package/components/QiuTable/types.ts +0 -413
  174. package/components/QiuTable/useArea.ts +0 -202
  175. package/components/QiuTable/useColumns.ts +0 -325
  176. package/components/QiuTable/useEdit.ts +0 -136
  177. package/components/QiuTable/useExtras.ts +0 -115
  178. package/components/QiuTable/useHistory.ts +0 -77
  179. package/components/QiuTable/useMerge.ts +0 -105
  180. package/components/QiuTable/useResize.ts +0 -86
  181. package/components/QiuTable/useScrollSync.ts +0 -152
  182. package/components/QiuTable/useVirtual.ts +0 -97
  183. package/components/QiuTable/utils.ts +0 -165
  184. package/components/QiuTableColumn/index.vue +0 -101
  185. package/components/QiuTag/index.vue +0 -143
  186. package/components/QiuText/index.vue +0 -99
  187. package/components/QiuTime/index.vue +0 -548
  188. package/components/QiuTimeAgo/index.vue +0 -103
  189. package/components/QiuTimeline/index.vue +0 -54
  190. package/components/QiuTimelineItem/index.vue +0 -140
  191. package/components/QiuTips/index.vue +0 -323
  192. package/components/QiuTooltip/index.vue +0 -237
  193. package/components/QiuTransfer/index.vue +0 -277
  194. package/components/QiuTree/QiuTreeNode.vue +0 -146
  195. package/components/QiuTree/index.vue +0 -143
  196. package/components/QiuTree/types.ts +0 -30
  197. package/components/QiuTreeSelect/index.vue +0 -259
  198. package/components/QiuTrend/index.vue +0 -92
  199. package/components/QiuUpload/index.vue +0 -628
  200. package/components/QiuUploadCrop/index.vue +0 -1267
  201. package/components/QiuWatermark/index.vue +0 -121
  202. package/components/useBodyScrollLock.ts +0 -28
  203. package/dist/components/QiuBadge/utils/pca-code.json.d.ts +0 -3
  204. package/plugins/qiu.ts +0 -83
  205. package/plugins/shortcuts.ts +0 -69
  206. package/src/bridge/@/api/media.ts +0 -8
  207. package/src/bridge/@/api/notice.ts +0 -5
  208. package/src/bridge/@/config/index.ts +0 -38
  209. package/src/bridge/@/config/media.config.ts +0 -37
  210. package/src/bridge/@/config/security.config.ts +0 -8
  211. package/src/bridge/@/i18n/index.ts +0 -6
  212. package/src/bridge/@/store/modules/bing.ts +0 -9
  213. package/src/bridge/@/store/modules/errorLog.ts +0 -9
  214. package/src/bridge/@/store/modules/media.ts +0 -10
  215. package/src/bridge/@/store/modules/routes.ts +0 -10
  216. package/src/bridge/@/store/modules/settings.ts +0 -9
  217. package/src/bridge/@/store/modules/tabs.ts +0 -9
  218. package/src/bridge/@/store/modules/user.ts +0 -9
  219. package/src/bridge/@/utils/convertToCamelCase.ts +0 -11
  220. package/src/bridge/@/utils/index.ts +0 -9
  221. package/src/bridge/@/utils/pageTitle.ts +0 -4
  222. package/src/bridge/@/utils/routes.ts +0 -14
  223. package/src/bridge/@/utils/validate.ts +0 -17
  224. package/src/bridge/@qiu/plugins/shortcuts.ts +0 -3
  225. package/src/i18n.ts +0 -8
  226. package/src/icons/qiu-logo.svg +0 -1
  227. package/styles/dark.scss +0 -194
  228. package/styles/normalize.css +0 -349
  229. package/styles/plain.scss +0 -423
  230. package/styles/qiu-tokens.scss +0 -40
  231. package/styles/qiu.scss +0 -1149
  232. package/styles/technology.scss +0 -452
  233. package/styles/var.scss +0 -382
  234. package/styles/variables.scss +0 -77
@@ -1,167 +0,0 @@
1
- <template>
2
- <div
3
- class="qiu-collapse-item"
4
- :class="{
5
- 'is-active': expanded,
6
- 'is-disabled': disabled,
7
- }"
8
- >
9
- <button
10
- type="button"
11
- class="qiu-collapse-item__header"
12
- :disabled="disabled"
13
- :aria-expanded="expanded"
14
- @click="onToggle"
15
- >
16
- <span class="qiu-collapse-item__title">
17
- <slot name="title">{{ title }}</slot>
18
- </span>
19
- <qiu-icon
20
- class="qiu-collapse-item__arrow"
21
- :class="{ 'is-active': expanded }"
22
- icon="arrow-down-s-line"
23
- />
24
- </button>
25
- <div
26
- class="qiu-collapse-item__wrap"
27
- :class="{ 'is-active': expanded }"
28
- >
29
- <div ref="contentRef" class="qiu-collapse-item__content">
30
- <div class="qiu-collapse-item__content-inner">
31
- <slot />
32
- </div>
33
- </div>
34
- </div>
35
- </div>
36
- </template>
37
-
38
- <script lang="ts" setup>
39
- import type { QiuCollapseContext } from '../QiuCollapse/context'
40
- import { QIU_COLLAPSE_KEY } from '../QiuCollapse/context'
41
-
42
- defineOptions({ name: 'QiuCollapseItem' })
43
-
44
- const props = withDefaults(
45
- defineProps<{
46
- name: string | number
47
- title?: string
48
- disabled?: boolean
49
- }>(),
50
- {
51
- title: '',
52
- disabled: false,
53
- }
54
- )
55
-
56
- const collapse = inject<QiuCollapseContext>(QIU_COLLAPSE_KEY, null)
57
- const contentRef = ref<HTMLElement | null>(null)
58
- const contentHeight = ref(0)
59
-
60
- const expanded = computed(() => collapse?.isActive(props.name) ?? false)
61
-
62
- const onToggle = () => {
63
- if (props.disabled || !collapse) return
64
- collapse.toggleItem(props.name)
65
- }
66
-
67
- const measure = () => {
68
- if (contentRef.value) contentHeight.value = contentRef.value.scrollHeight
69
- }
70
-
71
- watch(expanded, async (val) => {
72
- if (val) {
73
- await nextTick()
74
- measure()
75
- }
76
- })
77
-
78
- let resizeObserver: ResizeObserver | null = null
79
-
80
- onMounted(() => {
81
- measure()
82
- if (typeof ResizeObserver !== 'undefined' && contentRef.value) {
83
- resizeObserver = new ResizeObserver(measure)
84
- resizeObserver.observe(contentRef.value)
85
- }
86
- })
87
-
88
- onBeforeUnmount(() => {
89
- resizeObserver?.disconnect()
90
- })
91
- </script>
92
-
93
- <style lang="scss" scoped>
94
- .qiu-collapse-item {
95
- border-bottom: 1px solid var(--qiu-border-color-light, var(--qiu-border-color-light, #e4e7ed));
96
-
97
- &:last-child {
98
- border-bottom: 0;
99
- }
100
-
101
- &.is-disabled {
102
- .qiu-collapse-item__header {
103
- cursor: not-allowed;
104
- opacity: 0.6;
105
- }
106
- }
107
- }
108
-
109
- .qiu-collapse-item__header {
110
- display: flex;
111
- gap: 8px;
112
- align-items: center;
113
- width: 100%;
114
- padding: 12px 0;
115
- font-size: 14px;
116
- font-weight: 500;
117
- color: var(--qiu-text-color-primary, var(--qiu-text-color-primary, #303133));
118
- cursor: pointer;
119
- background: transparent;
120
- border: 0;
121
- outline: none;
122
- transition: color 0.2s;
123
-
124
- &:hover:not(:disabled) {
125
- color: var(--qiu-color-primary, var(--qiu-color-primary, #409eff));
126
- }
127
- }
128
-
129
- .qiu-collapse-item__title {
130
- flex: 1;
131
- min-width: 0;
132
- text-align: left;
133
- }
134
-
135
- .qiu-collapse-item__arrow {
136
- flex-shrink: 0;
137
- font-size: 16px;
138
- color: var(--qiu-text-color-secondary, var(--qiu-text-color-secondary, #909399));
139
- transition: transform 0.3s ease;
140
-
141
- &.is-active {
142
- transform: rotate(180deg);
143
- }
144
- }
145
-
146
- .qiu-collapse-item__wrap {
147
- display: grid;
148
- grid-template-rows: 0fr;
149
- overflow: hidden;
150
- transition: grid-template-rows 0.3s ease;
151
-
152
- &.is-active {
153
- grid-template-rows: 1fr;
154
- }
155
- }
156
-
157
- .qiu-collapse-item__content {
158
- min-height: 0;
159
- font-size: 14px;
160
- line-height: 1.6;
161
- color: var(--qiu-text-color-regular, var(--qiu-text-color-regular, #606266));
162
- }
163
-
164
- .qiu-collapse-item__content-inner {
165
- padding-bottom: 12px;
166
- }
167
- </style>
@@ -1,296 +0,0 @@
1
- <template>
2
- <div
3
- class="qiu-color-field"
4
- :class="{
5
- 'is-disabled': disabled,
6
- 'is-focused': focused,
7
- }"
8
- >
9
- <div class="qiu-color-field__main">
10
- <label class="qiu-color-field__native-wrap" :title="displayValue">
11
- <input
12
- class="qiu-color-field__native"
13
- type="color"
14
- :value="normalizedValue"
15
- :disabled="disabled"
16
- @input="onNativeInput"
17
- @focus="focused = true"
18
- @blur="focused = false"
19
- />
20
- <span
21
- class="qiu-color-field__preview"
22
- :style="{ background: displayValue || 'transparent' }"
23
- />
24
- </label>
25
- <input
26
- v-model="hexInput"
27
- class="qiu-color-field__hex"
28
- type="text"
29
- maxlength="7"
30
- :placeholder="placeholder"
31
- :disabled="disabled"
32
- spellcheck="false"
33
- @focus="focused = true"
34
- @blur="onHexBlur"
35
- @keydown.enter="onHexBlur"
36
- />
37
- <button
38
- v-if="clearable && hasValue && !disabled"
39
- type="button"
40
- class="qiu-color-field__clear"
41
- tabindex="-1"
42
- @click="clear"
43
- >
44
- ×
45
- </button>
46
- </div>
47
- <div v-if="presets.length" class="qiu-color-field__presets">
48
- <button
49
- v-for="color in presets"
50
- :key="color"
51
- type="button"
52
- class="qiu-color-field__swatch"
53
- :class="{ 'is-active': normalizedValue.toLowerCase() === color.toLowerCase() }"
54
- :style="{ background: color }"
55
- :title="color"
56
- :disabled="disabled"
57
- @click="selectPreset(color)"
58
- />
59
- </div>
60
- </div>
61
- </template>
62
-
63
- <script lang="ts" setup>
64
- defineOptions({ name: 'QiuColorField' })
65
-
66
- const props = withDefaults(
67
- defineProps<{
68
- modelValue?: string
69
- presets?: string[]
70
- placeholder?: string
71
- clearable?: boolean
72
- disabled?: boolean
73
- }>(),
74
- {
75
- modelValue: '',
76
- presets: () => [
77
- '#409eff',
78
- '#67c23a',
79
- '#e6a23c',
80
- '#f56c6c',
81
- '#909399',
82
- '#1e90ff',
83
- '#4e6ef2',
84
- '#0052d9',
85
- '#3fb884',
86
- '#6954f0',
87
- ],
88
- placeholder: '#000000',
89
- clearable: false,
90
- disabled: false,
91
- }
92
- )
93
-
94
- const emit = defineEmits<{
95
- 'update:modelValue': [string]
96
- change: [string]
97
- clear: []
98
- }>()
99
-
100
- const focused = ref(false)
101
- const hexInput = ref('')
102
-
103
- const hasValue = computed(() => !!props.modelValue)
104
-
105
- const normalizeHex = (val: string) => {
106
- const v = val.trim()
107
- if (!v) return ''
108
- const withHash = v.startsWith('#') ? v : `#${v}`
109
- if (/^#[0-9a-fA-F]{6}$/.test(withHash)) return withHash.toLowerCase()
110
- if (/^#[0-9a-fA-F]{3}$/.test(withHash)) {
111
- const r = withHash[1]
112
- const g = withHash[2]
113
- const b = withHash[3]
114
- return `#${r}${r}${g}${g}${b}${b}`.toLowerCase()
115
- }
116
- return ''
117
- }
118
-
119
- const normalizedValue = computed(() => normalizeHex(props.modelValue) || '#000000')
120
- const displayValue = computed(() => normalizeHex(props.modelValue))
121
-
122
- watch(
123
- () => props.modelValue,
124
- (val) => {
125
- hexInput.value = normalizeHex(val) || val
126
- },
127
- { immediate: true }
128
- )
129
-
130
- const updateValue = (val: string) => {
131
- emit('update:modelValue', val)
132
- emit('change', val)
133
- }
134
-
135
- const onNativeInput = (e: Event) => {
136
- const val = (e.target as HTMLInputElement).value
137
- hexInput.value = val
138
- updateValue(val)
139
- }
140
-
141
- const onHexBlur = () => {
142
- focused.value = false
143
- const normalized = normalizeHex(hexInput.value)
144
- if (normalized) {
145
- hexInput.value = normalized
146
- updateValue(normalized)
147
- } else {
148
- hexInput.value = displayValue.value
149
- }
150
- }
151
-
152
- const selectPreset = (color: string) => {
153
- hexInput.value = color
154
- updateValue(color)
155
- }
156
-
157
- const clear = () => {
158
- hexInput.value = ''
159
- emit('update:modelValue', '')
160
- emit('change', '')
161
- emit('clear')
162
- }
163
- </script>
164
-
165
- <style lang="scss" scoped>
166
- .qiu-color-field {
167
- display: inline-flex;
168
- flex-direction: column;
169
- gap: 8px;
170
- width: 100%;
171
-
172
- &.is-disabled {
173
- cursor: not-allowed;
174
- opacity: 0.6;
175
- }
176
-
177
- &.is-focused .qiu-color-field__main {
178
- border-color: var(--qiu-color-primary, var(--qiu-color-primary));
179
- box-shadow: 0 0 0 1px color-mix(in srgb, var(--qiu-color-primary, var(--qiu-color-primary)) 25%, transparent);
180
- }
181
-
182
- &__main {
183
- display: flex;
184
- gap: 8px;
185
- align-items: center;
186
- height: 32px;
187
- padding: 0 8px;
188
- background: var(--qiu-bg-color, var(--qiu-bg-color, #fff));
189
- border: 1px solid var(--qiu-border-color, var(--qiu-border-color, #dcdfe6));
190
- border-radius: var(--qiu-border-radius-base, var(--qiu-border-radius-base, 4px));
191
- transition: border-color 0.2s ease, box-shadow 0.2s ease;
192
- }
193
-
194
- &__native-wrap {
195
- position: relative;
196
- flex-shrink: 0;
197
- width: 24px;
198
- height: 24px;
199
- overflow: hidden;
200
- cursor: pointer;
201
- border: 1px solid var(--qiu-border-color-light, var(--qiu-border-color-light, #e4e7ed));
202
- border-radius: 4px;
203
- }
204
-
205
- &__native {
206
- position: absolute;
207
- inset: -4px;
208
- width: calc(100% + 8px);
209
- height: calc(100% + 8px);
210
- padding: 0;
211
- cursor: pointer;
212
- border: 0;
213
- opacity: 0;
214
- }
215
-
216
- &__preview {
217
- display: block;
218
- width: 100%;
219
- height: 100%;
220
- border-radius: 3px;
221
- }
222
-
223
- &__hex {
224
- flex: 1;
225
- min-width: 0;
226
- height: 100%;
227
- padding: 0;
228
- font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;
229
- font-size: 13px;
230
- color: var(--qiu-text-color-primary, var(--qiu-text-color-primary, #303133));
231
- background: transparent;
232
- border: 0;
233
- outline: none;
234
-
235
- &::placeholder {
236
- color: var(--qiu-text-color-placeholder, var(--qiu-text-color-placeholder, #a8abb2));
237
- }
238
-
239
- &:disabled {
240
- cursor: not-allowed;
241
- }
242
- }
243
-
244
- &__clear {
245
- display: inline-flex;
246
- flex-shrink: 0;
247
- align-items: center;
248
- justify-content: center;
249
- width: 18px;
250
- height: 18px;
251
- padding: 0;
252
- font-size: 14px;
253
- line-height: 1;
254
- color: var(--qiu-text-color-placeholder, var(--qiu-text-color-placeholder, #a8abb2));
255
- cursor: pointer;
256
- background: transparent;
257
- border: 0;
258
- border-radius: 50%;
259
- outline: none;
260
-
261
- &:hover {
262
- color: var(--qiu-text-color-regular, var(--qiu-text-color-regular, #606266));
263
- }
264
- }
265
-
266
- &__presets {
267
- display: flex;
268
- flex-wrap: wrap;
269
- gap: 6px;
270
- }
271
-
272
- &__swatch {
273
- width: 20px;
274
- height: 20px;
275
- padding: 0;
276
- cursor: pointer;
277
- border: 1px solid rgb(0 0 0 / 12%);
278
- border-radius: 4px;
279
- outline: none;
280
- transition: transform 0.15s ease, box-shadow 0.15s ease;
281
-
282
- &:hover:not(:disabled) {
283
- transform: scale(1.08);
284
- }
285
-
286
- &.is-active {
287
- box-shadow: 0 0 0 2px var(--qiu-color-primary, var(--qiu-color-primary));
288
- }
289
-
290
- &:disabled {
291
- cursor: not-allowed;
292
- opacity: 0.5;
293
- }
294
- }
295
- }
296
- </style>
@@ -1,118 +0,0 @@
1
- # QiuColorPicker 颜色选择器
2
-
3
- 轻量颜色选择器:左侧原生取色块(点击弹出系统调色板),右侧十六进制输入框,下方常用预设色板。
4
- 选择颜色后通过 `v-model`(即 `update:modelValue`)自动回填颜色值,可直接用于表单配置。
5
-
6
- 基于 `QiuColorField` 封装,随 `qiuui-vue` 一起发布,**无需单独安装**。
7
-
8
- ## 安装
9
-
10
- `QiuColorPicker` 已内置在 `qiuui-vue` 组件库中,安装组件库即可使用:
11
-
12
- ```bash
13
- pnpm add qiuui-vue
14
- # 或 npm i qiuui-vue
15
- ```
16
-
17
- 在应用入口 `main.ts` 中完成一次性的全局安装(仅需做一次,所有组件通用):
18
-
19
- ```ts
20
- // main.ts
21
- import { createApp } from 'vue'
22
- import ElementPlus from 'element-plus'
23
- import 'element-plus/dist/index.css'
24
-
25
- import { setupQiu } from 'qiuui-vue'
26
- import 'qiuui-vue/dist/qiuui-vue.css' // 组件库样式
27
- import 'qiuui-vue/styles/qiu.scss' // 三套主题(plain/dark/technology)与变量
28
-
29
- const app = createApp(App)
30
- app.use(ElementPlus)
31
- app.use(setupQiu) // 全局注册全部组件 + $qiuMsg / $qiuNotify 等助手
32
- app.mount('#app')
33
- ```
34
-
35
- > 说明:本组件库实际发布包名为 `qiuui-vue`(非 `qiu-ui`)。执行 `app.use(setupQiu)` 后,
36
- > `<qiu-color-picker>` 在任意 `.vue` 文件中无需 import 即可直接使用。
37
-
38
- ## 使用(qiuui-vue 调用法)
39
-
40
- ### 全局注册后直接使用(推荐)
41
-
42
- ```vue
43
- <template>
44
- <qiu-color-picker v-model="color" clearable />
45
- <p>当前颜色:{{ color }}</p>
46
- </template>
47
-
48
- <script lang="ts" setup>
49
- import { ref } from 'vue'
50
- const color = ref('#1675fe')
51
- </script>
52
- ```
53
-
54
- ### 按需显式引入
55
-
56
- 如果不想全局注册全部组件,也可以单独导入:
57
-
58
- ```vue
59
- <template>
60
- <QiuColorPicker v-model="color" :presets="presets" />
61
- </template>
62
-
63
- <script lang="ts" setup>
64
- import { ref } from 'vue'
65
- import { QiuColorPicker } from 'qiuui-vue'
66
-
67
- const color = ref('#1675fe')
68
- const presets = ['#1675fe', '#f56c6c', '#67c23a', '#000000']
69
- </script>
70
- ```
71
-
72
- ## Props
73
-
74
- | 参数 | 说明 | 类型 | 默认值(见下方预设列表) |
75
- | ----------- | -------------------------- | ---------- | ------------------------ |
76
- | `modelValue`| 绑定值,十六进制颜色(如 `#1675fe`) | `string` | `''` |
77
- | `presets` | 预设色板数组 | `string[]` | 见下方默认值 |
78
- | `placeholder`| 输入框占位符 | `string` | `'#1675fe'` |
79
- | `clearable` | 是否显示清除按钮 | `boolean` | `false` |
80
- | `disabled` | 是否禁用 | `boolean` | `false` |
81
-
82
- 默认 `presets`:
83
-
84
- ```ts
85
- ['#1675fe', '#409eff', '#67c23a', '#e6a23c', '#f56c6c', '#909399', '#00bcd4', '#9c27b0', '#ff5722', '#795548']
86
- ```
87
-
88
- ## Events
89
-
90
- | 事件名 | 说明 | 回调参数 |
91
- | ---------------------- | -------------------------- | ------------ |
92
- | `update:modelValue` | 颜色变化(v-model 绑定) | `string` |
93
- | `change` | 颜色变化(与上面同步触发) | `string` |
94
-
95
- ## 完整示例
96
-
97
- ```vue
98
- <template>
99
- <div style="max-width: 320px">
100
- <qiu-color-picker
101
- v-model="form.primaryColor"
102
- :presets="['#1675fe', '#f56c6c', '#67c23a', '#000000']"
103
- clearable
104
- />
105
- <p>primaryColor = {{ form.primaryColor }}</p>
106
- </div>
107
- </template>
108
-
109
- <script lang="ts" setup>
110
- import { reactive } from 'vue'
111
-
112
- const form = reactive({
113
- primaryColor: '#1675fe',
114
- })
115
- </script>
116
- ```
117
-
118
- 选择预设色、在输入框输入合法十六进制、或点击左侧色块用系统调色板取色,都会自动把颜色值回填到 `v-model`。
@@ -1,60 +0,0 @@
1
- <template>
2
- <qiu-color-field
3
- class="qiu-color-picker"
4
- v-bind="$attrs"
5
- :model-value="modelValue"
6
- :presets="presets"
7
- :placeholder="placeholder"
8
- :clearable="clearable"
9
- :disabled="disabled"
10
- @update:model-value="emit('update:modelValue', $event)"
11
- @change="emit('change', $event)"
12
- />
13
- </template>
14
-
15
- <script lang="ts" setup>
16
- import QiuColorField from '../QiuColorField/index.vue'
17
-
18
- defineOptions({
19
- name: 'QiuColorPicker',
20
- })
21
-
22
- const props = withDefaults(
23
- defineProps<{
24
- modelValue?: string
25
- presets?: string[]
26
- placeholder?: string
27
- clearable?: boolean
28
- disabled?: boolean
29
- }>(),
30
- {
31
- modelValue: '',
32
- presets: () => [
33
- '#1675fe',
34
- '#409eff',
35
- '#67c23a',
36
- '#e6a23c',
37
- '#f56c6c',
38
- '#909399',
39
- '#00bcd4',
40
- '#9c27b0',
41
- '#ff5722',
42
- '#795548',
43
- ],
44
- placeholder: '#1675fe',
45
- clearable: false,
46
- disabled: false,
47
- }
48
- )
49
-
50
- const emit = defineEmits<{
51
- 'update:modelValue': [value: string]
52
- change: [value: string]
53
- }>()
54
- </script>
55
-
56
- <style lang="scss" scoped>
57
- .qiu-color-picker {
58
- width: 100%;
59
- }
60
- </style>