@ticatec/uniface-element 5.0.4 → 5.1.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 (411) hide show
  1. package/README.md +14 -13
  2. package/README_CN.md +17 -15
  3. package/dist/app_layout/ColumnsLayout.svelte +14 -10
  4. package/dist/app_layout/ColumnsLayout.svelte.d.ts +8 -4
  5. package/dist/app_layout/README.md +14 -12
  6. package/dist/app_layout/README_CN.md +14 -12
  7. package/dist/app_layout/RowsLayout.svelte +14 -10
  8. package/dist/app_layout/RowsLayout.svelte.d.ts +8 -4
  9. package/dist/base-calendar/CalendarBase.svelte +4 -10
  10. package/dist/base-calendar/CalendarBase.svelte.d.ts +0 -4
  11. package/dist/base-calendar/DateContext.d.ts +1 -0
  12. package/dist/base-calendar/DateContext.js +5 -8
  13. package/dist/base-calendar/MonthlyCalendar.svelte +11 -3
  14. package/dist/base-calendar/MonthlyCalendar.svelte.d.ts +1 -2
  15. package/dist/base-calendar/YearPickupPanel.svelte +5 -5
  16. package/dist/base-calendar/YearPickupPanel.svelte.d.ts +2 -2
  17. package/dist/base-calendar/dateUtils.js +9 -5
  18. package/dist/composite/pagination_panel/PaginationPanel.svelte +19 -13
  19. package/dist/composite/pagination_panel/PaginationPanel.svelte.d.ts +8 -5
  20. package/dist/composite/pagination_panel/README.md +3 -1
  21. package/dist/composite/pagination_panel/README_CN.md +3 -1
  22. package/dist/composite/transfer/Transfer.svelte +30 -16
  23. package/dist/composite/transfer/Transfer.svelte.d.ts +11 -4
  24. package/dist/composite/transfer/index.d.ts +2 -2
  25. package/dist/data_display/accordion/Accordion.svelte +10 -9
  26. package/dist/data_display/accordion/Accordion.svelte.d.ts +2 -1
  27. package/dist/data_display/accordion/AccordionItemView.svelte +6 -6
  28. package/dist/data_display/accordion/AccordionItemView.svelte.d.ts +1 -1
  29. package/dist/data_display/accordion/README.md +6 -4
  30. package/dist/data_display/accordion/README_CN.md +6 -4
  31. package/dist/data_display/card/Card.svelte +13 -11
  32. package/dist/data_display/card/Card.svelte.d.ts +5 -3
  33. package/dist/data_display/card/CardAction.d.ts +7 -2
  34. package/dist/data_display/card/CommonCardActionBar.svelte +2 -2
  35. package/dist/data_display/card/README.md +11 -9
  36. package/dist/data_display/card/README_CN.md +11 -9
  37. package/dist/data_display/card/index.d.ts +2 -1
  38. package/dist/data_display/concise_data_table/Column.d.ts +0 -6
  39. package/dist/data_display/concise_data_table/ConciseListTable.svelte +6 -5
  40. package/dist/data_display/concise_data_table/ConciseListTable.svelte.d.ts +4 -3
  41. package/dist/data_display/concise_data_table/DataCell.svelte +1 -1
  42. package/dist/data_display/concise_data_table/README.md +7 -5
  43. package/dist/data_display/concise_data_table/README_CN.md +7 -5
  44. package/dist/data_display/concise_data_table/TableOptions.d.ts +1 -1
  45. package/dist/data_display/list_box/ListBox.svelte +11 -15
  46. package/dist/data_display/list_box/ListBox.svelte.d.ts +6 -9
  47. package/dist/data_display/list_box/README.md +10 -8
  48. package/dist/data_display/list_box/README_CN.md +10 -8
  49. package/dist/data_display/list_box/index.d.ts +2 -3
  50. package/dist/data_display/tree_view/README.md +4 -2
  51. package/dist/data_display/tree_view/README_CN.md +4 -2
  52. package/dist/data_display/tree_view/TreeNodeView.svelte +15 -16
  53. package/dist/data_display/tree_view/TreeNodeView.svelte.d.ts +4 -5
  54. package/dist/data_display/tree_view/TreeView.svelte +27 -19
  55. package/dist/data_display/tree_view/TreeView.svelte.d.ts +12 -4
  56. package/dist/data_display/tree_view/index.d.ts +2 -3
  57. package/dist/data_table/DataTable.svelte +46 -15
  58. package/dist/data_table/DataTable.svelte.d.ts +9 -1
  59. package/dist/data_table/README.md +10 -8
  60. package/dist/data_table/README_CN.md +10 -8
  61. package/dist/data_table/UniDataTable.d.ts +4 -4
  62. package/dist/data_table/UniDataTable.js +2 -2
  63. package/dist/data_table/index.d.ts +5 -5
  64. package/dist/data_table/lib/CellAction.d.ts +9 -0
  65. package/dist/data_table/lib/CommonHeaderCell.d.ts +2 -2
  66. package/dist/data_table/lib/CompareFn.d.ts +3 -0
  67. package/dist/data_table/lib/DataColumn.d.ts +7 -12
  68. package/dist/data_table/lib/FormatCellFn.d.ts +2 -0
  69. package/dist/data_table/lib/HrefLink.d.ts +3 -3
  70. package/dist/data_table/lib/IndicatorColumn.d.ts +2 -1
  71. package/dist/data_table/lib/RowAction.d.ts +14 -20
  72. package/dist/data_table/lib/virtualWindow.d.ts +37 -0
  73. package/dist/data_table/lib/virtualWindow.js +41 -0
  74. package/dist/data_table/parts/ActionCell.svelte +3 -3
  75. package/dist/data_table/parts/ActionCell.svelte.d.ts +1 -1
  76. package/dist/data_table/parts/ActionsPanel.svelte +17 -2
  77. package/dist/data_table/parts/ActionsPanel.svelte.d.ts +3 -0
  78. package/dist/data_table/parts/ActionsRow.svelte +7 -5
  79. package/dist/data_table/parts/ContentPanel.svelte +40 -15
  80. package/dist/data_table/parts/ContentPanel.svelte.d.ts +11 -6
  81. package/dist/data_table/parts/FixedColumnsPanel.svelte +32 -16
  82. package/dist/data_table/parts/FixedColumnsPanel.svelte.d.ts +8 -5
  83. package/dist/data_table/parts/FixedHeaderPanel.svelte +14 -15
  84. package/dist/data_table/parts/FixedHeaderPanel.svelte.d.ts +4 -4
  85. package/dist/data_table/parts/FixedRow.svelte +9 -9
  86. package/dist/data_table/parts/FixedRow.svelte.d.ts +3 -3
  87. package/dist/data_table/parts/HrefCell.svelte +1 -1
  88. package/dist/data_table/parts/PopupMenu.svelte +3 -3
  89. package/dist/data_table/parts/PopupMenu.svelte.d.ts +1 -1
  90. package/dist/data_table/parts/TableHeaderPanel.svelte +14 -14
  91. package/dist/data_table/parts/TableHeaderPanel.svelte.d.ts +4 -4
  92. package/dist/data_table/parts/TextCell.svelte +1 -1
  93. package/dist/feedback/progress-bar/ProgressBar.svelte +13 -10
  94. package/dist/feedback/progress-bar/ProgressBar.svelte.d.ts +6 -3
  95. package/dist/form/FormEditor.svelte +2 -2
  96. package/dist/form/FormEditor.svelte.d.ts +1 -1
  97. package/dist/form/attachment_files/AttachmentEditor.svelte +407 -92
  98. package/dist/form/attachment_files/AttachmentEditor.svelte.d.ts +71 -15
  99. package/dist/form/attachment_files/AttachmentFile.d.ts +35 -8
  100. package/dist/form/attachment_files/AttachmentFile.js +54 -29
  101. package/dist/form/attachment_files/AttachmentListItem.svelte +208 -0
  102. package/dist/form/attachment_files/AttachmentListItem.svelte.d.ts +25 -0
  103. package/dist/form/attachment_files/AttachmentTile.svelte +296 -0
  104. package/dist/form/attachment_files/AttachmentTile.svelte.d.ts +25 -0
  105. package/dist/form/attachment_files/FileUpload.d.ts +2 -2
  106. package/dist/form/attachment_files/README.md +71 -452
  107. package/dist/form/attachment_files/README_CN.md +68 -449
  108. package/dist/form/attachment_files/UploadTask.d.ts +27 -0
  109. package/dist/form/attachment_files/index.d.ts +8 -5
  110. package/dist/form/attachment_files/index.js +4 -2
  111. package/dist/form/cascade_options_select/CascadeOptionSelect.svelte +16 -15
  112. package/dist/form/cascade_options_select/CascadeOptionSelect.svelte.d.ts +6 -5
  113. package/dist/form/cascade_options_select/IsLeaf.d.ts +4 -0
  114. package/dist/form/cascade_options_select/IsLeaf.js +1 -0
  115. package/dist/form/cascade_options_select/OptionsBox.svelte +4 -4
  116. package/dist/form/cascade_options_select/OptionsBox.svelte.d.ts +2 -2
  117. package/dist/form/color_picker/ColorPicker.svelte +3 -3
  118. package/dist/form/color_picker/ColorPickerPanel.svelte +1 -1
  119. package/dist/form/common_editor/BasePicker.svelte +7 -7
  120. package/dist/form/common_editor/BasePicker.svelte.d.ts +3 -3
  121. package/dist/form/common_editor/CommonEditor.svelte +8 -8
  122. package/dist/form/common_editor/CommonEditor.svelte.d.ts +2 -2
  123. package/dist/form/common_editor/CommonPicker.svelte +43 -31
  124. package/dist/form/common_editor/CommonPicker.svelte.d.ts +6 -6
  125. package/dist/form/common_editor/CommonPickerProps.d.ts +2 -2
  126. package/dist/form/common_editor/CommonPopupEditor.svelte +13 -13
  127. package/dist/form/common_editor/CommonPopupEditor.svelte.d.ts +3 -4
  128. package/dist/form/common_editor/NumberInput.svelte +10 -2
  129. package/dist/form/common_editor/NumberInput.svelte.d.ts +1 -1
  130. package/dist/form/common_range_editor/CommonRangeEditor.svelte +17 -17
  131. package/dist/form/common_range_editor/CommonRangeEditor.svelte.d.ts +5 -5
  132. package/dist/form/date_picker/DatePicker.svelte +5 -5
  133. package/dist/form/date_picker/DatePicker.svelte.d.ts +1 -1
  134. package/dist/form/date_picker/DateTimePicker.svelte +16 -6
  135. package/dist/form/date_picker/README.md +7 -5
  136. package/dist/form/date_picker/README_CN.md +7 -5
  137. package/dist/form/date_picker/ScrollBar.svelte +21 -20
  138. package/dist/form/date_picker/ScrollBar.svelte.d.ts +3 -3
  139. package/dist/form/date_range/DateRangeEditor.svelte +6 -6
  140. package/dist/form/events.d.ts +70 -0
  141. package/dist/form/events.js +6 -0
  142. package/dist/form/group_box/group-check-box/GroupCheckBox.svelte +9 -7
  143. package/dist/form/group_box/group-check-box/GroupCheckBox.svelte.d.ts +4 -3
  144. package/dist/form/group_box/group-check-box/README.md +5 -3
  145. package/dist/form/group_box/group-check-box/README_CN.md +5 -3
  146. package/dist/form/group_box/group-radio-box/GroupRadioBox.svelte +9 -7
  147. package/dist/form/group_box/group-radio-box/GroupRadioBox.svelte.d.ts +4 -3
  148. package/dist/form/group_box/group-radio-box/README.md +3 -1
  149. package/dist/form/group_box/group-radio-box/README_CN.md +3 -1
  150. package/dist/form/image_editor/ImageEditor.svelte +118 -0
  151. package/dist/form/image_editor/ImageEditor.svelte.d.ts +52 -0
  152. package/dist/form/image_editor/ImageFile.d.ts +11 -0
  153. package/dist/form/image_editor/ImageFile.js +1 -0
  154. package/dist/form/{image-files → image_editor}/ImagePreview.svelte +10 -2
  155. package/dist/form/image_editor/README.md +89 -0
  156. package/dist/form/image_editor/README_CN.md +89 -0
  157. package/dist/form/image_editor/index.d.ts +11 -0
  158. package/dist/form/image_editor/index.js +4 -0
  159. package/dist/form/input_options_select/InputOptionsSelect.svelte +11 -8
  160. package/dist/form/input_options_select/InputOptionsSelect.svelte.d.ts +2 -1
  161. package/dist/form/input_options_select/README.md +44 -218
  162. package/dist/form/input_options_select/README_CN.md +38 -211
  163. package/dist/form/lookup_editor/LookupEditor.svelte +7 -10
  164. package/dist/form/lookup_editor/LookupEditor.svelte.d.ts +2 -1
  165. package/dist/form/memo_editor/MemoEditor.svelte +2 -2
  166. package/dist/form/memo_editor/MemoEditor.svelte.d.ts +1 -1
  167. package/dist/form/number_editor/NumberEditor.svelte +13 -1
  168. package/dist/form/number_editor/NumberEditor.svelte.d.ts +1 -1
  169. package/dist/form/number_range/NumberRange.svelte +5 -5
  170. package/dist/form/options_multi_select/OptionsMultiSelect.svelte +13 -13
  171. package/dist/form/options_multi_select/OptionsMultiSelect.svelte.d.ts +3 -2
  172. package/dist/form/options_multi_select/README.md +5 -3
  173. package/dist/form/options_multi_select/README_CN.md +5 -3
  174. package/dist/form/options_select/OptionsSelect.svelte +19 -15
  175. package/dist/form/options_select/OptionsSelect.svelte.d.ts +2 -1
  176. package/dist/form/options_select/README.md +9 -7
  177. package/dist/form/options_select/README_CN.md +8 -6
  178. package/dist/form/prompts_text_editor/PromptsTextEditor.svelte +6 -5
  179. package/dist/form/prompts_text_editor/PromptsTextEditor.svelte.d.ts +2 -1
  180. package/dist/form/prompts_text_editor/README.md +16 -14
  181. package/dist/form/prompts_text_editor/README_CN.md +16 -14
  182. package/dist/form/search_box/SearchBox.svelte +3 -2
  183. package/dist/form/search_box/SearchBox.svelte.d.ts +1 -1
  184. package/dist/form/switch/README.md +7 -5
  185. package/dist/form/switch/README_CN.md +7 -5
  186. package/dist/form/switch/Switch.svelte +7 -5
  187. package/dist/form/switch/Switch.svelte.d.ts +4 -2
  188. package/dist/form/text_editor/PasswordEditor.svelte +2 -2
  189. package/dist/form/text_editor/PasswordEditor.svelte.d.ts +1 -1
  190. package/dist/form/text_editor/TextEditor.svelte +6 -4
  191. package/dist/form/text_editor/TextEditor.svelte.d.ts +1 -1
  192. package/dist/form/time_editor/README.md +4 -2
  193. package/dist/form/time_editor/README_CN.md +4 -2
  194. package/dist/form/time_editor/TimeEditor.svelte +10 -7
  195. package/dist/form/time_editor/TimeEditor.svelte.d.ts +2 -1
  196. package/dist/form/types.d.ts +5 -42
  197. package/dist/form/unit-number-editor/README.md +21 -19
  198. package/dist/form/unit-number-editor/README_CN.md +21 -19
  199. package/dist/form/unit-number-editor/UnitNumberEditor.svelte +12 -11
  200. package/dist/form/unit-number-editor/UnitNumberEditor.svelte.d.ts +4 -3
  201. package/dist/general/button/Button.svelte +4 -1
  202. package/dist/general/button/Button.svelte.d.ts +3 -1
  203. package/dist/general/button/IconButton.svelte +11 -5
  204. package/dist/general/button/IconButton.svelte.d.ts +5 -2
  205. package/dist/general/button/IconButton_README.md +9 -6
  206. package/dist/general/button/IconButton_README_CN.md +9 -6
  207. package/dist/general/button/TextButton.svelte +15 -5
  208. package/dist/general/button/TextButton.svelte.d.ts +6 -2
  209. package/dist/general/button/TextButton_README.md +10 -6
  210. package/dist/general/button/TextButton_README_CN.md +10 -6
  211. package/dist/general/icon/Icon.svelte +6 -4
  212. package/dist/general/icon/Icon.svelte.d.ts +3 -2
  213. package/dist/general/tag/Tag.svelte +8 -4
  214. package/dist/general/tag/Tag.svelte.d.ts +3 -1
  215. package/dist/i18nRes/i18nRes.d.ts +45 -2
  216. package/dist/i18nRes/i18nRes.js +7 -2
  217. package/dist/layouts/action_bar/ActionBar.svelte +5 -4
  218. package/dist/layouts/action_bar/ActionBar.svelte.d.ts +2 -1
  219. package/dist/layouts/action_bar/ButtonAction.d.ts +1 -23
  220. package/dist/layouts/action_bar/README.md +20 -18
  221. package/dist/layouts/action_bar/README_CN.md +19 -17
  222. package/dist/layouts/box/Box.svelte +4 -3
  223. package/dist/layouts/box/Box.svelte.d.ts +2 -1
  224. package/dist/layouts/box/README.md +13 -11
  225. package/dist/layouts/box/README_CN.md +13 -11
  226. package/dist/layouts/form_field/FormField.svelte +5 -4
  227. package/dist/layouts/form_field/FormField.svelte.d.ts +3 -2
  228. package/dist/layouts/form_field/README.md +11 -9
  229. package/dist/layouts/form_field/README_CN.md +9 -7
  230. package/dist/layouts/form_panel/flex_row_form/Cell.svelte +3 -1
  231. package/dist/layouts/form_panel/flex_row_form/Cell.svelte.d.ts +3 -1
  232. package/dist/layouts/form_panel/flex_row_form/Row.svelte +3 -1
  233. package/dist/layouts/form_panel/flex_row_form/Row.svelte.d.ts +3 -1
  234. package/dist/layouts/form_panel/grid_form/GridField.svelte +8 -4
  235. package/dist/layouts/form_panel/grid_form/GridField.svelte.d.ts +6 -2
  236. package/dist/layouts/form_panel/grid_form/GridForm.svelte +3 -1
  237. package/dist/layouts/form_panel/grid_form/GridForm.svelte.d.ts +3 -1
  238. package/dist/layouts/form_panel/grid_form/README.md +6 -4
  239. package/dist/layouts/form_panel/grid_form/README_CN.md +6 -4
  240. package/dist/layouts/page/Page.svelte +7 -7
  241. package/dist/layouts/page/Page.svelte.d.ts +2 -2
  242. package/dist/layouts/page/PageHeader.svelte +4 -4
  243. package/dist/layouts/page/PageHeader.svelte.d.ts +1 -1
  244. package/dist/layouts/page/README.md +18 -18
  245. package/dist/layouts/page/README_CN.md +18 -18
  246. package/dist/navigation/nav_menu/MenuItem.d.ts +1 -1
  247. package/dist/navigation/nav_menu/NavigatorMenu.svelte +16 -14
  248. package/dist/navigation/nav_menu/NavigatorMenu.svelte.d.ts +7 -5
  249. package/dist/navigation/nav_menu/NavigatorMenuItem.svelte +2 -2
  250. package/dist/navigation/nav_menu/NavigatorMenuItem.svelte.d.ts +2 -2
  251. package/dist/navigation/nav_menu/README.md +8 -6
  252. package/dist/navigation/nav_menu/README_CN.md +8 -6
  253. package/dist/navigation/nav_menu/index.d.ts +2 -2
  254. package/dist/navigation/navigator/Navigator.svelte +5 -4
  255. package/dist/navigation/navigator/Navigator.svelte.d.ts +3 -2
  256. package/dist/navigation/navigator/README.md +12 -10
  257. package/dist/navigation/navigator/README_CN.md +12 -10
  258. package/dist/navigation/pagination/Pagination.svelte +23 -15
  259. package/dist/navigation/pagination/Pagination.svelte.d.ts +6 -4
  260. package/dist/navigation/progress_step_bar/ProgressStep.d.ts +2 -1
  261. package/dist/navigation/progress_step_bar/ProgressStepBar.svelte +5 -4
  262. package/dist/navigation/progress_step_bar/ProgressStepBar.svelte.d.ts +2 -1
  263. package/dist/navigation/progress_step_bar/ProgressStepBlock.svelte +3 -3
  264. package/dist/navigation/progress_step_bar/ProgressStepBlock.svelte.d.ts +1 -1
  265. package/dist/navigation/progress_step_bar/README.md +37 -35
  266. package/dist/navigation/progress_step_bar/README_CN.md +36 -34
  267. package/dist/navigation/tabs/Tabs.svelte +14 -5
  268. package/dist/navigation/tabs/Tabs.svelte.d.ts +11 -4
  269. package/dist/navigation/tabs/index.d.ts +2 -2
  270. package/dist/overlay/common/ModalPopover.svelte +5 -4
  271. package/dist/overlay/common/ModalPopover.svelte.d.ts +2 -1
  272. package/dist/overlay/common/Popover.svelte +4 -3
  273. package/dist/overlay/common/Popover.svelte.d.ts +2 -1
  274. package/dist/overlay/context-menu/ContextMenuItem.d.ts +3 -3
  275. package/dist/overlay/context-menu/ContextMenuPanel.svelte +4 -4
  276. package/dist/overlay/context-menu/index.d.ts +2 -2
  277. package/dist/overlay/dialog/CommonDialog.svelte +17 -13
  278. package/dist/overlay/dialog/CommonDialog.svelte.d.ts +9 -5
  279. package/dist/overlay/dialog/Dialog.svelte +25 -19
  280. package/dist/overlay/dialog/Dialog.svelte.d.ts +11 -5
  281. package/dist/overlay/dialog/DialogActions.d.ts +1 -1
  282. package/dist/overlay/dialog/DialogCloseConfirm.d.ts +4 -1
  283. package/dist/overlay/dialog/DialogCloseConfirm.js +1 -1
  284. package/dist/overlay/dialog/DialogManager.svelte.js +2 -1
  285. package/dist/overlay/dialog/README.md +19 -17
  286. package/dist/overlay/dialog/README_CN.md +19 -17
  287. package/dist/overlay/dialog/index.d.ts +2 -2
  288. package/dist/overlay/message-box/IMessageBox.d.ts +4 -4
  289. package/dist/overlay/message-box/MessageBox.svelte.js +3 -3
  290. package/dist/ticatec-uniface-web.css +38 -12
  291. package/dist/types.d.ts +38 -46
  292. package/dist/unifaceContext.d.ts +2 -2
  293. package/dist/utils/prefixFilter.js +0 -1
  294. package/docs/NAMING.md +362 -0
  295. package/docs/NAMING_CN.md +362 -0
  296. package/docs/components/README.md +16 -14
  297. package/docs/components/accordion/README.md +13 -2
  298. package/docs/components/accordion/example.svelte +1 -0
  299. package/docs/components/action-bar/README.md +4 -4
  300. package/docs/components/attachment-editor/README.md +224 -0
  301. package/docs/components/attachment-editor/example.svelte +22 -0
  302. package/docs/components/box/README.md +1 -1
  303. package/docs/components/button/README.md +8 -1
  304. package/docs/components/button/example.svelte +1 -0
  305. package/docs/components/card/README.md +19 -5
  306. package/docs/components/cascade-options-select/README.md +11 -5
  307. package/docs/components/columns-layout/README.md +8 -4
  308. package/docs/components/columns-layout/example.svelte +4 -0
  309. package/docs/components/common-dialog/README.md +19 -10
  310. package/docs/components/common-dialog/example.svelte +2 -1
  311. package/docs/components/concise-data-table/README.md +18 -29
  312. package/docs/components/concise-data-table/example.svelte +1 -1
  313. package/docs/components/context-menu/README.md +5 -5
  314. package/docs/components/context-menu/example.svelte +1 -1
  315. package/docs/components/criteria-field/README.md +1 -0
  316. package/docs/components/criteria-field/example.svelte +1 -0
  317. package/docs/components/data-table/README.md +63 -40
  318. package/docs/components/data-table/example.svelte +2 -2
  319. package/docs/components/date-picker/README.md +1 -1
  320. package/docs/components/date-time-picker/README.md +1 -1
  321. package/docs/components/dialog/README.md +21 -14
  322. package/docs/components/dialog/example.svelte +1 -1
  323. package/docs/components/form-field/README.md +3 -3
  324. package/docs/components/grid-form/README.md +15 -5
  325. package/docs/components/grid-form/example.svelte +1 -1
  326. package/docs/components/group-check-box/README.md +3 -3
  327. package/docs/components/group-radio-box/README.md +3 -3
  328. package/docs/components/icon/README.md +6 -5
  329. package/docs/components/icon-button/README.md +10 -1
  330. package/docs/components/icon-button/example.svelte +1 -0
  331. package/docs/components/image-editor/README.md +262 -0
  332. package/docs/components/{image-files → image-editor}/example.svelte +5 -3
  333. package/docs/components/input-options-select/README.md +2 -2
  334. package/docs/components/list-box/README.md +12 -13
  335. package/docs/components/list-box/example.svelte +3 -3
  336. package/docs/components/lookup-editor/README.md +1 -1
  337. package/docs/components/navigator/README.md +2 -1
  338. package/docs/components/navigator/example.svelte +1 -0
  339. package/docs/components/navigator-menu/README.md +24 -21
  340. package/docs/components/navigator-menu/example.svelte +4 -2
  341. package/docs/components/options-multi-select/README.md +2 -2
  342. package/docs/components/options-select/README.md +4 -4
  343. package/docs/components/page/README.md +2 -2
  344. package/docs/components/page-stack/README.md +67 -0
  345. package/docs/components/page-stack/example.svelte +7 -0
  346. package/docs/components/pagination/README.md +24 -7
  347. package/docs/components/pagination/example.svelte +5 -2
  348. package/docs/components/pagination-panel/README.md +25 -10
  349. package/docs/components/pagination-panel/example.svelte +5 -4
  350. package/docs/components/password-editor/README.md +128 -0
  351. package/docs/components/{attachment-files → password-editor}/example.svelte +5 -5
  352. package/docs/components/progress-bar/README.md +14 -4
  353. package/docs/components/progress-bar/example.svelte +1 -1
  354. package/docs/components/progress-step-bar/README.md +16 -7
  355. package/docs/components/progress-step-bar/example.svelte +5 -1
  356. package/docs/components/prompts-text-editor/README.md +8 -6
  357. package/docs/components/prompts-text-editor/example.svelte +0 -1
  358. package/docs/components/rows-layout/README.md +8 -4
  359. package/docs/components/rows-layout/example.svelte +4 -0
  360. package/docs/components/switch/README.md +2 -2
  361. package/docs/components/tabs/README.md +24 -9
  362. package/docs/components/tag/README.md +13 -2
  363. package/docs/components/tag/example.svelte +1 -0
  364. package/docs/components/text-button/README.md +20 -1
  365. package/docs/components/text-button/example.svelte +2 -0
  366. package/docs/components/time-editor/README.md +1 -1
  367. package/docs/components/transfer/README.md +16 -9
  368. package/docs/components/tree-view/README.md +29 -13
  369. package/docs/components/tree-view/example.svelte +2 -1
  370. package/docs/components/unit-number-editor/README.md +11 -8
  371. package/docs/components/unit-number-editor/example.svelte +0 -1
  372. package/package.json +13 -7
  373. package/dist/data_table/lib/CompareFunction.d.ts +0 -3
  374. package/dist/data_table/lib/FormatCell.d.ts +0 -2
  375. package/dist/form/attachment_files/FileRender.svelte +0 -125
  376. package/dist/form/attachment_files/FileRender.svelte.d.ts +0 -9
  377. package/dist/form/attachment_files/FileUploadBar.svelte +0 -66
  378. package/dist/form/attachment_files/FileUploadBar.svelte.d.ts +0 -8
  379. package/dist/form/attachment_files/FileUploadPanel.svelte +0 -161
  380. package/dist/form/attachment_files/FileUploadPanel.svelte.d.ts +0 -14
  381. package/dist/form/attachment_files/UploadFile.d.ts +0 -43
  382. package/dist/form/attachment_files/UploadFile.js +0 -80
  383. package/dist/form/cascade_options_select/CascadePanel.svelte +0 -52
  384. package/dist/form/cascade_options_select/CascadePanel.svelte.d.ts +0 -26
  385. package/dist/form/cascade_options_select/isLeafDetermine.d.ts +0 -4
  386. package/dist/form/common_editor/EditorEvents.d.ts +0 -14
  387. package/dist/form/common_editor/EditorEvents.js +0 -2
  388. package/dist/form/image-files/ImageFile.d.ts +0 -12
  389. package/dist/form/image-files/ImageFilesField.svelte +0 -128
  390. package/dist/form/image-files/ImageFilesField.svelte.d.ts +0 -18
  391. package/dist/form/image-files/ImageRender.svelte +0 -95
  392. package/dist/form/image-files/ImageRender.svelte.d.ts +0 -10
  393. package/dist/form/image-files/README.md +0 -468
  394. package/dist/form/image-files/README_CN.md +0 -468
  395. package/dist/form/image-files/index.d.ts +0 -10
  396. package/dist/form/image-files/index.js +0 -2
  397. package/dist/layout/flex/FlexBlock.svelte +0 -17
  398. package/dist/layout/flex/FlexBlock.svelte.d.ts +0 -38
  399. package/dist/layout/flex/README.md +0 -148
  400. package/dist/layout/flex/README_CN.md +0 -148
  401. package/dist/layout/flex/index.d.ts +0 -2
  402. package/dist/layout/flex/index.js +0 -2
  403. package/dist/layout/index.d.ts +0 -0
  404. package/dist/layout/index.js +0 -1
  405. package/docs/components/attachment-files/README.md +0 -332
  406. package/docs/components/image-files/README.md +0 -174
  407. /package/dist/data_table/lib/{FormatCell.js → CellAction.js} +0 -0
  408. /package/dist/data_table/lib/{CompareFunction.js → CompareFn.js} +0 -0
  409. /package/dist/{form/cascade_options_select/isLeafDetermine.js → data_table/lib/FormatCellFn.js} +0 -0
  410. /package/dist/form/{image-files/ImageFile.js → attachment_files/UploadTask.js} +0 -0
  411. /package/dist/form/{image-files → image_editor}/ImagePreview.svelte.d.ts +0 -0
@@ -1,95 +0,0 @@
1
- <script lang="ts">
2
- import type ImageFile from "./ImageFile";
3
-
4
- let {
5
- file,
6
- readonly = false,
7
- onRemove,
8
- onPreview
9
- }: {
10
- file: ImageFile;
11
- readonly?: boolean;
12
- onRemove?: (file: ImageFile) => Promise<void>;
13
- onPreview?: (file: ImageFile) => void;
14
- } = $props();
15
-
16
- const removeFile = () => {
17
- onRemove?.(file);
18
- }
19
-
20
- const handleActionKeyDown = (handler: () => void) => (e: KeyboardEvent) => {
21
- if (e.key === 'Enter' || e.key === ' ') {
22
- e.preventDefault();
23
- handler();
24
- }
25
- };
26
- </script>
27
-
28
- <div class="uniface-image-render">
29
- <div class="file-icon">
30
- <img src={file.thumbnail ?? file.uri} alt="" width="40px" height="40px"/>
31
- <div class="img-overlay">
32
- <div class="action-icon">
33
- <i class="icon_google_remove_red_eye" role="button" tabindex="0" aria-label="Preview image"
34
- onclick={() => onPreview?.(file)} onkeydown={handleActionKeyDown(() => onPreview?.(file))}></i>
35
- </div>
36
- {#if !readonly}
37
- <div class="action-icon">
38
- <i class="icon_google_delete" role="button" tabindex="0" aria-label="Remove image"
39
- onclick={removeFile} onkeydown={handleActionKeyDown(removeFile)}></i>
40
- </div>
41
- {/if}
42
- </div>
43
- </div>
44
- </div>
45
-
46
- <style>
47
- .uniface-image-render {
48
- width: 80px;
49
- box-sizing: border-box;
50
- padding: 6px 8px;
51
- }
52
-
53
- .file-icon {
54
- position: relative;
55
- width: 40px;
56
- height: 40px;
57
- border-radius: 4px;
58
- overflow: hidden;
59
- background-color: rgba(0, 0, 0, 0.04);
60
- }
61
-
62
- .file-icon img {
63
- display: block;
64
- width: 100%;
65
- height: 100%;
66
- object-fit: cover;
67
- }
68
-
69
- .img-overlay {
70
- position: absolute;
71
- inset: 0;
72
- display: flex;
73
- align-items: center;
74
- justify-content: center;
75
- gap: 6px;
76
- background-color: rgba(0, 0, 0, 0.45);
77
- opacity: 0;
78
- transition: opacity 0.15s ease;
79
- }
80
-
81
- .file-icon:hover .img-overlay,
82
- .file-icon:focus-within .img-overlay {
83
- opacity: 1;
84
- }
85
-
86
- .action-icon {
87
- display: flex;
88
- cursor: pointer;
89
- color: #fff;
90
- }
91
-
92
- .action-icon i {
93
- font-size: 16px;
94
- }
95
- </style>
@@ -1,10 +0,0 @@
1
- import type ImageFile from "./ImageFile";
2
- type $$ComponentProps = {
3
- file: ImageFile;
4
- readonly?: boolean;
5
- onRemove?: (file: ImageFile) => Promise<void>;
6
- onPreview?: (file: ImageFile) => void;
7
- };
8
- declare const ImageRender: import("svelte").Component<$$ComponentProps, {}, "">;
9
- type ImageRender = ReturnType<typeof ImageRender>;
10
- export default ImageRender;
@@ -1,468 +0,0 @@
1
- # ImageFilesField
2
-
3
- An image upload and management component. Users can drag-and-drop or click to browse for images. Uploaded images are displayed in a grid with thumbnails, full-size previews, and action buttons (delete, preview). Supports multiple images, aspect ratio preservation, and optional confirmation before deletion.
4
-
5
- > Think of it as a photo gallery manager for your form. Upload, preview, and manage images with a consistent UI.
6
-
7
- ## Features
8
-
9
- - **Image upload** — supports drag-and-drop and click-to-browse.
10
- - **Image preview** — click an image to view it in full size.
11
- - **Thumbnail generation** — automatically generates thumbnails for uploaded images.
12
- - **Image grid display** — shows uploaded images in a responsive grid.
13
- - **Delete with confirmation** — optional `removeFileConfirm` callback for deletion confirmation.
14
- - **Multiple images** — supports uploading multiple images at once.
15
- - **Aspect ratio preservation** — images maintain their original aspect ratio.
16
- - **Disabled / readonly** modes.
17
- - **Compact mode** for dense UIs.
18
-
19
- ## Installation
20
-
21
- ```bash
22
- npm install @ticatec/uniface-element
23
- ```
24
-
25
- ## Import
26
-
27
- ```typescript
28
- import ImageFilesField from "@ticatec/uniface-element/ImageFilesField";
29
- import type { ImageFile, RemoveConfirm, FileUpload } from "@ticatec/uniface-element/ImageFilesField";
30
- ```
31
-
32
- ## Basic Usage
33
-
34
- ```svelte
35
- <script lang="ts">
36
- import ImageFilesField from "@ticatec/uniface-element/ImageFilesField";
37
- import type { ImageFile, FileUpload } from "@ticatec/uniface-element/ImageFilesField";
38
-
39
- let images = $state<ImageFile[]>([]);
40
-
41
- // Simulated upload function
42
- const uploadImage: FileUpload = (file, progressUpdate, onUploaded, errorHandler) => {
43
- // Simulate upload progress
44
- let progress = 0;
45
- const interval = setInterval(() => {
46
- progress += 10;
47
- progressUpdate(Math.floor(file.size * (progress / 100)));
48
-
49
- if (progress >= 100) {
50
- clearInterval(interval);
51
- // Simulate successful upload
52
- const fakeUrl = `/uploads/${file.name}`;
53
- const fakeThumbnail = `/thumbnails/${file.name}`;
54
- onUploaded(fakeUrl, fakeThumbnail);
55
- }
56
- }, 100);
57
-
58
- return {
59
- cancel: async () => {
60
- clearInterval(interval);
61
- return true;
62
- }
63
- };
64
- };
65
- </script>
66
-
67
- <ImageFilesField
68
- bind:images={images}
69
- uploadFile={uploadImage}
70
- maxImages={5}
71
- />
72
- ```
73
-
74
- ## Props
75
-
76
- `ImageFilesField` extends `CommonFieldProps`, so it inherits `variant`, `compact`, `disabled`, `readonly`, `style`, `error`, `tooltip`, `theme`, `placeholder`.
77
-
78
- | Prop | Type | Default | Description |
79
- |------|------|---------|-------------|
80
- | `images` | `Array<ImageFile>` (bindable) | `[]` | Array of uploaded images. Each image has `name`, `uri`, and `thumbnail` properties. |
81
- | `uploadFile` | `FileUpload` | — | **Required.** Function that handles image upload. Receives `(file, progressUpdate, onUploaded, errorHandler)` and returns an `UploadProgress` object with a `cancel()` method. |
82
- | `maxImages` | `number` | `10` | Maximum number of images allowed. |
83
- | `removeFileConfirm` | `RemoveConfirm` | — | Optional callback for deletion confirmation. Receives the image to be deleted and returns a Promise<boolean>. |
84
- | `variant` | `'' \| 'plain' \| 'outlined' \| 'filled'` | `''` | Visual style variant. |
85
- | `compact` | `boolean` | `false` | Dense layout for table cells and inline forms. |
86
- | `disabled` | `boolean` | `false` | Fully disabled — no upload or delete actions. |
87
- | `readonly` | `boolean` | `false` | Read-only — no upload or delete actions, but images are visible. |
88
- | `style` | `string` | — | Inline CSS on the editor root. |
89
- | `error` | `string` | — | Validation error text — triggers the editor's error state. |
90
- | `tooltip` | `string` | — | Hover tooltip on the editor. |
91
- | `theme` | `string` | — | Rendered as `data-theme` on the editor for scoped styling. |
92
- | `onchange` | `(images: Array<ImageFile>) => void` | — | Fires when the images array changes (upload or delete). Receives the updated images array. |
93
- | `onfocus` | `(event: FocusEvent) => void` | — | Editor focus. |
94
- | `onblur` | `(event: FocusEvent) => void` | — | Editor blur. |
95
-
96
- ## Events
97
-
98
- | Event | Signature | Description |
99
- |-------|-----------|-------------|
100
- | `onchange` | `(images: Array<ImageFile>) => void` | Fires when the images array changes (upload or delete). Receives the updated images array. |
101
- | `onfocus` | `(event: FocusEvent) => void` | Editor focus. |
102
- | `onblur` | `(event: FocusEvent) => void` | Editor blur. |
103
-
104
- ## Methods
105
-
106
- | Method | Signature | Description |
107
- |--------|-----------|-------------|
108
- | `focus()` | `() => void` | Moves focus to the editor. |
109
-
110
- ```svelte
111
- <script lang="ts">
112
- import ImageFilesField from "@ticatec/uniface-element/ImageFilesField";
113
-
114
- let editorRef;
115
-
116
- function focusEditor() {
117
- editorRef.focus();
118
- }
119
- </script>
120
-
121
- <ImageFilesField bind:this={editorRef} bind:images={images} uploadFile={uploadImage} />
122
- <button onclick={focusEditor}>Focus</button>
123
- ```
124
-
125
- ## `FileUpload` — upload function
126
-
127
- The `uploadFile` callback is required. It receives:
128
-
129
- | Parameter | Type | Description |
130
- |-----------|------|-------------|
131
- | `file` | `File` | The file to upload. |
132
- | `progressUpdate` | `(bytesUploaded: number) => void` | Call this to report upload progress. |
133
- | `onUploaded` | `(url: string, thumbnail: string) => void` | Call this when upload is complete. Pass the full-size URL and thumbnail URL. |
134
- | `errorHandler` | `(error: Error) => void` | Call this if upload fails. Pass an Error object. |
135
-
136
- It must return an `UploadProgress` object:
137
-
138
- ```typescript
139
- interface UploadProgress {
140
- cancel: () => Promise<boolean>;
141
- }
142
- ```
143
-
144
- The `cancel()` method allows the user to cancel an in-progress upload.
145
-
146
- ```svelte
147
- <script lang="ts">
148
- import ImageFilesField from "@ticatec/uniface-element/ImageFilesField";
149
- import type { FileUpload } from "@ticatec/uniface-element/ImageFilesField";
150
-
151
- let images = $state([]);
152
-
153
- const uploadImage: FileUpload = (file, progressUpdate, onUploaded, errorHandler) => {
154
- // Simulate upload with progress
155
- let bytesUploaded = 0;
156
- const totalBytes = file.size;
157
- const interval = setInterval(() => {
158
- bytesUploaded += 1024; // 1KB per tick
159
- if (bytesUploaded >= totalBytes) {
160
- clearInterval(interval);
161
- onUploaded(`/uploads/${file.name}`, `/thumbnails/${file.name}`);
162
- } else {
163
- progressUpdate(bytesUploaded);
164
- }
165
- }, 100);
166
-
167
- return {
168
- cancel: async () => {
169
- clearInterval(interval);
170
- return true; // upload was cancelled
171
- }
172
- };
173
- };
174
- </script>
175
-
176
- <ImageFilesField bind:images={images} uploadFile={uploadImage} />
177
- ```
178
-
179
- ## `ImageFile` — image object
180
-
181
- Each image in the `images` array is an `ImageFile` object:
182
-
183
- ```typescript
184
- interface ImageFile {
185
- name: string; // Image name
186
- uri: string; // Full-size image URL (after upload)
187
- thumbnail: string; // Thumbnail URL (after upload)
188
- }
189
- ```
190
-
191
- ## Examples
192
-
193
- ### Image upload with confirmation
194
-
195
- ```svelte
196
- <script lang="ts">
197
- import ImageFilesField from "@ticatec/uniface-element/ImageFilesField";
198
- import type { ImageFile, FileUpload, RemoveConfirm } from "@ticatec/uniface-element/ImageFilesField";
199
-
200
- let images = $state<ImageFile[]>([]);
201
-
202
- const uploadImage: FileUpload = (file, progressUpdate, onUploaded, errorHandler) => {
203
- let bytesUploaded = 0;
204
- const totalBytes = file.size;
205
- const interval = setInterval(() => {
206
- bytesUploaded += 1024;
207
- if (bytesUploaded >= totalBytes) {
208
- clearInterval(interval);
209
- onUploaded(`/uploads/${file.name}`, `/thumbnails/${file.name}`);
210
- } else {
211
- progressUpdate(bytesUploaded);
212
- }
213
- }, 100);
214
-
215
- return {
216
- cancel: async () => {
217
- clearInterval(interval);
218
- return true;
219
- }
220
- };
221
- };
222
-
223
- const removeImageConfirm: RemoveConfirm = async (image) => {
224
- return confirm(`Are you sure you want to delete ${image.name}?`);
225
- };
226
- </script>
227
-
228
- <ImageFilesField
229
- bind:images={images}
230
- uploadFile={uploadImage}
231
- removeFileConfirm={removeImageConfirm}
232
- maxImages={5}
233
- />
234
- ```
235
-
236
- ### Multiple images gallery
237
-
238
- ```svelte
239
- <script lang="ts">
240
- import ImageFilesField from "@ticatec/uniface-element/ImageFilesField";
241
- import type { ImageFile, FileUpload } from "@ticatec/uniface-element/ImageFilesField";
242
-
243
- let images = $state<ImageFile[]>([]);
244
-
245
- const uploadImage: FileUpload = (file, progressUpdate, onUploaded, errorHandler) => {
246
- let progress = 0;
247
- const interval = setInterval(() => {
248
- progress += 10;
249
- progressUpdate(Math.floor(file.size * (progress / 100)));
250
-
251
- if (progress >= 100) {
252
- clearInterval(interval);
253
- onUploaded(`/uploads/${file.name}`, `/thumbnails/${file.name}`);
254
- }
255
- }, 100);
256
-
257
- return {
258
- cancel: async () => {
259
- clearInterval(interval);
260
- return true;
261
- }
262
- };
263
- };
264
- </script>
265
-
266
- <div class="image-gallery">
267
- <h3>Upload Images</h3>
268
- <ImageFilesField
269
- bind:images={images}
270
- uploadFile={uploadImage}
271
- maxImages={10}
272
- />
273
- <div class="image-grid">
274
- {#each images as image}
275
- <div class="image-item">
276
- <img src={image.thumbnail} alt={image.name} />
277
- <div class="image-info">
278
- <p>{image.name}</p>
279
- <a href={image.uri} download>Download</a>
280
- </div>
281
- </div>
282
- {/each}
283
- </div>
284
- </div>
285
-
286
- <style>
287
- .image-gallery {
288
- max-width: 800px;
289
- margin: 20px;
290
- }
291
- .image-grid {
292
- display: grid;
293
- grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
294
- gap: 16px;
295
- margin-top: 16px;
296
- }
297
- .image-item {
298
- border: 1px solid #e5e7eb;
299
- border-radius: 8px;
300
- overflow: hidden;
301
- }
302
- .image-item img {
303
- width: 100%;
304
- height: 200px;
305
- object-fit: cover;
306
- }
307
- .image-info {
308
- padding: 12px;
309
- }
310
- .image-info p {
311
- margin: 0 0 8px 0;
312
- font-size: 14px;
313
- }
314
- .image-info a {
315
- color: #3b82f6;
316
- text-decoration: none;
317
- }
318
- .image-info a:hover {
319
- text-decoration: underline;
320
- }
321
- </style>
322
- ```
323
-
324
- ### Disabled and readonly modes
325
-
326
- ```svelte
327
- <script lang="ts">
328
- import ImageFilesField from "@ticatec/uniface-element/ImageFilesField";
329
- import type { ImageFile, FileUpload } from "@ticatec/uniface-element/ImageFilesField";
330
-
331
- let disabledImages: ImageFile[] = [
332
- { name: "disabled-image.jpg", uri: "/uploads/disabled-image.jpg", thumbnail: "/thumbnails/disabled-image.jpg" }
333
- ];
334
- let readonlyImages: ImageFile[] = [
335
- { name: "readonly-image.png", uri: "/uploads/readonly-image.png", thumbnail: "/thumbnails/readonly-image.png" }
336
- ];
337
- let normalImages: ImageFile[] = [];
338
-
339
- const uploadImage: FileUpload = (file, progressUpdate, onUploaded, errorHandler) => {
340
- let progress = 0;
341
- const interval = setInterval(() => {
342
- progress += 10;
343
- progressUpdate(Math.floor(file.size * (progress / 100)));
344
-
345
- if (progress >= 100) {
346
- clearInterval(interval);
347
- onUploaded(`/uploads/${file.name}`, `/thumbnails/${file.name}`);
348
- }
349
- }, 100);
350
-
351
- return {
352
- cancel: async () => {
353
- clearInterval(interval);
354
- return true;
355
- }
356
- };
357
- };
358
- </script>
359
-
360
- <div style="display: flex; flex-direction: column; gap: 16px;">
361
- <ImageFilesField
362
- bind:images={disabledImages}
363
- uploadFile={uploadImage}
364
- disabled
365
- />
366
- <ImageFilesField
367
- bind:images={readonlyImages}
368
- uploadFile={uploadImage}
369
- readonly
370
- />
371
- <ImageFilesField
372
- bind:images={normalImages}
373
- uploadFile={uploadImage}
374
- />
375
- </div>
376
- ```
377
-
378
- ### Compact mode
379
-
380
- ```svelte
381
- <script lang="ts">
382
- import ImageFilesField from "@ticatec/uniface-element/ImageFilesField";
383
- import type { ImageFile, FileUpload } from "@ticatec/uniface-element/ImageFilesField";
384
-
385
- let images = $state<ImageFile[]>([]);
386
-
387
- const uploadImage: FileUpload = (file, progressUpdate, onUploaded, errorHandler) => {
388
- let progress = 0;
389
- const interval = setInterval(() => {
390
- progress += 10;
391
- progressUpdate(Math.floor(file.size * (progress / 100)));
392
-
393
- if (progress >= 100) {
394
- clearInterval(interval);
395
- onUploaded(`/uploads/${file.name}`, `/thumbnails/${file.name}`);
396
- }
397
- }, 100);
398
-
399
- return {
400
- cancel: async () => {
401
- clearInterval(interval);
402
- return true;
403
- }
404
- };
405
- };
406
- </script>
407
-
408
- <table>
409
- <thead>
410
- <tr>
411
- <th>Name</th>
412
- <th>Images</th>
413
- </tr>
414
- </thead>
415
- <tbody>
416
- <tr>
417
- <td>Row 1</td>
418
- <td>
419
- <ImageFilesField
420
- bind:images={images}
421
- uploadFile={uploadImage}
422
- compact
423
- />
424
- </td>
425
- </tr>
426
- </tbody>
427
- </table>
428
- ```
429
-
430
- ## Behavior Notes
431
-
432
- ### Upload flow
433
-
434
- 1. User clicks the upload icon or drags and drops images.
435
- 2. The `FileUploadPanel` opens, showing a file picker.
436
- 3. When an image is selected, `uploadFile` is called with the file and progress callbacks.
437
- 4. `uploadFile` calls `progressUpdate(bytesUploaded)` to report progress.
438
- 5. When upload is complete, `uploadFile` calls `onUploaded(url, thumbnail)` with the full-size URL and thumbnail URL.
439
- 6. The image is added to the `images` array and displayed in the grid.
440
-
441
- ### Delete flow
442
-
443
- 1. User clicks the delete icon on an image.
444
- 2. If `removeFileConfirm` is provided, the callback is called with the image.
445
- 3. If the callback returns `true`, the image is removed from the `images` array.
446
- 4. The `onchange` event fires with the updated images array.
447
-
448
- ### Preview flow
449
-
450
- 1. User clicks on an image in the grid.
451
- 2. The `ImagePreview` component opens, showing the full-size image.
452
- 3. User can close the preview by clicking the close button or clicking outside.
453
-
454
- ### Read-only / disabled rendering
455
-
456
- Both modes hide the upload icon and delete icons. Images are displayed but cannot be modified.
457
-
458
- ## Accessibility
459
-
460
- - The upload icon has `aria-hidden="true"` (decorative).
461
- - Image names are displayed as alt text.
462
- - For full ARIA, wrap with `<label>` or use `aria-label`.
463
-
464
- ## Related Components
465
-
466
- - [AttachmentFilesField](../attachment-files/README.md) — general file upload component.
467
- - [TextEditor](../text_editor/README.md) — multi-line text area.
468
- - [NumberEditor](../number_editor/README.md) — numeric input.