@jirawatpyk/aura-react 4.18.0 → 4.19.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,4 +1,4 @@
1
- /* @ds-bundle: {"format":4,"namespace":"Aura","components":[{"name":"Icon"},{"name":"Button"},{"name":"IconButton"},{"name":"Menu"},{"name":"DropdownMenu"},{"name":"Checkbox"},{"name":"StatusPill"},{"name":"TextField"},{"name":"Textarea"},{"name":"Select"},{"name":"RadioGroup"},{"name":"Switch"},{"name":"Combobox"},{"name":"DatePicker"},{"name":"DateRangePicker"},{"name":"Calendar"},{"name":"Alert"},{"name":"Toaster"},{"name":"PasswordField"},{"name":"FormErrorSummary"},{"name":"FilterBar"},{"name":"Command"},{"name":"Tooltip"},{"name":"Dialog"},{"name":"Drawer"},{"name":"DataTable"},{"name":"Card"},{"name":"Tabs"},{"name":"SideNav"},{"name":"Breadcrumb"},{"name":"Avatar"},{"name":"Stack"},{"name":"Grid"},{"name":"Container"},{"name":"AppShell"},{"name":"Surface"},{"name":"Stat"},{"name":"TimePicker"},{"name":"FileUpload"},{"name":"ColorSchemeScript"},{"name":"ColorSchemeToggle"},{"name":"Badge"},{"name":"Tag"},{"name":"Progress"},{"name":"Skeleton"},{"name":"EmptyState"},{"name":"Pagination"},{"name":"Accordion"},{"name":"Popover"},{"name":"NumberField"},{"name":"Stepper"},{"name":"SegmentedControl"}]} */
1
+ /* @ds-bundle: {"format":4,"namespace":"Aura","components":[{"name":"Icon"},{"name":"Button"},{"name":"IconButton"},{"name":"Menu"},{"name":"DropdownMenu"},{"name":"Checkbox"},{"name":"StatusPill"},{"name":"TextField"},{"name":"Textarea"},{"name":"Select"},{"name":"RadioGroup"},{"name":"Switch"},{"name":"Combobox"},{"name":"DatePicker"},{"name":"DateRangePicker"},{"name":"Calendar"},{"name":"Alert"},{"name":"Toaster"},{"name":"PasswordField"},{"name":"FormErrorSummary"},{"name":"FilterBar"},{"name":"Command"},{"name":"Tooltip"},{"name":"Dialog"},{"name":"Drawer"},{"name":"DataTable"},{"name":"Card"},{"name":"Tabs"},{"name":"SideNav"},{"name":"Breadcrumb"},{"name":"Avatar"},{"name":"Stack"},{"name":"Grid"},{"name":"Container"},{"name":"AppShell"},{"name":"ActionBar"},{"name":"BottomNav"},{"name":"Surface"},{"name":"Stat"},{"name":"TimePicker"},{"name":"FileUpload"},{"name":"ColorSchemeScript"},{"name":"ColorSchemeToggle"},{"name":"Badge"},{"name":"Tag"},{"name":"Progress"},{"name":"Skeleton"},{"name":"EmptyState"},{"name":"Pagination"},{"name":"Accordion"},{"name":"Popover"},{"name":"NumberField"},{"name":"Stepper"},{"name":"SegmentedControl"}]} */
2
2
  window.Aura = (() => {
3
3
  var __create = Object.create;
4
4
  var __defProp = Object.defineProperty;
@@ -51,11 +51,13 @@ window.Aura = (() => {
51
51
  var index_exports = {};
52
52
  __export(index_exports, {
53
53
  Accordion: () => Accordion,
54
+ ActionBar: () => ActionBar,
54
55
  Alert: () => Alert,
55
56
  AppShell: () => AppShell,
56
57
  AuraProvider: () => AuraProvider,
57
58
  Avatar: () => Avatar,
58
59
  Badge: () => Badge,
60
+ BottomNav: () => BottomNav,
59
61
  Breadcrumb: () => Breadcrumb,
60
62
  Button: () => Button,
61
63
  Calendar: () => Calendar,
@@ -120,6 +122,7 @@ window.Aura = (() => {
120
122
  parseTime: () => parseTime,
121
123
  statusTone: () => toneFor,
122
124
  toast: () => toast,
125
+ todayIn: () => todayIn,
123
126
  useAuraLocale: () => useAuraLocale,
124
127
  useBreakpoint: () => useBreakpoint,
125
128
  useColorScheme: () => useColorScheme,
@@ -346,6 +349,7 @@ window.Aura = (() => {
346
349
  },
347
350
  prevPage: "Previous page",
348
351
  nextPage: "Next page",
352
+ totals: "Totals",
349
353
  rowCount: function(c) {
350
354
  return n(c) + " rows";
351
355
  },
@@ -459,6 +463,7 @@ window.Aura = (() => {
459
463
  },
460
464
  prevPage: "\u0E2B\u0E19\u0E49\u0E32\u0E01\u0E48\u0E2D\u0E19\u0E2B\u0E19\u0E49\u0E32",
461
465
  nextPage: "\u0E2B\u0E19\u0E49\u0E32\u0E16\u0E31\u0E14\u0E44\u0E1B",
466
+ totals: "\u0E23\u0E27\u0E21",
462
467
  rowCount: function(c) {
463
468
  return n(c) + " \u0E41\u0E16\u0E27";
464
469
  },
@@ -572,6 +577,7 @@ window.Aura = (() => {
572
577
  },
573
578
  prevPage: "F\xF6reg\xE5ende sida",
574
579
  nextPage: "N\xE4sta sida",
580
+ totals: "Summa",
575
581
  rowCount: function(c) {
576
582
  return nsv(c) + " rader";
577
583
  },
@@ -622,6 +628,7 @@ window.Aura = (() => {
622
628
  function AuraProvider(props) {
623
629
  const outer = React3.useContext(LocaleContext);
624
630
  const density = props.density || outer && outer.density || null;
631
+ const timeZone = props.timeZone || outer && outer.timeZone || null;
625
632
  const value = React3.useMemo(
626
633
  function() {
627
634
  const base = props.locale && STRINGS[props.locale] || STRINGS.en;
@@ -630,10 +637,11 @@ window.Aura = (() => {
630
637
  calendar: props.calendar || null,
631
638
  strings: props.strings ? Object.assign({}, base, props.strings) : base,
632
639
  linkComponent: props.linkComponent || null,
633
- density
640
+ density,
641
+ timeZone
634
642
  };
635
643
  },
636
- [props.locale, props.calendar, props.strings, props.linkComponent, density]
644
+ [props.locale, props.calendar, props.strings, props.linkComponent, density, timeZone]
637
645
  );
638
646
  return /* @__PURE__ */ React3.createElement(LocaleContext.Provider, { value }, props.density ? /* @__PURE__ */ React3.createElement("div", { className: "aura-density", "data-density": props.density }, props.children) : props.children);
639
647
  }
@@ -767,6 +775,7 @@ window.Aura = (() => {
767
775
  const pos = posState[0], setPos = posState[1];
768
776
  const items2 = props.items || [];
769
777
  const mounted = useMounted();
778
+ const Link = useLinkComponent(props.linkComponent);
770
779
  useIsoLayoutEffect(
771
780
  function() {
772
781
  const a = props.anchor, m = own.current;
@@ -827,6 +836,63 @@ window.Aura = (() => {
827
836
  }
828
837
  e.stopPropagation();
829
838
  }
839
+ function groupItems(list) {
840
+ const out = [];
841
+ list.forEach(function(it, i) {
842
+ const g = it.type === "radio" && it.group ? it.group : null;
843
+ const last = out[out.length - 1];
844
+ if (last && last.group === g && g !== null) last.items.push({ it, i });
845
+ else out.push({ group: g, items: [{ it, i }] });
846
+ });
847
+ return out;
848
+ }
849
+ function renderItem(it, i) {
850
+ if (it.separator) return /* @__PURE__ */ React6.createElement("div", { key: "s" + i, role: "separator", className: "aura-menu__sep" });
851
+ const isRadio = it.type === "radio";
852
+ const isCheck = !isRadio && it.checked !== void 0;
853
+ const lead = isRadio ? /* @__PURE__ */ React6.createElement("span", { className: cx("aura-menu__radio", it.checked && "is-on") }) : isCheck ? /* @__PURE__ */ React6.createElement("span", { className: cx("aura-menu__check", it.checked && "is-on") }, it.checked ? /* @__PURE__ */ React6.createElement(Icon, { name: "check", size: 12, strokeWidth: 3 }) : null) : it.icon ? /* @__PURE__ */ React6.createElement(Icon, { name: it.icon }) : /* @__PURE__ */ React6.createElement("span", { className: "aura-menu__blank" });
854
+ const body = [
855
+ /* @__PURE__ */ React6.createElement(React6.Fragment, { key: "l" }, lead),
856
+ /* @__PURE__ */ React6.createElement("span", { key: "t", className: "aura-menu__label" }, it.label),
857
+ it.hint ? /* @__PURE__ */ React6.createElement("span", { key: "h", className: "aura-menu__hint" }, it.hint) : null
858
+ ];
859
+ const cls = cx("aura-menu__item", it.tone === "danger" && "aura-menu__item--danger");
860
+ if (it.href && !it.disabled)
861
+ return /* @__PURE__ */ React6.createElement(
862
+ Link,
863
+ {
864
+ key: i,
865
+ href: it.href,
866
+ target: it.target,
867
+ rel: it.target === "_blank" ? "noreferrer" : void 0,
868
+ tabIndex: -1,
869
+ role: "menuitem",
870
+ className: cls,
871
+ onClick: function() {
872
+ if (it.onSelect) it.onSelect();
873
+ props.onClose(false);
874
+ }
875
+ },
876
+ body
877
+ );
878
+ return /* @__PURE__ */ React6.createElement(
879
+ "button",
880
+ {
881
+ key: i,
882
+ type: "button",
883
+ tabIndex: -1,
884
+ disabled: it.disabled,
885
+ role: isRadio ? "menuitemradio" : isCheck ? "menuitemcheckbox" : "menuitem",
886
+ "aria-checked": isRadio || isCheck ? !!it.checked : void 0,
887
+ className: cls,
888
+ onClick: function() {
889
+ if (it.onSelect) it.onSelect();
890
+ if (!it.keepOpen) props.onClose(true);
891
+ }
892
+ },
893
+ body
894
+ );
895
+ }
830
896
  const el = /* @__PURE__ */ React6.createElement(
831
897
  "div",
832
898
  {
@@ -837,28 +903,11 @@ window.Aura = (() => {
837
903
  onKeyDown,
838
904
  style: { top: pos ? pos.top : -9999, left: pos ? pos.left : -9999 }
839
905
  },
840
- items2.map(function(it, i) {
841
- if (it.separator) return /* @__PURE__ */ React6.createElement("div", { key: "s" + i, role: "separator", className: "aura-menu__sep" });
842
- const isCheck = it.checked !== void 0;
843
- return /* @__PURE__ */ React6.createElement(
844
- "button",
845
- {
846
- key: i,
847
- type: "button",
848
- tabIndex: -1,
849
- disabled: it.disabled,
850
- role: isCheck ? "menuitemcheckbox" : "menuitem",
851
- "aria-checked": isCheck ? !!it.checked : void 0,
852
- className: "aura-menu__item",
853
- onClick: function() {
854
- it.onSelect();
855
- if (!it.keepOpen) props.onClose(true);
856
- }
857
- },
858
- isCheck ? /* @__PURE__ */ React6.createElement("span", { className: cx("aura-menu__check", it.checked && "is-on") }, it.checked ? /* @__PURE__ */ React6.createElement(Icon, { name: "check", size: 12, strokeWidth: 3 }) : null) : it.icon ? /* @__PURE__ */ React6.createElement(Icon, { name: it.icon }) : /* @__PURE__ */ React6.createElement("span", { className: "aura-menu__blank" }),
859
- /* @__PURE__ */ React6.createElement("span", { className: "aura-menu__label" }, it.label),
860
- it.hint ? /* @__PURE__ */ React6.createElement("span", { className: "aura-menu__hint" }, it.hint) : null
861
- );
906
+ groupItems(items2).map(function(block, bi) {
907
+ const rendered = block.items.map(function(x) {
908
+ return renderItem(x.it, x.i);
909
+ });
910
+ return block.group ? /* @__PURE__ */ React6.createElement("div", { key: "g" + bi, role: "group", "aria-label": block.group, className: "aura-menu__group" }, rendered) : /* @__PURE__ */ React6.createElement(React6.Fragment, { key: "f" + bi }, rendered);
862
911
  })
863
912
  );
864
913
  return mounted ? (0, import_react_dom.createPortal)(el, document.body) : null;
@@ -887,6 +936,7 @@ window.Aura = (() => {
887
936
  anchor,
888
937
  label: props.label,
889
938
  items: props.items,
939
+ linkComponent: props.linkComponent,
890
940
  onClose: function(restore) {
891
941
  setAnchor(null);
892
942
  if (restore && typeof anchor.focus === "function") anchor.focus();
@@ -1696,6 +1746,16 @@ window.Aura = (() => {
1696
1746
  const dt = new Date(y, mo - 1, d);
1697
1747
  return dt.getMonth() === mo - 1 && dt.getDate() === d ? toISO(dt) : null;
1698
1748
  }
1749
+ function todayIn(timeZone) {
1750
+ const now = /* @__PURE__ */ new Date();
1751
+ if (!timeZone) return toISO(now);
1752
+ return new Intl.DateTimeFormat("en-CA", {
1753
+ timeZone,
1754
+ year: "numeric",
1755
+ month: "2-digit",
1756
+ day: "2-digit"
1757
+ }).format(now);
1758
+ }
1699
1759
 
1700
1760
  // src/DatePicker.tsx
1701
1761
  function useFormatDate() {
@@ -1717,9 +1777,9 @@ window.Aura = (() => {
1717
1777
  var Calendar = React17.forwardRef(function Calendar2(props, ref) {
1718
1778
  const ctx = useAuraLocale(), locale = props.locale || ctx.locale || "en", calendar = props.calendar || ctx.calendar || defaultCalendar(locale), tag = localeTag(locale, calendar);
1719
1779
  const weekStart = props.weekStartsOn == null ? locale === "sv" ? 1 : 0 : props.weekStartsOn;
1720
- let today = /* @__PURE__ */ new Date();
1721
- today = new Date(today.getFullYear(), today.getMonth(), today.getDate());
1722
- const min = fromISO(props.min), max = fromISO(props.max);
1780
+ const todayISO = props.today || todayIn(props.timeZone || ctx.timeZone);
1781
+ const today = fromISO(todayISO);
1782
+ const min = fromISO(props.min === "today" ? todayISO : props.min), max = fromISO(props.max === "today" ? todayISO : props.max);
1723
1783
  const start = fromISO(props.start), end = fromISO(props.end);
1724
1784
  const focusState = React17.useState(fromISO(props.focus) || start || today);
1725
1785
  const focusDate = focusState[0], setFocus = focusState[1];
@@ -2105,6 +2165,8 @@ window.Aura = (() => {
2105
2165
  weekStartsOn: props.weekStartsOn,
2106
2166
  min: props.min,
2107
2167
  max: props.max,
2168
+ timeZone: props.timeZone,
2169
+ today: props.today,
2108
2170
  isDateDisabled: props.isDateDisabled,
2109
2171
  start: st[0],
2110
2172
  focus: st[0],
@@ -2221,6 +2283,8 @@ window.Aura = (() => {
2221
2283
  weekStartsOn: props.weekStartsOn,
2222
2284
  min: props.min,
2223
2285
  max: props.max,
2286
+ timeZone: props.timeZone,
2287
+ today: props.today,
2224
2288
  isDateDisabled: props.isDateDisabled,
2225
2289
  start: draft[0] || v.start,
2226
2290
  end: draft[0] ? null : v.end,
@@ -2295,11 +2359,19 @@ window.Aura = (() => {
2295
2359
  // src/Toaster.tsx
2296
2360
  var React19 = __toESM(require_react(), 1);
2297
2361
  var import_react_dom4 = __toESM(require_react_dom(), 1);
2362
+ var MAX_VISIBLE = 3;
2298
2363
  var toastState = {
2299
2364
  list: [],
2365
+ queue: [],
2300
2366
  subs: [],
2301
2367
  n: 0
2302
2368
  };
2369
+ function promote() {
2370
+ while (toastState.list.length < MAX_VISIBLE && toastState.queue.length) {
2371
+ toastState.list = toastState.list.concat([toastState.queue[0]]);
2372
+ toastState.queue = toastState.queue.slice(1);
2373
+ }
2374
+ }
2303
2375
  function emitToasts() {
2304
2376
  toastState.subs.forEach(function(f) {
2305
2377
  f(toastState.list.slice());
@@ -2307,18 +2379,24 @@ window.Aura = (() => {
2307
2379
  }
2308
2380
  function show(opts) {
2309
2381
  const id = opts.id || "t" + ++toastState.n;
2310
- const at = toastState.list.findIndex(function(t) {
2382
+ const byId = function(t) {
2311
2383
  return t.id === id;
2312
- });
2384
+ };
2385
+ const at = toastState.list.findIndex(byId), queued = toastState.queue.findIndex(byId);
2386
+ const prev = at >= 0 ? toastState.list[at] : queued >= 0 ? toastState.queue[queued] : null;
2313
2387
  const entry = Object.assign({ tone: "info" }, opts, {
2314
2388
  id,
2315
2389
  loading: !!opts.loading,
2316
- rev: at >= 0 ? toastState.list[at].rev + 1 : 0
2390
+ rev: prev ? prev.rev + 1 : 0
2317
2391
  });
2318
2392
  if (at >= 0) {
2319
2393
  toastState.list = toastState.list.slice();
2320
2394
  toastState.list[at] = entry;
2321
- } else toastState.list = toastState.list.concat([entry]).slice(-3);
2395
+ } else if (queued >= 0) {
2396
+ toastState.queue = toastState.queue.slice();
2397
+ toastState.queue[queued] = entry;
2398
+ } else if (toastState.list.length < MAX_VISIBLE) toastState.list = toastState.list.concat([entry]);
2399
+ else toastState.queue = toastState.queue.concat([entry]);
2322
2400
  emitToasts();
2323
2401
  return id;
2324
2402
  }
@@ -2340,9 +2418,12 @@ window.Aura = (() => {
2340
2418
  );
2341
2419
  };
2342
2420
  toast.dismiss = function(id) {
2343
- toastState.list = toastState.list.filter(function(t) {
2421
+ const keep = function(t) {
2344
2422
  return t.id !== id;
2345
- });
2423
+ };
2424
+ toastState.list = toastState.list.filter(keep);
2425
+ toastState.queue = toastState.queue.filter(keep);
2426
+ promote();
2346
2427
  emitToasts();
2347
2428
  };
2348
2429
  function ToastItem(props) {
@@ -3132,6 +3213,7 @@ window.Aura = (() => {
3132
3213
 
3133
3214
  // src/DataTable.tsx
3134
3215
  var React28 = __toESM(require_react(), 1);
3216
+ var import_react_dom8 = __toESM(require_react_dom(), 1);
3135
3217
  var BP = { sm: 640, md: 768, lg: 1024, xl: 1280 };
3136
3218
  var DEFAULT_COLUMNS = [
3137
3219
  { key: "id", label: "ID", width: 96, mono: true },
@@ -3243,6 +3325,29 @@ window.Aura = (() => {
3243
3325
  return px != null && boxWidth[0] < px;
3244
3326
  }
3245
3327
  const scrollRef = React28.useRef(null);
3328
+ const tipState = React28.useState(null), tip = tipState[0], setTip = tipState[1];
3329
+ function showFull(e) {
3330
+ const el = e.target.closest ? e.target.closest(".aura-table__td, .aura-table__card-fields dd") : null;
3331
+ if (!el || el.scrollWidth <= el.clientWidth + 1 || el.querySelector("button, input, .aura-pill"))
3332
+ return setTip(null);
3333
+ const r = el.getBoundingClientRect();
3334
+ setTip({ text: (el.textContent || "").trim(), left: r.left, top: r.top });
3335
+ }
3336
+ function hideFull() {
3337
+ setTip(null);
3338
+ }
3339
+ const tipEl = tip && typeof document !== "undefined" ? (0, import_react_dom8.createPortal)(
3340
+ /* @__PURE__ */ React28.createElement(
3341
+ "div",
3342
+ {
3343
+ className: "aura-tooltip aura-tooltip--above",
3344
+ "aria-hidden": "true",
3345
+ style: { left: tip.left, top: tip.top - 6 }
3346
+ },
3347
+ tip.text
3348
+ ),
3349
+ document.body
3350
+ ) : null;
3246
3351
  const rowH = React28.useState(ROW_H_DEFAULT);
3247
3352
  const ROW_H = rowH[0];
3248
3353
  useIsoLayoutEffect(function() {
@@ -4111,7 +4216,7 @@ window.Aura = (() => {
4111
4216
  return /* @__PURE__ */ React28.createElement("span", { key: c.key, className: "aura-table__card-actions" }, cellVal(c, r));
4112
4217
  })),
4113
4218
  rest.length ? /* @__PURE__ */ React28.createElement("dl", { className: "aura-table__card-fields" }, rest.map(function(c) {
4114
- return /* @__PURE__ */ React28.createElement("div", { key: c.key }, /* @__PURE__ */ React28.createElement("dt", null, c.label), /* @__PURE__ */ React28.createElement("dd", { className: c.mono ? "aura-table__mono" : void 0 }, cellVal(c, r)));
4219
+ return /* @__PURE__ */ React28.createElement("div", { key: c.key }, /* @__PURE__ */ React28.createElement("dt", null, c.label), /* @__PURE__ */ React28.createElement("dd", { className: cx(c.mono && "aura-table__mono", c.align === "end" && "is-end") }, cellVal(c, r)));
4115
4220
  })) : null
4116
4221
  );
4117
4222
  }));
@@ -4122,6 +4227,10 @@ window.Aura = (() => {
4122
4227
  ref: wrapRefArg,
4123
4228
  "data-density": props.density,
4124
4229
  className: cx("aura-table aura-table--stacked", refreshing && "is-refreshing", props.className),
4230
+ onMouseOver: showFull,
4231
+ onMouseLeave: hideFull,
4232
+ onFocus: showFull,
4233
+ onBlur: hideFull,
4125
4234
  role: "region",
4126
4235
  "aria-label": props.label,
4127
4236
  "aria-busy": busy || void 0
@@ -4137,10 +4246,55 @@ window.Aura = (() => {
4137
4246
  }
4138
4247
  ), /* @__PURE__ */ React28.createElement("span", null, nSel ? t.selectedCount(nSel) : t.selectAll)) : null,
4139
4248
  cardBody,
4140
- foot
4249
+ props.footer && rows.length && !loading ? /* @__PURE__ */ React28.createElement("div", { className: "aura-table__card aura-table__card--total", role: "group", "aria-label": t.totals }, /* @__PURE__ */ React28.createElement("dl", { className: "aura-table__card-fields" }, vis.filter(function(c) {
4250
+ return props.footer[c.key] != null;
4251
+ }).map(function(c) {
4252
+ return /* @__PURE__ */ React28.createElement("div", { key: c.key }, /* @__PURE__ */ React28.createElement("dt", null, c.label || t.totals), /* @__PURE__ */ React28.createElement("dd", { className: cx(c.mono && "aura-table__mono", c.align === "end" && "is-end") }, props.footer[c.key]));
4253
+ }))) : null,
4254
+ foot,
4255
+ tipEl
4141
4256
  );
4142
4257
  }
4143
4258
  if (stacked) return renderStacked(wrapMerged);
4259
+ const totalRow = props.footer && rows.length && !loading ? /* @__PURE__ */ React28.createElement(
4260
+ "div",
4261
+ {
4262
+ role: "row",
4263
+ "aria-rowindex": shownTotal + 2,
4264
+ "aria-label": t.totals,
4265
+ className: cx("aura-table__row aura-table__total", props.stickyFooter && "is-sticky"),
4266
+ style: rowStyle
4267
+ },
4268
+ /* @__PURE__ */ React28.createElement("span", { className: "aura-table__gutter", "aria-hidden": true }),
4269
+ selectable ? /* @__PURE__ */ React28.createElement("span", { className: cx("aura-table__sel", nPinned && "is-pinned"), "aria-hidden": true }) : null,
4270
+ vis.map(function(c, j) {
4271
+ const pin = isPinned(c);
4272
+ return /* @__PURE__ */ React28.createElement(
4273
+ "span",
4274
+ {
4275
+ key: c.key,
4276
+ role: "gridcell",
4277
+ "aria-colindex": j + (selectable ? 2 : 1),
4278
+ className: cx(
4279
+ "aura-table__td",
4280
+ c.mono && "aura-table__mono",
4281
+ c.align === "end" && "is-end",
4282
+ pin && "is-pinned",
4283
+ pin && j === nPinned - 1 && "is-pin-edge"
4284
+ ),
4285
+ style: cellStyle(c, j)
4286
+ },
4287
+ props.footer[c.key]
4288
+ );
4289
+ }),
4290
+ /* @__PURE__ */ React28.createElement(
4291
+ "span",
4292
+ {
4293
+ className: cx("aura-table__gutter aura-table__gutter--end", controls && "has-picker"),
4294
+ "aria-hidden": true
4295
+ }
4296
+ )
4297
+ ) : null;
4144
4298
  const scrollStyle = {
4145
4299
  scrollPaddingLeft: "calc(var(--aura-space-6)" + selW + " + " + acc + "px)",
4146
4300
  scrollPaddingTop: ROW_H + "px"
@@ -4162,11 +4316,15 @@ window.Aura = (() => {
4162
4316
  gridRef.current = el;
4163
4317
  },
4164
4318
  className: "aura-table__scroll",
4319
+ onMouseOver: showFull,
4320
+ onMouseLeave: hideFull,
4321
+ onFocus: showFull,
4322
+ onBlur: hideFull,
4165
4323
  style: scrollStyle,
4166
4324
  role: "grid",
4167
4325
  "aria-label": props.label,
4168
4326
  "aria-busy": busy || void 0,
4169
- "aria-rowcount": loading ? -1 : shownTotal + 1,
4327
+ "aria-rowcount": loading ? -1 : shownTotal + 1 + (totalRow ? 1 : 0),
4170
4328
  "aria-colcount": nCols,
4171
4329
  "aria-multiselectable": selectable || void 0,
4172
4330
  onKeyDown: onGridKey,
@@ -4180,7 +4338,8 @@ window.Aura = (() => {
4180
4338
  }
4181
4339
  },
4182
4340
  /* @__PURE__ */ React28.createElement("div", { className: "aura-table__head", role: "row", "aria-rowindex": 1, style: rowStyle }, head),
4183
- body
4341
+ body,
4342
+ totalRow
4184
4343
  ),
4185
4344
  busy ? /* @__PURE__ */ React28.createElement("span", { className: "aura-sr-only", role: "status" }, t.loadingRows) : null,
4186
4345
  controls ? /* @__PURE__ */ React28.createElement("div", { className: "aura-table__picker" }, /* @__PURE__ */ React28.createElement(
@@ -4203,7 +4362,8 @@ window.Aura = (() => {
4203
4362
  label: menu.kind === "picker" ? t.columns : t.column(byKey[menu.key] && byKey[menu.key].label),
4204
4363
  items: menu.kind === "picker" ? pickerItems() : byKey[menu.key] ? columnMenuItems(byKey[menu.key]) : []
4205
4364
  }
4206
- ) : null
4365
+ ) : null,
4366
+ tipEl
4207
4367
  );
4208
4368
  if (!dual) return gridEl;
4209
4369
  return /* @__PURE__ */ React28.createElement("div", { ref: wrapMerged, className: "aura-table-dual", "data-stack-below": props.stackBelow }, renderStacked(void 0), gridEl);
@@ -4245,6 +4405,40 @@ window.Aura = (() => {
4245
4405
  const current2 = items2.filter(function(t) {
4246
4406
  return t.id === st[0];
4247
4407
  })[0] || items2[0];
4408
+ const Link = useLinkComponent(props.linkComponent);
4409
+ const asLinks = items2.length > 0 && items2.every(function(t) {
4410
+ return !!t.href;
4411
+ });
4412
+ if (asLinks)
4413
+ return /* @__PURE__ */ React30.createElement(
4414
+ "nav",
4415
+ {
4416
+ ref,
4417
+ "aria-label": props.label,
4418
+ className: cx("aura-tabs aura-tabs--links", props.className)
4419
+ },
4420
+ /* @__PURE__ */ React30.createElement("div", { className: "aura-tabs__list" }, items2.map(function(t) {
4421
+ const on = current2 && t.id === current2.id;
4422
+ const inner = [
4423
+ t.icon ? /* @__PURE__ */ React30.createElement(Icon, { key: "i", name: t.icon }) : null,
4424
+ t.label,
4425
+ t.count != null ? /* @__PURE__ */ React30.createElement("span", { key: "c", className: "aura-tab__count" }, t.count) : null
4426
+ ];
4427
+ return t.disabled ? /* @__PURE__ */ React30.createElement("span", { key: t.id, className: "aura-tab is-disabled", "aria-disabled": true }, inner) : /* @__PURE__ */ React30.createElement(
4428
+ Link,
4429
+ {
4430
+ key: t.id,
4431
+ href: t.href,
4432
+ className: cx("aura-tab", on && "is-active"),
4433
+ "aria-current": on ? "page" : void 0,
4434
+ onClick: function() {
4435
+ st[1](t.id);
4436
+ }
4437
+ },
4438
+ inner
4439
+ );
4440
+ }))
4441
+ );
4248
4442
  function go(i) {
4249
4443
  const enabled = items2.filter(function(t2) {
4250
4444
  return !t2.disabled;
@@ -4319,7 +4513,7 @@ window.Aura = (() => {
4319
4513
 
4320
4514
  // src/SideNav.tsx
4321
4515
  var React31 = __toESM(require_react(), 1);
4322
- var import_react_dom8 = __toESM(require_react_dom(), 1);
4516
+ var import_react_dom9 = __toESM(require_react_dom(), 1);
4323
4517
  function contains(it, id) {
4324
4518
  return !!id && !!it.children && it.children.some(function(c) {
4325
4519
  return c.id === id || contains(c, id);
@@ -4506,7 +4700,7 @@ window.Aura = (() => {
4506
4700
  }
4507
4701
  }
4508
4702
  )) : null,
4509
- tip && typeof document !== "undefined" ? (0, import_react_dom8.createPortal)(
4703
+ tip && typeof document !== "undefined" ? (0, import_react_dom9.createPortal)(
4510
4704
  /* @__PURE__ */ React31.createElement(
4511
4705
  "div",
4512
4706
  {
@@ -4690,7 +4884,7 @@ window.Aura = (() => {
4690
4884
  collapsed: false,
4691
4885
  collapsible: false
4692
4886
  }) : props.nav;
4693
- return /* @__PURE__ */ React38.createElement("div", { ref, className: cx("aura-shell", props.className) }, props.nav ? /* @__PURE__ */ React38.createElement("div", { className: "aura-shell__nav" }, props.nav) : null, props.nav ? /* @__PURE__ */ React38.createElement(
4887
+ return /* @__PURE__ */ React38.createElement("div", { ref, className: cx("aura-shell", props.bottomNav && "aura-shell--bottomnav", props.className) }, props.nav ? /* @__PURE__ */ React38.createElement("div", { className: "aura-shell__nav" }, props.nav) : null, props.nav ? /* @__PURE__ */ React38.createElement(
4694
4888
  Drawer,
4695
4889
  {
4696
4890
  open,
@@ -4715,13 +4909,95 @@ window.Aura = (() => {
4715
4909
  },
4716
4910
  "aria-expanded": open
4717
4911
  }
4718
- ) : null, /* @__PURE__ */ React38.createElement("div", { className: "aura-shell__bar-content" }, props.header)) : null, /* @__PURE__ */ React38.createElement("main", { className: "aura-shell__content", id: props.mainId || "main" }, props.children)));
4912
+ ) : null, /* @__PURE__ */ React38.createElement("div", { className: "aura-shell__bar-content" }, props.header)) : null, /* @__PURE__ */ React38.createElement("main", { className: "aura-shell__content", id: props.mainId || "main" }, props.children), props.bottomNav || null));
4719
4913
  });
4720
4914
 
4721
- // src/Surface.tsx
4915
+ // src/ActionBar.tsx
4722
4916
  var React39 = __toESM(require_react(), 1);
4723
- var h8 = React39.createElement;
4724
- var Surface = React39.forwardRef(function Surface2(props, ref) {
4917
+ var ActionBar = React39.forwardRef(function ActionBar2(props, ref) {
4918
+ const t = useStrings();
4919
+ const bulk = props.selected != null;
4920
+ const idle = bulk && !props.selected;
4921
+ const count = bulk && props.selected ? t.selectedCount(props.selected) : null;
4922
+ const cameFrom = React39.useRef(null);
4923
+ const own = React39.useRef(null);
4924
+ function clear() {
4925
+ props.onClearSelection();
4926
+ setTimeout(function() {
4927
+ const back = cameFrom.current;
4928
+ const a = document.activeElement;
4929
+ if ((!a || a === document.body || !a.isConnected) && back && back.isConnected) back.focus();
4930
+ }, 0);
4931
+ }
4932
+ return /* @__PURE__ */ React39.createElement(
4933
+ "div",
4934
+ {
4935
+ ref: function(el) {
4936
+ own.current = el;
4937
+ if (typeof ref === "function") ref(el);
4938
+ else if (ref) ref.current = el;
4939
+ },
4940
+ onFocus: function(e) {
4941
+ const from = e.relatedTarget;
4942
+ if (from && own.current && !own.current.contains(from)) cameFrom.current = from;
4943
+ },
4944
+ role: "region",
4945
+ "aria-label": props.label || t.actions,
4946
+ className: cx(
4947
+ "aura-actionbar",
4948
+ "aura-actionbar--" + (props.position || "viewport"),
4949
+ idle && "is-idle",
4950
+ props.className
4951
+ )
4952
+ },
4953
+ /* @__PURE__ */ React39.createElement("div", { className: "aura-actionbar__inner" }, /* @__PURE__ */ React39.createElement("div", { className: "aura-actionbar__status", role: "status" }, count, count && props.status ? " \xB7 " : null, props.status), !idle ? /* @__PURE__ */ React39.createElement("div", { className: "aura-actionbar__actions" }, count && props.onClearSelection ? /* @__PURE__ */ React39.createElement(Button, { variant: "ghost", size: "sm", onClick: clear }, t.clear()) : null, props.children) : null)
4954
+ );
4955
+ });
4956
+
4957
+ // src/BottomNav.tsx
4958
+ var React40 = __toESM(require_react(), 1);
4959
+ var BottomNav = React40.forwardRef(function BottomNav2(props, ref) {
4960
+ const t = useStrings();
4961
+ const Link = useLinkComponent(props.linkComponent);
4962
+ const st = useMaybeControlled(
4963
+ props.value,
4964
+ props.defaultValue,
4965
+ props.onChange
4966
+ );
4967
+ const active = st[0];
4968
+ const hide = props.hideFrom === false ? "always" : "below-" + (props.hideFrom || "lg");
4969
+ return /* @__PURE__ */ React40.createElement(React40.Fragment, null, /* @__PURE__ */ React40.createElement("div", { className: cx("aura-bottomnav-spacer", "aura-bottomnav--" + hide), "aria-hidden": "true" }), /* @__PURE__ */ React40.createElement(
4970
+ "nav",
4971
+ {
4972
+ ref,
4973
+ className: cx("aura-bottomnav", "aura-bottomnav--" + hide, props.className),
4974
+ "aria-label": props.label || t.mainNav
4975
+ },
4976
+ /* @__PURE__ */ React40.createElement("ul", { className: "aura-bottomnav__list" }, props.items.map(function(it) {
4977
+ const on = active === it.id;
4978
+ const count = it.count != null && it.count > 0 ? it.count > 99 ? "99+" : String(it.count) : null;
4979
+ const common = {
4980
+ className: cx("aura-bottomnav__item", on && "is-active"),
4981
+ "aria-current": on ? "page" : void 0,
4982
+ onClick: function(e) {
4983
+ if (!it.href) e.preventDefault();
4984
+ st[1](it.id);
4985
+ }
4986
+ };
4987
+ const inner = [
4988
+ /* @__PURE__ */ React40.createElement("span", { key: "i", className: "aura-bottomnav__icon" }, /* @__PURE__ */ React40.createElement(Icon, { name: it.icon, size: "md" }), count ? /* @__PURE__ */ React40.createElement("span", { className: "aura-bottomnav__count", "aria-hidden": "true" }, count) : it.badge ? /* @__PURE__ */ React40.createElement("span", { className: "aura-bottomnav__dot", "aria-hidden": "true" }) : null),
4989
+ /* @__PURE__ */ React40.createElement("span", { key: "l", className: "aura-bottomnav__label" }, it.label),
4990
+ count || it.badge && it.badgeLabel ? /* @__PURE__ */ React40.createElement("span", { key: "s", className: "aura-sr-only" }, " (" + (count || it.badgeLabel) + ")") : null
4991
+ ];
4992
+ return /* @__PURE__ */ React40.createElement("li", { key: it.id, className: "aura-bottomnav__cell" }, it.href ? /* @__PURE__ */ React40.createElement(Link, { href: it.href, ...common }, inner) : /* @__PURE__ */ React40.createElement("button", { type: "button", ...common }, inner));
4993
+ }))
4994
+ ));
4995
+ });
4996
+
4997
+ // src/Surface.tsx
4998
+ var React41 = __toESM(require_react(), 1);
4999
+ var h8 = React41.createElement;
5000
+ var Surface = React41.forwardRef(function Surface2(props, ref) {
4725
5001
  const t = props.texture || "mesh";
4726
5002
  const rest = omit(props, ["texture", "className", "children", "as"]);
4727
5003
  return h8(
@@ -4742,8 +5018,8 @@ window.Aura = (() => {
4742
5018
  });
4743
5019
 
4744
5020
  // src/Stat.tsx
4745
- var React40 = __toESM(require_react(), 1);
4746
- var Stat = React40.forwardRef(function Stat2(props, ref) {
5021
+ var React42 = __toESM(require_react(), 1);
5022
+ var Stat = React42.forwardRef(function Stat2(props, ref) {
4747
5023
  const ch = props.change;
4748
5024
  const dir = ch && (ch.direction || "flat");
4749
5025
  const tone2 = ch && (ch.tone || (dir === "up" ? "positive" : dir === "down" ? "negative" : "neutral"));
@@ -4752,7 +5028,7 @@ window.Aura = (() => {
4752
5028
  const numeric = typeof v === "number" || typeof v === "string" && /\d/.test(v) && /^[\s\d.,:+\-\u2212%()\u0E3F$\u20AC\u00A3\u00A5kKmMbB]+$/.test(v.replace(/\b[A-Z]{3}\b/g, ""));
4753
5029
  const Tag3 = props.href ? Link : props.onClick ? "button" : "div";
4754
5030
  const interactive = !!(props.href || props.onClick);
4755
- return /* @__PURE__ */ React40.createElement(
5031
+ return /* @__PURE__ */ React42.createElement(
4756
5032
  Tag3,
4757
5033
  {
4758
5034
  ref,
@@ -4762,15 +5038,15 @@ window.Aura = (() => {
4762
5038
  type: Tag3 === "button" ? "button" : void 0,
4763
5039
  "aria-busy": props.loading || void 0
4764
5040
  },
4765
- /* @__PURE__ */ React40.createElement("span", { className: "aura-stat__head" }, /* @__PURE__ */ React40.createElement("span", { className: "aura-stat__label" }, props.label), props.icon ? /* @__PURE__ */ React40.createElement("span", { className: "aura-stat__icon" }, /* @__PURE__ */ React40.createElement(Icon, { name: props.icon })) : null),
4766
- props.loading ? /* @__PURE__ */ React40.createElement("span", { className: "aura-stat__value" }, /* @__PURE__ */ React40.createElement("span", { className: "aura-skel aura-stat__skel" })) : /* @__PURE__ */ React40.createElement("span", { className: cx("aura-stat__value", numeric && "is-numeric") }, props.value, props.unit ? /* @__PURE__ */ React40.createElement("span", { className: "aura-stat__unit" }, props.unit) : null),
4767
- ch && !props.loading || props.caption ? /* @__PURE__ */ React40.createElement("span", { className: "aura-stat__foot" }, ch && !props.loading ? /* @__PURE__ */ React40.createElement("span", { className: cx("aura-stat__change", "is-" + tone2) }, /* @__PURE__ */ React40.createElement(Icon, { name: dir === "up" ? "trending-up" : dir === "down" ? "trending-down" : "minus", size: 14 }), /* @__PURE__ */ React40.createElement("span", null, ch.value)) : null, ch && ch.label && !props.loading ? /* @__PURE__ */ React40.createElement("span", { className: "aura-stat__caption" }, ch.label) : null, props.caption ? /* @__PURE__ */ React40.createElement("span", { className: "aura-stat__caption" }, props.caption) : null) : null
5041
+ /* @__PURE__ */ React42.createElement("span", { className: "aura-stat__head" }, /* @__PURE__ */ React42.createElement("span", { className: "aura-stat__label" }, props.label), props.icon ? /* @__PURE__ */ React42.createElement("span", { className: "aura-stat__icon" }, /* @__PURE__ */ React42.createElement(Icon, { name: props.icon })) : null),
5042
+ props.loading ? /* @__PURE__ */ React42.createElement("span", { className: "aura-stat__value" }, /* @__PURE__ */ React42.createElement("span", { className: "aura-skel aura-stat__skel" })) : /* @__PURE__ */ React42.createElement("span", { className: cx("aura-stat__value", numeric && "is-numeric") }, props.value, props.unit ? /* @__PURE__ */ React42.createElement("span", { className: "aura-stat__unit" }, props.unit) : null),
5043
+ ch && !props.loading || props.caption ? /* @__PURE__ */ React42.createElement("span", { className: "aura-stat__foot" }, ch && !props.loading ? /* @__PURE__ */ React42.createElement("span", { className: cx("aura-stat__change", "is-" + tone2) }, /* @__PURE__ */ React42.createElement(Icon, { name: dir === "up" ? "trending-up" : dir === "down" ? "trending-down" : "minus", size: 14 }), /* @__PURE__ */ React42.createElement("span", null, ch.value)) : null, ch && ch.label && !props.loading ? /* @__PURE__ */ React42.createElement("span", { className: "aura-stat__caption" }, ch.label) : null, props.caption ? /* @__PURE__ */ React42.createElement("span", { className: "aura-stat__caption" }, props.caption) : null) : null
4768
5044
  );
4769
5045
  });
4770
5046
 
4771
5047
  // src/TimePicker.tsx
4772
- var React41 = __toESM(require_react(), 1);
4773
- var import_react_dom9 = __toESM(require_react_dom(), 1);
5048
+ var React43 = __toESM(require_react(), 1);
5049
+ var import_react_dom10 = __toESM(require_react_dom(), 1);
4774
5050
 
4775
5051
  // src/text.ts
4776
5052
  function formatBytes(n2) {
@@ -4810,7 +5086,7 @@ window.Aura = (() => {
4810
5086
  function fromMin(n2) {
4811
5087
  return pad3(Math.floor(n2 / 60)) + ":" + pad3(n2 % 60);
4812
5088
  }
4813
- var TimePicker = React41.forwardRef(function TimePicker2(props, ref) {
5089
+ var TimePicker = React43.forwardRef(function TimePicker2(props, ref) {
4814
5090
  const t = useStrings();
4815
5091
  const auto = uid(), id = props.id || auto, listId = id + "-list";
4816
5092
  const st = useMaybeControlled(
@@ -4820,7 +5096,7 @@ window.Aura = (() => {
4820
5096
  );
4821
5097
  const value = st[0];
4822
5098
  const step = props.step || 30, lo = toMin(props.min) != null ? toMin(props.min) : 0, hi = toMin(props.max) != null ? toMin(props.max) : 24 * 60 - 1;
4823
- const slots = React41.useMemo(
5099
+ const slots = React43.useMemo(
4824
5100
  function() {
4825
5101
  const out = [];
4826
5102
  for (let m = lo; m <= hi; m += step) out.push(fromMin(m));
@@ -4832,12 +5108,12 @@ window.Aura = (() => {
4832
5108
  const n2 = toMin(v);
4833
5109
  return n2 == null || n2 < lo || n2 > hi || props.isTimeDisabled && props.isTimeDisabled(v);
4834
5110
  }
4835
- const openState = React41.useState(false), open = openState[0], setOpen = openState[1];
4836
- const editState = React41.useState(null), editing = editState[0], setEditing = editState[1];
4837
- const aState = React41.useState(0), active = aState[0], setActive = aState[1];
4838
- const errState = React41.useState(null);
4839
- const pos = React41.useState(null);
4840
- const boxRef = React41.useRef(null), inputRef = React41.useRef(null), listRef = React41.useRef(null), inputMerged = useMergedRef(ref, inputRef);
5111
+ const openState = React43.useState(false), open = openState[0], setOpen = openState[1];
5112
+ const editState = React43.useState(null), editing = editState[0], setEditing = editState[1];
5113
+ const aState = React43.useState(0), active = aState[0], setActive = aState[1];
5114
+ const errState = React43.useState(null);
5115
+ const pos = React43.useState(null);
5116
+ const boxRef = React43.useRef(null), inputRef = React43.useRef(null), listRef = React43.useRef(null), inputMerged = useMergedRef(ref, inputRef);
4841
5117
  const mounted = useMounted();
4842
5118
  function nearest(v) {
4843
5119
  const n2 = toMin(v);
@@ -4865,7 +5141,7 @@ window.Aura = (() => {
4865
5141
  },
4866
5142
  [open]
4867
5143
  );
4868
- React41.useEffect(
5144
+ React43.useEffect(
4869
5145
  function() {
4870
5146
  if (!open) return;
4871
5147
  function outside(e) {
@@ -4887,7 +5163,7 @@ window.Aura = (() => {
4887
5163
  },
4888
5164
  [open]
4889
5165
  );
4890
- React41.useEffect(
5166
+ React43.useEffect(
4891
5167
  function() {
4892
5168
  if (!open || !listRef.current) return;
4893
5169
  const el = listRef.current.querySelector('[data-idx="' + active + '"]');
@@ -4984,10 +5260,10 @@ window.Aura = (() => {
4984
5260
  }
4985
5261
  }
4986
5262
  const error = errState[0] || props.error;
4987
- const list = open && mounted && pos[0] ? (0, import_react_dom9.createPortal)(
4988
- /* @__PURE__ */ React41.createElement("div", { ref: listRef, className: "aura-combo__popover aura-time__popover", style: pos[0] }, /* @__PURE__ */ React41.createElement("ul", { id: listId, role: "listbox", "aria-label": props.label, className: "aura-combo__list" }, slots.map(function(s, i) {
5263
+ const list = open && mounted && pos[0] ? (0, import_react_dom10.createPortal)(
5264
+ /* @__PURE__ */ React43.createElement("div", { ref: listRef, className: "aura-combo__popover aura-time__popover", style: pos[0] }, /* @__PURE__ */ React43.createElement("ul", { id: listId, role: "listbox", "aria-label": props.label, className: "aura-combo__list" }, slots.map(function(s, i) {
4989
5265
  const dis = blocked(s), sel = s === value;
4990
- return /* @__PURE__ */ React41.createElement(
5266
+ return /* @__PURE__ */ React43.createElement(
4991
5267
  "li",
4992
5268
  {
4993
5269
  key: s,
@@ -5012,13 +5288,13 @@ window.Aura = (() => {
5012
5288
  if (active !== i) setActive(i);
5013
5289
  }
5014
5290
  },
5015
- /* @__PURE__ */ React41.createElement("span", { className: "aura-combo__label" }, s),
5016
- sel ? /* @__PURE__ */ React41.createElement(Icon, { name: "check", className: "aura-combo__check" }) : null
5291
+ /* @__PURE__ */ React43.createElement("span", { className: "aura-combo__label" }, s),
5292
+ sel ? /* @__PURE__ */ React43.createElement(Icon, { name: "check", className: "aura-combo__check" }) : null
5017
5293
  );
5018
5294
  }))),
5019
5295
  document.body
5020
5296
  ) : null;
5021
- return /* @__PURE__ */ React41.createElement(
5297
+ return /* @__PURE__ */ React43.createElement(
5022
5298
  Field,
5023
5299
  {
5024
5300
  id,
@@ -5030,7 +5306,7 @@ window.Aura = (() => {
5030
5306
  disabled: props.disabled,
5031
5307
  className: props.className
5032
5308
  },
5033
- /* @__PURE__ */ React41.createElement("div", { ref: boxRef, className: cx("aura-input aura-combo aura-time has-icon", open && "is-open") }, /* @__PURE__ */ React41.createElement(Icon, { name: "clock", className: "aura-input__icon" }), /* @__PURE__ */ React41.createElement(
5309
+ /* @__PURE__ */ React43.createElement("div", { ref: boxRef, className: cx("aura-input aura-combo aura-time has-icon", open && "is-open") }, /* @__PURE__ */ React43.createElement(Icon, { name: "clock", className: "aura-input__icon" }), /* @__PURE__ */ React43.createElement(
5034
5310
  "input",
5035
5311
  {
5036
5312
  ref: inputMerged,
@@ -5070,7 +5346,7 @@ window.Aura = (() => {
5070
5346
  }, 0);
5071
5347
  }
5072
5348
  }
5073
- ), props.clearable !== false && value != null && !props.disabled ? /* @__PURE__ */ React41.createElement(
5349
+ ), props.clearable !== false && value != null && !props.disabled ? /* @__PURE__ */ React43.createElement(
5074
5350
  "button",
5075
5351
  {
5076
5352
  type: "button",
@@ -5083,8 +5359,8 @@ window.Aura = (() => {
5083
5359
  if (inputRef.current) inputRef.current.focus();
5084
5360
  }
5085
5361
  },
5086
- /* @__PURE__ */ React41.createElement(Icon, { name: "x" })
5087
- ) : null, /* @__PURE__ */ React41.createElement(
5362
+ /* @__PURE__ */ React43.createElement(Icon, { name: "x" })
5363
+ ) : null, /* @__PURE__ */ React43.createElement(
5088
5364
  "button",
5089
5365
  {
5090
5366
  type: "button",
@@ -5102,14 +5378,14 @@ window.Aura = (() => {
5102
5378
  }
5103
5379
  }
5104
5380
  },
5105
- /* @__PURE__ */ React41.createElement(Icon, { name: "chevron-down" })
5381
+ /* @__PURE__ */ React43.createElement(Icon, { name: "chevron-down" })
5106
5382
  )),
5107
5383
  list
5108
5384
  );
5109
5385
  });
5110
5386
 
5111
5387
  // src/FileUpload.tsx
5112
- var React42 = __toESM(require_react(), 1);
5388
+ var React44 = __toESM(require_react(), 1);
5113
5389
  function matches(file, accept) {
5114
5390
  if (!accept) return true;
5115
5391
  const name = (file.name || "").toLowerCase(), type = (file.type || "").toLowerCase();
@@ -5133,17 +5409,17 @@ window.Aura = (() => {
5133
5409
  }).join(", ");
5134
5410
  }
5135
5411
  var seq = 0;
5136
- var FileUpload = React42.forwardRef(function FileUpload2(props, ref) {
5412
+ var FileUpload = React44.forwardRef(function FileUpload2(props, ref) {
5137
5413
  const t = useStrings();
5138
5414
  const auto = uid(), id = props.id || auto;
5139
5415
  const st = useMaybeControlled(props.value, props.defaultValue || [], props.onChange);
5140
5416
  const items2 = st[0] || [];
5141
- const dragState = React42.useState(false), over = dragState[0];
5142
- const inputRef = React42.useRef(null), inputMerged = useMergedRef(ref, inputRef);
5143
- const urls = React42.useRef({});
5417
+ const dragState = React44.useState(false), over = dragState[0];
5418
+ const inputRef = React44.useRef(null), inputMerged = useMergedRef(ref, inputRef);
5419
+ const urls = React44.useRef({});
5144
5420
  const maxFiles = props.multiple ? props.maxFiles : 1;
5145
5421
  const note = t.accepts(describeAccept(props.accept, t), props.maxSize ? formatBytes(props.maxSize) : "");
5146
- React42.useEffect(function() {
5422
+ React44.useEffect(function() {
5147
5423
  return function() {
5148
5424
  Object.keys(urls.current).forEach(function(k) {
5149
5425
  URL.revokeObjectURL(urls.current[k]);
@@ -5194,7 +5470,7 @@ window.Aura = (() => {
5194
5470
  if (inputRef.current) inputRef.current.focus();
5195
5471
  }
5196
5472
  const error = props.error;
5197
- return /* @__PURE__ */ React42.createElement(
5473
+ return /* @__PURE__ */ React44.createElement(
5198
5474
  Field,
5199
5475
  {
5200
5476
  id,
@@ -5206,7 +5482,7 @@ window.Aura = (() => {
5206
5482
  disabled: props.disabled,
5207
5483
  className: props.className
5208
5484
  },
5209
- /* @__PURE__ */ React42.createElement(
5485
+ /* @__PURE__ */ React44.createElement(
5210
5486
  "div",
5211
5487
  {
5212
5488
  className: cx("aura-upload", over && "is-over", props.disabled && "is-disabled", error && "is-invalid"),
@@ -5227,9 +5503,9 @@ window.Aura = (() => {
5227
5503
  add(e.dataTransfer && e.dataTransfer.files);
5228
5504
  }
5229
5505
  },
5230
- /* @__PURE__ */ React42.createElement(Icon, { name: "cloud-upload", size: "lg", className: "aura-upload__icon" }),
5231
- /* @__PURE__ */ React42.createElement("span", { className: "aura-upload__text" }, t.dropFiles, " "),
5232
- /* @__PURE__ */ React42.createElement(
5506
+ /* @__PURE__ */ React44.createElement(Icon, { name: "cloud-upload", size: "lg", className: "aura-upload__icon" }),
5507
+ /* @__PURE__ */ React44.createElement("span", { className: "aura-upload__text" }, t.dropFiles, " "),
5508
+ /* @__PURE__ */ React44.createElement(
5233
5509
  "input",
5234
5510
  {
5235
5511
  ref: inputMerged,
@@ -5251,12 +5527,12 @@ window.Aura = (() => {
5251
5527
  }
5252
5528
  }
5253
5529
  ),
5254
- /* @__PURE__ */ React42.createElement("span", { className: "aura-upload__browse", "aria-hidden": true }, props.multiple ? t.browse : t.browseOne),
5255
- note ? /* @__PURE__ */ React42.createElement("span", { className: "aura-upload__note", id: id + "-note" }, note) : null
5530
+ /* @__PURE__ */ React44.createElement("span", { className: "aura-upload__browse", "aria-hidden": true }, props.multiple ? t.browse : t.browseOne),
5531
+ note ? /* @__PURE__ */ React44.createElement("span", { className: "aura-upload__note", id: id + "-note" }, note) : null
5256
5532
  ),
5257
- items2.length ? /* @__PURE__ */ React42.createElement("ul", { className: "aura-upload__list", "aria-live": "polite" }, items2.map(function(it) {
5533
+ items2.length ? /* @__PURE__ */ React44.createElement("ul", { className: "aura-upload__list", "aria-live": "polite" }, items2.map(function(it) {
5258
5534
  const src = thumb(it);
5259
- return /* @__PURE__ */ React42.createElement("li", { key: it.id, className: cx("aura-upload__item", it.error && "is-error") }, src ? /* @__PURE__ */ React42.createElement("img", { className: "aura-upload__thumb", src, alt: "" }) : /* @__PURE__ */ React42.createElement("span", { className: "aura-upload__thumb is-icon", "aria-hidden": true }, /* @__PURE__ */ React42.createElement(Icon, { name: /^image\//.test(it.type || "") ? "image" : "file", size: "md" })), /* @__PURE__ */ React42.createElement("span", { className: "aura-upload__meta" }, /* @__PURE__ */ React42.createElement("span", { className: "aura-upload__name" }, it.name), /* @__PURE__ */ React42.createElement("span", { className: "aura-upload__sub" }, it.error ? /* @__PURE__ */ React42.createElement(React42.Fragment, null, /* @__PURE__ */ React42.createElement(Icon, { name: "circle-alert", size: 12 }), it.error) : it.status === "uploading" ? t.uploading + (it.progress != null ? " " + Math.round(it.progress) + "%" : "") : it.status === "done" ? /* @__PURE__ */ React42.createElement(React42.Fragment, null, /* @__PURE__ */ React42.createElement(Icon, { name: "circle-check", size: 12 }), formatBytes(it.size)) : formatBytes(it.size)), it.status === "uploading" ? /* @__PURE__ */ React42.createElement(
5535
+ return /* @__PURE__ */ React44.createElement("li", { key: it.id, className: cx("aura-upload__item", it.error && "is-error") }, src ? /* @__PURE__ */ React44.createElement("img", { className: "aura-upload__thumb", src, alt: "" }) : /* @__PURE__ */ React44.createElement("span", { className: "aura-upload__thumb is-icon", "aria-hidden": true }, /* @__PURE__ */ React44.createElement(Icon, { name: /^image\//.test(it.type || "") ? "image" : "file", size: "md" })), /* @__PURE__ */ React44.createElement("span", { className: "aura-upload__meta" }, /* @__PURE__ */ React44.createElement("span", { className: "aura-upload__name" }, it.name), /* @__PURE__ */ React44.createElement("span", { className: "aura-upload__sub" }, it.error ? /* @__PURE__ */ React44.createElement(React44.Fragment, null, /* @__PURE__ */ React44.createElement(Icon, { name: "circle-alert", size: 12 }), it.error) : it.status === "uploading" ? t.uploading + (it.progress != null ? " " + Math.round(it.progress) + "%" : "") : it.status === "done" ? /* @__PURE__ */ React44.createElement(React44.Fragment, null, /* @__PURE__ */ React44.createElement(Icon, { name: "circle-check", size: 12 }), formatBytes(it.size)) : formatBytes(it.size)), it.status === "uploading" ? /* @__PURE__ */ React44.createElement(
5260
5536
  "span",
5261
5537
  {
5262
5538
  className: "aura-upload__bar",
@@ -5266,8 +5542,8 @@ window.Aura = (() => {
5266
5542
  "aria-valuemax": 100,
5267
5543
  "aria-valuenow": it.progress != null ? Math.round(it.progress) : void 0
5268
5544
  },
5269
- /* @__PURE__ */ React42.createElement("span", { style: { width: (it.progress || 0) + "%" } })
5270
- ) : null), /* @__PURE__ */ React42.createElement(
5545
+ /* @__PURE__ */ React44.createElement("span", { style: { width: (it.progress || 0) + "%" } })
5546
+ ) : null), /* @__PURE__ */ React44.createElement(
5271
5547
  IconButton,
5272
5548
  {
5273
5549
  icon: "x",
@@ -5553,9 +5829,9 @@ window.Aura = (() => {
5553
5829
  }
5554
5830
 
5555
5831
  // src/ThemeStyle.tsx
5556
- var React43 = __toESM(require_react(), 1);
5832
+ var React45 = __toESM(require_react(), 1);
5557
5833
  function ThemeStyle(props) {
5558
- const css = React43.useMemo(
5834
+ const css = React45.useMemo(
5559
5835
  function() {
5560
5836
  return createTheme({ brand: props.brand, signal: props.signal, primary: props.primary, name: props.name }).css(
5561
5837
  props.selector
@@ -5563,11 +5839,11 @@ window.Aura = (() => {
5563
5839
  },
5564
5840
  [props.brand, props.signal, props.primary, props.name, props.selector]
5565
5841
  );
5566
- return /* @__PURE__ */ React43.createElement("style", { "data-aura-theme": props.name || props.brand, dangerouslySetInnerHTML: { __html: css } });
5842
+ return /* @__PURE__ */ React45.createElement("style", { "data-aura-theme": props.name || props.brand, dangerouslySetInnerHTML: { __html: css } });
5567
5843
  }
5568
5844
 
5569
5845
  // src/colorScheme.tsx
5570
- var React44 = __toESM(require_react(), 1);
5846
+ var React46 = __toESM(require_react(), 1);
5571
5847
 
5572
5848
  // src/colorSchemeScript.ts
5573
5849
  var DEFAULT_KEY = "aura-color-scheme";
@@ -5584,7 +5860,7 @@ window.Aura = (() => {
5584
5860
 
5585
5861
  // src/colorScheme.tsx
5586
5862
  function ColorSchemeScript(props) {
5587
- return /* @__PURE__ */ React44.createElement(
5863
+ return /* @__PURE__ */ React46.createElement(
5588
5864
  "script",
5589
5865
  {
5590
5866
  "data-aura-color-scheme": "",
@@ -5609,7 +5885,7 @@ window.Aura = (() => {
5609
5885
  function useColorScheme(options) {
5610
5886
  const key = options && options.storageKey || DEFAULT_KEY;
5611
5887
  const fallback = options && options.defaultScheme || "system";
5612
- const subscribe2 = React44.useCallback(
5888
+ const subscribe2 = React46.useCallback(
5613
5889
  function(cb) {
5614
5890
  const mq = window.matchMedia ? window.matchMedia("(prefers-color-scheme: dark)") : null;
5615
5891
  function onSystem() {
@@ -5627,7 +5903,7 @@ window.Aura = (() => {
5627
5903
  },
5628
5904
  [fallback]
5629
5905
  );
5630
- const snapshot = React44.useSyncExternalStore(
5906
+ const snapshot = React46.useSyncExternalStore(
5631
5907
  subscribe2,
5632
5908
  function() {
5633
5909
  const s = readScheme(fallback);
@@ -5638,7 +5914,7 @@ window.Aura = (() => {
5638
5914
  }
5639
5915
  );
5640
5916
  const parts = snapshot.split("|");
5641
- const setScheme = React44.useCallback(
5917
+ const setScheme = React46.useCallback(
5642
5918
  function(next) {
5643
5919
  if (!valid(next)) return;
5644
5920
  try {
@@ -5657,11 +5933,11 @@ window.Aura = (() => {
5657
5933
  const cs = useColorScheme(props);
5658
5934
  const names = { light: t.schemeLight, dark: t.schemeDark, system: t.schemeSystem };
5659
5935
  const label = props.label || t.colorScheme;
5660
- return /* @__PURE__ */ React44.createElement(
5936
+ return /* @__PURE__ */ React46.createElement(
5661
5937
  DropdownMenu,
5662
5938
  {
5663
5939
  label,
5664
- trigger: /* @__PURE__ */ React44.createElement(IconButton, { icon: cs.resolved === "dark" ? "moon" : "sun", label: label + ": " + names[cs.scheme] }),
5940
+ trigger: /* @__PURE__ */ React46.createElement(IconButton, { icon: cs.resolved === "dark" ? "moon" : "sun", label: label + ": " + names[cs.scheme] }),
5665
5941
  items: SCHEMES.map(function(s) {
5666
5942
  return {
5667
5943
  label: names[s],
@@ -5676,10 +5952,10 @@ window.Aura = (() => {
5676
5952
  }
5677
5953
 
5678
5954
  // src/Badge.tsx
5679
- var React45 = __toESM(require_react(), 1);
5680
- var Badge = React45.forwardRef(function Badge2(props, ref) {
5955
+ var React47 = __toESM(require_react(), 1);
5956
+ var Badge = React47.forwardRef(function Badge2(props, ref) {
5681
5957
  const rest = omit(props, ["tone", "variant", "icon", "className", "children"]);
5682
- return /* @__PURE__ */ React45.createElement(
5958
+ return /* @__PURE__ */ React47.createElement(
5683
5959
  "span",
5684
5960
  {
5685
5961
  ...rest,
@@ -5692,19 +5968,19 @@ window.Aura = (() => {
5692
5968
  props.className
5693
5969
  )
5694
5970
  },
5695
- props.icon ? /* @__PURE__ */ React45.createElement(Icon, { name: props.icon, size: 12 }) : null,
5971
+ props.icon ? /* @__PURE__ */ React47.createElement(Icon, { name: props.icon, size: 12 }) : null,
5696
5972
  props.children
5697
5973
  );
5698
5974
  });
5699
5975
 
5700
5976
  // src/Progress.tsx
5701
- var React46 = __toESM(require_react(), 1);
5702
- var Progress = React46.forwardRef(function Progress2(props, ref) {
5977
+ var React48 = __toESM(require_react(), 1);
5978
+ var Progress = React48.forwardRef(function Progress2(props, ref) {
5703
5979
  const auto = uid(), id = props.id || auto;
5704
5980
  const max = props.max || 100, det = props.value != null;
5705
5981
  const pct = det ? Math.max(0, Math.min(100, props.value / max * 100)) : 0;
5706
5982
  const shown = props.valueLabel != null ? props.valueLabel : det ? Math.round(pct) + "%" : null;
5707
- return /* @__PURE__ */ React46.createElement(
5983
+ return /* @__PURE__ */ React48.createElement(
5708
5984
  "div",
5709
5985
  {
5710
5986
  ref,
@@ -5715,8 +5991,8 @@ window.Aura = (() => {
5715
5991
  props.className
5716
5992
  )
5717
5993
  },
5718
- props.label || props.showValue && shown ? /* @__PURE__ */ React46.createElement("div", { className: "aura-progress__head" }, props.label ? /* @__PURE__ */ React46.createElement("span", { className: "aura-progress__label", id: id + "-label" }, props.label) : /* @__PURE__ */ React46.createElement("span", null), props.showValue && shown ? /* @__PURE__ */ React46.createElement("span", { className: "aura-progress__value" }, shown) : null) : null,
5719
- /* @__PURE__ */ React46.createElement(
5994
+ props.label || props.showValue && shown ? /* @__PURE__ */ React48.createElement("div", { className: "aura-progress__head" }, props.label ? /* @__PURE__ */ React48.createElement("span", { className: "aura-progress__label", id: id + "-label" }, props.label) : /* @__PURE__ */ React48.createElement("span", null), props.showValue && shown ? /* @__PURE__ */ React48.createElement("span", { className: "aura-progress__value" }, shown) : null) : null,
5995
+ /* @__PURE__ */ React48.createElement(
5720
5996
  "div",
5721
5997
  {
5722
5998
  className: cx("aura-progress__track", !det && "is-indeterminate"),
@@ -5728,21 +6004,21 @@ window.Aura = (() => {
5728
6004
  "aria-valuenow": det ? props.value : void 0,
5729
6005
  "aria-valuetext": det && props.valueLabel != null ? String(props.valueLabel) : void 0
5730
6006
  },
5731
- /* @__PURE__ */ React46.createElement("span", { className: "aura-progress__bar", style: det ? { width: pct + "%" } : void 0 })
6007
+ /* @__PURE__ */ React48.createElement("span", { className: "aura-progress__bar", style: det ? { width: pct + "%" } : void 0 })
5732
6008
  ),
5733
- props.hint ? /* @__PURE__ */ React46.createElement("p", { className: "aura-progress__hint" }, props.hint) : null
6009
+ props.hint ? /* @__PURE__ */ React48.createElement("p", { className: "aura-progress__hint" }, props.hint) : null
5734
6010
  );
5735
6011
  });
5736
6012
 
5737
6013
  // src/Skeleton.tsx
5738
- var React47 = __toESM(require_react(), 1);
5739
- var Skeleton = React47.forwardRef(function Skeleton2(props, ref) {
6014
+ var React49 = __toESM(require_react(), 1);
6015
+ var Skeleton = React49.forwardRef(function Skeleton2(props, ref) {
5740
6016
  const v = props.variant || "text";
5741
6017
  if (v === "text" && (props.lines || 1) > 1) {
5742
6018
  const n2 = props.lines, rows = [];
5743
6019
  for (let i = 0; i < n2; i++)
5744
- rows.push(/* @__PURE__ */ React47.createElement("span", { key: i, className: "aura-skel aura-skel--text", style: { width: i === n2 - 1 ? "60%" : "100%" } }));
5745
- return /* @__PURE__ */ React47.createElement(
6020
+ rows.push(/* @__PURE__ */ React49.createElement("span", { key: i, className: "aura-skel aura-skel--text", style: { width: i === n2 - 1 ? "60%" : "100%" } }));
6021
+ return /* @__PURE__ */ React49.createElement(
5746
6022
  "span",
5747
6023
  {
5748
6024
  ref,
@@ -5760,28 +6036,28 @@ window.Aura = (() => {
5760
6036
  if (v === "circle") {
5761
6037
  style.width = style.height = props.size || props.width || 40;
5762
6038
  }
5763
- return /* @__PURE__ */ React47.createElement("span", { ref, "aria-hidden": true, className: cx("aura-skel", "aura-skel--" + v, props.className), style });
6039
+ return /* @__PURE__ */ React49.createElement("span", { ref, "aria-hidden": true, className: cx("aura-skel", "aura-skel--" + v, props.className), style });
5764
6040
  });
5765
6041
 
5766
6042
  // src/EmptyState.tsx
5767
- var React48 = __toESM(require_react(), 1);
5768
- var EmptyState = React48.forwardRef(function EmptyState2(props, ref) {
6043
+ var React50 = __toESM(require_react(), 1);
6044
+ var EmptyState = React50.forwardRef(function EmptyState2(props, ref) {
5769
6045
  const HT = "h" + (props.headingLevel || 3);
5770
- return /* @__PURE__ */ React48.createElement(
6046
+ return /* @__PURE__ */ React50.createElement(
5771
6047
  "div",
5772
6048
  {
5773
6049
  ref,
5774
6050
  className: cx("aura-empty", props.size === "sm" && "is-sm", props.bordered && "is-bordered", props.className)
5775
6051
  },
5776
- /* @__PURE__ */ React48.createElement("span", { className: "aura-empty__icon", "aria-hidden": true }, /* @__PURE__ */ React48.createElement(Icon, { name: props.icon || "inbox", size: props.size === "sm" ? "md" : "lg" })),
5777
- /* @__PURE__ */ React48.createElement(HT, { className: "aura-empty__title" }, props.title),
5778
- props.description ? /* @__PURE__ */ React48.createElement("p", { className: "aura-empty__text" }, props.description) : null,
5779
- props.action ? /* @__PURE__ */ React48.createElement("div", { className: "aura-empty__action" }, props.action) : null
6052
+ /* @__PURE__ */ React50.createElement("span", { className: "aura-empty__icon", "aria-hidden": true }, /* @__PURE__ */ React50.createElement(Icon, { name: props.icon || "inbox", size: props.size === "sm" ? "md" : "lg" })),
6053
+ /* @__PURE__ */ React50.createElement(HT, { className: "aura-empty__title" }, props.title),
6054
+ props.description ? /* @__PURE__ */ React50.createElement("p", { className: "aura-empty__text" }, props.description) : null,
6055
+ props.action ? /* @__PURE__ */ React50.createElement("div", { className: "aura-empty__action" }, props.action) : null
5780
6056
  );
5781
6057
  });
5782
6058
 
5783
6059
  // src/Pagination.tsx
5784
- var React49 = __toESM(require_react(), 1);
6060
+ var React51 = __toESM(require_react(), 1);
5785
6061
  function pageList(page, count, sib) {
5786
6062
  let out = [], lo = Math.max(2, page - sib), hi = Math.min(count - 1, page + sib);
5787
6063
  if (page - sib <= 3) {
@@ -5801,7 +6077,7 @@ window.Aura = (() => {
5801
6077
  if (count > 1) out.push(count);
5802
6078
  return out;
5803
6079
  }
5804
- var Pagination = React49.forwardRef(function Pagination2(props, ref) {
6080
+ var Pagination = React51.forwardRef(function Pagination2(props, ref) {
5805
6081
  const t = useStrings();
5806
6082
  const count = Math.max(1, props.pageCount || 1);
5807
6083
  const st = useMaybeControlled(props.page, props.defaultPage || 1, props.onChange);
@@ -5820,7 +6096,7 @@ window.Aura = (() => {
5820
6096
  },
5821
6097
  extra
5822
6098
  );
5823
- return link ? /* @__PURE__ */ React49.createElement(
6099
+ return link ? /* @__PURE__ */ React51.createElement(
5824
6100
  Link,
5825
6101
  {
5826
6102
  href: link(p),
@@ -5833,7 +6109,7 @@ window.Aura = (() => {
5833
6109
  ...common
5834
6110
  },
5835
6111
  label
5836
- ) : /* @__PURE__ */ React49.createElement(
6112
+ ) : /* @__PURE__ */ React51.createElement(
5837
6113
  "button",
5838
6114
  {
5839
6115
  type: "button",
@@ -5847,7 +6123,7 @@ window.Aura = (() => {
5847
6123
  }
5848
6124
  function arrow(p, icon, label, rel, disabled) {
5849
6125
  if (!link || disabled)
5850
- return /* @__PURE__ */ React49.createElement(
6126
+ return /* @__PURE__ */ React51.createElement(
5851
6127
  IconButton,
5852
6128
  {
5853
6129
  icon,
@@ -5858,7 +6134,7 @@ window.Aura = (() => {
5858
6134
  }
5859
6135
  }
5860
6136
  );
5861
- return /* @__PURE__ */ React49.createElement(
6137
+ return /* @__PURE__ */ React51.createElement(
5862
6138
  Link,
5863
6139
  {
5864
6140
  href: link(p),
@@ -5873,17 +6149,17 @@ window.Aura = (() => {
5873
6149
  }
5874
6150
  }
5875
6151
  },
5876
- /* @__PURE__ */ React49.createElement(Icon, { name: icon, size: "sm" })
6152
+ /* @__PURE__ */ React51.createElement(Icon, { name: icon, size: "sm" })
5877
6153
  );
5878
6154
  }
5879
- return /* @__PURE__ */ React49.createElement("nav", { ref, className: cx("aura-pagination", props.className), "aria-label": props.label || t.pagination }, arrow(page - 1, "chevron-left", t.prevPage, "prev", page <= 1), /* @__PURE__ */ React49.createElement("ol", { className: "aura-pagination__list" }, pageList(page, count, props.siblingCount == null ? 1 : props.siblingCount).map(function(p) {
5880
- return typeof p === "number" ? /* @__PURE__ */ React49.createElement("li", { key: p }, item(p, p)) : /* @__PURE__ */ React49.createElement("li", { key: p, className: "aura-pagination__gap", "aria-hidden": true }, "\u2026");
5881
- })), /* @__PURE__ */ React49.createElement("span", { className: "aura-pagination__compact", "aria-hidden": true }, t.page(page, count)), arrow(page + 1, "chevron-right", t.nextPage, "next", page >= count));
6155
+ return /* @__PURE__ */ React51.createElement("nav", { ref, className: cx("aura-pagination", props.className), "aria-label": props.label || t.pagination }, arrow(page - 1, "chevron-left", t.prevPage, "prev", page <= 1), /* @__PURE__ */ React51.createElement("ol", { className: "aura-pagination__list" }, pageList(page, count, props.siblingCount == null ? 1 : props.siblingCount).map(function(p) {
6156
+ return typeof p === "number" ? /* @__PURE__ */ React51.createElement("li", { key: p }, item(p, p)) : /* @__PURE__ */ React51.createElement("li", { key: p, className: "aura-pagination__gap", "aria-hidden": true }, "\u2026");
6157
+ })), /* @__PURE__ */ React51.createElement("span", { className: "aura-pagination__compact", "aria-hidden": true }, t.page(page, count)), arrow(page + 1, "chevron-right", t.nextPage, "next", page >= count));
5882
6158
  });
5883
6159
 
5884
6160
  // src/Accordion.tsx
5885
- var React50 = __toESM(require_react(), 1);
5886
- var Accordion = React50.forwardRef(function Accordion2(props, ref) {
6161
+ var React52 = __toESM(require_react(), 1);
6162
+ var Accordion = React52.forwardRef(function Accordion2(props, ref) {
5887
6163
  const auto = uid(), base = props.id || auto;
5888
6164
  const multiple = props.type === "multiple";
5889
6165
  const st = useMaybeControlled(
@@ -5921,9 +6197,9 @@ window.Aura = (() => {
5921
6197
  n2.focus();
5922
6198
  }
5923
6199
  }
5924
- return /* @__PURE__ */ React50.createElement("div", { ref, className: cx("aura-accordion", props.className), onKeyDown: onKey }, items2.map(function(it) {
6200
+ return /* @__PURE__ */ React52.createElement("div", { ref, className: cx("aura-accordion", props.className), onKeyDown: onKey }, items2.map(function(it) {
5925
6201
  const on = open.indexOf(it.id) >= 0, bid = base + "-btn-" + it.id, pid = base + "-panel-" + it.id;
5926
- return /* @__PURE__ */ React50.createElement("div", { key: it.id, className: cx("aura-accordion__item", on && "is-open") }, /* @__PURE__ */ React50.createElement(HT, { className: "aura-accordion__heading" }, /* @__PURE__ */ React50.createElement(
6202
+ return /* @__PURE__ */ React52.createElement("div", { key: it.id, className: cx("aura-accordion__item", on && "is-open") }, /* @__PURE__ */ React52.createElement(HT, { className: "aura-accordion__heading" }, /* @__PURE__ */ React52.createElement(
5927
6203
  "button",
5928
6204
  {
5929
6205
  type: "button",
@@ -5935,16 +6211,16 @@ window.Aura = (() => {
5935
6211
  toggle(it.id);
5936
6212
  }
5937
6213
  },
5938
- it.icon ? /* @__PURE__ */ React50.createElement(Icon, { name: it.icon, className: "aura-accordion__lead" }) : null,
5939
- /* @__PURE__ */ React50.createElement("span", { className: "aura-accordion__title" }, it.title, it.description ? /* @__PURE__ */ React50.createElement("span", { className: "aura-accordion__desc" }, it.description) : null),
5940
- /* @__PURE__ */ React50.createElement(Icon, { name: "chevron-down", className: "aura-accordion__chevron" })
5941
- )), /* @__PURE__ */ React50.createElement("div", { id: pid, role: "region", "aria-labelledby": bid, className: "aura-accordion__panel", hidden: !on }, it.content));
6214
+ it.icon ? /* @__PURE__ */ React52.createElement(Icon, { name: it.icon, className: "aura-accordion__lead" }) : null,
6215
+ /* @__PURE__ */ React52.createElement("span", { className: "aura-accordion__title" }, it.title, it.description ? /* @__PURE__ */ React52.createElement("span", { className: "aura-accordion__desc" }, it.description) : null),
6216
+ /* @__PURE__ */ React52.createElement(Icon, { name: "chevron-down", className: "aura-accordion__chevron" })
6217
+ )), /* @__PURE__ */ React52.createElement("div", { id: pid, role: "region", "aria-labelledby": bid, className: "aura-accordion__panel", hidden: !on }, it.content));
5942
6218
  }));
5943
6219
  });
5944
6220
 
5945
6221
  // src/Popover.tsx
5946
- var React51 = __toESM(require_react(), 1);
5947
- var import_react_dom10 = __toESM(require_react_dom(), 1);
6222
+ var React53 = __toESM(require_react(), 1);
6223
+ var import_react_dom11 = __toESM(require_react_dom(), 1);
5948
6224
  function position(anchor, pop, placement) {
5949
6225
  const r = anchor.getBoundingClientRect(), pw = pop.offsetWidth, ph = pop.offsetHeight, vw = window.innerWidth, vh = window.innerHeight, gap = 6;
5950
6226
  let side = (placement || "bottom-start").split("-")[0], align = (placement || "bottom-start").split("-")[1] || "start";
@@ -5954,14 +6230,14 @@ window.Aura = (() => {
5954
6230
  const left = align === "end" ? r.right - pw : align === "center" ? r.left + r.width / 2 - pw / 2 : r.left;
5955
6231
  return { top: Math.max(8, top), left: Math.max(8, Math.min(left, vw - pw - 8)), side };
5956
6232
  }
5957
- var Popover = React51.forwardRef(function Popover2(props, ref) {
6233
+ var Popover = React53.forwardRef(function Popover2(props, ref) {
5958
6234
  const t = useStrings();
5959
6235
  const density = useDensity();
5960
6236
  const auto = uid(), id = props.id || auto;
5961
6237
  const st = useMaybeControlled(props.open, !!props.defaultOpen, props.onOpenChange);
5962
6238
  const open = !!st[0];
5963
- const wrap = React51.useRef(null), pop = React51.useRef(null), popMerged = useMergedRef(ref, pop);
5964
- const pos = React51.useState(null), mounted = useMounted();
6239
+ const wrap = React53.useRef(null), pop = React53.useRef(null), popMerged = useMergedRef(ref, pop);
6240
+ const pos = React53.useState(null), mounted = useMounted();
5965
6241
  function trigger() {
5966
6242
  return wrap.current && (wrap.current.querySelector('button, [role="button"], a, input') || wrap.current.firstElementChild);
5967
6243
  }
@@ -5988,7 +6264,7 @@ window.Aura = (() => {
5988
6264
  },
5989
6265
  [open, mounted, props.placement]
5990
6266
  );
5991
- React51.useEffect(
6267
+ React53.useEffect(
5992
6268
  function() {
5993
6269
  if (!open || !mounted) return;
5994
6270
  if (props.autoFocus !== false && pop.current) {
@@ -6007,9 +6283,9 @@ window.Aura = (() => {
6007
6283
  },
6008
6284
  [open, mounted]
6009
6285
  );
6010
- const child = React51.Children.only(props.trigger);
6011
- const panel = open && mounted ? (0, import_react_dom10.createPortal)(
6012
- /* @__PURE__ */ React51.createElement(
6286
+ const child = React53.Children.only(props.trigger);
6287
+ const panel = open && mounted ? (0, import_react_dom11.createPortal)(
6288
+ /* @__PURE__ */ React53.createElement(
6013
6289
  "div",
6014
6290
  {
6015
6291
  ref: popMerged,
@@ -6032,7 +6308,7 @@ window.Aura = (() => {
6032
6308
  } else trapTab(e, pop.current);
6033
6309
  }
6034
6310
  },
6035
- props.title ? /* @__PURE__ */ React51.createElement("div", { className: "aura-popover__head" }, /* @__PURE__ */ React51.createElement("p", { className: "aura-popover__title", id: id + "-title" }, props.title), /* @__PURE__ */ React51.createElement(
6311
+ props.title ? /* @__PURE__ */ React53.createElement("div", { className: "aura-popover__head" }, /* @__PURE__ */ React53.createElement("p", { className: "aura-popover__title", id: id + "-title" }, props.title), /* @__PURE__ */ React53.createElement(
6036
6312
  IconButton,
6037
6313
  {
6038
6314
  icon: "x",
@@ -6042,7 +6318,7 @@ window.Aura = (() => {
6042
6318
  }
6043
6319
  }
6044
6320
  )) : null,
6045
- /* @__PURE__ */ React51.createElement("div", { className: "aura-popover__body" }, typeof props.children === "function" ? props.children({
6321
+ /* @__PURE__ */ React53.createElement("div", { className: "aura-popover__body" }, typeof props.children === "function" ? props.children({
6046
6322
  close: function() {
6047
6323
  close(true);
6048
6324
  }
@@ -6050,7 +6326,7 @@ window.Aura = (() => {
6050
6326
  ),
6051
6327
  document.body
6052
6328
  ) : null;
6053
- return /* @__PURE__ */ React51.createElement("span", { ref: wrap, className: "aura-popover-anchor" }, React51.cloneElement(child, {
6329
+ return /* @__PURE__ */ React53.createElement("span", { ref: wrap, className: "aura-popover-anchor" }, React53.cloneElement(child, {
6054
6330
  onClick: function(e) {
6055
6331
  if (child.props.onClick) child.props.onClick(e);
6056
6332
  st[1](!open);
@@ -6062,7 +6338,7 @@ window.Aura = (() => {
6062
6338
  });
6063
6339
 
6064
6340
  // src/NumberField.tsx
6065
- var React52 = __toESM(require_react(), 1);
6341
+ var React54 = __toESM(require_react(), 1);
6066
6342
  function decimalsOf(n2) {
6067
6343
  const s = String(n2);
6068
6344
  const i = s.indexOf(".");
@@ -6073,7 +6349,7 @@ window.Aura = (() => {
6073
6349
  if (!/^-?(\d+\.?\d*|\.\d+)$/.test(s)) return NaN;
6074
6350
  return Number(s);
6075
6351
  }
6076
- var NumberField = React52.forwardRef(function NumberField2(props, ref) {
6352
+ var NumberField = React54.forwardRef(function NumberField2(props, ref) {
6077
6353
  const t = useStrings();
6078
6354
  const auto = uid(), id = props.id || auto;
6079
6355
  const step = props.step || 1;
@@ -6084,7 +6360,7 @@ window.Aura = (() => {
6084
6360
  props.onChange
6085
6361
  );
6086
6362
  const value = st[0], setValue = st[1];
6087
- const draftState = React52.useState(null), draft = draftState[0], setDraft = draftState[1];
6363
+ const draftState = React54.useState(null), draft = draftState[0], setDraft = draftState[1];
6088
6364
  function fmt2(n2) {
6089
6365
  if (n2 == null || isNaN(n2)) return "";
6090
6366
  return n2.toLocaleString("en", { minimumFractionDigits: decimals, maximumFractionDigits: decimals });
@@ -6133,7 +6409,7 @@ window.Aura = (() => {
6133
6409
  };
6134
6410
  const valueText = value == null ? void 0 : [affixText(props.prefix), fmt2(value), affixText(props.suffix)].join(" ").trim();
6135
6411
  const stepper = props.stepper !== false && !props.readOnly;
6136
- return /* @__PURE__ */ React52.createElement(
6412
+ return /* @__PURE__ */ React54.createElement(
6137
6413
  Field,
6138
6414
  {
6139
6415
  id,
@@ -6145,7 +6421,7 @@ window.Aura = (() => {
6145
6421
  disabled: props.disabled,
6146
6422
  className: props.className
6147
6423
  },
6148
- /* @__PURE__ */ React52.createElement("div", { className: cx("aura-input aura-number", stepper && "has-stepper") }, props.prefix != null ? /* @__PURE__ */ React52.createElement("span", { className: "aura-number__affix", "aria-hidden": true }, props.prefix) : null, /* @__PURE__ */ React52.createElement(
6424
+ /* @__PURE__ */ React54.createElement("div", { className: cx("aura-input aura-number", stepper && "has-stepper") }, props.prefix != null ? /* @__PURE__ */ React54.createElement("span", { className: "aura-number__affix", "aria-hidden": true }, props.prefix) : null, /* @__PURE__ */ React54.createElement(
6149
6425
  "input",
6150
6426
  {
6151
6427
  ref,
@@ -6192,7 +6468,7 @@ window.Aura = (() => {
6192
6468
  },
6193
6469
  onKeyDown
6194
6470
  }
6195
- ), props.suffix != null ? /* @__PURE__ */ React52.createElement("span", { className: "aura-number__affix", "aria-hidden": true }, props.suffix) : null, stepper ? /* @__PURE__ */ React52.createElement("span", { className: "aura-number__steps" }, /* @__PURE__ */ React52.createElement(
6471
+ ), props.suffix != null ? /* @__PURE__ */ React54.createElement("span", { className: "aura-number__affix", "aria-hidden": true }, props.suffix) : null, stepper ? /* @__PURE__ */ React54.createElement("span", { className: "aura-number__steps" }, /* @__PURE__ */ React54.createElement(
6196
6472
  "button",
6197
6473
  {
6198
6474
  type: "button",
@@ -6208,8 +6484,8 @@ window.Aura = (() => {
6208
6484
  nudge(-step);
6209
6485
  }
6210
6486
  },
6211
- /* @__PURE__ */ React52.createElement(Icon, { name: "minus" })
6212
- ), /* @__PURE__ */ React52.createElement(
6487
+ /* @__PURE__ */ React54.createElement(Icon, { name: "minus" })
6488
+ ), /* @__PURE__ */ React54.createElement(
6213
6489
  "button",
6214
6490
  {
6215
6491
  type: "button",
@@ -6225,14 +6501,14 @@ window.Aura = (() => {
6225
6501
  nudge(step);
6226
6502
  }
6227
6503
  },
6228
- /* @__PURE__ */ React52.createElement(Icon, { name: "plus" })
6504
+ /* @__PURE__ */ React54.createElement(Icon, { name: "plus" })
6229
6505
  )) : null)
6230
6506
  );
6231
6507
  });
6232
6508
 
6233
6509
  // src/Stepper.tsx
6234
- var React53 = __toESM(require_react(), 1);
6235
- var Stepper = React53.forwardRef(function Stepper2(props, ref) {
6510
+ var React55 = __toESM(require_react(), 1);
6511
+ var Stepper = React55.forwardRef(function Stepper2(props, ref) {
6236
6512
  const t = useStrings();
6237
6513
  const steps = props.steps || [];
6238
6514
  let at = -1;
@@ -6242,26 +6518,26 @@ window.Aura = (() => {
6242
6518
  if (at < 0) at = 0;
6243
6519
  const vertical = props.orientation === "vertical";
6244
6520
  const cur = steps[at];
6245
- return /* @__PURE__ */ React53.createElement(
6521
+ return /* @__PURE__ */ React55.createElement(
6246
6522
  "nav",
6247
6523
  {
6248
6524
  ref,
6249
6525
  "aria-label": props.label,
6250
6526
  className: cx("aura-stepper", vertical ? "aura-stepper--vertical" : "aura-stepper--horizontal", props.className)
6251
6527
  },
6252
- /* @__PURE__ */ React53.createElement("ol", { className: "aura-stepper__list" }, steps.map(function(s, i) {
6528
+ /* @__PURE__ */ React55.createElement("ol", { className: "aura-stepper__list" }, steps.map(function(s, i) {
6253
6529
  const state = i < at ? "done" : i === at ? "current" : "upcoming";
6254
- const marker = /* @__PURE__ */ React53.createElement("span", { className: "aura-stepper__marker", "aria-hidden": true }, state === "done" ? /* @__PURE__ */ React53.createElement(Icon, { name: "check" }) : i + 1);
6255
- const text = /* @__PURE__ */ React53.createElement("span", { className: "aura-stepper__text" }, /* @__PURE__ */ React53.createElement("span", { className: "aura-stepper__label" }, s.label, state === "done" ? /* @__PURE__ */ React53.createElement("span", { className: "aura-sr-only" }, ", " + t.stepDone) : null), s.description ? /* @__PURE__ */ React53.createElement("span", { className: "aura-stepper__desc" }, s.description) : null);
6530
+ const marker = /* @__PURE__ */ React55.createElement("span", { className: "aura-stepper__marker", "aria-hidden": true }, state === "done" ? /* @__PURE__ */ React55.createElement(Icon, { name: "check" }) : i + 1);
6531
+ const text = /* @__PURE__ */ React55.createElement("span", { className: "aura-stepper__text" }, /* @__PURE__ */ React55.createElement("span", { className: "aura-stepper__label" }, s.label, state === "done" ? /* @__PURE__ */ React55.createElement("span", { className: "aura-sr-only" }, ", " + t.stepDone) : null), s.description ? /* @__PURE__ */ React55.createElement("span", { className: "aura-stepper__desc" }, s.description) : null);
6256
6532
  const clickable = state === "done" && !!props.onStepClick;
6257
- return /* @__PURE__ */ React53.createElement(
6533
+ return /* @__PURE__ */ React55.createElement(
6258
6534
  "li",
6259
6535
  {
6260
6536
  key: s.id,
6261
6537
  className: cx("aura-stepper__item", "is-" + state),
6262
6538
  "aria-current": state === "current" ? "step" : void 0
6263
6539
  },
6264
- clickable ? /* @__PURE__ */ React53.createElement(
6540
+ clickable ? /* @__PURE__ */ React55.createElement(
6265
6541
  "button",
6266
6542
  {
6267
6543
  type: "button",
@@ -6272,19 +6548,19 @@ window.Aura = (() => {
6272
6548
  },
6273
6549
  marker,
6274
6550
  text
6275
- ) : /* @__PURE__ */ React53.createElement("span", { className: "aura-stepper__step" }, marker, text)
6551
+ ) : /* @__PURE__ */ React55.createElement("span", { className: "aura-stepper__step" }, marker, text)
6276
6552
  );
6277
6553
  })),
6278
- !vertical && cur ? /* @__PURE__ */ React53.createElement("p", { className: "aura-stepper__compact", "aria-hidden": true }, /* @__PURE__ */ React53.createElement("span", { className: "aura-stepper__count" }, t.stepOf(at + 1, steps.length)), /* @__PURE__ */ React53.createElement("span", { className: "aura-stepper__compact-label" }, cur.label)) : null
6554
+ !vertical && cur ? /* @__PURE__ */ React55.createElement("p", { className: "aura-stepper__compact", "aria-hidden": true }, /* @__PURE__ */ React55.createElement("span", { className: "aura-stepper__count" }, t.stepOf(at + 1, steps.length)), /* @__PURE__ */ React55.createElement("span", { className: "aura-stepper__compact-label" }, cur.label)) : null
6279
6555
  );
6280
6556
  });
6281
6557
 
6282
6558
  // src/SegmentedControl.tsx
6283
- var React54 = __toESM(require_react(), 1);
6559
+ var React56 = __toESM(require_react(), 1);
6284
6560
  function toOpt2(o) {
6285
6561
  return typeof o === "object" ? o : { value: o, label: o };
6286
6562
  }
6287
- var SegmentedControl = React54.forwardRef(
6563
+ var SegmentedControl = React56.forwardRef(
6288
6564
  function SegmentedControl2(props, ref) {
6289
6565
  const options = (props.options || []).map(toOpt2);
6290
6566
  const firstEnabled = options.filter(function(o) {
@@ -6297,7 +6573,7 @@ window.Aura = (() => {
6297
6573
  );
6298
6574
  const value = st[0], setValue = st[1];
6299
6575
  const auto = uid(), id = props.id || auto;
6300
- const refs = React54.useRef([]);
6576
+ const refs = React56.useRef([]);
6301
6577
  const selIdx = options.findIndex(function(o) {
6302
6578
  return o.value === value;
6303
6579
  });
@@ -6330,7 +6606,7 @@ window.Aura = (() => {
6330
6606
  move(options.length, -1);
6331
6607
  }
6332
6608
  }
6333
- return /* @__PURE__ */ React54.createElement(
6609
+ return /* @__PURE__ */ React56.createElement(
6334
6610
  "div",
6335
6611
  {
6336
6612
  ref,
@@ -6349,7 +6625,7 @@ window.Aura = (() => {
6349
6625
  options.map(function(o, i) {
6350
6626
  const on = o.value === value;
6351
6627
  const off = props.disabled || o.disabled;
6352
- return /* @__PURE__ */ React54.createElement(
6628
+ return /* @__PURE__ */ React56.createElement(
6353
6629
  "button",
6354
6630
  {
6355
6631
  key: o.value,
@@ -6371,8 +6647,8 @@ window.Aura = (() => {
6371
6647
  onKeyDown(e, i);
6372
6648
  }
6373
6649
  },
6374
- o.icon ? /* @__PURE__ */ React54.createElement(Icon, { name: o.icon }) : null,
6375
- o.iconOnly ? null : /* @__PURE__ */ React54.createElement("span", null, o.label)
6650
+ o.icon ? /* @__PURE__ */ React56.createElement(Icon, { name: o.icon }) : null,
6651
+ o.iconOnly ? null : /* @__PURE__ */ React56.createElement("span", null, o.label)
6376
6652
  );
6377
6653
  })
6378
6654
  );