@zhang_jifan/fanui 2.1.0

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.
Files changed (127) hide show
  1. package/ACCESSIBILITY.md +61 -0
  2. package/CHANGELOG.md +112 -0
  3. package/COMMERCIAL-LICENSE.md +71 -0
  4. package/DESIGN-SYSTEM.md +294 -0
  5. package/LICENSE +661 -0
  6. package/README.md +348 -0
  7. package/USAGE.md +1926 -0
  8. package/_index.scss +20 -0
  9. package/dist/fanui.cjs +15 -0
  10. package/dist/fanui.css +28209 -0
  11. package/dist/fanui.d.ts +353 -0
  12. package/dist/fanui.esm.js +71 -0
  13. package/dist/fanui.js +4782 -0
  14. package/dist/fanui.min.css +1 -0
  15. package/dist/fanui.mjs +71 -0
  16. package/dist/modules/fanui-advanced.css +830 -0
  17. package/dist/modules/fanui-advanced.min.css +129 -0
  18. package/dist/modules/fanui-alert.css +575 -0
  19. package/dist/modules/fanui-alert.min.css +122 -0
  20. package/dist/modules/fanui-badge.css +426 -0
  21. package/dist/modules/fanui-badge.min.css +77 -0
  22. package/dist/modules/fanui-base.css +1394 -0
  23. package/dist/modules/fanui-base.min.css +236 -0
  24. package/dist/modules/fanui-blog.css +762 -0
  25. package/dist/modules/fanui-blog.min.css +108 -0
  26. package/dist/modules/fanui-button.css +526 -0
  27. package/dist/modules/fanui-button.min.css +56 -0
  28. package/dist/modules/fanui-card.css +291 -0
  29. package/dist/modules/fanui-card.min.css +52 -0
  30. package/dist/modules/fanui-choice.css +539 -0
  31. package/dist/modules/fanui-choice.min.css +83 -0
  32. package/dist/modules/fanui-dashboard.css +1057 -0
  33. package/dist/modules/fanui-dashboard.min.css +160 -0
  34. package/dist/modules/fanui-data.css +687 -0
  35. package/dist/modules/fanui-data.min.css +125 -0
  36. package/dist/modules/fanui-feedback.css +432 -0
  37. package/dist/modules/fanui-feedback.min.css +79 -0
  38. package/dist/modules/fanui-form.css +779 -0
  39. package/dist/modules/fanui-form.min.css +123 -0
  40. package/dist/modules/fanui-glass.css +497 -0
  41. package/dist/modules/fanui-glass.min.css +46 -0
  42. package/dist/modules/fanui-input-plus.css +799 -0
  43. package/dist/modules/fanui-input-plus.min.css +124 -0
  44. package/dist/modules/fanui-interactive.css +960 -0
  45. package/dist/modules/fanui-interactive.min.css +138 -0
  46. package/dist/modules/fanui-layout.css +4399 -0
  47. package/dist/modules/fanui-layout.min.css +1172 -0
  48. package/dist/modules/fanui-marketing.css +1125 -0
  49. package/dist/modules/fanui-marketing.min.css +144 -0
  50. package/dist/modules/fanui-nav.css +458 -0
  51. package/dist/modules/fanui-nav.min.css +76 -0
  52. package/dist/modules/fanui-overlay.css +547 -0
  53. package/dist/modules/fanui-overlay.min.css +91 -0
  54. package/dist/modules/fanui-table.css +290 -0
  55. package/dist/modules/fanui-table.min.css +62 -0
  56. package/dist/modules/fanui-tabs.css +333 -0
  57. package/dist/modules/fanui-tabs.min.css +58 -0
  58. package/dist/modules/fanui-themes.css +2728 -0
  59. package/dist/modules/fanui-themes.min.css +40 -0
  60. package/dist/modules/fanui-tokens.css +587 -0
  61. package/dist/modules/fanui-tokens.min.css +3 -0
  62. package/dist/modules/fanui-utilities.css +6557 -0
  63. package/dist/modules/fanui-utilities.min.css +1762 -0
  64. package/dist/modules/sizes.json +103 -0
  65. package/docs/MIGRATION-v2.md +179 -0
  66. package/examples/01-script-tag.html +149 -0
  67. package/examples/02-react/README.md +39 -0
  68. package/examples/02-react/index.html +12 -0
  69. package/examples/02-react/package.json +20 -0
  70. package/examples/02-react/src/App.jsx +108 -0
  71. package/examples/02-react/src/main.jsx +13 -0
  72. package/examples/02-react/src/useFanUI.js +87 -0
  73. package/examples/02-react/vite.config.js +6 -0
  74. package/examples/03-vue3/README.md +67 -0
  75. package/examples/03-vue3/index.html +12 -0
  76. package/examples/03-vue3/package.json +19 -0
  77. package/examples/03-vue3/src/App.vue +93 -0
  78. package/examples/03-vue3/src/main.js +8 -0
  79. package/examples/03-vue3/src/useFanUI.js +85 -0
  80. package/examples/03-vue3/vite.config.js +6 -0
  81. package/examples/04-vue2-cdn.html +93 -0
  82. package/examples/README.md +34 -0
  83. package/package.json +127 -0
  84. package/src/_functions.scss +319 -0
  85. package/src/_mixins.scss +1202 -0
  86. package/src/_tokens.scss +180 -0
  87. package/src/_variables.scss +491 -0
  88. package/src/base/_animations.scss +210 -0
  89. package/src/base/_reset.scss +359 -0
  90. package/src/base/_rtl.scss +133 -0
  91. package/src/base/_typography.scss +353 -0
  92. package/src/components/_advanced.scss +763 -0
  93. package/src/components/_alert.scss +322 -0
  94. package/src/components/_badge.scss +279 -0
  95. package/src/components/_blog.scss +693 -0
  96. package/src/components/_button.scss +351 -0
  97. package/src/components/_capabilities.scss +463 -0
  98. package/src/components/_card.scss +281 -0
  99. package/src/components/_choice.scss +444 -0
  100. package/src/components/_dashboard.scss +950 -0
  101. package/src/components/_data.scss +618 -0
  102. package/src/components/_feedback.scss +403 -0
  103. package/src/components/_form.scss +408 -0
  104. package/src/components/_glass.scss +374 -0
  105. package/src/components/_input-plus.scss +730 -0
  106. package/src/components/_interactive.scss +885 -0
  107. package/src/components/_marketing.scss +982 -0
  108. package/src/components/_nav.scss +480 -0
  109. package/src/components/_overlay.scss +517 -0
  110. package/src/components/_table.scss +276 -0
  111. package/src/components/_tabs.scss +338 -0
  112. package/src/fanui.d.ts +353 -0
  113. package/src/fanui.js +4782 -0
  114. package/src/fanui.scss +79 -0
  115. package/src/glass/_switches.scss +36 -0
  116. package/src/glass/_tokens.scss +259 -0
  117. package/src/layout/_container.scss +111 -0
  118. package/src/layout/_flex.scss +164 -0
  119. package/src/layout/_grid.scss +180 -0
  120. package/src/themes/_accents.scss +201 -0
  121. package/src/themes/_palettes.scss +180 -0
  122. package/src/utilities/_borders.scss +104 -0
  123. package/src/utilities/_display.scss +145 -0
  124. package/src/utilities/_effects.scss +210 -0
  125. package/src/utilities/_sizing.scss +123 -0
  126. package/src/utilities/_spacing.scss +118 -0
  127. package/src/utilities/_texture.scss +323 -0
@@ -0,0 +1,91 @@
1
+ .fanui-modal{position:fixed;inset:0;z-index:var(--fanui-z-modal,1060);display:flex;align-items:center;justify-content:center;padding:var(--fanui-space-4);opacity:0;visibility:hidden;transition:opacity 200ms cubic-bezier(0.4,0,0.2,1) 0s,visibility 200ms cubic-bezier(0.4,0,0.2,1) 0s;overflow-y:auto;-webkit-overflow-scrolling:touch}
2
+ .fanui-modal.is-open,.fanui-modal.is-active{opacity:1;visibility:visible}
3
+ .fanui-modal.is-open>.fanui-modal__dialog,.fanui-modal.is-active>.fanui-modal__dialog{transform:translateY(0) scale(1)}
4
+ .fanui-modal__backdrop{position:fixed;top:0;right:0;bottom:0;left:0;background-color:var(--fanui-backdrop-bg,rgba(15,23,42,0.55));backdrop-filter:blur(var(--fanui-backdrop-blur,2px));-webkit-backdrop-filter:blur(var(--fanui-backdrop-blur,2px));z-index:var(--fanui-z-backdrop,1040);z-index:0}
5
+ .fanui-modal__dialog{position:relative;z-index:1;display:flex;flex-direction:column;width:100%;max-width:var(--fanui-modal-width,520px);max-height:calc(100vh - var(--fanui-space-8));margin:auto;background-color:var(--fanui-color-surface);border:1px solid var(--fanui-color-border);border-radius:var(--fanui-radius-xl);box-shadow:var(--fanui-shadow-2xl);box-sizing:border-box;transform:translateY(12px) scale(0.98);transition:transform 300ms cubic-bezier(0.34,1.56,0.64,1) 0s;overflow:hidden}
6
+ .fanui-modal__header{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--fanui-space-4);padding:var(--fanui-space-5) var(--fanui-space-5) var(--fanui-space-4);flex:0 0 auto}
7
+ .fanui-modal__title{margin:0;font-size:var(--fanui-font-size-lg);font-weight:600;line-height:1.4;color:var(--fanui-color-text-strong)}
8
+ .fanui-modal__desc{margin:4px 0 0;font-size:var(--fanui-font-size-sm);color:var(--fanui-color-text-muted)}
9
+ .fanui-modal__close{flex:0 0 auto;display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;margin:-4px -6px 0 0;padding:0;font-size:16px;line-height:1;color:var(--fanui-color-text-subtle);background:none;border:0;border-radius:var(--fanui-radius-base);cursor:pointer;transition:color 150ms cubic-bezier(0.4,0,0.2,1) 0s,background-color 150ms cubic-bezier(0.4,0,0.2,1) 0s}
10
+ .fanui-modal__close:hover{color:var(--fanui-color-text);background-color:var(--fanui-color-hover)}
11
+ .fanui-modal__close:focus-visible{outline:0;box-shadow:0 0 0 var(--fanui-focus-ring-offset,1px) var(--fanui-color-surface,#fff),0 0 0 calc(var(--fanui-focus-ring-offset,1px) + var(--fanui-focus-ring-width,3px)) var(--fanui-focus-ring-color,rgba(14,116,144,0.3))}@media (forced-colors:active){.fanui-modal__close:focus-visible{outline:2px solid transparent;outline-offset:2px}}
12
+ .fanui-modal__body{flex:1 1 auto;padding:0 var(--fanui-space-5) var(--fanui-space-5);overflow-y:auto;min-height:0;font-size:var(--fanui-font-size-base);line-height:var(--fanui-line-height-relaxed);color:var(--fanui-color-text);scrollbar-width:thin;scrollbar-color:rgba(100,116,139,0.45) transparent}
13
+ .fanui-modal__body::-webkit-scrollbar{width:8px;height:8px}
14
+ .fanui-modal__body::-webkit-scrollbar-track{background:transparent}
15
+ .fanui-modal__body::-webkit-scrollbar-thumb{background:rgba(100,116,139,0.45);border-radius:9999px}
16
+ .fanui-modal__body::-webkit-scrollbar-thumb:hover{background:rgba(100,116,139,0.7)}
17
+ .fanui-modal__footer{display:flex;align-items:center;justify-content:flex-end;gap:var(--fanui-space-3);padding:var(--fanui-space-4) var(--fanui-space-5);background-color:var(--fanui-color-surface-sunken);border-top:1px solid var(--fanui-color-border);flex:0 0 auto}
18
+ .fanui-modal__footer--start{justify-content:flex-start}
19
+ .fanui-modal__footer--between{justify-content:space-between}
20
+ .fanui-modal__header--bordered{padding-bottom:var(--fanui-space-4);border-bottom:1px solid var(--fanui-color-border)}
21
+ .fanui-modal--sm>.fanui-modal__dialog{--fanui-modal-width:380px}
22
+ .fanui-modal--md>.fanui-modal__dialog{--fanui-modal-width:520px}
23
+ .fanui-modal--lg>.fanui-modal__dialog{--fanui-modal-width:720px}
24
+ .fanui-modal--xl>.fanui-modal__dialog{--fanui-modal-width:960px}
25
+ .fanui-modal--full>.fanui-modal__dialog{--fanui-modal-width:100%;max-height:100vh;height:100%;border-radius:0;border:0}
26
+ .fanui-modal--top{align-items:flex-start;padding-top:var(--fanui-space-16)}
27
+ .fanui-modal--bottom{align-items:flex-end}
28
+ .fanui-modal--plain>.fanui-modal__dialog{border:0;box-shadow:var(--fanui-shadow-2xl)}
29
+ .fanui-modal--scrollable>.fanui-modal__dialog{overflow:hidden}
30
+ .fanui-modal-open{overflow:hidden}
31
+ .fanui-drawer{position:fixed;inset:0;z-index:var(--fanui-z-offcanvas,1050);visibility:hidden;transition:visibility 200ms cubic-bezier(0.4,0,0.2,1) 0s}
32
+ .fanui-drawer.is-open,.fanui-drawer.is-active{visibility:visible}
33
+ .fanui-drawer__backdrop{position:fixed;top:0;right:0;bottom:0;left:0;background-color:var(--fanui-backdrop-bg,rgba(15,23,42,0.55));backdrop-filter:blur(var(--fanui-backdrop-blur,2px));-webkit-backdrop-filter:blur(var(--fanui-backdrop-blur,2px));z-index:var(--fanui-z-backdrop,1040);opacity:0;transition:opacity 200ms cubic-bezier(0.4,0,0.2,1) 0s}
34
+ .fanui-drawer.is-open>.fanui-drawer__backdrop{opacity:1}
35
+ .fanui-drawer__panel{position:absolute;top:0;bottom:0;display:flex;flex-direction:column;width:var(--fanui-drawer-width,360px);max-width:92vw;background-color:var(--fanui-color-surface);box-shadow:var(--fanui-shadow-2xl);box-sizing:border-box;transition:transform 300ms cubic-bezier(0,0,0.2,1) 0s;z-index:1}
36
+ .fanui-drawer__header{display:flex;align-items:center;justify-content:space-between;gap:var(--fanui-space-3);padding:var(--fanui-space-4) var(--fanui-space-5);border-bottom:1px solid var(--fanui-color-border);flex:0 0 auto}
37
+ .fanui-drawer__title{margin:0;font-size:var(--fanui-font-size-md);font-weight:600;color:var(--fanui-color-text-strong)}
38
+ .fanui-drawer__body{flex:1 1 auto;padding:var(--fanui-space-5);overflow-y:auto;min-height:0;scrollbar-width:thin;scrollbar-color:rgba(100,116,139,0.45) transparent}
39
+ .fanui-drawer__body::-webkit-scrollbar{width:8px;height:8px}
40
+ .fanui-drawer__body::-webkit-scrollbar-track{background:transparent}
41
+ .fanui-drawer__body::-webkit-scrollbar-thumb{background:rgba(100,116,139,0.45);border-radius:9999px}
42
+ .fanui-drawer__body::-webkit-scrollbar-thumb:hover{background:rgba(100,116,139,0.7)}
43
+ .fanui-drawer__footer{display:flex;align-items:center;justify-content:flex-end;gap:var(--fanui-space-3);padding:var(--fanui-space-4) var(--fanui-space-5);border-top:1px solid var(--fanui-color-border);flex:0 0 auto}
44
+ .fanui-drawer--start .fanui-drawer__panel{left:0;right:auto;transform:translateX(-100%)}
45
+ .fanui-drawer--end .fanui-drawer__panel{right:0;left:auto;transform:translateX(100%)}
46
+ .fanui-drawer--top .fanui-drawer__panel{left:0;right:0;top:0;bottom:auto;width:100%;max-width:none;height:var(--fanui-drawer-height,320px);transform:translateY(-100%);border-radius:0 0 var(--fanui-radius-xl) var(--fanui-radius-xl)}
47
+ .fanui-drawer--bottom .fanui-drawer__panel{left:0;right:0;bottom:0;top:auto;width:100%;max-width:none;height:var(--fanui-drawer-height,auto);max-height:88vh;transform:translateY(100%);border-radius:var(--fanui-radius-xl) var(--fanui-radius-xl) 0 0}
48
+ .fanui-drawer.is-open>.fanui-drawer__panel{transform:translate(0,0)}
49
+ .fanui-drawer--sm>.fanui-drawer__panel{--fanui-drawer-width:280px}
50
+ .fanui-drawer--lg>.fanui-drawer__panel{--fanui-drawer-width:480px}
51
+ .fanui-drawer--xl>.fanui-drawer__panel{--fanui-drawer-width:640px}
52
+ .fanui-drawer--full>.fanui-drawer__panel{--fanui-drawer-width:100%;max-width:none}
53
+ .fanui-drawer__grabber{width:36px;height:4px;margin:var(--fanui-space-2) auto 0;border-radius:9999px;background-color:var(--fanui-color-border-strong);flex:0 0 auto}
54
+ .fanui-dropdown{position:relative;display:inline-flex}
55
+ .fanui-dropdown__menu{position:absolute;top:calc(100% + 6px);left:0;z-index:var(--fanui-z-dropdown,1000);min-width:var(--fanui-dropdown-width,180px);max-width:320px;padding:6px;background-color:var(--fanui-color-surface);border:1px solid var(--fanui-color-border);border-radius:var(--fanui-radius-md);box-shadow:var(--fanui-shadow-lg);box-sizing:border-box;opacity:0;visibility:hidden;transform:translateY(-4px) scale(0.98);transform-origin:top left;transition:opacity 150ms cubic-bezier(0,0,0.2,1) 0s,visibility 150ms cubic-bezier(0,0,0.2,1) 0s,transform 150ms cubic-bezier(0,0,0.2,1) 0s}
56
+ .fanui-dropdown__menu.is-open,.fanui-dropdown__menu.is-active{opacity:1;visibility:visible;transform:translateY(0) scale(1)}
57
+ .fanui-dropdown__menu--end{left:auto;right:0;transform-origin:top right}
58
+ .fanui-dropdown__menu--start{left:0;right:auto}
59
+ .fanui-dropdown__menu--up{top:auto;bottom:calc(100% + 6px);transform-origin:bottom left;transform:translateY(4px) scale(0.98)}
60
+ .fanui-dropdown__menu--up.fanui-dropdown__menu--end{transform-origin:bottom right}
61
+ .fanui-dropdown__menu--flush{padding:0}
62
+ .fanui-dropdown.is-open>.fanui-dropdown__trigger,.fanui-dropdown__trigger[aria-expanded=true]{color:var(--fanui-color-text-strong)}
63
+ .fanui-tooltip{position:relative;display:inline-flex}
64
+ .fanui-tooltip__bubble{position:absolute;z-index:var(--fanui-z-tooltip,1080);max-width:260px;padding:6px 10px;font-size:var(--fanui-font-size-xs);line-height:1.5;white-space:normal;text-align:center;color:var(--fanui-color-surface);background-color:var(--fanui-color-text-strong);border-radius:var(--fanui-radius-base);box-shadow:var(--fanui-shadow-md);opacity:0;visibility:hidden;pointer-events:none;transition:opacity 150ms cubic-bezier(0.4,0,0.2,1) 0s,visibility 150ms cubic-bezier(0.4,0,0.2,1) 0s,transform 150ms cubic-bezier(0.4,0,0.2,1) 0s}
65
+ .fanui-tooltip__bubble::after{content:"";position:absolute;width:6px;height:6px;background-color:inherit;transform:rotate(45deg)}
66
+ .fanui-tooltip__bubble{bottom:calc(100% + 8px);left:50%;transform:translateX(-50%) translateY(4px)}
67
+ .fanui-tooltip__bubble::after{top:100%;left:50%;margin:-3px 0 0 -3px}
68
+ .fanui-tooltip:hover>.fanui-tooltip__bubble,.fanui-tooltip:focus-within>.fanui-tooltip__bubble,.fanui-tooltip>.fanui-tooltip__bubble.is-open{opacity:1;visibility:visible}
69
+ .fanui-tooltip:hover>.fanui-tooltip__bubble{transform:translateX(-50%) translateY(0)}
70
+ .fanui-tooltip--bottom:hover>.fanui-tooltip__bubble,.fanui-tooltip--bottom:focus-within>.fanui-tooltip__bubble{transform:translateX(-50%) translateY(0)}
71
+ .fanui-tooltip--right:hover>.fanui-tooltip__bubble,.fanui-tooltip--right:focus-within>.fanui-tooltip__bubble,.fanui-tooltip--left:hover>.fanui-tooltip__bubble,.fanui-tooltip--left:focus-within>.fanui-tooltip__bubble{transform:translateY(-50%) translateX(0)}
72
+ .fanui-tooltip--bottom>.fanui-tooltip__bubble{bottom:auto;top:calc(100% + 8px);transform:translateX(-50%) translateY(-4px)}
73
+ .fanui-tooltip--bottom>.fanui-tooltip__bubble::after{top:auto;bottom:100%;margin:0 0 -3px -3px}
74
+ .fanui-tooltip--right>.fanui-tooltip__bubble{bottom:auto;top:50%;left:calc(100% + 8px);transform:translateY(-50%) translateX(-4px)}
75
+ .fanui-tooltip--right>.fanui-tooltip__bubble::after{top:50%;left:0;margin:-3px 0 0 -3px}
76
+ .fanui-tooltip--left>.fanui-tooltip__bubble{bottom:auto;top:50%;left:auto;right:calc(100% + 8px);transform:translateY(-50%) translateX(4px)}
77
+ .fanui-tooltip--left>.fanui-tooltip__bubble::after{top:50%;left:100%;margin:-3px 0 0 -3px}
78
+ .fanui-tooltip--light>.fanui-tooltip__bubble{color:var(--fanui-color-text);background-color:var(--fanui-color-surface);border:1px solid var(--fanui-color-border-strong)}
79
+ .fanui-tooltip--primary>.fanui-tooltip__bubble{background-color:var(--fanui-primary);color:var(--fanui-primary-fg)}
80
+ .fanui-tooltip--danger>.fanui-tooltip__bubble{background-color:var(--fanui-danger);color:var(--fanui-danger-fg)}
81
+ .fanui-tooltip--success>.fanui-tooltip__bubble{background-color:var(--fanui-success);color:var(--fanui-success-fg)}
82
+ .fanui-popover{position:relative;display:inline-flex}
83
+ .fanui-popover__panel{position:absolute;top:calc(100% + 8px);left:0;z-index:var(--fanui-z-popover,1070);width:var(--fanui-popover-width,280px);background-color:var(--fanui-color-surface);border:1px solid var(--fanui-color-border);border-radius:var(--fanui-radius-md);box-shadow:var(--fanui-shadow-xl);opacity:0;visibility:hidden;transform:translateY(-4px);transition:opacity 150ms cubic-bezier(0,0,0.2,1) 0s,visibility 150ms cubic-bezier(0,0,0.2,1) 0s,transform 150ms cubic-bezier(0,0,0.2,1) 0s}
84
+ .fanui-popover__panel.is-open,.fanui-popover__panel.is-active{opacity:1;visibility:visible;transform:translateY(0)}
85
+ .fanui-popover__panel--end{left:auto;right:0}
86
+ .fanui-popover__panel--center{left:50%;transform:translateX(-50%) translateY(-4px)}
87
+ .fanui-popover__panel--center.is-open{transform:translateX(-50%) translateY(0)}
88
+ .fanui-popover__panel--wide{--fanui-popover-width:420px}
89
+ .fanui-popover__header{padding:var(--fanui-space-3) var(--fanui-space-4);font-size:var(--fanui-font-size-base);font-weight:600;color:var(--fanui-color-text-strong);border-bottom:1px solid var(--fanui-color-border-subtle)}
90
+ .fanui-popover__body{padding:var(--fanui-space-4);font-size:var(--fanui-font-size-sm);line-height:1.6;color:var(--fanui-color-text-muted)}
91
+ .fanui-popover__footer{padding:var(--fanui-space-3) var(--fanui-space-4);border-top:1px solid var(--fanui-color-border-subtle);display:flex;justify-content:flex-end;gap:var(--fanui-space-2)}
@@ -0,0 +1,290 @@
1
+ /* fanUI v2.1.0 · module: table(独立产物,自带令牌) */
2
+ .fanui-table-wrap {
3
+ position: relative;
4
+ width: 100%;
5
+ overflow-x: auto;
6
+ -webkit-overflow-scrolling: touch;
7
+ border: 1px solid var(--fanui-color-border);
8
+ border-radius: var(--fanui-radius-lg);
9
+ background-color: var(--fanui-color-surface);
10
+ scrollbar-width: thin;
11
+ scrollbar-color: rgba(100, 116, 139, 0.45) transparent;
12
+ }
13
+ .fanui-table-wrap::-webkit-scrollbar {
14
+ width: 10px;
15
+ height: 10px;
16
+ }
17
+ .fanui-table-wrap::-webkit-scrollbar-track {
18
+ background: transparent;
19
+ }
20
+ .fanui-table-wrap::-webkit-scrollbar-thumb {
21
+ background: rgba(100, 116, 139, 0.45);
22
+ border-radius: 9999px;
23
+ }
24
+ .fanui-table-wrap::-webkit-scrollbar-thumb:hover {
25
+ background: rgba(100, 116, 139, 0.7);
26
+ }
27
+ .fanui-table-wrap--plain {
28
+ border: 0;
29
+ border-radius: 0;
30
+ background: transparent;
31
+ }
32
+ .fanui-table-wrap--flush {
33
+ border-radius: 0;
34
+ }
35
+
36
+ .fanui-table {
37
+ --fanui-table-bg: transparent;
38
+ --fanui-table-striped-bg: var(--fanui-color-surface-sunken);
39
+ --fanui-table-hover-bg: var(--fanui-color-hover);
40
+ --fanui-table-border-color: var(--fanui-color-border);
41
+ --fanui-table-caption-color: var(--fanui-color-text-muted);
42
+ --fanui-table-head-bg: var(--fanui-color-surface-sunken);
43
+ --fanui-table-cell-py: 10px;
44
+ --fanui-table-cell-px: 14px;
45
+ width: 100%;
46
+ margin-bottom: 0;
47
+ color: var(--fanui-color-text);
48
+ font-size: var(--fanui-font-size-base);
49
+ line-height: 1.5;
50
+ vertical-align: top;
51
+ border-collapse: separate;
52
+ border-spacing: 0;
53
+ background-color: var(--fanui-table-bg);
54
+ }
55
+ .fanui-table > thead {
56
+ background-color: var(--fanui-table-head-bg);
57
+ }
58
+ .fanui-table > thead th {
59
+ font-weight: 600;
60
+ color: var(--fanui-color-text-strong);
61
+ white-space: nowrap;
62
+ text-align: start;
63
+ border-bottom: 1px solid var(--fanui-table-border-color);
64
+ }
65
+ .fanui-table th,
66
+ .fanui-table td {
67
+ padding: var(--fanui-table-cell-py) var(--fanui-table-cell-px);
68
+ border-bottom: 1px solid var(--fanui-table-border-color);
69
+ box-sizing: border-box;
70
+ }
71
+ .fanui-table > tbody tr:last-child > td {
72
+ border-bottom: 0;
73
+ }
74
+ .fanui-table caption {
75
+ padding: var(--fanui-space-3) var(--fanui-table-cell-px);
76
+ font-size: var(--fanui-font-size-sm);
77
+ color: var(--fanui-table-caption-color);
78
+ text-align: start;
79
+ caption-side: bottom;
80
+ }
81
+ .fanui-table a {
82
+ color: var(--fanui-primary);
83
+ }
84
+ .fanui-table .fanui-btn {
85
+ vertical-align: middle;
86
+ }
87
+
88
+ .fanui-table--bordered > thead th,
89
+ .fanui-table--bordered > tbody td,
90
+ .fanui-table--bordered > tfoot td {
91
+ border: 1px solid var(--fanui-table-border-color);
92
+ }
93
+ .fanui-table--bordered > thead th {
94
+ border-bottom-width: 1px;
95
+ }
96
+
97
+ .fanui-table--borderless {
98
+ --fanui-table-border-color: transparent;
99
+ }
100
+ .fanui-table--borderless > thead th {
101
+ border-bottom-width: 0;
102
+ }
103
+
104
+ .fanui-table--striped > tbody > tr:nth-of-type(odd) > td {
105
+ background-color: var(--fanui-table-striped-bg);
106
+ }
107
+
108
+ .fanui-table--hover > tbody > tr {
109
+ transition: background-color 150ms cubic-bezier(0.4, 0, 0.2, 1) 0s;
110
+ }
111
+ .fanui-table--hover > tbody > tr:hover > td, .fanui-table--hover > tbody > tr:hover > th {
112
+ background-color: var(--fanui-table-hover-bg);
113
+ }
114
+
115
+ .fanui-table--compact {
116
+ --fanui-table-cell-py: 6px;
117
+ --fanui-table-cell-px: 10px;
118
+ font-size: var(--fanui-font-size-sm);
119
+ }
120
+
121
+ .fanui-table--roomy {
122
+ --fanui-table-cell-py: 16px;
123
+ --fanui-table-cell-px: 20px;
124
+ font-size: var(--fanui-font-size-md);
125
+ }
126
+
127
+ .fanui-table--fixed {
128
+ table-layout: fixed;
129
+ word-break: break-word;
130
+ }
131
+
132
+ .fanui-table--align-middle th, .fanui-table--align-middle td {
133
+ vertical-align: middle;
134
+ }
135
+
136
+ .fanui-table--align-top th, .fanui-table--align-top td {
137
+ vertical-align: top;
138
+ }
139
+
140
+ .fanui-table--align-center th, .fanui-table--align-center td {
141
+ text-align: center;
142
+ }
143
+ .fanui-table--align-center th:first-child, .fanui-table--align-center td:first-child {
144
+ text-align: start;
145
+ }
146
+
147
+ .fanui-table--sticky-head > thead th {
148
+ position: sticky;
149
+ top: 0;
150
+ z-index: 2;
151
+ background-color: var(--fanui-table-head-bg);
152
+ box-shadow: inset 0 -1px 0 var(--fanui-table-border-color);
153
+ }
154
+
155
+ .fanui-table--sticky-col > thead th:first-child,
156
+ .fanui-table--sticky-col > tbody td:first-child {
157
+ position: sticky;
158
+ left: 0;
159
+ z-index: 3;
160
+ background-color: var(--fanui-color-surface);
161
+ box-shadow: inset -1px 0 0 var(--fanui-table-border-color);
162
+ }
163
+ .fanui-table--sticky-col > thead th:first-child {
164
+ z-index: 4;
165
+ background-color: var(--fanui-table-head-bg);
166
+ }
167
+
168
+ .fanui-table--primary {
169
+ --fanui-table-head-bg: rgba(14, 116, 144, 0.1);
170
+ }
171
+ .fanui-table--primary > thead th {
172
+ color: rgb(4.2823529412%, 35.4823529412%, 44.0470588235%);
173
+ }
174
+ [data-fanui-theme=dark] .fanui-table--primary > thead th {
175
+ color: var(--fanui-primary-ink, rgb(35.7333333333%, 62.9333333333%, 70.4%));
176
+ }
177
+
178
+ .fanui-table--accent {
179
+ --fanui-table-head-bg: rgba(124, 58, 237, 0.1);
180
+ }
181
+ .fanui-table--accent > thead th {
182
+ color: rgb(37.9294117647%, 17.7411764706%, 72.4941176471%);
183
+ }
184
+ [data-fanui-theme=dark] .fanui-table--accent > thead th {
185
+ color: var(--fanui-accent-ink, rgb(65.0666666667%, 47.4666666667%, 95.2%));
186
+ }
187
+
188
+ .fanui-table--success {
189
+ --fanui-table-head-bg: rgba(4, 120, 87, 0.1);
190
+ }
191
+ .fanui-table--success > thead th {
192
+ color: rgb(1.2235294118%, 36.7058823529%, 26.6117647059%);
193
+ }
194
+ [data-fanui-theme=dark] .fanui-table--success > thead th {
195
+ color: var(--fanui-success-ink, rgb(33.0666666667%, 64%, 55.2%));
196
+ }
197
+
198
+ .fanui-table--warning {
199
+ --fanui-table-head-bg: rgba(180, 83, 9, 0.1);
200
+ }
201
+ .fanui-table--warning > thead th {
202
+ color: rgb(55.0588235294%, 25.3882352941%, 2.7529411765%);
203
+ }
204
+ [data-fanui-theme=dark] .fanui-table--warning > thead th {
205
+ color: var(--fanui-warning-ink, rgb(80%, 54.1333333333%, 34.4%));
206
+ }
207
+
208
+ .fanui-table--danger {
209
+ --fanui-table-head-bg: rgba(185, 28, 28, 0.1);
210
+ }
211
+ .fanui-table--danger > thead th {
212
+ color: rgb(56.5882352941%, 8.5647058824%, 8.5647058824%);
213
+ }
214
+ [data-fanui-theme=dark] .fanui-table--danger > thead th {
215
+ color: var(--fanui-danger-ink, rgb(81.3333333333%, 39.4666666667%, 39.4666666667%));
216
+ }
217
+
218
+ .fanui-table--info {
219
+ --fanui-table-head-bg: rgba(3, 105, 161, 0.1);
220
+ }
221
+ .fanui-table--info > thead th {
222
+ color: rgb(0.9176470588%, 32.1176470588%, 49.2470588235%);
223
+ }
224
+ [data-fanui-theme=dark] .fanui-table--info > thead th {
225
+ color: var(--fanui-info-ink, rgb(32.8%, 60%, 74.9333333333%));
226
+ }
227
+
228
+ .fanui-table--selected-row,
229
+ .fanui-table > tbody > tr.is-selected > td {
230
+ background-color: var(--fanui-primary-soft) !important;
231
+ }
232
+
233
+ .fanui-table > tbody > tr.is-disabled {
234
+ opacity: 0.55;
235
+ }
236
+ .fanui-table > tbody > tr.is-danger > td {
237
+ background-color: rgba(185, 28, 28, 0.07);
238
+ }
239
+ .fanui-table > tbody > tr.is-success > td {
240
+ background-color: rgba(4, 120, 87, 0.07);
241
+ }
242
+ .fanui-table > tbody > tr.is-warning > td {
243
+ background-color: rgba(180, 83, 9, 0.09);
244
+ }
245
+
246
+ .fanui-table__actions {
247
+ display: flex;
248
+ align-items: center;
249
+ gap: var(--fanui-space-2);
250
+ white-space: nowrap;
251
+ }
252
+
253
+ .fanui-table__num {
254
+ text-align: end;
255
+ font-variant-numeric: tabular-nums;
256
+ }
257
+
258
+ .fanui-table__checkbox {
259
+ width: 1%;
260
+ white-space: nowrap;
261
+ padding-inline-end: 0;
262
+ }
263
+
264
+ .fanui-table__empty {
265
+ padding: var(--fanui-space-12) var(--fanui-space-4);
266
+ text-align: center;
267
+ color: var(--fanui-color-text-muted);
268
+ font-size: var(--fanui-font-size-base);
269
+ }
270
+ .fanui-table__empty-icon {
271
+ display: block;
272
+ margin: 0 auto var(--fanui-space-3);
273
+ font-size: 32px;
274
+ opacity: 0.5;
275
+ }
276
+
277
+ .fanui-table-toolbar {
278
+ display: flex;
279
+ align-items: center;
280
+ justify-content: space-between;
281
+ gap: var(--fanui-space-4);
282
+ padding: var(--fanui-space-3) var(--fanui-space-4);
283
+ border-top: 1px solid var(--fanui-color-border);
284
+ background-color: var(--fanui-color-surface);
285
+ flex-wrap: wrap;
286
+ }
287
+ .fanui-table-toolbar__info {
288
+ font-size: var(--fanui-font-size-sm);
289
+ color: var(--fanui-color-text-muted);
290
+ }
@@ -0,0 +1,62 @@
1
+ .fanui-table-wrap{position:relative;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;border:1px solid var(--fanui-color-border);border-radius:var(--fanui-radius-lg);background-color:var(--fanui-color-surface);scrollbar-width:thin;scrollbar-color:rgba(100,116,139,0.45) transparent}
2
+ .fanui-table-wrap::-webkit-scrollbar{width:10px;height:10px}
3
+ .fanui-table-wrap::-webkit-scrollbar-track{background:transparent}
4
+ .fanui-table-wrap::-webkit-scrollbar-thumb{background:rgba(100,116,139,0.45);border-radius:9999px}
5
+ .fanui-table-wrap::-webkit-scrollbar-thumb:hover{background:rgba(100,116,139,0.7)}
6
+ .fanui-table-wrap--plain{border:0;border-radius:0;background:transparent}
7
+ .fanui-table-wrap--flush{border-radius:0}
8
+ .fanui-table{--fanui-table-bg:transparent;--fanui-table-striped-bg:var(--fanui-color-surface-sunken);--fanui-table-hover-bg:var(--fanui-color-hover);--fanui-table-border-color:var(--fanui-color-border);--fanui-table-caption-color:var(--fanui-color-text-muted);--fanui-table-head-bg:var(--fanui-color-surface-sunken);--fanui-table-cell-py:10px;--fanui-table-cell-px:14px;width:100%;margin-bottom:0;color:var(--fanui-color-text);font-size:var(--fanui-font-size-base);line-height:1.5;vertical-align:top;border-collapse:separate;border-spacing:0;background-color:var(--fanui-table-bg)}
9
+ .fanui-table>thead{background-color:var(--fanui-table-head-bg)}
10
+ .fanui-table>thead th{font-weight:600;color:var(--fanui-color-text-strong);white-space:nowrap;text-align:start;border-bottom:1px solid var(--fanui-table-border-color)}
11
+ .fanui-table th,.fanui-table td{padding:var(--fanui-table-cell-py) var(--fanui-table-cell-px);border-bottom:1px solid var(--fanui-table-border-color);box-sizing:border-box}
12
+ .fanui-table>tbody tr:last-child>td{border-bottom:0}
13
+ .fanui-table caption{padding:var(--fanui-space-3) var(--fanui-table-cell-px);font-size:var(--fanui-font-size-sm);color:var(--fanui-table-caption-color);text-align:start;caption-side:bottom}
14
+ .fanui-table a{color:var(--fanui-primary)}
15
+ .fanui-table .fanui-btn{vertical-align:middle}
16
+ .fanui-table--bordered>thead th,.fanui-table--bordered>tbody td,.fanui-table--bordered>tfoot td{border:1px solid var(--fanui-table-border-color)}
17
+ .fanui-table--bordered>thead th{border-bottom-width:1px}
18
+ .fanui-table--borderless{--fanui-table-border-color:transparent}
19
+ .fanui-table--borderless>thead th{border-bottom-width:0}
20
+ .fanui-table--striped>tbody>tr:nth-of-type(odd)>td{background-color:var(--fanui-table-striped-bg)}
21
+ .fanui-table--hover>tbody>tr{transition:background-color 150ms cubic-bezier(0.4,0,0.2,1) 0s}
22
+ .fanui-table--hover>tbody>tr:hover>td,.fanui-table--hover>tbody>tr:hover>th{background-color:var(--fanui-table-hover-bg)}
23
+ .fanui-table--compact{--fanui-table-cell-py:6px;--fanui-table-cell-px:10px;font-size:var(--fanui-font-size-sm)}
24
+ .fanui-table--roomy{--fanui-table-cell-py:16px;--fanui-table-cell-px:20px;font-size:var(--fanui-font-size-md)}
25
+ .fanui-table--fixed{table-layout:fixed;word-break:break-word}
26
+ .fanui-table--align-middle th,.fanui-table--align-middle td{vertical-align:middle}
27
+ .fanui-table--align-top th,.fanui-table--align-top td{vertical-align:top}
28
+ .fanui-table--align-center th,.fanui-table--align-center td{text-align:center}
29
+ .fanui-table--align-center th:first-child,.fanui-table--align-center td:first-child{text-align:start}
30
+ .fanui-table--sticky-head>thead th{position:sticky;top:0;z-index:2;background-color:var(--fanui-table-head-bg);box-shadow:inset 0 -1px 0 var(--fanui-table-border-color)}
31
+ .fanui-table--sticky-col>thead th:first-child,.fanui-table--sticky-col>tbody td:first-child{position:sticky;left:0;z-index:3;background-color:var(--fanui-color-surface);box-shadow:inset -1px 0 0 var(--fanui-table-border-color)}
32
+ .fanui-table--sticky-col>thead th:first-child{z-index:4;background-color:var(--fanui-table-head-bg)}
33
+ .fanui-table--primary{--fanui-table-head-bg:rgba(14,116,144,0.1)}
34
+ .fanui-table--primary>thead th{color:rgb(4.2823529412%,35.4823529412%,44.0470588235%)}
35
+ [data-fanui-theme=dark] .fanui-table--primary>thead th{color:var(--fanui-primary-ink,rgb(35.7333333333%,62.9333333333%,70.4%))}
36
+ .fanui-table--accent{--fanui-table-head-bg:rgba(124,58,237,0.1)}
37
+ .fanui-table--accent>thead th{color:rgb(37.9294117647%,17.7411764706%,72.4941176471%)}
38
+ [data-fanui-theme=dark] .fanui-table--accent>thead th{color:var(--fanui-accent-ink,rgb(65.0666666667%,47.4666666667%,95.2%))}
39
+ .fanui-table--success{--fanui-table-head-bg:rgba(4,120,87,0.1)}
40
+ .fanui-table--success>thead th{color:rgb(1.2235294118%,36.7058823529%,26.6117647059%)}
41
+ [data-fanui-theme=dark] .fanui-table--success>thead th{color:var(--fanui-success-ink,rgb(33.0666666667%,64%,55.2%))}
42
+ .fanui-table--warning{--fanui-table-head-bg:rgba(180,83,9,0.1)}
43
+ .fanui-table--warning>thead th{color:rgb(55.0588235294%,25.3882352941%,2.7529411765%)}
44
+ [data-fanui-theme=dark] .fanui-table--warning>thead th{color:var(--fanui-warning-ink,rgb(80%,54.1333333333%,34.4%))}
45
+ .fanui-table--danger{--fanui-table-head-bg:rgba(185,28,28,0.1)}
46
+ .fanui-table--danger>thead th{color:rgb(56.5882352941%,8.5647058824%,8.5647058824%)}
47
+ [data-fanui-theme=dark] .fanui-table--danger>thead th{color:var(--fanui-danger-ink,rgb(81.3333333333%,39.4666666667%,39.4666666667%))}
48
+ .fanui-table--info{--fanui-table-head-bg:rgba(3,105,161,0.1)}
49
+ .fanui-table--info>thead th{color:rgb(0.9176470588%,32.1176470588%,49.2470588235%)}
50
+ [data-fanui-theme=dark] .fanui-table--info>thead th{color:var(--fanui-info-ink,rgb(32.8%,60%,74.9333333333%))}
51
+ .fanui-table--selected-row,.fanui-table>tbody>tr.is-selected>td{background-color:var(--fanui-primary-soft) !important}
52
+ .fanui-table>tbody>tr.is-disabled{opacity:0.55}
53
+ .fanui-table>tbody>tr.is-danger>td{background-color:rgba(185,28,28,0.07)}
54
+ .fanui-table>tbody>tr.is-success>td{background-color:rgba(4,120,87,0.07)}
55
+ .fanui-table>tbody>tr.is-warning>td{background-color:rgba(180,83,9,0.09)}
56
+ .fanui-table__actions{display:flex;align-items:center;gap:var(--fanui-space-2);white-space:nowrap}
57
+ .fanui-table__num{text-align:end;font-variant-numeric:tabular-nums}
58
+ .fanui-table__checkbox{width:1%;white-space:nowrap;padding-inline-end:0}
59
+ .fanui-table__empty{padding:var(--fanui-space-12) var(--fanui-space-4);text-align:center;color:var(--fanui-color-text-muted);font-size:var(--fanui-font-size-base)}
60
+ .fanui-table__empty-icon{display:block;margin:0 auto var(--fanui-space-3);font-size:32px;opacity:0.5}
61
+ .fanui-table-toolbar{display:flex;align-items:center;justify-content:space-between;gap:var(--fanui-space-4);padding:var(--fanui-space-3) var(--fanui-space-4);border-top:1px solid var(--fanui-color-border);background-color:var(--fanui-color-surface);flex-wrap:wrap}
62
+ .fanui-table-toolbar__info{font-size:var(--fanui-font-size-sm);color:var(--fanui-color-text-muted)}