@social-mail/social-mail-client 1.2.148 → 1.2.149

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 (47) hide show
  1. package/dist/admin/AdminAppIndex.pack.js +160 -74
  2. package/dist/admin/AdminAppIndex.pack.js.map +1 -1
  3. package/dist/admin/AdminAppIndex.pack.min.js +30 -20
  4. package/dist/admin/AdminAppIndex.pack.min.js.map +1 -1
  5. package/dist/common/form/AppForm.d.ts +3 -0
  6. package/dist/common/form/AppForm.d.ts.map +1 -0
  7. package/dist/common/form/AppForm.js +41 -0
  8. package/dist/common/form/AppForm.js.map +1 -0
  9. package/dist/common/pages/user/login/LoginPage.d.ts +2 -0
  10. package/dist/common/pages/user/login/LoginPage.d.ts.map +1 -1
  11. package/dist/common/pages/user/login/LoginPage.js +51 -59
  12. package/dist/common/pages/user/login/LoginPage.js.map +1 -1
  13. package/dist/common/pages/user/multi-factor/MultiFactorSetupPage.d.ts.map +1 -1
  14. package/dist/common/pages/user/multi-factor/MultiFactorSetupPage.js +8 -8
  15. package/dist/common/pages/user/multi-factor/MultiFactorSetupPage.js.map +1 -1
  16. package/dist/common/pages/user/multi-factor/SetupMultiFactorPage.d.ts.map +1 -1
  17. package/dist/common/pages/user/multi-factor/SetupMultiFactorPage.js +6 -6
  18. package/dist/common/pages/user/multi-factor/SetupMultiFactorPage.js.map +1 -1
  19. package/dist/site-editor/blocks/Billboard.js +4 -2
  20. package/dist/site-editor/blocks/Billboard.js.map +1 -1
  21. package/dist/site-editor/blocks/OutlineText.d.ts +2 -0
  22. package/dist/site-editor/blocks/OutlineText.d.ts.map +1 -0
  23. package/dist/site-editor/blocks/OutlineText.js +37 -0
  24. package/dist/site-editor/blocks/OutlineText.js.map +1 -0
  25. package/dist/site-editor/drag-drop/DragDropHelper.d.ts.map +1 -1
  26. package/dist/site-editor/drag-drop/DragDropHelper.js +6 -0
  27. package/dist/site-editor/drag-drop/DragDropHelper.js.map +1 -1
  28. package/dist/site-editor/editor/HtmlPageEditor.d.ts.map +1 -1
  29. package/dist/site-editor/editor/HtmlPageEditor.js +5 -3
  30. package/dist/site-editor/editor/HtmlPageEditor.js.map +1 -1
  31. package/dist/site-editor/editor/SelectedElement.js +1 -1
  32. package/dist/site-editor/editor/SelectedElement.js.map +1 -1
  33. package/dist/tsconfig.tsbuildinfo +1 -1
  34. package/dist/web/AppIndex.pack.js +166 -80
  35. package/dist/web/AppIndex.pack.js.map +1 -1
  36. package/dist/web/AppIndex.pack.min.js +36 -26
  37. package/dist/web/AppIndex.pack.min.js.map +1 -1
  38. package/package.json +1 -1
  39. package/src/common/form/AppForm.tsx +30 -0
  40. package/src/common/pages/user/login/LoginPage.tsx +52 -39
  41. package/src/common/pages/user/multi-factor/MultiFactorSetupPage.tsx +9 -8
  42. package/src/common/pages/user/multi-factor/SetupMultiFactorPage.tsx +5 -4
  43. package/src/site-editor/blocks/Billboard.tsx +3 -3
  44. package/src/site-editor/blocks/OutlineText.tsx +27 -0
  45. package/src/site-editor/drag-drop/DragDropHelper.ts +6 -0
  46. package/src/site-editor/editor/HtmlPageEditor.tsx +2 -0
  47. package/src/site-editor/editor/SelectedElement.tsx +1 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@social-mail/social-mail-client",
3
- "version": "1.2.148",
3
+ "version": "1.2.149",
4
4
  "description": "",
5
5
  "main": "index.js",
6
6
  "scripts": {
@@ -0,0 +1,30 @@
1
+ import XNode from "@web-atoms/core/dist/core/XNode";
2
+ import styled from "@web-atoms/core/dist/style/styled";
3
+ import Form from "@web-atoms/web-controls/dist/basic/Form";
4
+
5
+ styled.css `
6
+ padding: 10px;
7
+ border: solid 1px lightgray;
8
+ border-radius: 10px;
9
+ gap: 10px;
10
+
11
+ & h1, & h2, &h3, &h4, &h5, &h6 {
12
+ margin-block-start: 20px;
13
+ margin-block-end: 20px;
14
+ }
15
+
16
+ & input {
17
+ outline: none;
18
+ border: none;
19
+ border-bottom: solid 1px #80808080;
20
+ min-width: 250px;
21
+ }
22
+ `.installGlobal("[data-app-form=app-form]");
23
+
24
+ export default function AppForm(a, ... nodes: XNode[]) {
25
+ return <Form
26
+ data-app-form="app-form"
27
+ { ... a}>
28
+ { ... nodes}
29
+ </Form>;
30
+ }
@@ -18,26 +18,7 @@ import styled from "@web-atoms/core/dist/style/styled";
18
18
  import PageNavigator from "@web-atoms/web-controls/dist/PageNavigator";
19
19
  import ForgotPassword from "../forgot/ForgotPassword";
20
20
  import PopupService from "@web-atoms/core/dist/web/services/PopupService";
21
-
22
- const css = styled.css `
23
- & [data-border=frame] {
24
- padding: 10px;
25
- border-radius: 10px;
26
- gap: 10px;
27
-
28
- & h3 {
29
- margin-block-start: 20px;
30
- margin-block-end: 20px;
31
- }
32
-
33
- & input {
34
- outline: none;
35
- border: none;
36
- border-bottom: solid 1px #80808080;
37
- min-width: 250px;
38
- }
39
- }
40
- `.installLocal();
21
+ import AppForm from "../../../form/AppForm";
41
22
 
42
23
  const authTypes = [{
43
24
  label: "Authenticator (TOTP)",
@@ -76,9 +57,9 @@ export default class LoginPage extends ContentPage {
76
57
  this.model.checkPassword = "";
77
58
  this.model.timeToken = "";
78
59
  this.model.oneTimePassword = "";
79
- this.render(<div class={css}>
60
+ this.render(<div>
80
61
  <div data-layout="center-all">
81
- <Form data-border="frame">
62
+ <AppForm>
82
63
  <h3>
83
64
  Sign in to continue
84
65
  </h3>
@@ -105,7 +86,7 @@ export default class LoginPage extends ContentPage {
105
86
  data-click-event="forgot-password"
106
87
  data-layout="link">Forgot password?</span>
107
88
  </div>}
108
- </Form>
89
+ </AppForm>
109
90
  </div>
110
91
  </div>);
111
92
  }
@@ -123,41 +104,73 @@ export default class LoginPage extends ContentPage {
123
104
  return;
124
105
  }
125
106
 
107
+ this.showAuthenticator();
108
+
109
+ }
110
+
111
+ showAuthenticator() {
126
112
  this.renderer = <div data-layout="center-all">
127
- <Form>
128
- <FormField label="Enter">
129
- <ToggleButtonBar items={authTypes} value={Bind.twoWays(() => this.authType)}/>
130
- </FormField>
113
+ <AppForm>
114
+ <h4>Enter Authenticator Code</h4>
131
115
  <FormField
132
- label="Code"
133
- style-display={Bind.oneWay(() => this.authType === "totp")}>
134
- <input type="tel" value={Bind.twoWaysImmediate(() => this.model.timeToken)}/>
116
+ label="Code">
117
+ <input
118
+ autofocus={true}
119
+ type="tel" value={Bind.twoWaysImmediate(() => this.model.timeToken)} />
135
120
  </FormField>
121
+ <div data-layout="row">
122
+ <button
123
+ event-click={() => this.showOTP()}
124
+ data-layout="link">
125
+ Enter One Time Password instead.
126
+ </button>
127
+ </div>
128
+ <div data-layout="command-row">
129
+ <SaveIconTextButton
130
+ event-click={() => this.login()}
131
+ text="Go" />
132
+ </div>
133
+ </AppForm>
134
+ </div>;
135
+ }
136
+
137
+ showOTP() {
138
+ this.renderer = <div data-layout="center-all">
139
+ <AppForm>
140
+ <h4>Enter One Time Password</h4>
136
141
  <FormField
137
- label="One Time Password"
138
- style-display={Bind.oneWay(() => this.authType !== "totp")}>
139
- <input type="tel" value={Bind.twoWaysImmediate(() => this.model.oneTimePassword)}/>
142
+ label="Password">
143
+ <input
144
+ autofocus={true}
145
+ type="tel" value={Bind.twoWaysImmediate(() => this.model.oneTimePassword)} />
140
146
  </FormField>
147
+ <div data-layout="row">
148
+ <button
149
+ event-click={() => this.showAuthenticator()}
150
+ data-layout="link">
151
+ Enter Authenticator Code instad.
152
+ </button>
153
+ </div>
141
154
  <div data-layout="command-row">
142
155
  <SaveIconTextButton
143
156
  event-click={() => this.login()}
144
- text="Go"
145
- />
157
+ text="Go" />
146
158
  </div>
147
- </Form>
159
+ </AppForm>
148
160
  </div>;
149
-
150
161
  }
151
162
 
163
+
152
164
  async showChangePassword() {
153
165
  this.model.newPassword = "";
154
166
 
155
167
  this.renderer = <div>
156
168
  <div data-layout="center-all">
157
- <Form>
169
+ <AppForm>
158
170
  <div>Update your password, your one time password is expired.</div>
159
171
  <FormField
160
172
  label="Password"
173
+ autofocus={true}
161
174
  required={true}
162
175
  error={Bind.oneWay(() => Validators.isValidPassword(this.password)
163
176
  ? ""
@@ -182,7 +195,7 @@ export default class LoginPage extends ContentPage {
182
195
  data-submit-event="login"
183
196
  text="Change Password & Login"/>
184
197
  </div>
185
- </Form>
198
+ </AppForm>
186
199
  </div>
187
200
  </div>;
188
201
 
@@ -10,6 +10,7 @@ import Bind from "@web-atoms/core/dist/core/Bind";
10
10
  import Action from "@web-atoms/core/dist/view-model/Action";
11
11
  import AtomRepeater from "@web-atoms/web-controls/dist/basic/AtomRepeater";
12
12
  import { DateFormats } from "../../../date/DateFormats";
13
+ import AppForm from "../../../form/AppForm";
13
14
 
14
15
  export default class MultiFactorSetupPage extends ContentPage {
15
16
 
@@ -33,7 +34,7 @@ export default class MultiFactorSetupPage extends ContentPage {
33
34
 
34
35
  if (multiFactor) {
35
36
  this.renderer = <div data-layout="center-page-900px">
36
- <Form>
37
+ <AppForm>
37
38
  <FormField label="Methods">
38
39
  <AtomRepeater
39
40
  for="table"
@@ -57,7 +58,7 @@ export default class MultiFactorSetupPage extends ContentPage {
57
58
  text="Disable"
58
59
  />
59
60
  </div>
60
- </Form>
61
+ </AppForm>
61
62
  </div>;
62
63
  return;
63
64
  }
@@ -67,7 +68,7 @@ export default class MultiFactorSetupPage extends ContentPage {
67
68
  || this.model.authFactors.filter((i) => i.method === "one-time").length < 8;
68
69
 
69
70
  this.renderer = <div data-layout="center-page-900px">
70
- <Form>
71
+ <AppForm>
71
72
  <FormField label="Methods">
72
73
  <AtomRepeater
73
74
  for="table"
@@ -106,7 +107,7 @@ export default class MultiFactorSetupPage extends ContentPage {
106
107
  text="Disable"
107
108
  />
108
109
  </div>}
109
- </Form>
110
+ </AppForm>
110
111
  </div>;
111
112
  }
112
113
 
@@ -151,7 +152,7 @@ export default class MultiFactorSetupPage extends ContentPage {
151
152
  const authFactor = await this.userService.createAuthFactor(this.model);
152
153
  this.authFactor = authFactor;
153
154
  this.renderer = <div data-layout="center-page-900px">
154
- <Form>
155
+ <AppForm>
155
156
  <FormField label="">
156
157
  <div>Scan following QR Code in any compatible Authenticator App. Enter the generated code and hit the verify button.</div>
157
158
  </FormField>
@@ -173,7 +174,7 @@ export default class MultiFactorSetupPage extends ContentPage {
173
174
  text="Verify"
174
175
  />
175
176
  </div>
176
- </Form>
177
+ </AppForm>
177
178
  </div>;
178
179
  }
179
180
 
@@ -194,7 +195,7 @@ export default class MultiFactorSetupPage extends ContentPage {
194
195
  }
195
196
  text += "\r\n";
196
197
  this.renderer = <div data-layout="center-page-900px">
197
- <Form>
198
+ <AppForm>
198
199
  <FormField label="One Time Passwords">
199
200
  <div>Please copy and save these passwords somewhere safe. You can use
200
201
  them if you cannot access Authenticator app.
@@ -215,7 +216,7 @@ export default class MultiFactorSetupPage extends ContentPage {
215
216
  text="Go"
216
217
  />
217
218
  </div>
218
- </Form>
219
+ </AppForm>
219
220
  </div>;
220
221
  }
221
222
 
@@ -10,6 +10,7 @@ import Bind from "@web-atoms/core/dist/core/Bind";
10
10
  import Action from "@web-atoms/core/dist/view-model/Action";
11
11
  import AtomRepeater from "@web-atoms/web-controls/dist/basic/AtomRepeater";
12
12
  import { DateFormats } from "../../../date/DateFormats";
13
+ import AppForm from "../../../form/AppForm";
13
14
 
14
15
  export default class SetupMultiFactorPage extends PopupWindowPage {
15
16
 
@@ -61,7 +62,7 @@ export default class SetupMultiFactorPage extends PopupWindowPage {
61
62
  const authFactor = await this.userService.createAuthFactor(this.model);
62
63
  this.authFactor = authFactor;
63
64
  this.renderer = <div data-layout="center-page-900px">
64
- <Form>
65
+ <AppForm>
65
66
  <FormField label="">
66
67
  <div>Scan following QR Code in any compatible Authenticator App. Enter the generated code and hit the verify button.</div>
67
68
  </FormField>
@@ -83,7 +84,7 @@ export default class SetupMultiFactorPage extends PopupWindowPage {
83
84
  text="Verify"
84
85
  />
85
86
  </div>
86
- </Form>
87
+ </AppForm>
87
88
  </div>;
88
89
  }
89
90
 
@@ -118,7 +119,7 @@ export default class SetupMultiFactorPage extends PopupWindowPage {
118
119
 
119
120
  text += "\r\n";
120
121
  this.renderer = <div data-layout="center-page-900px">
121
- <Form>
122
+ <AppForm>
122
123
  <FormField label="One Time Passwords">
123
124
  <div>Please copy and save these one time codes somewhere safe. You can use
124
125
  them if you cannot access Authenticator app.
@@ -139,7 +140,7 @@ export default class SetupMultiFactorPage extends PopupWindowPage {
139
140
  text="Setup Authenticator"
140
141
  />
141
142
  </div>
142
- </Form>
143
+ </AppForm>
143
144
  </div>;
144
145
  }
145
146
 
@@ -71,10 +71,10 @@ StylerSets.register("low", styled.css `
71
71
  );
72
72
 
73
73
  export const Billboard = Block({
74
- className: "fad fa-symbols",
74
+ className: "fad fa-text-size",
75
75
  title: "Add Billboard",
76
76
  factory: () => <section styler-layout="billboard">
77
- <h1></h1>
78
- <h4></h4>
77
+ <h1 styler-color="border-color">Billboard</h1>
78
+ <h4>Billboard</h4>
79
79
  </section>
80
80
  });
@@ -0,0 +1,27 @@
1
+ import XNode from "@web-atoms/core/dist/core/XNode";
2
+ import { Block } from "./Block";
3
+ import styled from "@web-atoms/core/dist/style/styled";
4
+ import { StylerSets } from "../styler/StylerSets";
5
+
6
+ styled.css `
7
+ -webkit-text-fill-color: transparent;
8
+ -webkit-text-stroke-color: currentColor;
9
+ -webkit-text-stroke-width: 1px;
10
+ text-decoration: none;
11
+ font-style: normal;
12
+ font-weight: 900;
13
+ text-align: center;
14
+ padding-left: 7px;
15
+ font-family: monospace;
16
+ font-size: 1.5rem;
17
+ `.installGlobal(".editor-outlined-text");
18
+
19
+ export const OutlineText = Block({
20
+ className: "editor-outlined-text",
21
+ title: "Add Text with Outline",
22
+ text:"A",
23
+ factory: () => <div
24
+ styler-text-outline="size1px">
25
+ Outline
26
+ </div>
27
+ });
@@ -23,12 +23,14 @@ export function InstallDragDropHelper(editor: HtmlPageEditor) {
23
23
  const dropTarget = (editor as any).dropTarget as SelectedElement;
24
24
 
25
25
  document.addEventListener("dragstart", (e) => {
26
+ setTimeout(() => document.body.contentEditable = "false", 0);
26
27
  dragged = e.target as HTMLElement;
27
28
  e.dataTransfer.dropEffect = "move";
28
29
  e.dataTransfer.setDragImage(dragged, 0, 0);
29
30
  });
30
31
 
31
32
  document.addEventListener("dragover", (e) => {
33
+ setTimeout(() => document.body.contentEditable = "false", 0);
32
34
  const target = dropTarget.getDropTarget( dragged, e.target as HTMLElement);
33
35
  e.preventDefault();
34
36
  e.dataTransfer.dropEffect = "copy";
@@ -68,6 +70,7 @@ export function InstallDragDropHelper(editor: HtmlPageEditor) {
68
70
  e.preventDefault();
69
71
  dropTarget.clear();
70
72
  dragged = null;
73
+ setTimeout(() => document.body.contentEditable = "true", 0);
71
74
  });
72
75
 
73
76
  document.addEventListener("drop", (e) => {
@@ -87,6 +90,7 @@ export function InstallDragDropHelper(editor: HtmlPageEditor) {
87
90
  target.appendChild(insert);
88
91
  dropTarget.clear();
89
92
  editor.commit();
93
+ setTimeout(() => document.body.contentEditable = "true", 0);
90
94
  return;
91
95
  }
92
96
  switch(dropTarget.dropAnchor) {
@@ -101,10 +105,12 @@ export function InstallDragDropHelper(editor: HtmlPageEditor) {
101
105
  }
102
106
  editor.commit();
103
107
  dropTarget.clear();
108
+ setTimeout(() => document.body.contentEditable = "true", 0);
104
109
  });
105
110
 
106
111
  document.addEventListener("dragleave", (e) => {
107
112
  dropTarget.clear();
113
+ setTimeout(() => document.body.contentEditable = "true", 0);
108
114
  });
109
115
 
110
116
  setTimeout(() => {
@@ -34,6 +34,7 @@ import { descendentElementIterator } from "@web-atoms/core/dist/web/core/AtomUI"
34
34
  import { PriceTable } from "../blocks/PriceBox";
35
35
  import { BindableProperty } from "@web-atoms/core/dist/core/BindableProperty";
36
36
  import { Billboard } from "../blocks/Billboard";
37
+ import { OutlineText } from "../blocks/OutlineText";
37
38
 
38
39
  styled.css `
39
40
  display: grid;
@@ -286,6 +287,7 @@ export default class HtmlPageEditor extends AtomControl {
286
287
  <PriceTable/>
287
288
  <TypeWriterComponent/>
288
289
  <Billboard/>
290
+ <OutlineText/>
289
291
  </EditorToolbar>
290
292
  <div data-element="editor"
291
293
  style-max-width={Bind.oneWay(() => this.maxWidth > 768 ? "" : this.maxWidth + "px" )}>
@@ -66,7 +66,7 @@ export class SelectedElement {
66
66
  const isDropTarget = /^(main|section)$/i;
67
67
 
68
68
  // check if dragged has root only....
69
- if (isDropTarget.test(dragged.tagName)) {
69
+ if (isDropTarget.test(dragged?.tagName)) {
70
70
  let start = target;
71
71
  while (!isDropTarget.test(start.tagName)) {
72
72
  start = start.parentElement;