design-system-next 2.19.4 → 2.20.1

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 (73) hide show
  1. package/dist/design-system-next.es.js +11937 -8675
  2. package/dist/design-system-next.es.js.gz +0 -0
  3. package/dist/design-system-next.umd.js +13 -14
  4. package/dist/design-system-next.umd.js.gz +0 -0
  5. package/dist/main.css +1 -1
  6. package/dist/main.css.gz +0 -0
  7. package/dist/package.json.d.ts +36 -33
  8. package/package.json +36 -33
  9. package/src/App.vue +1 -51
  10. package/src/assets/scripts/border-radius.ts +15 -15
  11. package/src/assets/scripts/colors.ts +134 -134
  12. package/src/assets/scripts/max-width.ts +11 -11
  13. package/src/assets/scripts/spacing.ts +23 -23
  14. package/src/assets/scripts/utilities.ts +15 -15
  15. package/src/components/accordion/accordion.ts +43 -43
  16. package/src/components/accordion/use-accordion.ts +43 -43
  17. package/src/components/banner/banner.ts +20 -20
  18. package/src/components/button/button.ts +72 -72
  19. package/src/components/button/button.vue +15 -15
  20. package/src/components/card/card.vue +4 -1
  21. package/src/components/card/use-card.ts +12 -12
  22. package/src/components/checkbox/checkbox.ts +45 -45
  23. package/src/components/collapsible/collapsible.ts +21 -21
  24. package/src/components/collapsible/collapsible.vue +27 -27
  25. package/src/components/date-picker/date-picker.ts +3 -3
  26. package/src/components/date-picker/tabs/DatePickerCalendarTab.vue +4 -13
  27. package/src/components/dropdown/dropdown.vue +1 -1
  28. package/src/components/dropdown/fix-multi-number.ts +92 -92
  29. package/src/components/empty-state/empty-state.ts +50 -50
  30. package/src/components/file-upload/file-upload.ts +13 -1
  31. package/src/components/file-upload/file-upload.vue +13 -6
  32. package/src/components/file-upload/use-file-upload.ts +24 -0
  33. package/src/components/floating-action/floating-action.ts +12 -12
  34. package/src/components/input/input-email/input-email.vue +17 -17
  35. package/src/components/input/input-password/input-password.vue +5 -1
  36. package/src/components/input/input-search/input-search.vue +13 -13
  37. package/src/components/input/input-url/input-url.vue +20 -20
  38. package/src/components/input/input-username/input-username.vue +17 -17
  39. package/src/components/list/ladderized-list/ladderized-list.ts +39 -39
  40. package/src/components/logo/logo.ts +43 -43
  41. package/src/components/logo/logo.vue +14 -14
  42. package/src/components/logo/use-logo.ts +41 -41
  43. package/src/components/progress-bar/progress-bar.ts +11 -0
  44. package/src/components/progress-bar/progress-bar.vue +3 -2
  45. package/src/components/progress-bar/use-progress-bar.ts +7 -0
  46. package/src/components/radio/radio.ts +42 -42
  47. package/src/components/select/select-ladderized/select-ladderized.ts +2 -1
  48. package/src/components/sidepanel/sidepanel.vue +55 -55
  49. package/src/components/sidepanel/stacking-sidepanel/stacking-sidepanel.ts +16 -16
  50. package/src/components/sidepanel/stacking-sidepanel/stacking-sidepanel.vue +39 -39
  51. package/src/components/slider/slider.ts +38 -38
  52. package/src/components/snackbar/snack/snack.ts +71 -71
  53. package/src/components/snackbar/use-snackbar.ts +34 -34
  54. package/src/components/status/status.ts +19 -19
  55. package/src/components/status/status.vue +13 -13
  56. package/src/components/stepper/step/step.ts +47 -47
  57. package/src/components/stepper/stepper.ts +47 -47
  58. package/src/components/stepper/stepper.vue +34 -34
  59. package/src/components/switch/switch.ts +42 -42
  60. package/src/components/table/table-actions/table-actions.ts +42 -42
  61. package/src/components/table/table-actions/table-actions.vue +40 -40
  62. package/src/components/table/table-chips-title/table-chips-title.ts +27 -27
  63. package/src/components/table/table-chips-title/table-chips-title.vue +32 -32
  64. package/src/components/table/table-chips-title/use-table-chips-title.ts +22 -22
  65. package/src/components/table/table-lozenge-title/table-lozenge-title.ts +23 -23
  66. package/src/components/table/table-lozenge-title/table-lozenge-title.vue +26 -26
  67. package/src/components/table/table-lozenge-title/use-table-lozenge-title.ts +21 -21
  68. package/src/components/tabs/tabs.ts +43 -43
  69. package/src/components/time-picker/time-picker.ts +69 -69
  70. package/src/components/tooltip/use-tooltip.ts +13 -13
  71. package/src/stores/useSnackbarStore.ts +44 -44
  72. package/src/vite-env.d.ts +6 -0
  73. package/src/vue.d.ts +5 -0
@@ -1,39 +1,39 @@
1
- import type { PropType, ExtractPropTypes } from 'vue';
2
- import { MenuListType } from '../list';
3
- export const definePropType = <T>(val: unknown): PropType<T> => val as PropType<T>;
4
-
5
- export const ladderizedListPropTypes = {
6
- modelValue: {
7
- type: Array as PropType<string[]>,
8
- required: true,
9
- default: [],
10
- },
11
- menuList: {
12
- type: Array as PropType<MenuListType[]>,
13
- required: true,
14
- default: [],
15
- },
16
- menuLevel: {
17
- type: Number,
18
- default: 0,
19
- },
20
- searchableMenu: {
21
- type: Boolean,
22
- default: false,
23
- },
24
- searchableMenuPlaceholder: {
25
- type: String,
26
- default: 'Search...',
27
- },
28
- removeCurrentLevelInBackLabel: {
29
- type: Boolean,
30
- default: false,
31
- },
32
- };
33
-
34
- export const ladderizedListEmitTypes = {
35
- 'update:modelValue': (value: string[]) => value,
36
- };
37
-
38
- export type LadderizedListPropTypes = ExtractPropTypes<typeof ladderizedListPropTypes>;
39
- export type LadderizedListEmitTypes = typeof ladderizedListEmitTypes;
1
+ import type { PropType, ExtractPropTypes } from 'vue';
2
+ import { MenuListType } from '../list';
3
+ export const definePropType = <T>(val: unknown): PropType<T> => val as PropType<T>;
4
+
5
+ export const ladderizedListPropTypes = {
6
+ modelValue: {
7
+ type: Array as PropType<string[]>,
8
+ required: true,
9
+ default: [],
10
+ },
11
+ menuList: {
12
+ type: Array as PropType<MenuListType[]>,
13
+ required: true,
14
+ default: [],
15
+ },
16
+ menuLevel: {
17
+ type: Number,
18
+ default: 0,
19
+ },
20
+ searchableMenu: {
21
+ type: Boolean,
22
+ default: false,
23
+ },
24
+ searchableMenuPlaceholder: {
25
+ type: String,
26
+ default: 'Search...',
27
+ },
28
+ removeCurrentLevelInBackLabel: {
29
+ type: Boolean,
30
+ default: false,
31
+ },
32
+ };
33
+
34
+ export const ladderizedListEmitTypes = {
35
+ 'update:modelValue': (value: string[]) => value,
36
+ };
37
+
38
+ export type LadderizedListPropTypes = ExtractPropTypes<typeof ladderizedListPropTypes>;
39
+ export type LadderizedListEmitTypes = typeof ladderizedListEmitTypes;
@@ -1,43 +1,43 @@
1
- import type { PropType, ExtractPropTypes } from 'vue';
2
-
3
- const LOGO_THEMES = ['white', 'dark', 'gray', 'green'] as const;
4
- const LOGO_NAMES = [
5
- 'benchmark',
6
- 'ecosystem',
7
- 'engage',
8
- 'finances',
9
- 'hr-mobile',
10
- 'hr',
11
- 'inbound',
12
- 'insight',
13
- 'readycash',
14
- 'readywage',
15
- 'payroll',
16
- 'performance-plus',
17
- 'procurement',
18
- 'professional-services',
19
- 'recruit',
20
- 'recruit-plus',
21
- 'sail',
22
- 'sidekick',
23
- 'wellness',
24
- ] as const;
25
-
26
- export const logoPropTypes = {
27
- name: {
28
- type: String as PropType<(typeof LOGO_NAMES)[number]>,
29
- validator: (value: (typeof LOGO_NAMES)[number]) => LOGO_NAMES.includes(value),
30
- default: 'hr',
31
- },
32
- theme: {
33
- type: String as PropType<(typeof LOGO_THEMES)[number]>,
34
- validator: (value: (typeof LOGO_THEMES)[number]) => LOGO_THEMES.includes(value),
35
- default: 'dark',
36
- },
37
- width: {
38
- type: [String, Number] as PropType<string | number>,
39
- default: '50', // If number, it will be treated as px
40
- },
41
- };
42
-
43
- export type LogoPropTypes = ExtractPropTypes<typeof logoPropTypes>;
1
+ import type { PropType, ExtractPropTypes } from 'vue';
2
+
3
+ const LOGO_THEMES = ['white', 'dark', 'gray', 'green'] as const;
4
+ const LOGO_NAMES = [
5
+ 'benchmark',
6
+ 'ecosystem',
7
+ 'engage',
8
+ 'finances',
9
+ 'hr-mobile',
10
+ 'hr',
11
+ 'inbound',
12
+ 'insight',
13
+ 'readycash',
14
+ 'readywage',
15
+ 'payroll',
16
+ 'performance-plus',
17
+ 'procurement',
18
+ 'professional-services',
19
+ 'recruit',
20
+ 'recruit-plus',
21
+ 'sail',
22
+ 'sidekick',
23
+ 'wellness',
24
+ ] as const;
25
+
26
+ export const logoPropTypes = {
27
+ name: {
28
+ type: String as PropType<(typeof LOGO_NAMES)[number]>,
29
+ validator: (value: (typeof LOGO_NAMES)[number]) => LOGO_NAMES.includes(value),
30
+ default: 'hr',
31
+ },
32
+ theme: {
33
+ type: String as PropType<(typeof LOGO_THEMES)[number]>,
34
+ validator: (value: (typeof LOGO_THEMES)[number]) => LOGO_THEMES.includes(value),
35
+ default: 'dark',
36
+ },
37
+ width: {
38
+ type: [String, Number] as PropType<string | number>,
39
+ default: '50', // If number, it will be treated as px
40
+ },
41
+ };
42
+
43
+ export type LogoPropTypes = ExtractPropTypes<typeof logoPropTypes>;
@@ -1,14 +1,14 @@
1
- <template>
2
- <div>
3
- <img v-bind="$attrs" :src="logoSrc" :alt="logoTitle" :title="logoTitle" :width="width" />
4
- </div>
5
- </template>
6
-
7
- <script lang="ts" setup>
8
- import { useLogo } from './use-logo';
9
- import { logoPropTypes } from './logo';
10
-
11
- const props = defineProps(logoPropTypes);
12
-
13
- const { logoSrc, logoTitle } = useLogo(props);
14
- </script>
1
+ <template>
2
+ <div>
3
+ <img v-bind="$attrs" :src="logoSrc" :alt="logoTitle" :title="logoTitle" :width="width" />
4
+ </div>
5
+ </template>
6
+
7
+ <script lang="ts" setup>
8
+ import { useLogo } from './use-logo';
9
+ import { logoPropTypes } from './logo';
10
+
11
+ const props = defineProps(logoPropTypes);
12
+
13
+ const { logoSrc, logoTitle } = useLogo(props);
14
+ </script>
@@ -1,41 +1,41 @@
1
- import { computed } from 'vue';
2
- import type { LogoPropTypes } from './logo';
3
- import { Cloudinary } from '@cloudinary/url-gen';
4
-
5
- const CLOUD_NAME = 'dfeykvudc';
6
-
7
- const NAME_MAP: Record<string, string> = {
8
- 'hr': 'Sprout HR',
9
- 'hr-mobile': 'Sprout HR Mobile',
10
- 'performance-plus': 'Sprout Performance+',
11
- 'recruit-plus': 'Sprout Recruit+',
12
- 'sail': 'Sprout SAIL',
13
- 'readycash': 'Sprout ReadyCash',
14
- 'readywage': 'Sprout ReadyWage',
15
- };
16
-
17
- export function useLogo(props: LogoPropTypes) {
18
- const cld = new Cloudinary({
19
- cloud: {
20
- cloudName: CLOUD_NAME,
21
- },
22
- });
23
-
24
- const logoSrc = computed(() => cld.image(`sprout-${props.name}-${props.theme}`).toURL());
25
-
26
- const logoTitle = computed(() => {
27
- if (props.name in NAME_MAP) {
28
- return NAME_MAP[props.name];
29
- }
30
-
31
- const firstChar = props.name.charAt(0).toUpperCase();
32
- const remainingChars = props.name.slice(1);
33
- const formattedName = `${firstChar}${remainingChars}`;
34
- return `Sprout ${formattedName}`;
35
- });
36
-
37
- return {
38
- logoSrc,
39
- logoTitle,
40
- };
41
- }
1
+ import { computed } from 'vue';
2
+ import type { LogoPropTypes } from './logo';
3
+ import { Cloudinary } from '@cloudinary/url-gen';
4
+
5
+ const CLOUD_NAME = 'dfeykvudc';
6
+
7
+ const NAME_MAP: Record<string, string> = {
8
+ 'hr': 'Sprout HR',
9
+ 'hr-mobile': 'Sprout HR Mobile',
10
+ 'performance-plus': 'Sprout Performance+',
11
+ 'recruit-plus': 'Sprout Recruit+',
12
+ 'sail': 'Sprout SAIL',
13
+ 'readycash': 'Sprout ReadyCash',
14
+ 'readywage': 'Sprout ReadyWage',
15
+ };
16
+
17
+ export function useLogo(props: LogoPropTypes) {
18
+ const cld = new Cloudinary({
19
+ cloud: {
20
+ cloudName: CLOUD_NAME,
21
+ },
22
+ });
23
+
24
+ const logoSrc = computed(() => cld.image(`sprout-${props.name}-${props.theme}`).toURL());
25
+
26
+ const logoTitle = computed(() => {
27
+ if (props.name in NAME_MAP) {
28
+ return NAME_MAP[props.name];
29
+ }
30
+
31
+ const firstChar = props.name.charAt(0).toUpperCase();
32
+ const remainingChars = props.name.slice(1);
33
+ const formattedName = `${firstChar}${remainingChars}`;
34
+ return `Sprout ${formattedName}`;
35
+ });
36
+
37
+ return {
38
+ logoSrc,
39
+ logoTitle,
40
+ };
41
+ }
@@ -34,6 +34,17 @@ export const progressBarPropTypes = {
34
34
  return true;
35
35
  },
36
36
  },
37
+ color: {
38
+ type: String as PropType<string>,
39
+ default: 'success',
40
+ validator(value: string) {
41
+ if (value !== 'success' && value !== 'danger' && value !== 'warning' && value !== 'info' && value !== 'neutral') {
42
+ console.error('Invalid prop: "color" must be one of the following: success, danger, warning, info, neutral.');
43
+ return false;
44
+ }
45
+ return true;
46
+ },
47
+ },
37
48
  };
38
49
 
39
50
  export type ProgressBarPropTypes = ExtractPropTypes<typeof progressBarPropTypes>;
@@ -3,11 +3,12 @@
3
3
  class="spr-flex spr-w-full spr-flex-col spr-gap-size-spacing-5xs"
4
4
  :aria-valuemin="0"
5
5
  :aria-valuemax="props.max || 100"
6
+ :aria-valuenow="props.value"
6
7
  role="progressbar"
7
8
  >
8
9
  <div :class="[handleProgressBarSize, 'spr-overflow-hidden spr-rounded-lg spr-bg-white-100']">
9
10
  <div
10
- class="spr-background-color-success-base spr-transition-all spr-duration-300"
11
+ :class="[`spr-background-color-${validColor}-base`, 'spr-transition-all spr-duration-300']"
11
12
  :style="handleProgressBarStyle"
12
13
  ></div>
13
14
  </div>
@@ -25,5 +26,5 @@ import { useProgressBar } from './use-progress-bar';
25
26
 
26
27
  const props = defineProps(progressBarPropTypes);
27
28
 
28
- const { handleProgressBarSize, percentage, handleProgressBarStyle } = useProgressBar(props);
29
+ const { handleProgressBarSize, validColor, percentage, handleProgressBarStyle } = useProgressBar(props);
29
30
  </script>
@@ -14,6 +14,12 @@ export const useProgressBar = (props: ProgressBarPropTypes) => {
14
14
  return 'spr-h-3';
15
15
  }
16
16
  });
17
+
18
+ const validColor = computed<string>(() => {
19
+ const validColors = ['success', 'danger', 'warning', 'info', 'neutral'];
20
+ return validColors.includes(props.color) ? props.color : 'success';
21
+ });
22
+
17
23
  const percentage = computed<number>(() => Math.min((props.value / (props.max || 100)) * 100, 100));
18
24
 
19
25
  const handleProgressBarStyle = computed<{ width: string; height: string }>(() => {
@@ -25,6 +31,7 @@ export const useProgressBar = (props: ProgressBarPropTypes) => {
25
31
 
26
32
  return {
27
33
  handleProgressBarSize,
34
+ validColor,
28
35
  percentage,
29
36
  handleProgressBarStyle,
30
37
  };
@@ -1,42 +1,42 @@
1
- import type { PropType, ExtractPropTypes } from 'vue';
2
-
3
- export const definePropType = <T>(val: unknown): PropType<T> => val as PropType<T>;
4
-
5
- export const radioPropTypes = {
6
- id: {
7
- type: String,
8
- required: true,
9
- },
10
- modelValue: {
11
- type: [String, Number, Boolean],
12
- },
13
- disabled: {
14
- type: Boolean,
15
- default: false,
16
- },
17
- name: {
18
- type: String,
19
- required: true,
20
- },
21
- value: {
22
- type: [String, Number, Boolean],
23
- required: true,
24
- },
25
- description: {
26
- type: String,
27
- },
28
- bordered: {
29
- type: Boolean,
30
- default: false,
31
- },
32
- fullWidth: {
33
- type: Boolean,
34
- default: false,
35
- }
36
- };
37
-
38
- export const radioEmitTypes = ['update:modelValue'];
39
-
40
- export type RadioPropTypes = ExtractPropTypes<typeof radioPropTypes>;
41
-
42
- export type RadioEmitTypes = typeof radioEmitTypes;
1
+ import type { PropType, ExtractPropTypes } from 'vue';
2
+
3
+ export const definePropType = <T>(val: unknown): PropType<T> => val as PropType<T>;
4
+
5
+ export const radioPropTypes = {
6
+ id: {
7
+ type: String,
8
+ required: true,
9
+ },
10
+ modelValue: {
11
+ type: [String, Number, Boolean],
12
+ },
13
+ disabled: {
14
+ type: Boolean,
15
+ default: false,
16
+ },
17
+ name: {
18
+ type: String,
19
+ required: true,
20
+ },
21
+ value: {
22
+ type: [String, Number, Boolean],
23
+ required: true,
24
+ },
25
+ description: {
26
+ type: String,
27
+ },
28
+ bordered: {
29
+ type: Boolean,
30
+ default: false,
31
+ },
32
+ fullWidth: {
33
+ type: Boolean,
34
+ default: false,
35
+ }
36
+ };
37
+
38
+ export const radioEmitTypes = ['update:modelValue'];
39
+
40
+ export type RadioPropTypes = ExtractPropTypes<typeof radioPropTypes>;
41
+
42
+ export type RadioEmitTypes = typeof radioEmitTypes;
@@ -153,7 +153,8 @@ export const selectLadderizedPropTypes = {
153
153
  export const selectLadderizedEmitTypes = {
154
154
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
155
155
  'update:modelValue': (_value: unknown) => true,
156
- 'popper-state': () => true,
156
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
157
+ 'popper-state': (_state: boolean) => true,
157
158
  };
158
159
 
159
160
  export type SelectLadderizedEmitFn = (event: string, ...args: unknown[]) => void;
@@ -1,55 +1,55 @@
1
- <template>
2
- <div v-if="!props.isStacking && isOpen && hasBackdrop" :class="sidepanelClasses.backdropBaseClasses"></div>
3
-
4
- <Transition
5
- :enter-active-class="sidepanelClasses.sidepanelTransitionActiveClasses"
6
- :leave-active-class="sidepanelClasses.sidepanelTransitionActiveClasses"
7
- :enter-from-class="sidepanelClasses.sidepanelTransitionHiddenClasses"
8
- :enter-to-class="sidepanelClasses.sidepanelTransitionVisibleClasses"
9
- :leave-from-class="sidepanelClasses.sidepanelTransitionVisibleClasses"
10
- :leave-to-class="sidepanelClasses.sidepanelTransitionHiddenClasses"
11
- :appear="!props.isStacking"
12
- >
13
- <div
14
- v-if="props.isOpen || props.isStacking"
15
- ref="sidepanelRef"
16
- role="dialog"
17
- aria-labelledby="sidepanel-title"
18
- aria-describedby="sidepanel-content"
19
- :class="sidepanelClasses.sidepanelBaseClasses"
20
- :style="{ height: typeof height === 'number' ? `${height}px` : height }"
21
- >
22
- <template v-if="!props.hideHeader">
23
- <div v-if="!$slots.header" :class="sidepanelClasses.sidepanelHeaderClasses">
24
- <div id="sidepanel-title" :class="sidepanelClasses.sidepanelHeaderTitleClasses">
25
- {{ headerTitle }}
26
- </div>
27
- <Icon :class="sidepanelClasses.sidepanelHeaderIconClasses" icon="ph:x" @click="handleClose" />
28
- </div>
29
- <div v-else>
30
- <slot name="header"></slot>
31
- </div>
32
- </template>
33
-
34
- <div id="sidepanel-content" :class="sidepanelClasses.sidepanelContentClasses">
35
- <slot />
36
- </div>
37
-
38
- <div v-if="$slots.footer" :class="sidepanelClasses.sidepanelFooterClasses">
39
- <slot name="footer"></slot>
40
- </div>
41
- </div>
42
- </Transition>
43
- </template>
44
-
45
- <script lang="ts" setup>
46
- import { Icon } from '@iconify/vue';
47
-
48
- import { useSidepanel } from './use-sidepanel';
49
- import { sidepanelPropTypes, sidepanelEmitTypes } from './sidepanel';
50
-
51
- const props = defineProps(sidepanelPropTypes);
52
- const emit = defineEmits(sidepanelEmitTypes);
53
-
54
- const { sidepanelClasses, sidepanelRef, handleClose } = useSidepanel(props, emit);
55
- </script>
1
+ <template>
2
+ <div v-if="!props.isStacking && isOpen && hasBackdrop" :class="sidepanelClasses.backdropBaseClasses"></div>
3
+
4
+ <Transition
5
+ :enter-active-class="sidepanelClasses.sidepanelTransitionActiveClasses"
6
+ :leave-active-class="sidepanelClasses.sidepanelTransitionActiveClasses"
7
+ :enter-from-class="sidepanelClasses.sidepanelTransitionHiddenClasses"
8
+ :enter-to-class="sidepanelClasses.sidepanelTransitionVisibleClasses"
9
+ :leave-from-class="sidepanelClasses.sidepanelTransitionVisibleClasses"
10
+ :leave-to-class="sidepanelClasses.sidepanelTransitionHiddenClasses"
11
+ :appear="!props.isStacking"
12
+ >
13
+ <div
14
+ v-if="props.isOpen || props.isStacking"
15
+ ref="sidepanelRef"
16
+ role="dialog"
17
+ aria-labelledby="sidepanel-title"
18
+ aria-describedby="sidepanel-content"
19
+ :class="sidepanelClasses.sidepanelBaseClasses"
20
+ :style="{ height: typeof height === 'number' ? `${height}px` : height }"
21
+ >
22
+ <template v-if="!props.hideHeader">
23
+ <div v-if="!$slots.header" :class="sidepanelClasses.sidepanelHeaderClasses">
24
+ <div id="sidepanel-title" :class="sidepanelClasses.sidepanelHeaderTitleClasses">
25
+ {{ headerTitle }}
26
+ </div>
27
+ <Icon :class="sidepanelClasses.sidepanelHeaderIconClasses" icon="ph:x" @click="handleClose" />
28
+ </div>
29
+ <div v-else>
30
+ <slot name="header"></slot>
31
+ </div>
32
+ </template>
33
+
34
+ <div id="sidepanel-content" :class="sidepanelClasses.sidepanelContentClasses">
35
+ <slot />
36
+ </div>
37
+
38
+ <div v-if="$slots.footer" :class="sidepanelClasses.sidepanelFooterClasses">
39
+ <slot name="footer"></slot>
40
+ </div>
41
+ </div>
42
+ </Transition>
43
+ </template>
44
+
45
+ <script lang="ts" setup>
46
+ import { Icon } from '@iconify/vue';
47
+
48
+ import { useSidepanel } from './use-sidepanel';
49
+ import { sidepanelPropTypes, sidepanelEmitTypes } from './sidepanel';
50
+
51
+ const props = defineProps(sidepanelPropTypes);
52
+ const emit = defineEmits(sidepanelEmitTypes);
53
+
54
+ const { sidepanelClasses, sidepanelRef, handleClose } = useSidepanel(props, emit);
55
+ </script>
@@ -1,16 +1,16 @@
1
- import type { ExtractPropTypes, PropType } from "vue";
2
-
3
- export const stackingSidePanelProps = {
4
- stack: {
5
- type: Array as PropType<string[]>,
6
- default: [],
7
- required: true,
8
- }
9
- };
10
-
11
- export const stackingSidePanelEmits = {
12
- 'update:stack': (value: string[]) => value,
13
- };
14
-
15
- export type StackingSidePanelPropTypes = ExtractPropTypes<typeof stackingSidePanelProps>;
16
- export type StackingSidePanelEmitTypes = typeof stackingSidePanelEmits;
1
+ import type { ExtractPropTypes, PropType } from "vue";
2
+
3
+ export const stackingSidePanelProps = {
4
+ stack: {
5
+ type: Array as PropType<string[]>,
6
+ default: [],
7
+ required: true,
8
+ }
9
+ };
10
+
11
+ export const stackingSidePanelEmits = {
12
+ 'update:stack': (value: string[]) => value,
13
+ };
14
+
15
+ export type StackingSidePanelPropTypes = ExtractPropTypes<typeof stackingSidePanelProps>;
16
+ export type StackingSidePanelEmitTypes = typeof stackingSidePanelEmits;
@@ -1,39 +1,39 @@
1
- <template>
2
- <div v-if="activePanels.length > 0" :class="stackingSidepanelClasses.sidepanelStackBackdropClasses"></div>
3
- <div
4
- ref="stacking-sidepanel-base"
5
- :class="[stackingSidepanelClasses.sidepanelStackBaseClasses]"
6
- :style="stackingSidepanelBaseTransform"
7
- >
8
- <transition-group
9
- :enter-active-class="stackingSidepanelClasses.sidepanelStackTransitionEnterActiveClasses"
10
- :leave-active-class="stackingSidepanelClasses.sidepanelStackTransitionLeaveActiveClasses"
11
- :move-class="stackingSidepanelClasses.sidepanelStackMoveClasses"
12
- :enter-from-class="stackingSidepanelClasses.sidepanelStackEnterFromClasses"
13
- :leave-to-class="stackingSidepanelClasses.sidepanelStackLeaveToClasses"
14
- appear
15
- >
16
- <div v-for="name in activePanels" :key="name">
17
- <slot :name="name" />
18
- </div>
19
- </transition-group>
20
- </div>
21
- </template>
22
-
23
- <script setup lang="ts">
24
- import { useTemplateRef } from 'vue';
25
- import { useStackingSidepanel } from './use-stacking-sidepanel';
26
- import { stackingSidePanelProps, stackingSidePanelEmits } from './stacking-sidepanel';
27
-
28
- const stackingSidepanelBase = useTemplateRef('stacking-sidepanel-base');
29
- const props = defineProps(stackingSidePanelProps);
30
- const emits = defineEmits(stackingSidePanelEmits);
31
-
32
- const { showPanel, hidePanel, stackingSidepanelClasses, stackingSidepanelBaseTransform, activePanels } =
33
- useStackingSidepanel(props, emits, stackingSidepanelBase);
34
-
35
- defineExpose({
36
- showPanel,
37
- hidePanel,
38
- });
39
- </script>
1
+ <template>
2
+ <div v-if="activePanels.length > 0" :class="stackingSidepanelClasses.sidepanelStackBackdropClasses"></div>
3
+ <div
4
+ ref="stacking-sidepanel-base"
5
+ :class="[stackingSidepanelClasses.sidepanelStackBaseClasses]"
6
+ :style="stackingSidepanelBaseTransform"
7
+ >
8
+ <transition-group
9
+ :enter-active-class="stackingSidepanelClasses.sidepanelStackTransitionEnterActiveClasses"
10
+ :leave-active-class="stackingSidepanelClasses.sidepanelStackTransitionLeaveActiveClasses"
11
+ :move-class="stackingSidepanelClasses.sidepanelStackMoveClasses"
12
+ :enter-from-class="stackingSidepanelClasses.sidepanelStackEnterFromClasses"
13
+ :leave-to-class="stackingSidepanelClasses.sidepanelStackLeaveToClasses"
14
+ appear
15
+ >
16
+ <div v-for="name in activePanels" :key="name">
17
+ <slot :name="name" />
18
+ </div>
19
+ </transition-group>
20
+ </div>
21
+ </template>
22
+
23
+ <script setup lang="ts">
24
+ import { useTemplateRef } from 'vue';
25
+ import { useStackingSidepanel } from './use-stacking-sidepanel';
26
+ import { stackingSidePanelProps, stackingSidePanelEmits } from './stacking-sidepanel';
27
+
28
+ const stackingSidepanelBase = useTemplateRef('stacking-sidepanel-base');
29
+ const props = defineProps(stackingSidePanelProps);
30
+ const emits = defineEmits(stackingSidePanelEmits);
31
+
32
+ const { showPanel, hidePanel, stackingSidepanelClasses, stackingSidepanelBaseTransform, activePanels } =
33
+ useStackingSidepanel(props, emits, stackingSidepanelBase);
34
+
35
+ defineExpose({
36
+ showPanel,
37
+ hidePanel,
38
+ });
39
+ </script>