@profitliga/ui 2.0.2 → 2.0.3

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.
@@ -1,5 +1,5 @@
1
- import { defineComponent as Re, useModel as we, useId as xe, useAttrs as Ce, computed as u, ref as E, useTemplateRef as _, onMounted as Ae, nextTick as L, onBeforeUnmount as Ie, watch as T, openBlock as r, createElementBlock as o, mergeProps as f, unref as c, toDisplayString as v, createCommentVNode as R, createElementVNode as g, createVNode as V, withCtx as X, Fragment as ie, renderList as ne, createBlock as U, renderSlot as N, createTextVNode as j, resolveDynamicComponent as Me, withModifiers as Se, mergeModels as re } from "vue";
2
- import { CircleX as $e, ChevronDown as Ee } from "@lucide/vue";
1
+ import { defineComponent as Re, useModel as we, useId as Ce, useAttrs as Se, computed as u, ref as V, useTemplateRef as R, onMounted as $e, nextTick as N, onBeforeUnmount as xe, watch as w, openBlock as o, createElementBlock as c, mergeProps as f, unref as r, toDisplayString as v, createCommentVNode as C, createElementVNode as g, createVNode as B, withCtx as X, Fragment as ie, renderList as ne, createBlock as q, renderSlot as D, createTextVNode as U, resolveDynamicComponent as Ie, withModifiers as Ae, mergeModels as oe } from "vue";
2
+ import { CircleX as Me, ChevronDown as Ee } from "@lucide/vue";
3
3
  import Te from "../Popover/Popover.vue.js";
4
4
  import Ve from "../Radio/RadioMarker.vue.js";
5
5
  import { useTestId as Ne } from "../shared/useTestId.util.js";
@@ -8,13 +8,13 @@ import De from "./SelectCheckMarker.vue.js";
8
8
  const Fe = ["disabled", "aria-labelledby", "aria-label", "aria-describedby"], Oe = ["aria-label", "aria-multiselectable", "aria-activedescendant"], Ge = ["id", "aria-selected", "aria-disabled", "onClick", "onMouseenter"], We = { class: "select-list__label" }, ze = {
9
9
  key: 0,
10
10
  class: "select-list__empty"
11
- }, Le = ["aria-hidden"], Xe = ["src"], Ue = { class: "select__chip-label" }, je = ["disabled", "tabindex", "aria-label", "onClick"], qe = ["aria-hidden"], He = {
11
+ }, Le = ["aria-hidden"], Xe = ["src"], qe = { class: "select__chip-label" }, Ue = ["disabled", "tabindex", "aria-label", "onClick"], je = ["aria-hidden"], He = {
12
12
  key: 3,
13
13
  class: "select__placeholder"
14
14
  }, Ke = "Нет вариантов", lt = /* @__PURE__ */ Re({
15
15
  inheritAttrs: !1,
16
16
  __name: "Select",
17
- props: /* @__PURE__ */ re({
17
+ props: /* @__PURE__ */ oe({
18
18
  options: {},
19
19
  multiple: { type: Boolean, default: !1 },
20
20
  label: { default: void 0 },
@@ -38,27 +38,27 @@ const Fe = ["disabled", "aria-labelledby", "aria-label", "aria-describedby"], Oe
38
38
  },
39
39
  modelModifiers: {}
40
40
  }),
41
- emits: /* @__PURE__ */ re(["change", "select"], ["update:modelValue"]),
42
- setup(a, { emit: ce }) {
43
- const s = a, w = ce, x = we(a, "modelValue"), C = xe(), q = `select-trigger-${C}`, H = `select-label-${C}`, A = `select-list-${C}`, K = `select-message-${C}`, d = Ne(() => s.testId), B = Ce(), oe = u(() => ({
44
- class: B.class,
45
- style: B.style
41
+ emits: /* @__PURE__ */ oe(["change", "select"], ["update:modelValue"]),
42
+ setup(a, { emit: re }) {
43
+ const s = a, S = re, $ = we(a, "modelValue"), x = Ce(), j = `select-trigger-${x}`, H = `select-label-${x}`, y = `select-list-${x}`, K = `select-message-${x}`, d = Ne(() => s.testId), F = Se(), ce = u(() => ({
44
+ class: F.class,
45
+ style: F.style
46
46
  })), ue = u(() => {
47
- const { class: e, style: l, ...t } = B;
47
+ const { class: e, style: l, ...t } = F;
48
48
  return t;
49
- }), b = E(!1), P = _("fieldRef"), D = _("listRef"), I = _("contentRef"), J = _("chipsRef"), Q = _("counterRef"), m = E(Number.MAX_SAFE_INTEGER), F = E(0), n = E(-1), y = u(() => {
50
- const e = x.value;
49
+ }), b = V(!1), P = R("fieldRef"), I = R("listRef"), A = R("contentRef"), J = R("chipsRef"), Q = R("counterRef"), m = V(Number.MAX_SAFE_INTEGER), O = V(0), n = V(-1), k = u(() => {
50
+ const e = $.value;
51
51
  return e == null ? [] : Array.isArray(e) ? e : [e];
52
52
  }), h = u(
53
- () => s.options.filter((e) => y.value.includes(e.value))
53
+ () => s.options.filter((e) => k.value.includes(e.value))
54
54
  ), M = u(
55
55
  () => h.value.map((e) => e.label).join(", ")
56
- ), S = u(
56
+ ), E = u(
57
57
  () => Math.max(0, h.value.length - m.value)
58
- ), de = u(() => M.value || s.placeholder), O = u(
58
+ ), de = u(() => M.value || s.placeholder), G = u(
59
59
  () => s.invalid ? s.errorText ?? s.supportText : s.supportText
60
- ), fe = u(() => s.width ?? F.value), ve = u(
61
- () => n.value === -1 ? void 0 : `${A}-option-${n.value}`
60
+ ), fe = u(() => s.width ?? O.value), ve = u(
61
+ () => n.value === -1 ? void 0 : `${y}-option-${n.value}`
62
62
  ), be = u(() => [
63
63
  "select",
64
64
  `select--${s.size}`,
@@ -69,19 +69,19 @@ const Fe = ["disabled", "aria-labelledby", "aria-label", "aria-describedby"], Oe
69
69
  "select--multiple": s.multiple
70
70
  }
71
71
  ]);
72
- function k(e) {
73
- return y.value.includes(e);
72
+ function _(e) {
73
+ return k.value.includes(e);
74
74
  }
75
- function G(e) {
75
+ function W(e) {
76
76
  const l = s.options[e];
77
77
  return !!l && !l?.disabled;
78
78
  }
79
79
  function me() {
80
- return s.options.findIndex((e, l) => G(l));
80
+ return s.options.findIndex((e, l) => W(l));
81
81
  }
82
82
  function Y() {
83
83
  for (let e = s.options.length - 1; e >= 0; e -= 1)
84
- if (G(e)) return e;
84
+ if (W(e)) return e;
85
85
  return -1;
86
86
  }
87
87
  function Z(e, l) {
@@ -89,13 +89,13 @@ const Fe = ["disabled", "aria-labelledby", "aria-label", "aria-describedby"], Oe
89
89
  if (t === 0) return -1;
90
90
  let i = e;
91
91
  for (let p = 0; p < t; p += 1)
92
- if (i = (i + l + t) % t, G(i)) return i;
92
+ if (i = (i + l + t) % t, W(i)) return i;
93
93
  return -1;
94
94
  }
95
95
  function ee(e = 20) {
96
- L(() => {
96
+ N(() => {
97
97
  if (!b.value) return;
98
- const l = D.value;
98
+ const l = I.value;
99
99
  l && (l.focus(), document.activeElement === l) || e > 0 && requestAnimationFrame(() => ee(e - 1));
100
100
  });
101
101
  }
@@ -128,21 +128,21 @@ const Fe = ["disabled", "aria-labelledby", "aria-label", "aria-describedby"], Oe
128
128
  function te(e) {
129
129
  if (!(e.disabled || s.disabled)) {
130
130
  if (s.multiple) {
131
- const l = k(e.value) ? y.value.filter((t) => t !== e.value) : [...y.value, e.value];
132
- x.value = l, w("change", l);
131
+ const l = _(e.value) ? k.value.filter((t) => t !== e.value) : [...k.value, e.value];
132
+ $.value = l, S("change", l);
133
133
  } else
134
- x.value = e.value, w("change", e.value), b.value = !1;
135
- w("select", e);
134
+ $.value = e.value, S("change", e.value), b.value = !1;
135
+ S("select", e);
136
136
  }
137
137
  }
138
138
  function ge(e) {
139
139
  if (s.disabled) return;
140
- const l = y.value.filter((t) => t !== e);
141
- x.value = l, w("change", l);
140
+ const l = k.value.filter((t) => t !== e);
141
+ $.value = l, S("change", l);
142
142
  }
143
- function W() {
143
+ function z() {
144
144
  if (!s.multiple) return;
145
- const e = I.value, l = J.value;
145
+ const e = A.value, l = J.value;
146
146
  if (!e || !l) return;
147
147
  const t = Array.from(
148
148
  l.querySelectorAll('[data-chip="item"]')
@@ -151,52 +151,58 @@ const Fe = ["disabled", "aria-labelledby", "aria-label", "aria-describedby"], Oe
151
151
  m.value = Number.MAX_SAFE_INTEGER;
152
152
  return;
153
153
  }
154
- const i = Number.parseFloat(getComputedStyle(l).columnGap) || 0, p = Number.parseFloat(getComputedStyle(e).columnGap) || 0, ye = S.value ? (Q.value?.offsetWidth ?? 0) + p : 0, ke = e.clientWidth - ye;
155
- let ae = 0, z = 0;
154
+ const i = Number.parseFloat(getComputedStyle(l).columnGap) || 0, p = Number.parseFloat(getComputedStyle(e).columnGap) || 0, ye = E.value ? (Q.value?.offsetWidth ?? 0) + p : 0, ke = e.clientWidth - ye;
155
+ let ae = 0, L = 0;
156
156
  for (const _e of t) {
157
- const se = ae + (z ? i : 0) + _e.offsetWidth;
157
+ const se = ae + (L ? i : 0) + _e.offsetWidth;
158
158
  if (se > ke) break;
159
- ae = se, z += 1;
159
+ ae = se, L += 1;
160
160
  }
161
- m.value = Math.max(z, 1);
161
+ m.value = Math.max(L, 1);
162
162
  }
163
- let $;
164
- Ae(() => {
163
+ let T;
164
+ $e(() => {
165
165
  const e = P.value;
166
- e && (F.value = e.getBoundingClientRect().width, L(W), $ = new ResizeObserver((l) => {
166
+ e && (O.value = e.getBoundingClientRect().width, N(z), T = new ResizeObserver((l) => {
167
167
  for (const t of l)
168
- t.target === e && (F.value = t.borderBoxSize?.[0]?.inlineSize ?? e.getBoundingClientRect().width);
169
- W();
170
- }), $.observe(e), I.value && $.observe(I.value));
171
- }), Ie(() => $?.disconnect()), T(
168
+ t.target === e && (O.value = t.borderBoxSize?.[0]?.inlineSize ?? e.getBoundingClientRect().width);
169
+ z();
170
+ }), T.observe(e), A.value && T.observe(A.value));
171
+ }), xe(() => T?.disconnect()), w(
172
172
  () => h.value.map((e) => e.value).join("|"),
173
173
  () => {
174
- m.value = Number.MAX_SAFE_INTEGER, L(W);
174
+ m.value = Number.MAX_SAFE_INTEGER, N(z);
175
175
  }
176
176
  );
177
177
  let le = null;
178
- return T(b, (e) => {
178
+ return w(b, (e) => {
179
179
  e ? (le = document.activeElement, n.value = -1) : (n.value = -1, le?.focus());
180
- }), T(D, (e) => {
180
+ }), w(I, (e) => {
181
181
  e && b.value && ee();
182
- }), T(
182
+ }), w(n, (e) => {
183
+ e !== -1 && N(() => {
184
+ I.value?.querySelector(
185
+ `#${CSS.escape(`${y}-option-${e}`)}`
186
+ )?.scrollIntoView({ block: "nearest" });
187
+ });
188
+ }), w(
183
189
  () => s.disabled,
184
190
  (e) => {
185
191
  e && (b.value = !1);
186
192
  }
187
- ), (e, l) => (r(), o("div", f({ class: be.value }, { ...oe.value, ...c(d)("root") }), [
188
- a.label ? (r(), o("label", f({
193
+ ), (e, l) => (o(), c("div", f({ class: be.value }, { ...ce.value, ...r(d)("root") }), [
194
+ a.label ? (o(), c("label", f({
189
195
  key: 0,
190
196
  id: H,
191
197
  class: "select__label",
192
- for: q
193
- }, c(d)("label")), v(a.label), 17)) : R("", !0),
198
+ for: j
199
+ }, r(d)("label")), v(a.label), 17)) : C("", !0),
194
200
  g("div", f({
195
201
  ref_key: "fieldRef",
196
202
  ref: P,
197
203
  class: "select__field"
198
- }, c(d)("field")), [
199
- V(c(Te), {
204
+ }, r(d)("field")), [
205
+ B(r(Te), {
200
206
  open: b.value,
201
207
  "onUpdate:open": l[0] || (l[0] = (t) => b.value = t),
202
208
  width: fe.value,
@@ -207,26 +213,26 @@ const Fe = ["disabled", "aria-labelledby", "aria-label", "aria-describedby"], Oe
207
213
  arrow: !1,
208
214
  "breakpoint-mobile": a.breakpointMobile,
209
215
  "trigger-has-popup": "listbox",
210
- "trigger-controls": A,
216
+ "trigger-controls": y,
211
217
  "test-id": a.testId
212
218
  }, {
213
219
  trigger: X(({ props: t }) => [
214
220
  g("button", f({
215
- id: q,
221
+ id: j,
216
222
  type: "button",
217
223
  class: "select__trigger",
218
224
  disabled: a.disabled,
219
225
  "aria-labelledby": a.label ? H : void 0,
220
226
  "aria-label": a.label ? void 0 : a.ariaLabel,
221
- "aria-describedby": O.value ? K : void 0
227
+ "aria-describedby": G.value ? K : void 0
222
228
  }, {
223
229
  ...t,
224
230
  ...ue.value,
225
- ...c(d)("trigger")
231
+ ...r(d)("trigger")
226
232
  }), [
227
- V(Be, null, {
233
+ B(Be, null, {
228
234
  default: X(() => [
229
- j(v(de.value), 1)
235
+ U(v(de.value), 1)
230
236
  ]),
231
237
  _: 1
232
238
  })
@@ -234,9 +240,9 @@ const Fe = ["disabled", "aria-labelledby", "aria-label", "aria-describedby"], Oe
234
240
  ]),
235
241
  default: X(() => [
236
242
  g("div", {
237
- id: A,
243
+ id: y,
238
244
  ref_key: "listRef",
239
- ref: D,
245
+ ref: I,
240
246
  role: "listbox",
241
247
  tabindex: "0",
242
248
  "aria-label": a.label ?? a.ariaLabel,
@@ -245,43 +251,43 @@ const Fe = ["disabled", "aria-labelledby", "aria-label", "aria-describedby"], Oe
245
251
  class: "select-list",
246
252
  onKeydown: pe
247
253
  }, [
248
- (r(!0), o(ie, null, ne(a.options, (t, i) => (r(), o("div", f({
249
- id: `${A}-option-${i}`,
254
+ (o(!0), c(ie, null, ne(a.options, (t, i) => (o(), c("div", f({
255
+ id: `${y}-option-${i}`,
250
256
  key: t.value,
251
257
  role: "option",
252
258
  class: ["select-list__option", {
253
259
  "select-list__option--active": n.value === i,
254
260
  "select-list__option--disabled": t.disabled
255
261
  }],
256
- "aria-selected": k(t.value),
262
+ "aria-selected": _(t.value),
257
263
  "aria-disabled": t.disabled || void 0
258
- }, { ref_for: !0 }, c(d)("option", t.value), {
264
+ }, { ref_for: !0 }, r(d)("option", t.value), {
259
265
  onClick: (p) => te(t),
260
266
  onMouseenter: (p) => he(i, t.disabled)
261
267
  }), [
262
- a.multiple ? (r(), U(De, {
268
+ a.multiple ? (o(), q(De, {
263
269
  key: 0,
264
- checked: k(t.value),
270
+ checked: _(t.value),
265
271
  disabled: t.disabled,
266
272
  state: n.value === i ? "hover" : "default"
267
- }, null, 8, ["checked", "disabled", "state"])) : (r(), U(c(Ve), {
273
+ }, null, 8, ["checked", "disabled", "state"])) : (o(), q(r(Ve), {
268
274
  key: 1,
269
- checked: k(t.value),
275
+ checked: _(t.value),
270
276
  disabled: t.disabled,
271
277
  state: n.value === i ? "hover" : "default"
272
278
  }, null, 8, ["checked", "disabled", "state"])),
273
- N(e.$slots, "option", {
279
+ D(e.$slots, "option", {
274
280
  option: t,
275
- selected: k(t.value),
281
+ selected: _(t.value),
276
282
  active: n.value === i,
277
283
  index: i
278
284
  }, () => [
279
285
  g("span", We, v(t.label), 1)
280
286
  ], !0)
281
287
  ], 16, Ge))), 128)),
282
- a.options.length ? R("", !0) : (r(), o("p", ze, [
283
- N(e.$slots, "empty", {}, () => [
284
- j(v(Ke))
288
+ a.options.length ? C("", !0) : (o(), c("p", ze, [
289
+ D(e.$slots, "empty", {}, () => [
290
+ U(v(Ke))
285
291
  ], !0)
286
292
  ]))
287
293
  ], 40, Oe)
@@ -290,38 +296,38 @@ const Fe = ["disabled", "aria-labelledby", "aria-label", "aria-describedby"], Oe
290
296
  }, 8, ["open", "width", "side", "side-offset", "align", "align-offset", "breakpoint-mobile", "test-id"]),
291
297
  g("div", {
292
298
  ref_key: "contentRef",
293
- ref: I,
299
+ ref: A,
294
300
  class: "select__content"
295
301
  }, [
296
- a.multiple && h.value.length ? (r(), o("span", {
302
+ a.multiple && h.value.length ? (o(), c("span", {
297
303
  key: 0,
298
304
  ref_key: "chipsRef",
299
305
  ref: J,
300
306
  class: "select__chips"
301
307
  }, [
302
- (r(!0), o(ie, null, ne(h.value, (t, i) => (r(), o("span", f({
308
+ (o(!0), c(ie, null, ne(h.value, (t, i) => (o(), c("span", f({
303
309
  key: t.value,
304
310
  "data-chip": "item",
305
311
  class: ["select__chip", {
306
312
  "select__chip--measured": i >= m.value
307
313
  }],
308
314
  "aria-hidden": i >= m.value || void 0
309
- }, { ref_for: !0 }, c(d)("chip", t.value)), [
310
- N(e.$slots, "chip", {
315
+ }, { ref_for: !0 }, r(d)("chip", t.value)), [
316
+ D(e.$slots, "chip", {
311
317
  option: t,
312
318
  index: i
313
319
  }, () => [
314
- t.avatar ? (r(), o("img", {
320
+ t.avatar ? (o(), c("img", {
315
321
  key: 0,
316
322
  class: "select__chip-avatar",
317
323
  src: t.avatar,
318
324
  alt: ""
319
- }, null, 8, Xe)) : t.icon ? (r(), U(Me(t.icon), {
325
+ }, null, 8, Xe)) : t.icon ? (o(), q(Ie(t.icon), {
320
326
  key: 1,
321
327
  class: "select__chip-icon",
322
328
  "aria-hidden": "true"
323
- })) : R("", !0),
324
- g("span", Ue, v(t.label), 1)
329
+ })) : C("", !0),
330
+ g("span", qe, v(t.label), 1)
325
331
  ], !0),
326
332
  g("button", f({
327
333
  type: "button",
@@ -329,44 +335,44 @@ const Fe = ["disabled", "aria-labelledby", "aria-label", "aria-describedby"], Oe
329
335
  disabled: a.disabled,
330
336
  tabindex: i >= m.value ? -1 : void 0,
331
337
  "aria-label": `Убрать ${t.label}`
332
- }, { ref_for: !0 }, c(d)("chip-remove", t.value), {
333
- onClick: Se((p) => ge(t.value), ["stop"])
338
+ }, { ref_for: !0 }, r(d)("chip-remove", t.value), {
339
+ onClick: Ae((p) => ge(t.value), ["stop"])
334
340
  }), [
335
- V(c($e), {
341
+ B(r(Me), {
336
342
  class: "select__chip-icon",
337
343
  "aria-hidden": "true"
338
344
  })
339
- ], 16, je)
345
+ ], 16, Ue)
340
346
  ], 16, Le))), 128))
341
- ], 512)) : R("", !0),
342
- a.multiple && h.value.length ? (r(), o("span", f({
347
+ ], 512)) : C("", !0),
348
+ a.multiple && h.value.length ? (o(), c("span", f({
343
349
  key: 1,
344
350
  ref_key: "counterRef",
345
351
  ref: Q,
346
- class: ["select__chip select__chip--counter", { "select__chip--measured": !S.value }],
347
- "aria-hidden": !S.value || void 0
348
- }, c(d)("chip-counter")), " +" + v(S.value || 1), 17, qe)) : M.value ? (r(), o("span", f({
352
+ class: ["select__chip select__chip--counter", { "select__chip--measured": !E.value }],
353
+ "aria-hidden": !E.value || void 0
354
+ }, r(d)("chip-counter")), " +" + v(E.value || 1), 17, je)) : M.value ? (o(), c("span", f({
349
355
  key: 2,
350
356
  class: "select__value"
351
- }, c(d)("value")), [
352
- N(e.$slots, "value", {
357
+ }, r(d)("value")), [
358
+ D(e.$slots, "value", {
353
359
  option: h.value[0],
354
360
  displayValue: M.value
355
361
  }, () => [
356
- j(v(M.value), 1)
362
+ U(v(M.value), 1)
357
363
  ], !0)
358
- ], 16)) : (r(), o("span", He, v(a.placeholder), 1))
364
+ ], 16)) : (o(), c("span", He, v(a.placeholder), 1))
359
365
  ], 512),
360
- V(c(Ee), {
366
+ B(r(Ee), {
361
367
  class: "select__arrow",
362
368
  "aria-hidden": "true"
363
369
  })
364
370
  ], 16),
365
- O.value ? (r(), o("p", f({
371
+ G.value ? (o(), c("p", f({
366
372
  key: 1,
367
373
  id: K,
368
374
  class: "select__message"
369
- }, c(d)("message")), v(O.value), 17)) : R("", !0)
375
+ }, r(d)("message")), v(G.value), 17)) : C("", !0)
370
376
  ], 16));
371
377
  }
372
378
  });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@profitliga/ui",
3
- "version": "2.0.2",
3
+ "version": "2.0.3",
4
4
  "author": "Profit League<dev@pr-lg.ru>",
5
5
  "license": "MIT",
6
6
  "description": "Vue 3 UI component library with TypeScript and SCSS",