@resee-movies/nuxt-ux 0.4.0 → 0.5.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 (71) hide show
  1. package/dist/module.json +1 -1
  2. package/dist/module.mjs +20 -3
  3. package/dist/runtime/components/Button.vue +15 -9
  4. package/dist/runtime/components/Button.vue.d.ts +2 -12
  5. package/dist/runtime/components/Card.vue.d.ts +1 -4
  6. package/dist/runtime/components/Dialog.vue.d.ts +1 -13
  7. package/dist/runtime/components/Drawer.vue.d.ts +1 -4
  8. package/dist/runtime/components/Heading.vue.d.ts +1 -4
  9. package/dist/runtime/components/Icon.vue +27 -15
  10. package/dist/runtime/components/Icon.vue.d.ts +4 -6
  11. package/dist/runtime/components/IconTextPair.vue +22 -19
  12. package/dist/runtime/components/IconTextPair.vue.d.ts +5 -12
  13. package/dist/runtime/components/Image.vue +1 -1
  14. package/dist/runtime/components/Image.vue.d.ts +1 -17
  15. package/dist/runtime/components/LayoutPageColumn.vue.d.ts +1 -4
  16. package/dist/runtime/components/LayoutPageContainer.vue +12 -2
  17. package/dist/runtime/components/LayoutPageContainer.vue.d.ts +4 -5
  18. package/dist/runtime/components/Lorem.vue.d.ts +1 -11
  19. package/dist/runtime/components/Menu.vue +28 -20
  20. package/dist/runtime/components/Menu.vue.d.ts +4 -7
  21. package/dist/runtime/components/Message.vue.d.ts +2 -2
  22. package/dist/runtime/components/NotificationContainer.vue +10 -3
  23. package/dist/runtime/components/ProgressBar.vue.d.ts +1 -5
  24. package/dist/runtime/components/ProgressSpinner.vue.d.ts +1 -3
  25. package/dist/runtime/components/Tag.vue.d.ts +1 -7
  26. package/dist/runtime/components/form/Form.vue +52 -0
  27. package/dist/runtime/components/form/Form.vue.d.ts +27 -0
  28. package/dist/runtime/components/form/FormField.vue +91 -0
  29. package/dist/runtime/components/form/FormField.vue.d.ts +37 -0
  30. package/dist/runtime/components/form/FormFieldCheckbox.vue +51 -0
  31. package/dist/runtime/components/form/FormFieldCheckbox.vue.d.ts +17 -0
  32. package/dist/runtime/components/form/FormFieldSelect.vue +76 -0
  33. package/dist/runtime/components/form/FormFieldSelect.vue.d.ts +26 -0
  34. package/dist/runtime/components/form/FormFieldText.vue +56 -0
  35. package/dist/runtime/components/form/FormFieldText.vue.d.ts +16 -0
  36. package/dist/runtime/components/form/FormFieldToggleSwitch.vue +47 -0
  37. package/dist/runtime/components/form/FormFieldToggleSwitch.vue.d.ts +15 -0
  38. package/dist/runtime/components/form/FormLabelInputPair.vue +42 -0
  39. package/dist/runtime/components/form/FormLabelInputPair.vue.d.ts +22 -0
  40. package/dist/runtime/components/form/FormSubmitButton.vue +39 -0
  41. package/dist/runtime/components/form/FormSubmitButton.vue.d.ts +6 -0
  42. package/dist/runtime/components/form/FormValidationMessage.vue +24 -0
  43. package/dist/runtime/components/form/FormValidationMessage.vue.d.ts +15 -0
  44. package/dist/runtime/components/form/element/FormElementSelectOptions.vue +250 -0
  45. package/dist/runtime/components/form/element/FormElementSelectOptions.vue.d.ts +13 -0
  46. package/dist/runtime/composables/use-load-image.js +1 -0
  47. package/dist/runtime/composables/use-notification.d.ts +18 -11
  48. package/dist/runtime/composables/use-notification.js +27 -27
  49. package/dist/runtime/composables/use-resee-ux.d.ts +24 -0
  50. package/dist/runtime/composables/use-resee-ux.js +22 -0
  51. package/dist/runtime/constants.d.ts +3 -0
  52. package/dist/runtime/constants.js +3 -0
  53. package/dist/runtime/server/plugins/teleport-targets.d.ts +3 -0
  54. package/dist/runtime/server/plugins/teleport-targets.js +6 -0
  55. package/dist/runtime/theme/css/brand/form.css +1 -0
  56. package/dist/runtime/theme/css/brand/menu.css +1 -0
  57. package/dist/runtime/theme/css/brand/mobile.css +1 -0
  58. package/dist/runtime/theme/css/brand/transition.css +1 -1
  59. package/dist/runtime/theme/css/brand/utilities.css +1 -1
  60. package/dist/runtime/theme/css/styles.css +1 -1
  61. package/dist/runtime/types/form.d.ts +23 -0
  62. package/dist/runtime/types/form.js +0 -0
  63. package/dist/runtime/utils/dom.d.ts +9 -0
  64. package/dist/runtime/utils/dom.js +25 -0
  65. package/dist/runtime/utils/form.d.ts +34 -0
  66. package/dist/runtime/utils/form.js +34 -0
  67. package/dist/runtime/utils/string.d.ts +6 -0
  68. package/dist/runtime/utils/string.js +3 -0
  69. package/dist/runtime/utils/validation.d.ts +21 -0
  70. package/dist/runtime/utils/validation.js +56 -0
  71. package/package.json +26 -24
package/dist/module.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@resee-movies/nuxt-ux",
3
3
  "configKey": "ux",
4
- "version": "0.4.0",
4
+ "version": "0.5.0",
5
5
  "builder": {
6
6
  "@nuxt/module-builder": "1.0.2",
7
7
  "unbuild": "3.6.0"
package/dist/module.mjs CHANGED
@@ -122,17 +122,31 @@ function importModules(nuxt) {
122
122
  const componentPrefix = primeOptions?.componentPrefix ?? "Prime";
123
123
  const primeComponents = Array.from(
124
124
  /* @__PURE__ */ new Set([
125
+ "Checkbox",
125
126
  "Dialog",
126
127
  "Drawer",
128
+ "Form",
129
+ "FormField",
130
+ "InputText",
127
131
  "Message",
128
132
  "Menu",
133
+ "MultiSelect",
129
134
  "ProgressBar",
130
135
  "ProgressSpinner",
136
+ "Select",
131
137
  "Tag",
132
138
  "Toast",
139
+ "ToggleSwitch",
133
140
  ...primeOptions?.includeComponents ?? []
134
141
  ])
135
142
  );
143
+ nuxt.options.vite.optimizeDeps ??= {};
144
+ nuxt.options.vite.optimizeDeps.include ??= [];
145
+ nuxt.options.vite.optimizeDeps.include.push(
146
+ "primevue/usetoast",
147
+ "primevue/toasteventbus",
148
+ "primevue/toastservice"
149
+ );
136
150
  const Primevue = {
137
151
  defaults: {
138
152
  autoImport: false,
@@ -195,7 +209,7 @@ async function importTailwind(nuxt = useNuxt()) {
195
209
  }
196
210
  }
197
211
 
198
- const module = defineNuxtModule({
212
+ const module$1 = defineNuxtModule({
199
213
  defaults: {
200
214
  componentPrefix: "Ui"
201
215
  },
@@ -214,7 +228,10 @@ const module = defineNuxtModule({
214
228
  const sources = options.tailwind?.sources?.slice() ?? [];
215
229
  const plugins = options.tailwind?.plugins?.slice() ?? [];
216
230
  const imports = options.tailwind?.plugins?.slice() ?? [];
217
- sources.push(components);
231
+ const constants = await resolver.resolvePath("./runtime/constants", {
232
+ extensions: ["ts", "js"]
233
+ });
234
+ sources.push(components, constants);
218
235
  plugins.push(await resolvePath("@egoist/tailwindcss-icons"));
219
236
  imports.push(stylesheet);
220
237
  addComponentsDir({ path: components, prefix: options.componentPrefix });
@@ -245,4 +262,4 @@ const module = defineNuxtModule({
245
262
  }
246
263
  });
247
264
 
248
- export { module as default };
265
+ export { module$1 as default };
@@ -3,6 +3,7 @@
3
3
  :is = "props.is"
4
4
  :aria-label = "shrink ? props.text : void 0"
5
5
  :disabled = "props.disabled"
6
+ :type = "props.type"
6
7
  :class = "[
7
8
  props.severity === 'unset' ? void 0 : props.variant,
8
9
  {
@@ -20,13 +21,15 @@
20
21
  @click = "handleButtonClick"
21
22
  >
22
23
  <IconTextPair
23
- :text = "props.text"
24
- :icon = "props.icon"
25
- :icon-size = "props.iconSize ?? props.size"
26
- :trailing-icon = "props.trailingIcon"
27
- :layout = "props.layout"
28
- :spacing = "props.spacing ?? (props.layout === 'column' ? void 0 : 'wide')"
29
- :loading = "showLoading"
24
+ :text = "props.text"
25
+ :icon = "props.icon"
26
+ :icon-size = "props.iconSize ?? props.size"
27
+ :trailing-icon = "props.trailingIcon"
28
+ :spacing = "props.spacing ?? (iconOnly ? 'none' : 'wide')"
29
+ :loading = "showLoading"
30
+ :icon-transition-name = "props.iconTransitionName"
31
+ :icon-transition-mode = "props.iconTransitionMode"
32
+ :icon-transition-on-appear = "props.iconTransitionOnAppear"
30
33
  >
31
34
  <slot />
32
35
  </IconTextPair>
@@ -55,13 +58,16 @@ const props = defineProps({
55
58
  tooltip: { type: String, required: false, default: void 0 },
56
59
  disabledTooltip: { type: String, required: false, default: void 0 },
57
60
  onClick: { type: [Function, Array], required: false },
61
+ type: { type: String, required: false, default: "button" },
58
62
  text: { type: String, required: false },
59
63
  icon: { type: String, required: false },
60
64
  trailingIcon: { type: String, required: false },
61
65
  iconSize: { type: String, required: false },
62
66
  trailingIconSize: { type: String, required: false },
63
- layout: { type: String, required: false },
64
- spacing: { type: String, required: false }
67
+ spacing: { type: String, required: false },
68
+ iconTransitionName: { type: String, required: false },
69
+ iconTransitionMode: { type: String, required: false },
70
+ iconTransitionOnAppear: { type: Boolean, required: false }
65
71
  });
66
72
  const slots = useSlots();
67
73
  const shrink = computed(
@@ -25,23 +25,13 @@ export interface ButtonProps extends IconTextPairProps {
25
25
  tooltip?: string;
26
26
  disabledTooltip?: string;
27
27
  onClick?: ((evt: Event) => void | Promise<void>) | ((evt: Event) => void | Promise<void>)[];
28
+ type?: 'button' | 'submit' | 'reset';
28
29
  }
29
30
  declare const __VLS_export: __VLS_WithSlots<import("vue").DefineComponent<ButtonProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {} & {
30
31
  click: (evt: Event) => any;
31
32
  }, string, import("vue").PublicProps, Readonly<ButtonProps> & Readonly<{
32
33
  onClick?: ((evt: Event) => any) | undefined;
33
- }>, {
34
- size: "sm" | "lg";
35
- loading: boolean;
36
- is: string | Component;
37
- severity: StyleStatusLevel | "unset";
38
- bordered: boolean;
39
- responsive: boolean | "grow" | "shrink";
40
- variant: "btn" | "a";
41
- disabled: boolean;
42
- tooltip: string;
43
- disabledTooltip: string;
44
- }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>, {
34
+ }>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>, {
45
35
  default?: (props: {}) => any;
46
36
  }>;
47
37
  declare const _default: typeof __VLS_export;
@@ -2,10 +2,7 @@ export interface CardProps {
2
2
  is?: string;
3
3
  interactive?: boolean;
4
4
  }
5
- declare const __VLS_export: __VLS_WithSlots<import("vue").DefineComponent<CardProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<CardProps> & Readonly<{}>, {
6
- is: string;
7
- interactive: boolean;
8
- }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>, {
5
+ declare const __VLS_export: __VLS_WithSlots<import("vue").DefineComponent<CardProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<CardProps> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>, {
9
6
  default?: (props: {}) => any;
10
7
  } & {
11
8
  image?: (props: {}) => any;
@@ -9,19 +9,7 @@ declare const __VLS_export: __VLS_WithSlots<import("vue").DefineComponent<Dialog
9
9
  "update:visible": (visible: boolean) => any;
10
10
  }, string, import("vue").PublicProps, Readonly<DialogProps> & Readonly<{
11
11
  "onUpdate:visible"?: ((visible: boolean) => any) | undefined;
12
- }>, {
13
- size: "xxs" | "xs" | "sm" | "md" | "lg";
14
- showHeaderText: boolean;
15
- showHeaderStyle: boolean;
16
- showModalStyle: boolean;
17
- modal: boolean;
18
- contentClass: any;
19
- closable: boolean;
20
- dismissableMask: boolean;
21
- showHeader: boolean;
22
- position: import("@primevue/core").HintedString<"top" | "center" | "bottom" | "left" | "right" | "topleft" | "topright" | "bottomleft" | "bottomright">;
23
- draggable: boolean;
24
- }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>, {
12
+ }>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>, {
25
13
  title?: (props: {}) => any;
26
14
  } & {
27
15
  default?: (props: {}) => any;
@@ -6,10 +6,7 @@ declare const __VLS_export: __VLS_WithSlots<import("vue").DefineComponent<Drawer
6
6
  "update:visible": (visible: boolean) => any;
7
7
  }, string, import("vue").PublicProps, Readonly<DrawerProps> & Readonly<{
8
8
  "onUpdate:visible"?: ((visible: boolean) => any) | undefined;
9
- }>, {
10
- showHeaderText: boolean;
11
- blockScroll: boolean;
12
- }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>, {
9
+ }>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>, {
13
10
  title?: (props: {}) => any;
14
11
  } & {
15
12
  default?: (props: {}) => any;
@@ -2,10 +2,7 @@ export interface HeadingProps {
2
2
  text?: string | null;
3
3
  level?: '1' | '2' | '3' | '4' | '5' | '6' | 1 | 2 | 3 | 4 | 5 | 6;
4
4
  }
5
- declare const __VLS_export: __VLS_WithSlots<import("vue").DefineComponent<HeadingProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<HeadingProps> & Readonly<{}>, {
6
- text: string | null;
7
- level: "1" | "2" | "3" | "4" | "5" | "6" | 1 | 2 | 3 | 4 | 5 | 6;
8
- }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>, {
5
+ declare const __VLS_export: __VLS_WithSlots<import("vue").DefineComponent<HeadingProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<HeadingProps> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>, {
9
6
  default?: (props: {}) => any;
10
7
  }>;
11
8
  declare const _default: typeof __VLS_export;
@@ -1,17 +1,25 @@
1
1
  <template>
2
- <Transition name="fade" mode="out-in">
3
- <ProgressSpinner
4
- v-if = "props.loading"
5
- :size = "props.size"
6
- class = "icon"
7
- />
2
+ <Transition
3
+ :name = "props.transitionName"
4
+ :mode = "props.transitionMode"
5
+ :appear = "props.transitionOnAppear"
6
+ >
7
+ <span
8
+ v-if = "props.loading"
9
+ v-bind = "$attrs"
10
+ class = "icon"
11
+ >
12
+ <ProgressSpinner :size="props.size" />
13
+ </span>
8
14
 
9
15
  <span
10
- v-else
11
- v-bind = "attrs"
12
- role = "presentation"
13
- :class = "['icon', props.name, props.size, { 'color-cycle': props.colorCycle }]"
14
- />
16
+ v-else-if = "props.name"
17
+ v-bind = "$attrs"
18
+ role = "presentation"
19
+ :class = "['icon', props.size]"
20
+ >
21
+ <span :class="[props.name, { 'color-cycle': props.colorCycle }]" />
22
+ </span>
15
23
  </Transition>
16
24
  </template>
17
25
 
@@ -20,14 +28,18 @@
20
28
  </script>
21
29
 
22
30
  <script setup>
23
- import { useAttrs } from "vue";
24
31
  import ProgressSpinner from "./ProgressSpinner.vue";
25
- const attrs = useAttrs();
32
+ defineOptions({
33
+ inheritAttrs: false
34
+ });
26
35
  const props = defineProps({
27
36
  name: { type: String, required: false, default: void 0 },
28
37
  loading: { type: Boolean, required: false, default: false },
29
- size: { type: String, required: false, default: "md" },
30
- colorCycle: { type: Boolean, required: false, default: false }
38
+ size: { type: String, required: false, default: void 0 },
39
+ colorCycle: { type: Boolean, required: false, default: false },
40
+ transitionName: { type: String, required: false, default: "fade" },
41
+ transitionMode: { type: String, required: false, default: "out-in" },
42
+ transitionOnAppear: { type: Boolean, required: false, default: false }
31
43
  });
32
44
  </script>
33
45
 
@@ -3,12 +3,10 @@ export interface IconProps {
3
3
  loading?: boolean;
4
4
  size?: 'sm' | 'md' | 'lg' | 'xl';
5
5
  colorCycle?: boolean;
6
+ transitionName?: string;
7
+ transitionMode?: 'out-in' | 'in-out';
8
+ transitionOnAppear?: boolean;
6
9
  }
7
- declare const __VLS_export: import("vue").DefineComponent<IconProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<IconProps> & Readonly<{}>, {
8
- size: "sm" | "md" | "lg" | "xl";
9
- name: string;
10
- loading: boolean;
11
- colorCycle: boolean;
12
- }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
10
+ declare const __VLS_export: import("vue").DefineComponent<IconProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<IconProps> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
13
11
  declare const _default: typeof __VLS_export;
14
12
  export default _default;
@@ -1,16 +1,13 @@
1
1
  <template>
2
- <span
3
- :class="[
4
- 'pair',
5
- props.layout ? `layout-${props.layout}` : void 0,
6
- props.spacing ? `spacing-${props.spacing}` : void 0
7
- ]"
8
- >
2
+ <span :class="['pair', props.spacing ? `spacing-${props.spacing}` : void 0]">
9
3
  <Icon
10
- v-if = "props.icon || props.loading"
11
- :name = "props.icon"
12
- :size = "props.iconSize"
13
- :loading = "props.loading"
4
+ class = "leading-icon"
5
+ :name = "props.icon"
6
+ :size = "props.iconSize"
7
+ :loading = "props.loading"
8
+ :transition-name = "props.iconTransitionName"
9
+ :transition-mode = "props.iconTransitionMode"
10
+ :transition-on-appear = "props.iconTransitionOnAppear"
14
11
  />
15
12
 
16
13
  <span v-if="props.text || slots.default" class="label">
@@ -20,9 +17,13 @@
20
17
  </span>
21
18
 
22
19
  <Icon
23
- v-if = "props.trailingIcon"
24
- :name = "props.trailingIcon"
25
- :size = "props.iconSize"
20
+ v-if = "props.trailingIcon"
21
+ class = "trailing-icon"
22
+ :name = "props.trailingIcon"
23
+ :size = "props.iconSize"
24
+ :transition-name = "props.iconTransitionName"
25
+ :transition-mode = "props.iconTransitionMode"
26
+ :transition-on-appear = "props.iconTransitionOnAppear"
26
27
  />
27
28
  </span>
28
29
  </template>
@@ -37,15 +38,17 @@ const props = defineProps({
37
38
  text: { type: String, required: false, default: void 0 },
38
39
  icon: { type: String, required: false, default: void 0 },
39
40
  trailingIcon: { type: String, required: false, default: void 0 },
40
- iconSize: { type: String, required: false, default: "md" },
41
- trailingIconSize: { type: String, required: false, default: "md" },
42
- layout: { type: String, required: false, default: void 0 },
41
+ iconSize: { type: String, required: false, default: void 0 },
42
+ trailingIconSize: { type: String, required: false, default: void 0 },
43
43
  spacing: { type: String, required: false, default: void 0 },
44
- loading: { type: Boolean, required: false, default: false }
44
+ loading: { type: Boolean, required: false, default: false },
45
+ iconTransitionName: { type: String, required: false, default: void 0 },
46
+ iconTransitionMode: { type: String, required: false, default: void 0 },
47
+ iconTransitionOnAppear: { type: Boolean, required: false, default: false }
45
48
  });
46
49
  const slots = useSlots();
47
50
  </script>
48
51
 
49
52
  <style scoped>
50
- @reference "tailwindcss";.pair{align-items:baseline;display:inline-flex;gap:--spacing(1)}.pair.spacing-wide{gap:--spacing(2)}.pair.layout-row{display:flex}.pair.layout-column{align-items:center;flex-direction:column}
53
+ @reference "tailwindcss";.pair{--element-spacing:--spacing(1);align-items:baseline;display:inline}.pair.spacing-none{--element-spacing:0}.pair.spacing-wide{--element-spacing:--spacing(2)}.pair :deep(.leading-icon)>*{margin-inline-end:var(--element-spacing)}.pair :deep(.trailing-icon)>*{margin-inline-start:var(--element-spacing)}@variant max-md{.pair:is(.responsive-shrink .pair) :deep(.leading-icon)>*{margin-inline-end:0}.pair:is(.responsive-shrink .pair) :deep(.trailing-icon)>*{margin-inline-start:0}}
51
54
  </style>
@@ -5,20 +5,13 @@ export interface IconTextPairProps {
5
5
  trailingIcon?: string;
6
6
  iconSize?: IconProps['size'];
7
7
  trailingIconSize?: IconProps['size'];
8
- layout?: 'column' | 'row';
9
- spacing?: 'wide' | 'normal';
8
+ spacing?: 'wide' | 'normal' | 'none';
10
9
  loading?: boolean;
10
+ iconTransitionName?: IconProps['transitionName'];
11
+ iconTransitionMode?: IconProps['transitionMode'];
12
+ iconTransitionOnAppear?: IconProps['transitionOnAppear'];
11
13
  }
12
- declare const __VLS_export: __VLS_WithSlots<import("vue").DefineComponent<IconTextPairProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<IconTextPairProps> & Readonly<{}>, {
13
- loading: boolean;
14
- icon: string;
15
- text: string;
16
- trailingIcon: string;
17
- iconSize: "sm" | "md" | "lg" | "xl";
18
- trailingIconSize: "sm" | "md" | "lg" | "xl";
19
- layout: "column" | "row";
20
- spacing: "wide" | "normal";
21
- }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>, {
14
+ declare const __VLS_export: __VLS_WithSlots<import("vue").DefineComponent<IconTextPairProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<IconTextPairProps> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>, {
22
15
  default?: (props: {}) => any;
23
16
  }>;
24
17
  declare const _default: typeof __VLS_export;
@@ -145,5 +145,5 @@ const altText = computed(() => {
145
145
  </script>
146
146
 
147
147
  <style scoped>
148
- @reference "tailwindcss";.image{background-color:#fff;overflow:clip;position:relative;width:-moz-fit-content;width:fit-content;@variant dark{background-color:#000}}.image.bordered{border:2px solid var(--color-global-background-accent)}.image.beveled{border-bottom-left-radius:var(--radius-xl);border-top-right-radius:var(--radius-xl)}.image.raised{box-shadow:var(--shadow-heavy)}.image.glass:after{background-image:linear-gradient(110deg,transparent 25%,hsla(0,0%,100%,.15) 80%,transparent);content:var(--zero-width-space);inset:0;position:absolute}.image .icon{color:var(--color-global-background-accent);left:50%;position:absolute;top:50%;transform:translateX(-50%) translateY(-50%)}
148
+ @reference "tailwindcss";.image{background-color:#fff;max-width:-moz-fit-content;max-width:fit-content;overflow:clip;position:relative;width:100%;@variant dark{background-color:#000}}.image.bordered{border:2px solid var(--color-global-background-accent)}.image.beveled{border-bottom-left-radius:var(--radius-xl);border-top-right-radius:var(--radius-xl)}.image.raised{box-shadow:var(--shadow-heavy)}.image.glass:after{background-image:linear-gradient(110deg,transparent 25%,hsla(0,0%,100%,.15) 80%,transparent);content:var(--zero-width-space);inset:0;position:absolute}.image .icon{color:var(--color-global-background-accent);left:50%;position:absolute;top:50%;transform:translateX(-50%) translateY(-50%)}
149
149
  </style>
@@ -38,22 +38,6 @@ export declare const ObjectFitClassNames: {
38
38
  readonly contain: "object-contain";
39
39
  readonly inside: "object-contain";
40
40
  };
41
- declare const __VLS_export: import("vue").DefineComponent<ImageProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<ImageProps> & Readonly<{}>, {
42
- type: LoadImageType;
43
- loading: "lazy" | "eager";
44
- iconSize: "sm" | "md" | "lg" | "xl";
45
- bordered: boolean;
46
- showLoading: boolean;
47
- fit: "cover" | "contain" | "inside" | "outside";
48
- width: TmdbImageSize | string | number;
49
- height: string | number;
50
- alt: string | null | ((error: unknown) => string);
51
- aspect: AspectRatio | "auto";
52
- defaultIcon: string;
53
- glassy: boolean;
54
- beveled: boolean;
55
- raised: boolean;
56
- overlayClasses: string | HTMLElementClassNames[] | Record<string, boolean> | null;
57
- }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
41
+ declare const __VLS_export: import("vue").DefineComponent<ImageProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<ImageProps> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
58
42
  declare const _default: typeof __VLS_export;
59
43
  export default _default;
@@ -2,10 +2,7 @@ export interface LayoutPageColumn {
2
2
  is?: string;
3
3
  layout?: 'main' | 'vista';
4
4
  }
5
- declare const __VLS_export: __VLS_WithSlots<import("vue").DefineComponent<LayoutPageColumn, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<LayoutPageColumn> & Readonly<{}>, {
6
- layout: "main" | "vista";
7
- is: string;
8
- }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>, {
5
+ declare const __VLS_export: __VLS_WithSlots<import("vue").DefineComponent<LayoutPageColumn, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<LayoutPageColumn> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>, {
9
6
  default?: (props: {}) => any;
10
7
  }>;
11
8
  declare const _default: typeof __VLS_export;
@@ -3,7 +3,13 @@
3
3
  :is = "props.is"
4
4
  :class = "['page-container', props.glassEffect ? 'glass-effect' : void 0]"
5
5
  >
6
- <slot />
6
+ <div v-if="props.headingText || slots.heading" class="mb-6">
7
+ <slot name="heading">
8
+ <Heading :text="props.headingText" />
9
+ </slot>
10
+ </div>
11
+
12
+ <slot name="default" />
7
13
  </Component>
8
14
  </template>
9
15
 
@@ -12,10 +18,14 @@
12
18
  </script>
13
19
 
14
20
  <script setup>
21
+ import { useSlots } from "vue";
22
+ import Heading from "./Heading.vue";
23
+ const slots = useSlots();
15
24
  const props = defineProps({
16
25
  is: { type: String, required: false, default: "div" },
17
26
  glassEffect: { type: Boolean, required: false, default: false },
18
- accentColor: { type: String, required: false, default: void 0 }
27
+ accentColor: { type: String, required: false, default: void 0 },
28
+ headingText: { type: String, required: false, default: void 0 }
19
29
  });
20
30
  </script>
21
31
 
@@ -3,12 +3,11 @@ export interface LayoutPageContainerProps {
3
3
  is?: HintedString<'div' | 'main' | 'section' | 'article' | 'nav'>;
4
4
  glassEffect?: boolean;
5
5
  accentColor?: string;
6
+ headingText?: string;
6
7
  }
7
- declare const __VLS_export: __VLS_WithSlots<import("vue").DefineComponent<LayoutPageContainerProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<LayoutPageContainerProps> & Readonly<{}>, {
8
- is: HintedString<"div" | "main" | "section" | "article" | "nav">;
9
- glassEffect: boolean;
10
- accentColor: string;
11
- }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>, {
8
+ declare const __VLS_export: __VLS_WithSlots<import("vue").DefineComponent<LayoutPageContainerProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<LayoutPageContainerProps> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>, {
9
+ heading?: (props: {}) => any;
10
+ } & {
12
11
  default?: (props: {}) => any;
13
12
  }>;
14
13
  declare const _default: typeof __VLS_export;
@@ -9,16 +9,6 @@ export interface LoremProps {
9
9
  minWordCount?: string | number;
10
10
  maxWordCount?: string | number;
11
11
  }
12
- declare const __VLS_export: import("vue").DefineComponent<LoremProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<LoremProps> & Readonly<{}>, {
13
- type: "words" | "sentences" | "paragraphs";
14
- min: string | number;
15
- max: string | number;
16
- minParagraphCount: string | number;
17
- maxParagraphCount: string | number;
18
- minSentenceCount: string | number;
19
- maxSentenceCount: string | number;
20
- minWordCount: string | number;
21
- maxWordCount: string | number;
22
- }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
12
+ declare const __VLS_export: import("vue").DefineComponent<LoremProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<LoremProps> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
23
13
  declare const _default: typeof __VLS_export;
24
14
  export default _default;
@@ -7,15 +7,14 @@
7
7
  />
8
8
 
9
9
  <PrimeMenu
10
- ref = "menu"
11
- v-bind = "attrs"
12
- :model = "props.model"
13
- :popup = "true"
14
- :id = "menuId"
15
- class = "menu"
16
- :pt = "passthroughProps"
17
- @show = "visible = true"
18
- @hide = "visible = false"
10
+ ref = "menu"
11
+ v-bind = "attrs"
12
+ :model = "props.model"
13
+ :popup = "true"
14
+ :id = "menuId"
15
+ class = "menu"
16
+ :pt = "passthroughProps"
17
+ :append-to = "TeleportId"
19
18
  >
20
19
  <template v-if="slots.prefix || props.prefixText" #start>
21
20
  <slot name="prefix">
@@ -54,9 +53,12 @@
54
53
 
55
54
  <script setup>
56
55
  import { isString } from "@resee-movies/utilities/strings/is-string";
56
+ import { useBreakpoints, breakpointsTailwind } from "@vueuse/core";
57
57
  import PrimeMenu, {} from "primevue/menu";
58
58
  import { computed, ref, useAttrs, useId, useSlots } from "vue";
59
+ import { blockBodyScroll } from "../utils/dom";
59
60
  import IconTextPair from "./IconTextPair.vue";
61
+ import { TeleportId } from "../constants";
60
62
  defineOptions({
61
63
  inheritAttrs: false
62
64
  });
@@ -65,6 +67,7 @@ const slots = useSlots();
65
67
  const menuId = useId();
66
68
  const menu = ref();
67
69
  const visible = ref(false);
70
+ const isSmall = useBreakpoints(breakpointsTailwind).smallerOrEqual("sm");
68
71
  const props = defineProps({
69
72
  model: { type: Array, required: true },
70
73
  prefixText: { type: String, required: false, default: void 0 },
@@ -75,21 +78,26 @@ defineExpose({
75
78
  expanded: () => visible.value,
76
79
  menuId
77
80
  });
81
+ let unblockScroll = void 0;
78
82
  const passthroughProps = computed(() => {
79
83
  return {
80
- start: {
81
- class: "menu-prefix"
82
- },
83
- end: {
84
- class: "menu-suffix"
85
- },
84
+ start: { class: "menu-prefix" },
85
+ end: { class: "menu-suffix" },
86
+ list: { class: "menu-list" },
86
87
  transition: {
87
- name: "fade"
88
+ name: isSmall.value ? "slide-in-bottom" : "fade",
89
+ onBeforeEnter() {
90
+ visible.value = true;
91
+ if (isSmall.value) {
92
+ unblockScroll = blockBodyScroll();
93
+ }
94
+ },
95
+ onAfterLeave() {
96
+ visible.value = false;
97
+ unblockScroll?.();
98
+ unblockScroll = void 0;
99
+ }
88
100
  }
89
101
  };
90
102
  });
91
103
  </script>
92
-
93
- <style>
94
- @reference "tailwindcss";.menu{background-color:var(--color-global-background);border:1px solid var(--color-global-background-accent);border-radius:var(--radius-md);box-shadow:var(--shadow-heavy);margin-block:--spacing(1);max-width:--spacing(80);padding:--spacing(1)}.menu li[role=separator]{border-bottom:1px solid var(--color-global-background-accent);margin-block:--spacing(1)}.menu li[role=none]{font-weight:var(--font-weight-semibold);padding:--spacing(1) --spacing(2)}.menu li[role=menuitem],.menu li[role=none]{-webkit-user-select:none;-moz-user-select:none;user-select:none}.menu li[role=menuitem]{border-radius:var(--radius-md);cursor:pointer;transition:background-color;transition-duration:var(--default-transition-duration)}.menu li[role=menuitem]>:only-child:not(:has(>a:only-child)){padding:--spacing(1) --spacing(2)}.menu li[role=menuitem]>:only-child:has(>a:only-child)>a{display:block;padding:--spacing(1) --spacing(2)}.menu li[role=menuitem][aria-disabled=true]{color:var(--color-global-foreground-accent);cursor:not-allowed}.menu li[role=menuitem][data-p-focused=true]:not([aria-disabled=true]),.menu ul:not(:focus) li[role=menuitem]:not([aria-disabled=true]):hover{background-color:var(--color-background-scale-c)}.menu .menu-prefix{border-bottom:1px solid var(--color-global-background-accent);margin-bottom:--spacing(1);padding:0 --spacing(2) --spacing(1)}.menu .menu-suffix{border-top:1px solid var(--color-global-background-accent);margin-top:--spacing(1);padding:--spacing(1) --spacing(2) 0}
95
- </style>
@@ -20,14 +20,11 @@ export interface MenuExposes {
20
20
  menuId: string;
21
21
  expanded: ComputedGetter<boolean>;
22
22
  }
23
- declare const __VLS_export: __VLS_WithSlots<import("vue").DefineComponent<MenuProps, MenuExposes, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<MenuProps> & Readonly<{}>, {
24
- prefixText: string;
25
- suffixText: string;
26
- }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>, {
23
+ declare const __VLS_export: __VLS_WithSlots<import("vue").DefineComponent<MenuProps, MenuExposes, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<MenuProps> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>, {
27
24
  control?: (props: {
28
- toggle: (event: Event) => void | undefined;
29
- menuId: string;
30
- expanded: boolean;
25
+ toggle: (event: Event) => any;
26
+ menuId: any;
27
+ expanded: any;
31
28
  }) => any;
32
29
  } & {
33
30
  prefix?: (props: {}) => any;
@@ -1,7 +1,7 @@
1
- import type { StatusLevel } from '../types/index.js';
1
+ import type { StyleStatusLevel } from '../types/index.js';
2
2
  import type { IconProps } from './Icon.vue.js';
3
3
  export interface MessageProps {
4
- severity?: StatusLevel;
4
+ severity?: StyleStatusLevel;
5
5
  text?: string;
6
6
  class?: string;
7
7
  style?: string;
@@ -7,6 +7,7 @@
7
7
  </template>
8
8
 
9
9
  <script setup>
10
+ import { isString } from "@resee-movies/utilities/strings/is-string";
10
11
  import PrimeToast, {} from "primevue/toast";
11
12
  import { StatusLevelIcons } from "../constants";
12
13
  const passthroughProps = {
@@ -19,9 +20,15 @@ const passthroughProps = {
19
20
  props.message?.summary?.trim() ? "has-summary" : void 0
20
21
  ]
21
22
  }),
22
- messageIcon: ({ props }) => ({
23
- class: ["icon", StatusLevelIcons[props.message?.severity ?? "default"]]
24
- }),
23
+ messageIcon: ({ props }) => {
24
+ let iconClassName = StatusLevelIcons[props.message?.severity ?? "default"];
25
+ if (props.message && "icon" in props.message && isString(props.message.icon)) {
26
+ iconClassName = props.message.icon;
27
+ }
28
+ return {
29
+ class: ["icon", iconClassName]
30
+ };
31
+ },
25
32
  root: { class: "notification-container" },
26
33
  messageContent: { class: "content" },
27
34
  messageText: { class: "text" },