@privyid/persona 0.14.0 → 0.16.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 (59) hide show
  1. package/dist/components/avatar/Avatar.vue.d.ts +3 -3
  2. package/dist/components/button/Button.vue.d.ts +2 -2
  3. package/dist/components/calendar/Calendar.vue +162 -38
  4. package/dist/components/calendar/Calendar.vue.d.ts +63 -10
  5. package/dist/components/calendar/adapter/adapter.d.ts +8 -2
  6. package/dist/components/calendar/adapter/adapter.mjs +38 -1
  7. package/dist/components/calendar/adapter/date.mjs +10 -8
  8. package/dist/components/calendar/adapter/month.mjs +11 -8
  9. package/dist/components/calendar/adapter/year.mjs +7 -7
  10. package/dist/components/checkbox/Checkbox.vue.d.ts +6 -6
  11. package/dist/components/contextual-bar/ContextualBar.vue.d.ts +2 -2
  12. package/dist/components/cropper/Cropper.vue.d.ts +2 -2
  13. package/dist/components/datepicker/Datepicker.vue +37 -3
  14. package/dist/components/datepicker/Datepicker.vue.d.ts +50 -3
  15. package/dist/components/dropdown/Dropdown.vue +2 -1
  16. package/dist/components/dropdown/Dropdown.vue.d.ts +4 -4
  17. package/dist/components/filterbar/pinned/PinnedSelect.vue.d.ts +2 -2
  18. package/dist/components/filterbar/pinned/PinnedToggle.vue.d.ts +6 -6
  19. package/dist/components/input/Input.vue.d.ts +1 -1
  20. package/dist/components/input-file/InputFile.vue.d.ts +2 -2
  21. package/dist/components/input-group/InputGroup.vue.d.ts +1 -1
  22. package/dist/components/input-pin/InputPin.vue.d.ts +1 -1
  23. package/dist/components/input-range/InputRange.vue +4 -4
  24. package/dist/components/input-range/InputRange.vue.d.ts +4 -4
  25. package/dist/components/label/Label.vue.d.ts +2 -2
  26. package/dist/components/modal/Modal.vue.d.ts +2 -2
  27. package/dist/components/nav/Nav.vue +29 -7
  28. package/dist/components/nav/Nav.vue.d.ts +18 -0
  29. package/dist/components/nav/NavItem.vue +9 -1
  30. package/dist/components/nav/NavItem.vue.d.ts +9 -0
  31. package/dist/components/nav/NavItemDropdown.vue +6 -1
  32. package/dist/components/nav/NavItemDropdown.vue.d.ts +14 -4
  33. package/dist/components/nav/NavSubItem.vue +1 -1
  34. package/dist/components/navbar/Navbar.vue +22 -5
  35. package/dist/components/navbar/Navbar.vue.d.ts +9 -0
  36. package/dist/components/pdf-object/PdfObject.vue +18 -8
  37. package/dist/components/pdf-object/PdfObject.vue.d.ts +4 -4
  38. package/dist/components/pdf-object/utils/position.mjs +9 -3
  39. package/dist/components/pdf-text/PdfText.vue.d.ts +1 -1
  40. package/dist/components/pdf-viewer/PdfViewer.vue +1 -1
  41. package/dist/components/pdf-viewer/PdfViewer.vue.d.ts +2 -2
  42. package/dist/components/radio/Radio.vue.d.ts +4 -4
  43. package/dist/components/select/Select.vue.d.ts +3 -3
  44. package/dist/components/sidebar/Sidebar.vue +40 -7
  45. package/dist/components/sidebar/Sidebar.vue.d.ts +11 -0
  46. package/dist/components/sidebar/SidebarBrand.vue +12 -2
  47. package/dist/components/sidebar/SidebarNav.vue +95 -4
  48. package/dist/components/sidebar/SidebarNav.vue.d.ts +29 -0
  49. package/dist/components/sidebar-menu/SidebarMenu.vue +9 -1
  50. package/dist/components/sidebar-menu/SidebarMenu.vue.d.ts +9 -0
  51. package/dist/components/sidebar-menu/index.d.ts +3 -0
  52. package/dist/components/text/Text.vue +2 -1
  53. package/dist/components/toast/Toast.vue +0 -2
  54. package/dist/components/toast/ToastContainer.vue +5 -0
  55. package/dist/components/toast/index.d.ts +1 -0
  56. package/dist/components/toggle/Toggle.vue.d.ts +6 -6
  57. package/dist/components/tour/TourDialog.vue.d.ts +2 -2
  58. package/dist/module.json +1 -1
  59. package/package.json +10 -7
@@ -16,6 +16,10 @@ declare const _default: import("vue-demi").DefineComponent<{
16
16
  type: PropType<string | undefined>;
17
17
  default: string;
18
18
  };
19
+ linkClass: {
20
+ type: (StringConstructor | ObjectConstructor | ArrayConstructor)[];
21
+ default: undefined;
22
+ };
19
23
  }, {
20
24
  classNames: import("vue-demi").ComputedRef<string[]>;
21
25
  navItemClass: import("vue-demi").ComputedRef<string[]>;
@@ -37,10 +41,15 @@ declare const _default: import("vue-demi").DefineComponent<{
37
41
  type: PropType<string | undefined>;
38
42
  default: string;
39
43
  };
44
+ linkClass: {
45
+ type: (StringConstructor | ObjectConstructor | ArrayConstructor)[];
46
+ default: undefined;
47
+ };
40
48
  }>>, {
41
49
  href: string;
42
50
  active: boolean;
43
51
  disabled: boolean;
44
52
  target: string | undefined;
53
+ linkClass: string | Record<string, any> | unknown[];
45
54
  }, {}>;
46
55
  export default _default;
@@ -10,7 +10,8 @@
10
10
  :size="size"
11
11
  :placement="placement"
12
12
  :no-caret="noCaret"
13
- :menu-class="menuClass">
13
+ :menu-class="menuClass"
14
+ :menu-size="menuSize">
14
15
  <template #button-content>
15
16
  <slot name="button-content">
16
17
  {{ text }}
@@ -63,6 +64,10 @@ export default defineComponent({
63
64
  Object
64
65
  ],
65
66
  default: void 0
67
+ },
68
+ menuSize: {
69
+ type: String,
70
+ default: "sm"
66
71
  }
67
72
  },
68
73
  models: {
@@ -1,6 +1,7 @@
1
1
  import { PropType } from 'vue-demi';
2
2
  import { Placement } from '@floating-ui/core';
3
3
  import type { SizeVariant, StyleVariant } from '../button';
4
+ import { MenuSizeVariant } from '../dropdown';
4
5
  declare const _default: import("vue-demi").DefineComponent<{
5
6
  modelValue: {
6
7
  type: BooleanConstructor;
@@ -31,9 +32,13 @@ declare const _default: import("vue-demi").DefineComponent<{
31
32
  default: string;
32
33
  };
33
34
  menuClass: {
34
- type: (StringConstructor | ArrayConstructor | ObjectConstructor)[];
35
+ type: (StringConstructor | ObjectConstructor | ArrayConstructor)[];
35
36
  default: undefined;
36
37
  };
38
+ menuSize: {
39
+ type: PropType<MenuSizeVariant>;
40
+ default: string;
41
+ };
37
42
  }, {
38
43
  model: import("vue-demi").Ref<boolean>;
39
44
  }, unknown, {}, {}, import("vue-demi").ComponentOptionsMixin, import("vue-demi").ComponentOptionsMixin, "update:modelValue"[], "update:modelValue", import("vue-demi").VNodeProps & import("vue-demi").AllowedComponentProps & import("vue-demi").ComponentCustomProps, Readonly<import("vue-demi").ExtractPropTypes<{
@@ -66,19 +71,24 @@ declare const _default: import("vue-demi").DefineComponent<{
66
71
  default: string;
67
72
  };
68
73
  menuClass: {
69
- type: (StringConstructor | ArrayConstructor | ObjectConstructor)[];
74
+ type: (StringConstructor | ObjectConstructor | ArrayConstructor)[];
70
75
  default: undefined;
71
76
  };
77
+ menuSize: {
78
+ type: PropType<MenuSizeVariant>;
79
+ default: string;
80
+ };
72
81
  }>> & {
73
82
  "onUpdate:modelValue"?: ((...args: any[]) => any) | undefined;
74
83
  }, {
75
84
  variant: StyleVariant;
76
- size: SizeVariant;
77
- text: string;
78
85
  icon: boolean;
86
+ text: string;
87
+ size: SizeVariant;
79
88
  modelValue: boolean;
80
89
  placement: Placement;
81
90
  noCaret: boolean;
82
91
  menuClass: string | Record<string, any> | unknown[];
92
+ menuSize: MenuSizeVariant;
83
93
  }, {}>;
84
94
  export default _default;
@@ -30,7 +30,7 @@ import {
30
30
  inject
31
31
  } from "vue-demi";
32
32
  import { SIDEBAR_SETTINGS } from "../sidebar";
33
- import IconArrow from "@carbon/icons-vue/lib/chevron--down/16";
33
+ import IconArrow from "@privyid/persona-icon/vue/chevron-down/16.vue";
34
34
  export default defineComponent({
35
35
  components: { IconArrow },
36
36
  props: {
@@ -38,6 +38,10 @@ export default defineComponent({
38
38
  type: Boolean,
39
39
  default: false
40
40
  },
41
+ sticky: {
42
+ type: Boolean,
43
+ default: false
44
+ },
41
45
  condensed: {
42
46
  type: Boolean,
43
47
  default: false
@@ -56,6 +60,8 @@ export default defineComponent({
56
60
  const result = [""];
57
61
  if (props.fixed)
58
62
  result.push("navbar--fixed");
63
+ if (props.sticky)
64
+ result.push("navbar--sticky");
59
65
  if (props.variant)
60
66
  result.push(`navbar--${props.variant}`);
61
67
  if (props.toggleable)
@@ -82,15 +88,24 @@ export default defineComponent({
82
88
  <style lang="postcss">
83
89
  .navbar {
84
90
  --p-navbar-z-index: theme(zIndex.fixed);
91
+ --p-navbar-sticky-top: theme(spacing.0);
85
92
  --p-navbar-collapse-max-height: 20rem; /** 320px */
93
+ --p-navbar-padding-x: theme(spacing.3);
94
+ --p-navbar-padding-y: theme(spacing.3);
95
+ --p-navbar-bg: theme(backgroundColor.default.DEFAULT);
96
+ --p-navbar-bg-dark: theme(backgroundColor.dark.default.DEFAULT);
86
97
 
87
- @apply bg-default relative p-3 flex items-center flex-wrap transition-shadow duration-150 ease-in-out;
88
- @apply dark:bg-dark-default;
98
+ @apply bg-[color:var(--p-navbar-bg)] relative px-[var(--p-navbar-padding-x)] py-[var(--p-navbar-padding-y)] flex items-center flex-wrap transition-shadow duration-150 ease-in-out;
99
+ @apply dark:bg-[color:var(--p-navbar-bg-dark)];
89
100
 
90
101
  &&--fixed {
91
102
  @apply fixed left-0 top-0 w-full z-[var(--p-navbar-z-index)];
92
103
  }
93
104
 
105
+ &&--sticky {
106
+ @apply sticky top-[var(--p-navbar-sticky-top)] z-sticky;
107
+ }
108
+
94
109
  &&--shadow {
95
110
  @apply shadow-lg transition-shadow duration-150 ease-in-out;
96
111
  }
@@ -174,6 +189,10 @@ export default defineComponent({
174
189
  @apply static shadow-none border-0 bg-base rounded-t-none;
175
190
  @apply dark:bg-dark-base;
176
191
 
192
+ &:where(.dropdown__menu--sm, .dropdown__menu--md, .dropdown__menu--lg) {
193
+ @apply w-full;
194
+ }
195
+
177
196
  &__container {
178
197
  .dropdown__item {
179
198
  @apply first:rounded-t-none;
@@ -206,9 +225,7 @@ export default defineComponent({
206
225
  }
207
226
  }
208
227
 
209
- .nav__item,
210
- .nav__text,
211
- .nav__form {
228
+ :where(.nav__item, .nav__text, .nav__form) {
212
229
  @apply w-full;
213
230
  }
214
231
  }
@@ -14,6 +14,10 @@ declare const _default: import("vue-demi").DefineComponent<{
14
14
  type: BooleanConstructor;
15
15
  default: boolean;
16
16
  };
17
+ sticky: {
18
+ type: BooleanConstructor;
19
+ default: boolean;
20
+ };
17
21
  condensed: {
18
22
  type: BooleanConstructor;
19
23
  default: boolean;
@@ -35,6 +39,10 @@ declare const _default: import("vue-demi").DefineComponent<{
35
39
  type: BooleanConstructor;
36
40
  default: boolean;
37
41
  };
42
+ sticky: {
43
+ type: BooleanConstructor;
44
+ default: boolean;
45
+ };
38
46
  condensed: {
39
47
  type: BooleanConstructor;
40
48
  default: boolean;
@@ -44,5 +52,6 @@ declare const _default: import("vue-demi").DefineComponent<{
44
52
  variant: StyleVariant;
45
53
  toggleable: ToggleableVariant | undefined;
46
54
  condensed: boolean;
55
+ sticky: boolean;
47
56
  }, {}>;
48
57
  export default _default;
@@ -9,10 +9,10 @@
9
9
  :data-page="page"
10
10
  :data-width="width"
11
11
  :data-height="height"
12
- @keydown.up.stop.prevent="move(0, -1)"
13
- @keydown.down.stop.prevent="move(0, 1)"
14
- @keydown.left.stop.prevent="move(-1, 0)"
15
- @keydown.right.stop.prevent="move(1, 0)">
12
+ @keydown.up.stop.prevent="move($event, 0, -1)"
13
+ @keydown.down.stop.prevent="move($event, 0, 1)"
14
+ @keydown.left.stop.prevent="move($event, -1, 0)"
15
+ @keydown.right.stop.prevent="move($event, 1, 0)">
16
16
  <div class="pdf-object__container">
17
17
  <slot />
18
18
  <PdfObjectDebugger v-if="debug" />
@@ -52,6 +52,7 @@ import {
52
52
  import { computePosition, getPosition } from "./utils/position";
53
53
  import { getEmptyPosition } from "./utils/overlap";
54
54
  import PdfObjectDebugger from "./PdfObjectDebugger.vue";
55
+ import { clamp } from "lodash-es";
55
56
  export default defineComponent({
56
57
  components: { PdfObjectDebugger },
57
58
  props: {
@@ -156,7 +157,8 @@ export default defineComponent({
156
157
  y.value = top;
157
158
  },
158
159
  onmove(event) {
159
- move(event.dx, event.dy);
160
+ x.value += event.dx;
161
+ y.value += event.dy;
160
162
  },
161
163
  onend(event) {
162
164
  if (event.relatedTarget) {
@@ -221,10 +223,18 @@ export default defineComponent({
221
223
  object.value.style.display = "none";
222
224
  }
223
225
  });
224
- function move(dx, dy) {
226
+ function move(event, dx, dy) {
225
227
  if (props.moveable) {
226
- x.value += dx;
227
- y.value += dy;
228
+ const pageWidth = pageEl.value.clientWidth;
229
+ const pageHeight = pageEl.value.clientHeight;
230
+ const maxX = Math.floor(pageWidth / scale.value - width.value);
231
+ const maxY = Math.floor(pageHeight / scale.value - height.value);
232
+ const ax = event.metaKey || event.ctrlKey ? maxX : event.shiftKey ? 10 : 1;
233
+ const ay = event.metaKey || event.ctrlKey ? maxY : event.shiftKey ? 10 : 1;
234
+ const x1 = x.value + dx * ax;
235
+ const y1 = y.value + dy * ay;
236
+ x.value = clamp(x1, 0, maxX);
237
+ y.value = clamp(y1, 0, maxY);
228
238
  }
229
239
  }
230
240
  function autoPosition() {
@@ -53,9 +53,9 @@ declare const _default: import("vue-demi").DefineComponent<{
53
53
  default: boolean;
54
54
  };
55
55
  }, {
56
- move: (dx: number, dy: number) => void;
56
+ move: (event: KeyboardEvent, dx: number, dy: number) => void;
57
57
  focus: import("lodash").DebouncedFunc<typeof import("../tour/utils/focus").focus>;
58
- }, unknown, {}, {}, import("vue-demi").ComponentOptionsMixin, import("vue-demi").ComponentOptionsMixin, ("update:x" | "update:y" | "update:page" | "update:width" | "update:height")[], "update:x" | "update:y" | "update:page" | "update:width" | "update:height", import("vue-demi").VNodeProps & import("vue-demi").AllowedComponentProps & import("vue-demi").ComponentCustomProps, Readonly<import("vue-demi").ExtractPropTypes<{
58
+ }, unknown, {}, {}, import("vue-demi").ComponentOptionsMixin, import("vue-demi").ComponentOptionsMixin, ("update:page" | "update:x" | "update:y" | "update:width" | "update:height")[], "update:page" | "update:x" | "update:y" | "update:width" | "update:height", import("vue-demi").VNodeProps & import("vue-demi").AllowedComponentProps & import("vue-demi").ComponentCustomProps, Readonly<import("vue-demi").ExtractPropTypes<{
59
59
  x: {
60
60
  type: NumberConstructor;
61
61
  default: undefined;
@@ -109,15 +109,15 @@ declare const _default: import("vue-demi").DefineComponent<{
109
109
  default: boolean;
110
110
  };
111
111
  }>> & {
112
+ "onUpdate:page"?: ((...args: any[]) => any) | undefined;
112
113
  "onUpdate:x"?: ((...args: any[]) => any) | undefined;
113
114
  "onUpdate:y"?: ((...args: any[]) => any) | undefined;
114
- "onUpdate:page"?: ((...args: any[]) => any) | undefined;
115
115
  "onUpdate:width"?: ((...args: any[]) => any) | undefined;
116
116
  "onUpdate:height"?: ((...args: any[]) => any) | undefined;
117
117
  }, {
118
+ y: number;
118
119
  x: number;
119
120
  width: number;
120
- y: number;
121
121
  height: number;
122
122
  autofocus: boolean;
123
123
  maxHeight: number;
@@ -1,3 +1,4 @@
1
+ import { clamp } from "lodash-es";
1
2
  export function findRelativeParent(element, container = document.body) {
2
3
  let parent = element.parentElement;
3
4
  do {
@@ -34,9 +35,14 @@ export function getPosition(context) {
34
35
  } = context;
35
36
  const objectBounding = object.getBoundingClientRect();
36
37
  const refBounding = reference.getBoundingClientRect();
38
+ const maxX = Math.floor((refBounding.width - objectBounding.width) / scale);
39
+ const maxY = Math.floor((refBounding.height - objectBounding.height) / scale);
40
+ const x = (objectBounding.left - refBounding.left) / scale;
41
+ const y = (objectBounding.top - refBounding.top) / scale;
42
+ const page = Number.parseInt(reference.dataset.pageNumber);
37
43
  return {
38
- x: (objectBounding.left - refBounding.left) / scale,
39
- y: (objectBounding.top - refBounding.top) / scale,
40
- page: Number.parseInt(reference.dataset.pageNumber)
44
+ x: clamp(x, 1, maxX - 1),
45
+ y: clamp(y, 1, maxY - 1),
46
+ page
41
47
  };
42
48
  }
@@ -147,9 +147,9 @@ declare const _default: import("vue-demi").DefineComponent<{
147
147
  default: number;
148
148
  };
149
149
  }>>, {
150
- size: number;
151
150
  color: string;
152
151
  text: string;
152
+ size: number;
153
153
  modelValue: string | File;
154
154
  label: string;
155
155
  modelModifiers: ModelModifier;
@@ -49,7 +49,7 @@
49
49
 
50
50
  <transition name="slide-up">
51
51
  <PdfNavigation
52
- v-show="!idle && !loading" />
52
+ v-show="!idle && !loading && !error" />
53
53
  </transition>
54
54
 
55
55
  <slot
@@ -41,7 +41,7 @@ declare const _default: import("vue-demi").DefineComponent<{
41
41
  idle: import("vue-demi").Ref<boolean>;
42
42
  loading: import("vue-demi").WritableComputedRef<boolean>;
43
43
  error: import("vue-demi").ShallowRef<Error | undefined>;
44
- }, unknown, {}, {}, import("vue-demi").ComponentOptionsMixin, import("vue-demi").ComponentOptionsMixin, ("error" | "update:page" | "ready" | "loaded" | "error-password" | "update:scale")[], "error" | "update:page" | "ready" | "loaded" | "error-password" | "update:scale", import("vue-demi").VNodeProps & import("vue-demi").AllowedComponentProps & import("vue-demi").ComponentCustomProps, Readonly<import("vue-demi").ExtractPropTypes<{
44
+ }, unknown, {}, {}, import("vue-demi").ComponentOptionsMixin, import("vue-demi").ComponentOptionsMixin, ("error" | "ready" | "loaded" | "error-password" | "update:page" | "update:scale")[], "error" | "ready" | "loaded" | "error-password" | "update:page" | "update:scale", import("vue-demi").VNodeProps & import("vue-demi").AllowedComponentProps & import("vue-demi").ComponentCustomProps, Readonly<import("vue-demi").ExtractPropTypes<{
45
45
  src: {
46
46
  type: StringConstructor;
47
47
  default: string;
@@ -72,10 +72,10 @@ declare const _default: import("vue-demi").DefineComponent<{
72
72
  };
73
73
  }>> & {
74
74
  onError?: ((...args: any[]) => any) | undefined;
75
- "onUpdate:page"?: ((...args: any[]) => any) | undefined;
76
75
  onReady?: ((...args: any[]) => any) | undefined;
77
76
  onLoaded?: ((...args: any[]) => any) | undefined;
78
77
  "onError-password"?: ((...args: any[]) => any) | undefined;
78
+ "onUpdate:page"?: ((...args: any[]) => any) | undefined;
79
79
  "onUpdate:scale"?: ((...args: any[]) => any) | undefined;
80
80
  }, {
81
81
  src: string;
@@ -10,11 +10,11 @@ declare const _default: import("vue-demi").DefineComponent<{
10
10
  default: string;
11
11
  };
12
12
  modelValue: {
13
- type: (NumberConstructor | StringConstructor | ArrayConstructor | ObjectConstructor | BooleanConstructor | DateConstructor)[];
13
+ type: (NumberConstructor | StringConstructor | BooleanConstructor | ObjectConstructor | DateConstructor | ArrayConstructor)[];
14
14
  default: boolean;
15
15
  };
16
16
  value: {
17
- type: (NumberConstructor | StringConstructor | ArrayConstructor | ObjectConstructor | BooleanConstructor | DateConstructor)[];
17
+ type: (NumberConstructor | StringConstructor | BooleanConstructor | ObjectConstructor | DateConstructor | ArrayConstructor)[];
18
18
  default: boolean;
19
19
  };
20
20
  checked: {
@@ -43,11 +43,11 @@ declare const _default: import("vue-demi").DefineComponent<{
43
43
  default: string;
44
44
  };
45
45
  modelValue: {
46
- type: (NumberConstructor | StringConstructor | ArrayConstructor | ObjectConstructor | BooleanConstructor | DateConstructor)[];
46
+ type: (NumberConstructor | StringConstructor | BooleanConstructor | ObjectConstructor | DateConstructor | ArrayConstructor)[];
47
47
  default: boolean;
48
48
  };
49
49
  value: {
50
- type: (NumberConstructor | StringConstructor | ArrayConstructor | ObjectConstructor | BooleanConstructor | DateConstructor)[];
50
+ type: (NumberConstructor | StringConstructor | BooleanConstructor | ObjectConstructor | DateConstructor | ArrayConstructor)[];
51
51
  default: boolean;
52
52
  };
53
53
  checked: {
@@ -4,7 +4,7 @@ import { Adapter } from './adapter/adapter';
4
4
  import { SizeVariant } from '../button';
5
5
  declare const _default: import("vue-demi").DefineComponent<{
6
6
  modelValue: {
7
- type: (NumberConstructor | StringConstructor | ArrayConstructor | ObjectConstructor | BooleanConstructor | DateConstructor)[];
7
+ type: (NumberConstructor | StringConstructor | BooleanConstructor | ObjectConstructor | DateConstructor | ArrayConstructor)[];
8
8
  default: string;
9
9
  };
10
10
  selected: {
@@ -62,7 +62,7 @@ declare const _default: import("vue-demi").DefineComponent<{
62
62
  isSelected: (item: SelectItem) => boolean;
63
63
  }, unknown, {}, {}, import("vue-demi").ComponentOptionsMixin, import("vue-demi").ComponentOptionsMixin, ("change" | "update:modelValue" | "update:selected" | "userInput")[], "change" | "update:modelValue" | "update:selected" | "userInput", import("vue-demi").VNodeProps & import("vue-demi").AllowedComponentProps & import("vue-demi").ComponentCustomProps, Readonly<import("vue-demi").ExtractPropTypes<{
64
64
  modelValue: {
65
- type: (NumberConstructor | StringConstructor | ArrayConstructor | ObjectConstructor | BooleanConstructor | DateConstructor)[];
65
+ type: (NumberConstructor | StringConstructor | BooleanConstructor | ObjectConstructor | DateConstructor | ArrayConstructor)[];
66
66
  default: string;
67
67
  };
68
68
  selected: {
@@ -114,8 +114,8 @@ declare const _default: import("vue-demi").DefineComponent<{
114
114
  "onUpdate:selected"?: ((...args: any[]) => any) | undefined;
115
115
  onUserInput?: ((...args: any[]) => any) | undefined;
116
116
  }, {
117
- error: boolean;
118
117
  size: SizeVariant;
118
+ error: boolean;
119
119
  modelValue: string | number | boolean | Record<string, any> | unknown[] | Date;
120
120
  disabled: boolean;
121
121
  readonly: boolean;
@@ -11,6 +11,7 @@
11
11
  ref="sidebarMenus"
12
12
  data-testid="sidebar-menus"
13
13
  :data-sidebar-menu="brandHeight"
14
+ :data-bottom-menu="isBottomMenu"
14
15
  class="sidebar__menus"
15
16
  :style="{ 'padding-bottom': bottomHeight }">
16
17
  <slot />
@@ -30,7 +31,9 @@ import { templateRef, useElementSize } from "@vueuse/core";
30
31
  import {
31
32
  defineComponent,
32
33
  computed,
33
- provide
34
+ ref,
35
+ provide,
36
+ onMounted
34
37
  } from "vue-demi";
35
38
  import { SIDEBAR_SETTINGS } from ".";
36
39
  import { useSelector } from "../pdf-object/utils/use-selector";
@@ -53,6 +56,10 @@ export default defineComponent({
53
56
  type: Boolean,
54
57
  default: false
55
58
  },
59
+ sticky: {
60
+ type: Boolean,
61
+ default: false
62
+ },
56
63
  toggleable: {
57
64
  type: String,
58
65
  default: void 0
@@ -75,15 +82,15 @@ export default defineComponent({
75
82
  });
76
83
  const sidebar = templateRef("sidebar");
77
84
  const sidebarBrand = useSelector(".sidebar__brand", sidebar);
85
+ const brand = useElementSize(sidebarBrand);
78
86
  const sidebarMenus = templateRef("sidebarMenus");
79
87
  const sidebarBottom = useSelector(".sidebar__bottom", sidebarMenus);
80
88
  const { height } = useElementSize(sidebarBottom);
81
- const brand = useElementSize(sidebarBrand);
82
89
  const brandHeight = computed(() => {
83
- return slots.brand ? `${brand.height.value + 16}px` : 0;
90
+ return slots.brand ? `${brand.height.value + titleHeight.value + 16}px` : 0;
84
91
  });
85
92
  const bottomHeight = computed(() => {
86
- return slots.bottom && !slots.default ? 0 : `${height.value + 24}px`;
93
+ return isBottomMenu.value && !isDefault.value || !isBottomMenu.value && isDefault.value ? 0 : `${height.value + 16}px`;
87
94
  });
88
95
  const model = useVModel(props);
89
96
  const classNames = computed(() => {
@@ -96,16 +103,28 @@ export default defineComponent({
96
103
  result.push(`sidebar--${props.variant}`);
97
104
  if (props.fixed)
98
105
  result.push("sidebar--fixed");
106
+ if (props.sticky)
107
+ result.push("sidebar--sticky");
99
108
  if (props.toggleable)
100
109
  result.push(`sidebar--toggleable sidebar--toggleable-${props.toggleable}`);
101
110
  if (props.toggleable && props.fixed && model.value)
102
111
  result.push("sidebar--show");
103
112
  return result;
104
113
  });
114
+ const titleHeight = ref(0);
115
+ const isBottomMenu = ref(false);
116
+ const isDefault = ref(false);
117
+ onMounted(() => {
118
+ titleHeight.value = document.querySelectorAll(".sidebar .nav--has-title").length * 0.25 * 20;
119
+ isBottomMenu.value = document.querySelectorAll(".sidebar .sidebar__nav--bottom").length > 0;
120
+ isDefault.value = document.querySelectorAll(".sidebar .sidebar__nav:not(.sidebar__nav--bottom)").length > 0;
121
+ });
105
122
  return {
106
123
  classNames,
107
124
  bottomHeight,
108
- brandHeight
125
+ brandHeight,
126
+ isBottomMenu,
127
+ isDefault
109
128
  };
110
129
  }
111
130
  });
@@ -118,8 +137,11 @@ export default defineComponent({
118
137
  --p-sidebar-bg: theme(backgroundColor.DEFAULT);
119
138
  --p-sidebar-bg-dark: theme(backgroundColor.dark.DEFAULT);
120
139
  --p-sidebar-z-index: theme(zIndex.fixed);
140
+ --p-sidebar-sticky-top: theme(spacing.0);
141
+ --p-sidebar-padding-x: theme(spacing.2);
142
+ --p-sidebar-padding-y: theme(spacing.4);
121
143
 
122
- @apply bg-[color:var(--p-sidebar-bg)] px-2 py-4;
144
+ @apply bg-[color:var(--p-sidebar-bg)] px-[var(--p-sidebar-padding-x)] py-[var(--p-sidebar-padding-y)];
123
145
  @apply dark:bg-[color:var(--p-sidebar-bg-dark)];
124
146
 
125
147
  /**
@@ -154,8 +176,12 @@ export default defineComponent({
154
176
  }
155
177
 
156
178
  .sidebar__bottom {
157
- @apply absolute -bottom-4 w-[calc(100%+1rem)] -left-2 bg-[color:var(--p-sidebar-bg)];
179
+ @apply absolute -bottom-2 w-[calc(100%+1rem)] -left-2 bg-[color:var(--p-sidebar-bg)];
158
180
  @apply dark:bg-[color:var(--p-sidebar-bg-dark)];
181
+
182
+ .sidebar__nav {
183
+ @apply px-2;
184
+ }
159
185
  }
160
186
 
161
187
  /**
@@ -193,6 +219,13 @@ export default defineComponent({
193
219
  }
194
220
  }
195
221
 
222
+ /**
223
+ * Sticky sidebar
224
+ */
225
+ &&--sticky {
226
+ @apply sticky top-[var(--p-sidebar-sticky-top)] z-sticky;
227
+ }
228
+
196
229
  /**
197
230
  * Narrow sidebar
198
231
  * is 60px width
@@ -19,6 +19,10 @@ declare const _default: import("vue-demi").DefineComponent<{
19
19
  type: BooleanConstructor;
20
20
  default: boolean;
21
21
  };
22
+ sticky: {
23
+ type: BooleanConstructor;
24
+ default: boolean;
25
+ };
22
26
  toggleable: {
23
27
  type: PropType<ToggleableVariant>;
24
28
  default: undefined;
@@ -31,6 +35,8 @@ declare const _default: import("vue-demi").DefineComponent<{
31
35
  classNames: import("vue-demi").ComputedRef<string[]>;
32
36
  bottomHeight: import("vue-demi").ComputedRef<string | 0>;
33
37
  brandHeight: import("vue-demi").ComputedRef<string | 0>;
38
+ isBottomMenu: import("vue-demi").Ref<boolean>;
39
+ isDefault: import("vue-demi").Ref<boolean>;
34
40
  }, unknown, {}, {}, import("vue-demi").ComponentOptionsMixin, import("vue-demi").ComponentOptionsMixin, "update:modelValue"[], "update:modelValue", import("vue-demi").VNodeProps & import("vue-demi").AllowedComponentProps & import("vue-demi").ComponentCustomProps, Readonly<import("vue-demi").ExtractPropTypes<{
35
41
  variant: {
36
42
  type: PropType<StyleVariant>;
@@ -48,6 +54,10 @@ declare const _default: import("vue-demi").DefineComponent<{
48
54
  type: BooleanConstructor;
49
55
  default: boolean;
50
56
  };
57
+ sticky: {
58
+ type: BooleanConstructor;
59
+ default: boolean;
60
+ };
51
61
  toggleable: {
52
62
  type: PropType<ToggleableVariant>;
53
63
  default: undefined;
@@ -65,5 +75,6 @@ declare const _default: import("vue-demi").DefineComponent<{
65
75
  modelValue: boolean;
66
76
  align: AlignVariant;
67
77
  toggleable: ToggleableVariant;
78
+ sticky: boolean;
68
79
  }, {}>;
69
80
  export default _default;
@@ -57,9 +57,19 @@ export default defineComponent({
57
57
 
58
58
  a {
59
59
  @apply no-underline;
60
+
61
+ & > img {
62
+ @apply max-w-full h-auto;
63
+ }
64
+
65
+ .sidebar--wide & {
66
+ & > img {
67
+ @apply h-7 w-auto;
68
+ }
69
+ }
60
70
  }
61
71
 
62
- img {
72
+ & > img {
63
73
  @apply max-w-full h-auto;
64
74
  }
65
75
 
@@ -78,7 +88,7 @@ export default defineComponent({
78
88
  .sidebar--wide & {
79
89
  @apply px-3;
80
90
 
81
- img {
91
+ & > img {
82
92
  @apply h-7 w-auto;
83
93
  }
84
94
  }