@ai-matrx/design-system 0.86.332 → 0.86.334

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (140) hide show
  1. package/CHANGELOG.md +28 -2
  2. package/dist/auth-gate-dialog.js +4 -4
  3. package/dist/carousel.js +18 -18
  4. package/dist/{chunk-MVGMI6UZ.js → chunk-3MQMVPKO.js} +5 -5
  5. package/dist/{chunk-2WL2SGKL.js → chunk-677JS6TX.js} +24 -10
  6. package/dist/chunk-677JS6TX.js.map +1 -0
  7. package/dist/{chunk-TBDMTCRW.js → chunk-6YZMGSQY.js} +10 -10
  8. package/dist/{chunk-OFJ5LGBU.js → chunk-7NEVJKDZ.js} +8 -8
  9. package/dist/{chunk-XTNAKJSH.js → chunk-B3LDW3IQ.js} +2 -2
  10. package/dist/{chunk-VTJWQPYR.js → chunk-BM2YYBUO.js} +5 -5
  11. package/dist/{chunk-FTZCPGTH.js → chunk-CFCWQDGC.js} +4 -4
  12. package/dist/{chunk-CN7C4KQB.js → chunk-CH2NWSES.js} +2 -2
  13. package/dist/{chunk-CJCUD62M.js → chunk-CSSD6NS4.js} +5 -5
  14. package/dist/{chunk-W3QSRJ3O.js → chunk-E4GS5QH7.js} +7 -7
  15. package/dist/{chunk-O4KANICE.js → chunk-FRJ4PPA2.js} +5 -5
  16. package/dist/{chunk-4PCLJAW2.js → chunk-FXT7PZAF.js} +5 -14
  17. package/dist/chunk-FXT7PZAF.js.map +1 -0
  18. package/dist/{chunk-D45XDOJS.js → chunk-GHPUO3O7.js} +2 -2
  19. package/dist/{chunk-RPUC5MNH.js → chunk-GLZJ7WZK.js} +3 -3
  20. package/dist/{chunk-VKWQTSB6.js → chunk-HEFTQUJ5.js} +6 -6
  21. package/dist/{chunk-KWBYKUKP.js → chunk-J6637L6D.js} +4 -4
  22. package/dist/chunk-KGW373MK.js +21 -0
  23. package/dist/chunk-KGW373MK.js.map +1 -0
  24. package/dist/{chunk-5LT34PFX.js → chunk-MEJVHDYJ.js} +18 -18
  25. package/dist/{chunk-PPB52S7F.js → chunk-MFUNGDHO.js} +7 -7
  26. package/dist/{chunk-LCPHFONA.js → chunk-MIJMP4WI.js} +5 -5
  27. package/dist/{chunk-XREKZXAL.js → chunk-SMJGESH7.js} +6 -6
  28. package/dist/{chunk-SNHCBHBE.js → chunk-U24MOJWK.js} +4 -4
  29. package/dist/{chunk-DO6G4EKJ.js → chunk-UWTODOMD.js} +2 -2
  30. package/dist/{chunk-BQR4N24F.js → chunk-VLLUUOYJ.js} +4 -4
  31. package/dist/{chunk-FD6V6JBN.js → chunk-VV6WZTH5.js} +8 -8
  32. package/dist/{chunk-LVM7XZRJ.js → chunk-WQ2QCMMA.js} +4 -4
  33. package/dist/{chunk-57OD2WTY.js → chunk-X6ZRHJQP.js} +6 -6
  34. package/dist/{chunk-PLFWDUJW.js → chunk-XEXSZBXV.js} +3 -3
  35. package/dist/{chunk-JSXNITMG.js → chunk-YC5GAO35.js} +2 -2
  36. package/dist/{chunk-5TF2AFDM.js → chunk-ZCRPESQX.js} +4 -4
  37. package/dist/{chunk-5IKQ6RU4.js → chunk-ZOQ2XKXF.js} +9 -9
  38. package/dist/clipboard-fallback-dialog.js +10 -10
  39. package/dist/controls.js +15 -15
  40. package/dist/data-table/data-row-inspector.js +15 -14
  41. package/dist/data-table/data-row-window.js +20 -19
  42. package/dist/data-table/index.cjs +16 -12
  43. package/dist/data-table/index.cjs.map +1 -1
  44. package/dist/data-table/index.js +37 -36
  45. package/dist/data-table/index.js.map +1 -1
  46. package/dist/data-table/layered-filter-builder.js +4 -4
  47. package/dist/data-table/pagination.js +8 -8
  48. package/dist/data-table/uuid-cell.js +8 -8
  49. package/dist/desktop.js +22 -22
  50. package/dist/email-input-dialog.js +7 -7
  51. package/dist/index.cjs +590 -397
  52. package/dist/index.cjs.map +1 -1
  53. package/dist/index.d.cts +120 -10
  54. package/dist/index.d.ts +120 -10
  55. package/dist/index.js +519 -348
  56. package/dist/index.js.map +1 -1
  57. package/dist/intro-stage.js +3 -3
  58. package/dist/item.cjs +33 -17
  59. package/dist/item.cjs.map +1 -1
  60. package/dist/item.d.cts +7 -1
  61. package/dist/item.d.ts +7 -1
  62. package/dist/item.js +32 -30
  63. package/dist/item.js.map +1 -1
  64. package/dist/lite-table.js +10 -10
  65. package/dist/menu-look.js +3 -3
  66. package/dist/record-list.cjs +16 -2
  67. package/dist/record-list.cjs.map +1 -1
  68. package/dist/record-list.d.cts +7 -1
  69. package/dist/record-list.d.ts +7 -1
  70. package/dist/record-list.js +13 -13
  71. package/dist/sandbox-gate-dialog.js +8 -8
  72. package/dist/scope-mismatch-dialog.js +7 -7
  73. package/dist/settings.cjs +16 -12
  74. package/dist/settings.cjs.map +1 -1
  75. package/dist/settings.js +20 -19
  76. package/dist/settings.js.map +1 -1
  77. package/dist/site-icon.js +2 -2
  78. package/dist/swipe-deck.js +1 -1
  79. package/dist/tap-shortcut.cjs +40 -0
  80. package/dist/tap-shortcut.cjs.map +1 -0
  81. package/dist/tap-shortcut.d.cts +13 -0
  82. package/dist/tap-shortcut.d.ts +13 -0
  83. package/dist/tap-shortcut.js +10 -0
  84. package/dist/tap-shortcut.js.map +1 -0
  85. package/dist/tap-target/ai-buttons.cjs +16 -12
  86. package/dist/tap-target/ai-buttons.cjs.map +1 -1
  87. package/dist/tap-target/ai-buttons.js +4 -3
  88. package/dist/tap-target/ai-buttons.js.map +1 -1
  89. package/dist/tap-target/buttons.cjs +16 -12
  90. package/dist/tap-target/buttons.cjs.map +1 -1
  91. package/dist/tap-target/buttons.d.cts +3 -5
  92. package/dist/tap-target/buttons.d.ts +3 -5
  93. package/dist/tap-target/buttons.js +4 -3
  94. package/dist/tap-target.cjs +16 -12
  95. package/dist/tap-target.cjs.map +1 -1
  96. package/dist/tap-target.d.cts +5 -7
  97. package/dist/tap-target.d.ts +5 -7
  98. package/dist/tap-target.js +6 -4
  99. package/dist/text-input-dialog.js +10 -10
  100. package/dist/thumbnail-grid.js +2 -2
  101. package/dist/transcript-scroll-nav.cjs +16 -12
  102. package/dist/transcript-scroll-nav.cjs.map +1 -1
  103. package/dist/transcript-scroll-nav.js +2 -1
  104. package/dist/transcript-scroll-nav.js.map +1 -1
  105. package/dist/value-prompts-dialog.js +5 -5
  106. package/dist/writing-field.cjs +16 -12
  107. package/dist/writing-field.cjs.map +1 -1
  108. package/dist/writing-field.js +21 -20
  109. package/dist/writing-field.js.map +1 -1
  110. package/package.json +12 -2
  111. package/dist/chunk-2WL2SGKL.js.map +0 -1
  112. package/dist/chunk-4PCLJAW2.js.map +0 -1
  113. /package/dist/{chunk-MVGMI6UZ.js.map → chunk-3MQMVPKO.js.map} +0 -0
  114. /package/dist/{chunk-TBDMTCRW.js.map → chunk-6YZMGSQY.js.map} +0 -0
  115. /package/dist/{chunk-OFJ5LGBU.js.map → chunk-7NEVJKDZ.js.map} +0 -0
  116. /package/dist/{chunk-XTNAKJSH.js.map → chunk-B3LDW3IQ.js.map} +0 -0
  117. /package/dist/{chunk-VTJWQPYR.js.map → chunk-BM2YYBUO.js.map} +0 -0
  118. /package/dist/{chunk-FTZCPGTH.js.map → chunk-CFCWQDGC.js.map} +0 -0
  119. /package/dist/{chunk-CN7C4KQB.js.map → chunk-CH2NWSES.js.map} +0 -0
  120. /package/dist/{chunk-CJCUD62M.js.map → chunk-CSSD6NS4.js.map} +0 -0
  121. /package/dist/{chunk-W3QSRJ3O.js.map → chunk-E4GS5QH7.js.map} +0 -0
  122. /package/dist/{chunk-O4KANICE.js.map → chunk-FRJ4PPA2.js.map} +0 -0
  123. /package/dist/{chunk-D45XDOJS.js.map → chunk-GHPUO3O7.js.map} +0 -0
  124. /package/dist/{chunk-RPUC5MNH.js.map → chunk-GLZJ7WZK.js.map} +0 -0
  125. /package/dist/{chunk-VKWQTSB6.js.map → chunk-HEFTQUJ5.js.map} +0 -0
  126. /package/dist/{chunk-KWBYKUKP.js.map → chunk-J6637L6D.js.map} +0 -0
  127. /package/dist/{chunk-5LT34PFX.js.map → chunk-MEJVHDYJ.js.map} +0 -0
  128. /package/dist/{chunk-PPB52S7F.js.map → chunk-MFUNGDHO.js.map} +0 -0
  129. /package/dist/{chunk-LCPHFONA.js.map → chunk-MIJMP4WI.js.map} +0 -0
  130. /package/dist/{chunk-XREKZXAL.js.map → chunk-SMJGESH7.js.map} +0 -0
  131. /package/dist/{chunk-SNHCBHBE.js.map → chunk-U24MOJWK.js.map} +0 -0
  132. /package/dist/{chunk-DO6G4EKJ.js.map → chunk-UWTODOMD.js.map} +0 -0
  133. /package/dist/{chunk-BQR4N24F.js.map → chunk-VLLUUOYJ.js.map} +0 -0
  134. /package/dist/{chunk-FD6V6JBN.js.map → chunk-VV6WZTH5.js.map} +0 -0
  135. /package/dist/{chunk-LVM7XZRJ.js.map → chunk-WQ2QCMMA.js.map} +0 -0
  136. /package/dist/{chunk-57OD2WTY.js.map → chunk-X6ZRHJQP.js.map} +0 -0
  137. /package/dist/{chunk-PLFWDUJW.js.map → chunk-XEXSZBXV.js.map} +0 -0
  138. /package/dist/{chunk-JSXNITMG.js.map → chunk-YC5GAO35.js.map} +0 -0
  139. /package/dist/{chunk-5TF2AFDM.js.map → chunk-ZCRPESQX.js.map} +0 -0
  140. /package/dist/{chunk-5IKQ6RU4.js.map → chunk-ZOQ2XKXF.js.map} +0 -0
@@ -292,6 +292,12 @@ interface ItemRowProps extends ItemMenuSurface {
292
292
  * glides LEFT (translate) when the kebab is revealed. Never masked.
293
293
  */
294
294
  trailing?: ReactNode;
295
+ /**
296
+ * Meta shown only while the row is hovered, keyboard-focused or its menu is open (a chat's
297
+ * relative time). At rest it takes no room, so `trailing` keeps the right edge. Always shown on
298
+ * touch, where the kebab is always shown too.
299
+ */
300
+ trailingOnHover?: ReactNode;
295
301
  active?: boolean | undefined;
296
302
  disabled?: boolean | undefined;
297
303
  /** Navigation mode — renders next/link as the row's primary element. */
@@ -375,6 +381,6 @@ interface RecordListProps<T> {
375
381
  }
376
382
  declare function RecordList<T>({ items, getKey, title, subtitle, meta, leading, trailing, actions, menu, href, onOpen, openInPlace, activeKey, selectedKeys, onSelectedKeysChange, disabled, read, emptyState, size, framed, sourceFeature, surfaceName, entity, ariaLabel, className, }: RecordListProps<T>): react.JSX.Element;
377
383
 
378
- declare function ItemRow({ label, secondaryLabel, secondaryShare, subtitle, actions, leadingControl, disclosure, reserveDisclosure, leading, trailing, active, disabled, href, onOpen, openInPlace, menu, rename, size, indent, kebabAriaLabel, disableContextMenu, sourceFeature, surfaceName, entity, className, }: ItemRowProps): react.JSX.Element;
384
+ declare function ItemRow({ label, secondaryLabel, secondaryShare, subtitle, actions, leadingControl, disclosure, reserveDisclosure, leading, trailing, trailingOnHover, active, disabled, href, onOpen, openInPlace, menu, rename, size, indent, kebabAriaLabel, disableContextMenu, sourceFeature, surfaceName, entity, className, }: ItemRowProps): react.JSX.Element;
379
385
 
380
386
  export { type ItemEntityRef, type ItemMenuConfig, type ItemMenuConfigInput, ItemRow, type ItemRowProps, type ItemRowSize, type ReadOutcome, RecordList, type RecordListProps, readOf };
@@ -292,6 +292,12 @@ interface ItemRowProps extends ItemMenuSurface {
292
292
  * glides LEFT (translate) when the kebab is revealed. Never masked.
293
293
  */
294
294
  trailing?: ReactNode;
295
+ /**
296
+ * Meta shown only while the row is hovered, keyboard-focused or its menu is open (a chat's
297
+ * relative time). At rest it takes no room, so `trailing` keeps the right edge. Always shown on
298
+ * touch, where the kebab is always shown too.
299
+ */
300
+ trailingOnHover?: ReactNode;
295
301
  active?: boolean | undefined;
296
302
  disabled?: boolean | undefined;
297
303
  /** Navigation mode — renders next/link as the row's primary element. */
@@ -375,6 +381,6 @@ interface RecordListProps<T> {
375
381
  }
376
382
  declare function RecordList<T>({ items, getKey, title, subtitle, meta, leading, trailing, actions, menu, href, onOpen, openInPlace, activeKey, selectedKeys, onSelectedKeysChange, disabled, read, emptyState, size, framed, sourceFeature, surfaceName, entity, ariaLabel, className, }: RecordListProps<T>): react.JSX.Element;
377
383
 
378
- declare function ItemRow({ label, secondaryLabel, secondaryShare, subtitle, actions, leadingControl, disclosure, reserveDisclosure, leading, trailing, active, disabled, href, onOpen, openInPlace, menu, rename, size, indent, kebabAriaLabel, disableContextMenu, sourceFeature, surfaceName, entity, className, }: ItemRowProps): react.JSX.Element;
384
+ declare function ItemRow({ label, secondaryLabel, secondaryShare, subtitle, actions, leadingControl, disclosure, reserveDisclosure, leading, trailing, trailingOnHover, active, disabled, href, onOpen, openInPlace, menu, rename, size, indent, kebabAriaLabel, disableContextMenu, sourceFeature, surfaceName, entity, className, }: ItemRowProps): react.JSX.Element;
379
385
 
380
386
  export { type ItemEntityRef, type ItemMenuConfig, type ItemMenuConfigInput, ItemRow, type ItemRowProps, type ItemRowSize, type ReadOutcome, RecordList, type RecordListProps, readOf };
@@ -1,17 +1,17 @@
1
1
  "use client";
2
+ import {
3
+ ItemRow
4
+ } from "./chunk-677JS6TX.js";
2
5
  import {
3
6
  ListEmptyView
4
7
  } from "./chunk-PRJW34R6.js";
5
- import {
6
- ItemRow
7
- } from "./chunk-2WL2SGKL.js";
8
+ import "./chunk-J6637L6D.js";
8
9
  import {
9
10
  ReadEmpty,
10
11
  ReadStaleNotice,
11
12
  readOf
12
- } from "./chunk-FTZCPGTH.js";
13
- import "./chunk-KWBYKUKP.js";
14
- import "./chunk-VKWQTSB6.js";
13
+ } from "./chunk-CFCWQDGC.js";
14
+ import "./chunk-HEFTQUJ5.js";
15
15
  import {
16
16
  MAC_LIST_ATTRIBUTE
17
17
  } from "./chunk-5JZSBNEY.js";
@@ -19,28 +19,28 @@ import "./chunk-K4XCB576.js";
19
19
  import "./chunk-HKLIRHT2.js";
20
20
  import {
21
21
  Checkbox
22
- } from "./chunk-BQR4N24F.js";
22
+ } from "./chunk-VLLUUOYJ.js";
23
23
  import "./chunk-NDTDBBMM.js";
24
24
  import "./chunk-KPZX2M2C.js";
25
25
  import "./chunk-WFBPCMPF.js";
26
- import "./chunk-5IKQ6RU4.js";
27
- import "./chunk-BKCJUFD3.js";
26
+ import "./chunk-ZOQ2XKXF.js";
28
27
  import "./chunk-BD77DHUO.js";
28
+ import "./chunk-BKCJUFD3.js";
29
29
  import "./chunk-MOZRIHJF.js";
30
- import "./chunk-57OD2WTY.js";
30
+ import "./chunk-X6ZRHJQP.js";
31
31
  import "./chunk-BNXNIN2S.js";
32
32
  import "./chunk-POJ3RR3K.js";
33
- import "./chunk-XREKZXAL.js";
34
- import "./chunk-7IOSA55D.js";
33
+ import "./chunk-SMJGESH7.js";
35
34
  import "./chunk-WAT2XW7L.js";
35
+ import "./chunk-7IOSA55D.js";
36
36
  import "./chunk-FXXSZNER.js";
37
37
  import "./chunk-DGNHZBJY.js";
38
38
  import "./chunk-XIUVUL2Y.js";
39
+ import "./chunk-YCUFQCJW.js";
39
40
  import "./chunk-IMOOQQOO.js";
40
41
  import {
41
42
  cn
42
43
  } from "./chunk-M6KA5EHN.js";
43
- import "./chunk-YCUFQCJW.js";
44
44
 
45
45
  // src/record-list/RecordList.tsx
46
46
  import { useRef } from "react";
@@ -1,8 +1,4 @@
1
1
  "use client";
2
- import {
3
- UNCONFIGURED,
4
- announceStandIn
5
- } from "./chunk-IMQ3RX35.js";
6
2
  import {
7
3
  Dialog,
8
4
  DialogContent,
@@ -10,8 +6,12 @@ import {
10
6
  DialogFooter,
11
7
  DialogHeader,
12
8
  DialogTitle
13
- } from "./chunk-DO6G4EKJ.js";
14
- import "./chunk-SNHCBHBE.js";
9
+ } from "./chunk-UWTODOMD.js";
10
+ import {
11
+ UNCONFIGURED,
12
+ announceStandIn
13
+ } from "./chunk-IMQ3RX35.js";
14
+ import "./chunk-U24MOJWK.js";
15
15
  import "./chunk-NDTDBBMM.js";
16
16
  import "./chunk-LEPD6TV7.js";
17
17
  import "./chunk-MOZRIHJF.js";
@@ -20,11 +20,11 @@ import {
20
20
  } from "./chunk-7IOSA55D.js";
21
21
  import "./chunk-DGNHZBJY.js";
22
22
  import "./chunk-XIUVUL2Y.js";
23
- import "./chunk-IMOOQQOO.js";
24
- import "./chunk-M6KA5EHN.js";
25
23
  import {
26
24
  AlertTriangleIcon
27
25
  } from "./chunk-YCUFQCJW.js";
26
+ import "./chunk-IMOOQQOO.js";
27
+ import "./chunk-M6KA5EHN.js";
28
28
 
29
29
  // src/sandbox-gate-dialog.tsx
30
30
  import * as React from "react";
@@ -1,8 +1,4 @@
1
1
  "use client";
2
- import {
3
- UNCONFIGURED,
4
- announceStandIn
5
- } from "./chunk-IMQ3RX35.js";
6
2
  import {
7
3
  Dialog,
8
4
  DialogContent,
@@ -10,8 +6,12 @@ import {
10
6
  DialogFooter,
11
7
  DialogHeader,
12
8
  DialogTitle
13
- } from "./chunk-DO6G4EKJ.js";
14
- import "./chunk-SNHCBHBE.js";
9
+ } from "./chunk-UWTODOMD.js";
10
+ import {
11
+ UNCONFIGURED,
12
+ announceStandIn
13
+ } from "./chunk-IMQ3RX35.js";
14
+ import "./chunk-U24MOJWK.js";
15
15
  import "./chunk-NDTDBBMM.js";
16
16
  import "./chunk-LEPD6TV7.js";
17
17
  import "./chunk-MOZRIHJF.js";
@@ -20,9 +20,9 @@ import {
20
20
  } from "./chunk-7IOSA55D.js";
21
21
  import "./chunk-DGNHZBJY.js";
22
22
  import "./chunk-XIUVUL2Y.js";
23
+ import "./chunk-YCUFQCJW.js";
23
24
  import "./chunk-IMOOQQOO.js";
24
25
  import "./chunk-M6KA5EHN.js";
25
- import "./chunk-YCUFQCJW.js";
26
26
 
27
27
  // src/scope-mismatch-dialog.tsx
28
28
  import * as React from "react";
package/dist/settings.cjs CHANGED
@@ -1942,6 +1942,22 @@ function useTapSurface(explicit) {
1942
1942
 
1943
1943
  // src/tap-target/tap-features.tsx
1944
1944
  var import_react5 = require("react");
1945
+
1946
+ // src/tap-shortcut.ts
1947
+ var IS_APPLE = typeof navigator !== "undefined" && /Mac|iPhone|iPad|iPod/.test(navigator.platform || navigator.userAgent);
1948
+ function parseShortcut(shortcut) {
1949
+ const parts = shortcut.toLowerCase().split("+");
1950
+ const key = parts.pop() ?? "";
1951
+ return { mod: parts.includes("mod"), shift: parts.includes("shift"), alt: parts.includes("alt"), key };
1952
+ }
1953
+ function formatTapShortcut(shortcut) {
1954
+ const p = parseShortcut(shortcut);
1955
+ const key = p.key.length === 1 ? p.key.toUpperCase() : p.key[0].toUpperCase() + p.key.slice(1);
1956
+ if (IS_APPLE) return `${p.alt ? "\u2325" : ""}${p.shift ? "\u21E7" : ""}${p.mod ? "\u2318" : ""}${key}`;
1957
+ return [p.mod && "Ctrl", p.alt && "Alt", p.shift && "Shift", key].filter(Boolean).join("+");
1958
+ }
1959
+
1960
+ // src/tap-target/tap-features.tsx
1945
1961
  var import_jsx_runtime17 = require("react/jsx-runtime");
1946
1962
  var TAP_TONE_CLASS = {
1947
1963
  default: "text-foreground",
@@ -1959,18 +1975,6 @@ var TAP_SOLID_TONE = {
1959
1975
  warning: { fill: "bg-warning group-hover/tap:bg-warning/85", glyph: "text-warning-foreground" },
1960
1976
  neutral: { fill: "bg-foreground group-hover/tap:bg-foreground/85", glyph: "text-background" }
1961
1977
  };
1962
- var IS_APPLE = typeof navigator !== "undefined" && /Mac|iPhone|iPad|iPod/.test(navigator.platform || navigator.userAgent);
1963
- function parseShortcut(shortcut) {
1964
- const parts = shortcut.toLowerCase().split("+");
1965
- const key = parts.pop() ?? "";
1966
- return { mod: parts.includes("mod"), shift: parts.includes("shift"), alt: parts.includes("alt"), key };
1967
- }
1968
- function formatTapShortcut(shortcut) {
1969
- const p = parseShortcut(shortcut);
1970
- const key = p.key.length === 1 ? p.key.toUpperCase() : p.key[0].toUpperCase() + p.key.slice(1);
1971
- if (IS_APPLE) return `${p.alt ? "\u2325" : ""}${p.shift ? "\u21E7" : ""}${p.mod ? "\u2318" : ""}${key}`;
1972
- return [p.mod && "Ctrl", p.alt && "Alt", p.shift && "Shift", key].filter(Boolean).join("+");
1973
- }
1974
1978
  function isTyping(target) {
1975
1979
  const el = target;
1976
1980
  return !!el && (el.isContentEditable || /^(INPUT|TEXTAREA|SELECT)$/.test(el.tagName));