@ithinkdt/ui 4.0.0-19 → 4.0.0-200

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 (60) hide show
  1. package/auto-imports.js +1 -1
  2. package/dist/components-BoVUU6GJ.js +1736 -0
  3. package/dist/components.js +5 -0
  4. package/dist/directives-DUuJW647.js +183 -0
  5. package/dist/directives.js +3 -0
  6. package/dist/index.js +1224 -0
  7. package/dist/page.js +519 -0
  8. package/dist/use-i18n-Dx7V4KrY.js +6 -0
  9. package/dist/use-style-DcT-1dj4.js +29 -0
  10. package/dist/use-style.js +2 -0
  11. package/{src → esm}/components.d.ts +63 -17
  12. package/esm/components.js +1 -0
  13. package/{src → esm}/design.d.ts +9 -0
  14. package/esm/directives.js +1 -0
  15. package/esm/index.js +1 -0
  16. package/{src → esm}/page.d.ts +43 -26
  17. package/esm/page.js +1 -0
  18. package/esm/use-style.js +1 -0
  19. package/locale.d.ts +4 -0
  20. package/package.json +31 -28
  21. package/unocss-preset.d.ts +5 -0
  22. package/unocss-preset.js +163 -0
  23. package/src/components/Checkboxes.jsx +0 -130
  24. package/src/components/DataActions.jsx +0 -105
  25. package/src/components/DataCustom.jsx +0 -172
  26. package/src/components/DataFilter.jsx +0 -113
  27. package/src/components/DataForm.jsx +0 -264
  28. package/src/components/DataLocaleInput.jsx +0 -121
  29. package/src/components/DataPagination.jsx +0 -62
  30. package/src/components/DataSelection.jsx +0 -57
  31. package/src/components/DataTable.jsx +0 -255
  32. package/src/components/Radios.jsx +0 -134
  33. package/src/components/UserDept.jsx +0 -643
  34. package/src/components/assets.jsx +0 -274
  35. package/src/components/index.js +0 -11
  36. package/src/design/Account.jsx +0 -152
  37. package/src/design/Appearance.jsx +0 -89
  38. package/src/design/Breadcrumb.jsx +0 -67
  39. package/src/design/Fullscreen.jsx +0 -65
  40. package/src/design/Language.jsx +0 -45
  41. package/src/design/Layout.jsx +0 -241
  42. package/src/design/Logo.jsx +0 -92
  43. package/src/design/Menu.jsx +0 -133
  44. package/src/design/MultiTabs.jsx +0 -501
  45. package/src/design/Notification.jsx +0 -311
  46. package/src/design/common.jsx +0 -21
  47. package/src/design/index.js +0 -10
  48. package/src/directives/index.js +0 -2
  49. package/src/directives/spin.js +0 -181
  50. package/src/directives/tooltip.jsx +0 -121
  51. package/src/index.js +0 -18
  52. package/src/page.jsx +0 -628
  53. package/src/use-i18n.js +0 -8
  54. package/src/use-style.js +0 -58
  55. package/src/utils.js +0 -20
  56. package/unocss.d.ts +0 -5
  57. package/unocss.js +0 -95
  58. /package/{src → esm}/directives.d.ts +0 -0
  59. /package/{src → esm}/index.d.ts +0 -0
  60. /package/{src → esm}/use-style.d.ts +0 -0
@@ -1,45 +0,0 @@
1
- import { NButton, NDropdown, NIcon } from 'ithinkdt-ui'
2
- import { defineComponent } from 'vue'
3
-
4
- export const AppLanguage = /* @__PURE__ */ defineComponent({
5
- name: 'AppLanguage',
6
- props: {
7
- lang: String,
8
- supports: Array,
9
- },
10
- emit: ['update:lang'],
11
- setup(props, { emit }) {
12
- return () => (
13
- <NDropdown
14
- options={props.supports}
15
- keyField="value"
16
- showArrow
17
- onSelect={lang => emit('update:lang', lang)}
18
- >
19
- <NButton quaternary style="--n-padding: 0 12px">
20
- <NIcon size="18">
21
- <svg
22
- xmlns="http://www.w3.org/2000/svg"
23
- xmlns:xlink="http://www.w3.org/1999/xlink"
24
- role="img"
25
- width="1em"
26
- height="1em"
27
- viewBox="0 0 24 24"
28
- >
29
- <g
30
- fill="none"
31
- stroke="currentColor"
32
- stroke-linecap="round"
33
- stroke-linejoin="round"
34
- stroke-width="1.5"
35
- >
36
- <path d="M2 12c0 5.523 4.477 10 10 10s10-4.477 10-10S17.523 2 12 2S2 6.477 2 12Z"></path>
37
- <path d="M13 2.05S16 6 16 12c0 6-3 9.95-3 9.95m-2 0S8 18 8 12c0-6 3-9.95 3-9.95M2.63 15.5h18.74m-18.74-7h18.74"></path>
38
- </g>
39
- </svg>
40
- </NIcon>
41
- </NButton>
42
- </NDropdown>
43
- )
44
- },
45
- })
@@ -1,241 +0,0 @@
1
- import { NButton, NIcon } from 'ithinkdt-ui'
2
- import { defineComponent, provide, reactive, ref, renderSlot, toRef, withDirectives } from 'vue'
3
-
4
- import { vTooltip } from '../directives/tooltip.jsx'
5
- import { useI18n } from '../use-i18n.js'
6
- import useStyle, { c, cB, cE, cM } from '../use-style.js'
7
-
8
- import { COLLAPSED_INJECTION_KEY, CTX_INJECTION_KEY, clsPrefix, getCtx } from './common.jsx'
9
-
10
- export { getCtx }
11
-
12
- const style = /* @__PURE__ */ c([
13
- cB(
14
- 'layout',
15
- {
16
- 'display': 'grid',
17
- 'gridTemplateAreas': `
18
- 'sider header'
19
- 'sider content'
20
- 'sider footer'
21
- `,
22
- 'gridTemplateRows': 'auto 1fr auto',
23
- 'gridTemplateColumns': 'auto 1fr',
24
- 'position': 'relative',
25
- 'top': '0',
26
- 'left': '0',
27
- 'transition': 'all 0.2s cubic-bezier(0.4, 0, 0.2, 1)',
28
- '--app-content-height': 'calc(100vh - var(--app-header-height) - var(--app-footer-height))',
29
- },
30
- [
31
- cM('full-header', {
32
- gridTemplateAreas: `
33
- 'header header'
34
- 'sider content'
35
- 'sider footer'
36
- `,
37
- }),
38
- cM('full-content', {
39
- width: `calc(100% + var(--app-sider-width))`,
40
- height: `calc(100% + var(--app-header-height))`,
41
- left: 'calc(-1 * var(--app-sider-width))',
42
- top: 'calc(-1 * var(--app-header-height))',
43
- }),
44
- ],
45
- ),
46
- cB(
47
- 'header',
48
- {
49
- gridArea: 'header',
50
- overflow: 'hidden',
51
- zIndex: 2,
52
- height: 'var(--app-header-height, 44px)',
53
- zIndex: '2',
54
- },
55
- ),
56
- cB(
57
- 'sider',
58
- {
59
- gridArea: 'sider',
60
- width: 'var(--app-sider-width, 220px)',
61
- display: 'flex',
62
- flexDirection: 'column',
63
- overflow: 'auto',
64
- position: 'relative',
65
- transition: 'width 0.2s ease-in-out',
66
- zIndex: '2',
67
- },
68
- [
69
- cE('collapse-btn', {
70
- '--n-padding': '0 12px',
71
- 'position': 'absolute',
72
- 'zIndex': '2',
73
- 'bottom': '8px',
74
- 'right': '8px',
75
- }),
76
- ],
77
- ),
78
- cB('content', {
79
- gridArea: 'content',
80
- position: 'relative',
81
- overflow: 'hidden',
82
- zIndex: '1',
83
- }),
84
- cB('footer', {
85
- gridArea: 'footer',
86
- lineHeight: '24px',
87
- }),
88
- ])
89
-
90
- const IFold = () => (
91
- <svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24">
92
- <path
93
- fill="none"
94
- stroke="currentColor"
95
- stroke-linecap="round"
96
- stroke-linejoin="round"
97
- stroke-width="1.5"
98
- d="M11.5 18s-6-4.419-6-6s6-6 6-6m7 12s-6-4.419-6-6s6-6 6-6"
99
- color="currentColor"
100
- />
101
- </svg>
102
- )
103
- const IUnfold = () => (
104
- <svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24">
105
- <path
106
- fill="none"
107
- stroke="currentColor"
108
- stroke-linecap="round"
109
- stroke-linejoin="round"
110
- stroke-width="1.5"
111
- d="M12.5 18s6-4.419 6-6s-6-6-6-6m-7 12s6-4.419 6-6s-6-6-6-6"
112
- color="currentColor"
113
- />
114
- </svg>
115
- )
116
-
117
- export const AppLayout = /* @__PURE__ */ defineComponent({
118
- name: 'AppLayout',
119
- props: {
120
- layout: {
121
- type: String,
122
- default: 'left2right',
123
- },
124
- fullContent: Boolean,
125
- },
126
- setup(props, { slots }) {
127
- useStyle('-layout', style, ref(clsPrefix), false)
128
-
129
- const ctx = reactive({
130
- siderWidth: '0px',
131
- headerHeight: '0px',
132
- footerHeight: '0px',
133
- hasMultiTab: false,
134
- })
135
-
136
- provide(CTX_INJECTION_KEY, ctx)
137
-
138
- return () => {
139
- const { layout } = props
140
-
141
- return (
142
- <div
143
- class={{
144
- [`${clsPrefix}-layout`]: true,
145
- [`${clsPrefix}-layout--full-header`]: layout === 'top2bottom',
146
- [`${clsPrefix}-layout--full-content`]: props.fullContent,
147
- }}
148
- style={{
149
- '--app-sider-width': ctx.siderWidth,
150
- '--app-header-height': ctx.headerHeight,
151
- '--app-footer-height': ctx.footerHeight,
152
- }}
153
- >
154
- {renderSlot(slots, 'default')}
155
- </div>
156
- )
157
- }
158
- },
159
- })
160
-
161
- export const AppHeader = /* @__PURE__ */ defineComponent({
162
- name: 'AppHeader',
163
- props: {
164
- height: { type: Number, default: 44 },
165
- },
166
- setup(props, { slots }) {
167
- const ctx = getCtx()
168
-
169
- return () => {
170
- ctx.headerHeight = props.height + 'px'
171
- return (
172
- <div class={`${clsPrefix}-header`}>
173
- {renderSlot(slots, 'default')}
174
- </div>
175
- )
176
- }
177
- },
178
- })
179
- export const AppSider = /* @__PURE__ */ defineComponent({
180
- name: 'AppSider',
181
- props: {
182
- showCollapseBtn: { type: Boolean, default: true },
183
- collapsed: Boolean,
184
- width: { type: Number, default: 220 },
185
- collapsedWidth: { type: Number, default: 60 },
186
- },
187
- emits: {
188
- 'update:collapsed': () => true,
189
- },
190
- setup(props, { emit, slots }) {
191
- provide(COLLAPSED_INJECTION_KEY, toRef(props, 'collapsed'))
192
-
193
- const { t } = useI18n()
194
-
195
- const ctx = getCtx()
196
-
197
- return () => {
198
- ctx.siderWidth = (props.collapsed ? props.collapsedWidth : props.width) + 'px'
199
-
200
- return (
201
- <div class={`${clsPrefix}-sider`}>
202
- {renderSlot(slots, 'default')}
203
- {props.showCollapseBtn
204
- ? withDirectives(
205
- <NButton
206
- class={`${clsPrefix}-sider__collapse-btn`}
207
- quaternary
208
- onClick={() => {
209
- emit('update:collapsed', !props.collapsed)
210
- }}
211
- >
212
- <NIcon size="20">{props.collapsed ? <IUnfold /> : <IFold />}</NIcon>
213
- </NButton>,
214
- [[vTooltip, props.collapsed ? t('common.layout.sider.expand') : t('common.layout.sider.collapse')]],
215
- )
216
- : undefined}
217
- </div>
218
- )
219
- }
220
- },
221
- })
222
- export const AppContent = /* @__PURE__ */ defineComponent({
223
- name: 'AppContent',
224
- setup(props, { slots }) {
225
- return () => <div class={`${clsPrefix}-content`}>{renderSlot(slots, 'default')}</div>
226
- },
227
- })
228
- export const AppFooter = /* @__PURE__ */ defineComponent({
229
- name: 'AppFooter',
230
- props: {
231
- height: { type: Number, default: 30 },
232
- },
233
- setup(props, { slots }) {
234
- const ctx = getCtx()
235
-
236
- return () => {
237
- ctx.footerHeight = props.height + 'px'
238
- return <div class={`${clsPrefix}-footer`}>{renderSlot(slots, 'default')}</div>
239
- }
240
- },
241
- })
@@ -1,92 +0,0 @@
1
- import { asyncComputed } from '@vueuse/core'
2
- import { NText } from 'ithinkdt-ui'
3
- import { defineComponent, inject, unref } from 'vue'
4
-
5
- import { COLLAPSED_INJECTION_KEY, clsPrefix } from './common.jsx'
6
-
7
- export const AppLogo = /* @__PURE__ */ defineComponent({
8
- name: 'AppLogo',
9
- props: {
10
- src: [String, Function],
11
- name: String,
12
- collapsed: {
13
- type: Boolean,
14
- default: undefined,
15
- },
16
- center: {
17
- type: Boolean,
18
- default: false,
19
- },
20
- link: {
21
- type: Boolean,
22
- default: true,
23
- },
24
- },
25
- setup(props, { slots }) {
26
- const src = asyncComputed(() => (typeof props.src === 'function' ? props.src() : props.src))
27
- const collapsed2 = inject(COLLAPSED_INJECTION_KEY, false)
28
- return () => {
29
- let { name, collapsed, center, link } = props
30
- collapsed ??= unref(collapsed2)
31
-
32
- const scale = collapsed ? 1 : 1 / 1.1
33
- return (
34
- <div
35
- class={`${clsPrefix}-logo`}
36
- style={{
37
- '--app-logo-img-size': '32px',
38
- '--app-logo-name-size': '22px',
39
- 'width': center ? '100%' : 'auto',
40
- 'overflow': 'hidden',
41
- 'display': 'flex',
42
- 'alignItems': 'center',
43
- 'justifyContent': center ? 'center' : 'flex-start',
44
- 'cursor': link ? 'pointer' : undefined,
45
- }}
46
- >
47
- {
48
- slots.default
49
- ? slots.default()
50
- : (
51
- <div
52
- class={`${clsPrefix}-logo__img`}
53
- style={`
54
- width: ${collapsed ? `var(--app-sider-width, 60px)` : '56px'};
55
- font-size: ${collapsed ? `calc(var(--app-sider-width, 60px) - 24px)` : '32px'};
56
- transition: width 0.2s ease-in-out 0.1s;
57
- flex: 0 0 auto;
58
- display: flex;
59
- justify-content: center
60
- `}
61
- >
62
- {
63
- slots.icon
64
- ? slots.icon()
65
- : (
66
- <img
67
- src={src.value}
68
- alt="App Logo"
69
- style={`transition: height 0.2s ease-in-out; height: calc(var(--app-logo-img-size) * ${scale})`}
70
- />
71
- )
72
- }
73
- </div>
74
- )
75
- }
76
- {name
77
- ? (
78
- <NText
79
- class={`${clsPrefix}-logo__name`}
80
- style="font-size: var(--app-logo-name-size); font-weight: bold; white-space: nowrap; flex: 0 1 auto; overflow: hidden"
81
- >
82
- {name}
83
- </NText>
84
- )
85
- : (
86
- ''
87
- )}
88
- </div>
89
- )
90
- }
91
- },
92
- })
@@ -1,133 +0,0 @@
1
- import { NMenu, NScrollbar } from 'ithinkdt-ui'
2
- import { defineComponent, inject, shallowRef, unref, useTemplateRef, watch, withDirectives } from 'vue'
3
- import { RouterLink } from 'vue-router'
4
-
5
- import { vTooltip } from '../directives/tooltip.jsx'
6
-
7
- import { COLLAPSED_INJECTION_KEY, IBookmark } from './common.jsx'
8
-
9
- export const AppMenu = /* @__PURE__ */ defineComponent({
10
- name: 'AppMenu',
11
- props: {
12
- menus: Array,
13
- getIcon: Function,
14
- current: String,
15
- horizontal: Boolean,
16
- single: Boolean,
17
- accordion: Boolean,
18
- collapsed: { type: Boolean, default: undefined },
19
- renderLabel: Function,
20
- width: { type: Number, default: 220 },
21
- collapsedWidth: { type: Number, default: 60 },
22
- },
23
- setup(props) {
24
- const options = shallowRef([])
25
-
26
- watch(
27
- [() => props.menus, () => props.single],
28
- ([menus, single]) => {
29
- options.value = []
30
- if (!menus?.length) return
31
-
32
- const map = (data, depth = 0) => {
33
- const array = []
34
- for (const it of data) {
35
- if (it.type === 'action') continue
36
-
37
- const children = it.type === 'view' ? undefined : map(it.children ?? [], depth + 1)
38
-
39
- const menu = {
40
- _: it,
41
- key: it.key,
42
- label: () => props.renderLabel?.(it) ?? it.name,
43
- icon: (depth === 0 || it.icon) ? (props.getIcon?.(it.icon) ?? IBookmark) : undefined,
44
- children: single ? undefined : children,
45
- path: it.path || (single ? children?.[0]?.path : undefined),
46
- depth,
47
- }
48
- delete menu.type
49
- array.push(menu)
50
- }
51
- return array
52
- }
53
-
54
- options.value = map(menus)
55
- },
56
- { immediate: true },
57
- )
58
-
59
- const menuRef = useTemplateRef('menu')
60
- watch(
61
- [menuRef, () => props.current],
62
- ([menuRef, current]) => {
63
- menuRef?.showOption(current)
64
- },
65
- { immediate: true },
66
- )
67
-
68
- const collapsed2 = inject(COLLAPSED_INJECTION_KEY, false)
69
-
70
- const renderLabel = (menu) => {
71
- const collapsed = props.collapsed ?? unref(collapsed2)
72
- let label
73
- if (menu._.type === 'view') {
74
- if (menu.isExternal && menu.externalEmbed) {
75
- label = (
76
- <a href={menu.externalLink} target="_blank" onClick={e => e.stopPropagation()}>
77
- {menu.label()}
78
- </a>
79
- )
80
- } else {
81
- label = <RouterLink to={menu.path}>{menu.label()}</RouterLink>
82
- }
83
- } else {
84
- label = <span>{menu.label()}</span>
85
- }
86
- label.key = `${menu.key}:${collapsed ? 1 : 0}`
87
- if (menu.depth === 0 && !collapsed) {
88
- label = withDirectives(label, [[vTooltip, menu.label(), undefined, { auto: true, right: true }]])
89
- }
90
- if (menu.isNew) {
91
- label = (
92
- <div style="display: flex; width: 100%">
93
- <span style="flex: 0 1 auto; overflow: hidden; text-overflow: ellipsis">{label}</span>
94
- <svg
95
- xmlns="http://www.w3.org/2000/svg"
96
- width="24"
97
- height="24"
98
- viewBox="0 0 1024 1024"
99
- style="margin-left: 8px; flex: 0 0 auto;"
100
- >
101
- <path
102
- d="M245.76 286.72h552.96c124.928 0 225.28 100.352 225.28 225.28s-100.352 225.28-225.28 225.28H0V532.48c0-135.168 110.592-245.76 245.76-245.76z m133.12 348.16V401.408H348.16v178.176l-112.64-178.176H204.8V634.88h30.72v-178.176L348.16 634.88h30.72z m182.272-108.544v-24.576h-96.256v-75.776h110.592v-24.576h-141.312V634.88h143.36v-24.576h-112.64v-83.968h96.256z m100.352 28.672l-34.816-151.552h-34.816l55.296 233.472H675.84l47.104-161.792 4.096-20.48 4.096 20.48 47.104 161.792h28.672l57.344-233.472h-34.816l-32.768 151.552-4.096 30.72-6.144-30.72-40.96-151.552h-30.72l-40.96 151.552-6.144 30.72-6.144-30.72z"
103
- fill="var(--color-danger)"
104
- >
105
- </path>
106
- </svg>
107
- </div>
108
- )
109
- }
110
- return label
111
- }
112
-
113
- return () => {
114
- const content = (
115
- <NMenu
116
- ref="menu"
117
- options={options.value}
118
- rootIndent={16}
119
- accordion={props.accordion}
120
- collapsed={props.collapsed ?? unref(collapsed2)}
121
- dropdownProps={{ showArrow: true }}
122
- mode={props.horizontal ? 'horizontal' : 'vertical'}
123
- value={props.current ?? null}
124
- renderLabel={renderLabel}
125
- responsive
126
- collapsedWidth={props.collapsedWidth}
127
- width={props.width}
128
- />
129
- )
130
- return props.horizontal ? content : <NScrollbar>{content}</NScrollbar>
131
- }
132
- },
133
- })