@easy-editor/materials-dashboard-scroll-list 0.0.3 → 0.0.4

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/index.esm.js DELETED
@@ -1,672 +0,0 @@
1
- import { jsx, jsxs } from 'react/jsx-runtime';
2
-
3
- function r(e){var t,f,n="";if("string"==typeof e||"number"==typeof e)n+=e;else if("object"==typeof e)if(Array.isArray(e)){var o=e.length;for(t=0;t<o;t++)e[t]&&(f=r(e[t]))&&(n&&(n+=" "),n+=f);}else for(f in e)e[f]&&(n&&(n+=" "),n+=f);return n}function clsx(){for(var e,t,f=0,n="",o=arguments.length;f<o;f++)(e=arguments[f])&&(t=r(e))&&(n&&(n+=" "),n+=t);return n}
4
-
5
- function cn(...inputs) {
6
- return clsx(inputs);
7
- }
8
-
9
- const MaterialGroup = {
10
- DISPLAY: 'display'};
11
-
12
- function styleInject(css, ref) {
13
- if (ref === void 0) ref = {};
14
- var insertAt = ref.insertAt;
15
- if (typeof document === 'undefined') {
16
- return;
17
- }
18
- var head = document.head || document.getElementsByTagName('head')[0];
19
- var style = document.createElement('style');
20
- style.type = 'text/css';
21
- if (insertAt === 'top') {
22
- if (head.firstChild) {
23
- head.insertBefore(style, head.firstChild);
24
- } else {
25
- head.appendChild(style);
26
- }
27
- } else {
28
- head.appendChild(style);
29
- }
30
- if (style.styleSheet) {
31
- style.styleSheet.cssText = css;
32
- } else {
33
- style.appendChild(document.createTextNode(css));
34
- }
35
- }
36
-
37
- var css_248z = ".component-module__container___VbZSk{backdrop-filter:blur(10px);background:rgba(10,10,26,.95);border:1px solid rgba(26,26,62,.8);border-radius:12px;box-shadow:0 4px 20px rgba(0,0,0,.3);box-sizing:border-box;height:100%;overflow:hidden;padding:16px;width:100%}.component-module__list___ZzqLO{display:flex;flex-direction:column;gap:10px;height:100%}.component-module__item___-0hiq{align-items:center;background:rgba(15,15,42,.9);border:1px solid rgba(26,26,62,.6);border-radius:8px;display:flex;gap:14px;overflow:hidden;padding:12px 16px;position:relative;transition:all .3s ease}.component-module__item___-0hiq:before{background:linear-gradient(180deg,transparent,rgba(0,212,255,.5),transparent);bottom:0;content:\"\";left:0;opacity:0;position:absolute;top:0;transition:opacity .3s ease;width:3px}.component-module__item___-0hiq:hover{background:rgba(20,20,52,.95);border-color:rgba(0,212,255,.3);transform:translateX(4px)}.component-module__item___-0hiq:hover:before{opacity:1}.component-module__rankBadge___qWXYW{align-items:center;border-radius:6px;display:flex;font-weight:700;height:32px;justify-content:center;min-width:32px;transition:transform .3s ease}.component-module__item___-0hiq:hover .component-module__rankBadge___qWXYW{transform:scale(1.1)}.component-module__rankBadgeTopThree___kYqJt{font-size:20px;text-shadow:0 2px 8px rgba(0,0,0,.5)}.component-module__rankBadgeNormal___Fl3nh{background:rgba(26,26,62,.8);border:1px solid rgba(136,146,176,.2);color:#8892b0;font-size:14px}.component-module__rankGold___lLkRo{color:gold;filter:drop-shadow(0 0 6px rgba(255,215,0,.6))}.component-module__rankSilver___QUAyV{color:#e8e8e8;filter:drop-shadow(0 0 6px rgba(192,192,192,.6))}.component-module__rankBronze___Wc-LC{color:#f96;filter:drop-shadow(0 0 6px rgba(205,127,50,.6))}.component-module__name___6zmww{color:#e6e6e6;flex:1;font-size:15px;font-weight:500;overflow:hidden;text-overflow:ellipsis;transition:color .3s ease;white-space:nowrap}.component-module__item___-0hiq:hover .component-module__name___6zmww{color:#fff}.component-module__valueContainer___xBbFD{align-items:flex-end;display:flex;flex-direction:column;gap:6px;min-width:120px}.component-module__value___Fg70k{color:#00d4ff;font-family:Courier New,Courier,monospace;font-size:15px;font-weight:700;text-shadow:0 0 10px rgba(0,212,255,.3);transition:all .3s ease}.component-module__item___-0hiq:hover .component-module__value___Fg70k{text-shadow:0 0 15px rgba(0,212,255,.5);transform:scale(1.05)}.component-module__progressBar___wROZC{background:rgba(26,26,62,.8);border-radius:3px;box-shadow:inset 0 1px 3px rgba(0,0,0,.3);height:5px;overflow:hidden;width:100%}.component-module__progressFill___F8n5d{border-radius:3px;height:100%;position:relative;transition:width .5s cubic-bezier(.4,0,.2,1)}.component-module__progressFill___F8n5d:after{animation:component-module__shimmer___7hQ6G 2s infinite;background:linear-gradient(90deg,transparent,hsla(0,0%,100%,.2),transparent);bottom:0;content:\"\";left:0;position:absolute;right:0;top:0}@keyframes component-module__shimmer___7hQ6G{0%{transform:translateX(-100%)}to{transform:translateX(100%)}}";
38
- var styles = {"container":"component-module__container___VbZSk","list":"component-module__list___ZzqLO","item":"component-module__item___-0hiq","rankBadge":"component-module__rankBadge___qWXYW","rankBadgeTopThree":"component-module__rankBadgeTopThree___kYqJt","rankBadgeNormal":"component-module__rankBadgeNormal___Fl3nh","rankGold":"component-module__rankGold___lLkRo","rankSilver":"component-module__rankSilver___QUAyV","rankBronze":"component-module__rankBronze___Wc-LC","name":"component-module__name___6zmww","valueContainer":"component-module__valueContainer___xBbFD","value":"component-module__value___Fg70k","progressBar":"component-module__progressBar___wROZC","progressFill":"component-module__progressFill___F8n5d"};
39
- styleInject(css_248z);
40
-
41
- /**
42
- * Scroll List Component
43
- * 滚动列表组件 - 用于展示排行榜、数据列表等
44
- */
45
-
46
- const DEFAULT_DATA = [{
47
- rank: 1,
48
- name: '北京市',
49
- value: 9800
50
- }, {
51
- rank: 2,
52
- name: '上海市',
53
- value: 8500
54
- }, {
55
- rank: 3,
56
- name: '广州市',
57
- value: 7200
58
- }, {
59
- rank: 4,
60
- name: '深圳市',
61
- value: 6100
62
- }, {
63
- rank: 5,
64
- name: '杭州市',
65
- value: 4800
66
- }];
67
- const MEDAL_EMOJI = {
68
- 1: '🥇',
69
- 2: '🥈',
70
- 3: '🥉'
71
- };
72
- const getRankClass = rank => {
73
- if (rank === 1) {
74
- return styles.rankGold;
75
- }
76
- if (rank === 2) {
77
- return styles.rankSilver;
78
- }
79
- if (rank === 3) {
80
- return styles.rankBronze;
81
- }
82
- return '';
83
- };
84
- const formatDisplayValue = (value, format, prefix, suffix) => {
85
- let formatted;
86
- switch (format) {
87
- case 'currency':
88
- formatted = value.toLocaleString('zh-CN', {
89
- minimumFractionDigits: 2,
90
- maximumFractionDigits: 2
91
- });
92
- break;
93
- case 'percent':
94
- formatted = `${value}%`;
95
- break;
96
- default:
97
- formatted = value.toLocaleString();
98
- }
99
- return `${prefix}${formatted}${suffix}`;
100
- };
101
- const ScrollList = ({
102
- ref,
103
- data = DEFAULT_DATA,
104
- maxItems = 5,
105
- showRank = true,
106
- showMedal = true,
107
- progressBarEnable = true,
108
- progressBarGradient = true,
109
- progressBarColors = ['#00d4ff', '#9b59b6'],
110
- valueFormat = 'number',
111
- valuePrefix = '',
112
- valueSuffix = '',
113
- nameColor = '#e6e6e6',
114
- valueColor = '#00d4ff',
115
- backgroundColor = 'rgba(10, 10, 26, 0.95)',
116
- borderColor = 'rgba(26, 26, 62, 0.8)',
117
- itemBackgroundColor = 'rgba(15, 15, 42, 0.9)',
118
- itemBorderColor = 'rgba(26, 26, 62, 0.6)',
119
- glowEnable = false,
120
- style: externalStyle
121
- }) => {
122
- const displayData = data.slice(0, maxItems);
123
- const maxValue = Math.max(...displayData.map(item => item.value), 1);
124
- const getProgressBarStyle = value => {
125
- const percentage = value / maxValue * 100;
126
- return {
127
- width: `${percentage}%`,
128
- background: progressBarGradient ? `linear-gradient(90deg, ${progressBarColors[0]}, ${progressBarColors[1]})` : progressBarColors[0],
129
- boxShadow: glowEnable ? `0 0 8px ${progressBarColors[0]}60` : undefined
130
- };
131
- };
132
- const containerStyle = {
133
- ...externalStyle,
134
- backgroundColor,
135
- borderColor
136
- };
137
- const itemStyle = {
138
- backgroundColor: itemBackgroundColor,
139
- borderColor: itemBorderColor
140
- };
141
- return /*#__PURE__*/jsx("div", {
142
- className: styles.container,
143
- ref: ref,
144
- style: containerStyle,
145
- children: /*#__PURE__*/jsx("div", {
146
- className: styles.list,
147
- children: displayData.map(item => {
148
- const isTopThree = item.rank <= 3;
149
- return /*#__PURE__*/jsxs("div", {
150
- className: styles.item,
151
- style: itemStyle,
152
- children: [showRank ? /*#__PURE__*/jsx("div", {
153
- className: cn(styles.rankBadge, isTopThree ? styles.rankBadgeTopThree : styles.rankBadgeNormal, getRankClass(item.rank)),
154
- children: showMedal && isTopThree ? MEDAL_EMOJI[item.rank] : item.rank
155
- }) : null, /*#__PURE__*/jsx("div", {
156
- className: styles.name,
157
- style: {
158
- color: nameColor
159
- },
160
- children: item.name
161
- }), /*#__PURE__*/jsxs("div", {
162
- className: styles.valueContainer,
163
- children: [/*#__PURE__*/jsx("span", {
164
- className: styles.value,
165
- style: {
166
- color: valueColor
167
- },
168
- children: formatDisplayValue(item.value, valueFormat, valuePrefix, valueSuffix)
169
- }), progressBarEnable ? /*#__PURE__*/jsx("div", {
170
- className: styles.progressBar,
171
- children: /*#__PURE__*/jsx("div", {
172
- className: styles.progressFill,
173
- style: getProgressBarStyle(item.value)
174
- })
175
- }) : null]
176
- })]
177
- }, item.rank);
178
- })
179
- })
180
- });
181
- };
182
-
183
- const COMPONENT_NAME = 'EasyEditorMaterialsScrollList';
184
- const PACKAGE_NAME = '@easy-editor/materials-dashboard-scroll-list';
185
-
186
- const configure = {
187
- props: [{
188
- type: 'group',
189
- title: '属性',
190
- setter: 'TabSetter',
191
- items: [{
192
- type: 'group',
193
- key: 'config',
194
- title: '配置',
195
- setter: {
196
- componentName: 'CollapseSetter',
197
- props: {
198
- icon: false
199
- }
200
- },
201
- items: [
202
- {
203
- name: 'id',
204
- title: 'ID',
205
- setter: 'NodeIdSetter',
206
- extraProps: {
207
- label: false
208
- }
209
- }, {
210
- name: 'title',
211
- title: '标题',
212
- setter: 'StringSetter',
213
- extraProps: {
214
- getValue(target) {
215
- return target.getExtraPropValue('title');
216
- },
217
- setValue(target, value) {
218
- target.setExtraPropValue('title', value);
219
- }
220
- }
221
- }, {
222
- type: 'group',
223
- title: '基础属性',
224
- setter: {
225
- componentName: 'CollapseSetter',
226
- props: {
227
- icon: false
228
- }
229
- },
230
- items: [{
231
- name: 'rect',
232
- title: '位置尺寸',
233
- setter: 'RectSetter',
234
- extraProps: {
235
- getValue(target) {
236
- return target.getExtraPropValue('$dashboard.rect');
237
- },
238
- setValue(target, value) {
239
- target.setExtraPropValue('$dashboard.rect', value);
240
- }
241
- }
242
- }]
243
- },
244
- {
245
- type: 'group',
246
- title: '数据',
247
- setter: {
248
- componentName: 'CollapseSetter',
249
- props: {
250
- icon: false
251
- }
252
- },
253
- items: [{
254
- name: 'data',
255
- title: '列表数据',
256
- setter: 'JsonSetter'
257
- }, {
258
- name: 'maxItems',
259
- title: '最大显示数',
260
- setter: {
261
- componentName: 'NumberSetter',
262
- props: {
263
- min: 1,
264
- max: 20
265
- }
266
- },
267
- extraProps: {
268
- defaultValue: 5
269
- }
270
- }]
271
- }, {
272
- type: 'group',
273
- title: '显示',
274
- setter: {
275
- componentName: 'CollapseSetter',
276
- props: {
277
- icon: false
278
- }
279
- },
280
- items: [{
281
- name: 'showRank',
282
- title: '显示排名',
283
- setter: 'SwitchSetter',
284
- extraProps: {
285
- defaultValue: true
286
- }
287
- }, {
288
- name: 'showMedal',
289
- title: '显示奖牌',
290
- setter: 'SwitchSetter',
291
- extraProps: {
292
- defaultValue: true
293
- }
294
- }, {
295
- name: 'progressBarEnable',
296
- title: '显示进度条',
297
- setter: 'SwitchSetter',
298
- extraProps: {
299
- defaultValue: true
300
- }
301
- }, {
302
- name: 'progressBarGradient',
303
- title: '渐变效果',
304
- setter: 'SwitchSetter',
305
- extraProps: {
306
- defaultValue: true
307
- }
308
- }, {
309
- name: 'glowEnable',
310
- title: '发光效果',
311
- setter: 'SwitchSetter',
312
- extraProps: {
313
- defaultValue: false
314
- }
315
- }]
316
- }, {
317
- type: 'group',
318
- title: '数值格式',
319
- setter: {
320
- componentName: 'CollapseSetter',
321
- props: {
322
- icon: false
323
- }
324
- },
325
- items: [{
326
- name: 'valueFormat',
327
- title: '格式类型',
328
- setter: {
329
- componentName: 'SelectSetter',
330
- props: {
331
- options: [{
332
- label: '数字',
333
- value: 'number'
334
- }, {
335
- label: '货币',
336
- value: 'currency'
337
- }, {
338
- label: '百分比',
339
- value: 'percent'
340
- }]
341
- }
342
- },
343
- extraProps: {
344
- defaultValue: 'number'
345
- }
346
- }, {
347
- name: 'valuePrefix',
348
- title: '数值前缀',
349
- setter: 'StringSetter',
350
- extraProps: {
351
- defaultValue: ''
352
- }
353
- }, {
354
- name: 'valueSuffix',
355
- title: '数值后缀',
356
- setter: 'StringSetter',
357
- extraProps: {
358
- defaultValue: ''
359
- }
360
- }]
361
- }, {
362
- type: 'group',
363
- title: '颜色',
364
- setter: {
365
- componentName: 'CollapseSetter',
366
- props: {
367
- icon: false
368
- }
369
- },
370
- items: [{
371
- name: 'progressBarColors',
372
- title: '进度条颜色',
373
- setter: 'ColorSetter',
374
- extraProps: {
375
- defaultValue: ['#00d4ff', '#9b59b6']
376
- }
377
- }, {
378
- name: 'nameColor',
379
- title: '名称颜色',
380
- setter: 'ColorSetter',
381
- extraProps: {
382
- defaultValue: '#e6e6e6'
383
- }
384
- }, {
385
- name: 'valueColor',
386
- title: '数值颜色',
387
- setter: 'ColorSetter',
388
- extraProps: {
389
- defaultValue: '#00d4ff'
390
- }
391
- }, {
392
- name: 'backgroundColor',
393
- title: '背景颜色',
394
- setter: 'ColorSetter',
395
- extraProps: {
396
- defaultValue: 'rgba(10, 10, 26, 0.95)'
397
- }
398
- }, {
399
- name: 'borderColor',
400
- title: '边框颜色',
401
- setter: 'ColorSetter',
402
- extraProps: {
403
- defaultValue: 'rgba(26, 26, 62, 0.8)'
404
- }
405
- }, {
406
- name: 'itemBackgroundColor',
407
- title: '行背景颜色',
408
- setter: 'ColorSetter',
409
- extraProps: {
410
- defaultValue: 'rgba(15, 15, 42, 0.9)'
411
- }
412
- }, {
413
- name: 'itemBorderColor',
414
- title: '行边框颜色',
415
- setter: 'ColorSetter',
416
- extraProps: {
417
- defaultValue: 'rgba(26, 26, 62, 0.6)'
418
- }
419
- }]
420
- }]
421
- }, {
422
- type: 'group',
423
- key: 'data',
424
- title: '数据',
425
- items: [{
426
- name: 'dataBinding',
427
- title: '数据绑定',
428
- setter: 'DataBindingSetter'
429
- }]
430
- }, {
431
- type: 'group',
432
- key: 'advanced',
433
- title: '高级',
434
- items: [{
435
- name: 'condition',
436
- title: '显隐控制',
437
- setter: 'SwitchSetter',
438
- extraProps: {
439
- defaultValue: true,
440
- supportVariable: true
441
- }
442
- }, {
443
- type: 'group',
444
- title: '滚动配置',
445
- setter: {
446
- componentName: 'CollapseSetter',
447
- props: {
448
- icon: false
449
- }
450
- },
451
- items: [{
452
- name: 'scrollEnable',
453
- title: '启用滚动',
454
- setter: 'SwitchSetter',
455
- extraProps: {
456
- defaultValue: true
457
- }
458
- }, {
459
- name: 'scrollDirection',
460
- title: '滚动方向',
461
- setter: {
462
- componentName: 'SegmentedSetter',
463
- props: {
464
- options: [{
465
- label: '向上',
466
- value: 'up'
467
- }, {
468
- label: '向下',
469
- value: 'down'
470
- }]
471
- }
472
- },
473
- extraProps: {
474
- defaultValue: 'up'
475
- }
476
- }, {
477
- name: 'scrollSpeed',
478
- title: '滚动速度',
479
- setter: {
480
- componentName: 'SliderSetter',
481
- props: {
482
- min: 1,
483
- max: 10,
484
- step: 1,
485
- suffix: 'x'
486
- }
487
- },
488
- extraProps: {
489
- defaultValue: 3
490
- }
491
- }, {
492
- name: 'hoverPause',
493
- title: '悬停暂停',
494
- setter: 'SwitchSetter',
495
- extraProps: {
496
- defaultValue: true
497
- }
498
- }, {
499
- name: 'scrollInterval',
500
- title: '滚动间隔',
501
- setter: {
502
- componentName: 'SliderSetter',
503
- props: {
504
- min: 1000,
505
- max: 10_000,
506
- step: 500,
507
- suffix: 'ms'
508
- }
509
- },
510
- extraProps: {
511
- defaultValue: 3000
512
- }
513
- }]
514
- }, {
515
- type: 'group',
516
- title: '动画',
517
- setter: {
518
- componentName: 'CollapseSetter',
519
- props: {
520
- icon: false
521
- }
522
- },
523
- items: [{
524
- name: 'animationEnable',
525
- title: '启用动画',
526
- setter: 'SwitchSetter',
527
- extraProps: {
528
- defaultValue: true
529
- }
530
- }, {
531
- name: 'animationDuration',
532
- title: '动画时长',
533
- setter: {
534
- componentName: 'SliderSetter',
535
- props: {
536
- min: 0,
537
- max: 2000,
538
- step: 100,
539
- suffix: 'ms'
540
- }
541
- },
542
- extraProps: {
543
- defaultValue: 500
544
- }
545
- }, {
546
- name: 'animationEasing',
547
- title: '缓动函数',
548
- setter: {
549
- componentName: 'SelectSetter',
550
- props: {
551
- options: [{
552
- label: '线性',
553
- value: 'linear'
554
- }, {
555
- label: '缓入',
556
- value: 'ease-in'
557
- }, {
558
- label: '缓出',
559
- value: 'ease-out'
560
- }, {
561
- label: '缓入缓出',
562
- value: 'ease-in-out'
563
- }]
564
- }
565
- },
566
- extraProps: {
567
- defaultValue: 'ease-out'
568
- }
569
- }]
570
- }]
571
- }]
572
- }],
573
- component: {},
574
- supports: {},
575
- advanced: {}
576
- };
577
-
578
- const snippets = [{
579
- title: '排行榜',
580
- screenshot: '',
581
- schema: {
582
- componentName: COMPONENT_NAME,
583
- props: {
584
- data: [{
585
- rank: 1,
586
- name: '北京',
587
- value: 9800
588
- }, {
589
- rank: 2,
590
- name: '上海',
591
- value: 8500
592
- }, {
593
- rank: 3,
594
- name: '广州',
595
- value: 7200
596
- }, {
597
- rank: 4,
598
- name: '深圳',
599
- value: 6100
600
- }, {
601
- rank: 5,
602
- name: '杭州',
603
- value: 4800
604
- }],
605
- maxItems: 5,
606
- showMedal: true,
607
- progressBarEnable: true,
608
- progressBarGradient: true,
609
- progressBarColors: ['#00d4ff', '#9b59b6']
610
- },
611
- $dashboard: {
612
- rect: {
613
- width: 320,
614
- height: 280
615
- }
616
- }
617
- }
618
- }, {
619
- title: '简单列表',
620
- screenshot: '',
621
- schema: {
622
- componentName: COMPONENT_NAME,
623
- props: {
624
- data: [{
625
- rank: 1,
626
- name: '产品A',
627
- value: 1250
628
- }, {
629
- rank: 2,
630
- name: '产品B',
631
- value: 980
632
- }, {
633
- rank: 3,
634
- name: '产品C',
635
- value: 750
636
- }],
637
- maxItems: 3,
638
- showMedal: false,
639
- progressBarEnable: true,
640
- progressBarGradient: false,
641
- progressBarColors: ['#00ff88', '#00ff88']
642
- },
643
- $dashboard: {
644
- rect: {
645
- width: 280,
646
- height: 180
647
- }
648
- }
649
- }
650
- }];
651
-
652
- var version = "0.0.2";
653
- var pkg = {
654
- version: version};
655
-
656
- const meta = {
657
- componentName: COMPONENT_NAME,
658
- title: '滚动列表',
659
- group: MaterialGroup.DISPLAY,
660
- devMode: 'proCode',
661
- npm: {
662
- package: PACKAGE_NAME,
663
- version: pkg.version,
664
- globalName: COMPONENT_NAME,
665
- componentName: COMPONENT_NAME
666
- },
667
- snippets,
668
- configure
669
- };
670
-
671
- export { ScrollList as component, meta };
672
- //# sourceMappingURL=index.esm.js.map