jky-component-lib 0.0.35 → 0.0.37

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.
@@ -1,4 +1,4 @@
1
- const version = "0.0.35";
1
+ const version = "0.0.37";
2
2
  export {
3
3
  version
4
4
  };
@@ -1,19 +1,4 @@
1
- type __VLS_Props = {
2
- logo?: string;
3
- title?: string;
4
- height?: string | number;
5
- background?: string;
6
- backgroundImage?: string;
7
- statusIcons?: StatusIcon[];
8
- userName?: string;
9
- userAvatar?: string;
10
- };
11
- interface StatusIcon {
12
- icon: string | object;
13
- label: string;
14
- color?: string;
15
- onClick?: () => void;
16
- }
1
+ import { PageHeaderProps } from './types';
17
2
  declare function __VLS_template(): {
18
3
  attrs: Partial<{}>;
19
4
  slots: {
@@ -25,17 +10,16 @@ declare function __VLS_template(): {
25
10
  rootEl: HTMLElement;
26
11
  };
27
12
  type __VLS_TemplateResult = ReturnType<typeof __VLS_template>;
28
- declare const __VLS_component: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {} & {
13
+ declare const __VLS_component: import('vue').DefineComponent<PageHeaderProps, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {} & {
14
+ command: (command: string) => any;
29
15
  logout: () => any;
30
- clearCache: () => any;
31
- profile: () => any;
32
- }, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{
16
+ }, string, import('vue').PublicProps, Readonly<PageHeaderProps> & Readonly<{
17
+ onCommand?: ((command: string) => any) | undefined;
33
18
  onLogout?: (() => any) | undefined;
34
- onClearCache?: (() => any) | undefined;
35
- onProfile?: (() => any) | undefined;
36
19
  }>, {
37
20
  height: string | number;
38
- statusIcons: StatusIcon[];
21
+ statusIcons: import('./types').PageHeaderStatusIcon[];
22
+ userDropdownItems: import('./types').PageHeaderUserDropdonItem[];
39
23
  }, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, HTMLElement>;
40
24
  declare const _default: __VLS_WithTemplateSlots<typeof __VLS_component, __VLS_TemplateResult["slots"]>;
41
25
  export default _default;
@@ -17,8 +17,9 @@ var __spreadValues = (a, b) => {
17
17
  return a;
18
18
  };
19
19
  var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
20
- import { defineComponent, computed, openBlock, createElementBlock, normalizeStyle, createElementVNode, createCommentVNode, toDisplayString, renderSlot, Fragment, renderList, normalizeClass, createBlock, unref, withCtx, resolveDynamicComponent, createVNode, createTextVNode } from "vue";
20
+ import { defineComponent, computed, openBlock, createElementBlock, normalizeStyle, unref, createElementVNode, createBlock, normalizeProps, mergeProps, createCommentVNode, toDisplayString, renderSlot, Fragment, renderList, normalizeClass, withCtx, resolveDynamicComponent, createVNode, createTextVNode } from "vue";
21
21
  import { ElIcon, ElDropdown, ElDropdownMenu, ElDropdownItem } from "element-plus";
22
+ import _sfc_main$1 from "./PopoverMenu.vue.js";
22
23
  const _hoisted_1 = { class: "jky-page-header__container" };
23
24
  const _hoisted_2 = { class: "jky-page-header__left" };
24
25
  const _hoisted_3 = ["src", "alt"];
@@ -41,7 +42,7 @@ const _hoisted_10 = { class: "jky-page-header__user" };
41
42
  const _hoisted_11 = ["src", "alt"];
42
43
  const _hoisted_12 = {
43
44
  key: 0,
44
- class: "jky-page-header__username hidden md:block"
45
+ class: "jky-page-header__username text-base hidden md:block"
45
46
  };
46
47
  const _sfc_main = /* @__PURE__ */ defineComponent(__spreadProps(__spreadValues({}, {
47
48
  name: "JkyPageHeader"
@@ -55,12 +56,24 @@ const _sfc_main = /* @__PURE__ */ defineComponent(__spreadProps(__spreadValues({
55
56
  backgroundImage: {},
56
57
  statusIcons: { default: () => [] },
57
58
  userName: {},
58
- userAvatar: {}
59
+ userAvatar: {},
60
+ popover: {},
61
+ showMore: { type: Boolean },
62
+ showPopover: { type: Boolean },
63
+ showLogout: { type: Boolean },
64
+ userDropdownItems: { default: () => [
65
+ { label: "个人信息", value: "profile", icon: "icon-[heroicons--user]" },
66
+ { label: "清理缓存", value: "clear", icon: "icon-[heroicons--trash]" },
67
+ { label: "注销", value: "logout", icon: "icon-[heroicons--arrow-right-on-rectangle]" }
68
+ ] }
59
69
  },
60
- emits: ["logout", "clearCache", "profile"],
70
+ emits: ["logout", "command"],
61
71
  setup(__props, { emit: __emit }) {
62
72
  const props = __props;
63
73
  const emit = __emit;
74
+ function handleCommand(command) {
75
+ emit("command", command);
76
+ }
64
77
  const heightValue = computed(() => {
65
78
  if (typeof props.height === "number") {
66
79
  return `${props.height}px`;
@@ -79,21 +92,14 @@ const _sfc_main = /* @__PURE__ */ defineComponent(__spreadProps(__spreadValues({
79
92
  }
80
93
  return style;
81
94
  });
82
- function handleLogout() {
83
- emit("logout");
84
- }
85
- function handleClearCache() {
86
- emit("clearCache");
87
- }
88
- function handleProfile() {
89
- emit("profile");
90
- }
91
95
  return (_ctx, _cache) => {
96
+ var _a, _b, _c, _d;
92
97
  return openBlock(), createElementBlock("header", {
93
98
  class: "jky-page-header",
94
- style: normalizeStyle([backgroundStyle.value, { height: heightValue.value }])
99
+ style: normalizeStyle([unref(backgroundStyle), { height: unref(heightValue) }])
95
100
  }, [
96
101
  createElementVNode("div", _hoisted_1, [
102
+ __props.showPopover && ((_b = (_a = __props.popover) == null ? void 0 : _a.menus) == null ? void 0 : _b.length) ? (openBlock(), createBlock(_sfc_main$1, normalizeProps(mergeProps({ key: 0 }, __props.popover)), null, 16)) : createCommentVNode("", true),
97
103
  createElementVNode("div", _hoisted_2, [
98
104
  __props.logo ? (openBlock(), createElementBlock("img", {
99
105
  key: 0,
@@ -171,7 +177,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent(__spreadProps(__spreadValues({
171
177
  class: "jky-page-header__status-icon text-white"
172
178
  }, {
173
179
  default: withCtx(() => [
174
- (openBlock(), createElementBlock("svg", _hoisted_8, [..._cache[0] || (_cache[0] = [
180
+ (openBlock(), createElementBlock("svg", _hoisted_8, [..._cache[1] || (_cache[1] = [
175
181
  createElementVNode("path", {
176
182
  "stroke-linecap": "round",
177
183
  "stroke-linejoin": "round",
@@ -190,34 +196,34 @@ const _sfc_main = /* @__PURE__ */ defineComponent(__spreadProps(__spreadValues({
190
196
  createElementVNode("span", null, toDisplayString((/* @__PURE__ */ new Date()).toLocaleString("zh-CN")), 1)
191
197
  ])
192
198
  ]),
193
- createVNode(unref(ElDropdown), { trigger: "click" }, {
199
+ __props.showMore && ((_d = (_c = __props.popover) == null ? void 0 : _c.menus) == null ? void 0 : _d.length) ? (openBlock(), createBlock(_sfc_main$1, mergeProps({
200
+ key: 1,
201
+ "ref-name": "更多",
202
+ "ref-icon-class": "icon-[mdi--format-list-bulleted]"
203
+ }, __props.popover), null, 16)) : createCommentVNode("", true),
204
+ createVNode(unref(ElDropdown), {
205
+ trigger: "hover",
206
+ onCommand: handleCommand
207
+ }, {
194
208
  dropdown: withCtx(() => [
195
209
  createVNode(unref(ElDropdownMenu), null, {
196
210
  default: withCtx(() => [
197
- createVNode(unref(ElDropdownItem), { onClick: handleProfile }, {
198
- default: withCtx(() => [..._cache[2] || (_cache[2] = [
199
- createElementVNode("span", { class: "icon-[heroicons--user]" }, null, -1),
200
- createTextVNode(" 个人信息 ", -1)
201
- ])]),
202
- _: 1
203
- }),
204
- createVNode(unref(ElDropdownItem), { onClick: handleClearCache }, {
205
- default: withCtx(() => [..._cache[3] || (_cache[3] = [
206
- createElementVNode("span", { class: "icon-[heroicons--trash]" }, null, -1),
207
- createTextVNode(" 清理缓存 ", -1)
208
- ])]),
209
- _: 1
210
- }),
211
- createVNode(unref(ElDropdownItem), {
212
- divided: "",
213
- onClick: handleLogout
214
- }, {
215
- default: withCtx(() => [..._cache[4] || (_cache[4] = [
216
- createElementVNode("span", { class: "icon-[heroicons--arrow-right-on-rectangle]" }, null, -1),
217
- createTextVNode(" 注销 ", -1)
218
- ])]),
219
- _: 1
220
- })
211
+ (openBlock(true), createElementBlock(Fragment, null, renderList(__props.userDropdownItems, (item) => {
212
+ return openBlock(), createBlock(unref(ElDropdownItem), {
213
+ key: item.value,
214
+ command: item.value,
215
+ disabled: item.disabled,
216
+ divided: item.divided
217
+ }, {
218
+ default: withCtx(() => [
219
+ createElementVNode("span", {
220
+ class: normalizeClass(["mr-2", item.icon])
221
+ }, null, 2),
222
+ createTextVNode(" " + toDisplayString(item.label), 1)
223
+ ]),
224
+ _: 2
225
+ }, 1032, ["command", "disabled", "divided"]);
226
+ }), 128))
221
227
  ]),
222
228
  _: 1
223
229
  })
@@ -243,7 +249,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent(__spreadProps(__spreadValues({
243
249
  size: 24,
244
250
  class: "jky-page-header__avatar"
245
251
  }, {
246
- default: withCtx(() => [..._cache[1] || (_cache[1] = [
252
+ default: withCtx(() => [..._cache[2] || (_cache[2] = [
247
253
  createElementVNode("span", { class: "icon-[heroicons--user]" }, null, -1)
248
254
  ])]),
249
255
  _: 1
@@ -253,7 +259,15 @@ const _sfc_main = /* @__PURE__ */ defineComponent(__spreadProps(__spreadValues({
253
259
  ])
254
260
  ]),
255
261
  _: 3
256
- })
262
+ }),
263
+ __props.showLogout ? (openBlock(), createElementBlock("div", {
264
+ key: 2,
265
+ class: "jky-page-header__logout h-full flex items-center text-white",
266
+ onClick: _cache[0] || (_cache[0] = ($event) => _ctx.$emit("logout"))
267
+ }, [..._cache[3] || (_cache[3] = [
268
+ createElementVNode("span", { class: "icon-[ri--logout-circle-line] mr-2" }, null, -1),
269
+ createElementVNode("span", null, "退出登录", -1)
270
+ ])])) : createCommentVNode("", true)
257
271
  ])
258
272
  ])
259
273
  ], 4);
@@ -0,0 +1,11 @@
1
+ import { TooltipTriggerType } from 'element-plus';
2
+ import { Arrayable } from 'element-plus/es/utils';
3
+ import { PageHeaderPopoverMenuProps } from './types';
4
+ declare const _default: import('vue').DefineComponent<PageHeaderPopoverMenuProps, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<PageHeaderPopoverMenuProps> & Readonly<{}>, {
5
+ trigger: Arrayable<TooltipTriggerType>;
6
+ menus: PopoverMenuItem[];
7
+ buttonClass: string;
8
+ width: number;
9
+ highlightCurrent: boolean;
10
+ }, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
11
+ export default _default;
@@ -0,0 +1,89 @@
1
+ import { defineComponent, ref, openBlock, createElementBlock, createVNode, unref, withCtx, createElementVNode, Fragment, renderList, createBlock, normalizeClass, createCommentVNode, toDisplayString } from "vue";
2
+ import { ElPopover, ElButton } from "element-plus";
3
+ const _hoisted_1 = {
4
+ key: 0,
5
+ class: "jky-page-header__popover mr-2 h-full flex items-center text-white"
6
+ };
7
+ const _hoisted_2 = { class: "flex items-center" };
8
+ const _hoisted_3 = {
9
+ key: 0,
10
+ class: "text-white ml-2"
11
+ };
12
+ const _hoisted_4 = { class: "grid grid-cols-3 gap-2 p-2" };
13
+ const _hoisted_5 = { class: "text-sm text-center" };
14
+ const _sfc_main = /* @__PURE__ */ defineComponent({
15
+ __name: "PopoverMenu",
16
+ props: {
17
+ refIconClass: {},
18
+ refName: {},
19
+ menus: { default: () => [] },
20
+ buttonClass: { default: "w-20 h-20" },
21
+ elButtonClass: {},
22
+ elButtonType: {},
23
+ width: { default: 400 },
24
+ trigger: { default: "click" },
25
+ highlightCurrent: { type: Boolean, default: true }
26
+ },
27
+ setup(__props) {
28
+ const props = __props;
29
+ const popoverIndex = ref("");
30
+ function onPopoverButtonClick(item) {
31
+ var _a;
32
+ if (props.highlightCurrent) {
33
+ popoverIndex.value = item.value;
34
+ }
35
+ (_a = item.onClick) == null ? void 0 : _a.call(item);
36
+ }
37
+ return (_ctx, _cache) => {
38
+ var _a;
39
+ return ((_a = __props.menus) == null ? void 0 : _a.length) ? (openBlock(), createElementBlock("div", _hoisted_1, [
40
+ createVNode(unref(ElPopover), {
41
+ title: "菜单",
42
+ placement: "bottom-start",
43
+ class: "h-full",
44
+ trigger: __props.trigger,
45
+ width: __props.width
46
+ }, {
47
+ reference: withCtx(() => [
48
+ createElementVNode("div", _hoisted_2, [
49
+ createElementVNode("span", {
50
+ class: normalizeClass(["icon-[ant-design--menu-fold-outlined] text-[white] text-2xl cursor-pointer hover:opacity-80", __props.refIconClass])
51
+ }, null, 2),
52
+ __props.refName ? (openBlock(), createElementBlock("span", _hoisted_3, toDisplayString(__props.refName), 1)) : createCommentVNode("", true)
53
+ ])
54
+ ]),
55
+ default: withCtx(() => [
56
+ createElementVNode("div", _hoisted_4, [
57
+ (openBlock(true), createElementBlock(Fragment, null, renderList(__props.menus, (item) => {
58
+ return openBlock(), createBlock(unref(ElButton), {
59
+ key: item.value,
60
+ disabled: item.disabled,
61
+ class: normalizeClass(["w-fit! h-fit! ml-0!", [__props.elButtonClass, item.elButtonClass]]),
62
+ type: unref(popoverIndex) === item.value ? "primary" : __props.elButtonType || "default",
63
+ onClick: ($event) => onPopoverButtonClick(item)
64
+ }, {
65
+ default: withCtx(() => [
66
+ createElementVNode("div", {
67
+ class: normalizeClass(["jky-page-header__popover-inner flex flex-col justify-around items-center", __props.buttonClass])
68
+ }, [
69
+ item.icon ? (openBlock(), createElementBlock("span", {
70
+ key: 0,
71
+ class: normalizeClass(["text-xl mr-2", [item.icon]])
72
+ }, null, 2)) : createCommentVNode("", true),
73
+ createElementVNode("span", _hoisted_5, toDisplayString(item.label), 1)
74
+ ], 2)
75
+ ]),
76
+ _: 2
77
+ }, 1032, ["disabled", "class", "type", "onClick"]);
78
+ }), 128))
79
+ ])
80
+ ]),
81
+ _: 1
82
+ }, 8, ["trigger", "width"])
83
+ ])) : createCommentVNode("", true);
84
+ };
85
+ }
86
+ });
87
+ export {
88
+ _sfc_main as default
89
+ };
@@ -0,0 +1,4 @@
1
+ import _sfc_main from "./PopoverMenu.vue.js";
2
+ export {
3
+ _sfc_main as default
4
+ };
@@ -22,7 +22,7 @@
22
22
  --jky-page-header-title-size-mobile: 16px;
23
23
  --jky-page-header-title-weight: 600;
24
24
  --jky-page-header-text-color: rgba(255, 255, 255, 0.85);
25
- --jky-page-header-text-size: 14px;
25
+ --jky-page-header-text-size: 16px;
26
26
 
27
27
  /* 图标 */
28
28
  --jky-page-header-icon-color: #ffffff;
@@ -123,6 +123,10 @@ img {
123
123
  color: var(--jky-page-header-text-color);
124
124
  white-space: nowrap;
125
125
  }
126
+ .jky-page-header__logout {
127
+ font-size: var(--jky-page-header-text-size);
128
+ color: var(--jky-page-header-text-color);
129
+ }
126
130
  /* 响应式设计 */
127
131
  @media (max-width: 768px) {
128
132
  .jky-page-header__container {
package/dist/es/style.css CHANGED
@@ -31,8 +31,14 @@
31
31
  --spacing: .25rem;
32
32
  --text-sm: .875rem;
33
33
  --text-sm--line-height: calc(1.25 / .875);
34
+ --text-base: 1rem;
35
+ --text-base--line-height: calc(1.5 / 1);
34
36
  --text-lg: 1.125rem;
35
37
  --text-lg--line-height: calc(1.75 / 1.125);
38
+ --text-xl: 1.25rem;
39
+ --text-xl--line-height: calc(1.75 / 1.25);
40
+ --text-2xl: 1.5rem;
41
+ --text-2xl--line-height: calc(2 / 1.5);
36
42
  --font-weight-semibold: 600;
37
43
  --default-transition-duration: .15s;
38
44
  --default-transition-timing-function: cubic-bezier(.4, 0, .2, 1);
@@ -323,10 +329,34 @@
323
329
  margin-bottom: calc(var(--spacing) * 4);
324
330
  }
325
331
 
332
+ .ml-0\! {
333
+ margin-left: calc(var(--spacing) * 0) !important;
334
+ }
335
+
326
336
  .ml-1 {
327
337
  margin-left: calc(var(--spacing) * 1);
328
338
  }
329
339
 
340
+ .ml-2 {
341
+ margin-left: calc(var(--spacing) * 2);
342
+ }
343
+
344
+ .icon-\[ant-design--menu-fold-outlined\] {
345
+ width: 1em;
346
+ height: 1em;
347
+ -webkit-mask-image: var(--svg);
348
+ -webkit-mask-image: var(--svg);
349
+ -webkit-mask-image: var(--svg);
350
+ mask-image: var(--svg);
351
+ --svg: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 1024 1024' width='1024' height='1024'%3E%3Cpath fill='black' d='M408 442h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8m-8 204c0 4.4 3.6 8 8 8h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8zm504-486H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8m0 632H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8M115.4 518.9L271.7 642c5.8 4.6 14.4.5 14.4-6.9V388.9c0-7.4-8.5-11.5-14.4-6.9L115.4 505.1a8.74 8.74 0 0 0 0 13.8'/%3E%3C/svg%3E");
352
+ background-color: currentColor;
353
+ display: inline-block;
354
+ -webkit-mask-size: 100% 100%;
355
+ mask-size: 100% 100%;
356
+ -webkit-mask-repeat: no-repeat;
357
+ mask-repeat: no-repeat;
358
+ }
359
+
330
360
  .icon-\[carbon--arrow-right\] {
331
361
  width: 1em;
332
362
  height: 1em;
@@ -487,6 +517,22 @@
487
517
  mask-repeat: no-repeat;
488
518
  }
489
519
 
520
+ .icon-\[heroicons--chart-bar\] {
521
+ width: 1em;
522
+ height: 1em;
523
+ -webkit-mask-image: var(--svg);
524
+ -webkit-mask-image: var(--svg);
525
+ -webkit-mask-image: var(--svg);
526
+ mask-image: var(--svg);
527
+ --svg: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cpath fill='none' stroke='black' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='M3 13.125C3 12.504 3.504 12 4.125 12h2.25c.621 0 1.125.504 1.125 1.125v6.75C7.5 20.496 6.996 21 6.375 21h-2.25A1.125 1.125 0 0 1 3 19.875zm6.75-4.5c0-.621.504-1.125 1.125-1.125h2.25c.621 0 1.125.504 1.125 1.125v11.25c0 .621-.504 1.125-1.125 1.125h-2.25a1.125 1.125 0 0 1-1.125-1.125zm6.75-4.5c0-.621.504-1.125 1.125-1.125h2.25C20.496 3 21 3.504 21 4.125v15.75c0 .621-.504 1.125-1.125 1.125h-2.25a1.125 1.125 0 0 1-1.125-1.125z'/%3E%3C/svg%3E");
528
+ background-color: currentColor;
529
+ display: inline-block;
530
+ -webkit-mask-size: 100% 100%;
531
+ mask-size: 100% 100%;
532
+ -webkit-mask-repeat: no-repeat;
533
+ mask-repeat: no-repeat;
534
+ }
535
+
490
536
  .icon-\[heroicons--check\] {
491
537
  width: 1em;
492
538
  height: 1em;
@@ -503,6 +549,22 @@
503
549
  mask-repeat: no-repeat;
504
550
  }
505
551
 
552
+ .icon-\[heroicons--cog-6-tooth\] {
553
+ width: 1em;
554
+ height: 1em;
555
+ -webkit-mask-image: var(--svg);
556
+ -webkit-mask-image: var(--svg);
557
+ -webkit-mask-image: var(--svg);
558
+ mask-image: var(--svg);
559
+ --svg: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cg fill='none' stroke='black' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5'%3E%3Cpath d='M9.594 3.94c.09-.542.56-.94 1.11-.94h2.593c.55 0 1.02.398 1.11.94l.213 1.281c.063.374.313.686.645.87q.11.06.22.127c.325.196.72.257 1.075.124l1.217-.456a1.125 1.125 0 0 1 1.37.49l1.296 2.247a1.125 1.125 0 0 1-.26 1.431l-1.003.827c-.293.241-.438.613-.43.992a8 8 0 0 1 0 .255c-.008.378.137.75.43.991l1.004.827c.424.35.534.955.26 1.43l-1.298 2.247a1.125 1.125 0 0 1-1.369.491l-1.217-.456c-.355-.133-.75-.072-1.076.124a7 7 0 0 1-.22.128c-.331.183-.581.495-.644.869l-.213 1.281c-.09.543-.56.94-1.11.94h-2.594c-.55 0-1.019-.398-1.11-.94l-.213-1.281c-.062-.374-.312-.686-.644-.87a7 7 0 0 1-.22-.127c-.325-.196-.72-.257-1.076-.124l-1.217.456a1.125 1.125 0 0 1-1.369-.49l-1.297-2.247a1.125 1.125 0 0 1 .26-1.431l1.004-.827c.292-.24.437-.613.43-.991a7 7 0 0 1 0-.255c.007-.38-.138-.751-.43-.992l-1.004-.827a1.125 1.125 0 0 1-.26-1.43l1.297-2.247a1.125 1.125 0 0 1 1.37-.491l1.216.456c.356.133.751.072 1.076-.124q.108-.066.22-.128c.332-.183.582-.495.644-.869z'/%3E%3Cpath d='M15 12a3 3 0 1 1-6 0a3 3 0 0 1 6 0'/%3E%3C/g%3E%3C/svg%3E");
560
+ background-color: currentColor;
561
+ display: inline-block;
562
+ -webkit-mask-size: 100% 100%;
563
+ mask-size: 100% 100%;
564
+ -webkit-mask-repeat: no-repeat;
565
+ mask-repeat: no-repeat;
566
+ }
567
+
506
568
  .icon-\[heroicons--cog\] {
507
569
  width: 1em;
508
570
  height: 1em;
@@ -535,6 +597,22 @@
535
597
  mask-repeat: no-repeat;
536
598
  }
537
599
 
600
+ .icon-\[heroicons--document-text\] {
601
+ width: 1em;
602
+ height: 1em;
603
+ -webkit-mask-image: var(--svg);
604
+ -webkit-mask-image: var(--svg);
605
+ -webkit-mask-image: var(--svg);
606
+ mask-image: var(--svg);
607
+ --svg: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cpath fill='none' stroke='black' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='M19.5 14.25v-2.625a3.375 3.375 0 0 0-3.375-3.375h-1.5A1.125 1.125 0 0 1 13.5 7.125v-1.5a3.375 3.375 0 0 0-3.375-3.375H8.25m0 12.75h7.5m-7.5 3H12M10.5 2.25H5.625c-.621 0-1.125.504-1.125 1.125v17.25c0 .621.504 1.125 1.125 1.125h12.75c.621 0 1.125-.504 1.125-1.125V11.25a9 9 0 0 0-9-9'/%3E%3C/svg%3E");
608
+ background-color: currentColor;
609
+ display: inline-block;
610
+ -webkit-mask-size: 100% 100%;
611
+ mask-size: 100% 100%;
612
+ -webkit-mask-repeat: no-repeat;
613
+ mask-repeat: no-repeat;
614
+ }
615
+
538
616
  .icon-\[heroicons--ellipsis-horizontal\] {
539
617
  width: 1em;
540
618
  height: 1em;
@@ -583,6 +661,22 @@
583
661
  mask-repeat: no-repeat;
584
662
  }
585
663
 
664
+ .icon-\[heroicons--key\] {
665
+ width: 1em;
666
+ height: 1em;
667
+ -webkit-mask-image: var(--svg);
668
+ -webkit-mask-image: var(--svg);
669
+ -webkit-mask-image: var(--svg);
670
+ mask-image: var(--svg);
671
+ --svg: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cpath fill='none' stroke='black' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='M15.75 5.25a3 3 0 0 1 3 3m3 0a6 6 0 0 1-7.029 5.912c-.563-.097-1.159.026-1.563.43L10.5 17.25H8.25v2.25H6v2.25H2.25v-2.818c0-.597.237-1.17.659-1.591l6.499-6.499c.404-.404.527-1 .43-1.563A6 6 0 1 1 21.75 8.25'/%3E%3C/svg%3E");
672
+ background-color: currentColor;
673
+ display: inline-block;
674
+ -webkit-mask-size: 100% 100%;
675
+ mask-size: 100% 100%;
676
+ -webkit-mask-repeat: no-repeat;
677
+ mask-repeat: no-repeat;
678
+ }
679
+
586
680
  .icon-\[heroicons--share\] {
587
681
  width: 1em;
588
682
  height: 1em;
@@ -663,6 +757,22 @@
663
757
  mask-repeat: no-repeat;
664
758
  }
665
759
 
760
+ .icon-\[heroicons--users\] {
761
+ width: 1em;
762
+ height: 1em;
763
+ -webkit-mask-image: var(--svg);
764
+ -webkit-mask-image: var(--svg);
765
+ -webkit-mask-image: var(--svg);
766
+ mask-image: var(--svg);
767
+ --svg: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cpath fill='none' stroke='black' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='M15 19.128a9.4 9.4 0 0 0 2.625.372a9.3 9.3 0 0 0 4.121-.952q.004-.086.004-.173a4.125 4.125 0 0 0-7.536-2.32M15 19.128v-.003c0-1.113-.285-2.16-.786-3.07M15 19.128v.106A12.3 12.3 0 0 1 8.624 21c-2.331 0-4.512-.645-6.374-1.766l-.001-.109a6.375 6.375 0 0 1 11.964-3.07M12 6.375a3.375 3.375 0 1 1-6.75 0a3.375 3.375 0 0 1 6.75 0m8.25 2.25a2.625 2.625 0 1 1-5.25 0a2.625 2.625 0 0 1 5.25 0'/%3E%3C/svg%3E");
768
+ background-color: currentColor;
769
+ display: inline-block;
770
+ -webkit-mask-size: 100% 100%;
771
+ mask-size: 100% 100%;
772
+ -webkit-mask-repeat: no-repeat;
773
+ mask-repeat: no-repeat;
774
+ }
775
+
666
776
  .icon-\[mdi--account\] {
667
777
  width: 1em;
668
778
  height: 1em;
@@ -679,6 +789,38 @@
679
789
  mask-repeat: no-repeat;
680
790
  }
681
791
 
792
+ .icon-\[mdi--format-list-bulleted\] {
793
+ width: 1em;
794
+ height: 1em;
795
+ -webkit-mask-image: var(--svg);
796
+ -webkit-mask-image: var(--svg);
797
+ -webkit-mask-image: var(--svg);
798
+ mask-image: var(--svg);
799
+ --svg: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cpath fill='black' d='M7 5h14v2H7zm0 8v-2h14v2zM4 4.5A1.5 1.5 0 0 1 5.5 6A1.5 1.5 0 0 1 4 7.5A1.5 1.5 0 0 1 2.5 6A1.5 1.5 0 0 1 4 4.5m0 6A1.5 1.5 0 0 1 5.5 12A1.5 1.5 0 0 1 4 13.5A1.5 1.5 0 0 1 2.5 12A1.5 1.5 0 0 1 4 10.5M7 19v-2h14v2zm-3-2.5A1.5 1.5 0 0 1 5.5 18A1.5 1.5 0 0 1 4 19.5A1.5 1.5 0 0 1 2.5 18A1.5 1.5 0 0 1 4 16.5'/%3E%3C/svg%3E");
800
+ background-color: currentColor;
801
+ display: inline-block;
802
+ -webkit-mask-size: 100% 100%;
803
+ mask-size: 100% 100%;
804
+ -webkit-mask-repeat: no-repeat;
805
+ mask-repeat: no-repeat;
806
+ }
807
+
808
+ .icon-\[ri--logout-circle-line\] {
809
+ width: 1em;
810
+ height: 1em;
811
+ -webkit-mask-image: var(--svg);
812
+ -webkit-mask-image: var(--svg);
813
+ -webkit-mask-image: var(--svg);
814
+ mask-image: var(--svg);
815
+ --svg: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24'%3E%3Cpath fill='black' d='M5 11h8v2H5v3l-5-4l5-4zm-1 7h2.708a8 8 0 1 0 0-12H4a9.99 9.99 0 0 1 8-4c5.523 0 10 4.477 10 10s-4.477 10-10 10a9.99 9.99 0 0 1-8-4'/%3E%3C/svg%3E");
816
+ background-color: currentColor;
817
+ display: inline-block;
818
+ -webkit-mask-size: 100% 100%;
819
+ mask-size: 100% 100%;
820
+ -webkit-mask-repeat: no-repeat;
821
+ mask-repeat: no-repeat;
822
+ }
823
+
682
824
  .contents {
683
825
  display: contents;
684
826
  }
@@ -687,6 +829,10 @@
687
829
  display: flex;
688
830
  }
689
831
 
832
+ .grid {
833
+ display: grid;
834
+ }
835
+
690
836
  .hidden {
691
837
  display: none;
692
838
  }
@@ -707,6 +853,18 @@
707
853
  height: calc(var(--spacing) * 6);
708
854
  }
709
855
 
856
+ .h-20 {
857
+ height: calc(var(--spacing) * 20);
858
+ }
859
+
860
+ .h-fit\! {
861
+ height: fit-content !important;
862
+ }
863
+
864
+ .h-full {
865
+ height: 100%;
866
+ }
867
+
710
868
  .w-4 {
711
869
  width: calc(var(--spacing) * 4);
712
870
  }
@@ -719,6 +877,14 @@
719
877
  width: calc(var(--spacing) * 6);
720
878
  }
721
879
 
880
+ .w-20 {
881
+ width: calc(var(--spacing) * 20);
882
+ }
883
+
884
+ .w-fit\! {
885
+ width: fit-content !important;
886
+ }
887
+
722
888
  .w-full {
723
889
  width: 100%;
724
890
  }
@@ -731,6 +897,14 @@
731
897
  cursor: pointer;
732
898
  }
733
899
 
900
+ .grid-cols-3 {
901
+ grid-template-columns: repeat(3, minmax(0, 1fr));
902
+ }
903
+
904
+ .flex-col {
905
+ flex-direction: column;
906
+ }
907
+
734
908
  .flex-wrap {
735
909
  flex-wrap: wrap;
736
910
  }
@@ -739,6 +913,10 @@
739
913
  align-items: center;
740
914
  }
741
915
 
916
+ .justify-around {
917
+ justify-content: space-around;
918
+ }
919
+
742
920
  .gap-2 {
743
921
  gap: calc(var(--spacing) * 2);
744
922
  }
@@ -788,10 +966,28 @@
788
966
  background-color: var(--color-red-500) !important;
789
967
  }
790
968
 
969
+ .p-2 {
970
+ padding: calc(var(--spacing) * 2);
971
+ }
972
+
791
973
  .p-4 {
792
974
  padding: calc(var(--spacing) * 4);
793
975
  }
794
976
 
977
+ .text-center {
978
+ text-align: center;
979
+ }
980
+
981
+ .text-2xl {
982
+ font-size: var(--text-2xl);
983
+ line-height: var(--tw-leading, var(--text-2xl--line-height));
984
+ }
985
+
986
+ .text-base {
987
+ font-size: var(--text-base);
988
+ line-height: var(--tw-leading, var(--text-base--line-height));
989
+ }
990
+
795
991
  .text-lg {
796
992
  font-size: var(--text-lg);
797
993
  line-height: var(--tw-leading, var(--text-lg--line-height));
@@ -802,11 +998,20 @@
802
998
  line-height: var(--tw-leading, var(--text-sm--line-height));
803
999
  }
804
1000
 
1001
+ .text-xl {
1002
+ font-size: var(--text-xl);
1003
+ line-height: var(--tw-leading, var(--text-xl--line-height));
1004
+ }
1005
+
805
1006
  .font-semibold {
806
1007
  --tw-font-weight: var(--font-weight-semibold);
807
1008
  font-weight: var(--font-weight-semibold);
808
1009
  }
809
1010
 
1011
+ .text-\[white\] {
1012
+ color: #fff;
1013
+ }
1014
+
810
1015
  .text-blue-600 {
811
1016
  color: var(--color-blue-600);
812
1017
  }
@@ -846,6 +1051,12 @@
846
1051
  transition-duration: var(--tw-duration, var(--default-transition-duration));
847
1052
  }
848
1053
 
1054
+ @media (hover: hover) {
1055
+ .hover\:opacity-80:hover {
1056
+ opacity: .8;
1057
+ }
1058
+ }
1059
+
849
1060
  @media (min-width: 48rem) {
850
1061
  .md\:block {
851
1062
  display: block;