@emailmaker/filemanager 0.10.101 → 0.10.102
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/{file-manager-IconsTab-_WPQISpD.js → file-manager-IconsTab-DoB38f7f.js} +2 -2
- package/{file-manager-ImageCodeGenerator-BDrvWfI1.js → file-manager-ImageCodeGenerator-CqcxlFj4.js} +2 -2
- package/{file-manager-JsBarcode-zmCuJ0oz.js → file-manager-JsBarcode-C1cbGYHV.js} +2 -2
- package/{file-manager-browser-B-aFTXwm.js → file-manager-browser-Ca_Mbew5.js} +2 -2
- package/file-manager-index-CVN64GK6.js +10 -0
- package/file-manager.css +162 -142
- package/file-manager.esm.js +1 -1
- package/file-manager.js +61 -19
- package/package.json +1 -1
- package/types.d.ts +8 -0
- package/utils/libraryTabLock.d.ts +11 -0
- package/utils/libraryTabLock.test.d.ts +1 -0
- package/file-manager-index-C_WmI5Gt.js +0 -10
package/file-manager.css
CHANGED
|
@@ -1,145 +1,3 @@
|
|
|
1
|
-
@charset "UTF-8";
|
|
2
|
-
.em-filemanager .root {
|
|
3
|
-
padding: 16px 20px 24px;
|
|
4
|
-
max-width: 520px;
|
|
5
|
-
}
|
|
6
|
-
|
|
7
|
-
.em-filemanager .controls {
|
|
8
|
-
display: flex;
|
|
9
|
-
flex-direction: column;
|
|
10
|
-
gap: 20px;
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
.em-filemanager .segmentedControl {
|
|
14
|
-
background-color: var(--ant-color-fill-secondary, rgba(0, 0, 0, 0.06));
|
|
15
|
-
padding: 4px;
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
.em-filemanager .sizeRow {
|
|
19
|
-
display: grid;
|
|
20
|
-
grid-template-columns: 1fr 1fr;
|
|
21
|
-
gap: 16px 24px;
|
|
22
|
-
align-items: center;
|
|
23
|
-
width: 100%;
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
.em-filemanager .sizeRowLabel {
|
|
27
|
-
margin: 0;
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
/** InputNumber с prefix / suffix — ширина блока значения */
|
|
31
|
-
.em-filemanager .sizeInputNumber {
|
|
32
|
-
width: 100%;
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
.em-filemanager .sizeSuffix {
|
|
36
|
-
color: var(--ant-color-text-tertiary, rgba(0, 0, 0, 0.45));
|
|
37
|
-
font-size: 13px;
|
|
38
|
-
line-height: 1;
|
|
39
|
-
-webkit-user-select: none;
|
|
40
|
-
user-select: none;
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
.em-filemanager .colorGrid {
|
|
44
|
-
display: grid;
|
|
45
|
-
grid-template-columns: 1fr 1fr;
|
|
46
|
-
gap: 16px 24px;
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
.em-filemanager .colorCell {
|
|
50
|
-
display: flex;
|
|
51
|
-
flex-direction: column;
|
|
52
|
-
align-items: stretch;
|
|
53
|
-
gap: 8px;
|
|
54
|
-
min-width: 0;
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
.em-filemanager .colorCellLabel {
|
|
58
|
-
margin: 0 !important;
|
|
59
|
-
white-space: nowrap;
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
.em-filemanager .colorPickerFull {
|
|
63
|
-
width: 100%;
|
|
64
|
-
justify-content: flex-start;
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
.em-filemanager .bgExtras {
|
|
68
|
-
grid-column: 1/-1;
|
|
69
|
-
margin-top: -8px;
|
|
70
|
-
display: flex;
|
|
71
|
-
flex-direction: column;
|
|
72
|
-
gap: 12px;
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
.em-filemanager .bgWarning {
|
|
76
|
-
margin: 0;
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
.em-filemanager .previewSection {
|
|
80
|
-
display: flex;
|
|
81
|
-
flex-direction: column;
|
|
82
|
-
gap: 12px;
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
.em-filemanager .previewTitle {
|
|
86
|
-
font-size: 14px;
|
|
87
|
-
font-weight: 600;
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
.em-filemanager .previewWrap {
|
|
91
|
-
display: flex;
|
|
92
|
-
justify-content: center;
|
|
93
|
-
align-items: center;
|
|
94
|
-
min-height: 220px;
|
|
95
|
-
padding: 16px;
|
|
96
|
-
border: 1px solid var(--ant-color-border-secondary, #f0f0f0);
|
|
97
|
-
border-radius: 8px;
|
|
98
|
-
background-color: var(--ant-color-fill-quaternary, #fafafa);
|
|
99
|
-
background-image: linear-gradient(45deg, #e8e8e8 25%, transparent 25%), linear-gradient(-45deg, #e8e8e8 25%, transparent 25%), linear-gradient(45deg, transparent 75%, #e8e8e8 75%), linear-gradient(-45deg, transparent 75%, #e8e8e8 75%);
|
|
100
|
-
background-size: 16px 16px;
|
|
101
|
-
background-position: 0 0, 0 8px, 8px -8px, -8px 0;
|
|
102
|
-
position: relative;
|
|
103
|
-
overflow: hidden;
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
.em-filemanager .scanLine {
|
|
107
|
-
position: absolute;
|
|
108
|
-
top: 50%;
|
|
109
|
-
left: 20%;
|
|
110
|
-
right: 20%;
|
|
111
|
-
height: 2px;
|
|
112
|
-
background-color: #ff4d4f;
|
|
113
|
-
box-shadow: 0 0 6px #ff4d4f;
|
|
114
|
-
z-index: 10;
|
|
115
|
-
pointer-events: none;
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
.em-filemanager .scanLineBarcode {
|
|
119
|
-
left: 10%;
|
|
120
|
-
right: 10%;
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
.em-filemanager .previewWrapBarcode {
|
|
124
|
-
min-height: 104px;
|
|
125
|
-
padding: 12px 16px;
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
.em-filemanager .previewCanvas {
|
|
129
|
-
display: block;
|
|
130
|
-
max-width: 100%;
|
|
131
|
-
height: auto;
|
|
132
|
-
background: transparent;
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
.em-filemanager .previewCanvasBarcode {
|
|
136
|
-
max-height: 120px;
|
|
137
|
-
width: auto;
|
|
138
|
-
}
|
|
139
|
-
|
|
140
|
-
.em-filemanager .actions {
|
|
141
|
-
margin-top: 8px;
|
|
142
|
-
}
|
|
143
1
|
.em-filemanager .iconsTab {
|
|
144
2
|
display: flex;
|
|
145
3
|
flex-direction: column;
|
|
@@ -576,6 +434,148 @@
|
|
|
576
434
|
background: rgba(255, 255, 255, 0.6);
|
|
577
435
|
pointer-events: all;
|
|
578
436
|
}
|
|
437
|
+
@charset "UTF-8";
|
|
438
|
+
.em-filemanager .root {
|
|
439
|
+
padding: 16px 20px 24px;
|
|
440
|
+
max-width: 520px;
|
|
441
|
+
}
|
|
442
|
+
|
|
443
|
+
.em-filemanager .controls {
|
|
444
|
+
display: flex;
|
|
445
|
+
flex-direction: column;
|
|
446
|
+
gap: 20px;
|
|
447
|
+
}
|
|
448
|
+
|
|
449
|
+
.em-filemanager .segmentedControl {
|
|
450
|
+
background-color: var(--ant-color-fill-secondary, rgba(0, 0, 0, 0.06));
|
|
451
|
+
padding: 4px;
|
|
452
|
+
}
|
|
453
|
+
|
|
454
|
+
.em-filemanager .sizeRow {
|
|
455
|
+
display: grid;
|
|
456
|
+
grid-template-columns: 1fr 1fr;
|
|
457
|
+
gap: 16px 24px;
|
|
458
|
+
align-items: center;
|
|
459
|
+
width: 100%;
|
|
460
|
+
}
|
|
461
|
+
|
|
462
|
+
.em-filemanager .sizeRowLabel {
|
|
463
|
+
margin: 0;
|
|
464
|
+
}
|
|
465
|
+
|
|
466
|
+
/** InputNumber с prefix / suffix — ширина блока значения */
|
|
467
|
+
.em-filemanager .sizeInputNumber {
|
|
468
|
+
width: 100%;
|
|
469
|
+
}
|
|
470
|
+
|
|
471
|
+
.em-filemanager .sizeSuffix {
|
|
472
|
+
color: var(--ant-color-text-tertiary, rgba(0, 0, 0, 0.45));
|
|
473
|
+
font-size: 13px;
|
|
474
|
+
line-height: 1;
|
|
475
|
+
-webkit-user-select: none;
|
|
476
|
+
user-select: none;
|
|
477
|
+
}
|
|
478
|
+
|
|
479
|
+
.em-filemanager .colorGrid {
|
|
480
|
+
display: grid;
|
|
481
|
+
grid-template-columns: 1fr 1fr;
|
|
482
|
+
gap: 16px 24px;
|
|
483
|
+
}
|
|
484
|
+
|
|
485
|
+
.em-filemanager .colorCell {
|
|
486
|
+
display: flex;
|
|
487
|
+
flex-direction: column;
|
|
488
|
+
align-items: stretch;
|
|
489
|
+
gap: 8px;
|
|
490
|
+
min-width: 0;
|
|
491
|
+
}
|
|
492
|
+
|
|
493
|
+
.em-filemanager .colorCellLabel {
|
|
494
|
+
margin: 0 !important;
|
|
495
|
+
white-space: nowrap;
|
|
496
|
+
}
|
|
497
|
+
|
|
498
|
+
.em-filemanager .colorPickerFull {
|
|
499
|
+
width: 100%;
|
|
500
|
+
justify-content: flex-start;
|
|
501
|
+
}
|
|
502
|
+
|
|
503
|
+
.em-filemanager .bgExtras {
|
|
504
|
+
grid-column: 1/-1;
|
|
505
|
+
margin-top: -8px;
|
|
506
|
+
display: flex;
|
|
507
|
+
flex-direction: column;
|
|
508
|
+
gap: 12px;
|
|
509
|
+
}
|
|
510
|
+
|
|
511
|
+
.em-filemanager .bgWarning {
|
|
512
|
+
margin: 0;
|
|
513
|
+
}
|
|
514
|
+
|
|
515
|
+
.em-filemanager .previewSection {
|
|
516
|
+
display: flex;
|
|
517
|
+
flex-direction: column;
|
|
518
|
+
gap: 12px;
|
|
519
|
+
}
|
|
520
|
+
|
|
521
|
+
.em-filemanager .previewTitle {
|
|
522
|
+
font-size: 14px;
|
|
523
|
+
font-weight: 600;
|
|
524
|
+
}
|
|
525
|
+
|
|
526
|
+
.em-filemanager .previewWrap {
|
|
527
|
+
display: flex;
|
|
528
|
+
justify-content: center;
|
|
529
|
+
align-items: center;
|
|
530
|
+
min-height: 220px;
|
|
531
|
+
padding: 16px;
|
|
532
|
+
border: 1px solid var(--ant-color-border-secondary, #f0f0f0);
|
|
533
|
+
border-radius: 8px;
|
|
534
|
+
background-color: var(--ant-color-fill-quaternary, #fafafa);
|
|
535
|
+
background-image: linear-gradient(45deg, #e8e8e8 25%, transparent 25%), linear-gradient(-45deg, #e8e8e8 25%, transparent 25%), linear-gradient(45deg, transparent 75%, #e8e8e8 75%), linear-gradient(-45deg, transparent 75%, #e8e8e8 75%);
|
|
536
|
+
background-size: 16px 16px;
|
|
537
|
+
background-position: 0 0, 0 8px, 8px -8px, -8px 0;
|
|
538
|
+
position: relative;
|
|
539
|
+
overflow: hidden;
|
|
540
|
+
}
|
|
541
|
+
|
|
542
|
+
.em-filemanager .scanLine {
|
|
543
|
+
position: absolute;
|
|
544
|
+
top: 50%;
|
|
545
|
+
left: 20%;
|
|
546
|
+
right: 20%;
|
|
547
|
+
height: 2px;
|
|
548
|
+
background-color: #ff4d4f;
|
|
549
|
+
box-shadow: 0 0 6px #ff4d4f;
|
|
550
|
+
z-index: 10;
|
|
551
|
+
pointer-events: none;
|
|
552
|
+
}
|
|
553
|
+
|
|
554
|
+
.em-filemanager .scanLineBarcode {
|
|
555
|
+
left: 10%;
|
|
556
|
+
right: 10%;
|
|
557
|
+
}
|
|
558
|
+
|
|
559
|
+
.em-filemanager .previewWrapBarcode {
|
|
560
|
+
min-height: 104px;
|
|
561
|
+
padding: 12px 16px;
|
|
562
|
+
}
|
|
563
|
+
|
|
564
|
+
.em-filemanager .previewCanvas {
|
|
565
|
+
display: block;
|
|
566
|
+
max-width: 100%;
|
|
567
|
+
height: auto;
|
|
568
|
+
background: transparent;
|
|
569
|
+
}
|
|
570
|
+
|
|
571
|
+
.em-filemanager .previewCanvasBarcode {
|
|
572
|
+
max-height: 120px;
|
|
573
|
+
width: auto;
|
|
574
|
+
}
|
|
575
|
+
|
|
576
|
+
.em-filemanager .actions {
|
|
577
|
+
margin-top: 8px;
|
|
578
|
+
}
|
|
579
579
|
.em-filemanager .noFilesContainer {
|
|
580
580
|
text-align: center;
|
|
581
581
|
}
|
|
@@ -1593,6 +1593,26 @@
|
|
|
1593
1593
|
padding: 2px 0;
|
|
1594
1594
|
min-width: 0; /* Позволяет flex-элементам сжиматься */
|
|
1595
1595
|
}
|
|
1596
|
+
|
|
1597
|
+
/** Tab locked by the host (e.g. by subscription plan): still shown, but badged with a lock. */
|
|
1598
|
+
.em-filemanager .lockedTabIcon {
|
|
1599
|
+
position: relative;
|
|
1600
|
+
display: inline-flex;
|
|
1601
|
+
opacity: 0.55;
|
|
1602
|
+
}
|
|
1603
|
+
|
|
1604
|
+
.em-filemanager .lockedTabLock {
|
|
1605
|
+
position: absolute;
|
|
1606
|
+
right: -4px;
|
|
1607
|
+
bottom: -2px;
|
|
1608
|
+
opacity: 1;
|
|
1609
|
+
border-radius: 100%;
|
|
1610
|
+
background-color: var(--colorBgContainer);
|
|
1611
|
+
}
|
|
1612
|
+
|
|
1613
|
+
.em-filemanager .lockedTabLabel {
|
|
1614
|
+
opacity: 0.55;
|
|
1615
|
+
}
|
|
1596
1616
|
@charset "UTF-8";
|
|
1597
1617
|
.em-filemanager .uploadProgress {
|
|
1598
1618
|
position: fixed;
|
package/file-manager.esm.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export{a1 as DEFAULT_FILE_MANAGER_CACHE_TTL_MS,a3 as DataSourceProxyBase,L as FailedRequestCache,A as FileContent,G as FileManagerApiError,z as FileManagerApp,t as FileManagerAppWithContext,B as FileModals,C as FolderSidebar,M as MutationRegistry,a4 as PathAwareStorageAdapter,P as PixieOnlyApp,X as TRASH_FOLDER_ID,$ as TreeCache,a0 as ViewCacheManager,I as buildAssetsPath,O as compareFileSystemItems,Y as createSystemFolderByPathResolver,y as default,Q as defaultChildrenViewFilterMatch,R as defaultFileSystemItemComparator,S as defaultHasSortValue,a2 as defaultIsFolderNotFoundError,a5 as fetchRemoteImageBlobByUrl,K as getAssetsBase,Z as getTrashFolderLookupCandidates,T as hasComparableSortValue,q as init,x as initFileManager,v as initPixieEditor,D as installResizeObserverErrorHandler,J as joinUrls,H as mapHttpStatusToErrorCode,U as matchesChildrenViewFilter,_ as normalizeSystemFolderPath,V as resolveSortParams,W as resolveViewStrategyOptions,E as uninstallResizeObserverErrorHandler,s as unmount,w as unmountPixieEditor}from"./file-manager-index-
|
|
1
|
+
export{a1 as DEFAULT_FILE_MANAGER_CACHE_TTL_MS,a3 as DataSourceProxyBase,L as FailedRequestCache,A as FileContent,G as FileManagerApiError,z as FileManagerApp,t as FileManagerAppWithContext,B as FileModals,C as FolderSidebar,M as MutationRegistry,a4 as PathAwareStorageAdapter,P as PixieOnlyApp,X as TRASH_FOLDER_ID,$ as TreeCache,a0 as ViewCacheManager,I as buildAssetsPath,O as compareFileSystemItems,Y as createSystemFolderByPathResolver,y as default,Q as defaultChildrenViewFilterMatch,R as defaultFileSystemItemComparator,S as defaultHasSortValue,a2 as defaultIsFolderNotFoundError,a5 as fetchRemoteImageBlobByUrl,K as getAssetsBase,Z as getTrashFolderLookupCandidates,T as hasComparableSortValue,q as init,x as initFileManager,v as initPixieEditor,D as installResizeObserverErrorHandler,J as joinUrls,H as mapHttpStatusToErrorCode,U as matchesChildrenViewFilter,_ as normalizeSystemFolderPath,V as resolveSortParams,W as resolveViewStrategyOptions,E as uninstallResizeObserverErrorHandler,s as unmount,w as unmountPixieEditor}from"./file-manager-index-CVN64GK6.js";import"react/jsx-runtime";import"react";import"react-dom/client";import"antd";import"@ant-design/icons";import"@ant-design/cssinjs";import"react-dom";import"@untitledui/icons";import"browser-image-compression";import"pixie";
|
|
2
2
|
//# sourceMappingURL=file-manager.esm.js.map
|
package/file-manager.js
CHANGED
|
@@ -44543,6 +44543,8 @@ module.exports = __WEBPACK_EXTERNAL_MODULE__7928__;
|
|
|
44543
44543
|
/* harmony import */ var antd__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(550);
|
|
44544
44544
|
/* harmony import */ var antd__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(antd__WEBPACK_IMPORTED_MODULE_2__);
|
|
44545
44545
|
/* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(133);
|
|
44546
|
+
/* harmony import */ var _utils_libraryTabLock__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(8546);
|
|
44547
|
+
|
|
44546
44548
|
|
|
44547
44549
|
|
|
44548
44550
|
|
|
@@ -44598,16 +44600,18 @@ const FileManagerProvider = ({ children, options }) => {
|
|
|
44598
44600
|
const [currentMenuFile, setCurrentMenuFile] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)('');
|
|
44599
44601
|
const [loading, setLoading] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false);
|
|
44600
44602
|
const [activeLibraryItem, setActiveLibraryItem] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(_constants__WEBPACK_IMPORTED_MODULE_3__/* .MY_FILES */ .Zz);
|
|
44603
|
+
/** A locked tab must never become active — otherwise the host's lock would be bypassed. */
|
|
44604
|
+
const isLibraryItemOpenable = (0,react__WEBPACK_IMPORTED_MODULE_1__.useCallback)((item) => isLibraryItemEnabled(item) && !(0,_utils_libraryTabLock__WEBPACK_IMPORTED_MODULE_4__/* .isLibraryTabLocked */ .v)(item, config), [config, isLibraryItemEnabled]);
|
|
44601
44605
|
(0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(() => {
|
|
44602
44606
|
if ((config === null || config === void 0 ? void 0 : config.activeLibraryItem) && setActiveLibraryItem) {
|
|
44603
|
-
setActiveLibraryItem(
|
|
44607
|
+
setActiveLibraryItem(isLibraryItemOpenable(config.activeLibraryItem) ? config.activeLibraryItem : _constants__WEBPACK_IMPORTED_MODULE_3__/* .MY_FILES */ .Zz);
|
|
44604
44608
|
}
|
|
44605
|
-
}, [config === null || config === void 0 ? void 0 : config.activeLibraryItem,
|
|
44609
|
+
}, [config === null || config === void 0 ? void 0 : config.activeLibraryItem, isLibraryItemOpenable, setActiveLibraryItem]);
|
|
44606
44610
|
(0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)(() => {
|
|
44607
|
-
if (!
|
|
44611
|
+
if (!isLibraryItemOpenable(activeLibraryItem)) {
|
|
44608
44612
|
setActiveLibraryItem(_constants__WEBPACK_IMPORTED_MODULE_3__/* .MY_FILES */ .Zz);
|
|
44609
44613
|
}
|
|
44610
|
-
}, [activeLibraryItem,
|
|
44614
|
+
}, [activeLibraryItem, isLibraryItemOpenable]);
|
|
44611
44615
|
const [pagination, setPagination] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)({
|
|
44612
44616
|
current: 1,
|
|
44613
44617
|
pageSize: 20,
|
|
@@ -44735,6 +44739,21 @@ const FileManagerProvider = ({ children, options }) => {
|
|
|
44735
44739
|
};
|
|
44736
44740
|
|
|
44737
44741
|
|
|
44742
|
+
/***/ }),
|
|
44743
|
+
|
|
44744
|
+
/***/ 8546:
|
|
44745
|
+
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
44746
|
+
|
|
44747
|
+
"use strict";
|
|
44748
|
+
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
44749
|
+
/* harmony export */ v: () => (/* binding */ isLibraryTabLocked)
|
|
44750
|
+
/* harmony export */ });
|
|
44751
|
+
function isLibraryTabLocked(tab, config) {
|
|
44752
|
+
var _a;
|
|
44753
|
+
return Boolean((_a = config === null || config === void 0 ? void 0 : config.lockedTabs) === null || _a === void 0 ? void 0 : _a.includes(tab));
|
|
44754
|
+
}
|
|
44755
|
+
|
|
44756
|
+
|
|
44738
44757
|
/***/ }),
|
|
44739
44758
|
|
|
44740
44759
|
/***/ 8573:
|
|
@@ -48459,7 +48478,7 @@ var ___CSS_LOADER_API_SOURCEMAP_IMPORT___ = __webpack_require__(1354);
|
|
|
48459
48478
|
var ___CSS_LOADER_API_IMPORT___ = __webpack_require__(6314);
|
|
48460
48479
|
var ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);
|
|
48461
48480
|
// Module
|
|
48462
|
-
___CSS_LOADER_EXPORT___.push([module.id, `.FolderSidebar-module__button__Yf2rX.ant-btn.ant-btn-icon-only{padding:calc(var(--paddingXXS)*1px) calc(var(--paddingSM)*1px);cursor:pointer;color:var(--colorTextSecondary);display:flex;gap:calc(var(--marginXS)*1px);align-items:center;justify-content:center;border-radius:calc(var(--borderRadiusSM)*1px);transition:all var(--motionDurationFast);box-shadow:none;border:none;width:32px;height:32px}.FolderSidebar-module__button__Yf2rX.ant-btn.ant-btn-icon-only:hover{background-color:var(--colorBgLayout);color:inherit}.FolderSidebar-module__button__Yf2rX:hover{background-color:var(--colorBgContainer);color:var(--colorPrimary)}.FolderSidebar-module__foldersTitle__Uh6u7{display:flex;align-items:center;flex:1;cursor:pointer}.FolderSidebar-module__folderActions__qA2Bk{position:absolute;top:4px;right:4px;display:flex;align-items:center;gap:4px;z-index:10}.FolderSidebar-module__folderActions__qA2Bk .FolderSidebar-module__button__Yf2rX.FolderSidebar-module__ant-btn__LXAXm.FolderSidebar-module__ant-btn-icon-only__j_wVF{padding:calc(var(--paddingXXS)*1px) calc(var(--paddingSM)*1px);cursor:pointer;color:var(--colorTextSecondary);display:flex;gap:calc(var(--marginXS)*1px);align-items:center;justify-content:center;border-radius:calc(var(--borderRadiusSM)*1px);transition:all var(--motionDurationFast);box-shadow:none;border:none;width:32px;height:32px}.FolderSidebar-module__folderActions__qA2Bk .FolderSidebar-module__button__Yf2rX.FolderSidebar-module__ant-btn__LXAXm.FolderSidebar-module__ant-btn-icon-only__j_wVF:hover{background-color:var(--colorBgLayout);color:inherit}.FolderSidebar-module__customExpandIcon__IhZJl{display:inline-flex;align-items:center;justify-content:center;width:16px;height:16px;margin-right:8px;cursor:pointer;color:#666;font-size:10px;transition:transform .2s ease}.FolderSidebar-module__customExpandIcon__IhZJl:hover{color:var(--colorPrimary)}.FolderSidebar-module__fileCount__bD9DD{display:inline-flex;align-items:center;justify-content:center;min-width:20px;height:100%;padding:0 6px;margin-left:8px;color:#8d8d8d;font-size:14px;font-weight:500;transition:all .2s ease;white-space:nowrap;cursor:default;flex-shrink:0;margin-right:10px}.ant-tree .ant-tree-node-content-wrapper.ant-tree-node-selected{background-color:rgba(0,0,0,0) !important}.FolderSidebar-module__folderMenu__JCzLF .ant-tree-treenode-selected .folder-label span,.FolderSidebar-module__folderMenu__JCzLF .ant-tree .ant-tree-node-content-wrapper.ant-tree-node-selected .folderLabelItem,.FolderSidebar-module__folderMenu__JCzLF .ant-tree-treenode-selected .folderLabelItem,.FolderSidebar-module__folderMenu__JCzLF .ant-tree-node-selected .folderLabelItem{font-weight:600 !important}.FolderSidebar-module__uploadButton__QQUid{width:100%;justify-content:flex-start}.FolderSidebar-module__uploadButton__QQUid button:hover{background-color:var(--colorPrimaryHover) !important}.FolderSidebar-module__folderMenu__JCzLF{padding-left:0;padding-right:0}.FolderSidebar-module__folderMenu__JCzLF .ant-tree-treenode{display:flex;align-items:center;justify-content:space-between;padding:4px 0;border-radius:4px;transition:background-color .2s ease;width:100%;margin-bottom:0}.FolderSidebar-module__folderMenu__JCzLF .ant-tree-node-content-wrapper{flex:1;align-items:center;padding:0;transition:background-color .2s ease}.FolderSidebar-module__folderMenu__JCzLF .ant-tree-node-content-wrapper:hover{background-color:rgba(0,0,0,0)}.FolderSidebar-module__folderMenu__JCzLF .ant-tree-switcher{height:24px;width:24px;margin-top:5px;display:flex !important;align-items:center;justify-content:center;transition:color .2s ease;flex-shrink:0}.FolderSidebar-module__folderMenu__JCzLF .ant-tree-switcher-noop{width:24px}.FolderSidebar-module__folderMenu__JCzLF .ant-tree-switcher-line-icon{color:#d9d9d9}.FolderSidebar-module__folderMenu__JCzLF .FolderSidebar-module__folderItemContainer__byl5b{width:100%;display:flex;align-items:center;justify-content:space-between;padding:2px 0;min-width:0}.FolderSidebar-module__folderMenu__JCzLF .folder-label{display:flex;align-items:center;flex:1;color:#595959;font-size:14px;min-width:0;overflow:hidden}.FolderSidebar-module__folderMenu__JCzLF .ant-tree-treenode[data-key="folders"]{border-bottom:1px solid var(--colorBorderSecondary);margin-bottom:8px;padding-bottom:8px}.FolderSidebar-module__folderMenu__JCzLF .ant-tree-treenode[data-key="folders"].ant-tree-treenode-selected{background-color:rgba(0,0,0,0) !important}.FolderSidebar-module__folderMenu__JCzLF .ant-tree-treenode[data-key="folders"] .ant-tree-node-content-wrapper{padding:0}.FolderSidebar-module__folderMenu__JCzLF .ant-tree-treenode[data-key="folders"] .ant-tree-node-content-wrapper:hover{background-color:rgba(0,0,0,0) !important}.FolderSidebar-module__folderMenu__JCzLF .ellipsis{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0}.FolderSidebar-module__folderMenu__JCzLF .FolderSidebar-module__emptyFolderContainer__WK6tx{padding:20px;text-align:center}.FolderSidebar-module__folderMenu__JCzLF .ant-tree > .ant-tree-treenode{padding-left:0 !important}.FolderSidebar-module__folderIcon__UoZzH{margin-right:8px;font-size:18px;flex-shrink:0}.FolderSidebar-module__folderLabelItem__uJ062{font-size:14px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;flex:1;min-width:0;user-select:none}.FolderSidebar-module__foldersTitleItem__gapOI{display:flex;align-items:center;flex:1;cursor:pointer;min-width:0;overflow:hidden}.FolderSidebar-module__folderLabel__fHWMp{display:flex;align-items:center;flex:1;min-width:0;overflow:hidden}.FolderSidebar-module__foldersContainer__zdBVU{position:relative;width:100%}.FolderSidebar-module__uploadButton__QQUid .FolderSidebar-module__ant-btn__LXAXm,.FolderSidebar-module__uploadButton__QQUid .ant-btn{display:flex;align-items:center;justify-content:center;gap:3px}.FolderSidebar-module__buttonWrapper__a9Qi5{margin-bottom:24px;display:flex;gap:4px}.FolderSidebar-module__buttonWrapper__a9Qi5>:first-child{flex:1;height:40px;padding-left:10px}.FolderSidebar-module__buttonWrapper__a9Qi5>:last-child{width:40px;height:40px;flex-shrink:0}.FolderSidebar-module__uploadByURLButton__epMiC.ant-btn.ant-btn-icon-only{width:40px;min-width:40px;height:40px;padding:0;flex-shrink:0}.FolderSidebar-module__uploadButtonIcon__mWQmq{font-size:20px}.FolderSidebar-module__uploadButtonTitle__wk_o6{line-height:1em}.FolderSidebar-module__emptyFolderContainer__WK6tx{user-select:none;cursor:default;color:var(--colorTextTertiary)}.FolderSidebar-module__folderItemContainer__byl5b{width:100%;display:flex;align-items:center;justify-content:space-between;padding:2px 0;min-width:0}`, "",{"version":3,"sources":["webpack://./src/components/FolderSidebar/FolderSidebar.module.scss"],"names":[],"mappings":"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","sourcesContent":[".button:global(.ant-btn.ant-btn-icon-only) {\r\n padding: calc(var(--paddingXXS) * 1px) calc(var(--paddingSM) * 1px);\r\n cursor: pointer;\r\n color: var(--colorTextSecondary);\r\n display: flex;\r\n gap: calc(var(--marginXS) * 1px);\r\n align-items: center;\r\n justify-content: center;\r\n border-radius: calc(var(--borderRadiusSM) * 1px);\r\n transition: all var(--motionDurationFast);\r\n box-shadow: none;\r\n\r\n border: none;\r\n width: 32px;\r\n height: 32px;\r\n\r\n &:hover {\r\n background-color: var(--colorBgLayout);\r\n color: inherit;\r\n }\r\n}\r\n\r\n.button:hover {\r\n background-color: var(--colorBgContainer);\r\n color: var(--colorPrimary);\r\n}\r\n\r\n.foldersTitle {\r\n display: flex;\r\n align-items: center;\r\n flex: 1;\r\n cursor: pointer;\r\n}\r\n\r\n.folderActions {\r\n position: absolute;\r\n top: 4px; /* Выравниваем по заголовку Folders */\r\n right: 4px;\r\n display: flex;\r\n align-items: center;\r\n gap: 4px;\r\n z-index: 10;\r\n\r\n .button.ant-btn.ant-btn-icon-only {\r\n padding: calc(var(--paddingXXS) * 1px) calc(var(--paddingSM) * 1px);\r\n cursor: pointer;\r\n color: var(--colorTextSecondary);\r\n display: flex;\r\n gap: calc(var(--marginXS) * 1px);\r\n align-items: center;\r\n justify-content: center;\r\n border-radius: calc(var(--borderRadiusSM) * 1px);\r\n transition: all var(--motionDurationFast);\r\n box-shadow: none;\r\n\r\n border: none;\r\n width: 32px;\r\n height: 32px;\r\n\r\n &:hover {\r\n background-color: var(--colorBgLayout);\r\n color: inherit;\r\n }\r\n }\r\n}\r\n\r\n.customExpandIcon {\r\n display: inline-flex;\r\n align-items: center;\r\n justify-content: center;\r\n width: 16px;\r\n height: 16px;\r\n margin-right: 8px;\r\n cursor: pointer;\r\n color: #666;\r\n font-size: 10px;\r\n transition: transform 0.2s ease;\r\n}\r\n\r\n.customExpandIcon:hover {\r\n color: var(--colorPrimary);\r\n}\r\n\r\n.fileCount {\r\n display: inline-flex;\r\n align-items: center;\r\n justify-content: center;\r\n min-width: 20px;\r\n height: 100%;\r\n padding: 0 6px;\r\n margin-left: 8px;\r\n color: #8D8D8D;\r\n font-size: 14px;\r\n font-weight: 500;\r\n transition: all 0.2s ease;\r\n white-space: nowrap;\r\n cursor: default;\r\n flex-shrink: 0; /* Запрещаем сжатие счетчика */\r\n margin-right: 10px;\r\n}\r\n\r\n// .fileCount:hover {\r\n// border-color: var(--colorPrimary);\r\n// color: var(--colorPrimary);\r\n// }\r\n\r\n:global(.ant-tree .ant-tree-node-content-wrapper.ant-tree-node-selected) {\r\n background-color: transparent !important;\r\n}\r\n\r\n/* :global(.ant-tree .ant-tree-node-content-wrapper.ant-tree-node-selected):hover {\r\n color: red !important;\r\n} */\r\n\r\n/* Стили для выделения текста в выбранной папке */\r\n.folderMenu :global(.ant-tree-treenode-selected .folder-label span),\r\n.folderMenu :global(.ant-tree .ant-tree-node-content-wrapper.ant-tree-node-selected .folderLabelItem),\r\n.folderMenu :global(.ant-tree-treenode-selected .folderLabelItem),\r\n.folderMenu :global(.ant-tree-node-selected .folderLabelItem) {\r\n font-weight: 600 !important;\r\n}\r\n\r\n/* Стили для иконки в выбранной папке */\r\n/* .folderMenu :global(.ant-tree-treenode-selected .folderIcon),\r\n.folderMenu :global(.ant-tree-node-selected .folderIcon) {\r\n color: red !important;\r\n} */\r\n\r\n/* CSS переменные для упрощения расчетов */\r\n\r\n.uploadButton {\r\n width: 100%;\r\n justify-content: flex-start;\r\n\r\n & button:hover {\r\n background-color: var(--colorPrimaryHover) !important;\r\n }\r\n}\r\n\r\n.folderMenu {\r\n padding-left: 0;\r\n padding-right: 0; /* Место для кнопки справа */\r\n}\r\n\r\n.folderMenu :global(.ant-tree-treenode) {\r\n display: flex;\r\n align-items: center;\r\n justify-content: space-between;\r\n padding: 4px 0;\r\n border-radius: 4px;\r\n transition: background-color 0.2s ease;\r\n width: 100%;\r\n margin-bottom: 0;\r\n}\r\n\r\n.folderMenu :global(.ant-tree-node-content-wrapper) {\r\n flex: 1;\r\n /* display: flex; */\r\n align-items: center;\r\n padding: 0;\r\n /* border-radius: 4px; */\r\n transition: background-color 0.2s ease;\r\n}\r\n\r\n.folderMenu :global(.ant-tree-node-content-wrapper:hover) {\r\n background-color: transparent;\r\n}\r\n\r\n.folderMenu :global(.ant-tree-switcher) {\r\n height: 24px;\r\n width: 24px;\r\n margin-top: 5px;\r\n display: flex !important;\r\n align-items: center;\r\n justify-content: center;\r\n transition: color 0.2s ease;\r\n flex-shrink: 0; /* Запрещаем сжатие переключателя */\r\n}\r\n\r\n.folderMenu :global(.ant-tree-switcher-noop) {\r\n width: 24px;\r\n}\r\n\r\n/* Стили для линий дерева */\r\n.folderMenu :global(.ant-tree-switcher-line-icon) {\r\n color: #d9d9d9;\r\n}\r\n\r\n/* Улучшение отображения folder-item-container */\r\n.folderMenu .folderItemContainer {\r\n width: 100%;\r\n display: flex;\r\n align-items: center;\r\n justify-content: space-between;\r\n padding: 2px 0;\r\n min-width: 0; /* Позволяет flex-элементам сжиматься */\r\n}\r\n\r\n.folderMenu :global(.folder-label) {\r\n display: flex;\r\n align-items: center;\r\n flex: 1;\r\n color: #595959;\r\n font-size: 14px;\r\n min-width: 0;\r\n overflow: hidden;\r\n}\r\n\r\n/* Стили для корневого элемента Folders */\r\n.folderMenu :global(.ant-tree-treenode[data-key='folders']) {\r\n border-bottom: 1px solid var(--colorBorderSecondary);\r\n margin-bottom: 8px;\r\n padding-bottom: 8px;\r\n}\r\n\r\n.folderMenu :global(.ant-tree-treenode[data-key='folders'].ant-tree-treenode-selected) {\r\n background-color: transparent !important;\r\n}\r\n\r\n.folderMenu :global(.ant-tree-treenode[data-key='folders'] .ant-tree-node-content-wrapper) {\r\n padding: 0;\r\n}\r\n\r\n.folderMenu :global(.ant-tree-treenode[data-key='folders'] .ant-tree-node-content-wrapper:hover) {\r\n background-color: transparent !important;\r\n}\r\n\r\n/* Стили для ellipsis - удаляем max-width для гибкости */\r\n.folderMenu :global(.ellipsis) {\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n white-space: nowrap;\r\n flex: 1;\r\n min-width: 0;\r\n}\r\n\r\n/* Стили для пустого состояния */\r\n.folderMenu .emptyFolderContainer {\r\n padding: 20px;\r\n text-align: center;\r\n}\r\n\r\n/* Убираем отступы у корневого узла */\r\n.folderMenu :global(.ant-tree > .ant-tree-treenode) {\r\n padding-left: 0 !important;\r\n}\r\n.folderIcon {\r\n margin-right: 8px;\r\n font-size: 18px;\r\n flex-shrink: 0; /* Запрещаем сжатие иконки */\r\n}\r\n\r\n.folderLabelItem {\r\n font-size: 14px;\r\n white-space: nowrap; /* Запрещаем перенос строк */\r\n overflow: hidden; /* Скрываем переполнение */\r\n text-overflow: ellipsis; /* Показываем троеточие */\r\n flex: 1; /* Занимает доступное место */\r\n min-width: 0; /* Позволяет сжиматься */\r\n user-select: none;\r\n}\r\n\r\n.foldersTitleItem {\r\n display: flex;\r\n align-items: center;\r\n flex: 1;\r\n cursor: pointer;\r\n min-width: 0; /* Позволяет сжиматься */\r\n overflow: hidden; /* Скрываем переполнение */\r\n}\r\n\r\n/* .foldersTitleItem .folderLabelItem {\r\n font-weight: 500;\r\n color: #262626;\r\n} */\r\n\r\n/* Класс для заголовка папок */\r\n.folderLabel {\r\n display: flex;\r\n align-items: center;\r\n flex: 1;\r\n min-width: 0;\r\n overflow: hidden;\r\n}\r\n\r\n.foldersContainer {\r\n position: relative;\r\n width: 100%;\r\n}\r\n\r\n/* Дополнительные стили для улучшения визуала */\r\n/* .folderMenu :global(.ant-tree-treenode:hover .folder-label span) {\r\n color: #1890ff;\r\n} */\r\n\r\n/* Стили для дивайдера между папками */\r\n\r\n\r\n.uploadButton .ant-btn,\r\n.uploadButton :global(.ant-btn) {\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n gap: 3px;\r\n}\r\n/* .folderMenu :global(.ant-tree-treenode-selected) .folderLabelItem {\r\n color: #1890ff !important;\r\n} */\r\n\r\n// .folderMenu :global(.ant-tree-treenode-selected) .folderLabel .folderLabelItem,\r\n// .folderMenu :global(.ant-tree-treenode-selected) .folderLabel .folderIcon,\r\n// .folderMenu :global(.ant-tree-treenode-selected) .folderLabelItem {\r\n// color: var(--colorLink);\r\n// }\r\n\r\n\r\n.buttonWrapper {\r\n // overflow: hidden;\r\n margin-bottom: 24px;\r\n display: flex;\r\n gap: 4px;\r\n // border-radius: calc(var(--borderRadius) * 1px);\r\n \r\n // Левая кнопка занимает всю доступную ширину\r\n > :first-child {\r\n flex: 1;\r\n height: 40px;\r\n padding-left: 10px;\r\n }\r\n \r\n // Правая кнопка строго 40px\r\n > :last-child {\r\n width: 40px;\r\n height: 40px;\r\n flex-shrink: 0;\r\n }\r\n}\r\n\r\n/* Кнопка «Загрузить по URL» — icon-only, поэтому хост-приложение может задать ей\r\n свои размеры глобальным правилом `.ant-btn.ant-btn-icon-only` (в emailmaker это\r\n --formControlHeight: 34) и она становится ниже кнопки «Загрузить файл».\r\n Три класса в селекторе перебивают такие правила без !important. */\r\n.uploadByURLButton:global(.ant-btn.ant-btn-icon-only) {\r\n width: 40px;\r\n min-width: 40px;\r\n height: 40px;\r\n padding: 0;\r\n flex-shrink: 0;\r\n}\r\n\r\n.uploadButtonIcon {\r\n font-size: 20px;\r\n}\r\n\r\n.uploadButtonTitle {\r\n line-height: 1em;\r\n}\r\n\r\n.emptyFolderContainer {\r\n user-select: none;\r\n cursor: default;\r\n color: var(--colorTextTertiary);\r\n}\r\n\r\n.folderItemContainer {\r\n width: 100%;\r\n display: flex;\r\n align-items: center;\r\n justify-content: space-between;\r\n padding: 2px 0;\r\n min-width: 0; /* Позволяет flex-элементам сжиматься */\r\n}\r\n"],"sourceRoot":""}]);
|
|
48481
|
+
___CSS_LOADER_EXPORT___.push([module.id, `.FolderSidebar-module__button__Yf2rX.ant-btn.ant-btn-icon-only{padding:calc(var(--paddingXXS)*1px) calc(var(--paddingSM)*1px);cursor:pointer;color:var(--colorTextSecondary);display:flex;gap:calc(var(--marginXS)*1px);align-items:center;justify-content:center;border-radius:calc(var(--borderRadiusSM)*1px);transition:all var(--motionDurationFast);box-shadow:none;border:none;width:32px;height:32px}.FolderSidebar-module__button__Yf2rX.ant-btn.ant-btn-icon-only:hover{background-color:var(--colorBgLayout);color:inherit}.FolderSidebar-module__button__Yf2rX:hover{background-color:var(--colorBgContainer);color:var(--colorPrimary)}.FolderSidebar-module__foldersTitle__Uh6u7{display:flex;align-items:center;flex:1;cursor:pointer}.FolderSidebar-module__folderActions__qA2Bk{position:absolute;top:4px;right:4px;display:flex;align-items:center;gap:4px;z-index:10}.FolderSidebar-module__folderActions__qA2Bk .FolderSidebar-module__button__Yf2rX.FolderSidebar-module__ant-btn__LXAXm.FolderSidebar-module__ant-btn-icon-only__j_wVF{padding:calc(var(--paddingXXS)*1px) calc(var(--paddingSM)*1px);cursor:pointer;color:var(--colorTextSecondary);display:flex;gap:calc(var(--marginXS)*1px);align-items:center;justify-content:center;border-radius:calc(var(--borderRadiusSM)*1px);transition:all var(--motionDurationFast);box-shadow:none;border:none;width:32px;height:32px}.FolderSidebar-module__folderActions__qA2Bk .FolderSidebar-module__button__Yf2rX.FolderSidebar-module__ant-btn__LXAXm.FolderSidebar-module__ant-btn-icon-only__j_wVF:hover{background-color:var(--colorBgLayout);color:inherit}.FolderSidebar-module__customExpandIcon__IhZJl{display:inline-flex;align-items:center;justify-content:center;width:16px;height:16px;margin-right:8px;cursor:pointer;color:#666;font-size:10px;transition:transform .2s ease}.FolderSidebar-module__customExpandIcon__IhZJl:hover{color:var(--colorPrimary)}.FolderSidebar-module__fileCount__bD9DD{display:inline-flex;align-items:center;justify-content:center;min-width:20px;height:100%;padding:0 6px;margin-left:8px;color:#8d8d8d;font-size:14px;font-weight:500;transition:all .2s ease;white-space:nowrap;cursor:default;flex-shrink:0;margin-right:10px}.ant-tree .ant-tree-node-content-wrapper.ant-tree-node-selected{background-color:rgba(0,0,0,0) !important}.FolderSidebar-module__folderMenu__JCzLF .ant-tree-treenode-selected .folder-label span,.FolderSidebar-module__folderMenu__JCzLF .ant-tree .ant-tree-node-content-wrapper.ant-tree-node-selected .folderLabelItem,.FolderSidebar-module__folderMenu__JCzLF .ant-tree-treenode-selected .folderLabelItem,.FolderSidebar-module__folderMenu__JCzLF .ant-tree-node-selected .folderLabelItem{font-weight:600 !important}.FolderSidebar-module__uploadButton__QQUid{width:100%;justify-content:flex-start}.FolderSidebar-module__uploadButton__QQUid button:hover{background-color:var(--colorPrimaryHover) !important}.FolderSidebar-module__folderMenu__JCzLF{padding-left:0;padding-right:0}.FolderSidebar-module__folderMenu__JCzLF .ant-tree-treenode{display:flex;align-items:center;justify-content:space-between;padding:4px 0;border-radius:4px;transition:background-color .2s ease;width:100%;margin-bottom:0}.FolderSidebar-module__folderMenu__JCzLF .ant-tree-node-content-wrapper{flex:1;align-items:center;padding:0;transition:background-color .2s ease}.FolderSidebar-module__folderMenu__JCzLF .ant-tree-node-content-wrapper:hover{background-color:rgba(0,0,0,0)}.FolderSidebar-module__folderMenu__JCzLF .ant-tree-switcher{height:24px;width:24px;margin-top:5px;display:flex !important;align-items:center;justify-content:center;transition:color .2s ease;flex-shrink:0}.FolderSidebar-module__folderMenu__JCzLF .ant-tree-switcher-noop{width:24px}.FolderSidebar-module__folderMenu__JCzLF .ant-tree-switcher-line-icon{color:#d9d9d9}.FolderSidebar-module__folderMenu__JCzLF .FolderSidebar-module__folderItemContainer__byl5b{width:100%;display:flex;align-items:center;justify-content:space-between;padding:2px 0;min-width:0}.FolderSidebar-module__folderMenu__JCzLF .folder-label{display:flex;align-items:center;flex:1;color:#595959;font-size:14px;min-width:0;overflow:hidden}.FolderSidebar-module__folderMenu__JCzLF .ant-tree-treenode[data-key="folders"]{border-bottom:1px solid var(--colorBorderSecondary);margin-bottom:8px;padding-bottom:8px}.FolderSidebar-module__folderMenu__JCzLF .ant-tree-treenode[data-key="folders"].ant-tree-treenode-selected{background-color:rgba(0,0,0,0) !important}.FolderSidebar-module__folderMenu__JCzLF .ant-tree-treenode[data-key="folders"] .ant-tree-node-content-wrapper{padding:0}.FolderSidebar-module__folderMenu__JCzLF .ant-tree-treenode[data-key="folders"] .ant-tree-node-content-wrapper:hover{background-color:rgba(0,0,0,0) !important}.FolderSidebar-module__folderMenu__JCzLF .ellipsis{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0}.FolderSidebar-module__folderMenu__JCzLF .FolderSidebar-module__emptyFolderContainer__WK6tx{padding:20px;text-align:center}.FolderSidebar-module__folderMenu__JCzLF .ant-tree > .ant-tree-treenode{padding-left:0 !important}.FolderSidebar-module__folderIcon__UoZzH{margin-right:8px;font-size:18px;flex-shrink:0}.FolderSidebar-module__folderLabelItem__uJ062{font-size:14px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;flex:1;min-width:0;user-select:none}.FolderSidebar-module__foldersTitleItem__gapOI{display:flex;align-items:center;flex:1;cursor:pointer;min-width:0;overflow:hidden}.FolderSidebar-module__folderLabel__fHWMp{display:flex;align-items:center;flex:1;min-width:0;overflow:hidden}.FolderSidebar-module__foldersContainer__zdBVU{position:relative;width:100%}.FolderSidebar-module__uploadButton__QQUid .FolderSidebar-module__ant-btn__LXAXm,.FolderSidebar-module__uploadButton__QQUid .ant-btn{display:flex;align-items:center;justify-content:center;gap:3px}.FolderSidebar-module__buttonWrapper__a9Qi5{margin-bottom:24px;display:flex;gap:4px}.FolderSidebar-module__buttonWrapper__a9Qi5>:first-child{flex:1;height:40px;padding-left:10px}.FolderSidebar-module__buttonWrapper__a9Qi5>:last-child{width:40px;height:40px;flex-shrink:0}.FolderSidebar-module__uploadByURLButton__epMiC.ant-btn.ant-btn-icon-only{width:40px;min-width:40px;height:40px;padding:0;flex-shrink:0}.FolderSidebar-module__uploadButtonIcon__mWQmq{font-size:20px}.FolderSidebar-module__uploadButtonTitle__wk_o6{line-height:1em}.FolderSidebar-module__emptyFolderContainer__WK6tx{user-select:none;cursor:default;color:var(--colorTextTertiary)}.FolderSidebar-module__folderItemContainer__byl5b{width:100%;display:flex;align-items:center;justify-content:space-between;padding:2px 0;min-width:0}.FolderSidebar-module__lockedTabIcon__gYKRY{position:relative;display:inline-flex;opacity:.55}.FolderSidebar-module__lockedTabLock__rbkfX{position:absolute;right:-4px;bottom:-2px;opacity:1;border-radius:100%;background-color:var(--colorBgContainer)}.FolderSidebar-module__lockedTabLabel__gvifJ{opacity:.55}`, "",{"version":3,"sources":["webpack://./src/components/FolderSidebar/FolderSidebar.module.scss"],"names":[],"mappings":"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","sourcesContent":[".button:global(.ant-btn.ant-btn-icon-only) {\r\n padding: calc(var(--paddingXXS) * 1px) calc(var(--paddingSM) * 1px);\r\n cursor: pointer;\r\n color: var(--colorTextSecondary);\r\n display: flex;\r\n gap: calc(var(--marginXS) * 1px);\r\n align-items: center;\r\n justify-content: center;\r\n border-radius: calc(var(--borderRadiusSM) * 1px);\r\n transition: all var(--motionDurationFast);\r\n box-shadow: none;\r\n\r\n border: none;\r\n width: 32px;\r\n height: 32px;\r\n\r\n &:hover {\r\n background-color: var(--colorBgLayout);\r\n color: inherit;\r\n }\r\n}\r\n\r\n.button:hover {\r\n background-color: var(--colorBgContainer);\r\n color: var(--colorPrimary);\r\n}\r\n\r\n.foldersTitle {\r\n display: flex;\r\n align-items: center;\r\n flex: 1;\r\n cursor: pointer;\r\n}\r\n\r\n.folderActions {\r\n position: absolute;\r\n top: 4px; /* Выравниваем по заголовку Folders */\r\n right: 4px;\r\n display: flex;\r\n align-items: center;\r\n gap: 4px;\r\n z-index: 10;\r\n\r\n .button.ant-btn.ant-btn-icon-only {\r\n padding: calc(var(--paddingXXS) * 1px) calc(var(--paddingSM) * 1px);\r\n cursor: pointer;\r\n color: var(--colorTextSecondary);\r\n display: flex;\r\n gap: calc(var(--marginXS) * 1px);\r\n align-items: center;\r\n justify-content: center;\r\n border-radius: calc(var(--borderRadiusSM) * 1px);\r\n transition: all var(--motionDurationFast);\r\n box-shadow: none;\r\n\r\n border: none;\r\n width: 32px;\r\n height: 32px;\r\n\r\n &:hover {\r\n background-color: var(--colorBgLayout);\r\n color: inherit;\r\n }\r\n }\r\n}\r\n\r\n.customExpandIcon {\r\n display: inline-flex;\r\n align-items: center;\r\n justify-content: center;\r\n width: 16px;\r\n height: 16px;\r\n margin-right: 8px;\r\n cursor: pointer;\r\n color: #666;\r\n font-size: 10px;\r\n transition: transform 0.2s ease;\r\n}\r\n\r\n.customExpandIcon:hover {\r\n color: var(--colorPrimary);\r\n}\r\n\r\n.fileCount {\r\n display: inline-flex;\r\n align-items: center;\r\n justify-content: center;\r\n min-width: 20px;\r\n height: 100%;\r\n padding: 0 6px;\r\n margin-left: 8px;\r\n color: #8D8D8D;\r\n font-size: 14px;\r\n font-weight: 500;\r\n transition: all 0.2s ease;\r\n white-space: nowrap;\r\n cursor: default;\r\n flex-shrink: 0; /* Запрещаем сжатие счетчика */\r\n margin-right: 10px;\r\n}\r\n\r\n// .fileCount:hover {\r\n// border-color: var(--colorPrimary);\r\n// color: var(--colorPrimary);\r\n// }\r\n\r\n:global(.ant-tree .ant-tree-node-content-wrapper.ant-tree-node-selected) {\r\n background-color: transparent !important;\r\n}\r\n\r\n/* :global(.ant-tree .ant-tree-node-content-wrapper.ant-tree-node-selected):hover {\r\n color: red !important;\r\n} */\r\n\r\n/* Стили для выделения текста в выбранной папке */\r\n.folderMenu :global(.ant-tree-treenode-selected .folder-label span),\r\n.folderMenu :global(.ant-tree .ant-tree-node-content-wrapper.ant-tree-node-selected .folderLabelItem),\r\n.folderMenu :global(.ant-tree-treenode-selected .folderLabelItem),\r\n.folderMenu :global(.ant-tree-node-selected .folderLabelItem) {\r\n font-weight: 600 !important;\r\n}\r\n\r\n/* Стили для иконки в выбранной папке */\r\n/* .folderMenu :global(.ant-tree-treenode-selected .folderIcon),\r\n.folderMenu :global(.ant-tree-node-selected .folderIcon) {\r\n color: red !important;\r\n} */\r\n\r\n/* CSS переменные для упрощения расчетов */\r\n\r\n.uploadButton {\r\n width: 100%;\r\n justify-content: flex-start;\r\n\r\n & button:hover {\r\n background-color: var(--colorPrimaryHover) !important;\r\n }\r\n}\r\n\r\n.folderMenu {\r\n padding-left: 0;\r\n padding-right: 0; /* Место для кнопки справа */\r\n}\r\n\r\n.folderMenu :global(.ant-tree-treenode) {\r\n display: flex;\r\n align-items: center;\r\n justify-content: space-between;\r\n padding: 4px 0;\r\n border-radius: 4px;\r\n transition: background-color 0.2s ease;\r\n width: 100%;\r\n margin-bottom: 0;\r\n}\r\n\r\n.folderMenu :global(.ant-tree-node-content-wrapper) {\r\n flex: 1;\r\n /* display: flex; */\r\n align-items: center;\r\n padding: 0;\r\n /* border-radius: 4px; */\r\n transition: background-color 0.2s ease;\r\n}\r\n\r\n.folderMenu :global(.ant-tree-node-content-wrapper:hover) {\r\n background-color: transparent;\r\n}\r\n\r\n.folderMenu :global(.ant-tree-switcher) {\r\n height: 24px;\r\n width: 24px;\r\n margin-top: 5px;\r\n display: flex !important;\r\n align-items: center;\r\n justify-content: center;\r\n transition: color 0.2s ease;\r\n flex-shrink: 0; /* Запрещаем сжатие переключателя */\r\n}\r\n\r\n.folderMenu :global(.ant-tree-switcher-noop) {\r\n width: 24px;\r\n}\r\n\r\n/* Стили для линий дерева */\r\n.folderMenu :global(.ant-tree-switcher-line-icon) {\r\n color: #d9d9d9;\r\n}\r\n\r\n/* Улучшение отображения folder-item-container */\r\n.folderMenu .folderItemContainer {\r\n width: 100%;\r\n display: flex;\r\n align-items: center;\r\n justify-content: space-between;\r\n padding: 2px 0;\r\n min-width: 0; /* Позволяет flex-элементам сжиматься */\r\n}\r\n\r\n.folderMenu :global(.folder-label) {\r\n display: flex;\r\n align-items: center;\r\n flex: 1;\r\n color: #595959;\r\n font-size: 14px;\r\n min-width: 0;\r\n overflow: hidden;\r\n}\r\n\r\n/* Стили для корневого элемента Folders */\r\n.folderMenu :global(.ant-tree-treenode[data-key='folders']) {\r\n border-bottom: 1px solid var(--colorBorderSecondary);\r\n margin-bottom: 8px;\r\n padding-bottom: 8px;\r\n}\r\n\r\n.folderMenu :global(.ant-tree-treenode[data-key='folders'].ant-tree-treenode-selected) {\r\n background-color: transparent !important;\r\n}\r\n\r\n.folderMenu :global(.ant-tree-treenode[data-key='folders'] .ant-tree-node-content-wrapper) {\r\n padding: 0;\r\n}\r\n\r\n.folderMenu :global(.ant-tree-treenode[data-key='folders'] .ant-tree-node-content-wrapper:hover) {\r\n background-color: transparent !important;\r\n}\r\n\r\n/* Стили для ellipsis - удаляем max-width для гибкости */\r\n.folderMenu :global(.ellipsis) {\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n white-space: nowrap;\r\n flex: 1;\r\n min-width: 0;\r\n}\r\n\r\n/* Стили для пустого состояния */\r\n.folderMenu .emptyFolderContainer {\r\n padding: 20px;\r\n text-align: center;\r\n}\r\n\r\n/* Убираем отступы у корневого узла */\r\n.folderMenu :global(.ant-tree > .ant-tree-treenode) {\r\n padding-left: 0 !important;\r\n}\r\n.folderIcon {\r\n margin-right: 8px;\r\n font-size: 18px;\r\n flex-shrink: 0; /* Запрещаем сжатие иконки */\r\n}\r\n\r\n.folderLabelItem {\r\n font-size: 14px;\r\n white-space: nowrap; /* Запрещаем перенос строк */\r\n overflow: hidden; /* Скрываем переполнение */\r\n text-overflow: ellipsis; /* Показываем троеточие */\r\n flex: 1; /* Занимает доступное место */\r\n min-width: 0; /* Позволяет сжиматься */\r\n user-select: none;\r\n}\r\n\r\n.foldersTitleItem {\r\n display: flex;\r\n align-items: center;\r\n flex: 1;\r\n cursor: pointer;\r\n min-width: 0; /* Позволяет сжиматься */\r\n overflow: hidden; /* Скрываем переполнение */\r\n}\r\n\r\n/* .foldersTitleItem .folderLabelItem {\r\n font-weight: 500;\r\n color: #262626;\r\n} */\r\n\r\n/* Класс для заголовка папок */\r\n.folderLabel {\r\n display: flex;\r\n align-items: center;\r\n flex: 1;\r\n min-width: 0;\r\n overflow: hidden;\r\n}\r\n\r\n.foldersContainer {\r\n position: relative;\r\n width: 100%;\r\n}\r\n\r\n/* Дополнительные стили для улучшения визуала */\r\n/* .folderMenu :global(.ant-tree-treenode:hover .folder-label span) {\r\n color: #1890ff;\r\n} */\r\n\r\n/* Стили для дивайдера между папками */\r\n\r\n\r\n.uploadButton .ant-btn,\r\n.uploadButton :global(.ant-btn) {\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n gap: 3px;\r\n}\r\n/* .folderMenu :global(.ant-tree-treenode-selected) .folderLabelItem {\r\n color: #1890ff !important;\r\n} */\r\n\r\n// .folderMenu :global(.ant-tree-treenode-selected) .folderLabel .folderLabelItem,\r\n// .folderMenu :global(.ant-tree-treenode-selected) .folderLabel .folderIcon,\r\n// .folderMenu :global(.ant-tree-treenode-selected) .folderLabelItem {\r\n// color: var(--colorLink);\r\n// }\r\n\r\n\r\n.buttonWrapper {\r\n // overflow: hidden;\r\n margin-bottom: 24px;\r\n display: flex;\r\n gap: 4px;\r\n // border-radius: calc(var(--borderRadius) * 1px);\r\n \r\n // Левая кнопка занимает всю доступную ширину\r\n > :first-child {\r\n flex: 1;\r\n height: 40px;\r\n padding-left: 10px;\r\n }\r\n \r\n // Правая кнопка строго 40px\r\n > :last-child {\r\n width: 40px;\r\n height: 40px;\r\n flex-shrink: 0;\r\n }\r\n}\r\n\r\n/* Кнопка «Загрузить по URL» — icon-only, поэтому хост-приложение может задать ей\r\n свои размеры глобальным правилом `.ant-btn.ant-btn-icon-only` (в emailmaker это\r\n --formControlHeight: 34) и она становится ниже кнопки «Загрузить файл».\r\n Три класса в селекторе перебивают такие правила без !important. */\r\n.uploadByURLButton:global(.ant-btn.ant-btn-icon-only) {\r\n width: 40px;\r\n min-width: 40px;\r\n height: 40px;\r\n padding: 0;\r\n flex-shrink: 0;\r\n}\r\n\r\n.uploadButtonIcon {\r\n font-size: 20px;\r\n}\r\n\r\n.uploadButtonTitle {\r\n line-height: 1em;\r\n}\r\n\r\n.emptyFolderContainer {\r\n user-select: none;\r\n cursor: default;\r\n color: var(--colorTextTertiary);\r\n}\r\n\r\n.folderItemContainer {\r\n width: 100%;\r\n display: flex;\r\n align-items: center;\r\n justify-content: space-between;\r\n padding: 2px 0;\r\n min-width: 0; /* Позволяет flex-элементам сжиматься */\r\n}\r\n\r\n/** Tab locked by the host (e.g. by subscription plan): still shown, but badged with a lock. */\r\n.lockedTabIcon {\r\n position: relative;\r\n display: inline-flex;\r\n opacity: 0.55;\r\n}\r\n\r\n.lockedTabLock {\r\n position: absolute;\r\n right: -4px;\r\n bottom: -2px;\r\n opacity: 1;\r\n border-radius: 100%;\r\n background-color: var(--colorBgContainer);\r\n}\r\n\r\n.lockedTabLabel {\r\n opacity: 0.55;\r\n}\r\n"],"sourceRoot":""}]);
|
|
48463
48482
|
// Exports
|
|
48464
48483
|
___CSS_LOADER_EXPORT___.locals = {
|
|
48465
48484
|
"button": `FolderSidebar-module__button__Yf2rX`,
|
|
@@ -48484,7 +48503,10 @@ ___CSS_LOADER_EXPORT___.locals = {
|
|
|
48484
48503
|
"uploadByURLButton": `FolderSidebar-module__uploadByURLButton__epMiC`,
|
|
48485
48504
|
"uploadByUrlButton": `FolderSidebar-module__uploadByURLButton__epMiC`,
|
|
48486
48505
|
"uploadButtonIcon": `FolderSidebar-module__uploadButtonIcon__mWQmq`,
|
|
48487
|
-
"uploadButtonTitle": `FolderSidebar-module__uploadButtonTitle__wk_o6
|
|
48506
|
+
"uploadButtonTitle": `FolderSidebar-module__uploadButtonTitle__wk_o6`,
|
|
48507
|
+
"lockedTabIcon": `FolderSidebar-module__lockedTabIcon__gYKRY`,
|
|
48508
|
+
"lockedTabLock": `FolderSidebar-module__lockedTabLock__rbkfX`,
|
|
48509
|
+
"lockedTabLabel": `FolderSidebar-module__lockedTabLabel__gvifJ`
|
|
48488
48510
|
};
|
|
48489
48511
|
module.exports = ___CSS_LOADER_EXPORT___;
|
|
48490
48512
|
|
|
@@ -51501,6 +51523,8 @@ const FileModals = ({ isModalVisible, handleModalOk, handleModalCancel, form, se
|
|
|
51501
51523
|
}, closeIcon: (0,jsx_runtime.jsx)(icons_.CloseOutlined, { className: FileModals_module["default"].closeIcon }), centered: true, getContainer: getModalContainer, children: [(0,jsx_runtime.jsx)("div", { children: t('Are you sure you want to permanently delete all items from Trash?') }), isLoading && ((0,jsx_runtime.jsxs)("div", { className: FileModals_module["default"].clearTrashProgress, children: [(0,jsx_runtime.jsx)(external_root_antd_commonjs2_antd_commonjs_antd_amd_antd_.Progress, { percent: 99, status: "active", showInfo: false }), (0,jsx_runtime.jsx)("div", { className: FileModals_module["default"].progressText, children: t('Deleting items...') })] }))] })] }));
|
|
51502
51524
|
};
|
|
51503
51525
|
|
|
51526
|
+
// EXTERNAL MODULE: ./src/utils/libraryTabLock.ts
|
|
51527
|
+
var libraryTabLock = __webpack_require__(8546);
|
|
51504
51528
|
// EXTERNAL MODULE: ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!./node_modules/sass-loader/dist/cjs.js!./src/components/FolderSidebar/FolderSidebar.module.scss
|
|
51505
51529
|
var FolderSidebar_module = __webpack_require__(9287);
|
|
51506
51530
|
var FolderSidebar_module_default = /*#__PURE__*/__webpack_require__.n(FolderSidebar_module);
|
|
@@ -51543,6 +51567,7 @@ var FolderSidebar_module_update = injectStylesIntoStyleTag_default()((FolderSide
|
|
|
51543
51567
|
|
|
51544
51568
|
|
|
51545
51569
|
|
|
51570
|
+
|
|
51546
51571
|
const FolderSidebar = (0,external_root_React_commonjs2_react_commonjs_react_amd_react_.memo)((0,external_root_React_commonjs2_react_commonjs_react_amd_react_.forwardRef)(({ selectedFolder, generateMenuItems, onFolderSelect, folders,
|
|
51547
51572
|
// fetchFolders,
|
|
51548
51573
|
fetchChildFolders, handleAddFile, setIsUrlModalVisible, handleCreateFolder, activeLibraryItem, setActiveLibraryItem, }, ref) => {
|
|
@@ -51560,6 +51585,17 @@ fetchChildFolders, handleAddFile, setIsUrlModalVisible, handleCreateFolder, acti
|
|
|
51560
51585
|
const isIconStockEnabled = ((_c = config === null || config === void 0 ? void 0 : config.features) === null || _c === void 0 ? void 0 : _c.enableIconStock) !== false && (!(config === null || config === void 0 ? void 0 : config.enabledTabs) || config.enabledTabs.includes('icons'));
|
|
51561
51586
|
const isImageCodesEnabled = ((_d = config === null || config === void 0 ? void 0 : config.features) === null || _d === void 0 ? void 0 : _d.enableQrBarcodeTab) !== false &&
|
|
51562
51587
|
(!(config === null || config === void 0 ? void 0 : config.enabledTabs) || config.enabledTabs.includes('codes'));
|
|
51588
|
+
/** Wraps a tab icon with a lock badge when the host marked that tab as locked. */
|
|
51589
|
+
const withLockBadge = (0,external_root_React_commonjs2_react_commonjs_react_amd_react_.useCallback)((icon, tab) => {
|
|
51590
|
+
if (!(0,libraryTabLock/* isLibraryTabLocked */.v)(tab, config)) {
|
|
51591
|
+
return icon;
|
|
51592
|
+
}
|
|
51593
|
+
return ((0,jsx_runtime.jsxs)("span", { className: FolderSidebar_FolderSidebar_module.lockedTabIcon, children: [icon, (0,jsx_runtime.jsx)(icons_amd_untitledui_icons_.Lock01, { size: 12, strokeWidth: 2.5, className: FolderSidebar_FolderSidebar_module.lockedTabLock })] }));
|
|
51594
|
+
}, [config]);
|
|
51595
|
+
/** Dims the tab label the same way as its icon, so a locked tab reads as one muted item. */
|
|
51596
|
+
const withLockedLabel = (0,external_root_React_commonjs2_react_commonjs_react_amd_react_.useCallback)((label, tab) => (0,libraryTabLock/* isLibraryTabLocked */.v)(tab, config) ?
|
|
51597
|
+
(0,jsx_runtime.jsx)("span", { className: FolderSidebar_FolderSidebar_module.lockedTabLabel, children: label })
|
|
51598
|
+
: label, [config]);
|
|
51563
51599
|
// кастомные иконки не используются в этом блоке
|
|
51564
51600
|
const getAllFolderKeys = (0,external_root_React_commonjs2_react_commonjs_react_amd_react_.useCallback)((menuItems) => {
|
|
51565
51601
|
const keys = [];
|
|
@@ -51769,37 +51805,37 @@ fetchChildFolders, handleAddFile, setIsUrlModalVisible, handleCreateFolder, acti
|
|
|
51769
51805
|
const libraryMenuItems = [
|
|
51770
51806
|
{
|
|
51771
51807
|
key: constants/* MY_FILES */.Zz,
|
|
51772
|
-
label: t('My files'),
|
|
51773
|
-
icon: (0,jsx_runtime.jsx)(icons_amd_untitledui_icons_.Image03, { size: 20, strokeWidth: config === null || config === void 0 ? void 0 : config.iconStrokeWidth }),
|
|
51808
|
+
label: withLockedLabel(t('My files'), constants/* MY_FILES */.Zz),
|
|
51809
|
+
icon: withLockBadge((0,jsx_runtime.jsx)(icons_amd_untitledui_icons_.Image03, { size: 20, strokeWidth: config === null || config === void 0 ? void 0 : config.iconStrokeWidth }), constants/* MY_FILES */.Zz),
|
|
51774
51810
|
},
|
|
51775
51811
|
{
|
|
51776
51812
|
key: constants/* GIF */.xI,
|
|
51777
|
-
label: t('GIF'),
|
|
51778
|
-
icon: (0,jsx_runtime.jsx)(icons_amd_untitledui_icons_.PlaySquare, { size: 20, strokeWidth: config === null || config === void 0 ? void 0 : config.iconStrokeWidth }),
|
|
51813
|
+
label: withLockedLabel(t('GIF'), constants/* GIF */.xI),
|
|
51814
|
+
icon: withLockBadge((0,jsx_runtime.jsx)(icons_amd_untitledui_icons_.PlaySquare, { size: 20, strokeWidth: config === null || config === void 0 ? void 0 : config.iconStrokeWidth }), constants/* GIF */.xI),
|
|
51779
51815
|
disabled: !isGifEnabled,
|
|
51780
51816
|
},
|
|
51781
51817
|
{
|
|
51782
51818
|
key: constants/* STOCK_IMAGES */.SM,
|
|
51783
|
-
label: t('Stock images'),
|
|
51784
|
-
icon: (0,jsx_runtime.jsx)(icons_amd_untitledui_icons_.Colors, { size: 20, strokeWidth: config === null || config === void 0 ? void 0 : config.iconStrokeWidth }),
|
|
51819
|
+
label: withLockedLabel(t('Stock images'), constants/* STOCK_IMAGES */.SM),
|
|
51820
|
+
icon: withLockBadge((0,jsx_runtime.jsx)(icons_amd_untitledui_icons_.Colors, { size: 20, strokeWidth: config === null || config === void 0 ? void 0 : config.iconStrokeWidth }), constants/* STOCK_IMAGES */.SM),
|
|
51785
51821
|
disabled: !isStockImagesEnabled,
|
|
51786
51822
|
},
|
|
51787
51823
|
{
|
|
51788
51824
|
key: constants/* ICONS */.Ze,
|
|
51789
|
-
label: t('Icons'),
|
|
51790
|
-
icon: (0,jsx_runtime.jsx)(icons_amd_untitledui_icons_.ThumbsUp, { size: 20, strokeWidth: config === null || config === void 0 ? void 0 : config.iconStrokeWidth }),
|
|
51825
|
+
label: withLockedLabel(t('Icons'), constants/* ICONS */.Ze),
|
|
51826
|
+
icon: withLockBadge((0,jsx_runtime.jsx)(icons_amd_untitledui_icons_.ThumbsUp, { size: 20, strokeWidth: config === null || config === void 0 ? void 0 : config.iconStrokeWidth }), constants/* ICONS */.Ze),
|
|
51791
51827
|
disabled: !isIconStockEnabled,
|
|
51792
51828
|
},
|
|
51793
51829
|
{
|
|
51794
51830
|
key: constants/* IMAGE_CODES */.jY,
|
|
51795
|
-
label: t('QR & Barcode'),
|
|
51796
|
-
icon: (0,jsx_runtime.jsx)(icons_amd_untitledui_icons_.QrCode02, { size: 20, strokeWidth: config === null || config === void 0 ? void 0 : config.iconStrokeWidth }),
|
|
51831
|
+
label: withLockedLabel(t('QR & Barcode'), constants/* IMAGE_CODES */.jY),
|
|
51832
|
+
icon: withLockBadge((0,jsx_runtime.jsx)(icons_amd_untitledui_icons_.QrCode02, { size: 20, strokeWidth: config === null || config === void 0 ? void 0 : config.iconStrokeWidth }), constants/* IMAGE_CODES */.jY),
|
|
51797
51833
|
disabled: !isImageCodesEnabled,
|
|
51798
51834
|
},
|
|
51799
51835
|
{
|
|
51800
51836
|
key: constants.AI,
|
|
51801
|
-
label: t('AI'),
|
|
51802
|
-
icon: (0,jsx_runtime.jsx)(icons_amd_untitledui_icons_.Stars02, { size: 20, strokeWidth: config === null || config === void 0 ? void 0 : config.iconStrokeWidth }),
|
|
51837
|
+
label: withLockedLabel(t('AI'), constants.AI),
|
|
51838
|
+
icon: withLockBadge((0,jsx_runtime.jsx)(icons_amd_untitledui_icons_.Stars02, { size: 20, strokeWidth: config === null || config === void 0 ? void 0 : config.iconStrokeWidth }), constants.AI),
|
|
51803
51839
|
disabled: !(config === null || config === void 0 ? void 0 : config.sseQuery),
|
|
51804
51840
|
},
|
|
51805
51841
|
].filter(item => !item.disabled);
|
|
@@ -51818,8 +51854,14 @@ fetchChildFolders, handleAddFile, setIsUrlModalVisible, handleCreateFolder, acti
|
|
|
51818
51854
|
await (fetchChildFolders === null || fetchChildFolders === void 0 ? void 0 : fetchChildFolders(key === 'folders' ? null : key));
|
|
51819
51855
|
}, [onFolderSelect, activeLibraryItem, setActiveLibraryItem, fetchChildFolders]);
|
|
51820
51856
|
const handleOpenLibraryChange = (0,external_root_React_commonjs2_react_commonjs_react_amd_react_.useCallback)(({ key }) => {
|
|
51857
|
+
var _a;
|
|
51858
|
+
// A locked tab stays closed: the host decides what to show instead (e.g. an upsell).
|
|
51859
|
+
if ((0,libraryTabLock/* isLibraryTabLocked */.v)(key, config)) {
|
|
51860
|
+
(_a = config === null || config === void 0 ? void 0 : config.onLockedTabClick) === null || _a === void 0 ? void 0 : _a.call(config, key);
|
|
51861
|
+
return;
|
|
51862
|
+
}
|
|
51821
51863
|
setActiveLibraryItem(key);
|
|
51822
|
-
}, [setActiveLibraryItem]);
|
|
51864
|
+
}, [config, setActiveLibraryItem]);
|
|
51823
51865
|
const handleTreeExpand = (0,external_root_React_commonjs2_react_commonjs_react_amd_react_.useCallback)(async (keys, info) => {
|
|
51824
51866
|
var _a;
|
|
51825
51867
|
setExpandedKeys(keys);
|
package/package.json
CHANGED
package/types.d.ts
CHANGED
|
@@ -463,6 +463,14 @@ export interface Config {
|
|
|
463
463
|
/** Включить удаление */
|
|
464
464
|
enableDelete?: boolean;
|
|
465
465
|
};
|
|
466
|
+
/**
|
|
467
|
+
* Library tabs shown with a lock badge instead of being usable — for hosts that gate features
|
|
468
|
+
* by subscription plan. Clicking a locked tab fires `onLockedTabClick` and does not open it.
|
|
469
|
+
* Absent or empty: nothing is locked (previous behaviour).
|
|
470
|
+
*/
|
|
471
|
+
lockedTabs?: LibraryMenuKey[];
|
|
472
|
+
/** Called when the user clicks a tab listed in `lockedTabs`, e.g. to show an upsell dialog. */
|
|
473
|
+
onLockedTabClick?: (tab: LibraryMenuKey) => void;
|
|
466
474
|
dataProcessingMode?: 'server' | 'client' | 'auto';
|
|
467
475
|
enableClientSideProcessing?: boolean;
|
|
468
476
|
disablePagination?: boolean;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { LibraryMenuKey } from '../types';
|
|
2
|
+
/** Subset of the file manager config that controls locked library tabs. */
|
|
3
|
+
export interface LibraryTabLockConfig {
|
|
4
|
+
/**
|
|
5
|
+
* Tabs the host wants shown with a lock badge instead of being usable, e.g. when the user's
|
|
6
|
+
* plan does not include stock images. Absent or empty list means nothing is locked, so hosts
|
|
7
|
+
* that never set it keep the previous behaviour.
|
|
8
|
+
*/
|
|
9
|
+
lockedTabs?: LibraryMenuKey[];
|
|
10
|
+
}
|
|
11
|
+
export declare function isLibraryTabLocked(tab: LibraryMenuKey, config: LibraryTabLockConfig | undefined): boolean;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|