create-packer 1.45.19 → 1.46.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (144) hide show
  1. package/package.json +1 -1
  2. package/template/electron-react/.editorconfig +14 -0
  3. package/template/electron-react/.env +3 -0
  4. package/template/electron-react/.env.development +3 -0
  5. package/template/electron-react/.gitignore +28 -0
  6. package/template/electron-react/.husky/commit-msg +4 -0
  7. package/template/electron-react/.husky/pre-commit +4 -0
  8. package/template/electron-react/.prettierignore +6 -0
  9. package/template/electron-react/.prettierrc +18 -0
  10. package/template/electron-react/.stylelintignore +4 -0
  11. package/template/electron-react/.stylelintrc +35 -0
  12. package/template/electron-react/.vscode/extensions.json +7 -0
  13. package/template/electron-react/README.md +14 -0
  14. package/template/electron-react/assets/rspack.png +0 -0
  15. package/template/electron-react/build.config.json +40 -0
  16. package/template/electron-react/commitlint.config.cjs +1 -0
  17. package/template/electron-react/configs/config.ts +25 -0
  18. package/template/electron-react/configs/createChunks.ts +26 -0
  19. package/template/electron-react/configs/rsbuild.main.config.ts +54 -0
  20. package/template/electron-react/configs/rsbuild.preload.config.ts +54 -0
  21. package/template/electron-react/configs/rsbuild.renderer.config.ts +73 -0
  22. package/template/electron-react/env.d.ts +12 -0
  23. package/template/electron-react/eslint.config.mjs +108 -0
  24. package/template/electron-react/main/main.ts +83 -0
  25. package/template/electron-react/main/tools/html.ts +8 -0
  26. package/template/electron-react/main/tools/index.ts +1 -0
  27. package/template/electron-react/package.json +97 -0
  28. package/template/electron-react/pnpm-lock.yaml +10158 -0
  29. package/template/electron-react/postcss.config.cjs +8 -0
  30. package/template/electron-react/preload/index.ts +1 -0
  31. package/template/electron-react/preload/tools.ts +26 -0
  32. package/template/electron-react/renderer/domain/app/app.model.ts +7 -0
  33. package/template/electron-react/renderer/domain/app/components/app-context.tsx +31 -0
  34. package/template/electron-react/renderer/domain/app/components/app.tsx +25 -0
  35. package/template/electron-react/renderer/domain/app/components/index.ts +1 -0
  36. package/template/electron-react/renderer/domain/app/index.ts +3 -0
  37. package/template/electron-react/renderer/domain/app/startApp.tsx +6 -0
  38. package/template/electron-react/renderer/domain/router/components/index.ts +2 -0
  39. package/template/electron-react/renderer/domain/router/components/route-layout.tsx +19 -0
  40. package/template/electron-react/renderer/domain/router/components/sub-route-outlet.tsx +22 -0
  41. package/template/electron-react/renderer/domain/router/home/ids.ts +3 -0
  42. package/template/electron-react/renderer/domain/router/home/index.ts +2 -0
  43. package/template/electron-react/renderer/domain/router/home/routes.tsx +13 -0
  44. package/template/electron-react/renderer/domain/router/ids.ts +6 -0
  45. package/template/electron-react/renderer/domain/router/index.ts +4 -0
  46. package/template/electron-react/renderer/domain/router/router.tsx +28 -0
  47. package/template/electron-react/renderer/domain/router/router.types.ts +3 -0
  48. package/template/electron-react/renderer/global.d.ts +16 -0
  49. package/template/electron-react/renderer/index.html +11 -0
  50. package/template/electron-react/renderer/main.ts +3 -0
  51. package/template/electron-react/renderer/pages/home/index.ts +1 -0
  52. package/template/electron-react/renderer/pages/home/view.styled.ts +5 -0
  53. package/template/electron-react/renderer/pages/home/view.tsx +10 -0
  54. package/template/electron-react/renderer/pages/index.tsx +18 -0
  55. package/template/electron-react/renderer/pages/not-found.tsx +3 -0
  56. package/template/electron-react/renderer/public/rsbuild-logo.svg +1 -0
  57. package/template/electron-react/renderer/scripts/createChunks.ts +26 -0
  58. package/template/electron-react/renderer/scripts/index.ts +1 -0
  59. package/template/electron-react/renderer/shared/assets/react.svg +1 -0
  60. package/template/electron-react/renderer/shared/components/componentInstance.tsx +80 -0
  61. package/template/electron-react/renderer/shared/components/index.ts +1 -0
  62. package/template/electron-react/renderer/shared/constant/index.ts +0 -0
  63. package/template/electron-react/renderer/shared/hooks/defineRouter/defineRouter.types.ts +33 -0
  64. package/template/electron-react/renderer/shared/hooks/defineRouter/deineRouter.tsx +161 -0
  65. package/template/electron-react/renderer/shared/hooks/defineRouter/index.ts +2 -0
  66. package/template/electron-react/renderer/shared/hooks/index.ts +6 -0
  67. package/template/electron-react/renderer/shared/hooks/useInterval.ts +26 -0
  68. package/template/electron-react/renderer/shared/hooks/useLoadingAction.ts +27 -0
  69. package/template/electron-react/renderer/shared/hooks/useLowPriorityState.ts +26 -0
  70. package/template/electron-react/renderer/shared/hooks/useSyncState.ts +15 -0
  71. package/template/electron-react/renderer/shared/hooks/useVisible.ts +27 -0
  72. package/template/electron-react/renderer/shared/service/api.ts +1 -0
  73. package/template/electron-react/renderer/shared/service/home.ts +9 -0
  74. package/template/electron-react/renderer/shared/service/index.ts +3 -0
  75. package/template/electron-react/renderer/shared/service/request.ts +5 -0
  76. package/template/electron-react/renderer/shared/styles/global.ts +7 -0
  77. package/template/electron-react/renderer/shared/styles/index.ts +2 -0
  78. package/template/electron-react/renderer/shared/styles/theme.ts +60 -0
  79. package/template/electron-react/renderer/shared/tools/index.ts +0 -0
  80. package/template/electron-react/tsconfig.json +33 -0
  81. package/template/electron-react/tsconfig.node.json +10 -0
  82. package/template/electron-vue/.editorconfig +14 -0
  83. package/template/electron-vue/.env +3 -0
  84. package/template/electron-vue/.env.development +3 -0
  85. package/template/electron-vue/.gitignore +28 -0
  86. package/template/electron-vue/.husky/commit-msg +4 -0
  87. package/template/electron-vue/.husky/pre-commit +4 -0
  88. package/template/electron-vue/.prettierignore +6 -0
  89. package/template/electron-vue/.prettierrc +18 -0
  90. package/template/electron-vue/.stylelintignore +4 -0
  91. package/template/electron-vue/.stylelintrc +35 -0
  92. package/template/electron-vue/.vscode/extensions.json +9 -0
  93. package/template/electron-vue/README.md +14 -0
  94. package/template/electron-vue/assets/rspack.png +0 -0
  95. package/template/electron-vue/build.config.json +40 -0
  96. package/template/electron-vue/commitlint.config.cjs +1 -0
  97. package/template/electron-vue/configs/config.ts +25 -0
  98. package/template/electron-vue/configs/createChunks.ts +26 -0
  99. package/template/electron-vue/configs/rsbuild.main.config.ts +54 -0
  100. package/template/electron-vue/configs/rsbuild.preload.config.ts +54 -0
  101. package/template/electron-vue/configs/rsbuild.renderer.config.ts +64 -0
  102. package/template/electron-vue/env.d.ts +18 -0
  103. package/template/electron-vue/eslint.config.mjs +115 -0
  104. package/template/electron-vue/main/main.ts +83 -0
  105. package/template/electron-vue/main/tools/html.ts +8 -0
  106. package/template/electron-vue/main/tools/index.ts +1 -0
  107. package/template/electron-vue/package.json +87 -0
  108. package/template/electron-vue/pnpm-lock.yaml +10158 -0
  109. package/template/electron-vue/postcss.config.cjs +9 -0
  110. package/template/electron-vue/preload/index.ts +1 -0
  111. package/template/electron-vue/preload/tools.ts +26 -0
  112. package/template/electron-vue/renderer/domain/app/app.ts +4 -0
  113. package/template/electron-vue/renderer/domain/app/components/app.vue +18 -0
  114. package/template/electron-vue/renderer/domain/app/components/index.ts +1 -0
  115. package/template/electron-vue/renderer/domain/app/createComponentInstance.ts +43 -0
  116. package/template/electron-vue/renderer/domain/app/index.ts +3 -0
  117. package/template/electron-vue/renderer/domain/router/home/index.ts +2 -0
  118. package/template/electron-vue/renderer/domain/router/home/names.ts +3 -0
  119. package/template/electron-vue/renderer/domain/router/home/routes.ts +8 -0
  120. package/template/electron-vue/renderer/domain/router/index.ts +26 -0
  121. package/template/electron-vue/renderer/domain/router/names.ts +5 -0
  122. package/template/electron-vue/renderer/index.html +11 -0
  123. package/template/electron-vue/renderer/main.css +4 -0
  124. package/template/electron-vue/renderer/main.ts +6 -0
  125. package/template/electron-vue/renderer/pages/home/index.ts +1 -0
  126. package/template/electron-vue/renderer/pages/home/view.vue +12 -0
  127. package/template/electron-vue/renderer/pages/index.ts +1 -0
  128. package/template/electron-vue/renderer/pages/index.vue +3 -0
  129. package/template/electron-vue/renderer/pages/not-found.vue +3 -0
  130. package/template/electron-vue/renderer/public/vite.svg +1 -0
  131. package/template/electron-vue/renderer/shared/assets/vue.svg +1 -0
  132. package/template/electron-vue/renderer/shared/components/index.ts +0 -0
  133. package/template/electron-vue/renderer/shared/constant/index.ts +0 -0
  134. package/template/electron-vue/renderer/shared/hooks/index.ts +2 -0
  135. package/template/electron-vue/renderer/shared/hooks/useList.ts +86 -0
  136. package/template/electron-vue/renderer/shared/hooks/useVisible.ts +27 -0
  137. package/template/electron-vue/renderer/shared/service/api.ts +1 -0
  138. package/template/electron-vue/renderer/shared/service/home.ts +7 -0
  139. package/template/electron-vue/renderer/shared/service/index.ts +3 -0
  140. package/template/electron-vue/renderer/shared/service/request.ts +5 -0
  141. package/template/electron-vue/renderer/shared/tools/index.ts +0 -0
  142. package/template/electron-vue/tsconfig.json +25 -0
  143. package/template/electron-vue/tsconfig.node.json +10 -0
  144. package/template/web-app/react-rsbuild/rsbuild.config.ts +1 -1
@@ -0,0 +1,161 @@
1
+ import { DependencyList, useEffect, useMemo } from 'react'
2
+ import { useMatches, useSearchParams, NavigateOptions, createBrowserRouter } from 'react-router'
3
+ import { omit, cloneDeep, last } from 'es-toolkit'
4
+ import { assign, isArray, reduce, get, map, split, forEach } from 'es-toolkit/compat'
5
+ import { stringify, parse } from 'qs'
6
+ import { defineStore } from 'define-zustand'
7
+ import { routeByIdType, routeType, editableRouteType } from './defineRouter.types'
8
+
9
+ export default function defineRouter(router: ReturnType<typeof createBrowserRouter>) {
10
+ const useRouter = defineStore({
11
+ state: () => ({
12
+ routes: cloneDeep(router.routes) as routeType[]
13
+ }),
14
+ getters: {
15
+ routesById: state => {
16
+ return (function flat(routes: routeType[], parentRoute?: routeByIdType) {
17
+ return reduce(
18
+ routes,
19
+ (result, { children, ...route }, i) => {
20
+ const $route: routeByIdType = {
21
+ ...route,
22
+ pos: parentRoute?.pos ? `${parentRoute?.pos}-${i}` : `${i}`
23
+ }
24
+ if (parentRoute) {
25
+ $route.path = `${
26
+ parentRoute.path === '/' ? '' : parentRoute.path
27
+ }/${$route.path}`
28
+ }
29
+ result[$route.id] = $route
30
+ if (isArray(children)) {
31
+ assign(result, flat(children, $route))
32
+ }
33
+ return result
34
+ },
35
+ {} as Record<string, routeByIdType>
36
+ )
37
+ })(state.routes)
38
+ }
39
+ },
40
+ actions: (setState, getState) => {
41
+ function posToLodashPath(pos: string) {
42
+ if (pos) {
43
+ return `[${split(pos, '-').join('].children[')}]`
44
+ }
45
+ return ''
46
+ }
47
+
48
+ function updateRoute(id: routeType['id'], updator: (route: editableRouteType) => void) {
49
+ const { routesById, routes } = getState()
50
+ const newRoutes = cloneDeep(routes)
51
+ const path = posToLodashPath(routesById[id].pos)
52
+ const route: routeType = get(newRoutes, path)
53
+ const newRoute = cloneDeep(omit(route, ['element', 'errorElement', 'children']))
54
+ updator(newRoute)
55
+ assign(route, newRoute)
56
+ setState({ routes: newRoutes })
57
+ }
58
+ function getRoute(id: routeType['id'], path?: string | string[]) {
59
+ const { routesById } = getState()
60
+ const route = routesById[id]
61
+ if (path) {
62
+ return get(route, path)
63
+ }
64
+ return route
65
+ }
66
+
67
+ function genRouteUrl(id: routeType['id'], query?: Record<string, any>) {
68
+ const path = getRoute(id, 'path')
69
+ if (path) {
70
+ const { origin } = window.location
71
+ let url = origin + router.basename + path
72
+ url += query ? `?${stringify(query)}` : ''
73
+ return url
74
+ }
75
+ return void 0
76
+ }
77
+
78
+ function openRoute(id: routeType['id'], query?: Record<string, any>) {
79
+ const url = genRouteUrl(id, query)
80
+ if (url) {
81
+ window.open(url)
82
+ }
83
+ }
84
+
85
+ function reloadRoute(id: routeType['id'], query?: Record<string, any>) {
86
+ const url = genRouteUrl(id, query)
87
+ if (url) {
88
+ window.location.replace(url)
89
+ }
90
+ }
91
+
92
+ function navigate(
93
+ to: { id: routeType['id']; query?: Record<string, any> },
94
+ opts?: NavigateOptions
95
+ ) {
96
+ return router.navigate(
97
+ {
98
+ pathname: getRoute(to.id, 'path'),
99
+ search: to.query ? stringify(to.query) : ''
100
+ },
101
+ opts
102
+ )
103
+ }
104
+
105
+ return {
106
+ navigate,
107
+ getRoute,
108
+ genRouteUrl,
109
+ openRoute,
110
+ reloadRoute,
111
+ updateRoute
112
+ }
113
+ }
114
+ })
115
+ function useQuery<Q>() {
116
+ const [params] = useSearchParams()
117
+ const query = parse(params.toString())
118
+
119
+ return query as Q
120
+ }
121
+
122
+ function useMatchRoutes(): routeType[] {
123
+ const matches = useMatches()
124
+ const getRoute = useRouter(state => state.getRoute)
125
+ return useMemo(() => map(matches, o => getRoute(o.id)), [matches])
126
+ }
127
+
128
+ /**
129
+ * @description 验证器返回false则无权限
130
+ */
131
+ function useRoutePermission(
132
+ config: {
133
+ redirectRouteId: string
134
+ validator: (currentRoute?: routeType) => boolean
135
+ },
136
+ deps: DependencyList
137
+ ) {
138
+ const matchRoutes = useMatchRoutes()
139
+ const currentRoute = last(matchRoutes)
140
+ const updateRoute = useRouter(state => state.updateRoute)
141
+ const navigate = useRouter(state => state.navigate)
142
+ const routesById = useRouter(state => state.routesById)
143
+
144
+ useEffect(() => {
145
+ forEach(routesById, route => {
146
+ updateRoute(route.id, route => {
147
+ route.unauthorized = !config.validator(route)
148
+ })
149
+ })
150
+ }, deps)
151
+
152
+ useEffect(() => {
153
+ const result = config.validator(currentRoute)
154
+ if (!result && config.redirectRouteId) {
155
+ navigate({ id: config.redirectRouteId }, { replace: true })
156
+ }
157
+ }, [currentRoute?.id, ...deps])
158
+ }
159
+
160
+ return { useRouter, useQuery, useMatchRoutes, useRoutePermission }
161
+ }
@@ -0,0 +1,2 @@
1
+ export { default as defineRouter } from './deineRouter'
2
+ export * from './defineRouter.types'
@@ -0,0 +1,6 @@
1
+ export { default as useLoadingAction } from './useLoadingAction'
2
+ export { default as useInterval } from './useInterval'
3
+ export { default as useVisible } from './useVisible'
4
+ export { default as useLowPriorityState } from './useLowPriorityState'
5
+ export * from './useSyncState'
6
+ export * from './defineRouter'
@@ -0,0 +1,26 @@
1
+ import { useState } from 'react'
2
+ import { useInterval as useRUInterval } from 'react-use'
3
+
4
+ interface actionsType {
5
+ start: () => void
6
+ stop: () => void
7
+ }
8
+ export default function useInterval(
9
+ cb: (actions: actionsType) => Promise<void> | void,
10
+ delay: number
11
+ ): actionsType {
12
+ const [startInterval, setStartInterval] = useState(false)
13
+ const start: actionsType['start'] = () => {
14
+ setStartInterval(true)
15
+ }
16
+ const stop: actionsType['stop'] = () => {
17
+ setStartInterval(false)
18
+ }
19
+ useRUInterval(
20
+ async () => {
21
+ cb({ start, stop })
22
+ },
23
+ startInterval ? delay : null
24
+ )
25
+ return { start, stop }
26
+ }
@@ -0,0 +1,27 @@
1
+ import { useCallback, useState, DependencyList, useRef } from 'react'
2
+
3
+ export default function useLoadingAction<C extends (...arg: any) => Promise<any> | any>(
4
+ callback: C,
5
+ deps: DependencyList,
6
+ debounce = true
7
+ ) {
8
+ const [loading, setLoading] = useState(false)
9
+ const loadingSync = useRef(loading)
10
+ function $setLoading(loading: boolean) {
11
+ setLoading(loading)
12
+ loadingSync.current = loading
13
+ }
14
+ const action = useCallback(async (...arg: any) => {
15
+ if (debounce && loadingSync.current) {
16
+ return
17
+ }
18
+ try {
19
+ $setLoading(true)
20
+ return await callback(...arg)
21
+ } finally {
22
+ $setLoading(false)
23
+ }
24
+ }, deps) as C
25
+
26
+ return [loading, action] as const
27
+ }
@@ -0,0 +1,26 @@
1
+ import { useEffect, useState, useTransition, DependencyList } from 'react'
2
+
3
+ /**
4
+ *
5
+ * @param callback
6
+ * @param watches If set, it is autorun callback
7
+ * @returns
8
+ */
9
+ export default function useLowPriorityState<V>(callback: () => V, watches?: DependencyList) {
10
+ const [value, setValue] = useState<V>(callback)
11
+ const [loading, startTransition] = useTransition()
12
+
13
+ function startLoad() {
14
+ startTransition(() => {
15
+ setValue(callback())
16
+ })
17
+ }
18
+
19
+ useEffect(() => {
20
+ if (watches) {
21
+ startLoad()
22
+ }
23
+ }, watches)
24
+
25
+ return [value, { loading, startLoad }] as const
26
+ }
@@ -0,0 +1,15 @@
1
+ import { useRef, useState, Dispatch, SetStateAction } from 'react'
2
+ import { isFunction } from 'es-toolkit'
3
+
4
+ export function useSyncState<S>(initialState: S | (() => S)) {
5
+ const [state, setState] = useState(initialState)
6
+ const syncState = useRef<S>(state)
7
+
8
+ const $setState: Dispatch<SetStateAction<S>> = newState => {
9
+ const $newState = (isFunction(newState) ? newState(state) : newState) as S
10
+ setState($newState)
11
+ syncState.current = $newState
12
+ }
13
+
14
+ return [syncState, state, $setState] as const
15
+ }
@@ -0,0 +1,27 @@
1
+ import { useState } from 'react'
2
+ import { isFunction } from 'es-toolkit'
3
+
4
+ export interface useVisibleConfigType {
5
+ defaultVisible?: boolean
6
+ onBeforeShow?: () => Promise<boolean | void>
7
+ onBeforeHide?: () => Promise<boolean | void>
8
+ }
9
+ export default function useVisible(config?: useVisibleConfigType) {
10
+ const [visible, setVisible] = useState(config?.defaultVisible ?? false)
11
+ const onShow = async () => {
12
+ let isShow: boolean | void = true
13
+ if (isFunction(config?.onBeforeShow)) {
14
+ isShow = await config?.onBeforeShow?.()
15
+ }
16
+ setVisible(isShow !== false)
17
+ }
18
+ const onClose = async () => {
19
+ let isHide: boolean | void = true
20
+ if (isFunction(config?.onBeforeHide)) {
21
+ isHide = await config?.onBeforeHide?.()
22
+ }
23
+ setVisible(isHide === false)
24
+ }
25
+
26
+ return { visible, onShow, onClose }
27
+ }
@@ -0,0 +1 @@
1
+ export const HOME_DATA = '/homeData'
@@ -0,0 +1,9 @@
1
+ import { useQuery, QueryOptions } from '@tanstack/react-query'
2
+ import { HOME_DATA } from './api'
3
+
4
+ export const useHomeData = (options?: QueryOptions) => {
5
+ return useQuery({
6
+ ...options,
7
+ queryKey: [HOME_DATA, ...(options?.queryKey || [])]
8
+ })
9
+ }
@@ -0,0 +1,3 @@
1
+ export * from './request'
2
+ export * as API from './api'
3
+ export * from './home'
@@ -0,0 +1,5 @@
1
+ import axios from 'axios'
2
+
3
+ export const request = axios.create({
4
+ baseURL: import.meta.env.PUBLIC_BASE_URL + import.meta.env.PUBLIC_API_HOST
5
+ })
@@ -0,0 +1,7 @@
1
+ import { css } from '@emotion/react'
2
+
3
+ export const globalCss = css`
4
+ body {
5
+ margin: 0;
6
+ }
7
+ `
@@ -0,0 +1,2 @@
1
+ export * from './global'
2
+ export * from './theme'
@@ -0,0 +1,60 @@
1
+ import { CSSProperties } from 'react'
2
+ import { isString } from 'es-toolkit'
3
+ import { isNumber } from 'es-toolkit/compat'
4
+
5
+ export const theme = {
6
+ text: {
7
+ xs: { fontSize: '12px', lineHeight: '20px' },
8
+ sm: { fontSize: '14px', lineHeight: '22px' },
9
+ base: { fontSize: '16px', lineHeight: '24px' },
10
+ lg: { fontSize: '18px', lineHeight: '26px' },
11
+ xl: { fontSize: '20px', lineHeight: '28px' },
12
+ '2xl': { fontSize: '24px', lineHeight: '32px' },
13
+ '3xl': { fontSize: '28px', lineHeight: '40px' },
14
+ '4xl': { fontSize: '32px', lineHeight: '44px' }
15
+ } satisfies Record<string, CSSProperties>,
16
+ tools: {
17
+ ellipsis: () => ({
18
+ overflow: 'hidden',
19
+ textOverflow: 'ellipsis',
20
+ whiteSpace: 'nowrap'
21
+ }),
22
+ lineClamp: (n: number) => ({
23
+ '-webkit-line-clamp': `${n}`,
24
+ '-webkit-box-orient': 'vertical',
25
+ overflow: 'hidden',
26
+ display: '-webkit-box'
27
+ }),
28
+ size: (s: string) => ({ width: s, height: s }),
29
+ py: (s: string) => ({ paddingTop: s, paddingBottom: s }),
30
+ px: (s: string) => ({ paddingLeft: s, paddingRight: s }),
31
+ my: (s: string) => ({ marginTop: s, marginBottom: s }),
32
+ mx: (s: string) => ({ marginLeft: s, marginRight: s }),
33
+ flex: (
34
+ align: CSSProperties['alignItems'],
35
+ justify: CSSProperties['justifyContent'],
36
+ vertical?: boolean
37
+ ) => {
38
+ return {
39
+ display: 'flex',
40
+ alignItems: align,
41
+ justifyContent: justify,
42
+ flexDirection: vertical ? 'column' : 'row'
43
+ } satisfies CSSProperties
44
+ },
45
+ /** 数字为元素数量,字符串为对应css的值 */
46
+ grid: (
47
+ rows: number | CSSProperties['gridTemplateRows'],
48
+ cols: number | CSSProperties['gridTemplateColumns'],
49
+ gap?: number | string
50
+ ) => {
51
+ return {
52
+ display: 'grid',
53
+ gridTemplateRows: isString(rows) ? rows : `repeat(${rows}, minmax(0, 1fr))`,
54
+ gridTemplateColumns: isString(cols) ? cols : `repeat(${cols}, minmax(0, 1fr))`,
55
+ gap: isNumber(gap) ? `${gap}px` : gap
56
+ } satisfies CSSProperties
57
+ }
58
+ }
59
+ }
60
+ export type themeType = typeof theme
@@ -0,0 +1,33 @@
1
+ {
2
+ "compilerOptions": {
3
+ "baseUrl": ".",
4
+ "target": "ESNext",
5
+ "useDefineForClassFields": true,
6
+ "lib": ["DOM", "DOM.Iterable", "ESNext"],
7
+ "allowJs": false,
8
+ "skipLibCheck": true,
9
+ "esModuleInterop": false,
10
+ "allowSyntheticDefaultImports": true,
11
+ "strict": true,
12
+ "forceConsistentCasingInFileNames": true,
13
+ "strictPropertyInitialization": false,
14
+ "strictNullChecks": true,
15
+ "module": "ESNext",
16
+ "moduleResolution": "bundler",
17
+ "resolveJsonModule": true,
18
+ "isolatedModules": true,
19
+ "noEmit": true,
20
+ "jsx": "react-jsx",
21
+ "jsxImportSource": "@emotion/react",
22
+ "paths": {
23
+ "@/*": ["./*"]
24
+ }
25
+ },
26
+ "include": ["**/*.ts", "**/*.tsx"],
27
+ "exclude": ["scripts", "rsbuild.config.ts"],
28
+ "references": [
29
+ {
30
+ "path": "./tsconfig.node.json"
31
+ }
32
+ ]
33
+ }
@@ -0,0 +1,10 @@
1
+ {
2
+ "compilerOptions": {
3
+ "composite": true,
4
+ "module": "ESNext",
5
+ "moduleResolution": "node",
6
+ "allowSyntheticDefaultImports": true,
7
+ "resolveJsonModule": true
8
+ },
9
+ "include": ["scripts", "rsbuild.config.ts", "package.json"]
10
+ }
@@ -0,0 +1,14 @@
1
+ # editorconfig.org
2
+
3
+ root = true
4
+
5
+ [*]
6
+ charset = utf-8
7
+ indent_size = 4
8
+ indent_style = space
9
+ insert_final_newline = true
10
+ trim_trailing_whitespace = true
11
+
12
+
13
+ [*.md]
14
+ trim_trailing_whitespace = false
@@ -0,0 +1,3 @@
1
+ PUBLIC_ENV_MODE=production
2
+ PUBLIC_BASE_URL=/
3
+ PUBLIC_API_HOST=/
@@ -0,0 +1,3 @@
1
+ PUBLIC_ENV_MODE=development
2
+ PUBLIC_BASE_URL=/dev
3
+ PUBLIC_API_HOST=/api
@@ -0,0 +1,28 @@
1
+ # Logs
2
+ logs
3
+ *.log
4
+ npm-debug.log*
5
+ yarn-debug.log*
6
+ yarn-error.log*
7
+ pnpm-debug.log*
8
+ lerna-debug.log*
9
+
10
+ node_modules
11
+ dist
12
+ build
13
+ dist-ssr
14
+ *.local
15
+ stats.html
16
+ vite.config.ts.*
17
+
18
+ # Editor directories and files
19
+ .vscode/*
20
+ !.vscode/extensions.json
21
+ .history
22
+ .idea
23
+ .DS_Store
24
+ *.suo
25
+ *.ntvs*
26
+ *.njsproj
27
+ *.sln
28
+ *.sw?
@@ -0,0 +1,4 @@
1
+ #!/usr/bin/env sh
2
+ . "$(dirname -- "$0")/_/husky.sh"
3
+
4
+ npx --no -- commitlint --edit
@@ -0,0 +1,4 @@
1
+ #!/usr/bin/env sh
2
+ . "$(dirname -- "$0")/_/husky.sh"
3
+
4
+ npm run lint
@@ -0,0 +1,6 @@
1
+ **/*.md
2
+ **/*.svg
3
+ **/*.ejs
4
+ **/*.html
5
+ .history
6
+ dist
@@ -0,0 +1,18 @@
1
+ {
2
+ "overrides": [
3
+ {
4
+ "files": ".prettierrc",
5
+ "options": { "parser": "json" }
6
+ }
7
+ ],
8
+ "printWidth": 100,
9
+ "tabWidth": 4,
10
+ "useTabs": false,
11
+ "semi": false,
12
+ "singleQuote": true,
13
+ "trailingComma": "none",
14
+ "bracketSpacing": true,
15
+ "bracketSameLine": false,
16
+ "arrowParens": "avoid",
17
+ "rangeStart": 0
18
+ }
@@ -0,0 +1,4 @@
1
+ node_modules
2
+ /dist
3
+ /.vscode
4
+ /.history
@@ -0,0 +1,35 @@
1
+ {
2
+ "extends": "stylelint-config-standard-scss",
3
+ "overrides": [
4
+ {
5
+ "files": ["*.html", "**/*.html", "*.vue", "**/*.vue"],
6
+ "customSyntax": "postcss-html"
7
+ }
8
+ ],
9
+ "rules": {
10
+ "comment-empty-line-before": "never",
11
+ "no-empty-source": null,
12
+ "alpha-value-notation": null,
13
+ "color-function-notation": null,
14
+ "at-rule-no-unknown": [
15
+ true,
16
+ {
17
+ "ignoreAtRules": ["tailwind", "apply", "use", "reference"]
18
+ }
19
+ ],
20
+ "declaration-block-no-redundant-longhand-properties": null,
21
+ "selector-pseudo-class-no-unknown": [
22
+ true,
23
+ {
24
+ "ignorePseudoClasses": ["global"]
25
+ }
26
+ ],
27
+ "selector-class-pattern": null,
28
+ "scss/at-rule-no-unknown": [
29
+ true,
30
+ {
31
+ "ignoreAtRules": ["tailwind", "apply", "reference"]
32
+ }
33
+ ]
34
+ }
35
+ }
@@ -0,0 +1,9 @@
1
+ {
2
+ "recommendations": [
3
+ "vue.volar",
4
+ "vue.vscode-typescript-vue-plugin",
5
+ "dbaeumer.vscode-eslint",
6
+ "stylelint.vscode-stylelint",
7
+ "esbenp.prettier-vscode"
8
+ ]
9
+ }
@@ -0,0 +1,14 @@
1
+ ## Vite + Vue3.x + Typescript
2
+
3
+ ### Features
4
+
5
+ - Vite
6
+ - Vue
7
+ - Typescript
8
+ - vue-router
9
+ - pinia
10
+ - Tailwindcss
11
+ - Eslint
12
+ - Prettier
13
+ - axios
14
+ - Alias @ to <project_root>/src
@@ -0,0 +1,40 @@
1
+ {
2
+ "productName": "ElectronReact",
3
+ "appId": "org.erb.ElectronReact",
4
+ "asar": false,
5
+ "files": ["dist"],
6
+ "mac": {
7
+ "target": {
8
+ "target": "default",
9
+ "arch": ["arm64", "x64"]
10
+ },
11
+ "hardenedRuntime": true,
12
+ "gatekeeperAssess": true
13
+ },
14
+ "dmg": {
15
+ "contents": [
16
+ {
17
+ "x": 130,
18
+ "y": 220
19
+ },
20
+ {
21
+ "x": 410,
22
+ "y": 220,
23
+ "type": "link",
24
+ "path": "/Applications"
25
+ }
26
+ ]
27
+ },
28
+ "win": {
29
+ "target": ["nsis"]
30
+ },
31
+ "linux": {
32
+ "target": ["AppImage"],
33
+ "category": "Development"
34
+ },
35
+ "directories": {
36
+ "buildResources": "dist",
37
+ "output": "build"
38
+ },
39
+ "extraResources": ["./assets/**"]
40
+ }
@@ -0,0 +1 @@
1
+ module.exports = { extends: ['@commitlint/config-conventional'] }