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