@featherk/ui 0.13.0 → 0.13.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,7 +1,7 @@
1
1
  // Generated by scripts/generate-docs-manifest.mjs. Do not edit.
2
2
  export const packageName = "@featherk/ui";
3
3
 
4
- export const version = "0.13.0";
4
+ export const version = "0.13.1";
5
5
 
6
6
  export const paths = {
7
7
  ActionCell: "table/ActionCell.md",
@@ -10,9 +10,9 @@ export const paths = {
10
10
  };
11
11
 
12
12
  export const docs = {
13
- ActionCell: "https://cdn.jsdelivr.net/npm/@featherk/ui@0.13.0/docs/table/ActionCell.md",
14
- USAddress: "https://cdn.jsdelivr.net/npm/@featherk/ui@0.13.0/docs/address/USAddress.md",
15
- useActionCellMenu: "https://cdn.jsdelivr.net/npm/@featherk/ui@0.13.0/docs/table/useActionCellMenu.md",
13
+ ActionCell: "https://cdn.jsdelivr.net/npm/@featherk/ui@0.13.1/docs/table/ActionCell.md",
14
+ USAddress: "https://cdn.jsdelivr.net/npm/@featherk/ui@0.13.1/docs/address/USAddress.md",
15
+ useActionCellMenu: "https://cdn.jsdelivr.net/npm/@featherk/ui@0.13.1/docs/table/useActionCellMenu.md",
16
16
  };
17
17
 
18
18
  export const docUrl = (name, host = "https://cdn.jsdelivr.net/npm") =>
@@ -1,5 +1,5 @@
1
1
  import "./ui.css";
2
- import { defineComponent as F, computed as i, openBlock as c, createElementBlock as w, normalizeClass as O, createElementVNode as V, createVNode as E, unref as v, Fragment as $, createBlock as h, withCtx as I, createTextVNode as S, toDisplayString as k, createCommentVNode as A, normalizeStyle as U, renderList as H, toValue as W, nextTick as J } from "vue";
2
+ import { defineComponent as F, computed as i, openBlock as c, createElementBlock as w, normalizeClass as O, createElementVNode as V, createVNode as E, unref as v, Fragment as $, createBlock as h, withCtx as I, createTextVNode as S, toDisplayString as C, createCommentVNode as A, normalizeStyle as U, renderList as H, toValue as W, nextTick as J } from "vue";
3
3
  import { Error as D, Hint as b } from "@progress/kendo-vue-labels";
4
4
  import { TextBox as M } from "@progress/kendo-vue-inputs";
5
5
  import { DropDownList as Q } from "@progress/kendo-vue-dropdowns";
@@ -11,7 +11,7 @@ const le = { class: "address1" }, te = {
11
11
  }, re = { class: "city" }, ie = { class: "state" }, de = { class: "zip" }, se = {
12
12
  key: 1,
13
13
  class: "messages"
14
- }, x = "Enter a 5 or 9 digit zip code.", ne = "Incomplete address.", oe = /* @__PURE__ */ F({
14
+ }, R = "Enter a 5 or 9 digit zip code.", ne = "Incomplete address.", oe = /* @__PURE__ */ F({
15
15
  __name: "USAddress",
16
16
  props: {
17
17
  id: {},
@@ -21,8 +21,8 @@ const le = { class: "address1" }, te = {
21
21
  messages: {},
22
22
  showAddress2: { type: Boolean, default: !0 }
23
23
  },
24
- setup(o) {
25
- const a = o, s = {
24
+ setup(n) {
25
+ const a = n, s = {
26
26
  placeholder: {
27
27
  address1: "Address Line 1",
28
28
  address2: "Address Line 2",
@@ -32,7 +32,7 @@ const le = { class: "address1" }, te = {
32
32
  fieldset: {
33
33
  error: {
34
34
  required: "Required fields are missing.",
35
- zip: x
35
+ zip: R
36
36
  },
37
37
  hint: {
38
38
  address: "Enter address information."
@@ -44,14 +44,14 @@ const le = { class: "address1" }, te = {
44
44
  address2: "",
45
45
  city: "Required",
46
46
  state: "Required",
47
- zip: x
47
+ zip: R
48
48
  },
49
49
  hint: {
50
50
  address1: "Enter address line 1.",
51
51
  address2: "Optional",
52
52
  city: "",
53
53
  state: "",
54
- zip: x
54
+ zip: R
55
55
  }
56
56
  }
57
57
  }, y = (r) => ({
@@ -86,26 +86,26 @@ const le = { class: "address1" }, te = {
86
86
  zip: r?.field?.hint?.zip ?? s.field.hint.zip
87
87
  }
88
88
  }
89
- }), n = i(() => y(a.messages)), f = i(() => a.messageScope === "field"), z = i(() => a.messageScope === "fieldset"), u = i(() => a.required), m = i(() => u.value), l = i(() => ({
89
+ }), o = i(() => y(a.messages)), f = i(() => a.messageScope === "field"), z = i(() => a.messageScope === "fieldset"), u = i(() => a.required), m = i(() => u.value), l = i(() => ({
90
90
  address1: `${a.id}-address1`,
91
91
  address2: `${a.id}-address2`,
92
92
  city: `${a.id}-city`,
93
93
  state: `${a.id}-state`,
94
94
  zip: `${a.id}-zip`
95
- })), e = i(() => a.address), p = i(() => e.value.address1Valid.value && e.value.cityValid.value && e.value.stateValid.value), C = i(() => e.value.formData.address1.trim() !== "" || e.value.formData.address2.trim() !== "" || e.value.formData.city.trim() !== "" || (e.value.formData.state ?? "").trim() !== "" || e.value.formData.zip.replace(/\D/g, "") !== ""), T = i(() => {
95
+ })), e = i(() => a.address), p = i(() => e.value.address1Valid.value && e.value.cityValid.value && e.value.stateValid.value), k = i(() => e.value.formData.address1.trim() !== "" || e.value.formData.address2.trim() !== "" || e.value.formData.city.trim() !== "" || (e.value.formData.state ?? "").trim() !== "" || e.value.formData.zip.replace(/\D/g, "") !== ""), T = i(() => {
96
96
  if (e.value.optionalZipInvalid)
97
97
  return e.value.optionalZipInvalid.value;
98
98
  const r = e.value.formData.zip.replace(/\D/g, "");
99
- return !u.value && C.value && r.length !== 5 && r.length !== 9;
100
- }), t = i(() => e.value.optionalPartialInvalid ? e.value.optionalPartialInvalid.value : !u.value && C.value && !e.value.addressValid.value), d = i(() => u.value || !t.value ? !1 : e.value.optionalFeedbackActive ? e.value.optionalFeedbackActive.value : !1), g = i(() => m.value && !e.value.address1Valid.value || d.value && e.value.formData.address1.trim() === ""), P = i(() => m.value && !e.value.cityValid.value || d.value && e.value.formData.city.trim() === ""), R = i(() => m.value && !e.value.stateValid.value || d.value && (e.value.formData.state ?? "").trim() === ""), q = i(() => m.value && !e.value.zipValid.value || d.value && T.value), _ = i(() => u.value ? e.value.addressValidate.value : d.value), K = i(() => u.value ? e.value.address1Valid.value : !g.value), L = i(() => u.value ? e.value.cityValid.value : !P.value), B = i(() => u.value ? e.value.stateValid.value : !R.value), N = i(() => u.value ? e.value.zipValid.value : !q.value), Z = i(() => {
101
- const r = n.value.placeholder.address2;
99
+ return !u.value && k.value && r.length !== 5 && r.length !== 9;
100
+ }), t = i(() => e.value.optionalPartialInvalid ? e.value.optionalPartialInvalid.value : !u.value && k.value && !e.value.addressValid.value), d = i(() => u.value || !t.value ? !1 : e.value.optionalFeedbackActive ? e.value.optionalFeedbackActive.value : !1), g = i(() => m.value && !e.value.address1Valid.value || d.value && e.value.formData.address1.trim() === ""), x = i(() => m.value && !e.value.cityValid.value || d.value && e.value.formData.city.trim() === ""), P = i(() => m.value && !e.value.stateValid.value || d.value && (e.value.formData.state ?? "").trim() === ""), q = i(() => m.value && !e.value.zipValid.value || d.value && T.value), _ = i(() => u.value ? e.value.addressValidate.value : d.value), K = i(() => u.value ? e.value.address1Valid.value : !g.value), L = i(() => u.value ? e.value.cityValid.value : !x.value), B = i(() => u.value ? e.value.stateValid.value : !P.value), N = i(() => u.value ? e.value.zipValid.value : !q.value), Z = i(() => {
101
+ const r = o.value.placeholder.address2;
102
102
  return z.value && u.value ? `${r} (Optional)` : r;
103
103
  }), j = i(() => {
104
104
  const r = [];
105
- return p.value || r.push(n.value.fieldset.error.required), e.value.zipValid.value || r.push(n.value.fieldset.error.zip), r.join(" ");
105
+ return p.value || r.push(o.value.fieldset.error.required), e.value.zipValid.value || r.push(o.value.fieldset.error.zip), r.join(" ");
106
106
  }), G = i(() => {
107
107
  const r = [ne];
108
- return T.value && r.push(n.value.fieldset.error.zip), r.join(" ");
108
+ return T.value && r.push(o.value.fieldset.error.zip), r.join(" ");
109
109
  });
110
110
  return (r, ce) => (c(), w("div", {
111
111
  class: O(["fkui-us-address", { "fkui-us-address--fieldset-scope": z.value }])
@@ -113,7 +113,7 @@ const le = { class: "address1" }, te = {
113
113
  V("div", le, [
114
114
  E(v(M), {
115
115
  id: l.value.address1,
116
- placeholder: n.value.placeholder.address1,
116
+ placeholder: o.value.placeholder.address1,
117
117
  value: e.value.formData.address1,
118
118
  valid: K.value,
119
119
  validate: _.value,
@@ -123,12 +123,12 @@ const le = { class: "address1" }, te = {
123
123
  f.value ? (c(), w($, { key: 0 }, [
124
124
  g.value ? (c(), h(v(D), { key: 0 }, {
125
125
  default: I(() => [
126
- S(k(n.value.field.error.address1), 1)
126
+ S(C(o.value.field.error.address1), 1)
127
127
  ]),
128
128
  _: 1
129
129
  })) : (c(), h(v(b), { key: 1 }, {
130
130
  default: I(() => [
131
- S(k(n.value.field.hint.address1), 1)
131
+ S(C(o.value.field.hint.address1), 1)
132
132
  ]),
133
133
  _: 1
134
134
  }))
@@ -143,7 +143,7 @@ const le = { class: "address1" }, te = {
143
143
  }, null, 8, ["id", "placeholder", "value", "onInput"]),
144
144
  f.value ? (c(), h(v(b), { key: 0 }, {
145
145
  default: I(() => [
146
- S(k(n.value.field.hint.address2), 1)
146
+ S(C(o.value.field.hint.address2), 1)
147
147
  ]),
148
148
  _: 1
149
149
  })) : A("", !0)
@@ -151,16 +151,16 @@ const le = { class: "address1" }, te = {
151
151
  V("div", re, [
152
152
  E(v(M), {
153
153
  id: l.value.city,
154
- placeholder: n.value.placeholder.city,
154
+ placeholder: o.value.placeholder.city,
155
155
  value: e.value.formData.city,
156
156
  valid: L.value,
157
157
  validate: _.value,
158
158
  validityStyles: _.value,
159
159
  onInput: e.value.onCityInput
160
160
  }, null, 8, ["id", "placeholder", "value", "valid", "validate", "validityStyles", "onInput"]),
161
- f.value && P.value ? (c(), h(v(D), { key: 0 }, {
161
+ f.value && x.value ? (c(), h(v(D), { key: 0 }, {
162
162
  default: I(() => [
163
- S(k(n.value.field.error.city), 1)
163
+ S(C(o.value.field.error.city), 1)
164
164
  ]),
165
165
  _: 1
166
166
  })) : A("", !0)
@@ -180,9 +180,9 @@ const le = { class: "address1" }, te = {
180
180
  validate: _.value,
181
181
  validityStyles: _.value
182
182
  }, null, 8, ["id", "value", "onChange", "defaultItem", "dataItems", "valid", "validate", "validityStyles"]),
183
- f.value && R.value ? (c(), h(v(D), { key: 0 }, {
183
+ f.value && P.value ? (c(), h(v(D), { key: 0 }, {
184
184
  default: I(() => [
185
- S(k(n.value.field.error.state), 1)
185
+ S(C(o.value.field.error.state), 1)
186
186
  ]),
187
187
  _: 1
188
188
  })) : A("", !0)
@@ -190,7 +190,7 @@ const le = { class: "address1" }, te = {
190
190
  V("div", de, [
191
191
  E(v(M), {
192
192
  id: l.value.zip,
193
- placeholder: n.value.placeholder.zip,
193
+ placeholder: o.value.placeholder.zip,
194
194
  wrapperClass: e.value.zipWrapperClass,
195
195
  value: e.value.zipDisplay.value,
196
196
  onInput: e.value.onZipInput,
@@ -201,13 +201,13 @@ const le = { class: "address1" }, te = {
201
201
  }, null, 8, ["id", "placeholder", "wrapperClass", "value", "onInput", "valid", "validate", "validityStyles"]),
202
202
  f.value && q.value ? (c(), h(v(D), { key: 0 }, {
203
203
  default: I(() => [
204
- S(k(n.value.field.error.zip), 1)
204
+ S(C(o.value.field.error.zip), 1)
205
205
  ]),
206
206
  _: 1
207
207
  })) : A("", !0),
208
208
  f.value && !q.value ? (c(), h(v(b), { key: 1 }, {
209
209
  default: I(() => [
210
- S(k(n.value.field.hint.zip), 1)
210
+ S(C(o.value.field.hint.zip), 1)
211
211
  ]),
212
212
  _: 1
213
213
  })) : A("", !0)
@@ -215,27 +215,27 @@ const le = { class: "address1" }, te = {
215
215
  z.value ? (c(), w("div", se, [
216
216
  m.value && !e.value.addressValid.value ? (c(), h(v(D), { key: 0 }, {
217
217
  default: I(() => [
218
- S(k(j.value), 1)
218
+ S(C(j.value), 1)
219
219
  ]),
220
220
  _: 1
221
221
  })) : d.value ? (c(), h(v(D), { key: 1 }, {
222
222
  default: I(() => [
223
- S(k(G.value), 1)
223
+ S(C(G.value), 1)
224
224
  ]),
225
225
  _: 1
226
226
  })) : (c(), h(v(b), { key: 2 }, {
227
227
  default: I(() => [
228
- S(k(n.value.fieldset.hint.address), 1)
228
+ S(C(o.value.fieldset.hint.address), 1)
229
229
  ]),
230
230
  _: 1
231
231
  }))
232
232
  ])) : A("", !0)
233
233
  ], 2));
234
234
  }
235
- }), ue = (o, a) => {
236
- const s = o.__vccOpts || o;
237
- for (const [y, n] of a)
238
- s[y] = n;
235
+ }), ue = (n, a) => {
236
+ const s = n.__vccOpts || n;
237
+ for (const [y, o] of a)
238
+ s[y] = o;
239
239
  return s;
240
240
  }, Ie = /* @__PURE__ */ ue(oe, [["__scopeId", "data-v-8aeb035b"]]), ve = ["id", "colspan", "aria-colindex", "aria-selected", "data-grid-col-index"], Se = /* @__PURE__ */ F({
241
241
  inheritAttrs: !1,
@@ -253,8 +253,8 @@ const le = { class: "address1" }, te = {
253
253
  menuController: {},
254
254
  tabIndex: { default: -1 }
255
255
  },
256
- setup(o) {
257
- const a = o, s = Y("action-cell"), y = (l) => a.menuController.getTriggerId(l, a.dataItem), n = (l) => a.menuController.registry.isIdActive(y(l)), f = (l) => typeof l.items == "function", z = (l, e) => {
256
+ setup(n) {
257
+ const a = n, s = Y("action-cell"), y = (l) => a.menuController.getTriggerId(l, a.dataItem), o = (l) => a.menuController.registry.isIdActive(y(l)), f = (l) => typeof l.items == "function", z = (l, e) => {
258
258
  a.menuController.registry.register(
259
259
  y(l),
260
260
  e
@@ -281,7 +281,7 @@ const le = { class: "address1" }, te = {
281
281
  (c(!0), w($, null, H(l.config.triggers, (p) => (c(), h(v(X), {
282
282
  key: p.key,
283
283
  ref_for: !0,
284
- ref: f(p) ? (C) => z(p, C) : void 0,
284
+ ref: f(p) ? (k) => z(p, k) : void 0,
285
285
  id: v(s).compose(p.key, "trigger"),
286
286
  "svg-icon": p.icon,
287
287
  type: "button",
@@ -290,39 +290,40 @@ const le = { class: "address1" }, te = {
290
290
  rounded: "full",
291
291
  "aria-label": p.ariaLabel,
292
292
  "aria-haspopup": f(p) ? "menu" : void 0,
293
- "aria-expanded": f(p) ? n(p) : void 0,
293
+ "aria-expanded": f(p) ? o(p) : void 0,
294
294
  disabled: p.disabled?.(l.dataItem),
295
295
  tabindex: l.tabIndex,
296
- onClick: (C) => u(p),
297
- onKeydown: (C) => m(p, C)
296
+ onClick: (k) => u(p),
297
+ onKeydown: (k) => m(p, k)
298
298
  }, null, 8, ["id", "svg-icon", "aria-label", "aria-haspopup", "aria-expanded", "disabled", "tabindex", "onClick", "onKeydown"]))), 128))
299
299
  ], 14, ve));
300
300
  }
301
- }), ke = (o) => {
301
+ }), Ce = (n) => {
302
302
  const a = ee();
303
- o.group?.register(a);
304
- const s = o.getTriggerId ?? ((t, d) => `${t.key}:${o.getRowId(d)}`), y = i(() => {
303
+ n.group?.register(a);
304
+ const s = n.getTriggerId ?? ((t, d) => `${t.key}:${n.getRowId(d)}`), y = i(() => {
305
305
  const t = a.activeId.value?.split(":")[0];
306
- return o.config.triggers.find((d) => d.key === t) ?? null;
307
- }), n = i(() => {
306
+ return n.config.triggers.find((d) => d.key === t) ?? null;
307
+ }), o = i(() => {
308
308
  const t = a.activeId.value?.split(":").slice(1).join(":");
309
- return t === void 0 ? null : W(o.rows).find(
310
- (d) => String(o.getRowId(d)) === t
309
+ return t === void 0 ? null : W(n.rows).find(
310
+ (d) => String(n.getRowId(d)) === t
311
311
  ) ?? null;
312
312
  }), f = i(() => {
313
- const t = n.value, d = y.value;
313
+ const t = o.value, d = y.value;
314
314
  return t && d ? d.items?.(t) ?? [] : [];
315
315
  }), z = i(() => {
316
- const t = n.value, d = y.value;
316
+ const t = o.value, d = y.value;
317
317
  return t && d && typeof d.items == "function" && d.title ? d.title(t) : null;
318
318
  }), u = ae({
319
319
  isOpen: a.isActive,
320
320
  triggerRef: a.activeElement,
321
- menuRef: o.menuRef,
322
- triggerMode: o.triggerMode ?? "button",
323
- anchor: o.anchor ?? !0,
324
- resolveFocusTarget: o.resolveFocusTarget,
325
- focusTargetContainerSelector: o.focusTargetContainerSelector,
321
+ menuRef: n.menuRef,
322
+ popupContentRef: n.popupContentRef,
323
+ triggerMode: n.triggerMode ?? "button",
324
+ anchor: n.anchor ?? !0,
325
+ resolveFocusTarget: n.resolveFocusTarget,
326
+ focusTargetContainerSelector: n.focusTargetContainerSelector,
326
327
  requestShow: (t) => {
327
328
  typeof t == "string" && a.activate(t);
328
329
  },
@@ -332,7 +333,7 @@ const le = { class: "address1" }, te = {
332
333
  let m = 0;
333
334
  const l = (t) => {
334
335
  const d = ++m;
335
- if (o.group?.deactivateOthers(a), a.isActive.value && !a.isIdActive(t)) {
336
+ if (n.group?.deactivateOthers(a), a.isActive.value && !a.isIdActive(t)) {
336
337
  a.deactivate(), J(() => {
337
338
  d === m && u.handleTriggerClick(t);
338
339
  });
@@ -340,7 +341,7 @@ const le = { class: "address1" }, te = {
340
341
  }
341
342
  u.handleTriggerClick(t);
342
343
  }, e = (t, d) => {
343
- m++, o.group?.deactivateOthers(a), a.deactivate(), o.onActionSelected(void 0, d, t);
344
+ m++, n.group?.deactivateOthers(a), a.deactivate(), n.onActionSelected(void 0, d, t);
344
345
  }, p = (t, ...d) => {
345
346
  const g = d[0];
346
347
  if (g.key === "Enter" || g.code === "Space") {
@@ -348,17 +349,17 @@ const le = { class: "address1" }, te = {
348
349
  return;
349
350
  }
350
351
  u.handleTriggerKeydown(g, t);
351
- }, C = (t) => {
352
+ }, k = (t) => {
352
353
  t.key === "Escape" && u.handleMenuEscape(t);
353
354
  }, T = (t) => {
354
- const d = n.value, g = y.value;
355
+ const d = o.value, g = y.value;
355
356
  u.handleMenuSelect(t, () => {
356
- d && g && o.onActionSelected(t.item, d, g);
357
+ d && g && n.onActionSelected(t.item, d, g);
357
358
  });
358
359
  };
359
360
  return {
360
361
  actionCellProps: {
361
- config: o.config,
362
+ config: n.config,
362
363
  menuController: {
363
364
  registry: a,
364
365
  getTriggerId: s,
@@ -375,10 +376,10 @@ const le = { class: "address1" }, te = {
375
376
  menuProps: i(() => ({
376
377
  items: f.value,
377
378
  vertical: !0,
378
- onKeydown: C,
379
+ onKeydown: k,
379
380
  onSelect: T
380
381
  })),
381
- activeRow: n,
382
+ activeRow: o,
382
383
  activeTrigger: y,
383
384
  activeTitle: z
384
385
  };
@@ -386,6 +387,6 @@ const le = { class: "address1" }, te = {
386
387
  export {
387
388
  Se as ActionCell,
388
389
  Ie as USAddress,
389
- ke as useActionCellMenu
390
+ Ce as useActionCellMenu
390
391
  };
391
392
  //# sourceMappingURL=featherk-ui.es.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"featherk-ui.es.js","sources":["../src/address/USAddress.vue","../src/table/ActionCell.vue","../src/table/useActionCellMenu.ts"],"sourcesContent":["<template>\n <div\n class=\"fkui-us-address\"\n :class=\"{ 'fkui-us-address--fieldset-scope': fieldsetScope }\"\n >\n <div class=\"address1\">\n <TextBox\n :id=\"fieldIds.address1\"\n :placeholder=\"resolvedMessages.placeholder.address1\"\n :value=\"address.formData.address1\"\n :valid=\"address1DisplayValid\"\n :validate=\"validationStylesActive\"\n :validityStyles=\"validationStylesActive\"\n @input=\"address.onAddress1Input\"\n />\n <template v-if=\"fieldScope\">\n <Error v-if=\"showAddress1Error\">\n {{ resolvedMessages.field.error.address1 }}\n </Error>\n <Hint v-else>{{ resolvedMessages.field.hint.address1 }}</Hint>\n </template>\n </div>\n\n <div v-if=\"showAddress2\" class=\"address2\">\n <TextBox\n :id=\"fieldIds.address2\"\n :placeholder=\"address2PlaceholderDisplay\"\n :value=\"address.formData.address2\"\n @input=\"address.onAddress2Input\"\n />\n <Hint v-if=\"fieldScope\">{{ resolvedMessages.field.hint.address2 }}</Hint>\n </div>\n\n <div class=\"city\">\n <TextBox\n :id=\"fieldIds.city\"\n :placeholder=\"resolvedMessages.placeholder.city\"\n :value=\"address.formData.city\"\n :valid=\"cityDisplayValid\"\n :validate=\"validationStylesActive\"\n :validityStyles=\"validationStylesActive\"\n @input=\"address.onCityInput\"\n />\n <Error v-if=\"fieldScope && showCityError\">\n {{ resolvedMessages.field.error.city }}\n </Error>\n </div>\n\n <div class=\"state\">\n <DropDownList\n :id=\"fieldIds.state\"\n :value=\"address.formData.state\"\n @change=\"address.onStateChange\"\n :defaultItem=\"address.stateDefaultItem\"\n :dataItems=\"address.stateOptions\"\n textField=\"label\"\n valueField=\"value\"\n dataItemKey=\"value\"\n :valuePrimitive=\"true\"\n :valid=\"stateDisplayValid\"\n :validate=\"validationStylesActive\"\n :validityStyles=\"validationStylesActive\"\n />\n <Error v-if=\"fieldScope && showStateError\">\n {{ resolvedMessages.field.error.state }}\n </Error>\n </div>\n\n <div class=\"zip\">\n <TextBox\n :id=\"fieldIds.zip\"\n :placeholder=\"resolvedMessages.placeholder.zip\"\n :wrapperClass=\"address.zipWrapperClass\"\n :value=\"address.zipDisplay.value\"\n @input=\"address.onZipInput\"\n :valid=\"zipDisplayValid\"\n :validate=\"validationStylesActive\"\n :validityStyles=\"validationStylesActive\"\n :style=\"{ width: '100%' }\"\n />\n <Error v-if=\"fieldScope && showZipError\">\n {{ resolvedMessages.field.error.zip }}\n </Error>\n <Hint v-if=\"fieldScope && !showZipError\">\n {{ resolvedMessages.field.hint.zip }}\n </Hint>\n </div>\n\n <div v-if=\"fieldsetScope\" class=\"messages\">\n <Error v-if=\"showErrors && !address.addressValid.value\">\n {{ fieldsetErrorMessage }}\n </Error>\n <Error v-else-if=\"showOptionalFeedback\">\n {{ optionalFieldsetErrorMessage }}\n </Error>\n <Hint v-else>{{ resolvedMessages.fieldset.hint.address }}</Hint>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from \"vue\";\nimport { Error, Hint } from \"@progress/kendo-vue-labels\";\nimport { TextBox } from \"@progress/kendo-vue-inputs\";\nimport { DropDownList } from \"@progress/kendo-vue-dropdowns\";\nimport type {\n USAddressMessageScope,\n USAddressMessages,\n USAddressViewModel,\n} from \"./types\";\n\nconst props = withDefaults(\n defineProps<{\n id: string;\n address: USAddressViewModel;\n required?: boolean;\n messageScope?: USAddressMessageScope;\n messages?: USAddressMessages;\n showAddress2?: boolean;\n }>(),\n {\n required: true,\n messageScope: \"fieldset\",\n showAddress2: true,\n },\n);\n\nconst ZIP_CODE_MESSAGE = \"Enter a 5 or 9 digit zip code.\";\nconst OPTIONAL_FIELDS_MESSAGE = \"Incomplete address.\";\n\ntype USAddressResolvedMessages = {\n placeholder: {\n address1: string;\n address2: string;\n city: string;\n zip: string;\n };\n fieldset: {\n error: {\n required: string;\n zip: string;\n };\n hint: {\n address: string;\n };\n };\n field: {\n error: {\n address1: string;\n address2: string;\n city: string;\n state: string;\n zip: string;\n };\n hint: {\n address1: string;\n address2: string;\n city: string;\n state: string;\n zip: string;\n };\n };\n};\n\nconst DEFAULT_MESSAGES: USAddressResolvedMessages = {\n placeholder: {\n address1: \"Address Line 1\",\n address2: \"Address Line 2\",\n city: \"City\",\n zip: \"00000-0000\",\n },\n fieldset: {\n error: {\n required: \"Required fields are missing.\",\n zip: ZIP_CODE_MESSAGE,\n },\n hint: {\n address: \"Enter address information.\",\n },\n },\n field: {\n error: {\n address1: \"Required\",\n address2: \"\",\n city: \"Required\",\n state: \"Required\",\n zip: ZIP_CODE_MESSAGE,\n },\n hint: {\n address1: \"Enter address line 1.\",\n address2: \"Optional\",\n city: \"\",\n state: \"\",\n zip: ZIP_CODE_MESSAGE,\n },\n },\n};\n\nconst resolveMessages = (\n source?: USAddressMessages,\n): USAddressResolvedMessages => {\n return {\n placeholder: {\n address1:\n source?.placeholder?.address1 ?? DEFAULT_MESSAGES.placeholder.address1,\n address2:\n source?.placeholder?.address2 ?? DEFAULT_MESSAGES.placeholder.address2,\n city: source?.placeholder?.city ?? DEFAULT_MESSAGES.placeholder.city,\n zip: source?.placeholder?.zip ?? DEFAULT_MESSAGES.placeholder.zip,\n },\n fieldset: {\n error: {\n required:\n source?.fieldset?.error?.required ??\n DEFAULT_MESSAGES.fieldset.error.required,\n zip:\n source?.fieldset?.error?.zip ?? DEFAULT_MESSAGES.fieldset.error.zip,\n },\n hint: {\n address:\n source?.fieldset?.hint?.address ??\n DEFAULT_MESSAGES.fieldset.hint.address,\n },\n },\n field: {\n error: {\n address1:\n source?.field?.error?.address1 ??\n DEFAULT_MESSAGES.field.error.address1,\n address2:\n source?.field?.error?.address2 ??\n DEFAULT_MESSAGES.field.error.address2,\n city: source?.field?.error?.city ?? DEFAULT_MESSAGES.field.error.city,\n state:\n source?.field?.error?.state ?? DEFAULT_MESSAGES.field.error.state,\n zip: source?.field?.error?.zip ?? DEFAULT_MESSAGES.field.error.zip,\n },\n hint: {\n address1:\n source?.field?.hint?.address1 ?? DEFAULT_MESSAGES.field.hint.address1,\n address2:\n source?.field?.hint?.address2 ?? DEFAULT_MESSAGES.field.hint.address2,\n city: source?.field?.hint?.city ?? DEFAULT_MESSAGES.field.hint.city,\n state: source?.field?.hint?.state ?? DEFAULT_MESSAGES.field.hint.state,\n zip: source?.field?.hint?.zip ?? DEFAULT_MESSAGES.field.hint.zip,\n },\n },\n };\n};\n\nconst resolvedMessages = computed(() => resolveMessages(props.messages));\n\nconst fieldScope = computed(() => {\n return props.messageScope === \"field\";\n});\n\nconst fieldsetScope = computed(() => {\n return props.messageScope === \"fieldset\";\n});\n\nconst isRequired = computed(() => props.required);\n\nconst showErrors = computed(() => isRequired.value);\n\nconst fieldIds = computed(() => ({\n address1: `${props.id}-address1`,\n address2: `${props.id}-address2`,\n city: `${props.id}-city`,\n state: `${props.id}-state`,\n zip: `${props.id}-zip`,\n}));\n\nconst address = computed(() => props.address);\n\nconst nonZipRequiredFieldsValid = computed(() => {\n return (\n address.value.address1Valid.value &&\n address.value.cityValid.value &&\n address.value.stateValid.value\n );\n});\n\nconst hasAnyOptionalInput = computed(() => {\n return (\n address.value.formData.address1.trim() !== \"\" ||\n address.value.formData.address2.trim() !== \"\" ||\n address.value.formData.city.trim() !== \"\" ||\n (address.value.formData.state ?? \"\").trim() !== \"\" ||\n address.value.formData.zip.replace(/\\D/g, \"\") !== \"\"\n );\n});\n\nconst optionalZipInvalid = computed(() => {\n if (address.value.optionalZipInvalid) {\n return address.value.optionalZipInvalid.value;\n }\n\n const zipDigits = address.value.formData.zip.replace(/\\D/g, \"\");\n return (\n !isRequired.value &&\n hasAnyOptionalInput.value &&\n zipDigits.length !== 5 &&\n zipDigits.length !== 9\n );\n});\n\nconst optionalPartialInvalid = computed(() => {\n if (address.value.optionalPartialInvalid) {\n return address.value.optionalPartialInvalid.value;\n }\n\n return (\n !isRequired.value &&\n hasAnyOptionalInput.value &&\n !address.value.addressValid.value\n );\n});\n\nconst showOptionalFeedback = computed(() => {\n if (isRequired.value || !optionalPartialInvalid.value) {\n return false;\n }\n\n if (address.value.optionalFeedbackActive) {\n return address.value.optionalFeedbackActive.value;\n }\n\n return false;\n});\n\nconst showAddress1Error = computed(() => {\n return (\n (showErrors.value && !address.value.address1Valid.value) ||\n (showOptionalFeedback.value &&\n address.value.formData.address1.trim() === \"\")\n );\n});\n\nconst showCityError = computed(() => {\n return (\n (showErrors.value && !address.value.cityValid.value) ||\n (showOptionalFeedback.value && address.value.formData.city.trim() === \"\")\n );\n});\n\nconst showStateError = computed(() => {\n return (\n (showErrors.value && !address.value.stateValid.value) ||\n (showOptionalFeedback.value &&\n (address.value.formData.state ?? \"\").trim() === \"\")\n );\n});\n\nconst showZipError = computed(() => {\n return (\n (showErrors.value && !address.value.zipValid.value) ||\n (showOptionalFeedback.value && optionalZipInvalid.value)\n );\n});\n\nconst validationStylesActive = computed(() => {\n return isRequired.value\n ? address.value.addressValidate.value\n : showOptionalFeedback.value;\n});\n\nconst address1DisplayValid = computed(() => {\n return isRequired.value\n ? address.value.address1Valid.value\n : !showAddress1Error.value;\n});\n\nconst cityDisplayValid = computed(() => {\n return isRequired.value\n ? address.value.cityValid.value\n : !showCityError.value;\n});\n\nconst stateDisplayValid = computed(() => {\n return isRequired.value\n ? address.value.stateValid.value\n : !showStateError.value;\n});\n\nconst zipDisplayValid = computed(() => {\n return isRequired.value ? address.value.zipValid.value : !showZipError.value;\n});\n\nconst address2PlaceholderDisplay = computed(() => {\n const basePlaceholder = resolvedMessages.value.placeholder.address2;\n\n if (fieldsetScope.value && isRequired.value) {\n return `${basePlaceholder} (Optional)`;\n }\n return basePlaceholder;\n});\n\nconst fieldsetErrorMessage = computed(() => {\n const messages: string[] = [];\n\n if (!nonZipRequiredFieldsValid.value) {\n messages.push(resolvedMessages.value.fieldset.error.required);\n }\n\n if (!address.value.zipValid.value) {\n messages.push(resolvedMessages.value.fieldset.error.zip);\n }\n\n return messages.join(\" \");\n});\n\nconst optionalFieldsetErrorMessage = computed(() => {\n const messages: string[] = [OPTIONAL_FIELDS_MESSAGE];\n\n if (optionalZipInvalid.value) {\n messages.push(resolvedMessages.value.fieldset.error.zip);\n }\n\n return messages.join(\" \");\n});\n</script>\n\n<style scoped>\n.fkui-us-address {\n display: grid;\n grid-template-columns: 2fr 1fr 1fr;\n grid-template-areas:\n \"address1 address1 address1\"\n \"address2 address2 address2\"\n \"city state zip\"\n \"messages messages messages\";\n gap: 0.75rem;\n margin-bottom: 1rem;\n\n .address1 {\n grid-area: address1;\n }\n\n .address2 {\n grid-area: address2;\n }\n\n .city {\n grid-area: city;\n }\n\n .state {\n grid-area: state;\n }\n\n .zip {\n grid-area: zip;\n }\n\n .messages {\n grid-area: messages;\n }\n\n :deep(.fk-zip-textbox) {\n min-width: 100%;\n }\n}\n\n.fkui-us-address--fieldset-scope {\n row-gap: 0.5rem;\n\n .messages {\n margin-top: -0.375rem;\n }\n}\n</style>\n","<template>\n <td\n :id=\"id ?? ids.instanceId\"\n :class=\"['fkui-action-cell', 'k-table-td', className]\"\n :style=\"style\"\n :colspan=\"colSpan\"\n role=\"gridcell\"\n :aria-colindex=\"ariaColumnIndex\"\n :aria-selected=\"isSelected\"\n :data-grid-col-index=\"columnIndex\"\n >\n <Button\n v-for=\"trigger in config.triggers\"\n :key=\"trigger.key\"\n :ref=\"\n hasMenu(trigger)\n ? (element) => registerTrigger(trigger, element)\n : undefined\n \"\n :id=\"ids.compose(trigger.key, 'trigger')\"\n :svg-icon=\"trigger.icon\"\n type=\"button\"\n fill-mode=\"flat\"\n theme-color=\"primary\"\n rounded=\"full\"\n :aria-label=\"trigger.ariaLabel\"\n :aria-haspopup=\"hasMenu(trigger) ? 'menu' : undefined\"\n :aria-expanded=\"hasMenu(trigger) ? isTriggerActive(trigger) : undefined\"\n :disabled=\"trigger.disabled?.(dataItem)\"\n :tabindex=\"tabIndex\"\n @click=\"onTriggerClick(trigger)\"\n @keydown=\"onTriggerKeydown(trigger, $event)\"\n />\n </td>\n</template>\n\n<script setup lang=\"ts\">\nimport type { ComponentPublicInstance } from \"vue\";\nimport { Button } from \"@progress/kendo-vue-buttons\";\nimport type { GridCellProps } from \"@progress/kendo-vue-grid\";\nimport {\n useCompositeId,\n type RegisterableElement,\n} from \"@featherk/composables\";\nimport type {\n ActionCellConfig,\n ActionCellMenuController,\n ActionCellTrigger,\n} from \"./types\";\n\ndefineOptions({ inheritAttrs: false });\n\ntype ActionCellProps = Partial<\n Pick<\n GridCellProps,\n | \"id\"\n | \"className\"\n | \"style\"\n | \"colSpan\"\n | \"ariaColumnIndex\"\n | \"isSelected\"\n | \"columnIndex\"\n >\n> & {\n dataItem: any;\n config: ActionCellConfig<any>;\n menuController: ActionCellMenuController<any>;\n tabIndex?: number;\n};\n\nconst props = withDefaults(defineProps<ActionCellProps>(), {\n tabIndex: -1,\n});\n\nconst ids = useCompositeId(\"action-cell\");\n\nconst getTriggerId = (trigger: ActionCellTrigger<any>) =>\n props.menuController.getTriggerId(trigger, props.dataItem);\n\nconst isTriggerActive = (trigger: ActionCellTrigger<any>) =>\n props.menuController.registry.isIdActive(getTriggerId(trigger));\n\nconst hasMenu = (trigger: ActionCellTrigger<any>) =>\n typeof trigger.items === \"function\";\n\nconst registerTrigger = (\n trigger: ActionCellTrigger<any>,\n element: Element | ComponentPublicInstance | null,\n) => {\n props.menuController.registry.register(\n getTriggerId(trigger),\n element as RegisterableElement,\n );\n};\n\nconst onTriggerClick = (trigger: ActionCellTrigger<any>) => {\n if (!hasMenu(trigger)) {\n props.menuController.handleDirectAction?.(trigger, props.dataItem);\n return;\n }\n props.menuController.handleTriggerClick(getTriggerId(trigger));\n};\n\nconst onTriggerKeydown = (\n trigger: ActionCellTrigger<any>,\n ...args: unknown[]\n) => {\n if (!hasMenu(trigger)) return;\n props.menuController.handleTriggerKeydown(getTriggerId(trigger), ...args);\n};\n</script>\n","import {\n computed,\n nextTick,\n toValue,\n type ComputedRef,\n type MaybeRefOrGetter,\n} from \"vue\";\nimport {\n useActiveIdRegistry,\n usePopupMenu,\n type KendoMenuSelectEvent,\n type PopupMenuAnchorOptions,\n type PopupMenuElementRef,\n type PopupMenuOffset,\n type PopupMenuTriggerMode,\n type UseExclusiveGroupReturn,\n} from \"@featherk/composables\";\nimport type {\n ActionCellConfig,\n ActionCellDataItem,\n ActionCellMenuController,\n ActionCellMenuItem,\n} from \"./types\";\n\nexport type UseActionCellMenuOptions<\n TData extends ActionCellDataItem = ActionCellDataItem,\n TConfig extends ActionCellConfig<TData> = ActionCellConfig<TData>,\n> = {\n /** Repeatable trigger configuration, rendered by every `ActionCell` instance. */\n config: TConfig;\n /** All rows currently rendered; used to resolve the active row from its registry id. */\n rows: MaybeRefOrGetter<TData[]>;\n /** Derives a stable row id used to build the default registry id for each trigger. */\n getRowId: (row: TData) => string | number;\n /**\n * Overrides the registry ID formatting while preserving `<trigger.key>:<rowId>` semantics.\n * Active row and trigger resolution parse the first colon-separated segment as the trigger\n * key and the remaining segments as the row ID.\n */\n getTriggerId?: (trigger: TConfig[\"triggers\"][number], row: TData) => string;\n /** Ref to the single shared Kendo Menu instance. */\n menuRef: PopupMenuElementRef;\n /** Forwarded to `usePopupMenu`. Defaults to `\"button\"`. */\n triggerMode?: PopupMenuTriggerMode;\n /** Forwarded to `usePopupMenu`. Defaults to `true` for shared-popup positioning. */\n anchor?: PopupMenuAnchorOptions | true;\n /** Forwarded to `usePopupMenu`. */\n resolveFocusTarget?: () => HTMLElement | null;\n /** Forwarded to `usePopupMenu`. */\n focusTargetContainerSelector?: string;\n /** Coordinates mutual exclusivity with other active-id registries in this group. */\n group?: UseExclusiveGroupReturn;\n /**\n * Runs after a menu item is selected, with its original item and resolved row/trigger.\n * Direct-action triggers have no menu item and pass `undefined`.\n */\n onActionSelected: (\n item: ActionCellMenuItem | undefined,\n row: TData,\n trigger: TConfig[\"triggers\"][number],\n ) => void;\n};\n\nexport type UseActionCellMenuReturn<\n TData extends ActionCellDataItem = ActionCellDataItem,\n TConfig extends ActionCellConfig<TData> = ActionCellConfig<TData>,\n> = {\n /** Spread onto every `<ActionCell>` instance. */\n actionCellProps: {\n config: TConfig;\n menuController: ActionCellMenuController<TData>;\n };\n /** Spread onto the single shared `<Popup>`. */\n popupProps: ComputedRef<{\n show: boolean;\n offset: PopupMenuOffset;\n onClose: () => void;\n }>;\n /** Spread onto the single shared Kendo `<Menu>`. */\n menuProps: ComputedRef<{\n items: ActionCellMenuItem[];\n vertical: true;\n onKeydown: (event: KeyboardEvent) => void;\n onSelect: (event: KendoMenuSelectEvent<ActionCellMenuItem>) => void;\n }>;\n /** Row resolved from the currently active trigger id, if any. */\n activeRow: ComputedRef<TData | null>;\n /** Trigger config resolved from the currently active trigger id, if any. */\n activeTrigger: ComputedRef<TConfig[\"triggers\"][number] | null>;\n /** Resolved `trigger.title(activeRow)`, or `null` when unset/no trigger is active. Render this yourself (e.g. `<strong>`) above the `<Menu>` — it is not part of `menuProps.items`. */\n activeTitle: ComputedRef<string | null>;\n};\n\n/**\n * Bundles the shared-popup wiring a parent needs to drive `ActionCell`: one\n * `useActiveIdRegistry`, one `usePopupMenu`, and the derived active\n * row/trigger/menu items. The parent still owns the `<Popup>`/`<Menu>`\n * template elements and any business logic for the selected action.\n */\nexport const useActionCellMenu = <\n TData extends ActionCellDataItem = ActionCellDataItem,\n TConfig extends ActionCellConfig<TData> = ActionCellConfig<TData>,\n>(\n options: UseActionCellMenuOptions<TData, TConfig>,\n): UseActionCellMenuReturn<TData, TConfig> => {\n const registry = useActiveIdRegistry<string>();\n options.group?.register(registry);\n\n const getTriggerId =\n options.getTriggerId ??\n ((trigger: TConfig[\"triggers\"][number], row: TData) =>\n `${trigger.key}:${options.getRowId(row)}`);\n\n const activeTrigger = computed(() => {\n const key = registry.activeId.value?.split(\":\")[0];\n return (\n (options.config.triggers.find((trigger) => trigger.key === key) as\n | TConfig[\"triggers\"][number]\n | undefined) ?? null\n );\n });\n\n const activeRow = computed(() => {\n const rowId = registry.activeId.value?.split(\":\").slice(1).join(\":\");\n if (rowId === undefined) return null;\n return (\n toValue(options.rows).find(\n (row) => String(options.getRowId(row)) === rowId,\n ) ?? null\n );\n });\n\n const activeMenuItems = computed<ActionCellMenuItem[]>(() => {\n const row = activeRow.value;\n const trigger = activeTrigger.value;\n return row && trigger ? (trigger.items?.(row) ?? []) : [];\n });\n\n const activeTitle = computed<string | null>(() => {\n const row = activeRow.value;\n const trigger = activeTrigger.value;\n return row &&\n trigger &&\n typeof trigger.items === \"function\" &&\n trigger.title\n ? trigger.title(row)\n : null;\n });\n\n const popupMenu = usePopupMenu({\n isOpen: registry.isActive,\n triggerRef: registry.activeElement,\n menuRef: options.menuRef,\n triggerMode: options.triggerMode ?? \"button\",\n anchor: options.anchor ?? true,\n resolveFocusTarget: options.resolveFocusTarget,\n focusTargetContainerSelector: options.focusTargetContainerSelector,\n requestShow: (id) => {\n if (typeof id === \"string\") registry.activate(id);\n },\n requestHide: () => registry.deactivate(),\n menuLabel: activeTitle,\n });\n\n let triggerInteractionSequence = 0;\n\n const handleTriggerClick = (id: string) => {\n const interactionSequence = ++triggerInteractionSequence;\n options.group?.deactivateOthers(registry);\n\n if (registry.isActive.value && !registry.isIdActive(id)) {\n registry.deactivate();\n void nextTick(() => {\n if (interactionSequence === triggerInteractionSequence) {\n popupMenu.handleTriggerClick(id);\n }\n });\n return;\n }\n\n popupMenu.handleTriggerClick(id);\n };\n\n const handleDirectAction = (\n trigger: TConfig[\"triggers\"][number],\n row: TData,\n ) => {\n triggerInteractionSequence++;\n options.group?.deactivateOthers(registry);\n registry.deactivate();\n options.onActionSelected(undefined, row, trigger);\n };\n\n const handleTriggerKeydown = (id: string, ...args: unknown[]) => {\n const event = args[0] as KeyboardEvent;\n if (event.key === \"Enter\" || event.code === \"Space\") {\n event.preventDefault();\n handleTriggerClick(id);\n return;\n }\n popupMenu.handleTriggerKeydown(event, id);\n };\n\n const onMenuKeydown = (event: KeyboardEvent) => {\n if (event.key === \"Escape\") popupMenu.handleMenuEscape(event);\n };\n\n const onMenuSelect = (event: KendoMenuSelectEvent<ActionCellMenuItem>) => {\n const row = activeRow.value;\n const trigger = activeTrigger.value;\n popupMenu.handleMenuSelect(event, () => {\n if (row && trigger) {\n options.onActionSelected(event.item, row, trigger);\n }\n });\n };\n\n return {\n actionCellProps: {\n config: options.config,\n menuController: {\n registry,\n getTriggerId,\n handleTriggerClick,\n handleDirectAction,\n handleTriggerKeydown,\n },\n },\n popupProps: computed(() => ({\n show: registry.isActive.value,\n offset: popupMenu.offset.value,\n onClose: popupMenu.handlePopupClose,\n })),\n menuProps: computed(() => ({\n items: activeMenuItems.value,\n vertical: true as const,\n onKeydown: onMenuKeydown,\n onSelect: onMenuSelect,\n })),\n activeRow,\n activeTrigger,\n activeTitle,\n };\n};\n"],"names":["ZIP_CODE_MESSAGE","OPTIONAL_FIELDS_MESSAGE","props","__props","DEFAULT_MESSAGES","resolveMessages","source","resolvedMessages","computed","fieldScope","fieldsetScope","isRequired","showErrors","fieldIds","address","nonZipRequiredFieldsValid","hasAnyOptionalInput","optionalZipInvalid","zipDigits","optionalPartialInvalid","showOptionalFeedback","showAddress1Error","showCityError","showStateError","showZipError","validationStylesActive","address1DisplayValid","cityDisplayValid","stateDisplayValid","zipDisplayValid","address2PlaceholderDisplay","basePlaceholder","fieldsetErrorMessage","messages","optionalFieldsetErrorMessage","_createElementBlock","_normalizeClass","_createElementVNode","_hoisted_1","_createVNode","_unref","TextBox","_Fragment","_createBlock","Error","_createTextVNode","_toDisplayString","Hint","showAddress2","_openBlock","_hoisted_2","_hoisted_3","_hoisted_4","DropDownList","_hoisted_5","_hoisted_6","ids","useCompositeId","getTriggerId","trigger","isTriggerActive","hasMenu","registerTrigger","element","onTriggerClick","onTriggerKeydown","args","id","className","style","colSpan","ariaColumnIndex","isSelected","columnIndex","_renderList","config","Button","dataItem","tabIndex","$event","useActionCellMenu","options","registry","useActiveIdRegistry","row","activeTrigger","key","activeRow","rowId","toValue","activeMenuItems","activeTitle","popupMenu","usePopupMenu","triggerInteractionSequence","handleTriggerClick","interactionSequence","nextTick","handleDirectAction","handleTriggerKeydown","event","onMenuKeydown","onMenuSelect"],"mappings":"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"}
1
+ {"version":3,"file":"featherk-ui.es.js","sources":["../src/address/USAddress.vue","../src/table/ActionCell.vue","../src/table/useActionCellMenu.ts"],"sourcesContent":["<template>\n <div\n class=\"fkui-us-address\"\n :class=\"{ 'fkui-us-address--fieldset-scope': fieldsetScope }\"\n >\n <div class=\"address1\">\n <TextBox\n :id=\"fieldIds.address1\"\n :placeholder=\"resolvedMessages.placeholder.address1\"\n :value=\"address.formData.address1\"\n :valid=\"address1DisplayValid\"\n :validate=\"validationStylesActive\"\n :validityStyles=\"validationStylesActive\"\n @input=\"address.onAddress1Input\"\n />\n <template v-if=\"fieldScope\">\n <Error v-if=\"showAddress1Error\">\n {{ resolvedMessages.field.error.address1 }}\n </Error>\n <Hint v-else>{{ resolvedMessages.field.hint.address1 }}</Hint>\n </template>\n </div>\n\n <div v-if=\"showAddress2\" class=\"address2\">\n <TextBox\n :id=\"fieldIds.address2\"\n :placeholder=\"address2PlaceholderDisplay\"\n :value=\"address.formData.address2\"\n @input=\"address.onAddress2Input\"\n />\n <Hint v-if=\"fieldScope\">{{ resolvedMessages.field.hint.address2 }}</Hint>\n </div>\n\n <div class=\"city\">\n <TextBox\n :id=\"fieldIds.city\"\n :placeholder=\"resolvedMessages.placeholder.city\"\n :value=\"address.formData.city\"\n :valid=\"cityDisplayValid\"\n :validate=\"validationStylesActive\"\n :validityStyles=\"validationStylesActive\"\n @input=\"address.onCityInput\"\n />\n <Error v-if=\"fieldScope && showCityError\">\n {{ resolvedMessages.field.error.city }}\n </Error>\n </div>\n\n <div class=\"state\">\n <DropDownList\n :id=\"fieldIds.state\"\n :value=\"address.formData.state\"\n @change=\"address.onStateChange\"\n :defaultItem=\"address.stateDefaultItem\"\n :dataItems=\"address.stateOptions\"\n textField=\"label\"\n valueField=\"value\"\n dataItemKey=\"value\"\n :valuePrimitive=\"true\"\n :valid=\"stateDisplayValid\"\n :validate=\"validationStylesActive\"\n :validityStyles=\"validationStylesActive\"\n />\n <Error v-if=\"fieldScope && showStateError\">\n {{ resolvedMessages.field.error.state }}\n </Error>\n </div>\n\n <div class=\"zip\">\n <TextBox\n :id=\"fieldIds.zip\"\n :placeholder=\"resolvedMessages.placeholder.zip\"\n :wrapperClass=\"address.zipWrapperClass\"\n :value=\"address.zipDisplay.value\"\n @input=\"address.onZipInput\"\n :valid=\"zipDisplayValid\"\n :validate=\"validationStylesActive\"\n :validityStyles=\"validationStylesActive\"\n :style=\"{ width: '100%' }\"\n />\n <Error v-if=\"fieldScope && showZipError\">\n {{ resolvedMessages.field.error.zip }}\n </Error>\n <Hint v-if=\"fieldScope && !showZipError\">\n {{ resolvedMessages.field.hint.zip }}\n </Hint>\n </div>\n\n <div v-if=\"fieldsetScope\" class=\"messages\">\n <Error v-if=\"showErrors && !address.addressValid.value\">\n {{ fieldsetErrorMessage }}\n </Error>\n <Error v-else-if=\"showOptionalFeedback\">\n {{ optionalFieldsetErrorMessage }}\n </Error>\n <Hint v-else>{{ resolvedMessages.fieldset.hint.address }}</Hint>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from \"vue\";\nimport { Error, Hint } from \"@progress/kendo-vue-labels\";\nimport { TextBox } from \"@progress/kendo-vue-inputs\";\nimport { DropDownList } from \"@progress/kendo-vue-dropdowns\";\nimport type {\n USAddressMessageScope,\n USAddressMessages,\n USAddressViewModel,\n} from \"./types\";\n\nconst props = withDefaults(\n defineProps<{\n id: string;\n address: USAddressViewModel;\n required?: boolean;\n messageScope?: USAddressMessageScope;\n messages?: USAddressMessages;\n showAddress2?: boolean;\n }>(),\n {\n required: true,\n messageScope: \"fieldset\",\n showAddress2: true,\n },\n);\n\nconst ZIP_CODE_MESSAGE = \"Enter a 5 or 9 digit zip code.\";\nconst OPTIONAL_FIELDS_MESSAGE = \"Incomplete address.\";\n\ntype USAddressResolvedMessages = {\n placeholder: {\n address1: string;\n address2: string;\n city: string;\n zip: string;\n };\n fieldset: {\n error: {\n required: string;\n zip: string;\n };\n hint: {\n address: string;\n };\n };\n field: {\n error: {\n address1: string;\n address2: string;\n city: string;\n state: string;\n zip: string;\n };\n hint: {\n address1: string;\n address2: string;\n city: string;\n state: string;\n zip: string;\n };\n };\n};\n\nconst DEFAULT_MESSAGES: USAddressResolvedMessages = {\n placeholder: {\n address1: \"Address Line 1\",\n address2: \"Address Line 2\",\n city: \"City\",\n zip: \"00000-0000\",\n },\n fieldset: {\n error: {\n required: \"Required fields are missing.\",\n zip: ZIP_CODE_MESSAGE,\n },\n hint: {\n address: \"Enter address information.\",\n },\n },\n field: {\n error: {\n address1: \"Required\",\n address2: \"\",\n city: \"Required\",\n state: \"Required\",\n zip: ZIP_CODE_MESSAGE,\n },\n hint: {\n address1: \"Enter address line 1.\",\n address2: \"Optional\",\n city: \"\",\n state: \"\",\n zip: ZIP_CODE_MESSAGE,\n },\n },\n};\n\nconst resolveMessages = (\n source?: USAddressMessages,\n): USAddressResolvedMessages => {\n return {\n placeholder: {\n address1:\n source?.placeholder?.address1 ?? DEFAULT_MESSAGES.placeholder.address1,\n address2:\n source?.placeholder?.address2 ?? DEFAULT_MESSAGES.placeholder.address2,\n city: source?.placeholder?.city ?? DEFAULT_MESSAGES.placeholder.city,\n zip: source?.placeholder?.zip ?? DEFAULT_MESSAGES.placeholder.zip,\n },\n fieldset: {\n error: {\n required:\n source?.fieldset?.error?.required ??\n DEFAULT_MESSAGES.fieldset.error.required,\n zip:\n source?.fieldset?.error?.zip ?? DEFAULT_MESSAGES.fieldset.error.zip,\n },\n hint: {\n address:\n source?.fieldset?.hint?.address ??\n DEFAULT_MESSAGES.fieldset.hint.address,\n },\n },\n field: {\n error: {\n address1:\n source?.field?.error?.address1 ??\n DEFAULT_MESSAGES.field.error.address1,\n address2:\n source?.field?.error?.address2 ??\n DEFAULT_MESSAGES.field.error.address2,\n city: source?.field?.error?.city ?? DEFAULT_MESSAGES.field.error.city,\n state:\n source?.field?.error?.state ?? DEFAULT_MESSAGES.field.error.state,\n zip: source?.field?.error?.zip ?? DEFAULT_MESSAGES.field.error.zip,\n },\n hint: {\n address1:\n source?.field?.hint?.address1 ?? DEFAULT_MESSAGES.field.hint.address1,\n address2:\n source?.field?.hint?.address2 ?? DEFAULT_MESSAGES.field.hint.address2,\n city: source?.field?.hint?.city ?? DEFAULT_MESSAGES.field.hint.city,\n state: source?.field?.hint?.state ?? DEFAULT_MESSAGES.field.hint.state,\n zip: source?.field?.hint?.zip ?? DEFAULT_MESSAGES.field.hint.zip,\n },\n },\n };\n};\n\nconst resolvedMessages = computed(() => resolveMessages(props.messages));\n\nconst fieldScope = computed(() => {\n return props.messageScope === \"field\";\n});\n\nconst fieldsetScope = computed(() => {\n return props.messageScope === \"fieldset\";\n});\n\nconst isRequired = computed(() => props.required);\n\nconst showErrors = computed(() => isRequired.value);\n\nconst fieldIds = computed(() => ({\n address1: `${props.id}-address1`,\n address2: `${props.id}-address2`,\n city: `${props.id}-city`,\n state: `${props.id}-state`,\n zip: `${props.id}-zip`,\n}));\n\nconst address = computed(() => props.address);\n\nconst nonZipRequiredFieldsValid = computed(() => {\n return (\n address.value.address1Valid.value &&\n address.value.cityValid.value &&\n address.value.stateValid.value\n );\n});\n\nconst hasAnyOptionalInput = computed(() => {\n return (\n address.value.formData.address1.trim() !== \"\" ||\n address.value.formData.address2.trim() !== \"\" ||\n address.value.formData.city.trim() !== \"\" ||\n (address.value.formData.state ?? \"\").trim() !== \"\" ||\n address.value.formData.zip.replace(/\\D/g, \"\") !== \"\"\n );\n});\n\nconst optionalZipInvalid = computed(() => {\n if (address.value.optionalZipInvalid) {\n return address.value.optionalZipInvalid.value;\n }\n\n const zipDigits = address.value.formData.zip.replace(/\\D/g, \"\");\n return (\n !isRequired.value &&\n hasAnyOptionalInput.value &&\n zipDigits.length !== 5 &&\n zipDigits.length !== 9\n );\n});\n\nconst optionalPartialInvalid = computed(() => {\n if (address.value.optionalPartialInvalid) {\n return address.value.optionalPartialInvalid.value;\n }\n\n return (\n !isRequired.value &&\n hasAnyOptionalInput.value &&\n !address.value.addressValid.value\n );\n});\n\nconst showOptionalFeedback = computed(() => {\n if (isRequired.value || !optionalPartialInvalid.value) {\n return false;\n }\n\n if (address.value.optionalFeedbackActive) {\n return address.value.optionalFeedbackActive.value;\n }\n\n return false;\n});\n\nconst showAddress1Error = computed(() => {\n return (\n (showErrors.value && !address.value.address1Valid.value) ||\n (showOptionalFeedback.value &&\n address.value.formData.address1.trim() === \"\")\n );\n});\n\nconst showCityError = computed(() => {\n return (\n (showErrors.value && !address.value.cityValid.value) ||\n (showOptionalFeedback.value && address.value.formData.city.trim() === \"\")\n );\n});\n\nconst showStateError = computed(() => {\n return (\n (showErrors.value && !address.value.stateValid.value) ||\n (showOptionalFeedback.value &&\n (address.value.formData.state ?? \"\").trim() === \"\")\n );\n});\n\nconst showZipError = computed(() => {\n return (\n (showErrors.value && !address.value.zipValid.value) ||\n (showOptionalFeedback.value && optionalZipInvalid.value)\n );\n});\n\nconst validationStylesActive = computed(() => {\n return isRequired.value\n ? address.value.addressValidate.value\n : showOptionalFeedback.value;\n});\n\nconst address1DisplayValid = computed(() => {\n return isRequired.value\n ? address.value.address1Valid.value\n : !showAddress1Error.value;\n});\n\nconst cityDisplayValid = computed(() => {\n return isRequired.value\n ? address.value.cityValid.value\n : !showCityError.value;\n});\n\nconst stateDisplayValid = computed(() => {\n return isRequired.value\n ? address.value.stateValid.value\n : !showStateError.value;\n});\n\nconst zipDisplayValid = computed(() => {\n return isRequired.value ? address.value.zipValid.value : !showZipError.value;\n});\n\nconst address2PlaceholderDisplay = computed(() => {\n const basePlaceholder = resolvedMessages.value.placeholder.address2;\n\n if (fieldsetScope.value && isRequired.value) {\n return `${basePlaceholder} (Optional)`;\n }\n return basePlaceholder;\n});\n\nconst fieldsetErrorMessage = computed(() => {\n const messages: string[] = [];\n\n if (!nonZipRequiredFieldsValid.value) {\n messages.push(resolvedMessages.value.fieldset.error.required);\n }\n\n if (!address.value.zipValid.value) {\n messages.push(resolvedMessages.value.fieldset.error.zip);\n }\n\n return messages.join(\" \");\n});\n\nconst optionalFieldsetErrorMessage = computed(() => {\n const messages: string[] = [OPTIONAL_FIELDS_MESSAGE];\n\n if (optionalZipInvalid.value) {\n messages.push(resolvedMessages.value.fieldset.error.zip);\n }\n\n return messages.join(\" \");\n});\n</script>\n\n<style scoped>\n.fkui-us-address {\n display: grid;\n grid-template-columns: 2fr 1fr 1fr;\n grid-template-areas:\n \"address1 address1 address1\"\n \"address2 address2 address2\"\n \"city state zip\"\n \"messages messages messages\";\n gap: 0.75rem;\n margin-bottom: 1rem;\n\n .address1 {\n grid-area: address1;\n }\n\n .address2 {\n grid-area: address2;\n }\n\n .city {\n grid-area: city;\n }\n\n .state {\n grid-area: state;\n }\n\n .zip {\n grid-area: zip;\n }\n\n .messages {\n grid-area: messages;\n }\n\n :deep(.fk-zip-textbox) {\n min-width: 100%;\n }\n}\n\n.fkui-us-address--fieldset-scope {\n row-gap: 0.5rem;\n\n .messages {\n margin-top: -0.375rem;\n }\n}\n</style>\n","<template>\n <td\n :id=\"id ?? ids.instanceId\"\n :class=\"['fkui-action-cell', 'k-table-td', className]\"\n :style=\"style\"\n :colspan=\"colSpan\"\n role=\"gridcell\"\n :aria-colindex=\"ariaColumnIndex\"\n :aria-selected=\"isSelected\"\n :data-grid-col-index=\"columnIndex\"\n >\n <Button\n v-for=\"trigger in config.triggers\"\n :key=\"trigger.key\"\n :ref=\"\n hasMenu(trigger)\n ? (element) => registerTrigger(trigger, element)\n : undefined\n \"\n :id=\"ids.compose(trigger.key, 'trigger')\"\n :svg-icon=\"trigger.icon\"\n type=\"button\"\n fill-mode=\"flat\"\n theme-color=\"primary\"\n rounded=\"full\"\n :aria-label=\"trigger.ariaLabel\"\n :aria-haspopup=\"hasMenu(trigger) ? 'menu' : undefined\"\n :aria-expanded=\"hasMenu(trigger) ? isTriggerActive(trigger) : undefined\"\n :disabled=\"trigger.disabled?.(dataItem)\"\n :tabindex=\"tabIndex\"\n @click=\"onTriggerClick(trigger)\"\n @keydown=\"onTriggerKeydown(trigger, $event)\"\n />\n </td>\n</template>\n\n<script setup lang=\"ts\">\nimport type { ComponentPublicInstance } from \"vue\";\nimport { Button } from \"@progress/kendo-vue-buttons\";\nimport type { GridCellProps } from \"@progress/kendo-vue-grid\";\nimport {\n useCompositeId,\n type RegisterableElement,\n} from \"@featherk/composables\";\nimport type {\n ActionCellConfig,\n ActionCellMenuController,\n ActionCellTrigger,\n} from \"./types\";\n\ndefineOptions({ inheritAttrs: false });\n\ntype ActionCellProps = Partial<\n Pick<\n GridCellProps,\n | \"id\"\n | \"className\"\n | \"style\"\n | \"colSpan\"\n | \"ariaColumnIndex\"\n | \"isSelected\"\n | \"columnIndex\"\n >\n> & {\n dataItem: any;\n config: ActionCellConfig<any>;\n menuController: ActionCellMenuController<any>;\n tabIndex?: number;\n};\n\nconst props = withDefaults(defineProps<ActionCellProps>(), {\n tabIndex: -1,\n});\n\nconst ids = useCompositeId(\"action-cell\");\n\nconst getTriggerId = (trigger: ActionCellTrigger<any>) =>\n props.menuController.getTriggerId(trigger, props.dataItem);\n\nconst isTriggerActive = (trigger: ActionCellTrigger<any>) =>\n props.menuController.registry.isIdActive(getTriggerId(trigger));\n\nconst hasMenu = (trigger: ActionCellTrigger<any>) =>\n typeof trigger.items === \"function\";\n\nconst registerTrigger = (\n trigger: ActionCellTrigger<any>,\n element: Element | ComponentPublicInstance | null,\n) => {\n props.menuController.registry.register(\n getTriggerId(trigger),\n element as RegisterableElement,\n );\n};\n\nconst onTriggerClick = (trigger: ActionCellTrigger<any>) => {\n if (!hasMenu(trigger)) {\n props.menuController.handleDirectAction?.(trigger, props.dataItem);\n return;\n }\n props.menuController.handleTriggerClick(getTriggerId(trigger));\n};\n\nconst onTriggerKeydown = (\n trigger: ActionCellTrigger<any>,\n ...args: unknown[]\n) => {\n if (!hasMenu(trigger)) return;\n props.menuController.handleTriggerKeydown(getTriggerId(trigger), ...args);\n};\n</script>\n","import {\n computed,\n nextTick,\n toValue,\n type ComputedRef,\n type MaybeRefOrGetter,\n} from \"vue\";\nimport {\n useActiveIdRegistry,\n usePopupMenu,\n type KendoMenuSelectEvent,\n type PopupMenuAnchorOptions,\n type PopupMenuElementRef,\n type PopupMenuOffset,\n type PopupMenuTriggerMode,\n type UseExclusiveGroupReturn,\n} from \"@featherk/composables\";\nimport type {\n ActionCellConfig,\n ActionCellDataItem,\n ActionCellMenuController,\n ActionCellMenuItem,\n} from \"./types\";\n\nexport type UseActionCellMenuOptions<\n TData extends ActionCellDataItem = ActionCellDataItem,\n TConfig extends ActionCellConfig<TData> = ActionCellConfig<TData>,\n> = {\n /** Repeatable trigger configuration, rendered by every `ActionCell` instance. */\n config: TConfig;\n /** All rows currently rendered; used to resolve the active row from its registry id. */\n rows: MaybeRefOrGetter<TData[]>;\n /** Derives a stable row id used to build the default registry id for each trigger. */\n getRowId: (row: TData) => string | number;\n /**\n * Overrides the registry ID formatting while preserving `<trigger.key>:<rowId>` semantics.\n * Active row and trigger resolution parse the first colon-separated segment as the trigger\n * key and the remaining segments as the row ID.\n */\n getTriggerId?: (trigger: TConfig[\"triggers\"][number], row: TData) => string;\n /** Ref to the single shared Kendo Menu instance. */\n menuRef: PopupMenuElementRef;\n /**\n * Ref to the full rendered popup content (e.g. a wrapper containing both\n * `activeTitle` and the Menu). Forwarded to `usePopupMenu`'s\n * `popupContentRef`; only needed for a non-\"left\"/\"top\" `anchor.popupAlign`,\n * otherwise `menuRef` alone under-measures the popup whenever anything\n * besides the Menu (e.g. the title) is rendered inside it.\n */\n popupContentRef?: PopupMenuElementRef;\n /** Forwarded to `usePopupMenu`. Defaults to `\"button\"`. */\n triggerMode?: PopupMenuTriggerMode;\n /** Forwarded to `usePopupMenu`. Defaults to `true` for shared-popup positioning. */\n anchor?: PopupMenuAnchorOptions | true;\n /** Forwarded to `usePopupMenu`. */\n resolveFocusTarget?: () => HTMLElement | null;\n /** Forwarded to `usePopupMenu`. */\n focusTargetContainerSelector?: string;\n /** Coordinates mutual exclusivity with other active-id registries in this group. */\n group?: UseExclusiveGroupReturn;\n /**\n * Runs after a menu item is selected, with its original item and resolved row/trigger.\n * Direct-action triggers have no menu item and pass `undefined`.\n */\n onActionSelected: (\n item: ActionCellMenuItem | undefined,\n row: TData,\n trigger: TConfig[\"triggers\"][number],\n ) => void;\n};\n\nexport type UseActionCellMenuReturn<\n TData extends ActionCellDataItem = ActionCellDataItem,\n TConfig extends ActionCellConfig<TData> = ActionCellConfig<TData>,\n> = {\n /** Spread onto every `<ActionCell>` instance. */\n actionCellProps: {\n config: TConfig;\n menuController: ActionCellMenuController<TData>;\n };\n /** Spread onto the single shared `<Popup>`. */\n popupProps: ComputedRef<{\n show: boolean;\n offset: PopupMenuOffset;\n onClose: () => void;\n }>;\n /** Spread onto the single shared Kendo `<Menu>`. */\n menuProps: ComputedRef<{\n items: ActionCellMenuItem[];\n vertical: true;\n onKeydown: (event: KeyboardEvent) => void;\n onSelect: (event: KendoMenuSelectEvent<ActionCellMenuItem>) => void;\n }>;\n /** Row resolved from the currently active trigger id, if any. */\n activeRow: ComputedRef<TData | null>;\n /** Trigger config resolved from the currently active trigger id, if any. */\n activeTrigger: ComputedRef<TConfig[\"triggers\"][number] | null>;\n /** Resolved `trigger.title(activeRow)`, or `null` when unset/no trigger is active. Render this yourself (e.g. `<strong>`) above the `<Menu>` — it is not part of `menuProps.items`. */\n activeTitle: ComputedRef<string | null>;\n};\n\n/**\n * Bundles the shared-popup wiring a parent needs to drive `ActionCell`: one\n * `useActiveIdRegistry`, one `usePopupMenu`, and the derived active\n * row/trigger/menu items. The parent still owns the `<Popup>`/`<Menu>`\n * template elements and any business logic for the selected action.\n */\nexport const useActionCellMenu = <\n TData extends ActionCellDataItem = ActionCellDataItem,\n TConfig extends ActionCellConfig<TData> = ActionCellConfig<TData>,\n>(\n options: UseActionCellMenuOptions<TData, TConfig>,\n): UseActionCellMenuReturn<TData, TConfig> => {\n const registry = useActiveIdRegistry<string>();\n options.group?.register(registry);\n\n const getTriggerId =\n options.getTriggerId ??\n ((trigger: TConfig[\"triggers\"][number], row: TData) =>\n `${trigger.key}:${options.getRowId(row)}`);\n\n const activeTrigger = computed(() => {\n const key = registry.activeId.value?.split(\":\")[0];\n return (\n (options.config.triggers.find((trigger) => trigger.key === key) as\n | TConfig[\"triggers\"][number]\n | undefined) ?? null\n );\n });\n\n const activeRow = computed(() => {\n const rowId = registry.activeId.value?.split(\":\").slice(1).join(\":\");\n if (rowId === undefined) return null;\n return (\n toValue(options.rows).find(\n (row) => String(options.getRowId(row)) === rowId,\n ) ?? null\n );\n });\n\n const activeMenuItems = computed<ActionCellMenuItem[]>(() => {\n const row = activeRow.value;\n const trigger = activeTrigger.value;\n return row && trigger ? (trigger.items?.(row) ?? []) : [];\n });\n\n const activeTitle = computed<string | null>(() => {\n const row = activeRow.value;\n const trigger = activeTrigger.value;\n return row &&\n trigger &&\n typeof trigger.items === \"function\" &&\n trigger.title\n ? trigger.title(row)\n : null;\n });\n\n const popupMenu = usePopupMenu({\n isOpen: registry.isActive,\n triggerRef: registry.activeElement,\n menuRef: options.menuRef,\n popupContentRef: options.popupContentRef,\n triggerMode: options.triggerMode ?? \"button\",\n anchor: options.anchor ?? true,\n resolveFocusTarget: options.resolveFocusTarget,\n focusTargetContainerSelector: options.focusTargetContainerSelector,\n requestShow: (id) => {\n if (typeof id === \"string\") registry.activate(id);\n },\n requestHide: () => registry.deactivate(),\n menuLabel: activeTitle,\n });\n\n let triggerInteractionSequence = 0;\n\n const handleTriggerClick = (id: string) => {\n const interactionSequence = ++triggerInteractionSequence;\n options.group?.deactivateOthers(registry);\n\n if (registry.isActive.value && !registry.isIdActive(id)) {\n registry.deactivate();\n void nextTick(() => {\n if (interactionSequence === triggerInteractionSequence) {\n popupMenu.handleTriggerClick(id);\n }\n });\n return;\n }\n\n popupMenu.handleTriggerClick(id);\n };\n\n const handleDirectAction = (\n trigger: TConfig[\"triggers\"][number],\n row: TData,\n ) => {\n triggerInteractionSequence++;\n options.group?.deactivateOthers(registry);\n registry.deactivate();\n options.onActionSelected(undefined, row, trigger);\n };\n\n const handleTriggerKeydown = (id: string, ...args: unknown[]) => {\n const event = args[0] as KeyboardEvent;\n if (event.key === \"Enter\" || event.code === \"Space\") {\n event.preventDefault();\n handleTriggerClick(id);\n return;\n }\n popupMenu.handleTriggerKeydown(event, id);\n };\n\n const onMenuKeydown = (event: KeyboardEvent) => {\n if (event.key === \"Escape\") popupMenu.handleMenuEscape(event);\n };\n\n const onMenuSelect = (event: KendoMenuSelectEvent<ActionCellMenuItem>) => {\n const row = activeRow.value;\n const trigger = activeTrigger.value;\n popupMenu.handleMenuSelect(event, () => {\n if (row && trigger) {\n options.onActionSelected(event.item, row, trigger);\n }\n });\n };\n\n return {\n actionCellProps: {\n config: options.config,\n menuController: {\n registry,\n getTriggerId,\n handleTriggerClick,\n handleDirectAction,\n handleTriggerKeydown,\n },\n },\n popupProps: computed(() => ({\n show: registry.isActive.value,\n offset: popupMenu.offset.value,\n onClose: popupMenu.handlePopupClose,\n })),\n menuProps: computed(() => ({\n items: activeMenuItems.value,\n vertical: true as const,\n onKeydown: onMenuKeydown,\n onSelect: onMenuSelect,\n })),\n activeRow,\n activeTrigger,\n activeTitle,\n };\n};\n"],"names":["ZIP_CODE_MESSAGE","OPTIONAL_FIELDS_MESSAGE","props","__props","DEFAULT_MESSAGES","resolveMessages","source","resolvedMessages","computed","fieldScope","fieldsetScope","isRequired","showErrors","fieldIds","address","nonZipRequiredFieldsValid","hasAnyOptionalInput","optionalZipInvalid","zipDigits","optionalPartialInvalid","showOptionalFeedback","showAddress1Error","showCityError","showStateError","showZipError","validationStylesActive","address1DisplayValid","cityDisplayValid","stateDisplayValid","zipDisplayValid","address2PlaceholderDisplay","basePlaceholder","fieldsetErrorMessage","messages","optionalFieldsetErrorMessage","_createElementBlock","_normalizeClass","_createElementVNode","_hoisted_1","_createVNode","_unref","TextBox","_Fragment","_createBlock","Error","_createTextVNode","_toDisplayString","Hint","showAddress2","_openBlock","_hoisted_2","_hoisted_3","_hoisted_4","DropDownList","_hoisted_5","_hoisted_6","ids","useCompositeId","getTriggerId","trigger","isTriggerActive","hasMenu","registerTrigger","element","onTriggerClick","onTriggerKeydown","args","id","className","style","colSpan","ariaColumnIndex","isSelected","columnIndex","_renderList","config","Button","dataItem","tabIndex","$event","useActionCellMenu","options","registry","useActiveIdRegistry","row","activeTrigger","key","activeRow","rowId","toValue","activeMenuItems","activeTitle","popupMenu","usePopupMenu","triggerInteractionSequence","handleTriggerClick","interactionSequence","nextTick","handleDirectAction","handleTriggerKeydown","event","onMenuKeydown","onMenuSelect"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- (function(p,e){typeof exports=="object"&&typeof module<"u"?e(exports,require("vue"),require("@progress/kendo-vue-labels"),require("@progress/kendo-vue-inputs"),require("@progress/kendo-vue-dropdowns"),require("@progress/kendo-vue-buttons"),require("@featherk/composables")):typeof define=="function"&&define.amd?define(["exports","vue","@progress/kendo-vue-labels","@progress/kendo-vue-inputs","@progress/kendo-vue-dropdowns","@progress/kendo-vue-buttons","@featherk/composables"],e):(p=typeof globalThis<"u"?globalThis:p||self,e(p.FeatherKUi={},p.Vue,p.KendoVueLabels,p.KendoVueInputs,p.KendoVueDropdowns,p.KendoVueButtons,p.FeatherKComposables))})(this,(function(p,e,y,S,_,E,w){"use strict";const z={class:"address1"},x={key:0,class:"address2"},A={class:"city"},N={class:"state"},q={class:"zip"},M={key:1,class:"messages"},B="Enter a 5 or 9 digit zip code.",b="Incomplete address.",F=((n,a)=>{const o=n.__vccOpts||n;for(const[m,s]of a)o[m]=s;return o})(e.defineComponent({__name:"USAddress",props:{id:{},address:{},required:{type:Boolean,default:!0},messageScope:{default:"fieldset"},messages:{},showAddress2:{type:Boolean,default:!0}},setup(n){const a=n,o={placeholder:{address1:"Address Line 1",address2:"Address Line 2",city:"City",zip:"00000-0000"},fieldset:{error:{required:"Required fields are missing.",zip:B},hint:{address:"Enter address information."}},field:{error:{address1:"Required",address2:"",city:"Required",state:"Required",zip:B},hint:{address1:"Enter address line 1.",address2:"Optional",city:"",state:"",zip:B}}},m=d=>({placeholder:{address1:d?.placeholder?.address1??o.placeholder.address1,address2:d?.placeholder?.address2??o.placeholder.address2,city:d?.placeholder?.city??o.placeholder.city,zip:d?.placeholder?.zip??o.placeholder.zip},fieldset:{error:{required:d?.fieldset?.error?.required??o.fieldset.error.required,zip:d?.fieldset?.error?.zip??o.fieldset.error.zip},hint:{address:d?.fieldset?.hint?.address??o.fieldset.hint.address}},field:{error:{address1:d?.field?.error?.address1??o.field.error.address1,address2:d?.field?.error?.address2??o.field.error.address2,city:d?.field?.error?.city??o.field.error.city,state:d?.field?.error?.state??o.field.error.state,zip:d?.field?.error?.zip??o.field.error.zip},hint:{address1:d?.field?.hint?.address1??o.field.hint.address1,address2:d?.field?.hint?.address2??o.field.hint.address2,city:d?.field?.hint?.city??o.field.hint.city,state:d?.field?.hint?.state??o.field.hint.state,zip:d?.field?.hint?.zip??o.field.hint.zip}}}),s=e.computed(()=>m(a.messages)),f=e.computed(()=>a.messageScope==="field"),k=e.computed(()=>a.messageScope==="fieldset"),c=e.computed(()=>a.required),v=e.computed(()=>c.value),r=e.computed(()=>({address1:`${a.id}-address1`,address2:`${a.id}-address2`,city:`${a.id}-city`,state:`${a.id}-state`,zip:`${a.id}-zip`})),t=e.computed(()=>a.address),u=e.computed(()=>t.value.address1Valid.value&&t.value.cityValid.value&&t.value.stateValid.value),g=e.computed(()=>t.value.formData.address1.trim()!==""||t.value.formData.address2.trim()!==""||t.value.formData.city.trim()!==""||(t.value.formData.state??"").trim()!==""||t.value.formData.zip.replace(/\D/g,"")!==""),I=e.computed(()=>{if(t.value.optionalZipInvalid)return t.value.optionalZipInvalid.value;const d=t.value.formData.zip.replace(/\D/g,"");return!c.value&&g.value&&d.length!==5&&d.length!==9}),l=e.computed(()=>t.value.optionalPartialInvalid?t.value.optionalPartialInvalid.value:!c.value&&g.value&&!t.value.addressValid.value),i=e.computed(()=>c.value||!l.value?!1:t.value.optionalFeedbackActive?t.value.optionalFeedbackActive.value:!1),h=e.computed(()=>v.value&&!t.value.address1Valid.value||i.value&&t.value.formData.address1.trim()===""),T=e.computed(()=>v.value&&!t.value.cityValid.value||i.value&&t.value.formData.city.trim()===""),V=e.computed(()=>v.value&&!t.value.stateValid.value||i.value&&(t.value.formData.state??"").trim()===""),D=e.computed(()=>v.value&&!t.value.zipValid.value||i.value&&I.value),C=e.computed(()=>c.value?t.value.addressValidate.value:i.value),R=e.computed(()=>c.value?t.value.address1Valid.value:!h.value),$=e.computed(()=>c.value?t.value.cityValid.value:!T.value),Z=e.computed(()=>c.value?t.value.stateValid.value:!V.value),j=e.computed(()=>c.value?t.value.zipValid.value:!D.value),H=e.computed(()=>{const d=s.value.placeholder.address2;return k.value&&c.value?`${d} (Optional)`:d}),U=e.computed(()=>{const d=[];return u.value||d.push(s.value.fieldset.error.required),t.value.zipValid.value||d.push(s.value.fieldset.error.zip),d.join(" ")}),G=e.computed(()=>{const d=[b];return I.value&&d.push(s.value.fieldset.error.zip),d.join(" ")});return(d,J)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["fkui-us-address",{"fkui-us-address--fieldset-scope":k.value}])},[e.createElementVNode("div",z,[e.createVNode(e.unref(S.TextBox),{id:r.value.address1,placeholder:s.value.placeholder.address1,value:t.value.formData.address1,valid:R.value,validate:C.value,validityStyles:C.value,onInput:t.value.onAddress1Input},null,8,["id","placeholder","value","valid","validate","validityStyles","onInput"]),f.value?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[h.value?(e.openBlock(),e.createBlock(e.unref(y.Error),{key:0},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(s.value.field.error.address1),1)]),_:1})):(e.openBlock(),e.createBlock(e.unref(y.Hint),{key:1},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(s.value.field.hint.address1),1)]),_:1}))],64)):e.createCommentVNode("",!0)]),d.showAddress2?(e.openBlock(),e.createElementBlock("div",x,[e.createVNode(e.unref(S.TextBox),{id:r.value.address2,placeholder:H.value,value:t.value.formData.address2,onInput:t.value.onAddress2Input},null,8,["id","placeholder","value","onInput"]),f.value?(e.openBlock(),e.createBlock(e.unref(y.Hint),{key:0},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(s.value.field.hint.address2),1)]),_:1})):e.createCommentVNode("",!0)])):e.createCommentVNode("",!0),e.createElementVNode("div",A,[e.createVNode(e.unref(S.TextBox),{id:r.value.city,placeholder:s.value.placeholder.city,value:t.value.formData.city,valid:$.value,validate:C.value,validityStyles:C.value,onInput:t.value.onCityInput},null,8,["id","placeholder","value","valid","validate","validityStyles","onInput"]),f.value&&T.value?(e.openBlock(),e.createBlock(e.unref(y.Error),{key:0},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(s.value.field.error.city),1)]),_:1})):e.createCommentVNode("",!0)]),e.createElementVNode("div",N,[e.createVNode(e.unref(_.DropDownList),{id:r.value.state,value:t.value.formData.state,onChange:t.value.onStateChange,defaultItem:t.value.stateDefaultItem,dataItems:t.value.stateOptions,textField:"label",valueField:"value",dataItemKey:"value",valuePrimitive:!0,valid:Z.value,validate:C.value,validityStyles:C.value},null,8,["id","value","onChange","defaultItem","dataItems","valid","validate","validityStyles"]),f.value&&V.value?(e.openBlock(),e.createBlock(e.unref(y.Error),{key:0},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(s.value.field.error.state),1)]),_:1})):e.createCommentVNode("",!0)]),e.createElementVNode("div",q,[e.createVNode(e.unref(S.TextBox),{id:r.value.zip,placeholder:s.value.placeholder.zip,wrapperClass:t.value.zipWrapperClass,value:t.value.zipDisplay.value,onInput:t.value.onZipInput,valid:j.value,validate:C.value,validityStyles:C.value,style:{width:"100%"}},null,8,["id","placeholder","wrapperClass","value","onInput","valid","validate","validityStyles"]),f.value&&D.value?(e.openBlock(),e.createBlock(e.unref(y.Error),{key:0},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(s.value.field.error.zip),1)]),_:1})):e.createCommentVNode("",!0),f.value&&!D.value?(e.openBlock(),e.createBlock(e.unref(y.Hint),{key:1},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(s.value.field.hint.zip),1)]),_:1})):e.createCommentVNode("",!0)]),k.value?(e.openBlock(),e.createElementBlock("div",M,[v.value&&!t.value.addressValid.value?(e.openBlock(),e.createBlock(e.unref(y.Error),{key:0},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(U.value),1)]),_:1})):i.value?(e.openBlock(),e.createBlock(e.unref(y.Error),{key:1},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(G.value),1)]),_:1})):(e.openBlock(),e.createBlock(e.unref(y.Hint),{key:2},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(s.value.fieldset.hint.address),1)]),_:1}))])):e.createCommentVNode("",!0)],2))}}),[["__scopeId","data-v-8aeb035b"]]),K=["id","colspan","aria-colindex","aria-selected","data-grid-col-index"],P=e.defineComponent({inheritAttrs:!1,__name:"ActionCell",props:{id:{},className:{},style:{},colSpan:{},ariaColumnIndex:{},isSelected:{type:Boolean},columnIndex:{},dataItem:{},config:{},menuController:{},tabIndex:{default:-1}},setup(n){const a=n,o=w.useCompositeId("action-cell"),m=r=>a.menuController.getTriggerId(r,a.dataItem),s=r=>a.menuController.registry.isIdActive(m(r)),f=r=>typeof r.items=="function",k=(r,t)=>{a.menuController.registry.register(m(r),t)},c=r=>{if(!f(r)){a.menuController.handleDirectAction?.(r,a.dataItem);return}a.menuController.handleTriggerClick(m(r))},v=(r,...t)=>{f(r)&&a.menuController.handleTriggerKeydown(m(r),...t)};return(r,t)=>(e.openBlock(),e.createElementBlock("td",{id:r.id??e.unref(o).instanceId,class:e.normalizeClass(["fkui-action-cell","k-table-td",r.className]),style:e.normalizeStyle(r.style),colspan:r.colSpan,role:"gridcell","aria-colindex":r.ariaColumnIndex,"aria-selected":r.isSelected,"data-grid-col-index":r.columnIndex},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(r.config.triggers,u=>(e.openBlock(),e.createBlock(e.unref(E.Button),{key:u.key,ref_for:!0,ref:f(u)?g=>k(u,g):void 0,id:e.unref(o).compose(u.key,"trigger"),"svg-icon":u.icon,type:"button","fill-mode":"flat","theme-color":"primary",rounded:"full","aria-label":u.ariaLabel,"aria-haspopup":f(u)?"menu":void 0,"aria-expanded":f(u)?s(u):void 0,disabled:u.disabled?.(r.dataItem),tabindex:r.tabIndex,onClick:g=>c(u),onKeydown:g=>v(u,g)},null,8,["id","svg-icon","aria-label","aria-haspopup","aria-expanded","disabled","tabindex","onClick","onKeydown"]))),128))],14,K))}}),O=n=>{const a=w.useActiveIdRegistry();n.group?.register(a);const o=n.getTriggerId??((l,i)=>`${l.key}:${n.getRowId(i)}`),m=e.computed(()=>{const l=a.activeId.value?.split(":")[0];return n.config.triggers.find(i=>i.key===l)??null}),s=e.computed(()=>{const l=a.activeId.value?.split(":").slice(1).join(":");return l===void 0?null:e.toValue(n.rows).find(i=>String(n.getRowId(i))===l)??null}),f=e.computed(()=>{const l=s.value,i=m.value;return l&&i?i.items?.(l)??[]:[]}),k=e.computed(()=>{const l=s.value,i=m.value;return l&&i&&typeof i.items=="function"&&i.title?i.title(l):null}),c=w.usePopupMenu({isOpen:a.isActive,triggerRef:a.activeElement,menuRef:n.menuRef,triggerMode:n.triggerMode??"button",anchor:n.anchor??!0,resolveFocusTarget:n.resolveFocusTarget,focusTargetContainerSelector:n.focusTargetContainerSelector,requestShow:l=>{typeof l=="string"&&a.activate(l)},requestHide:()=>a.deactivate(),menuLabel:k});let v=0;const r=l=>{const i=++v;if(n.group?.deactivateOthers(a),a.isActive.value&&!a.isIdActive(l)){a.deactivate(),e.nextTick(()=>{i===v&&c.handleTriggerClick(l)});return}c.handleTriggerClick(l)},t=(l,i)=>{v++,n.group?.deactivateOthers(a),a.deactivate(),n.onActionSelected(void 0,i,l)},u=(l,...i)=>{const h=i[0];if(h.key==="Enter"||h.code==="Space"){h.preventDefault(),r(l);return}c.handleTriggerKeydown(h,l)},g=l=>{l.key==="Escape"&&c.handleMenuEscape(l)},I=l=>{const i=s.value,h=m.value;c.handleMenuSelect(l,()=>{i&&h&&n.onActionSelected(l.item,i,h)})};return{actionCellProps:{config:n.config,menuController:{registry:a,getTriggerId:o,handleTriggerClick:r,handleDirectAction:t,handleTriggerKeydown:u}},popupProps:e.computed(()=>({show:a.isActive.value,offset:c.offset.value,onClose:c.handlePopupClose})),menuProps:e.computed(()=>({items:f.value,vertical:!0,onKeydown:g,onSelect:I})),activeRow:s,activeTrigger:m,activeTitle:k}};p.ActionCell=P,p.USAddress=F,p.useActionCellMenu=O,Object.defineProperty(p,Symbol.toStringTag,{value:"Module"})}));
1
+ (function(p,e){typeof exports=="object"&&typeof module<"u"?e(exports,require("vue"),require("@progress/kendo-vue-labels"),require("@progress/kendo-vue-inputs"),require("@progress/kendo-vue-dropdowns"),require("@progress/kendo-vue-buttons"),require("@featherk/composables")):typeof define=="function"&&define.amd?define(["exports","vue","@progress/kendo-vue-labels","@progress/kendo-vue-inputs","@progress/kendo-vue-dropdowns","@progress/kendo-vue-buttons","@featherk/composables"],e):(p=typeof globalThis<"u"?globalThis:p||self,e(p.FeatherKUi={},p.Vue,p.KendoVueLabels,p.KendoVueInputs,p.KendoVueDropdowns,p.KendoVueButtons,p.FeatherKComposables))})(this,(function(p,e,y,S,_,E,w){"use strict";const z={class:"address1"},x={key:0,class:"address2"},A={class:"city"},N={class:"state"},q={class:"zip"},M={key:1,class:"messages"},B="Enter a 5 or 9 digit zip code.",b="Incomplete address.",F=((s,a)=>{const o=s.__vccOpts||s;for(const[m,n]of a)o[m]=n;return o})(e.defineComponent({__name:"USAddress",props:{id:{},address:{},required:{type:Boolean,default:!0},messageScope:{default:"fieldset"},messages:{},showAddress2:{type:Boolean,default:!0}},setup(s){const a=s,o={placeholder:{address1:"Address Line 1",address2:"Address Line 2",city:"City",zip:"00000-0000"},fieldset:{error:{required:"Required fields are missing.",zip:B},hint:{address:"Enter address information."}},field:{error:{address1:"Required",address2:"",city:"Required",state:"Required",zip:B},hint:{address1:"Enter address line 1.",address2:"Optional",city:"",state:"",zip:B}}},m=d=>({placeholder:{address1:d?.placeholder?.address1??o.placeholder.address1,address2:d?.placeholder?.address2??o.placeholder.address2,city:d?.placeholder?.city??o.placeholder.city,zip:d?.placeholder?.zip??o.placeholder.zip},fieldset:{error:{required:d?.fieldset?.error?.required??o.fieldset.error.required,zip:d?.fieldset?.error?.zip??o.fieldset.error.zip},hint:{address:d?.fieldset?.hint?.address??o.fieldset.hint.address}},field:{error:{address1:d?.field?.error?.address1??o.field.error.address1,address2:d?.field?.error?.address2??o.field.error.address2,city:d?.field?.error?.city??o.field.error.city,state:d?.field?.error?.state??o.field.error.state,zip:d?.field?.error?.zip??o.field.error.zip},hint:{address1:d?.field?.hint?.address1??o.field.hint.address1,address2:d?.field?.hint?.address2??o.field.hint.address2,city:d?.field?.hint?.city??o.field.hint.city,state:d?.field?.hint?.state??o.field.hint.state,zip:d?.field?.hint?.zip??o.field.hint.zip}}}),n=e.computed(()=>m(a.messages)),f=e.computed(()=>a.messageScope==="field"),k=e.computed(()=>a.messageScope==="fieldset"),c=e.computed(()=>a.required),v=e.computed(()=>c.value),r=e.computed(()=>({address1:`${a.id}-address1`,address2:`${a.id}-address2`,city:`${a.id}-city`,state:`${a.id}-state`,zip:`${a.id}-zip`})),t=e.computed(()=>a.address),u=e.computed(()=>t.value.address1Valid.value&&t.value.cityValid.value&&t.value.stateValid.value),g=e.computed(()=>t.value.formData.address1.trim()!==""||t.value.formData.address2.trim()!==""||t.value.formData.city.trim()!==""||(t.value.formData.state??"").trim()!==""||t.value.formData.zip.replace(/\D/g,"")!==""),I=e.computed(()=>{if(t.value.optionalZipInvalid)return t.value.optionalZipInvalid.value;const d=t.value.formData.zip.replace(/\D/g,"");return!c.value&&g.value&&d.length!==5&&d.length!==9}),l=e.computed(()=>t.value.optionalPartialInvalid?t.value.optionalPartialInvalid.value:!c.value&&g.value&&!t.value.addressValid.value),i=e.computed(()=>c.value||!l.value?!1:t.value.optionalFeedbackActive?t.value.optionalFeedbackActive.value:!1),h=e.computed(()=>v.value&&!t.value.address1Valid.value||i.value&&t.value.formData.address1.trim()===""),T=e.computed(()=>v.value&&!t.value.cityValid.value||i.value&&t.value.formData.city.trim()===""),V=e.computed(()=>v.value&&!t.value.stateValid.value||i.value&&(t.value.formData.state??"").trim()===""),D=e.computed(()=>v.value&&!t.value.zipValid.value||i.value&&I.value),C=e.computed(()=>c.value?t.value.addressValidate.value:i.value),O=e.computed(()=>c.value?t.value.address1Valid.value:!h.value),$=e.computed(()=>c.value?t.value.cityValid.value:!T.value),Z=e.computed(()=>c.value?t.value.stateValid.value:!V.value),j=e.computed(()=>c.value?t.value.zipValid.value:!D.value),H=e.computed(()=>{const d=n.value.placeholder.address2;return k.value&&c.value?`${d} (Optional)`:d}),U=e.computed(()=>{const d=[];return u.value||d.push(n.value.fieldset.error.required),t.value.zipValid.value||d.push(n.value.fieldset.error.zip),d.join(" ")}),G=e.computed(()=>{const d=[b];return I.value&&d.push(n.value.fieldset.error.zip),d.join(" ")});return(d,J)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["fkui-us-address",{"fkui-us-address--fieldset-scope":k.value}])},[e.createElementVNode("div",z,[e.createVNode(e.unref(S.TextBox),{id:r.value.address1,placeholder:n.value.placeholder.address1,value:t.value.formData.address1,valid:O.value,validate:C.value,validityStyles:C.value,onInput:t.value.onAddress1Input},null,8,["id","placeholder","value","valid","validate","validityStyles","onInput"]),f.value?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[h.value?(e.openBlock(),e.createBlock(e.unref(y.Error),{key:0},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(n.value.field.error.address1),1)]),_:1})):(e.openBlock(),e.createBlock(e.unref(y.Hint),{key:1},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(n.value.field.hint.address1),1)]),_:1}))],64)):e.createCommentVNode("",!0)]),d.showAddress2?(e.openBlock(),e.createElementBlock("div",x,[e.createVNode(e.unref(S.TextBox),{id:r.value.address2,placeholder:H.value,value:t.value.formData.address2,onInput:t.value.onAddress2Input},null,8,["id","placeholder","value","onInput"]),f.value?(e.openBlock(),e.createBlock(e.unref(y.Hint),{key:0},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(n.value.field.hint.address2),1)]),_:1})):e.createCommentVNode("",!0)])):e.createCommentVNode("",!0),e.createElementVNode("div",A,[e.createVNode(e.unref(S.TextBox),{id:r.value.city,placeholder:n.value.placeholder.city,value:t.value.formData.city,valid:$.value,validate:C.value,validityStyles:C.value,onInput:t.value.onCityInput},null,8,["id","placeholder","value","valid","validate","validityStyles","onInput"]),f.value&&T.value?(e.openBlock(),e.createBlock(e.unref(y.Error),{key:0},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(n.value.field.error.city),1)]),_:1})):e.createCommentVNode("",!0)]),e.createElementVNode("div",N,[e.createVNode(e.unref(_.DropDownList),{id:r.value.state,value:t.value.formData.state,onChange:t.value.onStateChange,defaultItem:t.value.stateDefaultItem,dataItems:t.value.stateOptions,textField:"label",valueField:"value",dataItemKey:"value",valuePrimitive:!0,valid:Z.value,validate:C.value,validityStyles:C.value},null,8,["id","value","onChange","defaultItem","dataItems","valid","validate","validityStyles"]),f.value&&V.value?(e.openBlock(),e.createBlock(e.unref(y.Error),{key:0},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(n.value.field.error.state),1)]),_:1})):e.createCommentVNode("",!0)]),e.createElementVNode("div",q,[e.createVNode(e.unref(S.TextBox),{id:r.value.zip,placeholder:n.value.placeholder.zip,wrapperClass:t.value.zipWrapperClass,value:t.value.zipDisplay.value,onInput:t.value.onZipInput,valid:j.value,validate:C.value,validityStyles:C.value,style:{width:"100%"}},null,8,["id","placeholder","wrapperClass","value","onInput","valid","validate","validityStyles"]),f.value&&D.value?(e.openBlock(),e.createBlock(e.unref(y.Error),{key:0},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(n.value.field.error.zip),1)]),_:1})):e.createCommentVNode("",!0),f.value&&!D.value?(e.openBlock(),e.createBlock(e.unref(y.Hint),{key:1},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(n.value.field.hint.zip),1)]),_:1})):e.createCommentVNode("",!0)]),k.value?(e.openBlock(),e.createElementBlock("div",M,[v.value&&!t.value.addressValid.value?(e.openBlock(),e.createBlock(e.unref(y.Error),{key:0},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(U.value),1)]),_:1})):i.value?(e.openBlock(),e.createBlock(e.unref(y.Error),{key:1},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(G.value),1)]),_:1})):(e.openBlock(),e.createBlock(e.unref(y.Hint),{key:2},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(n.value.fieldset.hint.address),1)]),_:1}))])):e.createCommentVNode("",!0)],2))}}),[["__scopeId","data-v-8aeb035b"]]),K=["id","colspan","aria-colindex","aria-selected","data-grid-col-index"],R=e.defineComponent({inheritAttrs:!1,__name:"ActionCell",props:{id:{},className:{},style:{},colSpan:{},ariaColumnIndex:{},isSelected:{type:Boolean},columnIndex:{},dataItem:{},config:{},menuController:{},tabIndex:{default:-1}},setup(s){const a=s,o=w.useCompositeId("action-cell"),m=r=>a.menuController.getTriggerId(r,a.dataItem),n=r=>a.menuController.registry.isIdActive(m(r)),f=r=>typeof r.items=="function",k=(r,t)=>{a.menuController.registry.register(m(r),t)},c=r=>{if(!f(r)){a.menuController.handleDirectAction?.(r,a.dataItem);return}a.menuController.handleTriggerClick(m(r))},v=(r,...t)=>{f(r)&&a.menuController.handleTriggerKeydown(m(r),...t)};return(r,t)=>(e.openBlock(),e.createElementBlock("td",{id:r.id??e.unref(o).instanceId,class:e.normalizeClass(["fkui-action-cell","k-table-td",r.className]),style:e.normalizeStyle(r.style),colspan:r.colSpan,role:"gridcell","aria-colindex":r.ariaColumnIndex,"aria-selected":r.isSelected,"data-grid-col-index":r.columnIndex},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(r.config.triggers,u=>(e.openBlock(),e.createBlock(e.unref(E.Button),{key:u.key,ref_for:!0,ref:f(u)?g=>k(u,g):void 0,id:e.unref(o).compose(u.key,"trigger"),"svg-icon":u.icon,type:"button","fill-mode":"flat","theme-color":"primary",rounded:"full","aria-label":u.ariaLabel,"aria-haspopup":f(u)?"menu":void 0,"aria-expanded":f(u)?n(u):void 0,disabled:u.disabled?.(r.dataItem),tabindex:r.tabIndex,onClick:g=>c(u),onKeydown:g=>v(u,g)},null,8,["id","svg-icon","aria-label","aria-haspopup","aria-expanded","disabled","tabindex","onClick","onKeydown"]))),128))],14,K))}}),P=s=>{const a=w.useActiveIdRegistry();s.group?.register(a);const o=s.getTriggerId??((l,i)=>`${l.key}:${s.getRowId(i)}`),m=e.computed(()=>{const l=a.activeId.value?.split(":")[0];return s.config.triggers.find(i=>i.key===l)??null}),n=e.computed(()=>{const l=a.activeId.value?.split(":").slice(1).join(":");return l===void 0?null:e.toValue(s.rows).find(i=>String(s.getRowId(i))===l)??null}),f=e.computed(()=>{const l=n.value,i=m.value;return l&&i?i.items?.(l)??[]:[]}),k=e.computed(()=>{const l=n.value,i=m.value;return l&&i&&typeof i.items=="function"&&i.title?i.title(l):null}),c=w.usePopupMenu({isOpen:a.isActive,triggerRef:a.activeElement,menuRef:s.menuRef,popupContentRef:s.popupContentRef,triggerMode:s.triggerMode??"button",anchor:s.anchor??!0,resolveFocusTarget:s.resolveFocusTarget,focusTargetContainerSelector:s.focusTargetContainerSelector,requestShow:l=>{typeof l=="string"&&a.activate(l)},requestHide:()=>a.deactivate(),menuLabel:k});let v=0;const r=l=>{const i=++v;if(s.group?.deactivateOthers(a),a.isActive.value&&!a.isIdActive(l)){a.deactivate(),e.nextTick(()=>{i===v&&c.handleTriggerClick(l)});return}c.handleTriggerClick(l)},t=(l,i)=>{v++,s.group?.deactivateOthers(a),a.deactivate(),s.onActionSelected(void 0,i,l)},u=(l,...i)=>{const h=i[0];if(h.key==="Enter"||h.code==="Space"){h.preventDefault(),r(l);return}c.handleTriggerKeydown(h,l)},g=l=>{l.key==="Escape"&&c.handleMenuEscape(l)},I=l=>{const i=n.value,h=m.value;c.handleMenuSelect(l,()=>{i&&h&&s.onActionSelected(l.item,i,h)})};return{actionCellProps:{config:s.config,menuController:{registry:a,getTriggerId:o,handleTriggerClick:r,handleDirectAction:t,handleTriggerKeydown:u}},popupProps:e.computed(()=>({show:a.isActive.value,offset:c.offset.value,onClose:c.handlePopupClose})),menuProps:e.computed(()=>({items:f.value,vertical:!0,onKeydown:g,onSelect:I})),activeRow:n,activeTrigger:m,activeTitle:k}};p.ActionCell=R,p.USAddress=F,p.useActionCellMenu=P,Object.defineProperty(p,Symbol.toStringTag,{value:"Module"})}));
2
2
  //# sourceMappingURL=featherk-ui.umd.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"featherk-ui.umd.js","sources":["../src/address/USAddress.vue","../src/table/ActionCell.vue","../src/table/useActionCellMenu.ts"],"sourcesContent":["<template>\n <div\n class=\"fkui-us-address\"\n :class=\"{ 'fkui-us-address--fieldset-scope': fieldsetScope }\"\n >\n <div class=\"address1\">\n <TextBox\n :id=\"fieldIds.address1\"\n :placeholder=\"resolvedMessages.placeholder.address1\"\n :value=\"address.formData.address1\"\n :valid=\"address1DisplayValid\"\n :validate=\"validationStylesActive\"\n :validityStyles=\"validationStylesActive\"\n @input=\"address.onAddress1Input\"\n />\n <template v-if=\"fieldScope\">\n <Error v-if=\"showAddress1Error\">\n {{ resolvedMessages.field.error.address1 }}\n </Error>\n <Hint v-else>{{ resolvedMessages.field.hint.address1 }}</Hint>\n </template>\n </div>\n\n <div v-if=\"showAddress2\" class=\"address2\">\n <TextBox\n :id=\"fieldIds.address2\"\n :placeholder=\"address2PlaceholderDisplay\"\n :value=\"address.formData.address2\"\n @input=\"address.onAddress2Input\"\n />\n <Hint v-if=\"fieldScope\">{{ resolvedMessages.field.hint.address2 }}</Hint>\n </div>\n\n <div class=\"city\">\n <TextBox\n :id=\"fieldIds.city\"\n :placeholder=\"resolvedMessages.placeholder.city\"\n :value=\"address.formData.city\"\n :valid=\"cityDisplayValid\"\n :validate=\"validationStylesActive\"\n :validityStyles=\"validationStylesActive\"\n @input=\"address.onCityInput\"\n />\n <Error v-if=\"fieldScope && showCityError\">\n {{ resolvedMessages.field.error.city }}\n </Error>\n </div>\n\n <div class=\"state\">\n <DropDownList\n :id=\"fieldIds.state\"\n :value=\"address.formData.state\"\n @change=\"address.onStateChange\"\n :defaultItem=\"address.stateDefaultItem\"\n :dataItems=\"address.stateOptions\"\n textField=\"label\"\n valueField=\"value\"\n dataItemKey=\"value\"\n :valuePrimitive=\"true\"\n :valid=\"stateDisplayValid\"\n :validate=\"validationStylesActive\"\n :validityStyles=\"validationStylesActive\"\n />\n <Error v-if=\"fieldScope && showStateError\">\n {{ resolvedMessages.field.error.state }}\n </Error>\n </div>\n\n <div class=\"zip\">\n <TextBox\n :id=\"fieldIds.zip\"\n :placeholder=\"resolvedMessages.placeholder.zip\"\n :wrapperClass=\"address.zipWrapperClass\"\n :value=\"address.zipDisplay.value\"\n @input=\"address.onZipInput\"\n :valid=\"zipDisplayValid\"\n :validate=\"validationStylesActive\"\n :validityStyles=\"validationStylesActive\"\n :style=\"{ width: '100%' }\"\n />\n <Error v-if=\"fieldScope && showZipError\">\n {{ resolvedMessages.field.error.zip }}\n </Error>\n <Hint v-if=\"fieldScope && !showZipError\">\n {{ resolvedMessages.field.hint.zip }}\n </Hint>\n </div>\n\n <div v-if=\"fieldsetScope\" class=\"messages\">\n <Error v-if=\"showErrors && !address.addressValid.value\">\n {{ fieldsetErrorMessage }}\n </Error>\n <Error v-else-if=\"showOptionalFeedback\">\n {{ optionalFieldsetErrorMessage }}\n </Error>\n <Hint v-else>{{ resolvedMessages.fieldset.hint.address }}</Hint>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from \"vue\";\nimport { Error, Hint } from \"@progress/kendo-vue-labels\";\nimport { TextBox } from \"@progress/kendo-vue-inputs\";\nimport { DropDownList } from \"@progress/kendo-vue-dropdowns\";\nimport type {\n USAddressMessageScope,\n USAddressMessages,\n USAddressViewModel,\n} from \"./types\";\n\nconst props = withDefaults(\n defineProps<{\n id: string;\n address: USAddressViewModel;\n required?: boolean;\n messageScope?: USAddressMessageScope;\n messages?: USAddressMessages;\n showAddress2?: boolean;\n }>(),\n {\n required: true,\n messageScope: \"fieldset\",\n showAddress2: true,\n },\n);\n\nconst ZIP_CODE_MESSAGE = \"Enter a 5 or 9 digit zip code.\";\nconst OPTIONAL_FIELDS_MESSAGE = \"Incomplete address.\";\n\ntype USAddressResolvedMessages = {\n placeholder: {\n address1: string;\n address2: string;\n city: string;\n zip: string;\n };\n fieldset: {\n error: {\n required: string;\n zip: string;\n };\n hint: {\n address: string;\n };\n };\n field: {\n error: {\n address1: string;\n address2: string;\n city: string;\n state: string;\n zip: string;\n };\n hint: {\n address1: string;\n address2: string;\n city: string;\n state: string;\n zip: string;\n };\n };\n};\n\nconst DEFAULT_MESSAGES: USAddressResolvedMessages = {\n placeholder: {\n address1: \"Address Line 1\",\n address2: \"Address Line 2\",\n city: \"City\",\n zip: \"00000-0000\",\n },\n fieldset: {\n error: {\n required: \"Required fields are missing.\",\n zip: ZIP_CODE_MESSAGE,\n },\n hint: {\n address: \"Enter address information.\",\n },\n },\n field: {\n error: {\n address1: \"Required\",\n address2: \"\",\n city: \"Required\",\n state: \"Required\",\n zip: ZIP_CODE_MESSAGE,\n },\n hint: {\n address1: \"Enter address line 1.\",\n address2: \"Optional\",\n city: \"\",\n state: \"\",\n zip: ZIP_CODE_MESSAGE,\n },\n },\n};\n\nconst resolveMessages = (\n source?: USAddressMessages,\n): USAddressResolvedMessages => {\n return {\n placeholder: {\n address1:\n source?.placeholder?.address1 ?? DEFAULT_MESSAGES.placeholder.address1,\n address2:\n source?.placeholder?.address2 ?? DEFAULT_MESSAGES.placeholder.address2,\n city: source?.placeholder?.city ?? DEFAULT_MESSAGES.placeholder.city,\n zip: source?.placeholder?.zip ?? DEFAULT_MESSAGES.placeholder.zip,\n },\n fieldset: {\n error: {\n required:\n source?.fieldset?.error?.required ??\n DEFAULT_MESSAGES.fieldset.error.required,\n zip:\n source?.fieldset?.error?.zip ?? DEFAULT_MESSAGES.fieldset.error.zip,\n },\n hint: {\n address:\n source?.fieldset?.hint?.address ??\n DEFAULT_MESSAGES.fieldset.hint.address,\n },\n },\n field: {\n error: {\n address1:\n source?.field?.error?.address1 ??\n DEFAULT_MESSAGES.field.error.address1,\n address2:\n source?.field?.error?.address2 ??\n DEFAULT_MESSAGES.field.error.address2,\n city: source?.field?.error?.city ?? DEFAULT_MESSAGES.field.error.city,\n state:\n source?.field?.error?.state ?? DEFAULT_MESSAGES.field.error.state,\n zip: source?.field?.error?.zip ?? DEFAULT_MESSAGES.field.error.zip,\n },\n hint: {\n address1:\n source?.field?.hint?.address1 ?? DEFAULT_MESSAGES.field.hint.address1,\n address2:\n source?.field?.hint?.address2 ?? DEFAULT_MESSAGES.field.hint.address2,\n city: source?.field?.hint?.city ?? DEFAULT_MESSAGES.field.hint.city,\n state: source?.field?.hint?.state ?? DEFAULT_MESSAGES.field.hint.state,\n zip: source?.field?.hint?.zip ?? DEFAULT_MESSAGES.field.hint.zip,\n },\n },\n };\n};\n\nconst resolvedMessages = computed(() => resolveMessages(props.messages));\n\nconst fieldScope = computed(() => {\n return props.messageScope === \"field\";\n});\n\nconst fieldsetScope = computed(() => {\n return props.messageScope === \"fieldset\";\n});\n\nconst isRequired = computed(() => props.required);\n\nconst showErrors = computed(() => isRequired.value);\n\nconst fieldIds = computed(() => ({\n address1: `${props.id}-address1`,\n address2: `${props.id}-address2`,\n city: `${props.id}-city`,\n state: `${props.id}-state`,\n zip: `${props.id}-zip`,\n}));\n\nconst address = computed(() => props.address);\n\nconst nonZipRequiredFieldsValid = computed(() => {\n return (\n address.value.address1Valid.value &&\n address.value.cityValid.value &&\n address.value.stateValid.value\n );\n});\n\nconst hasAnyOptionalInput = computed(() => {\n return (\n address.value.formData.address1.trim() !== \"\" ||\n address.value.formData.address2.trim() !== \"\" ||\n address.value.formData.city.trim() !== \"\" ||\n (address.value.formData.state ?? \"\").trim() !== \"\" ||\n address.value.formData.zip.replace(/\\D/g, \"\") !== \"\"\n );\n});\n\nconst optionalZipInvalid = computed(() => {\n if (address.value.optionalZipInvalid) {\n return address.value.optionalZipInvalid.value;\n }\n\n const zipDigits = address.value.formData.zip.replace(/\\D/g, \"\");\n return (\n !isRequired.value &&\n hasAnyOptionalInput.value &&\n zipDigits.length !== 5 &&\n zipDigits.length !== 9\n );\n});\n\nconst optionalPartialInvalid = computed(() => {\n if (address.value.optionalPartialInvalid) {\n return address.value.optionalPartialInvalid.value;\n }\n\n return (\n !isRequired.value &&\n hasAnyOptionalInput.value &&\n !address.value.addressValid.value\n );\n});\n\nconst showOptionalFeedback = computed(() => {\n if (isRequired.value || !optionalPartialInvalid.value) {\n return false;\n }\n\n if (address.value.optionalFeedbackActive) {\n return address.value.optionalFeedbackActive.value;\n }\n\n return false;\n});\n\nconst showAddress1Error = computed(() => {\n return (\n (showErrors.value && !address.value.address1Valid.value) ||\n (showOptionalFeedback.value &&\n address.value.formData.address1.trim() === \"\")\n );\n});\n\nconst showCityError = computed(() => {\n return (\n (showErrors.value && !address.value.cityValid.value) ||\n (showOptionalFeedback.value && address.value.formData.city.trim() === \"\")\n );\n});\n\nconst showStateError = computed(() => {\n return (\n (showErrors.value && !address.value.stateValid.value) ||\n (showOptionalFeedback.value &&\n (address.value.formData.state ?? \"\").trim() === \"\")\n );\n});\n\nconst showZipError = computed(() => {\n return (\n (showErrors.value && !address.value.zipValid.value) ||\n (showOptionalFeedback.value && optionalZipInvalid.value)\n );\n});\n\nconst validationStylesActive = computed(() => {\n return isRequired.value\n ? address.value.addressValidate.value\n : showOptionalFeedback.value;\n});\n\nconst address1DisplayValid = computed(() => {\n return isRequired.value\n ? address.value.address1Valid.value\n : !showAddress1Error.value;\n});\n\nconst cityDisplayValid = computed(() => {\n return isRequired.value\n ? address.value.cityValid.value\n : !showCityError.value;\n});\n\nconst stateDisplayValid = computed(() => {\n return isRequired.value\n ? address.value.stateValid.value\n : !showStateError.value;\n});\n\nconst zipDisplayValid = computed(() => {\n return isRequired.value ? address.value.zipValid.value : !showZipError.value;\n});\n\nconst address2PlaceholderDisplay = computed(() => {\n const basePlaceholder = resolvedMessages.value.placeholder.address2;\n\n if (fieldsetScope.value && isRequired.value) {\n return `${basePlaceholder} (Optional)`;\n }\n return basePlaceholder;\n});\n\nconst fieldsetErrorMessage = computed(() => {\n const messages: string[] = [];\n\n if (!nonZipRequiredFieldsValid.value) {\n messages.push(resolvedMessages.value.fieldset.error.required);\n }\n\n if (!address.value.zipValid.value) {\n messages.push(resolvedMessages.value.fieldset.error.zip);\n }\n\n return messages.join(\" \");\n});\n\nconst optionalFieldsetErrorMessage = computed(() => {\n const messages: string[] = [OPTIONAL_FIELDS_MESSAGE];\n\n if (optionalZipInvalid.value) {\n messages.push(resolvedMessages.value.fieldset.error.zip);\n }\n\n return messages.join(\" \");\n});\n</script>\n\n<style scoped>\n.fkui-us-address {\n display: grid;\n grid-template-columns: 2fr 1fr 1fr;\n grid-template-areas:\n \"address1 address1 address1\"\n \"address2 address2 address2\"\n \"city state zip\"\n \"messages messages messages\";\n gap: 0.75rem;\n margin-bottom: 1rem;\n\n .address1 {\n grid-area: address1;\n }\n\n .address2 {\n grid-area: address2;\n }\n\n .city {\n grid-area: city;\n }\n\n .state {\n grid-area: state;\n }\n\n .zip {\n grid-area: zip;\n }\n\n .messages {\n grid-area: messages;\n }\n\n :deep(.fk-zip-textbox) {\n min-width: 100%;\n }\n}\n\n.fkui-us-address--fieldset-scope {\n row-gap: 0.5rem;\n\n .messages {\n margin-top: -0.375rem;\n }\n}\n</style>\n","<template>\n <td\n :id=\"id ?? ids.instanceId\"\n :class=\"['fkui-action-cell', 'k-table-td', className]\"\n :style=\"style\"\n :colspan=\"colSpan\"\n role=\"gridcell\"\n :aria-colindex=\"ariaColumnIndex\"\n :aria-selected=\"isSelected\"\n :data-grid-col-index=\"columnIndex\"\n >\n <Button\n v-for=\"trigger in config.triggers\"\n :key=\"trigger.key\"\n :ref=\"\n hasMenu(trigger)\n ? (element) => registerTrigger(trigger, element)\n : undefined\n \"\n :id=\"ids.compose(trigger.key, 'trigger')\"\n :svg-icon=\"trigger.icon\"\n type=\"button\"\n fill-mode=\"flat\"\n theme-color=\"primary\"\n rounded=\"full\"\n :aria-label=\"trigger.ariaLabel\"\n :aria-haspopup=\"hasMenu(trigger) ? 'menu' : undefined\"\n :aria-expanded=\"hasMenu(trigger) ? isTriggerActive(trigger) : undefined\"\n :disabled=\"trigger.disabled?.(dataItem)\"\n :tabindex=\"tabIndex\"\n @click=\"onTriggerClick(trigger)\"\n @keydown=\"onTriggerKeydown(trigger, $event)\"\n />\n </td>\n</template>\n\n<script setup lang=\"ts\">\nimport type { ComponentPublicInstance } from \"vue\";\nimport { Button } from \"@progress/kendo-vue-buttons\";\nimport type { GridCellProps } from \"@progress/kendo-vue-grid\";\nimport {\n useCompositeId,\n type RegisterableElement,\n} from \"@featherk/composables\";\nimport type {\n ActionCellConfig,\n ActionCellMenuController,\n ActionCellTrigger,\n} from \"./types\";\n\ndefineOptions({ inheritAttrs: false });\n\ntype ActionCellProps = Partial<\n Pick<\n GridCellProps,\n | \"id\"\n | \"className\"\n | \"style\"\n | \"colSpan\"\n | \"ariaColumnIndex\"\n | \"isSelected\"\n | \"columnIndex\"\n >\n> & {\n dataItem: any;\n config: ActionCellConfig<any>;\n menuController: ActionCellMenuController<any>;\n tabIndex?: number;\n};\n\nconst props = withDefaults(defineProps<ActionCellProps>(), {\n tabIndex: -1,\n});\n\nconst ids = useCompositeId(\"action-cell\");\n\nconst getTriggerId = (trigger: ActionCellTrigger<any>) =>\n props.menuController.getTriggerId(trigger, props.dataItem);\n\nconst isTriggerActive = (trigger: ActionCellTrigger<any>) =>\n props.menuController.registry.isIdActive(getTriggerId(trigger));\n\nconst hasMenu = (trigger: ActionCellTrigger<any>) =>\n typeof trigger.items === \"function\";\n\nconst registerTrigger = (\n trigger: ActionCellTrigger<any>,\n element: Element | ComponentPublicInstance | null,\n) => {\n props.menuController.registry.register(\n getTriggerId(trigger),\n element as RegisterableElement,\n );\n};\n\nconst onTriggerClick = (trigger: ActionCellTrigger<any>) => {\n if (!hasMenu(trigger)) {\n props.menuController.handleDirectAction?.(trigger, props.dataItem);\n return;\n }\n props.menuController.handleTriggerClick(getTriggerId(trigger));\n};\n\nconst onTriggerKeydown = (\n trigger: ActionCellTrigger<any>,\n ...args: unknown[]\n) => {\n if (!hasMenu(trigger)) return;\n props.menuController.handleTriggerKeydown(getTriggerId(trigger), ...args);\n};\n</script>\n","import {\n computed,\n nextTick,\n toValue,\n type ComputedRef,\n type MaybeRefOrGetter,\n} from \"vue\";\nimport {\n useActiveIdRegistry,\n usePopupMenu,\n type KendoMenuSelectEvent,\n type PopupMenuAnchorOptions,\n type PopupMenuElementRef,\n type PopupMenuOffset,\n type PopupMenuTriggerMode,\n type UseExclusiveGroupReturn,\n} from \"@featherk/composables\";\nimport type {\n ActionCellConfig,\n ActionCellDataItem,\n ActionCellMenuController,\n ActionCellMenuItem,\n} from \"./types\";\n\nexport type UseActionCellMenuOptions<\n TData extends ActionCellDataItem = ActionCellDataItem,\n TConfig extends ActionCellConfig<TData> = ActionCellConfig<TData>,\n> = {\n /** Repeatable trigger configuration, rendered by every `ActionCell` instance. */\n config: TConfig;\n /** All rows currently rendered; used to resolve the active row from its registry id. */\n rows: MaybeRefOrGetter<TData[]>;\n /** Derives a stable row id used to build the default registry id for each trigger. */\n getRowId: (row: TData) => string | number;\n /**\n * Overrides the registry ID formatting while preserving `<trigger.key>:<rowId>` semantics.\n * Active row and trigger resolution parse the first colon-separated segment as the trigger\n * key and the remaining segments as the row ID.\n */\n getTriggerId?: (trigger: TConfig[\"triggers\"][number], row: TData) => string;\n /** Ref to the single shared Kendo Menu instance. */\n menuRef: PopupMenuElementRef;\n /** Forwarded to `usePopupMenu`. Defaults to `\"button\"`. */\n triggerMode?: PopupMenuTriggerMode;\n /** Forwarded to `usePopupMenu`. Defaults to `true` for shared-popup positioning. */\n anchor?: PopupMenuAnchorOptions | true;\n /** Forwarded to `usePopupMenu`. */\n resolveFocusTarget?: () => HTMLElement | null;\n /** Forwarded to `usePopupMenu`. */\n focusTargetContainerSelector?: string;\n /** Coordinates mutual exclusivity with other active-id registries in this group. */\n group?: UseExclusiveGroupReturn;\n /**\n * Runs after a menu item is selected, with its original item and resolved row/trigger.\n * Direct-action triggers have no menu item and pass `undefined`.\n */\n onActionSelected: (\n item: ActionCellMenuItem | undefined,\n row: TData,\n trigger: TConfig[\"triggers\"][number],\n ) => void;\n};\n\nexport type UseActionCellMenuReturn<\n TData extends ActionCellDataItem = ActionCellDataItem,\n TConfig extends ActionCellConfig<TData> = ActionCellConfig<TData>,\n> = {\n /** Spread onto every `<ActionCell>` instance. */\n actionCellProps: {\n config: TConfig;\n menuController: ActionCellMenuController<TData>;\n };\n /** Spread onto the single shared `<Popup>`. */\n popupProps: ComputedRef<{\n show: boolean;\n offset: PopupMenuOffset;\n onClose: () => void;\n }>;\n /** Spread onto the single shared Kendo `<Menu>`. */\n menuProps: ComputedRef<{\n items: ActionCellMenuItem[];\n vertical: true;\n onKeydown: (event: KeyboardEvent) => void;\n onSelect: (event: KendoMenuSelectEvent<ActionCellMenuItem>) => void;\n }>;\n /** Row resolved from the currently active trigger id, if any. */\n activeRow: ComputedRef<TData | null>;\n /** Trigger config resolved from the currently active trigger id, if any. */\n activeTrigger: ComputedRef<TConfig[\"triggers\"][number] | null>;\n /** Resolved `trigger.title(activeRow)`, or `null` when unset/no trigger is active. Render this yourself (e.g. `<strong>`) above the `<Menu>` — it is not part of `menuProps.items`. */\n activeTitle: ComputedRef<string | null>;\n};\n\n/**\n * Bundles the shared-popup wiring a parent needs to drive `ActionCell`: one\n * `useActiveIdRegistry`, one `usePopupMenu`, and the derived active\n * row/trigger/menu items. The parent still owns the `<Popup>`/`<Menu>`\n * template elements and any business logic for the selected action.\n */\nexport const useActionCellMenu = <\n TData extends ActionCellDataItem = ActionCellDataItem,\n TConfig extends ActionCellConfig<TData> = ActionCellConfig<TData>,\n>(\n options: UseActionCellMenuOptions<TData, TConfig>,\n): UseActionCellMenuReturn<TData, TConfig> => {\n const registry = useActiveIdRegistry<string>();\n options.group?.register(registry);\n\n const getTriggerId =\n options.getTriggerId ??\n ((trigger: TConfig[\"triggers\"][number], row: TData) =>\n `${trigger.key}:${options.getRowId(row)}`);\n\n const activeTrigger = computed(() => {\n const key = registry.activeId.value?.split(\":\")[0];\n return (\n (options.config.triggers.find((trigger) => trigger.key === key) as\n | TConfig[\"triggers\"][number]\n | undefined) ?? null\n );\n });\n\n const activeRow = computed(() => {\n const rowId = registry.activeId.value?.split(\":\").slice(1).join(\":\");\n if (rowId === undefined) return null;\n return (\n toValue(options.rows).find(\n (row) => String(options.getRowId(row)) === rowId,\n ) ?? null\n );\n });\n\n const activeMenuItems = computed<ActionCellMenuItem[]>(() => {\n const row = activeRow.value;\n const trigger = activeTrigger.value;\n return row && trigger ? (trigger.items?.(row) ?? []) : [];\n });\n\n const activeTitle = computed<string | null>(() => {\n const row = activeRow.value;\n const trigger = activeTrigger.value;\n return row &&\n trigger &&\n typeof trigger.items === \"function\" &&\n trigger.title\n ? trigger.title(row)\n : null;\n });\n\n const popupMenu = usePopupMenu({\n isOpen: registry.isActive,\n triggerRef: registry.activeElement,\n menuRef: options.menuRef,\n triggerMode: options.triggerMode ?? \"button\",\n anchor: options.anchor ?? true,\n resolveFocusTarget: options.resolveFocusTarget,\n focusTargetContainerSelector: options.focusTargetContainerSelector,\n requestShow: (id) => {\n if (typeof id === \"string\") registry.activate(id);\n },\n requestHide: () => registry.deactivate(),\n menuLabel: activeTitle,\n });\n\n let triggerInteractionSequence = 0;\n\n const handleTriggerClick = (id: string) => {\n const interactionSequence = ++triggerInteractionSequence;\n options.group?.deactivateOthers(registry);\n\n if (registry.isActive.value && !registry.isIdActive(id)) {\n registry.deactivate();\n void nextTick(() => {\n if (interactionSequence === triggerInteractionSequence) {\n popupMenu.handleTriggerClick(id);\n }\n });\n return;\n }\n\n popupMenu.handleTriggerClick(id);\n };\n\n const handleDirectAction = (\n trigger: TConfig[\"triggers\"][number],\n row: TData,\n ) => {\n triggerInteractionSequence++;\n options.group?.deactivateOthers(registry);\n registry.deactivate();\n options.onActionSelected(undefined, row, trigger);\n };\n\n const handleTriggerKeydown = (id: string, ...args: unknown[]) => {\n const event = args[0] as KeyboardEvent;\n if (event.key === \"Enter\" || event.code === \"Space\") {\n event.preventDefault();\n handleTriggerClick(id);\n return;\n }\n popupMenu.handleTriggerKeydown(event, id);\n };\n\n const onMenuKeydown = (event: KeyboardEvent) => {\n if (event.key === \"Escape\") popupMenu.handleMenuEscape(event);\n };\n\n const onMenuSelect = (event: KendoMenuSelectEvent<ActionCellMenuItem>) => {\n const row = activeRow.value;\n const trigger = activeTrigger.value;\n popupMenu.handleMenuSelect(event, () => {\n if (row && trigger) {\n options.onActionSelected(event.item, row, trigger);\n }\n });\n };\n\n return {\n actionCellProps: {\n config: options.config,\n menuController: {\n registry,\n getTriggerId,\n handleTriggerClick,\n handleDirectAction,\n handleTriggerKeydown,\n },\n },\n popupProps: computed(() => ({\n show: registry.isActive.value,\n offset: popupMenu.offset.value,\n onClose: popupMenu.handlePopupClose,\n })),\n menuProps: computed(() => ({\n items: activeMenuItems.value,\n vertical: true as const,\n onKeydown: onMenuKeydown,\n onSelect: onMenuSelect,\n })),\n activeRow,\n activeTrigger,\n activeTitle,\n };\n};\n"],"names":["ZIP_CODE_MESSAGE","OPTIONAL_FIELDS_MESSAGE","props","__props","DEFAULT_MESSAGES","resolveMessages","source","resolvedMessages","computed","fieldScope","fieldsetScope","isRequired","showErrors","fieldIds","address","nonZipRequiredFieldsValid","hasAnyOptionalInput","optionalZipInvalid","zipDigits","optionalPartialInvalid","showOptionalFeedback","showAddress1Error","showCityError","showStateError","showZipError","validationStylesActive","address1DisplayValid","cityDisplayValid","stateDisplayValid","zipDisplayValid","address2PlaceholderDisplay","basePlaceholder","fieldsetErrorMessage","messages","optionalFieldsetErrorMessage","_createElementBlock","_normalizeClass","_createElementVNode","_hoisted_1","_createVNode","_unref","TextBox","_Fragment","_createBlock","Error","_createTextVNode","_toDisplayString","Hint","showAddress2","_openBlock","_hoisted_2","_hoisted_3","_hoisted_4","DropDownList","_hoisted_5","_hoisted_6","ids","useCompositeId","getTriggerId","trigger","isTriggerActive","hasMenu","registerTrigger","element","onTriggerClick","onTriggerKeydown","args","id","className","style","colSpan","ariaColumnIndex","isSelected","columnIndex","_renderList","config","Button","dataItem","tabIndex","$event","useActionCellMenu","options","registry","useActiveIdRegistry","row","activeTrigger","key","activeRow","rowId","toValue","activeMenuItems","activeTitle","popupMenu","usePopupMenu","triggerInteractionSequence","handleTriggerClick","interactionSequence","nextTick","handleDirectAction","handleTriggerKeydown","event","onMenuKeydown","onMenuSelect"],"mappings":"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"}
1
+ {"version":3,"file":"featherk-ui.umd.js","sources":["../src/address/USAddress.vue","../src/table/ActionCell.vue","../src/table/useActionCellMenu.ts"],"sourcesContent":["<template>\n <div\n class=\"fkui-us-address\"\n :class=\"{ 'fkui-us-address--fieldset-scope': fieldsetScope }\"\n >\n <div class=\"address1\">\n <TextBox\n :id=\"fieldIds.address1\"\n :placeholder=\"resolvedMessages.placeholder.address1\"\n :value=\"address.formData.address1\"\n :valid=\"address1DisplayValid\"\n :validate=\"validationStylesActive\"\n :validityStyles=\"validationStylesActive\"\n @input=\"address.onAddress1Input\"\n />\n <template v-if=\"fieldScope\">\n <Error v-if=\"showAddress1Error\">\n {{ resolvedMessages.field.error.address1 }}\n </Error>\n <Hint v-else>{{ resolvedMessages.field.hint.address1 }}</Hint>\n </template>\n </div>\n\n <div v-if=\"showAddress2\" class=\"address2\">\n <TextBox\n :id=\"fieldIds.address2\"\n :placeholder=\"address2PlaceholderDisplay\"\n :value=\"address.formData.address2\"\n @input=\"address.onAddress2Input\"\n />\n <Hint v-if=\"fieldScope\">{{ resolvedMessages.field.hint.address2 }}</Hint>\n </div>\n\n <div class=\"city\">\n <TextBox\n :id=\"fieldIds.city\"\n :placeholder=\"resolvedMessages.placeholder.city\"\n :value=\"address.formData.city\"\n :valid=\"cityDisplayValid\"\n :validate=\"validationStylesActive\"\n :validityStyles=\"validationStylesActive\"\n @input=\"address.onCityInput\"\n />\n <Error v-if=\"fieldScope && showCityError\">\n {{ resolvedMessages.field.error.city }}\n </Error>\n </div>\n\n <div class=\"state\">\n <DropDownList\n :id=\"fieldIds.state\"\n :value=\"address.formData.state\"\n @change=\"address.onStateChange\"\n :defaultItem=\"address.stateDefaultItem\"\n :dataItems=\"address.stateOptions\"\n textField=\"label\"\n valueField=\"value\"\n dataItemKey=\"value\"\n :valuePrimitive=\"true\"\n :valid=\"stateDisplayValid\"\n :validate=\"validationStylesActive\"\n :validityStyles=\"validationStylesActive\"\n />\n <Error v-if=\"fieldScope && showStateError\">\n {{ resolvedMessages.field.error.state }}\n </Error>\n </div>\n\n <div class=\"zip\">\n <TextBox\n :id=\"fieldIds.zip\"\n :placeholder=\"resolvedMessages.placeholder.zip\"\n :wrapperClass=\"address.zipWrapperClass\"\n :value=\"address.zipDisplay.value\"\n @input=\"address.onZipInput\"\n :valid=\"zipDisplayValid\"\n :validate=\"validationStylesActive\"\n :validityStyles=\"validationStylesActive\"\n :style=\"{ width: '100%' }\"\n />\n <Error v-if=\"fieldScope && showZipError\">\n {{ resolvedMessages.field.error.zip }}\n </Error>\n <Hint v-if=\"fieldScope && !showZipError\">\n {{ resolvedMessages.field.hint.zip }}\n </Hint>\n </div>\n\n <div v-if=\"fieldsetScope\" class=\"messages\">\n <Error v-if=\"showErrors && !address.addressValid.value\">\n {{ fieldsetErrorMessage }}\n </Error>\n <Error v-else-if=\"showOptionalFeedback\">\n {{ optionalFieldsetErrorMessage }}\n </Error>\n <Hint v-else>{{ resolvedMessages.fieldset.hint.address }}</Hint>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from \"vue\";\nimport { Error, Hint } from \"@progress/kendo-vue-labels\";\nimport { TextBox } from \"@progress/kendo-vue-inputs\";\nimport { DropDownList } from \"@progress/kendo-vue-dropdowns\";\nimport type {\n USAddressMessageScope,\n USAddressMessages,\n USAddressViewModel,\n} from \"./types\";\n\nconst props = withDefaults(\n defineProps<{\n id: string;\n address: USAddressViewModel;\n required?: boolean;\n messageScope?: USAddressMessageScope;\n messages?: USAddressMessages;\n showAddress2?: boolean;\n }>(),\n {\n required: true,\n messageScope: \"fieldset\",\n showAddress2: true,\n },\n);\n\nconst ZIP_CODE_MESSAGE = \"Enter a 5 or 9 digit zip code.\";\nconst OPTIONAL_FIELDS_MESSAGE = \"Incomplete address.\";\n\ntype USAddressResolvedMessages = {\n placeholder: {\n address1: string;\n address2: string;\n city: string;\n zip: string;\n };\n fieldset: {\n error: {\n required: string;\n zip: string;\n };\n hint: {\n address: string;\n };\n };\n field: {\n error: {\n address1: string;\n address2: string;\n city: string;\n state: string;\n zip: string;\n };\n hint: {\n address1: string;\n address2: string;\n city: string;\n state: string;\n zip: string;\n };\n };\n};\n\nconst DEFAULT_MESSAGES: USAddressResolvedMessages = {\n placeholder: {\n address1: \"Address Line 1\",\n address2: \"Address Line 2\",\n city: \"City\",\n zip: \"00000-0000\",\n },\n fieldset: {\n error: {\n required: \"Required fields are missing.\",\n zip: ZIP_CODE_MESSAGE,\n },\n hint: {\n address: \"Enter address information.\",\n },\n },\n field: {\n error: {\n address1: \"Required\",\n address2: \"\",\n city: \"Required\",\n state: \"Required\",\n zip: ZIP_CODE_MESSAGE,\n },\n hint: {\n address1: \"Enter address line 1.\",\n address2: \"Optional\",\n city: \"\",\n state: \"\",\n zip: ZIP_CODE_MESSAGE,\n },\n },\n};\n\nconst resolveMessages = (\n source?: USAddressMessages,\n): USAddressResolvedMessages => {\n return {\n placeholder: {\n address1:\n source?.placeholder?.address1 ?? DEFAULT_MESSAGES.placeholder.address1,\n address2:\n source?.placeholder?.address2 ?? DEFAULT_MESSAGES.placeholder.address2,\n city: source?.placeholder?.city ?? DEFAULT_MESSAGES.placeholder.city,\n zip: source?.placeholder?.zip ?? DEFAULT_MESSAGES.placeholder.zip,\n },\n fieldset: {\n error: {\n required:\n source?.fieldset?.error?.required ??\n DEFAULT_MESSAGES.fieldset.error.required,\n zip:\n source?.fieldset?.error?.zip ?? DEFAULT_MESSAGES.fieldset.error.zip,\n },\n hint: {\n address:\n source?.fieldset?.hint?.address ??\n DEFAULT_MESSAGES.fieldset.hint.address,\n },\n },\n field: {\n error: {\n address1:\n source?.field?.error?.address1 ??\n DEFAULT_MESSAGES.field.error.address1,\n address2:\n source?.field?.error?.address2 ??\n DEFAULT_MESSAGES.field.error.address2,\n city: source?.field?.error?.city ?? DEFAULT_MESSAGES.field.error.city,\n state:\n source?.field?.error?.state ?? DEFAULT_MESSAGES.field.error.state,\n zip: source?.field?.error?.zip ?? DEFAULT_MESSAGES.field.error.zip,\n },\n hint: {\n address1:\n source?.field?.hint?.address1 ?? DEFAULT_MESSAGES.field.hint.address1,\n address2:\n source?.field?.hint?.address2 ?? DEFAULT_MESSAGES.field.hint.address2,\n city: source?.field?.hint?.city ?? DEFAULT_MESSAGES.field.hint.city,\n state: source?.field?.hint?.state ?? DEFAULT_MESSAGES.field.hint.state,\n zip: source?.field?.hint?.zip ?? DEFAULT_MESSAGES.field.hint.zip,\n },\n },\n };\n};\n\nconst resolvedMessages = computed(() => resolveMessages(props.messages));\n\nconst fieldScope = computed(() => {\n return props.messageScope === \"field\";\n});\n\nconst fieldsetScope = computed(() => {\n return props.messageScope === \"fieldset\";\n});\n\nconst isRequired = computed(() => props.required);\n\nconst showErrors = computed(() => isRequired.value);\n\nconst fieldIds = computed(() => ({\n address1: `${props.id}-address1`,\n address2: `${props.id}-address2`,\n city: `${props.id}-city`,\n state: `${props.id}-state`,\n zip: `${props.id}-zip`,\n}));\n\nconst address = computed(() => props.address);\n\nconst nonZipRequiredFieldsValid = computed(() => {\n return (\n address.value.address1Valid.value &&\n address.value.cityValid.value &&\n address.value.stateValid.value\n );\n});\n\nconst hasAnyOptionalInput = computed(() => {\n return (\n address.value.formData.address1.trim() !== \"\" ||\n address.value.formData.address2.trim() !== \"\" ||\n address.value.formData.city.trim() !== \"\" ||\n (address.value.formData.state ?? \"\").trim() !== \"\" ||\n address.value.formData.zip.replace(/\\D/g, \"\") !== \"\"\n );\n});\n\nconst optionalZipInvalid = computed(() => {\n if (address.value.optionalZipInvalid) {\n return address.value.optionalZipInvalid.value;\n }\n\n const zipDigits = address.value.formData.zip.replace(/\\D/g, \"\");\n return (\n !isRequired.value &&\n hasAnyOptionalInput.value &&\n zipDigits.length !== 5 &&\n zipDigits.length !== 9\n );\n});\n\nconst optionalPartialInvalid = computed(() => {\n if (address.value.optionalPartialInvalid) {\n return address.value.optionalPartialInvalid.value;\n }\n\n return (\n !isRequired.value &&\n hasAnyOptionalInput.value &&\n !address.value.addressValid.value\n );\n});\n\nconst showOptionalFeedback = computed(() => {\n if (isRequired.value || !optionalPartialInvalid.value) {\n return false;\n }\n\n if (address.value.optionalFeedbackActive) {\n return address.value.optionalFeedbackActive.value;\n }\n\n return false;\n});\n\nconst showAddress1Error = computed(() => {\n return (\n (showErrors.value && !address.value.address1Valid.value) ||\n (showOptionalFeedback.value &&\n address.value.formData.address1.trim() === \"\")\n );\n});\n\nconst showCityError = computed(() => {\n return (\n (showErrors.value && !address.value.cityValid.value) ||\n (showOptionalFeedback.value && address.value.formData.city.trim() === \"\")\n );\n});\n\nconst showStateError = computed(() => {\n return (\n (showErrors.value && !address.value.stateValid.value) ||\n (showOptionalFeedback.value &&\n (address.value.formData.state ?? \"\").trim() === \"\")\n );\n});\n\nconst showZipError = computed(() => {\n return (\n (showErrors.value && !address.value.zipValid.value) ||\n (showOptionalFeedback.value && optionalZipInvalid.value)\n );\n});\n\nconst validationStylesActive = computed(() => {\n return isRequired.value\n ? address.value.addressValidate.value\n : showOptionalFeedback.value;\n});\n\nconst address1DisplayValid = computed(() => {\n return isRequired.value\n ? address.value.address1Valid.value\n : !showAddress1Error.value;\n});\n\nconst cityDisplayValid = computed(() => {\n return isRequired.value\n ? address.value.cityValid.value\n : !showCityError.value;\n});\n\nconst stateDisplayValid = computed(() => {\n return isRequired.value\n ? address.value.stateValid.value\n : !showStateError.value;\n});\n\nconst zipDisplayValid = computed(() => {\n return isRequired.value ? address.value.zipValid.value : !showZipError.value;\n});\n\nconst address2PlaceholderDisplay = computed(() => {\n const basePlaceholder = resolvedMessages.value.placeholder.address2;\n\n if (fieldsetScope.value && isRequired.value) {\n return `${basePlaceholder} (Optional)`;\n }\n return basePlaceholder;\n});\n\nconst fieldsetErrorMessage = computed(() => {\n const messages: string[] = [];\n\n if (!nonZipRequiredFieldsValid.value) {\n messages.push(resolvedMessages.value.fieldset.error.required);\n }\n\n if (!address.value.zipValid.value) {\n messages.push(resolvedMessages.value.fieldset.error.zip);\n }\n\n return messages.join(\" \");\n});\n\nconst optionalFieldsetErrorMessage = computed(() => {\n const messages: string[] = [OPTIONAL_FIELDS_MESSAGE];\n\n if (optionalZipInvalid.value) {\n messages.push(resolvedMessages.value.fieldset.error.zip);\n }\n\n return messages.join(\" \");\n});\n</script>\n\n<style scoped>\n.fkui-us-address {\n display: grid;\n grid-template-columns: 2fr 1fr 1fr;\n grid-template-areas:\n \"address1 address1 address1\"\n \"address2 address2 address2\"\n \"city state zip\"\n \"messages messages messages\";\n gap: 0.75rem;\n margin-bottom: 1rem;\n\n .address1 {\n grid-area: address1;\n }\n\n .address2 {\n grid-area: address2;\n }\n\n .city {\n grid-area: city;\n }\n\n .state {\n grid-area: state;\n }\n\n .zip {\n grid-area: zip;\n }\n\n .messages {\n grid-area: messages;\n }\n\n :deep(.fk-zip-textbox) {\n min-width: 100%;\n }\n}\n\n.fkui-us-address--fieldset-scope {\n row-gap: 0.5rem;\n\n .messages {\n margin-top: -0.375rem;\n }\n}\n</style>\n","<template>\n <td\n :id=\"id ?? ids.instanceId\"\n :class=\"['fkui-action-cell', 'k-table-td', className]\"\n :style=\"style\"\n :colspan=\"colSpan\"\n role=\"gridcell\"\n :aria-colindex=\"ariaColumnIndex\"\n :aria-selected=\"isSelected\"\n :data-grid-col-index=\"columnIndex\"\n >\n <Button\n v-for=\"trigger in config.triggers\"\n :key=\"trigger.key\"\n :ref=\"\n hasMenu(trigger)\n ? (element) => registerTrigger(trigger, element)\n : undefined\n \"\n :id=\"ids.compose(trigger.key, 'trigger')\"\n :svg-icon=\"trigger.icon\"\n type=\"button\"\n fill-mode=\"flat\"\n theme-color=\"primary\"\n rounded=\"full\"\n :aria-label=\"trigger.ariaLabel\"\n :aria-haspopup=\"hasMenu(trigger) ? 'menu' : undefined\"\n :aria-expanded=\"hasMenu(trigger) ? isTriggerActive(trigger) : undefined\"\n :disabled=\"trigger.disabled?.(dataItem)\"\n :tabindex=\"tabIndex\"\n @click=\"onTriggerClick(trigger)\"\n @keydown=\"onTriggerKeydown(trigger, $event)\"\n />\n </td>\n</template>\n\n<script setup lang=\"ts\">\nimport type { ComponentPublicInstance } from \"vue\";\nimport { Button } from \"@progress/kendo-vue-buttons\";\nimport type { GridCellProps } from \"@progress/kendo-vue-grid\";\nimport {\n useCompositeId,\n type RegisterableElement,\n} from \"@featherk/composables\";\nimport type {\n ActionCellConfig,\n ActionCellMenuController,\n ActionCellTrigger,\n} from \"./types\";\n\ndefineOptions({ inheritAttrs: false });\n\ntype ActionCellProps = Partial<\n Pick<\n GridCellProps,\n | \"id\"\n | \"className\"\n | \"style\"\n | \"colSpan\"\n | \"ariaColumnIndex\"\n | \"isSelected\"\n | \"columnIndex\"\n >\n> & {\n dataItem: any;\n config: ActionCellConfig<any>;\n menuController: ActionCellMenuController<any>;\n tabIndex?: number;\n};\n\nconst props = withDefaults(defineProps<ActionCellProps>(), {\n tabIndex: -1,\n});\n\nconst ids = useCompositeId(\"action-cell\");\n\nconst getTriggerId = (trigger: ActionCellTrigger<any>) =>\n props.menuController.getTriggerId(trigger, props.dataItem);\n\nconst isTriggerActive = (trigger: ActionCellTrigger<any>) =>\n props.menuController.registry.isIdActive(getTriggerId(trigger));\n\nconst hasMenu = (trigger: ActionCellTrigger<any>) =>\n typeof trigger.items === \"function\";\n\nconst registerTrigger = (\n trigger: ActionCellTrigger<any>,\n element: Element | ComponentPublicInstance | null,\n) => {\n props.menuController.registry.register(\n getTriggerId(trigger),\n element as RegisterableElement,\n );\n};\n\nconst onTriggerClick = (trigger: ActionCellTrigger<any>) => {\n if (!hasMenu(trigger)) {\n props.menuController.handleDirectAction?.(trigger, props.dataItem);\n return;\n }\n props.menuController.handleTriggerClick(getTriggerId(trigger));\n};\n\nconst onTriggerKeydown = (\n trigger: ActionCellTrigger<any>,\n ...args: unknown[]\n) => {\n if (!hasMenu(trigger)) return;\n props.menuController.handleTriggerKeydown(getTriggerId(trigger), ...args);\n};\n</script>\n","import {\n computed,\n nextTick,\n toValue,\n type ComputedRef,\n type MaybeRefOrGetter,\n} from \"vue\";\nimport {\n useActiveIdRegistry,\n usePopupMenu,\n type KendoMenuSelectEvent,\n type PopupMenuAnchorOptions,\n type PopupMenuElementRef,\n type PopupMenuOffset,\n type PopupMenuTriggerMode,\n type UseExclusiveGroupReturn,\n} from \"@featherk/composables\";\nimport type {\n ActionCellConfig,\n ActionCellDataItem,\n ActionCellMenuController,\n ActionCellMenuItem,\n} from \"./types\";\n\nexport type UseActionCellMenuOptions<\n TData extends ActionCellDataItem = ActionCellDataItem,\n TConfig extends ActionCellConfig<TData> = ActionCellConfig<TData>,\n> = {\n /** Repeatable trigger configuration, rendered by every `ActionCell` instance. */\n config: TConfig;\n /** All rows currently rendered; used to resolve the active row from its registry id. */\n rows: MaybeRefOrGetter<TData[]>;\n /** Derives a stable row id used to build the default registry id for each trigger. */\n getRowId: (row: TData) => string | number;\n /**\n * Overrides the registry ID formatting while preserving `<trigger.key>:<rowId>` semantics.\n * Active row and trigger resolution parse the first colon-separated segment as the trigger\n * key and the remaining segments as the row ID.\n */\n getTriggerId?: (trigger: TConfig[\"triggers\"][number], row: TData) => string;\n /** Ref to the single shared Kendo Menu instance. */\n menuRef: PopupMenuElementRef;\n /**\n * Ref to the full rendered popup content (e.g. a wrapper containing both\n * `activeTitle` and the Menu). Forwarded to `usePopupMenu`'s\n * `popupContentRef`; only needed for a non-\"left\"/\"top\" `anchor.popupAlign`,\n * otherwise `menuRef` alone under-measures the popup whenever anything\n * besides the Menu (e.g. the title) is rendered inside it.\n */\n popupContentRef?: PopupMenuElementRef;\n /** Forwarded to `usePopupMenu`. Defaults to `\"button\"`. */\n triggerMode?: PopupMenuTriggerMode;\n /** Forwarded to `usePopupMenu`. Defaults to `true` for shared-popup positioning. */\n anchor?: PopupMenuAnchorOptions | true;\n /** Forwarded to `usePopupMenu`. */\n resolveFocusTarget?: () => HTMLElement | null;\n /** Forwarded to `usePopupMenu`. */\n focusTargetContainerSelector?: string;\n /** Coordinates mutual exclusivity with other active-id registries in this group. */\n group?: UseExclusiveGroupReturn;\n /**\n * Runs after a menu item is selected, with its original item and resolved row/trigger.\n * Direct-action triggers have no menu item and pass `undefined`.\n */\n onActionSelected: (\n item: ActionCellMenuItem | undefined,\n row: TData,\n trigger: TConfig[\"triggers\"][number],\n ) => void;\n};\n\nexport type UseActionCellMenuReturn<\n TData extends ActionCellDataItem = ActionCellDataItem,\n TConfig extends ActionCellConfig<TData> = ActionCellConfig<TData>,\n> = {\n /** Spread onto every `<ActionCell>` instance. */\n actionCellProps: {\n config: TConfig;\n menuController: ActionCellMenuController<TData>;\n };\n /** Spread onto the single shared `<Popup>`. */\n popupProps: ComputedRef<{\n show: boolean;\n offset: PopupMenuOffset;\n onClose: () => void;\n }>;\n /** Spread onto the single shared Kendo `<Menu>`. */\n menuProps: ComputedRef<{\n items: ActionCellMenuItem[];\n vertical: true;\n onKeydown: (event: KeyboardEvent) => void;\n onSelect: (event: KendoMenuSelectEvent<ActionCellMenuItem>) => void;\n }>;\n /** Row resolved from the currently active trigger id, if any. */\n activeRow: ComputedRef<TData | null>;\n /** Trigger config resolved from the currently active trigger id, if any. */\n activeTrigger: ComputedRef<TConfig[\"triggers\"][number] | null>;\n /** Resolved `trigger.title(activeRow)`, or `null` when unset/no trigger is active. Render this yourself (e.g. `<strong>`) above the `<Menu>` — it is not part of `menuProps.items`. */\n activeTitle: ComputedRef<string | null>;\n};\n\n/**\n * Bundles the shared-popup wiring a parent needs to drive `ActionCell`: one\n * `useActiveIdRegistry`, one `usePopupMenu`, and the derived active\n * row/trigger/menu items. The parent still owns the `<Popup>`/`<Menu>`\n * template elements and any business logic for the selected action.\n */\nexport const useActionCellMenu = <\n TData extends ActionCellDataItem = ActionCellDataItem,\n TConfig extends ActionCellConfig<TData> = ActionCellConfig<TData>,\n>(\n options: UseActionCellMenuOptions<TData, TConfig>,\n): UseActionCellMenuReturn<TData, TConfig> => {\n const registry = useActiveIdRegistry<string>();\n options.group?.register(registry);\n\n const getTriggerId =\n options.getTriggerId ??\n ((trigger: TConfig[\"triggers\"][number], row: TData) =>\n `${trigger.key}:${options.getRowId(row)}`);\n\n const activeTrigger = computed(() => {\n const key = registry.activeId.value?.split(\":\")[0];\n return (\n (options.config.triggers.find((trigger) => trigger.key === key) as\n | TConfig[\"triggers\"][number]\n | undefined) ?? null\n );\n });\n\n const activeRow = computed(() => {\n const rowId = registry.activeId.value?.split(\":\").slice(1).join(\":\");\n if (rowId === undefined) return null;\n return (\n toValue(options.rows).find(\n (row) => String(options.getRowId(row)) === rowId,\n ) ?? null\n );\n });\n\n const activeMenuItems = computed<ActionCellMenuItem[]>(() => {\n const row = activeRow.value;\n const trigger = activeTrigger.value;\n return row && trigger ? (trigger.items?.(row) ?? []) : [];\n });\n\n const activeTitle = computed<string | null>(() => {\n const row = activeRow.value;\n const trigger = activeTrigger.value;\n return row &&\n trigger &&\n typeof trigger.items === \"function\" &&\n trigger.title\n ? trigger.title(row)\n : null;\n });\n\n const popupMenu = usePopupMenu({\n isOpen: registry.isActive,\n triggerRef: registry.activeElement,\n menuRef: options.menuRef,\n popupContentRef: options.popupContentRef,\n triggerMode: options.triggerMode ?? \"button\",\n anchor: options.anchor ?? true,\n resolveFocusTarget: options.resolveFocusTarget,\n focusTargetContainerSelector: options.focusTargetContainerSelector,\n requestShow: (id) => {\n if (typeof id === \"string\") registry.activate(id);\n },\n requestHide: () => registry.deactivate(),\n menuLabel: activeTitle,\n });\n\n let triggerInteractionSequence = 0;\n\n const handleTriggerClick = (id: string) => {\n const interactionSequence = ++triggerInteractionSequence;\n options.group?.deactivateOthers(registry);\n\n if (registry.isActive.value && !registry.isIdActive(id)) {\n registry.deactivate();\n void nextTick(() => {\n if (interactionSequence === triggerInteractionSequence) {\n popupMenu.handleTriggerClick(id);\n }\n });\n return;\n }\n\n popupMenu.handleTriggerClick(id);\n };\n\n const handleDirectAction = (\n trigger: TConfig[\"triggers\"][number],\n row: TData,\n ) => {\n triggerInteractionSequence++;\n options.group?.deactivateOthers(registry);\n registry.deactivate();\n options.onActionSelected(undefined, row, trigger);\n };\n\n const handleTriggerKeydown = (id: string, ...args: unknown[]) => {\n const event = args[0] as KeyboardEvent;\n if (event.key === \"Enter\" || event.code === \"Space\") {\n event.preventDefault();\n handleTriggerClick(id);\n return;\n }\n popupMenu.handleTriggerKeydown(event, id);\n };\n\n const onMenuKeydown = (event: KeyboardEvent) => {\n if (event.key === \"Escape\") popupMenu.handleMenuEscape(event);\n };\n\n const onMenuSelect = (event: KendoMenuSelectEvent<ActionCellMenuItem>) => {\n const row = activeRow.value;\n const trigger = activeTrigger.value;\n popupMenu.handleMenuSelect(event, () => {\n if (row && trigger) {\n options.onActionSelected(event.item, row, trigger);\n }\n });\n };\n\n return {\n actionCellProps: {\n config: options.config,\n menuController: {\n registry,\n getTriggerId,\n handleTriggerClick,\n handleDirectAction,\n handleTriggerKeydown,\n },\n },\n popupProps: computed(() => ({\n show: registry.isActive.value,\n offset: popupMenu.offset.value,\n onClose: popupMenu.handlePopupClose,\n })),\n menuProps: computed(() => ({\n items: activeMenuItems.value,\n vertical: true as const,\n onKeydown: onMenuKeydown,\n onSelect: onMenuSelect,\n })),\n activeRow,\n activeTrigger,\n activeTitle,\n };\n};\n"],"names":["ZIP_CODE_MESSAGE","OPTIONAL_FIELDS_MESSAGE","props","__props","DEFAULT_MESSAGES","resolveMessages","source","resolvedMessages","computed","fieldScope","fieldsetScope","isRequired","showErrors","fieldIds","address","nonZipRequiredFieldsValid","hasAnyOptionalInput","optionalZipInvalid","zipDigits","optionalPartialInvalid","showOptionalFeedback","showAddress1Error","showCityError","showStateError","showZipError","validationStylesActive","address1DisplayValid","cityDisplayValid","stateDisplayValid","zipDisplayValid","address2PlaceholderDisplay","basePlaceholder","fieldsetErrorMessage","messages","optionalFieldsetErrorMessage","_createElementBlock","_normalizeClass","_createElementVNode","_hoisted_1","_createVNode","_unref","TextBox","_Fragment","_createBlock","Error","_createTextVNode","_toDisplayString","Hint","showAddress2","_openBlock","_hoisted_2","_hoisted_3","_hoisted_4","DropDownList","_hoisted_5","_hoisted_6","ids","useCompositeId","getTriggerId","trigger","isTriggerActive","hasMenu","registerTrigger","element","onTriggerClick","onTriggerKeydown","args","id","className","style","colSpan","ariaColumnIndex","isSelected","columnIndex","_renderList","config","Button","dataItem","tabIndex","$event","useActionCellMenu","options","registry","useActiveIdRegistry","row","activeTrigger","key","activeRow","rowId","toValue","activeMenuItems","activeTitle","popupMenu","usePopupMenu","triggerInteractionSequence","handleTriggerClick","interactionSequence","nextTick","handleDirectAction","handleTriggerKeydown","event","onMenuKeydown","onMenuSelect"],"mappings":"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"}
@@ -16,6 +16,14 @@ export type UseActionCellMenuOptions<TData extends ActionCellDataItem = ActionCe
16
16
  getTriggerId?: (trigger: TConfig["triggers"][number], row: TData) => string;
17
17
  /** Ref to the single shared Kendo Menu instance. */
18
18
  menuRef: PopupMenuElementRef;
19
+ /**
20
+ * Ref to the full rendered popup content (e.g. a wrapper containing both
21
+ * `activeTitle` and the Menu). Forwarded to `usePopupMenu`'s
22
+ * `popupContentRef`; only needed for a non-"left"/"top" `anchor.popupAlign`,
23
+ * otherwise `menuRef` alone under-measures the popup whenever anything
24
+ * besides the Menu (e.g. the title) is rendered inside it.
25
+ */
26
+ popupContentRef?: PopupMenuElementRef;
19
27
  /** Forwarded to `usePopupMenu`. Defaults to `"button"`. */
20
28
  triggerMode?: PopupMenuTriggerMode;
21
29
  /** Forwarded to `usePopupMenu`. Defaults to `true` for shared-popup positioning. */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@featherk/ui",
3
- "version": "0.13.0",
3
+ "version": "0.13.1",
4
4
  "main": "dist/featherk-ui.umd.js",
5
5
  "module": "dist/featherk-ui.es.js",
6
6
  "types": "dist/index.d.ts",