@kurot/ui 1.1.7

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 (326) hide show
  1. package/README.md +258 -0
  2. package/dist/index.d.ts +8 -0
  3. package/dist/index.d.ts.map +1 -0
  4. package/dist/index.js +8 -0
  5. package/dist/index.js.map +1 -0
  6. package/dist/kurot/binding/Binding.d.ts +38 -0
  7. package/dist/kurot/binding/Binding.d.ts.map +1 -0
  8. package/dist/kurot/binding/Binding.js +88 -0
  9. package/dist/kurot/binding/Binding.js.map +1 -0
  10. package/dist/kurot/binding/Watcher.d.ts +57 -0
  11. package/dist/kurot/binding/Watcher.d.ts.map +1 -0
  12. package/dist/kurot/binding/Watcher.js +119 -0
  13. package/dist/kurot/binding/Watcher.js.map +1 -0
  14. package/dist/kurot/binding/index.d.ts +3 -0
  15. package/dist/kurot/binding/index.d.ts.map +1 -0
  16. package/dist/kurot/binding/index.js +3 -0
  17. package/dist/kurot/binding/index.js.map +1 -0
  18. package/dist/kurot/collections/ArrayCollection.d.ts +56 -0
  19. package/dist/kurot/collections/ArrayCollection.d.ts.map +1 -0
  20. package/dist/kurot/collections/ArrayCollection.js +143 -0
  21. package/dist/kurot/collections/ArrayCollection.js.map +1 -0
  22. package/dist/kurot/collections/ICollection.d.ts +24 -0
  23. package/dist/kurot/collections/ICollection.d.ts.map +1 -0
  24. package/dist/kurot/collections/ICollection.js +2 -0
  25. package/dist/kurot/collections/ICollection.js.map +1 -0
  26. package/dist/kurot/collections/index.d.ts +3 -0
  27. package/dist/kurot/collections/index.d.ts.map +1 -0
  28. package/dist/kurot/collections/index.js +2 -0
  29. package/dist/kurot/collections/index.js.map +1 -0
  30. package/dist/kurot/components/Animation.d.ts +34 -0
  31. package/dist/kurot/components/Animation.d.ts.map +1 -0
  32. package/dist/kurot/components/Animation.js +100 -0
  33. package/dist/kurot/components/Animation.js.map +1 -0
  34. package/dist/kurot/components/Button.d.ts +61 -0
  35. package/dist/kurot/components/Button.d.ts.map +1 -0
  36. package/dist/kurot/components/Button.js +176 -0
  37. package/dist/kurot/components/Button.js.map +1 -0
  38. package/dist/kurot/components/CheckBox.d.ts +11 -0
  39. package/dist/kurot/components/CheckBox.d.ts.map +1 -0
  40. package/dist/kurot/components/CheckBox.js +13 -0
  41. package/dist/kurot/components/CheckBox.js.map +1 -0
  42. package/dist/kurot/components/ComboBox.d.ts +93 -0
  43. package/dist/kurot/components/ComboBox.d.ts.map +1 -0
  44. package/dist/kurot/components/ComboBox.js +307 -0
  45. package/dist/kurot/components/ComboBox.js.map +1 -0
  46. package/dist/kurot/components/Component.d.ts +203 -0
  47. package/dist/kurot/components/Component.d.ts.map +1 -0
  48. package/dist/kurot/components/Component.js +522 -0
  49. package/dist/kurot/components/Component.js.map +1 -0
  50. package/dist/kurot/components/DataGroup.d.ts +90 -0
  51. package/dist/kurot/components/DataGroup.d.ts.map +1 -0
  52. package/dist/kurot/components/DataGroup.js +483 -0
  53. package/dist/kurot/components/DataGroup.js.map +1 -0
  54. package/dist/kurot/components/EditableText.d.ts +44 -0
  55. package/dist/kurot/components/EditableText.d.ts.map +1 -0
  56. package/dist/kurot/components/EditableText.js +126 -0
  57. package/dist/kurot/components/EditableText.js.map +1 -0
  58. package/dist/kurot/components/Group.d.ts +133 -0
  59. package/dist/kurot/components/Group.d.ts.map +1 -0
  60. package/dist/kurot/components/Group.js +454 -0
  61. package/dist/kurot/components/Group.js.map +1 -0
  62. package/dist/kurot/components/HScrollBar.d.ts +13 -0
  63. package/dist/kurot/components/HScrollBar.d.ts.map +1 -0
  64. package/dist/kurot/components/HScrollBar.js +55 -0
  65. package/dist/kurot/components/HScrollBar.js.map +1 -0
  66. package/dist/kurot/components/HSlider.d.ts +17 -0
  67. package/dist/kurot/components/HSlider.d.ts.map +1 -0
  68. package/dist/kurot/components/HSlider.js +48 -0
  69. package/dist/kurot/components/HSlider.js.map +1 -0
  70. package/dist/kurot/components/Image.d.ts +35 -0
  71. package/dist/kurot/components/Image.d.ts.map +1 -0
  72. package/dist/kurot/components/Image.js +141 -0
  73. package/dist/kurot/components/Image.js.map +1 -0
  74. package/dist/kurot/components/ItemRenderer.d.ts +42 -0
  75. package/dist/kurot/components/ItemRenderer.d.ts.map +1 -0
  76. package/dist/kurot/components/ItemRenderer.js +117 -0
  77. package/dist/kurot/components/ItemRenderer.js.map +1 -0
  78. package/dist/kurot/components/Label.d.ts +49 -0
  79. package/dist/kurot/components/Label.d.ts.map +1 -0
  80. package/dist/kurot/components/Label.js +193 -0
  81. package/dist/kurot/components/Label.js.map +1 -0
  82. package/dist/kurot/components/List.d.ts +16 -0
  83. package/dist/kurot/components/List.d.ts.map +1 -0
  84. package/dist/kurot/components/List.js +34 -0
  85. package/dist/kurot/components/List.js.map +1 -0
  86. package/dist/kurot/components/ListBase.d.ts +61 -0
  87. package/dist/kurot/components/ListBase.d.ts.map +1 -0
  88. package/dist/kurot/components/ListBase.js +202 -0
  89. package/dist/kurot/components/ListBase.js.map +1 -0
  90. package/dist/kurot/components/Panel.d.ts +53 -0
  91. package/dist/kurot/components/Panel.d.ts.map +1 -0
  92. package/dist/kurot/components/Panel.js +145 -0
  93. package/dist/kurot/components/Panel.js.map +1 -0
  94. package/dist/kurot/components/ProgressBar.d.ts +48 -0
  95. package/dist/kurot/components/ProgressBar.d.ts.map +1 -0
  96. package/dist/kurot/components/ProgressBar.js +180 -0
  97. package/dist/kurot/components/ProgressBar.js.map +1 -0
  98. package/dist/kurot/components/RadioButton.d.ts +86 -0
  99. package/dist/kurot/components/RadioButton.d.ts.map +1 -0
  100. package/dist/kurot/components/RadioButton.js +246 -0
  101. package/dist/kurot/components/RadioButton.js.map +1 -0
  102. package/dist/kurot/components/Range.d.ts +41 -0
  103. package/dist/kurot/components/Range.d.ts.map +1 -0
  104. package/dist/kurot/components/Range.js +144 -0
  105. package/dist/kurot/components/Range.js.map +1 -0
  106. package/dist/kurot/components/Rect.d.ts +33 -0
  107. package/dist/kurot/components/Rect.d.ts.map +1 -0
  108. package/dist/kurot/components/Rect.js +125 -0
  109. package/dist/kurot/components/Rect.js.map +1 -0
  110. package/dist/kurot/components/ScrollBarBase.d.ts +27 -0
  111. package/dist/kurot/components/ScrollBarBase.d.ts.map +1 -0
  112. package/dist/kurot/components/ScrollBarBase.js +50 -0
  113. package/dist/kurot/components/ScrollBarBase.js.map +1 -0
  114. package/dist/kurot/components/Scroller.d.ts +82 -0
  115. package/dist/kurot/components/Scroller.d.ts.map +1 -0
  116. package/dist/kurot/components/Scroller.js +416 -0
  117. package/dist/kurot/components/Scroller.js.map +1 -0
  118. package/dist/kurot/components/Skin.d.ts +64 -0
  119. package/dist/kurot/components/Skin.d.ts.map +1 -0
  120. package/dist/kurot/components/Skin.js +136 -0
  121. package/dist/kurot/components/Skin.js.map +1 -0
  122. package/dist/kurot/components/SliderBase.d.ts +60 -0
  123. package/dist/kurot/components/SliderBase.d.ts.map +1 -0
  124. package/dist/kurot/components/SliderBase.js +197 -0
  125. package/dist/kurot/components/SliderBase.js.map +1 -0
  126. package/dist/kurot/components/TabBar.d.ts +29 -0
  127. package/dist/kurot/components/TabBar.d.ts.map +1 -0
  128. package/dist/kurot/components/TabBar.js +92 -0
  129. package/dist/kurot/components/TabBar.js.map +1 -0
  130. package/dist/kurot/components/TextInput.d.ts +49 -0
  131. package/dist/kurot/components/TextInput.d.ts.map +1 -0
  132. package/dist/kurot/components/TextInput.js +157 -0
  133. package/dist/kurot/components/TextInput.js.map +1 -0
  134. package/dist/kurot/components/ToggleButton.d.ts +11 -0
  135. package/dist/kurot/components/ToggleButton.d.ts.map +1 -0
  136. package/dist/kurot/components/ToggleButton.js +14 -0
  137. package/dist/kurot/components/ToggleButton.js.map +1 -0
  138. package/dist/kurot/components/ToggleSwitch.d.ts +10 -0
  139. package/dist/kurot/components/ToggleSwitch.d.ts.map +1 -0
  140. package/dist/kurot/components/ToggleSwitch.js +10 -0
  141. package/dist/kurot/components/ToggleSwitch.js.map +1 -0
  142. package/dist/kurot/components/TouchScroll.d.ts +38 -0
  143. package/dist/kurot/components/TouchScroll.d.ts.map +1 -0
  144. package/dist/kurot/components/TouchScroll.js +133 -0
  145. package/dist/kurot/components/TouchScroll.js.map +1 -0
  146. package/dist/kurot/components/UILayer.d.ts +14 -0
  147. package/dist/kurot/components/UILayer.d.ts.map +1 -0
  148. package/dist/kurot/components/UILayer.js +38 -0
  149. package/dist/kurot/components/UILayer.js.map +1 -0
  150. package/dist/kurot/components/VScrollBar.d.ts +13 -0
  151. package/dist/kurot/components/VScrollBar.d.ts.map +1 -0
  152. package/dist/kurot/components/VScrollBar.js +55 -0
  153. package/dist/kurot/components/VScrollBar.js.map +1 -0
  154. package/dist/kurot/components/VSlider.d.ts +17 -0
  155. package/dist/kurot/components/VSlider.d.ts.map +1 -0
  156. package/dist/kurot/components/VSlider.js +49 -0
  157. package/dist/kurot/components/VSlider.js.map +1 -0
  158. package/dist/kurot/components/ViewStack.d.ts +42 -0
  159. package/dist/kurot/components/ViewStack.d.ts.map +1 -0
  160. package/dist/kurot/components/ViewStack.js +160 -0
  161. package/dist/kurot/components/ViewStack.js.map +1 -0
  162. package/dist/kurot/components/index.d.ts +34 -0
  163. package/dist/kurot/components/index.d.ts.map +1 -0
  164. package/dist/kurot/components/index.js +34 -0
  165. package/dist/kurot/components/index.js.map +1 -0
  166. package/dist/kurot/core/AssetAdapterRegistry.d.ts +4 -0
  167. package/dist/kurot/core/AssetAdapterRegistry.d.ts.map +1 -0
  168. package/dist/kurot/core/AssetAdapterRegistry.js +9 -0
  169. package/dist/kurot/core/AssetAdapterRegistry.js.map +1 -0
  170. package/dist/kurot/core/DefaultAssetAdapter.d.ts +10 -0
  171. package/dist/kurot/core/DefaultAssetAdapter.d.ts.map +1 -0
  172. package/dist/kurot/core/DefaultAssetAdapter.js +22 -0
  173. package/dist/kurot/core/DefaultAssetAdapter.js.map +1 -0
  174. package/dist/kurot/core/DefaultThemeAdapter.d.ts +8 -0
  175. package/dist/kurot/core/DefaultThemeAdapter.d.ts.map +1 -0
  176. package/dist/kurot/core/DefaultThemeAdapter.js +27 -0
  177. package/dist/kurot/core/DefaultThemeAdapter.js.map +1 -0
  178. package/dist/kurot/core/Direction.d.ts +10 -0
  179. package/dist/kurot/core/Direction.d.ts.map +1 -0
  180. package/dist/kurot/core/Direction.js +10 -0
  181. package/dist/kurot/core/Direction.js.map +1 -0
  182. package/dist/kurot/core/IAssetAdapter.d.ts +15 -0
  183. package/dist/kurot/core/IAssetAdapter.d.ts.map +1 -0
  184. package/dist/kurot/core/IAssetAdapter.js +2 -0
  185. package/dist/kurot/core/IAssetAdapter.js.map +1 -0
  186. package/dist/kurot/core/IDisplayText.d.ts +12 -0
  187. package/dist/kurot/core/IDisplayText.d.ts.map +1 -0
  188. package/dist/kurot/core/IDisplayText.js +2 -0
  189. package/dist/kurot/core/IDisplayText.js.map +1 -0
  190. package/dist/kurot/core/IItemRenderer.d.ts +19 -0
  191. package/dist/kurot/core/IItemRenderer.d.ts.map +1 -0
  192. package/dist/kurot/core/IItemRenderer.js +2 -0
  193. package/dist/kurot/core/IItemRenderer.js.map +1 -0
  194. package/dist/kurot/core/IThemeAdapter.d.ts +14 -0
  195. package/dist/kurot/core/IThemeAdapter.d.ts.map +1 -0
  196. package/dist/kurot/core/IThemeAdapter.js +2 -0
  197. package/dist/kurot/core/IThemeAdapter.js.map +1 -0
  198. package/dist/kurot/core/IUIComponent.d.ts +63 -0
  199. package/dist/kurot/core/IUIComponent.d.ts.map +1 -0
  200. package/dist/kurot/core/IUIComponent.js +2 -0
  201. package/dist/kurot/core/IUIComponent.js.map +1 -0
  202. package/dist/kurot/core/IViewport.d.ts +12 -0
  203. package/dist/kurot/core/IViewport.d.ts.map +1 -0
  204. package/dist/kurot/core/IViewport.js +2 -0
  205. package/dist/kurot/core/IViewport.js.map +1 -0
  206. package/dist/kurot/core/ScrollPolicy.d.ts +9 -0
  207. package/dist/kurot/core/ScrollPolicy.d.ts.map +1 -0
  208. package/dist/kurot/core/ScrollPolicy.js +9 -0
  209. package/dist/kurot/core/ScrollPolicy.js.map +1 -0
  210. package/dist/kurot/core/Theme.d.ts +53 -0
  211. package/dist/kurot/core/Theme.d.ts.map +1 -0
  212. package/dist/kurot/core/Theme.js +169 -0
  213. package/dist/kurot/core/Theme.js.map +1 -0
  214. package/dist/kurot/core/UIComponent.d.ts +2 -0
  215. package/dist/kurot/core/UIComponent.d.ts.map +1 -0
  216. package/dist/kurot/core/UIComponent.js +4 -0
  217. package/dist/kurot/core/UIComponent.js.map +1 -0
  218. package/dist/kurot/core/UIState.d.ts +84 -0
  219. package/dist/kurot/core/UIState.d.ts.map +1 -0
  220. package/dist/kurot/core/UIState.js +512 -0
  221. package/dist/kurot/core/UIState.js.map +1 -0
  222. package/dist/kurot/core/Validator.d.ts +46 -0
  223. package/dist/kurot/core/Validator.d.ts.map +1 -0
  224. package/dist/kurot/core/Validator.js +368 -0
  225. package/dist/kurot/core/Validator.js.map +1 -0
  226. package/dist/kurot/core/index.d.ts +17 -0
  227. package/dist/kurot/core/index.d.ts.map +1 -0
  228. package/dist/kurot/core/index.js +10 -0
  229. package/dist/kurot/core/index.js.map +1 -0
  230. package/dist/kurot/events/CollectionEvent.d.ts +22 -0
  231. package/dist/kurot/events/CollectionEvent.d.ts.map +1 -0
  232. package/dist/kurot/events/CollectionEvent.js +37 -0
  233. package/dist/kurot/events/CollectionEvent.js.map +1 -0
  234. package/dist/kurot/events/ItemTapEvent.d.ts +11 -0
  235. package/dist/kurot/events/ItemTapEvent.d.ts.map +1 -0
  236. package/dist/kurot/events/ItemTapEvent.js +24 -0
  237. package/dist/kurot/events/ItemTapEvent.js.map +1 -0
  238. package/dist/kurot/events/PropertyEvent.d.ts +8 -0
  239. package/dist/kurot/events/PropertyEvent.d.ts.map +1 -0
  240. package/dist/kurot/events/PropertyEvent.js +20 -0
  241. package/dist/kurot/events/PropertyEvent.js.map +1 -0
  242. package/dist/kurot/events/ScrollerThrowEvent.d.ts +17 -0
  243. package/dist/kurot/events/ScrollerThrowEvent.d.ts.map +1 -0
  244. package/dist/kurot/events/ScrollerThrowEvent.js +22 -0
  245. package/dist/kurot/events/ScrollerThrowEvent.js.map +1 -0
  246. package/dist/kurot/events/UIEvent.d.ts +29 -0
  247. package/dist/kurot/events/UIEvent.d.ts.map +1 -0
  248. package/dist/kurot/events/UIEvent.js +39 -0
  249. package/dist/kurot/events/UIEvent.js.map +1 -0
  250. package/dist/kurot/events/index.d.ts +6 -0
  251. package/dist/kurot/events/index.d.ts.map +1 -0
  252. package/dist/kurot/events/index.js +6 -0
  253. package/dist/kurot/events/index.js.map +1 -0
  254. package/dist/kurot/layouts/BasicLayout.d.ts +13 -0
  255. package/dist/kurot/layouts/BasicLayout.d.ts.map +1 -0
  256. package/dist/kurot/layouts/BasicLayout.js +146 -0
  257. package/dist/kurot/layouts/BasicLayout.js.map +1 -0
  258. package/dist/kurot/layouts/ColumnAlign.d.ts +9 -0
  259. package/dist/kurot/layouts/ColumnAlign.d.ts.map +1 -0
  260. package/dist/kurot/layouts/ColumnAlign.js +9 -0
  261. package/dist/kurot/layouts/ColumnAlign.js.map +1 -0
  262. package/dist/kurot/layouts/HorizontalLayout.d.ts +23 -0
  263. package/dist/kurot/layouts/HorizontalLayout.d.ts.map +1 -0
  264. package/dist/kurot/layouts/HorizontalLayout.js +405 -0
  265. package/dist/kurot/layouts/HorizontalLayout.js.map +1 -0
  266. package/dist/kurot/layouts/ILayoutTarget.d.ts +25 -0
  267. package/dist/kurot/layouts/ILayoutTarget.d.ts.map +1 -0
  268. package/dist/kurot/layouts/ILayoutTarget.js +2 -0
  269. package/dist/kurot/layouts/ILayoutTarget.js.map +1 -0
  270. package/dist/kurot/layouts/JustifyAlign.d.ts +8 -0
  271. package/dist/kurot/layouts/JustifyAlign.d.ts.map +1 -0
  272. package/dist/kurot/layouts/JustifyAlign.js +8 -0
  273. package/dist/kurot/layouts/JustifyAlign.js.map +1 -0
  274. package/dist/kurot/layouts/LayoutBase.d.ts +23 -0
  275. package/dist/kurot/layouts/LayoutBase.d.ts.map +1 -0
  276. package/dist/kurot/layouts/LayoutBase.js +45 -0
  277. package/dist/kurot/layouts/LayoutBase.js.map +1 -0
  278. package/dist/kurot/layouts/LinearLayoutBase.d.ts +70 -0
  279. package/dist/kurot/layouts/LinearLayoutBase.d.ts.map +1 -0
  280. package/dist/kurot/layouts/LinearLayoutBase.js +246 -0
  281. package/dist/kurot/layouts/LinearLayoutBase.js.map +1 -0
  282. package/dist/kurot/layouts/RowAlign.d.ts +9 -0
  283. package/dist/kurot/layouts/RowAlign.d.ts.map +1 -0
  284. package/dist/kurot/layouts/RowAlign.js +9 -0
  285. package/dist/kurot/layouts/RowAlign.js.map +1 -0
  286. package/dist/kurot/layouts/TileLayout.d.ts +79 -0
  287. package/dist/kurot/layouts/TileLayout.d.ts.map +1 -0
  288. package/dist/kurot/layouts/TileLayout.js +577 -0
  289. package/dist/kurot/layouts/TileLayout.js.map +1 -0
  290. package/dist/kurot/layouts/TileOrientation.d.ts +8 -0
  291. package/dist/kurot/layouts/TileOrientation.d.ts.map +1 -0
  292. package/dist/kurot/layouts/TileOrientation.js +8 -0
  293. package/dist/kurot/layouts/TileOrientation.js.map +1 -0
  294. package/dist/kurot/layouts/VerticalLayout.d.ts +23 -0
  295. package/dist/kurot/layouts/VerticalLayout.d.ts.map +1 -0
  296. package/dist/kurot/layouts/VerticalLayout.js +406 -0
  297. package/dist/kurot/layouts/VerticalLayout.js.map +1 -0
  298. package/dist/kurot/layouts/index.d.ts +12 -0
  299. package/dist/kurot/layouts/index.d.ts.map +1 -0
  300. package/dist/kurot/layouts/index.js +11 -0
  301. package/dist/kurot/layouts/index.js.map +1 -0
  302. package/dist/kurot/states/AddItems.d.ts +17 -0
  303. package/dist/kurot/states/AddItems.d.ts.map +1 -0
  304. package/dist/kurot/states/AddItems.js +42 -0
  305. package/dist/kurot/states/AddItems.js.map +1 -0
  306. package/dist/kurot/states/IOverride.d.ts +12 -0
  307. package/dist/kurot/states/IOverride.d.ts.map +1 -0
  308. package/dist/kurot/states/IOverride.js +2 -0
  309. package/dist/kurot/states/IOverride.js.map +1 -0
  310. package/dist/kurot/states/SetProperty.d.ts +19 -0
  311. package/dist/kurot/states/SetProperty.d.ts.map +1 -0
  312. package/dist/kurot/states/SetProperty.js +50 -0
  313. package/dist/kurot/states/SetProperty.js.map +1 -0
  314. package/dist/kurot/states/SetStateProperty.d.ts +17 -0
  315. package/dist/kurot/states/SetStateProperty.d.ts.map +1 -0
  316. package/dist/kurot/states/SetStateProperty.js +35 -0
  317. package/dist/kurot/states/SetStateProperty.js.map +1 -0
  318. package/dist/kurot/states/State.d.ts +14 -0
  319. package/dist/kurot/states/State.d.ts.map +1 -0
  320. package/dist/kurot/states/State.js +18 -0
  321. package/dist/kurot/states/State.js.map +1 -0
  322. package/dist/kurot/states/index.d.ts +6 -0
  323. package/dist/kurot/states/index.d.ts.map +1 -0
  324. package/dist/kurot/states/index.js +5 -0
  325. package/dist/kurot/states/index.js.map +1 -0
  326. package/package.json +55 -0
@@ -0,0 +1,50 @@
1
+ import { Component } from './Component.js';
2
+ import { PropertyEvent } from '../events/PropertyEvent.js';
3
+ import { Event } from '@kurot/core';
4
+ /**
5
+ * Base class for scroll bars.
6
+ *
7
+ * Connects to an IViewport and positions a `thumb` skin part based on the
8
+ * viewport's scroll position relative to its content size.
9
+ *
10
+ * @skinPart thumb — the draggable thumb indicator.
11
+ */
12
+ export class ScrollBarBase extends Component {
13
+ // ── Instance fields ───────────────────────────────────────────────────
14
+ thumb;
15
+ autoVisibility = true;
16
+ _viewport;
17
+ // ── Getters / Setters ─────────────────────────────────────────────────
18
+ get viewport() {
19
+ return this._viewport;
20
+ }
21
+ set viewport(value) {
22
+ if (value === this._viewport)
23
+ return;
24
+ const vp = this._viewport;
25
+ if (vp) {
26
+ vp.removeEventListener(PropertyEvent.PROPERTY_CHANGE, this._onPropChange);
27
+ vp.removeEventListener(Event.RESIZE, this._onResize);
28
+ }
29
+ this._viewport = value;
30
+ if (value) {
31
+ value.addEventListener(PropertyEvent.PROPERTY_CHANGE, this._onPropChange);
32
+ value.addEventListener(Event.RESIZE, this._onResize);
33
+ }
34
+ this.invalidateDisplayList();
35
+ }
36
+ // ── Protected methods ─────────────────────────────────────────────────
37
+ /**
38
+ * Called when viewport properties (scrollH, scrollV, contentWidth, etc.) change.
39
+ * Override in subclasses to react.
40
+ */
41
+ onPropertyChanged(_event) { }
42
+ // ── Private methods ───────────────────────────────────────────────────
43
+ _onPropChange = (e) => {
44
+ this.onPropertyChanged(e);
45
+ };
46
+ _onResize = (_e) => {
47
+ this.invalidateDisplayList();
48
+ };
49
+ }
50
+ //# sourceMappingURL=ScrollBarBase.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ScrollBarBase.js","sourceRoot":"","sources":["../../../src/kurot/components/ScrollBarBase.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAG3C,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEpC;;;;;;;GAOG;AACH,MAAM,OAAO,aAAc,SAAQ,SAAS;IAC3C,yEAAyE;IAElE,KAAK,CAAgB;IACrB,cAAc,GAAG,IAAI,CAAC;IAErB,SAAS,CAAa;IAE9B,yEAAyE;IAEzE,IAAW,QAAQ;QAClB,OAAO,IAAI,CAAC,SAAS,CAAC;IACvB,CAAC;IAED,IAAW,QAAQ,CAAC,KAA4B;QAC/C,IAAI,KAAK,KAAK,IAAI,CAAC,SAAS;YAAE,OAAO;QACrC,MAAM,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC;QAC1B,IAAI,EAAE,EAAE,CAAC;YACR,EAAE,CAAC,mBAAmB,CAAC,aAAa,CAAC,eAAe,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;YAC1E,EAAE,CAAC,mBAAmB,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QACtD,CAAC;QACD,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;QACvB,IAAI,KAAK,EAAE,CAAC;YACX,KAAK,CAAC,gBAAgB,CAAC,aAAa,CAAC,eAAe,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;YAC1E,KAAK,CAAC,gBAAgB,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QACtD,CAAC;QACD,IAAI,CAAC,qBAAqB,EAAE,CAAC;IAC9B,CAAC;IAED,yEAAyE;IAEzE;;;OAGG;IACO,iBAAiB,CAAC,MAAqB,IAAS,CAAC;IAE3D,yEAAyE;IAEjE,aAAa,GAAG,CAAC,CAAQ,EAAQ,EAAE;QAC1C,IAAI,CAAC,iBAAiB,CAAC,CAAkB,CAAC,CAAC;IAC5C,CAAC,CAAC;IAEM,SAAS,GAAG,CAAC,EAAS,EAAQ,EAAE;QACvC,IAAI,CAAC,qBAAqB,EAAE,CAAC;IAC9B,CAAC,CAAC;CACF"}
@@ -0,0 +1,82 @@
1
+ import { Component } from './Component.js';
2
+ import type { Skin } from './Skin.js';
3
+ import type { IViewport } from '../core/IViewport.js';
4
+ import { HScrollBar } from './HScrollBar.js';
5
+ import { VScrollBar } from './VScrollBar.js';
6
+ /**
7
+ * Scroller wraps an {@link IViewport} (typically a Group) and provides
8
+ * touch-scrolling, scroll bars, and scroll-policy management.
9
+ *
10
+ * @skinPart horizontalScrollBar — the HScrollBar skin part.
11
+ * @skinPart verticalScrollBar — the VScrollBar skin part.
12
+ */
13
+ export declare class Scroller extends Component {
14
+ static readonly DEFAULT_THRESHOLD = 8;
15
+ horizontalScrollBar?: HScrollBar;
16
+ verticalScrollBar?: VScrollBar;
17
+ scrollFactor: number;
18
+ bounces: boolean;
19
+ private _viewport?;
20
+ private _horizontalScrollPolicy;
21
+ private _verticalScrollPolicy;
22
+ private _hScroll;
23
+ private _vScroll;
24
+ private _touchPointID;
25
+ private _touchStage?;
26
+ private _startTouchPointX;
27
+ private _startTouchPointY;
28
+ private _touchMoved;
29
+ private _touchCancelled;
30
+ /**
31
+ * Whether a CHANGE_START event has been dispatched for the current
32
+ * scroll gesture (egret parity). Cleared when CHANGE_END fires.
33
+ */
34
+ private _changeStartDispatched;
35
+ /**
36
+ * Timer ID for the 200 ms auto-hide timeout on the scroll bars.
37
+ * Matches egret's {@code autoHideTimer} (a {@code egret.Timer(200, 1)}).
38
+ */
39
+ private _autoHideTimer;
40
+ constructor();
41
+ get viewport(): IViewport | undefined;
42
+ set viewport(value: IViewport | undefined);
43
+ get horizontalScrollPolicy(): string;
44
+ set horizontalScrollPolicy(value: string);
45
+ get verticalScrollPolicy(): string;
46
+ set verticalScrollPolicy(value: string);
47
+ /**
48
+ * Speed multiplier for scroll throw animation (egret parity).
49
+ * Delegates to the underlying {@link TouchScroll} instances.
50
+ * @default 1.0
51
+ */
52
+ get throwSpeed(): number;
53
+ set throwSpeed(val: number);
54
+ protected partAdded(partName: string, instance: unknown): void;
55
+ protected partRemoved(partName: string, instance: unknown): void;
56
+ updateDisplayList(unscaledWidth: number, unscaledHeight: number): void;
57
+ protected setSkin(skin: Skin | undefined): void;
58
+ $onRemoveFromStage(): void;
59
+ private _updateScrollBarVisibility;
60
+ private _onViewportPropChange;
61
+ private _onTouchBeginCapture;
62
+ private _onTouchEndCapture;
63
+ private _onTouchTapCapture;
64
+ private _canScroll;
65
+ private _onTouchBegin;
66
+ private _removeStageTouchListeners;
67
+ private _onTouchMove;
68
+ private _onTouchEnd;
69
+ private onHScrollUpdate;
70
+ private onVScrollUpdate;
71
+ /**
72
+ * Called when a scroll throw animation ends (egret parity).
73
+ * Dispatches CHANGE_END when both horizontal and vertical animations
74
+ * have stopped, and starts the auto-hide timer for the scroll bars.
75
+ */
76
+ private onHScrollEnd;
77
+ private onVScrollEnd;
78
+ private _onChangeEnd;
79
+ private _scheduleAutoHide;
80
+ private _clearAutoHideTimer;
81
+ }
82
+ //# sourceMappingURL=Scroller.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Scroller.d.ts","sourceRoot":"","sources":["../../../src/kurot/components/Scroller.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAGtD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAgB7C;;;;;;GAMG;AACH,qBAAa,QAAS,SAAQ,SAAS;IAGtC,gBAAuB,iBAAiB,KAAK;IAItC,mBAAmB,CAAC,EAAE,UAAU,CAAC;IACjC,iBAAiB,CAAC,EAAE,UAAU,CAAC;IAC/B,YAAY,SAAO;IACnB,OAAO,UAAQ;IAEtB,OAAO,CAAC,SAAS,CAAC,CAAY;IAC9B,OAAO,CAAC,uBAAuB,CAAqB;IACpD,OAAO,CAAC,qBAAqB,CAAqB;IAClD,OAAO,CAAC,QAAQ,CAAc;IAC9B,OAAO,CAAC,QAAQ,CAAc;IAC9B,OAAO,CAAC,aAAa,CAAM;IAC3B,OAAO,CAAC,WAAW,CAAC,CAAQ;IAC5B,OAAO,CAAC,iBAAiB,CAAK;IAC9B,OAAO,CAAC,iBAAiB,CAAK;IAC9B,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,eAAe,CAAS;IAEhC;;;OAGG;IACH,OAAO,CAAC,sBAAsB,CAAS;IAEvC;;;OAGG;IACH,OAAO,CAAC,cAAc,CAA4C;;IAalE,IAAW,QAAQ,IAAI,SAAS,GAAG,SAAS,CAE3C;IAED,IAAW,QAAQ,CAAC,KAAK,EAAE,SAAS,GAAG,SAAS,EA8B/C;IAED,IAAW,sBAAsB,IAAI,MAAM,CAE1C;IAED,IAAW,sBAAsB,CAAC,KAAK,EAAE,MAAM,EAI9C;IAED,IAAW,oBAAoB,IAAI,MAAM,CAExC;IAED,IAAW,oBAAoB,CAAC,KAAK,EAAE,MAAM,EAI5C;IAED;;;;OAIG;IACH,IAAW,UAAU,IAAI,MAAM,CAE9B;IAED,IAAW,UAAU,CAAC,GAAG,EAAE,MAAM,EAMhC;cAIkB,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,GAAG,IAAI;cAiBpD,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,GAAG,IAAI;IAWzD,iBAAiB,CAAC,aAAa,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,IAAI;cAWnE,OAAO,CAAC,IAAI,EAAE,IAAI,GAAG,SAAS,GAAG,IAAI;IAWxC,kBAAkB,IAAI,IAAI;IAW1C,OAAO,CAAC,0BAA0B;IAsClC,OAAO,CAAC,qBAAqB,CAQ3B;IAEF,OAAO,CAAC,oBAAoB,CAK1B;IAEF,OAAO,CAAC,kBAAkB,CAIxB;IAEF,OAAO,CAAC,kBAAkB,CAIxB;IAEF,OAAO,CAAC,UAAU;IAQlB,OAAO,CAAC,aAAa,CAuBnB;IAEF,OAAO,CAAC,0BAA0B;IAUlC,OAAO,CAAC,YAAY,CAmDlB;IAEF,OAAO,CAAC,WAAW,CAkBjB;IAEF,OAAO,CAAC,eAAe,CAGrB;IAEF,OAAO,CAAC,eAAe,CAGrB;IAEF;;;;OAIG;IACH,OAAO,CAAC,YAAY,CAElB;IAEF,OAAO,CAAC,YAAY,CAElB;IAEF,OAAO,CAAC,YAAY;IAQpB,OAAO,CAAC,iBAAiB;IASzB,OAAO,CAAC,mBAAmB;CAM3B"}
@@ -0,0 +1,416 @@
1
+ import { TouchEvent, Rectangle } from '@kurot/core';
2
+ import { Component } from './Component.js';
3
+ import { ScrollPolicy } from '../core/ScrollPolicy.js';
4
+ import { TouchScroll } from './TouchScroll.js';
5
+ import { HScrollBar } from './HScrollBar.js';
6
+ import { VScrollBar } from './VScrollBar.js';
7
+ import { PropertyEvent } from '../events/PropertyEvent.js';
8
+ import { UIEvent } from '../events/UIEvent.js';
9
+ import { isUIComponent } from '../core/UIComponent.js';
10
+ /**
11
+ * Scratch rectangle for viewport layout-bounds queries.
12
+ *
13
+ * Kept at module scope (rather than as a `static`/instance field on the class)
14
+ * because a `static readonly` *object* field triggers the Rollup class-rename
15
+ * that corrupts `constructor.name` (the HSlider/VSlider bug from 1.0.3), and an
16
+ * instance field with an object initialiser also provokes the rename. The
17
+ * methods that use it are non-reentrant, so sharing one rectangle is safe.
18
+ */
19
+ const vpBounds = new Rectangle();
20
+ /**
21
+ * Scroller wraps an {@link IViewport} (typically a Group) and provides
22
+ * touch-scrolling, scroll bars, and scroll-policy management.
23
+ *
24
+ * @skinPart horizontalScrollBar — the HScrollBar skin part.
25
+ * @skinPart verticalScrollBar — the VScrollBar skin part.
26
+ */
27
+ export class Scroller extends Component {
28
+ // ── Static fields ─────────────────────────────────────────────────────
29
+ static DEFAULT_THRESHOLD = 8;
30
+ // ── Instance fields ───────────────────────────────────────────────────
31
+ horizontalScrollBar;
32
+ verticalScrollBar;
33
+ scrollFactor = 1.0;
34
+ bounces = true;
35
+ _viewport;
36
+ _horizontalScrollPolicy = ScrollPolicy.AUTO;
37
+ _verticalScrollPolicy = ScrollPolicy.AUTO;
38
+ _hScroll;
39
+ _vScroll;
40
+ _touchPointID = -1;
41
+ _touchStage;
42
+ _startTouchPointX = 0;
43
+ _startTouchPointY = 0;
44
+ _touchMoved = false;
45
+ _touchCancelled = false;
46
+ /**
47
+ * Whether a CHANGE_START event has been dispatched for the current
48
+ * scroll gesture (egret parity). Cleared when CHANGE_END fires.
49
+ */
50
+ _changeStartDispatched = false;
51
+ /**
52
+ * Timer ID for the 200 ms auto-hide timeout on the scroll bars.
53
+ * Matches egret's {@code autoHideTimer} (a {@code egret.Timer(200, 1)}).
54
+ */
55
+ _autoHideTimer;
56
+ // ── Constructor ───────────────────────────────────────────────────────
57
+ constructor() {
58
+ super();
59
+ this._hScroll = new TouchScroll(this.onHScrollUpdate, this.onHScrollEnd);
60
+ this._vScroll = new TouchScroll(this.onVScrollUpdate, this.onVScrollEnd);
61
+ this.touchChildren = true;
62
+ }
63
+ // ── Getters / Setters ─────────────────────────────────────────────────
64
+ get viewport() {
65
+ return this._viewport;
66
+ }
67
+ set viewport(value) {
68
+ if (value === this._viewport)
69
+ return;
70
+ const old = this._viewport;
71
+ if (old) {
72
+ this._removeStageTouchListeners();
73
+ this._hScroll.stop();
74
+ this._vScroll.stop();
75
+ this._touchPointID = -1;
76
+ if (this.horizontalScrollBar)
77
+ this.horizontalScrollBar.viewport = undefined;
78
+ if (this.verticalScrollBar)
79
+ this.verticalScrollBar.viewport = undefined;
80
+ old.removeEventListener(PropertyEvent.PROPERTY_CHANGE, this._onViewportPropChange);
81
+ old.removeEventListener(TouchEvent.TOUCH_BEGIN, this._onTouchBeginCapture, true);
82
+ old.removeEventListener(TouchEvent.TOUCH_END, this._onTouchEndCapture, true);
83
+ old.removeEventListener(TouchEvent.TOUCH_TAP, this._onTouchTapCapture, true);
84
+ old.scrollEnabled = false;
85
+ const oldDisplay = old;
86
+ if (oldDisplay.parent === this)
87
+ this.removeChild(oldDisplay);
88
+ }
89
+ this._viewport = value;
90
+ if (value) {
91
+ this.addChildAt(value, 0);
92
+ value.addEventListener(PropertyEvent.PROPERTY_CHANGE, this._onViewportPropChange);
93
+ value.addEventListener(TouchEvent.TOUCH_BEGIN, this._onTouchBeginCapture, true);
94
+ value.addEventListener(TouchEvent.TOUCH_END, this._onTouchEndCapture, true);
95
+ value.addEventListener(TouchEvent.TOUCH_TAP, this._onTouchTapCapture, true);
96
+ value.scrollEnabled = true;
97
+ }
98
+ if (this.horizontalScrollBar)
99
+ this.horizontalScrollBar.viewport = value;
100
+ if (this.verticalScrollBar)
101
+ this.verticalScrollBar.viewport = value;
102
+ this.invalidateDisplayList();
103
+ }
104
+ get horizontalScrollPolicy() {
105
+ return this._horizontalScrollPolicy;
106
+ }
107
+ set horizontalScrollPolicy(value) {
108
+ if (this._horizontalScrollPolicy === value)
109
+ return;
110
+ this._horizontalScrollPolicy = value;
111
+ this.invalidateDisplayList();
112
+ }
113
+ get verticalScrollPolicy() {
114
+ return this._verticalScrollPolicy;
115
+ }
116
+ set verticalScrollPolicy(value) {
117
+ if (this._verticalScrollPolicy === value)
118
+ return;
119
+ this._verticalScrollPolicy = value;
120
+ this.invalidateDisplayList();
121
+ }
122
+ /**
123
+ * Speed multiplier for scroll throw animation (egret parity).
124
+ * Delegates to the underlying {@link TouchScroll} instances.
125
+ * @default 1.0
126
+ */
127
+ get throwSpeed() {
128
+ return this._hScroll.scrollFactor;
129
+ }
130
+ set throwSpeed(val) {
131
+ val = +val;
132
+ if (val < 0)
133
+ val = 0;
134
+ this._hScroll.scrollFactor = val;
135
+ this._vScroll.scrollFactor = val;
136
+ this.scrollFactor = val;
137
+ }
138
+ // ── Override methods ──────────────────────────────────────────────────
139
+ partAdded(partName, instance) {
140
+ super.partAdded(partName, instance);
141
+ if (instance instanceof HScrollBar && partName === 'horizontalScrollBar') {
142
+ this.horizontalScrollBar = instance;
143
+ instance.touchChildren = false;
144
+ instance.touchEnabled = false;
145
+ instance.viewport = this._viewport;
146
+ if (instance.autoVisibility)
147
+ instance.visible = false;
148
+ }
149
+ else if (instance instanceof VScrollBar && partName === 'verticalScrollBar') {
150
+ this.verticalScrollBar = instance;
151
+ instance.touchChildren = false;
152
+ instance.touchEnabled = false;
153
+ instance.viewport = this._viewport;
154
+ if (instance.autoVisibility)
155
+ instance.visible = false;
156
+ }
157
+ }
158
+ partRemoved(partName, instance) {
159
+ super.partRemoved(partName, instance);
160
+ if (partName === 'horizontalScrollBar') {
161
+ if (instance instanceof HScrollBar)
162
+ instance.viewport = undefined;
163
+ this.horizontalScrollBar = undefined;
164
+ }
165
+ else if (partName === 'verticalScrollBar') {
166
+ if (instance instanceof VScrollBar)
167
+ instance.viewport = undefined;
168
+ this.verticalScrollBar = undefined;
169
+ }
170
+ }
171
+ updateDisplayList(unscaledWidth, unscaledHeight) {
172
+ super.updateDisplayList(unscaledWidth, unscaledHeight);
173
+ const vp = this._viewport;
174
+ if (vp && isUIComponent(vp)) {
175
+ // Match egret: size the viewport to fill the Scroller and anchor it at (0,0).
176
+ vp.setLayoutBoundsSize(unscaledWidth, unscaledHeight);
177
+ vp.setLayoutBoundsPosition(0, 0);
178
+ }
179
+ this._updateScrollBarVisibility();
180
+ }
181
+ setSkin(skin) {
182
+ super.setSkin(skin);
183
+ // Match egret: after the skin (scroll bars) is applied, re-add the viewport
184
+ // at index 0 so it sits beneath the scroll bars and is never orphaned by
185
+ // the skin application.
186
+ const vp = this._viewport;
187
+ if (vp) {
188
+ this.addChildAt(vp, 0);
189
+ }
190
+ }
191
+ $onRemoveFromStage() {
192
+ this._removeStageTouchListeners();
193
+ this._hScroll.stop();
194
+ this._vScroll.stop();
195
+ this._touchPointID = -1;
196
+ this._clearAutoHideTimer();
197
+ super.$onRemoveFromStage();
198
+ }
199
+ // ── Private methods ───────────────────────────────────────────────────
200
+ _updateScrollBarVisibility() {
201
+ const vp = this._viewport;
202
+ if (!vp)
203
+ return;
204
+ const b = vpBounds;
205
+ vp.getLayoutBounds(b);
206
+ const vpWidth = b.width;
207
+ const vpHeight = b.height;
208
+ const hsb = this.horizontalScrollBar;
209
+ if (hsb) {
210
+ const maxScrollH = Math.max(0, vp.contentWidth - vpWidth);
211
+ const canScrollH = maxScrollH > 0;
212
+ const policy = this._horizontalScrollPolicy;
213
+ if (policy === ScrollPolicy.ON) {
214
+ hsb.visible = true;
215
+ }
216
+ else if (policy === ScrollPolicy.OFF) {
217
+ hsb.visible = false;
218
+ }
219
+ else {
220
+ hsb.visible = canScrollH;
221
+ }
222
+ }
223
+ const vsb = this.verticalScrollBar;
224
+ if (vsb) {
225
+ const maxScrollV = Math.max(0, vp.contentHeight - vpHeight);
226
+ const canScrollV = maxScrollV > 0;
227
+ const policy = this._verticalScrollPolicy;
228
+ if (policy === ScrollPolicy.ON) {
229
+ vsb.visible = true;
230
+ }
231
+ else if (policy === ScrollPolicy.OFF) {
232
+ vsb.visible = false;
233
+ }
234
+ else {
235
+ vsb.visible = canScrollV;
236
+ }
237
+ }
238
+ }
239
+ _onViewportPropChange = (e) => {
240
+ const pe = e;
241
+ switch (pe.property) {
242
+ case 'contentWidth':
243
+ case 'contentHeight':
244
+ this._updateScrollBarVisibility();
245
+ break;
246
+ }
247
+ };
248
+ _onTouchBeginCapture = (e) => {
249
+ if (!this._canScroll())
250
+ return;
251
+ this._touchCancelled = false;
252
+ this._touchMoved = false;
253
+ this._onTouchBegin(e);
254
+ };
255
+ _onTouchEndCapture = (e) => {
256
+ if (this._touchCancelled) {
257
+ e.stopPropagation();
258
+ }
259
+ };
260
+ _onTouchTapCapture = (e) => {
261
+ if (this._touchCancelled) {
262
+ e.stopPropagation();
263
+ }
264
+ };
265
+ _canScroll() {
266
+ const vp = this._viewport;
267
+ if (!vp)
268
+ return false;
269
+ const b = vpBounds;
270
+ vp.getLayoutBounds(b);
271
+ return vp.contentWidth > b.width || vp.contentHeight > b.height;
272
+ }
273
+ _onTouchBegin = (e) => {
274
+ const te = e;
275
+ if (this._touchPointID !== -1)
276
+ return;
277
+ const vp = this._viewport;
278
+ if (!vp)
279
+ return;
280
+ this._touchPointID = te.touchPointID;
281
+ this._startTouchPointX = te.stageX;
282
+ this._startTouchPointY = te.stageY;
283
+ this._hScroll.stop();
284
+ this._vScroll.stop();
285
+ this._clearAutoHideTimer();
286
+ this._updateScrollBarVisibility();
287
+ const stage = this.stage;
288
+ if (stage) {
289
+ this._touchStage = stage;
290
+ stage.addEventListener(TouchEvent.TOUCH_MOVE, this._onTouchMove);
291
+ stage.addEventListener(TouchEvent.TOUCH_END, this._onTouchEnd);
292
+ stage.addEventListener(TouchEvent.TOUCH_CANCEL, this._onTouchEnd);
293
+ }
294
+ };
295
+ _removeStageTouchListeners() {
296
+ const stage = this._touchStage;
297
+ if (stage) {
298
+ stage.removeEventListener(TouchEvent.TOUCH_MOVE, this._onTouchMove);
299
+ stage.removeEventListener(TouchEvent.TOUCH_END, this._onTouchEnd);
300
+ stage.removeEventListener(TouchEvent.TOUCH_CANCEL, this._onTouchEnd);
301
+ }
302
+ this._touchStage = undefined;
303
+ }
304
+ _onTouchMove = (e) => {
305
+ if (e.touchPointID !== this._touchPointID)
306
+ return;
307
+ const vp = this._viewport;
308
+ if (!vp)
309
+ return;
310
+ const moveX = this._startTouchPointX - e.stageX;
311
+ const moveY = this._startTouchPointY - e.stageY;
312
+ if (!this._hScroll.isStarted() && !this._vScroll.isStarted()) {
313
+ if (Math.abs(moveX) < Scroller.DEFAULT_THRESHOLD && Math.abs(moveY) < Scroller.DEFAULT_THRESHOLD) {
314
+ return;
315
+ }
316
+ // Scroll gesture confirmed — swallow the upcoming tap so child
317
+ // components (e.g. List items) don't receive a false "click".
318
+ this._touchCancelled = true;
319
+ this._touchMoved = true;
320
+ // Dispatch CHANGE_START once per gesture (egret parity).
321
+ if (!this._changeStartDispatched) {
322
+ this._changeStartDispatched = true;
323
+ UIEvent.dispatchUIEvent(this, UIEvent.CHANGE_START);
324
+ }
325
+ const tb = vpBounds;
326
+ vp.getLayoutBounds(tb);
327
+ const maxH = Math.max(0, vp.contentWidth - tb.width);
328
+ const maxV = Math.max(0, vp.contentHeight - tb.height);
329
+ if (maxH > 0 && Math.abs(moveX) >= Math.abs(moveY)) {
330
+ this._hScroll.scrollFactor = this.scrollFactor;
331
+ this._hScroll.bounces = this.bounces;
332
+ this._hScroll.start(e.stageX);
333
+ }
334
+ if (maxV > 0 && Math.abs(moveY) >= Math.abs(moveX)) {
335
+ this._vScroll.scrollFactor = this.scrollFactor;
336
+ this._vScroll.bounces = this.bounces;
337
+ this._vScroll.start(e.stageY);
338
+ }
339
+ }
340
+ if (this._hScroll.isStarted()) {
341
+ const b = vpBounds;
342
+ vp.getLayoutBounds(b);
343
+ this._hScroll.update(e.stageX, Math.max(0, vp.contentWidth - b.width), vp.scrollH);
344
+ }
345
+ if (this._vScroll.isStarted()) {
346
+ const b = vpBounds;
347
+ vp.getLayoutBounds(b);
348
+ this._vScroll.update(e.stageY, Math.max(0, vp.contentHeight - b.height), vp.scrollV);
349
+ }
350
+ };
351
+ _onTouchEnd = (e) => {
352
+ if (e.touchPointID !== this._touchPointID)
353
+ return;
354
+ this._touchPointID = -1;
355
+ this._removeStageTouchListeners();
356
+ const vp = this._viewport;
357
+ if (!vp)
358
+ return;
359
+ if (this._hScroll.isStarted()) {
360
+ const b = vpBounds;
361
+ vp.getLayoutBounds(b);
362
+ this._hScroll.finish(vp.scrollH, Math.max(0, vp.contentWidth - b.width));
363
+ }
364
+ if (this._vScroll.isStarted()) {
365
+ const b = vpBounds;
366
+ vp.getLayoutBounds(b);
367
+ this._vScroll.finish(vp.scrollV, Math.max(0, vp.contentHeight - b.height));
368
+ }
369
+ };
370
+ onHScrollUpdate = (scrollPos) => {
371
+ const vp = this._viewport;
372
+ if (vp)
373
+ vp.scrollH = scrollPos;
374
+ };
375
+ onVScrollUpdate = (scrollPos) => {
376
+ const vp = this._viewport;
377
+ if (vp)
378
+ vp.scrollV = scrollPos;
379
+ };
380
+ /**
381
+ * Called when a scroll throw animation ends (egret parity).
382
+ * Dispatches CHANGE_END when both horizontal and vertical animations
383
+ * have stopped, and starts the auto-hide timer for the scroll bars.
384
+ */
385
+ onHScrollEnd = () => {
386
+ if (!this._vScroll.isStarted())
387
+ this._onChangeEnd();
388
+ };
389
+ onVScrollEnd = () => {
390
+ if (!this._hScroll.isStarted())
391
+ this._onChangeEnd();
392
+ };
393
+ _onChangeEnd() {
394
+ this._changeStartDispatched = false;
395
+ this._scheduleAutoHide();
396
+ UIEvent.dispatchUIEvent(this, UIEvent.CHANGE_END);
397
+ }
398
+ // ── Auto-hide scroll bars (egret parity) ─────────────────────────
399
+ _scheduleAutoHide() {
400
+ this._clearAutoHideTimer();
401
+ this._autoHideTimer = setTimeout(() => {
402
+ this._autoHideTimer = undefined;
403
+ if (this.horizontalScrollBar?.autoVisibility)
404
+ this.horizontalScrollBar.visible = false;
405
+ if (this.verticalScrollBar?.autoVisibility)
406
+ this.verticalScrollBar.visible = false;
407
+ }, 200);
408
+ }
409
+ _clearAutoHideTimer() {
410
+ if (this._autoHideTimer !== undefined) {
411
+ clearTimeout(this._autoHideTimer);
412
+ this._autoHideTimer = undefined;
413
+ }
414
+ }
415
+ }
416
+ //# sourceMappingURL=Scroller.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Scroller.js","sourceRoot":"","sources":["../../../src/kurot/components/Scroller.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,64 @@
1
+ import { EventDispatcher, DisplayObject, type EventMap } from '@kurot/core';
2
+ import { PropertyEvent } from '../events/PropertyEvent.js';
3
+ import type { State } from '../states/State.js';
4
+ import type { Component } from './Component.js';
5
+ import type { Watcher } from '../binding/Watcher.js';
6
+ /**
7
+ * EventMap for Skin. Skins dispatch PropertyEvent when hostComponent changes.
8
+ */
9
+ export interface SkinEvents extends EventMap {
10
+ [PropertyEvent.PROPERTY_CHANGE]: PropertyEvent;
11
+ }
12
+ /**
13
+ * Base class for all UI skins.
14
+ *
15
+ * Skins are typically generated by the EXML compiler (`@kurot/cli`).
16
+ * A skin holds the visual $children of a Component and exposes named
17
+ * "skin parts" (e.g. `labelDisplay`, `iconDisplay`) that the host
18
+ * component binds to via `partAdded()` / `partRemoved()`.
19
+ *
20
+ * The skin also owns the view-state list (`states`) and applies state
21
+ * changes to its $children when `currentState` changes.
22
+ */
23
+ export declare class Skin extends EventDispatcher<SkinEvents> {
24
+ skinParts: string[];
25
+ width: number;
26
+ height: number;
27
+ minWidth: number;
28
+ maxWidth: number;
29
+ minHeight: number;
30
+ maxHeight: number;
31
+ states: State[];
32
+ /**
33
+ * Watchers created by EXML bindings (e.g. `{data}`). The runtime appends
34
+ * every {@link Watcher} instance created by the skin factory so they can
35
+ * be unwound together via {@link unwatchAll} when the skin is replaced.
36
+ */
37
+ $watchers: Watcher[];
38
+ private _elementsContent;
39
+ private _hostComponent?;
40
+ private _currentState;
41
+ private _stateInitialized;
42
+ get elementsContent(): DisplayObject[];
43
+ set elementsContent(value: DisplayObject[]);
44
+ get hostComponent(): Component | undefined;
45
+ set hostComponent(value: Component | undefined);
46
+ get currentState(): string;
47
+ set currentState(value: string);
48
+ /**
49
+ * Get a skin part by name. Used by Component to bind parts.
50
+ */
51
+ getPart(name: string): unknown;
52
+ /**
53
+ * Unwatch every binding created from this skin.
54
+ * Called by the host component when the skin is detached or replaced
55
+ * so stale watchers don't leak or fire on the wrong host.
56
+ */
57
+ unwatchAll(): void;
58
+ hasState(stateName: string): boolean;
59
+ private _onHostAddedToStage;
60
+ private _initializeStates;
61
+ private _applyState;
62
+ private _removeState;
63
+ }
64
+ //# sourceMappingURL=Skin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Skin.d.ts","sourceRoot":"","sources":["../../../src/kurot/components/Skin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,aAAa,EAAS,KAAK,QAAQ,EAAE,MAAM,aAAa,CAAC;AACnF,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAErD;;GAEG;AACH,MAAM,WAAW,UAAW,SAAQ,QAAQ;IAC3C,CAAC,aAAa,CAAC,eAAe,CAAC,EAAE,aAAa,CAAC;CAC/C;AAED;;;;;;;;;;GAUG;AACH,qBAAa,IAAK,SAAQ,eAAe,CAAC,UAAU,CAAC;IAG7C,SAAS,EAAE,MAAM,EAAE,CAAM;IACzB,KAAK,EAAE,MAAM,CAAO;IACpB,MAAM,EAAE,MAAM,CAAO;IACrB,QAAQ,EAAE,MAAM,CAAK;IACrB,QAAQ,EAAE,MAAM,CAAU;IAC1B,SAAS,EAAE,MAAM,CAAK;IACtB,SAAS,EAAE,MAAM,CAAU;IAC3B,MAAM,EAAE,KAAK,EAAE,CAAM;IAE5B;;;;OAIG;IACI,SAAS,EAAE,OAAO,EAAE,CAAM;IAEjC,OAAO,CAAC,gBAAgB,CAAuB;IAC/C,OAAO,CAAC,cAAc,CAAC,CAAY;IACnC,OAAO,CAAC,aAAa,CAAM;IAC3B,OAAO,CAAC,iBAAiB,CAAS;IAIlC,IAAW,eAAe,IAAI,aAAa,EAAE,CAE5C;IAED,IAAW,eAAe,CAAC,KAAK,EAAE,aAAa,EAAE,EAEhD;IAED,IAAW,aAAa,IAAI,SAAS,GAAG,SAAS,CAEhD;IAED,IAAW,aAAa,CAAC,KAAK,EAAE,SAAS,GAAG,SAAS,EAuBpD;IAED,IAAW,YAAY,IAAI,MAAM,CAEhC;IAED,IAAW,YAAY,CAAC,KAAK,EAAE,MAAM,EAOpC;IAID;;OAEG;IACI,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAIrC;;;;OAIG;IACI,UAAU,IAAI,IAAI;IASlB,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAM3C,OAAO,CAAC,mBAAmB,CAEzB;IAEF,OAAO,CAAC,iBAAiB;IAMzB,OAAO,CAAC,WAAW;IAkBnB,OAAO,CAAC,YAAY;CAOpB"}