native-document 1.0.213 → 1.0.216

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/components.js CHANGED
@@ -1,3 +1,4 @@
1
+ export { default as BaseComponent } from './src/components/BaseComponent';
1
2
  export * from './src/components/accordion/index';
2
3
  export * from './src/components/alert/index';
3
4
  export * from './src/components/avatar/index';
@@ -13,6 +14,7 @@ export * from './src/components/form/index';
13
14
  export * from './src/components/list/index';
14
15
  export * from './src/components/menu/index';
15
16
  export * from './src/components/modal/index';
17
+ export * from './src/components/modal/createModal';
16
18
  export * from './src/components/pagination/index';
17
19
  export * from './src/components/popover/index';
18
20
  export * from './src/components/progress/index';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "native-document",
3
- "version": "1.0.213",
3
+ "version": "1.0.216",
4
4
  "description": "A reactive JavaScript framework that preserves native DOM simplicity without sacrificing modern features",
5
5
  "author": "AfroCodeur <https://github.com/afrocodeur>",
6
6
  "license": "MIT",
@@ -76,6 +76,8 @@ export default function Modal(content, props = {}) {
76
76
  BaseComponent.extends(Modal);
77
77
  BaseComponent.use(Modal, HasEventEmitter, HasDraggable, HasResizable);
78
78
 
79
+ Modal.prototype.__$isModal = true;
80
+
79
81
  // Theming
80
82
  Modal.defaultTemplate = null;
81
83
 
@@ -0,0 +1,61 @@
1
+ import { $ } from '../../core/data/Observable';
2
+ import {createPortal} from '../../core/elements/anchor/anchor';
3
+ import Modal from './Modal';
4
+
5
+ export function createModal(builder) {
6
+ return Cache.once(() => {
7
+
8
+ const $modalRef = $.ref();
9
+ let currentOnSelect = null;
10
+ let selectedValue = null;
11
+ const events = { onOpen: null, onClose: null };
12
+
13
+ const finish = (value = null) => {
14
+ currentOnSelect && currentOnSelect(value ?? selectedValue);
15
+ currentOnSelect = null;
16
+ };
17
+
18
+ const content = builder({
19
+ resolve: (value) => {
20
+ selectedValue = value;
21
+ $modalRef.close();
22
+ },
23
+ reject: () => {
24
+ selectedValue = null;
25
+ $modalRef.close();
26
+ },
27
+ onOpen: (onOpen) => {
28
+ events.onOpen = onOpen;
29
+ },
30
+ onClose: (onClose) => {
31
+ events.onClose = onClose;
32
+ }
33
+ });
34
+
35
+ const modal = (content?.__$isModal) ? content : Modal(content);
36
+
37
+ createPortal(
38
+ modal
39
+ .onClose(() => {
40
+ finish(null);
41
+ events.onClose && events.onClose();
42
+ })
43
+ .ref($modalRef),
44
+ );
45
+
46
+ return {
47
+ open: (params) => {
48
+ if (currentOnSelect) {
49
+ finish(null);
50
+ }
51
+ $modalRef.open();
52
+ events.onOpen?.(params);
53
+ return new Promise((resolve) => {
54
+ currentOnSelect = resolve;
55
+ });
56
+ },
57
+ close: () => $modalRef.close(),
58
+ instance: $modalRef,
59
+ };
60
+ });
61
+ }
@@ -26,7 +26,7 @@ export type ModalDescription = {
26
26
  props: GlobalAttributes;
27
27
  };
28
28
 
29
- export interface ModalInterface extends BaseComponent {
29
+ export interface ModalInterface extends Omit<BaseComponent, 'onDrag' | 'onDragEnd' | 'onDragStart' | 'onResize'> {
30
30
  trigger(trigger: HTMLElement): HTMLElement;
31
31
  open(): void;
32
32
  close(): void;
@@ -523,4 +523,20 @@ ObservableArray.prototype.isNotEmpty = function () {
523
523
  return this.is((x) => x.length > 0);
524
524
  };
525
525
 
526
+ ObservableArray.prototype.fnPush = function (item) {
527
+ return this.push(item);
528
+ };
529
+
530
+ ObservableArray.prototype.fnRemove = function (item) {
531
+ return () => this.removeItem(item);
532
+ };
533
+
534
+ ObservableArray.prototype.fnRemoveAt = function (index) {
535
+ return () => this.remove(index);
536
+ };
537
+
538
+ ObservableArray.prototype.fnClear = function () {
539
+ return () => this.clear();
540
+ };
541
+
526
542
  export default ObservableArray;
@@ -646,10 +646,23 @@ ObservableItem.prototype.clone = function() {
646
646
  return new ObservableItem(clonedValue);
647
647
  };
648
648
 
649
- ObservableItem.prototype.asSet = function(value) {
649
+
650
+ ObservableItem.prototype.fnSet = function(value) {
650
651
  return () => this.set(value);
651
652
  };
652
653
 
653
- ObservableItem.prototype.asToggle = function() {
654
+ ObservableItem.prototype.fnToggle = function() {
654
655
  return () => this.toggle();
656
+ };
657
+
658
+ ObservableItem.prototype.fnSetTrue = function() {
659
+ return () => this.set(true);
660
+ };
661
+
662
+ ObservableItem.prototype.fnSetFalse = function() {
663
+ return () => this.set(false);
664
+ };
665
+
666
+ ObservableItem.prototype.fnReset = function() {
667
+ return () => this.reset();
655
668
  };
@@ -42,7 +42,7 @@ export interface FormattersStatic {
42
42
 
43
43
  export declare const Formatters: FormattersStatic;
44
44
 
45
- // -- Observable system type definitions ---------------------------------------
45
+ // -- Observable system type definitions -------------------------------------------------------------------------------
46
46
 
47
47
  export interface ObservableItem<T = any> {
48
48
  readonly $currentValue: T;
@@ -95,7 +95,7 @@ export interface ObservableItem<T = any> {
95
95
  set?: (value: T) => any;
96
96
  }): this;
97
97
 
98
- // -- comparison helpers (is*) -----------------------------------------------
98
+ // -- comparison helpers (is*) -------------------------------------------------------------------------------------
99
99
 
100
100
  isEqualTo(value: T | ObservableItem<T>): ObservableChecker<boolean>;
101
101
  isNotEqualTo(value: T | ObservableItem<T>): ObservableChecker<boolean>;
@@ -117,7 +117,7 @@ export interface ObservableItem<T = any> {
117
117
  isOneOf(collection: any[] | ObservableItem<any[]>): ObservableChecker<boolean>;
118
118
  isHaving(key: string | ObservableItem<string>): ObservableChecker<boolean>;
119
119
 
120
- // -- transform helpers (to*) -------------------------------------------------
120
+ // -- transform helpers (to*) -------------------------------------------------------------------------------------
121
121
 
122
122
  toUpperCase(): ObservableChecker<string>;
123
123
  toLowerCase(): ObservableChecker<string>;
@@ -130,9 +130,14 @@ export interface ObservableItem<T = any> {
130
130
  toClamped(min: number | ObservableItem<number>, max: number | ObservableItem<number>): ObservableChecker<number>;
131
131
  toPercent(total: number | ObservableItem<number>): ObservableChecker<number>;
132
132
 
133
- // -- callback builder (as*) -------------------------------------------------
134
- asSet(value: T): ObservableChecker<T>;
135
- asToggle(): ObservableChecker<boolean>;
133
+ // -- callback builder (as*) ---------------------------------------------------------------------------------------
134
+ fnSet(value: T): () => void;
135
+ fnToggle(): () => void;
136
+ fnSetTrue(): () => void;
137
+ fnSetFalse(): () => void;
138
+ fnReset(): () => void;
139
+
140
+ // -----------------------------------------------------------------------------------------------------------------
136
141
 
137
142
  toString(): string;
138
143
  valueOf(): T;
@@ -223,6 +228,13 @@ export interface ObservableArray<T> extends ObservableItem<T[]> {
223
228
  /** One-way sync — pushes mutations from this array to the target. Returns unsubscribe. */
224
229
  sync(target: ObservableArray<T>): Unsubscribe;
225
230
 
231
+ // -- callback builder (as*) ---------------------------------------------------------------------------------------
232
+ fnPush(value: T): () => void;
233
+ fnRemove(value: T): () => void;
234
+ fnRemoveAt(value: number): () => void;
235
+ fnClear(): () => void;
236
+
237
+
226
238
  clone(): ObservableArray<T>;
227
239
  isNotEmpty(): ObservableChecker<boolean>;
228
240
  }