@sd-angular/core 19.0.13 → 19.0.14
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/README.md +712 -712
- package/assets/STYLE-GUIDE.md +601 -601
- package/assets/images/coming-soon.svg +22 -22
- package/assets/images/data-empty.svg +20 -20
- package/assets/images/expired.svg +21 -21
- package/assets/images/file-error.svg +27 -27
- package/assets/images/filter-empty.svg +19 -19
- package/assets/images/filter-required.svg +20 -20
- package/assets/images/forbidden.svg +14 -14
- package/assets/images/image-error.svg +26 -26
- package/assets/images/maintenance.svg +22 -22
- package/assets/images/not-found.svg +19 -19
- package/assets/images/offline.svg +19 -19
- package/assets/images/submitted.svg +17 -17
- package/assets/images/success.svg +17 -17
- package/assets/images/unauthorized.svg +21 -21
- package/assets/images/unknown-error.svg +17 -17
- package/assets/scss/ckeditor5.scss +88 -88
- package/assets/scss/core/_inline-edit.scss +105 -105
- package/assets/scss/core/color.scss +73 -73
- package/assets/scss/core/form.scss +317 -317
- package/assets/scss/core/image.scss +35 -35
- package/assets/scss/core/utilities/_base.scss +333 -333
- package/assets/scss/core/utilities/_border.scss +22 -22
- package/assets/scss/core/utilities/_display.scss +10 -10
- package/assets/scss/core/utilities/_elevation.scss +80 -80
- package/assets/scss/core/utilities/_flexbox.scss +54 -54
- package/assets/scss/core/utilities/_gap.scss +9 -9
- package/assets/scss/core/utilities/_index.scss +17 -17
- package/assets/scss/core/utilities/_misc.scss +20 -20
- package/assets/scss/core/utilities/_overflow.scss +9 -9
- package/assets/scss/core/utilities/_position.scss +8 -8
- package/assets/scss/core/utilities/_sizing.scss +28 -28
- package/assets/scss/core/utilities/_spacing.scss +31 -31
- package/assets/scss/core/utilities/_typography.scss +99 -99
- package/assets/scss/sd-core.scss +16 -16
- package/assets/scss/themes/default.scss +45 -45
- package/assets/scss/themes/material-theme.scss +101 -101
- package/components/preview/src/preview-pdf/pdf-worker-inline.generated.d.ts +7 -0
- package/components/table/src/services/table-export/table-export.service.d.ts +3 -1
- package/components/table/src/table.component.d.ts +1 -1
- package/fesm2022/sd-angular-core-components-anchor.mjs +6 -6
- package/fesm2022/sd-angular-core-components-anchor.mjs.map +1 -1
- package/fesm2022/sd-angular-core-components-autoid-inspector.mjs +2 -2
- package/fesm2022/sd-angular-core-components-autoid-inspector.mjs.map +1 -1
- package/fesm2022/sd-angular-core-components-badge.mjs +2 -2
- package/fesm2022/sd-angular-core-components-badge.mjs.map +1 -1
- package/fesm2022/sd-angular-core-components-base.mjs.map +1 -1
- package/fesm2022/sd-angular-core-components-button.mjs +2 -2
- package/fesm2022/sd-angular-core-components-button.mjs.map +1 -1
- package/fesm2022/sd-angular-core-components-chart.mjs +40 -40
- package/fesm2022/sd-angular-core-components-chart.mjs.map +1 -1
- package/fesm2022/sd-angular-core-components-ckeditor-styles.mjs.map +1 -1
- package/fesm2022/sd-angular-core-components-code-editor.mjs +2 -2
- package/fesm2022/sd-angular-core-components-code-editor.mjs.map +1 -1
- package/fesm2022/sd-angular-core-components-document-builder.mjs +77 -77
- package/fesm2022/sd-angular-core-components-document-builder.mjs.map +1 -1
- package/fesm2022/sd-angular-core-components-editor.mjs +2 -2
- package/fesm2022/sd-angular-core-components-editor.mjs.map +1 -1
- package/fesm2022/sd-angular-core-components-form-generic.mjs +106 -106
- package/fesm2022/sd-angular-core-components-form-generic.mjs.map +1 -1
- package/fesm2022/sd-angular-core-components-history.mjs +2 -2
- package/fesm2022/sd-angular-core-components-history.mjs.map +1 -1
- package/fesm2022/sd-angular-core-components-import-excel.mjs +2 -2
- package/fesm2022/sd-angular-core-components-import-excel.mjs.map +1 -1
- package/fesm2022/sd-angular-core-components-inform.mjs.map +1 -1
- package/fesm2022/sd-angular-core-components-mini-editor.mjs +2 -2
- package/fesm2022/sd-angular-core-components-mini-editor.mjs.map +1 -1
- package/fesm2022/sd-angular-core-components-modal-resizable.mjs +2 -2
- package/fesm2022/sd-angular-core-components-modal-resizable.mjs.map +1 -1
- package/fesm2022/sd-angular-core-components-modal.mjs +2 -2
- package/fesm2022/sd-angular-core-components-modal.mjs.map +1 -1
- package/fesm2022/sd-angular-core-components-operator.mjs +2 -2
- package/fesm2022/sd-angular-core-components-operator.mjs.map +1 -1
- package/fesm2022/sd-angular-core-components-org-chart.mjs +2 -2
- package/fesm2022/sd-angular-core-components-org-chart.mjs.map +1 -1
- package/fesm2022/sd-angular-core-components-preview.mjs +32 -6
- package/fesm2022/sd-angular-core-components-preview.mjs.map +1 -1
- package/fesm2022/sd-angular-core-components-query-bar.mjs +10 -10
- package/fesm2022/sd-angular-core-components-query-bar.mjs.map +1 -1
- package/fesm2022/sd-angular-core-components-query-builder.mjs +2 -2
- package/fesm2022/sd-angular-core-components-query-builder.mjs.map +1 -1
- package/fesm2022/sd-angular-core-components-section.mjs +4 -4
- package/fesm2022/sd-angular-core-components-section.mjs.map +1 -1
- package/fesm2022/sd-angular-core-components-side-drawer.mjs +2 -2
- package/fesm2022/sd-angular-core-components-side-drawer.mjs.map +1 -1
- package/fesm2022/sd-angular-core-components-stepper.mjs +2 -2
- package/fesm2022/sd-angular-core-components-stepper.mjs.map +1 -1
- package/fesm2022/sd-angular-core-components-tab-router.mjs +6 -6
- package/fesm2022/sd-angular-core-components-tab-router.mjs.map +1 -1
- package/fesm2022/sd-angular-core-components-tab.mjs +2 -2
- package/fesm2022/sd-angular-core-components-tab.mjs.map +1 -1
- package/fesm2022/sd-angular-core-components-table.mjs +32 -17
- package/fesm2022/sd-angular-core-components-table.mjs.map +1 -1
- package/fesm2022/sd-angular-core-components-upload-file.mjs +4 -4
- package/fesm2022/sd-angular-core-components-upload-file.mjs.map +1 -1
- package/fesm2022/sd-angular-core-components-view.mjs +2 -2
- package/fesm2022/sd-angular-core-components-view.mjs.map +1 -1
- package/fesm2022/sd-angular-core-configurations.mjs.map +1 -1
- package/fesm2022/sd-angular-core-directives.mjs +20 -20
- package/fesm2022/sd-angular-core-directives.mjs.map +1 -1
- package/fesm2022/sd-angular-core-forms-autocomplete.mjs +2 -2
- package/fesm2022/sd-angular-core-forms-autocomplete.mjs.map +1 -1
- package/fesm2022/sd-angular-core-forms-checkbox.mjs +2 -2
- package/fesm2022/sd-angular-core-forms-checkbox.mjs.map +1 -1
- package/fesm2022/sd-angular-core-forms-chip-calendar.mjs +2 -2
- package/fesm2022/sd-angular-core-forms-chip-calendar.mjs.map +1 -1
- package/fesm2022/sd-angular-core-forms-chip.mjs +2 -2
- package/fesm2022/sd-angular-core-forms-chip.mjs.map +1 -1
- package/fesm2022/sd-angular-core-forms-date-range.mjs +2 -2
- package/fesm2022/sd-angular-core-forms-date-range.mjs.map +1 -1
- package/fesm2022/sd-angular-core-forms-date.mjs +114 -35
- package/fesm2022/sd-angular-core-forms-date.mjs.map +1 -1
- package/fesm2022/sd-angular-core-forms-datetime.mjs +6 -6
- package/fesm2022/sd-angular-core-forms-datetime.mjs.map +1 -1
- package/fesm2022/sd-angular-core-forms-directives.mjs.map +1 -1
- package/fesm2022/sd-angular-core-forms-inline-text.mjs +2 -2
- package/fesm2022/sd-angular-core-forms-inline-text.mjs.map +1 -1
- package/fesm2022/sd-angular-core-forms-input-color.mjs +2 -2
- package/fesm2022/sd-angular-core-forms-input-color.mjs.map +1 -1
- package/fesm2022/sd-angular-core-forms-input-number.mjs.map +1 -1
- package/fesm2022/sd-angular-core-forms-input.mjs +2 -2
- package/fesm2022/sd-angular-core-forms-input.mjs.map +1 -1
- package/fesm2022/sd-angular-core-forms-label.mjs +2 -2
- package/fesm2022/sd-angular-core-forms-label.mjs.map +1 -1
- package/fesm2022/sd-angular-core-forms-models.mjs.map +1 -1
- package/fesm2022/sd-angular-core-forms-radio.mjs +2 -2
- package/fesm2022/sd-angular-core-forms-radio.mjs.map +1 -1
- package/fesm2022/sd-angular-core-forms-select.mjs +2 -2
- package/fesm2022/sd-angular-core-forms-select.mjs.map +1 -1
- package/fesm2022/sd-angular-core-forms-switch.mjs +2 -2
- package/fesm2022/sd-angular-core-forms-switch.mjs.map +1 -1
- package/fesm2022/sd-angular-core-forms-textarea.mjs +2 -2
- package/fesm2022/sd-angular-core-forms-textarea.mjs.map +1 -1
- package/fesm2022/sd-angular-core-handlers.mjs.map +1 -1
- package/fesm2022/sd-angular-core-i18n.mjs +20 -0
- package/fesm2022/sd-angular-core-i18n.mjs.map +1 -1
- package/fesm2022/sd-angular-core-interceptors.mjs.map +1 -1
- package/fesm2022/sd-angular-core-modules-auth.mjs.map +1 -1
- package/fesm2022/sd-angular-core-modules-authom.mjs.map +1 -1
- package/fesm2022/sd-angular-core-modules-keycloak.mjs.map +1 -1
- package/fesm2022/sd-angular-core-modules-layout.mjs +130 -43
- package/fesm2022/sd-angular-core-modules-layout.mjs.map +1 -1
- package/fesm2022/sd-angular-core-modules-permission.mjs.map +1 -1
- package/fesm2022/sd-angular-core-pipes.mjs.map +1 -1
- package/fesm2022/sd-angular-core-services-api.mjs.map +1 -1
- package/fesm2022/sd-angular-core-services-cache.mjs.map +1 -1
- package/fesm2022/sd-angular-core-services-confirm.mjs +2 -2
- package/fesm2022/sd-angular-core-services-confirm.mjs.map +1 -1
- package/fesm2022/sd-angular-core-services-docx.mjs.map +1 -1
- package/fesm2022/sd-angular-core-services-excel.mjs.map +1 -1
- package/fesm2022/sd-angular-core-services-license.mjs.map +1 -1
- package/fesm2022/sd-angular-core-services-loading.mjs +5 -5
- package/fesm2022/sd-angular-core-services-loading.mjs.map +1 -1
- package/fesm2022/sd-angular-core-services-notify.mjs +12 -12
- package/fesm2022/sd-angular-core-services-notify.mjs.map +1 -1
- package/fesm2022/sd-angular-core-services-storage.mjs.map +1 -1
- package/fesm2022/sd-angular-core-utilities-data-state.mjs.map +1 -1
- package/fesm2022/sd-angular-core-utilities-extensions.mjs.map +1 -1
- package/forms/date/src/date.component.d.ts +9 -1
- package/i18n/src/en.d.ts +4 -0
- package/modules/layout/index.d.ts +1 -0
- package/modules/layout/utils/index.d.ts +1 -0
- package/modules/layout/utils/tab-name.util.d.ts +8 -0
- package/package.json +73 -73
- package/sd-angular-core-19.0.13.tgz +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sd-angular-core-utilities-extensions.mjs","sources":["../../../projects/sd-angular/utilities/extensions/src/string.extension.ts","../../../projects/sd-angular/utilities/extensions/src/utility.extension.ts","../../../projects/sd-angular/utilities/extensions/src/color.extension.ts","../../../projects/sd-angular/utilities/extensions/src/object.extension.ts","../../../projects/sd-angular/utilities/extensions/sd-angular-core-utilities-extensions.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { StringUtilities as _Utils, ValidationUtilities } from '@sdcorejs/utils/fns';\n\nexport { ValidationUtilities };\n\n// Deprecated wrappers — moved to ValidationUtilities\nconst isValidEmail = (value: any) => ValidationUtilities.isEmail(value);\nconst isValidPhone = (value: any) => ValidationUtilities.isPhone(value);\nconst isValidCode = (value: any) => ValidationUtilities.isCode(value);\n\nexport const StringUtilities = {\n ..._Utils,\n // Deprecated aliases for renamed regex constants (renamed in @sdcorejs/utils v1.0.2)\n /** @deprecated Use REGEX_VN_PHONE instead */\n REGEX_PHONE_VN: _Utils.REGEX_VN_PHONE,\n /** @deprecated Use REGEX_VN_ID instead */\n REGEX_IDVN: _Utils.REGEX_VN_ID,\n /** @deprecated Use REGEX_VN_ID_OR_PASSPORT instead */\n REGEX_IDVN_OR_PASSPORT: _Utils.REGEX_VN_ID_OR_PASSPORT,\n // Deprecated validators — moved to ValidationUtilities\n /** @deprecated Use {@link ValidationUtilities.isEmail} instead */\n isValidEmail,\n /** @deprecated Use {@link ValidationUtilities.isPhone} instead */\n isValidPhone,\n /** @deprecated Use {@link ValidationUtilities.isCode} instead */\n isValidCode,\n};\n","export { Utilities, BrowserUtilities } from '@sdcorejs/utils/fns';\r\n\r\n// Hardcoded i18n cho upload utility — pure function nên không inject() được I18nService.\r\n// Đọc lang trực tiếp từ localStorage (cùng key với I18nService: 'sd-core.language').\r\n// Khi I18nService chuyển sang reload-on-change model, lang ở đây luôn đồng bộ với UI.\r\nconst SD_UPLOAD_MESSAGES = {\r\n vi: {\r\n 'invalid-format': '[{name}] File tải lên không đúng định dạng. Vui lòng chọn lại',\r\n 'invalid-size': '[{name}] Kích thước file không hợp lệ. Vui lòng chọn một file khác',\r\n },\r\n en: {\r\n 'invalid-format': '[{name}] Invalid file format. Please select again',\r\n 'invalid-size': '[{name}] Invalid file size. Please choose a different file',\r\n },\r\n ja: {\r\n 'invalid-format': '[{name}] ファイル形式が正しくありません。もう一度選択してください',\r\n 'invalid-size': '[{name}] ファイルサイズが正しくありません。別のファイルを選択してください',\r\n },\r\n ko: {\r\n 'invalid-format': '[{name}] 파일 형식이 올바르지 않습니다. 다시 선택해 주세요',\r\n 'invalid-size': '[{name}] 파일 크기가 올바르지 않습니다. 다른 파일을 선택해 주세요',\r\n },\r\n zh: {\r\n 'invalid-format': '[{name}] 文件格式不正确,请重新选择',\r\n 'invalid-size': '[{name}] 文件大小不符合要求,请选择其他文件',\r\n },\r\n} as const;\r\n\r\ntype SdUploadMsgKey = keyof typeof SD_UPLOAD_MESSAGES.vi;\r\ntype SdUploadLang = keyof typeof SD_UPLOAD_MESSAGES;\r\n\r\nconst getSdUploadLang = (): SdUploadLang => {\r\n try {\r\n const stored = localStorage.getItem('sd-core.language');\r\n if (stored && stored in SD_UPLOAD_MESSAGES) return stored as SdUploadLang;\r\n } catch { /* ignore */ }\r\n return 'vi';\r\n};\r\n\r\nconst upload = (option?: { extensions?: string[]; maxSizeInMb?: number; validator?: (fileName: string) => string; multiple?: boolean }) => {\r\n const uploadId = 'U1e09c1c0-b647-437e-995e-d7a1a1b60550';\r\n const promise = new Promise<File | File[] | null>((resolve, reject) => {\r\n const body = document.getElementsByTagName('body')?.[0];\r\n if (!body) {\r\n resolve(null);\r\n return;\r\n }\r\n const existedElement = document.getElementById(uploadId);\r\n if (existedElement) {\r\n existedElement.remove();\r\n }\r\n const element = document.createElement('input');\r\n element.setAttribute('id', uploadId);\r\n element.setAttribute('type', 'file');\r\n if (option?.multiple) {\r\n element.setAttribute('multiple', '');\r\n }\r\n element.style.display = 'none';\r\n body.appendChild(element);\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n element.addEventListener('change', (evt: any) => {\r\n try {\r\n const target = evt.target as DataTransfer;\r\n\r\n // Hardcode i18n cho upload utility — pure function nên không inject() được I18nService.\r\n // Đọc lang trực tiếp từ localStorage (cùng key với I18nService: 'sd-core.language').\r\n // Throw plain Error(translatedText) để consumer không cần xử lý đặc biệt.\r\n const throwUploadError = (msgKey: SdUploadMsgKey, name: string): never => {\r\n const lang = getSdUploadLang();\r\n const template = SD_UPLOAD_MESSAGES[lang][msgKey] ?? SD_UPLOAD_MESSAGES.vi[msgKey];\r\n throw new Error(template.replace('{name}', name));\r\n };\r\n\r\n if (option?.multiple) {\r\n const files: File[] = [];\r\n for (const file of target.files) {\r\n if (file) {\r\n const lastDot = file.name.lastIndexOf('.');\r\n if (lastDot === -1) {\r\n throwUploadError('invalid-format', file.name);\r\n }\r\n const extension = file.name.substring(lastDot + 1);\r\n if (option) {\r\n if (option.extensions?.length && !option.extensions.some(e => e.toLowerCase() === extension.toLowerCase())) {\r\n throwUploadError('invalid-format', file.name);\r\n }\r\n if (option.maxSizeInMb && option.maxSizeInMb > 0 && option.maxSizeInMb * 1024 * 1024 < file.size) {\r\n throwUploadError('invalid-size', file.name);\r\n }\r\n if (option.validator && option.validator(file.name)) {\r\n // Custom validator returns its own message — pass through as-is (caller defines format).\r\n const message = option.validator(file.name);\r\n throw new Error(message);\r\n }\r\n }\r\n files.push(file);\r\n }\r\n resolve(files);\r\n }\r\n } else {\r\n const file = target.files.item(0);\r\n if (file) {\r\n const lastDot = file.name.lastIndexOf('.');\r\n if (lastDot === -1) {\r\n throwUploadError('invalid-format', file.name);\r\n }\r\n const extension = file.name.substring(lastDot + 1);\r\n if (option) {\r\n if (option.extensions?.length && !option.extensions.some(e => e.toLowerCase() === extension.toLowerCase())) {\r\n throwUploadError('invalid-format', file.name);\r\n }\r\n if (option.maxSizeInMb && option.maxSizeInMb > 0 && option.maxSizeInMb * 1024 * 1024 < file.size) {\r\n throwUploadError('invalid-size', file.name);\r\n }\r\n if (option.validator && option.validator(file.name)) {\r\n const message = option.validator(file.name);\r\n throw new Error(message);\r\n }\r\n }\r\n resolve(file);\r\n }\r\n }\r\n } catch (error) {\r\n reject(error);\r\n }\r\n });\r\n element.click();\r\n });\r\n return promise;\r\n};\r\n\r\nconst generateFileName = (fileName?: string | null) => {\r\n if (!fileName) {\r\n return `file_${randomId()}`;\r\n }\r\n return fileName;\r\n};\r\n\r\nconst download = (fileOrPath: File | string | undefined | null, fileName?: string | null) => {\r\n if (!fileOrPath) {\r\n console.warn('No file or path provided for download');\r\n return;\r\n }\r\n fileName = generateFileName(fileName);\r\n if (fileOrPath instanceof File) {\r\n // Hoặc sử dụng cách thông thường:\r\n const url = URL.createObjectURL(fileOrPath);\r\n const a = document.createElement('a');\r\n a.href = url;\r\n a.download = fileOrPath.name || fileName;\r\n document.body.appendChild(a);\r\n a.click();\r\n document.body.removeChild(a);\r\n URL.revokeObjectURL(url); // Giải phóng tài nguyên\r\n return;\r\n }\r\n const a = document.createElement('a');\r\n a.href = fileOrPath;\r\n if (fileOrPath.startsWith('http')) {\r\n a.target = '_blank'; // mở tab mới\r\n } else {\r\n a.download = fileName;\r\n }\r\n a.style.visibility = 'hidden';\r\n document.body.appendChild(a);\r\n a.click();\r\n a.remove();\r\n return;\r\n};\r\n\r\nconst downloadBlob = (blob: Blob, fileName?: string) => {\r\n try {\r\n const url = window.URL.createObjectURL(blob);\r\n const link = document.createElement('a');\r\n if (link.download !== undefined) {\r\n // feature detection\r\n link.download = generateFileName(fileName);\r\n link.href = url;\r\n link.style.visibility = 'hidden';\r\n document.body.appendChild(link);\r\n link.click();\r\n window.URL.revokeObjectURL(url);\r\n link.remove();\r\n }\r\n } catch (e) {\r\n console.error('BlobToSaveAs error', e);\r\n }\r\n};\r\n\r\nconst changeAliasLowerCase = (alias: string) => {\r\n let str = alias?.toString() ?? '';\r\n str = str.toString().toLowerCase();\r\n str = str.replace(/à|á|ạ|ả|ã|â|ầ|ấ|ậ|ẩ|ẫ|ă|ằ|ắ|ặ|ẳ|ẵ/g, 'a');\r\n str = str.replace(/è|é|ẹ|ẻ|ẽ|ê|ề|ế|ệ|ể|ễ/g, 'e');\r\n str = str.replace(/ì|í|ị|ỉ|ĩ/g, 'i');\r\n str = str.replace(/ò|ó|ọ|ỏ|õ|ô|ồ|ố|ộ|ổ|ỗ|ơ|ờ|ớ|ợ|ở|ỡ/g, 'o');\r\n str = str.replace(/ù|ú|ụ|ủ|ũ|ư|ừ|ứ|ự|ử|ữ/g, 'u');\r\n str = str.replace(/ỳ|ý|ỵ|ỷ|ỹ/g, 'y');\r\n str = str.replace(/đ/g, 'd');\r\n // eslint-disable-next-line no-useless-escape\r\n str = str.replace(/!|@|%|\\^|\\*|\\(|\\)|\\+|\\=|\\<|\\>|\\?|\\/|,|\\.|\\:|\\;|\\'|\\\"|\\&|\\#|\\[|\\]|~|\\$|_|`|-|{|}|\\||\\\\/g, ' ');\r\n str = str.replace(/ + /g, ' ');\r\n str = str.trim();\r\n return str;\r\n};\r\n\r\nconst copyToClipboard = (text: string) => {\r\n navigator.clipboard.writeText(text);\r\n};\r\n\r\nconst allWithPaging = async <T = unknown>(\r\n func: (pageSize: number, pageNumber: number) => Promise<{ items: T[]; total: number }>,\r\n defaultPageSize?: number\r\n): Promise<T[]> => {\r\n const pageSize = defaultPageSize || 1000;\r\n let pageNumber = 0;\r\n let count = 0;\r\n let items: T[] = [];\r\n while (true) {\r\n const res = await func(pageSize, pageNumber);\r\n if (Array(res?.items) && res?.total > 0) {\r\n items = [...items, ...res.items];\r\n count += res.items.length;\r\n pageNumber++;\r\n if (count >= res.total || !res.items?.length) {\r\n return items;\r\n }\r\n } else {\r\n return [];\r\n }\r\n }\r\n};\r\n\r\nconst isIncognito = async (): Promise<boolean> => {\r\n // Chrome-based\r\n if ('storage' in navigator && 'estimate' in navigator.storage) {\r\n try {\r\n const { quota } = await navigator.storage.estimate();\r\n if (quota && quota < 120 * 1024 * 1024) return true;\r\n } catch (err) {\r\n console.error(err);\r\n }\r\n }\r\n\r\n // Safari fallback\r\n try {\r\n localStorage.setItem('__incognito_test', '1');\r\n localStorage.removeItem('__incognito_test');\r\n return false;\r\n } catch {\r\n return true;\r\n }\r\n};\r\n\r\nconst isMobile = (): boolean => {\r\n return /Mobi|Android/i.test(navigator.userAgent);\r\n};\r\n\r\nconst randomId = (prefix?: string | null): string => {\r\n const id = `${new Date().getTime().toString(36)}${Math.random().toString(36).substring(2, 7)}`;\r\n if (prefix) {\r\n return `${prefix}_${id}`;\r\n }\r\n return id;\r\n};\r\n\r\nconst hash = (obj: any): string => {\r\n const json = stableStringify(obj);\r\n let hash = 0;\r\n\r\n for (let i = 0; i < json.length; i++) {\r\n hash = (hash << 5) - hash + json.charCodeAt(i);\r\n hash |= 0; // Convert to 32bit integer\r\n }\r\n\r\n return `h${Math.abs(hash)}`;\r\n};\r\n\r\n/**\r\n * Convert object to stable JSON string (keys sorted)\r\n */\r\nconst stableStringify = (obj: any): string => {\r\n if (obj === null || typeof obj !== 'object') {\r\n return JSON.stringify(obj);\r\n }\r\n\r\n if (obj instanceof File) {\r\n // Chỉ serialize các thuộc tính quan trọng của File\r\n return JSON.stringify({\r\n __type: 'File',\r\n name: obj.name,\r\n size: obj.size,\r\n type: obj.type,\r\n lastModified: obj.lastModified,\r\n });\r\n }\r\n\r\n if (Array.isArray(obj)) {\r\n return `[${obj.map(stableStringify).join(',')}]`;\r\n }\r\n\r\n const keys = Object.keys(obj).sort();\r\n const keyValuePairs = keys.map(key => `\"${key}\":${stableStringify(obj[key])}`);\r\n\r\n return `{${keyValuePairs.join(',')}}`;\r\n};\r\n\r\n// Hàm `parseQueryParams` dùng để phân tích chuỗi query string (phần sau dấu `?` trên URL)\r\n// và chuyển đổi nó thành một đối tượng JavaScript với các cặp key-value.\r\nconst parseQueryParams = (queryString?: string): Record<string, string> => {\r\n const params = new URLSearchParams(queryString || '');\r\n const result: Record<string, string> = {};\r\n params.forEach((value, key) => {\r\n result[key] = value;\r\n });\r\n return result;\r\n};\r\n\r\n/**\r\n * Lấy địa chỉ IP public của client bằng cách gọi API bên thứ ba.\r\n */\r\nconst getClientPublicIp = async (): Promise<string | null> => {\r\n try {\r\n // Gọi đến API của ipify để lấy IP dưới dạng JSON\r\n const response = await fetch('https://api.ipify.org?format=json');\r\n if (!response.ok) {\r\n throw new Error(`HTTP error! status: ${response.status}`);\r\n }\r\n const data = await response.json();\r\n // Trả về địa chỉ IP\r\n return data.ip;\r\n } catch (error) {\r\n console.error('Failed to fetch client IP:', error);\r\n return null; // Trả về null nếu có lỗi\r\n }\r\n};\r\n\r\n\r\n// Helper function với fallback\r\nconst generateUuid = (): string => {\r\n if (typeof crypto !== 'undefined' && crypto.randomUUID) {\r\n return crypto.randomUUID();\r\n }\r\n // Fallback cho browser cũ\r\n return `${Date.now()}-${Math.random().toString(36).substring(2, 9)}`;\r\n};\r\n\r\n/**\r\n * Truy xuất giá trị của object dựa trên đường dẫn nested (VD: 'user.address.city')\r\n */\r\nconst getNestedValue = (obj: any, path: string) => {\r\n if (!obj || !path) return undefined;\r\n // Tách chuỗi theo dấu chấm và duyệt qua từng cấp của object\r\n return path.split('.').reduce((acc, part) => acc?.[part], obj);\r\n};\r\n\r\n/**\r\n * @deprecated Use {@link Utilities} and {@link BrowserUtilities} from `@sdcorejs/utils/fns` instead.\r\n * - upload/download/clipboard/isMobile → BrowserUtilities\r\n * - allWithPaging (→ fetchAllByPaging) / randomId / hash / parseQueryParams / generateUuid / getNestedValue → Utilities\r\n */\r\nconst SdUtilities = {\r\n upload,\r\n download,\r\n downloadBlob,\r\n changeAliasLowerCase,\r\n copyToClipboard,\r\n allWithPaging,\r\n isIncognito,\r\n isMobile,\r\n randomId,\r\n hash,\r\n parseQueryParams,\r\n getClientPublicIp,\r\n generateUuid,\r\n getNestedValue\r\n};\r\nexport { SdUtilities };\r\n\r\n","export { ColorUtilities } from '@sdcorejs/utils/fns';\n\nimport { ColorUtilities } from '@sdcorejs/utils/fns';\n/** @deprecated Use {@link ColorUtilities.hslToHex} from `@sdcorejs/utils/fns` instead */\nexport const hslToHex = ColorUtilities.hslToHex;\n/** @deprecated Use {@link ColorUtilities.rgbToHex} from `@sdcorejs/utils/fns` instead */\nexport const rgbToHex = ColorUtilities.rgbToHex;\n","type PlainObject = Record<PropertyKey, unknown>;\n\nconst isPlainObject = (value: unknown): value is PlainObject => {\n if (value === null || typeof value !== 'object') return false;\n const prototype = Object.getPrototypeOf(value);\n return prototype === Object.prototype || prototype === null;\n};\n\nconst clone = <T>(value: T): T => {\n if (Array.isArray(value)) {\n return value.map(item => clone(item)) as T;\n }\n if (isPlainObject(value)) {\n return Object.keys(value).reduce((result, key) => {\n result[key] = clone(value[key]);\n return result;\n }, {} as PlainObject) as T;\n }\n return value;\n};\n\nconst merge = <T extends PlainObject, U extends PlainObject>(target: T, source: U): T & U => {\n const result = clone(target) as PlainObject;\n Object.keys(source).forEach(key => {\n const sourceValue = source[key];\n if (sourceValue === undefined) return;\n\n const targetValue = result[key];\n if (isPlainObject(targetValue) && isPlainObject(sourceValue)) {\n result[key] = merge(targetValue, sourceValue);\n } else {\n result[key] = clone(sourceValue);\n }\n });\n return result as T & U;\n};\n\nconst deepMerge = <T extends PlainObject>(...sources: T[]): T =>\n sources.reduce((result, source) => merge(result, source), {} as PlainObject) as T;\n\nexport const ObjectUtilities = {\n isPlainObject,\n clone,\n merge,\n deepMerge,\n};\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["_Utils"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"sd-angular-core-utilities-extensions.mjs","sources":["../../../projects/sd-angular/utilities/extensions/src/string.extension.ts","../../../projects/sd-angular/utilities/extensions/src/utility.extension.ts","../../../projects/sd-angular/utilities/extensions/src/color.extension.ts","../../../projects/sd-angular/utilities/extensions/src/object.extension.ts","../../../projects/sd-angular/utilities/extensions/sd-angular-core-utilities-extensions.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { StringUtilities as _Utils, ValidationUtilities } from '@sdcorejs/utils/fns';\n\nexport { ValidationUtilities };\n\n// Deprecated wrappers — moved to ValidationUtilities\nconst isValidEmail = (value: any) => ValidationUtilities.isEmail(value);\nconst isValidPhone = (value: any) => ValidationUtilities.isPhone(value);\nconst isValidCode = (value: any) => ValidationUtilities.isCode(value);\n\nexport const StringUtilities = {\n ..._Utils,\n // Deprecated aliases for renamed regex constants (renamed in @sdcorejs/utils v1.0.2)\n /** @deprecated Use REGEX_VN_PHONE instead */\n REGEX_PHONE_VN: _Utils.REGEX_VN_PHONE,\n /** @deprecated Use REGEX_VN_ID instead */\n REGEX_IDVN: _Utils.REGEX_VN_ID,\n /** @deprecated Use REGEX_VN_ID_OR_PASSPORT instead */\n REGEX_IDVN_OR_PASSPORT: _Utils.REGEX_VN_ID_OR_PASSPORT,\n // Deprecated validators — moved to ValidationUtilities\n /** @deprecated Use {@link ValidationUtilities.isEmail} instead */\n isValidEmail,\n /** @deprecated Use {@link ValidationUtilities.isPhone} instead */\n isValidPhone,\n /** @deprecated Use {@link ValidationUtilities.isCode} instead */\n isValidCode,\n};\n","export { Utilities, BrowserUtilities } from '@sdcorejs/utils/fns';\n\n// Hardcoded i18n cho upload utility — pure function nên không inject() được I18nService.\n// Đọc lang trực tiếp từ localStorage (cùng key với I18nService: 'sd-core.language').\n// Khi I18nService chuyển sang reload-on-change model, lang ở đây luôn đồng bộ với UI.\nconst SD_UPLOAD_MESSAGES = {\n vi: {\n 'invalid-format': '[{name}] File tải lên không đúng định dạng. Vui lòng chọn lại',\n 'invalid-size': '[{name}] Kích thước file không hợp lệ. Vui lòng chọn một file khác',\n },\n en: {\n 'invalid-format': '[{name}] Invalid file format. Please select again',\n 'invalid-size': '[{name}] Invalid file size. Please choose a different file',\n },\n ja: {\n 'invalid-format': '[{name}] ファイル形式が正しくありません。もう一度選択してください',\n 'invalid-size': '[{name}] ファイルサイズが正しくありません。別のファイルを選択してください',\n },\n ko: {\n 'invalid-format': '[{name}] 파일 형식이 올바르지 않습니다. 다시 선택해 주세요',\n 'invalid-size': '[{name}] 파일 크기가 올바르지 않습니다. 다른 파일을 선택해 주세요',\n },\n zh: {\n 'invalid-format': '[{name}] 文件格式不正确,请重新选择',\n 'invalid-size': '[{name}] 文件大小不符合要求,请选择其他文件',\n },\n} as const;\n\ntype SdUploadMsgKey = keyof typeof SD_UPLOAD_MESSAGES.vi;\ntype SdUploadLang = keyof typeof SD_UPLOAD_MESSAGES;\n\nconst getSdUploadLang = (): SdUploadLang => {\n try {\n const stored = localStorage.getItem('sd-core.language');\n if (stored && stored in SD_UPLOAD_MESSAGES) return stored as SdUploadLang;\n } catch { /* ignore */ }\n return 'vi';\n};\n\nconst upload = (option?: { extensions?: string[]; maxSizeInMb?: number; validator?: (fileName: string) => string; multiple?: boolean }) => {\n const uploadId = 'U1e09c1c0-b647-437e-995e-d7a1a1b60550';\n const promise = new Promise<File | File[] | null>((resolve, reject) => {\n const body = document.getElementsByTagName('body')?.[0];\n if (!body) {\n resolve(null);\n return;\n }\n const existedElement = document.getElementById(uploadId);\n if (existedElement) {\n existedElement.remove();\n }\n const element = document.createElement('input');\n element.setAttribute('id', uploadId);\n element.setAttribute('type', 'file');\n if (option?.multiple) {\n element.setAttribute('multiple', '');\n }\n element.style.display = 'none';\n body.appendChild(element);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n element.addEventListener('change', (evt: any) => {\n try {\n const target = evt.target as DataTransfer;\n\n // Hardcode i18n cho upload utility — pure function nên không inject() được I18nService.\n // Đọc lang trực tiếp từ localStorage (cùng key với I18nService: 'sd-core.language').\n // Throw plain Error(translatedText) để consumer không cần xử lý đặc biệt.\n const throwUploadError = (msgKey: SdUploadMsgKey, name: string): never => {\n const lang = getSdUploadLang();\n const template = SD_UPLOAD_MESSAGES[lang][msgKey] ?? SD_UPLOAD_MESSAGES.vi[msgKey];\n throw new Error(template.replace('{name}', name));\n };\n\n if (option?.multiple) {\n const files: File[] = [];\n for (const file of target.files) {\n if (file) {\n const lastDot = file.name.lastIndexOf('.');\n if (lastDot === -1) {\n throwUploadError('invalid-format', file.name);\n }\n const extension = file.name.substring(lastDot + 1);\n if (option) {\n if (option.extensions?.length && !option.extensions.some(e => e.toLowerCase() === extension.toLowerCase())) {\n throwUploadError('invalid-format', file.name);\n }\n if (option.maxSizeInMb && option.maxSizeInMb > 0 && option.maxSizeInMb * 1024 * 1024 < file.size) {\n throwUploadError('invalid-size', file.name);\n }\n if (option.validator && option.validator(file.name)) {\n // Custom validator returns its own message — pass through as-is (caller defines format).\n const message = option.validator(file.name);\n throw new Error(message);\n }\n }\n files.push(file);\n }\n resolve(files);\n }\n } else {\n const file = target.files.item(0);\n if (file) {\n const lastDot = file.name.lastIndexOf('.');\n if (lastDot === -1) {\n throwUploadError('invalid-format', file.name);\n }\n const extension = file.name.substring(lastDot + 1);\n if (option) {\n if (option.extensions?.length && !option.extensions.some(e => e.toLowerCase() === extension.toLowerCase())) {\n throwUploadError('invalid-format', file.name);\n }\n if (option.maxSizeInMb && option.maxSizeInMb > 0 && option.maxSizeInMb * 1024 * 1024 < file.size) {\n throwUploadError('invalid-size', file.name);\n }\n if (option.validator && option.validator(file.name)) {\n const message = option.validator(file.name);\n throw new Error(message);\n }\n }\n resolve(file);\n }\n }\n } catch (error) {\n reject(error);\n }\n });\n element.click();\n });\n return promise;\n};\n\nconst generateFileName = (fileName?: string | null) => {\n if (!fileName) {\n return `file_${randomId()}`;\n }\n return fileName;\n};\n\nconst download = (fileOrPath: File | string | undefined | null, fileName?: string | null) => {\n if (!fileOrPath) {\n console.warn('No file or path provided for download');\n return;\n }\n fileName = generateFileName(fileName);\n if (fileOrPath instanceof File) {\n // Hoặc sử dụng cách thông thường:\n const url = URL.createObjectURL(fileOrPath);\n const a = document.createElement('a');\n a.href = url;\n a.download = fileOrPath.name || fileName;\n document.body.appendChild(a);\n a.click();\n document.body.removeChild(a);\n URL.revokeObjectURL(url); // Giải phóng tài nguyên\n return;\n }\n const a = document.createElement('a');\n a.href = fileOrPath;\n if (fileOrPath.startsWith('http')) {\n a.target = '_blank'; // mở tab mới\n } else {\n a.download = fileName;\n }\n a.style.visibility = 'hidden';\n document.body.appendChild(a);\n a.click();\n a.remove();\n return;\n};\n\nconst downloadBlob = (blob: Blob, fileName?: string) => {\n try {\n const url = window.URL.createObjectURL(blob);\n const link = document.createElement('a');\n if (link.download !== undefined) {\n // feature detection\n link.download = generateFileName(fileName);\n link.href = url;\n link.style.visibility = 'hidden';\n document.body.appendChild(link);\n link.click();\n window.URL.revokeObjectURL(url);\n link.remove();\n }\n } catch (e) {\n console.error('BlobToSaveAs error', e);\n }\n};\n\nconst changeAliasLowerCase = (alias: string) => {\n let str = alias?.toString() ?? '';\n str = str.toString().toLowerCase();\n str = str.replace(/à|á|ạ|ả|ã|â|ầ|ấ|ậ|ẩ|ẫ|ă|ằ|ắ|ặ|ẳ|ẵ/g, 'a');\n str = str.replace(/è|é|ẹ|ẻ|ẽ|ê|ề|ế|ệ|ể|ễ/g, 'e');\n str = str.replace(/ì|í|ị|ỉ|ĩ/g, 'i');\n str = str.replace(/ò|ó|ọ|ỏ|õ|ô|ồ|ố|ộ|ổ|ỗ|ơ|ờ|ớ|ợ|ở|ỡ/g, 'o');\n str = str.replace(/ù|ú|ụ|ủ|ũ|ư|ừ|ứ|ự|ử|ữ/g, 'u');\n str = str.replace(/ỳ|ý|ỵ|ỷ|ỹ/g, 'y');\n str = str.replace(/đ/g, 'd');\n // eslint-disable-next-line no-useless-escape\n str = str.replace(/!|@|%|\\^|\\*|\\(|\\)|\\+|\\=|\\<|\\>|\\?|\\/|,|\\.|\\:|\\;|\\'|\\\"|\\&|\\#|\\[|\\]|~|\\$|_|`|-|{|}|\\||\\\\/g, ' ');\n str = str.replace(/ + /g, ' ');\n str = str.trim();\n return str;\n};\n\nconst copyToClipboard = (text: string) => {\n navigator.clipboard.writeText(text);\n};\n\nconst allWithPaging = async <T = unknown>(\n func: (pageSize: number, pageNumber: number) => Promise<{ items: T[]; total: number }>,\n defaultPageSize?: number\n): Promise<T[]> => {\n const pageSize = defaultPageSize || 1000;\n let pageNumber = 0;\n let count = 0;\n let items: T[] = [];\n while (true) {\n const res = await func(pageSize, pageNumber);\n if (Array(res?.items) && res?.total > 0) {\n items = [...items, ...res.items];\n count += res.items.length;\n pageNumber++;\n if (count >= res.total || !res.items?.length) {\n return items;\n }\n } else {\n return [];\n }\n }\n};\n\nconst isIncognito = async (): Promise<boolean> => {\n // Chrome-based\n if ('storage' in navigator && 'estimate' in navigator.storage) {\n try {\n const { quota } = await navigator.storage.estimate();\n if (quota && quota < 120 * 1024 * 1024) return true;\n } catch (err) {\n console.error(err);\n }\n }\n\n // Safari fallback\n try {\n localStorage.setItem('__incognito_test', '1');\n localStorage.removeItem('__incognito_test');\n return false;\n } catch {\n return true;\n }\n};\n\nconst isMobile = (): boolean => {\n return /Mobi|Android/i.test(navigator.userAgent);\n};\n\nconst randomId = (prefix?: string | null): string => {\n const id = `${new Date().getTime().toString(36)}${Math.random().toString(36).substring(2, 7)}`;\n if (prefix) {\n return `${prefix}_${id}`;\n }\n return id;\n};\n\nconst hash = (obj: any): string => {\n const json = stableStringify(obj);\n let hash = 0;\n\n for (let i = 0; i < json.length; i++) {\n hash = (hash << 5) - hash + json.charCodeAt(i);\n hash |= 0; // Convert to 32bit integer\n }\n\n return `h${Math.abs(hash)}`;\n};\n\n/**\n * Convert object to stable JSON string (keys sorted)\n */\nconst stableStringify = (obj: any): string => {\n if (obj === null || typeof obj !== 'object') {\n return JSON.stringify(obj);\n }\n\n if (obj instanceof File) {\n // Chỉ serialize các thuộc tính quan trọng của File\n return JSON.stringify({\n __type: 'File',\n name: obj.name,\n size: obj.size,\n type: obj.type,\n lastModified: obj.lastModified,\n });\n }\n\n if (Array.isArray(obj)) {\n return `[${obj.map(stableStringify).join(',')}]`;\n }\n\n const keys = Object.keys(obj).sort();\n const keyValuePairs = keys.map(key => `\"${key}\":${stableStringify(obj[key])}`);\n\n return `{${keyValuePairs.join(',')}}`;\n};\n\n// Hàm `parseQueryParams` dùng để phân tích chuỗi query string (phần sau dấu `?` trên URL)\n// và chuyển đổi nó thành một đối tượng JavaScript với các cặp key-value.\nconst parseQueryParams = (queryString?: string): Record<string, string> => {\n const params = new URLSearchParams(queryString || '');\n const result: Record<string, string> = {};\n params.forEach((value, key) => {\n result[key] = value;\n });\n return result;\n};\n\n/**\n * Lấy địa chỉ IP public của client bằng cách gọi API bên thứ ba.\n */\nconst getClientPublicIp = async (): Promise<string | null> => {\n try {\n // Gọi đến API của ipify để lấy IP dưới dạng JSON\n const response = await fetch('https://api.ipify.org?format=json');\n if (!response.ok) {\n throw new Error(`HTTP error! status: ${response.status}`);\n }\n const data = await response.json();\n // Trả về địa chỉ IP\n return data.ip;\n } catch (error) {\n console.error('Failed to fetch client IP:', error);\n return null; // Trả về null nếu có lỗi\n }\n};\n\n\n// Helper function với fallback\nconst generateUuid = (): string => {\n if (typeof crypto !== 'undefined' && crypto.randomUUID) {\n return crypto.randomUUID();\n }\n // Fallback cho browser cũ\n return `${Date.now()}-${Math.random().toString(36).substring(2, 9)}`;\n};\n\n/**\n * Truy xuất giá trị của object dựa trên đường dẫn nested (VD: 'user.address.city')\n */\nconst getNestedValue = (obj: any, path: string) => {\n if (!obj || !path) return undefined;\n // Tách chuỗi theo dấu chấm và duyệt qua từng cấp của object\n return path.split('.').reduce((acc, part) => acc?.[part], obj);\n};\n\n/**\n * @deprecated Use {@link Utilities} and {@link BrowserUtilities} from `@sdcorejs/utils/fns` instead.\n * - upload/download/clipboard/isMobile → BrowserUtilities\n * - allWithPaging (→ fetchAllByPaging) / randomId / hash / parseQueryParams / generateUuid / getNestedValue → Utilities\n */\nconst SdUtilities = {\n upload,\n download,\n downloadBlob,\n changeAliasLowerCase,\n copyToClipboard,\n allWithPaging,\n isIncognito,\n isMobile,\n randomId,\n hash,\n parseQueryParams,\n getClientPublicIp,\n generateUuid,\n getNestedValue\n};\nexport { SdUtilities };\n\n","export { ColorUtilities } from '@sdcorejs/utils/fns';\n\nimport { ColorUtilities } from '@sdcorejs/utils/fns';\n/** @deprecated Use {@link ColorUtilities.hslToHex} from `@sdcorejs/utils/fns` instead */\nexport const hslToHex = ColorUtilities.hslToHex;\n/** @deprecated Use {@link ColorUtilities.rgbToHex} from `@sdcorejs/utils/fns` instead */\nexport const rgbToHex = ColorUtilities.rgbToHex;\n","type PlainObject = Record<PropertyKey, unknown>;\n\nconst isPlainObject = (value: unknown): value is PlainObject => {\n if (value === null || typeof value !== 'object') return false;\n const prototype = Object.getPrototypeOf(value);\n return prototype === Object.prototype || prototype === null;\n};\n\nconst clone = <T>(value: T): T => {\n if (Array.isArray(value)) {\n return value.map(item => clone(item)) as T;\n }\n if (isPlainObject(value)) {\n return Object.keys(value).reduce((result, key) => {\n result[key] = clone(value[key]);\n return result;\n }, {} as PlainObject) as T;\n }\n return value;\n};\n\nconst merge = <T extends PlainObject, U extends PlainObject>(target: T, source: U): T & U => {\n const result = clone(target) as PlainObject;\n Object.keys(source).forEach(key => {\n const sourceValue = source[key];\n if (sourceValue === undefined) return;\n\n const targetValue = result[key];\n if (isPlainObject(targetValue) && isPlainObject(sourceValue)) {\n result[key] = merge(targetValue, sourceValue);\n } else {\n result[key] = clone(sourceValue);\n }\n });\n return result as T & U;\n};\n\nconst deepMerge = <T extends PlainObject>(...sources: T[]): T =>\n sources.reduce((result, source) => merge(result, source), {} as PlainObject) as T;\n\nexport const ObjectUtilities = {\n isPlainObject,\n clone,\n merge,\n deepMerge,\n};\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["_Utils"],"mappings":"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"}
|
|
@@ -6,6 +6,11 @@ import { SdLabelDefDirective, SdViewDefDirective } from '@sd-angular/core/forms/
|
|
|
6
6
|
import { SdFormControl, SdViewed, SdViewedInput } from '@sd-angular/core/forms/models';
|
|
7
7
|
import { Size } from '@sdcorejs/utils/models';
|
|
8
8
|
import * as i0 from "@angular/core";
|
|
9
|
+
type SdDateKeyupEvent = Event | {
|
|
10
|
+
target?: {
|
|
11
|
+
value?: string | null;
|
|
12
|
+
};
|
|
13
|
+
};
|
|
9
14
|
export declare class SdDate implements OnDestroy, OnInit {
|
|
10
15
|
#private;
|
|
11
16
|
id: string;
|
|
@@ -80,9 +85,12 @@ export declare class SdDate implements OnDestroy, OnInit {
|
|
|
80
85
|
open: () => void;
|
|
81
86
|
focusInputElement(): void;
|
|
82
87
|
onKeyDown: (event: KeyboardEvent) => boolean;
|
|
83
|
-
|
|
88
|
+
onInput: (event: Event) => void;
|
|
89
|
+
/** Kept as a compatibility entry point for callers that used the old keyup handler. */
|
|
90
|
+
onKeyup: (event: SdDateKeyupEvent) => void;
|
|
84
91
|
onChange: (event: MatDatepickerInputEvent<Date>) => void;
|
|
85
92
|
clear: ($event: any) => void;
|
|
86
93
|
static ɵfac: i0.ɵɵFactoryDeclaration<SdDate, never>;
|
|
87
94
|
static ɵcmp: i0.ɵɵComponentDeclaration<SdDate, "sd-date", never, { "autoIdInput": { "alias": "autoId"; "required": false; "isSignal": true; }; "name": { "alias": "name"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "form": { "alias": "form"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "helperText": { "alias": "helperText"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "hideInlineError": { "alias": "hideInlineError"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "viewed": { "alias": "viewed"; "required": false; "isSignal": true; }; "clearable": { "alias": "clearable"; "required": false; "isSignal": true; }; "inlineError": { "alias": "inlineError"; "required": false; "isSignal": true; }; "hyperlink": { "alias": "hyperlink"; "required": false; "isSignal": true; }; "appearanceInput": { "alias": "appearance"; "required": false; "isSignal": true; }; "floatLabel": { "alias": "floatLabel"; "required": false; "isSignal": true; }; "minInput": { "alias": "min"; "required": false; "isSignal": true; }; "minDateInput": { "alias": "minDate"; "required": false; "isSignal": true; }; "maxInput": { "alias": "max"; "required": false; "isSignal": true; }; "maxDateInput": { "alias": "maxDate"; "required": false; "isSignal": true; }; "valueModel": { "alias": "model"; "required": false; "isSignal": true; }; }, { "valueModel": "modelChange"; "sdChange": "sdChange"; "sdFocus": "sdFocus"; }, ["sdLabelTemplate", "sdValueTemplate", "sdViewDef", "sdLabelDef"], ["[sdLabel]"], true, never>;
|
|
88
95
|
}
|
|
96
|
+
export {};
|
package/i18n/src/en.d.ts
CHANGED
|
@@ -391,6 +391,8 @@ export declare const EN_MESSAGES: {
|
|
|
391
391
|
readonly 'core.component.table.no-results-hint': "Please search or filter with different criteria";
|
|
392
392
|
readonly 'core.component.table.choose-filter-hint': "Please choose a filter to start";
|
|
393
393
|
readonly 'core.component.table.no-data': "No data";
|
|
394
|
+
readonly 'core.component.table.export': "Export";
|
|
395
|
+
readonly 'core.component.table.exporting': "Exporting...{percent}%";
|
|
394
396
|
readonly 'core.component.table.export-excel': "Export Excel";
|
|
395
397
|
readonly 'core.component.table.export-csv': "Export CSV";
|
|
396
398
|
readonly 'core.component.table.showing': "Showing:";
|
|
@@ -442,6 +444,8 @@ export declare const EN_MESSAGES: {
|
|
|
442
444
|
readonly 'core.module.layout.not-found.message': "The page you're looking for doesn't exist or has been removed. Please check the URL or go back to the home page to continue.";
|
|
443
445
|
readonly 'core.module.layout.not-found.back': "Go back";
|
|
444
446
|
readonly 'core.module.layout.home.tab-name': "Home";
|
|
447
|
+
readonly 'core.module.layout.forbidden.tab-name': "Access Denied";
|
|
448
|
+
readonly 'core.module.layout.not-found.tab-name': "Page Not Found";
|
|
445
449
|
readonly 'core.module.layout.home.feature.data': "Data";
|
|
446
450
|
readonly 'core.module.layout.home.feature.reports': "Reports";
|
|
447
451
|
readonly 'core.module.layout.home.feature.users': "Users";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './tab-name.util';
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Resolve a translated tab name for `@SdTabComponent`.
|
|
3
|
+
*
|
|
4
|
+
* WHY not I18nService: the decorator runs at module-evaluation time, before
|
|
5
|
+
* Angular's DI exists, so the service cannot be injected. We read the language
|
|
6
|
+
* the app persisted and look the key up in the static catalog instead.
|
|
7
|
+
*/
|
|
8
|
+
export declare function resolveTabName(key: string): string;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sd-angular/core",
|
|
3
|
-
"version": "19.0.
|
|
3
|
+
"version": "19.0.14",
|
|
4
4
|
"peerDependencies": {
|
|
5
5
|
"@angular/common": "^19.0.0 || ^20.0.0 || ^21.0.0",
|
|
6
6
|
"@angular/core": "^19.0.0 || ^20.0.0 || ^21.0.0",
|
|
@@ -32,10 +32,6 @@
|
|
|
32
32
|
"types": "./index.d.ts",
|
|
33
33
|
"default": "./fesm2022/sd-angular-core.mjs"
|
|
34
34
|
},
|
|
35
|
-
"./directives": {
|
|
36
|
-
"types": "./directives/index.d.ts",
|
|
37
|
-
"default": "./fesm2022/sd-angular-core-directives.mjs"
|
|
38
|
-
},
|
|
39
35
|
"./components": {
|
|
40
36
|
"types": "./components/index.d.ts",
|
|
41
37
|
"default": "./fesm2022/sd-angular-core-components.mjs"
|
|
@@ -44,6 +40,10 @@
|
|
|
44
40
|
"types": "./configurations/index.d.ts",
|
|
45
41
|
"default": "./fesm2022/sd-angular-core-configurations.mjs"
|
|
46
42
|
},
|
|
43
|
+
"./directives": {
|
|
44
|
+
"types": "./directives/index.d.ts",
|
|
45
|
+
"default": "./fesm2022/sd-angular-core-directives.mjs"
|
|
46
|
+
},
|
|
47
47
|
"./forms": {
|
|
48
48
|
"types": "./forms/index.d.ts",
|
|
49
49
|
"default": "./fesm2022/sd-angular-core-forms.mjs"
|
|
@@ -80,30 +80,30 @@
|
|
|
80
80
|
"types": "./utilities/index.d.ts",
|
|
81
81
|
"default": "./fesm2022/sd-angular-core-utilities.mjs"
|
|
82
82
|
},
|
|
83
|
-
"./components/autoid-inspector": {
|
|
84
|
-
"types": "./components/autoid-inspector/index.d.ts",
|
|
85
|
-
"default": "./fesm2022/sd-angular-core-components-autoid-inspector.mjs"
|
|
86
|
-
},
|
|
87
83
|
"./components/anchor": {
|
|
88
84
|
"types": "./components/anchor/index.d.ts",
|
|
89
85
|
"default": "./fesm2022/sd-angular-core-components-anchor.mjs"
|
|
90
86
|
},
|
|
91
|
-
"./components/
|
|
92
|
-
"types": "./components/
|
|
93
|
-
"default": "./fesm2022/sd-angular-core-components-
|
|
87
|
+
"./components/autoid-inspector": {
|
|
88
|
+
"types": "./components/autoid-inspector/index.d.ts",
|
|
89
|
+
"default": "./fesm2022/sd-angular-core-components-autoid-inspector.mjs"
|
|
94
90
|
},
|
|
95
91
|
"./components/avatar": {
|
|
96
92
|
"types": "./components/avatar/index.d.ts",
|
|
97
93
|
"default": "./fesm2022/sd-angular-core-components-avatar.mjs"
|
|
98
94
|
},
|
|
99
|
-
"./components/
|
|
100
|
-
"types": "./components/
|
|
101
|
-
"default": "./fesm2022/sd-angular-core-components-
|
|
95
|
+
"./components/badge": {
|
|
96
|
+
"types": "./components/badge/index.d.ts",
|
|
97
|
+
"default": "./fesm2022/sd-angular-core-components-badge.mjs"
|
|
102
98
|
},
|
|
103
99
|
"./components/base": {
|
|
104
100
|
"types": "./components/base/index.d.ts",
|
|
105
101
|
"default": "./fesm2022/sd-angular-core-components-base.mjs"
|
|
106
102
|
},
|
|
103
|
+
"./components/button": {
|
|
104
|
+
"types": "./components/button/index.d.ts",
|
|
105
|
+
"default": "./fesm2022/sd-angular-core-components-button.mjs"
|
|
106
|
+
},
|
|
107
107
|
"./components/chart": {
|
|
108
108
|
"types": "./components/chart/index.d.ts",
|
|
109
109
|
"default": "./fesm2022/sd-angular-core-components-chart.mjs"
|
|
@@ -116,50 +116,54 @@
|
|
|
116
116
|
"types": "./components/code-editor/index.d.ts",
|
|
117
117
|
"default": "./fesm2022/sd-angular-core-components-code-editor.mjs"
|
|
118
118
|
},
|
|
119
|
-
"./components/
|
|
120
|
-
"types": "./components/
|
|
121
|
-
"default": "./fesm2022/sd-angular-core-components-
|
|
119
|
+
"./components/document-builder": {
|
|
120
|
+
"types": "./components/document-builder/index.d.ts",
|
|
121
|
+
"default": "./fesm2022/sd-angular-core-components-document-builder.mjs"
|
|
122
122
|
},
|
|
123
123
|
"./components/editor": {
|
|
124
124
|
"types": "./components/editor/index.d.ts",
|
|
125
125
|
"default": "./fesm2022/sd-angular-core-components-editor.mjs"
|
|
126
126
|
},
|
|
127
|
-
"./components/
|
|
128
|
-
"types": "./components/
|
|
129
|
-
"default": "./fesm2022/sd-angular-core-components-
|
|
127
|
+
"./components/form-generic": {
|
|
128
|
+
"types": "./components/form-generic/index.d.ts",
|
|
129
|
+
"default": "./fesm2022/sd-angular-core-components-form-generic.mjs"
|
|
130
130
|
},
|
|
131
131
|
"./components/history": {
|
|
132
132
|
"types": "./components/history/index.d.ts",
|
|
133
133
|
"default": "./fesm2022/sd-angular-core-components-history.mjs"
|
|
134
134
|
},
|
|
135
|
-
"./components/
|
|
136
|
-
"types": "./components/
|
|
137
|
-
"default": "./fesm2022/sd-angular-core-components-
|
|
135
|
+
"./components/import-excel": {
|
|
136
|
+
"types": "./components/import-excel/index.d.ts",
|
|
137
|
+
"default": "./fesm2022/sd-angular-core-components-import-excel.mjs"
|
|
138
138
|
},
|
|
139
139
|
"./components/inform": {
|
|
140
140
|
"types": "./components/inform/index.d.ts",
|
|
141
141
|
"default": "./fesm2022/sd-angular-core-components-inform.mjs"
|
|
142
142
|
},
|
|
143
|
-
"./components/modal-resizable": {
|
|
144
|
-
"types": "./components/modal-resizable/index.d.ts",
|
|
145
|
-
"default": "./fesm2022/sd-angular-core-components-modal-resizable.mjs"
|
|
146
|
-
},
|
|
147
143
|
"./components/mini-editor": {
|
|
148
144
|
"types": "./components/mini-editor/index.d.ts",
|
|
149
145
|
"default": "./fesm2022/sd-angular-core-components-mini-editor.mjs"
|
|
150
146
|
},
|
|
147
|
+
"./components/modal": {
|
|
148
|
+
"types": "./components/modal/index.d.ts",
|
|
149
|
+
"default": "./fesm2022/sd-angular-core-components-modal.mjs"
|
|
150
|
+
},
|
|
151
|
+
"./components/modal-resizable": {
|
|
152
|
+
"types": "./components/modal-resizable/index.d.ts",
|
|
153
|
+
"default": "./fesm2022/sd-angular-core-components-modal-resizable.mjs"
|
|
154
|
+
},
|
|
151
155
|
"./components/operator": {
|
|
152
156
|
"types": "./components/operator/index.d.ts",
|
|
153
157
|
"default": "./fesm2022/sd-angular-core-components-operator.mjs"
|
|
154
158
|
},
|
|
155
|
-
"./components/preview": {
|
|
156
|
-
"types": "./components/preview/index.d.ts",
|
|
157
|
-
"default": "./fesm2022/sd-angular-core-components-preview.mjs"
|
|
158
|
-
},
|
|
159
159
|
"./components/org-chart": {
|
|
160
160
|
"types": "./components/org-chart/index.d.ts",
|
|
161
161
|
"default": "./fesm2022/sd-angular-core-components-org-chart.mjs"
|
|
162
162
|
},
|
|
163
|
+
"./components/preview": {
|
|
164
|
+
"types": "./components/preview/index.d.ts",
|
|
165
|
+
"default": "./fesm2022/sd-angular-core-components-preview.mjs"
|
|
166
|
+
},
|
|
163
167
|
"./components/query-bar": {
|
|
164
168
|
"types": "./components/query-bar/index.d.ts",
|
|
165
169
|
"default": "./fesm2022/sd-angular-core-components-query-bar.mjs"
|
|
@@ -180,6 +184,10 @@
|
|
|
180
184
|
"types": "./components/side-drawer/index.d.ts",
|
|
181
185
|
"default": "./fesm2022/sd-angular-core-components-side-drawer.mjs"
|
|
182
186
|
},
|
|
187
|
+
"./components/splitter": {
|
|
188
|
+
"types": "./components/splitter/index.d.ts",
|
|
189
|
+
"default": "./fesm2022/sd-angular-core-components-splitter.mjs"
|
|
190
|
+
},
|
|
183
191
|
"./components/stepper": {
|
|
184
192
|
"types": "./components/stepper/index.d.ts",
|
|
185
193
|
"default": "./fesm2022/sd-angular-core-components-stepper.mjs"
|
|
@@ -188,10 +196,6 @@
|
|
|
188
196
|
"types": "./components/tab/index.d.ts",
|
|
189
197
|
"default": "./fesm2022/sd-angular-core-components-tab.mjs"
|
|
190
198
|
},
|
|
191
|
-
"./components/splitter": {
|
|
192
|
-
"types": "./components/splitter/index.d.ts",
|
|
193
|
-
"default": "./fesm2022/sd-angular-core-components-splitter.mjs"
|
|
194
|
-
},
|
|
195
199
|
"./components/tab-router": {
|
|
196
200
|
"types": "./components/tab-router/index.d.ts",
|
|
197
201
|
"default": "./fesm2022/sd-angular-core-components-tab-router.mjs"
|
|
@@ -244,78 +248,78 @@
|
|
|
244
248
|
"types": "./forms/directives/index.d.ts",
|
|
245
249
|
"default": "./fesm2022/sd-angular-core-forms-directives.mjs"
|
|
246
250
|
},
|
|
247
|
-
"./forms/input": {
|
|
248
|
-
"types": "./forms/input/index.d.ts",
|
|
249
|
-
"default": "./fesm2022/sd-angular-core-forms-input.mjs"
|
|
250
|
-
},
|
|
251
251
|
"./forms/inline-text": {
|
|
252
252
|
"types": "./forms/inline-text/index.d.ts",
|
|
253
253
|
"default": "./fesm2022/sd-angular-core-forms-inline-text.mjs"
|
|
254
254
|
},
|
|
255
|
+
"./forms/input": {
|
|
256
|
+
"types": "./forms/input/index.d.ts",
|
|
257
|
+
"default": "./fesm2022/sd-angular-core-forms-input.mjs"
|
|
258
|
+
},
|
|
255
259
|
"./forms/input-color": {
|
|
256
260
|
"types": "./forms/input-color/index.d.ts",
|
|
257
261
|
"default": "./fesm2022/sd-angular-core-forms-input-color.mjs"
|
|
258
262
|
},
|
|
259
|
-
"./forms/input-number": {
|
|
260
|
-
"types": "./forms/input-number/index.d.ts",
|
|
261
|
-
"default": "./fesm2022/sd-angular-core-forms-input-number.mjs"
|
|
262
|
-
},
|
|
263
263
|
"./forms/label": {
|
|
264
264
|
"types": "./forms/label/index.d.ts",
|
|
265
265
|
"default": "./fesm2022/sd-angular-core-forms-label.mjs"
|
|
266
266
|
},
|
|
267
|
-
"./forms/
|
|
268
|
-
"types": "./forms/
|
|
269
|
-
"default": "./fesm2022/sd-angular-core-forms-
|
|
267
|
+
"./forms/input-number": {
|
|
268
|
+
"types": "./forms/input-number/index.d.ts",
|
|
269
|
+
"default": "./fesm2022/sd-angular-core-forms-input-number.mjs"
|
|
270
270
|
},
|
|
271
271
|
"./forms/models": {
|
|
272
272
|
"types": "./forms/models/index.d.ts",
|
|
273
273
|
"default": "./fesm2022/sd-angular-core-forms-models.mjs"
|
|
274
274
|
},
|
|
275
|
+
"./forms/radio": {
|
|
276
|
+
"types": "./forms/radio/index.d.ts",
|
|
277
|
+
"default": "./fesm2022/sd-angular-core-forms-radio.mjs"
|
|
278
|
+
},
|
|
275
279
|
"./forms/select": {
|
|
276
280
|
"types": "./forms/select/index.d.ts",
|
|
277
281
|
"default": "./fesm2022/sd-angular-core-forms-select.mjs"
|
|
278
282
|
},
|
|
279
|
-
"./forms/textarea": {
|
|
280
|
-
"types": "./forms/textarea/index.d.ts",
|
|
281
|
-
"default": "./fesm2022/sd-angular-core-forms-textarea.mjs"
|
|
282
|
-
},
|
|
283
283
|
"./forms/switch": {
|
|
284
284
|
"types": "./forms/switch/index.d.ts",
|
|
285
285
|
"default": "./fesm2022/sd-angular-core-forms-switch.mjs"
|
|
286
286
|
},
|
|
287
|
-
"./
|
|
288
|
-
"types": "./
|
|
289
|
-
"default": "./fesm2022/sd-angular-core-
|
|
287
|
+
"./forms/textarea": {
|
|
288
|
+
"types": "./forms/textarea/index.d.ts",
|
|
289
|
+
"default": "./fesm2022/sd-angular-core-forms-textarea.mjs"
|
|
290
290
|
},
|
|
291
291
|
"./modules/auth": {
|
|
292
292
|
"types": "./modules/auth/index.d.ts",
|
|
293
293
|
"default": "./fesm2022/sd-angular-core-modules-auth.mjs"
|
|
294
294
|
},
|
|
295
|
+
"./modules/authom": {
|
|
296
|
+
"types": "./modules/authom/index.d.ts",
|
|
297
|
+
"default": "./fesm2022/sd-angular-core-modules-authom.mjs"
|
|
298
|
+
},
|
|
295
299
|
"./modules/keycloak": {
|
|
296
300
|
"types": "./modules/keycloak/index.d.ts",
|
|
297
301
|
"default": "./fesm2022/sd-angular-core-modules-keycloak.mjs"
|
|
298
302
|
},
|
|
299
|
-
"./modules/permission": {
|
|
300
|
-
"types": "./modules/permission/index.d.ts",
|
|
301
|
-
"default": "./fesm2022/sd-angular-core-modules-permission.mjs"
|
|
302
|
-
},
|
|
303
303
|
"./modules/layout": {
|
|
304
304
|
"types": "./modules/layout/index.d.ts",
|
|
305
305
|
"default": "./fesm2022/sd-angular-core-modules-layout.mjs"
|
|
306
306
|
},
|
|
307
|
+
"./modules/permission": {
|
|
308
|
+
"types": "./modules/permission/index.d.ts",
|
|
309
|
+
"default": "./fesm2022/sd-angular-core-modules-permission.mjs"
|
|
310
|
+
},
|
|
307
311
|
"./services/api": {
|
|
308
312
|
"types": "./services/api/index.d.ts",
|
|
309
313
|
"default": "./fesm2022/sd-angular-core-services-api.mjs"
|
|
310
314
|
},
|
|
311
|
-
"./services/confirm": {
|
|
312
|
-
"types": "./services/confirm/index.d.ts",
|
|
313
|
-
"default": "./fesm2022/sd-angular-core-services-confirm.mjs"
|
|
314
|
-
},
|
|
315
315
|
"./services/cache": {
|
|
316
316
|
"types": "./services/cache/index.d.ts",
|
|
317
317
|
"default": "./fesm2022/sd-angular-core-services-cache.mjs"
|
|
318
318
|
},
|
|
319
|
+
"./services/confirm": {
|
|
320
|
+
"types": "./services/confirm/index.d.ts",
|
|
321
|
+
"default": "./fesm2022/sd-angular-core-services-confirm.mjs"
|
|
322
|
+
},
|
|
319
323
|
"./services/docx": {
|
|
320
324
|
"types": "./services/docx/index.d.ts",
|
|
321
325
|
"default": "./fesm2022/sd-angular-core-services-docx.mjs"
|
|
@@ -328,13 +332,17 @@
|
|
|
328
332
|
"types": "./services/license/index.d.ts",
|
|
329
333
|
"default": "./fesm2022/sd-angular-core-services-license.mjs"
|
|
330
334
|
},
|
|
335
|
+
"./services/loading": {
|
|
336
|
+
"types": "./services/loading/index.d.ts",
|
|
337
|
+
"default": "./fesm2022/sd-angular-core-services-loading.mjs"
|
|
338
|
+
},
|
|
331
339
|
"./services/notify": {
|
|
332
340
|
"types": "./services/notify/index.d.ts",
|
|
333
341
|
"default": "./fesm2022/sd-angular-core-services-notify.mjs"
|
|
334
342
|
},
|
|
335
|
-
"./services/
|
|
336
|
-
"types": "./services/
|
|
337
|
-
"default": "./fesm2022/sd-angular-core-services-
|
|
343
|
+
"./services/storage": {
|
|
344
|
+
"types": "./services/storage/index.d.ts",
|
|
345
|
+
"default": "./fesm2022/sd-angular-core-services-storage.mjs"
|
|
338
346
|
},
|
|
339
347
|
"./utilities/data-state": {
|
|
340
348
|
"types": "./utilities/data-state/index.d.ts",
|
|
@@ -344,17 +352,9 @@
|
|
|
344
352
|
"types": "./utilities/extensions/index.d.ts",
|
|
345
353
|
"default": "./fesm2022/sd-angular-core-utilities-extensions.mjs"
|
|
346
354
|
},
|
|
347
|
-
"./services/storage": {
|
|
348
|
-
"types": "./services/storage/index.d.ts",
|
|
349
|
-
"default": "./fesm2022/sd-angular-core-services-storage.mjs"
|
|
350
|
-
},
|
|
351
355
|
"./utilities/models": {
|
|
352
356
|
"types": "./utilities/models/index.d.ts",
|
|
353
357
|
"default": "./fesm2022/sd-angular-core-utilities-models.mjs"
|
|
354
|
-
},
|
|
355
|
-
"./components/modal": {
|
|
356
|
-
"types": "./components/modal/index.d.ts",
|
|
357
|
-
"default": "./fesm2022/sd-angular-core-components-modal.mjs"
|
|
358
358
|
}
|
|
359
359
|
}
|
|
360
360
|
}
|
|
Binary file
|