jsbox-cview 1.6.5 → 1.6.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (164) hide show
  1. package/README.md +4 -0
  2. package/dist/components/alert/input-alert.d.ts +22 -0
  3. package/dist/components/alert/input-alert.js +1 -2
  4. package/dist/components/alert/login-alert.d.ts +21 -0
  5. package/dist/components/alert/login-alert.js +1 -2
  6. package/dist/components/alert/plain-alert.d.ts +15 -0
  7. package/dist/components/alert/plain-alert.js +1 -2
  8. package/dist/components/alert/uialert.d.ts +29 -0
  9. package/{components/base.ts → dist/components/base.d.ts} +9 -28
  10. package/dist/components/custom-navigation-bar.d.ts +117 -0
  11. package/dist/components/custom-navigation-bar.js +7 -1
  12. package/dist/components/dialogs/dialog-sheet.d.ts +46 -0
  13. package/dist/components/dialogs/dialog-sheet.js +3 -1
  14. package/dist/components/dialogs/form-dialog.d.ts +15 -0
  15. package/dist/components/dialogs/form-dialog.js +1 -2
  16. package/dist/components/dialogs/list-dialog.d.ts +23 -0
  17. package/dist/components/dialogs/list-dialog.js +2 -3
  18. package/dist/components/dialogs/text-dialog.d.ts +13 -0
  19. package/dist/components/dialogs/text-dialog.js +1 -2
  20. package/dist/components/dynamic-contextmenu-view.d.ts +40 -0
  21. package/dist/components/dynamic-contextmenu-view.js +5 -1
  22. package/dist/components/dynamic-itemsize-matrix.d.ts +79 -0
  23. package/dist/components/dynamic-itemsize-matrix.js +18 -15
  24. package/dist/components/dynamic-itemsize-section-matrix.d.ts +115 -0
  25. package/dist/components/dynamic-itemsize-section-matrix.js +293 -0
  26. package/dist/components/dynamic-preference-listview.d.ts +63 -0
  27. package/dist/components/dynamic-preference-listview.js +25 -16
  28. package/dist/components/dynamic-rowheight-list.d.ts +38 -0
  29. package/dist/components/dynamic-rowheight-list.js +10 -3
  30. package/dist/components/enhanced-imageview.d.ts +41 -0
  31. package/dist/components/enhanced-imageview.js +1 -1
  32. package/dist/components/flowlayout.d.ts +63 -0
  33. package/dist/components/flowlayout.js +10 -13
  34. package/dist/components/image-pager.d.ts +49 -0
  35. package/dist/components/image-pager.js +6 -1
  36. package/dist/components/oc-webview.d.ts +64 -0
  37. package/dist/components/oc-webview.js +13 -5
  38. package/dist/components/page-control.d.ts +45 -0
  39. package/dist/components/page-control.js +2 -13
  40. package/dist/components/pageviewer-titlebar.d.ts +48 -0
  41. package/dist/components/pageviewer-titlebar.js +7 -13
  42. package/dist/components/pageviewer.d.ts +41 -0
  43. package/dist/components/pageviewer.js +4 -1
  44. package/dist/components/refresh-button.d.ts +25 -0
  45. package/dist/components/refresh-button.js +3 -4
  46. package/dist/components/rotating-view.d.ts +45 -0
  47. package/dist/components/rotating-view.js +10 -2
  48. package/dist/components/searchbar.d.ts +118 -0
  49. package/dist/components/searchbar.js +8 -1
  50. package/dist/components/sheet.d.ts +42 -0
  51. package/dist/components/single-views.d.ts +289 -0
  52. package/dist/components/single-views.js +11 -4
  53. package/dist/components/spinners/loading-dual-ring.d.ts +18 -0
  54. package/dist/components/spinners/loading-wedges.d.ts +15 -0
  55. package/dist/components/spinners/spinner-androidstyle.d.ts +30 -0
  56. package/dist/components/spinners/spinner-androidstyle.js +7 -1
  57. package/dist/components/static-preference-listview.d.ts +389 -0
  58. package/dist/components/static-preference-listview.js +13 -10
  59. package/dist/components/symbol-button.d.ts +39 -0
  60. package/dist/components/symbol-button.js +8 -1
  61. package/dist/components/tabbar.d.ts +140 -0
  62. package/dist/components/tabbar.js +8 -1
  63. package/dist/controller/base-controller.d.ts +125 -0
  64. package/dist/controller/base-controller.js +11 -11
  65. package/dist/controller/controller-router.d.ts +48 -0
  66. package/dist/controller/pageviewer-controller.d.ts +38 -0
  67. package/dist/controller/pageviewer-controller.js +4 -1
  68. package/dist/controller/presented-page-controller.d.ts +41 -0
  69. package/dist/controller/presented-page-controller.js +7 -9
  70. package/dist/controller/splitview-controller.d.ts +90 -0
  71. package/dist/controller/splitview-controller.js +27 -11
  72. package/dist/controller/tabbar-controller.d.ts +49 -0
  73. package/dist/controller/tabbar-controller.js +12 -15
  74. package/{index.ts → dist/index.d.ts} +2 -0
  75. package/dist/index.js +2 -0
  76. package/dist/utils/colors.d.ts +7 -0
  77. package/dist/utils/cvid.d.ts +11 -0
  78. package/dist/utils/l10n.d.ts +1 -0
  79. package/dist/utils/l10n.js +1 -2
  80. package/dist/utils/path.d.ts +8 -0
  81. package/dist/utils/path.js +8 -9
  82. package/dist/utils/rect.d.ts +38 -0
  83. package/dist/utils/rect.js +8 -9
  84. package/dist/utils/uitools.d.ts +75 -0
  85. package/dist/utils/uitools.js +6 -6
  86. package/package.json +20 -5
  87. package/.prettierignore +0 -6
  88. package/.prettierrc +0 -3
  89. package/components/alert/input-alert.ts +0 -64
  90. package/components/alert/login-alert.ts +0 -66
  91. package/components/alert/plain-alert.ts +0 -39
  92. package/components/alert/uialert.ts +0 -107
  93. package/components/custom-navigation-bar.ts +0 -579
  94. package/components/dialogs/dialog-sheet.ts +0 -111
  95. package/components/dialogs/form-dialog.ts +0 -63
  96. package/components/dialogs/list-dialog.ts +0 -119
  97. package/components/dialogs/text-dialog.ts +0 -44
  98. package/components/dynamic-contextmenu-view.ts +0 -115
  99. package/components/dynamic-itemsize-matrix.ts +0 -206
  100. package/components/dynamic-preference-listview.ts +0 -684
  101. package/components/dynamic-rowheight-list.ts +0 -77
  102. package/components/enhanced-imageview.ts +0 -132
  103. package/components/flowlayout.ts +0 -248
  104. package/components/image-pager.ts +0 -180
  105. package/components/oc-webview.ts +0 -177
  106. package/components/page-control.ts +0 -93
  107. package/components/pageviewer-titlebar.ts +0 -166
  108. package/components/pageviewer.ts +0 -125
  109. package/components/refresh-button.ts +0 -83
  110. package/components/rotating-view.ts +0 -133
  111. package/components/searchbar.ts +0 -398
  112. package/components/sheet.ts +0 -104
  113. package/components/single-views.ts +0 -956
  114. package/components/spinners/loading-dual-ring.ts +0 -97
  115. package/components/spinners/loading-wedges.ts +0 -106
  116. package/components/spinners/spinner-androidstyle.ts +0 -269
  117. package/components/static-preference-listview.ts +0 -1282
  118. package/components/symbol-button.ts +0 -108
  119. package/components/tabbar.ts +0 -453
  120. package/controller/base-controller.ts +0 -214
  121. package/controller/controller-router.ts +0 -73
  122. package/controller/pageviewer-controller.ts +0 -93
  123. package/controller/presented-page-controller.ts +0 -76
  124. package/controller/splitview-controller.ts +0 -359
  125. package/controller/tabbar-controller.ts +0 -131
  126. package/dist/test/custom-navigation-bar.js +0 -40
  127. package/dist/test/dialog-sheet.js +0 -40
  128. package/dist/test/dynamic-contextmenu-view.js +0 -66
  129. package/dist/test/dynamic-itemsize-matrix.js +0 -74
  130. package/dist/test/dynamic-preference-listview.js +0 -150
  131. package/dist/test/flowlayout.js +0 -76
  132. package/dist/test/form-dialog.js +0 -51
  133. package/dist/test/oc-webview.js +0 -195
  134. package/dist/test/pageviewer-controller.js +0 -20
  135. package/dist/test/pageviewer-titlebar.js +0 -18
  136. package/dist/test/pageviewer.js +0 -32
  137. package/dist/test/refresh-button.js +0 -26
  138. package/dist/test/searchbar.js +0 -36
  139. package/dist/test/splitview-controller.js +0 -41
  140. package/dist/test/static-preference-listview.js +0 -143
  141. package/dist/test/tabbar-controller.js +0 -48
  142. package/test/custom-navigation-bar.ts +0 -40
  143. package/test/dialog-sheet.ts +0 -40
  144. package/test/dynamic-contextmenu-view.ts +0 -67
  145. package/test/dynamic-itemsize-matrix.ts +0 -74
  146. package/test/dynamic-preference-listview.ts +0 -151
  147. package/test/flowlayout.ts +0 -79
  148. package/test/form-dialog.ts +0 -48
  149. package/test/oc-webview.ts +0 -197
  150. package/test/pageviewer-controller.ts +0 -21
  151. package/test/pageviewer-titlebar.ts +0 -18
  152. package/test/pageviewer.ts +0 -31
  153. package/test/refresh-button.ts +0 -26
  154. package/test/searchbar.ts +0 -38
  155. package/test/splitview-controller.ts +0 -42
  156. package/test/static-preference-listview.ts +0 -142
  157. package/test/tabbar-controller.ts +0 -49
  158. package/tsconfig.json +0 -122
  159. package/utils/colors.ts +0 -17
  160. package/utils/cvid.ts +0 -32
  161. package/utils/l10n.ts +0 -42
  162. package/utils/path.ts +0 -97
  163. package/utils/rect.ts +0 -90
  164. package/utils/uitools.ts +0 -122
@@ -0,0 +1,41 @@
1
+ import { Base } from "./base";
2
+ /**
3
+ * 此组件是为了加强 imageView,实现以下目的:
4
+ * 1. 点击实现上下翻页
5
+ * 2. 双指放大缩小(但不可以双击放大缩小)
6
+ *
7
+ * 请注意:此组件使用了Runtime代码重新设置了Tapped事件。
8
+ * 与以前使用touchesEnded事件来实现相比,可以避免在滑动手指时误触发。
9
+ * 但因此带来了副作用:必须在关闭前通过releaseGestureObject释放掉此视图中自定义的NSObject,
10
+ * 否则再次启动可能会有问题。
11
+ *
12
+ * Props:
13
+ * src: string, 图片地址
14
+ * maxZoomScale: number, 最大缩放倍数,默认为2
15
+ *
16
+ * Events:
17
+ * upperLocationTouched: (sender: EnhancedImageView) => void, 上半部分被点击
18
+ * lowerLocationTouched: (sender: EnhancedImageView) => void, 下半部分被点击
19
+ */
20
+ export declare class EnhancedImageView extends Base<UIView, UiTypes.ViewOptions> {
21
+ private _props;
22
+ private _scroll;
23
+ private _gestureObject;
24
+ _defineView: () => UiTypes.ViewOptions;
25
+ constructor({ props, layout, events, }: {
26
+ props: {
27
+ src: string;
28
+ maxZoomScale?: number;
29
+ };
30
+ layout: (make: MASConstraintMaker, view: UIView) => void;
31
+ events?: {
32
+ upperLocationTouched?: (sender: EnhancedImageView) => void;
33
+ lowerLocationTouched?: (sender: EnhancedImageView) => void;
34
+ };
35
+ });
36
+ private _addGesture;
37
+ releaseGestureObject(): void;
38
+ get src(): string;
39
+ set src(src: string);
40
+ get image(): UIImage;
41
+ }
@@ -25,7 +25,7 @@ const cvid_1 = require("../utils/cvid");
25
25
  class EnhancedImageView extends base_1.Base {
26
26
  constructor({ props, layout, events = {}, }) {
27
27
  super();
28
- this._props = Object.assign({ maxZoomScale: 2 }, props);
28
+ this._props = { maxZoomScale: 2, ...props };
29
29
  this._scroll = new single_views_1.Scroll({
30
30
  props: {
31
31
  zoomEnabled: true,
@@ -0,0 +1,63 @@
1
+ import { Base } from "./base";
2
+ /**
3
+ * 流式布局:间距固定,项目高度固定但宽度不定,左对齐,自动换行,不能滚动。
4
+ *
5
+ * 注意事项:
6
+ * 1. 此控件默认是可变高度的,但前提是布局中必须有关于高度的约束。
7
+ * 如果不需要可变高度,可以设置fixedHeight为true
8
+ * 1. 此控件的边缘是不留白的,这和Matrix不同
9
+ * 2. itemWidth 如果超过总宽度,会被设定为总宽度
10
+ * 3. maxRows 可以控制最大行数,如果超过则会被截断
11
+ *
12
+ * ## 属性
13
+ * 属性的写法尽可能和Matrix的风格保持一致
14
+ * - items: FlowlayoutItem[] 关键参数,必须实现一个方法itemWidth(): number, 用于告知自身理想的宽度
15
+ * - spacing: number
16
+ * - itemHeight: number
17
+ * - maxRows?: number
18
+ * - fixedHeight?: boolean
19
+ * - menu?: UiTypes.ContextMenuOptions
20
+ * - bgcolor?: UIColor
21
+ *
22
+ * ## 事件
23
+ * - didSelect: (sender: Flowlayout, index: number, item: FlowlayoutItem) => void
24
+ * - didLongPress: (sender: Flowlayout, index: number, item: FlowlayoutItem) => void
25
+ *
26
+ * ## 方法
27
+ * - heightToWidth(width: number): height: number 根据宽度计算其应有的高度
28
+ * - cell(index: number): FlowlayoutItem 获取对应位置的 cview
29
+ * - set items(items: FlowlayoutItem[]) 设置子视图
30
+ * - get items(): FlowlayoutItem[] 获取子视图
31
+ */
32
+ export declare class Flowlayout<T extends FlowlayoutItem> extends Base<UIView, UiTypes.ViewOptions> {
33
+ private _width;
34
+ private _props;
35
+ private _wrappers;
36
+ private _events?;
37
+ _defineView: () => UiTypes.ViewOptions;
38
+ constructor({ props, layout, events, }: {
39
+ props: {
40
+ items: T[];
41
+ spacing: number;
42
+ itemHeight: number;
43
+ fixedRows?: number;
44
+ fixedHeight?: boolean;
45
+ menu?: UiTypes.ContextMenuOptions<UIView>;
46
+ bgcolor?: UIColor;
47
+ };
48
+ layout: (make: MASConstraintMaker, view: UIView) => void;
49
+ events?: {
50
+ didSelect?: (sender: Flowlayout<T>, index: number, item: T) => void;
51
+ didLongPress?: (sender: Flowlayout<T>, index: number, item: T) => void;
52
+ };
53
+ });
54
+ cell(index: number): T;
55
+ get items(): T[];
56
+ set items(items: T[]);
57
+ _layoutWrappers(): number;
58
+ heightToWidth(width: number): number;
59
+ }
60
+ interface FlowlayoutItem extends Base<any, any> {
61
+ itemWidth: () => number;
62
+ }
63
+ export {};
@@ -41,8 +41,8 @@ class Flowlayout extends base_1.Base {
41
41
  this._wrappers = props.items.map((item, index) => new WrapperView({
42
42
  item,
43
43
  menu: props.menu,
44
- didSelect: events === null || events === void 0 ? void 0 : events.didSelect,
45
- didLongPress: events === null || events === void 0 ? void 0 : events.didLongPress,
44
+ didSelect: events?.didSelect,
45
+ didLongPress: events?.didLongPress,
46
46
  flowlayout: this,
47
47
  index,
48
48
  }));
@@ -74,17 +74,14 @@ class Flowlayout extends base_1.Base {
74
74
  }
75
75
  set items(items) {
76
76
  this._props.items = items;
77
- this._wrappers = items.map((item, index) => {
78
- var _a, _b;
79
- return new WrapperView({
80
- item,
81
- menu: this._props.menu,
82
- didSelect: (_a = this._events) === null || _a === void 0 ? void 0 : _a.didSelect,
83
- didLongPress: (_b = this._events) === null || _b === void 0 ? void 0 : _b.didLongPress,
84
- flowlayout: this,
85
- index,
86
- });
87
- });
77
+ this._wrappers = items.map((item, index) => new WrapperView({
78
+ item,
79
+ menu: this._props.menu,
80
+ didSelect: this._events?.didSelect,
81
+ didLongPress: this._events?.didLongPress,
82
+ flowlayout: this,
83
+ index,
84
+ }));
88
85
  this.view.views.forEach((v) => v.remove());
89
86
  this._wrappers.forEach((wrapper) => this.view.add(wrapper.definition));
90
87
  const height = this._layoutWrappers();
@@ -0,0 +1,49 @@
1
+ import { Base } from "./base";
2
+ import { Matrix } from "./single-views";
3
+ /**
4
+ * 图片浏览组件
5
+ *
6
+ * 与内置的Gallery组件相比,ImagePager组件可以动态刷新,
7
+ * 适用于图片数量较多的场景,以及需要动态加载图片列表的场景
8
+ *
9
+ */
10
+ export declare class ImagePager extends Base<UIView, UiTypes.ViewOptions> {
11
+ _props: {
12
+ srcs: string[];
13
+ page: number;
14
+ doubleTapToZoom: boolean;
15
+ };
16
+ _matrix: Matrix;
17
+ _pageLoadRecorder: {
18
+ [key: number]: boolean;
19
+ };
20
+ _defineView: () => UiTypes.ViewOptions;
21
+ /**
22
+ *
23
+ * @param props
24
+ * - srcs: string[] - 图片地址列表
25
+ * - page: number - 当前页码
26
+ * - doubleTapToZoom: boolean - 是否双击放大,默认为true
27
+ * @param layout
28
+ * @param events
29
+ * - changed: (page: number) => void - 页码变化时触发
30
+ * - tapped: (sender: ImagePager) => void - 点击图片时触发
31
+ */
32
+ constructor({ props, layout, events, }: {
33
+ props: {
34
+ srcs?: string[];
35
+ page?: number;
36
+ doubleTapToZoom?: boolean;
37
+ };
38
+ layout: (make: MASConstraintMaker, view: UIView) => void;
39
+ events: {
40
+ changed?: (page: number) => void;
41
+ tapped?: (sender: ImagePager) => void;
42
+ };
43
+ });
44
+ loadsrc(page: number, forced?: boolean): void;
45
+ get page(): number;
46
+ get currentImage(): UIImage | undefined;
47
+ set page(page: number);
48
+ scrollToPage(page: number): void;
49
+ }
@@ -24,7 +24,12 @@ class ImagePager extends base_1.Base {
24
24
  */
25
25
  constructor({ props, layout, events = {}, }) {
26
26
  super();
27
- this._props = Object.assign({ srcs: [], page: 0, doubleTapToZoom: true }, props);
27
+ this._props = {
28
+ srcs: [],
29
+ page: 0,
30
+ doubleTapToZoom: true,
31
+ ...props,
32
+ };
28
33
  this._pageLoadRecorder = {};
29
34
  this._matrix = new single_views_1.Matrix({
30
35
  props: {
@@ -0,0 +1,64 @@
1
+ import { Base } from "./base";
2
+ /**
3
+ * # OCWebView
4
+ *
5
+ * 通过OC Runtime构建的Web视图,该控件是为了解决UIWebView无法通过CloudFlare人机检测的问题
6
+ * (TIPS:推测JSBox的网页视图实际上运行在一个iframe中,所以会出现该问题)
7
+ *
8
+ * ## Argumnets
9
+ *
10
+ * props:
11
+ * - url: string
12
+ *
13
+ * layout
14
+ *
15
+ * events:
16
+ * - didStart?: (sender: any) => void;
17
+ * - didFinish?: (sender: any) => void;
18
+ * - didFail?: (sender: any, error: NSError | null) => void;
19
+ *
20
+ * events中sender的any类型实际为WKWebView OC类型
21
+ *
22
+ * ## Methods
23
+ *
24
+ * - url
25
+ * - canGoBack
26
+ * - canGoForward
27
+ * - goBack()
28
+ * - goForward()
29
+ * - stopLoading()
30
+ * - reload()
31
+ * - evaluateJavaScript(script)
32
+ *
33
+ */
34
+ export declare class OCWebView extends Base<UIView, UiTypes.RuntimeOptions> {
35
+ _defineView: () => UiTypes.RuntimeOptions;
36
+ webView: any;
37
+ private _originUrl;
38
+ constructor({ props, layout, events, }: {
39
+ props: {
40
+ url: string;
41
+ };
42
+ events: {
43
+ didStart?: (sender: any) => void;
44
+ didFinish?: (sender: any) => void;
45
+ didFail?: (sender: any, error: NSError | null) => void;
46
+ };
47
+ layout: (make: MASConstraintMaker, view: UIView) => void;
48
+ });
49
+ get url(): string;
50
+ set url(urlStr: string);
51
+ get title(): string;
52
+ get canGoBack(): boolean;
53
+ get canGoForward(): boolean;
54
+ goBack(): void;
55
+ goForward(): void;
56
+ stopLoading(): void;
57
+ reload(): void;
58
+ reloadFromOrigin(): void;
59
+ exec<T = any>(script: string): Promise<T>;
60
+ eval({ script, handler }: {
61
+ script: string;
62
+ handler: (result: any, error?: NSError) => void;
63
+ }): void;
64
+ }
@@ -42,6 +42,7 @@ class OCWebView extends base_1.Base {
42
42
  config.invoke("setWebsiteDataStore:", $objc("WKWebsiteDataStore").invoke("defaultDataStore"));
43
43
  const webView = $objc("WKWebView").invoke("alloc.initWithFrame:configuration:", $rect(0, 0, 0, 0), config);
44
44
  this.webView = webView;
45
+ this._originUrl = props.url;
45
46
  this._defineView = () => {
46
47
  return {
47
48
  type: "runtime",
@@ -85,6 +86,11 @@ class OCWebView extends base_1.Base {
85
86
  const nsurl = this.webView.invoke("URL");
86
87
  return nsurl ? nsurl.invoke("absoluteString").rawValue() : "";
87
88
  }
89
+ set url(urlStr) {
90
+ const url = $objc("NSURL").invoke("URLWithString:", urlStr);
91
+ const req = $objc("NSURLRequest").invoke("requestWithURL:", url);
92
+ this.webView.invoke("loadRequest:", req);
93
+ }
88
94
  get title() {
89
95
  const title = this.webView.invoke("title");
90
96
  return title ? title.rawValue() : "";
@@ -109,7 +115,10 @@ class OCWebView extends base_1.Base {
109
115
  reload() {
110
116
  this.webView.invoke("reload");
111
117
  }
112
- evaluateJavaScript(script) {
118
+ reloadFromOrigin() {
119
+ this.url = this._originUrl;
120
+ }
121
+ exec(script) {
113
122
  return new Promise((resolve, reject) => {
114
123
  this.webView.invoke("evaluateJavaScript:completionHandler:", script, $block("void, id, NSError *", (result, error) => {
115
124
  const jsError = error ? error.jsValue() : null;
@@ -125,13 +134,12 @@ class OCWebView extends base_1.Base {
125
134
  resolve(result.jsValue());
126
135
  return;
127
136
  }
128
- if (typeof result.rawValue === "function") {
129
- resolve(result.rawValue());
130
- return;
131
- }
132
137
  resolve(result);
133
138
  }));
134
139
  });
135
140
  }
141
+ eval({ script, handler }) {
142
+ this.exec(script).then((result) => handler(result), (error) => handler(undefined, error));
143
+ }
136
144
  }
137
145
  exports.OCWebView = OCWebView;
@@ -0,0 +1,45 @@
1
+ import { Runtime } from "./single-views";
2
+ /**
3
+ *
4
+ * 基于 Runtime 构建 PageControl
5
+ *
6
+ * 请注意本视图如果没有足够的横向宽度,会显示不全
7
+ *
8
+ * @property currentPage: number
9
+ *
10
+ */
11
+ export declare class PageControl extends Runtime {
12
+ private _numberOfPages;
13
+ private _currentPage;
14
+ private _pageIndicatorTintColor?;
15
+ private _currentPageIndicatorTintColor?;
16
+ private _changed?;
17
+ private _pageControl;
18
+ /**
19
+ *
20
+ * @param props 属性
21
+ * - numberOfPages: 页面数量
22
+ * - currentPage: 当前页面
23
+ * - pageIndicatorTintColor?: 页面指示器颜色
24
+ * - currentPageIndicatorTintColor?: 当前页面指示器颜色
25
+ * @param layout 布局
26
+ * @param events 事件
27
+ * - changed: (sender: PageControl, currentPage: number) => void
28
+ *
29
+ */
30
+ constructor({ props, layout, events, }: {
31
+ props: {
32
+ numberOfPages?: number;
33
+ currentPage?: number;
34
+ pageIndicatorTintColor?: UIColor;
35
+ currentPageIndicatorTintColor?: UIColor;
36
+ };
37
+ layout: (make: MASConstraintMaker, view: UIView) => void;
38
+ events?: {
39
+ changed?: (sender: PageControl, currentPage: number) => void;
40
+ };
41
+ });
42
+ _createPageControl(): any;
43
+ get currentPage(): number;
44
+ set currentPage(num: number);
45
+ }
@@ -1,15 +1,4 @@
1
1
  "use strict";
2
- var __rest = (this && this.__rest) || function (s, e) {
3
- var t = {};
4
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
5
- t[p] = s[p];
6
- if (s != null && typeof Object.getOwnPropertySymbols === "function")
7
- for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
8
- if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
9
- t[p[i]] = s[p[i]];
10
- }
11
- return t;
12
- };
13
2
  Object.defineProperty(exports, "__esModule", { value: true });
14
3
  exports.PageControl = void 0;
15
4
  const single_views_1 = require("./single-views");
@@ -36,8 +25,8 @@ class PageControl extends single_views_1.Runtime {
36
25
  *
37
26
  */
38
27
  constructor({ props, layout, events = {}, }) {
39
- const { numberOfPages = 3, currentPage = 0, pageIndicatorTintColor, currentPageIndicatorTintColor } = props, restProps = __rest(props, ["numberOfPages", "currentPage", "pageIndicatorTintColor", "currentPageIndicatorTintColor"]);
40
- const { changed } = events, restEvents = __rest(events, ["changed"]);
28
+ const { numberOfPages = 3, currentPage = 0, pageIndicatorTintColor, currentPageIndicatorTintColor, ...restProps } = props;
29
+ const { changed, ...restEvents } = events;
41
30
  super({ props: restProps, layout, events: restEvents });
42
31
  this._numberOfPages = numberOfPages;
43
32
  this._currentPage = currentPage;
@@ -0,0 +1,48 @@
1
+ import { Base } from "./base";
2
+ import { ContentView, Label, Stack } from "./single-views";
3
+ interface PageViewerTitleBarProps {
4
+ items: string[];
5
+ index?: number;
6
+ selectedItemColor?: UIColor;
7
+ defaultItemColor?: UIColor;
8
+ }
9
+ interface PageViewerTitleBarEvents extends UiTypes.BaseViewEvents {
10
+ changed?: (cview: PageViewerTitleBar, index: number) => void;
11
+ }
12
+ /**
13
+ * [PageViewer](./pageviewer.ts)配套的标题栏
14
+ * @property index: number
15
+ */
16
+ export declare class PageViewerTitleBar extends Base<UIView, UiTypes.ViewOptions> {
17
+ private _props;
18
+ private _floatedIndex;
19
+ private _lineStartLocationPercentage;
20
+ labels: Label[];
21
+ stack: Stack;
22
+ placeholderView: ContentView;
23
+ line: ContentView;
24
+ _defineView: () => UiTypes.ViewOptions;
25
+ /**
26
+ *
27
+ * @param props 属性
28
+ * - items: string[]
29
+ * - index: number
30
+ * - selectedItemColor
31
+ * - defaultItemColor
32
+ * @param layout 布局
33
+ * @param events 事件
34
+ * - changed: (cview, index) => void 在点击变更 index 的时候回调
35
+ */
36
+ constructor({ props, layout, events, }: {
37
+ props: PageViewerTitleBarProps;
38
+ layout: (make: MASConstraintMaker, view: UIView) => void;
39
+ events: PageViewerTitleBarEvents;
40
+ });
41
+ get lineStartLocationPercentage(): number;
42
+ set lineStartLocationPercentage(percent: number);
43
+ get floatedIndex(): number;
44
+ set floatedIndex(floatedIndex: number);
45
+ get index(): number;
46
+ set index(index: number);
47
+ }
48
+ export {};
@@ -1,15 +1,4 @@
1
1
  "use strict";
2
- var __rest = (this && this.__rest) || function (s, e) {
3
- var t = {};
4
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
5
- t[p] = s[p];
6
- if (s != null && typeof Object.getOwnPropertySymbols === "function")
7
- for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
8
- if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
9
- t[p[i]] = s[p[i]];
10
- }
11
- return t;
12
- };
13
2
  Object.defineProperty(exports, "__esModule", { value: true });
14
3
  exports.PageViewerTitleBar = void 0;
15
4
  const base_1 = require("./base");
@@ -38,8 +27,13 @@ class PageViewerTitleBar extends base_1.Base {
38
27
  */
39
28
  constructor({ props, layout, events = {}, }) {
40
29
  super();
41
- this._props = Object.assign({ index: 0, selectedItemColor: $color("systemLink"), defaultItemColor: $color("secondaryText") }, props);
42
- const { changed } = events, restEvents = __rest(events, ["changed"]);
30
+ this._props = {
31
+ index: 0,
32
+ selectedItemColor: $color("systemLink"),
33
+ defaultItemColor: $color("secondaryText"),
34
+ ...props,
35
+ };
36
+ const { changed, ...restEvents } = events;
43
37
  this._floatedIndex = this._props.index;
44
38
  this._lineStartLocationPercentage = this._floatedIndex / this._props.items.length;
45
39
  this.labels = this._props.items.map((n, i) => {
@@ -0,0 +1,41 @@
1
+ import { Base } from "./base";
2
+ import { Scroll } from "./single-views";
3
+ /**
4
+ * 与JSBox内置的Gallery功能类似,但是效果更好,可以伴随翻页实现联动效果
5
+ * 参见[pageviewer-titlebar.ts](./pageviewer-titlebar.ts)
6
+ *
7
+ * @property page: number 当前页码(无动画效果)
8
+ * @method scrollToPage(page: number) 滚动到某一页(带有动画效果)
9
+ */
10
+ export declare class PageViewer extends Base<UIView, UiTypes.ViewOptions> {
11
+ private _props;
12
+ private _events;
13
+ private _pageWidth;
14
+ private _floatPage;
15
+ scroll: Scroll;
16
+ _defineView: () => UiTypes.ViewOptions;
17
+ /**
18
+ *
19
+ * @param props 属性
20
+ * - page: number
21
+ * - cviews: Base<any, any>[]
22
+ * @param layout 布局
23
+ * @param events 事件
24
+ * - changed: (cview, page) => void 页面改变时回调
25
+ * - floatPageChanged: (cview, floatPage) => void 滚动时回调(用于绑定其他联合滚动的控件)
26
+ */
27
+ constructor({ props, layout, events, }: {
28
+ props: {
29
+ page?: number;
30
+ cviews: Base<any, any>[];
31
+ };
32
+ layout: (make: MASConstraintMaker, view: UIView) => void;
33
+ events: {
34
+ changed?: (cview: PageViewer, page: number) => void;
35
+ floatPageChanged?: (cview: PageViewer, floatPage: number) => void;
36
+ };
37
+ });
38
+ get page(): number;
39
+ set page(page: number);
40
+ scrollToPage(page: number): void;
41
+ }
@@ -23,7 +23,10 @@ class PageViewer extends base_1.Base {
23
23
  */
24
24
  constructor({ props, layout, events = {}, }) {
25
25
  super();
26
- this._props = Object.assign({ page: 0 }, props);
26
+ this._props = {
27
+ page: 0,
28
+ ...props,
29
+ };
27
30
  this._events = events;
28
31
  this._pageWidth = 0;
29
32
  this._floatPage = this._props.page;
@@ -0,0 +1,25 @@
1
+ import { Base } from "./base";
2
+ /**
3
+ * 创建一个刷新按钮,平时显示一个刷新的symbol,刷新时显示一个loading的symbol
4
+ * props:
5
+ * - tintColor
6
+ * - enabled
7
+ * - hidden
8
+ * events:
9
+ * - tapped
10
+ */
11
+ export declare class RefreshButton extends Base<UIButtonView, UiTypes.ButtonOptions> {
12
+ _defineView: () => UiTypes.ButtonOptions;
13
+ _loading: boolean;
14
+ constructor({ props, layout, events, }: {
15
+ props?: {
16
+ tintColor?: UIColor;
17
+ enabled?: boolean;
18
+ hidden?: boolean;
19
+ };
20
+ layout?: (make: MASConstraintMaker, view: UIButtonView) => void;
21
+ events?: UiTypes.BaseViewEvents<UIButtonView>;
22
+ });
23
+ get loading(): boolean;
24
+ set loading(value: boolean);
25
+ }
@@ -17,14 +17,13 @@ class RefreshButton extends base_1.Base {
17
17
  this._loading = false;
18
18
  this._layout = layout;
19
19
  this._defineView = () => {
20
- var _a, _b, _c;
21
20
  return {
22
21
  type: "button",
23
22
  props: {
24
23
  id: this.id,
25
24
  bgcolor: $color("clear"),
26
- enabled: (_a = props === null || props === void 0 ? void 0 : props.enabled) !== null && _a !== void 0 ? _a : true,
27
- hidden: (_b = props === null || props === void 0 ? void 0 : props.hidden) !== null && _b !== void 0 ? _b : false,
25
+ enabled: props?.enabled ?? true,
26
+ hidden: props?.hidden ?? false,
28
27
  },
29
28
  layout: this._layout,
30
29
  events,
@@ -34,7 +33,7 @@ class RefreshButton extends base_1.Base {
34
33
  props: {
35
34
  id: this.id + "_image",
36
35
  symbol: "arrow.clockwise",
37
- tintColor: (_c = props === null || props === void 0 ? void 0 : props.tintColor) !== null && _c !== void 0 ? _c : $color("primaryText"),
36
+ tintColor: props?.tintColor ?? $color("primaryText"),
38
37
  contentMode: 1,
39
38
  hidden: this._loading,
40
39
  },
@@ -0,0 +1,45 @@
1
+ import { Base } from "./base";
2
+ interface RotatingViewProps {
3
+ image?: UIImage;
4
+ tintColor?: UIColor;
5
+ contentMode?: number;
6
+ cview?: Base<any, any>;
7
+ rps?: number;
8
+ clockwise?: boolean;
9
+ }
10
+ /**
11
+ * 创建一个可以旋转的视图。理论上来说,这个视图的布局必须是方形的。
12
+ *
13
+ * @method startRotating() 开始旋转
14
+ * @method stopRotating() 结束旋转,请注意旋转是不能立即结束的,必须等到动画归位
15
+ */
16
+ export declare class RotatingView extends Base<UIView, UiTypes.ViewOptions> {
17
+ private _props;
18
+ private _rotatingFlag;
19
+ private _innerView;
20
+ _defineView: () => UiTypes.ViewOptions;
21
+ /**
22
+ *
23
+ * @param props 属性
24
+ * - image: UIImage
25
+ * - tintColor: UIColor
26
+ * - contentMode = 1
27
+ * - cview 使用自定义的cview,如果设置上面三项将失效
28
+ * - rps = 0.5 每秒转多少圈
29
+ * - clockwise = true 是否顺时针旋转
30
+ * @param layout 布局
31
+ * @param events 事件
32
+ * - ready?: (cview: RotatingView) => void 默认的ready事件是自动开始旋转;也可以手动指定其他效果
33
+ */
34
+ constructor({ props, layout, events, }: {
35
+ props: RotatingViewProps;
36
+ layout: (make: MASConstraintMaker, view: UIView) => void;
37
+ events: {
38
+ ready?: (cview: RotatingView) => void;
39
+ };
40
+ });
41
+ startRotating(): void;
42
+ stopRotating(): void;
43
+ _rotateView(view: AllUIView): void;
44
+ }
45
+ export {};
@@ -25,7 +25,12 @@ class RotatingView extends base_1.Base {
25
25
  */
26
26
  constructor({ props, layout, events = {}, }) {
27
27
  super();
28
- this._props = Object.assign({ contentMode: 1, rps: 0.5, clockwise: true }, props);
28
+ this._props = {
29
+ contentMode: 1,
30
+ rps: 0.5,
31
+ clockwise: true,
32
+ ...props,
33
+ };
29
34
  this._rotatingFlag = false;
30
35
  if (this._props.cview) {
31
36
  this._innerView = this._props.cview;
@@ -45,7 +50,10 @@ class RotatingView extends base_1.Base {
45
50
  this._defineView = () => {
46
51
  return {
47
52
  type: "view",
48
- props: Object.assign(Object.assign({}, this._props), { id: this.id }),
53
+ props: {
54
+ ...this._props,
55
+ id: this.id,
56
+ },
49
57
  layout,
50
58
  events: {
51
59
  ready: (sender) => {