jpf 4.0.2 → 4.0.4

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 (135) hide show
  1. package/dist/View.d.ts +5 -2
  2. package/dist/View.js +5 -0
  3. package/dist/View.js.map +1 -1
  4. package/dist/ViewModel.d.ts +6 -12
  5. package/dist/ViewModel.js +47 -64
  6. package/dist/ViewModel.js.map +1 -1
  7. package/dist/attributes.d.ts +8 -0
  8. package/dist/controls/JsonFormatter/Json.d.ts +27 -0
  9. package/dist/controls/JsonFormatter/Json.js +72 -0
  10. package/dist/controls/JsonFormatter/Json.js.map +1 -0
  11. package/dist/controls/codeMirror/HtmlEditor.d.ts +15 -0
  12. package/dist/controls/codeMirror/HtmlEditor.js +127 -0
  13. package/dist/controls/codeMirror/HtmlEditor.js.map +1 -0
  14. package/dist/controls/codeMirror/JsonEditor.d.ts +15 -0
  15. package/dist/controls/codeMirror/JsonEditor.js +111 -0
  16. package/dist/controls/codeMirror/JsonEditor.js.map +1 -0
  17. package/dist/controls/html/Button.d.ts +15 -0
  18. package/dist/controls/html/Button.js +48 -0
  19. package/dist/controls/html/Button.js.map +1 -0
  20. package/dist/controls/html/Div.d.ts +10 -0
  21. package/dist/controls/html/Div.js +17 -0
  22. package/dist/controls/html/Div.js.map +1 -0
  23. package/dist/controls/html/Image.d.ts +7 -0
  24. package/dist/controls/html/Image.js +16 -0
  25. package/dist/controls/html/Image.js.map +1 -0
  26. package/dist/controls/html/Input.d.ts +43 -0
  27. package/dist/controls/html/Input.js +179 -0
  28. package/dist/controls/html/Input.js.map +1 -0
  29. package/dist/controls/html/Select.d.ts +27 -0
  30. package/dist/controls/html/Select.js +116 -0
  31. package/dist/controls/html/Select.js.map +1 -0
  32. package/dist/controls/html/Span.d.ts +7 -0
  33. package/dist/controls/html/Span.js +16 -0
  34. package/dist/controls/html/Span.js.map +1 -0
  35. package/dist/controls/kendo/Culture.d.ts +1 -0
  36. package/dist/controls/kendo/Culture.js +26 -0
  37. package/dist/controls/kendo/Culture.js.map +1 -0
  38. package/dist/controls/kendo/DataSource.d.ts +4 -0
  39. package/dist/controls/kendo/DataSource.js +2 -0
  40. package/dist/controls/kendo/DataSource.js.map +1 -0
  41. package/dist/controls/kendo/Editor.d.ts +18 -0
  42. package/dist/controls/kendo/Editor.js +113 -0
  43. package/dist/controls/kendo/Editor.js.map +1 -0
  44. package/dist/controls/kendo/Grid.d.ts +50 -0
  45. package/dist/controls/kendo/Grid.js +214 -0
  46. package/dist/controls/kendo/Grid.js.map +1 -0
  47. package/dist/controls/kendo/Menu.d.ts +14 -0
  48. package/dist/controls/kendo/Menu.js +86 -0
  49. package/dist/controls/kendo/Menu.js.map +1 -0
  50. package/dist/controls/kendo/Tree.d.ts +16 -0
  51. package/dist/controls/kendo/Tree.js +104 -0
  52. package/dist/controls/kendo/Tree.js.map +1 -0
  53. package/dist/controls/user/Content.d.ts +16 -0
  54. package/dist/controls/user/Content.js +45 -0
  55. package/dist/controls/user/Content.js.map +1 -0
  56. package/dist/controls/user/FileSelector.d.ts +17 -0
  57. package/dist/controls/user/FileSelector.js +54 -0
  58. package/dist/controls/user/FileSelector.js.map +1 -0
  59. package/dist/controls/user/LabeledControl.d.ts +14 -0
  60. package/dist/controls/user/LabeledControl.js +32 -0
  61. package/dist/controls/user/LabeledControl.js.map +1 -0
  62. package/dist/controls/user/ListItem.d.ts +30 -0
  63. package/dist/controls/user/ListItem.js +61 -0
  64. package/dist/controls/user/ListItem.js.map +1 -0
  65. package/dist/event.d.ts +17 -3
  66. package/dist/event.js +1 -0
  67. package/dist/event.js.map +1 -1
  68. package/dist/{src → framework}/View.d.ts +1 -1
  69. package/dist/{src → framework}/View.js +19 -22
  70. package/dist/framework/View.js.map +1 -0
  71. package/dist/{src → framework}/ViewModel.d.ts +0 -1
  72. package/dist/{src → framework}/ViewModel.js +59 -82
  73. package/dist/framework/ViewModel.js.map +1 -0
  74. package/dist/{src → framework}/attributes.d.ts +0 -0
  75. package/dist/framework/attributes.js +2 -0
  76. package/dist/{src → framework}/attributes.js.map +1 -1
  77. package/dist/{src → framework}/event.d.ts +3 -3
  78. package/dist/framework/event.js +26 -0
  79. package/dist/framework/event.js.map +1 -0
  80. package/dist/{src → framework}/observable.d.ts +0 -0
  81. package/dist/framework/observable.js +59 -0
  82. package/dist/framework/observable.js.map +1 -0
  83. package/dist/{src → framework}/style.d.ts +0 -0
  84. package/dist/{src → framework}/style.js +4 -8
  85. package/dist/framework/style.js.map +1 -0
  86. package/dist/framework/types.d.ts +85 -0
  87. package/dist/framework/types.js +2 -0
  88. package/dist/{src → framework}/types.js.map +1 -1
  89. package/dist/{src → framework}/userAgent.d.ts +0 -0
  90. package/dist/{src → framework}/userAgent.js +3 -6
  91. package/dist/framework/userAgent.js.map +1 -0
  92. package/dist/index.d.ts +8 -6
  93. package/dist/index.js +9 -21
  94. package/dist/index.js.map +1 -1
  95. package/dist/observable.d.ts +12 -0
  96. package/dist/{src/observable.js → observable.js} +0 -0
  97. package/dist/observable.js.map +1 -0
  98. package/dist/style.js +2 -2
  99. package/dist/style.js.map +1 -1
  100. package/dist/userAgent.js.map +1 -1
  101. package/dist/utilities/blob.d.ts +2 -0
  102. package/dist/utilities/blob.js +19 -0
  103. package/dist/utilities/blob.js.map +1 -0
  104. package/dist/utilities/common.d.ts +17 -0
  105. package/dist/utilities/common.js +193 -0
  106. package/dist/utilities/common.js.map +1 -0
  107. package/dist/utilities/fetch.d.ts +5 -0
  108. package/dist/utilities/fetch.js +110 -0
  109. package/dist/utilities/fetch.js.map +1 -0
  110. package/dist/utilities/notification.d.ts +5 -0
  111. package/dist/utilities/notification.js +67 -0
  112. package/dist/utilities/notification.js.map +1 -0
  113. package/dist/utilities/router.d.ts +20 -0
  114. package/dist/utilities/router.js +63 -0
  115. package/dist/utilities/router.js.map +1 -0
  116. package/dist/utilities/webSocket.d.ts +1 -0
  117. package/dist/utilities/webSocket.js +53 -0
  118. package/dist/utilities/webSocket.js.map +1 -0
  119. package/package.json +13 -6
  120. package/dist/examples/example-01.d.ts +0 -1
  121. package/dist/examples/example-01.js +0 -43
  122. package/dist/examples/example-01.js.map +0 -1
  123. package/dist/src/View.js.map +0 -1
  124. package/dist/src/ViewModel.js.map +0 -1
  125. package/dist/src/attributes.js +0 -3
  126. package/dist/src/event.js +0 -30
  127. package/dist/src/event.js.map +0 -1
  128. package/dist/src/index.d.ts +0 -7
  129. package/dist/src/index.js +0 -22
  130. package/dist/src/index.js.map +0 -1
  131. package/dist/src/observable.js.map +0 -1
  132. package/dist/src/style.js.map +0 -1
  133. package/dist/src/types.d.ts +0 -85
  134. package/dist/src/types.js +0 -3
  135. package/dist/src/userAgent.js.map +0 -1
@@ -0,0 +1,111 @@
1
+ import { View, registerView } from "../../framework/View";
2
+ import { ViewModel, extendViewModel } from "../../framework/ViewModel";
3
+ import { unwrap, isObservable } from "knockout";
4
+ import { isObservableProperty, observableProperty } from "../../framework/observable";
5
+ import { EditorView, basicSetup } from "codemirror";
6
+ import { EditorState } from "@codemirror/state";
7
+ import { keymap } from "@codemirror/view";
8
+ import { json } from "@codemirror/lang-json";
9
+ import { indentWithTab } from "@codemirror/commands";
10
+ import { foldAll } from "@codemirror/language";
11
+ import { ButtonView } from "../html/Button";
12
+ import { DivView } from "../html/Div";
13
+ export class JsonEditorViewModel extends ViewModel {
14
+ constructor(options) {
15
+ super(options);
16
+ if (options) {
17
+ if (isObservableProperty(options.value)) {
18
+ this.value = options.value;
19
+ }
20
+ else {
21
+ this.value = observableProperty(options.value);
22
+ }
23
+ if (!options.eventListeners) {
24
+ options.eventListeners = {};
25
+ }
26
+ }
27
+ }
28
+ value;
29
+ }
30
+ export class JsonEditorView extends View {
31
+ constructor(viewModel, designTimeOptions) {
32
+ super({
33
+ tagName: "div",
34
+ viewModel: viewModel
35
+ }, extendViewModel({
36
+ viewType: "JsonEditor",
37
+ attributes: {
38
+ tabindex: 1
39
+ },
40
+ style: {
41
+ display: "flex",
42
+ flexDirection: "column",
43
+ border: "1px solid #a3d0e4"
44
+ }
45
+ }, designTimeOptions));
46
+ }
47
+ editor;
48
+ build() {
49
+ super.build();
50
+ const viewModel = this.viewModel;
51
+ const foldAllButton = new ButtonView({
52
+ content: "Collapse all",
53
+ style: {
54
+ margin: "3px"
55
+ },
56
+ eventListeners: {
57
+ click: {
58
+ listener: () => {
59
+ foldAll(this.editor);
60
+ }
61
+ }
62
+ }
63
+ });
64
+ const saveButton = new ButtonView({
65
+ content: "Save",
66
+ style: {
67
+ margin: "3px"
68
+ },
69
+ eventListeners: {
70
+ click: {
71
+ listener: () => {
72
+ if (isObservableProperty(viewModel.value)) {
73
+ viewModel.value.set(this.editor.state.doc.toString());
74
+ }
75
+ }
76
+ }
77
+ }
78
+ });
79
+ const buttons = new DivView({
80
+ style: {
81
+ display: "flex"
82
+ },
83
+ children: [
84
+ foldAllButton,
85
+ saveButton
86
+ ]
87
+ });
88
+ this.element.appendChild(buttons.render());
89
+ const state = EditorState.create({
90
+ extensions: [
91
+ basicSetup,
92
+ json(),
93
+ EditorView.lineWrapping,
94
+ keymap.of([indentWithTab])
95
+ ]
96
+ });
97
+ this.editor = new EditorView({
98
+ state: state,
99
+ parent: this.element,
100
+ });
101
+ this.editor.dom.style.overflow = "auto";
102
+ this.editor.dispatch({ changes: { from: 0, to: this.editor.state.doc.length, insert: unwrap(viewModel.value) } });
103
+ if (isObservable(viewModel.value)) {
104
+ viewModel.value.subscribe((html) => {
105
+ this.editor.dispatch({ changes: { from: 0, to: this.editor.state.doc.length, insert: html } });
106
+ });
107
+ }
108
+ }
109
+ }
110
+ registerView(JsonEditorViewModel, JsonEditorView);
111
+ //# sourceMappingURL=JsonEditor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"JsonEditor.js","sourceRoot":"","sources":["../../../src/controls/codeMirror/JsonEditor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import { Subscribable } from "knockout";
2
+ import { ViewModel, ViewModelOptions } from "../../framework/ViewModel";
3
+ import { View } from "../../framework/View";
4
+ export interface ButtonViewModelOptions extends ViewModelOptions {
5
+ content?: string | ViewModel | Subscribable<string | ViewModel>;
6
+ }
7
+ export declare class ButtonViewModel extends ViewModel implements ButtonViewModelOptions {
8
+ constructor(options: ButtonViewModelOptions);
9
+ readonly content: string | ViewModel | Subscribable<string | ViewModel>;
10
+ }
11
+ export declare class ButtonView extends View<ButtonViewModelOptions> {
12
+ constructor(viewModel: ButtonViewModelOptions, designTimeOptions?: ViewModelOptions);
13
+ build(): void;
14
+ private buildContent;
15
+ }
@@ -0,0 +1,48 @@
1
+ import { unwrap, isSubscribable } from "knockout";
2
+ import { ViewModel, extendViewModel } from "../../framework/ViewModel";
3
+ import { View, getView, registerView } from "../../framework/View";
4
+ export class ButtonViewModel extends ViewModel {
5
+ constructor(options) {
6
+ super(options);
7
+ this.content = options.content;
8
+ }
9
+ content;
10
+ }
11
+ export class ButtonView extends View {
12
+ constructor(viewModel, designTimeOptions) {
13
+ super({
14
+ tagName: "button",
15
+ viewModel: viewModel
16
+ }, extendViewModel({
17
+ viewType: "Button"
18
+ }, designTimeOptions));
19
+ }
20
+ build() {
21
+ super.build();
22
+ const viewModel = this.viewModel;
23
+ if (viewModel.content) {
24
+ if (isSubscribable(viewModel.content)) {
25
+ this.buildContent(unwrap(viewModel.content));
26
+ viewModel.content.subscribe((content) => {
27
+ this.buildContent(content);
28
+ });
29
+ }
30
+ else {
31
+ this.buildContent(viewModel.content);
32
+ }
33
+ }
34
+ }
35
+ buildContent(content) {
36
+ if (content == null || content === undefined) {
37
+ this.element.innerText = null;
38
+ }
39
+ else if (typeof content === "string") {
40
+ this.element.innerText = content;
41
+ }
42
+ else if (content instanceof ViewModel) {
43
+ this.setChildren(getView(content));
44
+ }
45
+ }
46
+ }
47
+ registerView(ButtonViewModel, ButtonView);
48
+ //# sourceMappingURL=Button.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Button.js","sourceRoot":"","sources":["../../../src/controls/html/Button.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAgB,cAAc,EAAE,MAAM,UAAU,CAAC;AAChE,OAAO,EAAE,SAAS,EAAoB,eAAe,EAAE,MAAM,2BAA2B,CAAA;AACxF,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAMnE,MAAM,OAAO,eAAgB,SAAQ,SAAS;IAC1C,YAAY,OAA+B;QACvC,KAAK,CAAC,OAAO,CAAC,CAAC;QAEf,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IACnC,CAAC;IAEQ,OAAO,CAAwD;CAC3E;AAED,MAAM,OAAO,UAAW,SAAQ,IAA4B;IACxD,YAAY,SAAiC,EAAE,iBAAoC;QAC/E,KAAK,CACD;YACI,OAAO,EAAE,QAAQ;YACjB,SAAS,EAAE,SAAS;SACvB,EACD,eAAe,CACX;YACI,QAAQ,EAAE,QAAQ;SACrB,EACD,iBAAiB,CACpB,CACJ,CAAC;IACN,CAAC;IAED,KAAK;QACD,KAAK,CAAC,KAAK,EAAE,CAAC;QAEd,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;QACjC,IAAI,SAAS,CAAC,OAAO,EAAE;YACnB,IAAI,cAAc,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE;gBACnC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;gBAC7C,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,EAAE;oBACpC,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;gBAC/B,CAAC,CAAC,CAAC;aACN;iBAAM;gBACH,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;aACxC;SACJ;IACL,CAAC;IAEO,YAAY,CAAC,OAA2B;QAC5C,IAAI,OAAO,IAAI,IAAI,IAAI,OAAO,KAAK,SAAS,EAAE;YAC1C,IAAI,CAAC,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;SACjC;aACI,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE;YAClC,IAAI,CAAC,OAAO,CAAC,SAAS,GAAG,OAAO,CAAC;SACpC;aACI,IAAI,OAAO,YAAY,SAAS,EAAE;YACnC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,OAAoB,CAAC,CAAC,CAAC;SACnD;IACL,CAAC;CACJ;AAED,YAAY,CACR,eAAe,EACf,UAAU,CACb,CAAC"}
@@ -0,0 +1,10 @@
1
+ import { View, IView } from "../../framework/View";
2
+ import { ViewModel, ViewModelOptions } from "../../framework/ViewModel";
3
+ export declare class DivViewModel extends ViewModel implements ViewModelOptions {
4
+ }
5
+ export interface DivViewOptions extends ViewModelOptions {
6
+ children?: Array<IView>;
7
+ }
8
+ export declare class DivView extends View<ViewModelOptions> {
9
+ constructor(viewModel: DivViewOptions, designTimeOptions?: ViewModelOptions);
10
+ }
@@ -0,0 +1,17 @@
1
+ import { View, registerView } from "../../framework/View";
2
+ import { ViewModel, extendViewModel } from "../../framework/ViewModel";
3
+ export class DivViewModel extends ViewModel {
4
+ }
5
+ export class DivView extends View {
6
+ constructor(viewModel, designTimeOptions) {
7
+ super({
8
+ tagName: "div",
9
+ viewModel: viewModel,
10
+ children: viewModel.children
11
+ }, extendViewModel({
12
+ viewType: "Div"
13
+ }, designTimeOptions));
14
+ }
15
+ }
16
+ registerView(DivViewModel, DivView);
17
+ //# sourceMappingURL=Div.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Div.js","sourceRoot":"","sources":["../../../src/controls/html/Div.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAS,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACjE,OAAO,EAAE,SAAS,EAAoB,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAEzF,MAAM,OAAO,YAAa,SAAQ,SAAS;CAE1C;AAMD,MAAM,OAAO,OAAQ,SAAQ,IAAsB;IAC/C,YAAY,SAAyB,EAAE,iBAAoC;QACvE,KAAK,CACD;YACI,OAAO,EAAE,KAAK;YACd,SAAS,EAAE,SAAS;YACpB,QAAQ,EAAE,SAAS,CAAC,QAAQ;SAC/B,EACD,eAAe,CACX;YACI,QAAQ,EAAE,KAAK;SAClB,EACD,iBAAiB,CACpB,CACJ,CAAC;IACN,CAAC;CACJ;AAED,YAAY,CACR,YAAY,EACZ,OAAO,CACV,CAAC"}
@@ -0,0 +1,7 @@
1
+ import { View } from "../../framework/View";
2
+ import { ViewModel, ViewModelOptions } from "../../framework/ViewModel";
3
+ export declare class ImageViewModel extends ViewModel {
4
+ }
5
+ export declare class ImageView extends View<ViewModelOptions> {
6
+ constructor(viewModel: ViewModelOptions, designTimeOptions?: ViewModelOptions);
7
+ }
@@ -0,0 +1,16 @@
1
+ import { View, registerView } from "../../framework/View";
2
+ import { ViewModel, extendViewModel } from "../../framework/ViewModel";
3
+ export class ImageViewModel extends ViewModel {
4
+ }
5
+ export class ImageView extends View {
6
+ constructor(viewModel, designTimeOptions) {
7
+ super({
8
+ tagName: "img",
9
+ viewModel: viewModel
10
+ }, extendViewModel({
11
+ viewType: "Image"
12
+ }, designTimeOptions));
13
+ }
14
+ }
15
+ registerView(ImageViewModel, ImageView);
16
+ //# sourceMappingURL=Image.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Image.js","sourceRoot":"","sources":["../../../src/controls/html/Image.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,SAAS,EAAoB,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAEzF,MAAM,OAAO,cAAe,SAAQ,SAAS;CAE5C;AAED,MAAM,OAAO,SAAU,SAAQ,IAAsB;IACjD,YAAY,SAA2B,EAAE,iBAAoC;QACzE,KAAK,CACD;YACI,OAAO,EAAE,KAAK;YACd,SAAS,EAAE,SAAS;SACvB,EACD,eAAe,CACX;YACI,QAAQ,EAAE,OAAO;SACpB,EACD,iBAAiB,CACpB,CACJ,CAAC;IACN,CAAC;CACJ;AAED,YAAY,CACR,cAAc,EACd,SAAS,CACZ,CAAC"}
@@ -0,0 +1,43 @@
1
+ import { View } from "../../framework/View";
2
+ import { ViewModel, ViewModelOptions } from "../../framework/ViewModel";
3
+ import { ObservableProperty } from "../../framework/observable";
4
+ export type InputType = "text" | "checkbox" | "file" | "integer" | "float" | "range";
5
+ export type ValueUpdateMode = "OnChange" | "OnInput";
6
+ export interface InputViewModelOptions<TValue> extends ViewModelOptions {
7
+ value?: TValue | ObservableProperty<TValue>;
8
+ inputValidator?: (event: Event, inputViewModel: InputViewModelOptions<TValue>, value: string) => Promise<boolean>;
9
+ placeholder?: string | ObservableProperty<string>;
10
+ valueUpdateMode?: ValueUpdateMode;
11
+ min?: number;
12
+ max?: number;
13
+ step?: number;
14
+ type?: InputType;
15
+ }
16
+ declare abstract class InputViewModel<TValue> extends ViewModel {
17
+ protected constructor(inputType: InputType, options?: InputViewModelOptions<TValue>);
18
+ readonly value: ObservableProperty<TValue>;
19
+ readonly inputValidator: (event: Event, inputViewModel: InputViewModelOptions<TValue>, value: string) => Promise<boolean>;
20
+ readonly placeholder: ObservableProperty<string>;
21
+ readonly valueUpdateMode: ValueUpdateMode;
22
+ readonly type: InputType;
23
+ }
24
+ export declare class InputTextViewModel extends InputViewModel<string> {
25
+ constructor(options?: InputViewModelOptions<string>);
26
+ }
27
+ export declare class InputCheckboxViewModel extends InputViewModel<boolean> {
28
+ constructor(options?: InputViewModelOptions<boolean>);
29
+ }
30
+ export declare class InputFileViewModel extends InputViewModel<FileList> {
31
+ constructor(options?: InputViewModelOptions<FileList>);
32
+ }
33
+ export declare class InputIntegerViewModel extends InputViewModel<number> {
34
+ constructor(options?: InputViewModelOptions<number>);
35
+ }
36
+ export declare class InputFloatViewModel extends InputViewModel<number> {
37
+ constructor(options?: InputViewModelOptions<number>);
38
+ }
39
+ export declare class InputView<TValue> extends View<InputViewModelOptions<TValue>> {
40
+ constructor(viewModel: InputViewModelOptions<TValue>, designTimeOptions?: InputViewModelOptions<TValue>);
41
+ protected build(): void;
42
+ }
43
+ export {};
@@ -0,0 +1,179 @@
1
+ import { isSubscribable, unwrap, isObservable } from "knockout";
2
+ import { View, registerView } from "../../framework/View";
3
+ import { ViewModel, extendViewModel, isNullOrUndefined } from "../../framework/ViewModel";
4
+ import { observableProperty } from "../../framework/observable";
5
+ import { isInteger, isFloat } from "../../utilities/common";
6
+ import { isObservableProperty } from "../../framework/observable";
7
+ class InputViewModel extends ViewModel {
8
+ constructor(inputType, options) {
9
+ super(options);
10
+ if (options) {
11
+ if (isObservableProperty(options.value)) {
12
+ this.value = options.value;
13
+ }
14
+ else {
15
+ this.value = observableProperty(options.value);
16
+ }
17
+ this.inputValidator = options.inputValidator;
18
+ this.placeholder = options.placeholder;
19
+ this.valueUpdateMode = options.valueUpdateMode;
20
+ this.type = options.type;
21
+ }
22
+ this.type = inputType;
23
+ }
24
+ value;
25
+ inputValidator;
26
+ placeholder;
27
+ valueUpdateMode = "OnChange";
28
+ type;
29
+ }
30
+ export class InputTextViewModel extends InputViewModel {
31
+ constructor(options) {
32
+ super("text", options);
33
+ }
34
+ }
35
+ export class InputCheckboxViewModel extends InputViewModel {
36
+ constructor(options) {
37
+ super("checkbox", options);
38
+ }
39
+ }
40
+ export class InputFileViewModel extends InputViewModel {
41
+ constructor(options) {
42
+ super("file", options);
43
+ }
44
+ }
45
+ export class InputIntegerViewModel extends InputViewModel {
46
+ constructor(options) {
47
+ super("integer", options);
48
+ }
49
+ }
50
+ export class InputFloatViewModel extends InputViewModel {
51
+ constructor(options) {
52
+ super("float", options);
53
+ }
54
+ }
55
+ export class InputView extends View {
56
+ constructor(viewModel, designTimeOptions) {
57
+ super({
58
+ tagName: "input",
59
+ viewModel: viewModel,
60
+ }, extendViewModel({
61
+ viewType: "Input"
62
+ }, designTimeOptions));
63
+ }
64
+ build() {
65
+ super.build();
66
+ const viewModel = this.viewModel;
67
+ if (!viewModel.valueUpdateMode) {
68
+ viewModel.valueUpdateMode = "OnChange";
69
+ }
70
+ const input = this.element;
71
+ input.type = viewModel.type;
72
+ if (!isNullOrUndefined(viewModel.min)) {
73
+ input.min = viewModel.min;
74
+ }
75
+ if (!isNullOrUndefined(viewModel.max)) {
76
+ input.max = viewModel.max;
77
+ }
78
+ if (!isNullOrUndefined(viewModel.step)) {
79
+ input.step = viewModel.step;
80
+ }
81
+ switch (viewModel.type) {
82
+ case "checkbox":
83
+ input.checked = unwrap(viewModel.value);
84
+ if (isObservable(viewModel.value)) {
85
+ viewModel.value.subscribe((value) => {
86
+ input.checked = value;
87
+ });
88
+ }
89
+ break;
90
+ case "file":
91
+ break;
92
+ default:
93
+ const value = unwrap(viewModel.value);
94
+ if (value) {
95
+ input.value = value;
96
+ }
97
+ if (isObservable(viewModel.value)) {
98
+ viewModel.value.subscribe((value) => {
99
+ input.value = value;
100
+ });
101
+ }
102
+ }
103
+ const placeholder = unwrap(viewModel.placeholder);
104
+ if (placeholder) {
105
+ input.placeholder = placeholder;
106
+ }
107
+ if (isSubscribable(viewModel.placeholder)) {
108
+ viewModel.placeholder.subscribe((placeholder) => {
109
+ if (placeholder) {
110
+ input.placeholder = placeholder;
111
+ }
112
+ else {
113
+ input.removeAttribute("placeholder");
114
+ }
115
+ });
116
+ }
117
+ if (this.viewModel.valueUpdateMode === "OnChange") {
118
+ this.element.addEventListener("change", handleEvent);
119
+ }
120
+ if (this.viewModel.valueUpdateMode === "OnInput" || viewModel.inputValidator) {
121
+ this.element.addEventListener("input", handleEvent);
122
+ }
123
+ async function handleEvent(event) {
124
+ let newValue;
125
+ switch (viewModel.type) {
126
+ case "checkbox":
127
+ newValue = input.checked;
128
+ break;
129
+ case "file":
130
+ newValue = input.files;
131
+ break;
132
+ default:
133
+ newValue = input.value;
134
+ if (newValue + "" === "") {
135
+ newValue = null;
136
+ }
137
+ }
138
+ if (viewModel.inputValidator) {
139
+ if (!await viewModel.inputValidator(event, viewModel, newValue)) {
140
+ input.value = unwrap(viewModel.value);
141
+ return;
142
+ }
143
+ ;
144
+ }
145
+ if (viewModel.type === "integer") {
146
+ if (isInteger(newValue)) {
147
+ newValue = parseInt(newValue);
148
+ }
149
+ else {
150
+ input.value = unwrap(viewModel.value);
151
+ return;
152
+ }
153
+ }
154
+ if (viewModel.type === "float") {
155
+ if (isFloat(newValue)) {
156
+ newValue = parseFloat(newValue);
157
+ }
158
+ else {
159
+ input.value = unwrap(viewModel.value);
160
+ return;
161
+ }
162
+ }
163
+ if (isObservableProperty(viewModel.value)) {
164
+ if ((event.type === "change" && viewModel.valueUpdateMode === "OnChange") || (event.type === "input" && viewModel.valueUpdateMode === "OnInput")) {
165
+ viewModel.value.set(newValue);
166
+ }
167
+ else {
168
+ viewModel.value.set(newValue, false);
169
+ }
170
+ }
171
+ }
172
+ }
173
+ }
174
+ registerView(InputTextViewModel, InputView);
175
+ registerView(InputCheckboxViewModel, InputView);
176
+ registerView(InputFileViewModel, InputView);
177
+ registerView(InputIntegerViewModel, InputView);
178
+ registerView(InputFloatViewModel, InputView);
179
+ //# sourceMappingURL=Input.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Input.js","sourceRoot":"","sources":["../../../src/controls/html/Input.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ import { View } from "../../framework/View";
2
+ import { ViewModel, ViewModelOptions } from "../../framework/ViewModel";
3
+ import { ObservableProperty, ObservableArrayProperty } from "../../framework/observable";
4
+ export interface SelectViewModelOptions<TItem, TValue> extends ViewModelOptions {
5
+ value?: TValue | ObservableProperty<TValue>;
6
+ items?: Array<TItem> | ObservableArrayProperty<TItem>;
7
+ textFunction: (item: TItem) => string;
8
+ valueFunction: (item: TItem) => TValue;
9
+ inputValidator?: (event: Event, selectViewModel: SelectViewModelOptions<TItem, TValue>, value: TValue) => Promise<boolean>;
10
+ emptyItemText?: string;
11
+ }
12
+ export declare class SelectViewModel<TItem, TValue> extends ViewModel {
13
+ constructor(options?: SelectViewModelOptions<TItem, TValue>);
14
+ readonly value: ObservableProperty<TValue>;
15
+ readonly items: ObservableArrayProperty<TItem>;
16
+ readonly textFunction: (item: TItem) => string;
17
+ readonly valueFunction: (item: TItem) => TValue;
18
+ readonly inputValidator: (event: Event, inputViewModel: SelectViewModel<TItem, TValue>, value: TValue) => Promise<boolean>;
19
+ readonly emptyItemText: string;
20
+ }
21
+ export declare class SelectView<TItem, TValue> extends View<SelectViewModelOptions<TItem, TValue>> {
22
+ constructor(viewModel: SelectViewModelOptions<TItem, TValue>, designTimeOptions?: ViewModelOptions);
23
+ protected build(): void;
24
+ private itemDictionary;
25
+ private setItems;
26
+ private setSelectedValue;
27
+ }
@@ -0,0 +1,116 @@
1
+ import { unwrap, isSubscribable } from "knockout";
2
+ import { View, registerView } from "../../framework/View";
3
+ import { ViewModel, extendViewModel } from "../../framework/ViewModel";
4
+ import { isObservableProperty, observableArrayProperty, observableProperty } from "../../framework/observable";
5
+ export class SelectViewModel extends ViewModel {
6
+ constructor(options) {
7
+ super(options);
8
+ if (options) {
9
+ this.textFunction = options.textFunction;
10
+ this.valueFunction = options.valueFunction;
11
+ this.inputValidator = options.inputValidator;
12
+ if (isObservableProperty(options.value)) {
13
+ this.value = options.value;
14
+ }
15
+ else {
16
+ this.value = observableProperty(options.value);
17
+ }
18
+ if (isObservableProperty(options.items)) {
19
+ this.items = options.items;
20
+ }
21
+ else {
22
+ this.items = observableArrayProperty(options.items);
23
+ }
24
+ this.emptyItemText = options.emptyItemText;
25
+ }
26
+ }
27
+ value;
28
+ items;
29
+ textFunction;
30
+ valueFunction;
31
+ inputValidator;
32
+ emptyItemText;
33
+ }
34
+ export class SelectView extends View {
35
+ constructor(viewModel, designTimeOptions) {
36
+ super({
37
+ tagName: "select",
38
+ viewModel: viewModel
39
+ }, extendViewModel({
40
+ viewType: "Select"
41
+ }, designTimeOptions));
42
+ }
43
+ build() {
44
+ super.build();
45
+ const select = this.element;
46
+ const viewModel = this.viewModel;
47
+ this.setItems(unwrap(viewModel.items));
48
+ if (isSubscribable(viewModel.items)) {
49
+ viewModel.items.subscribe((items) => {
50
+ this.setItems(items);
51
+ });
52
+ }
53
+ this.setSelectedValue(unwrap(viewModel.value));
54
+ if (isSubscribable(viewModel.value)) {
55
+ viewModel.value.subscribe((value) => {
56
+ this.setSelectedValue(value);
57
+ });
58
+ }
59
+ this.element.addEventListener("change", async (event) => {
60
+ let newValue = select.value;
61
+ if (newValue + "" === "") {
62
+ newValue = null;
63
+ }
64
+ else {
65
+ newValue = this.viewModel.valueFunction(this.itemDictionary[newValue.toString()]);
66
+ }
67
+ if (viewModel.inputValidator) {
68
+ if (!await viewModel.inputValidator(event, viewModel, newValue)) {
69
+ select.value = unwrap(viewModel.value);
70
+ return;
71
+ }
72
+ ;
73
+ }
74
+ if (isObservableProperty(viewModel.value)) {
75
+ viewModel.value.set(newValue);
76
+ }
77
+ });
78
+ }
79
+ itemDictionary;
80
+ setItems(items) {
81
+ if (this.element) {
82
+ this.itemDictionary = {};
83
+ if (items) {
84
+ const select = this.element;
85
+ select.innerHTML = null;
86
+ if (this.viewModel.emptyItemText) {
87
+ const emptyOption = document.createElement("option");
88
+ emptyOption.value = "";
89
+ emptyOption.text = this.viewModel.emptyItemText;
90
+ select.options.add(emptyOption);
91
+ }
92
+ items.forEach((item) => {
93
+ const value = this.viewModel.valueFunction(item).toString();
94
+ this.itemDictionary[value] = item;
95
+ var option = document.createElement("option");
96
+ option.value = value;
97
+ option.text = this.viewModel.textFunction(item);
98
+ select.options.add(option);
99
+ });
100
+ }
101
+ }
102
+ }
103
+ setSelectedValue(value) {
104
+ if (this.element) {
105
+ const select = this.element;
106
+ if (value === null || value === undefined) {
107
+ select.value = "";
108
+ }
109
+ else {
110
+ select.value = value.toString();
111
+ }
112
+ }
113
+ }
114
+ }
115
+ registerView(SelectViewModel, SelectView);
116
+ //# sourceMappingURL=Select.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Select.js","sourceRoot":"","sources":["../../../src/controls/html/Select.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import { View } from "../../framework/View";
2
+ import { ViewModel, ViewModelOptions } from "../../framework/ViewModel";
3
+ export declare class SpanViewModel extends ViewModel implements ViewModelOptions {
4
+ }
5
+ export declare class SpanView extends View<ViewModelOptions> {
6
+ constructor(viewModel: ViewModelOptions, designTimeOptions?: ViewModelOptions);
7
+ }