@pgcorp/ui-kit 0.10.1 → 0.10.2

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 (85) hide show
  1. package/README.md +40 -0
  2. package/dist/assets/src/components/shared/containers/SDrawer.css_vue_type_style_index_0_src_d0cace23_scoped_d0cace23_lang.css +2 -0
  3. package/dist/assets/src/components/shared/containers/{SModal.css_vue_type_style_index_0_src_64c62e90_scoped_64c62e90_lang.css → SModal.css_vue_type_style_index_0_src_dc3c799e_scoped_dc3c799e_lang.css} +1 -1
  4. package/dist/assets/src/components/shared/controls/{SButton.css_vue_type_style_index_0_src_49f356bb_scoped_49f356bb_lang.css → SButton.css_vue_type_style_index_0_src_52ad38b1_scoped_52ad38b1_lang.css} +1 -1
  5. package/dist/assets/src/components/shared/controls/{SLink.css_vue_type_style_index_0_src_fc6fdfb3_scoped_fc6fdfb3_lang.css → SLink.css_vue_type_style_index_0_src_c7ae14e1_scoped_c7ae14e1_lang.css} +1 -1
  6. package/dist/assets/src/components/shared/data-display/SCodeBlock.css_vue_type_style_index_0_src_78557968_scoped_78557968_lang.css +2 -0
  7. package/dist/assets/src/components/shared/data-display/{SCodeEditor.css_vue_type_style_index_0_src_cad79088_scoped_cad79088_lang.css → SCodeEditor.css_vue_type_style_index_0_src_124ca461_scoped_124ca461_lang.css} +1 -1
  8. package/dist/assets/src/components/shared/data-display/SCodeWorkspaceEditor.css_vue_type_style_index_0_src_b200dc8e_scoped_b200dc8e_lang.css +2 -0
  9. package/dist/assets/src/components/shared/data-display/_internal/SRichBlockNode.css_vue_type_style_index_0_src_195d5c06_scoped_195d5c06_lang.css +2 -0
  10. package/dist/assets/src/components/shared/navigation/{SBottomNav.vue_vue_type_style_index_0_scoped_a0d16ca3_lang.css → SBottomNav.vue_vue_type_style_index_0_scoped_b3963080_lang.css} +1 -1
  11. package/dist/assets/src/components/shared/navigation/{SBreadcrumbs.css_vue_type_style_index_0_src_e2c5851e_scoped_e2c5851e_lang.css → SBreadcrumbs.css_vue_type_style_index_0_src_f836963c_scoped_f836963c_lang.css} +1 -1
  12. package/dist/assets/src/components/shared/persona/_internal/SPersonaRunConsole.css_vue_type_style_index_0_src_21bf807e_scoped_21bf807e_lang.css +2 -0
  13. package/dist/index.js +4 -2
  14. package/dist/src/components/icons/_internal/generatedSputnigUiIconComponents.d.ts +243 -0
  15. package/dist/src/components/icons/_internal/generatedSputnigUiIconComponents.js +7 -0
  16. package/dist/src/components/icons/_internal/generatedSputnigUiIconMarkup.d.ts +721 -239
  17. package/dist/src/components/icons/_internal/generatedSputnigUiIconMarkup.js +244 -4
  18. package/dist/src/components/icons/_internal/sputnigUiIconRuntime.d.ts +18 -0
  19. package/dist/src/components/icons/_internal/sputnigUiIconRuntime.js +99 -0
  20. package/dist/src/components/icons/sputnigUiIcons.d.ts +5 -81
  21. package/dist/src/components/icons/sputnigUiIcons.js +238 -394
  22. package/dist/src/components/layout/SAppShell.vue.d.ts +2 -2
  23. package/dist/src/components/layout/_internal/SAppBrand.vue.d.ts +3 -3
  24. package/dist/src/components/layout/types.d.ts +2 -2
  25. package/dist/src/components/shared/_internal/SDialogSurface.vue_vue_type_script_setup_true_lang.js +1 -1
  26. package/dist/src/components/shared/_internal/SMenuItem.vue_vue_type_script_setup_true_lang.js +1 -1
  27. package/dist/src/components/shared/_internal/SToastItem.vue_vue_type_script_setup_true_lang.js +1 -1
  28. package/dist/src/components/shared/_internal/STreeNode.vue_vue_type_script_setup_true_lang.js +1 -1
  29. package/dist/src/components/shared/containers/SCloudChromeRow.vue_vue_type_script_setup_true_lang.js +44 -44
  30. package/dist/src/components/shared/containers/SDrawer.vue.d.ts +2 -0
  31. package/dist/src/components/shared/containers/SDrawer.vue.js +2 -2
  32. package/dist/src/components/shared/containers/SDrawer.vue_vue_type_script_setup_true_lang.js +3 -2
  33. package/dist/src/components/shared/containers/SModal.vue.d.ts +2 -0
  34. package/dist/src/components/shared/containers/SModal.vue.js +2 -2
  35. package/dist/src/components/shared/containers/SModal.vue_vue_type_script_setup_true_lang.js +3 -2
  36. package/dist/src/components/shared/controls/SButton.vue.d.ts +32 -2
  37. package/dist/src/components/shared/controls/SButton.vue.js +2 -2
  38. package/dist/src/components/shared/controls/SButton.vue_vue_type_script_setup_true_lang.js +77 -79
  39. package/dist/src/components/shared/controls/SCheckbox.vue_vue_type_script_setup_true_lang.js +1 -1
  40. package/dist/src/components/shared/controls/SComboboxTrigger.vue_vue_type_script_setup_true_lang.js +1 -1
  41. package/dist/src/components/shared/controls/SContextToggleButton.vue_vue_type_script_setup_true_lang.js +1 -1
  42. package/dist/src/components/shared/controls/SDragHandle.vue_vue_type_script_setup_true_lang.js +21 -21
  43. package/dist/src/components/shared/controls/SLink.vue.d.ts +17 -1
  44. package/dist/src/components/shared/controls/SLink.vue.js +2 -2
  45. package/dist/src/components/shared/controls/SLink.vue_vue_type_script_setup_true_lang.js +22 -22
  46. package/dist/src/components/shared/controls/SListboxOption.vue_vue_type_script_setup_true_lang.js +1 -1
  47. package/dist/src/components/shared/controls/STextarea.d.ts +1 -1
  48. package/dist/src/components/shared/controls/STextarea.vue.d.ts +12 -18
  49. package/dist/src/components/shared/controls/_internal/SInlineTokenSurface.vue_vue_type_script_lang.js +1 -1
  50. package/dist/src/components/shared/data-display/SActionListItem.vue.d.ts +1 -1
  51. package/dist/src/components/shared/data-display/SChip.vue_vue_type_script_setup_true_lang.js +1 -1
  52. package/dist/src/components/shared/data-display/SCodeBlock.vue.d.ts +33 -11
  53. package/dist/src/components/shared/data-display/SCodeBlock.vue.js +2 -2
  54. package/dist/src/components/shared/data-display/SCodeBlock.vue_vue_type_script_setup_true_lang.js +77 -75
  55. package/dist/src/components/shared/data-display/SCodeEditor.vue.d.ts +22 -10
  56. package/dist/src/components/shared/data-display/SCodeEditor.vue.js +2 -2
  57. package/dist/src/components/shared/data-display/SCodeEditor.vue_vue_type_script_setup_true_lang.js +44 -44
  58. package/dist/src/components/shared/data-display/SCodeSearchPanel.vue_vue_type_script_setup_true_lang.js +1 -1
  59. package/dist/src/components/shared/data-display/SCodeWorkspaceEditor.vue.js +2 -2
  60. package/dist/src/components/shared/data-display/SCodeWorkspaceEditor.vue_vue_type_script_setup_true_lang.js +3 -3
  61. package/dist/src/components/shared/data-display/SCopyField.vue_vue_type_script_setup_true_lang.js +1 -1
  62. package/dist/src/components/shared/data-display/SDocBlock.vue_vue_type_script_setup_true_lang.js +1 -1
  63. package/dist/src/components/shared/data-display/SExpandableText.vue_vue_type_script_setup_true_lang.js +1 -1
  64. package/dist/src/components/shared/data-display/SMessage.vue_vue_type_script_setup_true_lang.js +1 -1
  65. package/dist/src/components/shared/data-display/STable.vue_vue_type_script_setup_true_lang.js +1 -1
  66. package/dist/src/components/shared/data-display/_internal/SRichBlockNode.vue.js +2 -2
  67. package/dist/src/components/shared/data-display/_internal/SRichBlockNode.vue_vue_type_script_setup_true_lang.js +2 -2
  68. package/dist/src/components/shared/database/SSqlEditor.vue_vue_type_script_setup_true_lang.js +7 -10
  69. package/dist/src/components/shared/navigation/SBottomNav.vue.js +2 -2
  70. package/dist/src/components/shared/navigation/SBottomNav.vue_vue_type_script_setup_true_lang.js +70 -68
  71. package/dist/src/components/shared/navigation/SBreadcrumbs.vue.js +2 -2
  72. package/dist/src/components/shared/navigation/SBreadcrumbs.vue_vue_type_script_setup_true_lang.js +20 -21
  73. package/dist/src/components/shared/persona/SPersonaProjectPicker.vue_vue_type_script_setup_true_lang.js +1 -1
  74. package/dist/src/components/shared/persona/_internal/SPersonaRunConsole.vue.js +2 -2
  75. package/dist/src/components/shared/persona/_internal/SPersonaRunConsole.vue_vue_type_script_setup_true_lang.js +6 -3
  76. package/dist/src/composables/useDialogOverlay.d.ts +2 -0
  77. package/dist/src/composables/useDialogOverlay.js +14 -7
  78. package/dist/src/internal/feedbackPresentation.js +1 -1
  79. package/docs/versioning.md +38 -10
  80. package/package.json +1 -1
  81. package/dist/assets/src/components/shared/containers/SDrawer.css_vue_type_style_index_0_src_1226da98_scoped_1226da98_lang.css +0 -2
  82. package/dist/assets/src/components/shared/data-display/SCodeBlock.css_vue_type_style_index_0_src_aad45526_scoped_aad45526_lang.css +0 -2
  83. package/dist/assets/src/components/shared/data-display/SCodeWorkspaceEditor.css_vue_type_style_index_0_src_864bce1d_scoped_864bce1d_lang.css +0 -2
  84. package/dist/assets/src/components/shared/data-display/_internal/SRichBlockNode.css_vue_type_style_index_0_src_63180598_scoped_63180598_lang.css +0 -2
  85. package/dist/assets/src/components/shared/persona/_internal/SPersonaRunConsole.css_vue_type_style_index_0_src_c71f59d4_scoped_c71f59d4_lang.css +0 -2
@@ -4,9 +4,9 @@ import { useOwnedAttrs as n } from "../../../internal/ownedAttrs.js";
4
4
  import r from "../data-display/SBadge.vue.js";
5
5
  import { resolveLinkTarget as i } from "../../../internal/linkTarget.js";
6
6
  import a from "../controls/SButton.vue.js";
7
- import o from "../controls/SLink.vue.js";
8
- import ee from "../controls/SMenuSurface.vue.js";
9
- import { Fragment as te, computed as s, createBlock as c, createCommentVNode as l, createElementBlock as u, createElementVNode as d, createTextVNode as ne, createVNode as f, defineComponent as p, mergeProps as re, nextTick as ie, onBeforeUnmount as ae, onMounted as oe, openBlock as m, ref as h, renderList as se, renderSlot as ce, toDisplayString as g, unref as _, useId as le, watch as v, withCtx as y } from "vue";
7
+ import ee from "../controls/SLink.vue.js";
8
+ import te from "../controls/SMenuSurface.vue.js";
9
+ import { Fragment as ne, computed as o, createBlock as s, createCommentVNode as c, createElementBlock as l, createElementVNode as u, createTextVNode as re, createVNode as d, defineComponent as f, mergeProps as p, nextTick as m, onBeforeUnmount as ie, onMounted as ae, openBlock as h, ref as g, renderList as oe, renderSlot as se, toDisplayString as _, unref as ce, useId as le, watch as v, withCtx as y } from "vue";
10
10
  //#region src/components/shared/navigation/SBottomNav.vue?vue&type=script&setup=true&lang.ts
11
11
  var ue = ["aria-label"], de = { class: "s-bottom-nav__items" }, fe = { key: 0 }, pe = {
12
12
  key: 2,
@@ -14,7 +14,7 @@ var ue = ["aria-label"], de = { class: "s-bottom-nav__items" }, fe = { key: 0 },
14
14
  }, me = {
15
15
  key: 0,
16
16
  class: "s-bottom-nav__status"
17
- }, b = /*@__PURE__*/ p({
17
+ }, b = /*@__PURE__*/ f({
18
18
  inheritAttrs: !1,
19
19
  __name: "SBottomNav",
20
20
  props: {
@@ -37,11 +37,19 @@ var ue = ["aria-label"], de = { class: "s-bottom-nav__items" }, fe = { key: 0 },
37
37
  "navigate",
38
38
  "layout-change"
39
39
  ],
40
- setup(p, { emit: b }) {
41
- let x = p, S = b, he = n({
40
+ setup(f, { emit: b }) {
41
+ let x = f, S = b, he = n({
42
42
  component: "SBottomNav",
43
43
  owner: "navigation root"
44
- }), C = s(() => x.iconOnly), w = le(), T = h(null), E = h(null), D = h(!1), O = h(null), k = /* @__PURE__ */ new Map(), A = /* @__PURE__ */ new Map(), j = 0, M = s(() => x.items.filter((e) => e.kind === "overflow")), N = s(() => M.value.find((e) => e.id === O.value) ?? null), ge = s(() => {
44
+ }), ge = (e) => e.href === void 0 ? {
45
+ to: e.to,
46
+ ...e.target === void 0 ? {} : { target: e.target },
47
+ ...e.rel === void 0 ? {} : { rel: e.rel }
48
+ } : {
49
+ href: e.href,
50
+ ...e.target === void 0 ? {} : { target: e.target },
51
+ ...e.rel === void 0 ? {} : { rel: e.rel }
52
+ }, C = o(() => x.iconOnly), w = le(), T = g(null), E = g(null), D = g(!1), O = g(null), k = /* @__PURE__ */ new Map(), A = /* @__PURE__ */ new Map(), j = 0, M = o(() => x.items.filter((e) => e.kind === "overflow")), N = o(() => M.value.find((e) => e.id === O.value) ?? null), _e = o(() => {
45
53
  let e = N.value;
46
54
  return e ? e.items.map((e) => e.kind === "destination" ? {
47
55
  ...e,
@@ -60,7 +68,7 @@ var ue = ["aria-label"], de = { class: "s-bottom-nav__items" }, fe = { key: 0 },
60
68
  if (t !== void 0) return t;
61
69
  let n = j;
62
70
  return j += 1, A.set(e.id, n), n;
63
- }, B = (e) => `s-bottom-nav-${w}-overflow-${z(e)}-trigger`, V = (e) => `s-bottom-nav-${w}-overflow-${z(e)}-menu`, _e = (e, t) => {
71
+ }, B = (e) => `s-bottom-nav-${w}-overflow-${z(e)}-trigger`, V = (e) => `s-bottom-nav-${w}-overflow-${z(e)}-menu`, ve = (e, t) => {
64
72
  if (e.kind === "overflow") {
65
73
  if (t === null) {
66
74
  k.delete(e.id);
@@ -77,10 +85,10 @@ var ue = ["aria-label"], de = { class: "s-bottom-nav__items" }, fe = { key: 0 },
77
85
  let r = B(e);
78
86
  if (n.id !== r) throw Error(`SBottomNav: overflow trigger '${e.id}' owns id '${n.id}', expected '${r}'`);
79
87
  return n;
80
- }, U = (e) => !!(e.disabled || e.kind === "overflow" && e.items.length === 0), W = (e) => U(e) || e.kind === "action" ? !1 : e.kind === "destination" || e.kind === "view" ? x.modelValue === e.id : O.value === e.id || e.items.some((e) => (e.kind === "destination" || e.kind === "view") && !e.disabled && e.id === x.modelValue), ve = (e, t) => (e.target ?? "_self") === "_self" ? t instanceof MouseEvent ? t.button === 0 && !t.altKey && !t.ctrlKey && !t.metaKey && !t.shiftKey : !0 : !1, G = (e, t) => {
88
+ }, U = (e) => !!(e.disabled || e.kind === "overflow" && e.items.length === 0), W = (e) => U(e) || e.kind === "action" ? !1 : e.kind === "destination" || e.kind === "view" ? x.modelValue === e.id : O.value === e.id || e.items.some((e) => (e.kind === "destination" || e.kind === "view") && !e.disabled && e.id === x.modelValue), ye = (e, t) => (e.target ?? "_self") === "_self" ? t instanceof MouseEvent ? t.button === 0 && !t.altKey && !t.ctrlKey && !t.metaKey && !t.shiftKey : !0 : !1, G = (e, t) => {
81
89
  if (!e.disabled) {
82
90
  if (e.kind === "destination") {
83
- S("navigate", e, t), ve(e, t) && S("update:modelValue", e.id);
91
+ S("navigate", e, t), ye(e, t) && S("update:modelValue", e.id);
84
92
  return;
85
93
  }
86
94
  if (e.kind === "view") {
@@ -102,9 +110,9 @@ var ue = ["aria-label"], de = { class: "s-bottom-nav__items" }, fe = { key: 0 },
102
110
  restoreTarget: n,
103
111
  requestDismiss: (e) => K(e === "escape")
104
112
  });
105
- }, ye = (e, t) => {
106
- K(!1), G(t, e);
107
113
  }, be = (e, t) => {
114
+ K(!1), G(t, e);
115
+ }, xe = (e, t) => {
108
116
  if (!U(e)) {
109
117
  if (e.kind === "overflow") {
110
118
  O.value === e.id ? K(!0) : q(e);
@@ -112,65 +120,65 @@ var ue = ["aria-label"], de = { class: "s-bottom-nav__items" }, fe = { key: 0 },
112
120
  }
113
121
  K(!1), G(e, t);
114
122
  }
115
- }, xe = (e, t) => {
123
+ }, Se = (e, t) => {
116
124
  e.key !== "ArrowDown" || t.kind !== "overflow" || U(t) || (e.preventDefault(), q(t));
117
- }, J = (e, t) => {
125
+ }, Ce = (e, t) => {
118
126
  if (e.kind !== "action" && e.kind !== "destination") throw TypeError(`SBottomNav: overflow menu accepts action/destination entries, received '${e.kind}'`);
119
127
  let n = N.value;
120
128
  if (!n) throw Error(`SBottomNav: selected menu entry '${e.id}' without an active overflow`);
121
129
  let r = n.items.find((t) => t.id === e.id);
122
130
  if (!r) throw Error(`SBottomNav: selected unknown overflow entry '${e.id}'`);
123
131
  r.disabled || (G(r, t), K(!0));
124
- }, Se = (e) => {
132
+ }, we = (e) => {
125
133
  if (!N.value) return;
126
134
  let t = e.relatedTarget;
127
135
  t instanceof Node && T.value?.contains(t) || K(!1);
128
- }, Ce = (t) => {
136
+ }, Te = (t) => {
129
137
  let n = N.value;
130
138
  if (!n) return;
131
139
  let r = H(n), i = F?.focusScope() ?? document, a = e(r, i, E.value, t.shiftKey);
132
- t.preventDefault(), K(!1), a && ie(() => a.focus());
133
- }, Y = (e) => {
140
+ t.preventDefault(), K(!1), a && m(() => a.focus());
141
+ }, J = (e) => {
134
142
  if (!x.scrollTargetId || typeof window > "u" || typeof document > "u") return;
135
143
  let t = e.target, n = 0;
136
144
  if (t instanceof HTMLElement && t.id === x.scrollTargetId) n = t.scrollTop || 0;
137
145
  else if (t === document && document.documentElement.id === x.scrollTargetId) n = document.documentElement.scrollTop || document.body.scrollTop || 0;
138
146
  else return;
139
147
  n > P + 10 ? D.value = !0 : n < P - 5 && (D.value = !1), P = n;
140
- }, X = [
148
+ }, Y = [
141
149
  "kind",
142
150
  "id",
143
151
  "label",
144
152
  "icon",
145
153
  "badge",
146
154
  "disabled"
147
- ], we = {
148
- action: new Set(X),
155
+ ], Ee = {
156
+ action: new Set(Y),
149
157
  destination: /* @__PURE__ */ new Set([
150
- ...X,
158
+ ...Y,
151
159
  "href",
152
160
  "to",
153
161
  "target",
154
162
  "rel"
155
163
  ]),
156
- view: new Set(X),
164
+ view: new Set(Y),
157
165
  overflow: /* @__PURE__ */ new Set([
158
- ...X,
166
+ ...Y,
159
167
  "menuLabel",
160
168
  "items"
161
169
  ])
162
170
  };
163
- function Z(e, t) {
171
+ function X(e, t) {
164
172
  if (typeof e != "object" || !e || Array.isArray(e)) throw TypeError(`SBottomNav: ${t} must be an object`);
165
173
  }
166
- function Te(e, t) {
174
+ function De(e, t) {
167
175
  let n = e.kind;
168
176
  if (n !== "action" && n !== "destination" && n !== "view") throw TypeError(`SBottomNav: ${t}.kind must be action, destination, or view`);
169
- return Q(e, t, n), n;
177
+ return Z(e, t, n), n;
170
178
  }
171
- function Q(e, t, n) {
179
+ function Z(e, t, n) {
172
180
  for (let r of Reflect.ownKeys(e)) {
173
- if (typeof r != "string" || !we[n].has(r)) throw TypeError(`SBottomNav: ${t} has unsupported field ${String(r)}`);
181
+ if (typeof r != "string" || !Ee[n].has(r)) throw TypeError(`SBottomNav: ${t} has unsupported field ${String(r)}`);
174
182
  let i = Object.getOwnPropertyDescriptor(e, r);
175
183
  if (!i?.enumerable || !("value" in i)) throw TypeError(`SBottomNav: ${t}.${r} must be an enumerable data property`);
176
184
  }
@@ -187,15 +195,15 @@ var ue = ["aria-label"], de = { class: "s-bottom-nav__items" }, fe = { key: 0 },
187
195
  rel: e.rel
188
196
  });
189
197
  }
190
- function Ee(e) {
198
+ function Q(e) {
191
199
  if (!Array.isArray(e) || e.length === 0) throw TypeError("SBottomNav: items must be a non-empty array");
192
200
  let t = /* @__PURE__ */ new Set();
193
201
  for (let [n, r] of e.entries()) {
194
202
  let e = `items[${n}]`;
195
- Z(r, e);
203
+ X(r, e);
196
204
  let i = r.kind;
197
205
  if (i !== "action" && i !== "destination" && i !== "view" && i !== "overflow") throw TypeError(`SBottomNav: ${e}.kind must be action, destination, view, or overflow`);
198
- Q(r, e, i);
206
+ Z(r, e, i);
199
207
  let a = r.id;
200
208
  if (typeof a != "string") throw TypeError(`SBottomNav: ${e}.id must be a string`);
201
209
  if (t.has(a)) throw TypeError(`SBottomNav: duplicate item id '${a}'`);
@@ -204,7 +212,7 @@ var ue = ["aria-label"], de = { class: "s-bottom-nav__items" }, fe = { key: 0 },
204
212
  if (!Array.isArray(r.items)) throw TypeError(`SBottomNav: ${e}.items must be an array`);
205
213
  for (let [n, i] of r.items.entries()) {
206
214
  let r = `${e}.items[${n}]`;
207
- Z(i, r), Te(i, r);
215
+ X(i, r), De(i, r);
208
216
  let a = i.id;
209
217
  if (typeof a != "string") throw TypeError(`SBottomNav: ${r}.id must be a string`);
210
218
  if (t.has(a)) throw TypeError(`SBottomNav: duplicate item id '${a}'`);
@@ -222,8 +230,8 @@ var ue = ["aria-label"], de = { class: "s-bottom-nav__items" }, fe = { key: 0 },
222
230
  };
223
231
  R && R.hidden === t.hidden && R.height === t.height || (R = t, S("layout-change", t));
224
232
  };
225
- return oe(() => {
226
- D.value = x.hidden ?? !1, typeof document < "u" && document.addEventListener("scroll", Y, {
233
+ return ae(() => {
234
+ D.value = x.hidden ?? !1, typeof document < "u" && document.addEventListener("scroll", J, {
227
235
  passive: !0,
228
236
  capture: !0
229
237
  }), typeof ResizeObserver < "u" && T.value ? (I = new ResizeObserver($), I.observe(T.value)) : typeof window < "u" && (L = !0, window.addEventListener("resize", $)), $();
@@ -234,7 +242,7 @@ var ue = ["aria-label"], de = { class: "s-bottom-nav__items" }, fe = { key: 0 },
234
242
  }), v(() => x.modelValue, () => {
235
243
  K(!1), D.value = x.hidden ?? !1, P = 0, $();
236
244
  }), v(() => x.items, () => {
237
- if (Ee(x.items), O.value) {
245
+ if (Q(x.items), O.value) {
238
246
  let e = M.value.find((e) => e.id === O.value);
239
247
  (!e || U(e)) && K(!1);
240
248
  }
@@ -246,25 +254,23 @@ var ue = ["aria-label"], de = { class: "s-bottom-nav__items" }, fe = { key: 0 },
246
254
  if (typeof e != "string" || !e.trim()) throw TypeError("SBottomNav: label must be non-empty");
247
255
  if (typeof t != "string" || !t.trim()) throw TypeError("SBottomNav: modelValue must be a non-empty destination id");
248
256
  if (n !== void 0 && (typeof n != "string" || !n.trim())) throw TypeError("SBottomNav: scrollTargetId must be a non-empty string when provided");
249
- }, { immediate: !0 }), ae(() => {
250
- typeof document < "u" && document.removeEventListener("scroll", Y, { capture: !0 }), I?.disconnect(), I = null, L && typeof window < "u" && window.removeEventListener("resize", $), L = !1, F?.unregister({ restoreFocus: !1 }), F = null, k.clear(), A.clear();
251
- }), (e, t) => (m(), u("nav", re({
257
+ }, { immediate: !0 }), ie(() => {
258
+ typeof document < "u" && document.removeEventListener("scroll", J, { capture: !0 }), I?.disconnect(), I = null, L && typeof window < "u" && window.removeEventListener("resize", $), L = !1, F?.unregister({ restoreFocus: !1 }), F = null, k.clear(), A.clear();
259
+ }), (e, t) => (h(), l("nav", p({
252
260
  ref_key: "navRef",
253
261
  ref: T
254
- }, _(he).bindings(), {
262
+ }, ce(he).bindings(), {
255
263
  class: ["s-bottom-nav", { "s-bottom-nav--hidden": D.value }],
256
264
  "data-test": "bottom-nav",
257
- "aria-label": p.label,
258
- onFocusout: Se
259
- }), [d("div", de, [(m(!0), u(te, null, se(p.items, (e) => (m(), u("div", {
265
+ "aria-label": f.label,
266
+ onFocusout: we
267
+ }), [u("div", de, [(h(!0), l(ne, null, oe(f.items, (e) => (h(), l("div", {
260
268
  key: e.id,
261
269
  class: "s-bottom-nav__item"
262
- }, [e.kind === "destination" ? (m(), c(o, {
270
+ }, [e.kind === "destination" ? (h(), s(ee, p({
263
271
  key: 0,
264
- href: e.href,
265
- to: e.to,
266
- target: e.target,
267
- rel: e.rel,
272
+ ref_for: !0
273
+ }, ge(e), {
268
274
  "leading-icon": e.icon,
269
275
  disabled: e.disabled,
270
276
  active: W(e),
@@ -272,25 +278,21 @@ var ue = ["aria-label"], de = { class: "s-bottom-nav__items" }, fe = { key: 0 },
272
278
  width: "full",
273
279
  "aria-label": C.value ? e.label : void 0,
274
280
  "data-testid": `bottom-nav-${e.id}`,
275
- onClick: (t) => ye(t, e)
276
- }, {
277
- default: y(() => [C.value ? l("", !0) : (m(), u("span", fe, g(e.label), 1))]),
281
+ onClick: (t) => be(t, e)
282
+ }), {
283
+ default: y(() => [C.value ? c("", !0) : (h(), l("span", fe, _(e.label), 1))]),
278
284
  _: 2
279
- }, 1032, [
280
- "href",
281
- "to",
282
- "target",
283
- "rel",
285
+ }, 1040, [
284
286
  "leading-icon",
285
287
  "disabled",
286
288
  "active",
287
289
  "aria-label",
288
290
  "data-testid",
289
291
  "onClick"
290
- ])) : (m(), c(a, {
292
+ ])) : (h(), s(a, {
291
293
  key: 1,
292
294
  ref_for: !0,
293
- ref: (t) => _e(e, t),
295
+ ref: (t) => ve(e, t),
294
296
  label: C.value ? void 0 : e.label,
295
297
  "leading-icon": e.icon,
296
298
  "icon-only": C.value,
@@ -311,8 +313,8 @@ var ue = ["aria-label"], de = { class: "s-bottom-nav__items" }, fe = { key: 0 },
311
313
  } : void 0,
312
314
  "data-test": `bottom-nav-${e.id}`,
313
315
  "data-testid": `bottom-nav-${e.id}`,
314
- onClick: (t) => be(e, t),
315
- onKeydown: (t) => xe(t, e)
316
+ onClick: (t) => xe(e, t),
317
+ onKeydown: (t) => Se(t, e)
316
318
  }, null, 8, [
317
319
  "label",
318
320
  "leading-icon",
@@ -329,34 +331,34 @@ var ue = ["aria-label"], de = { class: "s-bottom-nav__items" }, fe = { key: 0 },
329
331
  "data-testid",
330
332
  "onClick",
331
333
  "onKeydown"
332
- ])), e.badge === void 0 ? l("", !0) : (m(), u("span", pe, [f(r, {
334
+ ])), e.badge === void 0 ? c("", !0) : (h(), l("span", pe, [d(r, {
333
335
  severity: "danger",
334
336
  size: "xs"
335
337
  }, {
336
- default: y(() => [ne(g(e.badge), 1)]),
338
+ default: y(() => [re(_(e.badge), 1)]),
337
339
  _: 2
338
- }, 1024)]))]))), 128)), N.value ? (m(), u("div", {
340
+ }, 1024)]))]))), 128)), N.value ? (h(), l("div", {
339
341
  key: 0,
340
342
  ref_key: "overflowLayerRef",
341
343
  ref: E,
342
344
  class: "s-bottom-nav__overflow-layer",
343
345
  "data-test": "bottom-nav-overflow"
344
- }, [f(ee, {
346
+ }, [d(te, {
345
347
  id: V(N.value),
346
348
  label: N.value.menuLabel,
347
349
  density: "compact",
348
350
  orientation: "horizontal",
349
351
  autofocus: "",
350
- items: ge.value,
352
+ items: _e.value,
351
353
  onEscape: t[0] ||= (e) => K(!0),
352
354
  onFocusExit: t[1] ||= (e) => K(!1),
353
- onSelect: J,
354
- onTab: Ce
355
+ onSelect: Ce,
356
+ onTab: Te
355
357
  }, null, 8, [
356
358
  "id",
357
359
  "label",
358
360
  "items"
359
- ])], 512)) : l("", !0)]), e.$slots.status ? (m(), u("div", me, [ce(e.$slots, "status", {}, void 0, !0)])) : l("", !0)], 16, ue));
361
+ ])], 512)) : c("", !0)]), e.$slots.status ? (h(), l("div", me, [se(e.$slots, "status", {}, void 0, !0)])) : c("", !0)], 16, ue));
360
362
  }
361
363
  });
362
364
  //#endregion
@@ -1,8 +1,8 @@
1
- import "../../../../assets/src/components/shared/navigation/SBreadcrumbs.css_vue_type_style_index_0_src_e2c5851e_scoped_e2c5851e_lang.css";
1
+ import "../../../../assets/src/components/shared/navigation/SBreadcrumbs.css_vue_type_style_index_0_src_f836963c_scoped_f836963c_lang.css";
2
2
  import e from "../../../../_virtual/_plugin-vue_export-helper.js";
3
3
  import t from "./SBreadcrumbs.vue_vue_type_script_setup_true_lang.js";
4
4
  /* empty css */
5
5
  //#region src/components/shared/navigation/SBreadcrumbs.vue
6
- var n = /*#__PURE__*/ e(t, [["__scopeId", "data-v-e2c5851e"]]);
6
+ var n = /*#__PURE__*/ e(t, [["__scopeId", "data-v-f836963c"]]);
7
7
  //#endregion
8
8
  export { n as default };
@@ -1,4 +1,4 @@
1
- import { ChevronRight as e } from "../../icons/sputnigUiIcons.js";
1
+ import { ChevronRight as e } from "../../icons/_internal/generatedSputnigUiIconComponents.js";
2
2
  import { useUiKitLocale as t } from "../../../composables/useUiKitLocale.js";
3
3
  import { useOwnedAttrs as n } from "../../../internal/ownedAttrs.js";
4
4
  import { resolveLinkTarget as r } from "../../../internal/linkTarget.js";
@@ -22,7 +22,15 @@ var x = ["aria-label"], S = { class: "s-breadcrumbs__list" }, C = {
22
22
  let T = p, { t: E } = t(), D = s(() => T.ariaLabel ?? E("navigation.breadcrumbs")), O = w, k = n({
23
23
  component: "SBreadcrumbs",
24
24
  owner: "breadcrumb navigation root"
25
- }), A = {
25
+ }), A = (e) => e.href === void 0 ? {
26
+ to: e.to,
27
+ ...e.target === void 0 ? {} : { target: e.target },
28
+ ...e.rel === void 0 ? {} : { rel: e.rel }
29
+ } : {
30
+ href: e.href,
31
+ ...e.target === void 0 ? {} : { target: e.target },
32
+ ...e.rel === void 0 ? {} : { rel: e.rel }
33
+ }, j = {
26
34
  action: /* @__PURE__ */ new Set([
27
35
  "kind",
28
36
  "id",
@@ -45,20 +53,20 @@ var x = ["aria-label"], S = { class: "s-breadcrumbs__list" }, C = {
45
53
  "rel"
46
54
  ])
47
55
  };
48
- function j(e, t) {
56
+ function M(e, t) {
49
57
  if (typeof e != "object" || !e || Array.isArray(e)) throw TypeError(`SBreadcrumbs: ${t} must be an object`);
50
58
  }
51
- function M() {
59
+ function N() {
52
60
  if (!D.value.trim()) throw TypeError("SBreadcrumbs: ariaLabel must be a non-empty string");
53
61
  if (!Array.isArray(T.items) || T.items.length === 0) throw TypeError("SBreadcrumbs: items must be a non-empty array");
54
62
  let e = /* @__PURE__ */ new Set(), t = -1;
55
63
  for (let [n, i] of T.items.entries()) {
56
64
  let a = `items[${n}]`;
57
- j(i, a);
65
+ M(i, a);
58
66
  let o = i.kind;
59
67
  if (o !== "action" && o !== "current" && o !== "destination") throw TypeError(`SBreadcrumbs: ${a}.kind must be action, current, or destination`);
60
68
  for (let e of Reflect.ownKeys(i)) {
61
- if (typeof e != "string" || !A[o].has(e)) throw TypeError(`SBreadcrumbs: ${a} has unsupported field '${String(e)}'`);
69
+ if (typeof e != "string" || !j[o].has(e)) throw TypeError(`SBreadcrumbs: ${a} has unsupported field '${String(e)}'`);
62
70
  let t = Object.getOwnPropertyDescriptor(i, e);
63
71
  if (!t?.enumerable || !("value" in t)) throw TypeError(`SBreadcrumbs: ${a}.${e} must be an enumerable data property`);
64
72
  }
@@ -79,7 +87,7 @@ var x = ["aria-label"], S = { class: "s-breadcrumbs__list" }, C = {
79
87
  }
80
88
  if (t !== T.items.length - 1) throw TypeError("SBreadcrumbs: the sole current item must be last");
81
89
  }
82
- return y(() => [T.items, D.value], M, {
90
+ return y(() => [T.items, D.value], N, {
83
91
  immediate: !0,
84
92
  deep: !0
85
93
  }), (t, n) => (h(), u("nav", m(v(k).bindings(), {
@@ -92,27 +100,18 @@ var x = ["aria-label"], S = { class: "s-breadcrumbs__list" }, C = {
92
100
  key: 0,
93
101
  class: "s-breadcrumbs__divider",
94
102
  "aria-hidden": "true"
95
- })) : l("", !0), t.kind === "current" ? (h(), u("span", C, _(t.label), 1)) : t.kind === "destination" ? (h(), c(a, {
103
+ })) : l("", !0), t.kind === "current" ? (h(), u("span", C, _(t.label), 1)) : t.kind === "destination" ? (h(), c(a, m({
96
104
  key: 2,
97
- href: t.href,
98
- to: t.to,
99
- target: t.target,
100
- rel: t.rel,
105
+ ref_for: !0
106
+ }, A(t), {
101
107
  variant: "subtle",
102
108
  size: "sm",
103
109
  disabled: t.disabled,
104
110
  onClick: (e) => O("navigate", t, e)
105
- }, {
111
+ }), {
106
112
  default: b(() => [f(_(t.label), 1)]),
107
113
  _: 2
108
- }, 1032, [
109
- "href",
110
- "to",
111
- "target",
112
- "rel",
113
- "disabled",
114
- "onClick"
115
- ])) : (h(), c(i, {
114
+ }, 1040, ["disabled", "onClick"])) : (h(), c(i, {
116
115
  key: 3,
117
116
  label: t.label,
118
117
  disabled: t.disabled,
@@ -1,4 +1,4 @@
1
- import { Check as e, ChevronRight as t, Folder as n, FolderSearch as r, FolderTree as i, RefreshCw as a } from "../../icons/sputnigUiIcons.js";
1
+ import { Check as e, ChevronRight as t, Folder as n, FolderSearch as r, FolderTree as i, RefreshCw as a } from "../../icons/_internal/generatedSputnigUiIconComponents.js";
2
2
  import { useUiKitLocale as o } from "../../../composables/useUiKitLocale.js";
3
3
  import { useOwnedAttrs as s } from "../../../internal/ownedAttrs.js";
4
4
  import ee from "../data-display/SBadge.vue.js";
@@ -1,8 +1,8 @@
1
- import "../../../../../assets/src/components/shared/persona/_internal/SPersonaRunConsole.css_vue_type_style_index_0_src_c71f59d4_scoped_c71f59d4_lang.css";
1
+ import "../../../../../assets/src/components/shared/persona/_internal/SPersonaRunConsole.css_vue_type_style_index_0_src_21bf807e_scoped_21bf807e_lang.css";
2
2
  import e from "../../../../../_virtual/_plugin-vue_export-helper.js";
3
3
  import t from "./SPersonaRunConsole.vue_vue_type_script_setup_true_lang.js";
4
4
  /* empty css */
5
5
  //#region src/components/shared/persona/_internal/SPersonaRunConsole.vue
6
- var n = /*#__PURE__*/ e(t, [["__scopeId", "data-v-c71f59d4"]]);
6
+ var n = /*#__PURE__*/ e(t, [["__scopeId", "data-v-21bf807e"]]);
7
7
  //#endregion
8
8
  export { n as default };
@@ -223,12 +223,15 @@ var D = { class: "s-persona-run-console-shell" }, O = ["data-density"], k = { cl
223
223
  S.reportSummary ? (C(), g(o, {
224
224
  key: 3,
225
225
  code: S.reportSummary,
226
- language: { id: "plaintext" },
226
+ language: {
227
+ mode: "explicit",
228
+ id: "plaintext"
229
+ },
227
230
  "show-header": !1,
228
231
  "show-line-numbers": !1,
229
232
  viewport: "compact",
230
- "aria-label": S.resolvedLabels.reportSummary
231
- }, null, 8, ["code", "aria-label"])) : _("", !0),
233
+ ariaLabel: S.resolvedLabels.reportSummary
234
+ }, null, 8, ["code", "ariaLabel"])) : _("", !0),
232
235
  x(l, {
233
236
  title: S.resolvedLabels.eventsTitle,
234
237
  size: "sm"
@@ -3,6 +3,8 @@ export interface DialogOverlayOptions {
3
3
  open: Readonly<Ref<boolean>>;
4
4
  closable: Readonly<Ref<boolean>>;
5
5
  requestClose: () => void;
6
+ /** Runs after the mounted surface owns focus for the current open cycle. */
7
+ opened?: () => void;
6
8
  }
7
9
  export interface DialogOverlayController {
8
10
  panelRef: Ref<HTMLElement | null>;
@@ -3,13 +3,13 @@ import { registerLayer as t } from "../internal/layerStack.js";
3
3
  import { nextTick as n, onBeforeUnmount as r, ref as i, watch as a } from "vue";
4
4
  //#region src/composables/useDialogOverlay.ts
5
5
  function o(o) {
6
- let s = i(null), c = i({}), l = i({}), u = null, d = (e) => {
6
+ let s = i(null), c = i({}), l = i({}), u = null, d = 0, f = (e) => {
7
7
  if (e === null || e instanceof HTMLElement) {
8
8
  s.value = e;
9
9
  return;
10
10
  }
11
11
  throw TypeError("Dialog overlay panel ref обязан указывать на HTMLElement");
12
- }, f = () => {
12
+ }, p = () => {
13
13
  if (u) return;
14
14
  let n = typeof document < "u" && document.activeElement instanceof HTMLElement ? document.activeElement : null;
15
15
  u = t({
@@ -22,18 +22,25 @@ function o(o) {
22
22
  trapFocus: (t) => e(t, s, !0),
23
23
  requestDismiss: () => o.requestClose()
24
24
  }), c.value = { zIndex: u.zIndex }, l.value = { zIndex: `calc(${u.zIndex} + var(--s-layer-overlay-surface-offset))` };
25
- }, p = (e = !0) => {
25
+ }, m = (e = !0) => {
26
26
  u?.unregister({ restoreFocus: e }), u = null, c.value = {}, l.value = {};
27
27
  };
28
28
  return a(o.open, async (e, t) => {
29
+ d += 1;
30
+ let r = d;
29
31
  if (e) {
30
- f(), await n(), o.open.value && s.value?.focus();
32
+ if (p(), await n(), r !== d || !o.open.value || u === null) return;
33
+ let e = s.value;
34
+ if (!e) return;
35
+ e.focus(), r === d && o.open.value && u !== null && o.opened?.();
31
36
  return;
32
37
  }
33
- p(!!t);
34
- }, { immediate: !0 }), r(() => p(!1)), {
38
+ m(!!t);
39
+ }, { immediate: !0 }), r(() => {
40
+ d += 1, m(!1);
41
+ }), {
35
42
  panelRef: s,
36
- setPanelElement: d,
43
+ setPanelElement: f,
37
44
  backdropStyle: c,
38
45
  surfaceStyle: l
39
46
  };
@@ -1,5 +1,5 @@
1
1
  import { UI_KIT_MESSAGES as e, createUiKitTranslate as t } from "../locales/messages.js";
2
- import { AlertTriangle as n, CheckCircle2 as r, Info as i, LoaderCircle as a, XCircle as o } from "../components/icons/sputnigUiIcons.js";
2
+ import { AlertTriangle as n, CheckCircle2 as r, Info as i, LoaderCircle as a, XCircle as o } from "../components/icons/_internal/generatedSputnigUiIconComponents.js";
3
3
  //#region src/internal/feedbackPresentation.ts
4
4
  var s = {
5
5
  neutral: {
@@ -16,11 +16,15 @@ consumer builds и browser proof. Один и тот же номер верси
16
16
  Корневая команда `make ui-kit-release-check` выполняет последовательность:
17
17
 
18
18
  1. release contract;
19
- 2. полный LVS consumer gate;
20
- 3. полный CSS consumer gate;
21
- 4. полный TestOps consumer gate;
22
- 5. smoke опубликованного package boundary;
23
- 6. dependency audit.
19
+ 2. LVS backend;
20
+ 3. LVS frontend static quality;
21
+ 4. LVS frontend unit coverage;
22
+ 5. LVS Storybook/browser proof;
23
+ 6. LVS product end-to-end proof;
24
+ 7. полный CSS consumer gate;
25
+ 8. полный TestOps consumer gate;
26
+ 9. smoke опубликованного package boundary;
27
+ 10. dependency audit.
24
28
 
25
29
  Успешная стадия получает receipt с хешем tracked inputs, своей командой,
26
30
  релевантными версиями toolchain, конфигурацией workers/окружения и fingerprints
@@ -29,12 +33,23 @@ dependency manifest или lock-файла, команды, применимог
29
33
  конфигурации инвалидирует соответствующую стадию; зависящие от неё стадии также
30
34
  выполняются повторно. Независимые совместимые receipts сохраняются. Dependency
31
35
  audit действителен шесть часов, потому что состояние advisory registry является
32
- внешним входом.
36
+ внешним входом. Его dependency fingerprint исключает только release metadata
37
+ (`name`/`version`) собственного workspace; изменение dependency fields или
38
+ разрешённого графа lock-файла всегда требует нового audit.
33
39
 
34
40
  `make ui-kit-release-proof-verify` проверяет полный набор receipts для точного Git
35
41
  commit/tree. Release artifact содержит digest этого proof и публикуется только
36
42
  командой `make ui-kit-publish`. Ручного пропуска стадий в release contract нет.
37
43
 
44
+ Для нового release tree используется `make ui-kit-release-proof-staged`. Команда
45
+ требует, чтобы все tracked-изменения были добавлены в index, а untracked и
46
+ unstaged-файлы отсутствовали. До и после каждой стадии проверяется точный
47
+ `git write-tree`, поэтому proof нельзя случайно получить для меняющегося набора
48
+ файлов. После коммита этого же дерева `make ui-kit-release-proof-verify` принимает
49
+ staged proof без повторного запуска зелёных стадий. Другой итоговый tree,
50
+ изменение зависимости, lock-файла, применимого toolchain или переменной окружения
51
+ инвалидирует соответствующие receipts по их входам.
52
+
38
53
  ## English
39
54
 
40
55
  The package follows Semantic Versioning:
@@ -48,9 +63,10 @@ consumer-build, and browser-proof checks. A version number is never republished.
48
63
 
49
64
  ### Release proof
50
65
 
51
- The root `make ui-kit-release-check` target runs the release contract, the full
52
- LVS, CSS, and TestOps consumer gates, package-boundary smoke, and the dependency
53
- audit in sequence.
66
+ The root `make ui-kit-release-check` target runs the release contract, separate
67
+ LVS backend, frontend static-quality, unit-coverage, Storybook/browser, and
68
+ product end-to-end stages, the full CSS and TestOps consumer gates,
69
+ package-boundary smoke, and the dependency audit in sequence.
54
70
 
55
71
  Each successful stage receives a receipt containing the tracked-input digest,
56
72
  command, applicable toolchain versions, worker/environment configuration, and
@@ -58,9 +74,21 @@ dependency fingerprints. A matching receipt is reused. Changes to source files,
58
74
  dependency manifests or lockfiles, the stage command, applicable toolchain, or
59
75
  configuration invalidate the affected stage and its dependants while preserving
60
76
  independent compatible receipts. The dependency-audit receipt expires after six
61
- hours because registry advisory state is an external input.
77
+ hours because registry advisory state is an external input. Its dependency
78
+ fingerprint excludes only the workspace's own release metadata (`name` and
79
+ `version`); dependency-field or resolved lock-graph changes always require a
80
+ fresh audit.
62
81
 
63
82
  `make ui-kit-release-proof-verify` validates the complete receipt set against the
64
83
  exact Git commit and tree. The release artifact embeds this proof digest and is
65
84
  published only through `make ui-kit-publish`. The release contract has no manual
66
85
  stage-skip option.
86
+
87
+ Use `make ui-kit-release-proof-staged` for a new release tree. Every tracked
88
+ change must be staged, with no untracked or unstaged files. The runner verifies
89
+ the exact `git write-tree` value before and after every stage, so a changing tree
90
+ cannot receive release proof. Once that exact tree is committed,
91
+ `make ui-kit-release-proof-verify` accepts the staged proof without rerunning
92
+ green stages. A different final tree, dependency or lockfile change, applicable
93
+ toolchain change, or relevant environment change invalidates the matching
94
+ receipts according to their declared inputs.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pgcorp/ui-kit",
3
- "version": "0.10.1",
3
+ "version": "0.10.2",
4
4
  "description": "Typed Vue 3 design system with accessible components, semantic themes, and workbench patterns.",
5
5
  "type": "module",
6
6
  "types": "./dist/index.d.ts",
@@ -1,2 +0,0 @@
1
- /*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */
2
- .s-drawer-backdrop[data-v-1226da98]{background:var(--s-overlay-backdrop-surface);-webkit-backdrop-filter:blur(var(--s-overlay-backdrop-blur));backdrop-filter:blur(var(--s-overlay-backdrop-blur));position:fixed;inset:0}.s-drawer-shell[data-v-1226da98]{position:fixed;inset:0}.s-drawer-positioner[data-v-1226da98]{justify-content:flex-end;align-items:stretch;display:flex;position:absolute;inset:0}.s-drawer-positioner[data-placement=bottom][data-v-1226da98]{justify-content:stretch;align-items:flex-end}.s-drawer-backdrop-enter-active[data-v-1226da98],.s-drawer-backdrop-leave-active[data-v-1226da98]{transition:opacity var(--s-motion-standard) ease}.s-drawer-backdrop-enter-from[data-v-1226da98],.s-drawer-backdrop-leave-to[data-v-1226da98]{opacity:0}.s-drawer-panel-enter-active[data-v-1226da98],.s-drawer-panel-leave-active[data-v-1226da98]{transition:opacity var(--s-motion-standard) ease, transform var(--s-motion-standard) ease}.s-drawer-panel-enter-from[data-v-1226da98],.s-drawer-panel-leave-to[data-v-1226da98]{opacity:0;transform:translate(1.5rem)}.s-drawer-shell[data-placement=bottom].s-drawer-panel-enter-from[data-v-1226da98],.s-drawer-shell[data-placement=bottom].s-drawer-panel-leave-to[data-v-1226da98]{transform:translateY(1.5rem)}@media (width<=767px){.s-drawer-shell[data-placement=right].s-drawer-panel-enter-from[data-v-1226da98],.s-drawer-shell[data-placement=right].s-drawer-panel-leave-to[data-v-1226da98]{transform:translateY(1.5rem)}}@media (prefers-reduced-motion:reduce){.s-drawer-backdrop-enter-active[data-v-1226da98],.s-drawer-backdrop-leave-active[data-v-1226da98],.s-drawer-panel-enter-active[data-v-1226da98],.s-drawer-panel-leave-active[data-v-1226da98]{transition:none}.s-drawer-panel-enter-from[data-v-1226da98],.s-drawer-panel-leave-to[data-v-1226da98]{transform:none}}