@vuetify/nightly 3.9.0-beta.0-dev.2025-06-24 → 3.9.0-beta.1-dev.2025-06-28

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (212) hide show
  1. package/CHANGELOG.md +4 -83
  2. package/dist/_component-variables-labs.sass +1 -0
  3. package/dist/json/attributes.json +2471 -2411
  4. package/dist/json/importMap-labs.json +34 -30
  5. package/dist/json/importMap.json +146 -146
  6. package/dist/json/tags.json +20 -0
  7. package/dist/json/web-types.json +4808 -4642
  8. package/dist/vuetify-labs.cjs +750 -15
  9. package/dist/vuetify-labs.css +5609 -5358
  10. package/dist/vuetify-labs.d.ts +300 -54
  11. package/dist/vuetify-labs.esm.js +750 -16
  12. package/dist/vuetify-labs.esm.js.map +1 -1
  13. package/dist/vuetify-labs.js +750 -15
  14. package/dist/vuetify-labs.min.css +2 -2
  15. package/dist/vuetify.cjs +357 -15
  16. package/dist/vuetify.cjs.map +1 -1
  17. package/dist/vuetify.css +3235 -3226
  18. package/dist/vuetify.d.ts +73 -53
  19. package/dist/vuetify.esm.js +357 -16
  20. package/dist/vuetify.esm.js.map +1 -1
  21. package/dist/vuetify.js +357 -15
  22. package/dist/vuetify.js.map +1 -1
  23. package/dist/vuetify.min.css +2 -2
  24. package/dist/vuetify.min.js +292 -253
  25. package/dist/vuetify.min.js.map +1 -1
  26. package/lib/components/VKbd/VKbd.css +14 -5
  27. package/lib/components/VKbd/VKbd.js.map +1 -1
  28. package/lib/components/VKbd/VKbd.scss +26 -0
  29. package/lib/components/VKbd/_variables.scss +12 -6
  30. package/lib/components/VKbd/index.js.map +1 -1
  31. package/lib/components/VTreeview/VTreeviewChildren.d.ts +13 -0
  32. package/lib/components/VTreeview/VTreeviewChildren.js +2 -1
  33. package/lib/components/VTreeview/VTreeviewChildren.js.map +1 -1
  34. package/lib/components/VTreeview/VTreeviewItem.js +3 -3
  35. package/lib/components/VTreeview/VTreeviewItem.js.map +1 -1
  36. package/lib/composables/hotkey/hotkey-parsing.d.ts +15 -0
  37. package/lib/composables/hotkey/hotkey-parsing.js +154 -0
  38. package/lib/composables/hotkey/hotkey-parsing.js.map +1 -0
  39. package/lib/composables/hotkey/hotkey.d.ts +9 -0
  40. package/lib/composables/{hotkey.js → hotkey/hotkey.js} +31 -39
  41. package/lib/composables/hotkey/hotkey.js.map +1 -0
  42. package/lib/composables/hotkey/index.d.ts +1 -0
  43. package/lib/composables/hotkey/index.js +2 -0
  44. package/lib/composables/hotkey/index.js.map +1 -0
  45. package/lib/composables/hotkey/key-aliases.d.ts +14 -0
  46. package/lib/composables/hotkey/key-aliases.js +38 -0
  47. package/lib/composables/hotkey/key-aliases.js.map +1 -0
  48. package/lib/composables/icons.d.ts +11 -0
  49. package/lib/composables/icons.js.map +1 -1
  50. package/lib/composables/index.d.ts +1 -0
  51. package/lib/composables/index.js +1 -0
  52. package/lib/composables/index.js.map +1 -1
  53. package/lib/composables/nested/nested.js +8 -8
  54. package/lib/composables/nested/nested.js.map +1 -1
  55. package/lib/entry-bundler.js +1 -1
  56. package/lib/framework.d.ts +74 -53
  57. package/lib/framework.js +1 -1
  58. package/lib/iconsets/fa.js +12 -1
  59. package/lib/iconsets/fa.js.map +1 -1
  60. package/lib/iconsets/fa4.js +12 -1
  61. package/lib/iconsets/fa4.js.map +1 -1
  62. package/lib/iconsets/md.js +12 -1
  63. package/lib/iconsets/md.js.map +1 -1
  64. package/lib/iconsets/mdi-svg.js +12 -1
  65. package/lib/iconsets/mdi-svg.js.map +1 -1
  66. package/lib/iconsets/mdi.js +12 -1
  67. package/lib/iconsets/mdi.js.map +1 -1
  68. package/lib/labs/VHotkey/VHotkey.css +242 -0
  69. package/lib/labs/VHotkey/VHotkey.d.ts +387 -0
  70. package/lib/labs/VHotkey/VHotkey.js +432 -0
  71. package/lib/labs/VHotkey/VHotkey.js.map +1 -0
  72. package/lib/labs/VHotkey/VHotkey.scss +253 -0
  73. package/lib/labs/VHotkey/_variables.scss +43 -0
  74. package/lib/labs/VHotkey/index.d.ts +1 -0
  75. package/lib/labs/VHotkey/index.js +2 -0
  76. package/lib/labs/VHotkey/index.js.map +1 -0
  77. package/lib/labs/components.d.ts +1 -0
  78. package/lib/labs/components.js +1 -0
  79. package/lib/labs/components.js.map +1 -1
  80. package/lib/locale/af.d.ts +18 -0
  81. package/lib/locale/af.js +18 -0
  82. package/lib/locale/af.js.map +1 -1
  83. package/lib/locale/ar.d.ts +18 -0
  84. package/lib/locale/ar.js +18 -0
  85. package/lib/locale/ar.js.map +1 -1
  86. package/lib/locale/az.d.ts +18 -0
  87. package/lib/locale/az.js +18 -0
  88. package/lib/locale/az.js.map +1 -1
  89. package/lib/locale/bg.d.ts +18 -0
  90. package/lib/locale/bg.js +18 -0
  91. package/lib/locale/bg.js.map +1 -1
  92. package/lib/locale/ca.d.ts +18 -0
  93. package/lib/locale/ca.js +18 -0
  94. package/lib/locale/ca.js.map +1 -1
  95. package/lib/locale/ckb.d.ts +18 -0
  96. package/lib/locale/ckb.js +18 -0
  97. package/lib/locale/ckb.js.map +1 -1
  98. package/lib/locale/cs.d.ts +18 -0
  99. package/lib/locale/cs.js +18 -0
  100. package/lib/locale/cs.js.map +1 -1
  101. package/lib/locale/da.d.ts +18 -0
  102. package/lib/locale/da.js +18 -0
  103. package/lib/locale/da.js.map +1 -1
  104. package/lib/locale/de.d.ts +18 -0
  105. package/lib/locale/de.js +18 -0
  106. package/lib/locale/de.js.map +1 -1
  107. package/lib/locale/el.d.ts +18 -0
  108. package/lib/locale/el.js +18 -0
  109. package/lib/locale/el.js.map +1 -1
  110. package/lib/locale/en.d.ts +18 -0
  111. package/lib/locale/en.js +18 -0
  112. package/lib/locale/en.js.map +1 -1
  113. package/lib/locale/es.d.ts +18 -0
  114. package/lib/locale/es.js +18 -0
  115. package/lib/locale/es.js.map +1 -1
  116. package/lib/locale/et.d.ts +18 -0
  117. package/lib/locale/et.js +18 -0
  118. package/lib/locale/et.js.map +1 -1
  119. package/lib/locale/fa.d.ts +18 -0
  120. package/lib/locale/fa.js +18 -0
  121. package/lib/locale/fa.js.map +1 -1
  122. package/lib/locale/fi.d.ts +18 -0
  123. package/lib/locale/fi.js +18 -0
  124. package/lib/locale/fi.js.map +1 -1
  125. package/lib/locale/fr.d.ts +18 -0
  126. package/lib/locale/fr.js +18 -0
  127. package/lib/locale/fr.js.map +1 -1
  128. package/lib/locale/he.d.ts +18 -0
  129. package/lib/locale/he.js +18 -0
  130. package/lib/locale/he.js.map +1 -1
  131. package/lib/locale/hr.d.ts +18 -0
  132. package/lib/locale/hr.js +18 -0
  133. package/lib/locale/hr.js.map +1 -1
  134. package/lib/locale/hu.d.ts +18 -0
  135. package/lib/locale/hu.js +18 -0
  136. package/lib/locale/hu.js.map +1 -1
  137. package/lib/locale/id.d.ts +18 -0
  138. package/lib/locale/id.js +18 -0
  139. package/lib/locale/id.js.map +1 -1
  140. package/lib/locale/it.d.ts +18 -0
  141. package/lib/locale/it.js +18 -0
  142. package/lib/locale/it.js.map +1 -1
  143. package/lib/locale/ja.d.ts +18 -0
  144. package/lib/locale/ja.js +18 -0
  145. package/lib/locale/ja.js.map +1 -1
  146. package/lib/locale/km.d.ts +18 -0
  147. package/lib/locale/km.js +18 -0
  148. package/lib/locale/km.js.map +1 -1
  149. package/lib/locale/ko.d.ts +18 -0
  150. package/lib/locale/ko.js +18 -0
  151. package/lib/locale/ko.js.map +1 -1
  152. package/lib/locale/lt.d.ts +18 -0
  153. package/lib/locale/lt.js +18 -0
  154. package/lib/locale/lt.js.map +1 -1
  155. package/lib/locale/lv.d.ts +18 -0
  156. package/lib/locale/lv.js +18 -0
  157. package/lib/locale/lv.js.map +1 -1
  158. package/lib/locale/nl.d.ts +18 -0
  159. package/lib/locale/nl.js +18 -0
  160. package/lib/locale/nl.js.map +1 -1
  161. package/lib/locale/no.d.ts +18 -0
  162. package/lib/locale/no.js +18 -0
  163. package/lib/locale/no.js.map +1 -1
  164. package/lib/locale/pl.d.ts +18 -0
  165. package/lib/locale/pl.js +18 -0
  166. package/lib/locale/pl.js.map +1 -1
  167. package/lib/locale/pt.d.ts +18 -0
  168. package/lib/locale/pt.js +18 -0
  169. package/lib/locale/pt.js.map +1 -1
  170. package/lib/locale/ro.d.ts +18 -0
  171. package/lib/locale/ro.js +18 -0
  172. package/lib/locale/ro.js.map +1 -1
  173. package/lib/locale/ru.d.ts +18 -0
  174. package/lib/locale/ru.js +18 -0
  175. package/lib/locale/ru.js.map +1 -1
  176. package/lib/locale/sk.d.ts +18 -0
  177. package/lib/locale/sk.js +18 -0
  178. package/lib/locale/sk.js.map +1 -1
  179. package/lib/locale/sl.d.ts +18 -0
  180. package/lib/locale/sl.js +18 -0
  181. package/lib/locale/sl.js.map +1 -1
  182. package/lib/locale/sr-Cyrl.d.ts +18 -0
  183. package/lib/locale/sr-Cyrl.js +18 -0
  184. package/lib/locale/sr-Cyrl.js.map +1 -1
  185. package/lib/locale/sr-Latn.d.ts +18 -0
  186. package/lib/locale/sr-Latn.js +18 -0
  187. package/lib/locale/sr-Latn.js.map +1 -1
  188. package/lib/locale/sv.d.ts +18 -0
  189. package/lib/locale/sv.js +18 -0
  190. package/lib/locale/sv.js.map +1 -1
  191. package/lib/locale/th.d.ts +18 -0
  192. package/lib/locale/th.js +18 -0
  193. package/lib/locale/th.js.map +1 -1
  194. package/lib/locale/tr.d.ts +18 -0
  195. package/lib/locale/tr.js +18 -0
  196. package/lib/locale/tr.js.map +1 -1
  197. package/lib/locale/uk.d.ts +18 -0
  198. package/lib/locale/uk.js +18 -0
  199. package/lib/locale/uk.js.map +1 -1
  200. package/lib/locale/vi.d.ts +18 -0
  201. package/lib/locale/vi.js +18 -0
  202. package/lib/locale/vi.js.map +1 -1
  203. package/lib/locale/zh-Hans.d.ts +18 -0
  204. package/lib/locale/zh-Hans.js +18 -0
  205. package/lib/locale/zh-Hans.js.map +1 -1
  206. package/lib/locale/zh-Hant.d.ts +18 -0
  207. package/lib/locale/zh-Hant.js +18 -0
  208. package/lib/locale/zh-Hant.js.map +1 -1
  209. package/package.json +1 -1
  210. package/lib/components/VKbd/VKbd.sass +0 -15
  211. package/lib/composables/hotkey.d.ts +0 -9
  212. package/lib/composables/hotkey.js.map +0 -1
@@ -1,10 +1,19 @@
1
1
  .v-kbd {
2
+ font-family: "Roboto", sans-serif;
3
+ align-items: center;
4
+ align-self: stretch;
2
5
  background: rgb(var(--v-theme-kbd));
3
6
  color: rgb(var(--v-theme-on-kbd));
4
- display: inline;
5
- font-size: 85%;
7
+ display: inline-flex;
8
+ font-size: 0.875em;
6
9
  font-weight: normal;
7
- padding: 0.2em 0.4rem;
10
+ line-height: 1;
11
+ justify-content: center;
12
+ min-height: 1em;
13
+ min-width: 20px;
14
+ padding: 3px 6px;
15
+ vertical-align: baseline;
16
+ margin-inline: 1px;
8
17
  }
9
18
  .v-kbd {
10
19
  border-color: rgba(var(--v-border-color), var(--v-border-opacity));
@@ -16,8 +25,8 @@
16
25
  box-shadow: none;
17
26
  }
18
27
  .v-kbd {
19
- box-shadow: 0px 0px 0px 0px var(--v-shadow-key-umbra-opacity, rgba(0, 0, 0, 0.2)), 0px 0px 0px 0px var(--v-shadow-key-penumbra-opacity, rgba(0, 0, 0, 0.14)), 0px 0px 0px 0px var(--v-shadow-key-ambient-opacity, rgba(0, 0, 0, 0.12));
28
+ box-shadow: 0px 2px 1px -1px var(--v-shadow-key-umbra-opacity, rgba(0, 0, 0, 0.2)), 0px 1px 1px 0px var(--v-shadow-key-penumbra-opacity, rgba(0, 0, 0, 0.14)), 0px 1px 3px 0px var(--v-shadow-key-ambient-opacity, rgba(0, 0, 0, 0.12));
20
29
  }
21
30
  .v-kbd {
22
- border-radius: 3px;
31
+ border-radius: 4px;
23
32
  }
@@ -1 +1 @@
1
- {"version":3,"file":"VKbd.js","names":["makeBorderProps","useBorder","useBackgroundColor","makeComponentProps","makeElevationProps","useElevation","makeRoundedProps","useRounded","makeTagProps","makeThemeProps","provideTheme","genericComponent","propsFactory","useRender","makeVKbdProps","color","String","tag","VKbd","name","props","setup","_ref","slots","themeClasses","borderClasses","roundedClasses","backgroundColorClasses","backgroundColorStyles","elevationClasses","_createVNode","_normalizeClass","value","class","_normalizeStyle","style"],"sources":["../../../src/components/VKbd/VKbd.tsx"],"sourcesContent":["// Styles\nimport './VKbd.sass'\n\n// Composables\nimport { makeBorderProps, useBorder } from '@/composables/border'\nimport { useBackgroundColor } from '@/composables/color'\nimport { makeComponentProps } from '@/composables/component'\nimport { makeElevationProps, useElevation } from '@/composables/elevation'\nimport { makeRoundedProps, useRounded } from '@/composables/rounded'\nimport { makeTagProps } from '@/composables/tag'\nimport { makeThemeProps, provideTheme } from '@/composables/theme'\n\n// Utilities\nimport { genericComponent, propsFactory, useRender } from '@/util'\n\nexport const makeVKbdProps = propsFactory({\n color: String,\n\n ...makeBorderProps(),\n ...makeComponentProps(),\n ...makeRoundedProps(),\n ...makeTagProps({ tag: 'kbd' }),\n ...makeThemeProps(),\n ...makeElevationProps(),\n}, 'VKbd')\n\nexport const VKbd = genericComponent()({\n name: 'VKbd',\n\n props: makeVKbdProps(),\n\n setup (props, { slots }) {\n const { themeClasses } = provideTheme(props)\n const { borderClasses } = useBorder(props)\n const { roundedClasses } = useRounded(props)\n const { backgroundColorClasses, backgroundColorStyles } = useBackgroundColor(() => props.color)\n const { elevationClasses } = useElevation(props)\n\n useRender(() => (\n <props.tag\n class={[\n 'v-kbd',\n themeClasses.value,\n backgroundColorClasses.value,\n borderClasses.value,\n elevationClasses.value,\n roundedClasses.value,\n props.class,\n ]}\n style={[\n backgroundColorStyles.value,\n props.style,\n ]}\n v-slots={ slots }\n />\n ))\n\n return {}\n },\n})\n\nexport type VKbd = InstanceType<typeof VKbd>\n"],"mappings":";AAAA;AACA;;AAEA;AAAA,SACSA,eAAe,EAAEC,SAAS;AAAA,SAC1BC,kBAAkB;AAAA,SAClBC,kBAAkB;AAAA,SAClBC,kBAAkB,EAAEC,YAAY;AAAA,SAChCC,gBAAgB,EAAEC,UAAU;AAAA,SAC5BC,YAAY;AAAA,SACZC,cAAc,EAAEC,YAAY,sCAErC;AAAA,SACSC,gBAAgB,EAAEC,YAAY,EAAEC,SAAS;AAElD,OAAO,MAAMC,aAAa,GAAGF,YAAY,CAAC;EACxCG,KAAK,EAAEC,MAAM;EAEb,GAAGhB,eAAe,CAAC,CAAC;EACpB,GAAGG,kBAAkB,CAAC,CAAC;EACvB,GAAGG,gBAAgB,CAAC,CAAC;EACrB,GAAGE,YAAY,CAAC;IAAES,GAAG,EAAE;EAAM,CAAC,CAAC;EAC/B,GAAGR,cAAc,CAAC,CAAC;EACnB,GAAGL,kBAAkB,CAAC;AACxB,CAAC,EAAE,MAAM,CAAC;AAEV,OAAO,MAAMc,IAAI,GAAGP,gBAAgB,CAAC,CAAC,CAAC;EACrCQ,IAAI,EAAE,MAAM;EAEZC,KAAK,EAAEN,aAAa,CAAC,CAAC;EAEtBO,KAAKA,CAAED,KAAK,EAAAE,IAAA,EAAa;IAAA,IAAX;MAAEC;IAAM,CAAC,GAAAD,IAAA;IACrB,MAAM;MAAEE;IAAa,CAAC,GAAGd,YAAY,CAACU,KAAK,CAAC;IAC5C,MAAM;MAAEK;IAAc,CAAC,GAAGxB,SAAS,CAACmB,KAAK,CAAC;IAC1C,MAAM;MAAEM;IAAe,CAAC,GAAGnB,UAAU,CAACa,KAAK,CAAC;IAC5C,MAAM;MAAEO,sBAAsB;MAAEC;IAAsB,CAAC,GAAG1B,kBAAkB,CAAC,MAAMkB,KAAK,CAACL,KAAK,CAAC;IAC/F,MAAM;MAAEc;IAAiB,CAAC,GAAGxB,YAAY,CAACe,KAAK,CAAC;IAEhDP,SAAS,CAAC,MAAAiB,YAAA,CAAAV,KAAA,CAAAH,GAAA;MAAA,SAAAc,eAAA,CAEC,CACL,OAAO,EACPP,YAAY,CAACQ,KAAK,EAClBL,sBAAsB,CAACK,KAAK,EAC5BP,aAAa,CAACO,KAAK,EACnBH,gBAAgB,CAACG,KAAK,EACtBN,cAAc,CAACM,KAAK,EACpBZ,KAAK,CAACa,KAAK,CACZ;MAAA,SAAAC,eAAA,CACM,CACLN,qBAAqB,CAACI,KAAK,EAC3BZ,KAAK,CAACe,KAAK,CACZ;IAAA,GACSZ,KAAK,CAElB,CAAC;IAEF,OAAO,CAAC,CAAC;EACX;AACF,CAAC,CAAC","ignoreList":[]}
1
+ {"version":3,"file":"VKbd.js","names":["makeBorderProps","useBorder","useBackgroundColor","makeComponentProps","makeElevationProps","useElevation","makeRoundedProps","useRounded","makeTagProps","makeThemeProps","provideTheme","genericComponent","propsFactory","useRender","makeVKbdProps","color","String","tag","VKbd","name","props","setup","_ref","slots","themeClasses","borderClasses","roundedClasses","backgroundColorClasses","backgroundColorStyles","elevationClasses","_createVNode","_normalizeClass","value","class","_normalizeStyle","style"],"sources":["../../../src/components/VKbd/VKbd.tsx"],"sourcesContent":["// Styles\nimport './VKbd.scss'\n\n// Composables\nimport { makeBorderProps, useBorder } from '@/composables/border'\nimport { useBackgroundColor } from '@/composables/color'\nimport { makeComponentProps } from '@/composables/component'\nimport { makeElevationProps, useElevation } from '@/composables/elevation'\nimport { makeRoundedProps, useRounded } from '@/composables/rounded'\nimport { makeTagProps } from '@/composables/tag'\nimport { makeThemeProps, provideTheme } from '@/composables/theme'\n\n// Utilities\nimport { genericComponent, propsFactory, useRender } from '@/util'\n\nexport const makeVKbdProps = propsFactory({\n color: String,\n\n ...makeBorderProps(),\n ...makeComponentProps(),\n ...makeRoundedProps(),\n ...makeTagProps({ tag: 'kbd' }),\n ...makeThemeProps(),\n ...makeElevationProps(),\n}, 'VKbd')\n\nexport const VKbd = genericComponent()({\n name: 'VKbd',\n\n props: makeVKbdProps(),\n\n setup (props, { slots }) {\n const { themeClasses } = provideTheme(props)\n const { borderClasses } = useBorder(props)\n const { roundedClasses } = useRounded(props)\n const { backgroundColorClasses, backgroundColorStyles } = useBackgroundColor(() => props.color)\n const { elevationClasses } = useElevation(props)\n\n useRender(() => (\n <props.tag\n class={[\n 'v-kbd',\n themeClasses.value,\n backgroundColorClasses.value,\n borderClasses.value,\n elevationClasses.value,\n roundedClasses.value,\n props.class,\n ]}\n style={[\n backgroundColorStyles.value,\n props.style,\n ]}\n v-slots={ slots }\n />\n ))\n\n return {}\n },\n})\n\nexport type VKbd = InstanceType<typeof VKbd>\n"],"mappings":";AAAA;AACA;;AAEA;AAAA,SACSA,eAAe,EAAEC,SAAS;AAAA,SAC1BC,kBAAkB;AAAA,SAClBC,kBAAkB;AAAA,SAClBC,kBAAkB,EAAEC,YAAY;AAAA,SAChCC,gBAAgB,EAAEC,UAAU;AAAA,SAC5BC,YAAY;AAAA,SACZC,cAAc,EAAEC,YAAY,sCAErC;AAAA,SACSC,gBAAgB,EAAEC,YAAY,EAAEC,SAAS;AAElD,OAAO,MAAMC,aAAa,GAAGF,YAAY,CAAC;EACxCG,KAAK,EAAEC,MAAM;EAEb,GAAGhB,eAAe,CAAC,CAAC;EACpB,GAAGG,kBAAkB,CAAC,CAAC;EACvB,GAAGG,gBAAgB,CAAC,CAAC;EACrB,GAAGE,YAAY,CAAC;IAAES,GAAG,EAAE;EAAM,CAAC,CAAC;EAC/B,GAAGR,cAAc,CAAC,CAAC;EACnB,GAAGL,kBAAkB,CAAC;AACxB,CAAC,EAAE,MAAM,CAAC;AAEV,OAAO,MAAMc,IAAI,GAAGP,gBAAgB,CAAC,CAAC,CAAC;EACrCQ,IAAI,EAAE,MAAM;EAEZC,KAAK,EAAEN,aAAa,CAAC,CAAC;EAEtBO,KAAKA,CAAED,KAAK,EAAAE,IAAA,EAAa;IAAA,IAAX;MAAEC;IAAM,CAAC,GAAAD,IAAA;IACrB,MAAM;MAAEE;IAAa,CAAC,GAAGd,YAAY,CAACU,KAAK,CAAC;IAC5C,MAAM;MAAEK;IAAc,CAAC,GAAGxB,SAAS,CAACmB,KAAK,CAAC;IAC1C,MAAM;MAAEM;IAAe,CAAC,GAAGnB,UAAU,CAACa,KAAK,CAAC;IAC5C,MAAM;MAAEO,sBAAsB;MAAEC;IAAsB,CAAC,GAAG1B,kBAAkB,CAAC,MAAMkB,KAAK,CAACL,KAAK,CAAC;IAC/F,MAAM;MAAEc;IAAiB,CAAC,GAAGxB,YAAY,CAACe,KAAK,CAAC;IAEhDP,SAAS,CAAC,MAAAiB,YAAA,CAAAV,KAAA,CAAAH,GAAA;MAAA,SAAAc,eAAA,CAEC,CACL,OAAO,EACPP,YAAY,CAACQ,KAAK,EAClBL,sBAAsB,CAACK,KAAK,EAC5BP,aAAa,CAACO,KAAK,EACnBH,gBAAgB,CAACG,KAAK,EACtBN,cAAc,CAACM,KAAK,EACpBZ,KAAK,CAACa,KAAK,CACZ;MAAA,SAAAC,eAAA,CACM,CACLN,qBAAqB,CAACI,KAAK,EAC3BZ,KAAK,CAACe,KAAK,CACZ;IAAA,GACSZ,KAAK,CAElB,CAAC;IAEF,OAAO,CAAC,CAAC;EACX;AACF,CAAC,CAAC","ignoreList":[]}
@@ -0,0 +1,26 @@
1
+ @use '../../styles/tools';
2
+ @use './variables' as *;
3
+
4
+ @include tools.layer('components') {
5
+ .v-kbd {
6
+ font-family: $kbd-font-family;
7
+ align-items: center;
8
+ align-self: stretch;
9
+ background: rgb(var(--v-theme-kbd));
10
+ color: rgb(var(--v-theme-on-kbd));
11
+ display: $kbd-display;
12
+ font-size: $kbd-font-size;
13
+ font-weight: $kbd-font-weight;
14
+ line-height: $kbd-line-height;
15
+ justify-content: center;
16
+ min-height: $kbd-min-height;
17
+ min-width: $kbd-min-width;
18
+ padding: $kbd-padding;
19
+ vertical-align: baseline;
20
+ margin-inline: $kbd-margin-inline;
21
+
22
+ @include tools.border($kbd-border...);
23
+ @include tools.elevation($kbd-elevation);
24
+ @include tools.rounded($kbd-border-radius);
25
+ }
26
+ }
@@ -1,11 +1,17 @@
1
1
  // VKbd
2
- $kbd-border-radius: 3px !default;
3
- $kbd-display: inline !default;
4
- $kbd-elevation: 0 !default;
5
- $kbd-font-size: 85% !default;
2
+ // Kbd elements naturally use monospace fonts, if users want to change this, they can do so by setting the font-family on the v-kbd element.
3
+ $kbd-font-family: "Roboto", sans-serif !default;
4
+ $kbd-border-radius: 4px !default;
5
+ $kbd-display: inline-flex !default;
6
+ $kbd-elevation: 1 !default;
7
+ // Kbd elements are used inline with text, so we should use the same font size as the text it's with.
8
+ $kbd-font-size: 0.875em !default;
6
9
  $kbd-font-weight: normal !default;
7
- $kbd-padding: .2em .4rem !default;
8
-
10
+ $kbd-line-height: 1 !default;
11
+ $kbd-padding: 3px 6px !default;;
12
+ $kbd-min-height: 1em !default;
13
+ $kbd-min-width: 20px !default;
14
+ $kbd-margin-inline: 1px !default;
9
15
  $kbd-border-color: rgba(var(--v-border-color), var(--v-border-opacity)) !default;
10
16
  $kbd-border-style: solid !default;
11
17
  $kbd-border-width: thin !default;
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["VKbd"],"sources":["../../../src/components/VKbd/index.ts"],"sourcesContent":["// Styles\nimport './VKbd.sass'\n\nexport { VKbd } from './VKbd'\n"],"mappings":"AAAA;AACA;AAAoB,SAEXA,IAAI","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["VKbd"],"sources":["../../../src/components/VKbd/index.ts"],"sourcesContent":["// Styles\nimport './VKbd.scss'\n\nexport { VKbd } from './VKbd'\n"],"mappings":"AAAA;AACA;AAAoB,SAEXA,IAAI","ignoreList":[]}
@@ -28,6 +28,7 @@ export declare const makeVTreeviewChildrenProps: <Defaults extends {
28
28
  falseIcon?: unknown;
29
29
  trueIcon?: unknown;
30
30
  returnObject?: unknown;
31
+ activatable?: unknown;
31
32
  selectable?: unknown;
32
33
  selectedColor?: unknown;
33
34
  selectStrategy?: unknown;
@@ -100,6 +101,10 @@ export declare const makeVTreeviewChildrenProps: <Defaults extends {
100
101
  type: PropType<unknown extends Defaults["returnObject"] ? boolean : boolean | Defaults["returnObject"]>;
101
102
  default: unknown extends Defaults["returnObject"] ? boolean : boolean | Defaults["returnObject"];
102
103
  };
104
+ activatable: unknown extends Defaults["activatable"] ? BooleanConstructor : {
105
+ type: PropType<unknown extends Defaults["activatable"] ? boolean : boolean | Defaults["activatable"]>;
106
+ default: unknown extends Defaults["activatable"] ? boolean : boolean | Defaults["activatable"];
107
+ };
103
108
  selectable: unknown extends Defaults["selectable"] ? BooleanConstructor : {
104
109
  type: PropType<unknown extends Defaults["selectable"] ? boolean : boolean | Defaults["selectable"]>;
105
110
  default: unknown extends Defaults["selectable"] ? boolean : boolean | Defaults["selectable"];
@@ -134,6 +139,7 @@ export declare const VTreeviewChildren: {
134
139
  returnObject: boolean;
135
140
  density: import("../../composables/density.js").Density;
136
141
  indeterminateIcon: IconValue;
142
+ activatable: boolean;
137
143
  selectable: boolean;
138
144
  loadingIcon: string;
139
145
  } & {
@@ -153,6 +159,7 @@ export declare const VTreeviewChildren: {
153
159
  density: import("../../composables/density.js").Density;
154
160
  openOnClick: boolean;
155
161
  indeterminateIcon: IconValue;
162
+ activatable: boolean;
156
163
  selectable: boolean;
157
164
  loadingIcon: string;
158
165
  }, true, {}, import("vue").SlotsType<Partial<{
@@ -191,6 +198,7 @@ export declare const VTreeviewChildren: {
191
198
  returnObject: boolean;
192
199
  density: import("../../composables/density.js").Density;
193
200
  indeterminateIcon: IconValue;
201
+ activatable: boolean;
194
202
  selectable: boolean;
195
203
  loadingIcon: string;
196
204
  } & {
@@ -210,6 +218,7 @@ export declare const VTreeviewChildren: {
210
218
  density: import("../../composables/density.js").Density;
211
219
  openOnClick: boolean;
212
220
  indeterminateIcon: IconValue;
221
+ activatable: boolean;
213
222
  selectable: boolean;
214
223
  loadingIcon: string;
215
224
  }>;
@@ -222,6 +231,7 @@ export declare const VTreeviewChildren: {
222
231
  returnObject: boolean;
223
232
  density: import("../../composables/density.js").Density;
224
233
  indeterminateIcon: IconValue;
234
+ activatable: boolean;
225
235
  selectable: boolean;
226
236
  loadingIcon: string;
227
237
  } & {
@@ -241,6 +251,7 @@ export declare const VTreeviewChildren: {
241
251
  density: import("../../composables/density.js").Density;
242
252
  openOnClick: boolean;
243
253
  indeterminateIcon: IconValue;
254
+ activatable: boolean;
244
255
  selectable: boolean;
245
256
  loadingIcon: string;
246
257
  }, {}, string, import("vue").SlotsType<Partial<{
@@ -292,6 +303,7 @@ export declare const VTreeviewChildren: {
292
303
  falseIcon: PropType<IconValue>;
293
304
  trueIcon: PropType<IconValue>;
294
305
  returnObject: BooleanConstructor;
306
+ activatable: BooleanConstructor;
295
307
  selectable: BooleanConstructor;
296
308
  selectedColor: StringConstructor;
297
309
  selectStrategy: PropType<SelectStrategyProp>;
@@ -324,6 +336,7 @@ export declare const VTreeviewChildren: {
324
336
  falseIcon: PropType<IconValue>;
325
337
  trueIcon: PropType<IconValue>;
326
338
  returnObject: BooleanConstructor;
339
+ activatable: BooleanConstructor;
327
340
  selectable: BooleanConstructor;
328
341
  selectedColor: StringConstructor;
329
342
  selectStrategy: PropType<SelectStrategyProp>;
@@ -26,6 +26,7 @@ export const makeVTreeviewChildrenProps = propsFactory({
26
26
  falseIcon: IconValue,
27
27
  trueIcon: IconValue,
28
28
  returnObject: Boolean,
29
+ activatable: Boolean,
29
30
  selectable: Boolean,
30
31
  selectedColor: String,
31
32
  selectStrategy: [String, Function, Object],
@@ -45,7 +46,7 @@ export const VTreeviewChildren = genericComponent()({
45
46
  } = _ref;
46
47
  const isLoading = reactive(new Set());
47
48
  const activatorItems = ref([]);
48
- const isClickOnOpen = computed(() => !props.disabled && (props.openOnClick != null ? props.openOnClick : props.selectable));
49
+ const isClickOnOpen = computed(() => !props.disabled && (props.openOnClick != null ? props.openOnClick : props.selectable && !props.activatable));
49
50
  async function checkChildren(item) {
50
51
  try {
51
52
  if (!props.items?.length || !props.loadChildren) return;
@@ -1 +1 @@
1
- {"version":3,"file":"VTreeviewChildren.js","names":["VTreeviewGroup","VTreeviewItem","VCheckboxBtn","makeDensityProps","IconValue","computed","reactive","ref","toRaw","genericComponent","propsFactory","makeVTreeviewChildrenProps","disabled","Boolean","loadChildren","Function","loadingIcon","type","String","default","items","Array","openOnClick","undefined","indeterminateIcon","falseIcon","trueIcon","returnObject","selectable","selectedColor","selectStrategy","Object","index","Number","path","VTreeviewChildren","name","props","setup","_ref","slots","isLoading","Set","activatorItems","isClickOnOpen","checkChildren","item","length","children","add","value","raw","delete","selectItem","select","isSelected","map","itemProps","loading","has","treeItemProps","depth","isFirst","isLast","slotsWithItem","prepend","slotProps","_createElementVNode","_Fragment","includes","_createVNode","density","isIndeterminate","v","e","stopPropagation","key","internalItem","append","title","subtitle","treeviewGroupProps","filterProps","treeviewChildrenProps","_mergeProps","activator","_ref2","activatorProps","listItemProps","onToggleExpand","onClick","el"],"sources":["../../../src/components/VTreeview/VTreeviewChildren.tsx"],"sourcesContent":["// Components\nimport { VTreeviewGroup } from './VTreeviewGroup'\nimport { VTreeviewItem } from './VTreeviewItem'\nimport { VCheckboxBtn } from '@/components/VCheckbox'\n\n// Composables\nimport { makeDensityProps } from '@/composables/density'\nimport { IconValue } from '@/composables/icons'\n\n// Utilities\nimport { computed, reactive, ref, toRaw } from 'vue'\nimport { genericComponent, propsFactory } from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\nimport type { InternalListItem } from '@/components/VList/VList'\nimport type { VListItemSlots } from '@/components/VList/VListItem'\nimport type { SelectStrategyProp } from '@/composables/nested/nested'\nimport type { GenericProps } from '@/util'\n\nexport type VTreeviewChildrenSlots<T> = {\n [K in keyof Omit<VListItemSlots, 'default'>]: VListItemSlots[K] & {\n item: T\n internalItem: InternalListItem<T>\n }\n} & {\n default: never\n item: {\n props: InternalListItem['props']\n item: T\n internalItem: InternalListItem<T>\n }\n}\n\nexport const makeVTreeviewChildrenProps = propsFactory({\n disabled: Boolean,\n loadChildren: Function as PropType<(item: unknown) => Promise<void>>,\n loadingIcon: {\n type: String,\n default: '$loading',\n },\n items: Array as PropType<readonly InternalListItem[]>,\n openOnClick: {\n type: Boolean,\n default: undefined,\n },\n indeterminateIcon: {\n type: IconValue,\n default: '$checkboxIndeterminate',\n },\n falseIcon: IconValue,\n trueIcon: IconValue,\n returnObject: Boolean,\n selectable: Boolean,\n selectedColor: String,\n selectStrategy: [String, Function, Object] as PropType<SelectStrategyProp>,\n index: Number,\n path: {\n type: Array as PropType<number[]>,\n default: () => [],\n },\n ...makeDensityProps(),\n}, 'VTreeviewChildren')\n\nexport const VTreeviewChildren = genericComponent<new <T extends InternalListItem>(\n props: {\n items?: readonly T[]\n },\n slots: VTreeviewChildrenSlots<T>\n) => GenericProps<typeof props, typeof slots>>()({\n name: 'VTreeviewChildren',\n\n props: makeVTreeviewChildrenProps(),\n\n setup (props, { slots }) {\n const isLoading = reactive(new Set<unknown>())\n const activatorItems = ref<VTreeviewItem[]>([])\n\n const isClickOnOpen = computed(() => (\n !props.disabled && (\n props.openOnClick != null\n ? props.openOnClick\n : props.selectable\n )))\n\n async function checkChildren (item: InternalListItem) {\n try {\n if (!props.items?.length || !props.loadChildren) return\n\n if (item?.children?.length === 0) {\n isLoading.add(item.value)\n await props.loadChildren(item.raw)\n }\n } finally {\n isLoading.delete(item.value)\n }\n }\n\n function selectItem (select: (value: boolean) => void, isSelected: boolean) {\n if (props.selectable) {\n select(isSelected)\n }\n }\n\n return () => slots.default?.() ?? props.items?.map((item, index) => {\n const { children, props: itemProps } = item\n const loading = isLoading.has(item.value)\n\n const treeItemProps = {\n index,\n depth: props.path?.length ?? 0,\n isFirst: index === 0,\n isLast: props.items ? props.items.length - 1 === index : false,\n path: [...props.path, index],\n }\n\n const slotsWithItem = {\n prepend: slotProps => (\n <>\n { props.selectable && (!children || (children && !['leaf', 'single-leaf'].includes(props.selectStrategy as string))) && (\n <div>\n <VCheckboxBtn\n key={ item.value }\n modelValue={ slotProps.isSelected }\n disabled={ props.disabled }\n loading={ loading }\n color={ props.selectedColor }\n density={ props.density }\n indeterminate={ slotProps.isIndeterminate }\n indeterminateIcon={ props.indeterminateIcon }\n falseIcon={ props.falseIcon }\n trueIcon={ props.trueIcon }\n onUpdate:modelValue={ v => selectItem(slotProps.select, v) }\n onClick={ (e: PointerEvent) => e.stopPropagation() }\n onKeydown={ (e: KeyboardEvent) => {\n if (!['Enter', 'Space'].includes(e.key)) return\n e.stopPropagation()\n selectItem(slotProps.select, slotProps.isSelected)\n }}\n />\n </div>\n )}\n\n { slots.prepend?.({ ...slotProps, ...treeItemProps, item: item.raw, internalItem: item }) }\n </>\n ),\n append: slots.append\n ? slotProps => slots.append?.({ ...slotProps, ...treeItemProps, item: item.raw, internalItem: item })\n : undefined,\n title: slots.title ? slotProps => slots.title?.({ ...slotProps, item: item.raw, internalItem: item }) : undefined,\n subtitle: slots.subtitle ? slotProps => slots.subtitle?.({ ...slotProps, item: item.raw, internalItem: item }) : undefined,\n } satisfies VTreeviewItem['$props']['$children']\n\n const treeviewGroupProps = VTreeviewGroup.filterProps(itemProps)\n const treeviewChildrenProps = VTreeviewChildren.filterProps({ ...props, ...treeItemProps })\n\n return children ? (\n <VTreeviewGroup\n { ...treeviewGroupProps }\n value={ props.returnObject ? item.raw : treeviewGroupProps?.value }\n rawId={ treeviewGroupProps?.value }\n >\n {{\n activator: ({ props: activatorProps }) => {\n const listItemProps = {\n ...itemProps,\n ...activatorProps,\n value: itemProps?.value,\n onToggleExpand: [() => checkChildren(item), activatorProps.onClick] as any,\n onClick: isClickOnOpen.value\n ? [() => checkChildren(item), activatorProps.onClick] as any\n : () => selectItem(activatorItems.value[index]?.select, !activatorItems.value[index]?.isSelected),\n }\n\n return (\n <VTreeviewItem\n ref={ el => activatorItems.value[index] = el as VTreeviewItem }\n { ...listItemProps }\n value={ props.returnObject ? item.raw : itemProps.value }\n loading={ loading }\n v-slots={ slotsWithItem }\n />\n )\n },\n default: () => (\n <VTreeviewChildren\n { ...treeviewChildrenProps }\n items={ children }\n returnObject={ props.returnObject }\n v-slots={ slots }\n />\n ),\n }}\n </VTreeviewGroup>\n ) : (\n slots.item?.({ props: itemProps, item: item.raw, internalItem: item }) ?? (\n <VTreeviewItem\n { ...itemProps }\n value={ props.returnObject ? toRaw(item.raw) : itemProps.value }\n v-slots={ slotsWithItem }\n />\n ))\n })\n },\n})\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"VTreeviewChildren.js","names":["VTreeviewGroup","VTreeviewItem","VCheckboxBtn","makeDensityProps","IconValue","computed","reactive","ref","toRaw","genericComponent","propsFactory","makeVTreeviewChildrenProps","disabled","Boolean","loadChildren","Function","loadingIcon","type","String","default","items","Array","openOnClick","undefined","indeterminateIcon","falseIcon","trueIcon","returnObject","activatable","selectable","selectedColor","selectStrategy","Object","index","Number","path","VTreeviewChildren","name","props","setup","_ref","slots","isLoading","Set","activatorItems","isClickOnOpen","checkChildren","item","length","children","add","value","raw","delete","selectItem","select","isSelected","map","itemProps","loading","has","treeItemProps","depth","isFirst","isLast","slotsWithItem","prepend","slotProps","_createElementVNode","_Fragment","includes","_createVNode","density","isIndeterminate","v","e","stopPropagation","key","internalItem","append","title","subtitle","treeviewGroupProps","filterProps","treeviewChildrenProps","_mergeProps","activator","_ref2","activatorProps","listItemProps","onToggleExpand","onClick","el"],"sources":["../../../src/components/VTreeview/VTreeviewChildren.tsx"],"sourcesContent":["// Components\nimport { VTreeviewGroup } from './VTreeviewGroup'\nimport { VTreeviewItem } from './VTreeviewItem'\nimport { VCheckboxBtn } from '@/components/VCheckbox'\n\n// Composables\nimport { makeDensityProps } from '@/composables/density'\nimport { IconValue } from '@/composables/icons'\n\n// Utilities\nimport { computed, reactive, ref, toRaw } from 'vue'\nimport { genericComponent, propsFactory } from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\nimport type { InternalListItem } from '@/components/VList/VList'\nimport type { VListItemSlots } from '@/components/VList/VListItem'\nimport type { SelectStrategyProp } from '@/composables/nested/nested'\nimport type { GenericProps } from '@/util'\n\nexport type VTreeviewChildrenSlots<T> = {\n [K in keyof Omit<VListItemSlots, 'default'>]: VListItemSlots[K] & {\n item: T\n internalItem: InternalListItem<T>\n }\n} & {\n default: never\n item: {\n props: InternalListItem['props']\n item: T\n internalItem: InternalListItem<T>\n }\n}\n\nexport const makeVTreeviewChildrenProps = propsFactory({\n disabled: Boolean,\n loadChildren: Function as PropType<(item: unknown) => Promise<void>>,\n loadingIcon: {\n type: String,\n default: '$loading',\n },\n items: Array as PropType<readonly InternalListItem[]>,\n openOnClick: {\n type: Boolean,\n default: undefined,\n },\n indeterminateIcon: {\n type: IconValue,\n default: '$checkboxIndeterminate',\n },\n falseIcon: IconValue,\n trueIcon: IconValue,\n returnObject: Boolean,\n activatable: Boolean,\n selectable: Boolean,\n selectedColor: String,\n selectStrategy: [String, Function, Object] as PropType<SelectStrategyProp>,\n index: Number,\n path: {\n type: Array as PropType<number[]>,\n default: () => [],\n },\n ...makeDensityProps(),\n}, 'VTreeviewChildren')\n\nexport const VTreeviewChildren = genericComponent<new <T extends InternalListItem>(\n props: {\n items?: readonly T[]\n },\n slots: VTreeviewChildrenSlots<T>\n) => GenericProps<typeof props, typeof slots>>()({\n name: 'VTreeviewChildren',\n\n props: makeVTreeviewChildrenProps(),\n\n setup (props, { slots }) {\n const isLoading = reactive(new Set<unknown>())\n const activatorItems = ref<VTreeviewItem[]>([])\n\n const isClickOnOpen = computed(() => (\n !props.disabled && (\n props.openOnClick != null\n ? props.openOnClick\n : props.selectable && !props.activatable\n )))\n\n async function checkChildren (item: InternalListItem) {\n try {\n if (!props.items?.length || !props.loadChildren) return\n\n if (item?.children?.length === 0) {\n isLoading.add(item.value)\n await props.loadChildren(item.raw)\n }\n } finally {\n isLoading.delete(item.value)\n }\n }\n\n function selectItem (select: (value: boolean) => void, isSelected: boolean) {\n if (props.selectable) {\n select(isSelected)\n }\n }\n\n return () => slots.default?.() ?? props.items?.map((item, index) => {\n const { children, props: itemProps } = item\n const loading = isLoading.has(item.value)\n\n const treeItemProps = {\n index,\n depth: props.path?.length ?? 0,\n isFirst: index === 0,\n isLast: props.items ? props.items.length - 1 === index : false,\n path: [...props.path, index],\n }\n\n const slotsWithItem = {\n prepend: slotProps => (\n <>\n { props.selectable && (!children || (children && !['leaf', 'single-leaf'].includes(props.selectStrategy as string))) && (\n <div>\n <VCheckboxBtn\n key={ item.value }\n modelValue={ slotProps.isSelected }\n disabled={ props.disabled }\n loading={ loading }\n color={ props.selectedColor }\n density={ props.density }\n indeterminate={ slotProps.isIndeterminate }\n indeterminateIcon={ props.indeterminateIcon }\n falseIcon={ props.falseIcon }\n trueIcon={ props.trueIcon }\n onUpdate:modelValue={ v => selectItem(slotProps.select, v) }\n onClick={ (e: PointerEvent) => e.stopPropagation() }\n onKeydown={ (e: KeyboardEvent) => {\n if (!['Enter', 'Space'].includes(e.key)) return\n e.stopPropagation()\n selectItem(slotProps.select, slotProps.isSelected)\n }}\n />\n </div>\n )}\n\n { slots.prepend?.({ ...slotProps, ...treeItemProps, item: item.raw, internalItem: item }) }\n </>\n ),\n append: slots.append\n ? slotProps => slots.append?.({ ...slotProps, ...treeItemProps, item: item.raw, internalItem: item })\n : undefined,\n title: slots.title ? slotProps => slots.title?.({ ...slotProps, item: item.raw, internalItem: item }) : undefined,\n subtitle: slots.subtitle ? slotProps => slots.subtitle?.({ ...slotProps, item: item.raw, internalItem: item }) : undefined,\n } satisfies VTreeviewItem['$props']['$children']\n\n const treeviewGroupProps = VTreeviewGroup.filterProps(itemProps)\n const treeviewChildrenProps = VTreeviewChildren.filterProps({ ...props, ...treeItemProps })\n\n return children ? (\n <VTreeviewGroup\n { ...treeviewGroupProps }\n value={ props.returnObject ? item.raw : treeviewGroupProps?.value }\n rawId={ treeviewGroupProps?.value }\n >\n {{\n activator: ({ props: activatorProps }) => {\n const listItemProps = {\n ...itemProps,\n ...activatorProps,\n value: itemProps?.value,\n onToggleExpand: [() => checkChildren(item), activatorProps.onClick] as any,\n onClick: isClickOnOpen.value\n ? [() => checkChildren(item), activatorProps.onClick] as any\n : () => selectItem(activatorItems.value[index]?.select, !activatorItems.value[index]?.isSelected),\n }\n\n return (\n <VTreeviewItem\n ref={ el => activatorItems.value[index] = el as VTreeviewItem }\n { ...listItemProps }\n value={ props.returnObject ? item.raw : itemProps.value }\n loading={ loading }\n v-slots={ slotsWithItem }\n />\n )\n },\n default: () => (\n <VTreeviewChildren\n { ...treeviewChildrenProps }\n items={ children }\n returnObject={ props.returnObject }\n v-slots={ slots }\n />\n ),\n }}\n </VTreeviewGroup>\n ) : (\n slots.item?.({ props: itemProps, item: item.raw, internalItem: item }) ?? (\n <VTreeviewItem\n { ...itemProps }\n value={ props.returnObject ? toRaw(item.raw) : itemProps.value }\n v-slots={ slotsWithItem }\n />\n ))\n })\n },\n})\n"],"mappings":"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","ignoreList":[]}
@@ -10,7 +10,7 @@ import { VProgressCircular } from "../VProgressCircular/index.js"; // Composable
10
10
  import { forwardRefs } from "../../composables/forwardRefs.js";
11
11
  import { IconValue } from "../../composables/icons.js"; // Utilities
12
12
  import { computed, inject, ref, toRaw } from 'vue';
13
- import { genericComponent, omit, propsFactory, useRender } from "../../util/index.js"; // Types
13
+ import { genericComponent, propsFactory, useRender } from "../../util/index.js"; // Types
14
14
  import { VTreeviewSymbol } from "./shared.js";
15
15
  export const makeVTreeviewItemProps = propsFactory({
16
16
  loading: Boolean,
@@ -49,7 +49,7 @@ export const VTreeviewItem = genericComponent()({
49
49
  emit('toggleExpand', e);
50
50
  }
51
51
  useRender(() => {
52
- const listItemProps = omit(VListItem.filterProps(props), ['onClick']);
52
+ const listItemProps = VListItem.filterProps(props);
53
53
  const hasPrepend = slots.prepend || props.toggleIcon;
54
54
  return _createVNode(VListItem, _mergeProps({
55
55
  "ref": vListItemRef
@@ -60,7 +60,7 @@ export const VTreeviewItem = genericComponent()({
60
60
  'v-treeview-item--filtered': isFiltered.value
61
61
  }, props.class],
62
62
  "ripple": false,
63
- "onClick": props.onClick ?? activateGroupActivator
63
+ "onClick": activateGroupActivator
64
64
  }), {
65
65
  ...slots,
66
66
  prepend: hasPrepend ? slotProps => {
@@ -1 +1 @@
1
- {"version":3,"file":"VTreeviewItem.js","names":["VBtn","VListItemAction","makeVListItemProps","VListItem","VProgressCircular","forwardRefs","IconValue","computed","inject","ref","toRaw","genericComponent","omit","propsFactory","useRender","VTreeviewSymbol","makeVTreeviewItemProps","loading","Boolean","toggleIcon","slim","VTreeviewItem","name","props","emits","toggleExpand","value","setup","_ref","slots","emit","visibleIds","vListItemRef","isActivatableGroupActivator","root","activatable","isGroupActivator","vListItemRefIsClickable","link","isClickable","list","disabled","isFiltered","has","id","activateGroupActivator","e","activate","isActivated","onClickAction","preventDefault","stopPropagation","listItemProps","filterProps","hasPrepend","prepend","_createVNode","_mergeProps","class","onClick","slotProps","_createElementVNode","_Fragment","default","loader","undefined"],"sources":["../../../src/components/VTreeview/VTreeviewItem.tsx"],"sourcesContent":["// Styles\nimport './VTreeviewItem.sass'\n\n// Components\nimport { VBtn } from '@/components/VBtn'\nimport { VListItemAction } from '@/components/VList'\nimport { makeVListItemProps, VListItem } from '@/components/VList/VListItem'\nimport { VProgressCircular } from '@/components/VProgressCircular'\n\n// Composables\nimport { forwardRefs } from '@/composables/forwardRefs'\nimport { IconValue } from '@/composables/icons'\n\n// Utilities\nimport { computed, inject, ref, toRaw } from 'vue'\nimport { genericComponent, omit, propsFactory, useRender } from '@/util'\n\n// Types\nimport { VTreeviewSymbol } from './shared'\nimport type { VListItemSlots } from '@/components/VList/VListItem'\n\nexport const makeVTreeviewItemProps = propsFactory({\n loading: Boolean,\n toggleIcon: IconValue,\n\n ...makeVListItemProps({ slim: true }),\n}, 'VTreeviewItem')\n\nexport const VTreeviewItem = genericComponent<VListItemSlots>()({\n name: 'VTreeviewItem',\n\n props: makeVTreeviewItemProps(),\n\n emits: {\n toggleExpand: (value: PointerEvent) => true,\n },\n\n setup (props, { slots, emit }) {\n const visibleIds = inject(VTreeviewSymbol, { visibleIds: ref() }).visibleIds\n\n const vListItemRef = ref<VListItem>()\n\n const isActivatableGroupActivator = computed(() =>\n (vListItemRef.value?.root.activatable.value) &&\n vListItemRef.value?.isGroupActivator\n )\n const vListItemRefIsClickable = computed(() => (\n vListItemRef.value?.link.isClickable.value ||\n (props.value != null && !!vListItemRef.value?.list)\n ))\n const isClickable = computed(() =>\n !props.disabled &&\n props.link !== false &&\n (props.link || vListItemRefIsClickable.value || isActivatableGroupActivator.value)\n )\n const isFiltered = computed(() => visibleIds.value && !visibleIds.value.has(toRaw(vListItemRef.value?.id)))\n\n function activateGroupActivator (e: MouseEvent | KeyboardEvent) {\n if (isClickable.value && isActivatableGroupActivator.value) {\n vListItemRef.value?.activate(!vListItemRef.value?.isActivated, e)\n }\n }\n\n function onClickAction (e: PointerEvent) {\n e.preventDefault()\n e.stopPropagation()\n emit('toggleExpand', e)\n }\n\n useRender(() => {\n const listItemProps = omit(VListItem.filterProps(props), ['onClick'])\n const hasPrepend = slots.prepend || props.toggleIcon\n\n return (\n <VListItem\n ref={ vListItemRef }\n { ...listItemProps }\n active={ vListItemRef.value?.isActivated }\n class={[\n 'v-treeview-item',\n {\n 'v-treeview-item--activatable-group-activator': isActivatableGroupActivator.value,\n 'v-treeview-item--filtered': isFiltered.value,\n },\n props.class,\n ]}\n ripple={ false }\n onClick={ props.onClick ?? activateGroupActivator }\n >\n {{\n ...slots,\n prepend: hasPrepend ? slotProps => {\n return (\n <>\n <VListItemAction start>\n { props.toggleIcon ? (\n <VBtn\n density=\"compact\"\n icon={ props.toggleIcon }\n loading={ props.loading }\n variant=\"text\"\n onClick={ onClickAction }\n >\n {{\n loader: () => (\n <VProgressCircular\n indeterminate=\"disable-shrink\"\n size=\"20\"\n width=\"2\"\n />\n ),\n }}\n </VBtn>\n ) : (\n <div class=\"v-treeview-item__level\" />\n )}\n </VListItemAction>\n\n { slots.prepend?.(slotProps) }\n </>\n )\n } : undefined,\n }}\n </VListItem>\n )\n })\n\n return forwardRefs({}, vListItemRef)\n },\n})\n\nexport type VTreeviewItem = InstanceType<typeof VTreeviewItem>\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"VTreeviewItem.js","names":["VBtn","VListItemAction","makeVListItemProps","VListItem","VProgressCircular","forwardRefs","IconValue","computed","inject","ref","toRaw","genericComponent","propsFactory","useRender","VTreeviewSymbol","makeVTreeviewItemProps","loading","Boolean","toggleIcon","slim","VTreeviewItem","name","props","emits","toggleExpand","value","setup","_ref","slots","emit","visibleIds","vListItemRef","isActivatableGroupActivator","root","activatable","isGroupActivator","vListItemRefIsClickable","link","isClickable","list","disabled","isFiltered","has","id","activateGroupActivator","e","activate","isActivated","onClickAction","preventDefault","stopPropagation","listItemProps","filterProps","hasPrepend","prepend","_createVNode","_mergeProps","class","slotProps","_createElementVNode","_Fragment","default","loader","undefined"],"sources":["../../../src/components/VTreeview/VTreeviewItem.tsx"],"sourcesContent":["// Styles\nimport './VTreeviewItem.sass'\n\n// Components\nimport { VBtn } from '@/components/VBtn'\nimport { VListItemAction } from '@/components/VList'\nimport { makeVListItemProps, VListItem } from '@/components/VList/VListItem'\nimport { VProgressCircular } from '@/components/VProgressCircular'\n\n// Composables\nimport { forwardRefs } from '@/composables/forwardRefs'\nimport { IconValue } from '@/composables/icons'\n\n// Utilities\nimport { computed, inject, ref, toRaw } from 'vue'\nimport { genericComponent, propsFactory, useRender } from '@/util'\n\n// Types\nimport { VTreeviewSymbol } from './shared'\nimport type { VListItemSlots } from '@/components/VList/VListItem'\n\nexport const makeVTreeviewItemProps = propsFactory({\n loading: Boolean,\n toggleIcon: IconValue,\n\n ...makeVListItemProps({ slim: true }),\n}, 'VTreeviewItem')\n\nexport const VTreeviewItem = genericComponent<VListItemSlots>()({\n name: 'VTreeviewItem',\n\n props: makeVTreeviewItemProps(),\n\n emits: {\n toggleExpand: (value: PointerEvent) => true,\n },\n\n setup (props, { slots, emit }) {\n const visibleIds = inject(VTreeviewSymbol, { visibleIds: ref() }).visibleIds\n\n const vListItemRef = ref<VListItem>()\n\n const isActivatableGroupActivator = computed(() =>\n (vListItemRef.value?.root.activatable.value) &&\n vListItemRef.value?.isGroupActivator\n )\n const vListItemRefIsClickable = computed(() => (\n vListItemRef.value?.link.isClickable.value ||\n (props.value != null && !!vListItemRef.value?.list)\n ))\n const isClickable = computed(() =>\n !props.disabled &&\n props.link !== false &&\n (props.link || vListItemRefIsClickable.value || isActivatableGroupActivator.value)\n )\n const isFiltered = computed(() => visibleIds.value && !visibleIds.value.has(toRaw(vListItemRef.value?.id)))\n\n function activateGroupActivator (e: MouseEvent | KeyboardEvent) {\n if (isClickable.value && isActivatableGroupActivator.value) {\n vListItemRef.value?.activate(!vListItemRef.value?.isActivated, e)\n }\n }\n\n function onClickAction (e: PointerEvent) {\n e.preventDefault()\n e.stopPropagation()\n emit('toggleExpand', e)\n }\n\n useRender(() => {\n const listItemProps = VListItem.filterProps(props)\n const hasPrepend = slots.prepend || props.toggleIcon\n\n return (\n <VListItem\n ref={ vListItemRef }\n { ...listItemProps }\n active={ vListItemRef.value?.isActivated }\n class={[\n 'v-treeview-item',\n {\n 'v-treeview-item--activatable-group-activator': isActivatableGroupActivator.value,\n 'v-treeview-item--filtered': isFiltered.value,\n },\n props.class,\n ]}\n ripple={ false }\n onClick={ activateGroupActivator }\n >\n {{\n ...slots,\n prepend: hasPrepend ? slotProps => {\n return (\n <>\n <VListItemAction start>\n { props.toggleIcon ? (\n <VBtn\n density=\"compact\"\n icon={ props.toggleIcon }\n loading={ props.loading }\n variant=\"text\"\n onClick={ onClickAction }\n >\n {{\n loader: () => (\n <VProgressCircular\n indeterminate=\"disable-shrink\"\n size=\"20\"\n width=\"2\"\n />\n ),\n }}\n </VBtn>\n ) : (\n <div class=\"v-treeview-item__level\" />\n )}\n </VListItemAction>\n\n { slots.prepend?.(slotProps) }\n </>\n )\n } : undefined,\n }}\n </VListItem>\n )\n })\n\n return forwardRefs({}, vListItemRef)\n },\n})\n\nexport type VTreeviewItem = InstanceType<typeof VTreeviewItem>\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,15 @@
1
+ export declare const MODIFIERS: string[];
2
+ /**
3
+ * Splits a single combination string into individual key parts.
4
+ *
5
+ * A combination is a set of keys that must be pressed simultaneously.
6
+ * e.g. `ctrl+k`, `shift--`
7
+ */
8
+ export declare function splitKeyCombination(combination: string, isInternal?: boolean): string[];
9
+ /**
10
+ * Splits a hotkey string into its constituent combination groups.
11
+ *
12
+ * A sequence is a series of combinations that must be pressed in order.
13
+ * e.g. `a-b`, `ctrl+k-p`
14
+ */
15
+ export declare function splitKeySequence(str: string): string[];
@@ -0,0 +1,154 @@
1
+ // Utilities
2
+ import { normalizeKey } from "./key-aliases.js";
3
+ import { consoleWarn } from "../../util/console.js"; // Types
4
+ export const MODIFIERS = ['ctrl', 'shift', 'alt', 'meta', 'cmd'];
5
+
6
+ /**
7
+ * Splits a single combination string into individual key parts.
8
+ *
9
+ * A combination is a set of keys that must be pressed simultaneously.
10
+ * e.g. `ctrl+k`, `shift--`
11
+ */
12
+ export function splitKeyCombination(combination) {
13
+ let isInternal = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
14
+ if (!combination) {
15
+ if (!isInternal) consoleWarn('Invalid hotkey combination: empty string provided');
16
+ return [];
17
+ }
18
+
19
+ // --- VALIDATION ---
20
+ const startsWithPlusOrUnderscore = combination.startsWith('+') || combination.startsWith('_');
21
+ const hasInvalidLeadingSeparator =
22
+ // Starts with a single '+' or '_' followed by a non-separator character (e.g. '+a', '_a')
23
+ startsWithPlusOrUnderscore && !(combination.startsWith('++') || combination.startsWith('__'));
24
+ const hasInvalidStructure =
25
+ // Invalid leading separator patterns
26
+ combination.length > 1 && hasInvalidLeadingSeparator ||
27
+ // Disallow literal + or _ keys (they require shift)
28
+ combination.includes('++') || combination.includes('__') || combination === '+' || combination === '_' ||
29
+ // Ends with a separator that is not part of a doubled literal
30
+ combination.length > 1 && (combination.endsWith('+') || combination.endsWith('_')) && combination.at(-2) !== combination.at(-1) ||
31
+ // Stand-alone doubled separators (dangling)
32
+ combination === '++' || combination === '--' || combination === '__';
33
+ if (hasInvalidStructure) {
34
+ if (!isInternal) consoleWarn(`Invalid hotkey combination: "${combination}" has invalid structure`);
35
+ return [];
36
+ }
37
+ const keys = [];
38
+ let buffer = '';
39
+ const flushBuffer = () => {
40
+ if (buffer) {
41
+ keys.push(normalizeKey(buffer));
42
+ buffer = '';
43
+ }
44
+ };
45
+ for (let i = 0; i < combination.length; i++) {
46
+ const char = combination[i];
47
+ const nextChar = combination[i + 1];
48
+ if (char === '+' || char === '_' || char === '-') {
49
+ if (char === nextChar) {
50
+ flushBuffer();
51
+ keys.push(char);
52
+ i++;
53
+ } else if (char === '+' || char === '_') {
54
+ flushBuffer();
55
+ } else {
56
+ buffer += char;
57
+ }
58
+ } else {
59
+ buffer += char;
60
+ }
61
+ }
62
+ flushBuffer();
63
+
64
+ // Within a combination, `-` is only valid as a literal key (e.g., `ctrl+-`).
65
+ // `-` cannot be part of a longer key name within a combination.
66
+ const hasInvalidMinus = keys.some(key => key.length > 1 && key.includes('-') && key !== '--');
67
+ if (hasInvalidMinus) {
68
+ if (!isInternal) consoleWarn(`Invalid hotkey combination: "${combination}" has invalid structure`);
69
+ return [];
70
+ }
71
+ if (keys.length === 0 && combination) {
72
+ return [normalizeKey(combination)];
73
+ }
74
+ return keys;
75
+ }
76
+
77
+ /**
78
+ * Splits a hotkey string into its constituent combination groups.
79
+ *
80
+ * A sequence is a series of combinations that must be pressed in order.
81
+ * e.g. `a-b`, `ctrl+k-p`
82
+ */
83
+ export function splitKeySequence(str) {
84
+ if (!str) {
85
+ consoleWarn('Invalid hotkey sequence: empty string provided');
86
+ return [];
87
+ }
88
+
89
+ // A sequence is invalid if it starts or ends with a separator,
90
+ // unless it is part of a combination (e.g., `shift+-`).
91
+ const hasInvalidStart = str.startsWith('-') && !['---', '--+'].includes(str);
92
+ const hasInvalidEnd = str.endsWith('-') && !str.endsWith('+-') && !str.endsWith('_-') && str !== '-' && str !== '---';
93
+ if (hasInvalidStart || hasInvalidEnd) {
94
+ consoleWarn(`Invalid hotkey sequence: "${str}" contains invalid combinations`);
95
+ return [];
96
+ }
97
+ const result = [];
98
+ let buffer = '';
99
+ let i = 0;
100
+ while (i < str.length) {
101
+ const char = str[i];
102
+ if (char === '-') {
103
+ // Determine if this hyphen is part of the current combination
104
+ const prevChar = str[i - 1];
105
+ const prevPrevChar = i > 1 ? str[i - 2] : undefined;
106
+ const precededBySinglePlusOrUnderscore = (prevChar === '+' || prevChar === '_') && prevPrevChar !== '+';
107
+ if (precededBySinglePlusOrUnderscore) {
108
+ // Treat as part of the combination (e.g., 'ctrl+-')
109
+ buffer += char;
110
+ i++;
111
+ } else {
112
+ // Treat as sequence separator
113
+ if (buffer) {
114
+ result.push(buffer);
115
+ buffer = '';
116
+ } else {
117
+ // Empty buffer means we have a literal '-' key
118
+ result.push('-');
119
+ }
120
+ i++;
121
+ }
122
+ } else {
123
+ buffer += char;
124
+ i++;
125
+ }
126
+ }
127
+
128
+ // Add final buffer if it exists
129
+ if (buffer) {
130
+ result.push(buffer);
131
+ }
132
+
133
+ // Collapse runs of '-' so that every second '-' is removed
134
+ const collapsed = [];
135
+ let minusCount = 0;
136
+ for (const part of result) {
137
+ if (part === '-') {
138
+ if (minusCount % 2 === 0) collapsed.push('-');
139
+ minusCount++;
140
+ } else {
141
+ minusCount = 0;
142
+ collapsed.push(part);
143
+ }
144
+ }
145
+
146
+ // Validate that each part of the sequence is a valid combination
147
+ const areAllValid = collapsed.every(s => splitKeyCombination(s, true).length > 0);
148
+ if (!areAllValid) {
149
+ consoleWarn(`Invalid hotkey sequence: "${str}" contains invalid combinations`);
150
+ return [];
151
+ }
152
+ return collapsed;
153
+ }
154
+ //# sourceMappingURL=hotkey-parsing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hotkey-parsing.js","names":["normalizeKey","consoleWarn","MODIFIERS","splitKeyCombination","combination","isInternal","arguments","length","undefined","startsWithPlusOrUnderscore","startsWith","hasInvalidLeadingSeparator","hasInvalidStructure","includes","endsWith","at","keys","buffer","flushBuffer","push","i","char","nextChar","hasInvalidMinus","some","key","splitKeySequence","str","hasInvalidStart","hasInvalidEnd","result","prevChar","prevPrevChar","precededBySinglePlusOrUnderscore","collapsed","minusCount","part","areAllValid","every","s"],"sources":["../../../src/composables/hotkey/hotkey-parsing.ts"],"sourcesContent":["// Utilities\nimport { normalizeKey } from './key-aliases'\nimport { consoleWarn } from '../../util/console'\n\n// Types\nexport const MODIFIERS = ['ctrl', 'shift', 'alt', 'meta', 'cmd']\n\n/**\n * Splits a single combination string into individual key parts.\n *\n * A combination is a set of keys that must be pressed simultaneously.\n * e.g. `ctrl+k`, `shift--`\n */\nexport function splitKeyCombination (combination: string, isInternal = false): string[] {\n if (!combination) {\n if (!isInternal) consoleWarn('Invalid hotkey combination: empty string provided')\n return []\n }\n\n // --- VALIDATION ---\n const startsWithPlusOrUnderscore = combination.startsWith('+') || combination.startsWith('_')\n\n const hasInvalidLeadingSeparator = (\n // Starts with a single '+' or '_' followed by a non-separator character (e.g. '+a', '_a')\n startsWithPlusOrUnderscore &&\n !(combination.startsWith('++') || combination.startsWith('__'))\n )\n\n const hasInvalidStructure = (\n // Invalid leading separator patterns\n (combination.length > 1 && hasInvalidLeadingSeparator) ||\n // Disallow literal + or _ keys (they require shift)\n combination.includes('++') || combination.includes('__') ||\n combination === '+' || combination === '_' ||\n // Ends with a separator that is not part of a doubled literal\n (combination.length > 1 && (combination.endsWith('+') || combination.endsWith('_')) && combination.at(-2) !== combination.at(-1)) ||\n // Stand-alone doubled separators (dangling)\n combination === '++' || combination === '--' || combination === '__'\n )\n\n if (hasInvalidStructure) {\n if (!isInternal) consoleWarn(`Invalid hotkey combination: \"${combination}\" has invalid structure`)\n return []\n }\n\n const keys: string[] = []\n let buffer = ''\n\n const flushBuffer = () => {\n if (buffer) {\n keys.push(normalizeKey(buffer))\n buffer = ''\n }\n }\n\n for (let i = 0; i < combination.length; i++) {\n const char = combination[i]\n const nextChar = combination[i + 1]\n\n if (char === '+' || char === '_' || char === '-') {\n if (char === nextChar) {\n flushBuffer()\n keys.push(char)\n i++\n } else if (char === '+' || char === '_') {\n flushBuffer()\n } else {\n buffer += char\n }\n } else {\n buffer += char\n }\n }\n flushBuffer()\n\n // Within a combination, `-` is only valid as a literal key (e.g., `ctrl+-`).\n // `-` cannot be part of a longer key name within a combination.\n const hasInvalidMinus = keys.some(key => key.length > 1 && key.includes('-') && key !== '--')\n if (hasInvalidMinus) {\n if (!isInternal) consoleWarn(`Invalid hotkey combination: \"${combination}\" has invalid structure`)\n return []\n }\n\n if (keys.length === 0 && combination) {\n return [normalizeKey(combination)]\n }\n\n return keys\n}\n\n/**\n * Splits a hotkey string into its constituent combination groups.\n *\n * A sequence is a series of combinations that must be pressed in order.\n * e.g. `a-b`, `ctrl+k-p`\n */\nexport function splitKeySequence (str: string): string[] {\n if (!str) {\n consoleWarn('Invalid hotkey sequence: empty string provided')\n return []\n }\n\n // A sequence is invalid if it starts or ends with a separator,\n // unless it is part of a combination (e.g., `shift+-`).\n const hasInvalidStart = str.startsWith('-') && !['---', '--+'].includes(str)\n const hasInvalidEnd = str.endsWith('-') && !str.endsWith('+-') && !str.endsWith('_-') && str !== '-' && str !== '---'\n\n if (hasInvalidStart || hasInvalidEnd) {\n consoleWarn(`Invalid hotkey sequence: \"${str}\" contains invalid combinations`)\n return []\n }\n\n const result: string[] = []\n let buffer = ''\n let i = 0\n\n while (i < str.length) {\n const char = str[i]\n\n if (char === '-') {\n // Determine if this hyphen is part of the current combination\n const prevChar = str[i - 1]\n const prevPrevChar = i > 1 ? str[i - 2] : undefined\n\n const precededBySinglePlusOrUnderscore = (\n (prevChar === '+' || prevChar === '_') && prevPrevChar !== '+'\n )\n\n if (precededBySinglePlusOrUnderscore) {\n // Treat as part of the combination (e.g., 'ctrl+-')\n buffer += char\n i++\n } else {\n // Treat as sequence separator\n if (buffer) {\n result.push(buffer)\n buffer = ''\n } else {\n // Empty buffer means we have a literal '-' key\n result.push('-')\n }\n i++\n }\n } else {\n buffer += char\n i++\n }\n }\n\n // Add final buffer if it exists\n if (buffer) {\n result.push(buffer)\n }\n\n // Collapse runs of '-' so that every second '-' is removed\n const collapsed: string[] = []\n let minusCount = 0\n for (const part of result) {\n if (part === '-') {\n if (minusCount % 2 === 0) collapsed.push('-')\n minusCount++\n } else {\n minusCount = 0\n collapsed.push(part)\n }\n }\n\n // Validate that each part of the sequence is a valid combination\n const areAllValid = collapsed.every(s => splitKeyCombination(s, true).length > 0)\n\n if (!areAllValid) {\n consoleWarn(`Invalid hotkey sequence: \"${str}\" contains invalid combinations`)\n return []\n }\n\n return collapsed\n}\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,9 @@
1
+ import type { MaybeRef } from "../../util/index.js";
2
+ interface HotkeyOptions {
3
+ event?: MaybeRef<'keydown' | 'keyup'>;
4
+ inputs?: MaybeRef<boolean>;
5
+ preventDefault?: MaybeRef<boolean>;
6
+ sequenceTimeout?: MaybeRef<number>;
7
+ }
8
+ export declare function useHotkey(keys: MaybeRef<string | undefined>, callback: (e: KeyboardEvent) => void, options?: HotkeyOptions): () => void;
9
+