@greypan/web-ui 11.1.0 → 12.0.0

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 (667) hide show
  1. package/README.CN.md +79 -68
  2. package/README.md +81 -72
  3. package/dist/_virtual/_@oxc-project_runtime@0.155.0/helpers/esm/decorate.js +8 -0
  4. package/dist/assets/menu-portal.js +3 -4
  5. package/dist/assets/menu-portal.js.map +1 -1
  6. package/dist/assets/modal-surface.js +3 -4
  7. package/dist/assets/modal-surface.js.map +1 -1
  8. package/dist/assets/overlay-motion.js +3 -4
  9. package/dist/assets/overlay-motion.js.map +1 -1
  10. package/dist/assets/scrollbar.js +5 -0
  11. package/dist/assets/scrollbar.js.map +1 -0
  12. package/dist/assets/selection-control.js +3 -4
  13. package/dist/assets/selection-control.js.map +1 -1
  14. package/dist/assets/toast-containers.js +3 -4
  15. package/dist/assets/toast-containers.js.map +1 -1
  16. package/dist/classes/glass.js +3 -4
  17. package/dist/classes/glass.js.map +1 -1
  18. package/dist/classes/glow.js +3 -4
  19. package/dist/classes/glow.js.map +1 -1
  20. package/dist/components/autocomplete/index.d.ts +485 -483
  21. package/dist/components/autocomplete/index.d.ts.map +1 -0
  22. package/dist/components/autocomplete/index.js +475 -267
  23. package/dist/components/autocomplete/index.js.map +1 -1
  24. package/dist/components/autocomplete/style.js +3 -4
  25. package/dist/components/autocomplete/style.js.map +1 -1
  26. package/dist/components/avatar/index.d.ts +26 -24
  27. package/dist/components/avatar/index.d.ts.map +1 -0
  28. package/dist/components/avatar/index.js +72 -52
  29. package/dist/components/avatar/index.js.map +1 -1
  30. package/dist/components/avatar/style.js +3 -4
  31. package/dist/components/avatar/style.js.map +1 -1
  32. package/dist/components/back-top/index.d.ts +30 -27
  33. package/dist/components/back-top/index.d.ts.map +1 -0
  34. package/dist/components/back-top/index.js +96 -62
  35. package/dist/components/back-top/index.js.map +1 -1
  36. package/dist/components/back-top/style.js +3 -4
  37. package/dist/components/back-top/style.js.map +1 -1
  38. package/dist/components/badge/index.d.ts +32 -26
  39. package/dist/components/badge/index.d.ts.map +1 -0
  40. package/dist/components/badge/index.js +116 -74
  41. package/dist/components/badge/index.js.map +1 -1
  42. package/dist/components/badge/style.js +3 -4
  43. package/dist/components/badge/style.js.map +1 -1
  44. package/dist/components/button/index.d.ts +392 -391
  45. package/dist/components/button/index.d.ts.map +1 -0
  46. package/dist/components/button/index.js +109 -79
  47. package/dist/components/button/index.js.map +1 -1
  48. package/dist/components/button/style.js +3 -4
  49. package/dist/components/button/style.js.map +1 -1
  50. package/dist/components/button-group/index.d.ts +14 -13
  51. package/dist/components/button-group/index.d.ts.map +1 -0
  52. package/dist/components/button-group/index.js +43 -33
  53. package/dist/components/button-group/index.js.map +1 -1
  54. package/dist/components/button-group/style.js +3 -4
  55. package/dist/components/button-group/style.js.map +1 -1
  56. package/dist/components/checkbox/index.d.ts +399 -397
  57. package/dist/components/checkbox/index.d.ts.map +1 -0
  58. package/dist/components/checkbox/index.js +103 -74
  59. package/dist/components/checkbox/index.js.map +1 -1
  60. package/dist/components/checkbox/style.js +3 -4
  61. package/dist/components/checkbox/style.js.map +1 -1
  62. package/dist/components/checkbox-group/index.d.ts +397 -396
  63. package/dist/components/checkbox-group/index.d.ts.map +1 -0
  64. package/dist/components/checkbox-group/index.js +92 -70
  65. package/dist/components/checkbox-group/index.js.map +1 -1
  66. package/dist/components/checkbox-group/style.js +3 -4
  67. package/dist/components/checkbox-group/style.js.map +1 -1
  68. package/dist/components/collapse/index.d.ts +82 -75
  69. package/dist/components/collapse/index.d.ts.map +1 -0
  70. package/dist/components/collapse/index.js +228 -135
  71. package/dist/components/collapse/index.js.map +1 -1
  72. package/dist/components/collapse/style.js +3 -4
  73. package/dist/components/collapse/style.js.map +1 -1
  74. package/dist/components/context-menu/index.d.ts +307 -310
  75. package/dist/components/context-menu/index.d.ts.map +1 -0
  76. package/dist/components/context-menu/index.js +685 -270
  77. package/dist/components/context-menu/index.js.map +1 -1
  78. package/dist/components/context-menu/scrim.js +3 -4
  79. package/dist/components/context-menu/scrim.js.map +1 -1
  80. package/dist/components/context-menu/style.js +3 -4
  81. package/dist/components/context-menu/style.js.map +1 -1
  82. package/dist/components/dialog/index.d.ts +87 -78
  83. package/dist/components/dialog/index.d.ts.map +1 -0
  84. package/dist/components/dialog/index.js +183 -88
  85. package/dist/components/dialog/index.js.map +1 -1
  86. package/dist/components/dialog/style.js +3 -4
  87. package/dist/components/dialog/style.js.map +1 -1
  88. package/dist/components/drawer/index.d.ts +159 -150
  89. package/dist/components/drawer/index.d.ts.map +1 -0
  90. package/dist/components/drawer/index.js +503 -242
  91. package/dist/components/drawer/index.js.map +1 -1
  92. package/dist/components/drawer/style.js +3 -4
  93. package/dist/components/drawer/style.js.map +1 -1
  94. package/dist/components/dropdown/index.d.ts +125 -124
  95. package/dist/components/dropdown/index.d.ts.map +1 -0
  96. package/dist/components/dropdown/index.js +556 -328
  97. package/dist/components/dropdown/index.js.map +1 -1
  98. package/dist/components/dropdown/style.js +3 -4
  99. package/dist/components/dropdown/style.js.map +1 -1
  100. package/dist/components/dropdown-divider/index.d.ts +7 -6
  101. package/dist/components/dropdown-divider/index.d.ts.map +1 -0
  102. package/dist/components/dropdown-divider/index.js +10 -11
  103. package/dist/components/dropdown-divider/index.js.map +1 -1
  104. package/dist/components/dropdown-divider/style.js +3 -4
  105. package/dist/components/dropdown-divider/style.js.map +1 -1
  106. package/dist/components/dropdown-header/index.d.ts +7 -6
  107. package/dist/components/dropdown-header/index.d.ts.map +1 -0
  108. package/dist/components/dropdown-header/index.js +10 -11
  109. package/dist/components/dropdown-header/index.js.map +1 -1
  110. package/dist/components/dropdown-header/style.js +3 -4
  111. package/dist/components/dropdown-header/style.js.map +1 -1
  112. package/dist/components/dropdown-item/index.d.ts +13 -11
  113. package/dist/components/dropdown-item/index.d.ts.map +1 -0
  114. package/dist/components/dropdown-item/index.js +32 -25
  115. package/dist/components/dropdown-item/index.js.map +1 -1
  116. package/dist/components/dropdown-item/style.js +3 -4
  117. package/dist/components/dropdown-item/style.js.map +1 -1
  118. package/dist/components/editable-text/index.d.ts +506 -505
  119. package/dist/components/editable-text/index.d.ts.map +1 -0
  120. package/dist/components/editable-text/index.js +281 -127
  121. package/dist/components/editable-text/index.js.map +1 -1
  122. package/dist/components/editable-text/style.js +3 -4
  123. package/dist/components/editable-text/style.js.map +1 -1
  124. package/dist/components/empty/index.d.ts +26 -36
  125. package/dist/components/empty/index.d.ts.map +1 -0
  126. package/dist/components/empty/index.js +73 -60
  127. package/dist/components/empty/index.js.map +1 -1
  128. package/dist/components/empty/style.js +3 -4
  129. package/dist/components/empty/style.js.map +1 -1
  130. package/dist/components/icon/index.d.ts +12 -11
  131. package/dist/components/icon/index.d.ts.map +1 -0
  132. package/dist/components/icon/index.js +34 -27
  133. package/dist/components/icon/index.js.map +1 -1
  134. package/dist/components/icon/style.js +3 -4
  135. package/dist/components/icon/style.js.map +1 -1
  136. package/dist/components/image-preview/index.d.ts +58 -44
  137. package/dist/components/image-preview/index.d.ts.map +1 -0
  138. package/dist/components/image-preview/index.js +536 -265
  139. package/dist/components/image-preview/index.js.map +1 -1
  140. package/dist/components/image-preview/style.js +3 -4
  141. package/dist/components/image-preview/style.js.map +1 -1
  142. package/dist/components/index.d.ts +46 -43
  143. package/dist/components/index.d.ts.map +1 -0
  144. package/dist/components/index.js +41 -41
  145. package/dist/components/input/index.d.ts +418 -413
  146. package/dist/components/input/index.d.ts.map +1 -0
  147. package/dist/components/input/index.js +148 -84
  148. package/dist/components/input/index.js.map +1 -1
  149. package/dist/components/input/style.js +3 -4
  150. package/dist/components/input/style.js.map +1 -1
  151. package/dist/components/input-number/index.d.ts +453 -447
  152. package/dist/components/input-number/index.d.ts.map +1 -0
  153. package/dist/components/input-number/index.js +484 -292
  154. package/dist/components/input-number/index.js.map +1 -1
  155. package/dist/components/input-number/style.js +3 -4
  156. package/dist/components/input-number/style.js.map +1 -1
  157. package/dist/components/layout/index.d.ts +110 -87
  158. package/dist/components/layout/index.d.ts.map +1 -0
  159. package/dist/components/layout/index.js +238 -144
  160. package/dist/components/layout/index.js.map +1 -1
  161. package/dist/components/layout/style.js +3 -4
  162. package/dist/components/layout/style.js.map +1 -1
  163. package/dist/components/middle-ellipsis/index.d.ts +93 -92
  164. package/dist/components/middle-ellipsis/index.d.ts.map +1 -0
  165. package/dist/components/middle-ellipsis/index.js +261 -107
  166. package/dist/components/middle-ellipsis/index.js.map +1 -1
  167. package/dist/components/middle-ellipsis/style.js +3 -4
  168. package/dist/components/middle-ellipsis/style.js.map +1 -1
  169. package/dist/components/middle-ellipsis/truncate.js +60 -30
  170. package/dist/components/middle-ellipsis/truncate.js.map +1 -1
  171. package/dist/components/option/index.d.ts +20 -18
  172. package/dist/components/option/index.d.ts.map +1 -0
  173. package/dist/components/option/index.js +53 -40
  174. package/dist/components/option/index.js.map +1 -1
  175. package/dist/components/option/style.js +3 -4
  176. package/dist/components/option/style.js.map +1 -1
  177. package/dist/components/popover/index.d.ts +69 -68
  178. package/dist/components/popover/index.d.ts.map +1 -0
  179. package/dist/components/popover/index.js +221 -104
  180. package/dist/components/popover/index.js.map +1 -1
  181. package/dist/components/popover/style.js +3 -4
  182. package/dist/components/popover/style.js.map +1 -1
  183. package/dist/components/radio/index.d.ts +396 -395
  184. package/dist/components/radio/index.d.ts.map +1 -0
  185. package/dist/components/radio/index.js +91 -62
  186. package/dist/components/radio/index.js.map +1 -1
  187. package/dist/components/radio/interaction.js +10 -11
  188. package/dist/components/radio/interaction.js.map +1 -1
  189. package/dist/components/radio/style.js +3 -4
  190. package/dist/components/radio/style.js.map +1 -1
  191. package/dist/components/radio-group/index.d.ts +417 -416
  192. package/dist/components/radio-group/index.d.ts.map +1 -0
  193. package/dist/components/radio-group/index.js +307 -207
  194. package/dist/components/radio-group/index.js.map +1 -1
  195. package/dist/components/radio-group/style.js +3 -4
  196. package/dist/components/radio-group/style.js.map +1 -1
  197. package/dist/components/segmented/index.d.ts +408 -402
  198. package/dist/components/segmented/index.d.ts.map +1 -0
  199. package/dist/components/segmented/index.js +267 -158
  200. package/dist/components/segmented/index.js.map +1 -1
  201. package/dist/components/segmented/style.js +3 -4
  202. package/dist/components/segmented/style.js.map +1 -1
  203. package/dist/components/segmented-trigger/index.d.ts +18 -17
  204. package/dist/components/segmented-trigger/index.d.ts.map +1 -0
  205. package/dist/components/segmented-trigger/index.js +45 -36
  206. package/dist/components/segmented-trigger/index.js.map +1 -1
  207. package/dist/components/segmented-trigger/style.js +3 -4
  208. package/dist/components/segmented-trigger/style.js.map +1 -1
  209. package/dist/components/select/index.d.ts +450 -448
  210. package/dist/components/select/index.d.ts.map +1 -0
  211. package/dist/components/select/index.js +342 -188
  212. package/dist/components/select/index.js.map +1 -1
  213. package/dist/components/select/style.js +3 -4
  214. package/dist/components/select/style.js.map +1 -1
  215. package/dist/components/slider/index.d.ts +428 -427
  216. package/dist/components/slider/index.d.ts.map +1 -0
  217. package/dist/components/slider/index.js +308 -216
  218. package/dist/components/slider/index.js.map +1 -1
  219. package/dist/components/slider/style.js +3 -4
  220. package/dist/components/slider/style.js.map +1 -1
  221. package/dist/components/spinner/index.d.ts +39 -38
  222. package/dist/components/spinner/index.d.ts.map +1 -0
  223. package/dist/components/spinner/index.js +118 -65
  224. package/dist/components/spinner/index.js.map +1 -1
  225. package/dist/components/spinner/style.js +3 -4
  226. package/dist/components/spinner/style.js.map +1 -1
  227. package/dist/components/svg-draw-lines/index.d.ts +40 -39
  228. package/dist/components/svg-draw-lines/index.d.ts.map +1 -0
  229. package/dist/components/svg-draw-lines/index.js +189 -106
  230. package/dist/components/svg-draw-lines/index.js.map +1 -1
  231. package/dist/components/svg-draw-lines/style.js +3 -4
  232. package/dist/components/svg-draw-lines/style.js.map +1 -1
  233. package/dist/components/switch/index.d.ts +411 -409
  234. package/dist/components/switch/index.d.ts.map +1 -0
  235. package/dist/components/switch/index.js +193 -106
  236. package/dist/components/switch/index.js.map +1 -1
  237. package/dist/components/switch/style.js +3 -4
  238. package/dist/components/switch/style.js.map +1 -1
  239. package/dist/components/textarea/index.d.ts +430 -425
  240. package/dist/components/textarea/index.d.ts.map +1 -0
  241. package/dist/components/textarea/index.js +187 -100
  242. package/dist/components/textarea/index.js.map +1 -1
  243. package/dist/components/textarea/style.js +3 -4
  244. package/dist/components/textarea/style.js.map +1 -1
  245. package/dist/components/theme/index.d.ts +45 -44
  246. package/dist/components/theme/index.d.ts.map +1 -0
  247. package/dist/components/theme/index.js +268 -161
  248. package/dist/components/theme/index.js.map +1 -1
  249. package/dist/components/theme/style.js +3 -4
  250. package/dist/components/theme/style.js.map +1 -1
  251. package/dist/components/toast/index.d.ts +4 -3
  252. package/dist/components/toast/index.js +3 -3
  253. package/dist/components/toast/manager.d.ts +9 -8
  254. package/dist/components/toast/manager.d.ts.map +1 -0
  255. package/dist/components/toast/manager.js +215 -119
  256. package/dist/components/toast/manager.js.map +1 -1
  257. package/dist/components/toast/style.js +3 -4
  258. package/dist/components/toast/style.js.map +1 -1
  259. package/dist/components/toast/toast.d.ts +75 -71
  260. package/dist/components/toast/toast.d.ts.map +1 -0
  261. package/dist/components/toast/toast.js +203 -96
  262. package/dist/components/toast/toast.js.map +1 -1
  263. package/dist/components/toast/types.d.ts +10 -9
  264. package/dist/components/toast/types.d.ts.map +1 -0
  265. package/dist/components/tooltip/index.d.ts +72 -62
  266. package/dist/components/tooltip/index.d.ts.map +1 -0
  267. package/dist/components/tooltip/index.js +251 -93
  268. package/dist/components/tooltip/index.js.map +1 -1
  269. package/dist/components/tooltip/style.js +3 -4
  270. package/dist/components/tooltip/style.js.map +1 -1
  271. package/dist/icons/generated/akar-icons-check.d.ts +5 -4
  272. package/dist/icons/generated/akar-icons-check.d.ts.map +1 -0
  273. package/dist/icons/generated/akar-icons-check.js +3 -4
  274. package/dist/icons/generated/akar-icons-check.js.map +1 -1
  275. package/dist/icons/generated/akar-icons-circle-check.d.ts +5 -4
  276. package/dist/icons/generated/akar-icons-circle-check.d.ts.map +1 -0
  277. package/dist/icons/generated/akar-icons-circle-check.js +3 -4
  278. package/dist/icons/generated/akar-icons-circle-check.js.map +1 -1
  279. package/dist/icons/generated/andrsrxn-inbox.d.ts +7 -0
  280. package/dist/icons/generated/andrsrxn-inbox.d.ts.map +1 -0
  281. package/dist/icons/generated/andrsrxn-inbox.js +9 -0
  282. package/dist/icons/generated/andrsrxn-inbox.js.map +1 -0
  283. package/dist/icons/generated/bi-check-lg.d.ts +5 -4
  284. package/dist/icons/generated/bi-check-lg.d.ts.map +1 -0
  285. package/dist/icons/generated/bi-check-lg.js +3 -4
  286. package/dist/icons/generated/bi-check-lg.js.map +1 -1
  287. package/dist/icons/generated/bi-check.d.ts +5 -4
  288. package/dist/icons/generated/bi-check.d.ts.map +1 -0
  289. package/dist/icons/generated/bi-check.js +3 -4
  290. package/dist/icons/generated/bi-check.js.map +1 -1
  291. package/dist/icons/generated/fluent-tag-search-24-regular.d.ts +5 -4
  292. package/dist/icons/generated/fluent-tag-search-24-regular.d.ts.map +1 -0
  293. package/dist/icons/generated/fluent-tag-search-24-regular.js +3 -4
  294. package/dist/icons/generated/fluent-tag-search-24-regular.js.map +1 -1
  295. package/dist/icons/generated/heroicons-bars-arrow-down-16-solid.d.ts +5 -4
  296. package/dist/icons/generated/heroicons-bars-arrow-down-16-solid.d.ts.map +1 -0
  297. package/dist/icons/generated/heroicons-bars-arrow-down-16-solid.js +3 -4
  298. package/dist/icons/generated/heroicons-bars-arrow-down-16-solid.js.map +1 -1
  299. package/dist/icons/generated/heroicons-bars-arrow-up-16-solid.d.ts +5 -4
  300. package/dist/icons/generated/heroicons-bars-arrow-up-16-solid.d.ts.map +1 -0
  301. package/dist/icons/generated/heroicons-bars-arrow-up-16-solid.js +3 -4
  302. package/dist/icons/generated/heroicons-bars-arrow-up-16-solid.js.map +1 -1
  303. package/dist/icons/generated/heroicons-check-16-solid.d.ts +5 -4
  304. package/dist/icons/generated/heroicons-check-16-solid.d.ts.map +1 -0
  305. package/dist/icons/generated/heroicons-check-16-solid.js +3 -4
  306. package/dist/icons/generated/heroicons-check-16-solid.js.map +1 -1
  307. package/dist/icons/generated/heroicons-x-mark-16-solid.d.ts +5 -4
  308. package/dist/icons/generated/heroicons-x-mark-16-solid.d.ts.map +1 -0
  309. package/dist/icons/generated/heroicons-x-mark-16-solid.js +3 -4
  310. package/dist/icons/generated/heroicons-x-mark-16-solid.js.map +1 -1
  311. package/dist/icons/generated/jam-close-circle-f.d.ts +7 -6
  312. package/dist/icons/generated/jam-close-circle-f.d.ts.map +1 -0
  313. package/dist/icons/generated/jam-close-circle-f.js +3 -4
  314. package/dist/icons/generated/jam-close-circle-f.js.map +1 -1
  315. package/dist/icons/generated/lucide-arrow-down-to-line.d.ts +5 -4
  316. package/dist/icons/generated/lucide-arrow-down-to-line.d.ts.map +1 -0
  317. package/dist/icons/generated/lucide-arrow-down-to-line.js +3 -4
  318. package/dist/icons/generated/lucide-arrow-down-to-line.js.map +1 -1
  319. package/dist/icons/generated/lucide-arrow-up-to-line.d.ts +5 -4
  320. package/dist/icons/generated/lucide-arrow-up-to-line.d.ts.map +1 -0
  321. package/dist/icons/generated/lucide-arrow-up-to-line.js +3 -4
  322. package/dist/icons/generated/lucide-arrow-up-to-line.js.map +1 -1
  323. package/dist/icons/generated/lucide-bell.d.ts +5 -4
  324. package/dist/icons/generated/lucide-bell.d.ts.map +1 -0
  325. package/dist/icons/generated/lucide-bell.js +3 -4
  326. package/dist/icons/generated/lucide-bell.js.map +1 -1
  327. package/dist/icons/generated/lucide-check.d.ts +5 -4
  328. package/dist/icons/generated/lucide-check.d.ts.map +1 -0
  329. package/dist/icons/generated/lucide-check.js +3 -4
  330. package/dist/icons/generated/lucide-check.js.map +1 -1
  331. package/dist/icons/generated/lucide-chevron-down.d.ts +5 -4
  332. package/dist/icons/generated/lucide-chevron-down.d.ts.map +1 -0
  333. package/dist/icons/generated/lucide-chevron-down.js +3 -4
  334. package/dist/icons/generated/lucide-chevron-down.js.map +1 -1
  335. package/dist/icons/generated/lucide-chevron-left.d.ts +5 -4
  336. package/dist/icons/generated/lucide-chevron-left.d.ts.map +1 -0
  337. package/dist/icons/generated/lucide-chevron-left.js +3 -4
  338. package/dist/icons/generated/lucide-chevron-left.js.map +1 -1
  339. package/dist/icons/generated/lucide-chevron-right.d.ts +5 -4
  340. package/dist/icons/generated/lucide-chevron-right.d.ts.map +1 -0
  341. package/dist/icons/generated/lucide-chevron-right.js +3 -4
  342. package/dist/icons/generated/lucide-chevron-right.js.map +1 -1
  343. package/dist/icons/generated/lucide-chevron-up.d.ts +5 -4
  344. package/dist/icons/generated/lucide-chevron-up.d.ts.map +1 -0
  345. package/dist/icons/generated/lucide-chevron-up.js +3 -4
  346. package/dist/icons/generated/lucide-chevron-up.js.map +1 -1
  347. package/dist/icons/generated/lucide-circle-alert.d.ts +5 -4
  348. package/dist/icons/generated/lucide-circle-alert.d.ts.map +1 -0
  349. package/dist/icons/generated/lucide-circle-alert.js +3 -4
  350. package/dist/icons/generated/lucide-circle-alert.js.map +1 -1
  351. package/dist/icons/generated/lucide-clapperboard.d.ts +5 -4
  352. package/dist/icons/generated/lucide-clapperboard.d.ts.map +1 -0
  353. package/dist/icons/generated/lucide-clapperboard.js +3 -4
  354. package/dist/icons/generated/lucide-clapperboard.js.map +1 -1
  355. package/dist/icons/generated/lucide-clipboard-paste.d.ts +5 -4
  356. package/dist/icons/generated/lucide-clipboard-paste.d.ts.map +1 -0
  357. package/dist/icons/generated/lucide-clipboard-paste.js +3 -4
  358. package/dist/icons/generated/lucide-clipboard-paste.js.map +1 -1
  359. package/dist/icons/generated/lucide-code.d.ts +5 -4
  360. package/dist/icons/generated/lucide-code.d.ts.map +1 -0
  361. package/dist/icons/generated/lucide-code.js +3 -4
  362. package/dist/icons/generated/lucide-code.js.map +1 -1
  363. package/dist/icons/generated/lucide-copy.d.ts +5 -4
  364. package/dist/icons/generated/lucide-copy.d.ts.map +1 -0
  365. package/dist/icons/generated/lucide-copy.js +3 -4
  366. package/dist/icons/generated/lucide-copy.js.map +1 -1
  367. package/dist/icons/generated/lucide-download.d.ts +5 -4
  368. package/dist/icons/generated/lucide-download.d.ts.map +1 -0
  369. package/dist/icons/generated/lucide-download.js +3 -4
  370. package/dist/icons/generated/lucide-download.js.map +1 -1
  371. package/dist/icons/generated/lucide-ellipsis-vertical.d.ts +5 -4
  372. package/dist/icons/generated/lucide-ellipsis-vertical.d.ts.map +1 -0
  373. package/dist/icons/generated/lucide-ellipsis-vertical.js +3 -4
  374. package/dist/icons/generated/lucide-ellipsis-vertical.js.map +1 -1
  375. package/dist/icons/generated/lucide-external-link.d.ts +5 -4
  376. package/dist/icons/generated/lucide-external-link.d.ts.map +1 -0
  377. package/dist/icons/generated/lucide-external-link.js +3 -4
  378. package/dist/icons/generated/lucide-external-link.js.map +1 -1
  379. package/dist/icons/generated/lucide-eye.d.ts +5 -4
  380. package/dist/icons/generated/lucide-eye.d.ts.map +1 -0
  381. package/dist/icons/generated/lucide-eye.js +3 -4
  382. package/dist/icons/generated/lucide-eye.js.map +1 -1
  383. package/dist/icons/generated/lucide-file-text.d.ts +5 -4
  384. package/dist/icons/generated/lucide-file-text.d.ts.map +1 -0
  385. package/dist/icons/generated/lucide-file-text.js +3 -4
  386. package/dist/icons/generated/lucide-file-text.js.map +1 -1
  387. package/dist/icons/generated/lucide-file.d.ts +5 -4
  388. package/dist/icons/generated/lucide-file.d.ts.map +1 -0
  389. package/dist/icons/generated/lucide-file.js +3 -4
  390. package/dist/icons/generated/lucide-file.js.map +1 -1
  391. package/dist/icons/generated/lucide-film.d.ts +5 -4
  392. package/dist/icons/generated/lucide-film.d.ts.map +1 -0
  393. package/dist/icons/generated/lucide-film.js +3 -4
  394. package/dist/icons/generated/lucide-film.js.map +1 -1
  395. package/dist/icons/generated/lucide-folder-open.d.ts +5 -4
  396. package/dist/icons/generated/lucide-folder-open.d.ts.map +1 -0
  397. package/dist/icons/generated/lucide-folder-open.js +3 -4
  398. package/dist/icons/generated/lucide-folder-open.js.map +1 -1
  399. package/dist/icons/generated/lucide-folder.d.ts +5 -4
  400. package/dist/icons/generated/lucide-folder.d.ts.map +1 -0
  401. package/dist/icons/generated/lucide-folder.js +3 -4
  402. package/dist/icons/generated/lucide-folder.js.map +1 -1
  403. package/dist/icons/generated/lucide-globe.d.ts +5 -4
  404. package/dist/icons/generated/lucide-globe.d.ts.map +1 -0
  405. package/dist/icons/generated/lucide-globe.js +3 -4
  406. package/dist/icons/generated/lucide-globe.js.map +1 -1
  407. package/dist/icons/generated/lucide-headphones.d.ts +5 -4
  408. package/dist/icons/generated/lucide-headphones.d.ts.map +1 -0
  409. package/dist/icons/generated/lucide-headphones.js +3 -4
  410. package/dist/icons/generated/lucide-headphones.js.map +1 -1
  411. package/dist/icons/generated/lucide-heart.d.ts +5 -4
  412. package/dist/icons/generated/lucide-heart.d.ts.map +1 -0
  413. package/dist/icons/generated/lucide-heart.js +3 -4
  414. package/dist/icons/generated/lucide-heart.js.map +1 -1
  415. package/dist/icons/generated/lucide-image.d.ts +5 -4
  416. package/dist/icons/generated/lucide-image.d.ts.map +1 -0
  417. package/dist/icons/generated/lucide-image.js +3 -4
  418. package/dist/icons/generated/lucide-image.js.map +1 -1
  419. package/dist/icons/generated/lucide-inbox.d.ts +5 -4
  420. package/dist/icons/generated/lucide-inbox.d.ts.map +1 -0
  421. package/dist/icons/generated/lucide-inbox.js +3 -4
  422. package/dist/icons/generated/lucide-inbox.js.map +1 -1
  423. package/dist/icons/generated/lucide-info.d.ts +5 -4
  424. package/dist/icons/generated/lucide-info.d.ts.map +1 -0
  425. package/dist/icons/generated/lucide-info.js +3 -4
  426. package/dist/icons/generated/lucide-info.js.map +1 -1
  427. package/dist/icons/generated/lucide-layout-grid.d.ts +5 -4
  428. package/dist/icons/generated/lucide-layout-grid.d.ts.map +1 -0
  429. package/dist/icons/generated/lucide-layout-grid.js +3 -4
  430. package/dist/icons/generated/lucide-layout-grid.js.map +1 -1
  431. package/dist/icons/generated/lucide-link.d.ts +5 -4
  432. package/dist/icons/generated/lucide-link.d.ts.map +1 -0
  433. package/dist/icons/generated/lucide-link.js +3 -4
  434. package/dist/icons/generated/lucide-link.js.map +1 -1
  435. package/dist/icons/generated/lucide-list-filter.d.ts +5 -4
  436. package/dist/icons/generated/lucide-list-filter.d.ts.map +1 -0
  437. package/dist/icons/generated/lucide-list-filter.js +3 -4
  438. package/dist/icons/generated/lucide-list-filter.js.map +1 -1
  439. package/dist/icons/generated/lucide-list-restart.d.ts +5 -4
  440. package/dist/icons/generated/lucide-list-restart.d.ts.map +1 -0
  441. package/dist/icons/generated/lucide-list-restart.js +3 -4
  442. package/dist/icons/generated/lucide-list-restart.js.map +1 -1
  443. package/dist/icons/generated/lucide-loader-circle.d.ts +5 -4
  444. package/dist/icons/generated/lucide-loader-circle.d.ts.map +1 -0
  445. package/dist/icons/generated/lucide-loader-circle.js +3 -4
  446. package/dist/icons/generated/lucide-loader-circle.js.map +1 -1
  447. package/dist/icons/generated/lucide-mail.d.ts +5 -4
  448. package/dist/icons/generated/lucide-mail.d.ts.map +1 -0
  449. package/dist/icons/generated/lucide-mail.js +3 -4
  450. package/dist/icons/generated/lucide-mail.js.map +1 -1
  451. package/dist/icons/generated/lucide-minus.d.ts +5 -4
  452. package/dist/icons/generated/lucide-minus.d.ts.map +1 -0
  453. package/dist/icons/generated/lucide-minus.js +3 -4
  454. package/dist/icons/generated/lucide-minus.js.map +1 -1
  455. package/dist/icons/generated/lucide-music.d.ts +5 -4
  456. package/dist/icons/generated/lucide-music.d.ts.map +1 -0
  457. package/dist/icons/generated/lucide-music.js +3 -4
  458. package/dist/icons/generated/lucide-music.js.map +1 -1
  459. package/dist/icons/generated/lucide-package.d.ts +5 -4
  460. package/dist/icons/generated/lucide-package.d.ts.map +1 -0
  461. package/dist/icons/generated/lucide-package.js +3 -4
  462. package/dist/icons/generated/lucide-package.js.map +1 -1
  463. package/dist/icons/generated/lucide-pen-line.d.ts +5 -4
  464. package/dist/icons/generated/lucide-pen-line.d.ts.map +1 -0
  465. package/dist/icons/generated/lucide-pen-line.js +3 -4
  466. package/dist/icons/generated/lucide-pen-line.js.map +1 -1
  467. package/dist/icons/generated/lucide-pencil.d.ts +5 -4
  468. package/dist/icons/generated/lucide-pencil.d.ts.map +1 -0
  469. package/dist/icons/generated/lucide-pencil.js +3 -4
  470. package/dist/icons/generated/lucide-pencil.js.map +1 -1
  471. package/dist/icons/generated/lucide-play.d.ts +5 -4
  472. package/dist/icons/generated/lucide-play.d.ts.map +1 -0
  473. package/dist/icons/generated/lucide-play.js +3 -4
  474. package/dist/icons/generated/lucide-play.js.map +1 -1
  475. package/dist/icons/generated/lucide-plus.d.ts +5 -4
  476. package/dist/icons/generated/lucide-plus.d.ts.map +1 -0
  477. package/dist/icons/generated/lucide-plus.js +3 -4
  478. package/dist/icons/generated/lucide-plus.js.map +1 -1
  479. package/dist/icons/generated/lucide-printer.d.ts +5 -4
  480. package/dist/icons/generated/lucide-printer.d.ts.map +1 -0
  481. package/dist/icons/generated/lucide-printer.js +3 -4
  482. package/dist/icons/generated/lucide-printer.js.map +1 -1
  483. package/dist/icons/generated/lucide-redo-2.d.ts +5 -4
  484. package/dist/icons/generated/lucide-redo-2.d.ts.map +1 -0
  485. package/dist/icons/generated/lucide-redo-2.js +3 -4
  486. package/dist/icons/generated/lucide-redo-2.js.map +1 -1
  487. package/dist/icons/generated/lucide-refresh-cw.d.ts +5 -4
  488. package/dist/icons/generated/lucide-refresh-cw.d.ts.map +1 -0
  489. package/dist/icons/generated/lucide-refresh-cw.js +3 -4
  490. package/dist/icons/generated/lucide-refresh-cw.js.map +1 -1
  491. package/dist/icons/generated/lucide-scissors.d.ts +5 -4
  492. package/dist/icons/generated/lucide-scissors.d.ts.map +1 -0
  493. package/dist/icons/generated/lucide-scissors.js +3 -4
  494. package/dist/icons/generated/lucide-scissors.js.map +1 -1
  495. package/dist/icons/generated/lucide-search.d.ts +5 -4
  496. package/dist/icons/generated/lucide-search.d.ts.map +1 -0
  497. package/dist/icons/generated/lucide-search.js +3 -4
  498. package/dist/icons/generated/lucide-search.js.map +1 -1
  499. package/dist/icons/generated/lucide-settings.d.ts +5 -4
  500. package/dist/icons/generated/lucide-settings.d.ts.map +1 -0
  501. package/dist/icons/generated/lucide-settings.js +3 -4
  502. package/dist/icons/generated/lucide-settings.js.map +1 -1
  503. package/dist/icons/generated/lucide-sliders-horizontal.d.ts +5 -4
  504. package/dist/icons/generated/lucide-sliders-horizontal.d.ts.map +1 -0
  505. package/dist/icons/generated/lucide-sliders-horizontal.js +3 -4
  506. package/dist/icons/generated/lucide-sliders-horizontal.js.map +1 -1
  507. package/dist/icons/generated/lucide-star.d.ts +5 -4
  508. package/dist/icons/generated/lucide-star.d.ts.map +1 -0
  509. package/dist/icons/generated/lucide-star.js +3 -4
  510. package/dist/icons/generated/lucide-star.js.map +1 -1
  511. package/dist/icons/generated/lucide-tag.d.ts +5 -4
  512. package/dist/icons/generated/lucide-tag.d.ts.map +1 -0
  513. package/dist/icons/generated/lucide-tag.js +3 -4
  514. package/dist/icons/generated/lucide-tag.js.map +1 -1
  515. package/dist/icons/generated/lucide-tags.d.ts +5 -4
  516. package/dist/icons/generated/lucide-tags.d.ts.map +1 -0
  517. package/dist/icons/generated/lucide-tags.js +3 -4
  518. package/dist/icons/generated/lucide-tags.js.map +1 -1
  519. package/dist/icons/generated/lucide-trash-2.d.ts +5 -4
  520. package/dist/icons/generated/lucide-trash-2.d.ts.map +1 -0
  521. package/dist/icons/generated/lucide-trash-2.js +3 -4
  522. package/dist/icons/generated/lucide-trash-2.js.map +1 -1
  523. package/dist/icons/generated/lucide-triangle-alert.d.ts +5 -4
  524. package/dist/icons/generated/lucide-triangle-alert.d.ts.map +1 -0
  525. package/dist/icons/generated/lucide-triangle-alert.js +3 -4
  526. package/dist/icons/generated/lucide-triangle-alert.js.map +1 -1
  527. package/dist/icons/generated/lucide-undo-2.d.ts +5 -4
  528. package/dist/icons/generated/lucide-undo-2.d.ts.map +1 -0
  529. package/dist/icons/generated/lucide-undo-2.js +3 -4
  530. package/dist/icons/generated/lucide-undo-2.js.map +1 -1
  531. package/dist/icons/generated/lucide-upload.d.ts +5 -4
  532. package/dist/icons/generated/lucide-upload.d.ts.map +1 -0
  533. package/dist/icons/generated/lucide-upload.js +3 -4
  534. package/dist/icons/generated/lucide-upload.js.map +1 -1
  535. package/dist/icons/generated/lucide-user.d.ts +5 -4
  536. package/dist/icons/generated/lucide-user.d.ts.map +1 -0
  537. package/dist/icons/generated/lucide-user.js +3 -4
  538. package/dist/icons/generated/lucide-user.js.map +1 -1
  539. package/dist/icons/generated/lucide-wrench.d.ts +5 -4
  540. package/dist/icons/generated/lucide-wrench.d.ts.map +1 -0
  541. package/dist/icons/generated/lucide-wrench.js +3 -4
  542. package/dist/icons/generated/lucide-wrench.js.map +1 -1
  543. package/dist/icons/generated/lucide-x.d.ts +5 -4
  544. package/dist/icons/generated/lucide-x.d.ts.map +1 -0
  545. package/dist/icons/generated/lucide-x.js +3 -4
  546. package/dist/icons/generated/lucide-x.js.map +1 -1
  547. package/dist/icons/generated/mdi-tag-search-outline.d.ts +5 -4
  548. package/dist/icons/generated/mdi-tag-search-outline.d.ts.map +1 -0
  549. package/dist/icons/generated/mdi-tag-search-outline.js +3 -4
  550. package/dist/icons/generated/mdi-tag-search-outline.js.map +1 -1
  551. package/dist/icons/generated/ooui-close.d.ts +5 -4
  552. package/dist/icons/generated/ooui-close.d.ts.map +1 -0
  553. package/dist/icons/generated/ooui-close.js +3 -4
  554. package/dist/icons/generated/ooui-close.js.map +1 -1
  555. package/dist/icons/generated/radix-icons-panel-left-minimized.d.ts +5 -4
  556. package/dist/icons/generated/radix-icons-panel-left-minimized.d.ts.map +1 -0
  557. package/dist/icons/generated/radix-icons-panel-left-minimized.js +3 -4
  558. package/dist/icons/generated/radix-icons-panel-left-minimized.js.map +1 -1
  559. package/dist/icons/generated/radix-icons-reset.d.ts +5 -4
  560. package/dist/icons/generated/radix-icons-reset.d.ts.map +1 -0
  561. package/dist/icons/generated/radix-icons-reset.js +3 -4
  562. package/dist/icons/generated/radix-icons-reset.js.map +1 -1
  563. package/dist/icons/generated/tabler-sort-ascending-letters.d.ts +5 -4
  564. package/dist/icons/generated/tabler-sort-ascending-letters.d.ts.map +1 -0
  565. package/dist/icons/generated/tabler-sort-ascending-letters.js +3 -4
  566. package/dist/icons/generated/tabler-sort-ascending-letters.js.map +1 -1
  567. package/dist/icons/index.d.ts +75 -73
  568. package/dist/icons/index.js +75 -74
  569. package/dist/shared/element-height/index.js +51 -25
  570. package/dist/shared/element-height/index.js.map +1 -1
  571. package/dist/shared/element-width/index.js +39 -24
  572. package/dist/shared/element-width/index.js.map +1 -1
  573. package/dist/shared/events/user-change.js +14 -8
  574. package/dist/shared/events/user-change.js.map +1 -1
  575. package/dist/shared/focus/pointer-focus.js +56 -30
  576. package/dist/shared/focus/pointer-focus.js.map +1 -1
  577. package/dist/shared/focus/tabbable.js +96 -0
  578. package/dist/shared/focus/tabbable.js.map +1 -0
  579. package/dist/shared/form-association/field-id.js +13 -6
  580. package/dist/shared/form-association/field-id.js.map +1 -1
  581. package/dist/shared/form-association/index.js +75 -42
  582. package/dist/shared/form-association/index.js.map +1 -1
  583. package/dist/shared/gesture/drag-gesture.js +239 -99
  584. package/dist/shared/gesture/drag-gesture.js.map +1 -1
  585. package/dist/shared/gesture/physics.js +49 -16
  586. package/dist/shared/gesture/physics.js.map +1 -1
  587. package/dist/shared/gesture/pinch-gesture.js +111 -60
  588. package/dist/shared/gesture/pinch-gesture.js.map +1 -1
  589. package/dist/shared/group-management/index.js +181 -84
  590. package/dist/shared/group-management/index.js.map +1 -1
  591. package/dist/shared/label-emptiness/index.js +45 -26
  592. package/dist/shared/label-emptiness/index.js.map +1 -1
  593. package/dist/shared/locale/builtin-labels.js +38 -0
  594. package/dist/shared/locale/builtin-labels.js.map +1 -0
  595. package/dist/shared/menu-behavior/index.js +113 -60
  596. package/dist/shared/menu-behavior/index.js.map +1 -1
  597. package/dist/shared/menu-portal/menu-portal.js +47 -26
  598. package/dist/shared/menu-portal/menu-portal.js.map +1 -1
  599. package/dist/shared/menu-portal/menu-tree.js +132 -75
  600. package/dist/shared/menu-portal/menu-tree.js.map +1 -1
  601. package/dist/shared/normalize/index.js +16 -7
  602. package/dist/shared/normalize/index.js.map +1 -1
  603. package/dist/shared/open-state/index.js +7 -8
  604. package/dist/shared/open-state/index.js.map +1 -1
  605. package/dist/shared/option-portal/combobox-shell.js +121 -56
  606. package/dist/shared/option-portal/combobox-shell.js.map +1 -1
  607. package/dist/shared/option-portal/index.js +65 -44
  608. package/dist/shared/option-portal/index.js.map +1 -1
  609. package/dist/shared/overlay/anchored-panel.js +75 -40
  610. package/dist/shared/overlay/anchored-panel.js.map +1 -1
  611. package/dist/shared/overlay/native-dialog-presence.js +116 -52
  612. package/dist/shared/overlay/native-dialog-presence.js.map +1 -1
  613. package/dist/shared/overlay/nested-drawer-layers.js +76 -46
  614. package/dist/shared/overlay/nested-drawer-layers.js.map +1 -1
  615. package/dist/shared/overlay/open-overlay.js +240 -136
  616. package/dist/shared/overlay/open-overlay.js.map +1 -1
  617. package/dist/shared/overlay/overlay-root.js +33 -24
  618. package/dist/shared/overlay/overlay-root.js.map +1 -1
  619. package/dist/shared/overlay/overlay.js +109 -66
  620. package/dist/shared/overlay/overlay.js.map +1 -1
  621. package/dist/shared/overlay/placement-props.js +9 -4
  622. package/dist/shared/overlay/placement-props.js.map +1 -1
  623. package/dist/shared/overlay/portal.d.ts +2 -0
  624. package/dist/shared/overlay/portal.d.ts.map +1 -0
  625. package/dist/shared/overlay/portal.js +202 -117
  626. package/dist/shared/overlay/portal.js.map +1 -1
  627. package/dist/shared/overlay/positioning-generation.js +9 -10
  628. package/dist/shared/overlay/positioning-generation.js.map +1 -1
  629. package/dist/shared/overlay/presence.js +43 -21
  630. package/dist/shared/overlay/presence.js.map +1 -1
  631. package/dist/shared/overlay/theme-overlay-scope.js +22 -19
  632. package/dist/shared/overlay/theme-overlay-scope.js.map +1 -1
  633. package/dist/shared/scroll-lock/scroll-lock.js +49 -15
  634. package/dist/shared/scroll-lock/scroll-lock.js.map +1 -1
  635. package/dist/shared/theme/duration.js +13 -6
  636. package/dist/shared/theme/duration.js.map +1 -1
  637. package/dist/shared/theme/reduced-motion.js +14 -9
  638. package/dist/shared/theme/reduced-motion.js.map +1 -1
  639. package/dist/shared/theme/root-sync.js +85 -32
  640. package/dist/shared/theme/root-sync.js.map +1 -1
  641. package/dist/shared/visible-area/index.js +81 -37
  642. package/dist/shared/visible-area/index.js.map +1 -1
  643. package/dist/types/iconify.d.ts +1 -1
  644. package/dist/types/iconify.js +0 -0
  645. package/dist/types/react.d.ts +8 -10
  646. package/dist/types/react.d.ts.map +1 -0
  647. package/dist/types/react.js +0 -0
  648. package/dist/types/utils.d.ts +8 -13
  649. package/dist/types/utils.d.ts.map +1 -0
  650. package/dist/types/utils.js +0 -0
  651. package/dist/types/vue.d.ts +9 -13
  652. package/dist/types/vue.d.ts.map +1 -0
  653. package/dist/types/vue.js +0 -0
  654. package/dist/vite/index.d.ts +1 -0
  655. package/dist/vite/index.d.ts.map +1 -0
  656. package/dist/vite/index.js +30 -4
  657. package/dist/vite/index.js.map +1 -1
  658. package/package.json +11 -23
  659. package/dist/_virtual/_@oxc-project_runtime@0.149.0/helpers/esm/decorate.js +0 -9
  660. package/dist/components/middle-ellipsis/truncate.d.ts +0 -62
  661. package/dist/components/radio/interaction.d.ts +0 -4
  662. package/dist/scrollbars/index.d.ts +0 -33
  663. package/dist/scrollbars/index.js +0 -18
  664. package/dist/scrollbars/index.js.map +0 -1
  665. package/dist/scrollbars/internal.js +0 -6
  666. package/dist/scrollbars/internal.js.map +0 -1
  667. package/dist/scrollbars/style.css +0 -10
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../../src/components/input-number/index.ts"],"sourcesContent":["import '@/components/icon'\n\nimport { html, LitElement, unsafeCSS } from 'lit'\nimport { customElement, property, state } from 'lit/decorators.js'\nimport { ifDefined } from 'lit/directives/if-defined.js'\n\nimport glass from '@/classes/glass.css?inline'\nimport { lucideMinus, lucidePlus } from '@/icons'\nimport {\n FormAssociated,\n defineFormAssociation,\n forwardInputValidity,\n FormAssociationController\n} from '@/shared/form-association'\nimport { createFieldId } from '@/shared/form-association/field-id'\nimport { normalizeNumber } from '@/shared/normalize'\n\nimport style from './style.css?inline'\n\nconst decimalPlaces = (value: number): number => {\n const [numberText, exponent = '0'] = value.toString().toLowerCase().split('e')\n return Math.max(0, (numberText.split('.')[1]?.length ?? 0) - Number(exponent))\n}\n\ntype LabelledbyRoot = Document | ShadowRoot\n\ninterface LabelledbyReferenceRegistration {\n ids: Set<string>\n onReferenceChange: () => void\n onStylesheetChange: () => void\n}\n\ninterface LabelledbyRootObserver {\n observer: MutationObserver\n registrations: Set<LabelledbyReferenceRegistration>\n registrationsById: Map<string, Set<LabelledbyReferenceRegistration>>\n onStylesheetLoad: (event: Event) => void\n notifyStylesheetChange: () => void\n}\n\nconst labelledbyRootObservers = new WeakMap<LabelledbyRoot, LabelledbyRootObserver>()\n\nfunction nodeReferenceIds(node: Node): string[] {\n if (!(node instanceof Element)) return []\n const elements = [node, ...node.querySelectorAll('[id], label[for]')]\n return elements\n .flatMap(element => (element instanceof HTMLLabelElement ? [element.id, element.htmlFor] : [element.id]))\n .filter(Boolean)\n}\n\nfunction isStylesheetElement(element: Element): boolean {\n return (\n element instanceof HTMLStyleElement ||\n (element instanceof HTMLLinkElement && element.relList.contains('stylesheet'))\n )\n}\n\nfunction nodeContainsStylesheet(node: Node): boolean {\n return (\n (node instanceof Element && isStylesheetElement(node)) ||\n (node instanceof Element && node.querySelector('style, link[rel~=\"stylesheet\"]') !== null)\n )\n}\n\nfunction observeLabelledbyReferences(\n root: LabelledbyRoot,\n ids: Set<string>,\n onReferenceChange: () => void,\n onStylesheetChange: () => void\n): () => void {\n let shared = labelledbyRootObservers.get(root)\n\n if (!shared) {\n const registrations = new Set<LabelledbyReferenceRegistration>()\n const registrationsById = new Map<string, Set<LabelledbyReferenceRegistration>>()\n const notifyStylesheetChange = () => registrations.forEach(registration => registration.onStylesheetChange())\n const onStylesheetLoad = (event: Event) => {\n if (event.target instanceof HTMLLinkElement && event.target.relList.contains('stylesheet')) {\n notifyStylesheetChange()\n }\n }\n\n const observer = new MutationObserver(records => {\n const changedRegistrations = new Set<LabelledbyReferenceRegistration>()\n let stylesheetChanged = false\n const addRegistrationsForId = (id: string | null) => {\n if (!id) return\n registrationsById.get(id)?.forEach(registration => changedRegistrations.add(registration))\n }\n\n for (const record of records) {\n if (record.type === 'attributes') {\n const element = record.target as Element\n if (record.attributeName === 'id') {\n addRegistrationsForId(record.oldValue)\n addRegistrationsForId(element.id)\n } else if (record.attributeName === 'for' && element instanceof HTMLLabelElement) {\n addRegistrationsForId(record.oldValue)\n addRegistrationsForId(element.htmlFor)\n } else if (['disabled', 'media'].includes(record.attributeName ?? '') && isStylesheetElement(element)) {\n stylesheetChanged = true\n }\n } else if (record.type === 'childList') {\n if (record.target instanceof HTMLStyleElement || record.target instanceof HTMLLinkElement) {\n stylesheetChanged = true\n }\n for (const node of [...record.addedNodes, ...record.removedNodes]) {\n if (nodeContainsStylesheet(node)) stylesheetChanged = true\n for (const id of nodeReferenceIds(node)) addRegistrationsForId(id)\n }\n }\n }\n\n if (stylesheetChanged) notifyStylesheetChange()\n changedRegistrations.forEach(registration => registration.onReferenceChange())\n })\n\n shared = {\n observer,\n registrations,\n registrationsById,\n onStylesheetLoad,\n notifyStylesheetChange\n }\n labelledbyRootObservers.set(root, shared)\n observer.observe(root, {\n subtree: true,\n childList: true,\n attributes: true,\n attributeFilter: ['id', 'for', 'disabled', 'media'],\n attributeOldValue: true\n })\n root.addEventListener('load', onStylesheetLoad, true)\n }\n\n const registration: LabelledbyReferenceRegistration = {\n ids: new Set(ids),\n onReferenceChange,\n onStylesheetChange\n }\n shared.registrations.add(registration)\n for (const id of registration.ids) {\n const registrations = shared.registrationsById.get(id) ?? new Set()\n registrations.add(registration)\n shared.registrationsById.set(id, registrations)\n }\n\n return () => {\n if (!shared?.registrations.delete(registration)) return\n for (const id of registration.ids) {\n const registrations = shared.registrationsById.get(id)\n registrations?.delete(registration)\n if (registrations?.size === 0) shared.registrationsById.delete(id)\n }\n if (shared.registrations.size === 0) {\n shared.observer.disconnect()\n root.removeEventListener('load', shared.onStylesheetLoad, true)\n labelledbyRootObservers.delete(root)\n }\n }\n}\n\n@customElement('web-ui-input-number')\nexport class WebUiInputNumber extends FormAssociated(LitElement) {\n static override styles = [unsafeCSS(glass), unsafeCSS(style)]\n\n @property({ type: String, reflect: true }) placeholder = ''\n @property({ type: String, reflect: true }) name = ''\n @property({ type: Boolean, reflect: true }) disabled = false\n @property({ type: Boolean, reflect: true }) readonly = false\n @property({ type: Boolean, reflect: true }) required = false\n @property({ type: String, attribute: 'aria-label' }) override ariaLabel: string | null = null\n @property({ type: String, attribute: 'aria-labelledby' }) ariaLabelledby: string | undefined\n @property({ type: Number })\n get precision(): number {\n return this._precision\n }\n // 精度只影响读取(get value)/提交时的规整,不在赋值时抹掉原始小数:\n // `<web-ui-input-number value=\"1.5\" precision=\"2\">` 先跑 value setter、\n // 后跑 precision setter,若赋值时就按当时的默认精度 0 取整,1.5 会先变 2,\n // 之后再声明 precision=2 也恢复不了。\n set precision(v: number | null) {\n const old = this._precision\n const wasExplicitlySet = this._precisionWasSet\n this._precision = v ?? 0\n this._precisionWasSet = v !== null\n\n if (v === null) {\n if (this.hasAttribute('precision')) this.removeAttribute('precision')\n } else if (this.getAttribute('precision') !== String(v)) {\n this.setAttribute('precision', String(v))\n }\n\n if (old !== this._precision || wasExplicitlySet !== this._precisionWasSet) this.requestUpdate()\n }\n\n /** 原始值:只做 min/max 收敛,不按精度取整(取整发生在 get value)。 */\n @state() private _value = 0\n\n /**\n * 编辑中的原始文本。null 表示非编辑态,显示由 `value` 派生;\n * 非 null 时显示原文,避免把用户正在输入的 \"1.\" / \"0.10\" 立刻改写。\n */\n @state() private _draft: string | null = null\n @state() private _min = 0\n @state() private _max = Infinity\n @state() private _step = 1\n @state() private _focused = false\n private _precision = 0\n private _precisionWasSet = false\n private readonly _fieldId = createFieldId('web-ui-input-number')\n private _labelledbyObserver: MutationObserver | null = null\n private _releaseLabelledbyReferences: (() => void) | null = null\n private _labelledbyAncestorObserver: MutationObserver | null = null\n private _observedLabelledbyRoot: Node | null = null\n private _observedLabelledbyReferenceIds = ''\n private _observedLabelledbyTargets: Element[] = []\n private _observedLabelledbyMutationTargets: Element[] = []\n private _observedLabelledbyValueControls: Element[] = []\n private _observedLabelledbyAncestors: Element[] = []\n private _observedLabelledbyText = ''\n private _observedLabelledbyWindow: Window | null = null\n private readonly _onLabelledbyViewportChange = () => this.requestUpdate()\n private readonly _onLabelledbyValueChange = () => {\n if (this._getLabelledbyText() !== this._observedLabelledbyText) this.requestUpdate()\n }\n\n private get _supportsLabelledbyElements(): boolean {\n return typeof Element !== 'undefined' && 'ariaLabelledByElements' in Element.prototype\n }\n\n private _getLabelledbyIds(idRefs: string | null | undefined = this.ariaLabelledby): string[] {\n const normalizedIdRefs = idRefs?.trim()\n return normalizedIdRefs ? normalizedIdRefs.split(/\\s+/).filter(Boolean) : []\n }\n\n private _getLabelledbyTargets(\n root: Document | ShadowRoot | null = null,\n idRefs: string | null | undefined = this.ariaLabelledby\n ): Element[] {\n const scope = root ?? this.getRootNode()\n if (!(scope instanceof Document || scope instanceof ShadowRoot)) return []\n\n return this._getLabelledbyIds(idRefs)\n .map(id => {\n const escapedId = typeof CSS !== 'undefined' && CSS.escape ? CSS.escape(id) : id\n return scope.querySelector(`#${escapedId}`)\n })\n .filter((element): element is Element => element !== null)\n }\n\n private _getLabelledbyValueControls(targets: Element[]): Element[] {\n const controls = new Set<Element>()\n for (const target of targets) {\n if (target.matches('input, textarea, select')) controls.add(target)\n target.querySelectorAll('input, textarea, select').forEach(control => controls.add(control))\n }\n return [...controls]\n }\n\n private _getObservedLabelledbyReferences(root: Document | ShadowRoot | null): {\n ids: Set<string>\n targets: Element[]\n } {\n return {\n ids: new Set(this._getLabelledbyIds()),\n targets: root ? this._getLabelledbyTargets(root) : []\n }\n }\n\n private _isLabelledbyElementHidden(element: Element): boolean {\n const visibility = getComputedStyle(element).visibility\n if (visibility === 'hidden' || visibility === 'collapse') return true\n\n let current: Element | null = element\n while (current) {\n const style = getComputedStyle(current)\n if (\n current.getAttribute('aria-hidden') === 'true' ||\n current.hasAttribute('hidden') ||\n style.display === 'none'\n ) {\n return true\n }\n\n if (current.parentElement) {\n current = current.parentElement\n } else {\n const root = current.getRootNode()\n current = root instanceof ShadowRoot ? root.host : null\n }\n }\n return false\n }\n\n private _getLabelledbyElementText(\n element: Element,\n includeHidden = false,\n embeddedControlValue = false,\n visited = new Set<Element>()\n ): string {\n if (visited.has(element)) return ''\n if (!includeHidden && this._isLabelledbyElementHidden(element)) return ''\n const nextVisited = new Set(visited)\n nextVisited.add(element)\n\n const ariaLabel = element.getAttribute('aria-label')?.trim()\n if (ariaLabel) return ariaLabel\n\n if (\n element instanceof HTMLImageElement ||\n element instanceof HTMLAreaElement ||\n (element instanceof HTMLInputElement && element.type === 'image')\n ) {\n const alt = element.getAttribute('alt')\n if (alt !== null) return alt.trim()\n }\n\n if (element instanceof HTMLInputElement && ['button', 'submit', 'reset'].includes(element.type)) {\n const value = element.value.trim()\n if (value) return value\n }\n\n if (element instanceof HTMLInputElement && ['checkbox', 'radio'].includes(element.type)) {\n if (embeddedControlValue) return element.checked ? 'on' : 'off'\n const labels = Array.from(element.labels ?? [])\n if (labels.length > 0) {\n return labels\n .map(label => this._getLabelledbyElementText(label, includeHidden, false, nextVisited))\n .filter(Boolean)\n .join(' ')\n }\n return element.getAttribute('title')?.trim() ?? ''\n }\n\n if (element instanceof HTMLInputElement && element.type !== 'hidden') {\n if (embeddedControlValue) {\n const value = element.value.trim()\n if (value) return value\n }\n const labels = Array.from(element.labels ?? [])\n if (labels.length > 0) {\n return labels\n .map(label => this._getLabelledbyElementText(label, includeHidden, false, nextVisited))\n .filter(Boolean)\n .join(' ')\n }\n }\n\n if (element instanceof HTMLTextAreaElement) {\n if (embeddedControlValue) {\n const value = element.value.trim()\n if (value) return value\n }\n const labels = Array.from(element.labels ?? [])\n if (labels.length > 0) {\n return labels\n .map(label => this._getLabelledbyElementText(label, includeHidden, false, nextVisited))\n .filter(Boolean)\n .join(' ')\n }\n }\n\n if (element instanceof HTMLSelectElement) {\n if (!embeddedControlValue) {\n const labels = Array.from(element.labels ?? [])\n if (labels.length > 0) {\n return labels\n .map(label => this._getLabelledbyElementText(label, includeHidden, false, nextVisited))\n .filter(Boolean)\n .join(' ')\n }\n return element.getAttribute('title')?.trim() ?? ''\n }\n\n const selectedOptions = Array.from(element.selectedOptions)\n .map(option => option.label.trim() || option.textContent?.trim() || '')\n .filter(Boolean)\n .join(' ')\n if (selectedOptions) return selectedOptions\n }\n\n const text = Array.from(element.childNodes)\n .map(node => {\n if (node.nodeType === Node.TEXT_NODE) return node.textContent ?? ''\n if (!(node instanceof Element)) return ''\n const isControl =\n node instanceof HTMLInputElement || node instanceof HTMLTextAreaElement || node instanceof HTMLSelectElement\n return this._getLabelledbyElementText(node, includeHidden, isControl, nextVisited)\n })\n .join('')\n .replace(/\\s+/g, ' ')\n .trim()\n return text || element.getAttribute('title')?.trim() || ''\n }\n\n private _getLabelledbyText(): string {\n return this._getLabelledbyTargets()\n .map(element => this._getLabelledbyElementText(element, this._isLabelledbyElementHidden(element)))\n .filter(Boolean)\n .join(' ')\n }\n\n private _getLabelledbyAncestors(targets: Element[]): Element[] {\n const ancestors = new Set<Element>()\n for (const target of targets) {\n let current: Element | null = target\n while (current) {\n ancestors.add(current)\n if (current.parentElement) {\n current = current.parentElement\n } else {\n const root = current.getRootNode()\n current = root instanceof ShadowRoot ? root.host : null\n }\n }\n }\n return [...ancestors]\n }\n\n private _syncLabelledbyObserver() {\n const root = this.getRootNode()\n const scope = root instanceof Document || root instanceof ShadowRoot ? root : null\n const references = this._getObservedLabelledbyReferences(scope)\n const referenceIds = [...references.ids].join('\\u0000')\n const targets = references.targets\n const valueControls = this._getLabelledbyValueControls(targets)\n const mutationTargets = new Set(targets)\n for (const control of valueControls) {\n if (\n control instanceof HTMLInputElement ||\n control instanceof HTMLTextAreaElement ||\n control instanceof HTMLSelectElement\n ) {\n Array.from(control.labels ?? []).forEach(label => mutationTargets.add(label))\n }\n }\n const observedTargets = [...mutationTargets]\n const ancestors = this._getLabelledbyAncestors(observedTargets)\n const sameMutationTargets =\n observedTargets.length === this._observedLabelledbyMutationTargets.length &&\n observedTargets.every((target, index) => target === this._observedLabelledbyMutationTargets[index])\n const sameValueControls =\n valueControls.length === this._observedLabelledbyValueControls.length &&\n valueControls.every((control, index) => control === this._observedLabelledbyValueControls[index])\n const sameAncestors =\n ancestors.length === this._observedLabelledbyAncestors.length &&\n ancestors.every((ancestor, index) => ancestor === this._observedLabelledbyAncestors[index])\n const rootChanged = root !== this._observedLabelledbyRoot\n const nextWindow = this.ariaLabelledby && this.isConnected ? this.ownerDocument.defaultView : null\n\n if (nextWindow !== this._observedLabelledbyWindow) {\n this._observedLabelledbyWindow?.removeEventListener('resize', this._onLabelledbyViewportChange)\n this._observedLabelledbyWindow = nextWindow\n this._observedLabelledbyWindow?.addEventListener('resize', this._onLabelledbyViewportChange)\n }\n\n if (rootChanged || referenceIds !== this._observedLabelledbyReferenceIds) {\n this._releaseLabelledbyReferences?.()\n this._releaseLabelledbyReferences = null\n this._observedLabelledbyRoot = root\n this._observedLabelledbyReferenceIds = referenceIds\n\n if (this.isConnected && scope && references.ids.size > 0) {\n this._releaseLabelledbyReferences = observeLabelledbyReferences(\n scope,\n references.ids,\n () => this.requestUpdate(),\n () => {\n if (this._getLabelledbyText() !== this._observedLabelledbyText) this.requestUpdate()\n }\n )\n }\n }\n\n if (rootChanged || !sameMutationTargets) {\n this._labelledbyObserver?.disconnect()\n this._observedLabelledbyTargets = targets\n this._observedLabelledbyMutationTargets = observedTargets\n\n if (this.isConnected && observedTargets.length > 0) {\n this._labelledbyObserver = new MutationObserver(() => {\n const currentValueControls = this._getLabelledbyValueControls(this._observedLabelledbyTargets)\n const controlsChanged =\n currentValueControls.length !== this._observedLabelledbyValueControls.length ||\n currentValueControls.some((control, index) => control !== this._observedLabelledbyValueControls[index])\n if (controlsChanged || this._getLabelledbyText() !== this._observedLabelledbyText) this.requestUpdate()\n })\n\n for (const target of observedTargets) {\n // button/submit/reset 的 value IDL 在 default mode,property 赋值会反射到 value attribute。\n this._labelledbyObserver.observe(target, {\n subtree: true,\n childList: true,\n characterData: true,\n attributes: true,\n attributeFilter: ['aria-label', 'alt', 'value', 'title', 'type', 'aria-hidden', 'hidden', 'class', 'style']\n })\n }\n }\n }\n\n if (rootChanged || !sameValueControls) {\n this._observedLabelledbyValueControls.forEach(control => {\n control.removeEventListener('input', this._onLabelledbyValueChange)\n control.removeEventListener('change', this._onLabelledbyValueChange)\n })\n this._observedLabelledbyValueControls = valueControls\n if (this.isConnected) {\n valueControls.forEach(control => {\n control.addEventListener('input', this._onLabelledbyValueChange)\n control.addEventListener('change', this._onLabelledbyValueChange)\n })\n }\n }\n\n if (rootChanged || !sameAncestors) {\n this._labelledbyAncestorObserver?.disconnect()\n this._observedLabelledbyAncestors = ancestors\n\n if (this.isConnected && ancestors.length > 0) {\n this._labelledbyAncestorObserver = new MutationObserver(() => {\n if (this._getLabelledbyText() !== this._observedLabelledbyText) this.requestUpdate()\n })\n for (const ancestor of ancestors) {\n this._labelledbyAncestorObserver.observe(ancestor, {\n attributes: true,\n attributeFilter: ['aria-hidden', 'hidden', 'class', 'style']\n })\n }\n }\n }\n\n this._observedLabelledbyText = this._getLabelledbyText()\n }\n\n @property({ type: Number, reflect: true })\n get value(): number {\n return this.clamp(this.round(this._value))\n }\n\n set value(v: number) {\n const next = this.clamp(v)\n const old = this._value\n this._value = next\n this._formAssociation.sync()\n this.requestUpdate('value', old)\n }\n\n private get _isDisabled(): boolean {\n return this.disabled || this._formAssociation.isFormDisabled()\n }\n\n @property({ type: Number, reflect: true })\n get min(): number {\n return this._min\n }\n\n set min(v: unknown) {\n this._min = normalizeNumber(v, -Infinity, Infinity, 0)\n }\n\n @property({ type: Number, reflect: true })\n get max(): number {\n return this._max\n }\n\n set max(v: unknown) {\n this._max = normalizeNumber(v, -Infinity, Infinity, Infinity)\n }\n\n @property({ type: Number, reflect: true })\n get step(): number {\n return this._step\n }\n\n // 默认 precision 未显式设置时,读取精度会跟随 step 的小数位数。\n set step(v: unknown) {\n this._step = normalizeNumber(v, 0, Infinity, 1)\n }\n\n private get _effectiveStep(): number {\n return this._step\n }\n\n private get _effectivePrecision(): number {\n return this._precisionWasSet ? this._precision : Math.max(this._precision, decimalPlaces(this._step))\n }\n\n private get atMin(): boolean {\n return this.value <= this._min\n }\n\n private get atMax(): boolean {\n return this.value >= this._max\n }\n\n private readonly _formAssociation = defineFormAssociation<number>({\n host: this,\n getState: () => this.value,\n setState: value => {\n this.value = value\n },\n getFormValue: () => String(this.value),\n getFormState: () => String(this.value),\n restoreState: state => {\n if (typeof state !== 'string') return\n const value = Number(state)\n if (Number.isFinite(value)) this.value = value\n },\n syncValidity: () => this._syncValidity()\n }).make()\n\n private readonly _formAssociationController = new FormAssociationController(this, this._formAssociation)\n\n override connectedCallback() {\n super.connectedCallback()\n this.requestUpdate()\n }\n\n override formDisabledCallback(disabled: boolean) {\n super.formDisabledCallback(disabled)\n this.toggleAttribute('data-form-disabled', disabled)\n }\n\n override updated() {\n this._syncLabelledbyObserver()\n if (this._supportsLabelledbyElements) {\n const input = this.shadowRoot?.querySelector('input')\n // 用元素引用跨过 ShadowRoot,让浏览器按当前文本与样式计算名称;字符串回退兼容旧浏览器。\n if (input) input.ariaLabelledByElements = this._getLabelledbyTargets()\n }\n this._syncValidity()\n this.toggleAttribute('focused', this._focused)\n }\n\n override disconnectedCallback() {\n this._labelledbyObserver?.disconnect()\n this._releaseLabelledbyReferences?.()\n this._labelledbyAncestorObserver?.disconnect()\n this._labelledbyObserver = null\n this._releaseLabelledbyReferences = null\n this._labelledbyAncestorObserver = null\n this._observedLabelledbyWindow?.removeEventListener('resize', this._onLabelledbyViewportChange)\n this._observedLabelledbyWindow = null\n this._observedLabelledbyRoot = null\n this._observedLabelledbyReferenceIds = ''\n this._observedLabelledbyTargets = []\n this._observedLabelledbyMutationTargets = []\n this._observedLabelledbyValueControls.forEach(control => {\n control.removeEventListener('input', this._onLabelledbyValueChange)\n control.removeEventListener('change', this._onLabelledbyValueChange)\n })\n this._observedLabelledbyValueControls = []\n this._observedLabelledbyAncestors = []\n this._observedLabelledbyText = ''\n super.disconnectedCallback()\n }\n\n private _syncValidity() {\n const input = this.shadowRoot?.querySelector('input')\n const internals = this._formAssociation.getInternals()\n if (!internals || !input || typeof internals.setValidity !== 'function') return\n forwardInputValidity(internals, input, ['valueMissing', 'rangeUnderflow', 'rangeOverflow'], this._isDisabled)\n }\n\n private clamp(v: number): number {\n return Math.min(this._max, Math.max(this._min, v))\n }\n\n private round(v: number): number {\n const f = 10 ** this._effectivePrecision\n if (!Number.isFinite(f) || f === 0) return v\n if (Math.abs(v) > Number.MAX_SAFE_INTEGER / f) return v\n const scaled = v * f\n if (!Number.isFinite(scaled)) return v\n return Math.round(scaled) / f\n }\n\n private setValueAndNotify(v: number) {\n this._draft = null\n this.value = this.clamp(this.round(v))\n this.dispatchEvent(new Event('input', { bubbles: true, composed: true }))\n }\n\n private handleStep(direction: 1 | -1) {\n if (this._isDisabled || this.readonly) return\n this.setValueAndNotify(this.value + direction * this._effectiveStep)\n }\n\n // 输入过程只更新草稿与可解析的原始值,显示保持在草稿上:\n // 逐字把 \"1.\" 规整成 \"1\" 会打断输入(与原生 number input 的编辑体验一致)。\n private handleInput(e: Event) {\n if (this.readonly) return\n if (!(e.target instanceof HTMLInputElement)) return\n const raw = e.target.value\n this._draft = raw\n const parsed = raw === '' || raw === '-' ? Number.NaN : Number(raw)\n if (Number.isFinite(parsed)) {\n this._value = this.clamp(parsed)\n this._formAssociation.sync()\n }\n this._syncValidity()\n }\n\n // 原生 change 不 composed,被 shadow root 挡住;文本失焦提交时补发 composed 事件,\n // 与 ArrowUp/ArrowDown 的 change 行为对齐。\n // 提交点上做规整:非法/空草稿回填已提交值(value 不变、不派发 change),\n // 合法草稿写入 value 后由 get value 按精度规整。\n private handleNativeChange(e: Event) {\n if (this.readonly) return\n if (!(e.target instanceof HTMLInputElement)) return\n const raw = e.target.value\n this._draft = null\n const parsed = raw === '' || raw === '-' ? Number.NaN : Number(raw)\n if (!Number.isFinite(parsed)) {\n // 回填:草稿清空后显示重新由 value 派生\n this.requestUpdate()\n this._syncValidity()\n return\n }\n this._value = this.clamp(parsed)\n this._formAssociation.sync()\n this._syncValidity()\n this.dispatchEvent(new Event('change', { bubbles: true, composed: true }))\n }\n\n private handleKeydown(e: KeyboardEvent) {\n if (this._isDisabled || this.readonly) return\n if (e.key === 'ArrowUp') {\n e.preventDefault()\n this.setValueAndNotify(this.value + this._effectiveStep)\n this.dispatchEvent(new Event('change', { bubbles: true, composed: true }))\n } else if (e.key === 'ArrowDown') {\n e.preventDefault()\n this.setValueAndNotify(this.value - this._effectiveStep)\n this.dispatchEvent(new Event('change', { bubbles: true, composed: true }))\n }\n }\n\n private handleFocus() {\n if (!this._isDisabled) this._focused = true\n }\n\n private handleBlur() {\n this._focused = false\n // change 的时序在部分平台晚于 blur;草稿仍存在说明还没提交,直接回填,\n // 避免「显示空、value 仍是旧值」的持久脱同步。\n if (this._draft !== null) {\n this._draft = null\n this.requestUpdate()\n }\n }\n\n override render() {\n // step 是相对当前值的增减幅度,不要求值落在原生 input 以 min 为基准的 step 网格上。\n return html`\n <div class=\"wui-glass wui-input-inner\">\n <button\n class=\"num-btn\"\n aria-label=\"Decrease\"\n ?disabled=${this._isDisabled || this.readonly || this.atMin}\n @click=${() => this.handleStep(-1)}\n >\n <web-ui-icon .icon=${lucideMinus}></web-ui-icon>\n </button>\n <input\n id=${this._fieldId}\n type=\"number\"\n step=\"any\"\n placeholder=${this.placeholder}\n name=${this.name}\n aria-label=${ifDefined(this._getLabelledbyText() || this.ariaLabel)}\n aria-labelledby=${ifDefined(this.ariaLabelledby)}\n .value=${this._draft ?? String(this.value)}\n ?disabled=${this._isDisabled}\n ?readonly=${this.readonly}\n ?required=${this.required}\n @input=${this.handleInput}\n @change=${this.handleNativeChange}\n @keydown=${this.handleKeydown}\n @focus=${this.handleFocus}\n @blur=${this.handleBlur}\n />\n <button\n class=\"num-btn\"\n aria-label=\"Increase\"\n ?disabled=${this._isDisabled || this.readonly || this.atMax}\n @click=${() => this.handleStep(1)}\n >\n <web-ui-icon .icon=${lucidePlus}></web-ui-icon>\n </button>\n </div>\n `\n }\n\n declare readonly $events: {\n input: Event\n change: Event\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'web-ui-input-number': WebUiInputNumber\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":["glass","style","lucideMinus","lucidePlus"],"sources":["../../../src/components/input-number/index.ts"],"sourcesContent":["import '@/components/icon'\n\nimport { html, LitElement, unsafeCSS } from 'lit'\nimport { customElement, property, state } from 'lit/decorators.js'\nimport { ifDefined } from 'lit/directives/if-defined.js'\n\nimport glass from '@/classes/glass.css?inline'\nimport { lucideMinus, lucidePlus } from '@/icons'\nimport {\n FormAssociated,\n defineFormAssociation,\n forwardInputValidity,\n FormAssociationController\n} from '@/shared/form-association'\nimport { createFieldId } from '@/shared/form-association/field-id'\nimport { resolveBuiltinLabel } from '@/shared/locale/builtin-labels'\nimport { normalizeNumber } from '@/shared/normalize'\n\nimport style from './style.css?inline'\n\nconst decimalPlaces = (value: number): number => {\n const [numberText, exponent = '0'] = value.toString().toLowerCase().split('e')\n return Math.max(0, (numberText.split('.')[1]?.length ?? 0) - Number(exponent))\n}\n\ntype LabelledbyRoot = Document | ShadowRoot\n\ninterface LabelledbyReferenceRegistration {\n ids: Set<string>\n onReferenceChange: () => void\n onStylesheetChange: () => void\n}\n\ninterface LabelledbyRootObserver {\n observer: MutationObserver\n registrations: Set<LabelledbyReferenceRegistration>\n registrationsById: Map<string, Set<LabelledbyReferenceRegistration>>\n onStylesheetLoad: (event: Event) => void\n notifyStylesheetChange: () => void\n}\n\nconst labelledbyRootObservers = new WeakMap<LabelledbyRoot, LabelledbyRootObserver>()\n\nfunction nodeReferenceIds(node: Node): string[] {\n if (!(node instanceof Element)) return []\n const elements = [node, ...node.querySelectorAll('[id], label[for]')]\n return elements\n .flatMap(element => (element instanceof HTMLLabelElement ? [element.id, element.htmlFor] : [element.id]))\n .filter(Boolean)\n}\n\nfunction isStylesheetElement(element: Element): boolean {\n return (\n element instanceof HTMLStyleElement ||\n (element instanceof HTMLLinkElement && element.relList.contains('stylesheet'))\n )\n}\n\nfunction nodeContainsStylesheet(node: Node): boolean {\n return (\n (node instanceof Element && isStylesheetElement(node)) ||\n (node instanceof Element && node.querySelector('style, link[rel~=\"stylesheet\"]') !== null)\n )\n}\n\nfunction observeLabelledbyReferences(\n root: LabelledbyRoot,\n ids: Set<string>,\n onReferenceChange: () => void,\n onStylesheetChange: () => void\n): () => void {\n let shared = labelledbyRootObservers.get(root)\n\n if (!shared) {\n const registrations = new Set<LabelledbyReferenceRegistration>()\n const registrationsById = new Map<string, Set<LabelledbyReferenceRegistration>>()\n const notifyStylesheetChange = () => registrations.forEach(registration => registration.onStylesheetChange())\n const onStylesheetLoad = (event: Event) => {\n if (event.target instanceof HTMLLinkElement && event.target.relList.contains('stylesheet')) {\n notifyStylesheetChange()\n }\n }\n\n const observer = new MutationObserver(records => {\n const changedRegistrations = new Set<LabelledbyReferenceRegistration>()\n let stylesheetChanged = false\n const addRegistrationsForId = (id: string | null) => {\n if (!id) return\n registrationsById.get(id)?.forEach(registration => changedRegistrations.add(registration))\n }\n\n for (const record of records) {\n if (record.type === 'attributes') {\n const element = record.target as Element\n if (record.attributeName === 'id') {\n addRegistrationsForId(record.oldValue)\n addRegistrationsForId(element.id)\n } else if (record.attributeName === 'for' && element instanceof HTMLLabelElement) {\n addRegistrationsForId(record.oldValue)\n addRegistrationsForId(element.htmlFor)\n } else if (['disabled', 'media'].includes(record.attributeName ?? '') && isStylesheetElement(element)) {\n stylesheetChanged = true\n }\n } else if (record.type === 'childList') {\n if (record.target instanceof HTMLStyleElement || record.target instanceof HTMLLinkElement) {\n stylesheetChanged = true\n }\n for (const node of [...record.addedNodes, ...record.removedNodes]) {\n if (nodeContainsStylesheet(node)) stylesheetChanged = true\n for (const id of nodeReferenceIds(node)) addRegistrationsForId(id)\n }\n }\n }\n\n if (stylesheetChanged) notifyStylesheetChange()\n changedRegistrations.forEach(registration => registration.onReferenceChange())\n })\n\n shared = {\n observer,\n registrations,\n registrationsById,\n onStylesheetLoad,\n notifyStylesheetChange\n }\n labelledbyRootObservers.set(root, shared)\n observer.observe(root, {\n subtree: true,\n childList: true,\n attributes: true,\n attributeFilter: ['id', 'for', 'disabled', 'media'],\n attributeOldValue: true\n })\n root.addEventListener('load', onStylesheetLoad, true)\n }\n\n const registration: LabelledbyReferenceRegistration = {\n ids: new Set(ids),\n onReferenceChange,\n onStylesheetChange\n }\n shared.registrations.add(registration)\n for (const id of registration.ids) {\n const registrations = shared.registrationsById.get(id) ?? new Set()\n registrations.add(registration)\n shared.registrationsById.set(id, registrations)\n }\n\n return () => {\n if (!shared?.registrations.delete(registration)) return\n for (const id of registration.ids) {\n const registrations = shared.registrationsById.get(id)\n registrations?.delete(registration)\n if (registrations?.size === 0) shared.registrationsById.delete(id)\n }\n if (shared.registrations.size === 0) {\n shared.observer.disconnect()\n root.removeEventListener('load', shared.onStylesheetLoad, true)\n labelledbyRootObservers.delete(root)\n }\n }\n}\n\n@customElement('web-ui-input-number')\nexport class WebUiInputNumber extends FormAssociated(LitElement) {\n static override styles = [unsafeCSS(glass), unsafeCSS(style)]\n\n @property({ type: String, reflect: true }) placeholder = ''\n @property({ type: String, reflect: true }) name = ''\n @property({ type: Boolean, reflect: true }) disabled = false\n @property({ type: Boolean, reflect: true }) readonly = false\n @property({ type: Boolean, reflect: true }) required = false\n @property({ type: String, attribute: 'aria-label' }) override ariaLabel: string | null = null\n @property({ type: String, attribute: 'aria-labelledby' }) ariaLabelledby: string | undefined\n /** 减少按钮的无障碍名称;未设置时回退内置英文文案(见 ADR-0016)。 */\n @property({ type: String, attribute: 'aria-decrease-label' }) ariaDecreaseLabel = ''\n /** 增加按钮的无障碍名称;未设置时回退内置英文文案(见 ADR-0016)。 */\n @property({ type: String, attribute: 'aria-increase-label' }) ariaIncreaseLabel = ''\n @property({ type: Number })\n get precision(): number {\n return this._precision\n }\n // 精度只影响读取(get value)/提交时的规整,不在赋值时抹掉原始小数:\n // `<web-ui-input-number value=\"1.5\" precision=\"2\">` 先跑 value setter、\n // 后跑 precision setter,若赋值时就按当时的默认精度 0 取整,1.5 会先变 2,\n // 之后再声明 precision=2 也恢复不了。\n set precision(v: number | null) {\n const old = this._precision\n const wasExplicitlySet = this._precisionWasSet\n this._precision = v ?? 0\n this._precisionWasSet = v !== null\n\n if (v === null) {\n if (this.hasAttribute('precision')) this.removeAttribute('precision')\n } else if (this.getAttribute('precision') !== String(v)) {\n this.setAttribute('precision', String(v))\n }\n\n if (old !== this._precision || wasExplicitlySet !== this._precisionWasSet) this.requestUpdate()\n }\n\n /** 原始值:只做 min/max 收敛,不按精度取整(取整发生在 get value)。 */\n @state() private _value = 0\n\n /**\n * 编辑中的原始文本。null 表示非编辑态,显示由 `value` 派生;\n * 非 null 时显示原文,避免把用户正在输入的 \"1.\" / \"0.10\" 立刻改写。\n */\n @state() private _draft: string | null = null\n @state() private _min = 0\n @state() private _max = Infinity\n @state() private _step = 1\n @state() private _focused = false\n private _precision = 0\n private _precisionWasSet = false\n private readonly _fieldId = createFieldId('web-ui-input-number')\n private _labelledbyObserver: MutationObserver | null = null\n private _releaseLabelledbyReferences: (() => void) | null = null\n private _labelledbyAncestorObserver: MutationObserver | null = null\n private _observedLabelledbyRoot: Node | null = null\n private _observedLabelledbyReferenceIds = ''\n private _observedLabelledbyTargets: Element[] = []\n private _observedLabelledbyMutationTargets: Element[] = []\n private _observedLabelledbyValueControls: Element[] = []\n private _observedLabelledbyAncestors: Element[] = []\n private _observedLabelledbyText = ''\n private _observedLabelledbyWindow: Window | null = null\n private readonly _onLabelledbyViewportChange = () => this.requestUpdate()\n private readonly _onLabelledbyValueChange = () => {\n if (this._getLabelledbyText() !== this._observedLabelledbyText) this.requestUpdate()\n }\n\n private get _supportsLabelledbyElements(): boolean {\n return typeof Element !== 'undefined' && 'ariaLabelledByElements' in Element.prototype\n }\n\n private _getLabelledbyIds(idRefs: string | null | undefined = this.ariaLabelledby): string[] {\n const normalizedIdRefs = idRefs?.trim()\n return normalizedIdRefs ? normalizedIdRefs.split(/\\s+/).filter(Boolean) : []\n }\n\n private _getLabelledbyTargets(\n root: Document | ShadowRoot | null = null,\n idRefs: string | null | undefined = this.ariaLabelledby\n ): Element[] {\n const scope = root ?? this.getRootNode()\n if (!(scope instanceof Document || scope instanceof ShadowRoot)) return []\n\n return this._getLabelledbyIds(idRefs)\n .map(id => {\n const escapedId = typeof CSS !== 'undefined' && CSS.escape ? CSS.escape(id) : id\n return scope.querySelector(`#${escapedId}`)\n })\n .filter((element): element is Element => element !== null)\n }\n\n private _getLabelledbyValueControls(targets: Element[]): Element[] {\n const controls = new Set<Element>()\n for (const target of targets) {\n if (target.matches('input, textarea, select')) controls.add(target)\n target.querySelectorAll('input, textarea, select').forEach(control => controls.add(control))\n }\n return [...controls]\n }\n\n private _getObservedLabelledbyReferences(root: Document | ShadowRoot | null): {\n ids: Set<string>\n targets: Element[]\n } {\n return {\n ids: new Set(this._getLabelledbyIds()),\n targets: root ? this._getLabelledbyTargets(root) : []\n }\n }\n\n private _isLabelledbyElementHidden(element: Element): boolean {\n const visibility = getComputedStyle(element).visibility\n if (visibility === 'hidden' || visibility === 'collapse') return true\n\n let current: Element | null = element\n while (current) {\n const style = getComputedStyle(current)\n if (\n current.getAttribute('aria-hidden') === 'true' ||\n current.hasAttribute('hidden') ||\n style.display === 'none'\n ) {\n return true\n }\n\n if (current.parentElement) {\n current = current.parentElement\n } else {\n const root = current.getRootNode()\n current = root instanceof ShadowRoot ? root.host : null\n }\n }\n return false\n }\n\n private _getLabelledbyElementText(\n element: Element,\n includeHidden = false,\n embeddedControlValue = false,\n visited = new Set<Element>()\n ): string {\n if (visited.has(element)) return ''\n if (!includeHidden && this._isLabelledbyElementHidden(element)) return ''\n const nextVisited = new Set(visited)\n nextVisited.add(element)\n\n const ariaLabel = element.getAttribute('aria-label')?.trim()\n if (ariaLabel) return ariaLabel\n\n if (\n element instanceof HTMLImageElement ||\n element instanceof HTMLAreaElement ||\n (element instanceof HTMLInputElement && element.type === 'image')\n ) {\n const alt = element.getAttribute('alt')\n if (alt !== null) return alt.trim()\n }\n\n if (element instanceof HTMLInputElement && ['button', 'submit', 'reset'].includes(element.type)) {\n const value = element.value.trim()\n if (value) return value\n }\n\n if (element instanceof HTMLInputElement && ['checkbox', 'radio'].includes(element.type)) {\n if (embeddedControlValue) return element.checked ? 'on' : 'off'\n const labels = Array.from(element.labels ?? [])\n if (labels.length > 0) {\n return labels\n .map(label => this._getLabelledbyElementText(label, includeHidden, false, nextVisited))\n .filter(Boolean)\n .join(' ')\n }\n return element.getAttribute('title')?.trim() ?? ''\n }\n\n if (element instanceof HTMLInputElement && element.type !== 'hidden') {\n if (embeddedControlValue) {\n const value = element.value.trim()\n if (value) return value\n }\n const labels = Array.from(element.labels ?? [])\n if (labels.length > 0) {\n return labels\n .map(label => this._getLabelledbyElementText(label, includeHidden, false, nextVisited))\n .filter(Boolean)\n .join(' ')\n }\n }\n\n if (element instanceof HTMLTextAreaElement) {\n if (embeddedControlValue) {\n const value = element.value.trim()\n if (value) return value\n }\n const labels = Array.from(element.labels ?? [])\n if (labels.length > 0) {\n return labels\n .map(label => this._getLabelledbyElementText(label, includeHidden, false, nextVisited))\n .filter(Boolean)\n .join(' ')\n }\n }\n\n if (element instanceof HTMLSelectElement) {\n if (!embeddedControlValue) {\n const labels = Array.from(element.labels ?? [])\n if (labels.length > 0) {\n return labels\n .map(label => this._getLabelledbyElementText(label, includeHidden, false, nextVisited))\n .filter(Boolean)\n .join(' ')\n }\n return element.getAttribute('title')?.trim() ?? ''\n }\n\n const selectedOptions = Array.from(element.selectedOptions)\n .map(option => option.label.trim() || option.textContent?.trim() || '')\n .filter(Boolean)\n .join(' ')\n if (selectedOptions) return selectedOptions\n }\n\n const text = Array.from(element.childNodes)\n .map(node => {\n if (node.nodeType === Node.TEXT_NODE) return node.textContent ?? ''\n if (!(node instanceof Element)) return ''\n const isControl =\n node instanceof HTMLInputElement || node instanceof HTMLTextAreaElement || node instanceof HTMLSelectElement\n return this._getLabelledbyElementText(node, includeHidden, isControl, nextVisited)\n })\n .join('')\n .replace(/\\s+/g, ' ')\n .trim()\n return text || element.getAttribute('title')?.trim() || ''\n }\n\n private _getLabelledbyText(): string {\n return this._getLabelledbyTargets()\n .map(element => this._getLabelledbyElementText(element, this._isLabelledbyElementHidden(element)))\n .filter(Boolean)\n .join(' ')\n }\n\n private _getLabelledbyAncestors(targets: Element[]): Element[] {\n const ancestors = new Set<Element>()\n for (const target of targets) {\n let current: Element | null = target\n while (current) {\n ancestors.add(current)\n if (current.parentElement) {\n current = current.parentElement\n } else {\n const root = current.getRootNode()\n current = root instanceof ShadowRoot ? root.host : null\n }\n }\n }\n return [...ancestors]\n }\n\n private _syncLabelledbyObserver() {\n const root = this.getRootNode()\n const scope = root instanceof Document || root instanceof ShadowRoot ? root : null\n const references = this._getObservedLabelledbyReferences(scope)\n const referenceIds = [...references.ids].join('\\u0000')\n const targets = references.targets\n const valueControls = this._getLabelledbyValueControls(targets)\n const mutationTargets = new Set(targets)\n for (const control of valueControls) {\n if (\n control instanceof HTMLInputElement ||\n control instanceof HTMLTextAreaElement ||\n control instanceof HTMLSelectElement\n ) {\n Array.from(control.labels ?? []).forEach(label => mutationTargets.add(label))\n }\n }\n const observedTargets = [...mutationTargets]\n const ancestors = this._getLabelledbyAncestors(observedTargets)\n const sameMutationTargets =\n observedTargets.length === this._observedLabelledbyMutationTargets.length &&\n observedTargets.every((target, index) => target === this._observedLabelledbyMutationTargets[index])\n const sameValueControls =\n valueControls.length === this._observedLabelledbyValueControls.length &&\n valueControls.every((control, index) => control === this._observedLabelledbyValueControls[index])\n const sameAncestors =\n ancestors.length === this._observedLabelledbyAncestors.length &&\n ancestors.every((ancestor, index) => ancestor === this._observedLabelledbyAncestors[index])\n const rootChanged = root !== this._observedLabelledbyRoot\n const nextWindow = this.ariaLabelledby && this.isConnected ? this.ownerDocument.defaultView : null\n\n if (nextWindow !== this._observedLabelledbyWindow) {\n this._observedLabelledbyWindow?.removeEventListener('resize', this._onLabelledbyViewportChange)\n this._observedLabelledbyWindow = nextWindow\n this._observedLabelledbyWindow?.addEventListener('resize', this._onLabelledbyViewportChange)\n }\n\n if (rootChanged || referenceIds !== this._observedLabelledbyReferenceIds) {\n this._releaseLabelledbyReferences?.()\n this._releaseLabelledbyReferences = null\n this._observedLabelledbyRoot = root\n this._observedLabelledbyReferenceIds = referenceIds\n\n if (this.isConnected && scope && references.ids.size > 0) {\n this._releaseLabelledbyReferences = observeLabelledbyReferences(\n scope,\n references.ids,\n () => this.requestUpdate(),\n () => {\n if (this._getLabelledbyText() !== this._observedLabelledbyText) this.requestUpdate()\n }\n )\n }\n }\n\n if (rootChanged || !sameMutationTargets) {\n this._labelledbyObserver?.disconnect()\n this._observedLabelledbyTargets = targets\n this._observedLabelledbyMutationTargets = observedTargets\n\n if (this.isConnected && observedTargets.length > 0) {\n this._labelledbyObserver = new MutationObserver(() => {\n const currentValueControls = this._getLabelledbyValueControls(this._observedLabelledbyTargets)\n const controlsChanged =\n currentValueControls.length !== this._observedLabelledbyValueControls.length ||\n currentValueControls.some((control, index) => control !== this._observedLabelledbyValueControls[index])\n if (controlsChanged || this._getLabelledbyText() !== this._observedLabelledbyText) this.requestUpdate()\n })\n\n for (const target of observedTargets) {\n // button/submit/reset 的 value IDL 在 default mode,property 赋值会反射到 value attribute。\n this._labelledbyObserver.observe(target, {\n subtree: true,\n childList: true,\n characterData: true,\n attributes: true,\n attributeFilter: ['aria-label', 'alt', 'value', 'title', 'type', 'aria-hidden', 'hidden', 'class', 'style']\n })\n }\n }\n }\n\n if (rootChanged || !sameValueControls) {\n this._observedLabelledbyValueControls.forEach(control => {\n control.removeEventListener('input', this._onLabelledbyValueChange)\n control.removeEventListener('change', this._onLabelledbyValueChange)\n })\n this._observedLabelledbyValueControls = valueControls\n if (this.isConnected) {\n valueControls.forEach(control => {\n control.addEventListener('input', this._onLabelledbyValueChange)\n control.addEventListener('change', this._onLabelledbyValueChange)\n })\n }\n }\n\n if (rootChanged || !sameAncestors) {\n this._labelledbyAncestorObserver?.disconnect()\n this._observedLabelledbyAncestors = ancestors\n\n if (this.isConnected && ancestors.length > 0) {\n this._labelledbyAncestorObserver = new MutationObserver(() => {\n if (this._getLabelledbyText() !== this._observedLabelledbyText) this.requestUpdate()\n })\n for (const ancestor of ancestors) {\n this._labelledbyAncestorObserver.observe(ancestor, {\n attributes: true,\n attributeFilter: ['aria-hidden', 'hidden', 'class', 'style']\n })\n }\n }\n }\n\n this._observedLabelledbyText = this._getLabelledbyText()\n }\n\n @property({ type: Number, reflect: true })\n get value(): number {\n return this.clamp(this.round(this._value))\n }\n\n set value(v: number) {\n const next = this.clamp(v)\n const old = this._value\n this._value = next\n this._formAssociation.sync()\n this.requestUpdate('value', old)\n }\n\n private get _isDisabled(): boolean {\n return this.disabled || this._formAssociation.isFormDisabled()\n }\n\n @property({ type: Number, reflect: true })\n get min(): number {\n return this._min\n }\n\n set min(v: unknown) {\n this._min = normalizeNumber(v, -Infinity, Infinity, 0)\n }\n\n @property({ type: Number, reflect: true })\n get max(): number {\n return this._max\n }\n\n set max(v: unknown) {\n this._max = normalizeNumber(v, -Infinity, Infinity, Infinity)\n }\n\n @property({ type: Number, reflect: true })\n get step(): number {\n return this._step\n }\n\n // 默认 precision 未显式设置时,读取精度会跟随 step 的小数位数。\n set step(v: unknown) {\n this._step = normalizeNumber(v, 0, Infinity, 1)\n }\n\n private get _effectiveStep(): number {\n return this._step\n }\n\n private get _effectivePrecision(): number {\n return this._precisionWasSet ? this._precision : Math.max(this._precision, decimalPlaces(this._step))\n }\n\n private get atMin(): boolean {\n return this.value <= this._min\n }\n\n private get atMax(): boolean {\n return this.value >= this._max\n }\n\n private readonly _formAssociation = defineFormAssociation<number>({\n host: this,\n getState: () => this.value,\n setState: value => {\n this.value = value\n },\n getFormValue: () => String(this.value),\n getFormState: () => String(this.value),\n restoreState: state => {\n if (typeof state !== 'string') return\n const value = Number(state)\n if (Number.isFinite(value)) this.value = value\n },\n syncValidity: () => this._syncValidity()\n }).make()\n\n private readonly _formAssociationController = new FormAssociationController(this, this._formAssociation)\n\n override connectedCallback() {\n super.connectedCallback()\n this.requestUpdate()\n }\n\n override formDisabledCallback(disabled: boolean) {\n super.formDisabledCallback(disabled)\n this.toggleAttribute('data-form-disabled', disabled)\n }\n\n override updated() {\n this._syncLabelledbyObserver()\n if (this._supportsLabelledbyElements) {\n const input = this.shadowRoot?.querySelector('input')\n // 用元素引用跨过 ShadowRoot,让浏览器按当前文本与样式计算名称;字符串回退兼容旧浏览器。\n if (input) input.ariaLabelledByElements = this._getLabelledbyTargets()\n }\n this._syncValidity()\n this.toggleAttribute('focused', this._focused)\n }\n\n override disconnectedCallback() {\n this._labelledbyObserver?.disconnect()\n this._releaseLabelledbyReferences?.()\n this._labelledbyAncestorObserver?.disconnect()\n this._labelledbyObserver = null\n this._releaseLabelledbyReferences = null\n this._labelledbyAncestorObserver = null\n this._observedLabelledbyWindow?.removeEventListener('resize', this._onLabelledbyViewportChange)\n this._observedLabelledbyWindow = null\n this._observedLabelledbyRoot = null\n this._observedLabelledbyReferenceIds = ''\n this._observedLabelledbyTargets = []\n this._observedLabelledbyMutationTargets = []\n this._observedLabelledbyValueControls.forEach(control => {\n control.removeEventListener('input', this._onLabelledbyValueChange)\n control.removeEventListener('change', this._onLabelledbyValueChange)\n })\n this._observedLabelledbyValueControls = []\n this._observedLabelledbyAncestors = []\n this._observedLabelledbyText = ''\n super.disconnectedCallback()\n }\n\n private _syncValidity() {\n const input = this.shadowRoot?.querySelector('input')\n const internals = this._formAssociation.getInternals()\n if (!internals || !input || typeof internals.setValidity !== 'function') return\n forwardInputValidity(internals, input, ['valueMissing', 'rangeUnderflow', 'rangeOverflow'], this._isDisabled)\n }\n\n private clamp(v: number): number {\n return Math.min(this._max, Math.max(this._min, v))\n }\n\n private round(v: number): number {\n const f = 10 ** this._effectivePrecision\n if (!Number.isFinite(f) || f === 0) return v\n if (Math.abs(v) > Number.MAX_SAFE_INTEGER / f) return v\n const scaled = v * f\n if (!Number.isFinite(scaled)) return v\n return Math.round(scaled) / f\n }\n\n private setValueAndNotify(v: number) {\n this._draft = null\n this.value = this.clamp(this.round(v))\n this.dispatchEvent(new Event('input', { bubbles: true, composed: true }))\n }\n\n private handleStep(direction: 1 | -1) {\n if (this._isDisabled || this.readonly) return\n this.setValueAndNotify(this.value + direction * this._effectiveStep)\n }\n\n // 输入过程只更新草稿与可解析的原始值,显示保持在草稿上:\n // 逐字把 \"1.\" 规整成 \"1\" 会打断输入(与原生 number input 的编辑体验一致)。\n private handleInput(e: Event) {\n if (this.readonly) return\n if (!(e.target instanceof HTMLInputElement)) return\n const raw = e.target.value\n this._draft = raw\n const parsed = raw === '' || raw === '-' ? Number.NaN : Number(raw)\n if (Number.isFinite(parsed)) {\n this._value = this.clamp(parsed)\n this._formAssociation.sync()\n }\n this._syncValidity()\n }\n\n // 原生 change 不 composed,被 shadow root 挡住;文本失焦提交时补发 composed 事件,\n // 与 ArrowUp/ArrowDown 的 change 行为对齐。\n // 提交点上做规整:非法/空草稿回填已提交值(value 不变、不派发 change),\n // 合法草稿写入 value 后由 get value 按精度规整。\n private handleNativeChange(e: Event) {\n if (this.readonly) return\n if (!(e.target instanceof HTMLInputElement)) return\n const raw = e.target.value\n this._draft = null\n const parsed = raw === '' || raw === '-' ? Number.NaN : Number(raw)\n if (!Number.isFinite(parsed)) {\n // 回填:草稿清空后显示重新由 value 派生\n this.requestUpdate()\n this._syncValidity()\n return\n }\n this._value = this.clamp(parsed)\n this._formAssociation.sync()\n this._syncValidity()\n this.dispatchEvent(new Event('change', { bubbles: true, composed: true }))\n }\n\n private handleKeydown(e: KeyboardEvent) {\n if (this._isDisabled || this.readonly) return\n if (e.key === 'ArrowUp') {\n e.preventDefault()\n this.setValueAndNotify(this.value + this._effectiveStep)\n this.dispatchEvent(new Event('change', { bubbles: true, composed: true }))\n } else if (e.key === 'ArrowDown') {\n e.preventDefault()\n this.setValueAndNotify(this.value - this._effectiveStep)\n this.dispatchEvent(new Event('change', { bubbles: true, composed: true }))\n }\n }\n\n private handleFocus() {\n if (!this._isDisabled) this._focused = true\n }\n\n private handleBlur() {\n this._focused = false\n // change 的时序在部分平台晚于 blur;草稿仍存在说明还没提交,直接回填,\n // 避免「显示空、value 仍是旧值」的持久脱同步。\n if (this._draft !== null) {\n this._draft = null\n this.requestUpdate()\n }\n }\n\n override render() {\n // step 是相对当前值的增减幅度,不要求值落在原生 input 以 min 为基准的 step 网格上。\n return html`\n <div class=\"wui-glass wui-input-inner\">\n <button\n class=\"num-btn\"\n aria-label=${resolveBuiltinLabel('decrease', this.ariaDecreaseLabel)}\n ?disabled=${this._isDisabled || this.readonly || this.atMin}\n @click=${() => this.handleStep(-1)}\n >\n <web-ui-icon .icon=${lucideMinus}></web-ui-icon>\n </button>\n <input\n id=${this._fieldId}\n type=\"number\"\n step=\"any\"\n placeholder=${this.placeholder}\n name=${this.name}\n aria-label=${ifDefined(this._getLabelledbyText() || this.ariaLabel)}\n aria-labelledby=${ifDefined(this.ariaLabelledby)}\n .value=${this._draft ?? String(this.value)}\n ?disabled=${this._isDisabled}\n ?readonly=${this.readonly}\n ?required=${this.required}\n @input=${this.handleInput}\n @change=${this.handleNativeChange}\n @keydown=${this.handleKeydown}\n @focus=${this.handleFocus}\n @blur=${this.handleBlur}\n />\n <button\n class=\"num-btn\"\n aria-label=${resolveBuiltinLabel('increase', this.ariaIncreaseLabel)}\n ?disabled=${this._isDisabled || this.readonly || this.atMax}\n @click=${() => this.handleStep(1)}\n >\n <web-ui-icon .icon=${lucidePlus}></web-ui-icon>\n </button>\n </div>\n `\n }\n\n declare readonly $events: {\n input: Event\n change: Event\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'web-ui-input-number': WebUiInputNumber\n }\n}\n"],"mappings":"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"}
@@ -1,6 +1,5 @@
1
- //#region src/components/input-number/style.css?inline
2
- var e = "*,:before,:after{box-sizing:border-box}:host{display:inline-block}:host([disabled]),:host([data-form-disabled]){cursor:not-allowed;opacity:.4}.wui-input-inner{--wui-glass-corner-radius:calc(var(--wui-control-size,36px) / 2);gap:var(--wui-space-1,4px);box-sizing:border-box;width:var(--wui-input-width,200px);min-width:var(--wui-control-size,36px);height:var(--wui-control-size,36px);padding:0 var(--wui-space-1,4px);border-radius:var(--wui-radius-control,calc(infinity * 1px));align-items:center;display:flex;position:relative}input{min-width:48px;height:100%;font:inherit;font-size:var(--wui-font-size,14px);color:var(--wui-color-text,#1b1b1b);text-align:center;background:0 0;border:none;outline:none;flex:1;margin:0;padding:0}input::-webkit-inner-spin-button{appearance:none;margin:0}input::-webkit-outer-spin-button{appearance:none;margin:0}input::placeholder{font:inherit;color:var(--wui-color-text-secondary,#6a6a6a)}input[type=number]{appearance:textfield}input:disabled{cursor:not-allowed}@media (pointer:coarse){input{font-size:max(16px, var(--wui-font-size,14px))}}.wui-input-inner:after{pointer-events:none;content:\"\";border-radius:inherit;box-shadow:inset 0 0 0 1px transparent, 0 0 0 var(--wui-focus-ring-width,3px) transparent;transition:box-shadow var(--wui-duration-focus,.2s);position:absolute;inset:0}:host([focused]) .wui-input-inner:after{box-shadow:inset 0 0 0 1px var(--wui-color-accent,#0071e3), 0 0 0 var(--wui-focus-ring-width,3px) var(--wui-color-focus-ring,color-mix(in srgb, var(--wui-color-accent,#0071e3) 40%, transparent))}.num-btn{cursor:default;border-radius:var(--wui-radius-control,calc(infinity * 1px));width:30px;height:30px;color:var(--wui-color-text-secondary,#6a6a6a);background:0 0;border:none;flex-shrink:0;justify-content:center;align-items:center;padding:0;display:flex}.num-btn:disabled{cursor:not-allowed;opacity:.4}.num-btn:focus-visible{outline:var(--wui-focus-ring-width,3px) solid var(--wui-color-focus-ring,color-mix(in srgb, var(--wui-color-accent,#0071e3) 40%, transparent));outline-offset:2px}@media (hover:hover) and (pointer:fine){.num-btn:hover:not(:disabled){background:var(--wui-color-state-layer-hover,color-mix(in srgb, var(--wui-color-text,#1b1b1b) 6%, transparent))}}.num-btn:active:not(:disabled){background:var(--wui-color-state-layer-active,color-mix(in srgb, var(--wui-color-text,#1b1b1b) 15%, transparent))}:host([disabled]) .num-btn:disabled,:host([data-form-disabled]) .num-btn:disabled{opacity:1}";
3
- //#endregion
4
- export { e as default };
1
+ // src/components/input-number/style.css?inline
2
+ var style_default = "*,:before,:after{box-sizing:border-box}:host{display:inline-block}:host([disabled]),:host([data-form-disabled]){cursor:not-allowed;opacity:.4}.wui-input-inner{--wui-glass-corner-radius:calc(var(--wui-control-size,36px) / 2);gap:var(--wui-space-1,4px);box-sizing:border-box;width:var(--wui-input-width,200px);min-width:var(--wui-control-size,36px);height:var(--wui-control-size,36px);padding:0 var(--wui-space-1,4px);border-radius:var(--wui-radius-control,calc(infinity * 1px));align-items:center;display:flex;position:relative}input{min-width:48px;height:100%;font:inherit;font-size:var(--wui-font-size,14px);color:var(--wui-color-text,#1b1b1b);text-align:center;background:0 0;border:none;outline:none;flex:1;margin:0;padding:0}input::-webkit-inner-spin-button{appearance:none;margin:0}input::-webkit-outer-spin-button{appearance:none;margin:0}input::placeholder{font:inherit;color:var(--wui-color-text-secondary,#6a6a6a)}input[type=number]{appearance:textfield}input:disabled{cursor:not-allowed}@media (pointer:coarse){input{font-size:max(16px, var(--wui-font-size,14px))}}.wui-input-inner:after{pointer-events:none;content:\"\";border-radius:inherit;box-shadow:inset 0 0 0 1px transparent, 0 0 0 var(--wui-focus-ring-width,3px) transparent;transition:box-shadow var(--wui-duration-focus,.2s);position:absolute;inset:0}:host([focused]) .wui-input-inner:after{box-shadow:inset 0 0 0 1px var(--wui-color-accent,#0071e3), 0 0 0 var(--wui-focus-ring-width,3px) var(--wui-color-focus-ring,color-mix(in srgb, var(--wui-color-accent,#0071e3) 40%, transparent))}.num-btn{cursor:default;border-radius:var(--wui-radius-control,calc(infinity * 1px));width:30px;height:30px;color:var(--wui-color-text-secondary,#6a6a6a);background:0 0;border:none;flex-shrink:0;justify-content:center;align-items:center;padding:0;display:flex}.num-btn:disabled{cursor:not-allowed;opacity:.4}.num-btn:focus-visible{outline:var(--wui-focus-ring-width,3px) solid var(--wui-color-focus-ring,color-mix(in srgb, var(--wui-color-accent,#0071e3) 40%, transparent));outline-offset:2px}@media (hover:hover) and (pointer:fine){.num-btn:hover:not(:disabled){background:var(--wui-color-state-layer-hover,color-mix(in srgb, var(--wui-color-text,#1b1b1b) 6%, transparent))}}.num-btn:active:not(:disabled){background:var(--wui-color-state-layer-active,color-mix(in srgb, var(--wui-color-text,#1b1b1b) 15%, transparent))}:host([disabled]) .num-btn:disabled,:host([data-form-disabled]) .num-btn:disabled{opacity:1}\n";
3
+ export { style_default as default };
5
4
 
6
5
  //# sourceMappingURL=style.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"style.js","names":[],"sources":["../../../src/components/input-number/style.css?inline"],"sourcesContent":["*,\n*::before,\n*::after {\n box-sizing: border-box;\n}\n\n:host {\n display: inline-block;\n}\n\n:host([disabled]),\n:host([data-form-disabled]) {\n cursor: not-allowed;\n opacity: 0.4;\n}\n\n.wui-input-inner {\n --wui-glass-corner-radius: calc(var(--wui-control-size, 36px) / 2);\n position: relative;\n\n display: flex;\n gap: var(--wui-space-1, 4px);\n align-items: center;\n\n box-sizing: border-box;\n width: var(--wui-input-width, 200px);\n min-width: var(--wui-control-size, 36px);\n height: var(--wui-control-size, 36px);\n padding: 0 var(--wui-space-1, 4px);\n border-radius: var(--wui-radius-control, calc(infinity * 1px));\n}\n\ninput {\n flex: 1;\n\n min-width: 48px;\n height: 100%;\n margin: 0;\n padding: 0;\n border: none;\n\n /* 表单控件不继承字体;显式继承以对齐宿主排版,避免 UA 默认字体差异 */\n font: inherit;\n font-size: var(--wui-font-size, 14px);\n color: var(--wui-color-text, #1b1b1b);\n text-align: center;\n\n background: transparent;\n outline: none;\n\n &::-webkit-inner-spin-button,\n &::-webkit-outer-spin-button {\n margin: 0;\n appearance: none;\n }\n\n /* 同 input:占位文本的排版属于控件,不在这里另写一份。\n 颜色此前没声明,占位文本落在 UA 默认色上(浅/深两档都是 #757575),\n 与同系列其它控件的 secondary text token 不一致。 */\n &::placeholder {\n font: inherit;\n color: var(--wui-color-text-secondary, #6a6a6a);\n }\n\n &[type='number'] {\n appearance: textfield;\n }\n\n &:disabled {\n cursor: not-allowed;\n }\n}\n\n/* Coarse pointers include iOS Safari, where a sub-16px font triggers focus zoom. */\n@media (pointer: coarse) {\n input {\n font-size: max(16px, var(--wui-font-size, 14px));\n }\n}\n\n/* Focus ring 独立成 ::after 层:base/focused 都是显式 box-shadow,保证所有变体都能过渡 */\n.wui-input-inner::after {\n pointer-events: none;\n content: '';\n\n position: absolute;\n inset: 0;\n\n border-radius: inherit;\n\n box-shadow:\n inset 0 0 0 1px transparent,\n 0 0 0 var(--wui-focus-ring-width, 3px) transparent;\n\n transition: box-shadow var(--wui-duration-focus, 200ms);\n}\n\n:host([focused]) .wui-input-inner::after {\n box-shadow:\n inset 0 0 0 1px var(--wui-color-accent, #0071e3),\n 0 0 0 var(--wui-focus-ring-width, 3px)\n var(--wui-color-focus-ring, color-mix(in srgb, var(--wui-color-accent, #0071e3) 40%, transparent));\n}\n\n.num-btn {\n cursor: default;\n\n display: flex;\n flex-shrink: 0;\n align-items: center;\n justify-content: center;\n\n width: 30px;\n height: 30px;\n padding: 0;\n border: none;\n border-radius: var(--wui-radius-control, calc(infinity * 1px));\n\n color: var(--wui-color-text-secondary, #6a6a6a);\n\n background: transparent;\n\n &:disabled {\n cursor: not-allowed;\n opacity: 0.4;\n }\n\n &:focus-visible {\n outline: var(--wui-focus-ring-width, 3px) solid\n var(--wui-color-focus-ring, color-mix(in srgb, var(--wui-color-accent, #0071e3) 40%, transparent));\n outline-offset: 2px;\n }\n}\n\n@media (hover: hover) and (pointer: fine) {\n .num-btn:hover:not(:disabled) {\n background: var(--wui-color-state-layer-hover, color-mix(in srgb, var(--wui-color-text, #1b1b1b) 6%, transparent));\n }\n}\n\n.num-btn:active:not(:disabled) {\n background: var(--wui-color-state-layer-active, color-mix(in srgb, var(--wui-color-text, #1b1b1b) 15%, transparent));\n}\n\n:host([disabled]) .num-btn:disabled,\n:host([data-form-disabled]) .num-btn:disabled {\n opacity: 1;\n}\n"],"mappings":""}
1
+ {"version":3,"file":"style.js","names":[],"sources":["../../../src/components/input-number/style.css?inline"],"sourcesContent":["*,\n*::before,\n*::after {\n box-sizing: border-box;\n}\n\n:host {\n display: inline-block;\n}\n\n:host([disabled]),\n:host([data-form-disabled]) {\n cursor: not-allowed;\n opacity: 0.4;\n}\n\n.wui-input-inner {\n --wui-glass-corner-radius: calc(var(--wui-control-size, 36px) / 2);\n position: relative;\n\n display: flex;\n gap: var(--wui-space-1, 4px);\n align-items: center;\n\n box-sizing: border-box;\n width: var(--wui-input-width, 200px);\n min-width: var(--wui-control-size, 36px);\n height: var(--wui-control-size, 36px);\n padding: 0 var(--wui-space-1, 4px);\n border-radius: var(--wui-radius-control, calc(infinity * 1px));\n}\n\ninput {\n flex: 1;\n\n min-width: 48px;\n height: 100%;\n margin: 0;\n padding: 0;\n border: none;\n\n /* 表单控件不继承字体;显式继承以对齐宿主排版,避免 UA 默认字体差异 */\n font: inherit;\n font-size: var(--wui-font-size, 14px);\n color: var(--wui-color-text, #1b1b1b);\n text-align: center;\n\n background: transparent;\n outline: none;\n\n &::-webkit-inner-spin-button,\n &::-webkit-outer-spin-button {\n margin: 0;\n appearance: none;\n }\n\n /* 同 input:占位文本的排版属于控件,不在这里另写一份。\n 颜色在这里声明,避免占位文本落在 UA 默认色上(浅/深两档都是 #757575),\n 与同系列其它控件的 secondary text token 不一致。 */\n &::placeholder {\n font: inherit;\n color: var(--wui-color-text-secondary, #6a6a6a);\n }\n\n &[type='number'] {\n appearance: textfield;\n }\n\n &:disabled {\n cursor: not-allowed;\n }\n}\n\n/* Coarse pointers include iOS Safari, where a sub-16px font triggers focus zoom. */\n@media (pointer: coarse) {\n input {\n font-size: max(16px, var(--wui-font-size, 14px));\n }\n}\n\n/* Focus ring 独立成 ::after 层:base/focused 都是显式 box-shadow,保证所有变体都能过渡 */\n.wui-input-inner::after {\n pointer-events: none;\n content: '';\n\n position: absolute;\n inset: 0;\n\n border-radius: inherit;\n\n box-shadow:\n inset 0 0 0 1px transparent,\n 0 0 0 var(--wui-focus-ring-width, 3px) transparent;\n\n transition: box-shadow var(--wui-duration-focus, 200ms);\n}\n\n:host([focused]) .wui-input-inner::after {\n box-shadow:\n inset 0 0 0 1px var(--wui-color-accent, #0071e3),\n 0 0 0 var(--wui-focus-ring-width, 3px)\n var(--wui-color-focus-ring, color-mix(in srgb, var(--wui-color-accent, #0071e3) 40%, transparent));\n}\n\n.num-btn {\n cursor: default;\n\n display: flex;\n flex-shrink: 0;\n align-items: center;\n justify-content: center;\n\n width: 30px;\n height: 30px;\n padding: 0;\n border: none;\n border-radius: var(--wui-radius-control, calc(infinity * 1px));\n\n color: var(--wui-color-text-secondary, #6a6a6a);\n\n background: transparent;\n\n &:disabled {\n cursor: not-allowed;\n opacity: 0.4;\n }\n\n &:focus-visible {\n outline: var(--wui-focus-ring-width, 3px) solid\n var(--wui-color-focus-ring, color-mix(in srgb, var(--wui-color-accent, #0071e3) 40%, transparent));\n outline-offset: 2px;\n }\n}\n\n@media (hover: hover) and (pointer: fine) {\n .num-btn:hover:not(:disabled) {\n background: var(--wui-color-state-layer-hover, color-mix(in srgb, var(--wui-color-text, #1b1b1b) 6%, transparent));\n }\n}\n\n.num-btn:active:not(:disabled) {\n background: var(--wui-color-state-layer-active, color-mix(in srgb, var(--wui-color-text, #1b1b1b) 15%, transparent));\n}\n\n:host([disabled]) .num-btn:disabled,\n:host([data-form-disabled]) .num-btn:disabled {\n opacity: 1;\n}\n"],"mappings":";AAAA,IAAA,gBAAA"}
@@ -1,6 +1,9 @@
1
- import { LitElement } from 'lit';
1
+ import "../icon/index.js";
2
+ import "../button/index.js";
3
+ import "../drawer/index.js";
4
+ import { LitElement, PropertyValues } from "lit";
2
5
  /**
3
- * Layout 组件 - 提供页面布局框架,支持 collapsible sidebar
6
+ * Layout 组件 - 提供页面布局框架,支持 collapsible sidebar 与无 sidebar 模式
4
7
  *
5
8
  * @fires sidebar-collapsed-change - 桌面端侧边栏 collapse 状态变更请求时触发
6
9
  * @fires sidebar-open-change - 移动端侧边栏 Drawer toggle 请求时触发
@@ -8,95 +11,115 @@ import { LitElement } from 'lit';
8
11
  * @fires mobile-change - 视口跨越移动端断点、`mobile` 翻转时触发(派生状态通知)
9
12
  * @slot banner - 顶部 Banner 区域(全宽,随页面滚动,可选)
10
13
  * @slot header - 内容区顶部 header(sticky)
11
- * @slot sidebar - 侧边栏内容;Consumer 决定其内部固定区域与滚动容器
14
+ * @slot sidebar - 侧边栏内容;Consumer 决定其内部固定区域与滚动容器;`no-sidebar` 置位时不渲染
12
15
  * @slot tabbar - 底部 tabbar 区域
13
16
  * @slot default - 主内容区
14
17
  */
18
+ /** `web-ui-layout` 内置无障碍名的成组覆盖;每个 key 对应一处图标控件的 accessible name。 */
19
+ export interface LayoutAriaLabels {
20
+ collapseSidebar?: string;
21
+ expandSidebar?: string;
22
+ resizeSidebar?: string;
23
+ openNavigationMenu?: string;
24
+ mainNavigation?: string;
25
+ }
15
26
  export declare class WebUiLayout extends LitElement {
16
- static styles: import('lit').CSSResult[];
17
- /**
18
- * 桌面端 Sidebar 的持久布局偏好。
19
- *
20
- * `true` 只会将桌面 Sidebar 收窄到 `collapsedWidth`,不会影响移动端 Drawer。
21
- * 它不与 `sidebarOpen` 合并:前者是跨视口保留的密度选择,后者是移动端瞬时的 modal 可见性。
22
- *
23
- * 两处渲染的是同一份 `sidebar` slot 内容,所以本属性只负责桌面 aside 的几何:Consumer
24
- * 若让自己的 slot 内容跟着它变形态(隐藏 label、改排布),必须按 `mobile` 收窄那个条件
25
- * (例如 `collapsed && !layout.mobile`,或 CSS 的 `web-ui-layout[mobile]`),
26
- * 否则 collapsed state 会一路渲染进移动端 Drawer(issue #195)。
27
- */
28
- sidebarCollapsed: boolean;
29
- sidebarWidth: string;
30
- collapsedWidth: string;
31
- /** 启用桌面端 Sidebar 拖拽调宽(collapsed state 隐藏 handle)。 */
32
- sidebarResizable: boolean;
33
- /**
34
- * 拖拽调宽的下限(px,其他单位不解析);未设置时回退为 `collapsedWidth`,
35
- * 防止拖到不可用宽度。上限 `sidebar-max-width` 受内置 50vw 硬上限钳制。
36
- */
37
- sidebarMinWidth: string;
38
- /** 拖拽调宽的上限(px,其他单位不解析);始终受内置 50vw 硬上限钳制。 */
39
- sidebarMaxWidth: string;
40
- /**
41
- * 移动端 web-ui-drawer 的瞬时可见性。
42
- *
43
- * Drawer Toggle、Escape 和 backdrop 关闭都通过 `sidebar-open-change` 请求更新它;它不会改变桌面端的 collapse preference。
44
- * 因而不与 `sidebarCollapsed` 合并,避免响应式切换时将一次移动端交互误写为桌面端布局选择。
45
- */
46
- sidebarOpen: boolean;
47
- headerGlow: boolean;
48
- private _mobile;
49
- /**
50
- * 当前视口是否落在移动端分支(即 `MOBILE_VIEWPORT_QUERY` 命中)。
51
- *
52
- * 与组件渲染哪一套树、以及 `mobile-change` 的派发是同一个值:翻转瞬间三者一起变,
53
- * Consumer 不必自己写断点判断,也不会与 layout 内部的树切换错开半拍。派生状态只读。
54
- */
55
- get mobile(): boolean;
56
- private _mobileQuery;
57
- private readonly _onMobileQueryChange;
58
- private _syncMobile;
59
- attributeChangedCallback(name: string, oldValue: string | null, newValue: string | null): void;
60
- private readonly _visibleBanner;
61
- private readonly _visibleBannerController;
62
- private _toggleSidebar;
63
- private _emitSidebarCollapsedChange;
64
- private _emitSidebarOpenChange;
65
- private _onDrawerChange;
66
- private _resizeGesture;
67
- private _resizeStartWidth;
68
- private _resizeWidth;
69
- private _parsePx;
70
- private _resolveSidebarMinWidth;
71
- private _resolveSidebarMaxWidth;
72
- private _isResizing;
73
- private _handleResizePointerDown;
74
- private _resetActiveResize;
75
- private _handleResizeKeydown;
76
- private _syncMobileViewportSubscription;
77
- connectedCallback(): void;
78
- disconnectedCallback(): void;
79
- firstUpdated(): void;
80
- private _onBannerSlotChange;
81
- private _syncBannerPresence;
82
- render(): import('lit').TemplateResult<1>;
83
- readonly $events: {
84
- 'sidebar-collapsed-change': CustomEvent<{
85
- collapsed: boolean;
86
- }>;
87
- 'sidebar-open-change': CustomEvent<{
88
- open: boolean;
89
- }>;
90
- 'sidebar-width-change': CustomEvent<{
91
- width: string;
92
- }>;
93
- 'mobile-change': CustomEvent<{
94
- mobile: boolean;
95
- }>;
96
- };
27
+ static styles: import("lit").CSSResult[];
28
+ /**
29
+ * 关闭整块 sidebar:桌面端不渲染 aside 与 collapse Toggle,移动端不渲染 header Toggle 与 Drawer。
30
+ *
31
+ * 它是布局模式而不是 collapse 的别名:`sidebar-collapsed` 只收窄桌面 aside,本属性把侧边栏
32
+ * 结构本身从树里去掉。`sidebar` slot 随之不渲染(消费方节点仍留在 light DOM),
33
+ * 侧边栏相关事件与属性在该模式下不产生可见效果。
34
+ */
35
+ noSidebar: boolean;
36
+ /**
37
+ * 桌面端 Sidebar 的持久布局偏好。
38
+ *
39
+ * `true` 只会将桌面 Sidebar 收窄到 `collapsedWidth`,不会影响移动端 Drawer。
40
+ * 它不与 `sidebarOpen` 合并:前者是跨视口保留的密度选择,后者是移动端瞬时的 modal 可见性。
41
+ *
42
+ * 两处渲染的是同一份 `sidebar` slot 内容,所以本属性只负责桌面 aside 的几何:Consumer
43
+ * 若让自己的 slot 内容跟着它变形态(隐藏 label、改排布),必须按 `mobile` 收窄那个条件
44
+ * (例如 `collapsed && !layout.mobile`,或 CSS 的 `web-ui-layout[mobile]`),
45
+ * 否则 collapsed state 会一路渲染进移动端 Drawer(issue #195)。
46
+ */
47
+ sidebarCollapsed: boolean;
48
+ sidebarWidth: string;
49
+ collapsedWidth: string;
50
+ /** 启用桌面端 Sidebar 拖拽调宽(collapsed state 隐藏 handle)。 */
51
+ sidebarResizable: boolean;
52
+ /**
53
+ * 拖拽调宽的下限(px,其他单位不解析);未设置时回退为 `collapsedWidth`,
54
+ * 防止拖到不可用宽度。上限 `sidebar-max-width` 受内置 50vw 硬上限钳制。
55
+ */
56
+ sidebarMinWidth: string;
57
+ /** 拖拽调宽的上限(px,其他单位不解析);始终受内置 50vw 硬上限钳制。 */
58
+ sidebarMaxWidth: string;
59
+ /**
60
+ * 移动端 web-ui-drawer 的瞬时可见性。
61
+ *
62
+ * Drawer Toggle、Escape 和 backdrop 关闭都通过 `sidebar-open-change` 请求更新它;它不会改变桌面端的 collapse preference。
63
+ * 因而不与 `sidebarCollapsed` 合并,避免响应式切换时将一次移动端交互误写为桌面端布局选择。
64
+ */
65
+ sidebarOpen: boolean;
66
+ headerGlow: boolean;
67
+ /** 内置无障碍名的成组覆盖;未提供的 key 回退内置英文文案(见 ADR-0016)。 */
68
+ ariaLabels?: LayoutAriaLabels;
69
+ private _mobile;
70
+ /**
71
+ * 当前视口是否落在移动端分支(即 `MOBILE_VIEWPORT_QUERY` 命中)。
72
+ *
73
+ * 与组件渲染哪一套树、以及 `mobile-change` 的派发是同一个值:翻转瞬间三者一起变,
74
+ * Consumer 不必自己写断点判断,也不会与 layout 内部的树切换错开半拍。派生状态只读。
75
+ */
76
+ get mobile(): boolean;
77
+ private _mobileQuery;
78
+ private readonly _onMobileQueryChange;
79
+ private _syncMobile;
80
+ attributeChangedCallback(name: string, oldValue: string | null, newValue: string | null): void;
81
+ private readonly _visibleBanner;
82
+ private readonly _visibleBannerController;
83
+ private _toggleSidebar;
84
+ private _emitSidebarCollapsedChange;
85
+ private _emitSidebarOpenChange;
86
+ private _onDrawerChange;
87
+ private _resizeGesture;
88
+ private _resizeStartWidth;
89
+ private _resizeWidth;
90
+ private _parsePx;
91
+ private _resolveSidebarMinWidth;
92
+ private _resolveSidebarMaxWidth;
93
+ private _isResizing;
94
+ private _handleResizePointerDown;
95
+ private _resetActiveResize;
96
+ private _handleResizeKeydown;
97
+ private _syncMobileViewportSubscription;
98
+ connectedCallback(): void;
99
+ disconnectedCallback(): void;
100
+ firstUpdated(): void;
101
+ private _onBannerSlotChange;
102
+ private _syncBannerPresence;
103
+ protected willUpdate(changed: PropertyValues): void;
104
+ render(): import("lit").TemplateResult<1>;
105
+ readonly $events: {
106
+ 'sidebar-collapsed-change': CustomEvent<{
107
+ collapsed: boolean;
108
+ }>;
109
+ 'sidebar-open-change': CustomEvent<{
110
+ open: boolean;
111
+ }>;
112
+ 'sidebar-width-change': CustomEvent<{
113
+ width: string;
114
+ }>;
115
+ 'mobile-change': CustomEvent<{
116
+ mobile: boolean;
117
+ }>;
118
+ };
97
119
  }
98
120
  declare global {
99
- interface HTMLElementTagNameMap {
100
- 'web-ui-layout': WebUiLayout;
101
- }
121
+ interface HTMLElementTagNameMap {
122
+ 'web-ui-layout': WebUiLayout;
123
+ }
102
124
  }
125
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","names":[],"sources":["../../../src/components/layout/index.ts"],"mappings":";;;;;;;;;;;;;;;;;;iBAyCiB;EACf;EACA;EACA;EACA;EACA;;qBAIW,oBAAoB;SACf,sBAAM;;;;;;;;EAUtB;;;;;;;;;;;;EAcA;EAGA;EAGA;;EAIA;;;;;EAOA;;EAIA;;;;;;;EASA;EAGA;;EAGgC,aAAa;UASrC;;;;;;;MAQJ;UAII;mBAES;UAST;EAUC,yBAAyB,cAAc,yBAAyB;mBAoBxD;mBAMA;UAET;UASA;UAUA;UAUA;UAKA;UACA;UAES;UAET;UAKA;UAMA;UASA;UAIA;UA+CA;UAUA;UAoDA;EAQC;EAQA;EAOA;UAID;UAIA;YAiBW,WAAW,SAAS;EAK9B,wBAAM;WAgIE;IACf,4BAA4B;MAAc;;IAC1C,uBAAuB;MAAc;;IACrC,wBAAwB;MAAc;;IACtC,iBAAiB;MAAc;;;;QAI3B;YACI;IACR,iBAAiB"}