@aortl/admin-react 0.12.1 → 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.
package/dist/index.d.ts CHANGED
@@ -11,6 +11,7 @@ export { Input, type InputProps, type InputVariant, type InputSize } from './Inp
11
11
  export { FileInput, type FileInputProps, type FileInputVariant, type FileInputSize, } from './FileInput';
12
12
  export { InputGroup, type InputGroupProps, type InputGroupAddonProps } from './InputGroup';
13
13
  export { Indicator, type IndicatorProps, type IndicatorPlacement, type IndicatorVertical, type IndicatorHorizontal, } from './Indicator';
14
+ export { Link, type LinkProps } from './Link';
14
15
  export { Pagination, getPaginationItems, type PaginationProps, type PaginationItem, } from './Pagination';
15
16
  export { Textarea, type TextareaProps, type TextareaVariant, type TextareaSize } from './Textarea';
16
17
  export { Checkbox, type CheckboxProps, type CheckboxIndicatorProps } from './Checkbox';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,EACT,KAAK,cAAc,EACnB,KAAK,kBAAkB,EACvB,KAAK,qBAAqB,EAC1B,KAAK,qBAAqB,GAC3B,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,SAAS,EAAE,KAAK,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7D,OAAO,EACL,KAAK,EACL,KAAK,UAAU,EACf,KAAK,YAAY,EACjB,KAAK,eAAe,EACpB,KAAK,qBAAqB,GAC3B,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,KAAK,aAAa,EAAE,KAAK,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAC/F,OAAO,EAAE,KAAK,EAAE,KAAK,UAAU,EAAE,KAAK,YAAY,EAAE,KAAK,SAAS,EAAE,MAAM,SAAS,CAAC;AACpF,OAAO,EAAE,SAAS,EAAE,KAAK,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7D,OAAO,EAAE,MAAM,EAAE,KAAK,WAAW,EAAE,KAAK,aAAa,EAAE,KAAK,UAAU,EAAE,MAAM,UAAU,CAAC;AACzF,OAAO,EAAE,WAAW,EAAE,KAAK,gBAAgB,EAAE,KAAK,sBAAsB,EAAE,MAAM,eAAe,CAAC;AAChG,OAAO,EACL,WAAW,EACX,KAAK,gBAAgB,EACrB,KAAK,mBAAmB,EACxB,KAAK,wBAAwB,GAC9B,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,KAAK,EAAE,KAAK,UAAU,EAAE,KAAK,YAAY,EAAE,KAAK,SAAS,EAAE,MAAM,SAAS,CAAC;AACpF,OAAO,EACL,SAAS,EACT,KAAK,cAAc,EACnB,KAAK,gBAAgB,EACrB,KAAK,aAAa,GACnB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,UAAU,EAAE,KAAK,eAAe,EAAE,KAAK,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAC3F,OAAO,EACL,SAAS,EACT,KAAK,cAAc,EACnB,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EACtB,KAAK,mBAAmB,GACzB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,IAAI,EAAE,KAAK,SAAS,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EACL,UAAU,EACV,kBAAkB,EAClB,KAAK,eAAe,EACpB,KAAK,cAAc,GACpB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,QAAQ,EAAE,KAAK,aAAa,EAAE,KAAK,eAAe,EAAE,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC;AACnG,OAAO,EAAE,QAAQ,EAAE,KAAK,aAAa,EAAE,KAAK,sBAAsB,EAAE,MAAM,YAAY,CAAC;AACvF,OAAO,EACL,KAAK,EACL,UAAU,EACV,KAAK,UAAU,EACf,KAAK,mBAAmB,EACxB,KAAK,eAAe,EACpB,KAAK,qBAAqB,GAC3B,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,QAAQ,EAAE,KAAK,aAAa,EAAE,KAAK,eAAe,EAAE,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC;AACnG,OAAO,EAAE,OAAO,EAAE,KAAK,YAAY,EAAE,KAAK,WAAW,EAAE,MAAM,WAAW,CAAC;AACzE,OAAO,EAAE,MAAM,EAAE,KAAK,WAAW,EAAE,KAAK,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAC3E,OAAO,EACL,MAAM,EACN,KAAK,WAAW,EAChB,KAAK,kBAAkB,EACvB,KAAK,oBAAoB,EACzB,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EACrB,KAAK,eAAe,EACpB,KAAK,gBAAgB,EACrB,KAAK,eAAe,EACpB,KAAK,mBAAmB,EACxB,KAAK,wBAAwB,EAC7B,KAAK,gBAAgB,EACrB,KAAK,qBAAqB,GAC3B,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,SAAS,EAAE,KAAK,cAAc,EAAE,KAAK,aAAa,EAAE,MAAM,aAAa,CAAC;AACjF,OAAO,EACL,IAAI,EACJ,KAAK,SAAS,EACd,KAAK,WAAW,EAChB,KAAK,kBAAkB,EACvB,KAAK,aAAa,EAClB,KAAK,eAAe,EACpB,KAAK,gBAAgB,EACrB,KAAK,cAAc,EACnB,KAAK,oBAAoB,EACzB,KAAK,gBAAgB,GACtB,MAAM,QAAQ,CAAC;AAChB,OAAO,EAAE,QAAQ,EAAE,KAAK,aAAa,EAAE,MAAM,YAAY,CAAC;AAC1D,OAAO,EACL,MAAM,EACN,KAAK,WAAW,EAChB,KAAK,oBAAoB,EACzB,KAAK,UAAU,EACf,KAAK,cAAc,EACnB,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EACrB,KAAK,sBAAsB,EAC3B,KAAK,eAAe,EACpB,KAAK,iBAAiB,EACtB,KAAK,sBAAsB,GAC5B,MAAM,UAAU,CAAC;AAClB,OAAO,EACL,KAAK,EACL,KAAK,UAAU,EACf,KAAK,mBAAmB,EACxB,KAAK,eAAe,EACpB,KAAK,qBAAqB,EAC1B,KAAK,eAAe,GACrB,MAAM,SAAS,CAAC;AACjB,OAAO,EACL,MAAM,EACN,KAAK,WAAW,EAChB,KAAK,gBAAgB,EACrB,KAAK,eAAe,EACpB,KAAK,eAAe,GACrB,MAAM,UAAU,CAAC;AAClB,OAAO,EACL,IAAI,EACJ,KAAK,SAAS,EACd,KAAK,gBAAgB,EACrB,KAAK,cAAc,EACnB,KAAK,aAAa,EAClB,KAAK,kBAAkB,EACvB,KAAK,cAAc,EACnB,KAAK,mBAAmB,GACzB,MAAM,QAAQ,CAAC;AAChB,OAAO,EACL,MAAM,EACN,KAAK,WAAW,EAChB,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,EACrB,KAAK,eAAe,EACpB,KAAK,mBAAmB,EACxB,KAAK,kBAAkB,EACvB,KAAK,uBAAuB,GAC7B,MAAM,UAAU,CAAC;AAClB,OAAO,EACL,IAAI,EACJ,KAAK,SAAS,EACd,KAAK,WAAW,EAChB,KAAK,QAAQ,EACb,KAAK,aAAa,EAClB,KAAK,YAAY,EACjB,KAAK,cAAc,EACnB,KAAK,kBAAkB,GACxB,MAAM,QAAQ,CAAC;AAChB,OAAO,EAAE,GAAG,EAAE,KAAK,QAAQ,EAAE,MAAM,OAAO,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,KAAK,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7D,OAAO,EAAE,SAAS,EAAE,KAAK,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5D,OAAO,EACL,OAAO,EACP,KAAK,YAAY,EACjB,KAAK,oBAAoB,EACzB,KAAK,gBAAgB,EACrB,KAAK,mBAAmB,EACxB,KAAK,iBAAiB,EACtB,KAAK,WAAW,GACjB,MAAM,WAAW,CAAC;AACnB,OAAO,EACL,YAAY,EACZ,KAAK,iBAAiB,EACtB,KAAK,qBAAqB,EAC1B,KAAK,sBAAsB,EAC3B,KAAK,sBAAsB,GAC5B,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,KAAK,EACL,KAAK,UAAU,EACf,KAAK,UAAU,EACf,KAAK,cAAc,EACnB,KAAK,cAAc,EACnB,KAAK,cAAc,EACnB,KAAK,aAAa,EAClB,KAAK,oBAAoB,EACzB,KAAK,cAAc,GACpB,MAAM,SAAS,CAAC;AACjB,OAAO,EACL,OAAO,EACP,KAAK,YAAY,EACjB,KAAK,kBAAkB,EACvB,KAAK,eAAe,EACpB,KAAK,iBAAiB,EACtB,KAAK,sBAAsB,EAC3B,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,EACrB,KAAK,iBAAiB,EACtB,KAAK,iBAAiB,EACtB,KAAK,uBAAuB,EAC5B,KAAK,mBAAmB,EACxB,KAAK,kBAAkB,EACvB,KAAK,0BAA0B,GAChC,MAAM,WAAW,CAAC"}
package/dist/index.mjs CHANGED
@@ -1,14 +1,14 @@
1
1
  import { clsx } from "clsx";
2
2
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
3
- import { Children, Fragment as Fragment$1, createContext, createElement, isValidElement, useContext, useEffect, useMemo, useRef, useState } from "react";
3
+ import { Children, Fragment as Fragment$1, createContext, createElement, isValidElement, useCallback, useContext, useEffect, useMemo, useRef, useState } from "react";
4
4
  import { Button as Button$1 } from "@base-ui/react/button";
5
5
  import { Input as Input$1 } from "@base-ui/react/input";
6
+ import { Field as Field$1 } from "@base-ui/react/field";
6
7
  import { Checkbox as Checkbox$1 } from "@base-ui/react/checkbox";
7
8
  import { Radio as Radio$1 } from "@base-ui/react/radio";
8
9
  import { RadioGroup as RadioGroup$1 } from "@base-ui/react/radio-group";
9
10
  import { Switch as Switch$1 } from "@base-ui/react/switch";
10
11
  import { Select as Select$1 } from "@base-ui/react/select";
11
- import { Field as Field$1 } from "@base-ui/react/field";
12
12
  import { Tabs as Tabs$1 } from "@base-ui/react/tabs";
13
13
  import { Tooltip as Tooltip$1 } from "@base-ui/react/tooltip";
14
14
  import { Dialog as Dialog$1 } from "@base-ui/react/dialog";
@@ -64,17 +64,40 @@ var Accordion = Object.assign(AccordionRoot, {
64
64
  Content: AccordionContent
65
65
  });
66
66
  //#endregion
67
+ //#region src/portal-context.ts
68
+ /**
69
+ * Container that Base UI popups (Select, Tooltip, etc.) should portal into.
70
+ * `<AdminRoot>` publishes its own element here so popups render inside the
71
+ * scoped subtree and match the `@scope (._ao-admin-root)` CSS — without it
72
+ * they portal to `document.body`, outside the scope, and render unstyled. A
73
+ * `<Dialog>` ancestor overrides it with its own `<dialog>` element so popups
74
+ * join the top layer, painting above the backdrop and escaping its
75
+ * `overflow: hidden`. With no provider the context is null and popups fall
76
+ * back to `document.body`.
77
+ */
78
+ var PortalContainerContext = createContext(null);
79
+ //#endregion
67
80
  //#region src/AdminRoot.tsx
68
- function AdminRoot({ className, theme, systemAccent, style, ...rest }) {
81
+ function AdminRoot({ className, theme, systemAccent, style, ref, ...rest }) {
69
82
  const rootStyle = systemAccent !== void 0 ? {
70
83
  ...style,
71
84
  "--color-system-accent": systemAccent
72
85
  } : style;
73
- return /* @__PURE__ */ jsx("div", {
74
- className: cn("admin-root", className),
75
- style: rootStyle,
76
- ...rest,
77
- ...theme !== void 0 && { "data-theme": theme }
86
+ const portalRef = useRef(null);
87
+ const setRef = useCallback((node) => {
88
+ portalRef.current = node;
89
+ if (typeof ref === "function") ref(node);
90
+ else if (ref) ref.current = node;
91
+ }, [ref]);
92
+ return /* @__PURE__ */ jsx(PortalContainerContext.Provider, {
93
+ value: portalRef,
94
+ children: /* @__PURE__ */ jsx("div", {
95
+ ref: setRef,
96
+ className: cn("admin-root", className),
97
+ style: rootStyle,
98
+ ...rest,
99
+ ...theme !== void 0 && { "data-theme": theme }
100
+ })
78
101
  });
79
102
  }
80
103
  //#endregion
@@ -207,9 +230,22 @@ var MOD_ORDER = [
207
230
  "alt",
208
231
  "meta"
209
232
  ];
233
+ /**
234
+ * Resolve the modifier `mod` aliases to. Apple platforms use ⌘ (`meta`) as the
235
+ * primary command modifier; everywhere else it's Ctrl. Detected once at module
236
+ * load (SSR-safe — the registry never dispatches server-side) and shared by the
237
+ * parse and display layers so the binding and its `<Kbd>` chip always agree.
238
+ */
239
+ function detectApplePlatform() {
240
+ if (typeof navigator === "undefined") return false;
241
+ const platform = navigator.userAgentData?.platform || navigator.platform || "";
242
+ return /^(mac|iphone|ipad|ipod)/i.test(platform);
243
+ }
244
+ var IS_APPLE = detectApplePlatform();
245
+ var MOD_TARGET = IS_APPLE ? "meta" : "ctrl";
210
246
  function tokenToMod(token) {
211
247
  switch (token) {
212
- case "mod":
248
+ case "mod": return MOD_TARGET;
213
249
  case "ctrl":
214
250
  case "control": return "ctrl";
215
251
  case "shift": return "shift";
@@ -258,7 +294,7 @@ function normalizeEvent(e) {
258
294
  if (key === "control" || key === "shift" || key === "alt" || key === "meta") return null;
259
295
  const mods = /* @__PURE__ */ new Set();
260
296
  if (e.ctrlKey) mods.add("ctrl");
261
- if (e.shiftKey) mods.add("shift");
297
+ if (e.shiftKey && !isShiftedSymbol(key)) mods.add("shift");
262
298
  if (e.altKey) mods.add("alt");
263
299
  if (e.metaKey) mods.add("meta");
264
300
  return canonicalize({
@@ -266,6 +302,10 @@ function normalizeEvent(e) {
266
302
  key
267
303
  });
268
304
  }
305
+ /** A single printable symbol (`?`, `+`, `:`, …) — not a letter, digit, or named key. */
306
+ function isShiftedSymbol(key) {
307
+ return key.length === 1 && !/[a-z0-9]/.test(key);
308
+ }
269
309
  var SPECIAL_KEY_LABELS = {
270
310
  escape: "Esc",
271
311
  esc: "Esc",
@@ -281,7 +321,12 @@ var SPECIAL_KEY_LABELS = {
281
321
  backspace: "Backspace",
282
322
  delete: "Del"
283
323
  };
284
- var MOD_LABELS = {
324
+ var MOD_LABELS = IS_APPLE ? {
325
+ ctrl: "⌃",
326
+ shift: "⇧",
327
+ alt: "⌥",
328
+ meta: "⌘"
329
+ } : {
285
330
  ctrl: "Ctrl",
286
331
  shift: "Shift",
287
332
  alt: "Alt",
@@ -371,6 +416,7 @@ function isEditableTarget(target) {
371
416
  return tag === "INPUT" || tag === "TEXTAREA";
372
417
  }
373
418
  function dispatch(e) {
419
+ if (e.repeat) return;
374
420
  const chord = normalizeEvent(e);
375
421
  if (chord === null) return;
376
422
  const bucket = registry.get(chord);
@@ -446,10 +492,17 @@ function useHotkey(keys, handler, options) {
446
492
  }
447
493
  //#endregion
448
494
  //#region src/Button.tsx
449
- function Button({ variant = "default", size = "md", fullWidth, loading, icon, iconTrailing, hotkey, className, type = "button", disabled, children, onClick, ...rest }) {
450
- const { ariaKeyShortcuts, primaryChord } = useHotkey(hotkey, (e) => onClick?.(e), { enabled: !disabled && !loading });
495
+ function Button({ variant = "default", size = "md", fullWidth, loading, icon, iconTrailing, hotkey, className, type = "button", disabled, children, onClick, ref, ...rest }) {
496
+ const elementRef = useRef(null);
497
+ const setRef = useCallback((node) => {
498
+ elementRef.current = node;
499
+ if (typeof ref === "function") ref(node);
500
+ else if (ref) ref.current = node;
501
+ }, [ref]);
502
+ const { ariaKeyShortcuts, primaryChord } = useHotkey(hotkey, () => elementRef.current?.click(), { enabled: !disabled && !loading });
451
503
  const iconOnly = children == null && (icon != null || iconTrailing != null);
452
504
  return /* @__PURE__ */ jsxs(Button$1, {
505
+ ref: setRef,
453
506
  onClick,
454
507
  type,
455
508
  disabled: disabled || loading,
@@ -474,10 +527,14 @@ function Button({ variant = "default", size = "md", fullWidth, loading, icon, ic
474
527
  }
475
528
  //#endregion
476
529
  //#region src/ButtonGroup.tsx
477
- function ButtonGroup({ orientation = "horizontal", role = "group", className, ...rest }) {
530
+ function ButtonGroup({ orientation = "horizontal", fullWidth = false, role = "group", className, ...rest }) {
478
531
  return /* @__PURE__ */ jsx("div", {
479
532
  role,
480
- className: cn(["btn-group", orientation === "vertical" && "btn-group-vertical"], className),
533
+ className: cn([
534
+ "btn-group",
535
+ orientation === "vertical" && "btn-group-vertical",
536
+ fullWidth && "btn-group-full-width"
537
+ ], className),
481
538
  ...rest
482
539
  });
483
540
  }
@@ -597,6 +654,26 @@ function Indicator({ label, variant = "neutral", size = "sm", icon, placement =
597
654
  });
598
655
  }
599
656
  //#endregion
657
+ //#region src/Link.tsx
658
+ /**
659
+ * A text link — a plain `<a>` with the design system's link styling: primary
660
+ * color, hover shift, underline, and a focus-visible ring. Pass `external` for
661
+ * the new-tab affordance.
662
+ */
663
+ function Link({ external, icon, iconTrailing, className, target, rel, children, ...rest }) {
664
+ return /* @__PURE__ */ jsxs("a", {
665
+ target: target ?? (external ? "_blank" : void 0),
666
+ rel: rel ?? (external ? "noopener noreferrer" : void 0),
667
+ className: cn(["link", external && "link-external"], className),
668
+ ...rest,
669
+ children: [
670
+ renderIcon(icon),
671
+ children,
672
+ renderIcon(iconTrailing)
673
+ ]
674
+ });
675
+ }
676
+ //#endregion
600
677
  //#region src/Pagination.tsx
601
678
  /**
602
679
  * Compute the items to render for a given `page` / `total`. Always returns:
@@ -758,12 +835,21 @@ function defaultRender(item, onPageChange, prev, next) {
758
835
  }
759
836
  //#endregion
760
837
  //#region src/Textarea.tsx
761
- function Textarea({ variant = "bordered", textareaSize = "md", className, ...rest }) {
762
- return /* @__PURE__ */ jsx("textarea", {
838
+ /**
839
+ * Multi-line text input. Rendered through Base UI's `Field.Control` with a
840
+ * `<textarea>` swapped in for the default `<input>`, so inside a `<Field>` it
841
+ * gets the same wiring as `<Input>`: a generated id, label `htmlFor`
842
+ * association, and validity-driven `:user-valid` / `<Field.Error>`. Works
843
+ * standalone too — `Field.Control` falls back to a default context.
844
+ */
845
+ function Textarea({ variant = "bordered", textareaSize = "md", autoResize, className, ...rest }) {
846
+ return /* @__PURE__ */ jsx(Field$1.Control, {
847
+ render: (props) => /* @__PURE__ */ jsx("textarea", { ...props }),
763
848
  className: cn([
764
849
  "textarea",
765
850
  variant !== "bordered" && `textarea-${variant}`,
766
- textareaSize !== "md" && `textarea-${textareaSize}`
851
+ textareaSize !== "md" && `textarea-${textareaSize}`,
852
+ autoResize && "textarea-autosize"
767
853
  ], className),
768
854
  ...rest
769
855
  });
@@ -860,16 +946,6 @@ function SwitchThumb({ className, ...rest }) {
860
946
  }
861
947
  var Switch = Object.assign(SwitchRoot, { Thumb: SwitchThumb });
862
948
  //#endregion
863
- //#region src/portal-context.ts
864
- /**
865
- * Container that Base UI popups (Select, Tooltip, etc.) should portal into.
866
- * When a `<Dialog>` ancestor publishes its `<dialog>` element through this
867
- * context, popups render inside that top-layer dialog so they paint above
868
- * the backdrop and escape its `overflow: hidden`. Outside a dialog the
869
- * context is null and popups portal to `document.body` as before.
870
- */
871
- var PortalContainerContext = createContext(null);
872
- //#endregion
873
949
  //#region src/Select.tsx
874
950
  function SelectRoot(props) {
875
951
  return /* @__PURE__ */ jsx(Select$1.Root, { ...props });
@@ -1930,6 +2006,6 @@ var Sidebar = Object.assign(SidebarRoot, {
1930
2006
  CollapseToggle: SidebarCollapseToggle
1931
2007
  });
1932
2008
  //#endregion
1933
- export { Accordion, AdminRoot, Alert, AppShell, Badge, BrandTile, Breadcrumbs, Button, ButtonGroup, Card, Checkbox, CodeBlock, Container, Dialog, Field, FileInput, Footer, Indicator, Input, InputGroup, Kbd, Menu, Navbar, Pagination, Progress, PropertyList, Radio, RadioGroup, Select, Sidebar, Spinner, StatCard, Switch, Table, Tabs, Textarea, Tooltip, getPaginationItems, useAppShell, useHotkey };
2009
+ export { Accordion, AdminRoot, Alert, AppShell, Badge, BrandTile, Breadcrumbs, Button, ButtonGroup, Card, Checkbox, CodeBlock, Container, Dialog, Field, FileInput, Footer, Indicator, Input, InputGroup, Kbd, Link, Menu, Navbar, Pagination, Progress, PropertyList, Radio, RadioGroup, Select, Sidebar, Spinner, StatCard, Switch, Table, Tabs, Textarea, Tooltip, getPaginationItems, useAppShell, useHotkey };
1934
2010
 
1935
2011
  //# sourceMappingURL=index.mjs.map