@foxeltech/angular-ui 0.0.1

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 (68) hide show
  1. package/BeVietnamPro/BeVietnamPro-Bold.ttf +0 -0
  2. package/BeVietnamPro/BeVietnamPro-ExtraLight.ttf +0 -0
  3. package/BeVietnamPro/BeVietnamPro-Light.ttf +0 -0
  4. package/BeVietnamPro/BeVietnamPro-Medium.ttf +0 -0
  5. package/BeVietnamPro/BeVietnamPro-Regular.ttf +0 -0
  6. package/BeVietnamPro/BeVietnamPro-SemiBold.ttf +0 -0
  7. package/BeVietnamPro/BeVietnamPro-Thin.ttf +0 -0
  8. package/README.md +3 -0
  9. package/SpaceMono-Regular.ttf +0 -0
  10. package/animations.css +130 -0
  11. package/components.css +480 -0
  12. package/dialogs.css +70 -0
  13. package/dm-sans/DMSans-Bold.ttf +0 -0
  14. package/dm-sans/DMSans-Light.ttf +0 -0
  15. package/dm-sans/DMSans-Medium.ttf +0 -0
  16. package/dm-sans/DMSans-Regular.ttf +0 -0
  17. package/dm-sans/DMSans-SemiBold.ttf +0 -0
  18. package/dm-sans/DMSans-Thin.ttf +0 -0
  19. package/fesm2022/foxeltech-angular-ui.mjs +3450 -0
  20. package/fesm2022/foxeltech-angular-ui.mjs.map +1 -0
  21. package/fonts.css +125 -0
  22. package/index.d.ts +1022 -0
  23. package/orbitron/Orbitron-Bold.ttf +0 -0
  24. package/orbitron/Orbitron-Medium.ttf +0 -0
  25. package/orbitron/Orbitron-Regular.ttf +0 -0
  26. package/orbitron/Orbitron-SemiBold.ttf +0 -0
  27. package/package.json +56 -0
  28. package/src/lib/styles/animations.css +130 -0
  29. package/src/lib/styles/components.css +480 -0
  30. package/src/lib/styles/dialogs.css +70 -0
  31. package/src/lib/styles/fonts.css +125 -0
  32. package/src/lib/styles/tailwind.css +18 -0
  33. package/src/lib/styles/theme.css +67 -0
  34. package/src/lib/ui/components/button/button.component.html +223 -0
  35. package/src/lib/ui/components/chart/chart.component.html +11 -0
  36. package/src/lib/ui/components/checkbox/checkbox.component.html +42 -0
  37. package/src/lib/ui/components/circle-progress-bar/circle-progress-bar.component.html +44 -0
  38. package/src/lib/ui/components/datetime-picker/datetime-picker.component.html +36 -0
  39. package/src/lib/ui/components/dnd-upload/dnd-upload.component.html +34 -0
  40. package/src/lib/ui/components/drawer/drawer.component.html +101 -0
  41. package/src/lib/ui/components/flow-connection/flow-connection.component.html +10 -0
  42. package/src/lib/ui/components/hero-icon/hero-icon.component.html +8 -0
  43. package/src/lib/ui/components/input/input.component.css +0 -0
  44. package/src/lib/ui/components/input/input.component.html +48 -0
  45. package/src/lib/ui/components/kanban-board/kanban-board.component.html +43 -0
  46. package/src/lib/ui/components/loading-panel/loading-panel.component.html +51 -0
  47. package/src/lib/ui/components/radio-button/radio-button.component.css +0 -0
  48. package/src/lib/ui/components/radio-button/radio-button.component.html +35 -0
  49. package/src/lib/ui/components/radio-button-toggle/radio-button-toggle.component.html +34 -0
  50. package/src/lib/ui/components/rich-text-area/rich-text-area.component.html +3 -0
  51. package/src/lib/ui/components/search-bar/search-bar.component.html +22 -0
  52. package/src/lib/ui/components/select/select.component.css +102 -0
  53. package/src/lib/ui/components/select/select.component.html +42 -0
  54. package/src/lib/ui/components/skeleton-table-loading/skeleton-table-loading.component.html +21 -0
  55. package/src/lib/ui/components/slider/slider.component.html +54 -0
  56. package/src/lib/ui/components/switch/switch.component.html +21 -0
  57. package/src/lib/ui/components/tab-component/tab.component.html +1 -0
  58. package/src/lib/ui/components/tab-group/tab-group.component.html +75 -0
  59. package/src/lib/ui/components/table-cell/table-cell.component.html +7 -0
  60. package/src/lib/ui/components/tag/tag.component.html +15 -0
  61. package/src/lib/ui/components/toast/toast.component.html +48 -0
  62. package/src/lib/ui/components/toast-container/toast-container.component.html +12 -0
  63. package/src/lib/ui/components/tree-diagram/tree-diagram.component.html +40 -0
  64. package/src/lib/ui/dialogs/confirmation/confirmation.component.html +17 -0
  65. package/tailwind-config.d.ts +4 -0
  66. package/tailwind.config.js +88 -0
  67. package/tailwind.css +18 -0
  68. package/theme.css +67 -0
@@ -0,0 +1,75 @@
1
+ <div class="relative">
2
+ <!-- Left scroll button -->
3
+ <button
4
+ class="left-scroll-button"
5
+ type="button"
6
+ (click)="scroll('left')"
7
+ [style.opacity]="canScrollLeft ? 1 : 0"
8
+ [style.pointerEvents]="canScrollLeft ? 'auto' : 'none'"
9
+ >
10
+ <svg
11
+ xmlns="http://www.w3.org/2000/svg"
12
+ class="h-5 w-5 text-text-primary"
13
+ fill="none"
14
+ viewBox="0 0 24 24"
15
+ stroke="currentColor"
16
+ >
17
+ <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M15 19l-7-7 7-7" />
18
+ </svg>
19
+ </button>
20
+
21
+ <div
22
+ #tabList
23
+ class="relative flex overflow-x-auto no-scrollbar scroll-smooth"
24
+ (scroll)="onScroll()"
25
+ >
26
+ <button
27
+ *ngFor="let tab of tabs.toArray(); let i = index"
28
+ (click)="selectTab(i)"
29
+ class="tab-btn tab-bar-btn"
30
+ >
31
+ <div class="flex flex-row items-center justify-center">
32
+ @if(tab.icon) {<fx-ui-hero-icon
33
+ [icon]="tab.icon"
34
+ [size]="20"
35
+ class="flex mr-[2px]"
36
+ [ngClass]="{
37
+ 'text-primary mb-small': i === activeIndex,
38
+ 'text-text-placeholder': i !== activeIndex
39
+ }"
40
+ ></fx-ui-hero-icon
41
+ >}
42
+ <div [ngClass]="i === activeIndex ? 'txt-field-label text-primary' : 'txt-placeholder'">{{ tab.label }}</div>
43
+ </div>
44
+ </button>
45
+
46
+ <span #underline class="underline" style="width: 0; transform: translateX(0)"></span>
47
+ </div>
48
+
49
+ <button
50
+ class="right-scroll-button"
51
+ type="button"
52
+ (click)="scroll('right')"
53
+ [style.opacity]="canScrollRight ? 1 : 0"
54
+ [style.pointerEvents]="canScrollRight ? 'auto' : 'none'"
55
+ >
56
+ <svg
57
+ xmlns="http://www.w3.org/2000/svg"
58
+ class="h-5 w-5 text-text-primary"
59
+ fill="none"
60
+ viewBox="0 0 24 24"
61
+ stroke="currentColor"
62
+ >
63
+ <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 5l7 7-7 7" />
64
+ </svg>
65
+ </button>
66
+ </div>
67
+
68
+ <!-- Tab content -->
69
+ <div class="transition-all duration-300 ease-in-out mt-4">
70
+ <ng-container *ngFor="let tab of tabs.toArray(); let i = index">
71
+ <div *ngIf="i === activeIndex" class="animate-fadeIn">
72
+ <ng-container *ngTemplateOutlet="tab.content"></ng-container>
73
+ </div>
74
+ </ng-container>
75
+ </div>
@@ -0,0 +1,7 @@
1
+ @if (!loading) {
2
+ <div animate.enter="fade-in-animation" class="inline-block my-normal">
3
+ <ng-content />
4
+ </div>
5
+ } @else {
6
+ <div animate.enter="fade-in-animation" class="skeleton-load my-semi" [class]="skeletonClass"></div>
7
+ }
@@ -0,0 +1,15 @@
1
+ <div
2
+ [class]="`flex flex-row gap-small ${rounded ? 'tag-round' : 'tag-square'} tag-${type}${solid ? '-solid' : ''}`"
3
+ >
4
+ @if(icon){
5
+ <fx-ui-hero-icon
6
+ [class]="`flex txt-tag-${type} ${solid ? 'text-white': ''}`"
7
+ [icon]="icon"
8
+ [size]="18"
9
+ ></fx-ui-hero-icon>
10
+ }
11
+
12
+ <div [class]="`txt-tag-${type} ${solid ? 'text-white': ''}`">
13
+ {{ label }}
14
+ </div>
15
+ </div>
@@ -0,0 +1,48 @@
1
+ <div
2
+ animate.enter="horizontal-fade-in-animation"
3
+ animate.leave="horizontal-fade-out-animation"
4
+ class="flex border-l-[3px] items-center bg-bg-primary gap-semi min-w-[250px] max-w-[400px] px-large py-semi rounded shadow-lg transition-all duration-300 ease-in-out transform opacity-100 translate-y-0"
5
+ [ngClass]="{
6
+ 'border-success': type === 'success',
7
+ 'border-critical': type === 'error',
8
+ 'border-warning': type === 'warning',
9
+ 'border-information': type === 'info'
10
+ }"
11
+ >
12
+ <div class="">
13
+ @switch (type) { @case('success') {
14
+ <fx-ui-hero-icon
15
+ icon="check-circle"
16
+ [solid]="true"
17
+ [size]="30"
18
+ class="text-success"
19
+ ></fx-ui-hero-icon>
20
+ } @case('error') {
21
+ <fx-ui-hero-icon
22
+ icon="exclamation-circle"
23
+ [solid]="true"
24
+ [size]="30"
25
+ class="text-critical"
26
+ ></fx-ui-hero-icon>
27
+ } @case('warning') {
28
+ <fx-ui-hero-icon
29
+ icon="exclamation-triangle"
30
+ [solid]="true"
31
+ [size]="30"
32
+ class="text-warning"
33
+ ></fx-ui-hero-icon>
34
+ } @default {
35
+ <fx-ui-hero-icon
36
+ icon="information-circle"
37
+ [solid]="true"
38
+ [size]="30"
39
+ class="text-information"
40
+ ></fx-ui-hero-icon>
41
+ } }
42
+ </div>
43
+
44
+ <div class="flex flex-col">
45
+ <strong *ngIf="title" class="txt-field-label">{{ title }}</strong>
46
+ <p class="txt-default">{{ message }}</p>
47
+ </div>
48
+ </div>
@@ -0,0 +1,12 @@
1
+ <div
2
+ class="fixed top-5 right-5 flex flex-col items-end gap-3 z-[10000] pointer-events-none"
3
+ >
4
+ @for (toast of toasts; track toast) {
5
+ <fx-ui-toast
6
+ class="pointer-events-auto"
7
+ [message]="toast.message"
8
+ [title]="toast.title"
9
+ [type]="toast.type"
10
+ ></fx-ui-toast>
11
+ }
12
+ </div>
@@ -0,0 +1,40 @@
1
+ <div class="relative p-8" #container>
2
+
3
+ <!-- ROOT -->
4
+ <div
5
+ #root
6
+ class="mx-auto w-fit bg-blue-600 text-white px-7 py-3 rounded-md font-semibold text-center"
7
+ >
8
+ {{ data.label }}
9
+ </div>
10
+
11
+ <!-- CHILDREN -->
12
+ <div class="mt-16 flex justify-center gap-16">
13
+ <div
14
+ *ngFor="let child of data.children"
15
+ #child
16
+ class="w-48 bg-rose-600 text-white px-4 py-4 rounded-lg text-center"
17
+ >
18
+ <div class="font-semibold text-lg">{{ child.label }}</div>
19
+ <div class="mt-1 text-sm opacity-90">{{ child.status }}</div>
20
+ </div>
21
+ </div>
22
+
23
+ <!-- SVG CONNECTORS -->
24
+ <svg
25
+ class="absolute inset-0 pointer-events-none"
26
+ [attr.width]="svgWidth"
27
+ [attr.height]="svgHeight"
28
+ >
29
+ <line
30
+ *ngFor="let line of lines"
31
+ [attr.x1]="line.x1"
32
+ [attr.y1]="line.y1"
33
+ [attr.x2]="line.x2"
34
+ [attr.y2]="line.y2"
35
+ stroke="#1f2937"
36
+ stroke-width="2"
37
+ />
38
+ </svg>
39
+
40
+ </div>
@@ -0,0 +1,17 @@
1
+ <div animate.enter="fade-in-animation" class="dialog-container">
2
+ <h1 class="txt-heading-05 dialog-header">{{ title }}</h1>
3
+ <mat-dialog-content>
4
+ <div class="txt-default">{{ message }}</div>
5
+ </mat-dialog-content>
6
+ <mat-dialog-actions align="end">
7
+ <fx-ui-button class="mr-1" [label]="cancelLabel" (clicked)="cancel()"></fx-ui-button>
8
+ <fx-ui-button
9
+ buttonVariant="primary"
10
+ class="mr-1"
11
+ [label]="confirmLabel"
12
+ (clicked)="accept()"
13
+ [loading]="loading"
14
+ class="min-w-[100px]"
15
+ ></fx-ui-button>
16
+ </mat-dialog-actions>
17
+ </div>
@@ -0,0 +1,4 @@
1
+ declare module '@fx/ui/tailwind.config' {
2
+ const config: any;
3
+ export default config;
4
+ }
@@ -0,0 +1,88 @@
1
+ module.exports = {
2
+ theme: {
3
+ extend: {
4
+ colors: {
5
+ 'gradient-primary-start': 'rgb(var(--gradient-primary-start) / <alpha-value>)',
6
+ 'gradient-primary-end': 'rgb(var(--gradient-primary-end) / <alpha-value>)',
7
+ primary: 'rgb(var(--primary) / <alpha-value>)',
8
+ success: 'rgb(var(--success) / <alpha-value>)',
9
+ danger: 'rgb(var(--danger) / <alpha-value>)',
10
+ warning: 'rgb(var(--warning) / <alpha-value>)',
11
+ critical: 'rgb(var(--critical) / <alpha-value>)',
12
+ discovery: 'rgb(var(--discovery) / <alpha-value>)',
13
+ information: 'rgb(var(--information) / <alpha-value>)',
14
+ bg: {
15
+ primary: 'rgb(var(--bg-primary) / <alpha-value>)',
16
+ hover: 'rgb(var(--bg-primary-hover) / <alpha-value>)',
17
+ error: 'rgb(var(--bg-error-bold) / <alpha-value>)',
18
+ hover2: 'rgb(var(--bg-secondary-hover) / <alpha-value>)',
19
+ },
20
+ text: {
21
+ primary: 'rgb(var(--text-primary) / <alpha-value>)',
22
+ secondary: 'rgb(var(--text-secondary) / <alpha-value>)',
23
+ placeholder: 'rgb(var(--text-placeholder) / <alpha-value>)',
24
+ selected: 'rgb(var(--text-selected-primary) / <alpha-value>)',
25
+ focus: 'rgb(var(--text-focus) / <alpha-value>)',
26
+ inverse: 'rgb(var(--text-inverse) / <alpha-value>)',
27
+ error: 'rgb(var(--text-error) / <alpha-value>)',
28
+ link: 'rgb(var(--text-link-primary) / <alpha-value>)',
29
+ },
30
+ border: {
31
+ default: 'rgb(var(--border-default) / <alpha-value>)',
32
+ interactive: 'rgb(var(--border-interactive) / <alpha-value>)',
33
+ selected: 'rgb(var(--border-selected) / <alpha-value>)',
34
+ strong: 'rgb(var(--border-strong) / <alpha-value>)',
35
+ hover2: 'rgb(var(--border-secondary-hover) / <alpha-value>)'
36
+ },
37
+ button: {
38
+ default: 'rgb(var(--button-default) / <alpha-value>)',
39
+ primary: 'rgb(var(--button-primary) / <alpha-value>)',
40
+ },
41
+ },
42
+ backgroundImage: {
43
+ 'gradient-primary':
44
+ 'linear-gradient(135deg, rgb(var(--gradient-primary-start)) 0%, rgb(var(--gradient-primary-end)) 100%)',
45
+ },
46
+ screens: {
47
+ sm: '640px',
48
+ md: '960px',
49
+ lg: '1280px',
50
+ },
51
+ boxShadow: {
52
+ sm: '0 1px 2px 0 rgb(var(--shadow-color) / 0.05)',
53
+ DEFAULT: '0 1px 3px 0 rgb(var(--shadow-color) / 0.1), 0 1px 2px -1px rgb(var(--shadow-color) / 0.1)',
54
+ md: '0 4px 6px -1px rgb(var(--shadow-color) / 0.1), 0 2px 4px -2px rgb(var(--shadow-color) / 0.1)',
55
+ lg: '0 10px 15px -3px rgb(var(--shadow-color) / 0.1), 0 4px 6px -4px rgb(var(--shadow-color) / 0.1)',
56
+ xl: '0 20px 25px -5px rgb(var(--shadow-color) / 0.1), 0 10px 10px -5px rgb(var(--shadow-color) / 0.1)',
57
+ '2xl': '0 25px 50px -12px rgb(var(--shadow-color) / 0.25)',
58
+ inner: 'inset 0 2px 4px 0 rgb(var(--shadow-color) / 0.05)',
59
+ },
60
+ spacing: {
61
+ xs: '0.125rem',
62
+ small: '0.25rem',
63
+ normal: '0.5rem',
64
+ semi: '0.75rem',
65
+ large: '1rem',
66
+ xl: '1.25rem',
67
+ '2xl': '1.5rem',
68
+ },
69
+ fontFamily:{
70
+ spmono: ['SpaceMonoRegular', 'monospace'],
71
+ dmsans: ['DMSans', 'sans-serif'],
72
+ orbitron: ['Orbitron', 'sans-serif'],
73
+ bevn: ['BeVietnamPro', 'sans-serif'],
74
+ },
75
+ fontSize: {
76
+ xs: '0.75rem',
77
+ sm: '0.875rem',
78
+ base: '1rem',
79
+ xl: '1.25rem',
80
+ '2xl': '1.625rem',
81
+ '3xl': '2rem',
82
+ '4xl': '2.25rem',
83
+ '5xl': '3rem',
84
+ }
85
+ },
86
+ },
87
+ plugins: [],
88
+ };
package/tailwind.css ADDED
@@ -0,0 +1,18 @@
1
+ @import './theme.css';
2
+ @import './components.css';
3
+ @import './dialogs.css';
4
+ @import './fonts.css';
5
+ @import './animations.css';
6
+ @import '@danielmoncada/angular-datetime-picker/assets/style/picker.min.css';
7
+ @tailwind base;
8
+ @tailwind component;
9
+ @tailwind utilities;
10
+
11
+ html, body {
12
+ font-family: 'BeVietnamPro';
13
+ margin: 0;
14
+ padding: 0;
15
+ height: 100%;
16
+ width: 100%;
17
+ background: rgb(var(--bg-primary));
18
+ }
package/theme.css ADDED
@@ -0,0 +1,67 @@
1
+ .light_theme {
2
+ --gradient-primary-start: 156 129 255;
3
+ --gradient-primary-end: 4 255 135;
4
+ --bg-primary: 255 255 255;
5
+ --primary: 236 25 56;
6
+ --success: 15 140 96;
7
+ --warning: 255 188 59;
8
+ --critical: 236 25 56;
9
+ --danger: 249 133 7;
10
+ --discovery: 119 113 227;
11
+ --information: 62 175 240;
12
+ --text-primary: 36 45 66;
13
+ --text-secondary: 97 101 108;
14
+ --border-default: 236 236 236;
15
+ --text-placeholder:148 151 156;
16
+ --step-bg: 12 14 18;
17
+ --text-link-primary: 29 122 252;
18
+ --bg-primary-hover: 247 247 247;
19
+ --text-focus: 255 255 255;
20
+ --bg-primary-neutral: 12 14 18;
21
+ --text-selected-primary: 199 14 41;
22
+ --button-default: 34 38 47;
23
+ --text-inverse: 255 255 255;
24
+ --bg-error-bold: 215 0 68;
25
+ --text-error: 215 0 68;
26
+ --border-interactive: 236 25 56;
27
+ --border-selected: 254 53 83;
28
+ --button-primary: 236 25 56;
29
+ --border-strong: 206 207 210;
30
+ --border-secondary-hover: 0 199 205;
31
+ --bg-secondary-hover: 6 59 70;
32
+ --shadow-color: 0 0 0;
33
+ }
34
+
35
+ :root {
36
+ --gradient-primary-start: 156 129 255;
37
+ --gradient-primary-end: 4 255 135;
38
+ --bg-primary: 12 14 18;
39
+ --primary: 236 25 56;
40
+ --success: 76 175 80;
41
+ --warning: 255 188 59;
42
+ --critical: 236 25 56;
43
+ --danger: 249 133 7;
44
+ --discovery: 119 113 227;
45
+ --information: 62 175 240;
46
+ --text-primary: 247 247 247;
47
+ --text-secondary: 97 101 108;
48
+ --border-default: 55 58 65;
49
+ --text-placeholder: 133 136 142;
50
+ --step-bg: 255 255 255;
51
+ --text-link-primary: 87 157 255;
52
+ --bg-primary-hover: 34 38 47;
53
+ --text-focus: 255 255 255;
54
+ --bg-primary-neutral: 12 14 18;
55
+ --text-selected-primary: 254 53 83;
56
+ --button-default: 236 236 236;
57
+ --text-inverse: 12 14 18;
58
+ --bg-error-bold: 215 0 68;
59
+ --text-error: 255 0 81;
60
+ --border-interactive: 236 25 56;
61
+ --border-selected: 254 53 83;
62
+ --button-primary: 236 25 56;
63
+ --border-strong: 97 101 108;
64
+ --border-secondary-hover: 0 199 205;
65
+ --bg-secondary-hover: 6 59 70;
66
+ --shadow-color: 255 255 255;
67
+ }