ep-craft 0.1.28 → 0.1.30
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/dist/components/config-provider/index.d.ts +246 -3
- package/dist/components/config-provider/index.js +17 -3
- package/dist/components/config-provider/src/config-provider-props.d.ts +103 -0
- package/dist/components/config-provider/src/config-provider-props.js +91 -0
- package/dist/components/config-provider/src/config-provider.d.ts +150 -0
- package/dist/components/config-provider/src/config-provider.js +22 -0
- package/dist/components/config-provider/src/hooks/use-global-config.js +55 -13
- package/dist/components/form/src/hooks/use-form-common-props.js +15 -13
- package/dist/components/input-number/EpInputNumber.vue.d.ts +51 -0
- package/dist/components/input-number/EpInputNumber.vue.js +310 -0
- package/dist/components/input-number/EpInputNumber2.vue.js +4 -0
- package/dist/components/input-number/index.d.ts +5 -2
- package/dist/components/input-number/index.js +9 -4
- package/dist/components/input-number/input-number.d.ts +169 -0
- package/dist/components/input-number/input-number.js +165 -0
- package/dist/components/input-number/instance.d.ts +2 -0
- package/dist/ep-craft.js +142 -131
- package/dist/index.css +1 -1
- package/dist/index.d.ts +19 -0
- package/dist/vendored-components.d.ts +1 -1
- package/dist/vendored-components.js +2 -0
- package/package.json +2 -1
- package/theme-chalk/src/input-number.scss +118 -0
package/dist/index.d.ts
CHANGED
|
@@ -3,6 +3,25 @@ export * from './components';
|
|
|
3
3
|
export { withInstall } from './utils/with-install';
|
|
4
4
|
export { EpCraftResolver } from './resolver';
|
|
5
5
|
export * from 'element-plus';
|
|
6
|
+
/**
|
|
7
|
+
* 表单上下文相关的 hooks 与 InjectionKey,必须覆盖 element-plus 的同名导出。
|
|
8
|
+
*
|
|
9
|
+
* 背景:源码化(vendored)的表单类组件在构建时被 alias 到本地 src/,
|
|
10
|
+
* 其 provide/inject 用的是本库 src/components/form/src/constants.ts 定义的
|
|
11
|
+
* Symbol;而 `export * from 'element-plus'` 带出的同名成员来自 element-plus
|
|
12
|
+
* 自己的包实例,两者是不同的 Symbol(Symbol 每次求值都会产生新值)。
|
|
13
|
+
*
|
|
14
|
+
* 后果:使用方从 `ep-craft` 根入口导入 useFormDisabled 等 hooks 时,
|
|
15
|
+
* 实际拿到的是 element-plus 版本,其 inject(formContextKey) 找不到
|
|
16
|
+
* <ep-form> provide 的上下文,`form?.disabled` 恒为 undefined,最终兜底为
|
|
17
|
+
* false——表单级 disabled 无法传播到自定义包装组件(表现为只读态下下拉框
|
|
18
|
+
* 已置灰、数字输入框仍可编辑)。
|
|
19
|
+
*
|
|
20
|
+
* 故此处显式再导出本库自身的实现。必须写在 `export * from 'element-plus'`
|
|
21
|
+
* 之后:若写在其前面,同名导出会因 export * 的歧义消除规则被静默丢弃,
|
|
22
|
+
* 使用方又会拿到 element-plus 版本,问题复现。
|
|
23
|
+
*/
|
|
24
|
+
export { formContextKey, formItemContextKey, useDisabled, useFormDisabled, useFormItem, useFormItemInputId, useFormSize, useSize, } from './components/form';
|
|
6
25
|
export { ElMessage as EpMessage, ElMessageBox as EpMessageBox, ElNotification as EpNotification, ElLoading as EpLoading, ElInfiniteScroll as EpInfiniteScroll, } from 'element-plus';
|
|
7
26
|
export declare const EpCraft: Plugin;
|
|
8
27
|
export default EpCraft;
|
|
@@ -11,6 +11,6 @@
|
|
|
11
11
|
* 2. 横切组件(icon/tooltip/collapse-transition/popper)由 vendor-cross-cutting
|
|
12
12
|
* vendor 到本地,同样需跳过 gen 包装以免被覆盖为 wrapper。
|
|
13
13
|
*/
|
|
14
|
-
export declare const vendoredComponents: readonly ["Affix", "Alert", "Anchor", "AnchorLink", "Button", "CheckTag", "Tag", "Menu", "MenuItem", "MenuItemGroup", "SubMenu", "Tabs", "TabPane", "Radio", "RadioButton", "RadioGroup", "Input", "Option", "OptionGroup", "Select", "SelectV2", "DatePicker", "DatePickerPanel", "TimePicker", "CollapseTransition", "Form", "Icon", "Popper", "Tooltip", "Scrollbar"];
|
|
14
|
+
export declare const vendoredComponents: readonly ["Affix", "Alert", "Anchor", "AnchorLink", "Button", "CheckTag", "Tag", "Menu", "MenuItem", "MenuItemGroup", "SubMenu", "Tabs", "TabPane", "Radio", "RadioButton", "RadioGroup", "Input", "InputNumber", "Option", "OptionGroup", "Select", "SelectV2", "DatePicker", "DatePickerPanel", "TimePicker", "CollapseTransition", "ConfigProvider", "Form", "Icon", "Popper", "Tooltip", "Scrollbar"];
|
|
15
15
|
export type VendoredComponentName = (typeof vendoredComponents)[number];
|
|
16
16
|
export declare const isVendored: (name: string) => boolean;
|
|
@@ -16,6 +16,7 @@ const o = [
|
|
|
16
16
|
"RadioButton",
|
|
17
17
|
"RadioGroup",
|
|
18
18
|
"Input",
|
|
19
|
+
"InputNumber",
|
|
19
20
|
"Option",
|
|
20
21
|
"OptionGroup",
|
|
21
22
|
"Select",
|
|
@@ -25,6 +26,7 @@ const o = [
|
|
|
25
26
|
"TimePicker",
|
|
26
27
|
// 横切组件(vendor-cross-cutting 产出,跳过 gen 包装)
|
|
27
28
|
"CollapseTransition",
|
|
29
|
+
"ConfigProvider",
|
|
28
30
|
"Form",
|
|
29
31
|
"Icon",
|
|
30
32
|
"Popper",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ep-craft",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.30",
|
|
4
4
|
"description": "A Vue 3 component library based on element-plus with ep- prefix",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/ep-craft.js",
|
|
@@ -52,6 +52,7 @@
|
|
|
52
52
|
"build": "vite build && vue-tsc --declaration --emitDeclarationOnly --outDir dist",
|
|
53
53
|
"gen": "tsx scripts/gen-components.ts",
|
|
54
54
|
"gen:docs": "tsx scripts/gen-docs.ts",
|
|
55
|
+
"verify:config-provider": "node scripts/verify-config-provider.mjs",
|
|
55
56
|
"docs:dev": "vitepress dev docs",
|
|
56
57
|
"docs:build": "vitepress build docs",
|
|
57
58
|
"docs:preview": "vitepress preview docs"
|
|
@@ -190,3 +190,121 @@
|
|
|
190
190
|
}
|
|
191
191
|
}
|
|
192
192
|
}
|
|
193
|
+
|
|
194
|
+
/* ----------------------------------------------------------------------------
|
|
195
|
+
* 浮动标签(float-label)在 input-number 容器内的水平定位
|
|
196
|
+
*
|
|
197
|
+
* 视觉(定位/过渡/缺口底色/隐藏)全部复用 float-label.scss 的 `.el-float-label`
|
|
198
|
+
* 基础规则,本文件只负责容器内的「水平定界 + 文本对齐 + 上浮左移」。
|
|
199
|
+
* 本文件规则特异性为 (0,4,0)~(0,6,0),恒高于 float-label.scss 的 (0,1,0)/(0,2,0),
|
|
200
|
+
* 故跨文件引入顺序不影响结果;且本文件不写 top/transform,不与之争属性。
|
|
201
|
+
*
|
|
202
|
+
* 结构:浮标是 `.el-input-number` 根的直接子节点(与 .el-input 容器、控制按钮并列),
|
|
203
|
+
* 而基础规则的 `left: 11px` 是按 `.el-input` 容器标定的,对应的是 input-number 的
|
|
204
|
+
* 左边缘而非文本区左边缘 —— 故此处必须显式给出文本区边界(left + right 定界)。
|
|
205
|
+
*
|
|
206
|
+
* 两条关键约束(详见 design.md「样式契约」):
|
|
207
|
+
* 1. 模式维度共享同一元素:尺寸(--small/--large)与 controls 模式(is-controls-right/
|
|
208
|
+
* is-without-controls)都作用在同一元素上且可同时成立,故须用「类数量差」构造压制。
|
|
209
|
+
* 2. align 靠 text-align 实现(见上方 when($align) 块),不是靠位置;故休息态 label
|
|
210
|
+
* 必须横跨整个文本区,再按 align 对齐自身文本 —— 只设 left 无法跟随 align。
|
|
211
|
+
*
|
|
212
|
+
* 层叠策略:用 `:not(.is-floating)` 把休息态与上浮态做成互斥两组,跨状态冲突从根上
|
|
213
|
+
* 不存在;组内压制靠类数量差(模式档比默认档多一个类),与书写顺序无关。
|
|
214
|
+
* 唯一残留的顺序敏感点是 ③ 与 ⑤ 各自内部「尺寸档在前、controls 档在后」——
|
|
215
|
+
* 仅在 --small/--large 与 is-controls-right 或 is-without-controls 同时命中时有分歧,
|
|
216
|
+
* 结果须为 15px(与上游 input-number.scss 的实测层叠结果一致)。**请勿调换这两组的顺序**。
|
|
217
|
+
* -------------------------------------------------------------------------- */
|
|
218
|
+
|
|
219
|
+
// ① 休息态:文本对齐跟随 align(与 .el-input__inner 的 text-align 取齐)。
|
|
220
|
+
// 此处用显式选择器而非 `@include when($align)`:后者依赖 `b()` 建立的块上下文,
|
|
221
|
+
// 本组规则与 ②③④⑤ 同处块外,写成 when() 会产出非法的裸 `&.is-<align>` 选择器被浏览器整条丢弃。
|
|
222
|
+
.#{$namespace}-input-number.is-left
|
|
223
|
+
> .#{$namespace}-float-label:not(.is-floating) {
|
|
224
|
+
text-align: left;
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
.#{$namespace}-input-number.is-right
|
|
228
|
+
> .#{$namespace}-float-label:not(.is-floating) {
|
|
229
|
+
text-align: right;
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
.#{$namespace}-input-number.is-center
|
|
233
|
+
> .#{$namespace}-float-label:not(.is-floating) {
|
|
234
|
+
text-align: center;
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
// ② 休息态:默认档基数(左右定界 = 该模式 .el-input__wrapper 的水平内边距)
|
|
238
|
+
.#{$namespace}-input-number.is-float-label
|
|
239
|
+
> .#{$namespace}-float-label:not(.is-floating) {
|
|
240
|
+
left: #{map.get($input-height, 'default') + 10};
|
|
241
|
+
right: #{map.get($input-height, 'default') + 10};
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
// ③ 休息态:模式档(尺寸档在前、controls 档在后,顺序敏感,勿调换)
|
|
245
|
+
.#{$namespace}-input-number.is-float-label.#{$namespace}-input-number--small
|
|
246
|
+
> .#{$namespace}-float-label:not(.is-floating) {
|
|
247
|
+
left: #{map.get($input-height, 'small') + 7};
|
|
248
|
+
right: #{map.get($input-height, 'small') + 7};
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
.#{$namespace}-input-number.is-float-label.#{$namespace}-input-number--large
|
|
252
|
+
> .#{$namespace}-float-label:not(.is-floating) {
|
|
253
|
+
left: #{map.get($input-height, 'large') + 7};
|
|
254
|
+
right: #{map.get($input-height, 'large') + 7};
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
.#{$namespace}-input-number.is-float-label.is-without-controls
|
|
258
|
+
> .#{$namespace}-float-label:not(.is-floating) {
|
|
259
|
+
left: 15px;
|
|
260
|
+
right: 15px;
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
.#{$namespace}-input-number.is-float-label.is-controls-right
|
|
264
|
+
> .#{$namespace}-float-label:not(.is-floating) {
|
|
265
|
+
left: 15px;
|
|
266
|
+
right: #{map.get($input-height, 'default') + 10};
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
// controls-right 叠加尺寸档时右内缩仍随尺寸走(比上一条多一个类 ⇒ 恒压过它)
|
|
270
|
+
.#{$namespace}-input-number.is-float-label.is-controls-right.#{$namespace}-input-number--small
|
|
271
|
+
> .#{$namespace}-float-label:not(.is-floating) {
|
|
272
|
+
right: #{map.get($input-height, 'small') + 7};
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
.#{$namespace}-input-number.is-float-label.is-controls-right.#{$namespace}-input-number--large
|
|
276
|
+
> .#{$namespace}-float-label:not(.is-floating) {
|
|
277
|
+
right: #{map.get($input-height, 'large') + 7};
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
// ④ 上浮态:默认档 —— 收缩为内容宽(放开 right)、落到该模式文本起点、放开指针以支持点击聚焦。
|
|
281
|
+
// 基础规则带 pointer-events: none,直接写 @click 不会触发;休息态该值反而满足需求
|
|
282
|
+
// (label 与空输入文本同位,穿透点击落到下层输入框 → 自然聚焦),故只在④放开。
|
|
283
|
+
// 隐藏态(is-hidden)与上浮态互斥,不会继承这里的 auto,故只读且有值时仍不遮挡文本选中。
|
|
284
|
+
.#{$namespace}-input-number.is-float-label
|
|
285
|
+
> .#{$namespace}-float-label.is-floating {
|
|
286
|
+
right: auto;
|
|
287
|
+
left: #{map.get($input-height, 'default') + 10};
|
|
288
|
+
pointer-events: auto;
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
// ⑤ 上浮态:模式档(比 ④ 多一个类 ⇒ 恒压过它;尺寸档在前、controls 档在后,顺序敏感)
|
|
292
|
+
.#{$namespace}-input-number.is-float-label.#{$namespace}-input-number--small
|
|
293
|
+
> .#{$namespace}-float-label.is-floating {
|
|
294
|
+
left: #{map.get($input-height, 'small') + 7};
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
.#{$namespace}-input-number.is-float-label.#{$namespace}-input-number--large
|
|
298
|
+
> .#{$namespace}-float-label.is-floating {
|
|
299
|
+
left: #{map.get($input-height, 'large') + 7};
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
.#{$namespace}-input-number.is-float-label.is-without-controls
|
|
303
|
+
> .#{$namespace}-float-label.is-floating {
|
|
304
|
+
left: 15px;
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
.#{$namespace}-input-number.is-float-label.is-controls-right
|
|
308
|
+
> .#{$namespace}-float-label.is-floating {
|
|
309
|
+
left: 15px;
|
|
310
|
+
}
|