jmapcloud-ng 1.1.15 → 1.1.16

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 (108) hide show
  1. package/.env.example +14 -2
  2. package/.storybook/main.ts +39 -0
  3. package/.storybook/preview.tsx +53 -0
  4. package/index.html.example +58 -0
  5. package/package.json +8 -16
  6. package/public/index.js +190 -1
  7. package/public/ng-core/index.js +8 -7
  8. package/stories/NumberInput.stories.tsx +76 -0
  9. package/stories/RadioGroup.stories.tsx +58 -0
  10. package/stories/Select.stories.tsx +80 -0
  11. package/stories/TextField.stories.tsx +58 -0
  12. package/vite.config.ts +184 -0
  13. package/vitest.config.ts +20 -0
  14. package/public/119.bfa9a4b99d83c5c950cd.js +0 -1
  15. package/public/185.634f2ffec94bfe977216.js +0 -1
  16. package/public/460.e07d1df5de20ecd37b4d.js +0 -89
  17. package/public/52.f5e2b640458dea9838d1.js +0 -1
  18. package/public/540.9cffaf176f3221c8051b.js +0 -1
  19. package/public/579.5815b1ea7d0fe7de443d.js +0 -101
  20. package/public/619.eeeadc32d69cb206b2f7.js +0 -1
  21. package/public/625.92fb52db33bd0c51555c.js +0 -1
  22. package/public/672.18c77287fb908be1bd6e.js +0 -1
  23. package/public/931.00ed503def9cbc08ad50.js +0 -1
  24. package/public/de5f4722562b2b315b48.png +0 -0
  25. package/public/ng-core/09981dd99649bb6ef1ac.svg +0 -105
  26. package/public/ng-core/52.14c434f61e513f1ef5da.js +0 -1
  27. package/public/ng-core/c193d6d1884e572c3b28.png +0 -0
  28. package/public/ng-core/d0566a872348b35a7296.png +0 -0
  29. package/public/ng-core/de5f4722562b2b315b48.png +0 -0
  30. /package/public/{0038a0301d10913ef1a5.png → ARROW.9V9mH5sV.png} +0 -0
  31. /package/public/{4057c163e11def908a90.svg → JMap-Cloud-Logo.Bqp3iL-5.svg} +0 -0
  32. /package/public/{6be4a9aff03c67e671d8.woff → barlow-v5-latin-ext_latin-300.BOtJevCE.woff} +0 -0
  33. /package/public/{62df9be6c862d273e849.ttf → barlow-v5-latin-ext_latin-300.CU1HK-bZ.ttf} +0 -0
  34. /package/public/{8b70e6d02996d24fbe26.woff2 → barlow-v5-latin-ext_latin-300.DLZg2Aqw.woff2} +0 -0
  35. /package/public/{e29c61ea7a5baabf5f4e.eot → barlow-v5-latin-ext_latin-300.f3X_qAHv.eot} +0 -0
  36. /package/public/{67e73a1cc6b8251e3ce1.eot → barlow-v5-latin-ext_latin-300italic.Cq3R63xm.eot} +0 -0
  37. /package/public/{c3d30fdfede822039221.woff → barlow-v5-latin-ext_latin-300italic.D7H-NYlV.woff} +0 -0
  38. /package/public/{9cd8b1aa87f79ba5fa0d.ttf → barlow-v5-latin-ext_latin-300italic.IFGWg-1n.ttf} +0 -0
  39. /package/public/{f8f61d01e9d0e645f832.woff2 → barlow-v5-latin-ext_latin-300italic.egA3zdlg.woff2} +0 -0
  40. /package/public/{78deb69247b11dfaef82.ttf → barlow-v5-latin-ext_latin-500.C4YXkooW.ttf} +0 -0
  41. /package/public/{ba7c7a40fbe1f44f9479.woff2 → barlow-v5-latin-ext_latin-500.CD6t94O0.woff2} +0 -0
  42. /package/public/{e8f262034b5631a64a0b.eot → barlow-v5-latin-ext_latin-500.CxOfqZC2.eot} +0 -0
  43. /package/public/{777e7e6fe2378aaae24f.woff → barlow-v5-latin-ext_latin-500.CzPrU5vz.woff} +0 -0
  44. /package/public/{25a7d7975ef0d3ef388a.woff → barlow-v5-latin-ext_latin-500italic.57LLgqjl.woff} +0 -0
  45. /package/public/{b5165670c231fb850519.ttf → barlow-v5-latin-ext_latin-500italic.B6ytA4Ll.ttf} +0 -0
  46. /package/public/{661f40a1301ccb4a3902.woff2 → barlow-v5-latin-ext_latin-500italic.BlgFPUrR.woff2} +0 -0
  47. /package/public/{e2a6ddee443d4e6cf1ed.eot → barlow-v5-latin-ext_latin-500italic.Ckyh_717.eot} +0 -0
  48. /package/public/{c7d002dea1093108b8de.eot → barlow-v5-latin-ext_latin-700.BRgY-mcC.eot} +0 -0
  49. /package/public/{fd850adaa0518f36b06d.ttf → barlow-v5-latin-ext_latin-700.Bit82amp.ttf} +0 -0
  50. /package/public/{ce8277efba6b7e0a2a5c.woff → barlow-v5-latin-ext_latin-700.BpBhuUVz.woff} +0 -0
  51. /package/public/{d0dd3909312ceba37118.woff2 → barlow-v5-latin-ext_latin-700.DC603mJ6.woff2} +0 -0
  52. /package/public/{4c795b2381e21dab3d48.woff → barlow-v5-latin-ext_latin-700italic.Ca79JvF0.woff} +0 -0
  53. /package/public/{285533c63e34641da323.woff2 → barlow-v5-latin-ext_latin-700italic.ClCyBg9U.woff2} +0 -0
  54. /package/public/{879e91ad82b5b535cf0c.eot → barlow-v5-latin-ext_latin-700italic.D8ZJZUNK.eot} +0 -0
  55. /package/public/{1ee5ef3f7b69d0e1a043.ttf → barlow-v5-latin-ext_latin-700italic.DqT2IX-q.ttf} +0 -0
  56. /package/public/{5202701c84b3fa4d7fab.woff2 → barlow-v5-latin-ext_latin-italic.1jYUkYRv.woff2} +0 -0
  57. /package/public/{20810ee7649dffced61b.ttf → barlow-v5-latin-ext_latin-italic.BEAJKPKF.ttf} +0 -0
  58. /package/public/{ec1879956d06705c8df1.woff → barlow-v5-latin-ext_latin-italic.BWD2mhUL.woff} +0 -0
  59. /package/public/{70c5533fa86bfec6a286.eot → barlow-v5-latin-ext_latin-italic.DjOUzQd-.eot} +0 -0
  60. /package/public/{6d63cfd120fdbf1c4eb9.ttf → barlow-v5-latin-ext_latin-regular.B3onXd7t.ttf} +0 -0
  61. /package/public/{99a52b75db400feaff73.woff2 → barlow-v5-latin-ext_latin-regular.Ca4dJCbb.woff2} +0 -0
  62. /package/public/{33701469cd0541b0e782.eot → barlow-v5-latin-ext_latin-regular.D-IiuhnY.eot} +0 -0
  63. /package/public/{2eda83a40af3d9412dce.woff → barlow-v5-latin-ext_latin-regular.DLT4q60S.woff} +0 -0
  64. /package/public/{6179310a76747e88c3fb.jpeg → default.Ce_Z_JPs.jpeg} +0 -0
  65. /package/public/{6230e7c7c8475e869f62.jpeg → jmap.C4V11UP7.jpeg} +0 -0
  66. /package/public/{ef53d84ef6d55e48e702.png → logo.hwi8NCH2.png} +0 -0
  67. /package/public/ng-core/{cff684e59ffb052d72cb.woff2 → MaterialIcons-Regular.BjVsc-s9.woff2} +0 -0
  68. /package/public/ng-core/{83bebaf37c09c7e1c3ee.woff → MaterialIcons-Regular.Bnsxcfr1.woff} +0 -0
  69. /package/public/ng-core/{5e7382c63da0098d634a.ttf → MaterialIcons-Regular.N21pKt8_.ttf} +0 -0
  70. /package/public/ng-core/{4674f8ded773cb03e824.eot → MaterialIcons-Regular.rDPjWPoz.eot} +0 -0
  71. /package/public/ng-core/{6be4a9aff03c67e671d8.woff → barlow-v5-latin-ext_latin-300.BOtJevCE.woff} +0 -0
  72. /package/public/ng-core/{62df9be6c862d273e849.ttf → barlow-v5-latin-ext_latin-300.CU1HK-bZ.ttf} +0 -0
  73. /package/public/ng-core/{8b70e6d02996d24fbe26.woff2 → barlow-v5-latin-ext_latin-300.DLZg2Aqw.woff2} +0 -0
  74. /package/public/ng-core/{e29c61ea7a5baabf5f4e.eot → barlow-v5-latin-ext_latin-300.f3X_qAHv.eot} +0 -0
  75. /package/public/ng-core/{67e73a1cc6b8251e3ce1.eot → barlow-v5-latin-ext_latin-300italic.Cq3R63xm.eot} +0 -0
  76. /package/public/ng-core/{c3d30fdfede822039221.woff → barlow-v5-latin-ext_latin-300italic.D7H-NYlV.woff} +0 -0
  77. /package/public/ng-core/{9cd8b1aa87f79ba5fa0d.ttf → barlow-v5-latin-ext_latin-300italic.IFGWg-1n.ttf} +0 -0
  78. /package/public/ng-core/{f8f61d01e9d0e645f832.woff2 → barlow-v5-latin-ext_latin-300italic.egA3zdlg.woff2} +0 -0
  79. /package/public/ng-core/{78deb69247b11dfaef82.ttf → barlow-v5-latin-ext_latin-500.C4YXkooW.ttf} +0 -0
  80. /package/public/ng-core/{ba7c7a40fbe1f44f9479.woff2 → barlow-v5-latin-ext_latin-500.CD6t94O0.woff2} +0 -0
  81. /package/public/ng-core/{e8f262034b5631a64a0b.eot → barlow-v5-latin-ext_latin-500.CxOfqZC2.eot} +0 -0
  82. /package/public/ng-core/{777e7e6fe2378aaae24f.woff → barlow-v5-latin-ext_latin-500.CzPrU5vz.woff} +0 -0
  83. /package/public/ng-core/{25a7d7975ef0d3ef388a.woff → barlow-v5-latin-ext_latin-500italic.57LLgqjl.woff} +0 -0
  84. /package/public/ng-core/{b5165670c231fb850519.ttf → barlow-v5-latin-ext_latin-500italic.B6ytA4Ll.ttf} +0 -0
  85. /package/public/ng-core/{661f40a1301ccb4a3902.woff2 → barlow-v5-latin-ext_latin-500italic.BlgFPUrR.woff2} +0 -0
  86. /package/public/ng-core/{e2a6ddee443d4e6cf1ed.eot → barlow-v5-latin-ext_latin-500italic.Ckyh_717.eot} +0 -0
  87. /package/public/ng-core/{c7d002dea1093108b8de.eot → barlow-v5-latin-ext_latin-700.BRgY-mcC.eot} +0 -0
  88. /package/public/ng-core/{fd850adaa0518f36b06d.ttf → barlow-v5-latin-ext_latin-700.Bit82amp.ttf} +0 -0
  89. /package/public/ng-core/{ce8277efba6b7e0a2a5c.woff → barlow-v5-latin-ext_latin-700.BpBhuUVz.woff} +0 -0
  90. /package/public/ng-core/{d0dd3909312ceba37118.woff2 → barlow-v5-latin-ext_latin-700.DC603mJ6.woff2} +0 -0
  91. /package/public/ng-core/{4c795b2381e21dab3d48.woff → barlow-v5-latin-ext_latin-700italic.Ca79JvF0.woff} +0 -0
  92. /package/public/ng-core/{285533c63e34641da323.woff2 → barlow-v5-latin-ext_latin-700italic.ClCyBg9U.woff2} +0 -0
  93. /package/public/ng-core/{879e91ad82b5b535cf0c.eot → barlow-v5-latin-ext_latin-700italic.D8ZJZUNK.eot} +0 -0
  94. /package/public/ng-core/{1ee5ef3f7b69d0e1a043.ttf → barlow-v5-latin-ext_latin-700italic.DqT2IX-q.ttf} +0 -0
  95. /package/public/ng-core/{5202701c84b3fa4d7fab.woff2 → barlow-v5-latin-ext_latin-italic.1jYUkYRv.woff2} +0 -0
  96. /package/public/ng-core/{20810ee7649dffced61b.ttf → barlow-v5-latin-ext_latin-italic.BEAJKPKF.ttf} +0 -0
  97. /package/public/ng-core/{ec1879956d06705c8df1.woff → barlow-v5-latin-ext_latin-italic.BWD2mhUL.woff} +0 -0
  98. /package/public/ng-core/{70c5533fa86bfec6a286.eot → barlow-v5-latin-ext_latin-italic.DjOUzQd-.eot} +0 -0
  99. /package/public/ng-core/{6d63cfd120fdbf1c4eb9.ttf → barlow-v5-latin-ext_latin-regular.B3onXd7t.ttf} +0 -0
  100. /package/public/ng-core/{99a52b75db400feaff73.woff2 → barlow-v5-latin-ext_latin-regular.Ca4dJCbb.woff2} +0 -0
  101. /package/public/ng-core/{33701469cd0541b0e782.eot → barlow-v5-latin-ext_latin-regular.D-IiuhnY.eot} +0 -0
  102. /package/public/ng-core/{2eda83a40af3d9412dce.woff → barlow-v5-latin-ext_latin-regular.DLT4q60S.woff} +0 -0
  103. /package/public/ng-core/{29807dae6b7e9d8d55ec.ico → favicon_dark.BF6q4K7_.ico} +0 -0
  104. /package/public/ng-core/{a36ae31b461350c13f48.ico → favicon_light.P7XKPcl8.ico} +0 -0
  105. /package/public/ng-core/{b520733890c5a5ebd989.gif → loading.BSbPtkHb.gif} +0 -0
  106. /package/public/ng-core/{ef53d84ef6d55e48e702.png → logo.hwi8NCH2.png} +0 -0
  107. /package/public/{66686eb78f3c2f6b96e8.png → project-home-page.DE87IrpB.png} +0 -0
  108. /package/public/{49ffd22e22cb71aab698.jpeg → transitionPageBackground.D8W87_U8.jpeg} +0 -0
package/.env.example CHANGED
@@ -1,2 +1,14 @@
1
- # your MUI-X Pro license
2
- MUI_X_PRO_LICENSE="MUI-X-PRO-LICENSE"
1
+ # Used to build restBaseUrl in dev:
2
+ # https://api.${REST_BASE_API_DEV_SERVER_PREFIX}.jmapcloud.io
3
+ # ex: "dev-jdoe", "qa", etc
4
+ REST_BASE_API_DEV_SERVER_PREFIX="dev-<username>"
5
+
6
+ # optional: ng core usually runs on https://localhost:8085/src/core.ts
7
+ # if your setup is different, configure it here
8
+ CORE_INDEX_FILE_URL=""
9
+
10
+ # Optional Vite dev server port - defaults to 8086
11
+ DEV_PORT=""
12
+
13
+ # Optional: your MUI-X Pro license
14
+ MUI_X_PRO_LICENSE="MUI-X-PRO-LICENSE"
@@ -0,0 +1,39 @@
1
+ import type { StorybookConfig } from "@storybook/react-vite"
2
+ import { join, resolve } from "path"
3
+
4
+ const ngSrcPath = join(__dirname, "../src")
5
+ const ngStoriesPath = join(__dirname, "../stories")
6
+
7
+ const config: StorybookConfig = {
8
+ stories: ["../stories/**/*.stories.@(ts|tsx|mdx)"],
9
+ addons: ["@storybook/addon-essentials", "@storybook/addon-interactions", "@storybook/addon-themes"],
10
+ framework: {
11
+ name: "@storybook/react-vite",
12
+ options: {}
13
+ },
14
+ typescript: {
15
+ check: false,
16
+ reactDocgen: "react-docgen-typescript",
17
+ reactDocgenTypescriptOptions: {
18
+ shouldExtractLiteralValuesFromEnum: true,
19
+ shouldRemoveUndefinedFromOptional: true,
20
+ propFilter: prop => (prop.parent ? !/node_modules\/(?!@mui)/.test(prop.parent.fileName) : true)
21
+ }
22
+ },
23
+ viteFinal: async config => {
24
+ config.resolve = config.resolve || {}
25
+ const existingAlias = config.resolve.alias || []
26
+ const aliasArray = Array.isArray(existingAlias) ? existingAlias : Object.entries(existingAlias).map(([find, replacement]) => ({ find, replacement }))
27
+ const filteredAlias = aliasArray.filter(entry => entry.find !== "@" && entry.find !== "@stories")
28
+ filteredAlias.push({ find: "@", replacement: ngSrcPath })
29
+ filteredAlias.push({ find: "@stories", replacement: ngStoriesPath })
30
+ filteredAlias.push({ find: "jmapcloud-common", replacement: resolve(__dirname, "../../../../packages/jmapcloud-common/src/index.ts") })
31
+ filteredAlias.push({ find: "jmapcloud-ng-core-types", replacement: resolve(__dirname, "../../ng-core-types/index.ts") })
32
+ filteredAlias.push({ find: "jmapcloud-ng-types", replacement: resolve(__dirname, "../../ng-types/index.ts") })
33
+ filteredAlias.push({ find: "jmapcloud-ng-types/all-enums", replacement: resolve(__dirname, "../../ng-types/all-enums.ts") })
34
+ config.resolve.alias = filteredAlias
35
+ return config
36
+ }
37
+ }
38
+
39
+ export default config
@@ -0,0 +1,53 @@
1
+ import { Box, CssBaseline, ThemeProvider, useTheme } from "@mui/material"
2
+ import { withThemeFromJSXProvider } from "@storybook/addon-themes"
3
+ import type { Decorator, Preview } from "@storybook/react"
4
+ import { lightTheme, darkTheme } from "@/ui/tools/theme"
5
+ import "../src/resources/fonts/barlow/stylesheet.css"
6
+
7
+ function PanelBackground({ children }: { children: React.ReactNode }) {
8
+ const theme = useTheme()
9
+ const bg = (theme.palette as any).mainNavigation?.panelBackground ?? theme.palette.background.default
10
+ return (
11
+ <Box sx={{ bgcolor: bg, minHeight: "100vh", p: 2 }}>
12
+ {children}
13
+ </Box>
14
+ )
15
+ }
16
+
17
+ const withPanelBackground: Decorator = (Story, context) => {
18
+ const selectedTheme = context.globals?.theme === "dark" ? darkTheme : lightTheme
19
+ return (
20
+ <ThemeProvider theme={selectedTheme}>
21
+ <PanelBackground>
22
+ <Story />
23
+ </PanelBackground>
24
+ </ThemeProvider>
25
+ )
26
+ }
27
+
28
+ const preview: Preview = {
29
+ parameters: {
30
+ controls: {
31
+ expanded: true,
32
+ matchers: {
33
+ color: /(background|color)$/i,
34
+ date: /Date$/i
35
+ }
36
+ },
37
+ layout: "fullscreen"
38
+ },
39
+ decorators: [
40
+ withThemeFromJSXProvider({
41
+ GlobalStyles: CssBaseline,
42
+ Provider: ThemeProvider,
43
+ themes: {
44
+ light: lightTheme,
45
+ dark: darkTheme
46
+ },
47
+ defaultTheme: "light"
48
+ }),
49
+ withPanelBackground
50
+ ]
51
+ }
52
+
53
+ export default preview
@@ -0,0 +1,58 @@
1
+ <!doctype html>
2
+ <html lang="en">
3
+ <head>
4
+ <title>JMap Cloud NG</title>
5
+ <meta http-equiv="Content-Type" content="text/html;charset=UTF-8" />
6
+ <meta charset="UTF-8" />
7
+ <style>
8
+ html,
9
+ body {
10
+ padding: 0px;
11
+ margin: 0px;
12
+ height: 100%;
13
+ width: 100%;
14
+ background-color: #262626;
15
+ overflow: hidden;
16
+ }
17
+ .jmapcloud-backround-image {
18
+ position: absolute;
19
+ top: 0;
20
+ left: 0;
21
+ width: 100%;
22
+ height: 100%;
23
+ -webkit-background-position: center;
24
+ background-position: center;
25
+ -webkit-background-size: cover;
26
+ background-size: cover;
27
+ background-repeat: no-repeat;
28
+ background-image: url(https://assets.jmapcloud.io/images/transitionPageBackground.jpeg);
29
+ }
30
+ .radial-gradient-overlay {
31
+ position: absolute;
32
+ top: 0;
33
+ right: 0;
34
+ left: 0;
35
+ bottom: 0;
36
+ width: 100%;
37
+ height: 100%;
38
+ background-image:
39
+ radial-gradient(circle farthest-corner at 50% 50%, rgba(39, 39, 38, 0.1) 65%, #272726),
40
+ linear-gradient(180deg, #272726 10%, rgba(39, 39, 38, 0.7) 50%, #272726);
41
+ }
42
+ </style>
43
+ <script type="text/javascript">
44
+ window.JMAP_OPTIONS = {
45
+ // Replace with your target API base URL.
46
+ restBaseUrl: "https://api.<YOUR_ENV>.jmapcloud.io",
47
+ map: {},
48
+ application: {},
49
+ hideMainLayout: true
50
+ }
51
+ </script>
52
+ </head>
53
+ <body>
54
+ <div class="jmapcloud-backround-image"></div>
55
+ <div class="radial-gradient-overlay"></div>
56
+ <script type="module" src="/src/app.ts"></script>
57
+ </body>
58
+ </html>
package/package.json CHANGED
@@ -1,20 +1,23 @@
1
1
  {
2
2
  "name": "jmapcloud-ng",
3
- "version": "1.1.15",
3
+ "version": "1.1.16",
4
4
  "description": "K2 Geospatial Web Client",
5
5
  "private": false,
6
6
  "main": "public/index.js",
7
7
  "scripts": {
8
- "test": "jest",
8
+ "test": "vitest run",
9
+ "test:watch": "vitest",
9
10
  "lint": "export NODE_ENV='production'; node build/buildfile.js lint;",
10
11
  "prepare-types": "npm --prefix ../ng-core-types run update-types-bridge && npm --prefix ../ng-types run update-types-bridge",
11
12
  "build": "npm run prepare-types && node build/buildfile.js build ",
12
- "build-vps": "export NODE_ENV='development' SERVER_JS_PATH='/var/www/html/ng/ng'; npm run prepare-types && node build/buildfile.js build-vps;",
13
+ "build-vps": "export NODE_ENV='production' SERVER_JS_PATH='/var/www/html/ng/ng'; npm run prepare-types && node build/buildfile.js build-vps;",
13
14
  "build-cloud": "npm run prepare-types && node build/buildfile.js build-cloud;",
14
15
  "build-npm": "export NODE_ENV='production' BUILD_TARGET='npm'; npm run prepare-types && node build/buildfile.js build-npm;",
15
16
  "count-all": "find ./src -name '*.ts*' | xargs wc -l",
16
17
  "count-test": "find ./src -name '*.spec.ts' | xargs wc -l",
17
- "start": "export NODE_ENV='development'; npm run prepare-types && node build/buildfile.js start;"
18
+ "start": "export NODE_ENV='development'; npm run prepare-types && node build/buildfile.js start;",
19
+ "storybook": "storybook dev -p 6009",
20
+ "build-storybook": "storybook build"
18
21
  },
19
22
  "author": "K2 Geospatial",
20
23
  "license": "ISC",
@@ -77,7 +80,6 @@
77
80
  "@types/color": "^3.0.6",
78
81
  "@types/geometric": "^2.5.3",
79
82
  "@types/hast": "^3.0.4",
80
- "@types/jest": "^29.5.14",
81
83
  "@types/json-pointer": "^1.0.34",
82
84
  "@types/mocha": "^10.0.6",
83
85
  "@types/react-dom": "^18.3.0",
@@ -85,20 +87,10 @@
85
87
  "@types/react-window": "^1.8.8",
86
88
  "@types/svg-parser": "^2.0.6",
87
89
  "@types/uuid": "^9.0.8",
88
- "@types/webpack-env": "^1.18.5",
89
- "babel-loader": "^9.1.3",
90
90
  "chai": "^5.1.1",
91
91
  "chai-http": "^4.4.0",
92
- "css-loader": "^7.1.1",
93
- "del": "^6.0.0",
94
- "jest": "^29.7.0",
95
92
  "jmapcloud-ng-core-types": "../ng-core-types",
96
93
  "jmapcloud-ng-types": "../ng-types",
97
- "postcss-loader": "^8.1.1",
98
- "postcss-parent-selector": "^1.0.0",
99
- "style-loader": "^4.0.0",
100
- "terser-webpack-plugin": "^5.3.10",
101
- "ts-jest": "^29.3.4",
102
- "ts-loader": "^9.5.1"
94
+ "vitest": "^3.1.4"
103
95
  }
104
96
  }