fantasia-ui 0.2.31 → 0.2.33

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/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Shuster
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.en.md CHANGED
@@ -222,6 +222,48 @@ import { FRow, FCol, FSpace } from 'fantasia-ui'
222
222
  </template>
223
223
  ```
224
224
 
225
+ ### Message and Notification
226
+
227
+ ```vue
228
+ <script setup lang="ts">
229
+ import { FMessage, FNotification } from 'fantasia-ui'
230
+
231
+ // Message
232
+ const showMessage = () => {
233
+ FMessage.success('Success!')
234
+ }
235
+
236
+ // Notification
237
+ const showNotification = () => {
238
+ FNotification({
239
+ title: 'System Notification',
240
+ message: 'You have a new message',
241
+ type: 'info'
242
+ })
243
+ }
244
+
245
+ // Use in async operations
246
+ const handleSubmit = async () => {
247
+ try {
248
+ await submitForm()
249
+ FMessage.success('Submitted successfully!')
250
+ } catch (error) {
251
+ FMessage.error('Failed to submit, please try again')
252
+ }
253
+ }
254
+ </script>
255
+
256
+ <template>
257
+ <div>
258
+ <FButton @click="showMessage">Show Message</FButton>
259
+ <FButton @click="showNotification">Show Notification</FButton>
260
+ <FButton @click="handleSubmit">Submit Form</FButton>
261
+ </div>
262
+ </template>
263
+ ```
264
+
265
+ > 💡 View complete FMessage and FNotification API documentation: [Usage Guide](./MESSAGE_USAGE.md)
266
+
225
267
  ## 🎨 Theme Customization
226
268
 
227
269
  The component library supports theme customization via CSS variables:
@@ -296,14 +338,18 @@ Or add to `src/env.d.ts`:
296
338
 
297
339
  ## 🔗 Links
298
340
 
299
- - [Changelog](./CHANGELOG.md)
341
+ - [Changelog (中文)](./CHANGELOG.zh-CN.md)
342
+ - [Changelog (English)](./CHANGELOG.md)
343
+ - [Type Support Documentation](./TYPE_SUPPORT.md)
300
344
  - [Optimization Report](./OPTIMIZATION.md)
301
- - [Issues](https://github.com/shuster/fantasia-ui/issues)
345
+ - [Build Issue Solutions](./BUILD_FIX.md)
302
346
  - [Contributing Guide](./CONTRIBUTING.md)
347
+ - [Publish Guide](./.github/PUBLISH_GUIDE.md)
348
+ - [Issues](https://github.com/ShusterLi/fantasia-ui/issues)
303
349
 
304
350
  ## 📄 License
305
351
 
306
- [MIT](./LICENSE) License © 2024 Shuster
352
+ [MIT](./LICENSE) License © 2026 Shuster
307
353
 
308
354
  ## 🤝 Contributing
309
355
 
package/README.md CHANGED
@@ -222,6 +222,48 @@ import { FRow, FCol, FSpace } from 'fantasia-ui'
222
222
  </template>
223
223
  ```
224
224
 
225
+ ### 消息提示和通知
226
+
227
+ ```vue
228
+ <script setup lang="ts">
229
+ import { FMessage, FNotification } from 'fantasia-ui'
230
+
231
+ // 消息提示
232
+ const showMessage = () => {
233
+ FMessage.success('操作成功!')
234
+ }
235
+
236
+ // 通知
237
+ const showNotification = () => {
238
+ FNotification({
239
+ title: '系统通知',
240
+ message: '您有一条新消息',
241
+ type: 'info'
242
+ })
243
+ }
244
+
245
+ // 在异步操作中使用
246
+ const handleSubmit = async () => {
247
+ try {
248
+ await submitForm()
249
+ FMessage.success('提交成功!')
250
+ } catch (error) {
251
+ FMessage.error('提交失败,请重试')
252
+ }
253
+ }
254
+ </script>
255
+
256
+ <template>
257
+ <div>
258
+ <FButton @click="showMessage">显示消息</FButton>
259
+ <FButton @click="showNotification">显示通知</FButton>
260
+ <FButton @click="handleSubmit">提交表单</FButton>
261
+ </div>
262
+ </template>
263
+ ```
264
+
265
+ > 💡 查看完整的 FMessage 和 FNotification API 文档:[使用指南](./MESSAGE_USAGE.md)
266
+
225
267
  ## 🎨 主题定制
226
268
 
227
269
  组件库支持 CSS 变量自定义主题:
@@ -298,12 +340,16 @@ const buttonProps: FButtonProps = {
298
340
 
299
341
  - [更新日志(中文)](./CHANGELOG.zh-CN.md)
300
342
  - [更新日志(English)](./CHANGELOG.md)
343
+ - [类型支持文档](./TYPE_SUPPORT.md)
301
344
  - [优化报告](./OPTIMIZATION.md)
302
- - [问题反馈](https://github.com/shuster/fantasia-ui/issues)
345
+ - [构建问题解决方案](./BUILD_FIX.md)
346
+ - [贡献指南](./CONTRIBUTING.md)
347
+ - [发布指南](./.github/PUBLISH_GUIDE.md)
348
+ - [问题反馈](https://github.com/ShusterLi/fantasia-ui/issues)
303
349
 
304
350
  ## 📄 开源协议
305
351
 
306
- [MIT](./LICENSE) License © 2024 Shuster
352
+ [MIT](./LICENSE) License © 2026 Shuster
307
353
 
308
354
  ## 🤝 贡献
309
355
 
@@ -5990,14 +5990,14 @@ to {
5990
5990
  .f-editor__textarea[data-v-6d590649]::placeholder {
5991
5991
  color: #475569;
5992
5992
  opacity: 0.7;
5993
- }.f-table[data-v-22daf8be] {
5993
+ }.f-table[data-v-01724962] {
5994
5994
  position: relative;
5995
5995
  border: 1px solid #e2e8f0;
5996
5996
  border-radius: 6px;
5997
5997
  overflow: hidden;
5998
5998
  min-height: 14rem;
5999
5999
  }
6000
- .f-table__loading[data-v-22daf8be] {
6000
+ .f-table__loading[data-v-01724962] {
6001
6001
  position: absolute;
6002
6002
  inset: 0;
6003
6003
  background: rgba(255, 255, 255, 0.7);
@@ -6009,12 +6009,13 @@ to {
6009
6009
  gap: 0.625rem;
6010
6010
  z-index: 10;
6011
6011
  }
6012
- .f-table__scroll[data-v-22daf8be] {
6012
+ .f-table__scroll[data-v-01724962] {
6013
+ position: relative;
6013
6014
  width: 100%;
6014
6015
  height: 100%;
6015
6016
  overflow: auto;
6016
6017
  }
6017
- .f-table__inner[data-v-22daf8be] {
6018
+ .f-table__inner[data-v-01724962] {
6018
6019
  width: 100%;
6019
6020
  border-collapse: collapse;
6020
6021
  font-size: 0.75rem;
@@ -6022,67 +6023,67 @@ to {
6022
6023
  table-layout: auto;
6023
6024
  min-width: 100%;
6024
6025
  }
6025
- .f-table__inner th[data-v-22daf8be],
6026
- .f-table__inner td[data-v-22daf8be] {
6026
+ .f-table__inner th[data-v-01724962],
6027
+ .f-table__inner td[data-v-01724962] {
6027
6028
  padding: 0.625rem;
6028
6029
  border-right: 1px solid #e2e8f0;
6029
6030
  }
6030
- .f-table__inner th[data-v-22daf8be]:last-child,
6031
- .f-table__inner td[data-v-22daf8be]:last-child {
6031
+ .f-table__inner th[data-v-01724962]:last-child,
6032
+ .f-table__inner td[data-v-01724962]:last-child {
6032
6033
  border-right: none;
6033
6034
  }
6034
- .f-table__col--index[data-v-22daf8be] {
6035
+ .f-table__col--index[data-v-01724962] {
6035
6036
  width: 3rem;
6036
6037
  }
6037
- .f-table__head[data-v-22daf8be] {
6038
+ .f-table__head[data-v-01724962] {
6038
6039
  position: sticky;
6039
6040
  top: 0;
6040
6041
  z-index: 2;
6041
6042
  background: #1e293b;
6042
6043
  color: #ffffff;
6043
6044
  }
6044
- .f-table__th[data-v-22daf8be] {
6045
+ .f-table__th[data-v-01724962] {
6045
6046
  font-weight: 700;
6046
6047
  text-align: center;
6047
6048
  }
6048
- .f-table__th--index[data-v-22daf8be] {
6049
+ .f-table__th--index[data-v-01724962] {
6049
6050
  background: #0f172a;
6050
6051
  width: 3rem;
6051
6052
  }
6052
- .f-table__th-inner[data-v-22daf8be] {
6053
+ .f-table__th-inner[data-v-01724962] {
6053
6054
  display: flex;
6054
6055
  flex-direction: column;
6055
6056
  align-items: center;
6056
6057
  gap: 0.25rem;
6057
6058
  }
6058
- .f-table__row[data-v-22daf8be] {
6059
+ .f-table__row[data-v-01724962] {
6059
6060
  border-bottom: 1px solid #e2e8f0;
6060
6061
  }
6061
- .f-table__row[data-v-22daf8be]:hover {
6062
+ .f-table__row[data-v-01724962]:hover {
6062
6063
  background: rgba(248, 250, 252, 0.7);
6063
6064
  }
6064
- .f-table__td[data-v-22daf8be] {
6065
+ .f-table__td[data-v-01724962] {
6065
6066
  text-align: center;
6066
6067
  font-size: 0.6875rem;
6067
6068
  overflow: hidden;
6068
6069
  text-overflow: ellipsis;
6069
6070
  white-space: nowrap;
6070
6071
  }
6071
- .f-table__td--muted[data-v-22daf8be] {
6072
+ .f-table__td--muted[data-v-01724962] {
6072
6073
  color: #94a3b8;
6073
6074
  text-decoration: line-through;
6074
6075
  opacity: 0.6;
6075
6076
  }
6076
- .f-table__td--index[data-v-22daf8be] {
6077
+ .f-table__td--index[data-v-01724962] {
6077
6078
  background: rgba(248, 250, 252, 0.5);
6078
6079
  font-weight: 800;
6079
6080
  color: #64748b;
6080
6081
  }
6081
- .f-table__spacer td[data-v-22daf8be] {
6082
+ .f-table__spacer td[data-v-01724962] {
6082
6083
  padding: 0;
6083
6084
  border: none;
6084
6085
  }
6085
- .f-table__empty[data-v-22daf8be] {
6086
+ .f-table__empty[data-v-01724962] {
6086
6087
  padding: 3rem 0;
6087
6088
  text-align: center;
6088
6089
  color: #94a3b8;
@@ -6178,50 +6179,50 @@ to {
6178
6179
  overflow: hidden;
6179
6180
  text-overflow: ellipsis;
6180
6181
  white-space: nowrap;
6181
- }.f-button-group[data-v-15cf49dc] {
6182
+ }.f-button-group[data-v-62561657] {
6182
6183
  display: inline-flex;
6183
6184
  vertical-align: middle;
6184
6185
  }
6185
- .f-button-group[data-v-15cf49dc]:last-child {
6186
+ .f-button-group[data-v-62561657]:last-child {
6186
6187
  margin-right: 0;
6187
6188
  }
6188
- .f-button-group[data-v-15cf49dc] > * {
6189
+ .f-button-group[data-v-62561657] > * {
6189
6190
  position: relative;
6190
6191
  display: inline-flex;
6191
6192
  }
6192
- .f-button-group[data-v-15cf49dc] > * .f-button {
6193
+ .f-button-group[data-v-62561657] > * .f-button {
6193
6194
  border-radius: 0;
6194
6195
  }
6195
- .f-button-group[data-v-15cf49dc] > *:not(:first-child) {
6196
+ .f-button-group[data-v-62561657] > *:not(:first-child) {
6196
6197
  margin-left: -1px;
6197
6198
  }
6198
- .f-button-group[data-v-15cf49dc] > *:first-child .f-button {
6199
+ .f-button-group[data-v-62561657] > *:first-child .f-button {
6199
6200
  border-top-left-radius: 4px;
6200
6201
  border-bottom-left-radius: 4px;
6201
6202
  }
6202
- .f-button-group[data-v-15cf49dc] > *:last-child .f-button {
6203
+ .f-button-group[data-v-62561657] > *:last-child .f-button {
6203
6204
  border-top-right-radius: 4px;
6204
6205
  border-bottom-right-radius: 4px;
6205
6206
  }
6206
- .f-button-group[data-v-15cf49dc] > *:hover {
6207
+ .f-button-group[data-v-62561657] > *:hover {
6207
6208
  z-index: 1;
6208
6209
  }
6209
- .f-button-group[data-v-15cf49dc] > * .is-active {
6210
+ .f-button-group[data-v-62561657] > * .is-active {
6210
6211
  z-index: 2;
6211
6212
  }
6212
- .f-button-group--vertical[data-v-15cf49dc] {
6213
+ .f-button-group--vertical[data-v-62561657] {
6213
6214
  flex-direction: column;
6214
6215
  margin-right: 0;
6215
6216
  margin-bottom: 12px;
6216
6217
  }
6217
- .f-button-group--vertical[data-v-15cf49dc] > *:not(:first-child) {
6218
+ .f-button-group--vertical[data-v-62561657] > *:not(:first-child) {
6218
6219
  margin-left: 0;
6219
6220
  margin-top: -1px;
6220
6221
  }
6221
- .f-button-group--vertical[data-v-15cf49dc] > *:first-child .f-button {
6222
+ .f-button-group--vertical[data-v-62561657] > *:first-child .f-button {
6222
6223
  border-radius: 4px 4px 0 0;
6223
6224
  }
6224
- .f-button-group--vertical[data-v-15cf49dc] > *:last-child .f-button {
6225
+ .f-button-group--vertical[data-v-62561657] > *:last-child .f-button {
6225
6226
  border-radius: 0 0 4px 4px;
6226
6227
  }:root {
6227
6228
  --f-collapse-border-color: #333338;
@@ -6822,7 +6823,7 @@ to {
6822
6823
  .f-input-number__stack-btn:disabled {
6823
6824
  opacity: 0.4;
6824
6825
  cursor: not-allowed;
6825
- }.f-result[data-v-c8f97d09] {
6826
+ }.f-result[data-v-1667a865] {
6826
6827
  display: flex;
6827
6828
  flex-direction: column;
6828
6829
  align-items: center;
@@ -6831,50 +6832,263 @@ to {
6831
6832
  padding: 48px 24px;
6832
6833
  --_color: var(--blue);
6833
6834
  }
6834
- .f-result--success[data-v-c8f97d09] {
6835
+ .f-result--success[data-v-1667a865] {
6835
6836
  --_color: var(--green);
6836
6837
  }
6837
- .f-result--error[data-v-c8f97d09] {
6838
+ .f-result--error[data-v-1667a865] {
6838
6839
  --_color: var(--red);
6839
6840
  }
6840
- .f-result--warning[data-v-c8f97d09] {
6841
+ .f-result--warning[data-v-1667a865] {
6841
6842
  --_color: var(--gold);
6842
6843
  }
6843
- .f-result--403[data-v-c8f97d09], .f-result--404[data-v-c8f97d09], .f-result--500[data-v-c8f97d09] {
6844
+ .f-result--403[data-v-1667a865], .f-result--404[data-v-1667a865], .f-result--500[data-v-1667a865] {
6844
6845
  --_color: var(--text-dim);
6845
6846
  }
6846
- .f-result__icon[data-v-c8f97d09] {
6847
+ .f-result__icon[data-v-1667a865] {
6847
6848
  display: flex;
6848
6849
  align-items: center;
6849
6850
  justify-content: center;
6850
6851
  margin-bottom: 24px;
6851
6852
  color: var(--_color);
6852
6853
  }
6853
- .f-result__code[data-v-c8f97d09] {
6854
+ .f-result__code[data-v-1667a865] {
6854
6855
  font-size: 56px;
6855
6856
  font-weight: 700;
6856
6857
  line-height: 1;
6857
6858
  letter-spacing: 2px;
6858
6859
  }
6859
- .f-result__title[data-v-c8f97d09] {
6860
+ .f-result__title[data-v-1667a865] {
6860
6861
  font-size: 20px;
6861
6862
  font-weight: 600;
6862
6863
  line-height: 1.4;
6863
6864
  color: var(--text);
6864
6865
  }
6865
- .f-result__subtitle[data-v-c8f97d09] {
6866
+ .f-result__subtitle[data-v-1667a865] {
6866
6867
  margin-top: 8px;
6867
6868
  font-size: 14px;
6868
6869
  line-height: 1.6;
6869
6870
  color: var(--text-muted);
6870
6871
  max-width: 480px;
6871
6872
  }
6872
- .f-result__extra[data-v-c8f97d09] {
6873
+ .f-result__extra[data-v-1667a865] {
6873
6874
  display: flex;
6874
6875
  gap: 12px;
6875
6876
  margin-top: 24px;
6876
6877
  }
6877
- .f-result__content[data-v-c8f97d09] {
6878
+ .f-result__content[data-v-1667a865] {
6878
6879
  margin-top: 24px;
6879
6880
  width: 100%;
6881
+ }.f-message[data-v-3aba692f] {
6882
+ --f-bg: #1f1f1f;
6883
+ --f-border: rgba(255, 255, 255, 0.08);
6884
+ --f-text: #e8e4f0;
6885
+ --f-text-muted: #7c7a8a;
6886
+ --f-shadow: rgba(0, 0, 0, 0.35);
6887
+ --f-info: #60a5fa;
6888
+ --f-success: #34d399;
6889
+ --f-warning: #fb923c;
6890
+ --f-error: #f87171;
6891
+ position: fixed;
6892
+ left: 50%;
6893
+ transform: translateX(-50%);
6894
+ display: inline-flex;
6895
+ align-items: center;
6896
+ gap: 8px;
6897
+ max-width: min(480px, 100vw - 32px);
6898
+ padding: 10px 16px;
6899
+ border-radius: 4px;
6900
+ font-size: 14px;
6901
+ line-height: 1.5;
6902
+ color: var(--f-text);
6903
+ background: var(--f-bg);
6904
+ border: 1px solid var(--f-border);
6905
+ box-shadow: 0 2px 6px var(--f-shadow);
6906
+ z-index: 3000;
6907
+ pointer-events: auto;
6908
+ transition: top 0.3s cubic-bezier(0.34, 0.69, 0.1, 1);
6909
+ }
6910
+ .f-message__icon[data-v-3aba692f] {
6911
+ flex-shrink: 0;
6912
+ font-size: 16px;
6913
+ }
6914
+ .f-message__content[data-v-3aba692f] {
6915
+ flex: 1;
6916
+ word-break: break-word;
6917
+ }
6918
+ .f-message__close[data-v-3aba692f] {
6919
+ flex-shrink: 0;
6920
+ display: inline-flex;
6921
+ align-items: center;
6922
+ justify-content: center;
6923
+ padding: 0;
6924
+ border: none;
6925
+ background: transparent;
6926
+ color: var(--f-text-muted);
6927
+ cursor: pointer;
6928
+ transition: color 0.2s ease;
6929
+ }
6930
+ .f-message__close[data-v-3aba692f]:hover {
6931
+ color: var(--f-text);
6932
+ }
6933
+ .f-message--info .f-message__icon[data-v-3aba692f] {
6934
+ color: var(--f-info);
6935
+ }
6936
+ .f-message--success .f-message__icon[data-v-3aba692f] {
6937
+ color: var(--f-success);
6938
+ }
6939
+ .f-message--warning .f-message__icon[data-v-3aba692f] {
6940
+ color: var(--f-warning);
6941
+ }
6942
+ .f-message--error .f-message__icon[data-v-3aba692f] {
6943
+ color: var(--f-error);
6944
+ }
6945
+ :root.light .f-message[data-v-3aba692f] {
6946
+ --f-bg: #ffffff;
6947
+ --f-border: rgba(0, 0, 0, 0.08);
6948
+ --f-text: #1e293b;
6949
+ --f-text-muted: #94a3b8;
6950
+ --f-shadow: rgba(0, 0, 0, 0.12);
6951
+ --f-info: #2563eb;
6952
+ --f-success: #059669;
6953
+ --f-warning: #ea580c;
6954
+ --f-error: #dc2626;
6955
+ }
6956
+ .f-message-fade-enter-active[data-v-3aba692f] {
6957
+ transition: opacity 0.3s cubic-bezier(0.34, 1.56, 0.64, 1), transform 0.3s cubic-bezier(0.34, 1.56, 0.64, 1);
6958
+ }
6959
+ .f-message-fade-leave-active[data-v-3aba692f] {
6960
+ transition: opacity 0.2s ease-in, transform 0.2s ease-in;
6961
+ }
6962
+ .f-message-fade-enter-from[data-v-3aba692f],
6963
+ .f-message-fade-leave-to[data-v-3aba692f] {
6964
+ opacity: 0;
6965
+ transform: translate(-50%, -12px);
6966
+ }.f-notification[data-v-7600a501] {
6967
+ --f-bg: #000000;
6968
+ --f-border: rgba(255, 255, 255, 0.08);
6969
+ --f-text: #e8e4f0;
6970
+ --f-text-muted: #7c7a8a;
6971
+ --f-shadow: rgba(0, 0, 0, 0.35);
6972
+ --f-info: #60a5fa;
6973
+ --f-success: #34d399;
6974
+ --f-warning: #fb923c;
6975
+ --f-error: #f87171;
6976
+ position: fixed;
6977
+ display: flex;
6978
+ align-items: flex-start;
6979
+ gap: 12px;
6980
+ width: 340px;
6981
+ max-width: calc(100vw - 32px);
6982
+ padding: 16px;
6983
+ border-radius: 4px;
6984
+ color: var(--f-text);
6985
+ background: var(--f-bg);
6986
+ border: 1px solid var(--f-border);
6987
+ box-shadow: 0 3px 8px var(--f-shadow);
6988
+ z-index: 3000;
6989
+ pointer-events: auto;
6990
+ cursor: default;
6991
+ transition: top 0.3s cubic-bezier(0.34, 0.69, 0.1, 1), bottom 0.3s cubic-bezier(0.34, 0.69, 0.1, 1);
6992
+ }
6993
+ .f-notification__icon[data-v-7600a501] {
6994
+ flex-shrink: 0;
6995
+ margin-top: 1px;
6996
+ font-size: 18px;
6997
+ }
6998
+ .f-notification__body[data-v-7600a501] {
6999
+ flex: 1;
7000
+ min-width: 0;
7001
+ }
7002
+ .f-notification__title[data-v-7600a501] {
7003
+ margin: 0 0 4px;
7004
+ font-size: 14px;
7005
+ font-weight: 600;
7006
+ line-height: 1.4;
7007
+ color: var(--f-text);
7008
+ }
7009
+ .f-notification__content[data-v-7600a501] {
7010
+ margin: 0;
7011
+ font-size: 13px;
7012
+ line-height: 1.5;
7013
+ color: var(--f-text-muted);
7014
+ word-break: break-word;
7015
+ }
7016
+ .f-notification__close[data-v-7600a501] {
7017
+ flex-shrink: 0;
7018
+ display: inline-flex;
7019
+ align-items: center;
7020
+ justify-content: center;
7021
+ margin: -2px -4px 0 0;
7022
+ padding: 2px;
7023
+ border: none;
7024
+ background: transparent;
7025
+ color: var(--f-text-muted);
7026
+ cursor: pointer;
7027
+ transition: color 0.2s ease;
7028
+ }
7029
+ .f-notification__close[data-v-7600a501]:hover {
7030
+ color: var(--f-text);
7031
+ }
7032
+ .f-notification--info .f-notification__icon[data-v-7600a501] {
7033
+ color: var(--f-info);
7034
+ }
7035
+ .f-notification--success .f-notification__icon[data-v-7600a501] {
7036
+ color: var(--f-success);
7037
+ }
7038
+ .f-notification--warning .f-notification__icon[data-v-7600a501] {
7039
+ color: var(--f-warning);
7040
+ }
7041
+ .f-notification--error .f-notification__icon[data-v-7600a501] {
7042
+ color: var(--f-error);
7043
+ }
7044
+ :root.light .f-notification[data-v-7600a501] {
7045
+ --f-bg: #ffffff;
7046
+ --f-border: rgba(0, 0, 0, 0.08);
7047
+ --f-text: #1e293b;
7048
+ --f-text-muted: #64748b;
7049
+ --f-shadow: rgba(0, 0, 0, 0.12);
7050
+ --f-info: #2563eb;
7051
+ --f-success: #059669;
7052
+ --f-warning: #ea580c;
7053
+ --f-error: #dc2626;
7054
+ }
7055
+ .f-notification-top-right-enter-active[data-v-7600a501] {
7056
+ transition: opacity 0.3s cubic-bezier(0.34, 1.56, 0.64, 1), transform 0.3s cubic-bezier(0.34, 1.56, 0.64, 1);
7057
+ }
7058
+ .f-notification-top-right-leave-active[data-v-7600a501] {
7059
+ transition: opacity 0.2s ease-in, transform 0.2s ease-in;
7060
+ }
7061
+ .f-notification-top-right-enter-from[data-v-7600a501], .f-notification-top-right-leave-to[data-v-7600a501] {
7062
+ opacity: 0;
7063
+ transform: translateX(24px);
7064
+ }
7065
+ .f-notification-bottom-right-enter-active[data-v-7600a501] {
7066
+ transition: opacity 0.3s cubic-bezier(0.34, 1.56, 0.64, 1), transform 0.3s cubic-bezier(0.34, 1.56, 0.64, 1);
7067
+ }
7068
+ .f-notification-bottom-right-leave-active[data-v-7600a501] {
7069
+ transition: opacity 0.2s ease-in, transform 0.2s ease-in;
7070
+ }
7071
+ .f-notification-bottom-right-enter-from[data-v-7600a501], .f-notification-bottom-right-leave-to[data-v-7600a501] {
7072
+ opacity: 0;
7073
+ transform: translateX(24px);
7074
+ }
7075
+ .f-notification-top-left-enter-active[data-v-7600a501] {
7076
+ transition: opacity 0.3s cubic-bezier(0.34, 1.56, 0.64, 1), transform 0.3s cubic-bezier(0.34, 1.56, 0.64, 1);
7077
+ }
7078
+ .f-notification-top-left-leave-active[data-v-7600a501] {
7079
+ transition: opacity 0.2s ease-in, transform 0.2s ease-in;
7080
+ }
7081
+ .f-notification-top-left-enter-from[data-v-7600a501], .f-notification-top-left-leave-to[data-v-7600a501] {
7082
+ opacity: 0;
7083
+ transform: translateX(-24px);
7084
+ }
7085
+ .f-notification-bottom-left-enter-active[data-v-7600a501] {
7086
+ transition: opacity 0.3s cubic-bezier(0.34, 1.56, 0.64, 1), transform 0.3s cubic-bezier(0.34, 1.56, 0.64, 1);
7087
+ }
7088
+ .f-notification-bottom-left-leave-active[data-v-7600a501] {
7089
+ transition: opacity 0.2s ease-in, transform 0.2s ease-in;
7090
+ }
7091
+ .f-notification-bottom-left-enter-from[data-v-7600a501], .f-notification-bottom-left-leave-to[data-v-7600a501] {
7092
+ opacity: 0;
7093
+ transform: translateX(-24px);
6880
7094
  }