@ithinkdt/ui 4.0.0-37 → 4.0.0-40

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 (55) hide show
  1. package/dist/components-BC8oa62b.js +1612 -0
  2. package/dist/components.js +5 -0
  3. package/dist/directives-DUuJW647.js +183 -0
  4. package/dist/directives.js +3 -0
  5. package/dist/index.js +1222 -0
  6. package/dist/page.js +511 -0
  7. package/dist/use-i18n-Dx7V4KrY.js +6 -0
  8. package/dist/use-style-DcT-1dj4.js +29 -0
  9. package/dist/use-style.js +2 -0
  10. package/esm/components.js +1 -0
  11. package/esm/directives.js +1 -0
  12. package/esm/index.js +1 -0
  13. package/esm/page.js +1 -0
  14. package/esm/use-style.js +1 -0
  15. package/package.json +21 -18
  16. package/src/components/Checkboxes.jsx +0 -130
  17. package/src/components/DataActions.jsx +0 -105
  18. package/src/components/DataCustom.jsx +0 -187
  19. package/src/components/DataFilter.jsx +0 -119
  20. package/src/components/DataForm.jsx +0 -264
  21. package/src/components/DataLocaleInput.jsx +0 -121
  22. package/src/components/DataPagination.jsx +0 -62
  23. package/src/components/DataSelection.jsx +0 -57
  24. package/src/components/DataTable.jsx +0 -302
  25. package/src/components/Radios.jsx +0 -134
  26. package/src/components/UserDept.jsx +0 -643
  27. package/src/components/assets.jsx +0 -274
  28. package/src/components/index.js +0 -11
  29. package/src/design/Account.jsx +0 -154
  30. package/src/design/Appearance.jsx +0 -89
  31. package/src/design/Breadcrumb.jsx +0 -67
  32. package/src/design/Fullscreen.jsx +0 -65
  33. package/src/design/Language.jsx +0 -45
  34. package/src/design/Layout.jsx +0 -241
  35. package/src/design/Logo.jsx +0 -92
  36. package/src/design/Menu.jsx +0 -133
  37. package/src/design/MultiTabs.jsx +0 -501
  38. package/src/design/Notification.jsx +0 -311
  39. package/src/design/Tenant.jsx +0 -88
  40. package/src/design/common.jsx +0 -21
  41. package/src/design/index.js +0 -11
  42. package/src/directives/index.js +0 -2
  43. package/src/directives/spin.js +0 -181
  44. package/src/directives/tooltip.jsx +0 -121
  45. package/src/index.js +0 -18
  46. package/src/page.jsx +0 -740
  47. package/src/use-i18n.js +0 -8
  48. package/src/use-style.js +0 -58
  49. package/src/utils.js +0 -20
  50. /package/{src → esm}/components.d.ts +0 -0
  51. /package/{src → esm}/design.d.ts +0 -0
  52. /package/{src → esm}/directives.d.ts +0 -0
  53. /package/{src → esm}/index.d.ts +0 -0
  54. /package/{src → esm}/page.d.ts +0 -0
  55. /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 { computedAsync } 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 = computedAsync(() => (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
- })