@solidstarters/solid-core 1.2.92 → 1.2.95

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 (155) hide show
  1. package/# Password field.md +8 -0
  2. package/dist/controllers/import-transaction.controller.d.ts +2 -1
  3. package/dist/controllers/import-transaction.controller.d.ts.map +1 -1
  4. package/dist/controllers/import-transaction.controller.js +16 -4
  5. package/dist/controllers/import-transaction.controller.js.map +1 -1
  6. package/dist/controllers/locale.controller.d.ts +41 -0
  7. package/dist/controllers/locale.controller.d.ts.map +1 -0
  8. package/dist/controllers/locale.controller.js +179 -0
  9. package/dist/controllers/locale.controller.js.map +1 -0
  10. package/dist/controllers/view-metadata.controller.d.ts +1 -0
  11. package/dist/controllers/view-metadata.controller.d.ts.map +1 -1
  12. package/dist/dtos/basic-filters.dto.d.ts +2 -0
  13. package/dist/dtos/basic-filters.dto.d.ts.map +1 -1
  14. package/dist/dtos/basic-filters.dto.js +11 -1
  15. package/dist/dtos/basic-filters.dto.js.map +1 -1
  16. package/dist/dtos/create-locale.dto.d.ts +6 -0
  17. package/dist/dtos/create-locale.dto.d.ts.map +1 -0
  18. package/dist/dtos/create-locale.dto.js +43 -0
  19. package/dist/dtos/create-locale.dto.js.map +1 -0
  20. package/dist/dtos/create-menu-item-metadata.dto.d.ts +2 -1
  21. package/dist/dtos/create-menu-item-metadata.dto.d.ts.map +1 -1
  22. package/dist/dtos/create-menu-item-metadata.dto.js +22 -3
  23. package/dist/dtos/create-menu-item-metadata.dto.js.map +1 -1
  24. package/dist/dtos/create-model-metadata.dto.d.ts +1 -0
  25. package/dist/dtos/create-model-metadata.dto.d.ts.map +1 -1
  26. package/dist/dtos/create-model-metadata.dto.js +7 -2
  27. package/dist/dtos/create-model-metadata.dto.js.map +1 -1
  28. package/dist/dtos/create-role-metadata.dto.d.ts.map +1 -1
  29. package/dist/dtos/create-role-metadata.dto.js +11 -0
  30. package/dist/dtos/create-role-metadata.dto.js.map +1 -1
  31. package/dist/dtos/update-locale.dto.d.ts +7 -0
  32. package/dist/dtos/update-locale.dto.d.ts.map +1 -0
  33. package/dist/dtos/update-locale.dto.js +48 -0
  34. package/dist/dtos/update-locale.dto.js.map +1 -0
  35. package/dist/dtos/update-menu-item-metadata.dto.d.ts +2 -1
  36. package/dist/dtos/update-menu-item-metadata.dto.d.ts.map +1 -1
  37. package/dist/dtos/update-menu-item-metadata.dto.js +24 -5
  38. package/dist/dtos/update-menu-item-metadata.dto.js.map +1 -1
  39. package/dist/dtos/update-role-metadata.dto.d.ts.map +1 -1
  40. package/dist/dtos/update-role-metadata.dto.js +12 -1
  41. package/dist/dtos/update-role-metadata.dto.js.map +1 -1
  42. package/dist/entities/common.entity.d.ts +3 -0
  43. package/dist/entities/common.entity.d.ts.map +1 -1
  44. package/dist/entities/common.entity.js +13 -1
  45. package/dist/entities/common.entity.js.map +1 -1
  46. package/dist/entities/locale.entity.d.ts +7 -0
  47. package/dist/entities/locale.entity.d.ts.map +1 -0
  48. package/dist/entities/locale.entity.js +43 -0
  49. package/dist/entities/locale.entity.js.map +1 -0
  50. package/dist/entities/menu-item-metadata.entity.d.ts +2 -1
  51. package/dist/entities/menu-item-metadata.entity.d.ts.map +1 -1
  52. package/dist/entities/menu-item-metadata.entity.js +13 -8
  53. package/dist/entities/menu-item-metadata.entity.js.map +1 -1
  54. package/dist/entities/model-metadata.entity.d.ts +1 -0
  55. package/dist/entities/model-metadata.entity.d.ts.map +1 -1
  56. package/dist/entities/model-metadata.entity.js +5 -1
  57. package/dist/entities/model-metadata.entity.js.map +1 -1
  58. package/dist/helpers/field-crud-managers/ManyToManyRelationFieldCrudManager.d.ts.map +1 -1
  59. package/dist/helpers/field-crud-managers/ManyToManyRelationFieldCrudManager.js.map +1 -1
  60. package/dist/helpers/field-crud-managers/OneToManyRelationFieldCrudManager.d.ts.map +1 -1
  61. package/dist/helpers/field-crud-managers/OneToManyRelationFieldCrudManager.js.map +1 -1
  62. package/dist/helpers/module-metadata-helper.service.d.ts.map +1 -1
  63. package/dist/helpers/module-metadata-helper.service.js.map +1 -1
  64. package/dist/helpers/solid-registry.d.ts +2 -0
  65. package/dist/helpers/solid-registry.d.ts.map +1 -1
  66. package/dist/helpers/solid-registry.js +5 -0
  67. package/dist/helpers/solid-registry.js.map +1 -1
  68. package/dist/index.d.ts +5 -0
  69. package/dist/index.d.ts.map +1 -1
  70. package/dist/index.js +5 -0
  71. package/dist/index.js.map +1 -1
  72. package/dist/seeders/seed-data/solid-core-metadata.json +234 -0
  73. package/dist/services/authentication.service.d.ts.map +1 -1
  74. package/dist/services/authentication.service.js +8 -3
  75. package/dist/services/authentication.service.js.map +1 -1
  76. package/dist/services/crud-helper.service.d.ts +1 -1
  77. package/dist/services/crud-helper.service.d.ts.map +1 -1
  78. package/dist/services/crud-helper.service.js +17 -2
  79. package/dist/services/crud-helper.service.js.map +1 -1
  80. package/dist/services/crud.service.d.ts.map +1 -1
  81. package/dist/services/crud.service.js +19 -6
  82. package/dist/services/crud.service.js.map +1 -1
  83. package/dist/services/import-transaction.service.d.ts +19 -6
  84. package/dist/services/import-transaction.service.d.ts.map +1 -1
  85. package/dist/services/import-transaction.service.js +214 -87
  86. package/dist/services/import-transaction.service.js.map +1 -1
  87. package/dist/services/locale.service.d.ts +26 -0
  88. package/dist/services/locale.service.d.ts.map +1 -0
  89. package/dist/services/locale.service.js +64 -0
  90. package/dist/services/locale.service.js.map +1 -0
  91. package/dist/services/mediaStorageProviders/file-storage-provider.js.map +1 -1
  92. package/dist/services/menu-item-metadata.service.d.ts.map +1 -1
  93. package/dist/services/menu-item-metadata.service.js +1 -0
  94. package/dist/services/menu-item-metadata.service.js.map +1 -1
  95. package/dist/services/selection-providers/locale-list-selection-provider.service.d.ts +9 -0
  96. package/dist/services/selection-providers/locale-list-selection-provider.service.d.ts.map +1 -0
  97. package/dist/services/selection-providers/locale-list-selection-provider.service.js +87 -0
  98. package/dist/services/selection-providers/locale-list-selection-provider.service.js.map +1 -0
  99. package/dist/services/setting.service.d.ts.map +1 -1
  100. package/dist/services/setting.service.js +4 -2
  101. package/dist/services/setting.service.js.map +1 -1
  102. package/dist/services/view-metadata.service.d.ts +3 -0
  103. package/dist/services/view-metadata.service.d.ts.map +1 -1
  104. package/dist/services/view-metadata.service.js +73 -7
  105. package/dist/services/view-metadata.service.js.map +1 -1
  106. package/dist/solid-core.module.d.ts.map +1 -1
  107. package/dist/solid-core.module.js +8 -0
  108. package/dist/solid-core.module.js.map +1 -1
  109. package/dist/subscribers/model.subscriber.d.ts.map +1 -1
  110. package/dist/subscribers/model.subscriber.js +24 -0
  111. package/dist/subscribers/model.subscriber.js.map +1 -1
  112. package/dist/transformers/datetime-transformer.d.ts +4 -0
  113. package/dist/transformers/datetime-transformer.d.ts.map +1 -0
  114. package/dist/transformers/datetime-transformer.js +11 -0
  115. package/dist/transformers/datetime-transformer.js.map +1 -0
  116. package/dist/tsconfig.tsbuildinfo +1 -1
  117. package/package.json +2 -1
  118. package/src/controllers/import-transaction.controller.ts +9 -3
  119. package/src/controllers/locale.controller.ts +94 -0
  120. package/src/dtos/basic-filters.dto.ts +13 -1
  121. package/src/dtos/create-locale.dto.ts +17 -0
  122. package/src/dtos/create-menu-item-metadata.dto.ts +21 -13
  123. package/src/dtos/create-model-metadata.dto.ts +5 -1
  124. package/src/dtos/create-role-metadata.dto.ts +48 -45
  125. package/src/dtos/update-locale.dto.ts +23 -0
  126. package/src/dtos/update-menu-item-metadata.dto.ts +23 -16
  127. package/src/dtos/update-role-metadata.dto.ts +49 -47
  128. package/src/entities/common.entity.ts +11 -1
  129. package/src/entities/locale.entity.ts +14 -0
  130. package/src/entities/menu-item-metadata.entity.ts +14 -14
  131. package/src/entities/model-metadata.entity.ts +3 -0
  132. package/src/helpers/field-crud-managers/ManyToManyRelationFieldCrudManager.ts +2 -1
  133. package/src/helpers/field-crud-managers/OneToManyRelationFieldCrudManager.ts +1 -0
  134. package/src/helpers/module-metadata-helper.service.ts +0 -1
  135. package/src/helpers/solid-registry.ts +11 -2
  136. package/src/index.ts +6 -3
  137. package/src/seeders/seed-data/email-templates/forgot-password.handlebars.html +134 -154
  138. package/src/seeders/seed-data/email-templates/on-force-password-change.handlebars.html +141 -195
  139. package/src/seeders/seed-data/email-templates/otp-on-login.handlebars.html +130 -144
  140. package/src/seeders/seed-data/email-templates/otp-on-register.handlebars.html +131 -145
  141. package/src/seeders/seed-data/solid-core-metadata.json +234 -0
  142. package/src/services/authentication.service.ts +8 -3
  143. package/src/services/crud-helper.service.ts +30 -12
  144. package/src/services/crud.service.ts +51 -35
  145. package/src/services/import-transaction.service.ts +313 -121
  146. package/src/services/locale.service.ts +37 -0
  147. package/src/services/mediaStorageProviders/file-storage-provider.ts +1 -1
  148. package/src/services/menu-item-metadata.service.ts +2 -0
  149. package/src/services/pending_import_issues +3 -0
  150. package/src/services/selection-providers/locale-list-selection-provider.service.ts +58 -0
  151. package/src/services/setting.service.ts +4 -2
  152. package/src/services/view-metadata.service.ts +179 -14
  153. package/src/solid-core.module.ts +8 -0
  154. package/src/subscribers/model.subscriber.ts +24 -0
  155. package/src/transformers/datetime-transformer.ts +12 -0
@@ -39,6 +39,9 @@ export class ModelMetadata extends CommonEntity {
39
39
  @Column({ name: "internationalisation", default: false })
40
40
  internationalisation: boolean;
41
41
 
42
+ @Column({ name: "draftPublishWorkflow", default: false })
43
+ draftPublishWorkflow: boolean;
44
+
42
45
  @OneToMany(() => FieldMetadata, (field) => field.model)
43
46
  fields: FieldMetadata[];
44
47
 
@@ -190,10 +190,11 @@ export class ManyToManyRelationFieldCrudManager implements FieldCrudManager {
190
190
  return this.options.required;
191
191
  }
192
192
 
193
+ // TODO: We have moved this to SolidRegistry service, refactor to use that service.
193
194
  // Returns the entity target class from the entity name
194
195
  private getEntityTarget(entityName: string): any { //TODO Can be refactored to use this function from crud helper service
195
196
  const entityMetadatas = this.options.entityManager.connection.entityMetadatas;
196
197
  const entityMetadata = entityMetadatas.find(em => em.name === entityName);
197
198
  return entityMetadata.target;
198
199
  }
199
- }
200
+ }
@@ -195,6 +195,7 @@ export class OneToManyRelationFieldCrudManager implements FieldCrudManager {
195
195
  return this.options.required;
196
196
  }
197
197
 
198
+ // TODO: We have moved this to SolidRegistry service, refactor to use that service.
198
199
  // Returns the entity target class from the entity name
199
200
  private getEntityTarget(entityName: string): any { //TODO Can be refactored to use this function from crud helper service
200
201
  const entityMetadatas = this.options.entityManager.connection.entityMetadatas;
@@ -35,5 +35,4 @@ export class ModuleMetadataHelperService {
35
35
  }
36
36
  return filePath;
37
37
  }
38
-
39
38
  }
@@ -2,6 +2,7 @@ import { Injectable } from '@nestjs/common';
2
2
  import { InstanceWrapper } from '@nestjs/core/injector/instance-wrapper';
3
3
  import { ISelectionProvider, ISelectionProviderContext } from "../interfaces";
4
4
  import { SecurityRule } from 'src/entities/security-rule.entity';
5
+ import { EntityManager } from 'typeorm';
5
6
 
6
7
  type ControllerMetadata = {
7
8
  name: string;
@@ -41,7 +42,7 @@ export class SolidRegistry {
41
42
  private computedFieldProviders: Set<InstanceWrapper> = new Set();
42
43
  private solidDatabaseModules: Set<InstanceWrapper> = new Set();
43
44
  private controllers: Set<ControllerMetadata> = new Set();
44
- private modules : Set<InstanceWrapper> = new Set();
45
+ private modules: Set<InstanceWrapper> = new Set();
45
46
  private securityRules: SecurityRule[] = [];
46
47
 
47
48
  registerController(name: string, methodNames: string[]): void {
@@ -116,7 +117,7 @@ export class SolidRegistry {
116
117
  this.securityRules = securityRules;
117
118
  }
118
119
 
119
- getSecurityRules(modelSingularName:string, roleNames: string[] = []): SecurityRule[] {
120
+ getSecurityRules(modelSingularName: string, roleNames: string[] = []): SecurityRule[] {
120
121
  // If no role is provided, return all security rules for the model
121
122
  if (roleNames.length === 0) {
122
123
  return this.securityRules.filter((rule) => rule.modelMetadata.singularName === modelSingularName);
@@ -126,4 +127,12 @@ export class SolidRegistry {
126
127
  return rule.modelMetadata.singularName === modelSingularName && roleNames.includes(rule.role.name);
127
128
  });
128
129
  }
130
+
131
+ // Returns the entity target class from the entity name
132
+ getEntityTarget(entityManager: EntityManager, entityName: string): any { //TODO Can be refactored to use this function from crud helper service
133
+ const entityMetadatas = entityManager.connection.entityMetadatas;
134
+ const entityMetadata = entityMetadatas.find(em => em.name === entityName);
135
+ return entityMetadata.target;
136
+ }
137
+
129
138
  }
package/src/index.ts CHANGED
@@ -45,6 +45,7 @@ export * from './dtos/create-user.dto'
45
45
  export * from './dtos/create-view-metadata.dto'
46
46
  export * from './dtos/create-chatter-message.dto'
47
47
  export * from './dtos/create-chatter-message-details.dto'
48
+ export * from './dtos/create-locale.dto'
48
49
  export * from './dtos/fetch-roles.dto'
49
50
  export * from './dtos/initiate-forgot-password.dto'
50
51
  export * from './dtos/mutate-role-permissions.dto'
@@ -84,7 +85,7 @@ export * from './dtos/create-security-rule.dto'
84
85
  export * from './dtos/update-security-rule.dto'
85
86
  export * from './dtos/update-chatter-message.dto'
86
87
  export * from './dtos/update-chatter-message-details.dto'
87
-
88
+ export * from './dtos/update-locale.dto'
88
89
  export * from './entities/action-metadata.entity'
89
90
  export * from './entities/common.entity'
90
91
  export * from './entities/email-attachment.entity'
@@ -115,7 +116,7 @@ export * from './entities/export-template.entity'
115
116
  export * from './entities/export-transaction.entity'
116
117
  export * from './entities/import-transaction.entity'
117
118
  export * from './entities/import-transaction-error-log.entity'
118
-
119
+ export * from './entities/locale.entity'
119
120
  export * from './enums/auth-type.enum'
120
121
 
121
122
  export * from './filters/http-exception.filter'
@@ -232,6 +233,7 @@ export * from './services/security-rule.service'
232
233
  export * from './services/request-context.service'
233
234
  export * from './services/chatter-message.service'
234
235
  export * from './services/chatter-message-details.service'
236
+ export * from './services/locale.service'
235
237
  // Repositories
236
238
  export * from './repository/solid-base.repository'
237
239
  export * from './repository/security-rule.repository'
@@ -256,4 +258,5 @@ export * from './constants'
256
258
  export * from './interfaces'
257
259
  export * from './solid-core.module'
258
260
 
259
- export * from './winston.logger'
261
+ export * from './winston.logger'
262
+ export * from './transformers/datetime-transformer'
@@ -1,169 +1,149 @@
1
- <!DOCTYPE html
2
- PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
3
- <html xmlns="http://www.w3.org/1999/xhtml">
1
+ <!DOCTYPE html>
2
+ <html>
4
3
 
5
4
  <head>
6
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
7
- <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
8
- <style type="text/css" rel="stylesheet" media="all">
9
- @media only screen and (max-width: 600px) {
5
+ <meta charset="UTF-8" />
6
+ <title>Reset Your Password</title>
7
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
8
+
9
+ <style>
10
+ @import url("https://fonts.googleapis.com/css?family=Nunito+Sans:400,700&display=swap");
11
+
12
+ body {
13
+ margin: 0;
14
+ padding: 0;
15
+ background-color: #f4f4f7;
16
+ font-family: "Nunito Sans", Helvetica, Arial, sans-serif;
17
+ color: #333;
18
+ }
19
+
20
+ .email-wrapper {
21
+ max-width: 600px;
22
+ margin: 0 auto;
23
+ padding: 20px;
24
+ }
25
+
26
+ .logo {
27
+ text-align: center;
28
+ margin-bottom: 20px;
29
+ }
30
+
31
+ .logo img {
32
+ height: 50px;
33
+ }
34
+
35
+ .content-box {
36
+ background-color: #ffffff;
37
+ padding: 40px;
38
+ border-radius: 8px;
39
+ }
40
+
41
+ .title {
42
+ font-size: 22px;
43
+ margin-bottom: 10px;
44
+ }
45
+
46
+ .intro {
47
+ font-size: 16px;
48
+ line-height: 1.6;
49
+ margin: 0;
50
+ }
51
+
52
+ .credentials {
53
+ background-color: #f9f9f9;
54
+ padding: 15px;
55
+ border-radius: 5px;
56
+ margin-bottom: 30px;
57
+ }
58
+
59
+ .credentials p {
60
+ margin: 0 0 10px;
61
+ font-size: 16px;
62
+ }
10
63
 
11
- .email-body_inner,
12
- .email-footer {
64
+ .button-container {
65
+ text-align: center;
66
+ margin-bottom: 30px;
67
+ margin-top: 20px;
68
+ }
69
+
70
+ .button {
71
+ display: inline-block;
72
+ padding: 12px 24px;
73
+ background-color: #722ED1;
74
+ color: #ffffff;
75
+ text-decoration: none;
76
+ font-weight: bold;
77
+ border-radius: 5px;
78
+ }
79
+
80
+ .footer-text {
81
+ font-size: 16px;
82
+ line-height: 1.6;
83
+ }
84
+
85
+ .footer {
86
+ text-align: center;
87
+ font-size: 12px;
88
+ color: #6b6e76;
89
+ margin-top: 40px;
90
+ }
91
+
92
+ @media only screen and (max-width: 600px) {
93
+ .email-wrapper {
13
94
  width: 100% !important;
95
+ padding: 20px 0 !important;
96
+ margin: 0;
97
+ }
98
+
99
+ .content-box {
100
+ padding: 20px !important;
101
+ border-radius: 0;
102
+ }
103
+
104
+ .title {
105
+ font-size: 18px !important;
14
106
  }
15
- }
16
107
 
17
- @media only screen and (max-width: 500px) {
18
108
  .button {
19
- width: 100% !important;
109
+ /* width: 100% !important; */
110
+ padding: 10px !important;
111
+ font-size: 14px;
20
112
  }
21
113
  }
22
114
  </style>
23
115
  </head>
24
116
 
25
- <body dir="ltr"
26
- style="height: 100%; margin: 0; line-height: 1.4; background-color: #F2F4F6; color: #74787E; -webkit-text-size-adjust: none; font-family: Arial, 'Helvetica Neue', Helvetica, sans-serif; -webkit-box-sizing: border-box; box-sizing: border-box; width: 100%;">
27
- <table class="email-wrapper" width="100%" cellpadding="0" cellspacing="0"
28
- style="font-family: Arial, 'Helvetica Neue', Helvetica, sans-serif; -webkit-box-sizing: border-box; box-sizing: border-box; width: 100%; margin: 0; padding: 0; background-color: #F2F4F6;"
29
- bgcolor="#F2F4F6">
30
- <tr>
31
- <td align="center"
32
- style="font-family: Arial, 'Helvetica Neue', Helvetica, sans-serif; -webkit-box-sizing: border-box; box-sizing: border-box;">
33
- <table class="email-content" width="100%" cellpadding="0" cellspacing="0"
34
- style="font-family: Arial, 'Helvetica Neue', Helvetica, sans-serif; -webkit-box-sizing: border-box; box-sizing: border-box; width: 100%; margin: 0; padding: 0;">
35
- <!-- Logo -->
36
- <tr>
37
- <td class="email-masthead"
38
- style="font-family: Arial, 'Helvetica Neue', Helvetica, sans-serif; -webkit-box-sizing: border-box; box-sizing: border-box; padding: 25px 0; text-align: center;"
39
- align="center">
40
- <!-- <a class="email-masthead_name" href="{{ solidAppWebsiteUrl }}" target="_blank"
41
- style="font-family: Arial, 'Helvetica Neue', Helvetica, sans-serif; -webkit-box-sizing: border-box; box-sizing: border-box; font-size: 16px; font-weight: bold; color: #2F3133; text-decoration: none; text-shadow: 0 1px 0 white;">
42
-
43
- {{ solidAppName }}
44
-
45
- </a> -->
46
- <img alt="srmd-logo" src="https://portal.srmdcourses.org/srmd-main-logo.png"
47
- width="180" />
48
- <h1
49
- style="margin-top: 20px; color: #333; font-size: 19px; font-weight: 400; font-family: Arial, 'Helvetica Neue', Helvetica, sans-serif; -webkit-box-sizing: border-box; box-sizing: border-box; text-align: center;">
50
- Hi <span style="font-weight: bold;">{{ firstName }}</span>, Welcome to
51
- </h1>
52
-
53
- <h1
54
- style="margin-top: 10px; margin-bottom: 0px; color: #E48C74; font-size: 2rem; font-weight: 700; font-family: Arial, 'Helvetica Neue', Helvetica, sans-serif; -webkit-box-sizing: border-box; box-sizing: border-box; text-align: center;">
55
- Holistic Wellness
56
- </h1>
57
- </td>
58
- </tr>
59
- <!-- Email Body -->
60
- <tr>
61
- <td class="email-body" width="100%"
62
- style="font-family: Arial, 'Helvetica Neue', Helvetica, sans-serif; -webkit-box-sizing: border-box; box-sizing: border-box; width: 100%; margin: 0; padding: 0; border-top: 1px solid #EDEFF2; border-bottom: 1px solid #EDEFF2; background-color: #F2F4F6;"
63
- bgcolor="#FFF">
64
- <table class="email-body_inner" align="center" width="600" cellpadding="0" cellspacing="0"
65
- style="font-family: Arial, 'Helvetica Neue', Helvetica, sans-serif; -webkit-box-sizing: border-box; box-sizing: border-box; width: 600px; margin: 0 auto; padding: 0; background-color: #fff;">
66
- <!-- Body content -->
67
- <tr>
68
- <td class="content-cell"
69
- style="font-family: Arial, 'Helvetica Neue', Helvetica, sans-serif; -webkit-box-sizing: border-box; box-sizing: border-box; padding: 35px;">
70
-
71
-
72
-
73
- <!-- Dictionary -->
74
-
75
-
76
- <!-- Table -->
77
-
78
-
79
-
80
-
81
- <!-- Action -->
82
-
83
- <p
84
- style="margin-top: 0; color: #333; font-size: 16px; line-height: 1.5em; font-family: Arial, 'Helvetica Neue', Helvetica, sans-serif; -webkit-box-sizing: border-box; box-sizing: border-box; text-align: center;">
85
- Click on the below link to reset your password.
86
- </p>
87
- <!--[if mso]>
88
- <center>
89
- <v:roundrect xmlns:v="urn:schemas-microsoft-com:vml" xmlns:w="urn:schemas-microsoft-com:office:word" href="https://example.com" style="height: 45px; v-text-anchor: middle; width: 200px;" arcsize="10%" stroke="f" fillcolor="#22BC66">
90
- <w:anchorlock/>
91
- <center style="color: #ffffff; font-family: sans-serif; font-size: 15px;">
92
- Reset Password
93
- </center>
94
- </v:roundrect>
95
- </center>
96
- <![endif]-->
97
- <![if !mso]>
98
- <table class="body-action" align="center" cellpadding="0" cellspacing="0"
99
- style="font-family: Arial, 'Helvetica Neue', Helvetica, sans-serif; width: 100%; margin: 30px auto; padding: 0; text-align: center;">
100
- <tr>
101
- <td align="center"
102
- style="font-family: Arial, 'Helvetica Neue', Helvetica, sans-serif; text-align: center;">
103
- <a href="{{ passwordResetLink }}" target="_blank" style="
104
- display: inline-block;
105
- background-color: #E48C74;
106
- color: #fff;
107
- text-decoration: none;
108
- padding: 12px 24px;
109
- font-weight: 700;
110
- font-size: 14px;
111
- line-height: normal;
112
- border-radius: 8px; /* Rounded corners */
113
- text-align: center;
114
- box-shadow: 0px 4px 4px rgba(0, 0, 0, 0.25); /* Shadow for better design */
115
- ">
116
- Reset Password
117
- <span style="display: inline-block; vertical-align: middle;">
118
- <svg xmlns="http://www.w3.org/2000/svg" width="15"
119
- height="14" viewBox="0 0 15 14" fill="none">
120
- <path d="M9.83398 7L6.33398 10.5V3.5L9.83398 7Z"
121
- fill="white" />
122
- </svg>
123
- </span>
124
- </a>
125
- </td>
126
- </tr>
127
- </table>
128
- <![endif]>
129
-
130
-
131
- <!-- Support for Gmail Go-To Actions -->
132
-
133
-
134
-
135
- <p
136
- style="margin-top: 30px; color: #74787E; font-size: 16px; line-height: 1.5em; font-family: Arial, 'Helvetica Neue', Helvetica, sans-serif; -webkit-box-sizing: border-box; box-sizing: border-box; text-align: center; font-size: 1.2rem; font-weight: 400; color: #333;">
137
- Incase of any queries or support, please reach out to us at <span
138
- style="color: #EBB26F; font-weight: 600;">support@srmdcourses.org</span>
139
- </p>
140
-
141
-
142
-
143
-
144
- </td>
145
- </tr>
146
- </table>
147
- </td>
148
- </tr>
149
-
150
- <tr>
151
- <td
152
- style="font-family: Arial, 'Helvetica Neue', Helvetica, sans-serif; -webkit-box-sizing: border-box; box-sizing: border-box;">
153
- <table class="email-footer" align="center" width="600" cellpadding="0" cellspacing="0"
154
- style="font-family: Arial, 'Helvetica Neue', Helvetica, sans-serif; -webkit-box-sizing: border-box; box-sizing: border-box; width: 600px; margin: 0 auto; padding: 0; text-align: center;">
155
- <tr>
156
- <td class="content-cell"
157
- style="font-family: Arial, 'Helvetica Neue', Helvetica, sans-serif; -webkit-box-sizing: border-box; box-sizing: border-box; padding: 35px;">
158
- </td>
159
- </tr>
160
- </table>
161
- </td>
162
- </tr>
163
- </table>
164
- </td>
165
- </tr>
166
- </table>
117
+ <body>
118
+ <div class="email-wrapper">
119
+ <!-- Logo outside the box -->
120
+ <div class="logo">
121
+ <img src="https://yourcompany.com/logo.png" alt="Company Logo" />
122
+ </div>
123
+
124
+ <!-- Content Box -->
125
+ <div class="content-box">
126
+ <h2 class="title">Hi, {{ fullName }} !</h2>
127
+ <p class="intro">
128
+ Welcome to {{ solidAppName }}
129
+ </p>
130
+ <p class="intro">
131
+ You requested a password reset. Click the button below to set a new password:
132
+ </p>
133
+ <div class="button-container">
134
+ <a href="{{ passwordResetLink }}" class="button" target="_blank">
135
+ Reset Password
136
+ </a>
137
+ </div>
138
+ <p class="footer-text">
139
+ If you have any questions, just reply to this email—we’re happy to help.
140
+ </p>
141
+ </div>
142
+
143
+ <div class="footer">
144
+ © 2025 <a href="{{ solidAppWebsiteUrl }}" target="_blank">{{ solidAppName }}</a>. All rights reserved.
145
+ </div>
146
+ </div>
167
147
  </body>
168
148
 
169
149
  </html>