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