@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
@@ -5,10 +5,10 @@
5
5
  import type {OnChangeHandler} from "../common/OnChangeHandler";
6
6
  import CommonPicker from "../common/CommonPicker.svelte";
7
7
 
8
- type OnActionHandler = () => void;
8
+ //type OnActionHandler = () => void;
9
9
 
10
- export let showHex = true;
11
- export let showRgb = false;
10
+ //export let showHex = true;
11
+ //export let showRgb = false;
12
12
 
13
13
  export let variant: '' | 'plain' | 'outlined' | 'filled' = '';
14
14
  export let disabled: boolean = false;
@@ -28,17 +28,17 @@
28
28
  let editor: any;
29
29
 
30
30
  const clean = () => {
31
-
31
+ onChange(null)
32
32
  }
33
33
 
34
- const handleActionIconClick = () => {
34
+ const handleActionIconClick = async () => {
35
35
  editor.click();
36
36
  }
37
37
 
38
- function handleColorChange(event) {
39
- selectedColor = event.target.value;
40
- rgbValues = hexToRgb(selectedColor);
41
- console.log(selectedColor, rgbValues);
38
+ function handleColorChange(event: Event) {
39
+ // selectedColor = (event.target as HTMLElement).value;
40
+ // rgbValues = hexToRgb(selectedColor);
41
+ // console.log(selectedColor, rgbValues);
42
42
  // dispatch('change', {
43
43
  // hex: selectedColor,
44
44
  // rgb: rgbValues
@@ -13,8 +13,6 @@ interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> =
13
13
  z_$$bindings?: Bindings;
14
14
  }
15
15
  declare const ColorPicker: $$__sveltets_2_IsomorphicComponent<{
16
- showHex?: boolean;
17
- showRgb?: boolean;
18
16
  variant?: "" | "plain" | "outlined" | "filled";
19
17
  disabled?: boolean;
20
18
  readonly?: boolean;
@@ -1,21 +1,19 @@
1
1
  <script lang="ts">
2
2
 
3
3
 
4
- // Define props with default values
5
- import i18n from "@ticatec/i18n";
6
- import langRes from "../i18n_resources/uniface_en_resource";
4
+ import i18nRes from "../i18nRes";
7
5
 
8
6
  export let initialColor = "#ffffff";
9
7
  export let showHex = true;
10
8
  export let showRgb = false;
11
- export let swatches = [];
9
+ export let swatches: Array<any> = [];
12
10
 
13
11
  let selectedColor = initialColor;
14
12
  let rgbValues = hexToRgb(initialColor);
15
13
 
16
14
 
17
15
  // Convert hex to RGB
18
- function hexToRgb(hex) {
16
+ function hexToRgb(hex: string) {
19
17
  const result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex);
20
18
  return result ? {
21
19
  r: parseInt(result[1], 16),
@@ -25,17 +23,17 @@
25
23
  }
26
24
 
27
25
  // Emit change event when color changes
28
- function handleColorChange(event) {
29
- selectedColor = event.target.value;
26
+ function handleColorChange(event: Event) {
27
+ selectedColor = "0x000000"; //event.target?.value;
30
28
  rgbValues = hexToRgb(selectedColor);
31
- dispatch('change', {
32
- hex: selectedColor,
33
- rgb: rgbValues
34
- });
29
+ // dispatch('change', {
30
+ // hex: selectedColor,
31
+ // rgb: rgbValues
32
+ // });
35
33
  }
36
34
 
37
35
  // Select a swatch
38
- function selectSwatch(color) {
36
+ function selectSwatch(color: any) {
39
37
  selectedColor = color;
40
38
  rgbValues = hexToRgb(selectedColor);
41
39
  // dispatch('change', {
@@ -47,8 +45,7 @@
47
45
 
48
46
  <div class="color-picker">
49
47
  <label for="color-input">
50
- {i18n.getText('uniface.pickupColor', langRes.uniface.colorPicker)
51
- }
48
+ {i18nRes.pickupColor}
52
49
  </label>
53
50
 
54
51
  <div class="color-input-group">
@@ -116,7 +113,6 @@
116
113
  }
117
114
 
118
115
  input[type="color"] {
119
- -webkit-appearance: none;
120
116
  width: 40px;
121
117
  height: 40px;
122
118
  border: none;
@@ -15,7 +15,7 @@ declare const ColorPickerPanel: $$__sveltets_2_IsomorphicComponent<{
15
15
  initialColor?: string;
16
16
  showHex?: boolean;
17
17
  showRgb?: boolean;
18
- swatches?: any[];
18
+ swatches?: Array<any>;
19
19
  }, {
20
20
  [evt: string]: CustomEvent<any>;
21
21
  }, {}, {}, string>;
@@ -15,7 +15,7 @@
15
15
  export let autoFit: boolean = true;
16
16
  export let canClean: boolean;
17
17
  export let textValue: string;
18
- export let dropDownIcon: string | null = null;
18
+ export let dropDownIcon: string = null as unknown as string;
19
19
  export let clean: () => void;
20
20
  export let iconClickHandler: MouseClickHandler = null as unknown as MouseClickHandler;
21
21
  export let showPopup: boolean = false;
@@ -58,7 +58,7 @@
58
58
  {/if}
59
59
  </div>
60
60
  {#if showPopup}
61
- <Popover target={editorElement} on:close={()=>{showPopup=false}} {autoFit}>
61
+ <Popover target={editorElement} onClose={()=>{showPopup=false}} {autoFit}>
62
62
  <slot name="popup-panel"></slot>
63
63
  </Popover>
64
64
  {/if}
@@ -29,7 +29,7 @@ declare const CommonPicker: $$__sveltets_2_IsomorphicComponent<$$__sveltets_2_Pr
29
29
  autoFit?: boolean;
30
30
  canClean: boolean;
31
31
  textValue: string;
32
- dropDownIcon?: string | null;
32
+ dropDownIcon?: string;
33
33
  clean: () => void;
34
34
  iconClickHandler?: MouseClickHandler;
35
35
  showPopup?: boolean;
@@ -1 +1 @@
1
- export type MouseClickHandler = (event: MouseEvent) => void;
1
+ export type MouseClickHandler = (event: MouseEvent) => Promise<void>;
@@ -1,10 +1,33 @@
1
1
 
2
2
  <script lang="ts">
3
- import {createEventDispatcher, onMount} from 'svelte';
4
- import {clickOutside} from './uniface-utils';
3
+ import { onDestroy, onMount} from 'svelte';
5
4
  import Portal from "svelte-portal";
6
5
 
7
- const dispatch = createEventDispatcher();
6
+ export let onClose: (()=>void) | null = null;
7
+
8
+ export function outerClick(node: HTMLElement, callback: () => void) {
9
+ const handleClick = (event: MouseEvent) => {
10
+ // 如果点击目标不在node内,则触发回调
11
+ if (!node.contains(event.target as Node)) {
12
+ callback();
13
+ }
14
+ };
15
+
16
+ // 监听全局点击事件(useCapture=true,避免事件冒泡造成的问题)
17
+ document.addEventListener('click', handleClick, true);
18
+
19
+ // 清理事件监听器
20
+ onDestroy(() => {
21
+ document.removeEventListener('click', handleClick, true);
22
+ });
23
+
24
+ // action 必须返回一个对象,可以选实现 update 和 destroy
25
+ return {
26
+ destroy() {
27
+ document.removeEventListener('click', handleClick, true);
28
+ }
29
+ };
30
+ }
8
31
 
9
32
  export let style: string = '';
10
33
  export let target: any;
@@ -89,7 +112,7 @@
89
112
  });
90
113
 
91
114
  const close = () => {
92
- dispatch('close');
115
+ onClose?.();
93
116
  };
94
117
 
95
118
  let contentPanel: any;
@@ -103,8 +126,7 @@
103
126
  <svelte:window bind:innerWidth={w} bind:innerHeight={h}/>
104
127
  <Portal target="body">
105
128
  <div class="uniface-popover-wrapper" class:hidden style="{vertPos}; height: auto; left: {position.left-margin}px; width: {position.width}px; ">
106
- <div class="uniface-popover" use:clickOutside
107
- on:outerClick={close}>
129
+ <div class="uniface-popover" use:outerClick={close}>
108
130
  <div bind:this={contentPanel} style="{horzPos}">
109
131
  <div class="contents" style="{style}">
110
132
  <div class="contents-inner">
@@ -17,6 +17,10 @@ type $$__sveltets_2_PropsWithChildren<Props, Slots> = Props & (Slots extends {
17
17
  children?: any;
18
18
  } : {});
19
19
  declare const Popover: $$__sveltets_2_IsomorphicComponent<$$__sveltets_2_PropsWithChildren<{
20
+ onClose?: (() => void) | null;
21
+ outerClick?: (node: HTMLElement, callback: () => void) => {
22
+ destroy(): void;
23
+ };
20
24
  style?: string;
21
25
  target: any;
22
26
  align?: "left" | "right" | "center";
@@ -25,11 +29,13 @@ declare const Popover: $$__sveltets_2_IsomorphicComponent<$$__sveltets_2_PropsWi
25
29
  }, {
26
30
  default: {};
27
31
  }>, {
28
- close: CustomEvent<any>;
29
- } & {
30
32
  [evt: string]: CustomEvent<any>;
31
33
  }, {
32
34
  default: {};
33
- }, {}, string>;
35
+ }, {
36
+ outerClick: (node: HTMLElement, callback: () => void) => {
37
+ destroy(): void;
38
+ };
39
+ }, string>;
34
40
  type Popover = InstanceType<typeof Popover>;
35
41
  export default Popover;
@@ -1,10 +1,12 @@
1
1
  export function clickOutside(node) {
2
2
  const handleClick = (event) => {
3
- // @ts-ignore
3
+ // @ts-ignore 因为 event.target 是 EventTarget,不能直接传给 contains
4
4
  if (node && !node.contains(event.target) && !event.defaultPrevented) {
5
- node.dispatchEvent(
6
- // @ts-ignore
7
- new CustomEvent('outerClick', node));
5
+ node.dispatchEvent(new CustomEvent('outerClick', {
6
+ bubbles: true, // 通常自定义事件要冒泡,方便捕获
7
+ cancelable: true, // 可取消
8
+ detail: { originalEvent: event } // 可选:传递原始事件信息
9
+ }));
8
10
  event.stopPropagation();
9
11
  event.preventDefault();
10
12
  }
@@ -17,7 +17,7 @@
17
17
  export let input$class: string = null as unknown as string;
18
18
  export let displayMode: DisplayMode = DisplayMode.Edit;
19
19
  export let showActionIcon: boolean = false;
20
- export let clean: () => void;
20
+ export let clean: (() => void) | null = null;
21
21
 
22
22
  export let hasLeadingIcon: boolean = true;
23
23
  export let hasTrailingIcon: boolean = true;
@@ -31,7 +31,7 @@ declare const CommonEditor: $$__sveltets_2_IsomorphicComponent<$$__sveltets_2_Pr
31
31
  input$class?: string;
32
32
  displayMode?: DisplayMode;
33
33
  showActionIcon?: boolean;
34
- clean: () => void;
34
+ clean?: (() => void) | null;
35
35
  hasLeadingIcon?: boolean;
36
36
  hasTrailingIcon?: boolean;
37
37
  }, {
@@ -14,7 +14,7 @@
14
14
  export let max: number | null = null;
15
15
  export let min: number | null = null;
16
16
  export let onChange: OnChangeHandler<number | null> = null as unknown as OnChangeHandler<number | null>;
17
- export let textValue: string;
17
+ export let textValue: string = '';
18
18
  export const focus = () => {
19
19
  editor.focus();
20
20
  }
@@ -23,7 +23,7 @@ declare const NumberInput: $$__sveltets_2_IsomorphicComponent<{
23
23
  max?: number | null;
24
24
  min?: number | null;
25
25
  onChange?: OnChangeHandler<number | null>;
26
- textValue: string;
26
+ textValue?: string;
27
27
  focus?: () => void;
28
28
  }, {
29
29
  [evt: string]: CustomEvent<any>;
@@ -4,6 +4,7 @@
4
4
  import DataRow from "./DataRow.svelte";
5
5
  import {type RowClickHandler, type TableOptions} from "./TableOptions";
6
6
  import utils from "./utils";
7
+ import type Column from "./Column";
7
8
 
8
9
  // list array to display
9
10
  export let list: Array<any>;
@@ -120,6 +121,10 @@
120
121
 
121
122
  $: tableStyle = utils.generateTableStyle(id, columns, tabOptions, viewWidth);
122
123
 
124
+ const handleRowClick = (row: any) => (event: MouseEvent) => {
125
+ rowClickHandler?.(row)
126
+ }
127
+
123
128
 
124
129
  </script>
125
130
 
@@ -141,11 +146,11 @@
141
146
  <div class="table-body-container" bind:this={viewPanel} class:auto-scroll={autoScroll}>
142
147
  <div class="table-body" style="transition: transform {autoScroll ? '2s' : '0s'} ease;">
143
148
  {#each list as row, rowIndex}
144
- <DataRow data={row} {columns} showAlternative={rowIndex % 2 == 1} on:click={rowClickHandler?.(row)}/>
149
+ <DataRow data={row} {columns} showAlternative={rowIndex % 2 == 1} on:click={handleRowClick(row)}/>
145
150
  {/each}
146
151
  {#if autoScroll && list.length > visibleRowCount}
147
152
  {#each list.slice(0, visibleRowCount) as row, rowIndex}
148
- <DataRow data={row} {columns} showAlternative={rowIndex % 2 == 1} on:click={rowClickHandler?.(row)}/>
153
+ <DataRow data={row} {columns} showAlternative={rowIndex % 2 == 1} on:click={handleRowClick(row)}/>
149
154
  {/each}
150
155
  {/if}
151
156
  </div>
@@ -1,4 +1,5 @@
1
1
  import { type RowClickHandler, type TableOptions } from "./TableOptions";
2
+ import type Column from "./Column";
2
3
  interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> = any, Events extends Record<string, any> = any, Slots extends Record<string, any> = any, Exports = {}, Bindings = string> {
3
4
  new (options: import('svelte').ComponentConstructorOptions<Props>): import('svelte').SvelteComponent<Props, Events, Slots> & {
4
5
  $$bindings?: Bindings;
@@ -8,7 +8,7 @@
8
8
  export let showAlternative: boolean;
9
9
  </script>
10
10
 
11
- <div class="table-row" class:alternative={showAlternative} on:click>
11
+ <div class="table-row" class:alternative={showAlternative} aria-hidden="true" on:click>
12
12
  {#each columns as column, idx}
13
13
  <DataCell {idx} {column} {data}/>
14
14
  {/each}
@@ -8,4 +8,4 @@ export interface TableOptions {
8
8
  alternativeColor?: string;
9
9
  rowHeight?: number;
10
10
  }
11
- export type RowClickHandler = (row: any) => (event: MouseEvent) => void;
11
+ export type RowClickHandler = (row: any) => void;
@@ -106,7 +106,7 @@
106
106
  {#if table && dataColumns && fixedCols}
107
107
  {#if indicatorColumn || fixedCols.length > 0}
108
108
  <FixedColumnsPanel {handleRowExpand} bind:selectedRows {orderDirection} {orderColumn} {handleCellClick} {indicatorColumn}
109
- bind:expandRow {table}
109
+ bind:expandRow
110
110
  {rowHeight} {fixedCols} {inlineRowHeight} {rows} {handleWidthChange} width={frozenWidth}
111
111
  bind:scrollTop/>
112
112
  {/if}
@@ -4,7 +4,7 @@
4
4
  import type ActionsColumn from "../lib/ActionsColumn";
5
5
  import type TableRow from "./TableRow";
6
6
  import {onDestroy, onMount} from "svelte";
7
- import i18n from "@ticatec/i18n";
7
+ import i18nRes from "../../i18nRes";
8
8
 
9
9
  export let actionsColumn: ActionsColumn;
10
10
  export let scrollTop: number = 0;
@@ -17,7 +17,8 @@
17
17
  export let rowHeight: number;
18
18
 
19
19
  const handleActionPanelScroll = (e: Event) => {
20
- scrollTop = e.target?.scrollTop;
20
+ const target = e.target as HTMLDivElement;
21
+ scrollTop = target.scrollTop;
21
22
  }
22
23
 
23
24
  let scrollPanel: any;
@@ -43,7 +44,7 @@
43
44
  resizeObserver.disconnect();
44
45
  });
45
46
 
46
- let actionText = i18n.getText('uniface.dataTable.actions', 'Actions');
47
+ let actionText = i18nRes.dataTable.actions;
47
48
 
48
49
  </script>
49
50
 
@@ -96,7 +96,7 @@
96
96
  onClick={()=>action.callback(row.data)}/>
97
97
  {:else}
98
98
  <TextButton style="flex-shrink: 0; top: 0" size="mini" type="{action.type ?? 'primary'}" label={action.label}
99
- onClick={()=>action.callback(row.data)}/>
99
+ onClick={async ()=>action.callback(row.data)}/>
100
100
  {/if}
101
101
  {/each}
102
102
  {#if popupList.length > 0}
@@ -111,10 +111,10 @@
111
111
  <div class="action-popover" style="padding: 4px 6px; text-align: center">
112
112
  {#if action.icon}
113
113
  <IconButton style="flex-shrink: 0; top: 0" size="mini" type="{action.type ?? 'primary'}" icon={action.icon}
114
- onClick={()=>{action.callback(row.data); showPopup=false}}/>
114
+ onClick={async ()=>{action.callback(row.data); showPopup=false}}/>
115
115
  {:else}
116
116
  <TextButton style="flex-shrink: 0; top: 0" size="mini" type="{action.type ?? 'primary'}" label={action.label}
117
- onClick={()=>{action.callback(row.data); showPopup=false}}/>
117
+ onClick={async ()=>{action.callback(row.data); showPopup=false}}/>
118
118
  {/if}
119
119
  </div>
120
120
  {/each}
@@ -57,10 +57,11 @@
57
57
  })
58
58
 
59
59
  const handleDataTableScroll = (e: Event) => {
60
+ const target = e.target as HTMLElement;
60
61
  if (showVerticalScroll) {
61
- scrollTop = e.target?.scrollTop;
62
+ scrollTop = target.scrollTop;
62
63
  }
63
- scrollLeft = e.target?.scrollLeft;
64
+ scrollLeft = target.scrollLeft;
64
65
  }
65
66
 
66
67
 
@@ -15,7 +15,6 @@
15
15
  export let width: number;
16
16
  export let scrollTop: number = 0;
17
17
  export let rows: Array<TableRow>;
18
- export let table: UniDataTable;
19
18
  export let handleWidthChange: TableEventHandler;
20
19
  export let handleRowExpand: RowEventHandler;
21
20
 
@@ -1,6 +1,6 @@
1
1
  import type TableRow from "./TableRow";
2
2
  import type { IndicatorColumn } from "..";
3
- import UniDataTable, { type RowEventHandler, type TableEventHandler } from "../UniDataTable";
3
+ import { type RowEventHandler, type TableEventHandler } from "../UniDataTable";
4
4
  import type DataColumn from "../lib/DataColumn";
5
5
  import { OrderDirection } from "../lib/OrderDirection";
6
6
  interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> = any, Events extends Record<string, any> = any, Slots extends Record<string, any> = any, Exports = {}, Bindings = string> {
@@ -22,7 +22,6 @@ declare const FixedColumnsPanel: $$__sveltets_2_IsomorphicComponent<{
22
22
  width: number;
23
23
  scrollTop?: number;
24
24
  rows: Array<TableRow>;
25
- table: UniDataTable;
26
25
  handleWidthChange: TableEventHandler;
27
26
  handleRowExpand: RowEventHandler;
28
27
  handleCellClick: (col: DataColumn) => any;
@@ -5,7 +5,7 @@
5
5
  import {type SelectionEventHandler, SelectionMode, type TableEventHandler} from "../UniDataTable";
6
6
  import utils from "../../common/utils";
7
7
  import {OrderDirection} from "../lib/OrderDirection";
8
- import i18n from "@ticatec/i18n";
8
+ import i18nRes from "../../i18nRes";
9
9
 
10
10
  export let columns: Array<DataColumn>;
11
11
  export let indicatorColumn: IndicatorColumn | null;
@@ -84,7 +84,7 @@
84
84
  {:else }
85
85
  <div style="text-align: center" class="vertical-center">
86
86
  {#if indicatorColumn.displayNo}
87
- <span>{i18n.getText('uniface.dataTable.rowNo', '#No')}</span>
87
+ <span>{i18nRes.dataTable.rowNo}</span>
88
88
  {/if}
89
89
  </div>
90
90
  {/if}
@@ -4,7 +4,8 @@
4
4
  import type {RowEventHandler, RowSelectEventHandler} from "../UniDataTable";
5
5
  import DataCell from "./DataCell.svelte";
6
6
  import type DataColumn from "../lib/DataColumn";
7
- import type {IndicatorColumn} from "../..";
7
+ import type {IndicatorColumn} from "..";
8
+
8
9
 
9
10
  export let selectable: boolean = false;
10
11
  export let rowNo: number;
@@ -1,7 +1,7 @@
1
1
  import type TableRow from "./TableRow";
2
2
  import type { RowEventHandler, RowSelectEventHandler } from "../UniDataTable";
3
3
  import type DataColumn from "../lib/DataColumn";
4
- import type { IndicatorColumn } from "../..";
4
+ import type { IndicatorColumn } from "..";
5
5
  interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> = any, Events extends Record<string, any> = any, Slots extends Record<string, any> = any, Exports = {}, Bindings = string> {
6
6
  new (options: import('svelte').ComponentConstructorOptions<Props>): import('svelte').SvelteComponent<Props, Events, Slots> & {
7
7
  $$bindings?: Bindings;
@@ -15,6 +15,27 @@
15
15
  </script>
16
16
  <div style="display: flex; flex-direction: row; gap: 8px; justify-content: center">
17
17
  {#each list as item, idx}
18
- <a href="javascript:void(0)" on:click={()=>item.action()}>{item.text}</a>
18
+ <button class="link-style" on:click|preventDefault={()=>item.action()}>{item.text}</button>
19
19
  {/each}
20
- </div>
20
+ </div>
21
+
22
+ <style>
23
+ button.link-style {
24
+ background: none;
25
+ border: none;
26
+ color: blue;
27
+ text-decoration: underline;
28
+ cursor: pointer;
29
+ font: inherit;
30
+ padding: 0;
31
+ }
32
+ button.link-style:focus {
33
+ outline: none;
34
+ }
35
+
36
+ button.link-style:active {
37
+ /* 取消默认的active边框或者阴影 */
38
+ outline: none;
39
+ box-shadow: none;
40
+ }
41
+ </style>
@@ -24,6 +24,30 @@
24
24
  }
25
25
  }
26
26
 
27
+ export function outerClick(node: HTMLElement, callback: () => void) {
28
+ const handleClick = (event: MouseEvent) => {
29
+ // 如果点击目标不在node内,则触发回调
30
+ if (!node.contains(event.target as Node)) {
31
+ callback();
32
+ }
33
+ };
34
+
35
+ // 监听全局点击事件(useCapture=true,避免事件冒泡造成的问题)
36
+ document.addEventListener('click', handleClick, true);
37
+
38
+ // 清理事件监听器
39
+ onDestroy(() => {
40
+ document.removeEventListener('click', handleClick, true);
41
+ });
42
+
43
+ // action 必须返回一个对象,可以选实现 update 和 destroy
44
+ return {
45
+ destroy() {
46
+ document.removeEventListener('click', handleClick, true);
47
+ }
48
+ };
49
+ }
50
+
27
51
  onMount(async () => {
28
52
  resizeObserver = new ResizeObserver(() => {
29
53
  checkPosition();
@@ -38,8 +62,7 @@
38
62
 
39
63
  </script>
40
64
 
41
-
42
65
  <div bind:this={panel} style="position: absolute; right: 8px; {style}; background-color: #FFFFFF; border: 1px solid #e1e1e1; z-index: 5"
43
- use:clickOutside on:outerClick={close}>
66
+ use:clickOutside use:outerClick={close}>
44
67
  <slot></slot>
45
68
  </div>
@@ -19,12 +19,19 @@ type $$__sveltets_2_PropsWithChildren<Props, Slots> = Props & (Slots extends {
19
19
  declare const PopupMenu: $$__sveltets_2_IsomorphicComponent<$$__sveltets_2_PropsWithChildren<{
20
20
  closeCallback: () => void;
21
21
  parentRect: DOMRect;
22
+ outerClick?: (node: HTMLElement, callback: () => void) => {
23
+ destroy(): void;
24
+ };
22
25
  }, {
23
26
  default: {};
24
27
  }>, {
25
28
  [evt: string]: CustomEvent<any>;
26
29
  }, {
27
30
  default: {};
28
- }, {}, string>;
31
+ }, {
32
+ outerClick: (node: HTMLElement, callback: () => void) => {
33
+ destroy(): void;
34
+ };
35
+ }, string>;
29
36
  type PopupMenu = InstanceType<typeof PopupMenu>;
30
37
  export default PopupMenu;
@@ -2,7 +2,6 @@
2
2
 
3
3
  import {onMount, tick} from "svelte";
4
4
  import {DisplayMode} from "../common/DisplayMode";
5
- import Popover from "../common/Popover.svelte";
6
5
  import dayjs from "dayjs";
7
6
  import Calendar from "../base-calendar";
8
7
  import type {OnChangeHandler} from "../common/OnChangeHandler";
@@ -9,7 +9,7 @@
9
9
  import {TextButton} from "../button";
10
10
  import type {OnChangeHandler} from "../common/OnChangeHandler";
11
11
  import CommonPicker from "../common/CommonPicker.svelte";
12
- import i18nContext from "@ticatec/i18n";
12
+ import i18nRes from "../i18nRes";
13
13
 
14
14
  export let disabled: boolean = false;
15
15
  export let readonly: boolean = false;
@@ -31,7 +31,7 @@
31
31
  }
32
32
 
33
33
 
34
- let confirmText = i18nContext.getText('uniface.calendar.confirmText');
34
+ let confirmText = i18nRes.calendar.confirmText;
35
35
  let textValue: string;
36
36
  let editor: any;
37
37
 
@@ -76,7 +76,7 @@
76
76
  }
77
77
  }
78
78
 
79
- const confirm = () => {
79
+ const confirm = async () => {
80
80
  if (dateUtils.toDayjs(value)?.toDate() != currentValue.toDate()) {
81
81
  value = currentValue;
82
82
  onChange?.(currentValue.toDate());