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