ptechcore_ui 1.0.25 → 1.0.27

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -712,7 +712,7 @@ import { createContext as createContext2, useContext as useContext2, useEffect a
712
712
 
713
713
  // src/services/api.ts
714
714
  var chooseEnv = localStorage.getItem("env") ?? "prod";
715
- var ADDRESS_IP = chooseEnv === "prod" ? "backend-core.rewise.praedium-tech.com" : "localhost:8000";
715
+ var ADDRESS_IP = chooseEnv === "prod" ? "core.backend-rewise.praedium-tech.com" : "localhost:8000";
716
716
  var ADDRESS_IP_URL = chooseEnv === "prod" ? `https://${ADDRESS_IP}/` : `http://${ADDRESS_IP}/`;
717
717
  var API_URL = `${ADDRESS_IP_URL}api`;
718
718
  var FetchApi = class {
@@ -942,6 +942,7 @@ var SessionProvider = ({ children }) => {
942
942
  activeBusinessEntity,
943
943
  setActiveBusinessEntity,
944
944
  token,
945
+ setToken,
945
946
  login,
946
947
  logout,
947
948
  showAuthModal,
@@ -974,9 +975,8 @@ var UserServices = {
974
975
  deleteUser: (id, token) => FetchApi.delete(`${USERS_API_URL}${id}/`, token),
975
976
  // Obtenir les utilisateurs d'une entité
976
977
  getEntityUsers: (entityId, token) => FetchApi.get(`${API_URL}/core/entities/${entityId}/users/`, token),
977
- // Obtenir les utilisateurs d'une entité
978
- getuserEntitiesAccess: (id, token) => FetchApi.get(`${API_URL}/core/entities/`, token),
979
- // !!! ce n'est pas la bonne url
978
+ // Obtenir les entités auxquelles un utilisateur a accès
979
+ getuserEntitiesAccess: (id, token) => FetchApi.get(`${API_URL}/core/users/${id}/entities/`, token),
980
980
  // Ajouter un utilisateur à une entité
981
981
  addUserToEntity: (entityId, userId, token) => FetchApi.post(`${API_URL}/core/entities/${entityId}/users/`, { user_id: userId }, token),
982
982
  // === Nouvelles méthodes pour le profil utilisateur ===
@@ -1843,7 +1843,7 @@ var RewiseLayout = ({ children, module_name = "Rewise", module_description = "De
1843
1843
  "organizations": "organizations",
1844
1844
  "entities": "entities"
1845
1845
  };
1846
- setSelectedModule(routeMapping[moduleId] || "dashboard");
1846
+ setSelectedModule(routeMapping[moduleId] || moduleId);
1847
1847
  }
1848
1848
  }, [location]);
1849
1849
  const handleThemeChange = (type) => {
@@ -7721,6 +7721,495 @@ var FileManagerContent = ({ className }) => {
7721
7721
  var FileManager = (props) => {
7722
7722
  return /* @__PURE__ */ jsx28(FileManagerProvider, { ...props, children: /* @__PURE__ */ jsx28(FileManagerContent, { className: props.className }) });
7723
7723
  };
7724
+
7725
+ // src/components/common/FileManager/components/EntityFileManager.tsx
7726
+ import React19 from "react";
7727
+ import { Loader2 as Loader22, FolderX, AlertCircle as AlertCircle4, RefreshCw as RefreshCw3 } from "lucide-react";
7728
+
7729
+ // src/components/common/FileManager/hooks/useFileManagerApi.ts
7730
+ import { useState as useState19, useEffect as useEffect13, useCallback as useCallback4 } from "react";
7731
+
7732
+ // src/components/common/FileManager/services/fileManagerApi.ts
7733
+ var API_BASE = "/api/files_manager";
7734
+ var ENTITY_MODEL_MAP = {
7735
+ CLIENT: "accounting.Client",
7736
+ VENDOR: "accounting.Vendor",
7737
+ RFQ: "procurement.RFQ",
7738
+ DEPT: "core.Departments",
7739
+ PROJECT: "core.Project"
7740
+ };
7741
+ async function apiRequest(endpoint, options = {}) {
7742
+ const url = `${API_BASE}${endpoint}`;
7743
+ const headers = {
7744
+ ...options.headers
7745
+ };
7746
+ if (!(options.body instanceof FormData)) {
7747
+ headers["Content-Type"] = "application/json";
7748
+ }
7749
+ const csrfToken = getCsrfToken();
7750
+ if (csrfToken) {
7751
+ headers["X-CSRFToken"] = csrfToken;
7752
+ }
7753
+ const response = await fetch(url, {
7754
+ ...options,
7755
+ headers,
7756
+ credentials: "include"
7757
+ // Inclure les cookies pour l'auth
7758
+ });
7759
+ if (!response.ok) {
7760
+ let errorMessage = `Erreur HTTP ${response.status}`;
7761
+ try {
7762
+ const errorData = await response.json();
7763
+ errorMessage = errorData.detail || errorData.message || errorMessage;
7764
+ } catch {
7765
+ }
7766
+ throw new Error(errorMessage);
7767
+ }
7768
+ if (response.status === 204) {
7769
+ return {};
7770
+ }
7771
+ return response.json();
7772
+ }
7773
+ function getCsrfToken() {
7774
+ const name = "csrftoken";
7775
+ const cookies = document.cookie.split(";");
7776
+ for (const cookie of cookies) {
7777
+ const trimmed = cookie.trim();
7778
+ if (trimmed.startsWith(`${name}=`)) {
7779
+ return trimmed.substring(name.length + 1);
7780
+ }
7781
+ }
7782
+ return null;
7783
+ }
7784
+ function buildQueryString(params) {
7785
+ const searchParams = new URLSearchParams();
7786
+ for (const [key, value] of Object.entries(params)) {
7787
+ if (value !== void 0 && value !== null) {
7788
+ searchParams.append(key, String(value));
7789
+ }
7790
+ }
7791
+ const queryString = searchParams.toString();
7792
+ return queryString ? `?${queryString}` : "";
7793
+ }
7794
+ async function getEntityFolders(entityType, entityId, folderType) {
7795
+ const model = ENTITY_MODEL_MAP[entityType];
7796
+ if (!model) {
7797
+ throw new Error(`Type d'entit\xE9 non support\xE9: ${entityType}`);
7798
+ }
7799
+ const params = buildQueryString({
7800
+ model,
7801
+ id: entityId,
7802
+ type: folderType
7803
+ });
7804
+ return apiRequest(`/folders/for_entity/${params}`);
7805
+ }
7806
+ async function getFolderTree(folderCode) {
7807
+ return apiRequest(`/folders/${folderCode}/tree/`);
7808
+ }
7809
+ async function getFolder(folderCode) {
7810
+ return apiRequest(`/folders/${folderCode}/`);
7811
+ }
7812
+ async function createFolder(name, parentCode, businessEntityId) {
7813
+ return apiRequest("/folders/", {
7814
+ method: "POST",
7815
+ body: JSON.stringify({
7816
+ name,
7817
+ parent: parentCode,
7818
+ business_entity: businessEntityId,
7819
+ folder_type: "MISC",
7820
+ // Type par défaut pour les dossiers créés manuellement
7821
+ is_system_folder: false
7822
+ })
7823
+ });
7824
+ }
7825
+ async function renameFolder(folderCode, newName) {
7826
+ return apiRequest(`/folders/${folderCode}/`, {
7827
+ method: "PATCH",
7828
+ body: JSON.stringify({ name: newName })
7829
+ });
7830
+ }
7831
+ async function deleteFolder(folderCode) {
7832
+ await apiRequest(`/folders/${folderCode}/`, {
7833
+ method: "DELETE"
7834
+ });
7835
+ }
7836
+ async function getFolderFiles(folderId) {
7837
+ const params = buildQueryString({ folder: folderId });
7838
+ return apiRequest(`/files/${params}`);
7839
+ }
7840
+ async function uploadFile(file, folderCode, options = {}) {
7841
+ const formData = new FormData();
7842
+ formData.append("file", file);
7843
+ formData.append("folder_id", folderCode);
7844
+ if (options.name) {
7845
+ formData.append("name", options.name);
7846
+ }
7847
+ if (options.description) {
7848
+ formData.append("description", options.description);
7849
+ }
7850
+ if (options.tags && options.tags.length > 0) {
7851
+ formData.append("tags", JSON.stringify(options.tags));
7852
+ }
7853
+ return apiRequest("/files/", {
7854
+ method: "POST",
7855
+ body: formData
7856
+ });
7857
+ }
7858
+ async function uploadFiles(files, folderCode) {
7859
+ const results = [];
7860
+ for (const file of files) {
7861
+ const uploaded = await uploadFile(file, folderCode);
7862
+ results.push(uploaded);
7863
+ }
7864
+ return results;
7865
+ }
7866
+ async function renameFile(fileCode, newName) {
7867
+ return apiRequest(`/files/${fileCode}/`, {
7868
+ method: "PATCH",
7869
+ body: JSON.stringify({ name: newName })
7870
+ });
7871
+ }
7872
+ async function deleteFile(fileCode) {
7873
+ await apiRequest(`/files/${fileCode}/`, {
7874
+ method: "DELETE"
7875
+ });
7876
+ }
7877
+ function getDownloadUrl(fileCode) {
7878
+ return `${API_BASE}/files/${fileCode}/download/`;
7879
+ }
7880
+ function getFileUrl(fileUrl) {
7881
+ if (fileUrl.startsWith("http://") || fileUrl.startsWith("https://")) {
7882
+ return fileUrl;
7883
+ }
7884
+ return fileUrl.startsWith("/") ? fileUrl : `/${fileUrl}`;
7885
+ }
7886
+ var fileManagerApi = {
7887
+ // Dossiers
7888
+ getEntityFolders,
7889
+ getFolderTree,
7890
+ getFolder,
7891
+ createFolder,
7892
+ renameFolder,
7893
+ deleteFolder,
7894
+ // Fichiers
7895
+ getFolderFiles,
7896
+ uploadFile,
7897
+ uploadFiles,
7898
+ renameFile,
7899
+ deleteFile,
7900
+ // URLs
7901
+ getDownloadUrl,
7902
+ getFileUrl,
7903
+ // Helpers exposés
7904
+ ENTITY_MODEL_MAP
7905
+ };
7906
+
7907
+ // src/components/common/FileManager/hooks/useFileManagerApi.ts
7908
+ function transformFile(backendFile, parentPath, parentId) {
7909
+ return {
7910
+ id: backendFile.code,
7911
+ name: backendFile.name,
7912
+ type: "file",
7913
+ mimeType: backendFile.mime_type,
7914
+ size: backendFile.size,
7915
+ path: `${parentPath}/${backendFile.name}`,
7916
+ parentId,
7917
+ url: fileManagerApi.getFileUrl(backendFile.file_url),
7918
+ createdAt: backendFile.created_at,
7919
+ updatedAt: backendFile.updated_at,
7920
+ metadata: {
7921
+ extension: backendFile.extension,
7922
+ folderId: backendFile.folder
7923
+ }
7924
+ };
7925
+ }
7926
+ function transformFolder(backendFolder, parentPath = "", parentId = null) {
7927
+ const currentPath = parentPath ? `${parentPath}/${backendFolder.name}` : `/${backendFolder.name}`;
7928
+ const childFolders = (backendFolder.children || []).map(
7929
+ (child) => transformFolder(child, currentPath, backendFolder.code)
7930
+ );
7931
+ const childFiles = (backendFolder.files || []).map(
7932
+ (file) => transformFile(file, currentPath, backendFolder.code)
7933
+ );
7934
+ return {
7935
+ id: backendFolder.code,
7936
+ name: backendFolder.name,
7937
+ type: "folder",
7938
+ path: currentPath,
7939
+ parentId,
7940
+ children: [...childFolders, ...childFiles],
7941
+ metadata: {
7942
+ folderType: backendFolder.folder_type,
7943
+ folderTypeDisplay: backendFolder.folder_type_display,
7944
+ categoryType: backendFolder.category_type,
7945
+ isSystemFolder: backendFolder.is_system_folder,
7946
+ fileCount: backendFolder.file_count,
7947
+ totalSize: backendFolder.total_size
7948
+ }
7949
+ };
7950
+ }
7951
+ function extractRootChildren(entityFolder) {
7952
+ return entityFolder.children || [];
7953
+ }
7954
+ function useFileManagerApi(entityType, entityId, businessEntityId) {
7955
+ const [data, setData] = useState19([]);
7956
+ const [loading, setLoading] = useState19(true);
7957
+ const [error, setError] = useState19(null);
7958
+ const [rootFolderCode, setRootFolderCode] = useState19(null);
7959
+ const loadEntityFolders = useCallback4(async () => {
7960
+ setLoading(true);
7961
+ setError(null);
7962
+ try {
7963
+ const folders = await fileManagerApi.getEntityFolders(entityType, entityId);
7964
+ if (!folders || folders.length === 0) {
7965
+ setData([]);
7966
+ setRootFolderCode(null);
7967
+ setLoading(false);
7968
+ return;
7969
+ }
7970
+ const entityFolder = folders.find((f) => f.folder_type === "ENTITY");
7971
+ if (!entityFolder) {
7972
+ console.warn("Dossier ENTITY non trouv\xE9, utilisation du premier dossier");
7973
+ const firstFolder = folders[0];
7974
+ setRootFolderCode(firstFolder.code);
7975
+ const tree = await fileManagerApi.getFolderTree(firstFolder.code);
7976
+ const transformed = transformFolder(tree);
7977
+ setData(extractRootChildren(transformed));
7978
+ } else {
7979
+ setRootFolderCode(entityFolder.code);
7980
+ const tree = await fileManagerApi.getFolderTree(entityFolder.code);
7981
+ const transformed = transformFolder(tree);
7982
+ setData(extractRootChildren(transformed));
7983
+ }
7984
+ } catch (err) {
7985
+ console.error("Erreur lors du chargement des dossiers:", err);
7986
+ setError(err instanceof Error ? err : new Error(String(err)));
7987
+ setData([]);
7988
+ } finally {
7989
+ setLoading(false);
7990
+ }
7991
+ }, [entityType, entityId]);
7992
+ const refresh = useCallback4(async () => {
7993
+ await loadEntityFolders();
7994
+ }, [loadEntityFolders]);
7995
+ useEffect13(() => {
7996
+ loadEntityFolders();
7997
+ }, [loadEntityFolders]);
7998
+ const handleCreateFolder = useCallback4(
7999
+ async (name, parentId) => {
8000
+ try {
8001
+ const created = await fileManagerApi.createFolder(
8002
+ name,
8003
+ parentId,
8004
+ businessEntityId
8005
+ );
8006
+ await refresh();
8007
+ return transformFolder(created, "", parentId);
8008
+ } catch (err) {
8009
+ console.error("Erreur lors de la cr\xE9ation du dossier:", err);
8010
+ setError(err instanceof Error ? err : new Error(String(err)));
8011
+ throw err;
8012
+ }
8013
+ },
8014
+ [businessEntityId, refresh]
8015
+ );
8016
+ const handleUploadFiles = useCallback4(
8017
+ async (files, parentId) => {
8018
+ try {
8019
+ const uploaded = await fileManagerApi.uploadFiles(files, parentId);
8020
+ await refresh();
8021
+ return uploaded.map((file) => transformFile(file, "", parentId));
8022
+ } catch (err) {
8023
+ console.error("Erreur lors de l'upload:", err);
8024
+ setError(err instanceof Error ? err : new Error(String(err)));
8025
+ throw err;
8026
+ }
8027
+ },
8028
+ [refresh]
8029
+ );
8030
+ const handleRename = useCallback4(
8031
+ async (item, newName) => {
8032
+ try {
8033
+ if (item.type === "folder") {
8034
+ await fileManagerApi.renameFolder(item.id, newName);
8035
+ } else {
8036
+ await fileManagerApi.renameFile(item.id, newName);
8037
+ }
8038
+ await refresh();
8039
+ } catch (err) {
8040
+ console.error("Erreur lors du renommage:", err);
8041
+ setError(err instanceof Error ? err : new Error(String(err)));
8042
+ throw err;
8043
+ }
8044
+ },
8045
+ [refresh]
8046
+ );
8047
+ const handleDelete = useCallback4(
8048
+ async (item) => {
8049
+ try {
8050
+ if (item.metadata?.isSystemFolder) {
8051
+ throw new Error("Les dossiers syst\xE8me ne peuvent pas \xEAtre supprim\xE9s");
8052
+ }
8053
+ if (item.type === "folder") {
8054
+ await fileManagerApi.deleteFolder(item.id);
8055
+ } else {
8056
+ await fileManagerApi.deleteFile(item.id);
8057
+ }
8058
+ await refresh();
8059
+ } catch (err) {
8060
+ console.error("Erreur lors de la suppression:", err);
8061
+ setError(err instanceof Error ? err : new Error(String(err)));
8062
+ throw err;
8063
+ }
8064
+ },
8065
+ [refresh]
8066
+ );
8067
+ const handleDownload = useCallback4((item) => {
8068
+ if (item.type === "file") {
8069
+ const url = item.url || fileManagerApi.getDownloadUrl(item.id);
8070
+ window.open(url, "_blank");
8071
+ }
8072
+ }, []);
8073
+ return {
8074
+ data,
8075
+ loading,
8076
+ error,
8077
+ rootFolderCode,
8078
+ refresh,
8079
+ handlers: {
8080
+ onCreateFolder: handleCreateFolder,
8081
+ onUploadFiles: handleUploadFiles,
8082
+ onRename: handleRename,
8083
+ onDelete: handleDelete,
8084
+ onDownload: handleDownload
8085
+ }
8086
+ };
8087
+ }
8088
+
8089
+ // src/components/common/FileManager/components/EntityFileManager.tsx
8090
+ import { jsx as jsx29, jsxs as jsxs24 } from "react/jsx-runtime";
8091
+ function getRootName(entityType) {
8092
+ const names = {
8093
+ CLIENT: "Documents Client",
8094
+ VENDOR: "Documents Fournisseur",
8095
+ RFQ: "Documents RFQ",
8096
+ DEPT: "Documents D\xE9partement",
8097
+ PROJECT: "Documents Projet"
8098
+ };
8099
+ return names[entityType] || "Documents";
8100
+ }
8101
+ var LoadingState = ({ height = "400px" }) => /* @__PURE__ */ jsxs24(
8102
+ "div",
8103
+ {
8104
+ className: "flex flex-col items-center justify-center bg-gray-50 dark:bg-gray-900 rounded-xl border border-gray-200 dark:border-gray-800",
8105
+ style: { height },
8106
+ children: [
8107
+ /* @__PURE__ */ jsx29(Loader22, { className: "w-10 h-10 text-blue-500 animate-spin mb-4" }),
8108
+ /* @__PURE__ */ jsx29("p", { className: "text-gray-600 dark:text-gray-400 text-sm", children: "Chargement des documents..." })
8109
+ ]
8110
+ }
8111
+ );
8112
+ var ErrorState = ({ error, onRetry, height = "400px" }) => /* @__PURE__ */ jsxs24(
8113
+ "div",
8114
+ {
8115
+ className: "flex flex-col items-center justify-center bg-red-50 dark:bg-red-900/20 rounded-xl border border-red-200 dark:border-red-800",
8116
+ style: { height },
8117
+ children: [
8118
+ /* @__PURE__ */ jsx29(AlertCircle4, { className: "w-10 h-10 text-red-500 mb-4" }),
8119
+ /* @__PURE__ */ jsx29("p", { className: "text-red-600 dark:text-red-400 text-sm font-medium mb-2", children: "Erreur lors du chargement" }),
8120
+ /* @__PURE__ */ jsx29("p", { className: "text-red-500 dark:text-red-400 text-xs mb-4 max-w-md text-center px-4", children: error.message }),
8121
+ /* @__PURE__ */ jsxs24(
8122
+ "button",
8123
+ {
8124
+ onClick: onRetry,
8125
+ className: "flex items-center gap-2 px-4 py-2 bg-red-100 dark:bg-red-900/40 text-red-700 dark:text-red-300 rounded-lg hover:bg-red-200 dark:hover:bg-red-900/60 transition-colors text-sm",
8126
+ children: [
8127
+ /* @__PURE__ */ jsx29(RefreshCw3, { className: "w-4 h-4" }),
8128
+ "R\xE9essayer"
8129
+ ]
8130
+ }
8131
+ )
8132
+ ]
8133
+ }
8134
+ );
8135
+ var EmptyState = ({ height = "400px" }) => /* @__PURE__ */ jsxs24(
8136
+ "div",
8137
+ {
8138
+ className: "flex flex-col items-center justify-center bg-gray-50 dark:bg-gray-900 rounded-xl border border-gray-200 dark:border-gray-800",
8139
+ style: { height },
8140
+ children: [
8141
+ /* @__PURE__ */ jsx29(FolderX, { className: "w-10 h-10 text-gray-400 mb-4" }),
8142
+ /* @__PURE__ */ jsx29("p", { className: "text-gray-600 dark:text-gray-400 text-sm font-medium mb-1", children: "Aucun document trouv\xE9" }),
8143
+ /* @__PURE__ */ jsx29("p", { className: "text-gray-500 dark:text-gray-500 text-xs", children: "La structure de dossiers n'a pas encore \xE9t\xE9 cr\xE9\xE9e pour cette entit\xE9." })
8144
+ ]
8145
+ }
8146
+ );
8147
+ var EntityFileManager = ({
8148
+ entityType,
8149
+ entityId,
8150
+ businessEntityId,
8151
+ className,
8152
+ height = "600px",
8153
+ // Permissions (défaut: tout autorisé)
8154
+ allowUpload = true,
8155
+ allowCreateFolder = true,
8156
+ allowRename = true,
8157
+ allowDelete = true,
8158
+ allowDownload = true,
8159
+ // Callbacks
8160
+ onFileSelect,
8161
+ onFileOpen,
8162
+ onUploadSuccess,
8163
+ onError
8164
+ }) => {
8165
+ const { data, loading, error, refresh, handlers } = useFileManagerApi(
8166
+ entityType,
8167
+ entityId,
8168
+ businessEntityId
8169
+ );
8170
+ React19.useEffect(() => {
8171
+ if (error && onError) {
8172
+ onError(error);
8173
+ }
8174
+ }, [error, onError]);
8175
+ if (loading) {
8176
+ return /* @__PURE__ */ jsx29(LoadingState, { height });
8177
+ }
8178
+ if (error) {
8179
+ return /* @__PURE__ */ jsx29(ErrorState, { error, onRetry: refresh, height });
8180
+ }
8181
+ if (!data || data.length === 0) {
8182
+ return /* @__PURE__ */ jsx29(EmptyState, { height });
8183
+ }
8184
+ const handleUploadFiles = async (files, parentId) => {
8185
+ const result = await handlers.onUploadFiles(files, parentId);
8186
+ if (result && onUploadSuccess) {
8187
+ onUploadSuccess(result);
8188
+ }
8189
+ return result;
8190
+ };
8191
+ return /* @__PURE__ */ jsx29("div", { className: cn("relative", className), style: { height }, children: /* @__PURE__ */ jsx29(
8192
+ FileManager,
8193
+ {
8194
+ data,
8195
+ rootName: getRootName(entityType),
8196
+ onCreateFolder: handlers.onCreateFolder,
8197
+ onUploadFiles: handleUploadFiles,
8198
+ onRename: handlers.onRename,
8199
+ onDelete: handlers.onDelete,
8200
+ onDownload: handlers.onDownload,
8201
+ onSelect: onFileSelect,
8202
+ onOpen: onFileOpen,
8203
+ allowUpload,
8204
+ allowCreateFolder,
8205
+ allowRename,
8206
+ allowDelete,
8207
+ allowDownload,
8208
+ allowMultiSelect: true,
8209
+ className: "h-full"
8210
+ }
8211
+ ) });
8212
+ };
7724
8213
  export {
7725
8214
  Alert_default as Alert,
7726
8215
  AlertProvider,
@@ -7733,6 +8222,7 @@ export {
7733
8222
  Choices_default as CHOICES,
7734
8223
  CountrySelector,
7735
8224
  DateInput,
8225
+ EntityFileManager,
7736
8226
  FDrawer,
7737
8227
  FetchApi,
7738
8228
  FileInput,
@@ -7762,11 +8252,13 @@ export {
7762
8252
  Toast_default as ToastContainer,
7763
8253
  ToastProvider,
7764
8254
  UserServices,
8255
+ fileManagerApi,
7765
8256
  formatDate,
7766
8257
  formatFileSize,
7767
8258
  getFileIcon,
7768
8259
  useAlert,
7769
8260
  useFileManager,
8261
+ useFileManagerApi,
7770
8262
  useSession,
7771
8263
  useToast
7772
8264
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ptechcore_ui",
3
- "version": "1.0.25",
3
+ "version": "1.0.27",
4
4
  "type": "module",
5
5
  "main": "./dist/index.cjs",
6
6
  "module": "./dist/index.js",
@@ -18,6 +18,8 @@
18
18
  "scripts": {
19
19
  "dev": "vite",
20
20
  "build": "tsup src/index.ts --format cjs,esm --dts",
21
+ "build:app": "vite build",
22
+ "build:lib": "tsup src/index.ts --format cjs,esm --dts",
21
23
  "lint": "eslint .",
22
24
  "preview": "vite preview"
23
25
  },