@shadow-shard-tools/docs-core 1.0.16 → 1.0.18

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 (160) hide show
  1. package/README.md +28 -5
  2. package/dist/cjs/configs/clientConfig.js +162 -0
  3. package/dist/cjs/configs/codeLanguagesConfig.js +36 -0
  4. package/dist/cjs/configs/index.js +20 -0
  5. package/dist/cjs/configs/sstDocsConfig.browser.js +27 -0
  6. package/dist/cjs/configs/sstDocsConfig.js +88 -0
  7. package/dist/cjs/configs/sstDocsConfigShared.js +174 -0
  8. package/dist/cjs/constants/alignmentClasses.js +17 -0
  9. package/dist/cjs/constants/index.js +7 -0
  10. package/dist/cjs/constants/spacingClasses.js +9 -0
  11. package/dist/cjs/data/buildTree.js +93 -0
  12. package/dist/cjs/data/fsDataProvider.js +23 -0
  13. package/dist/cjs/data/httpDataProvider.js +25 -0
  14. package/dist/cjs/data/index.js +19 -0
  15. package/dist/cjs/data/loadAllCategories.js +20 -0
  16. package/dist/cjs/data/loadAllItems.js +14 -0
  17. package/dist/cjs/data/loadVersionData.js +16 -0
  18. package/dist/cjs/data/loadVersions.js +6 -0
  19. package/dist/cjs/index.js +22 -0
  20. package/dist/cjs/themes/index.js +11 -0
  21. package/dist/cjs/themes/presets/default.js +121 -0
  22. package/dist/cjs/themes/themeRegistry.js +22 -0
  23. package/dist/cjs/types/AudioData.js +2 -0
  24. package/dist/cjs/types/BaseImage.js +2 -0
  25. package/dist/cjs/types/Category.js +2 -0
  26. package/dist/cjs/types/CategoryTitleData.js +2 -0
  27. package/dist/cjs/types/ChartData.js +2 -0
  28. package/dist/cjs/types/ClientVisibleSstDocsConfig.js +2 -0
  29. package/dist/cjs/types/CodeData.js +2 -0
  30. package/dist/cjs/types/Content.js +2 -0
  31. package/dist/cjs/types/DataProvider.js +2 -0
  32. package/dist/cjs/types/DividerData.js +2 -0
  33. package/dist/cjs/types/DocItem.js +2 -0
  34. package/dist/cjs/types/HeaderBranding.js +2 -0
  35. package/dist/cjs/types/HtmlGeneratorSettings.js +2 -0
  36. package/dist/cjs/types/ImageCarouselData.js +2 -0
  37. package/dist/cjs/types/ImageCompareData.js +2 -0
  38. package/dist/cjs/types/ImageData.js +2 -0
  39. package/dist/cjs/types/ImageGridData.js +2 -0
  40. package/dist/cjs/types/IndexJson.js +2 -0
  41. package/dist/cjs/types/ListData.js +2 -0
  42. package/dist/cjs/types/Logger.js +2 -0
  43. package/dist/cjs/types/MathData.js +2 -0
  44. package/dist/cjs/types/MessageBoxData.js +2 -0
  45. package/dist/cjs/types/RawCategory.js +2 -0
  46. package/dist/cjs/types/SstDocsConfig.js +2 -0
  47. package/dist/cjs/types/StyleTheme.js +2 -0
  48. package/dist/cjs/types/TableData.js +2 -0
  49. package/dist/cjs/types/TextData.js +2 -0
  50. package/dist/cjs/types/TitleData.js +2 -0
  51. package/dist/cjs/types/Version.js +2 -0
  52. package/dist/cjs/types/YoutubeData.js +2 -0
  53. package/dist/cjs/types/index.js +2 -0
  54. package/dist/cjs/utilities/dom/copyToClipboard.js +40 -0
  55. package/dist/cjs/utilities/dom/downloadTextFile.js +23 -0
  56. package/dist/cjs/utilities/dom/getResponsiveWidth.js +11 -0
  57. package/dist/cjs/utilities/file/getFileExtension.js +9 -0
  58. package/dist/cjs/utilities/index.js +53 -0
  59. package/dist/cjs/utilities/path/pathExists.js +16 -0
  60. package/dist/cjs/utilities/path/resolveAgainstProjectRoot.js +13 -0
  61. package/dist/cjs/utilities/path/resolveDataPath.js +18 -0
  62. package/dist/cjs/utilities/string/extractYouTubeId.js +18 -0
  63. package/dist/cjs/utilities/string/normalizeBaseUrlPath.js +11 -0
  64. package/dist/cjs/utilities/string/normalizeSystemPath.js +14 -0
  65. package/dist/cjs/utilities/string/processListItems.js +10 -0
  66. package/dist/cjs/utilities/string/sanitizeFilename.js +13 -0
  67. package/dist/cjs/utilities/string/slugify.js +12 -0
  68. package/dist/cjs/utilities/string/withBasePath.js +45 -0
  69. package/dist/cjs/utilities/system/createTimeout.js +11 -0
  70. package/dist/cjs/utilities/system/formatTime.js +12 -0
  71. package/dist/cjs/utilities/system/logger.js +40 -0
  72. package/dist/cjs/utilities/validation/isMobileDevice.js +8 -0
  73. package/dist/cjs/utilities/validation/isValidColor.js +182 -0
  74. package/dist/cjs/utilities/validation/isValidImageUrl.js +42 -0
  75. package/dist/cjs/utilities/validation/isValidYouTubeId.js +9 -0
  76. package/dist/cjs/utilities/validation/validateScale.js +8 -0
  77. package/dist/configs/clientConfig.d.ts.map +1 -1
  78. package/dist/configs/clientConfig.js +116 -10
  79. package/dist/configs/clientConfig.js.map +1 -1
  80. package/dist/configs/index.d.ts +0 -1
  81. package/dist/configs/index.d.ts.map +1 -1
  82. package/dist/configs/index.js +0 -1
  83. package/dist/configs/index.js.map +1 -1
  84. package/dist/configs/sstDocsConfig.browser.d.ts +8 -0
  85. package/dist/configs/sstDocsConfig.browser.d.ts.map +1 -0
  86. package/dist/configs/sstDocsConfig.browser.js +18 -0
  87. package/dist/configs/sstDocsConfig.browser.js.map +1 -0
  88. package/dist/configs/sstDocsConfig.d.ts +2 -6
  89. package/dist/configs/sstDocsConfig.d.ts.map +1 -1
  90. package/dist/configs/sstDocsConfig.js +2 -240
  91. package/dist/configs/sstDocsConfig.js.map +1 -1
  92. package/dist/configs/sstDocsConfigShared.d.ts +9 -0
  93. package/dist/configs/sstDocsConfigShared.d.ts.map +1 -0
  94. package/dist/configs/sstDocsConfigShared.js +165 -0
  95. package/dist/configs/sstDocsConfigShared.js.map +1 -0
  96. package/dist/constants/{aligmentClasses.d.ts → alignmentClasses.d.ts} +1 -1
  97. package/dist/constants/alignmentClasses.d.ts.map +1 -0
  98. package/dist/constants/{aligmentClasses.js → alignmentClasses.js} +1 -1
  99. package/dist/constants/alignmentClasses.js.map +1 -0
  100. package/dist/constants/index.d.ts +1 -1
  101. package/dist/constants/index.d.ts.map +1 -1
  102. package/dist/constants/index.js +1 -1
  103. package/dist/constants/index.js.map +1 -1
  104. package/dist/data/fsDataProvider.d.ts +2 -1
  105. package/dist/data/fsDataProvider.d.ts.map +1 -1
  106. package/dist/data/fsDataProvider.js +15 -3
  107. package/dist/data/fsDataProvider.js.map +1 -1
  108. package/dist/data/httpDataProvider.d.ts +2 -1
  109. package/dist/data/httpDataProvider.d.ts.map +1 -1
  110. package/dist/data/httpDataProvider.js +17 -4
  111. package/dist/data/httpDataProvider.js.map +1 -1
  112. package/dist/data/index.d.ts +2 -2
  113. package/dist/data/index.d.ts.map +1 -1
  114. package/dist/data/index.js +2 -2
  115. package/dist/data/index.js.map +1 -1
  116. package/dist/themes/index.d.ts +1 -2
  117. package/dist/themes/index.d.ts.map +1 -1
  118. package/dist/themes/index.js +1 -2
  119. package/dist/themes/index.js.map +1 -1
  120. package/dist/themes/presets/default.d.ts +3 -0
  121. package/dist/themes/presets/default.d.ts.map +1 -0
  122. package/dist/themes/presets/default.js +119 -0
  123. package/dist/themes/presets/default.js.map +1 -0
  124. package/dist/themes/themeRegistry.d.ts +3 -4
  125. package/dist/themes/themeRegistry.d.ts.map +1 -1
  126. package/dist/themes/themeRegistry.js +11 -11
  127. package/dist/themes/themeRegistry.js.map +1 -1
  128. package/dist/types/Content.d.ts +35 -18
  129. package/dist/types/Content.d.ts.map +1 -1
  130. package/dist/types/HtmlGeneratorSettings.d.ts +3 -11
  131. package/dist/types/HtmlGeneratorSettings.d.ts.map +1 -1
  132. package/dist/types/StyleTheme.d.ts +115 -16
  133. package/dist/types/StyleTheme.d.ts.map +1 -1
  134. package/dist/types/index.d.ts +1 -2
  135. package/dist/types/index.d.ts.map +1 -1
  136. package/dist/utilities/string/normalizeSystemPath.d.ts.map +1 -1
  137. package/dist/utilities/string/normalizeSystemPath.js +9 -1
  138. package/dist/utilities/string/normalizeSystemPath.js.map +1 -1
  139. package/dist/utilities/string/withBasePath.d.ts.map +1 -1
  140. package/dist/utilities/string/withBasePath.js +35 -6
  141. package/dist/utilities/string/withBasePath.js.map +1 -1
  142. package/package.json +141 -137
  143. package/dist/configs/styles/320/241onfig.d.ts +0 -3
  144. package/dist/configs/styles/320/241onfig.d.ts.map +0 -1
  145. package/dist/configs/styles/320/241onfig.js +0 -8
  146. package/dist/configs/styles/320/241onfig.js.map +0 -1
  147. package/dist/constants/aligmentClasses.d.ts.map +0 -1
  148. package/dist/constants/aligmentClasses.js.map +0 -1
  149. package/dist/themes/darkTheme.d.ts +0 -3
  150. package/dist/themes/darkTheme.d.ts.map +0 -1
  151. package/dist/themes/darkTheme.js +0 -119
  152. package/dist/themes/darkTheme.js.map +0 -1
  153. package/dist/themes/lightTheme.d.ts +0 -3
  154. package/dist/themes/lightTheme.d.ts.map +0 -1
  155. package/dist/themes/lightTheme.js +0 -119
  156. package/dist/themes/lightTheme.js.map +0 -1
  157. package/dist/types/StylesConfig.d.ts +0 -8
  158. package/dist/types/StylesConfig.d.ts.map +0 -1
  159. package/dist/types/StylesConfig.js +0 -2
  160. package/dist/types/StylesConfig.js.map +0 -1
@@ -0,0 +1,53 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.downloadTextFile = exports.copyToClipboard = exports.getResponsiveWidth = exports.validateScale = exports.isValidYouTubeId = exports.isValidImageUrl = exports.isValidColor = exports.isMobileDevice = exports.createLogger = exports.formatTime = exports.createTimeout = exports.pathExists = exports.resolveAgainstProjectRoot = exports.resolveDataPath = exports.getFileExtension = exports.normalizeSystemPath = exports.normalizeBaseUrlPath = exports.processListItems = exports.withBasePath = exports.extractYouTubeId = exports.sanitizeFilename = exports.slugify = void 0;
4
+ // string
5
+ var slugify_js_1 = require("./string/slugify.js");
6
+ Object.defineProperty(exports, "slugify", { enumerable: true, get: function () { return slugify_js_1.slugify; } });
7
+ var sanitizeFilename_js_1 = require("./string/sanitizeFilename.js");
8
+ Object.defineProperty(exports, "sanitizeFilename", { enumerable: true, get: function () { return sanitizeFilename_js_1.sanitizeFilename; } });
9
+ var extractYouTubeId_js_1 = require("./string/extractYouTubeId.js");
10
+ Object.defineProperty(exports, "extractYouTubeId", { enumerable: true, get: function () { return extractYouTubeId_js_1.extractYouTubeId; } });
11
+ var withBasePath_js_1 = require("./string/withBasePath.js");
12
+ Object.defineProperty(exports, "withBasePath", { enumerable: true, get: function () { return withBasePath_js_1.withBasePath; } });
13
+ var processListItems_js_1 = require("./string/processListItems.js");
14
+ Object.defineProperty(exports, "processListItems", { enumerable: true, get: function () { return processListItems_js_1.processListItems; } });
15
+ var normalizeBaseUrlPath_js_1 = require("./string/normalizeBaseUrlPath.js");
16
+ Object.defineProperty(exports, "normalizeBaseUrlPath", { enumerable: true, get: function () { return normalizeBaseUrlPath_js_1.normalizeBaseUrlPath; } });
17
+ var normalizeSystemPath_js_1 = require("./string/normalizeSystemPath.js");
18
+ Object.defineProperty(exports, "normalizeSystemPath", { enumerable: true, get: function () { return normalizeSystemPath_js_1.normalizeSystemPath; } });
19
+ // file
20
+ var getFileExtension_js_1 = require("./file/getFileExtension.js");
21
+ Object.defineProperty(exports, "getFileExtension", { enumerable: true, get: function () { return getFileExtension_js_1.getFileExtension; } });
22
+ //path
23
+ var resolveDataPath_js_1 = require("./path/resolveDataPath.js");
24
+ Object.defineProperty(exports, "resolveDataPath", { enumerable: true, get: function () { return resolveDataPath_js_1.resolveDataPath; } });
25
+ var resolveAgainstProjectRoot_js_1 = require("./path/resolveAgainstProjectRoot.js");
26
+ Object.defineProperty(exports, "resolveAgainstProjectRoot", { enumerable: true, get: function () { return resolveAgainstProjectRoot_js_1.resolveAgainstProjectRoot; } });
27
+ var pathExists_js_1 = require("./path/pathExists.js");
28
+ Object.defineProperty(exports, "pathExists", { enumerable: true, get: function () { return pathExists_js_1.pathExists; } });
29
+ // system
30
+ var createTimeout_js_1 = require("./system/createTimeout.js");
31
+ Object.defineProperty(exports, "createTimeout", { enumerable: true, get: function () { return createTimeout_js_1.createTimeout; } });
32
+ var formatTime_js_1 = require("./system/formatTime.js");
33
+ Object.defineProperty(exports, "formatTime", { enumerable: true, get: function () { return formatTime_js_1.formatTime; } });
34
+ var logger_js_1 = require("./system/logger.js");
35
+ Object.defineProperty(exports, "createLogger", { enumerable: true, get: function () { return logger_js_1.createLogger; } });
36
+ // validation
37
+ var isMobileDevice_js_1 = require("./validation/isMobileDevice.js");
38
+ Object.defineProperty(exports, "isMobileDevice", { enumerable: true, get: function () { return isMobileDevice_js_1.isMobileDevice; } });
39
+ var isValidColor_js_1 = require("./validation/isValidColor.js");
40
+ Object.defineProperty(exports, "isValidColor", { enumerable: true, get: function () { return isValidColor_js_1.isValidColor; } });
41
+ var isValidImageUrl_js_1 = require("./validation/isValidImageUrl.js");
42
+ Object.defineProperty(exports, "isValidImageUrl", { enumerable: true, get: function () { return isValidImageUrl_js_1.isValidImageUrl; } });
43
+ var isValidYouTubeId_js_1 = require("./validation/isValidYouTubeId.js");
44
+ Object.defineProperty(exports, "isValidYouTubeId", { enumerable: true, get: function () { return isValidYouTubeId_js_1.isValidYouTubeId; } });
45
+ var validateScale_js_1 = require("./validation/validateScale.js");
46
+ Object.defineProperty(exports, "validateScale", { enumerable: true, get: function () { return validateScale_js_1.validateScale; } });
47
+ // dom
48
+ var getResponsiveWidth_js_1 = require("./dom/getResponsiveWidth.js");
49
+ Object.defineProperty(exports, "getResponsiveWidth", { enumerable: true, get: function () { return getResponsiveWidth_js_1.getResponsiveWidth; } });
50
+ var copyToClipboard_js_1 = require("./dom/copyToClipboard.js");
51
+ Object.defineProperty(exports, "copyToClipboard", { enumerable: true, get: function () { return copyToClipboard_js_1.copyToClipboard; } });
52
+ var downloadTextFile_js_1 = require("./dom/downloadTextFile.js");
53
+ Object.defineProperty(exports, "downloadTextFile", { enumerable: true, get: function () { return downloadTextFile_js_1.downloadTextFile; } });
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.pathExists = pathExists;
4
+ const promises_1 = require("node:fs/promises");
5
+ const node_fs_1 = require("node:fs");
6
+ async function pathExists(pathLike) {
7
+ try {
8
+ await (0, promises_1.access)(pathLike, node_fs_1.constants.F_OK);
9
+ return true;
10
+ }
11
+ catch (error) {
12
+ if (error.code === "ENOENT")
13
+ return false;
14
+ throw error;
15
+ }
16
+ }
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.resolveAgainstProjectRoot = resolveAgainstProjectRoot;
7
+ const node_path_1 = __importDefault(require("node:path"));
8
+ const app_root_path_1 = __importDefault(require("app-root-path"));
9
+ function resolveAgainstProjectRoot(candidate) {
10
+ return node_path_1.default.isAbsolute(candidate)
11
+ ? candidate
12
+ : node_path_1.default.join(app_root_path_1.default.path, candidate);
13
+ }
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.resolveDataPath = resolveDataPath;
7
+ const node_path_1 = __importDefault(require("node:path"));
8
+ const resolveAgainstProjectRoot_js_1 = require("./resolveAgainstProjectRoot.js");
9
+ const normalizeSystemPath_js_1 = require("../string/normalizeSystemPath.js");
10
+ function resolveDataPath(input) {
11
+ const argv = process.argv.slice(2);
12
+ const i = argv.indexOf("--fsDataPath");
13
+ const fromCli = i !== -1 && argv[i + 1] ? argv[i + 1] : undefined;
14
+ const fromEnv = process.env.FS_DATA_PATH;
15
+ const candidate = input ?? fromCli ?? fromEnv ?? "./public/SST-Docs/data";
16
+ const abs = (0, resolveAgainstProjectRoot_js_1.resolveAgainstProjectRoot)(String(candidate));
17
+ return (0, normalizeSystemPath_js_1.normalizeSystemPath)(node_path_1.default.resolve(abs));
18
+ }
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.extractYouTubeId = void 0;
4
+ const extractYouTubeId = (url) => {
5
+ const patterns = [
6
+ /(?:youtube\.com\/watch\?v=|youtu\.be\/|youtube\.com\/embed\/)([^&\n?#]+)/,
7
+ /^([a-zA-Z0-9_-]{11})$/,
8
+ ];
9
+ for (const pattern of patterns) {
10
+ const match = url.match(pattern);
11
+ if (match && match[1]) {
12
+ return match[1];
13
+ }
14
+ }
15
+ return null;
16
+ };
17
+ exports.extractYouTubeId = extractYouTubeId;
18
+ exports.default = exports.extractYouTubeId;
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.normalizeBaseUrlPath = normalizeBaseUrlPath;
4
+ function normalizeBaseUrlPath(basePath) {
5
+ if (!basePath)
6
+ return "/";
7
+ if (basePath === "/")
8
+ return "/";
9
+ const trimmed = basePath.replace(/\/+$/, "");
10
+ return trimmed.startsWith("/") ? trimmed : `/${trimmed}`;
11
+ }
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.normalizeSystemPath = normalizeSystemPath;
4
+ const DRIVE_ROOT_REGEX = /^[A-Za-z]:[\\/]*$/;
5
+ function normalizeSystemPath(p) {
6
+ const normalized = p.replace(/\\/g, "/");
7
+ if (normalized === "/") {
8
+ return "/";
9
+ }
10
+ if (DRIVE_ROOT_REGEX.test(normalized)) {
11
+ return `${normalized.slice(0, 2)}/`;
12
+ }
13
+ return normalized.replace(/\/+$/, "");
14
+ }
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.processListItems = void 0;
4
+ const processListItems = (items) => {
5
+ return (items ?? [])
6
+ .map((item) => item.trim())
7
+ .filter((item) => item.length > 0);
8
+ };
9
+ exports.processListItems = processListItems;
10
+ exports.default = exports.processListItems;
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.sanitizeFilename = void 0;
4
+ const sanitizeFilename = (filename) => {
5
+ return filename
6
+ .replace(/[<>:"/\\|?*]/g, "_")
7
+ .replace(/\s+/g, "_")
8
+ .replace(/_+/g, "_")
9
+ .replace(/^_+|_+$/g, "")
10
+ .slice(0, 255);
11
+ };
12
+ exports.sanitizeFilename = sanitizeFilename;
13
+ exports.default = exports.sanitizeFilename;
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.slugify = void 0;
4
+ const slugify = (text) => {
5
+ return text
6
+ .toLowerCase()
7
+ .trim()
8
+ .replace(/\s+/g, "-")
9
+ .replace(/[^\w-]/g, "");
10
+ };
11
+ exports.slugify = slugify;
12
+ exports.default = exports.slugify;
@@ -0,0 +1,45 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.withBasePath = withBasePath;
7
+ const node_path_1 = __importDefault(require("node:path"));
8
+ function joinUrlPath(basePath, rawChild) {
9
+ const normalizedBase = node_path_1.default.posix.normalize(basePath || "/");
10
+ const normalizedChild = node_path_1.default.posix
11
+ .normalize(rawChild || "")
12
+ .replace(/^\/+/, "");
13
+ const baseWithLeadingSlash = normalizedBase.startsWith("/")
14
+ ? normalizedBase
15
+ : `/${normalizedBase}`;
16
+ return node_path_1.default.posix.join(baseWithLeadingSlash, normalizedChild);
17
+ }
18
+ function isAbsoluteUrl(value) {
19
+ try {
20
+ new URL(value);
21
+ return true;
22
+ }
23
+ catch {
24
+ return false;
25
+ }
26
+ }
27
+ function withBasePath(raw, baseUrl) {
28
+ if (!raw)
29
+ return "";
30
+ const trimmedRaw = raw.trim();
31
+ if (/^data:/i.test(trimmedRaw) ||
32
+ /^\/\//.test(trimmedRaw) ||
33
+ isAbsoluteUrl(trimmedRaw)) {
34
+ return trimmedRaw;
35
+ }
36
+ const trimmedBase = (baseUrl ?? "/").trim();
37
+ if (trimmedBase && isAbsoluteUrl(trimmedBase)) {
38
+ const url = new URL(trimmedBase);
39
+ url.pathname = joinUrlPath(url.pathname, trimmedRaw);
40
+ return url.toString();
41
+ }
42
+ const parsedBase = new URL(trimmedBase || "/", "http://local.placeholder");
43
+ const joinedPath = joinUrlPath(parsedBase.pathname, trimmedRaw);
44
+ return `${joinedPath}${parsedBase.search}${parsedBase.hash}`;
45
+ }
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createTimeout = void 0;
4
+ const createTimeout = (callback, delay) => {
5
+ const timeoutId = setTimeout(callback, delay);
6
+ return {
7
+ clear: () => clearTimeout(timeoutId),
8
+ };
9
+ };
10
+ exports.createTimeout = createTimeout;
11
+ exports.default = exports.createTimeout;
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.formatTime = void 0;
4
+ const formatTime = (seconds) => {
5
+ if (isNaN(seconds) || seconds < 0)
6
+ return "0:00";
7
+ const mins = Math.floor(seconds / 60);
8
+ const secs = Math.floor(seconds % 60);
9
+ return `${mins}:${secs.toString().padStart(2, "0")}`;
10
+ };
11
+ exports.formatTime = formatTime;
12
+ exports.default = exports.formatTime;
@@ -0,0 +1,40 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createLogger = void 0;
4
+ const node_process_1 = require("node:process");
5
+ const levelWeights = {
6
+ debug: 10,
7
+ info: 20,
8
+ warn: 30,
9
+ error: 40,
10
+ };
11
+ function format(scope, level, message) {
12
+ return `[${scope}] ${level.toUpperCase()}: ${message}`;
13
+ }
14
+ const defaultLevel = process.env.HTML_GENERATOR_LOG_LEVEL ?? "info";
15
+ const createLogger = (scope) => {
16
+ const minWeight = levelWeights[defaultLevel];
17
+ return {
18
+ debug(message) {
19
+ if (levelWeights.debug >= minWeight) {
20
+ node_process_1.stdout.write(`${format(scope, "debug", message)}\n`);
21
+ }
22
+ },
23
+ info(message) {
24
+ if (levelWeights.info >= minWeight) {
25
+ node_process_1.stdout.write(`${format(scope, "info", message)}\n`);
26
+ }
27
+ },
28
+ warn(message) {
29
+ if (levelWeights.warn >= minWeight) {
30
+ node_process_1.stderr.write(`${format(scope, "warn", message)}\n`);
31
+ }
32
+ },
33
+ error(message) {
34
+ if (levelWeights.error >= minWeight) {
35
+ node_process_1.stderr.write(`${format(scope, "error", message)}\n`);
36
+ }
37
+ },
38
+ };
39
+ };
40
+ exports.createLogger = createLogger;
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isMobileDevice = void 0;
4
+ const isMobileDevice = () => {
5
+ return typeof window !== "undefined" && window.innerWidth < 768;
6
+ };
7
+ exports.isMobileDevice = isMobileDevice;
8
+ exports.default = exports.isMobileDevice;
@@ -0,0 +1,182 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isValidColor = void 0;
4
+ const HEX_COLOR_REGEX = /^#(?:[0-9a-f]{3}){1,2}(?:[0-9a-f]{2})?$/i;
5
+ const RGB_COLOR_REGEX = /^rgba?\(\s*(\d{1,3}%?)(\s*,\s*(\d{1,3}%?)){2}(\s*,\s*(0|0?\.\d+|1(\.0+)?))?\s*\)$/i;
6
+ const HSL_COLOR_REGEX = /^hsla?\(\s*\d{1,3}(\.\d+)?(deg|grad|rad|turn)?\s*,\s*\d{1,3}%\s*,\s*\d{1,3}%(\s*,\s*(0|0?\.\d+|1(\.0+)?))?\s*\)$/i;
7
+ const VAR_COLOR_REGEX = /^var\(--[^)]+\)$/i;
8
+ const NAMED_COLORS = new Set([
9
+ "aliceblue",
10
+ "antiquewhite",
11
+ "aqua",
12
+ "aquamarine",
13
+ "azure",
14
+ "beige",
15
+ "bisque",
16
+ "black",
17
+ "blanchedalmond",
18
+ "blue",
19
+ "blueviolet",
20
+ "brown",
21
+ "burlywood",
22
+ "cadetblue",
23
+ "chartreuse",
24
+ "chocolate",
25
+ "coral",
26
+ "cornflowerblue",
27
+ "cornsilk",
28
+ "crimson",
29
+ "cyan",
30
+ "darkblue",
31
+ "darkcyan",
32
+ "darkgoldenrod",
33
+ "darkgray",
34
+ "darkgreen",
35
+ "darkgrey",
36
+ "darkkhaki",
37
+ "darkmagenta",
38
+ "darkolivegreen",
39
+ "darkorange",
40
+ "darkorchid",
41
+ "darkred",
42
+ "darksalmon",
43
+ "darkseagreen",
44
+ "darkslateblue",
45
+ "darkslategray",
46
+ "darkslategrey",
47
+ "darkturquoise",
48
+ "darkviolet",
49
+ "deeppink",
50
+ "deepskyblue",
51
+ "dimgray",
52
+ "dimgrey",
53
+ "dodgerblue",
54
+ "firebrick",
55
+ "floralwhite",
56
+ "forestgreen",
57
+ "fuchsia",
58
+ "gainsboro",
59
+ "ghostwhite",
60
+ "gold",
61
+ "goldenrod",
62
+ "gray",
63
+ "green",
64
+ "greenyellow",
65
+ "grey",
66
+ "honeydew",
67
+ "hotpink",
68
+ "indianred",
69
+ "indigo",
70
+ "ivory",
71
+ "khaki",
72
+ "lavender",
73
+ "lavenderblush",
74
+ "lawngreen",
75
+ "lemonchiffon",
76
+ "lightblue",
77
+ "lightcoral",
78
+ "lightcyan",
79
+ "lightgoldenrodyellow",
80
+ "lightgray",
81
+ "lightgreen",
82
+ "lightgrey",
83
+ "lightpink",
84
+ "lightsalmon",
85
+ "lightseagreen",
86
+ "lightskyblue",
87
+ "lightslategray",
88
+ "lightslategrey",
89
+ "lightsteelblue",
90
+ "lightyellow",
91
+ "lime",
92
+ "limegreen",
93
+ "linen",
94
+ "magenta",
95
+ "maroon",
96
+ "mediumaquamarine",
97
+ "mediumblue",
98
+ "mediumorchid",
99
+ "mediumpurple",
100
+ "mediumseagreen",
101
+ "mediumslateblue",
102
+ "mediumspringgreen",
103
+ "mediumturquoise",
104
+ "mediumvioletred",
105
+ "midnightblue",
106
+ "mintcream",
107
+ "mistyrose",
108
+ "moccasin",
109
+ "navajowhite",
110
+ "navy",
111
+ "oldlace",
112
+ "olive",
113
+ "olivedrab",
114
+ "orange",
115
+ "orangered",
116
+ "orchid",
117
+ "palegoldenrod",
118
+ "palegreen",
119
+ "paleturquoise",
120
+ "palevioletred",
121
+ "papayawhip",
122
+ "peachpuff",
123
+ "peru",
124
+ "pink",
125
+ "plum",
126
+ "powderblue",
127
+ "purple",
128
+ "rebeccapurple",
129
+ "red",
130
+ "rosybrown",
131
+ "royalblue",
132
+ "saddlebrown",
133
+ "salmon",
134
+ "sandybrown",
135
+ "seagreen",
136
+ "seashell",
137
+ "sienna",
138
+ "silver",
139
+ "skyblue",
140
+ "slateblue",
141
+ "slategray",
142
+ "slategrey",
143
+ "snow",
144
+ "springgreen",
145
+ "steelblue",
146
+ "tan",
147
+ "teal",
148
+ "thistle",
149
+ "tomato",
150
+ "turquoise",
151
+ "violet",
152
+ "wheat",
153
+ "white",
154
+ "whitesmoke",
155
+ "yellow",
156
+ "yellowgreen",
157
+ ]);
158
+ const isSupportedInNode = (value) => {
159
+ const lower = value.toLowerCase();
160
+ return (HEX_COLOR_REGEX.test(value) ||
161
+ RGB_COLOR_REGEX.test(value) ||
162
+ HSL_COLOR_REGEX.test(value) ||
163
+ VAR_COLOR_REGEX.test(value) ||
164
+ lower === "transparent" ||
165
+ lower === "currentcolor" ||
166
+ NAMED_COLORS.has(lower));
167
+ };
168
+ const isValidColor = (color) => {
169
+ if (typeof color !== "string")
170
+ return false;
171
+ const trimmed = color.trim();
172
+ if (trimmed.length === 0)
173
+ return false;
174
+ if (typeof document !== "undefined" && typeof document.createElement === "function") {
175
+ const div = document.createElement("div");
176
+ div.style.color = trimmed;
177
+ return div.style.color !== "";
178
+ }
179
+ return isSupportedInNode(trimmed);
180
+ };
181
+ exports.isValidColor = isValidColor;
182
+ exports.default = exports.isValidColor;
@@ -0,0 +1,42 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.isValidImageUrl = void 0;
7
+ const getFileExtension_js_1 = __importDefault(require("../file/getFileExtension.js"));
8
+ const VALID_EXTENSIONS = new Set([
9
+ "jpg",
10
+ "jpeg",
11
+ "png",
12
+ "gif",
13
+ "webp",
14
+ "svg",
15
+ ]);
16
+ const ABSOLUTE_PROTOCOL_REGEX = /^[a-z][a-z0-9+\-.]*:/i;
17
+ const isValidImageUrl = (rawUrl) => {
18
+ if (typeof rawUrl !== "string")
19
+ return false;
20
+ const trimmed = rawUrl.trim();
21
+ if (trimmed.length === 0)
22
+ return false;
23
+ if (trimmed.startsWith("data:")) {
24
+ return true;
25
+ }
26
+ try {
27
+ // Accept relative paths by resolving them against a dummy origin.
28
+ const urlObj = ABSOLUTE_PROTOCOL_REGEX.test(trimmed)
29
+ ? new URL(trimmed)
30
+ : new URL(trimmed, "http://localhost");
31
+ if (urlObj.protocol === "data:") {
32
+ return true;
33
+ }
34
+ const extension = (0, getFileExtension_js_1.default)(urlObj.pathname);
35
+ return VALID_EXTENSIONS.has(extension);
36
+ }
37
+ catch {
38
+ return false;
39
+ }
40
+ };
41
+ exports.isValidImageUrl = isValidImageUrl;
42
+ exports.default = exports.isValidImageUrl;
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isValidYouTubeId = void 0;
4
+ const isValidYouTubeId = (id) => {
5
+ const youtubeRegex = /^[a-zA-Z0-9_-]{11}$/;
6
+ return youtubeRegex.test(id);
7
+ };
8
+ exports.isValidYouTubeId = isValidYouTubeId;
9
+ exports.default = exports.isValidYouTubeId;
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.validateScale = void 0;
4
+ const validateScale = (scale) => {
5
+ return typeof scale === "number" && scale > 0 ? scale : 1;
6
+ };
7
+ exports.validateScale = validateScale;
8
+ exports.default = exports.validateScale;
@@ -1 +1 @@
1
- {"version":3,"file":"clientConfig.d.ts","sourceRoot":"","sources":["../../src/configs/clientConfig.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,wCAAwC,CAAC;AACzF,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAEvE,eAAO,MAAM,4BAA4B,wBAAwB,CAAC;AAElE,KAAK,kBAAkB,GACnB,qBAAqB,GACrB,0BAA0B,CAAC;AAE/B,MAAM,WAAW,gCAAgC;IAC/C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,yBAAyB;IACxC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC;AAED,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,qBAAqB,GAC5B,0BAA0B,CAM5B;AAED,wBAAgB,+BAA+B,CAC7C,MAAM,EAAE,kBAAkB,EAC1B,OAAO,CAAC,EAAE,gCAAgC,GACzC,MAAM,CAKR;AAED,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,kBAAkB,EAC1B,OAAO,CAAC,EAAE,yBAAyB,GAClC,0BAA0B,CAe5B;AAED,wBAAgB,gBAAgB,CAC9B,UAAU,SAA+B,GACxC,0BAA0B,CAc5B"}
1
+ {"version":3,"file":"clientConfig.d.ts","sourceRoot":"","sources":["../../src/configs/clientConfig.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,wCAAwC,CAAC;AACzF,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAEvE,eAAO,MAAM,4BAA4B,wBAAwB,CAAC;AAElE,KAAK,kBAAkB,GACnB,qBAAqB,GACrB,0BAA0B,CAAC;AAE/B,MAAM,WAAW,gCAAgC;IAC/C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,yBAAyB;IACxC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC;AAED,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,qBAAqB,GAC5B,0BAA0B,CAM5B;AAED,wBAAgB,+BAA+B,CAC7C,MAAM,EAAE,kBAAkB,EAC1B,OAAO,CAAC,EAAE,gCAAgC,GACzC,MAAM,CAKR;AAED,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,kBAAkB,EAC1B,OAAO,CAAC,EAAE,yBAAyB,GAClC,0BAA0B,CAe5B;AAED,wBAAgB,gBAAgB,CAC9B,UAAU,SAA+B,GACxC,0BAA0B,CAQ5B"}