jpf 4.0.18 → 4.0.20

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.
package/README.md CHANGED
@@ -1,10 +1,11 @@
1
1
  # JPF (Javascript Presentation Foundation)
2
- Knockout plugin for building Graphical User Interfaces for the web following the MVVM pattern similar to WPF for Windows.
3
- The base class "UiElement" implements the fundamental binding mechanism that is needed to support the MVVM pattern.
2
+ Library for building Graphical User Interfaces for the web following the MVVM pattern similar to WPF for Windows.
3
+ The library contains baseclasses for "View" and "ViewModel" that have build in support for the observable pattern.
4
+ So if a property in the ViewModel is observable and changes its value the View will automatically update itself.
4
5
 
5
6
  # Goals of this library
6
7
  When moving away from server-side rendering to client-side rendering I found myself going back in time if it comes to RAD support in tooling.
7
- If we compare this to rich-client development like for example WPF or server side rendering like old fashioned ASP.Net forms we have lost a lot of support in our tooling on the way.
8
+ If we compare this to rich-client development like for example WPF or server side rendering like old fashioned ASP.Net forms or MVC we have lost a lot of support in our tooling on the way.
8
9
  When working with client-side rendering frameworks that are popular today I have learned that preventing me from making mistakes while writing my code is limited.
9
10
  I feel that defining a view in some sort of html text template enhanced with binding expressions is cumbersome.
10
11
  The tooling support to make sure that the View with its binding expressions is in sink with its ViewModel is very limited.
@@ -12,6 +13,9 @@ The tooling support to make sure that the View with its binding expressions is i
12
13
  #### So the main goals for this library are:
13
14
 
14
15
  1. **Support the MVVM design pattern**
16
+ 1. **Have a clear separation between GUI logic and presentation. Separation of concern View, ViewModel**
17
+ 1. **Being able to change the presentation without affecting the GUI logic. Change the View without affecting the ViewModel**
18
+ 1. **Sharing the same GUI logic for multiple presentations. Having one ViewModel with multiple Views for example for Desktop and Mobile**
15
19
  1. **Eliminate the use of text based templating**
16
20
  1. **Support binding expression checking at compile time**
17
21
  1. **Discover programming errors at compile time instead of runtime**
@@ -0,0 +1,16 @@
1
+ import { ViewModelOptions, ViewModel } from "../../../framework/ViewModel";
2
+ import { ObservableProperty } from "../../../framework/observable";
3
+ import { View } from "../../../framework/View";
4
+ export interface ContentViewModelOptions extends ViewModelOptions {
5
+ content?: ViewModel;
6
+ }
7
+ export declare class ContentViewModel extends ViewModel {
8
+ constructor(options?: ContentViewModelOptions);
9
+ readonly content: ObservableProperty<ViewModel>;
10
+ handleWebSocketMessage: (message: any) => void;
11
+ }
12
+ export declare class ContentView extends View<ContentViewModel> {
13
+ constructor(viewModel: ContentViewModel, designTimeOptions?: ViewModelOptions);
14
+ build(): void;
15
+ private setContent;
16
+ }
@@ -0,0 +1,45 @@
1
+ import { unwrap } from "knockout";
2
+ import { ViewModel, extendViewModel } from "../../../framework/ViewModel";
3
+ import { observableProperty } from "../../../framework/observable";
4
+ import { View, getView, registerView } from "../../../framework/View";
5
+ export class ContentViewModel extends ViewModel {
6
+ constructor(options) {
7
+ super(options);
8
+ options = options || {};
9
+ this.content = observableProperty(options.content);
10
+ }
11
+ content;
12
+ handleWebSocketMessage = (message) => {
13
+ const content = this.content();
14
+ if (content.handleWebSocketMessage) {
15
+ content.handleWebSocketMessage(message);
16
+ }
17
+ };
18
+ }
19
+ export class ContentView extends View {
20
+ constructor(viewModel, designTimeOptions) {
21
+ super({
22
+ tagName: "div",
23
+ viewModel: viewModel
24
+ }, extendViewModel({
25
+ viewType: "Content"
26
+ }, designTimeOptions));
27
+ }
28
+ build() {
29
+ super.build();
30
+ this.setContent(unwrap(this.viewModel.content));
31
+ this.viewModel.content.subscribe((content) => {
32
+ this.setContent(content);
33
+ });
34
+ }
35
+ setContent(content) {
36
+ if (content) {
37
+ this.setChildren(getView(content));
38
+ }
39
+ else {
40
+ this.empty();
41
+ }
42
+ }
43
+ }
44
+ registerView(ContentViewModel, ContentView);
45
+ //# sourceMappingURL=Content.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Content.js","sourceRoot":"","sources":["../../../../src/controls/custom/Content/Content.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAoB,SAAS,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC5F,OAAO,EAAsB,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACvF,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAMtE,MAAM,OAAO,gBAAiB,SAAQ,SAAS;IAC3C,YAAY,OAAiC;QACzC,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,OAAO,GAAG,OAAO,IAAI,EAAE,CAAA;QAEvB,IAAI,CAAC,OAAO,GAAG,kBAAkB,CAAY,OAAO,CAAC,OAAO,CAAC,CAAC;IAClE,CAAC;IAEQ,OAAO,CAAgC;IAEhD,sBAAsB,GAAG,CAAC,OAAO,EAAE,EAAE;QACjC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;QAC/B,IAAI,OAAO,CAAC,sBAAsB,EAAE;YAChC,OAAO,CAAC,sBAAsB,CAAC,OAAO,CAAC,CAAC;SAC3C;IACL,CAAC,CAAA;CACJ;AAED,MAAM,OAAO,WAAY,SAAQ,IAAsB;IACnD,YAAY,SAA2B,EAAE,iBAAoC;QACzE,KAAK,CACD;YACI,OAAO,EAAE,KAAK;YACd,SAAS,EAAE,SAAS;SACvB,EACD,eAAe,CACX;YACI,QAAQ,EAAE,SAAS;SACtB,EACD,iBAAiB,CACpB,CACJ,CAAC;IACN,CAAC;IAED,KAAK;QACD,KAAK,CAAC,KAAK,EAAE,CAAC;QAGd,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAqB,CAAC,CAAC;QAGpE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,EAAE;YACzC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QAC7B,CAAC,CAAC,CAAC;IACP,CAAC;IAEO,UAAU,CAAC,OAAkB;QACjC,IAAI,OAAO,EAAE;YACT,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;SACtC;aAAM;YACH,IAAI,CAAC,KAAK,EAAE,CAAC;SAChB;IACL,CAAC;CACJ;AAED,YAAY,CACR,gBAAgB,EAChB,WAAW,CACd,CAAA"}
@@ -0,0 +1,17 @@
1
+ import { ViewModel, ViewModelOptions } from "../../../framework/ViewModel";
2
+ import { View } from "../../../framework/View";
3
+ import { ButtonViewModelOptions } from "../../html/Button/Button";
4
+ import { InputViewModelOptions } from "../../html/Input/Input";
5
+ export interface InputFileViewModelOptions extends ViewModelOptions {
6
+ button?: ButtonViewModelOptions;
7
+ inputFile: InputViewModelOptions<FileList>;
8
+ }
9
+ export declare class FileSelectorViewModel extends ViewModel {
10
+ constructor(options?: InputFileViewModelOptions);
11
+ readonly button: ButtonViewModelOptions;
12
+ readonly inputFile: InputViewModelOptions<FileList>;
13
+ }
14
+ export declare class FileSelectorView extends View<FileSelectorViewModel> {
15
+ constructor(viewModel: FileSelectorViewModel, designTimeOptions?: ViewModelOptions);
16
+ protected build(): void;
17
+ }
@@ -0,0 +1,54 @@
1
+ import { ViewModel, extendViewModel } from "../../../framework/ViewModel";
2
+ import { View, registerView } from "../../../framework/View";
3
+ import { ButtonView } from "../../html/Button/Button";
4
+ import { InputView } from "../../html/Input/Input";
5
+ export class FileSelectorViewModel extends ViewModel {
6
+ constructor(options) {
7
+ super(options);
8
+ if (options) {
9
+ this.button = options.button;
10
+ options.inputFile.type = "file";
11
+ if (options.button) {
12
+ if (!options.inputFile.style) {
13
+ options.inputFile.style = {};
14
+ }
15
+ options.inputFile.style.display = "none";
16
+ }
17
+ this.inputFile = options.inputFile;
18
+ }
19
+ }
20
+ button;
21
+ inputFile;
22
+ }
23
+ export class FileSelectorView extends View {
24
+ constructor(viewModel, designTimeOptions) {
25
+ super({
26
+ tagName: "div",
27
+ viewModel: viewModel
28
+ }, extendViewModel({
29
+ viewType: "FileSelector"
30
+ }, designTimeOptions));
31
+ }
32
+ build() {
33
+ super.build();
34
+ const viewModel = this.viewModel;
35
+ var fileInput = new InputView(viewModel.inputFile).render();
36
+ this.element.appendChild(fileInput);
37
+ if (viewModel.button) {
38
+ const button = new ButtonView(viewModel.button, {
39
+ eventListeners: {
40
+ click: {
41
+ listener: () => {
42
+ var mouseEvent = document.createEvent("MouseEvent");
43
+ mouseEvent.initEvent("click", false, false);
44
+ fileInput.dispatchEvent(mouseEvent);
45
+ }
46
+ }
47
+ }
48
+ }).render();
49
+ this.element.appendChild(button);
50
+ }
51
+ }
52
+ }
53
+ registerView(FileSelectorViewModel, FileSelectorView);
54
+ //# sourceMappingURL=FileSelector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FileSelector.js","sourceRoot":"","sources":["../../../../src/controls/custom/FileSelector/FileSelector.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAoB,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC5F,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAA0B,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAC9E,OAAO,EAAE,SAAS,EAAyB,MAAM,wBAAwB,CAAC;AAO1E,MAAM,OAAO,qBAAsB,SAAQ,SAAS;IAChD,YAAY,OAAmC;QAC3C,KAAK,CAAC,OAAO,CAAC,CAAC;QAEf,IAAI,OAAO,EAAE;YACT,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;YAC7B,OAAO,CAAC,SAAS,CAAC,IAAI,GAAG,MAAM,CAAC;YAEhC,IAAI,OAAO,CAAC,MAAM,EAAE;gBAChB,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE;oBAC1B,OAAO,CAAC,SAAS,CAAC,KAAK,GAAG,EAAE,CAAC;iBAChC;gBACD,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;aAC5C;YAED,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;SACtC;IACL,CAAC;IAEQ,MAAM,CAAyB;IAC/B,SAAS,CAAkC;CACvD;AAED,MAAM,OAAO,gBAAiB,SAAQ,IAA2B;IAC7D,YAAY,SAAgC,EAAE,iBAAoC;QAC9E,KAAK,CACD;YACI,OAAO,EAAE,KAAK;YACd,SAAS,EAAE,SAAS;SACvB,EACD,eAAe,CACX;YACI,QAAQ,EAAE,cAAc;SAC3B,EACD,iBAAiB,CACpB,CACJ,CAAC;IACN,CAAC;IAES,KAAK;QACX,KAAK,CAAC,KAAK,EAAE,CAAC;QAEd,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;QAEjC,IAAI,SAAS,GAAG,IAAI,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,MAAM,EAAE,CAAC;QAE5D,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;QAEpC,IAAI,SAAS,CAAC,MAAM,EAAE;YAClB,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,SAAS,CAAC,MAAM,EAC1C;gBACI,cAAc,EAAE;oBACZ,KAAK,EAAE;wBACH,QAAQ,EAAE,GAAG,EAAE;4BACX,IAAI,UAAU,GAAG,QAAQ,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;4BACpD,UAAU,CAAC,SAAS,CAAC,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;4BAC5C,SAAS,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;wBACxC,CAAC;qBACJ;iBACJ;aACJ,CAAC,CAAC,MAAM,EAAE,CAAC;YAEhB,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;SACpC;IACL,CAAC;CACJ;AAED,YAAY,CACR,qBAAqB,EACrB,gBAAgB,CACnB,CAAC"}
@@ -0,0 +1,14 @@
1
+ import { ViewModel, ViewModelOptions } from "../../../framework/ViewModel";
2
+ import { View, IView } from "../../../framework/View";
3
+ export interface LabeledViewModelOptions extends ViewModelOptions {
4
+ labelOptions: ViewModelOptions;
5
+ view: IView;
6
+ }
7
+ export declare class LabeledControlViewModel extends ViewModel implements LabeledViewModelOptions {
8
+ constructor(options: LabeledViewModelOptions);
9
+ labelOptions: ViewModelOptions;
10
+ view: IView;
11
+ }
12
+ export declare class LabeledControlView extends View<LabeledViewModelOptions> {
13
+ constructor(viewModel: LabeledViewModelOptions, designTimeOptions?: ViewModelOptions);
14
+ }
@@ -0,0 +1,32 @@
1
+ import { ViewModel, extendViewModel } from "../../../framework/ViewModel";
2
+ import { View } from "../../../framework/View";
3
+ import { DivView } from "../../html/Div/Div";
4
+ export class LabeledControlViewModel extends ViewModel {
5
+ constructor(options) {
6
+ super(options);
7
+ }
8
+ labelOptions;
9
+ view;
10
+ }
11
+ export class LabeledControlView extends View {
12
+ constructor(viewModel, designTimeOptions) {
13
+ super({
14
+ tagName: "div",
15
+ viewModel: viewModel,
16
+ children: [
17
+ new DivView(viewModel.labelOptions, {
18
+ viewType: "Label"
19
+ }),
20
+ viewModel.view
21
+ ]
22
+ }, extendViewModel({
23
+ viewType: "LabeledControl",
24
+ style: {
25
+ display: "flex",
26
+ alignItems: "center"
27
+ },
28
+ classNames: ["o-labled-control"]
29
+ }, designTimeOptions));
30
+ }
31
+ }
32
+ //# sourceMappingURL=LabeledControl.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LabeledControl.js","sourceRoot":"","sources":["../../../../src/controls/custom/LabeledControl/LabeledControl.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAoB,eAAe,EAAE,MAAM,8BAA8B,CAAA;AAC3F,OAAO,EAAE,IAAI,EAAS,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAO7C,MAAM,OAAO,uBAAwB,SAAQ,SAAS;IAClD,YAAY,OAAgC;QACxC,KAAK,CAAC,OAAO,CAAC,CAAC;IACnB,CAAC;IAED,YAAY,CAAmB;IAC/B,IAAI,CAAQ;CACf;AAED,MAAM,OAAO,kBAAmB,SAAQ,IAA6B;IACjE,YAAY,SAAkC,EAAE,iBAAoC;QAChF,KAAK,CACD;YACI,OAAO,EAAE,KAAK;YACd,SAAS,EAAE,SAAS;YACpB,QAAQ,EAAE;gBACN,IAAI,OAAO,CACP,SAAS,CAAC,YAAY,EACtB;oBACI,QAAQ,EAAE,OAAO;iBACpB,CACJ;gBACD,SAAS,CAAC,IAAI;aACjB;SACJ,EACD,eAAe,CACX;YACI,QAAQ,EAAE,gBAAgB;YAC1B,KAAK,EAAE;gBACH,OAAO,EAAE,MAAM;gBACf,UAAU,EAAE,QAAQ;aACvB;YACD,UAAU,EAAE,CAAC,kBAAkB,CAAC;SACnC,EACD,iBAAiB,CACpB,CACJ,CAAC;IACN,CAAC;CACJ"}
@@ -0,0 +1,30 @@
1
+ import { View } from "../../../framework/View";
2
+ import { ViewModel, ViewModelOptions } from "../../../framework/ViewModel";
3
+ export interface ListItemViewModelOptions extends ViewModelOptions {
4
+ id: number | string;
5
+ text?: string | ViewModel;
6
+ select?: () => void;
7
+ order?: number | string;
8
+ }
9
+ export declare class ListItemViewModel extends ViewModel implements ListItemViewModelOptions {
10
+ constructor(options: ListItemViewModelOptions);
11
+ readonly id: number | string;
12
+ text: string | ViewModel;
13
+ readonly select: () => void;
14
+ order: number | string;
15
+ }
16
+ export interface HierarchicalListItemViewModelOptions extends ListItemViewModelOptions {
17
+ parentId?: number | string;
18
+ expanded?: boolean;
19
+ }
20
+ export declare class HierarchicalListItemViewModel extends ListItemViewModel implements HierarchicalListItemViewModelOptions {
21
+ constructor(options: HierarchicalListItemViewModelOptions);
22
+ readonly parentId: number | string;
23
+ readonly expanded: boolean;
24
+ items: Array<HierarchicalListItemViewModel>;
25
+ }
26
+ export declare class ListItemView extends View<ListItemViewModel> {
27
+ constructor(viewModel: ListItemViewModel);
28
+ build(): void;
29
+ private setContent;
30
+ }
@@ -0,0 +1,61 @@
1
+ import { isObservable, unwrap } from "knockout";
2
+ import { View, getView, registerView } from "../../../framework/View";
3
+ import { ViewModel } from "../../../framework/ViewModel";
4
+ export class ListItemViewModel extends ViewModel {
5
+ constructor(options) {
6
+ super(options);
7
+ if (options) {
8
+ this.id = options.id;
9
+ this.text = options.text;
10
+ this.select = options.select;
11
+ this.order = options.order;
12
+ }
13
+ }
14
+ id;
15
+ text;
16
+ select;
17
+ order;
18
+ }
19
+ export class HierarchicalListItemViewModel extends ListItemViewModel {
20
+ constructor(options) {
21
+ super(options);
22
+ this.parentId = options.parentId;
23
+ this.expanded = options.expanded;
24
+ }
25
+ parentId;
26
+ expanded;
27
+ items;
28
+ }
29
+ export class ListItemView extends View {
30
+ constructor(viewModel) {
31
+ super({
32
+ tagName: "div",
33
+ viewModel: viewModel
34
+ }, {
35
+ viewType: "ListItem"
36
+ });
37
+ }
38
+ build() {
39
+ super.build();
40
+ const viewModel = this.viewModel;
41
+ if (isObservable(viewModel.text)) {
42
+ this.setContent(unwrap(viewModel.text));
43
+ viewModel.text.subscribe((content) => {
44
+ this.setContent(content);
45
+ });
46
+ }
47
+ else {
48
+ this.setContent(viewModel.text);
49
+ }
50
+ }
51
+ setContent(content) {
52
+ if (typeof content === "string") {
53
+ this.element.innerHTML = content;
54
+ }
55
+ else if (content instanceof ViewModel) {
56
+ this.setChildren(getView(content));
57
+ }
58
+ }
59
+ }
60
+ registerView(ListItemViewModel, ListItemView);
61
+ //# sourceMappingURL=ListItem.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ListItem.js","sourceRoot":"","sources":["../../../../src/controls/custom/ListItem/ListItem.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAChD,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACtE,OAAO,EAAE,SAAS,EAAoB,MAAM,8BAA8B,CAAC;AAa3E,MAAM,OAAO,iBAAkB,SAAQ,SAAS;IAC5C,YAAY,OAAiC;QACzC,KAAK,CAAC,OAAO,CAAC,CAAC;QAEf,IAAI,OAAO,EAAE;YACT,IAAI,CAAC,EAAE,GAAG,OAAO,CAAC,EAAE,CAAC;YACrB,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;YAEzB,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;YAC7B,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;SAC9B;IACL,CAAC;IAEQ,EAAE,CAAkB;IAC7B,IAAI,CAAqB;IAChB,MAAM,CAAa;IAC5B,KAAK,CAAkB;CAC1B;AAOD,MAAM,OAAO,6BAA8B,SAAQ,iBAAiB;IAChE,YAAY,OAA6C;QACrD,KAAK,CAAC,OAAO,CAAC,CAAC;QAEf,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;QACjC,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;IACrC,CAAC;IAEQ,QAAQ,CAAkB;IAC1B,QAAQ,CAAU;IAC3B,KAAK,CAAuC;CAC/C;AAED,MAAM,OAAO,YAAa,SAAQ,IAAuB;IACrD,YAAY,SAA4B;QACpC,KAAK,CACD;YACI,OAAO,EAAE,KAAK;YACd,SAAS,EAAE,SAAS;SACvB,EACD;YACI,QAAQ,EAAE,UAAU;SACvB,CACJ,CAAC;IACN,CAAC;IAED,KAAK;QACD,KAAK,CAAC,KAAK,EAAE,CAAC;QAEd,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;QAEjC,IAAI,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE;YAC9B,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;YACxC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,EAAE;gBACjC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;YAC7B,CAAC,CAAC,CAAC;SACN;aAAM;YACH,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;SACnC;IACL,CAAC;IAEO,UAAU,CAAC,OAA2B;QAC1C,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE;YAC7B,IAAI,CAAC,OAAO,CAAC,SAAS,GAAG,OAAO,CAAC;SACpC;aAAM,IAAI,OAAO,YAAY,SAAS,EAAE;YACrC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;SACtC;IACL,CAAC;CACJ;AAED,YAAY,CACR,iBAAiB,EACjB,YAAY,CACf,CAAA"}
@@ -0,0 +1,4 @@
1
+ export * from "./Content/Content";
2
+ export * from "./FileSelector/FileSelector";
3
+ export * from "./LabeledControl/LabeledControl";
4
+ export * from "./ListItem/ListItem";
@@ -0,0 +1,5 @@
1
+ export * from "./Content/Content";
2
+ export * from "./FileSelector/FileSelector";
3
+ export * from "./LabeledControl/LabeledControl";
4
+ export * from "./ListItem/ListItem";
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/controls/custom/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAClC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,iCAAiC,CAAC;AAChD,cAAc,qBAAqB,CAAC"}
@@ -1,12 +1,12 @@
1
1
  import * as codeMirror from "./codeMirror/index";
2
+ import * as custom from "./custom/index";
2
3
  import * as html from "./html/index";
3
4
  import * as jsonViewAwesome from "./jsonViewAwesome/index";
4
5
  import * as kendo from "./kendo/index";
5
6
  import * as leaflet from "./leaflet/index";
6
- import * as user from "./user/index";
7
7
  export { codeMirror };
8
+ export { custom };
8
9
  export { html };
9
10
  export { jsonViewAwesome };
10
11
  export { kendo };
11
12
  export { leaflet };
12
- export { user };
@@ -1,13 +1,13 @@
1
1
  import * as codeMirror from "./codeMirror/index";
2
+ import * as custom from "./custom/index";
2
3
  import * as html from "./html/index";
3
4
  import * as jsonViewAwesome from "./jsonViewAwesome/index";
4
5
  import * as kendo from "./kendo/index";
5
6
  import * as leaflet from "./leaflet/index";
6
- import * as user from "./user/index";
7
7
  export { codeMirror };
8
+ export { custom };
8
9
  export { html };
9
10
  export { jsonViewAwesome };
10
11
  export { kendo };
11
12
  export { leaflet };
12
- export { user };
13
13
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/controls/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,UAAU,MAAM,oBAAoB,CAAC;AACjD,OAAO,KAAK,IAAI,MAAM,cAAc,CAAC;AACrC,OAAO,KAAK,eAAe,MAAM,yBAAyB,CAAC;AAC3D,OAAO,KAAK,KAAK,MAAM,eAAe,CAAC;AACvC,OAAO,KAAK,OAAO,MAAM,iBAAiB,CAAC;AAC3C,OAAO,KAAK,IAAI,MAAM,cAAc,CAAC;AAErC,OAAO,EAAE,UAAU,EAAE,CAAC;AACtB,OAAO,EAAE,IAAI,EAAE,CAAC;AAChB,OAAO,EAAE,eAAe,EAAE,CAAC;AAC3B,OAAO,EAAE,KAAK,EAAE,CAAC;AACjB,OAAO,EAAE,OAAO,EAAE,CAAC;AACnB,OAAO,EAAE,IAAI,EAAE,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/controls/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,UAAU,MAAM,oBAAoB,CAAC;AACjD,OAAO,KAAK,MAAM,MAAM,gBAAgB,CAAC;AACzC,OAAO,KAAK,IAAI,MAAM,cAAc,CAAC;AACrC,OAAO,KAAK,eAAe,MAAM,yBAAyB,CAAC;AAC3D,OAAO,KAAK,KAAK,MAAM,eAAe,CAAC;AACvC,OAAO,KAAK,OAAO,MAAM,iBAAiB,CAAC;AAE3C,OAAO,EAAE,UAAU,EAAE,CAAC;AACtB,OAAO,EAAE,MAAM,EAAE,CAAC;AAClB,OAAO,EAAE,IAAI,EAAE,CAAC;AAChB,OAAO,EAAE,eAAe,EAAE,CAAC;AAC3B,OAAO,EAAE,KAAK,EAAE,CAAC;AACjB,OAAO,EAAE,OAAO,EAAE,CAAC"}
@@ -1,7 +1,7 @@
1
1
  import { Subscribable } from "knockout";
2
2
  import { View } from "../../../framework/View";
3
3
  import { ViewModelOptions } from "../../../framework/ViewModel";
4
- import { HierarchicalListItemViewModel } from "../../user/ListItem/ListItem";
4
+ import { HierarchicalListItemViewModel } from "../../custom/ListItem/ListItem";
5
5
  export interface MenuViewModelOptions extends ViewModelOptions {
6
6
  items?: Array<HierarchicalListItemViewModel> | Subscribable<Array<HierarchicalListItemViewModel>>;
7
7
  }
@@ -1,7 +1,7 @@
1
1
  import { Subscribable } from "knockout";
2
2
  import { View } from "../../../framework/View";
3
3
  import { ViewModelOptions } from "../../../framework/ViewModel";
4
- import { HierarchicalListItemViewModel } from "../../user/ListItem/ListItem";
4
+ import { HierarchicalListItemViewModel } from "../../custom/ListItem/ListItem";
5
5
  export interface TreeViewModelOptions extends ViewModelOptions {
6
6
  items?: Array<HierarchicalListItemViewModel> | Subscribable<Array<HierarchicalListItemViewModel>>;
7
7
  selectedItem?: HierarchicalListItemViewModel | Subscribable<HierarchicalListItemViewModel>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "jpf",
3
- "version": "4.0.18",
3
+ "version": "4.0.20",
4
4
  "description": "Javascript Presentation Foundation",
5
5
  "keywords": [
6
6
  "mvvm",
@@ -35,7 +35,7 @@
35
35
  "npmAuditFix": "npm audit fix",
36
36
  "npmAuditFixForce": "npm audit fix --force",
37
37
  "npmCacheClean": "npm cache clean --force",
38
- "npmPublish": "tsc & npm publish --otp=358805",
38
+ "npmPublish": "tsc & npm publish --otp=558615",
39
39
  "npmLogin": "npm login",
40
40
  "npmWhoAmI": "npm whoami",
41
41
  "npmAddUser": "npm adduser",