@brftech/filex-core 0.40.0 → 0.41.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 (124) hide show
  1. package/README.md +32 -25
  2. package/dist/ArchiveViewer-BNqukFg8.js +124 -0
  3. package/dist/ArchiveViewer-BNqukFg8.js.map +1 -0
  4. package/dist/CsvViewer-ii_-MgmG.js +141 -0
  5. package/dist/CsvViewer-ii_-MgmG.js.map +1 -0
  6. package/dist/{DrawioViewer-BNALOB04.js → DrawioViewer-B2tuu4rX.js} +48 -42
  7. package/dist/DrawioViewer-B2tuu4rX.js.map +1 -0
  8. package/dist/EpubViewer-p4B8iiWb.js +163 -0
  9. package/dist/EpubViewer-p4B8iiWb.js.map +1 -0
  10. package/dist/IpynbViewer-D_qYRJhu.js +184 -0
  11. package/dist/IpynbViewer-D_qYRJhu.js.map +1 -0
  12. package/dist/MermaidViewer-3ZkfNM8v.js +137 -0
  13. package/dist/MermaidViewer-3ZkfNM8v.js.map +1 -0
  14. package/dist/PsdViewer-CuV-OPSd.js +122 -0
  15. package/dist/PsdViewer-CuV-OPSd.js.map +1 -0
  16. package/dist/TiffViewer-BLeoF4Be.js +142 -0
  17. package/dist/TiffViewer-BLeoF4Be.js.map +1 -0
  18. package/dist/Viewer3D-DHhhU76E.js +75 -0
  19. package/dist/Viewer3D-DHhhU76E.js.map +1 -0
  20. package/dist/filex-core.js +218 -20361
  21. package/dist/filex-core.js.map +1 -1
  22. package/dist/filex-core.umd.cjs +61 -62
  23. package/dist/filex-core.umd.cjs.map +1 -1
  24. package/dist/index-BraG7Cz4.js +26664 -0
  25. package/dist/index-BraG7Cz4.js.map +1 -0
  26. package/dist/index.d.ts +4243 -858
  27. package/dist/style.css +1 -1
  28. package/package.json +1 -1
  29. package/src/FileExplorer.vue +2154 -506
  30. package/src/components/AdvancedSearch.vue +870 -0
  31. package/src/components/Breadcrumb.vue +191 -19
  32. package/src/components/CommandPalette.vue +66 -22
  33. package/src/components/ConnectionsPanel.vue +6 -2
  34. package/src/components/ContextMenu.vue +39 -2
  35. package/src/components/EncryptedFolderModal.vue +31 -25
  36. package/src/components/FilePane.vue +939 -0
  37. package/src/components/FilterBar.vue +568 -72
  38. package/src/components/GalleryView.vue +162 -30
  39. package/src/components/GridView.vue +322 -58
  40. package/src/components/HomeView.vue +331 -0
  41. package/src/components/InspectorPanel.vue +296 -53
  42. package/src/components/ListView.vue +1158 -167
  43. package/src/components/NFSExportsPanel.vue +7 -4
  44. package/src/components/OnboardingTour.vue +156 -33
  45. package/src/components/QuickLook.vue +26 -1
  46. package/src/components/RecentlyOpened.vue +17 -2
  47. package/src/components/S3KeysPanel.vue +7 -4
  48. package/src/components/SSHKeysPanel.vue +7 -4
  49. package/src/components/ShortcutSettings.vue +6 -2
  50. package/src/components/ShortcutsHelp.vue +4 -1
  51. package/src/components/SideNav.vue +206 -140
  52. package/src/components/StorageFields.vue +19 -1
  53. package/src/components/TabBar.vue +87 -1
  54. package/src/components/TagPicker.vue +77 -6
  55. package/src/components/ThemeGallery.vue +13 -198
  56. package/src/components/ThemePalette.vue +244 -0
  57. package/src/components/TimeZoneDialog.vue +127 -0
  58. package/src/components/TimeZonePicker.vue +696 -0
  59. package/src/components/TokensPanel.vue +16 -4
  60. package/src/components/Toolbar.vue +953 -465
  61. package/src/components/ViewSwitcher.vue +9 -4
  62. package/src/composables/useConnections.ts +35 -4
  63. package/src/composables/useExplorerTimeZone.ts +85 -0
  64. package/src/composables/useFileApi.ts +53 -4
  65. package/src/composables/useLocale.ts +365 -25
  66. package/src/index.ts +177 -3
  67. package/src/lib/actionIcons.ts +330 -0
  68. package/src/lib/advSearch.ts +162 -0
  69. package/src/lib/dateGroups.ts +197 -0
  70. package/src/lib/destinationTree.ts +235 -0
  71. package/src/lib/downloadSelection.ts +154 -0
  72. package/src/lib/fileFilters.ts +319 -12
  73. package/src/lib/fileIcons.ts +299 -5
  74. package/src/lib/filePreview.ts +605 -0
  75. package/src/lib/listing.ts +72 -0
  76. package/src/lib/shareTtl.ts +11 -1
  77. package/src/lib/sortOrder.ts +459 -0
  78. package/src/lib/themes.ts +151 -116
  79. package/src/lib/timezone.ts +456 -0
  80. package/src/lib/uiProfile.ts +82 -0
  81. package/src/lib/viewPrefs.ts +1036 -0
  82. package/src/locales/en.ts +414 -26
  83. package/src/locales/tr.ts +407 -26
  84. package/src/modals/ConvertModal.vue +23 -3
  85. package/src/modals/DestinationPickerModal.vue +341 -0
  86. package/src/modals/Modal.vue +18 -4
  87. package/src/modals/NewDocumentModal.vue +525 -0
  88. package/src/modals/NewFolderModal.vue +15 -9
  89. package/src/modals/PermissionsModal.vue +543 -473
  90. package/src/modals/PreviewModal.vue +516 -156
  91. package/src/styles/base.css +5409 -8
  92. package/src/styles/variables.css +139 -65
  93. package/src/types/Connections.ts +9 -0
  94. package/src/types/ExplorerConfig.ts +144 -39
  95. package/src/types/FileNode.ts +28 -0
  96. package/src/viewers/ArchiveViewer.vue +46 -8
  97. package/src/viewers/CsvViewer.vue +19 -2
  98. package/src/viewers/DrawioViewer.vue +12 -1
  99. package/src/viewers/EpubViewer.vue +50 -6
  100. package/src/viewers/IpynbViewer.vue +19 -2
  101. package/src/viewers/MermaidViewer.vue +20 -3
  102. package/src/viewers/PdfViewer.vue +24 -4
  103. package/src/viewers/PsdViewer.vue +28 -4
  104. package/src/viewers/TiffViewer.vue +19 -2
  105. package/src/viewers/Viewer3D.vue +36 -2
  106. package/dist/ArchiveViewer-Cdfv9LFC.js +0 -99
  107. package/dist/ArchiveViewer-Cdfv9LFC.js.map +0 -1
  108. package/dist/CsvViewer-CqWeV8VO.js +0 -131
  109. package/dist/CsvViewer-CqWeV8VO.js.map +0 -1
  110. package/dist/DrawioViewer-BNALOB04.js.map +0 -1
  111. package/dist/EpubViewer-BPmlImG7.js +0 -145
  112. package/dist/EpubViewer-BPmlImG7.js.map +0 -1
  113. package/dist/IpynbViewer-CDlQmuCV.js +0 -175
  114. package/dist/IpynbViewer-CDlQmuCV.js.map +0 -1
  115. package/dist/MermaidViewer-sfZWdR-d.js +0 -127
  116. package/dist/MermaidViewer-sfZWdR-d.js.map +0 -1
  117. package/dist/PsdViewer-DwuySZsb.js +0 -112
  118. package/dist/PsdViewer-DwuySZsb.js.map +0 -1
  119. package/dist/TiffViewer-BDQ3d3CQ.js +0 -132
  120. package/dist/TiffViewer-BDQ3d3CQ.js.map +0 -1
  121. package/dist/Viewer3D-CJJJgkuv.js +0 -60
  122. package/dist/Viewer3D-CJJJgkuv.js.map +0 -1
  123. package/src/components/SecondaryPane.vue +0 -447
  124. package/src/modals/ShareModal.vue +0 -139
@@ -1,139 +0,0 @@
1
- <script setup lang="ts">
2
- import { computed, ref, watch } from 'vue';
3
- import type { LocaleCode } from '../types/ExplorerConfig';
4
- import type { ShareInfo } from '../types/FileNode';
5
- import { useLocale } from '../composables/useLocale';
6
- import { shareCliCommand } from '../lib/shareCli';
7
- import { clampExpiryDate, expiryInputMax, ttlCeilingHint, validUntilLine } from '../lib/shareTtl';
8
- import Modal from './Modal.vue';
9
-
10
- const props = defineProps<{
11
- open: boolean;
12
- locale: LocaleCode;
13
- share?: (ShareInfo & { url: string; filename?: string }) | null;
14
- /** Server ceiling on a new link's life in days (0/undefined = none). */
15
- shareMaxTtlDays?: number;
16
- }>();
17
-
18
- const emit = defineEmits<{
19
- (e: 'close'): void;
20
- (
21
- e: 'submit',
22
- payload: { password: boolean; expires_at: string | null; max_downloads: number | null },
23
- ): void;
24
- (e: 'toast', msg: string): void;
25
- }>();
26
-
27
- const { t } = useLocale(() => props.locale);
28
-
29
- const usePin = ref(false);
30
- const expiresAt = ref<string>('');
31
- const maxDownloads = ref<string>('');
32
-
33
- watch(() => props.open, (v) => {
34
- if (v) {
35
- usePin.value = false;
36
- expiresAt.value = '';
37
- maxDownloads.value = '';
38
- }
39
- });
40
-
41
- // The picker is capped at the server's ceiling and the value is clamped once
42
- // more on submit — the server clamps too, but asking for a date it will
43
- // refuse is how the user ends up with a link that says one thing and does
44
- // another.
45
- const expiryMax = computed(() => expiryInputMax(props.shareMaxTtlDays));
46
- const ttlHint = computed(() => ttlCeilingHint(props.shareMaxTtlDays, props.locale === 'tr' ? 'tr' : 'en'));
47
- const validUntil = computed(() =>
48
- props.share ? validUntilLine(props.share.expires_at ?? null, props.locale === 'tr' ? 'tr' : 'en') : '',
49
- );
50
-
51
- function submit() {
52
- const chosen = expiresAt.value ? new Date(expiresAt.value) : null;
53
- emit('submit', {
54
- password: usePin.value,
55
- expires_at: clampExpiryDate(chosen, props.shareMaxTtlDays).iso,
56
- max_downloads: maxDownloads.value ? Number(maxDownloads.value) : null,
57
- });
58
- }
59
-
60
- async function copy(value: string, toast: string) {
61
- try {
62
- await navigator.clipboard.writeText(value);
63
- emit('toast', toast);
64
- } catch {
65
- /* no-op */
66
- }
67
- }
68
-
69
- // One-line curl that downloads the shared file straight onto a server.
70
- // Built by the shared helper so this dialog and the "Share / Permissions"
71
- // panel cannot drift into two different commands.
72
- const cliCommand = computed(() =>
73
- shareCliCommand(props.share ? { url: props.share.url, pin: props.share.password_pin, filename: props.share.filename } : null),
74
- );
75
- </script>
76
-
77
- <template>
78
- <Modal :open="open" :title="t('modal.share.title')" size="md" @close="emit('close')">
79
- <template v-if="!share">
80
- <form class="fe-form" @submit.prevent="submit">
81
- <label class="fe-form__row">
82
- <input v-model="usePin" type="checkbox" />
83
- <span>{{ t('modal.share.pin') }}</span>
84
- </label>
85
- <label class="fe-form__row fe-form__row--stack">
86
- <span>{{ t('modal.share.expires') }}</span>
87
- <input v-model="expiresAt" type="datetime-local" class="fe-input" :max="expiryMax" />
88
- <small v-if="ttlHint" class="fe-form__hint">{{ ttlHint }}</small>
89
- </label>
90
- <label class="fe-form__row fe-form__row--stack">
91
- <span>{{ t('modal.share.max_downloads') }}</span>
92
- <input v-model="maxDownloads" type="number" min="1" class="fe-input" />
93
- </label>
94
- </form>
95
- </template>
96
- <template v-else>
97
- <div class="fe-share-result">
98
- <div class="fe-share-result__row fe-share-result__row--note">
99
- <small>{{ validUntil }}<template v-if="share.expiry_clamped"> {{ t('modal.share.limit_applied') }}</template></small>
100
- </div>
101
- <div class="fe-share-result__row">
102
- <label>Link</label>
103
- <div class="fe-share-result__copy">
104
- <input :value="share.url" readonly class="fe-input" />
105
- <button type="button" class="fe-btn" @click="copy(share.url, t('modal.share.url_copied'))">
106
- {{ t('modal.share.copy') }}
107
- </button>
108
- </div>
109
- </div>
110
- <div v-if="share.password_pin" class="fe-share-result__row">
111
- <label>PIN</label>
112
- <div class="fe-share-result__copy">
113
- <input :value="share.password_pin" readonly class="fe-input fe-input--mono" />
114
- <button type="button" class="fe-btn" @click="copy(share.password_pin, t('modal.share.pin_copied'))">
115
- {{ t('modal.share.copy') }}
116
- </button>
117
- </div>
118
- </div>
119
- <div class="fe-share-result__row">
120
- <label>CLI</label>
121
- <div class="fe-share-result__copy">
122
- <input :value="cliCommand" readonly class="fe-input fe-input--mono" />
123
- <button type="button" class="fe-btn" @click="copy(cliCommand, t('modal.share.cli_copied'))">
124
- {{ t('modal.share.copy') }}
125
- </button>
126
- </div>
127
- </div>
128
- </div>
129
- </template>
130
- <template #actions>
131
- <button type="button" class="fe-btn" @click="emit('close')">
132
- {{ share ? t('modal.share.close') : t('modal.share.cancel') }}
133
- </button>
134
- <button v-if="!share" type="button" class="fe-btn fe-btn--primary" @click="submit">
135
- {{ t('modal.share.create') }}
136
- </button>
137
- </template>
138
- </Modal>
139
- </template>