@sprawlify/primitives 0.0.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/anatomy.cjs +3 -0
- package/dist/anatomy.d.cts +2 -0
- package/dist/anatomy.d.mts +2 -0
- package/dist/anatomy.mjs +3 -0
- package/dist/aria-hidden-DqYx0f_y.mjs +177 -0
- package/dist/aria-hidden-DtLU6hSU.cjs +182 -0
- package/dist/aria-hidden.cjs +4 -0
- package/dist/aria-hidden.d.cts +16 -0
- package/dist/aria-hidden.d.mts +16 -0
- package/dist/aria-hidden.mjs +4 -0
- package/dist/auto-resize-D3qHtFy1.mjs +114 -0
- package/dist/auto-resize-xzlPFDyD.cjs +125 -0
- package/dist/auto-resize.cjs +5 -0
- package/dist/auto-resize.d.cts +17 -0
- package/dist/auto-resize.d.mts +17 -0
- package/dist/auto-resize.mjs +4 -0
- package/dist/chunk-CbDLau6x.cjs +34 -0
- package/dist/collection-8XqaNHs_.mjs +1279 -0
- package/dist/collection-DIoIDISa.cjs +1326 -0
- package/dist/collection.cjs +11 -0
- package/dist/collection.d.cts +5 -0
- package/dist/collection.d.mts +5 -0
- package/dist/collection.mjs +4 -0
- package/dist/color-BkAP1Tkd.d.mts +60 -0
- package/dist/color-VKewNv2e.d.cts +60 -0
- package/dist/color-utils-Cc5GVXZh.mjs +657 -0
- package/dist/color-utils-LER_6Zwu.cjs +680 -0
- package/dist/color-utils.cjs +7 -0
- package/dist/color-utils.d.cts +19 -0
- package/dist/color-utils.d.mts +19 -0
- package/dist/color-utils.mjs +4 -0
- package/dist/core-30pJjyC2.d.mts +49 -0
- package/dist/core-CQFbMdTl.cjs +176 -0
- package/dist/core-CefBjbst.d.cts +49 -0
- package/dist/core-DCFNMTZF.mjs +129 -0
- package/dist/core.cjs +12 -0
- package/dist/core.d.cts +3 -0
- package/dist/core.d.mts +3 -0
- package/dist/core.mjs +5 -0
- package/dist/create-anatomy-B3XYc-qG.d.mts +70 -0
- package/dist/create-anatomy-BGQ8pv8J.d.cts +70 -0
- package/dist/create-anatomy-BbDZbHpC.mjs +39 -0
- package/dist/create-anatomy-CDsIFUXg.cjs +45 -0
- package/dist/create-props-BnF_vl-E.mjs +5 -0
- package/dist/create-props-YKy7JIKj.cjs +11 -0
- package/dist/data-url-C3ITPVRX.d.cts +10 -0
- package/dist/data-url-DLwZ9M77.d.mts +10 -0
- package/dist/date-utils-D2xPHa_I.cjs +738 -0
- package/dist/date-utils-wEa1hhpc.mjs +474 -0
- package/dist/date-utils.cjs +46 -0
- package/dist/date-utils.d.cts +101 -0
- package/dist/date-utils.d.mts +2 -0
- package/dist/date-utils.mjs +3 -0
- package/dist/defineProperty-BoUOT9Ie.cjs +49 -0
- package/dist/defineProperty-DrXfyjd4.mjs +43 -0
- package/dist/dismissable-CTfKZ4OG.cjs +282 -0
- package/dist/dismissable-DDrx0xnH.mjs +271 -0
- package/dist/dismissable-layer-C7pZU2wi.d.cts +39 -0
- package/dist/dismissable-layer-t_b0fk-p.d.mts +39 -0
- package/dist/dismissable.cjs +7 -0
- package/dist/dismissable.d.cts +3 -0
- package/dist/dismissable.d.mts +3 -0
- package/dist/dismissable.mjs +6 -0
- package/dist/dom-query-CWZdWUGp.cjs +2141 -0
- package/dist/dom-query-DFCRhyj1.mjs +1374 -0
- package/dist/dom-query.cjs +130 -0
- package/dist/dom-query.d.cts +307 -0
- package/dist/dom-query.d.mts +307 -0
- package/dist/dom-query.mjs +3 -0
- package/dist/file-utils.cjs +220 -0
- package/dist/file-utils.d.cts +51 -0
- package/dist/file-utils.d.mts +51 -0
- package/dist/file-utils.mjs +210 -0
- package/dist/focus-trap-D-bypQEJ.mjs +485 -0
- package/dist/focus-trap-D4i52S9A.cjs +496 -0
- package/dist/focus-trap.cjs +5 -0
- package/dist/focus-trap.d.cts +88 -0
- package/dist/focus-trap.d.mts +88 -0
- package/dist/focus-trap.mjs +4 -0
- package/dist/focus-visible-DYTWdWpa.cjs +210 -0
- package/dist/focus-visible-irppYatv.mjs +175 -0
- package/dist/focus-visible.cjs +9 -0
- package/dist/focus-visible.d.cts +31 -0
- package/dist/focus-visible.d.mts +31 -0
- package/dist/focus-visible.mjs +4 -0
- package/dist/functions-BOkTDEFM.d.cts +15 -0
- package/dist/functions-IZtWcC8Q.d.mts +15 -0
- package/dist/highlight-word.cjs +100 -0
- package/dist/highlight-word.d.cts +24 -0
- package/dist/highlight-word.d.mts +24 -0
- package/dist/highlight-word.mjs +99 -0
- package/dist/hotkeys.cjs +758 -0
- package/dist/hotkeys.d.cts +130 -0
- package/dist/hotkeys.d.mts +130 -0
- package/dist/hotkeys.mjs +754 -0
- package/dist/i18n-utils.cjs +450 -0
- package/dist/i18n-utils.d.cts +61 -0
- package/dist/i18n-utils.d.mts +61 -0
- package/dist/i18n-utils.mjs +440 -0
- package/dist/index-BkzYij2j.d.mts +25 -0
- package/dist/index-Bqw3r34-.d.cts +1383 -0
- package/dist/index-C0MKXQmE.d.mts +1383 -0
- package/dist/index-C9-feK5c.d.cts +25 -0
- package/dist/index-CD5FN7kY.d.mts +114 -0
- package/dist/index-CJji6wHl.d.cts +15 -0
- package/dist/index-CNi5FkPe.d.mts +15 -0
- package/dist/index-D96rs8B0.d.mts +115 -0
- package/dist/index.cjs +0 -0
- package/dist/index.d.cts +1 -0
- package/dist/index.d.mts +1 -0
- package/dist/index.mjs +1 -0
- package/dist/interact-outside-BplxR9cR.mjs +200 -0
- package/dist/interact-outside-C8-oFBpB.cjs +205 -0
- package/dist/interact-outside.cjs +5 -0
- package/dist/interact-outside.d.cts +2 -0
- package/dist/interact-outside.d.mts +2 -0
- package/dist/interact-outside.mjs +5 -0
- package/dist/json-tree-utils.cjs +1512 -0
- package/dist/json-tree-utils.d.cts +117 -0
- package/dist/json-tree-utils.d.mts +117 -0
- package/dist/json-tree-utils.mjs +1463 -0
- package/dist/list-collection-BIMJGQjn.d.cts +61 -0
- package/dist/list-collection-Db3eixRU.d.mts +61 -0
- package/dist/live-region-CcZPGo89.cjs +52 -0
- package/dist/live-region-CnPh21WH.mjs +46 -0
- package/dist/live-region.cjs +3 -0
- package/dist/live-region.d.cts +2 -0
- package/dist/live-region.d.mts +2 -0
- package/dist/live-region.mjs +3 -0
- package/dist/machines/accordion/index.cjs +328 -0
- package/dist/machines/accordion/index.d.cts +83 -0
- package/dist/machines/accordion/index.d.mts +83 -0
- package/dist/machines/accordion/index.mjs +322 -0
- package/dist/machines/async-list/index.cjs +311 -0
- package/dist/machines/async-list/index.d.cts +89 -0
- package/dist/machines/async-list/index.d.mts +89 -0
- package/dist/machines/async-list/index.mjs +310 -0
- package/dist/machines/avatar/index.cjs +169 -0
- package/dist/machines/avatar/index.d.cts +63 -0
- package/dist/machines/avatar/index.d.mts +63 -0
- package/dist/machines/avatar/index.mjs +165 -0
- package/dist/machines/bottom-sheet/index.cjs +676 -0
- package/dist/machines/bottom-sheet/index.d.cts +239 -0
- package/dist/machines/bottom-sheet/index.d.mts +239 -0
- package/dist/machines/bottom-sheet/index.mjs +672 -0
- package/dist/machines/carousel/index.cjs +859 -0
- package/dist/machines/carousel/index.d.cts +146 -0
- package/dist/machines/carousel/index.d.mts +146 -0
- package/dist/machines/carousel/index.mjs +851 -0
- package/dist/machines/checkbox/index.cjs +316 -0
- package/dist/machines/checkbox/index.d.cts +81 -0
- package/dist/machines/checkbox/index.d.mts +81 -0
- package/dist/machines/checkbox/index.mjs +312 -0
- package/dist/machines/clipboard/index.cjs +225 -0
- package/dist/machines/clipboard/index.d.cts +68 -0
- package/dist/machines/clipboard/index.d.mts +68 -0
- package/dist/machines/clipboard/index.mjs +219 -0
- package/dist/machines/collapsible/index.cjs +362 -0
- package/dist/machines/collapsible/index.d.cts +82 -0
- package/dist/machines/collapsible/index.d.mts +82 -0
- package/dist/machines/collapsible/index.mjs +358 -0
- package/dist/machines/color-picker/index.cjs +1529 -0
- package/dist/machines/color-picker/index.d.cts +205 -0
- package/dist/machines/color-picker/index.d.mts +205 -0
- package/dist/machines/color-picker/index.mjs +1514 -0
- package/dist/machines/combobox/index.cjs +1593 -0
- package/dist/machines/combobox/index.d.cts +214 -0
- package/dist/machines/combobox/index.d.mts +214 -0
- package/dist/machines/combobox/index.mjs +1582 -0
- package/dist/machines/date-picker/index.cjs +2177 -0
- package/dist/machines/date-picker/index.d.cts +350 -0
- package/dist/machines/date-picker/index.d.mts +350 -0
- package/dist/machines/date-picker/index.mjs +2161 -0
- package/dist/machines/dialog/index.cjs +325 -0
- package/dist/machines/dialog/index.d.cts +80 -0
- package/dist/machines/dialog/index.d.mts +80 -0
- package/dist/machines/dialog/index.mjs +321 -0
- package/dist/machines/editable/index.cjs +551 -0
- package/dist/machines/editable/index.d.cts +114 -0
- package/dist/machines/editable/index.d.mts +114 -0
- package/dist/machines/editable/index.mjs +547 -0
- package/dist/machines/floating-panel/index.cjs +995 -0
- package/dist/machines/floating-panel/index.d.cts +147 -0
- package/dist/machines/floating-panel/index.d.mts +147 -0
- package/dist/machines/floating-panel/index.mjs +988 -0
- package/dist/machines/hover-card/index.cjs +383 -0
- package/dist/machines/hover-card/index.d.cts +69 -0
- package/dist/machines/hover-card/index.d.mts +69 -0
- package/dist/machines/hover-card/index.mjs +379 -0
- package/dist/machines/image-cropper/index.cjs +1995 -0
- package/dist/machines/image-cropper/index.d.cts +182 -0
- package/dist/machines/image-cropper/index.d.mts +182 -0
- package/dist/machines/image-cropper/index.mjs +1990 -0
- package/dist/machines/listbox/index.cjs +794 -0
- package/dist/machines/listbox/index.d.cts +168 -0
- package/dist/machines/listbox/index.d.mts +168 -0
- package/dist/machines/listbox/index.mjs +782 -0
- package/dist/machines/marquee/index.cjs +395 -0
- package/dist/machines/marquee/index.d.cts +102 -0
- package/dist/machines/marquee/index.d.mts +102 -0
- package/dist/machines/marquee/index.mjs +391 -0
- package/dist/machines/menu/index.cjs +1298 -0
- package/dist/machines/menu/index.d.cts +175 -0
- package/dist/machines/menu/index.d.mts +175 -0
- package/dist/machines/menu/index.mjs +1286 -0
- package/dist/machines/navigation-menu/index.cjs +861 -0
- package/dist/machines/navigation-menu/index.d.cts +127 -0
- package/dist/machines/navigation-menu/index.d.mts +127 -0
- package/dist/machines/navigation-menu/index.mjs +857 -0
- package/dist/machines/number-input/index.cjs +996 -0
- package/dist/machines/number-input/index.d.cts +134 -0
- package/dist/machines/number-input/index.d.mts +134 -0
- package/dist/machines/number-input/index.mjs +991 -0
- package/dist/machines/pagination/index.cjs +419 -0
- package/dist/machines/pagination/index.d.cts +139 -0
- package/dist/machines/pagination/index.d.mts +139 -0
- package/dist/machines/pagination/index.mjs +411 -0
- package/dist/machines/password-input/index.cjs +228 -0
- package/dist/machines/password-input/index.d.cts +71 -0
- package/dist/machines/password-input/index.d.mts +71 -0
- package/dist/machines/password-input/index.mjs +224 -0
- package/dist/machines/pin-input/index.cjs +523 -0
- package/dist/machines/pin-input/index.d.cts +105 -0
- package/dist/machines/pin-input/index.d.mts +105 -0
- package/dist/machines/pin-input/index.mjs +519 -0
- package/dist/machines/popover/index.cjs +430 -0
- package/dist/machines/popover/index.d.cts +88 -0
- package/dist/machines/popover/index.d.mts +88 -0
- package/dist/machines/popover/index.mjs +426 -0
- package/dist/machines/presence/index.cjs +192 -0
- package/dist/machines/presence/index.d.cts +44 -0
- package/dist/machines/presence/index.d.mts +44 -0
- package/dist/machines/presence/index.mjs +190 -0
- package/dist/machines/progress/index.cjs +288 -0
- package/dist/machines/progress/index.d.cts +96 -0
- package/dist/machines/progress/index.d.mts +96 -0
- package/dist/machines/progress/index.mjs +284 -0
- package/dist/machines/qr-code/index.cjs +172 -0
- package/dist/machines/qr-code/index.d.cts +70 -0
- package/dist/machines/qr-code/index.d.mts +70 -0
- package/dist/machines/qr-code/index.mjs +167 -0
- package/dist/machines/radio-group/index.cjs +436 -0
- package/dist/machines/radio-group/index.d.cts +106 -0
- package/dist/machines/radio-group/index.d.mts +106 -0
- package/dist/machines/radio-group/index.mjs +430 -0
- package/dist/machines/rating-group/index.cjs +405 -0
- package/dist/machines/rating-group/index.d.cts +101 -0
- package/dist/machines/rating-group/index.d.mts +101 -0
- package/dist/machines/rating-group/index.mjs +399 -0
- package/dist/machines/scroll-area/index.cjs +857 -0
- package/dist/machines/scroll-area/index.d.cts +159 -0
- package/dist/machines/scroll-area/index.d.mts +159 -0
- package/dist/machines/scroll-area/index.mjs +853 -0
- package/dist/machines/select/index.cjs +1165 -0
- package/dist/machines/select/index.d.cts +183 -0
- package/dist/machines/select/index.d.mts +183 -0
- package/dist/machines/select/index.mjs +1154 -0
- package/dist/machines/signature-pad/index.cjs +334 -0
- package/dist/machines/signature-pad/index.d.cts +108 -0
- package/dist/machines/signature-pad/index.d.mts +108 -0
- package/dist/machines/signature-pad/index.mjs +328 -0
- package/dist/machines/slider/index.cjs +957 -0
- package/dist/machines/slider/index.d.cts +149 -0
- package/dist/machines/slider/index.d.mts +149 -0
- package/dist/machines/slider/index.mjs +949 -0
- package/dist/machines/splitter/index.cjs +1112 -0
- package/dist/machines/splitter/index.d.cts +155 -0
- package/dist/machines/splitter/index.d.mts +155 -0
- package/dist/machines/splitter/index.mjs +1103 -0
- package/dist/machines/steps/index.cjs +289 -0
- package/dist/machines/steps/index.d.cts +97 -0
- package/dist/machines/steps/index.d.mts +97 -0
- package/dist/machines/steps/index.mjs +285 -0
- package/dist/machines/switch/index.cjs +305 -0
- package/dist/machines/switch/index.d.cts +80 -0
- package/dist/machines/switch/index.d.mts +80 -0
- package/dist/machines/switch/index.mjs +301 -0
- package/dist/machines/tabs/index.cjs +508 -0
- package/dist/machines/tabs/index.d.cts +111 -0
- package/dist/machines/tabs/index.d.mts +111 -0
- package/dist/machines/tabs/index.mjs +500 -0
- package/dist/machines/tags-input/index.cjs +1127 -0
- package/dist/machines/tags-input/index.d.cts +179 -0
- package/dist/machines/tags-input/index.d.mts +179 -0
- package/dist/machines/tags-input/index.mjs +1121 -0
- package/dist/machines/timer/index.cjs +329 -0
- package/dist/machines/timer/index.d.cts +98 -0
- package/dist/machines/timer/index.d.mts +98 -0
- package/dist/machines/timer/index.mjs +324 -0
- package/dist/machines/toast/index.cjs +1155 -0
- package/dist/machines/toast/index.d.cts +195 -0
- package/dist/machines/toast/index.d.mts +195 -0
- package/dist/machines/toast/index.mjs +1151 -0
- package/dist/machines/toggle/index.cjs +103 -0
- package/dist/machines/toggle/index.d.cts +46 -0
- package/dist/machines/toggle/index.d.mts +46 -0
- package/dist/machines/toggle/index.mjs +99 -0
- package/dist/machines/toggle-group/index.cjs +328 -0
- package/dist/machines/toggle-group/index.d.cts +81 -0
- package/dist/machines/toggle-group/index.d.mts +81 -0
- package/dist/machines/toggle-group/index.mjs +322 -0
- package/dist/machines/tooltip/index.cjs +516 -0
- package/dist/machines/tooltip/index.d.cts +71 -0
- package/dist/machines/tooltip/index.d.mts +71 -0
- package/dist/machines/tooltip/index.mjs +512 -0
- package/dist/machines/tour/index.cjs +1108 -0
- package/dist/machines/tour/index.d.cts +206 -0
- package/dist/machines/tour/index.d.mts +206 -0
- package/dist/machines/tour/index.mjs +1101 -0
- package/dist/machines/tree-view/index.cjs +1271 -0
- package/dist/machines/tree-view/index.d.cts +215 -0
- package/dist/machines/tree-view/index.d.mts +215 -0
- package/dist/machines/tree-view/index.mjs +1263 -0
- package/dist/node-BctU8GXk.d.mts +24 -0
- package/dist/node-CSsuPZVZ.d.cts +24 -0
- package/dist/popper-BPJeAtcA.mjs +349 -0
- package/dist/popper-D0FAW_p7.cjs +373 -0
- package/dist/popper.cjs +8 -0
- package/dist/popper.d.cts +74 -0
- package/dist/popper.d.mts +2 -0
- package/dist/popper.mjs +5 -0
- package/dist/raf-BnlYUlDi.d.mts +15 -0
- package/dist/raf-Cd2FGy0z.d.cts +15 -0
- package/dist/rect-utils-0ellN0a_.mjs +854 -0
- package/dist/rect-utils-DKLRhP8G.cjs +1147 -0
- package/dist/rect-utils.cjs +51 -0
- package/dist/rect-utils.d.cts +198 -0
- package/dist/rect-utils.d.mts +198 -0
- package/dist/rect-utils.mjs +3 -0
- package/dist/remove-scroll-Lrfv79X_.mjs +58 -0
- package/dist/remove-scroll-Uvzg1L9r.cjs +63 -0
- package/dist/remove-scroll.cjs +0 -0
- package/dist/remove-scroll.d.cts +1 -0
- package/dist/remove-scroll.d.mts +1 -0
- package/dist/remove-scroll.mjs +1 -0
- package/dist/scroll-snap-CrTmQRzA.mjs +152 -0
- package/dist/scroll-snap-zyiZLv7W.cjs +175 -0
- package/dist/scroll-snap.cjs +7 -0
- package/dist/scroll-snap.d.cts +14 -0
- package/dist/scroll-snap.d.mts +14 -0
- package/dist/scroll-snap.mjs +4 -0
- package/dist/selection-BIhSzkF7.d.mts +50 -0
- package/dist/selection-CS1GBp8e.d.cts +50 -0
- package/dist/store-BZcXv49B.cjs +305 -0
- package/dist/store-DEojWy9H.mjs +263 -0
- package/dist/store.cjs +9 -0
- package/dist/store.d.cts +26 -0
- package/dist/store.d.mts +26 -0
- package/dist/store.mjs +3 -0
- package/dist/stringify-state.cjs +49 -0
- package/dist/stringify-state.d.cts +8 -0
- package/dist/stringify-state.d.mts +8 -0
- package/dist/stringify-state.mjs +46 -0
- package/dist/tree-collection-BwU5WhGQ.d.mts +78 -0
- package/dist/tree-collection-DP_eznnI.d.cts +78 -0
- package/dist/typeahead-BdNwVP09.d.cts +45 -0
- package/dist/typeahead-XN6lZ7G9.d.mts +45 -0
- package/dist/types-BivBkYg9.d.cts +57 -0
- package/dist/types-Bl_6JtPQ.d.mts +57 -0
- package/dist/types-CPUMVt7c.d.mts +54 -0
- package/dist/types-CT_W6HWr.d.cts +54 -0
- package/dist/types-DDTcG99l.d.mts +201 -0
- package/dist/types-DejIu60O.d.cts +201 -0
- package/dist/types-DiIdKZ3K.d.cts +45 -0
- package/dist/types-GxLIgJib.d.cts +17 -0
- package/dist/types.cjs +15 -0
- package/dist/types.d.cts +2 -0
- package/dist/types.d.mts +2 -0
- package/dist/types.mjs +14 -0
- package/dist/utils-BZyrxWWR.mjs +525 -0
- package/dist/utils-_6frwjgJ.cjs +1040 -0
- package/dist/utils.cjs +88 -0
- package/dist/utils.d.cts +144 -0
- package/dist/utils.d.mts +144 -0
- package/dist/utils.mjs +3 -0
- package/dist/wait-for-CMjPsqWk.d.cts +10 -0
- package/dist/wait-for-D2nkdD4z.d.mts +10 -0
- package/package.json +399 -0
package/dist/anatomy.cjs
ADDED
package/dist/anatomy.mjs
ADDED
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
import { Ht as findControlledElements, ln as isHTMLElement } from "./dom-query-DFCRhyj1.mjs";
|
|
2
|
+
|
|
3
|
+
//#region src/shared/aria-hidden/walk-tree-outside.ts
|
|
4
|
+
let counterMap = /* @__PURE__ */ new WeakMap();
|
|
5
|
+
let uncontrolledNodes = /* @__PURE__ */ new WeakMap();
|
|
6
|
+
let markerMap = {};
|
|
7
|
+
let lockCount = 0;
|
|
8
|
+
/**
|
|
9
|
+
* Unwraps the host element from a shadow root.
|
|
10
|
+
* @param node - The element or shadow root.
|
|
11
|
+
* @returns The host element or null.
|
|
12
|
+
*/
|
|
13
|
+
const unwrapHost = (node) => node && (node.host || unwrapHost(node.parentNode));
|
|
14
|
+
/**
|
|
15
|
+
* Corrects targets to ensure they are contained within the parent node.
|
|
16
|
+
* @param parent - The parent HTMLElement.
|
|
17
|
+
* @param targets - The target elements.
|
|
18
|
+
* @returns The corrected list of elements.
|
|
19
|
+
*/
|
|
20
|
+
const correctTargets = (parent, targets) => targets.map((target) => {
|
|
21
|
+
if (parent.contains(target)) return target;
|
|
22
|
+
const correctedTarget = unwrapHost(target);
|
|
23
|
+
if (correctedTarget && parent.contains(correctedTarget)) return correctedTarget;
|
|
24
|
+
console.error("[sprawlify-js > ariaHidden] target", target, "in not contained inside", parent, ". Doing nothing");
|
|
25
|
+
return null;
|
|
26
|
+
}).filter((x) => Boolean(x));
|
|
27
|
+
const ignoreableNodes = new Set([
|
|
28
|
+
"script",
|
|
29
|
+
"output",
|
|
30
|
+
"status",
|
|
31
|
+
"next-route-announcer"
|
|
32
|
+
]);
|
|
33
|
+
/**
|
|
34
|
+
* Checks if a node should be ignored during tree walking.
|
|
35
|
+
* @param node - The element to check.
|
|
36
|
+
* @returns True if the node should be ignored, false otherwise.
|
|
37
|
+
*/
|
|
38
|
+
const isIgnoredNode = (node) => {
|
|
39
|
+
if (ignoreableNodes.has(node.localName)) return true;
|
|
40
|
+
if (node.role === "status") return true;
|
|
41
|
+
if (node.hasAttribute("aria-live")) return true;
|
|
42
|
+
return node.matches("[data-live-announcer]");
|
|
43
|
+
};
|
|
44
|
+
/**
|
|
45
|
+
* Walks the DOM tree outside the specified targets and applies control attributes.
|
|
46
|
+
* @param originalTarget - The target element(s) to exclude from control.
|
|
47
|
+
* @param props - Options for the tree walking operation.
|
|
48
|
+
* @returns A cleanup function to restore the original state.
|
|
49
|
+
*/
|
|
50
|
+
const walkTreeOutside = (originalTarget, props) => {
|
|
51
|
+
var _markerMap;
|
|
52
|
+
const { parentNode, markerName, controlAttribute, explicitBooleanValue, followControlledElements = true } = props;
|
|
53
|
+
const targets = correctTargets(parentNode, Array.isArray(originalTarget) ? originalTarget : [originalTarget]);
|
|
54
|
+
(_markerMap = markerMap)[markerName] || (_markerMap[markerName] = /* @__PURE__ */ new WeakMap());
|
|
55
|
+
const markerCounter = markerMap[markerName];
|
|
56
|
+
const hiddenNodes = [];
|
|
57
|
+
const elementsToKeep = /* @__PURE__ */ new Set();
|
|
58
|
+
const elementsToStop = new Set(targets);
|
|
59
|
+
const keep = (el) => {
|
|
60
|
+
if (!el || elementsToKeep.has(el)) return;
|
|
61
|
+
elementsToKeep.add(el);
|
|
62
|
+
keep(el.parentNode);
|
|
63
|
+
};
|
|
64
|
+
targets.forEach((target) => {
|
|
65
|
+
keep(target);
|
|
66
|
+
if (followControlledElements && isHTMLElement(target)) findControlledElements(target, (controlledElement) => {
|
|
67
|
+
keep(controlledElement);
|
|
68
|
+
});
|
|
69
|
+
});
|
|
70
|
+
const deep = (parent) => {
|
|
71
|
+
if (!parent || elementsToStop.has(parent)) return;
|
|
72
|
+
Array.prototype.forEach.call(parent.children, (node) => {
|
|
73
|
+
if (elementsToKeep.has(node)) deep(node);
|
|
74
|
+
else try {
|
|
75
|
+
if (isIgnoredNode(node)) return;
|
|
76
|
+
const attr = node.getAttribute(controlAttribute);
|
|
77
|
+
const alreadyHidden = explicitBooleanValue ? attr === "true" : attr !== null && attr !== "false";
|
|
78
|
+
const counterValue = (counterMap.get(node) || 0) + 1;
|
|
79
|
+
const markerValue = (markerCounter.get(node) || 0) + 1;
|
|
80
|
+
counterMap.set(node, counterValue);
|
|
81
|
+
markerCounter.set(node, markerValue);
|
|
82
|
+
hiddenNodes.push(node);
|
|
83
|
+
if (counterValue === 1 && alreadyHidden) uncontrolledNodes.set(node, true);
|
|
84
|
+
if (markerValue === 1) node.setAttribute(markerName, "");
|
|
85
|
+
if (!alreadyHidden) node.setAttribute(controlAttribute, explicitBooleanValue ? "true" : "");
|
|
86
|
+
} catch (e) {
|
|
87
|
+
console.error("[sprawlify-js > ariaHidden] cannot operate on ", node, e);
|
|
88
|
+
}
|
|
89
|
+
});
|
|
90
|
+
};
|
|
91
|
+
deep(parentNode);
|
|
92
|
+
elementsToKeep.clear();
|
|
93
|
+
lockCount++;
|
|
94
|
+
return () => {
|
|
95
|
+
hiddenNodes.forEach((node) => {
|
|
96
|
+
const counterValue = counterMap.get(node) - 1;
|
|
97
|
+
const markerValue = markerCounter.get(node) - 1;
|
|
98
|
+
counterMap.set(node, counterValue);
|
|
99
|
+
markerCounter.set(node, markerValue);
|
|
100
|
+
if (!counterValue) {
|
|
101
|
+
if (!uncontrolledNodes.has(node)) node.removeAttribute(controlAttribute);
|
|
102
|
+
uncontrolledNodes.delete(node);
|
|
103
|
+
}
|
|
104
|
+
if (!markerValue) node.removeAttribute(markerName);
|
|
105
|
+
});
|
|
106
|
+
lockCount--;
|
|
107
|
+
if (!lockCount) {
|
|
108
|
+
counterMap = /* @__PURE__ */ new WeakMap();
|
|
109
|
+
counterMap = /* @__PURE__ */ new WeakMap();
|
|
110
|
+
uncontrolledNodes = /* @__PURE__ */ new WeakMap();
|
|
111
|
+
markerMap = {};
|
|
112
|
+
}
|
|
113
|
+
};
|
|
114
|
+
};
|
|
115
|
+
|
|
116
|
+
//#endregion
|
|
117
|
+
//#region src/shared/aria-hidden/aria-hidden.ts
|
|
118
|
+
/**
|
|
119
|
+
* Gets the parent node for the given target elements.
|
|
120
|
+
* @param originalTarget - The target element(s).
|
|
121
|
+
* @returns The parent HTMLElement or null.
|
|
122
|
+
*/
|
|
123
|
+
const getParentNode = (originalTarget) => {
|
|
124
|
+
return (Array.isArray(originalTarget) ? originalTarget[0] : originalTarget).ownerDocument.body;
|
|
125
|
+
};
|
|
126
|
+
/**
|
|
127
|
+
* Hides all elements outside the specified targets by setting aria-hidden.
|
|
128
|
+
* @param originalTarget - The target element(s) to keep visible.
|
|
129
|
+
* @param parentNode - The parent node to start hiding from.
|
|
130
|
+
* @param markerName - The data attribute name to mark hidden elements.
|
|
131
|
+
* @param followControlledElements - Whether to follow controlled elements.
|
|
132
|
+
* @returns A cleanup function to restore visibility.
|
|
133
|
+
*/
|
|
134
|
+
const hideOthers = (originalTarget, parentNode = getParentNode(originalTarget), markerName = "data-aria-hidden", followControlledElements = true) => {
|
|
135
|
+
if (!parentNode) return;
|
|
136
|
+
return walkTreeOutside(originalTarget, {
|
|
137
|
+
parentNode,
|
|
138
|
+
markerName,
|
|
139
|
+
controlAttribute: "aria-hidden",
|
|
140
|
+
explicitBooleanValue: true,
|
|
141
|
+
followControlledElements
|
|
142
|
+
});
|
|
143
|
+
};
|
|
144
|
+
|
|
145
|
+
//#endregion
|
|
146
|
+
//#region src/shared/aria-hidden/index.ts
|
|
147
|
+
/**
|
|
148
|
+
* Requests an animation frame to execute a function.
|
|
149
|
+
* @param fn - The function to execute.
|
|
150
|
+
* @returns A cleanup function to cancel the animation frame.
|
|
151
|
+
*/
|
|
152
|
+
const raf = (fn) => {
|
|
153
|
+
const frameId = requestAnimationFrame(() => fn());
|
|
154
|
+
return () => cancelAnimationFrame(frameId);
|
|
155
|
+
};
|
|
156
|
+
/**
|
|
157
|
+
* Hides all elements outside the specified targets with optional deferral.
|
|
158
|
+
* @param targetsOrFn - The target elements or a function returning them.
|
|
159
|
+
* @param options - Options for the operation.
|
|
160
|
+
* @returns A cleanup function to restore visibility.
|
|
161
|
+
*/
|
|
162
|
+
function ariaHidden(targetsOrFn, options = {}) {
|
|
163
|
+
const { defer = true } = options;
|
|
164
|
+
const func = defer ? raf : (v) => v();
|
|
165
|
+
const cleanups = [];
|
|
166
|
+
cleanups.push(func(() => {
|
|
167
|
+
const elements = (typeof targetsOrFn === "function" ? targetsOrFn() : targetsOrFn).filter(Boolean);
|
|
168
|
+
if (elements.length === 0) return;
|
|
169
|
+
cleanups.push(hideOthers(elements));
|
|
170
|
+
}));
|
|
171
|
+
return () => {
|
|
172
|
+
cleanups.forEach((fn) => fn?.());
|
|
173
|
+
};
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
//#endregion
|
|
177
|
+
export { ariaHidden as t };
|
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
const require_dom_query = require('./dom-query-CWZdWUGp.cjs');
|
|
2
|
+
|
|
3
|
+
//#region src/shared/aria-hidden/walk-tree-outside.ts
|
|
4
|
+
let counterMap = /* @__PURE__ */ new WeakMap();
|
|
5
|
+
let uncontrolledNodes = /* @__PURE__ */ new WeakMap();
|
|
6
|
+
let markerMap = {};
|
|
7
|
+
let lockCount = 0;
|
|
8
|
+
/**
|
|
9
|
+
* Unwraps the host element from a shadow root.
|
|
10
|
+
* @param node - The element or shadow root.
|
|
11
|
+
* @returns The host element or null.
|
|
12
|
+
*/
|
|
13
|
+
const unwrapHost = (node) => node && (node.host || unwrapHost(node.parentNode));
|
|
14
|
+
/**
|
|
15
|
+
* Corrects targets to ensure they are contained within the parent node.
|
|
16
|
+
* @param parent - The parent HTMLElement.
|
|
17
|
+
* @param targets - The target elements.
|
|
18
|
+
* @returns The corrected list of elements.
|
|
19
|
+
*/
|
|
20
|
+
const correctTargets = (parent, targets) => targets.map((target) => {
|
|
21
|
+
if (parent.contains(target)) return target;
|
|
22
|
+
const correctedTarget = unwrapHost(target);
|
|
23
|
+
if (correctedTarget && parent.contains(correctedTarget)) return correctedTarget;
|
|
24
|
+
console.error("[sprawlify-js > ariaHidden] target", target, "in not contained inside", parent, ". Doing nothing");
|
|
25
|
+
return null;
|
|
26
|
+
}).filter((x) => Boolean(x));
|
|
27
|
+
const ignoreableNodes = new Set([
|
|
28
|
+
"script",
|
|
29
|
+
"output",
|
|
30
|
+
"status",
|
|
31
|
+
"next-route-announcer"
|
|
32
|
+
]);
|
|
33
|
+
/**
|
|
34
|
+
* Checks if a node should be ignored during tree walking.
|
|
35
|
+
* @param node - The element to check.
|
|
36
|
+
* @returns True if the node should be ignored, false otherwise.
|
|
37
|
+
*/
|
|
38
|
+
const isIgnoredNode = (node) => {
|
|
39
|
+
if (ignoreableNodes.has(node.localName)) return true;
|
|
40
|
+
if (node.role === "status") return true;
|
|
41
|
+
if (node.hasAttribute("aria-live")) return true;
|
|
42
|
+
return node.matches("[data-live-announcer]");
|
|
43
|
+
};
|
|
44
|
+
/**
|
|
45
|
+
* Walks the DOM tree outside the specified targets and applies control attributes.
|
|
46
|
+
* @param originalTarget - The target element(s) to exclude from control.
|
|
47
|
+
* @param props - Options for the tree walking operation.
|
|
48
|
+
* @returns A cleanup function to restore the original state.
|
|
49
|
+
*/
|
|
50
|
+
const walkTreeOutside = (originalTarget, props) => {
|
|
51
|
+
var _markerMap;
|
|
52
|
+
const { parentNode, markerName, controlAttribute, explicitBooleanValue, followControlledElements = true } = props;
|
|
53
|
+
const targets = correctTargets(parentNode, Array.isArray(originalTarget) ? originalTarget : [originalTarget]);
|
|
54
|
+
(_markerMap = markerMap)[markerName] || (_markerMap[markerName] = /* @__PURE__ */ new WeakMap());
|
|
55
|
+
const markerCounter = markerMap[markerName];
|
|
56
|
+
const hiddenNodes = [];
|
|
57
|
+
const elementsToKeep = /* @__PURE__ */ new Set();
|
|
58
|
+
const elementsToStop = new Set(targets);
|
|
59
|
+
const keep = (el) => {
|
|
60
|
+
if (!el || elementsToKeep.has(el)) return;
|
|
61
|
+
elementsToKeep.add(el);
|
|
62
|
+
keep(el.parentNode);
|
|
63
|
+
};
|
|
64
|
+
targets.forEach((target) => {
|
|
65
|
+
keep(target);
|
|
66
|
+
if (followControlledElements && require_dom_query.isHTMLElement(target)) require_dom_query.findControlledElements(target, (controlledElement) => {
|
|
67
|
+
keep(controlledElement);
|
|
68
|
+
});
|
|
69
|
+
});
|
|
70
|
+
const deep = (parent) => {
|
|
71
|
+
if (!parent || elementsToStop.has(parent)) return;
|
|
72
|
+
Array.prototype.forEach.call(parent.children, (node) => {
|
|
73
|
+
if (elementsToKeep.has(node)) deep(node);
|
|
74
|
+
else try {
|
|
75
|
+
if (isIgnoredNode(node)) return;
|
|
76
|
+
const attr = node.getAttribute(controlAttribute);
|
|
77
|
+
const alreadyHidden = explicitBooleanValue ? attr === "true" : attr !== null && attr !== "false";
|
|
78
|
+
const counterValue = (counterMap.get(node) || 0) + 1;
|
|
79
|
+
const markerValue = (markerCounter.get(node) || 0) + 1;
|
|
80
|
+
counterMap.set(node, counterValue);
|
|
81
|
+
markerCounter.set(node, markerValue);
|
|
82
|
+
hiddenNodes.push(node);
|
|
83
|
+
if (counterValue === 1 && alreadyHidden) uncontrolledNodes.set(node, true);
|
|
84
|
+
if (markerValue === 1) node.setAttribute(markerName, "");
|
|
85
|
+
if (!alreadyHidden) node.setAttribute(controlAttribute, explicitBooleanValue ? "true" : "");
|
|
86
|
+
} catch (e) {
|
|
87
|
+
console.error("[sprawlify-js > ariaHidden] cannot operate on ", node, e);
|
|
88
|
+
}
|
|
89
|
+
});
|
|
90
|
+
};
|
|
91
|
+
deep(parentNode);
|
|
92
|
+
elementsToKeep.clear();
|
|
93
|
+
lockCount++;
|
|
94
|
+
return () => {
|
|
95
|
+
hiddenNodes.forEach((node) => {
|
|
96
|
+
const counterValue = counterMap.get(node) - 1;
|
|
97
|
+
const markerValue = markerCounter.get(node) - 1;
|
|
98
|
+
counterMap.set(node, counterValue);
|
|
99
|
+
markerCounter.set(node, markerValue);
|
|
100
|
+
if (!counterValue) {
|
|
101
|
+
if (!uncontrolledNodes.has(node)) node.removeAttribute(controlAttribute);
|
|
102
|
+
uncontrolledNodes.delete(node);
|
|
103
|
+
}
|
|
104
|
+
if (!markerValue) node.removeAttribute(markerName);
|
|
105
|
+
});
|
|
106
|
+
lockCount--;
|
|
107
|
+
if (!lockCount) {
|
|
108
|
+
counterMap = /* @__PURE__ */ new WeakMap();
|
|
109
|
+
counterMap = /* @__PURE__ */ new WeakMap();
|
|
110
|
+
uncontrolledNodes = /* @__PURE__ */ new WeakMap();
|
|
111
|
+
markerMap = {};
|
|
112
|
+
}
|
|
113
|
+
};
|
|
114
|
+
};
|
|
115
|
+
|
|
116
|
+
//#endregion
|
|
117
|
+
//#region src/shared/aria-hidden/aria-hidden.ts
|
|
118
|
+
/**
|
|
119
|
+
* Gets the parent node for the given target elements.
|
|
120
|
+
* @param originalTarget - The target element(s).
|
|
121
|
+
* @returns The parent HTMLElement or null.
|
|
122
|
+
*/
|
|
123
|
+
const getParentNode = (originalTarget) => {
|
|
124
|
+
return (Array.isArray(originalTarget) ? originalTarget[0] : originalTarget).ownerDocument.body;
|
|
125
|
+
};
|
|
126
|
+
/**
|
|
127
|
+
* Hides all elements outside the specified targets by setting aria-hidden.
|
|
128
|
+
* @param originalTarget - The target element(s) to keep visible.
|
|
129
|
+
* @param parentNode - The parent node to start hiding from.
|
|
130
|
+
* @param markerName - The data attribute name to mark hidden elements.
|
|
131
|
+
* @param followControlledElements - Whether to follow controlled elements.
|
|
132
|
+
* @returns A cleanup function to restore visibility.
|
|
133
|
+
*/
|
|
134
|
+
const hideOthers = (originalTarget, parentNode = getParentNode(originalTarget), markerName = "data-aria-hidden", followControlledElements = true) => {
|
|
135
|
+
if (!parentNode) return;
|
|
136
|
+
return walkTreeOutside(originalTarget, {
|
|
137
|
+
parentNode,
|
|
138
|
+
markerName,
|
|
139
|
+
controlAttribute: "aria-hidden",
|
|
140
|
+
explicitBooleanValue: true,
|
|
141
|
+
followControlledElements
|
|
142
|
+
});
|
|
143
|
+
};
|
|
144
|
+
|
|
145
|
+
//#endregion
|
|
146
|
+
//#region src/shared/aria-hidden/index.ts
|
|
147
|
+
/**
|
|
148
|
+
* Requests an animation frame to execute a function.
|
|
149
|
+
* @param fn - The function to execute.
|
|
150
|
+
* @returns A cleanup function to cancel the animation frame.
|
|
151
|
+
*/
|
|
152
|
+
const raf = (fn) => {
|
|
153
|
+
const frameId = requestAnimationFrame(() => fn());
|
|
154
|
+
return () => cancelAnimationFrame(frameId);
|
|
155
|
+
};
|
|
156
|
+
/**
|
|
157
|
+
* Hides all elements outside the specified targets with optional deferral.
|
|
158
|
+
* @param targetsOrFn - The target elements or a function returning them.
|
|
159
|
+
* @param options - Options for the operation.
|
|
160
|
+
* @returns A cleanup function to restore visibility.
|
|
161
|
+
*/
|
|
162
|
+
function ariaHidden(targetsOrFn, options = {}) {
|
|
163
|
+
const { defer = true } = options;
|
|
164
|
+
const func = defer ? raf : (v) => v();
|
|
165
|
+
const cleanups = [];
|
|
166
|
+
cleanups.push(func(() => {
|
|
167
|
+
const elements = (typeof targetsOrFn === "function" ? targetsOrFn() : targetsOrFn).filter(Boolean);
|
|
168
|
+
if (elements.length === 0) return;
|
|
169
|
+
cleanups.push(hideOthers(elements));
|
|
170
|
+
}));
|
|
171
|
+
return () => {
|
|
172
|
+
cleanups.forEach((fn) => fn?.());
|
|
173
|
+
};
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
//#endregion
|
|
177
|
+
Object.defineProperty(exports, 'ariaHidden', {
|
|
178
|
+
enumerable: true,
|
|
179
|
+
get: function () {
|
|
180
|
+
return ariaHidden;
|
|
181
|
+
}
|
|
182
|
+
});
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
//#region src/shared/aria-hidden/index.d.ts
|
|
2
|
+
type MaybeElement = HTMLElement | null;
|
|
3
|
+
type Targets = Array<MaybeElement>;
|
|
4
|
+
type TargetsOrFn = Targets | (() => Targets);
|
|
5
|
+
type Options = {
|
|
6
|
+
defer?: boolean | undefined;
|
|
7
|
+
};
|
|
8
|
+
/**
|
|
9
|
+
* Hides all elements outside the specified targets with optional deferral.
|
|
10
|
+
* @param targetsOrFn - The target elements or a function returning them.
|
|
11
|
+
* @param options - Options for the operation.
|
|
12
|
+
* @returns A cleanup function to restore visibility.
|
|
13
|
+
*/
|
|
14
|
+
declare function ariaHidden(targetsOrFn: TargetsOrFn, options?: Options): () => void;
|
|
15
|
+
//#endregion
|
|
16
|
+
export { ariaHidden };
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
//#region src/shared/aria-hidden/index.d.ts
|
|
2
|
+
type MaybeElement = HTMLElement | null;
|
|
3
|
+
type Targets = Array<MaybeElement>;
|
|
4
|
+
type TargetsOrFn = Targets | (() => Targets);
|
|
5
|
+
type Options = {
|
|
6
|
+
defer?: boolean | undefined;
|
|
7
|
+
};
|
|
8
|
+
/**
|
|
9
|
+
* Hides all elements outside the specified targets with optional deferral.
|
|
10
|
+
* @param targetsOrFn - The target elements or a function returning them.
|
|
11
|
+
* @param options - Options for the operation.
|
|
12
|
+
* @returns A cleanup function to restore visibility.
|
|
13
|
+
*/
|
|
14
|
+
declare function ariaHidden(targetsOrFn: TargetsOrFn, options?: Options): () => void;
|
|
15
|
+
//#endregion
|
|
16
|
+
export { ariaHidden };
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
import { Qt as getDocument, Yt as getComputedStyle, rn as getWindow } from "./dom-query-DFCRhyj1.mjs";
|
|
2
|
+
|
|
3
|
+
//#region src/shared/auto-resize/visual-style.ts
|
|
4
|
+
/**
|
|
5
|
+
* Gets the visual styles of an element as a CSS string for text measurement.
|
|
6
|
+
* @param node - The HTMLElement to get styles from.
|
|
7
|
+
* @returns A CSS string with visual styles.
|
|
8
|
+
*/
|
|
9
|
+
function getVisualStyles(node) {
|
|
10
|
+
if (!node) return;
|
|
11
|
+
const style = getComputedStyle(node);
|
|
12
|
+
return "box-sizing:" + style.boxSizing + ";border-left:" + style.borderLeftWidth + " solid red;border-right:" + style.borderRightWidth + " solid red;font-family:" + style.fontFamily + ";font-feature-settings:" + style.fontFeatureSettings + ";font-kerning:" + style.fontKerning + ";font-size:" + style.fontSize + ";font-stretch:" + style.fontStretch + ";font-style:" + style.fontStyle + ";font-variant:" + style.fontVariant + ";font-variant-caps:" + style.fontVariantCaps + ";font-variant-ligatures:" + style.fontVariantLigatures + ";font-variant-numeric:" + style.fontVariantNumeric + ";font-weight:" + style.fontWeight + ";letter-spacing:" + style.letterSpacing + ";margin-left:" + style.marginLeft + ";margin-right:" + style.marginRight + ";padding-left:" + style.paddingLeft + ";padding-right:" + style.paddingRight + ";text-indent:" + style.textIndent + ";text-transform:" + style.textTransform;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
//#endregion
|
|
16
|
+
//#region src/shared/auto-resize/autoresize-input.ts
|
|
17
|
+
/**
|
|
18
|
+
* Creates a ghost element for measuring text width.
|
|
19
|
+
* @param doc - The document to create the element in.
|
|
20
|
+
* @returns The created ghost element.
|
|
21
|
+
*/
|
|
22
|
+
function createGhostElement(doc) {
|
|
23
|
+
let el = doc.createElement("div");
|
|
24
|
+
el.id = "ghost";
|
|
25
|
+
el.style.cssText = "display:inline-block;height:0;overflow:hidden;position:absolute;top:0;visibility:hidden;white-space:nowrap;";
|
|
26
|
+
doc.body.appendChild(el);
|
|
27
|
+
return el;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Automatically resizes an input element based on its content.
|
|
31
|
+
* @param input - The input element to resize.
|
|
32
|
+
* @returns A cleanup function to remove event listeners and the ghost element.
|
|
33
|
+
*/
|
|
34
|
+
function autoResizeInput(input) {
|
|
35
|
+
if (!input) return;
|
|
36
|
+
const doc = getDocument(input);
|
|
37
|
+
const win = getWindow(input);
|
|
38
|
+
const ghost = createGhostElement(doc);
|
|
39
|
+
const cssText = getVisualStyles(input);
|
|
40
|
+
if (cssText) ghost.style.cssText += cssText;
|
|
41
|
+
function resize() {
|
|
42
|
+
win.requestAnimationFrame(() => {
|
|
43
|
+
ghost.innerHTML = input.value;
|
|
44
|
+
const rect = win.getComputedStyle(ghost);
|
|
45
|
+
input?.style.setProperty("width", rect.width);
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
resize();
|
|
49
|
+
input?.addEventListener("input", resize);
|
|
50
|
+
input?.addEventListener("change", resize);
|
|
51
|
+
return () => {
|
|
52
|
+
doc.body.removeChild(ghost);
|
|
53
|
+
input?.removeEventListener("input", resize);
|
|
54
|
+
input?.removeEventListener("change", resize);
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
//#endregion
|
|
59
|
+
//#region src/shared/auto-resize/autoresize-textarea.ts
|
|
60
|
+
/**
|
|
61
|
+
* Automatically resizes a textarea element based on its content.
|
|
62
|
+
* @param el - The textarea element to resize.
|
|
63
|
+
* @returns A cleanup function to remove event listeners and observers.
|
|
64
|
+
*/
|
|
65
|
+
const autoresizeTextarea = (el) => {
|
|
66
|
+
if (!el) return;
|
|
67
|
+
const style = getComputedStyle(el);
|
|
68
|
+
const win = getWindow(el);
|
|
69
|
+
const doc = getDocument(el);
|
|
70
|
+
const resize = () => {
|
|
71
|
+
requestAnimationFrame(() => {
|
|
72
|
+
el.style.height = "auto";
|
|
73
|
+
let newHeight;
|
|
74
|
+
if (style.boxSizing === "content-box") newHeight = el.scrollHeight - (parseFloat(style.paddingTop) + parseFloat(style.paddingBottom));
|
|
75
|
+
else newHeight = el.scrollHeight + parseFloat(style.borderTopWidth) + parseFloat(style.borderBottomWidth);
|
|
76
|
+
if (style.maxHeight !== "none" && newHeight > parseFloat(style.maxHeight)) {
|
|
77
|
+
if (style.overflowY === "hidden") el.style.overflowY = "scroll";
|
|
78
|
+
newHeight = parseFloat(style.maxHeight);
|
|
79
|
+
} else if (style.overflowY !== "hidden") el.style.overflowY = "hidden";
|
|
80
|
+
el.style.height = `${newHeight}px`;
|
|
81
|
+
});
|
|
82
|
+
};
|
|
83
|
+
el.addEventListener("input", resize);
|
|
84
|
+
el.form?.addEventListener("reset", resize);
|
|
85
|
+
const elementPrototype = Object.getPrototypeOf(el);
|
|
86
|
+
const descriptor = Object.getOwnPropertyDescriptor(elementPrototype, "value");
|
|
87
|
+
Object.defineProperty(el, "value", {
|
|
88
|
+
...descriptor,
|
|
89
|
+
set() {
|
|
90
|
+
descriptor?.set?.apply(this, arguments);
|
|
91
|
+
resize();
|
|
92
|
+
}
|
|
93
|
+
});
|
|
94
|
+
const resizeObserver = new win.ResizeObserver(() => {
|
|
95
|
+
requestAnimationFrame(() => resize());
|
|
96
|
+
});
|
|
97
|
+
resizeObserver.observe(el);
|
|
98
|
+
const attrObserver = new win.MutationObserver(() => resize());
|
|
99
|
+
attrObserver.observe(el, {
|
|
100
|
+
attributes: true,
|
|
101
|
+
attributeFilter: ["rows", "placeholder"]
|
|
102
|
+
});
|
|
103
|
+
doc.fonts?.addEventListener("loadingdone", resize);
|
|
104
|
+
return () => {
|
|
105
|
+
el.removeEventListener("input", resize);
|
|
106
|
+
el.form?.removeEventListener("reset", resize);
|
|
107
|
+
doc.fonts?.removeEventListener("loadingdone", resize);
|
|
108
|
+
resizeObserver.disconnect();
|
|
109
|
+
attrObserver.disconnect();
|
|
110
|
+
};
|
|
111
|
+
};
|
|
112
|
+
|
|
113
|
+
//#endregion
|
|
114
|
+
export { autoResizeInput as n, autoresizeTextarea as t };
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
const require_dom_query = require('./dom-query-CWZdWUGp.cjs');
|
|
2
|
+
|
|
3
|
+
//#region src/shared/auto-resize/visual-style.ts
|
|
4
|
+
/**
|
|
5
|
+
* Gets the visual styles of an element as a CSS string for text measurement.
|
|
6
|
+
* @param node - The HTMLElement to get styles from.
|
|
7
|
+
* @returns A CSS string with visual styles.
|
|
8
|
+
*/
|
|
9
|
+
function getVisualStyles(node) {
|
|
10
|
+
if (!node) return;
|
|
11
|
+
const style = require_dom_query.getComputedStyle(node);
|
|
12
|
+
return "box-sizing:" + style.boxSizing + ";border-left:" + style.borderLeftWidth + " solid red;border-right:" + style.borderRightWidth + " solid red;font-family:" + style.fontFamily + ";font-feature-settings:" + style.fontFeatureSettings + ";font-kerning:" + style.fontKerning + ";font-size:" + style.fontSize + ";font-stretch:" + style.fontStretch + ";font-style:" + style.fontStyle + ";font-variant:" + style.fontVariant + ";font-variant-caps:" + style.fontVariantCaps + ";font-variant-ligatures:" + style.fontVariantLigatures + ";font-variant-numeric:" + style.fontVariantNumeric + ";font-weight:" + style.fontWeight + ";letter-spacing:" + style.letterSpacing + ";margin-left:" + style.marginLeft + ";margin-right:" + style.marginRight + ";padding-left:" + style.paddingLeft + ";padding-right:" + style.paddingRight + ";text-indent:" + style.textIndent + ";text-transform:" + style.textTransform;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
//#endregion
|
|
16
|
+
//#region src/shared/auto-resize/autoresize-input.ts
|
|
17
|
+
/**
|
|
18
|
+
* Creates a ghost element for measuring text width.
|
|
19
|
+
* @param doc - The document to create the element in.
|
|
20
|
+
* @returns The created ghost element.
|
|
21
|
+
*/
|
|
22
|
+
function createGhostElement(doc) {
|
|
23
|
+
let el = doc.createElement("div");
|
|
24
|
+
el.id = "ghost";
|
|
25
|
+
el.style.cssText = "display:inline-block;height:0;overflow:hidden;position:absolute;top:0;visibility:hidden;white-space:nowrap;";
|
|
26
|
+
doc.body.appendChild(el);
|
|
27
|
+
return el;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Automatically resizes an input element based on its content.
|
|
31
|
+
* @param input - The input element to resize.
|
|
32
|
+
* @returns A cleanup function to remove event listeners and the ghost element.
|
|
33
|
+
*/
|
|
34
|
+
function autoResizeInput(input) {
|
|
35
|
+
if (!input) return;
|
|
36
|
+
const doc = require_dom_query.getDocument(input);
|
|
37
|
+
const win = require_dom_query.getWindow(input);
|
|
38
|
+
const ghost = createGhostElement(doc);
|
|
39
|
+
const cssText = getVisualStyles(input);
|
|
40
|
+
if (cssText) ghost.style.cssText += cssText;
|
|
41
|
+
function resize() {
|
|
42
|
+
win.requestAnimationFrame(() => {
|
|
43
|
+
ghost.innerHTML = input.value;
|
|
44
|
+
const rect = win.getComputedStyle(ghost);
|
|
45
|
+
input?.style.setProperty("width", rect.width);
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
resize();
|
|
49
|
+
input?.addEventListener("input", resize);
|
|
50
|
+
input?.addEventListener("change", resize);
|
|
51
|
+
return () => {
|
|
52
|
+
doc.body.removeChild(ghost);
|
|
53
|
+
input?.removeEventListener("input", resize);
|
|
54
|
+
input?.removeEventListener("change", resize);
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
//#endregion
|
|
59
|
+
//#region src/shared/auto-resize/autoresize-textarea.ts
|
|
60
|
+
/**
|
|
61
|
+
* Automatically resizes a textarea element based on its content.
|
|
62
|
+
* @param el - The textarea element to resize.
|
|
63
|
+
* @returns A cleanup function to remove event listeners and observers.
|
|
64
|
+
*/
|
|
65
|
+
const autoresizeTextarea = (el) => {
|
|
66
|
+
if (!el) return;
|
|
67
|
+
const style = require_dom_query.getComputedStyle(el);
|
|
68
|
+
const win = require_dom_query.getWindow(el);
|
|
69
|
+
const doc = require_dom_query.getDocument(el);
|
|
70
|
+
const resize = () => {
|
|
71
|
+
requestAnimationFrame(() => {
|
|
72
|
+
el.style.height = "auto";
|
|
73
|
+
let newHeight;
|
|
74
|
+
if (style.boxSizing === "content-box") newHeight = el.scrollHeight - (parseFloat(style.paddingTop) + parseFloat(style.paddingBottom));
|
|
75
|
+
else newHeight = el.scrollHeight + parseFloat(style.borderTopWidth) + parseFloat(style.borderBottomWidth);
|
|
76
|
+
if (style.maxHeight !== "none" && newHeight > parseFloat(style.maxHeight)) {
|
|
77
|
+
if (style.overflowY === "hidden") el.style.overflowY = "scroll";
|
|
78
|
+
newHeight = parseFloat(style.maxHeight);
|
|
79
|
+
} else if (style.overflowY !== "hidden") el.style.overflowY = "hidden";
|
|
80
|
+
el.style.height = `${newHeight}px`;
|
|
81
|
+
});
|
|
82
|
+
};
|
|
83
|
+
el.addEventListener("input", resize);
|
|
84
|
+
el.form?.addEventListener("reset", resize);
|
|
85
|
+
const elementPrototype = Object.getPrototypeOf(el);
|
|
86
|
+
const descriptor = Object.getOwnPropertyDescriptor(elementPrototype, "value");
|
|
87
|
+
Object.defineProperty(el, "value", {
|
|
88
|
+
...descriptor,
|
|
89
|
+
set() {
|
|
90
|
+
descriptor?.set?.apply(this, arguments);
|
|
91
|
+
resize();
|
|
92
|
+
}
|
|
93
|
+
});
|
|
94
|
+
const resizeObserver = new win.ResizeObserver(() => {
|
|
95
|
+
requestAnimationFrame(() => resize());
|
|
96
|
+
});
|
|
97
|
+
resizeObserver.observe(el);
|
|
98
|
+
const attrObserver = new win.MutationObserver(() => resize());
|
|
99
|
+
attrObserver.observe(el, {
|
|
100
|
+
attributes: true,
|
|
101
|
+
attributeFilter: ["rows", "placeholder"]
|
|
102
|
+
});
|
|
103
|
+
doc.fonts?.addEventListener("loadingdone", resize);
|
|
104
|
+
return () => {
|
|
105
|
+
el.removeEventListener("input", resize);
|
|
106
|
+
el.form?.removeEventListener("reset", resize);
|
|
107
|
+
doc.fonts?.removeEventListener("loadingdone", resize);
|
|
108
|
+
resizeObserver.disconnect();
|
|
109
|
+
attrObserver.disconnect();
|
|
110
|
+
};
|
|
111
|
+
};
|
|
112
|
+
|
|
113
|
+
//#endregion
|
|
114
|
+
Object.defineProperty(exports, 'autoResizeInput', {
|
|
115
|
+
enumerable: true,
|
|
116
|
+
get: function () {
|
|
117
|
+
return autoResizeInput;
|
|
118
|
+
}
|
|
119
|
+
});
|
|
120
|
+
Object.defineProperty(exports, 'autoresizeTextarea', {
|
|
121
|
+
enumerable: true,
|
|
122
|
+
get: function () {
|
|
123
|
+
return autoresizeTextarea;
|
|
124
|
+
}
|
|
125
|
+
});
|