ropav 0.0.7 → 0.0.8

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/accordion.js +0 -2
  2. package/dist/badge.js +0 -2
  3. package/dist/bem.js +0 -2
  4. package/dist/button-group.js +0 -2
  5. package/dist/button.js +0 -2
  6. package/dist/card.css +40 -20
  7. package/dist/card.js +69 -38
  8. package/dist/checkbox.js +0 -2
  9. package/dist/collapse.css +6 -6
  10. package/dist/collapse.js +3 -9
  11. package/dist/componentColors.js +0 -2
  12. package/dist/components/card/card.d.ts +4 -0
  13. package/dist/components/card/types.d.ts +4 -0
  14. package/dist/components/collapse/types.d.ts +0 -2
  15. package/dist/components/field/useField.d.ts +1 -0
  16. package/dist/components/modal/types.d.ts +0 -1
  17. package/dist/components/popover/types.d.ts +4 -1
  18. package/dist/components/popover/usePopover.d.ts +5 -2
  19. package/dist/dropdown-menu.js +0 -2
  20. package/dist/field.css +11 -8
  21. package/dist/field.js +46 -23
  22. package/dist/icon-button.js +0 -2
  23. package/dist/input.js +0 -2
  24. package/dist/modal.css +28 -28
  25. package/dist/modal.js +9 -15
  26. package/dist/overlay.js +0 -2
  27. package/dist/popover.css +16 -16
  28. package/dist/popover.js +17 -7
  29. package/dist/progress.js +0 -2
  30. package/dist/radio.js +0 -2
  31. package/dist/select.js +0 -2
  32. package/dist/slider.js +0 -2
  33. package/dist/switch.js +0 -2
  34. package/dist/tabs.js +0 -2
  35. package/dist/textarea.js +0 -2
  36. package/dist/tooltip.js +0 -2
  37. package/dist/useButtonColor.js +0 -2
  38. package/dist/useClickOutside.js +0 -2
  39. package/dist/useCollapse.js +1 -3
  40. package/dist/useControlState.js +0 -2
  41. package/dist/useRequiredInject.js +0 -2
  42. package/dist/x.js +0 -2
  43. package/package.json +6 -2
  44. package/dist/accordion.js.map +0 -1
  45. package/dist/badge.js.map +0 -1
  46. package/dist/bem.js.map +0 -1
  47. package/dist/button-group.js.map +0 -1
  48. package/dist/button.js.map +0 -1
  49. package/dist/card.js.map +0 -1
  50. package/dist/checkbox.js.map +0 -1
  51. package/dist/collapse.js.map +0 -1
  52. package/dist/componentColors.js.map +0 -1
  53. package/dist/dropdown-menu.js.map +0 -1
  54. package/dist/field.js.map +0 -1
  55. package/dist/icon-button.js.map +0 -1
  56. package/dist/input.js.map +0 -1
  57. package/dist/modal.js.map +0 -1
  58. package/dist/overlay.js.map +0 -1
  59. package/dist/popover.js.map +0 -1
  60. package/dist/progress.js.map +0 -1
  61. package/dist/radio.js.map +0 -1
  62. package/dist/select.js.map +0 -1
  63. package/dist/slider.js.map +0 -1
  64. package/dist/switch.js.map +0 -1
  65. package/dist/tabs.js.map +0 -1
  66. package/dist/textarea.js.map +0 -1
  67. package/dist/tooltip.js.map +0 -1
  68. package/dist/useButtonColor.js.map +0 -1
  69. package/dist/useClickOutside.js.map +0 -1
  70. package/dist/useCollapse.js.map +0 -1
  71. package/dist/useControlState.js.map +0 -1
  72. package/dist/useRequiredInject.js.map +0 -1
  73. package/dist/x.js.map +0 -1
package/dist/accordion.js CHANGED
@@ -356,5 +356,3 @@ var accordion_item_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/*
356
356
  }), [["__scopeId", "data-v-8528e537"]]);
357
357
  //#endregion
358
358
  export { useAccordionItem as i, accordion_default as n, useAccordion as r, accordion_item_default as t };
359
-
360
- //# sourceMappingURL=accordion.js.map
package/dist/badge.js CHANGED
@@ -99,5 +99,3 @@ var badgeVariants = [
99
99
  ];
100
100
  //#endregion
101
101
  export { badge_default as a, badgeVariants as i, badgeRadiuses as n, badgeSizes as r, badgeColors as t };
102
-
103
- //# sourceMappingURL=badge.js.map
package/dist/bem.js CHANGED
@@ -7,5 +7,3 @@ function bem(block, ...modifiers) {
7
7
  }
8
8
  //#endregion
9
9
  export { bem as t };
10
-
11
- //# sourceMappingURL=bem.js.map
@@ -46,5 +46,3 @@ var button_group_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @_
46
46
  }), [["__scopeId", "data-v-d9f79a5b"]]);
47
47
  //#endregion
48
48
  export { button_group_default as t };
49
-
50
- //# sourceMappingURL=button-group.js.map
package/dist/button.js CHANGED
@@ -81,5 +81,3 @@ var button_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE_
81
81
  }), [["__scopeId", "data-v-4a751fe6"]]);
82
82
  //#endregion
83
83
  export { button_default as t };
84
-
85
- //# sourceMappingURL=button.js.map
package/dist/card.css CHANGED
@@ -1,7 +1,9 @@
1
- .rp-card[data-v-c3ae62b7] {
1
+ .rp-card[data-v-269e2bc4] {
2
2
  --_rp-card-bg: var(--rp-color-surface-raised);
3
3
  --_rp-card-border: var(--rp-color-border);
4
4
  --_rp-card-fg: var(--rp-color-text);
5
+ --_rp-card-header-border: var(--rp-color-border);
6
+ --_rp-card-footer-border: var(--rp-color-border);
5
7
  --_rp-card-padding: var(--rp-spacing-5);
6
8
  --_rp-card-radius: var(--rp-radius-sm);
7
9
  box-sizing: border-box;
@@ -16,71 +18,89 @@
16
18
  border-radius: var(--_rp-card-radius);
17
19
  transition: background-color var(--rp-transition-fast), border-color var(--rp-transition-fast);
18
20
  }
19
- .rp-card--layer-base[data-v-c3ae62b7] {
21
+ .rp-card--layer-base[data-v-269e2bc4] {
20
22
  --_rp-card-bg: var(--rp-color-background);
21
23
  }
22
- .rp-card--layer-surface[data-v-c3ae62b7] {
24
+ .rp-card--layer-surface[data-v-269e2bc4] {
23
25
  --_rp-card-bg: var(--rp-color-surface);
24
26
  }
25
- .rp-card--layer-raised[data-v-c3ae62b7] {
27
+ .rp-card--layer-raised[data-v-269e2bc4] {
26
28
  --_rp-card-bg: var(--rp-color-surface-raised);
27
29
  }
28
- .rp-card--borderless[data-v-c3ae62b7] {
30
+ .rp-card--borderless[data-v-269e2bc4] {
29
31
  --_rp-card-border: transparent;
30
32
  }
31
- .rp-card--padding-none[data-v-c3ae62b7] {
33
+ .rp-card--header-bordered .rp-card__header[data-v-269e2bc4] {
34
+ border-bottom: var(--rp-border-width-thin) solid var(--_rp-card-header-border);
35
+ }
36
+ .rp-card--footer-bordered .rp-card__footer[data-v-269e2bc4] {
37
+ border-top: var(--rp-border-width-thin) solid var(--_rp-card-footer-border);
38
+ }
39
+ .rp-card--header-compact .rp-card__header[data-v-269e2bc4] {
40
+ padding-block-end: calc(var(--_rp-card-padding) / 2);
41
+ }
42
+ .rp-card--header-compact .rp-card__body[data-v-269e2bc4] {
43
+ padding-block-start: calc(var(--_rp-card-padding) / 2);
44
+ }
45
+ .rp-card--footer-compact .rp-card__body[data-v-269e2bc4] {
46
+ padding-block-end: calc(var(--_rp-card-padding) / 2);
47
+ }
48
+ .rp-card--footer-compact .rp-card__footer[data-v-269e2bc4] {
49
+ padding-block-start: calc(var(--_rp-card-padding) / 2);
50
+ }
51
+ .rp-card--padding-none[data-v-269e2bc4] {
32
52
  --_rp-card-padding: var(--rp-spacing-0);
33
53
  }
34
- .rp-card--padding-sm[data-v-c3ae62b7] {
54
+ .rp-card--padding-sm[data-v-269e2bc4] {
35
55
  --_rp-card-padding: var(--rp-spacing-3);
36
56
  }
37
- .rp-card--padding-md[data-v-c3ae62b7] {
57
+ .rp-card--padding-md[data-v-269e2bc4] {
38
58
  --_rp-card-padding: var(--rp-spacing-5);
39
59
  }
40
- .rp-card--padding-lg[data-v-c3ae62b7] {
60
+ .rp-card--padding-lg[data-v-269e2bc4] {
41
61
  --_rp-card-padding: var(--rp-spacing-6);
42
62
  }
43
- .rp-card--radius-none[data-v-c3ae62b7] {
63
+ .rp-card--radius-none[data-v-269e2bc4] {
44
64
  --_rp-card-radius: var(--rp-radius-none);
45
65
  }
46
- .rp-card--radius-xs[data-v-c3ae62b7] {
66
+ .rp-card--radius-xs[data-v-269e2bc4] {
47
67
  --_rp-card-radius: var(--rp-radius-xs);
48
68
  }
49
- .rp-card--radius-sm[data-v-c3ae62b7] {
69
+ .rp-card--radius-sm[data-v-269e2bc4] {
50
70
  --_rp-card-radius: var(--rp-radius-sm);
51
71
  }
52
- .rp-card--radius-md[data-v-c3ae62b7] {
72
+ .rp-card--radius-md[data-v-269e2bc4] {
53
73
  --_rp-card-radius: var(--rp-radius-md);
54
74
  }
55
- .rp-card--radius-lg[data-v-c3ae62b7] {
75
+ .rp-card--radius-lg[data-v-269e2bc4] {
56
76
  --_rp-card-radius: var(--rp-radius-lg);
57
77
  }
58
- .rp-card--radius-xl[data-v-c3ae62b7] {
78
+ .rp-card--radius-xl[data-v-269e2bc4] {
59
79
  --_rp-card-radius: var(--rp-radius-xl);
60
80
  }
61
- .rp-card__header[data-v-c3ae62b7], .rp-card__body[data-v-c3ae62b7] {
81
+ .rp-card__header[data-v-269e2bc4], .rp-card__body[data-v-269e2bc4], .rp-card__footer[data-v-269e2bc4] {
62
82
  box-sizing: border-box;
63
83
  padding: var(--_rp-card-padding);
64
84
  }
65
- .rp-card__header[data-v-c3ae62b7] {
85
+ .rp-card__header[data-v-269e2bc4], .rp-card__footer[data-v-269e2bc4] {
66
86
  display: grid;
67
87
  gap: var(--rp-spacing-1);
68
88
  }
69
- .rp-card__body[data-v-c3ae62b7] {
89
+ .rp-card__body[data-v-269e2bc4] {
70
90
  flex: 1 1 auto;
71
91
  min-width: 0;
72
92
  color: var(--rp-color-text);
73
93
  font-size: var(--rp-font-size-base);
74
94
  line-height: var(--rp-line-height-normal);
75
95
  }
76
- .rp-card__title[data-v-c3ae62b7] {
96
+ .rp-card__title[data-v-269e2bc4] {
77
97
  margin: 0;
78
98
  color: var(--rp-color-text);
79
99
  font-size: var(--rp-font-size-lg);
80
100
  font-weight: var(--rp-font-weight-semibold);
81
101
  line-height: var(--rp-line-height-tight);
82
102
  }
83
- .rp-card__description[data-v-c3ae62b7] {
103
+ .rp-card__description[data-v-269e2bc4] {
84
104
  margin: 0;
85
105
  color: var(--rp-color-text-secondary);
86
106
  font-size: var(--rp-font-size-sm);
package/dist/card.js CHANGED
@@ -1,13 +1,14 @@
1
1
  import './card.css';
2
2
  import { t as bem } from "./bem.js";
3
3
  import { t as _plugin_vue_export_helper_default } from "./_plugin-vue_export-helper.js";
4
- import { computed, createIf, createSlot, defineVaporComponent, renderEffect, setClass, setInsertionState, setText, template, toDisplayString, txt } from "vue";
4
+ import { computed, createIf, createSlot, defineVaporComponent, renderEffect, setClass, setInsertionState, setText, template, toDisplayString, txt, useSlots } from "vue";
5
5
  //#region src/components/card/card.vue?vue&type=script&setup=true&vapor=true&lang.ts
6
- var t0 = template("<div data-v-c3ae62b7 class=rp-card__title> ");
7
- var t1 = template("<p data-v-c3ae62b7 class=rp-card__description> ");
8
- var t2 = template("<div data-v-c3ae62b7 class=rp-card__header>");
9
- var t3 = template("<div data-v-c3ae62b7 class=rp-card__body>");
10
- var t4 = template("<div data-v-c3ae62b7>", 1);
6
+ var t0 = template("<div data-v-269e2bc4 class=rp-card__title> ");
7
+ var t1 = template("<p data-v-269e2bc4 class=rp-card__description> ");
8
+ var t2 = template("<div data-v-269e2bc4 class=rp-card__header>");
9
+ var t3 = template("<div data-v-269e2bc4>");
10
+ var t4 = template("<div data-v-269e2bc4 class=rp-card__footer>");
11
+ var t5 = template("<div data-v-269e2bc4>", 1);
11
12
  //#endregion
12
13
  //#region src/components/card/card.vue
13
14
  var card_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE__ */ defineVaporComponent({
@@ -21,52 +22,82 @@ var card_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE__
21
22
  type: Boolean,
22
23
  default: true
23
24
  },
25
+ headerBorder: {
26
+ type: Boolean,
27
+ default: false
28
+ },
29
+ footerBorder: {
30
+ type: Boolean,
31
+ default: false
32
+ },
24
33
  title: { default: "" },
25
- description: { default: "" }
34
+ description: { default: "" },
35
+ bodyClass: { type: [
36
+ Boolean,
37
+ null,
38
+ String,
39
+ Object,
40
+ Array
41
+ ] }
26
42
  },
27
- setup(__props, { slots: $slots }) {
43
+ setup(__props) {
28
44
  const props = __props;
45
+ const slots = useSlots();
29
46
  const hasTitle = computed(() => Boolean(props.title));
30
47
  const hasDescription = computed(() => Boolean(props.description));
31
- const hasHeader = computed(() => Boolean(hasTitle.value || hasDescription.value));
48
+ const hasHeader = computed(() => Boolean(slots.header || hasTitle.value || hasDescription.value));
49
+ const hasBody = computed(() => Boolean(slots.default));
50
+ const hasFooter = computed(() => Boolean(slots.footer));
51
+ const hasCompactHeaderSpacing = computed(() => Boolean(hasHeader.value && hasBody.value && !props.headerBorder));
52
+ const hasCompactFooterSpacing = computed(() => Boolean(hasFooter.value && hasBody.value && !props.footerBorder));
32
53
  const rootClass = computed(() => bem("rp-card", {
33
54
  [`layer-${props.layer}`]: Boolean(props.layer),
34
55
  [`padding-${props.padding}`]: Boolean(props.padding),
35
56
  [`radius-${props.radius}`]: Boolean(props.radius),
36
- borderless: !props.border
57
+ borderless: !props.border,
58
+ "header-bordered": props.headerBorder,
59
+ "header-compact": hasCompactHeaderSpacing.value,
60
+ "footer-bordered": props.footerBorder,
61
+ "footer-compact": hasCompactFooterSpacing.value
37
62
  }));
38
- const n13 = t4();
39
- renderEffect(() => setClass(n13, rootClass.value));
40
- setInsertionState(n13, null, 0);
63
+ const n19 = t5();
64
+ renderEffect(() => setClass(n19, rootClass.value));
65
+ setInsertionState(n19, null, 0);
41
66
  createIf(() => hasHeader.value, () => {
42
- const n8 = t2();
43
- setInsertionState(n8, null, 0);
44
- createIf(() => hasTitle.value, () => {
45
- const n4 = t0();
46
- const x4 = txt(n4);
47
- renderEffect(() => setText(x4, toDisplayString(__props.title)));
48
- return n4;
49
- });
50
- setInsertionState(n8, null, 1);
51
- createIf(() => hasDescription.value, () => {
52
- const n7 = t1();
53
- const x7 = txt(n7);
54
- renderEffect(() => setText(x7, toDisplayString(__props.description)));
55
- return n7;
56
- });
57
- return n8;
67
+ const n10 = t2();
68
+ setInsertionState(n10, null, 0);
69
+ createSlot("header", null, () => {
70
+ return [createIf(() => hasTitle.value, () => {
71
+ const n6 = t0();
72
+ const x6 = txt(n6);
73
+ renderEffect(() => setText(x6, toDisplayString(__props.title)));
74
+ return n6;
75
+ }), createIf(() => hasDescription.value, () => {
76
+ const n9 = t1();
77
+ const x9 = txt(n9);
78
+ renderEffect(() => setText(x9, toDisplayString(__props.description)));
79
+ return n9;
80
+ })];
81
+ }, 1);
82
+ return n10;
58
83
  });
59
- setInsertionState(n13, null, 1);
60
- createIf(() => $slots.default, () => {
61
- const n12 = t3();
62
- setInsertionState(n12, null, 0);
84
+ setInsertionState(n19, null, 1);
85
+ createIf(() => hasBody.value, () => {
86
+ const n14 = t3();
87
+ renderEffect(() => setClass(n14, ["rp-card__body", __props.bodyClass]));
88
+ setInsertionState(n14, null, 0);
63
89
  createSlot("default", null, null, 1);
64
- return n12;
90
+ return n14;
91
+ });
92
+ setInsertionState(n19, null, 2);
93
+ createIf(() => hasFooter.value, () => {
94
+ const n18 = t4();
95
+ setInsertionState(n18, null, 0);
96
+ createSlot("footer", null, null, 1);
97
+ return n18;
65
98
  });
66
- return n13;
99
+ return n19;
67
100
  }
68
- }), [["__scopeId", "data-v-c3ae62b7"]]);
101
+ }), [["__scopeId", "data-v-269e2bc4"]]);
69
102
  //#endregion
70
103
  export { card_default as t };
71
-
72
- //# sourceMappingURL=card.js.map
package/dist/checkbox.js CHANGED
@@ -154,5 +154,3 @@ var checkbox_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PUR
154
154
  }), [["__scopeId", "data-v-8af73824"]]);
155
155
  //#endregion
156
156
  export { checkbox_default as t };
157
-
158
- //# sourceMappingURL=checkbox.js.map
package/dist/collapse.css CHANGED
@@ -1,15 +1,15 @@
1
- .rp-collapse[data-v-f5b999da] {
1
+ .rp-collapse[data-v-a78ac964] {
2
2
  --_rp-collapse-duration: var(--rp-transition-fast);
3
3
  display: block;
4
4
  min-width: 0;
5
5
  font-family: var(--rp-font-family);
6
6
  color: var(--rp-color-text);
7
7
  }
8
- .rp-collapse--disabled[data-v-f5b999da] {
8
+ .rp-collapse--disabled[data-v-a78ac964] {
9
9
  opacity: var(--rp-opacity-disabled);
10
10
  cursor: not-allowed;
11
11
  }
12
- .rp-collapse__content[data-v-f5b999da] {
12
+ .rp-collapse__content[data-v-a78ac964] {
13
13
  box-sizing: border-box;
14
14
  display: grid;
15
15
  min-width: 0;
@@ -20,13 +20,13 @@
20
20
  grid-template-rows: 1fr;
21
21
  transition: grid-template-rows var(--_rp-collapse-duration), opacity var(--_rp-collapse-duration);
22
22
  }
23
- .rp-collapse__inner[data-v-f5b999da] {
23
+ .rp-collapse__inner[data-v-a78ac964] {
24
24
  min-height: 0;
25
25
  min-width: 0;
26
26
  overflow: hidden;
27
27
  }
28
- .rp-collapse-content-enter-from[data-v-f5b999da],
29
- .rp-collapse-content-leave-to[data-v-f5b999da] {
28
+ .rp-collapse-content-enter-from[data-v-a78ac964],
29
+ .rp-collapse-content-leave-to[data-v-a78ac964] {
30
30
  opacity: 0;
31
31
  grid-template-rows: 0fr;
32
32
  }
package/dist/collapse.js CHANGED
@@ -3,8 +3,8 @@ import { t as useCollapse } from "./useCollapse.js";
3
3
  import { t as _plugin_vue_export_helper_default } from "./_plugin-vue_export-helper.js";
4
4
  import { VaporTransition, applyVShow, child, createComponent, createIf, createSlot, defineVaporComponent, extend, renderEffect, setDynamicProps, setInsertionState, template, unref } from "vue";
5
5
  //#region src/components/collapse/collapse.vue?vue&type=script&setup=true&vapor=true&lang.ts
6
- var t0 = template("<section data-v-f5b999da><div data-v-f5b999da class=rp-collapse__inner>");
7
- var t1 = template("<div data-v-f5b999da>", 1);
6
+ var t0 = template("<section data-v-a78ac964><div data-v-a78ac964 class=rp-collapse__inner>");
7
+ var t1 = template("<div data-v-a78ac964>", 1);
8
8
  //#endregion
9
9
  //#region src/components/collapse/collapse.vue
10
10
  var collapse_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE__ */ defineVaporComponent({
@@ -16,10 +16,6 @@ var collapse_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PUR
16
16
  type: Boolean,
17
17
  default: void 0
18
18
  },
19
- defaultOpen: {
20
- type: Boolean,
21
- default: false
22
- },
23
19
  disabled: {
24
20
  type: Boolean,
25
21
  default: false
@@ -61,8 +57,6 @@ var collapse_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PUR
61
57
  }, { _: 8 }));
62
58
  return n7;
63
59
  }
64
- }), [["__scopeId", "data-v-f5b999da"]]);
60
+ }), [["__scopeId", "data-v-a78ac964"]]);
65
61
  //#endregion
66
62
  export { collapse_default as t };
67
-
68
- //# sourceMappingURL=collapse.js.map
@@ -18,5 +18,3 @@ function getComponentCustomColor(color) {
18
18
  }
19
19
  //#endregion
20
20
  export { getComponentCustomColor as n, isComponentPresetColor as r, componentColors as t };
21
-
22
- //# sourceMappingURL=componentColors.js.map
@@ -6,7 +6,11 @@ declare const __VLS_export: (__VLS_props: NonNullable<Awaited<typeof __VLS_setup
6
6
  expose: (exposed: {}) => void;
7
7
  attrs: any;
8
8
  slots: {
9
+ header?: (props: {}) => any;
10
+ } & {
9
11
  default?: (props: {}) => any;
12
+ } & {
13
+ footer?: (props: {}) => any;
10
14
  };
11
15
  emit: {};
12
16
  }>) => import('vue').VNode & {
@@ -1,3 +1,4 @@
1
+ import { HTMLAttributes } from 'vue';
1
2
  export type CardPadding = 'none' | 'sm' | 'md' | 'lg';
2
3
  export type CardRadius = 'none' | 'xs' | 'sm' | 'md' | 'lg' | 'xl';
3
4
  export type CardLayer = 'base' | 'surface' | 'raised';
@@ -6,6 +7,9 @@ export interface CardProps {
6
7
  padding?: CardPadding;
7
8
  radius?: CardRadius;
8
9
  border?: boolean;
10
+ headerBorder?: boolean;
11
+ footerBorder?: boolean;
9
12
  title?: string;
10
13
  description?: string;
14
+ bodyClass?: HTMLAttributes['class'];
11
15
  }
@@ -37,7 +37,6 @@ export interface CollapseTriggerSlotProps extends CollapseSlotProps {
37
37
  export interface CollapseProps {
38
38
  id?: string;
39
39
  open?: boolean;
40
- defaultOpen?: boolean;
41
40
  disabled?: boolean;
42
41
  unmountOnExit?: boolean;
43
42
  role?: CollapseContentRole;
@@ -48,7 +47,6 @@ export interface CollapseProps {
48
47
  export interface UseCollapseOptions {
49
48
  id?: CollapseOption<string | undefined>;
50
49
  open?: CollapseOption<boolean | undefined>;
51
- defaultOpen?: CollapseOption<boolean | undefined>;
52
50
  disabled?: CollapseOption<boolean | undefined>;
53
51
  unmountOnExit?: CollapseOption<boolean | undefined>;
54
52
  role?: CollapseOption<CollapseContentRole | undefined>;
@@ -13,4 +13,5 @@ export declare function useField(props: Readonly<FieldProps>): {
13
13
  controlDescribedby: import('vue').ComputedRef<string | undefined>;
14
14
  rootClass: import('vue').ComputedRef<string[]>;
15
15
  controlProps: import('vue').ComputedRef<FieldControlProps>;
16
+ focusControl: (e: MouseEvent) => void;
16
17
  };
@@ -14,7 +14,6 @@ export interface ModalSlotProps {
14
14
  export interface ModalProps {
15
15
  id?: string;
16
16
  open?: boolean;
17
- defaultOpen?: boolean;
18
17
  title?: string;
19
18
  description?: string;
20
19
  ariaLabel?: string;
@@ -6,7 +6,7 @@ export interface PopoverOffsetOptions {
6
6
  crossAxis?: number;
7
7
  }
8
8
  export type PopoverOffset = number | PopoverOffsetOptions;
9
- export type PopoverRole = 'dialog' | 'menu' | 'listbox' | 'tree' | 'grid';
9
+ export type PopoverRole = 'dialog';
10
10
  export interface PopoverTriggerProps {
11
11
  'aria-controls'?: string;
12
12
  'aria-expanded'?: boolean;
@@ -35,6 +35,9 @@ export interface PopoverProps {
35
35
  open?: boolean;
36
36
  disabled?: boolean;
37
37
  role?: PopoverRole;
38
+ ariaLabel?: string;
39
+ ariaLabelledby?: string;
40
+ ariaDescribedby?: string;
38
41
  closeOnOutsideClick?: boolean;
39
42
  closeOnEscape?: boolean;
40
43
  }
@@ -1,12 +1,15 @@
1
1
  import { CSSProperties } from 'vue';
2
- import { PopoverContentSlotProps, PopoverProps, PopoverRole, PopoverSlotProps, PopoverTriggerProps } from './types';
2
+ import { PopoverContentSlotProps, PopoverProps, PopoverSlotProps, PopoverTriggerProps } from './types';
3
3
  export declare function usePopover(props: Readonly<PopoverProps>, emitOpenChange?: (open: boolean) => void): {
4
4
  rootRef: import('vue').Ref<HTMLElement | null, HTMLElement | null>;
5
5
  popoverId: import('vue').ComputedRef<string>;
6
6
  isOpen: import('vue').ComputedRef<boolean>;
7
7
  isVisible: import('vue').ComputedRef<boolean>;
8
8
  isTargetMode: import('vue').ComputedRef<boolean>;
9
- popoverRole: import('vue').ComputedRef<PopoverRole>;
9
+ popoverRole: import('vue').ComputedRef<"dialog">;
10
+ ariaLabel: import('vue').ComputedRef<string | undefined>;
11
+ ariaLabelledby: import('vue').ComputedRef<string | undefined>;
12
+ ariaDescribedby: import('vue').ComputedRef<string | undefined>;
10
13
  shouldRenderContent: import('vue').ComputedRef<boolean>;
11
14
  rootClass: import('vue').ComputedRef<string[]>;
12
15
  contentStyle: import('vue').ComputedRef<CSSProperties | undefined>;
@@ -899,5 +899,3 @@ var dropdown_menu_default = /* @__PURE__ */ defineVaporComponent({
899
899
  });
900
900
  //#endregion
901
901
  export { useDropdownMenu as n, dropdown_menu_default as t };
902
-
903
- //# sourceMappingURL=dropdown-menu.js.map
package/dist/field.css CHANGED
@@ -1,4 +1,4 @@
1
- .rp-field[data-v-50e7f3a5] {
1
+ .rp-field[data-v-0d027ead] {
2
2
  --_rp-field-danger: var(--rp-color-danger);
3
3
  display: grid;
4
4
  gap: var(--rp-spacing-1);
@@ -6,10 +6,10 @@
6
6
  font-family: var(--rp-font-family);
7
7
  color: var(--rp-color-text);
8
8
  }
9
- html.dark .rp-field[data-v-50e7f3a5] {
9
+ html.dark .rp-field[data-v-0d027ead] {
10
10
  --_rp-field-danger: var(--rp-color-danger-fg);
11
11
  }
12
- .rp-field__label[data-v-50e7f3a5] {
12
+ .rp-field__label[data-v-0d027ead] {
13
13
  display: inline-flex;
14
14
  width: fit-content;
15
15
  align-items: center;
@@ -19,22 +19,25 @@ html.dark .rp-field[data-v-50e7f3a5] {
19
19
  font-weight: var(--rp-font-weight-medium);
20
20
  line-height: var(--rp-line-height-normal);
21
21
  }
22
- .rp-field__required[data-v-50e7f3a5] {
22
+ .rp-field__required[data-v-0d027ead] {
23
23
  color: var(--_rp-field-danger);
24
24
  line-height: var(--rp-line-height-none);
25
25
  }
26
- .rp-field__control[data-v-50e7f3a5] {
26
+ .rp-field__label + .rp-field__control[data-v-0d027ead] {
27
+ margin-block-start: var(--rp-spacing-1);
28
+ }
29
+ .rp-field__control[data-v-0d027ead] {
27
30
  min-width: 0;
28
31
  }
29
- .rp-field__description[data-v-50e7f3a5], .rp-field__message[data-v-50e7f3a5] {
32
+ .rp-field__description[data-v-0d027ead], .rp-field__message[data-v-0d027ead] {
30
33
  margin: 0;
31
34
  color: var(--rp-color-text-secondary);
32
35
  font-size: var(--rp-font-size-sm);
33
36
  line-height: var(--rp-line-height-normal);
34
37
  }
35
- .rp-field--invalid .rp-field__message[data-v-50e7f3a5] {
38
+ .rp-field--invalid .rp-field__message[data-v-0d027ead] {
36
39
  color: var(--_rp-field-danger);
37
40
  }
38
- .rp-field--disabled .rp-field__label[data-v-50e7f3a5], .rp-field--disabled .rp-field__description[data-v-50e7f3a5], .rp-field--disabled .rp-field__message[data-v-50e7f3a5] {
41
+ .rp-field--disabled .rp-field__label[data-v-0d027ead], .rp-field--disabled .rp-field__description[data-v-0d027ead], .rp-field--disabled .rp-field__message[data-v-0d027ead] {
39
42
  color: var(--rp-color-text-disabled);
40
43
  }
package/dist/field.js CHANGED
@@ -1,8 +1,20 @@
1
1
  import './field.css';
2
2
  import { t as bem } from "./bem.js";
3
3
  import { t as _plugin_vue_export_helper_default } from "./_plugin-vue_export-helper.js";
4
- import { child, computed, createIf, createSlot, defineVaporComponent, renderEffect, setClass, setInsertionState, setProp, setText, template, toDisplayString, unref, useId, useSlots } from "vue";
4
+ import { child, computed, createIf, createInvoker, createSlot, defineVaporComponent, delegateEvents, renderEffect, setClass, setInsertionState, setProp, setText, template, toDisplayString, unref, useId, useSlots } from "vue";
5
5
  //#region src/components/field/useField.ts
6
+ var INTERACTIVE_LABEL_SELECTOR = [
7
+ "button",
8
+ "a[href]",
9
+ "input",
10
+ "select",
11
+ "textarea",
12
+ "[contenteditable=\"true\"]",
13
+ "[tabindex]:not([tabindex=\"-1\"])"
14
+ ].join(",");
15
+ function isInteractiveLabelTarget(target) {
16
+ return Boolean(target.closest(INTERACTIVE_LABEL_SELECTOR));
17
+ }
6
18
  function useField(props) {
7
19
  const slots = useSlots();
8
20
  const generatedId = useId();
@@ -17,6 +29,27 @@ function useField(props) {
17
29
  const hasMessage = computed(() => Boolean(messageText.value || slots.message));
18
30
  const controlLabelledby = computed(() => hasLabel.value ? labelId.value : void 0);
19
31
  const controlDescribedby = computed(() => [hasDescription.value ? descriptionId.value : void 0, hasMessage.value ? messageId.value : void 0].filter(Boolean).join(" ") || void 0);
32
+ const rootClass = computed(() => bem("rp-field", {
33
+ disabled: props.disabled,
34
+ required: props.required,
35
+ invalid: isInvalid.value
36
+ }));
37
+ const controlProps = computed(() => ({
38
+ id: controlId.value,
39
+ disabled: props.disabled || void 0,
40
+ required: props.required || void 0,
41
+ invalid: isInvalid.value || void 0,
42
+ labelledby: controlLabelledby.value,
43
+ describedby: controlDescribedby.value
44
+ }));
45
+ function focusControl(e) {
46
+ if (props.disabled) return;
47
+ const target = e.target;
48
+ if (target instanceof Element && isInteractiveLabelTarget(target)) return;
49
+ const label = e.currentTarget;
50
+ const control = label instanceof HTMLLabelElement ? label.control ?? label.ownerDocument.getElementById(controlId.value) : void 0;
51
+ if (control instanceof HTMLElement) control.focus();
52
+ }
20
53
  return {
21
54
  controlId,
22
55
  labelId,
@@ -29,29 +62,20 @@ function useField(props) {
29
62
  hasMessage,
30
63
  controlLabelledby,
31
64
  controlDescribedby,
32
- rootClass: computed(() => bem("rp-field", {
33
- disabled: props.disabled,
34
- required: props.required,
35
- invalid: isInvalid.value
36
- })),
37
- controlProps: computed(() => ({
38
- id: controlId.value,
39
- disabled: props.disabled || void 0,
40
- required: props.required || void 0,
41
- invalid: isInvalid.value || void 0,
42
- labelledby: controlLabelledby.value,
43
- describedby: controlDescribedby.value
44
- }))
65
+ rootClass,
66
+ controlProps,
67
+ focusControl
45
68
  };
46
69
  }
47
70
  //#endregion
48
71
  //#region src/components/field/field.vue?vue&type=script&setup=true&vapor=true&lang.ts
49
72
  var t0 = template(" ");
50
- var t1 = template("<span data-v-50e7f3a5 class=rp-field__required aria-hidden=true>*", 2);
51
- var t2 = template("<label data-v-50e7f3a5 class=rp-field__label>");
52
- var t3 = template("<p data-v-50e7f3a5 class=rp-field__description>");
53
- var t4 = template("<p data-v-50e7f3a5 class=rp-field__message>");
54
- var t5 = template("<div data-v-50e7f3a5><div data-v-50e7f3a5 class=rp-field__control></div>", 1);
73
+ var t1 = template("<span data-v-0d027ead class=rp-field__required aria-hidden=true>*", 2);
74
+ var t2 = template("<label data-v-0d027ead class=rp-field__label>");
75
+ var t3 = template("<p data-v-0d027ead class=rp-field__description>");
76
+ var t4 = template("<p data-v-0d027ead class=rp-field__message>");
77
+ var t5 = template("<div data-v-0d027ead><div data-v-0d027ead class=rp-field__control></div>", 1);
78
+ delegateEvents("mousedown");
55
79
  //#endregion
56
80
  //#region src/components/field/field.vue
57
81
  var field_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE__ */ defineVaporComponent({
@@ -77,7 +101,7 @@ var field_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE__
77
101
  }
78
102
  },
79
103
  setup(__props) {
80
- const { controlId, labelId, descriptionId, messageId, isInvalid, messageText, hasLabel, hasDescription, hasMessage, controlLabelledby, controlDescribedby, rootClass, controlProps } = useField(__props);
104
+ const { controlId, labelId, descriptionId, messageId, isInvalid, messageText, hasLabel, hasDescription, hasMessage, controlLabelledby, controlDescribedby, rootClass, controlProps, focusControl } = useField(__props);
81
105
  const n23 = t5();
82
106
  const n10 = child(n23, 1);
83
107
  renderEffect(() => setClass(n23, unref(rootClass)));
@@ -98,6 +122,7 @@ var field_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE__
98
122
  createIf(() => __props.required, () => {
99
123
  return t1();
100
124
  });
125
+ n8.$evtmousedown = createInvoker((e) => unref(focusControl)(e));
101
126
  return n8;
102
127
  });
103
128
  setInsertionState(n10, null, 0);
@@ -139,8 +164,6 @@ var field_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE__
139
164
  });
140
165
  return n23;
141
166
  }
142
- }), [["__scopeId", "data-v-50e7f3a5"]]);
167
+ }), [["__scopeId", "data-v-0d027ead"]]);
143
168
  //#endregion
144
169
  export { field_default as t };
145
-
146
- //# sourceMappingURL=field.js.map
@@ -64,5 +64,3 @@ var icon_button_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__
64
64
  }), [["__scopeId", "data-v-7005752e"]]);
65
65
  //#endregion
66
66
  export { icon_button_default as t };
67
-
68
- //# sourceMappingURL=icon-button.js.map