@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
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
const require_dom_query = require('./dom-query-CWZdWUGp.cjs');
|
|
2
|
+
|
|
3
|
+
//#region src/shared/focus-visible/index.ts
|
|
4
|
+
function isValidKey(e) {
|
|
5
|
+
return !(e.metaKey || !require_dom_query.isMac() && e.altKey || e.ctrlKey || e.key === "Control" || e.key === "Shift" || e.key === "Meta");
|
|
6
|
+
}
|
|
7
|
+
const nonTextInputTypes = new Set([
|
|
8
|
+
"checkbox",
|
|
9
|
+
"radio",
|
|
10
|
+
"range",
|
|
11
|
+
"color",
|
|
12
|
+
"file",
|
|
13
|
+
"image",
|
|
14
|
+
"button",
|
|
15
|
+
"submit",
|
|
16
|
+
"reset"
|
|
17
|
+
]);
|
|
18
|
+
function isKeyboardFocusEvent(isTextInput, modality, e) {
|
|
19
|
+
const target = e ? require_dom_query.getEventTarget(e) : null;
|
|
20
|
+
const win = require_dom_query.getWindow(target);
|
|
21
|
+
isTextInput = isTextInput || target instanceof win.HTMLInputElement && !nonTextInputTypes.has(target?.type) || target instanceof win.HTMLTextAreaElement || target instanceof win.HTMLElement && target.isContentEditable;
|
|
22
|
+
return !(isTextInput && modality === "keyboard" && e instanceof win.KeyboardEvent && !Reflect.has(FOCUS_VISIBLE_INPUT_KEYS, e.key));
|
|
23
|
+
}
|
|
24
|
+
let currentModality = null;
|
|
25
|
+
let changeHandlers = /* @__PURE__ */ new Set();
|
|
26
|
+
let listenerMap = /* @__PURE__ */ new Map();
|
|
27
|
+
let hasEventBeforeFocus = false;
|
|
28
|
+
let hasBlurredWindowRecently = false;
|
|
29
|
+
const FOCUS_VISIBLE_INPUT_KEYS = {
|
|
30
|
+
Tab: true,
|
|
31
|
+
Escape: true
|
|
32
|
+
};
|
|
33
|
+
function triggerChangeHandlers(modality, e) {
|
|
34
|
+
for (let handler of changeHandlers) handler(modality, e);
|
|
35
|
+
}
|
|
36
|
+
function handleKeyboardEvent(e) {
|
|
37
|
+
hasEventBeforeFocus = true;
|
|
38
|
+
if (isValidKey(e)) {
|
|
39
|
+
currentModality = "keyboard";
|
|
40
|
+
triggerChangeHandlers("keyboard", e);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
function handlePointerEvent(e) {
|
|
44
|
+
currentModality = "pointer";
|
|
45
|
+
if (e.type === "mousedown" || e.type === "pointerdown") {
|
|
46
|
+
hasEventBeforeFocus = true;
|
|
47
|
+
triggerChangeHandlers("pointer", e);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
function handleClickEvent(e) {
|
|
51
|
+
if (require_dom_query.isVirtualClick(e)) {
|
|
52
|
+
hasEventBeforeFocus = true;
|
|
53
|
+
currentModality = "virtual";
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
function handleFocusEvent(e) {
|
|
57
|
+
const target = require_dom_query.getEventTarget(e);
|
|
58
|
+
if (target === require_dom_query.getWindow(target) || target === require_dom_query.getDocument(target)) return;
|
|
59
|
+
if (!hasEventBeforeFocus && !hasBlurredWindowRecently) {
|
|
60
|
+
currentModality = "virtual";
|
|
61
|
+
triggerChangeHandlers("virtual", e);
|
|
62
|
+
}
|
|
63
|
+
hasEventBeforeFocus = false;
|
|
64
|
+
hasBlurredWindowRecently = false;
|
|
65
|
+
}
|
|
66
|
+
function handleWindowBlur() {
|
|
67
|
+
hasEventBeforeFocus = false;
|
|
68
|
+
hasBlurredWindowRecently = true;
|
|
69
|
+
}
|
|
70
|
+
function setupGlobalFocusEvents(root) {
|
|
71
|
+
if (typeof window === "undefined" || listenerMap.get(require_dom_query.getWindow(root))) return;
|
|
72
|
+
const win = require_dom_query.getWindow(root);
|
|
73
|
+
const doc = require_dom_query.getDocument(root);
|
|
74
|
+
let focus = win.HTMLElement.prototype.focus;
|
|
75
|
+
function patchedFocus() {
|
|
76
|
+
currentModality = "virtual";
|
|
77
|
+
triggerChangeHandlers("virtual", null);
|
|
78
|
+
hasEventBeforeFocus = true;
|
|
79
|
+
focus.apply(this, arguments);
|
|
80
|
+
}
|
|
81
|
+
try {
|
|
82
|
+
Object.defineProperty(win.HTMLElement.prototype, "focus", {
|
|
83
|
+
configurable: true,
|
|
84
|
+
value: patchedFocus
|
|
85
|
+
});
|
|
86
|
+
} catch {}
|
|
87
|
+
doc.addEventListener("keydown", handleKeyboardEvent, true);
|
|
88
|
+
doc.addEventListener("keyup", handleKeyboardEvent, true);
|
|
89
|
+
doc.addEventListener("click", handleClickEvent, true);
|
|
90
|
+
win.addEventListener("focus", handleFocusEvent, true);
|
|
91
|
+
win.addEventListener("blur", handleWindowBlur, false);
|
|
92
|
+
if (typeof win.PointerEvent !== "undefined") {
|
|
93
|
+
doc.addEventListener("pointerdown", handlePointerEvent, true);
|
|
94
|
+
doc.addEventListener("pointermove", handlePointerEvent, true);
|
|
95
|
+
doc.addEventListener("pointerup", handlePointerEvent, true);
|
|
96
|
+
} else {
|
|
97
|
+
doc.addEventListener("mousedown", handlePointerEvent, true);
|
|
98
|
+
doc.addEventListener("mousemove", handlePointerEvent, true);
|
|
99
|
+
doc.addEventListener("mouseup", handlePointerEvent, true);
|
|
100
|
+
}
|
|
101
|
+
win.addEventListener("beforeunload", () => {
|
|
102
|
+
tearDownWindowFocusTracking(root);
|
|
103
|
+
}, { once: true });
|
|
104
|
+
listenerMap.set(win, { focus });
|
|
105
|
+
}
|
|
106
|
+
const tearDownWindowFocusTracking = (root, loadListener) => {
|
|
107
|
+
const win = require_dom_query.getWindow(root);
|
|
108
|
+
const doc = require_dom_query.getDocument(root);
|
|
109
|
+
if (loadListener) doc.removeEventListener("DOMContentLoaded", loadListener);
|
|
110
|
+
const listenerData = listenerMap.get(win);
|
|
111
|
+
if (!listenerData) return;
|
|
112
|
+
try {
|
|
113
|
+
Object.defineProperty(win.HTMLElement.prototype, "focus", {
|
|
114
|
+
configurable: true,
|
|
115
|
+
value: listenerData.focus
|
|
116
|
+
});
|
|
117
|
+
} catch {}
|
|
118
|
+
doc.removeEventListener("keydown", handleKeyboardEvent, true);
|
|
119
|
+
doc.removeEventListener("keyup", handleKeyboardEvent, true);
|
|
120
|
+
doc.removeEventListener("click", handleClickEvent, true);
|
|
121
|
+
win.removeEventListener("focus", handleFocusEvent, true);
|
|
122
|
+
win.removeEventListener("blur", handleWindowBlur, false);
|
|
123
|
+
if (typeof win.PointerEvent !== "undefined") {
|
|
124
|
+
doc.removeEventListener("pointerdown", handlePointerEvent, true);
|
|
125
|
+
doc.removeEventListener("pointermove", handlePointerEvent, true);
|
|
126
|
+
doc.removeEventListener("pointerup", handlePointerEvent, true);
|
|
127
|
+
} else {
|
|
128
|
+
doc.removeEventListener("mousedown", handlePointerEvent, true);
|
|
129
|
+
doc.removeEventListener("mousemove", handlePointerEvent, true);
|
|
130
|
+
doc.removeEventListener("mouseup", handlePointerEvent, true);
|
|
131
|
+
}
|
|
132
|
+
listenerMap.delete(win);
|
|
133
|
+
};
|
|
134
|
+
function getInteractionModality() {
|
|
135
|
+
return currentModality;
|
|
136
|
+
}
|
|
137
|
+
function setInteractionModality(modality) {
|
|
138
|
+
currentModality = modality;
|
|
139
|
+
triggerChangeHandlers(modality, null);
|
|
140
|
+
}
|
|
141
|
+
function trackInteractionModality(props) {
|
|
142
|
+
const { onChange, root } = props;
|
|
143
|
+
setupGlobalFocusEvents(root);
|
|
144
|
+
onChange({ modality: currentModality });
|
|
145
|
+
const handler = () => onChange({ modality: currentModality });
|
|
146
|
+
changeHandlers.add(handler);
|
|
147
|
+
return () => {
|
|
148
|
+
changeHandlers.delete(handler);
|
|
149
|
+
};
|
|
150
|
+
}
|
|
151
|
+
function isFocusVisible() {
|
|
152
|
+
return currentModality === "keyboard";
|
|
153
|
+
}
|
|
154
|
+
function trackFocusVisible(props = {}) {
|
|
155
|
+
const { isTextInput, autoFocus, onChange, root } = props;
|
|
156
|
+
setupGlobalFocusEvents(root);
|
|
157
|
+
onChange?.({
|
|
158
|
+
isFocusVisible: autoFocus || isFocusVisible(),
|
|
159
|
+
modality: currentModality
|
|
160
|
+
});
|
|
161
|
+
const handler = (modality, e) => {
|
|
162
|
+
if (!isKeyboardFocusEvent(!!isTextInput, modality, e)) return;
|
|
163
|
+
onChange?.({
|
|
164
|
+
isFocusVisible: isFocusVisible(),
|
|
165
|
+
modality
|
|
166
|
+
});
|
|
167
|
+
};
|
|
168
|
+
changeHandlers.add(handler);
|
|
169
|
+
return () => {
|
|
170
|
+
changeHandlers.delete(handler);
|
|
171
|
+
};
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
//#endregion
|
|
175
|
+
Object.defineProperty(exports, 'getInteractionModality', {
|
|
176
|
+
enumerable: true,
|
|
177
|
+
get: function () {
|
|
178
|
+
return getInteractionModality;
|
|
179
|
+
}
|
|
180
|
+
});
|
|
181
|
+
Object.defineProperty(exports, 'isFocusVisible', {
|
|
182
|
+
enumerable: true,
|
|
183
|
+
get: function () {
|
|
184
|
+
return isFocusVisible;
|
|
185
|
+
}
|
|
186
|
+
});
|
|
187
|
+
Object.defineProperty(exports, 'listenerMap', {
|
|
188
|
+
enumerable: true,
|
|
189
|
+
get: function () {
|
|
190
|
+
return listenerMap;
|
|
191
|
+
}
|
|
192
|
+
});
|
|
193
|
+
Object.defineProperty(exports, 'setInteractionModality', {
|
|
194
|
+
enumerable: true,
|
|
195
|
+
get: function () {
|
|
196
|
+
return setInteractionModality;
|
|
197
|
+
}
|
|
198
|
+
});
|
|
199
|
+
Object.defineProperty(exports, 'trackFocusVisible', {
|
|
200
|
+
enumerable: true,
|
|
201
|
+
get: function () {
|
|
202
|
+
return trackFocusVisible;
|
|
203
|
+
}
|
|
204
|
+
});
|
|
205
|
+
Object.defineProperty(exports, 'trackInteractionModality', {
|
|
206
|
+
enumerable: true,
|
|
207
|
+
get: function () {
|
|
208
|
+
return trackInteractionModality;
|
|
209
|
+
}
|
|
210
|
+
});
|
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
import { Lt as isMac, Qt as getDocument, Tt as isVirtualClick, ft as getEventTarget, rn as getWindow } from "./dom-query-DFCRhyj1.mjs";
|
|
2
|
+
|
|
3
|
+
//#region src/shared/focus-visible/index.ts
|
|
4
|
+
function isValidKey(e) {
|
|
5
|
+
return !(e.metaKey || !isMac() && e.altKey || e.ctrlKey || e.key === "Control" || e.key === "Shift" || e.key === "Meta");
|
|
6
|
+
}
|
|
7
|
+
const nonTextInputTypes = new Set([
|
|
8
|
+
"checkbox",
|
|
9
|
+
"radio",
|
|
10
|
+
"range",
|
|
11
|
+
"color",
|
|
12
|
+
"file",
|
|
13
|
+
"image",
|
|
14
|
+
"button",
|
|
15
|
+
"submit",
|
|
16
|
+
"reset"
|
|
17
|
+
]);
|
|
18
|
+
function isKeyboardFocusEvent(isTextInput, modality, e) {
|
|
19
|
+
const target = e ? getEventTarget(e) : null;
|
|
20
|
+
const win = getWindow(target);
|
|
21
|
+
isTextInput = isTextInput || target instanceof win.HTMLInputElement && !nonTextInputTypes.has(target?.type) || target instanceof win.HTMLTextAreaElement || target instanceof win.HTMLElement && target.isContentEditable;
|
|
22
|
+
return !(isTextInput && modality === "keyboard" && e instanceof win.KeyboardEvent && !Reflect.has(FOCUS_VISIBLE_INPUT_KEYS, e.key));
|
|
23
|
+
}
|
|
24
|
+
let currentModality = null;
|
|
25
|
+
let changeHandlers = /* @__PURE__ */ new Set();
|
|
26
|
+
let listenerMap = /* @__PURE__ */ new Map();
|
|
27
|
+
let hasEventBeforeFocus = false;
|
|
28
|
+
let hasBlurredWindowRecently = false;
|
|
29
|
+
const FOCUS_VISIBLE_INPUT_KEYS = {
|
|
30
|
+
Tab: true,
|
|
31
|
+
Escape: true
|
|
32
|
+
};
|
|
33
|
+
function triggerChangeHandlers(modality, e) {
|
|
34
|
+
for (let handler of changeHandlers) handler(modality, e);
|
|
35
|
+
}
|
|
36
|
+
function handleKeyboardEvent(e) {
|
|
37
|
+
hasEventBeforeFocus = true;
|
|
38
|
+
if (isValidKey(e)) {
|
|
39
|
+
currentModality = "keyboard";
|
|
40
|
+
triggerChangeHandlers("keyboard", e);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
function handlePointerEvent(e) {
|
|
44
|
+
currentModality = "pointer";
|
|
45
|
+
if (e.type === "mousedown" || e.type === "pointerdown") {
|
|
46
|
+
hasEventBeforeFocus = true;
|
|
47
|
+
triggerChangeHandlers("pointer", e);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
function handleClickEvent(e) {
|
|
51
|
+
if (isVirtualClick(e)) {
|
|
52
|
+
hasEventBeforeFocus = true;
|
|
53
|
+
currentModality = "virtual";
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
function handleFocusEvent(e) {
|
|
57
|
+
const target = getEventTarget(e);
|
|
58
|
+
if (target === getWindow(target) || target === getDocument(target)) return;
|
|
59
|
+
if (!hasEventBeforeFocus && !hasBlurredWindowRecently) {
|
|
60
|
+
currentModality = "virtual";
|
|
61
|
+
triggerChangeHandlers("virtual", e);
|
|
62
|
+
}
|
|
63
|
+
hasEventBeforeFocus = false;
|
|
64
|
+
hasBlurredWindowRecently = false;
|
|
65
|
+
}
|
|
66
|
+
function handleWindowBlur() {
|
|
67
|
+
hasEventBeforeFocus = false;
|
|
68
|
+
hasBlurredWindowRecently = true;
|
|
69
|
+
}
|
|
70
|
+
function setupGlobalFocusEvents(root) {
|
|
71
|
+
if (typeof window === "undefined" || listenerMap.get(getWindow(root))) return;
|
|
72
|
+
const win = getWindow(root);
|
|
73
|
+
const doc = getDocument(root);
|
|
74
|
+
let focus = win.HTMLElement.prototype.focus;
|
|
75
|
+
function patchedFocus() {
|
|
76
|
+
currentModality = "virtual";
|
|
77
|
+
triggerChangeHandlers("virtual", null);
|
|
78
|
+
hasEventBeforeFocus = true;
|
|
79
|
+
focus.apply(this, arguments);
|
|
80
|
+
}
|
|
81
|
+
try {
|
|
82
|
+
Object.defineProperty(win.HTMLElement.prototype, "focus", {
|
|
83
|
+
configurable: true,
|
|
84
|
+
value: patchedFocus
|
|
85
|
+
});
|
|
86
|
+
} catch {}
|
|
87
|
+
doc.addEventListener("keydown", handleKeyboardEvent, true);
|
|
88
|
+
doc.addEventListener("keyup", handleKeyboardEvent, true);
|
|
89
|
+
doc.addEventListener("click", handleClickEvent, true);
|
|
90
|
+
win.addEventListener("focus", handleFocusEvent, true);
|
|
91
|
+
win.addEventListener("blur", handleWindowBlur, false);
|
|
92
|
+
if (typeof win.PointerEvent !== "undefined") {
|
|
93
|
+
doc.addEventListener("pointerdown", handlePointerEvent, true);
|
|
94
|
+
doc.addEventListener("pointermove", handlePointerEvent, true);
|
|
95
|
+
doc.addEventListener("pointerup", handlePointerEvent, true);
|
|
96
|
+
} else {
|
|
97
|
+
doc.addEventListener("mousedown", handlePointerEvent, true);
|
|
98
|
+
doc.addEventListener("mousemove", handlePointerEvent, true);
|
|
99
|
+
doc.addEventListener("mouseup", handlePointerEvent, true);
|
|
100
|
+
}
|
|
101
|
+
win.addEventListener("beforeunload", () => {
|
|
102
|
+
tearDownWindowFocusTracking(root);
|
|
103
|
+
}, { once: true });
|
|
104
|
+
listenerMap.set(win, { focus });
|
|
105
|
+
}
|
|
106
|
+
const tearDownWindowFocusTracking = (root, loadListener) => {
|
|
107
|
+
const win = getWindow(root);
|
|
108
|
+
const doc = getDocument(root);
|
|
109
|
+
if (loadListener) doc.removeEventListener("DOMContentLoaded", loadListener);
|
|
110
|
+
const listenerData = listenerMap.get(win);
|
|
111
|
+
if (!listenerData) return;
|
|
112
|
+
try {
|
|
113
|
+
Object.defineProperty(win.HTMLElement.prototype, "focus", {
|
|
114
|
+
configurable: true,
|
|
115
|
+
value: listenerData.focus
|
|
116
|
+
});
|
|
117
|
+
} catch {}
|
|
118
|
+
doc.removeEventListener("keydown", handleKeyboardEvent, true);
|
|
119
|
+
doc.removeEventListener("keyup", handleKeyboardEvent, true);
|
|
120
|
+
doc.removeEventListener("click", handleClickEvent, true);
|
|
121
|
+
win.removeEventListener("focus", handleFocusEvent, true);
|
|
122
|
+
win.removeEventListener("blur", handleWindowBlur, false);
|
|
123
|
+
if (typeof win.PointerEvent !== "undefined") {
|
|
124
|
+
doc.removeEventListener("pointerdown", handlePointerEvent, true);
|
|
125
|
+
doc.removeEventListener("pointermove", handlePointerEvent, true);
|
|
126
|
+
doc.removeEventListener("pointerup", handlePointerEvent, true);
|
|
127
|
+
} else {
|
|
128
|
+
doc.removeEventListener("mousedown", handlePointerEvent, true);
|
|
129
|
+
doc.removeEventListener("mousemove", handlePointerEvent, true);
|
|
130
|
+
doc.removeEventListener("mouseup", handlePointerEvent, true);
|
|
131
|
+
}
|
|
132
|
+
listenerMap.delete(win);
|
|
133
|
+
};
|
|
134
|
+
function getInteractionModality() {
|
|
135
|
+
return currentModality;
|
|
136
|
+
}
|
|
137
|
+
function setInteractionModality(modality) {
|
|
138
|
+
currentModality = modality;
|
|
139
|
+
triggerChangeHandlers(modality, null);
|
|
140
|
+
}
|
|
141
|
+
function trackInteractionModality(props) {
|
|
142
|
+
const { onChange, root } = props;
|
|
143
|
+
setupGlobalFocusEvents(root);
|
|
144
|
+
onChange({ modality: currentModality });
|
|
145
|
+
const handler = () => onChange({ modality: currentModality });
|
|
146
|
+
changeHandlers.add(handler);
|
|
147
|
+
return () => {
|
|
148
|
+
changeHandlers.delete(handler);
|
|
149
|
+
};
|
|
150
|
+
}
|
|
151
|
+
function isFocusVisible() {
|
|
152
|
+
return currentModality === "keyboard";
|
|
153
|
+
}
|
|
154
|
+
function trackFocusVisible(props = {}) {
|
|
155
|
+
const { isTextInput, autoFocus, onChange, root } = props;
|
|
156
|
+
setupGlobalFocusEvents(root);
|
|
157
|
+
onChange?.({
|
|
158
|
+
isFocusVisible: autoFocus || isFocusVisible(),
|
|
159
|
+
modality: currentModality
|
|
160
|
+
});
|
|
161
|
+
const handler = (modality, e) => {
|
|
162
|
+
if (!isKeyboardFocusEvent(!!isTextInput, modality, e)) return;
|
|
163
|
+
onChange?.({
|
|
164
|
+
isFocusVisible: isFocusVisible(),
|
|
165
|
+
modality
|
|
166
|
+
});
|
|
167
|
+
};
|
|
168
|
+
changeHandlers.add(handler);
|
|
169
|
+
return () => {
|
|
170
|
+
changeHandlers.delete(handler);
|
|
171
|
+
};
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
//#endregion
|
|
175
|
+
export { trackFocusVisible as a, setInteractionModality as i, isFocusVisible as n, trackInteractionModality as o, listenerMap as r, getInteractionModality as t };
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
require('./dom-query-CWZdWUGp.cjs');
|
|
2
|
+
const require_focus_visible = require('./focus-visible-DYTWdWpa.cjs');
|
|
3
|
+
|
|
4
|
+
exports.getInteractionModality = require_focus_visible.getInteractionModality;
|
|
5
|
+
exports.isFocusVisible = require_focus_visible.isFocusVisible;
|
|
6
|
+
exports.listenerMap = require_focus_visible.listenerMap;
|
|
7
|
+
exports.setInteractionModality = require_focus_visible.setInteractionModality;
|
|
8
|
+
exports.trackFocusVisible = require_focus_visible.trackFocusVisible;
|
|
9
|
+
exports.trackInteractionModality = require_focus_visible.trackInteractionModality;
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
//#region src/shared/focus-visible/index.d.ts
|
|
2
|
+
type Modality = "keyboard" | "pointer" | "virtual";
|
|
3
|
+
type RootNode = Document | ShadowRoot | Node;
|
|
4
|
+
interface GlobalListenerData {
|
|
5
|
+
focus: VoidFunction;
|
|
6
|
+
}
|
|
7
|
+
declare let listenerMap: Map<Window, GlobalListenerData>;
|
|
8
|
+
declare function getInteractionModality(): Modality | null;
|
|
9
|
+
declare function setInteractionModality(modality: Modality): void;
|
|
10
|
+
interface InteractionModalityChangeDetails {
|
|
11
|
+
modality: Modality | null;
|
|
12
|
+
}
|
|
13
|
+
interface InteractionModalityProps {
|
|
14
|
+
root?: RootNode | undefined;
|
|
15
|
+
onChange: (details: InteractionModalityChangeDetails) => void;
|
|
16
|
+
}
|
|
17
|
+
declare function trackInteractionModality(props: InteractionModalityProps): VoidFunction;
|
|
18
|
+
declare function isFocusVisible(): boolean;
|
|
19
|
+
interface FocusVisibleChangeDetails {
|
|
20
|
+
isFocusVisible: boolean;
|
|
21
|
+
modality: Modality | null;
|
|
22
|
+
}
|
|
23
|
+
interface FocusVisibleProps {
|
|
24
|
+
root?: RootNode | undefined;
|
|
25
|
+
isTextInput?: boolean | undefined;
|
|
26
|
+
autoFocus?: boolean | undefined;
|
|
27
|
+
onChange?: ((details: FocusVisibleChangeDetails) => void) | undefined;
|
|
28
|
+
}
|
|
29
|
+
declare function trackFocusVisible(props?: FocusVisibleProps): VoidFunction;
|
|
30
|
+
//#endregion
|
|
31
|
+
export { FocusVisibleChangeDetails, FocusVisibleProps, InteractionModalityChangeDetails, InteractionModalityProps, Modality, getInteractionModality, isFocusVisible, listenerMap, setInteractionModality, trackFocusVisible, trackInteractionModality };
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
//#region src/shared/focus-visible/index.d.ts
|
|
2
|
+
type Modality = "keyboard" | "pointer" | "virtual";
|
|
3
|
+
type RootNode = Document | ShadowRoot | Node;
|
|
4
|
+
interface GlobalListenerData {
|
|
5
|
+
focus: VoidFunction;
|
|
6
|
+
}
|
|
7
|
+
declare let listenerMap: Map<Window, GlobalListenerData>;
|
|
8
|
+
declare function getInteractionModality(): Modality | null;
|
|
9
|
+
declare function setInteractionModality(modality: Modality): void;
|
|
10
|
+
interface InteractionModalityChangeDetails {
|
|
11
|
+
modality: Modality | null;
|
|
12
|
+
}
|
|
13
|
+
interface InteractionModalityProps {
|
|
14
|
+
root?: RootNode | undefined;
|
|
15
|
+
onChange: (details: InteractionModalityChangeDetails) => void;
|
|
16
|
+
}
|
|
17
|
+
declare function trackInteractionModality(props: InteractionModalityProps): VoidFunction;
|
|
18
|
+
declare function isFocusVisible(): boolean;
|
|
19
|
+
interface FocusVisibleChangeDetails {
|
|
20
|
+
isFocusVisible: boolean;
|
|
21
|
+
modality: Modality | null;
|
|
22
|
+
}
|
|
23
|
+
interface FocusVisibleProps {
|
|
24
|
+
root?: RootNode | undefined;
|
|
25
|
+
isTextInput?: boolean | undefined;
|
|
26
|
+
autoFocus?: boolean | undefined;
|
|
27
|
+
onChange?: ((details: FocusVisibleChangeDetails) => void) | undefined;
|
|
28
|
+
}
|
|
29
|
+
declare function trackFocusVisible(props?: FocusVisibleProps): VoidFunction;
|
|
30
|
+
//#endregion
|
|
31
|
+
export { FocusVisibleChangeDetails, FocusVisibleProps, InteractionModalityChangeDetails, InteractionModalityProps, Modality, getInteractionModality, isFocusVisible, listenerMap, setInteractionModality, trackFocusVisible, trackInteractionModality };
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import "./dom-query-DFCRhyj1.mjs";
|
|
2
|
+
import { a as trackFocusVisible, i as setInteractionModality, n as isFocusVisible, o as trackInteractionModality, r as listenerMap, t as getInteractionModality } from "./focus-visible-irppYatv.mjs";
|
|
3
|
+
|
|
4
|
+
export { getInteractionModality, isFocusVisible, listenerMap, setInteractionModality, trackFocusVisible, trackInteractionModality };
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
//#region src/shared/utils/functions.d.ts
|
|
2
|
+
type MaybeFunction<T> = T | (() => T);
|
|
3
|
+
type Nullable<T> = T | null | undefined;
|
|
4
|
+
declare const runIfFn: <T>(v: T | undefined, ...a: T extends ((...a: any[]) => void) ? Parameters<T> : never) => T extends ((...a: any[]) => void) ? NonNullable<ReturnType<T>> : NonNullable<T>;
|
|
5
|
+
declare const cast: <T>(v: unknown) => T;
|
|
6
|
+
declare const identity: (v: VoidFunction) => void;
|
|
7
|
+
declare const noop: () => void;
|
|
8
|
+
declare const callAll: <T extends (...a: any[]) => void>(...fns: (T | null | undefined)[]) => (...a: Parameters<T>) => void;
|
|
9
|
+
declare const uuid: () => string;
|
|
10
|
+
declare function match<V extends string | number = string, R = unknown>(key: V, record: Record<V, R | ((...args: any[]) => R)>, ...args: any[]): R;
|
|
11
|
+
declare const tryCatch: <R>(fn: () => R, fallback: () => R) => R;
|
|
12
|
+
declare function throttle<T extends (...args: any[]) => void>(fn: T, wait?: number): T;
|
|
13
|
+
declare function debounce<T extends (...args: any[]) => void>(fn: T, wait?: number): T;
|
|
14
|
+
//#endregion
|
|
15
|
+
export { debounce as a, noop as c, tryCatch as d, uuid as f, cast as i, runIfFn as l, Nullable as n, identity as o, callAll as r, match as s, MaybeFunction as t, throttle as u };
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
//#region src/shared/utils/functions.d.ts
|
|
2
|
+
type MaybeFunction<T> = T | (() => T);
|
|
3
|
+
type Nullable<T> = T | null | undefined;
|
|
4
|
+
declare const runIfFn: <T>(v: T | undefined, ...a: T extends ((...a: any[]) => void) ? Parameters<T> : never) => T extends ((...a: any[]) => void) ? NonNullable<ReturnType<T>> : NonNullable<T>;
|
|
5
|
+
declare const cast: <T>(v: unknown) => T;
|
|
6
|
+
declare const identity: (v: VoidFunction) => void;
|
|
7
|
+
declare const noop: () => void;
|
|
8
|
+
declare const callAll: <T extends (...a: any[]) => void>(...fns: (T | null | undefined)[]) => (...a: Parameters<T>) => void;
|
|
9
|
+
declare const uuid: () => string;
|
|
10
|
+
declare function match<V extends string | number = string, R = unknown>(key: V, record: Record<V, R | ((...args: any[]) => R)>, ...args: any[]): R;
|
|
11
|
+
declare const tryCatch: <R>(fn: () => R, fallback: () => R) => R;
|
|
12
|
+
declare function throttle<T extends (...args: any[]) => void>(fn: T, wait?: number): T;
|
|
13
|
+
declare function debounce<T extends (...args: any[]) => void>(fn: T, wait?: number): T;
|
|
14
|
+
//#endregion
|
|
15
|
+
export { debounce as a, noop as c, tryCatch as d, uuid as f, cast as i, runIfFn as l, Nullable as n, identity as o, callAll as r, match as s, MaybeFunction as t, throttle as u };
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
|
|
2
|
+
//#region src/shared/highlight-word/normalize-span.ts
|
|
3
|
+
const normalizeSpan = (spans, len) => {
|
|
4
|
+
const result = [];
|
|
5
|
+
const append = (start, end, match) => {
|
|
6
|
+
if (end - start > 0) result.push({
|
|
7
|
+
start,
|
|
8
|
+
end,
|
|
9
|
+
match
|
|
10
|
+
});
|
|
11
|
+
};
|
|
12
|
+
if (spans.length === 0) append(0, len, false);
|
|
13
|
+
else {
|
|
14
|
+
let lastIndex = 0;
|
|
15
|
+
for (const chunk of spans) {
|
|
16
|
+
append(lastIndex, chunk.start, false);
|
|
17
|
+
append(chunk.start, chunk.end, true);
|
|
18
|
+
lastIndex = chunk.end;
|
|
19
|
+
}
|
|
20
|
+
append(lastIndex, len, false);
|
|
21
|
+
}
|
|
22
|
+
return result;
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
//#endregion
|
|
26
|
+
//#region src/shared/highlight-word/escape-regex.ts
|
|
27
|
+
const escapeRegex = (term) => term.replace(/[|\\{}()[\]^$+*?.-]/g, (char) => `\\${char}`);
|
|
28
|
+
|
|
29
|
+
//#endregion
|
|
30
|
+
//#region src/shared/highlight-word/highlight-first.ts
|
|
31
|
+
function highlightFirst(props) {
|
|
32
|
+
const { text, query, ignoreCase, exactMatch } = props;
|
|
33
|
+
if (exactMatch) {
|
|
34
|
+
const escapedQuery = escapeRegex(query);
|
|
35
|
+
const regex = new RegExp(`\\b(${escapedQuery})\\b`, ignoreCase ? "i" : "");
|
|
36
|
+
const match = text.match(regex);
|
|
37
|
+
if (!match || match.index === void 0) return [{
|
|
38
|
+
text,
|
|
39
|
+
match: false
|
|
40
|
+
}];
|
|
41
|
+
const start$1 = match.index;
|
|
42
|
+
return normalizeSpan([{
|
|
43
|
+
start: start$1,
|
|
44
|
+
end: start$1 + match[0].length
|
|
45
|
+
}], text.length).map((chunk) => ({
|
|
46
|
+
text: text.slice(chunk.start, chunk.end),
|
|
47
|
+
match: !!chunk.match
|
|
48
|
+
}));
|
|
49
|
+
}
|
|
50
|
+
const searchText = ignoreCase ? text.toLowerCase() : text;
|
|
51
|
+
const searchQuery = ignoreCase ? typeof query === "string" ? query.toLowerCase() : query : query;
|
|
52
|
+
const start = typeof searchText === "string" ? searchText.indexOf(searchQuery) : -1;
|
|
53
|
+
if (start === -1) return [{
|
|
54
|
+
text,
|
|
55
|
+
match: false
|
|
56
|
+
}];
|
|
57
|
+
return normalizeSpan([{
|
|
58
|
+
start,
|
|
59
|
+
end: start + searchQuery.length
|
|
60
|
+
}], text.length).map((chunk) => ({
|
|
61
|
+
text: text.slice(chunk.start, chunk.end),
|
|
62
|
+
match: !!chunk.match
|
|
63
|
+
}));
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
//#endregion
|
|
67
|
+
//#region src/shared/highlight-word/highlight-multiple.ts
|
|
68
|
+
const buildRegex = (queryProp, flags, exactMatch) => {
|
|
69
|
+
const query = queryProp.filter(Boolean).map((text) => escapeRegex(text));
|
|
70
|
+
const pattern = exactMatch ? `\\b(${query.join("|")})\\b` : `(${query.join("|")})`;
|
|
71
|
+
return new RegExp(pattern, flags);
|
|
72
|
+
};
|
|
73
|
+
const getRegexFlags = (ignoreCase, matchAll = true) => `${ignoreCase ? "i" : ""}${matchAll ? "g" : ""}`;
|
|
74
|
+
function highlightMultiple(props) {
|
|
75
|
+
const { text, query, ignoreCase, matchAll, exactMatch } = props;
|
|
76
|
+
if (query.length === 0) return [{
|
|
77
|
+
text,
|
|
78
|
+
match: false
|
|
79
|
+
}];
|
|
80
|
+
const flags = getRegexFlags(ignoreCase, matchAll);
|
|
81
|
+
const regex = buildRegex(Array.isArray(query) ? query : [query], flags, exactMatch);
|
|
82
|
+
return normalizeSpan([...text.matchAll(regex)].map((match) => ({
|
|
83
|
+
start: match.index || 0,
|
|
84
|
+
end: (match.index || 0) + match[0].length
|
|
85
|
+
})), props.text.length).map((chunk) => ({
|
|
86
|
+
text: props.text.slice(chunk.start, chunk.end),
|
|
87
|
+
match: !!chunk.match
|
|
88
|
+
}));
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
//#endregion
|
|
92
|
+
//#region src/shared/highlight-word/highlight.ts
|
|
93
|
+
const highlightWord = (props) => {
|
|
94
|
+
if (props.matchAll == null) props.matchAll = Array.isArray(props.query);
|
|
95
|
+
if (!props.matchAll && Array.isArray(props.query)) throw new Error("matchAll must be true when using multiple queries");
|
|
96
|
+
return props.matchAll ? highlightMultiple(props) : highlightFirst(props);
|
|
97
|
+
};
|
|
98
|
+
|
|
99
|
+
//#endregion
|
|
100
|
+
exports.highlightWord = highlightWord;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
//#region src/shared/highlight-word/types.d.ts
|
|
2
|
+
interface HighlightRegexOptions {
|
|
3
|
+
ignoreCase?: boolean | undefined;
|
|
4
|
+
matchAll?: boolean | undefined;
|
|
5
|
+
exactMatch?: boolean | undefined;
|
|
6
|
+
}
|
|
7
|
+
interface HighlightWordProps extends HighlightRegexOptions {
|
|
8
|
+
text: string;
|
|
9
|
+
query: string | string[];
|
|
10
|
+
}
|
|
11
|
+
interface HighlightChunk {
|
|
12
|
+
text: string;
|
|
13
|
+
match: boolean;
|
|
14
|
+
}
|
|
15
|
+
interface HighlightSpan {
|
|
16
|
+
start: number;
|
|
17
|
+
end: number;
|
|
18
|
+
match?: boolean | undefined;
|
|
19
|
+
}
|
|
20
|
+
//#endregion
|
|
21
|
+
//#region src/shared/highlight-word/highlight.d.ts
|
|
22
|
+
declare const highlightWord: (props: HighlightWordProps) => HighlightChunk[];
|
|
23
|
+
//#endregion
|
|
24
|
+
export { HighlightChunk, HighlightSpan, HighlightWordProps, highlightWord };
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
//#region src/shared/highlight-word/types.d.ts
|
|
2
|
+
interface HighlightRegexOptions {
|
|
3
|
+
ignoreCase?: boolean | undefined;
|
|
4
|
+
matchAll?: boolean | undefined;
|
|
5
|
+
exactMatch?: boolean | undefined;
|
|
6
|
+
}
|
|
7
|
+
interface HighlightWordProps extends HighlightRegexOptions {
|
|
8
|
+
text: string;
|
|
9
|
+
query: string | string[];
|
|
10
|
+
}
|
|
11
|
+
interface HighlightChunk {
|
|
12
|
+
text: string;
|
|
13
|
+
match: boolean;
|
|
14
|
+
}
|
|
15
|
+
interface HighlightSpan {
|
|
16
|
+
start: number;
|
|
17
|
+
end: number;
|
|
18
|
+
match?: boolean | undefined;
|
|
19
|
+
}
|
|
20
|
+
//#endregion
|
|
21
|
+
//#region src/shared/highlight-word/highlight.d.ts
|
|
22
|
+
declare const highlightWord: (props: HighlightWordProps) => HighlightChunk[];
|
|
23
|
+
//#endregion
|
|
24
|
+
export { HighlightChunk, HighlightSpan, HighlightWordProps, highlightWord };
|