@ticatec/uniface-element 0.2.0 → 0.2.2

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 (209) hide show
  1. package/README.md +320 -1
  2. package/README_CN.md +392 -0
  3. package/dist/accordion/Accordion.svelte +1 -1
  4. package/dist/action-bar/ActionBar.svelte +7 -1
  5. package/dist/attachment-files/FileRender.svelte +1 -1
  6. package/dist/attachment-files/FileUploadBar.svelte +7 -6
  7. package/dist/attachment-files/FileUploadPanel.svelte +2 -2
  8. package/dist/base-calendar/DateContext.js +5 -4
  9. package/dist/base-calendar/YearPickupPanel.svelte +4 -4
  10. package/dist/card/Card.svelte +1 -1
  11. package/dist/card/Card.svelte.d.ts +1 -1
  12. package/dist/cascade-options-select/CascadeOptionSelect.svelte +2 -3
  13. package/dist/cascade-options-select/CascadeOptionSelect.svelte.d.ts +46 -1
  14. package/dist/cascade-options-select/CascadePanel.svelte +1 -1
  15. package/dist/checkbox/CheckBox.svelte +1 -1
  16. package/dist/color-picker/ColorPicker.svelte +9 -9
  17. package/dist/color-picker/ColorPicker.svelte.d.ts +0 -2
  18. package/dist/color-picker/ColorPickerPanel.svelte +11 -15
  19. package/dist/color-picker/ColorPickerPanel.svelte.d.ts +1 -1
  20. package/dist/common/CommonPicker.svelte +2 -2
  21. package/dist/common/CommonPicker.svelte.d.ts +1 -1
  22. package/dist/common/MouseClickHandler.d.ts +1 -1
  23. package/dist/common/Popover.svelte +28 -6
  24. package/dist/common/Popover.svelte.d.ts +9 -3
  25. package/dist/common/uniface-utils.js +6 -4
  26. package/dist/common-editor/CommonEditor.svelte +1 -1
  27. package/dist/common-editor/CommonEditor.svelte.d.ts +1 -1
  28. package/dist/common-editor/NumberInput.svelte +1 -1
  29. package/dist/common-editor/NumberInput.svelte.d.ts +1 -1
  30. package/dist/concise-data-table/ConciseListTable.svelte +7 -2
  31. package/dist/concise-data-table/ConciseListTable.svelte.d.ts +1 -0
  32. package/dist/concise-data-table/DataRow.svelte +1 -1
  33. package/dist/concise-data-table/TableOptions.d.ts +1 -1
  34. package/dist/data-table/DataTable.svelte +1 -1
  35. package/dist/data-table/parts/ActionsPanel.svelte +4 -3
  36. package/dist/data-table/parts/ActionsRow.svelte +3 -3
  37. package/dist/data-table/parts/ContentPanel.svelte +3 -2
  38. package/dist/data-table/parts/FixedColumnsPanel.svelte +0 -1
  39. package/dist/data-table/parts/FixedColumnsPanel.svelte.d.ts +1 -2
  40. package/dist/data-table/parts/FixedHeaderPanel.svelte +2 -2
  41. package/dist/data-table/parts/FixedRow.svelte +2 -1
  42. package/dist/data-table/parts/FixedRow.svelte.d.ts +1 -1
  43. package/dist/data-table/parts/HrefCell.svelte +23 -2
  44. package/dist/data-table/parts/PopupMenu.svelte +25 -2
  45. package/dist/data-table/parts/PopupMenu.svelte.d.ts +8 -1
  46. package/dist/date-picker/DatePicker.svelte +0 -1
  47. package/dist/date-picker/DateTimePicker.svelte +3 -3
  48. package/dist/date-picker/ScrollBar.svelte +4 -7
  49. package/dist/date-range/DateRangeEditor.svelte +1 -1
  50. package/dist/dialog/CommonDialog.svelte +8 -5
  51. package/dist/dialog/CommonDialog.svelte.d.ts +2 -1
  52. package/dist/dialog/Dialog.svelte +37 -12
  53. package/dist/dialog/Dialog.svelte.d.ts +4 -3
  54. package/dist/dialog/DialogBoard.svelte +11 -8
  55. package/dist/dialog/DialogWrapper.svelte +10 -0
  56. package/dist/{common-editor/DateInput.svelte.d.ts → dialog/DialogWrapper.svelte.d.ts} +6 -13
  57. package/dist/dialog/Dialogs.js +1 -1
  58. package/dist/dialog/ModalResult.d.ts +5 -0
  59. package/dist/dialog/ModalResult.js +5 -0
  60. package/dist/drawer/Drawer.svelte +1 -1
  61. package/dist/form-field/FormField.svelte +2 -1
  62. package/dist/form-field/FormField.svelte.d.ts +1 -0
  63. package/dist/form-panel/flex-row-form/FormContainer.svelte +1 -1
  64. package/dist/form-panel/grid-form/EmptyCell.svelte +8 -7
  65. package/dist/form-panel/grid-form/EmptyCell.svelte.d.ts +2 -2
  66. package/dist/form-panel/grid-form/GridField.svelte +1 -1
  67. package/dist/i18nRes/i18nRes.d.ts +2 -0
  68. package/dist/i18nRes/i18nRes.js +44 -0
  69. package/dist/i18nRes/index.d.ts +2 -0
  70. package/dist/i18nRes/index.js +2 -0
  71. package/dist/image-files/ImageFilesField.svelte +1 -1
  72. package/dist/indicator/IndicatorBoard.svelte +1 -1
  73. package/dist/inline-cell-editor/InvalidEditor.svelte +1 -0
  74. package/dist/input-options-select/InputOptionsSelect.svelte +6 -6
  75. package/dist/input-options-select/InputOptionsSelect.svelte.d.ts +1 -1
  76. package/dist/layout/flex/FlexBlock.svelte +1 -1
  77. package/dist/lookup-editor/LookupEditor.svelte +1 -1
  78. package/dist/memo-editor/MemoEditor.svelte +2 -2
  79. package/dist/message-box/IMessageBox.d.ts +2 -4
  80. package/dist/message-box/IMessageBox.js +4 -6
  81. package/dist/message-box/MessageBoxBoard.svelte +1 -3
  82. package/dist/options-multi-select/OptionsMultiSelect.svelte +1 -1
  83. package/dist/prompts-text-editor/PromptsTextEditor.svelte +2 -2
  84. package/dist/prompts-text-editor/PromptsTextEditor.svelte.d.ts +1 -1
  85. package/dist/property-editor/PropertyEditor.svelte +3 -3
  86. package/dist/text-editor/PasswordEditor.svelte +1 -1
  87. package/dist/transfer/Transfer.svelte +17 -12
  88. package/dist/transfer/Transfer.svelte.d.ts +0 -1
  89. package/dist/unit-number-editor/UnitNumberEditor.svelte +2 -2
  90. package/docs/buttons/cn/ActionBar.md +459 -0
  91. package/docs/buttons/cn/Button.md +228 -0
  92. package/docs/buttons/cn/IconButton.md +294 -0
  93. package/docs/buttons/cn/README.md +600 -0
  94. package/docs/buttons/cn/TextButton.md +163 -0
  95. package/docs/buttons/en/ActionBar.md +459 -0
  96. package/docs/buttons/en/Button.md +228 -0
  97. package/docs/buttons/en/IconButton.md +294 -0
  98. package/docs/buttons/en/README.md +600 -0
  99. package/docs/buttons/en/TextButton.md +163 -0
  100. package/docs/containers/cn/accordion.md +622 -0
  101. package/docs/containers/cn/box.md +445 -0
  102. package/docs/containers/cn/card.md +404 -0
  103. package/docs/containers/cn/page.md +576 -0
  104. package/docs/containers/cn/tabs.md +686 -0
  105. package/docs/containers/en/accordion.md +622 -0
  106. package/docs/containers/en/box.md +445 -0
  107. package/docs/containers/en/card.md +404 -0
  108. package/docs/containers/en/page.md +576 -0
  109. package/docs/containers/en/tabs.md +686 -0
  110. package/docs/data-display/cn/concise-data-table.md +731 -0
  111. package/docs/data-display/cn/listbox.md +786 -0
  112. package/docs/data-display/cn/treeview.md +863 -0
  113. package/docs/data-display/en/concise-data-table.md +732 -0
  114. package/docs/data-display/en/listbox.md +786 -0
  115. package/docs/data-display/en/treeview.md +863 -0
  116. package/docs/data-table/cn/README.md +596 -0
  117. package/docs/data-table/en/README.md +596 -0
  118. package/docs/dialog/cn/README.md +767 -0
  119. package/docs/dialog/en/README.md +767 -0
  120. package/docs/form/cn/README.md +847 -0
  121. package/docs/form/en/README.md +847 -0
  122. package/docs/form-components/cn/README.md +495 -0
  123. package/docs/form-components/cn/attachmentfilesfield.md +757 -0
  124. package/docs/form-components/cn/cascade-options-select.md +374 -0
  125. package/docs/form-components/cn/checkbox.md +58 -0
  126. package/docs/form-components/cn/date-picker.md +138 -0
  127. package/docs/form-components/cn/datetime-picker.md +228 -0
  128. package/docs/form-components/cn/group-checkbox.md +405 -0
  129. package/docs/form-components/cn/group-radiobox.md +525 -0
  130. package/docs/form-components/cn/imagefilesfield.md +651 -0
  131. package/docs/form-components/cn/input-options-select.md +250 -0
  132. package/docs/form-components/cn/lookup-editor.md +406 -0
  133. package/docs/form-components/cn/memoeditor.md +409 -0
  134. package/docs/form-components/cn/number-editor.md +261 -0
  135. package/docs/form-components/cn/options-multi-select.md +177 -0
  136. package/docs/form-components/cn/options-select.md +83 -0
  137. package/docs/form-components/cn/passwordeditor.md +538 -0
  138. package/docs/form-components/cn/prompts-text-editor.md +241 -0
  139. package/docs/form-components/cn/radiobutton.md +84 -0
  140. package/docs/form-components/cn/switch.md +178 -0
  141. package/docs/form-components/cn/text-editor.md +142 -0
  142. package/docs/form-components/cn/time-editor.md +159 -0
  143. package/docs/form-components/cn/unit-number-editor.md +164 -0
  144. package/docs/form-components/en/README.md +463 -0
  145. package/docs/form-components/en/attachmentfilesfield.md +757 -0
  146. package/docs/form-components/en/cascade-options-select.md +358 -0
  147. package/docs/form-components/en/checkbox.md +59 -0
  148. package/docs/form-components/en/date-picker.md +138 -0
  149. package/docs/form-components/en/datetime-picker.md +228 -0
  150. package/docs/form-components/en/group-checkbox.md +395 -0
  151. package/docs/form-components/en/group-radiobox.md +498 -0
  152. package/docs/form-components/en/imagefilesfield.md +651 -0
  153. package/docs/form-components/en/input-options-select.md +239 -0
  154. package/docs/form-components/en/lookup-editor.md +389 -0
  155. package/docs/form-components/en/memoeditor.md +409 -0
  156. package/docs/form-components/en/number-editor.md +249 -0
  157. package/docs/form-components/en/options-multi-select.md +177 -0
  158. package/docs/form-components/en/options-select.md +83 -0
  159. package/docs/form-components/en/passwordeditor.md +538 -0
  160. package/docs/form-components/en/prompts-text-editor.md +241 -0
  161. package/docs/form-components/en/radiobutton.md +84 -0
  162. package/docs/form-components/en/switch.md +180 -0
  163. package/docs/form-components/en/text-editor.md +142 -0
  164. package/docs/form-components/en/time-editor.md +159 -0
  165. package/docs/form-components/en/unit-number-editor.md +164 -0
  166. package/docs/form-layout/cn/criteria-field.md +652 -0
  167. package/docs/form-layout/cn/flex-form.md +454 -0
  168. package/docs/form-layout/cn/flex-row-form.md +542 -0
  169. package/docs/form-layout/cn/form-field.md +923 -0
  170. package/docs/form-layout/cn/grid-form.md +676 -0
  171. package/docs/form-layout/en/criteria-field.md +652 -0
  172. package/docs/form-layout/en/flex-form.md +454 -0
  173. package/docs/form-layout/en/flex-row-form.md +542 -0
  174. package/docs/form-layout/en/form-field.md +923 -0
  175. package/docs/form-layout/en/grid-form.md +676 -0
  176. package/docs/global/cn/README.md +534 -0
  177. package/docs/global/en/README.md +534 -0
  178. package/docs/layout/cn/classiclayout.md +460 -0
  179. package/docs/layout/cn/headerlayout.md +524 -0
  180. package/docs/layout/cn/sidebarlayout.md +263 -0
  181. package/docs/layout/en/classiclayout.md +951 -0
  182. package/docs/layout/en/headerlayout.md +524 -0
  183. package/docs/layout/en/sidebarlayout.md +262 -0
  184. package/docs/misc/cn/README.md +1217 -0
  185. package/docs/misc/en/README.md +1217 -0
  186. package/docs/navigation/cn/breadcrumb.md +291 -0
  187. package/docs/navigation/cn/navigator.md +322 -0
  188. package/docs/navigation/cn/navigatormenu.md +512 -0
  189. package/docs/navigation/cn/progressbar.md +199 -0
  190. package/docs/navigation/cn/progressstepbar.md +299 -0
  191. package/docs/navigation/en/breadcrumb.md +291 -0
  192. package/docs/navigation/en/navigator.md +322 -0
  193. package/docs/navigation/en/navigatormenu.md +512 -0
  194. package/docs/navigation/en/progressbar.md +199 -0
  195. package/docs/navigation/en/progressstepbar.md +299 -0
  196. package/docs/search-filters/cn/daterange.md +1156 -0
  197. package/docs/search-filters/cn/numberrange.md +688 -0
  198. package/docs/search-filters/cn/searchbox.md +1582 -0
  199. package/docs/search-filters/en/daterange.md +1156 -0
  200. package/docs/search-filters/en/numberrange.md +688 -0
  201. package/docs/search-filters/en/searchbox.md +1582 -0
  202. package/package.json +53 -13
  203. package/dist/common-editor/DateInput.svelte +0 -27
  204. package/dist/i18n_resources/index.d.ts +0 -3
  205. package/dist/i18n_resources/index.js +0 -3
  206. /package/dist/{i18n_resources → i18nRes}/uniface_cn_resource.d.ts +0 -0
  207. /package/dist/{i18n_resources → i18nRes}/uniface_cn_resource.js +0 -0
  208. /package/dist/{i18n_resources → i18nRes}/uniface_en_resource.d.ts +0 -0
  209. /package/dist/{i18n_resources → i18nRes}/uniface_en_resource.js +0 -0
@@ -1,6 +1,4 @@
1
- import i18n from "@ticatec/i18n";
2
- import langRes from "../i18n_resources/uniface_en_resource";
3
- ;
1
+ import i18nRes from "../i18nRes";
4
2
  var ModalResult;
5
3
  (function (ModalResult) {
6
4
  ModalResult[ModalResult["MR_OK"] = 1] = "MR_OK";
@@ -8,11 +6,11 @@ var ModalResult;
8
6
  ModalResult[ModalResult["MR_CLOSE"] = 3] = "MR_CLOSE";
9
7
  })(ModalResult || (ModalResult = {}));
10
8
  const InfoButtons = [
11
- { text: langRes.uniface.btnClose, key: 'uniface.btnClose', type: 'primary', result: ModalResult.MR_OK }
9
+ { text: i18nRes.common.btnClose, type: 'primary', result: ModalResult.MR_OK }
12
10
  ];
13
11
  const ConfirmButtons = [
14
- { text: langRes.uniface.btnConfirm, key: 'uniface.btnConfirm', type: 'primary', result: ModalResult.MR_OK },
15
- { text: langRes.uniface.btnCancel, key: 'uniface.btnCancel', type: 'secondary', result: ModalResult.MR_CANCEL }
12
+ { text: i18nRes.common.btnConfirm, type: 'primary', result: ModalResult.MR_OK },
13
+ { text: i18nRes.common.btnCancel, type: 'secondary', result: ModalResult.MR_CANCEL }
16
14
  ];
17
15
  const initialize = (showInfo, showConfirm) => {
18
16
  window.MessageBox = {
@@ -5,7 +5,6 @@
5
5
  import Button from "../button";
6
6
  import {fade} from "svelte/transition";
7
7
  import utils from "../common/utils";
8
- import i18n from "@ticatec/i18n";
9
8
 
10
9
  export let appTitle: string = null as unknown as string;
11
10
 
@@ -38,8 +37,7 @@
38
37
  escapeHTML = _escapeHTML != false;
39
38
  if (_buttons) {
40
39
  _buttons.forEach(button => {
41
- console.log(button.key, i18n.getText(button.key, button.text));
42
- button.label = i18n.getText(button.key, button.text)
40
+ button.label = button.text
43
41
  });
44
42
  }
45
43
  buttons = _buttons;
@@ -79,7 +79,7 @@
79
79
  return s.length == 0 ? '' : s.join(delimiter);
80
80
  }
81
81
 
82
- const removeOption = (code: string) => (e: MouseEvent) => {
82
+ const removeOption = (code: string) => async (e: MouseEvent) => {
83
83
  removeSelectCode(code);
84
84
  e.stopPropagation();
85
85
  e.preventDefault();
@@ -18,7 +18,7 @@
18
18
  export let suffix: string = '';
19
19
  export let displayMode: DisplayMode = DisplayMode.Edit;
20
20
  export let removable: boolean = true;
21
- export let onChange: OnChangeHandler<number | null> = null as unknown as OnChangeHandler<number | null>;
21
+ export let onChange: OnChangeHandler<string | null> = null as unknown as OnChangeHandler<string | null>;
22
22
  export let words: Array<string>;
23
23
  export let menu$height: number = 0;
24
24
  export let placeholder: string = '';
@@ -80,7 +80,7 @@
80
80
  </CommonEditor>
81
81
 
82
82
  {#if showPopup}
83
- <Popover target={divPanel} autoFit align="right" on:close={()=>{showPopup=false}}>
83
+ <Popover target={divPanel} autoFit align="right" onClose={()=>{showPopup=false}}>
84
84
  <div class="options-popover" style={mh}>
85
85
  {#each words as word}
86
86
  <div class="option-item" style="padding-left: 12px; padding-right: 12px" on:click={handleHintClick(word)}
@@ -26,7 +26,7 @@ declare const PromptsTextEditor: $$__sveltets_2_IsomorphicComponent<{
26
26
  suffix?: string | undefined;
27
27
  displayMode?: DisplayMode | undefined;
28
28
  removable?: boolean | undefined;
29
- onChange?: OnChangeHandler<number | null> | undefined;
29
+ onChange?: OnChangeHandler<string | null> | undefined;
30
30
  words: Array<string>;
31
31
  menu$height?: number | undefined;
32
32
  placeholder?: string | undefined;
@@ -7,7 +7,7 @@
7
7
  import PropertyDatePickup from "./component/PropertyDatePickup.svelte";
8
8
  import PropertyNumberEditor from "./component/PropertyNumberEditor.svelte";
9
9
  import PropertyOptionsSelector from "./component/PropertyOptionsSelector.svelte";
10
- import i18n from "@ticatec/i18n";
10
+ import i18nRes from "../i18nRes";
11
11
  import PropertyTextWordsEditor from "./component/PropertyPromptsTextEditor.svelte";
12
12
 
13
13
  export let fields: Array<PropertyField>;
@@ -21,8 +21,8 @@
21
21
 
22
22
  export let data: any;
23
23
 
24
- let nameLabel: string = i18n.getText('uniface.propertyEditor.colName', 'Name');
25
- let valueLabel: string = i18n.getText('uniface.propertyEditor.colValue', 'Value');
24
+ let nameLabel: string = i18nRes.propertyEditor.colName;
25
+ let valueLabel: string = i18nRes.propertyEditor.colValue;
26
26
 
27
27
  const getEditor = (property: PropertyField) => {
28
28
  switch (property.type) {
@@ -38,7 +38,7 @@
38
38
  {/if}
39
39
  <div slot="trailing-icon" class="editor-embed-icon">
40
40
  {#if (!readonly && !disabled)}
41
- <i class={type == "password" ? "icon_google_remove_red_eye" : "icon_google_visibility_off"} on:click={toggleType}></i>
41
+ <i class={type == "password" ? "icon_google_remove_red_eye" : "icon_google_visibility_off"} aria-hidden="true" on:click={toggleType}></i>
42
42
  {/if}
43
43
  </div>
44
44
  </CommonEditor>
@@ -4,25 +4,24 @@
4
4
 
5
5
  import type {FunFilter} from "../list-box";
6
6
  import type {TransferData} from "./types";
7
- import i18n from "@ticatec/i18n";
8
-
7
+ import i18n, {i18nUtils} from "@ticatec/i18n";
8
+ import i18nRes from "../i18nRes";
9
9
 
10
10
 
11
11
  export let style: string = '';
12
- export let sourceList:Array<any>;
12
+ export let sourceList: Array<any>;
13
13
  export let sourceTitle: string;
14
- export let targetList:Array<any>;
14
+ export let targetList: Array<any>;
15
15
  export let targetTitle: string;
16
16
 
17
17
  export let itemRender: any = null;
18
- export let filter: FunFilter = null;
19
- export let transferData: TransferData = null;
20
- export let header$style: string = '';
18
+ export let filter: FunFilter = null as unknown as FunFilter;
19
+ export let transferData: TransferData = null as unknown as TransferData;
21
20
  export let footer$style: string = 'width: 100%; background-color: #f0f0f0; padding: 2px 6px; text-align: right; box-sizing: border-box';
22
21
 
23
22
 
24
- let sourceSelectedList = [];
25
- let targetSelectedList = [];
23
+ let sourceSelectedList: Array<any> = [];
24
+ let targetSelectedList: Array<any> = [];
26
25
 
27
26
  const moveToTarget = async () => {
28
27
  if (sourceSelectedList.length > 0 && await transferData?.(sourceSelectedList, "right")) {
@@ -45,7 +44,10 @@
45
44
  <ListBox class="list-container" title={sourceTitle} {filter} style="{style}; grid-column: 1/2" list={sourceList} selectMode="multiple"
46
45
  bind:selectedList={sourceSelectedList} {itemRender}>
47
46
  <div slot="footer" style={footer$style}>
48
- <span>{i18n.getText('uniface.transfer.selectIndicator', {selected: sourceSelectedList.length, total: sourceList.length})}</span>
47
+ <span>{i18nUtils.formatText(i18nRes.transfer.selectIndicator, {
48
+ selected: sourceSelectedList.length,
49
+ total: sourceList.length
50
+ })}</span>
49
51
  </div>
50
52
  </ListBox>
51
53
  <div class="icon-button-container" style="grid-column: 2/3;">
@@ -57,9 +59,12 @@
57
59
  </IconButton>
58
60
  </div>
59
61
  <ListBox class="list-container" title={targetTitle} style="{style}; grid-column: 3/4" {filter} list={targetList} selectMode="multiple"
60
- bind:selectedList={targetSelectedList} {itemRender} }>
62
+ bind:selectedList={targetSelectedList} {itemRender}>
61
63
  <div slot="footer" style={footer$style}>
62
- <span>{i18n.getText('uniface.transfer.selectIndicator', {selected: targetSelectedList.length, total: targetList.length})}</span>
64
+ <span>{i18nUtils.formatText(i18n.getText('uniface.transfer.selectIndicator'), {
65
+ selected: targetSelectedList.length,
66
+ total: targetList.length
67
+ })}</span>
63
68
  </div>
64
69
  </ListBox>
65
70
  </div>
@@ -22,7 +22,6 @@ declare const Transfer: $$__sveltets_2_IsomorphicComponent<{
22
22
  itemRender?: any;
23
23
  filter?: FunFilter;
24
24
  transferData?: TransferData;
25
- header$style?: string;
26
25
  footer$style?: string;
27
26
  }, {
28
27
  [evt: string]: CustomEvent<any>;
@@ -52,7 +52,7 @@
52
52
  } else {
53
53
  value = uv;
54
54
  }
55
- onChange?.()
55
+ onChange?.(value)
56
56
  }
57
57
 
58
58
  const handleUnitClick = (item: any) => (e: MouseEvent) => {
@@ -119,7 +119,7 @@
119
119
  </CommonEditor>
120
120
 
121
121
  {#if showPopup}
122
- <Popover target={divPanel} autoFit={false} align="right" on:close={()=>{showPopup=false}}>
122
+ <Popover target={divPanel} autoFit={false} align="right" onClose={()=>{showPopup=false}}>
123
123
  <div class="options-popover" style="min-width: 90px; box-sizing: border-box; text-align: center; {mh}" >
124
124
  {#each units as op}
125
125
  <div class="option-item" style="padding-left: 12px; padding-right: 12px" on:click={handleUnitClick(op)} aria-hidden="true">
@@ -0,0 +1,459 @@
1
+ # ActionBar 组件
2
+
3
+ `ActionBar` 组件提供了一个容器,用于组织多个按钮操作,确保一致的间距和布局。
4
+
5
+ ## 基础用法
6
+
7
+ ```svelte
8
+ <script lang="ts">
9
+ import ActionBar from '@ticatec/uniface-element/ActionBar';
10
+ import type { ButtonActions } from '@ticatec/uniface-element';
11
+
12
+ const actions: ButtonActions = [
13
+ {
14
+ label: "保存",
15
+ type: "primary",
16
+ icon: "icon_google_save",
17
+ handler: async () => {
18
+ await saveChanges();
19
+ }
20
+ },
21
+ {
22
+ label: "取消",
23
+ type: "secondary",
24
+ handler: async () => {
25
+ closeDialog();
26
+ }
27
+ }
28
+ ];
29
+ </script>
30
+
31
+ <ActionBar buttons={actions} />
32
+ ```
33
+
34
+ ## 高级用法
35
+
36
+ ```svelte
37
+ <script lang="ts">
38
+ import ActionBar from '@ticatec/uniface-element/ActionBar';
39
+ import type { ButtonActions } from '@ticatec/uniface-element';
40
+
41
+ let isProcessing = false;
42
+
43
+ const formActions: ButtonActions = [
44
+ {
45
+ label: "重置",
46
+ type: "default",
47
+ icon: "icon_google_undo",
48
+ handler: async () => {
49
+ resetForm();
50
+ }
51
+ },
52
+ null, // 分隔符
53
+ {
54
+ label: "预览",
55
+ type: "secondary",
56
+ icon: "icon_google_visibility",
57
+ handler: async () => {
58
+ showPreview();
59
+ }
60
+ },
61
+ {
62
+ label: isProcessing ? "处理中..." : "提交",
63
+ type: "primary",
64
+ icon: "icon_google_send",
65
+ disabled: isProcessing,
66
+ handler: async () => {
67
+ isProcessing = true;
68
+ try {
69
+ await submitForm();
70
+ } finally {
71
+ isProcessing = false;
72
+ }
73
+ }
74
+ }
75
+ ];
76
+ </script>
77
+
78
+ <ActionBar
79
+ buttons={formActions}
80
+ gap={12}
81
+ style="padding: 16px; justify-content: flex-end;"
82
+ />
83
+ ```
84
+
85
+ ## 带自定义内容的 ActionBar
86
+
87
+ ```svelte
88
+ <script lang="ts">
89
+ import ActionBar from '@ticatec/uniface-element/ActionBar';
90
+ import Button from '@ticatec/uniface-element/Button';
91
+ </script>
92
+
93
+ <!-- 当没有提供 buttons 属性时,使用插槽内容 -->
94
+ <ActionBar gap={16} style="padding: 20px;">
95
+ <Button label="自定义操作 1" type="primary" onClick={action1} />
96
+ <Button label="自定义操作 2" type="secondary" onClick={action2} />
97
+ <Button label="自定义操作 3" type="default" onClick={action3} />
98
+ </ActionBar>
99
+ ```
100
+
101
+ ## 属性
102
+
103
+ | 属性 | 类型 | 默认值 | 描述 |
104
+ |------|------|--------|------|
105
+ | `buttons` | `ButtonActions` | `[]` | 按钮配置数组 |
106
+ | `style` | `string` | `''` | 自定义 CSS 样式 |
107
+ | `gap` | `number` | `8` | 按钮间距,单位像素 |
108
+
109
+ ## API 参考
110
+
111
+ ### ButtonAction 接口
112
+
113
+ ```typescript
114
+ interface ButtonAction {
115
+ /** 按钮标签文本 */
116
+ label: string;
117
+
118
+ /** 按钮是否禁用 */
119
+ disabled?: boolean;
120
+
121
+ /** 图标类(如 Google Material Icons) */
122
+ icon?: string;
123
+
124
+ /** 按钮类型用于样式设置 */
125
+ type?: ButtonType;
126
+
127
+ /** 点击事件处理器 */
128
+ handler?: MouseClickHandler;
129
+ }
130
+
131
+ type ButtonActions = Array<ButtonAction | null>;
132
+ ```
133
+
134
+ ### MouseClickHandler 类型
135
+
136
+ ```typescript
137
+ type MouseClickHandler = (event: MouseEvent) => Promise<void>;
138
+ ```
139
+
140
+ ## 使用示例
141
+
142
+ ### 对话框操作
143
+
144
+ ```svelte
145
+ <script lang="ts">
146
+ import ActionBar from '@ticatec/uniface-element/ActionBar';
147
+ import type { ButtonActions } from '@ticatec/uniface-element';
148
+
149
+ export let onSave: () => Promise<void>;
150
+ export let onCancel: () => void;
151
+
152
+ const dialogActions: ButtonActions = [
153
+ {
154
+ label: "取消",
155
+ type: "secondary",
156
+ handler: async () => {
157
+ onCancel();
158
+ }
159
+ },
160
+ {
161
+ label: "保存更改",
162
+ type: "primary",
163
+ icon: "icon_google_save",
164
+ handler: async () => {
165
+ await onSave();
166
+ }
167
+ }
168
+ ];
169
+ </script>
170
+
171
+ <div class="dialog-footer">
172
+ <ActionBar buttons={dialogActions} style="justify-content: flex-end;" />
173
+ </div>
174
+ ```
175
+
176
+ ### 表单操作栏
177
+
178
+ ```svelte
179
+ <script lang="ts">
180
+ import ActionBar from '@ticatec/uniface-element/ActionBar';
181
+ import type { ButtonActions } from '@ticatec/uniface-element';
182
+
183
+ let formData = {};
184
+ let isSubmitting = false;
185
+ let isDraft = false;
186
+
187
+ const formActions: ButtonActions = [
188
+ {
189
+ label: "重置",
190
+ type: "default",
191
+ handler: async () => {
192
+ formData = {};
193
+ }
194
+ },
195
+ null, // 分隔符
196
+ {
197
+ label: isDraft ? "保存中..." : "保存草稿",
198
+ type: "secondary",
199
+ icon: "icon_google_save",
200
+ disabled: isDraft,
201
+ handler: async () => {
202
+ isDraft = true;
203
+ try {
204
+ await saveDraft(formData);
205
+ } finally {
206
+ isDraft = false;
207
+ }
208
+ }
209
+ },
210
+ {
211
+ label: isSubmitting ? "提交中..." : "提交",
212
+ type: "primary",
213
+ icon: "icon_google_send",
214
+ disabled: isSubmitting,
215
+ handler: async () => {
216
+ isSubmitting = true;
217
+ try {
218
+ await submitForm(formData);
219
+ } finally {
220
+ isSubmitting = false;
221
+ }
222
+ }
223
+ }
224
+ ];
225
+ </script>
226
+
227
+ <form>
228
+ <!-- 表单字段在此 -->
229
+
230
+ <div class="form-footer">
231
+ <ActionBar
232
+ buttons={formActions}
233
+ gap={12}
234
+ style="justify-content: flex-end; margin-top: 24px;"
235
+ />
236
+ </div>
237
+ </form>
238
+ ```
239
+
240
+ ### 工具栏实现
241
+
242
+ ```svelte
243
+ <script lang="ts">
244
+ import ActionBar from '@ticatec/uniface-element/ActionBar';
245
+ import type { ButtonActions } from '@ticatec/uniface-element';
246
+
247
+ let selectedItems = [];
248
+
249
+ const toolbarActions: ButtonActions = [
250
+ {
251
+ label: "全选",
252
+ icon: "icon_google_check_box",
253
+ type: "default",
254
+ handler: async () => {
255
+ selectAll();
256
+ }
257
+ },
258
+ null, // 分隔符
259
+ {
260
+ label: "导出",
261
+ icon: "icon_google_download",
262
+ type: "secondary",
263
+ disabled: selectedItems.length === 0,
264
+ handler: async () => {
265
+ await exportItems(selectedItems);
266
+ }
267
+ },
268
+ {
269
+ label: "删除选中",
270
+ icon: "icon_google_delete",
271
+ type: "third",
272
+ disabled: selectedItems.length === 0,
273
+ handler: async () => {
274
+ if (confirm(`删除 ${selectedItems.length} 个项目?`)) {
275
+ await deleteItems(selectedItems);
276
+ }
277
+ }
278
+ }
279
+ ];
280
+ </script>
281
+
282
+ <div class="toolbar">
283
+ <div class="toolbar-info">
284
+ 已选择 {selectedItems.length} 个项目
285
+ </div>
286
+ <ActionBar buttons={toolbarActions} />
287
+ </div>
288
+
289
+ <style>
290
+ .toolbar {
291
+ display: flex;
292
+ justify-content: space-between;
293
+ align-items: center;
294
+ padding: 12px;
295
+ border-bottom: 1px solid #eee;
296
+ }
297
+
298
+ .toolbar-info {
299
+ color: #666;
300
+ font-size: 14px;
301
+ }
302
+ </style>
303
+ ```
304
+
305
+ ### 卡片操作栏
306
+
307
+ ```svelte
308
+ <script lang="ts">
309
+ import ActionBar from '@ticatec/uniface-element/ActionBar';
310
+ import type { ButtonActions } from '@ticatec/uniface-element';
311
+
312
+ export let item: any;
313
+ export let onEdit: (item: any) => Promise<void>;
314
+ export let onShare: (item: any) => Promise<void>;
315
+ export let onDelete: (item: any) => Promise<void>;
316
+
317
+ const cardActions: ButtonActions = [
318
+ {
319
+ label: "编辑",
320
+ icon: "icon_google_edit",
321
+ type: "primary",
322
+ handler: async () => {
323
+ await onEdit(item);
324
+ }
325
+ },
326
+ {
327
+ label: "分享",
328
+ icon: "icon_google_share",
329
+ type: "secondary",
330
+ handler: async () => {
331
+ await onShare(item);
332
+ }
333
+ },
334
+ {
335
+ label: "删除",
336
+ icon: "icon_google_delete",
337
+ type: "third",
338
+ handler: async () => {
339
+ if (confirm("确定要删除此项目吗?")) {
340
+ await onDelete(item);
341
+ }
342
+ }
343
+ }
344
+ ];
345
+ </script>
346
+
347
+ <div class="card">
348
+ <div class="card-content">
349
+ <!-- 卡片内容 -->
350
+ </div>
351
+
352
+ <div class="card-actions">
353
+ <ActionBar buttons={cardActions} gap={8} />
354
+ </div>
355
+ </div>
356
+
357
+ <style>
358
+ .card {
359
+ border: 1px solid #e0e0e0;
360
+ border-radius: 8px;
361
+ overflow: hidden;
362
+ }
363
+
364
+ .card-content {
365
+ padding: 16px;
366
+ }
367
+
368
+ .card-actions {
369
+ padding: 12px 16px;
370
+ background: #f8f9fa;
371
+ border-top: 1px solid #e0e0e0;
372
+ }
373
+ </style>
374
+ ```
375
+
376
+ ## 最佳实践
377
+
378
+ ### 使用分隔符组织操作
379
+
380
+ 使用 `null` 值作为分隔符来组织相关操作:
381
+
382
+ ```svelte
383
+ <script lang="ts">
384
+ const editorActions: ButtonActions = [
385
+ // 文件操作组
386
+ { label: "新建", icon: "icon_google_add", handler: newFile },
387
+ { label: "打开", icon: "icon_google_folder_open", handler: openFile },
388
+ { label: "保存", icon: "icon_google_save", handler: saveFile },
389
+
390
+ null, // 分隔符
391
+
392
+ // 编辑操作组
393
+ { label: "撤销", icon: "icon_google_undo", handler: undo },
394
+ { label: "重做", icon: "icon_google_redo", handler: redo },
395
+
396
+ null, // 分隔符
397
+
398
+ // 主要操作
399
+ { label: "发布", type: "primary", icon: "icon_google_publish", handler: publish }
400
+ ];
401
+ </script>
402
+ ```
403
+
404
+ ### 使用合适的间距
405
+
406
+ 根据界面密度调整按钮间距:
407
+
408
+ ```svelte
409
+ <!-- 紧凑界面 -->
410
+ <ActionBar buttons={actions} gap={4} />
411
+
412
+ <!-- 标准界面 -->
413
+ <ActionBar buttons={actions} gap={8} />
414
+
415
+ <!-- 宽松界面 -->
416
+ <ActionBar buttons={actions} gap={16} />
417
+ ```
418
+
419
+ ### 响应式设计
420
+
421
+ 考虑在小屏幕上隐藏或简化操作:
422
+
423
+ ```svelte
424
+ <script lang="ts">
425
+ import { onMount } from 'svelte';
426
+
427
+ let isMobile = false;
428
+
429
+ onMount(() => {
430
+ const checkMobile = () => {
431
+ isMobile = window.innerWidth < 768;
432
+ };
433
+
434
+ checkMobile();
435
+ window.addEventListener('resize', checkMobile);
436
+
437
+ return () => window.removeEventListener('resize', checkMobile);
438
+ });
439
+
440
+ $: responsiveActions = isMobile
441
+ ? [
442
+ { label: "保存", type: "primary", handler: save },
443
+ { label: "取消", type: "secondary", handler: cancel }
444
+ ]
445
+ : [
446
+ { label: "重置", type: "default", handler: reset },
447
+ null,
448
+ { label: "预览", type: "secondary", handler: preview },
449
+ { label: "保存", type: "primary", handler: save },
450
+ { label: "取消", type: "secondary", handler: cancel }
451
+ ];
452
+ </script>
453
+
454
+ <ActionBar buttons={responsiveActions} />
455
+ ```
456
+
457
+ ## 点击节流
458
+
459
+ ActionBar 中的所有按钮都实现了自动点击节流,具有 500ms 冷却时间,以防止意外的双击并确保正确的异步操作处理。