Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
98 commits
Select commit Hold shift + click to select a range
c98cca4
Merge pull request #477 from Walkover-Web-Solution/P0079-clean
amanWalkover Mar 13, 2026
84aec96
chore: migrate Angular v14 → v15, cleanup lodash/dead-code/bugs
dvCodeWorld Mar 16, 2026
3f6179a
feat: migrate Angular v14 → v17 with full Material MDC migration
dvCodeWorld Mar 16, 2026
7d5862d
chore: remove 63 unused libs from libs/ and clean tsconfig.base.json
dvCodeWorld Mar 17, 2026
7e5edca
feat: Angular v17 → v18 → v19 migration complete
dvCodeWorld Mar 17, 2026
5b07da0
chore: add .nx/cache and .nx/workspace-data to .gitignore
dvCodeWorld Mar 17, 2026
266811e
fix: replace deprecated browserTarget with buildTarget in serve confi…
dvCodeWorld Mar 17, 2026
a9a1a42
fix: resolve Sass deprecation warnings in both apps
dvCodeWorld Mar 17, 2026
3952c66
fix: resolve build:test failures - proxy-auth-element, Sass @use migr…
dvCodeWorld Mar 17, 2026
f618075
fix: build-elements.js concatenate runtime+polyfills+main for self-co…
dvCodeWorld Mar 17, 2026
9a0a842
fix: NG05104 - use DoBootstrap to only bootstrap AppComponent when pr…
dvCodeWorld Mar 17, 2026
831dc74
fix: migrate mat-chip-list to MDC chip-grid, fix optional chaining, r…
dvCodeWorld Mar 17, 2026
12f9282
feat: upgrade Angular v19 → v20 → v21 (Angular 21.2.4, Material 21.2.…
dvCodeWorld Mar 17, 2026
af02417
fix: add env-variables.ts to .gitignore, remove hardcoded values from…
dvCodeWorld Mar 17, 2026
286a90f
fix: add set-env dependsOn to build/serve targets so env-variables.ts…
dvCodeWorld Mar 17, 2026
bc05012
refactor: migrate ngClass/ngStyle to class/style bindings (Angular v2…
dvCodeWorld Mar 17, 2026
70e435b
refactor: migrate Material v2 theme API to v3 system, remove deprecat…
dvCodeWorld Mar 18, 2026
759e7ad
Merge pull request #482 from Walkover-Web-Solution/divyanshu-angular-…
Saurabh186 Mar 18, 2026
c827733
feat: add Tailwind CSS v4 with PostCSS plugin to both apps
dvCodeWorld Mar 18, 2026
b31dd02
refactor: migrate Bootstrap utility classes to Tailwind CSS equivalen…
dvCodeWorld Mar 18, 2026
bff8e76
refactor: migrate Firebase v10 → v12, replace compat auth imports wit…
dvCodeWorld Mar 18, 2026
a1e733e
Merge pull request #483 from Walkover-Web-Solution/divyanshu-angular-…
Saurabh186 Mar 18, 2026
2ddf135
migrate: Angular Material button directives to v21 API (matButton/mat…
dvCodeWorld Mar 18, 2026
b333807
feat: establish single-source-of-truth design token system bridging M…
dvCodeWorld Mar 18, 2026
9d426e9
refactor: migrate *ngIf/*ngFor to @if/@for control flow syntax in pro…
dvCodeWorld Mar 18, 2026
797f8d3
remove matrial custom css
Saurabh186 Mar 18, 2026
498747b
refactor: standardize @if async pipe syntax with semicolon separator …
dvCodeWorld Mar 18, 2026
5c3814e
Merge pull request #484 from Walkover-Web-Solution/divyanshu-angular-…
Saurabh186 Mar 18, 2026
4949d6c
Merge branch 'angular-v21-migration' of https://github.com/Walkover-W…
Saurabh186 Mar 18, 2026
f7fb9ae
Merge pull request #485 from Walkover-Web-Solution/improvment-saurabh-21
dvCodeWorld Mar 18, 2026
9fb7e5d
remove used scss
Saurabh186 Mar 18, 2026
266207c
Merge pull request #486 from Walkover-Web-Solution/improvment-saurabh-21
dvCodeWorld Mar 18, 2026
941e9dc
fix mat fom filed design and alignment
Saurabh186 Mar 18, 2026
adb5b6d
Merge pull request #487 from Walkover-Web-Solution/improvment-saurabh-21
dvCodeWorld Mar 18, 2026
c57216c
refactor: remove all shim NgModules from libs and apps
dvCodeWorld Mar 18, 2026
fb658d4
Merge branch 'angular-v21-migration' of https://github.com/Walkover-W…
dvCodeWorld Mar 18, 2026
55adeda
fix: change VersionCheckService providedIn to root for standalone DI …
dvCodeWorld Mar 18, 2026
25b760f
fix: add provideMarkdown() to bootstrapApplication for MarkdownServic…
dvCodeWorld Mar 18, 2026
6eaf6ee
fix: use importProvidersFrom(MarkdownModule.forRoot()) for ngx-markdo…
dvCodeWorld Mar 18, 2026
126149e
Merge pull request #488 from Walkover-Web-Solution/divyanshu-angular-…
Saurabh186 Mar 19, 2026
c325890
fix: write proxy-auth.js to src/assets so proxy build includes it aut…
dvCodeWorld Mar 19, 2026
94726e1
refactor: migrate create-feature dialogs to Angular control flow syntax
dvCodeWorld Mar 19, 2026
36c123f
refactor: make all libs/pipes standalone, remove shim NgModules
dvCodeWorld Mar 19, 2026
47676ea
refactor: replace string literals with PublicScriptTheme and PublicSc…
dvCodeWorld Mar 19, 2026
4ce766d
refactor: rename apps proxy→36-blocks, proxy-auth→36-blocks-widget; r…
dvCodeWorld Mar 19, 2026
124bcc4
Merge pull request #489 from Walkover-Web-Solution/divyanshu-angular-…
Saurabh186 Mar 19, 2026
6d57b68
design fixes
Saurabh186 Mar 19, 2026
1c034c7
confilct resolve
Saurabh186 Mar 19, 2026
90147a9
Merge pull request #490 from Walkover-Web-Solution/improvment-saurabh-21
dvCodeWorld Mar 19, 2026
4461906
fix: restore proxy-auth.js output path in build-elements.js; rename S…
dvCodeWorld Mar 19, 2026
f27dc15
Merge pull request #491 from Walkover-Web-Solution/divyanshu-angular-…
dvCodeWorld Mar 19, 2026
6d003e3
remove unused improt
Saurabh186 Mar 19, 2026
06b8a40
refactor: replace hardcoded colors with CSS custom properties in 36-b…
dvCodeWorld Mar 19, 2026
78107ec
fix: call input signals as functions with () in all templates
dvCodeWorld Mar 19, 2026
23df2b7
fix sidebar optimize
Saurabh186 Mar 19, 2026
c84ce97
Merge pull request #492 from Walkover-Web-Solution/divyanshu-angular-…
Saurabh186 Mar 19, 2026
dc555e6
Merge branch 'angular-v21-migration' of https://github.com/Walkover-W…
Saurabh186 Mar 19, 2026
c7d7ebb
Merge pull request #493 from Walkover-Web-Solution/improvment-saurabh-21
dvCodeWorld Mar 19, 2026
2e0bc8a
fix sidebar
Saurabh186 Mar 20, 2026
6f9fac6
remove code css
Saurabh186 Mar 20, 2026
4df73e6
Merge pull request #496 from Walkover-Web-Solution/improvment-saurabh-21
Saurabh186 Mar 20, 2026
e54ee40
fix bugs and create a items libs
Saurabh186 Mar 20, 2026
20194f2
Merge pull request #497 from Walkover-Web-Solution/improvment-saurabh-21
dvCodeWorld Mar 20, 2026
64965a9
update widget design documentation and add scope restrictions to 36-b…
dvCodeWorld Mar 20, 2026
61972bf
remove debug conditions from user management template and standardize…
dvCodeWorld Mar 20, 2026
54ee444
refactor user management component with lazy tab loading and improve …
dvCodeWorld Mar 21, 2026
7e919dd
Merge pull request #498 from Walkover-Web-Solution/divyanshu-angular-…
Saurabh186 Mar 21, 2026
e042e95
refactor login component to use Tailwind CSS and remove Material Desi…
dvCodeWorld Mar 21, 2026
f79e8b3
refactor widget components to use WidgetTheme enum instead of PublicS…
dvCodeWorld Mar 23, 2026
ca478dc
refactor widget initialization to use polling for userProxyContainer …
dvCodeWorld Mar 23, 2026
281b933
refactor widget mounting to use referenceId instead of userProxyConta…
dvCodeWorld Mar 23, 2026
12e2575
revert widget mounting to use userProxyContainer and restore authToke…
dvCodeWorld Mar 23, 2026
37d57a4
refactor(widget): centralize dark theme logic in WidgetThemeService
dvCodeWorld Mar 24, 2026
80c3233
design and dark theme
Saurabh186 Mar 24, 2026
c4ebef8
Merge pull request #499 from Walkover-Web-Solution/divyanshu-angular-…
Saurabh186 Mar 24, 2026
306b591
Merge branch 'angular-v21-migration' of https://github.com/Walkover-W…
Saurabh186 Mar 24, 2026
31060f1
Merge pull request #500 from Walkover-Web-Solution/improvment-saurabh-21
Saurabh186 Mar 24, 2026
65c7b5e
refactor(app): replace theme enum checks with isDarkTheme getter usin…
dvCodeWorld Mar 24, 2026
7cc488a
fix design and console error and dark theme
Saurabh186 Mar 25, 2026
47d4565
Merge pull request #501 from Walkover-Web-Solution/improvment-saurabh-21
Saurabh186 Mar 25, 2026
b91b1f9
refactor(widget): move register and login dialogs to overlay portal w…
dvCodeWorld Mar 25, 2026
fac6aba
Merge branch 'angular-v21-migration' of https://github.com/Walkover-W…
Saurabh186 Mar 26, 2026
83f935e
Merge pull request #502 from Walkover-Web-Solution/divyanshu-angular-…
Saurabh186 Mar 26, 2026
45d70ae
Merge branch 'divyanshu-angular-v21-migration' of https://github.com/…
dvCodeWorld Mar 26, 2026
725d706
chore(ci): upgrade Node to v20, add widget bundle size check, remove …
dvCodeWorld Mar 26, 2026
cd4ff1a
refactor(widget): improve build config, intl-tel-input dark theme, an…
dvCodeWorld Mar 27, 2026
5262c58
refactor(widget): switch to userProxyContainer, remove unused subscri…
dvCodeWorld Mar 27, 2026
d984ff9
refactor(widget): support dynamic container ID, improve dev config, a…
dvCodeWorld Mar 27, 2026
a17eae7
refactor(widget): add preview-button mode with dialog portal, improve…
dvCodeWorld Mar 28, 2026
f6682b0
refactor(widget): add isInDialog input to register component, hide he…
dvCodeWorld Mar 29, 2026
fdee23e
fix search payload and spacing
Saurabh186 Mar 30, 2026
c3b92ec
refactor(widget): add forgot password dialog with custom header, hide…
dvCodeWorld Mar 30, 2026
e798c6b
refactor(widget): inline styles.css into proxy-auth.js bundle, remove…
dvCodeWorld Mar 30, 2026
23b81dd
Merge branch 'divyanshu-angular-v21-migration' of https://github.com/…
dvCodeWorld Mar 30, 2026
71137ec
refactor(widget): add theme-based body classes, restore zone.js, upda…
dvCodeWorld Mar 30, 2026
88dede6
refactor(widget): add hCaptcha test sitekey to environment config
dvCodeWorld Mar 30, 2026
bddb578
Merge pull request #503 from Walkover-Web-Solution/divyanshu-angular-…
Saurabh186 Mar 30, 2026
dbb562a
confilct resolve
Saurabh186 Mar 30, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
1 change: 1 addition & 0 deletions .eslintignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
node_modules
15 changes: 14 additions & 1 deletion .github/workflows/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ jobs:
- name: Install Node.js & NPM
uses: actions/setup-node@v3
with:
node-version: "16"
node-version: "20"

# Runs npm i
- uses: bahmutov/npm-install@v1
Expand All @@ -65,3 +65,16 @@ jobs:
run: npx nx affected --target=build --base='origin/production' --configuration=local
- if: ${{github.event.pull_request.base.ref == 'development'}}
run: npx nx affected --target=build --base='origin/development' --configuration=local

- name: Check widget bundle size
if: always()
run: |
WIDGET_FILE="apps/36-blocks/src/assets/proxy-auth/proxy-auth.js"
if [ -f "$WIDGET_FILE" ]; then
SIZE=$(stat -c%s "$WIDGET_FILE")
echo "proxy-auth.js size: $((SIZE / 1024)) KB"
if [ $SIZE -gt 3145728 ]; then
echo "::error::proxy-auth.js exceeds 3 MB ($((SIZE / 1024)) KB) — check for bundle bloat!"
exit 1
fi
fi
10 changes: 9 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -50,4 +50,12 @@ Thumbs.db
.angular

# dotenv environment variables file
.env
.env

# Generated environment variable files (created by tools/set-env.js from .env)
apps/36-blocks/src/environments/env-variables.ts
apps/36-blocks-widget/src/environments/env-variables.ts

# Nx cache
.nx/cache
.nx/workspace-data
5 changes: 5 additions & 0 deletions .postcssrc.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
{
"plugins": {
"@tailwindcss/postcss": {}
}
}
131 changes: 131 additions & 0 deletions apps/36-blocks-widget/DESIGN-STRUCTURE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,131 @@
# Widget Design Structure

## Stack
- **Tailwind CSS v4** — default color palette only (`gray-*`, `blue-*`, `red-*`, etc.). No custom token mapping.
- **Angular Material v21** — MDC components for forms, dialogs, tables, tabs only. No custom Material theming applied to templates.
- **No inline `style=` attributes** in templates.
- **No custom SCSS** in component files — only `:host` display/layout overrides if strictly necessary.

---

## Color Conventions (Tailwind defaults)

| Role | Light | Dark |
|---|---|---|
| Page background | `bg-white` | `dark:bg-gray-900` |
| Card background | `bg-white` | `dark:bg-gray-800` |
| Card border | `border-gray-200` | `dark:border-gray-700` |
| Primary text | `text-gray-900` | `dark:text-gray-100` |
| Secondary / muted text | `text-gray-500` | `dark:text-gray-400` |
| Label / caption text | `text-gray-400` | `dark:text-gray-500` |
| Primary action (buttons) | `bg-blue-600 text-white` | same |
| Primary action hover | `hover:bg-blue-700` | same |
| Danger | `text-red-600` / `bg-red-600` | same |
| Success | `text-green-600` | same |
| Input border | `border-gray-300` | `dark:border-gray-600` |
| Input background | `bg-white` | `dark:bg-gray-800` |
| Divider | `border-gray-100` | `dark:border-gray-700` |

> Dark mode is toggled via `[class.dark]` on the root widget `<div>` using Tailwind's `darkMode: ['class']` config.

---

## Typography Conventions

| Use | Class |
|---|---|
| Page / card title | `text-lg font-semibold text-gray-900` |
| Section heading | `text-sm font-semibold text-gray-700` |
| Body text | `text-sm text-gray-700` |
| Muted / caption | `text-xs text-gray-500` |
| Label above field | `text-xs font-medium text-gray-500 uppercase tracking-wide` |
| Error message | `text-xs text-red-600` |

---

## Spacing Conventions

| Element | Class |
|---|---|
| Card padding | `p-6` |
| Section gap | `gap-6` |
| Form field gap | `gap-4` |
| Button gap in row | `gap-3` |
| Input height | Angular Material `appearance="outline"` handles this |

---

## Component Map

### 1. `widget-shell` — `widget.component.html`
The outer wrapper rendered by the Angular Element. Contains:
- Header bar (logo, title, close button)
- Router outlet for inner views
- Overlay/modal container

### 2. `send-otp-center` — `send-otp-center.component.html`
First screen: enter phone number or email to receive OTP.
- Input field + send button
- Social login buttons (optional)
- "Already have an account" link

### 3. `login` — `login.component.html`
Email + password form.
- Input fields (email, password with show/hide toggle)
- "Forgot password" link
- Submit button
- Switch to OTP/register

### 4. `register` — `register.component.html`
Multi-step registration:
- Step 1: name, email, phone
- Step 2: OTP verification (4 boxes)
- Step 3: password setup

### 5. `subscription-center` — `subscription-center.component.html`
Plan selection:
- Plan cards (title, price, features list)
- CTA button per card
- Current plan highlight

### 6. `user-profile` — `user-profile.component.html`
Authenticated user view/edit:
- Avatar + name + email banner
- View mode: read-only field rows
- Edit mode: form fields
- Organizations list / table

### 7. `user-management` — `user-management.component.html`
Admin panel:
- Members tab: search, user rows, edit/remove buttons
- Roles tab: roles table with permissions
- Permissions tab

### 8. `organization-details` — `organization-details.component.html`
Org settings form:
- Name, timezone, logo upload
- Save/cancel buttons

---

## Migration Order (tell me which to start)
1. `send-otp-center`
2. `login`
3. `register`
4. `subscription-center`
5. `user-profile`
6. `user-management`
7. `organization-details`
8. `widget-shell` (last — depends on inner views)

---

## Files Reference

| File | Purpose |
|---|---|
| `src/tailwind-blocks.html` | Paste paid Tailwind UI blocks here |
| `src/styles.scss` | Global styles — minimal |
| `src/otp-global.scss` | Widget-specific global overrides |
| `apps/shared/scss/global.scss` | Tailwind import + shared utilities |
| `tailwind.config.js` (root) | Tailwind config — content globs + darkMode |
87 changes: 87 additions & 0 deletions apps/36-blocks-widget/build-elements.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
const fs = require('fs-extra');
const path = require('path');

(async function build() {
const distDir = './dist/apps/36-blocks-widget/browser';
const outDir = './apps/36-blocks/src/assets/proxy-auth';

if (!(await fs.pathExists(distDir))) {
throw new Error(`Widget dist not found: ${distDir}`);
}

// Dynamic discovery with priority-based ordering — future-proof against Angular output changes
const allFiles = await fs.readdir(distDir);
const priority = ['polyfills', 'vendor', 'main'];
const jsFiles = allFiles
.filter((f) => f.endsWith('.js'))
.sort((a, b) => {
const getPriority = (f) => {
const index = priority.findIndex((p) => f.includes(p));
return index === -1 ? priority.length : index;
};
return getPriority(a) - getPriority(b);
});

if (jsFiles.length === 0) {
throw new Error(`No JS files found in ${distDir}`);
}

console.info('Concatenating:', jsFiles);

// Read and concat all JS files in order
const contents = [];
for (const file of jsFiles) {
contents.push(await fs.readFile(path.join(distDir, file), 'utf8'));
}

// Inline styles.css if it exists
const stylesPath = path.join(distDir, 'styles.css');
if (await fs.pathExists(stylesPath)) {
console.info('Inlining styles.css...');
const cssContent = await fs.readFile(stylesPath, 'utf8');
// Escape backticks and backslashes for JS template literal
const escapedCSS = cssContent.replace(/\\/g, '\\\\').replace(/`/g, '\\`').replace(/\$/g, '\\$');

// Create a self-executing function that injects styles into document.head
const styleInjector = `
(function() {
if (typeof window === 'undefined' || !window.document) return;
if (document.getElementById('proxy-auth-widget-styles')) return;

var style = document.createElement('style');
style.id = 'proxy-auth-widget-styles';
style.textContent = \`${escapedCSS}\`;

// Store CSS content globally so widget-portal service can access it
if (!window.__proxyAuth) window.__proxyAuth = {};
window.__proxyAuth.inlinedStyles = \`${escapedCSS}\`;

// Inject into document.head
(document.head || document.getElementsByTagName('head')[0]).appendChild(style);
})();
`;
contents.push(styleInjector);
} else {
console.warn('styles.css not found - skipping CSS inlining');
}

await fs.ensureDir(outDir);
const outPath = path.join(outDir, 'proxy-auth.js');
await fs.writeFile(outPath, contents.join('\n'));

// Copy to dist output directory as well
const distOutDir = './dist/apps/36-blocks/browser/assets/proxy-auth';
await fs.ensureDir(distOutDir);
await fs.copyFile(outPath, path.join(distOutDir, 'proxy-auth.js'));

// Bundle size check — warn if unexpectedly large
const stats = await fs.stat(outPath);
const sizeMB = (stats.size / 1048576).toFixed(2);
console.info(`proxy-auth.js created: ${sizeMB} MB`);
console.info(`Copied to: ${distOutDir}/proxy-auth.js`);
if (stats.size > 3 * 1048576) {
console.warn('WARNING: proxy-auth.js exceeds 3 MB — check for bundle bloat!');
}

console.info('Elements created successfully!');
})();
Loading
Loading