@ngx-stoui/core 21.0.4 → 21.0.5
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/README.md +148 -148
- package/fesm2022/ngx-stoui-core.mjs +1 -1
- package/fesm2022/ngx-stoui-core.mjs.map +1 -1
- package/package.json +1 -1
- package/styles/README.md +273 -273
package/README.md
CHANGED
|
@@ -1,148 +1,148 @@
|
|
|
1
|
-
# @ngx-stoui/core
|
|
2
|
-
|
|
3
|
-
Core packages like styling, pipes and common directives for Angular, based on EDS design styles.
|
|
4
|
-
|
|
5
|
-
## Installation
|
|
6
|
-
|
|
7
|
-
```bash
|
|
8
|
-
npm install @ngx-stoui/core
|
|
9
|
-
```
|
|
10
|
-
|
|
11
|
-
## Public API
|
|
12
|
-
|
|
13
|
-
### Compiled Stylesheets
|
|
14
|
-
|
|
15
|
-
Import these in your `styles.scss` or `angular.json`:
|
|
16
|
-
|
|
17
|
-
```scss
|
|
18
|
-
// Main stylesheet with all components and utilities
|
|
19
|
-
@import '@ngx-stoui/core/ngx-stoui.css';
|
|
20
|
-
|
|
21
|
-
// Datatable stylesheet (optional, if using datatables)
|
|
22
|
-
@import '@ngx-stoui/core/ngx-datatable.css';
|
|
23
|
-
```
|
|
24
|
-
|
|
25
|
-
### SCSS Utilities (for advanced usage)
|
|
26
|
-
|
|
27
|
-
#### Grid System
|
|
28
|
-
|
|
29
|
-
Use the grid mixin to create responsive grid layouts:
|
|
30
|
-
|
|
31
|
-
```scss
|
|
32
|
-
@use '@ngx-stoui/core/style/grid' as grid;
|
|
33
|
-
|
|
34
|
-
.my-grid {
|
|
35
|
-
@include grid.grid(12); // 12-column grid
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
.my-compact-grid {
|
|
39
|
-
@include grid.grid(4, 'column', 0); // 4-column grid with custom class name
|
|
40
|
-
}
|
|
41
|
-
```
|
|
42
|
-
|
|
43
|
-
#### Theme Variables and Mixins
|
|
44
|
-
|
|
45
|
-
Access theme variables, typography, and create custom themed components:
|
|
46
|
-
|
|
47
|
-
```scss
|
|
48
|
-
@use 'sass:map';
|
|
49
|
-
@import '@ngx-stoui/core/style/theme/theme';
|
|
50
|
-
|
|
51
|
-
// Access theme variables
|
|
52
|
-
@mixin my-component-theme($theme, $variables) {
|
|
53
|
-
$primary: map.get($variables, primary);
|
|
54
|
-
$accent: map.get($variables, accent);
|
|
55
|
-
|
|
56
|
-
.my-component {
|
|
57
|
-
background: $primary;
|
|
58
|
-
color: $accent;
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
// Apply to light and dark themes
|
|
63
|
-
.light-theme {
|
|
64
|
-
@include my-component-theme($sto-theme, $variables);
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
.dark-theme {
|
|
68
|
-
@include my-component-theme($sto-dark-theme, $dark-variables);
|
|
69
|
-
}
|
|
70
|
-
```
|
|
71
|
-
|
|
72
|
-
#### Typography Only
|
|
73
|
-
|
|
74
|
-
If you only need typography definitions:
|
|
75
|
-
|
|
76
|
-
```scss
|
|
77
|
-
@import '@ngx-stoui/core/style/theme/typography';
|
|
78
|
-
|
|
79
|
-
// Access typography variables:
|
|
80
|
-
// - $sto-typography (default 13px)
|
|
81
|
-
// - $sto-sm-typography (small 10px)
|
|
82
|
-
// - $sto-l-typography (large 16px)
|
|
83
|
-
```
|
|
84
|
-
|
|
85
|
-
## Available Exports
|
|
86
|
-
|
|
87
|
-
### Compiled CSS
|
|
88
|
-
|
|
89
|
-
- `ngx-stoui.css` - Main stylesheet
|
|
90
|
-
- `ngx-datatable.css` - Datatable styles
|
|
91
|
-
|
|
92
|
-
### SCSS Utilities
|
|
93
|
-
|
|
94
|
-
- `style/grid.scss` - Grid mixin system
|
|
95
|
-
- `style/theme/theme.scss` - Complete theme with variables and components
|
|
96
|
-
- `style/theme/_typography.scss` - Typography configurations
|
|
97
|
-
- `style/theme/_theme.scss` - Theme color palettes
|
|
98
|
-
- `style/theme/_colors.scss` - Color definitions
|
|
99
|
-
- `style/theme/_theme-variables.scss` - Theme variable functions
|
|
100
|
-
- `style/theme/components.scss` - All component styles
|
|
101
|
-
|
|
102
|
-
### Fonts
|
|
103
|
-
|
|
104
|
-
- Equinor font files (`.woff`, `.woff2`)
|
|
105
|
-
|
|
106
|
-
## Usage Examples
|
|
107
|
-
|
|
108
|
-
### Basic Setup
|
|
109
|
-
|
|
110
|
-
```scss
|
|
111
|
-
// styles.scss
|
|
112
|
-
@import '@ngx-stoui/core/ngx-stoui.css';
|
|
113
|
-
```
|
|
114
|
-
|
|
115
|
-
### With Grid System
|
|
116
|
-
|
|
117
|
-
```scss
|
|
118
|
-
// styles.scss
|
|
119
|
-
@use '@ngx-stoui/core/style/grid' as grid;
|
|
120
|
-
@import '@ngx-stoui/core/ngx-stoui.css';
|
|
121
|
-
|
|
122
|
-
.product-grid {
|
|
123
|
-
@include grid.grid(6); // 6-column grid
|
|
124
|
-
}
|
|
125
|
-
```
|
|
126
|
-
|
|
127
|
-
### With Custom Theming
|
|
128
|
-
|
|
129
|
-
```scss
|
|
130
|
-
// styles.scss
|
|
131
|
-
@use 'sass:map';
|
|
132
|
-
@import '@ngx-stoui/core/ngx-stoui.css';
|
|
133
|
-
@import '@ngx-stoui/core/style/theme/theme';
|
|
134
|
-
|
|
135
|
-
@mixin app-theme($theme, $variables) {
|
|
136
|
-
// Your custom theme styles using $variables
|
|
137
|
-
}
|
|
138
|
-
|
|
139
|
-
@include app-theme($sto-theme, $variables);
|
|
140
|
-
|
|
141
|
-
.sto-dark-theme {
|
|
142
|
-
@include app-theme($sto-dark-theme, $dark-variables);
|
|
143
|
-
}
|
|
144
|
-
```
|
|
145
|
-
|
|
146
|
-
## Running unit tests
|
|
147
|
-
|
|
148
|
-
Run `nx test core` to execute the unit tests.
|
|
1
|
+
# @ngx-stoui/core
|
|
2
|
+
|
|
3
|
+
Core packages like styling, pipes and common directives for Angular, based on EDS design styles.
|
|
4
|
+
|
|
5
|
+
## Installation
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm install @ngx-stoui/core
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Public API
|
|
12
|
+
|
|
13
|
+
### Compiled Stylesheets
|
|
14
|
+
|
|
15
|
+
Import these in your `styles.scss` or `angular.json`:
|
|
16
|
+
|
|
17
|
+
```scss
|
|
18
|
+
// Main stylesheet with all components and utilities
|
|
19
|
+
@import '@ngx-stoui/core/ngx-stoui.css';
|
|
20
|
+
|
|
21
|
+
// Datatable stylesheet (optional, if using datatables)
|
|
22
|
+
@import '@ngx-stoui/core/ngx-datatable.css';
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
### SCSS Utilities (for advanced usage)
|
|
26
|
+
|
|
27
|
+
#### Grid System
|
|
28
|
+
|
|
29
|
+
Use the grid mixin to create responsive grid layouts:
|
|
30
|
+
|
|
31
|
+
```scss
|
|
32
|
+
@use '@ngx-stoui/core/style/grid' as grid;
|
|
33
|
+
|
|
34
|
+
.my-grid {
|
|
35
|
+
@include grid.grid(12); // 12-column grid
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
.my-compact-grid {
|
|
39
|
+
@include grid.grid(4, 'column', 0); // 4-column grid with custom class name
|
|
40
|
+
}
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
#### Theme Variables and Mixins
|
|
44
|
+
|
|
45
|
+
Access theme variables, typography, and create custom themed components:
|
|
46
|
+
|
|
47
|
+
```scss
|
|
48
|
+
@use 'sass:map';
|
|
49
|
+
@import '@ngx-stoui/core/style/theme/theme';
|
|
50
|
+
|
|
51
|
+
// Access theme variables
|
|
52
|
+
@mixin my-component-theme($theme, $variables) {
|
|
53
|
+
$primary: map.get($variables, primary);
|
|
54
|
+
$accent: map.get($variables, accent);
|
|
55
|
+
|
|
56
|
+
.my-component {
|
|
57
|
+
background: $primary;
|
|
58
|
+
color: $accent;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
// Apply to light and dark themes
|
|
63
|
+
.light-theme {
|
|
64
|
+
@include my-component-theme($sto-theme, $variables);
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
.dark-theme {
|
|
68
|
+
@include my-component-theme($sto-dark-theme, $dark-variables);
|
|
69
|
+
}
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
#### Typography Only
|
|
73
|
+
|
|
74
|
+
If you only need typography definitions:
|
|
75
|
+
|
|
76
|
+
```scss
|
|
77
|
+
@import '@ngx-stoui/core/style/theme/typography';
|
|
78
|
+
|
|
79
|
+
// Access typography variables:
|
|
80
|
+
// - $sto-typography (default 13px)
|
|
81
|
+
// - $sto-sm-typography (small 10px)
|
|
82
|
+
// - $sto-l-typography (large 16px)
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
## Available Exports
|
|
86
|
+
|
|
87
|
+
### Compiled CSS
|
|
88
|
+
|
|
89
|
+
- `ngx-stoui.css` - Main stylesheet
|
|
90
|
+
- `ngx-datatable.css` - Datatable styles
|
|
91
|
+
|
|
92
|
+
### SCSS Utilities
|
|
93
|
+
|
|
94
|
+
- `style/grid.scss` - Grid mixin system
|
|
95
|
+
- `style/theme/theme.scss` - Complete theme with variables and components
|
|
96
|
+
- `style/theme/_typography.scss` - Typography configurations
|
|
97
|
+
- `style/theme/_theme.scss` - Theme color palettes
|
|
98
|
+
- `style/theme/_colors.scss` - Color definitions
|
|
99
|
+
- `style/theme/_theme-variables.scss` - Theme variable functions
|
|
100
|
+
- `style/theme/components.scss` - All component styles
|
|
101
|
+
|
|
102
|
+
### Fonts
|
|
103
|
+
|
|
104
|
+
- Equinor font files (`.woff`, `.woff2`)
|
|
105
|
+
|
|
106
|
+
## Usage Examples
|
|
107
|
+
|
|
108
|
+
### Basic Setup
|
|
109
|
+
|
|
110
|
+
```scss
|
|
111
|
+
// styles.scss
|
|
112
|
+
@import '@ngx-stoui/core/ngx-stoui.css';
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
### With Grid System
|
|
116
|
+
|
|
117
|
+
```scss
|
|
118
|
+
// styles.scss
|
|
119
|
+
@use '@ngx-stoui/core/style/grid' as grid;
|
|
120
|
+
@import '@ngx-stoui/core/ngx-stoui.css';
|
|
121
|
+
|
|
122
|
+
.product-grid {
|
|
123
|
+
@include grid.grid(6); // 6-column grid
|
|
124
|
+
}
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
### With Custom Theming
|
|
128
|
+
|
|
129
|
+
```scss
|
|
130
|
+
// styles.scss
|
|
131
|
+
@use 'sass:map';
|
|
132
|
+
@import '@ngx-stoui/core/ngx-stoui.css';
|
|
133
|
+
@import '@ngx-stoui/core/style/theme/theme';
|
|
134
|
+
|
|
135
|
+
@mixin app-theme($theme, $variables) {
|
|
136
|
+
// Your custom theme styles using $variables
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
@include app-theme($sto-theme, $variables);
|
|
140
|
+
|
|
141
|
+
.sto-dark-theme {
|
|
142
|
+
@include app-theme($sto-dark-theme, $dark-variables);
|
|
143
|
+
}
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
## Running unit tests
|
|
147
|
+
|
|
148
|
+
Run `nx test core` to execute the unit tests.
|
|
@@ -609,7 +609,7 @@ class NumberFormatPipe {
|
|
|
609
609
|
value = parseFloat(this.toFixed(value, numberOfDecimals));
|
|
610
610
|
}
|
|
611
611
|
// Turn negative numbers back, but only if value is not -0
|
|
612
|
-
if (isNegativeNumber && value
|
|
612
|
+
if (isNegativeNumber && value !== 0) {
|
|
613
613
|
value = value * -1;
|
|
614
614
|
}
|
|
615
615
|
const localized = this.prettyPrintValue(value, appendDecimals, numberOfDecimals);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ngx-stoui-core.mjs","sources":["../../../../libs/core/src/lib/abstract-and-interfaces/keyPress.enum.ts","../../../../libs/core/src/lib/sto-directives/context-menu.directive.ts","../../../../libs/core/src/lib/sto-directives/date-form-field-click.directive.ts","../../../../libs/core/src/lib/sto-directives/menu-overlay.directive.ts","../../../../libs/core/src/lib/sto-directives/quick-keys.directive.ts","../../../../libs/core/src/lib/sto-directives/sto-grid.directive.ts","../../../../libs/core/src/lib/sto-directives/sto-select-text-on-focus.directive.ts","../../../../libs/core/src/lib/sto-directives/directives.module.ts","../../../../libs/core/src/lib/sto-pipes/currency-format.pipe.ts","../../../../libs/core/src/lib/sto-pipes/date-format.pipe.ts","../../../../libs/core/src/lib/sto-pipes/keys.pipe.ts","../../../../libs/core/src/lib/sto-pipes/number-format.pipe.ts","../../../../libs/core/src/lib/sto-pipes/with-unit.ts","../../../../libs/core/src/lib/sto-pipes/yes-no.ts","../../../../libs/core/src/lib/sto-pipes/sto-pipes.module.ts","../../../../libs/core/src/index.ts","../../../../libs/core/src/ngx-stoui-core.ts"],"sourcesContent":["/**\r\nMIT License\r\n\r\nCopyright (c) 2017 Nathan Friend\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy\r\nof this software and associated documentation files (the \"Software\"), to deal\r\nin the Software without restriction, including without limitation the rights\r\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\ncopies of the Software, and to permit persons to whom the Software is\r\nfurnished to do so, subject to the following conditions:\r\n\r\n The above copyright notice and this permission notice shall be included in all\r\ncopies or substantial portions of the Software.\r\n\r\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\r\nSOFTWARE. **/\r\n\r\nexport enum Key {\r\n Backspace = 8,\r\n Tab = 9,\r\n Enter = 13,\r\n Shift = 16,\r\n Ctrl = 17,\r\n Alt = 18,\r\n PauseBreak = 19,\r\n CapsLock = 20,\r\n Escape = 27,\r\n Space = 32,\r\n PageUp = 33,\r\n PageDown = 34,\r\n End = 35,\r\n Home = 36,\r\n\r\n LeftArrow = 37,\r\n UpArrow = 38,\r\n RightArrow = 39,\r\n DownArrow = 40,\r\n\r\n Insert = 45,\r\n Delete = 46,\r\n\r\n Zero = 48,\r\n ClosedParen = Zero,\r\n One = 49,\r\n ExclamationMark = One,\r\n Two = 50,\r\n AtSign = Two,\r\n Three = 51,\r\n PoundSign = Three,\r\n Hash = PoundSign,\r\n Four = 52,\r\n DollarSign = Four,\r\n Five = 53,\r\n PercentSign = Five,\r\n Six = 54,\r\n Caret = Six,\r\n Hat = Caret,\r\n Seven = 55,\r\n Ampersand = Seven,\r\n Eight = 56,\r\n Star = Eight,\r\n Asterik = Star,\r\n Nine = 57,\r\n OpenParen = Nine,\r\n\r\n A = 65,\r\n B = 66,\r\n C = 67,\r\n D = 68,\r\n E = 69,\r\n F = 70,\r\n G = 71,\r\n H = 72,\r\n I = 73,\r\n J = 74,\r\n K = 75,\r\n L = 76,\r\n M = 77,\r\n N = 78,\r\n O = 79,\r\n P = 80,\r\n Q = 81,\r\n R = 82,\r\n S = 83,\r\n T = 84,\r\n U = 85,\r\n V = 86,\r\n W = 87,\r\n X = 88,\r\n Y = 89,\r\n Z = 90,\r\n\r\n LeftWindowKey = 91,\r\n RightWindowKey = 92,\r\n SelectKey = 93,\r\n\r\n Numpad0 = 96,\r\n Numpad1 = 97,\r\n Numpad2 = 98,\r\n Numpad3 = 99,\r\n Numpad4 = 100,\r\n Numpad5 = 101,\r\n Numpad6 = 102,\r\n Numpad7 = 103,\r\n Numpad8 = 104,\r\n Numpad9 = 105,\r\n\r\n Multiply = 106,\r\n Add = 107,\r\n Subtract = 109,\r\n DecimalPoint = 110,\r\n Divide = 111,\r\n\r\n F1 = 112,\r\n F2 = 113,\r\n F3 = 114,\r\n F4 = 115,\r\n F5 = 116,\r\n F6 = 117,\r\n F7 = 118,\r\n F8 = 119,\r\n F9 = 120,\r\n F10 = 121,\r\n F11 = 122,\r\n F12 = 123,\r\n\r\n NumLock = 144,\r\n ScrollLock = 145,\r\n\r\n SemiColon = 186,\r\n Equals = 187,\r\n Comma = 188,\r\n Dash = 189,\r\n Period = 190,\r\n UnderScore = Dash,\r\n PlusSign = Equals,\r\n ForwardSlash = 191,\r\n Tilde = 192,\r\n GraveAccent = Tilde,\r\n\r\n OpenBracket = 219,\r\n ClosedBracket = 221,\r\n Quote = 222\r\n}\r\n","import { Directive, HostListener, input } from '@angular/core';\r\nimport { MatMenuTrigger } from '@angular/material/menu';\r\nimport { MenuOverlayDirective } from './menu-overlay.directive';\r\n\r\n@Directive({\r\n selector: '[stoContextMenu]',\r\n})\r\nexport class ContextMenuDirective {\r\n readonly menuTrigger = input.required<MatMenuTrigger>();\r\n readonly overlayDirective = input.required<MenuOverlayDirective>();\r\n readonly menuContext = input<unknown>();\r\n\r\n @HostListener('contextmenu', ['$event'])\r\n contextMenu(event: MouseEvent) {\r\n event.preventDefault();\r\n if (this.menuTrigger().menuOpen) {\r\n this.menuTrigger().closeMenu();\r\n }\r\n this.overlayDirective().updatePosition(event);\r\n setTimeout(() => {\r\n this.menuTrigger().menuData = this.menuContext();\r\n this.menuTrigger().openMenu();\r\n }, 150);\r\n }\r\n}\r\n","import {\r\n ContentChildren,\r\n Directive,\r\n HostListener,\r\n OnDestroy,\r\n OnInit,\r\n QueryList,\r\n input,\r\n} from '@angular/core';\r\nimport { MatDatepicker } from '@angular/material/datepicker';\r\nimport { MatInput } from '@angular/material/input';\r\nimport { Subject } from 'rxjs';\r\nimport { takeUntil } from 'rxjs/operators';\r\n\r\n/**\r\n * Directive that can be placed on mat-form-fields that contains a mat-datepicker.\r\n * This directive has two tasks:\r\n * Clicking anywhere on the mat-form-field will open the datepicker dialog\r\n * When the datepicker is closed in any manner, we shift focus back to the datepicker input\r\n */\r\n@Directive({\r\n selector: '[stoDateFormFieldClick]',\r\n})\r\nexport class DateFormFieldClickDirective implements OnInit, OnDestroy {\r\n @ContentChildren(MatInput) inputs: QueryList<MatInput>;\r\n readonly stoDateFormFieldClick = input.required<MatDatepicker<Date>>();\r\n private destroy$ = new Subject();\r\n\r\n @HostListener('click')\r\n clickEvent() {\r\n this.stoDateFormFieldClick().open();\r\n }\r\n\r\n ngOnInit() {\r\n this.stoDateFormFieldClick()\r\n .closedStream.pipe(takeUntil(this.destroy$))\r\n .subscribe(() => this.inputs.first.focus());\r\n }\r\n\r\n ngOnDestroy() {\r\n this.destroy$.next(true);\r\n this.destroy$.complete();\r\n }\r\n}\r\n","import { Directive, ElementRef, HostBinding, inject } from '@angular/core';\r\nimport { MatMenuPanel, MatMenuTrigger } from '@angular/material/menu';\r\nimport { fromEvent } from 'rxjs';\r\nimport { switchMap, take } from 'rxjs/operators';\r\n\r\n@Directive({\r\n selector: '[stoMenuOverlay]',\r\n exportAs: 'stoMenuOverlay',\r\n standalone: true\r\n})\r\nexport class MenuOverlayDirective {\n private trigger = inject(MatMenuTrigger, { host: true });\n\r\n @HostBinding('style.left.px')\r\n left = 0;\r\n @HostBinding('style.top.px')\r\n top = 0;\r\n private readonly menu: MatMenuPanel;\r\n\r\n constructor() {\n const trigger = this.trigger;\n const el = inject<ElementRef<HTMLButtonElement>>(ElementRef);\n\r\n this.menu = trigger.menu as MatMenuPanel;\r\n this.trigger.menuOpened.pipe(\r\n switchMap(() =>\r\n fromEvent<MouseEvent>(document, 'click')\r\n .pipe(take(1))\r\n ),\r\n ).subscribe(() => {\r\n this.trigger.closeMenu();\r\n });\r\n this.setStyle(el.nativeElement);\r\n }\r\n\r\n public updatePosition(event: MouseEvent) {\r\n this.left = event.x;\r\n this.top = event.y;\r\n }\r\n\r\n private setStyle(element: HTMLButtonElement) {\r\n element.style.overflow = 'hidden';\r\n element.style.position = 'fixed';\r\n element.style.height = '1px';\r\n element.style.width = '1px';\r\n }\r\n}\r\n","import { Directive, HostListener, input, output } from '@angular/core';\r\nimport { UntypedFormGroup } from '@angular/forms';\r\nimport { Key } from '../abstract-and-interfaces/keyPress.enum';\r\n\r\n/**\r\n * QuickKeysDirective is used to implement shortcut keys on DOM elements, e.g to submit or reset a form on enter/escape\r\n * <form quickKeys (quickSubmit)=\"save()\" (quickCancel)=\"reset()\">\r\n */\r\n\r\n@Directive({\r\n selector: '[stoQuickKeys]',\r\n})\r\nexport class QuickKeysDirective {\r\n readonly quickKeys = input<unknown>();\r\n /**\r\n * Optional formGroup input, when used in combination with a reactive form\r\n */\r\n readonly formGroup = input<UntypedFormGroup>();\r\n /**\r\n * Emits when ctrl + enter is clicked in combination\r\n * <form (quickSubmit)=\"save()\">\r\n */\r\n readonly quickSubmit = output<void>();\r\n /**\r\n * Emits when escape is clicked\r\n * <form (quickCancel)=\"cancel()\">\r\n */\r\n readonly quickCancel = output<void>();\r\n\r\n /**\r\n * Listens on the host element for any keyup events\r\n * @param e\r\n */\r\n @HostListener('keyup', ['$event'])\r\n onKeyUp(e: KeyboardEvent) {\r\n if (this.formGroup()) {\r\n this.handleFormKeys(e);\r\n }\r\n this.handleGenericKeydown(e);\r\n }\r\n\r\n /**\r\n * Handler for generic keydowns, such as cancel events to close drawers\r\n * @param e\r\n * void\r\n */\r\n private handleGenericKeydown(e: KeyboardEvent) {\r\n // Shortcuts that are useful outside of forms\r\n if (e.keyCode === Key.Escape) {\r\n // TODO: The 'emit' function requires a mandatory void argument\r\n this.quickCancel.emit();\r\n }\r\n if (!this.formGroup() && e.keyCode === Key.Enter && e.ctrlKey) {\r\n // TODO: The 'emit' function requires a mandatory void argument\r\n this.quickSubmit.emit();\r\n }\r\n }\r\n\r\n /**\r\n * Handler for form specific shortcuts, such as saving the form\r\n * @param e\r\n */\r\n private handleFormKeys(e: KeyboardEvent) {\r\n if (this.formGroup()?.pristine) {\r\n return;\r\n }\r\n if (e.keyCode === Key.Enter && e.ctrlKey) {\r\n // TODO: The 'emit' function requires a mandatory void argument\r\n this.quickSubmit.emit();\r\n }\r\n }\r\n}\r\n","import { Directive, input } from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[stoGridSpacer]',\r\n host: {\r\n class: 'sto-grid__col sto-grid__col--spacer',\r\n },\r\n})\r\nexport class StoGridSpacerDirective {}\r\n\r\n@Directive({\r\n selector: '[stoGridColumn]',\r\n host: {\r\n class: 'sto-grid__col',\r\n '[class.sto-grid__col--2]': 'stoGridColumnDouble()',\r\n },\r\n})\r\nexport class StoGridColumnDirective {\r\n readonly stoGridColumnDouble = input(false);\r\n}\r\n\r\n@Directive({\r\n selector: '[stoGrid]',\r\n exportAs: 'stoGrid',\r\n host: {\r\n class: 'sto-grid',\r\n '[style.max-width.px]': 'maxWidth()',\r\n '[style.min-width.px]': 'minWidth()',\r\n },\r\n})\r\nexport class StoGridDirective {\r\n readonly maxWidth = input(1000);\r\n readonly minWidth = input(250);\r\n}\r\n","import { Directive, ElementRef, HostListener, inject } from '@angular/core';\r\n\r\n/**\r\n * stoSelectTextOnFocus listens for input focus events, and selects the contents of the input\r\n * A user service is established in {@link StoUserPreferenceService} that allows a user to toggle this feature\r\n */\r\n@Directive({\r\n selector: '[stoSelectTextOnFocus]',\r\n standalone: true\r\n})\r\nexport class StoSelectTextOnFocusDirective {\n private elementRef = inject(ElementRef);\n\r\n\r\n private _el: HTMLInputElement;\r\n\r\n constructor() {\r\n this._el = this.elementRef.nativeElement;\r\n }\r\n\r\n /**\r\n * Listens for focus events on the host (input) element, and focuses if applicable\r\n */\r\n @HostListener('focus')\r\n @HostListener('dblclick')\r\n onFocus() {\r\n if ( !this._el.readOnly ) {\r\n this._el.select();\r\n }\r\n\r\n }\r\n\r\n}\r\n","import { ContextMenuDirective } from './context-menu.directive';\r\nimport { DateFormFieldClickDirective } from './date-form-field-click.directive';\r\nimport { MenuOverlayDirective } from './menu-overlay.directive';\r\nimport { QuickKeysDirective } from './quick-keys.directive';\r\nimport {\r\n StoGridColumnDirective,\r\n StoGridDirective,\r\n StoGridSpacerDirective,\r\n} from './sto-grid.directive';\r\nimport { StoSelectTextOnFocusDirective } from './sto-select-text-on-focus.directive';\r\n\r\n/**\r\n * Directives have been made standalone, import them directly:\r\n * QuickKeysDirective\r\n * DateFormFieldClickDirective\r\n * StoSelectTextOnFocusDirective\r\n * StoGridDirective\r\n * StoGridColumnDirective\r\n * StoGridSpacerDirective\r\n * MenuOverlayDirective\r\n * ContextMenuDirective\r\n *\r\n */\r\nimport { NgModule } from '@angular/core';\r\n\r\n@NgModule({\r\n imports: [\r\n QuickKeysDirective,\r\n DateFormFieldClickDirective,\r\n StoSelectTextOnFocusDirective,\r\n StoGridDirective,\r\n StoGridColumnDirective,\r\n StoGridSpacerDirective,\r\n MenuOverlayDirective,\r\n ContextMenuDirective,\r\n ],\r\n exports: [\r\n QuickKeysDirective,\r\n DateFormFieldClickDirective,\r\n StoSelectTextOnFocusDirective,\r\n StoGridDirective,\r\n StoGridColumnDirective,\r\n StoGridSpacerDirective,\r\n MenuOverlayDirective,\r\n ContextMenuDirective,\r\n ],\r\n})\r\nexport class StoDirectivesModule {}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\n\r\n/**\r\n * Pipe used to transform numbers to a currency format\r\n *\r\n * @example\r\n *\r\n * <span>{{ 5000.5824 | currentFormat:'$':3 }}</span>\r\n * Results in\r\n * <span>5 000,582 $</span>\r\n */\r\n@Pipe({\r\n name: 'currencyFormat',\r\n standalone: true\r\n})\r\nexport class CurrencyFormatPipe implements PipeTransform {\r\n transform(value: number, unit = '', maximumFractionDigits = 3): string | null {\r\n if ( !value ) {\r\n return null;\r\n }\r\n if ( typeof value === 'string' ) {\r\n value = parseFloat(value);\r\n if ( isNaN(value) ) {\r\n return '';\r\n }\r\n }\r\n\r\n const intl = new Intl.NumberFormat('en-US', { maximumFractionDigits }).format(value);\r\n return intl.replace(/,/g, ' ').replace('.', ',') + ` ${unit}`;\r\n }\r\n}\r\n\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { format as formatDate, isValid, parseISO } from 'date-fns';\r\n\r\n/**\r\n * Pipe used to transform dates, based on our default formats.\r\n *\r\n * @example\r\n *\r\n * public date = \"2018-08-27 14:00:30\"\r\n * <span>{{ date | dateFormat }}</span> -> Aug 27, 2018\r\n * <span>{{ date | dateFormat:'long' }}</span> -> Monday Aug 27, 2018\r\n */\r\n\r\n@Pipe({\r\n name: 'formatDate',\r\n standalone: true\r\n})\r\nexport class DateFormatPipe implements PipeTransform {\r\n\r\n transform(value: string | number | Date | null, format?: string): string | null {\r\n if ( !value ) {\r\n return null;\r\n }\r\n if ( typeof value === 'string' ) {\r\n const originalValue = value;\r\n value = parseISO(value);\r\n if ( !isValid(value) ) {\r\n // If invalid ISO date (e.g single-digit day), fall back to new Date()\r\n console.warn(`${originalValue} is not a valid ISO date string, falling back to native date`);\r\n value = new Date(originalValue);\r\n }\r\n }\r\n switch ( format ) {\r\n case 'long':\r\n return formatDate(value, 'EEEE MMM d, yyyy');\r\n case 'short':\r\n return formatDate(value, 'yyyy-MM-dd');\r\n case 'datetime':\r\n return formatDate(value, 'MMM d, yyyy, HH:mm');\r\n case 'datetimezone':\r\n return formatDate(value, `MMM d, yyyy, HH:mm:ss ('UTC'xxx)`);\r\n case 'datetime-long':\r\n return formatDate(value, 'EEEE MMM dd, yyyy, HH:mm');\r\n case 'datetime-short':\r\n return formatDate(value, 'yyyy-MM-dd, HH:mm');\r\n default:\r\n return formatDate(value, 'MMM d, yyyy');\r\n }\r\n }\r\n\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\n\r\n/**\r\n * Transforms an Object to an Array.\r\n *\r\n * @example\r\n *\r\n * public obj = {a: 1, b: 2, c: 3};\r\n * <span *ngFor=\"let key of obj | keys \"> {{ obj[key] }}, </span> -> 1, 2, 3,\r\n */\r\n\r\n@Pipe({\r\n name: 'keys',\r\n standalone: true\r\n})\r\nexport class KeysPipe implements PipeTransform {\r\n\r\n transform(value: Record<string, unknown>): Array<string> {\r\n if ( value ) {\r\n return Object.keys(value);\r\n }\r\n return [];\r\n }\r\n\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\n\r\n/**\r\n * Formats numbers to use our standard formatting (d ddd,ddd)\r\n *\r\n * @example\r\n *\r\n * {{ 1234,32 | numberFormat }} -> 1 234,320\r\n * {{ 1234,32 | numberFormat:'M3' }} -> 1 234,320 M3\r\n * {{ -1234,32 | numberFormat:'M3':true }} -> 1 234,320 M3\r\n * {{ 1234,32 | numberFormat:'M3':false:false }} -> 1 234 M3\r\n * {{ 1234,32 | numberFormat:'M3':false:true:5 }} -> 1 234,32000 M3\r\n */\r\n@Pipe({\r\n name: 'numberFormat',\r\n standalone: true,\r\n})\r\nexport class NumberFormatPipe implements PipeTransform {\r\n transform(\r\n value: number | string,\r\n unit = '',\r\n abs?: boolean,\r\n appendDecimals = true,\r\n numberOfDecimals = 3,\r\n ): string | null {\r\n if (value !== 0 && !value) {\r\n return '';\r\n }\r\n if (typeof value === 'string') {\r\n const newValue = parseFloat(value);\r\n if (isNaN(newValue)) {\r\n return null;\r\n }\r\n value = newValue;\r\n }\r\n if (abs) {\r\n value = Math.abs(value);\r\n }\r\n // We absolute the value to ensure that the rounding rules is always away from zero.\r\n // 1.5 => 2 and -1.5 => -2\r\n const isNegativeNumber = value < 0;\r\n value = Math.abs(value);\r\n\r\n if (!appendDecimals) {\r\n value = Math.round(value);\r\n }\r\n if (!isNaN(value) && appendDecimals) {\r\n value = parseFloat(this.toFixed(value, numberOfDecimals));\r\n }\r\n // Turn negative numbers back, but only if value is not -0\r\n \r\n if (isNegativeNumber && value < 0) {\r\n value = value * -1;\r\n }\r\n const localized = this.prettyPrintValue(\r\n value,\r\n appendDecimals,\r\n numberOfDecimals,\r\n );\r\n return (\r\n localized.replace(/,/g, ' ').replace('.', ',') +\r\n `${unit ? ' ' + unit : ''}`\r\n );\r\n }\r\n\r\n private prettyPrintValue(\r\n value: number,\r\n appendDecimals: boolean,\r\n numberOfDecimals: number,\r\n ) {\r\n const intlOptions = {\r\n minimumFractionDigits: numberOfDecimals,\r\n maximumFractionDigits: numberOfDecimals,\r\n };\r\n const intl = new Intl.NumberFormat('en-US', intlOptions).format(value);\r\n const split = intl.split('.');\r\n let localized = split[0];\r\n\r\n if (appendDecimals) {\r\n const decimals = split.length === 2 ? split[1] : '';\r\n split[1] = decimals.padEnd(numberOfDecimals, '0');\r\n localized = split.join('.');\r\n }\r\n return localized;\r\n }\r\n\r\n // Normal toFixed has some issues: https://stackoverflow.com/questions/10015027/javascript-tofixed-not-rounding\r\n private toFixed(num: number, precision: number) {\r\n // This method also has some issues - namely, it's unable to parse negative numbers with huge floating points\r\n // -8.185452315956354e-12 becomes NaN\r\n let returnValue = +(\r\n Math.round(+(num + 'e' + precision)) +\r\n 'e' +\r\n -precision\r\n );\r\n if (isNaN(returnValue)) {\r\n returnValue = parseFloat(num.toFixed(precision));\r\n }\r\n return returnValue.toFixed(precision);\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\n\r\n@Pipe({ name: 'getUnit', standalone: true })\r\nexport class GetUnit implements PipeTransform {\r\n transform(value: string, withParens?: boolean): string {\r\n if ( value ) {\r\n const arr = value.split('(');\r\n if ( arr.length > 0 ) {\r\n if ( withParens ) {\r\n value = '(' + arr[ 1 ];\r\n } else {\r\n arr[ 1 ].slice(0, -1);\r\n value = arr[ 1 ].slice(0, -1);\r\n }\r\n }\r\n }\r\n return value;\r\n }\r\n}\r\n\r\n@Pipe({ name: 'excludeUnit', standalone: true })\r\nexport class ExcludeUnit implements PipeTransform {\r\n transform(value: string): string {\r\n if ( value ) {\r\n const arr = value.split('(');\r\n if ( arr.length > 0 ) {\r\n value = arr[ 0 ];\r\n }\r\n }\r\n return value;\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\n\r\n@Pipe({ name: 'yesNo', standalone: true })\r\nexport class YesNoPipe implements PipeTransform {\r\n transform(value: boolean, ignoreNulls = false): string {\r\n let valueStr = '';\r\n if ( ignoreNulls ) {\r\n valueStr = value ? 'Yes' : value === false ? 'No' : '';\r\n } else {\r\n valueStr = value ? 'Yes' : 'No';\r\n }\r\n return valueStr;\r\n\r\n }\r\n}\r\n","import { NumberFormatPipe } from './number-format.pipe';\r\nimport { CurrencyFormatPipe } from './currency-format.pipe';\r\nimport { KeysPipe } from './keys.pipe';\r\nimport { DateFormatPipe } from './date-format.pipe';\r\nimport { ExcludeUnit, GetUnit } from './with-unit';\r\nimport { YesNoPipe } from './yes-no';\r\n\r\n\r\nimport { NgModule } from '@angular/core';\r\n\r\n@NgModule({\r\n imports: [\r\n DateFormatPipe,\r\n KeysPipe,\r\n NumberFormatPipe,\r\n CurrencyFormatPipe,\r\n GetUnit,\r\n ExcludeUnit,\r\n YesNoPipe\r\n ],\r\n exports: [\r\n DateFormatPipe,\r\n KeysPipe,\r\n NumberFormatPipe,\r\n CurrencyFormatPipe,\r\n GetUnit,\r\n ExcludeUnit,\r\n YesNoPipe\r\n ]\r\n})\r\nexport class StoPipesModule {\r\n}\r\n","/*\r\n * Public API Surface of @ngx-stoui/core\r\n */\r\n\r\nexport * from './lib/abstract-and-interfaces/keyPress.enum';\r\nexport * from './lib/sto-directives';\r\n\r\nexport * from './lib/sto-pipes/currency-format.pipe';\r\nexport * from './lib/sto-pipes/date-format.pipe';\r\nexport * from './lib/sto-pipes/keys.pipe';\r\nexport * from './lib/sto-pipes/number-format.pipe';\r\nexport * from './lib/sto-pipes/sto-pipes.module';\r\n\r\nexport * from './lib/sto-pipes/with-unit';\r\nexport * from './lib/sto-pipes/yes-no';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["format","formatDate"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ngx-stoui-core.mjs","sources":["../../../../libs/core/src/lib/abstract-and-interfaces/keyPress.enum.ts","../../../../libs/core/src/lib/sto-directives/context-menu.directive.ts","../../../../libs/core/src/lib/sto-directives/date-form-field-click.directive.ts","../../../../libs/core/src/lib/sto-directives/menu-overlay.directive.ts","../../../../libs/core/src/lib/sto-directives/quick-keys.directive.ts","../../../../libs/core/src/lib/sto-directives/sto-grid.directive.ts","../../../../libs/core/src/lib/sto-directives/sto-select-text-on-focus.directive.ts","../../../../libs/core/src/lib/sto-directives/directives.module.ts","../../../../libs/core/src/lib/sto-pipes/currency-format.pipe.ts","../../../../libs/core/src/lib/sto-pipes/date-format.pipe.ts","../../../../libs/core/src/lib/sto-pipes/keys.pipe.ts","../../../../libs/core/src/lib/sto-pipes/number-format.pipe.ts","../../../../libs/core/src/lib/sto-pipes/with-unit.ts","../../../../libs/core/src/lib/sto-pipes/yes-no.ts","../../../../libs/core/src/lib/sto-pipes/sto-pipes.module.ts","../../../../libs/core/src/index.ts","../../../../libs/core/src/ngx-stoui-core.ts"],"sourcesContent":["/**\nMIT License\n\nCopyright (c) 2017 Nathan Friend\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\n The above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE. **/\n\nexport enum Key {\n Backspace = 8,\n Tab = 9,\n Enter = 13,\n Shift = 16,\n Ctrl = 17,\n Alt = 18,\n PauseBreak = 19,\n CapsLock = 20,\n Escape = 27,\n Space = 32,\n PageUp = 33,\n PageDown = 34,\n End = 35,\n Home = 36,\n\n LeftArrow = 37,\n UpArrow = 38,\n RightArrow = 39,\n DownArrow = 40,\n\n Insert = 45,\n Delete = 46,\n\n Zero = 48,\n ClosedParen = Zero,\n One = 49,\n ExclamationMark = One,\n Two = 50,\n AtSign = Two,\n Three = 51,\n PoundSign = Three,\n Hash = PoundSign,\n Four = 52,\n DollarSign = Four,\n Five = 53,\n PercentSign = Five,\n Six = 54,\n Caret = Six,\n Hat = Caret,\n Seven = 55,\n Ampersand = Seven,\n Eight = 56,\n Star = Eight,\n Asterik = Star,\n Nine = 57,\n OpenParen = Nine,\n\n A = 65,\n B = 66,\n C = 67,\n D = 68,\n E = 69,\n F = 70,\n G = 71,\n H = 72,\n I = 73,\n J = 74,\n K = 75,\n L = 76,\n M = 77,\n N = 78,\n O = 79,\n P = 80,\n Q = 81,\n R = 82,\n S = 83,\n T = 84,\n U = 85,\n V = 86,\n W = 87,\n X = 88,\n Y = 89,\n Z = 90,\n\n LeftWindowKey = 91,\n RightWindowKey = 92,\n SelectKey = 93,\n\n Numpad0 = 96,\n Numpad1 = 97,\n Numpad2 = 98,\n Numpad3 = 99,\n Numpad4 = 100,\n Numpad5 = 101,\n Numpad6 = 102,\n Numpad7 = 103,\n Numpad8 = 104,\n Numpad9 = 105,\n\n Multiply = 106,\n Add = 107,\n Subtract = 109,\n DecimalPoint = 110,\n Divide = 111,\n\n F1 = 112,\n F2 = 113,\n F3 = 114,\n F4 = 115,\n F5 = 116,\n F6 = 117,\n F7 = 118,\n F8 = 119,\n F9 = 120,\n F10 = 121,\n F11 = 122,\n F12 = 123,\n\n NumLock = 144,\n ScrollLock = 145,\n\n SemiColon = 186,\n Equals = 187,\n Comma = 188,\n Dash = 189,\n Period = 190,\n UnderScore = Dash,\n PlusSign = Equals,\n ForwardSlash = 191,\n Tilde = 192,\n GraveAccent = Tilde,\n\n OpenBracket = 219,\n ClosedBracket = 221,\n Quote = 222\n}\n","import { Directive, HostListener, input } from '@angular/core';\nimport { MatMenuTrigger } from '@angular/material/menu';\nimport { MenuOverlayDirective } from './menu-overlay.directive';\n\n@Directive({\n selector: '[stoContextMenu]',\n})\nexport class ContextMenuDirective {\n readonly menuTrigger = input.required<MatMenuTrigger>();\n readonly overlayDirective = input.required<MenuOverlayDirective>();\n readonly menuContext = input<unknown>();\n\n @HostListener('contextmenu', ['$event'])\n contextMenu(event: MouseEvent) {\n event.preventDefault();\n if (this.menuTrigger().menuOpen) {\n this.menuTrigger().closeMenu();\n }\n this.overlayDirective().updatePosition(event);\n setTimeout(() => {\n this.menuTrigger().menuData = this.menuContext();\n this.menuTrigger().openMenu();\n }, 150);\n }\n}\n","import {\n ContentChildren,\n Directive,\n HostListener,\n OnDestroy,\n OnInit,\n QueryList,\n input,\n} from '@angular/core';\nimport { MatDatepicker } from '@angular/material/datepicker';\nimport { MatInput } from '@angular/material/input';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\n/**\n * Directive that can be placed on mat-form-fields that contains a mat-datepicker.\n * This directive has two tasks:\n * Clicking anywhere on the mat-form-field will open the datepicker dialog\n * When the datepicker is closed in any manner, we shift focus back to the datepicker input\n */\n@Directive({\n selector: '[stoDateFormFieldClick]',\n})\nexport class DateFormFieldClickDirective implements OnInit, OnDestroy {\n @ContentChildren(MatInput) inputs: QueryList<MatInput>;\n readonly stoDateFormFieldClick = input.required<MatDatepicker<Date>>();\n private destroy$ = new Subject();\n\n @HostListener('click')\n clickEvent() {\n this.stoDateFormFieldClick().open();\n }\n\n ngOnInit() {\n this.stoDateFormFieldClick()\n .closedStream.pipe(takeUntil(this.destroy$))\n .subscribe(() => this.inputs.first.focus());\n }\n\n ngOnDestroy() {\n this.destroy$.next(true);\n this.destroy$.complete();\n }\n}\n","import { Directive, ElementRef, HostBinding, inject } from '@angular/core';\nimport { MatMenuPanel, MatMenuTrigger } from '@angular/material/menu';\nimport { fromEvent } from 'rxjs';\nimport { switchMap, take } from 'rxjs/operators';\n\n@Directive({\n selector: '[stoMenuOverlay]',\n exportAs: 'stoMenuOverlay',\n standalone: true\n})\nexport class MenuOverlayDirective {\n private trigger = inject(MatMenuTrigger, { host: true });\n\n @HostBinding('style.left.px')\n left = 0;\n @HostBinding('style.top.px')\n top = 0;\n private readonly menu: MatMenuPanel;\n\n constructor() {\n const trigger = this.trigger;\n const el = inject<ElementRef<HTMLButtonElement>>(ElementRef);\n\n this.menu = trigger.menu as MatMenuPanel;\n this.trigger.menuOpened.pipe(\n switchMap(() =>\n fromEvent<MouseEvent>(document, 'click')\n .pipe(take(1))\n ),\n ).subscribe(() => {\n this.trigger.closeMenu();\n });\n this.setStyle(el.nativeElement);\n }\n\n public updatePosition(event: MouseEvent) {\n this.left = event.x;\n this.top = event.y;\n }\n\n private setStyle(element: HTMLButtonElement) {\n element.style.overflow = 'hidden';\n element.style.position = 'fixed';\n element.style.height = '1px';\n element.style.width = '1px';\n }\n}\n","import { Directive, HostListener, input, output } from '@angular/core';\nimport { UntypedFormGroup } from '@angular/forms';\nimport { Key } from '../abstract-and-interfaces/keyPress.enum';\n\n/**\n * QuickKeysDirective is used to implement shortcut keys on DOM elements, e.g to submit or reset a form on enter/escape\n * <form quickKeys (quickSubmit)=\"save()\" (quickCancel)=\"reset()\">\n */\n\n@Directive({\n selector: '[stoQuickKeys]',\n})\nexport class QuickKeysDirective {\n readonly quickKeys = input<unknown>();\n /**\n * Optional formGroup input, when used in combination with a reactive form\n */\n readonly formGroup = input<UntypedFormGroup>();\n /**\n * Emits when ctrl + enter is clicked in combination\n * <form (quickSubmit)=\"save()\">\n */\n readonly quickSubmit = output<void>();\n /**\n * Emits when escape is clicked\n * <form (quickCancel)=\"cancel()\">\n */\n readonly quickCancel = output<void>();\n\n /**\n * Listens on the host element for any keyup events\n * @param e\n */\n @HostListener('keyup', ['$event'])\n onKeyUp(e: KeyboardEvent) {\n if (this.formGroup()) {\n this.handleFormKeys(e);\n }\n this.handleGenericKeydown(e);\n }\n\n /**\n * Handler for generic keydowns, such as cancel events to close drawers\n * @param e\n * void\n */\n private handleGenericKeydown(e: KeyboardEvent) {\n // Shortcuts that are useful outside of forms\n if (e.keyCode === Key.Escape) {\n // TODO: The 'emit' function requires a mandatory void argument\n this.quickCancel.emit();\n }\n if (!this.formGroup() && e.keyCode === Key.Enter && e.ctrlKey) {\n // TODO: The 'emit' function requires a mandatory void argument\n this.quickSubmit.emit();\n }\n }\n\n /**\n * Handler for form specific shortcuts, such as saving the form\n * @param e\n */\n private handleFormKeys(e: KeyboardEvent) {\n if (this.formGroup()?.pristine) {\n return;\n }\n if (e.keyCode === Key.Enter && e.ctrlKey) {\n // TODO: The 'emit' function requires a mandatory void argument\n this.quickSubmit.emit();\n }\n }\n}\n","import { Directive, input } from '@angular/core';\n\n@Directive({\n selector: '[stoGridSpacer]',\n host: {\n class: 'sto-grid__col sto-grid__col--spacer',\n },\n})\nexport class StoGridSpacerDirective {}\n\n@Directive({\n selector: '[stoGridColumn]',\n host: {\n class: 'sto-grid__col',\n '[class.sto-grid__col--2]': 'stoGridColumnDouble()',\n },\n})\nexport class StoGridColumnDirective {\n readonly stoGridColumnDouble = input(false);\n}\n\n@Directive({\n selector: '[stoGrid]',\n exportAs: 'stoGrid',\n host: {\n class: 'sto-grid',\n '[style.max-width.px]': 'maxWidth()',\n '[style.min-width.px]': 'minWidth()',\n },\n})\nexport class StoGridDirective {\n readonly maxWidth = input(1000);\n readonly minWidth = input(250);\n}\n","import { Directive, ElementRef, HostListener, inject } from '@angular/core';\n\n/**\n * stoSelectTextOnFocus listens for input focus events, and selects the contents of the input\n * A user service is established in {@link StoUserPreferenceService} that allows a user to toggle this feature\n */\n@Directive({\n selector: '[stoSelectTextOnFocus]',\n standalone: true\n})\nexport class StoSelectTextOnFocusDirective {\n private elementRef = inject(ElementRef);\n\n\n private _el: HTMLInputElement;\n\n constructor() {\n this._el = this.elementRef.nativeElement;\n }\n\n /**\n * Listens for focus events on the host (input) element, and focuses if applicable\n */\n @HostListener('focus')\n @HostListener('dblclick')\n onFocus() {\n if ( !this._el.readOnly ) {\n this._el.select();\n }\n\n }\n\n}\n","import { ContextMenuDirective } from './context-menu.directive';\nimport { DateFormFieldClickDirective } from './date-form-field-click.directive';\nimport { MenuOverlayDirective } from './menu-overlay.directive';\nimport { QuickKeysDirective } from './quick-keys.directive';\nimport {\n StoGridColumnDirective,\n StoGridDirective,\n StoGridSpacerDirective,\n} from './sto-grid.directive';\nimport { StoSelectTextOnFocusDirective } from './sto-select-text-on-focus.directive';\n\n/**\n * Directives have been made standalone, import them directly:\n * QuickKeysDirective\n * DateFormFieldClickDirective\n * StoSelectTextOnFocusDirective\n * StoGridDirective\n * StoGridColumnDirective\n * StoGridSpacerDirective\n * MenuOverlayDirective\n * ContextMenuDirective\n *\n */\nimport { NgModule } from '@angular/core';\n\n@NgModule({\n imports: [\n QuickKeysDirective,\n DateFormFieldClickDirective,\n StoSelectTextOnFocusDirective,\n StoGridDirective,\n StoGridColumnDirective,\n StoGridSpacerDirective,\n MenuOverlayDirective,\n ContextMenuDirective,\n ],\n exports: [\n QuickKeysDirective,\n DateFormFieldClickDirective,\n StoSelectTextOnFocusDirective,\n StoGridDirective,\n StoGridColumnDirective,\n StoGridSpacerDirective,\n MenuOverlayDirective,\n ContextMenuDirective,\n ],\n})\nexport class StoDirectivesModule {}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n/**\n * Pipe used to transform numbers to a currency format\n *\n * @example\n *\n * <span>{{ 5000.5824 | currentFormat:'$':3 }}</span>\n * Results in\n * <span>5 000,582 $</span>\n */\n@Pipe({\n name: 'currencyFormat',\n standalone: true\n})\nexport class CurrencyFormatPipe implements PipeTransform {\n transform(value: number, unit = '', maximumFractionDigits = 3): string | null {\n if ( !value ) {\n return null;\n }\n if ( typeof value === 'string' ) {\n value = parseFloat(value);\n if ( isNaN(value) ) {\n return '';\n }\n }\n\n const intl = new Intl.NumberFormat('en-US', { maximumFractionDigits }).format(value);\n return intl.replace(/,/g, ' ').replace('.', ',') + ` ${unit}`;\n }\n}\n\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { format as formatDate, isValid, parseISO } from 'date-fns';\n\n/**\n * Pipe used to transform dates, based on our default formats.\n *\n * @example\n *\n * public date = \"2018-08-27 14:00:30\"\n * <span>{{ date | dateFormat }}</span> -> Aug 27, 2018\n * <span>{{ date | dateFormat:'long' }}</span> -> Monday Aug 27, 2018\n */\n\n@Pipe({\n name: 'formatDate',\n standalone: true\n})\nexport class DateFormatPipe implements PipeTransform {\n\n transform(value: string | number | Date | null, format?: string): string | null {\n if ( !value ) {\n return null;\n }\n if ( typeof value === 'string' ) {\n const originalValue = value;\n value = parseISO(value);\n if ( !isValid(value) ) {\n // If invalid ISO date (e.g single-digit day), fall back to new Date()\n console.warn(`${originalValue} is not a valid ISO date string, falling back to native date`);\n value = new Date(originalValue);\n }\n }\n switch ( format ) {\n case 'long':\n return formatDate(value, 'EEEE MMM d, yyyy');\n case 'short':\n return formatDate(value, 'yyyy-MM-dd');\n case 'datetime':\n return formatDate(value, 'MMM d, yyyy, HH:mm');\n case 'datetimezone':\n return formatDate(value, `MMM d, yyyy, HH:mm:ss ('UTC'xxx)`);\n case 'datetime-long':\n return formatDate(value, 'EEEE MMM dd, yyyy, HH:mm');\n case 'datetime-short':\n return formatDate(value, 'yyyy-MM-dd, HH:mm');\n default:\n return formatDate(value, 'MMM d, yyyy');\n }\n }\n\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n/**\n * Transforms an Object to an Array.\n *\n * @example\n *\n * public obj = {a: 1, b: 2, c: 3};\n * <span *ngFor=\"let key of obj | keys \"> {{ obj[key] }}, </span> -> 1, 2, 3,\n */\n\n@Pipe({\n name: 'keys',\n standalone: true\n})\nexport class KeysPipe implements PipeTransform {\n\n transform(value: Record<string, unknown>): Array<string> {\n if ( value ) {\n return Object.keys(value);\n }\n return [];\n }\n\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n/**\n * Formats numbers to use our standard formatting (d ddd,ddd)\n *\n * @example\n *\n * {{ 1234,32 | numberFormat }} -> 1 234,320\n * {{ 1234,32 | numberFormat:'M3' }} -> 1 234,320 M3\n * {{ -1234,32 | numberFormat:'M3':true }} -> 1 234,320 M3\n * {{ 1234,32 | numberFormat:'M3':false:false }} -> 1 234 M3\n * {{ 1234,32 | numberFormat:'M3':false:true:5 }} -> 1 234,32000 M3\n */\n@Pipe({\n name: 'numberFormat',\n standalone: true,\n})\nexport class NumberFormatPipe implements PipeTransform {\n transform(\n value: number | string,\n unit = '',\n abs?: boolean,\n appendDecimals = true,\n numberOfDecimals = 3,\n ): string | null {\n if (value !== 0 && !value) {\n return '';\n }\n if (typeof value === 'string') {\n const newValue = parseFloat(value);\n if (isNaN(newValue)) {\n return null;\n }\n value = newValue;\n }\n if (abs) {\n value = Math.abs(value);\n }\n // We absolute the value to ensure that the rounding rules is always away from zero.\n // 1.5 => 2 and -1.5 => -2\n const isNegativeNumber = value < 0;\n value = Math.abs(value);\n\n if (!appendDecimals) {\n value = Math.round(value);\n }\n if (!isNaN(value) && appendDecimals) {\n value = parseFloat(this.toFixed(value, numberOfDecimals));\n }\n // Turn negative numbers back, but only if value is not -0\n if (isNegativeNumber && value !== 0) {\n value = value * -1;\n }\n const localized = this.prettyPrintValue(\n value,\n appendDecimals,\n numberOfDecimals,\n );\n return (\n localized.replace(/,/g, ' ').replace('.', ',') +\n `${unit ? ' ' + unit : ''}`\n );\n }\n\n private prettyPrintValue(\n value: number,\n appendDecimals: boolean,\n numberOfDecimals: number,\n ) {\n const intlOptions = {\n minimumFractionDigits: numberOfDecimals,\n maximumFractionDigits: numberOfDecimals,\n };\n const intl = new Intl.NumberFormat('en-US', intlOptions).format(value);\n const split = intl.split('.');\n let localized = split[0];\n\n if (appendDecimals) {\n const decimals = split.length === 2 ? split[1] : '';\n split[1] = decimals.padEnd(numberOfDecimals, '0');\n localized = split.join('.');\n }\n return localized;\n }\n\n // Normal toFixed has some issues: https://stackoverflow.com/questions/10015027/javascript-tofixed-not-rounding\n private toFixed(num: number, precision: number) {\n // This method also has some issues - namely, it's unable to parse negative numbers with huge floating points\n // -8.185452315956354e-12 becomes NaN\n let returnValue = +(\n Math.round(+(num + 'e' + precision)) +\n 'e' +\n -precision\n );\n if (isNaN(returnValue)) {\n returnValue = parseFloat(num.toFixed(precision));\n }\n return returnValue.toFixed(precision);\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({ name: 'getUnit', standalone: true })\nexport class GetUnit implements PipeTransform {\n transform(value: string, withParens?: boolean): string {\n if ( value ) {\n const arr = value.split('(');\n if ( arr.length > 0 ) {\n if ( withParens ) {\n value = '(' + arr[ 1 ];\n } else {\n arr[ 1 ].slice(0, -1);\n value = arr[ 1 ].slice(0, -1);\n }\n }\n }\n return value;\n }\n}\n\n@Pipe({ name: 'excludeUnit', standalone: true })\nexport class ExcludeUnit implements PipeTransform {\n transform(value: string): string {\n if ( value ) {\n const arr = value.split('(');\n if ( arr.length > 0 ) {\n value = arr[ 0 ];\n }\n }\n return value;\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({ name: 'yesNo', standalone: true })\nexport class YesNoPipe implements PipeTransform {\n transform(value: boolean, ignoreNulls = false): string {\n let valueStr = '';\n if ( ignoreNulls ) {\n valueStr = value ? 'Yes' : value === false ? 'No' : '';\n } else {\n valueStr = value ? 'Yes' : 'No';\n }\n return valueStr;\n\n }\n}\n","import { NumberFormatPipe } from './number-format.pipe';\nimport { CurrencyFormatPipe } from './currency-format.pipe';\nimport { KeysPipe } from './keys.pipe';\nimport { DateFormatPipe } from './date-format.pipe';\nimport { ExcludeUnit, GetUnit } from './with-unit';\nimport { YesNoPipe } from './yes-no';\n\n\nimport { NgModule } from '@angular/core';\n\n@NgModule({\n imports: [\n DateFormatPipe,\n KeysPipe,\n NumberFormatPipe,\n CurrencyFormatPipe,\n GetUnit,\n ExcludeUnit,\n YesNoPipe\n ],\n exports: [\n DateFormatPipe,\n KeysPipe,\n NumberFormatPipe,\n CurrencyFormatPipe,\n GetUnit,\n ExcludeUnit,\n YesNoPipe\n ]\n})\nexport class StoPipesModule {\n}\n","/*\n * Public API Surface of @ngx-stoui/core\n */\n\nexport * from './lib/abstract-and-interfaces/keyPress.enum';\nexport * from './lib/sto-directives';\n\nexport * from './lib/sto-pipes/currency-format.pipe';\nexport * from './lib/sto-pipes/date-format.pipe';\nexport * from './lib/sto-pipes/keys.pipe';\nexport * from './lib/sto-pipes/number-format.pipe';\nexport * from './lib/sto-pipes/sto-pipes.module';\n\nexport * from './lib/sto-pipes/with-unit';\nexport * from './lib/sto-pipes/yes-no';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["format","formatDate"],"mappings":"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"}
|
package/package.json
CHANGED
package/styles/README.md
CHANGED
|
@@ -1,273 +1,273 @@
|
|
|
1
|
-
# Styles Folder Architecture
|
|
2
|
-
|
|
3
|
-
## Overview
|
|
4
|
-
|
|
5
|
-
The new `styles/` directory provides a clean, intuitive structure that eliminates the complex import chains of the old `style/` folder. All CSS variables are centralized, and the import path is straightforward.
|
|
6
|
-
|
|
7
|
-
## Directory Structure
|
|
8
|
-
|
|
9
|
-
```
|
|
10
|
-
styles/
|
|
11
|
-
├── index.scss # Main entry point (import this!)
|
|
12
|
-
├── _tokens.scss # Design system tokens and CSS variables
|
|
13
|
-
├── _material-theme.scss # Material 3 theme configuration
|
|
14
|
-
├── _typography.scss # Typography scales (normal, small, large)
|
|
15
|
-
├── _utilities.scss # Utility classes (grid, helpers)
|
|
16
|
-
├── fonts/
|
|
17
|
-
│ └── _fonts.scss # Font loading from CDN
|
|
18
|
-
└── components/
|
|
19
|
-
├── _index.scss # Component barrel file
|
|
20
|
-
├── _action-footer.scss # Individual component styles
|
|
21
|
-
├── _appheader.scss
|
|
22
|
-
├── _card.scss
|
|
23
|
-
├── _datatable.scss
|
|
24
|
-
├── _daterange.scss
|
|
25
|
-
├── _dialog.scss
|
|
26
|
-
├── _drawer.scss
|
|
27
|
-
├── _filterpanel.scss
|
|
28
|
-
├── _input-overrides.scss
|
|
29
|
-
├── _message-panel.scss
|
|
30
|
-
├── _number-input.scss
|
|
31
|
-
├── _number-unit-input.scss
|
|
32
|
-
├── _preference-manager.scss
|
|
33
|
-
├── _select-filter.scss
|
|
34
|
-
├── _status-indicators.scss
|
|
35
|
-
└── _wysiwyg.scss
|
|
36
|
-
```
|
|
37
|
-
|
|
38
|
-
## Import Flow
|
|
39
|
-
|
|
40
|
-
### New Structure (Simplified)
|
|
41
|
-
|
|
42
|
-
```
|
|
43
|
-
ngx-stoui.scss
|
|
44
|
-
└─> styles/index.scss
|
|
45
|
-
├─> _tokens.scss (CSS variables)
|
|
46
|
-
├─> _material-theme.scss (Material 3)
|
|
47
|
-
├─> _typography.scss (Typography scales)
|
|
48
|
-
├─> _utilities.scss (Grid utilities)
|
|
49
|
-
├─> fonts/_fonts.scss (Font loading)
|
|
50
|
-
└─> components/_index.scss
|
|
51
|
-
└─> All component files
|
|
52
|
-
```
|
|
53
|
-
|
|
54
|
-
### Old Structure (Complex)
|
|
55
|
-
|
|
56
|
-
```
|
|
57
|
-
ngx-stoui.scss
|
|
58
|
-
└─> style/theme/_theme.scss
|
|
59
|
-
├─> _colors.scss (M2 palettes)
|
|
60
|
-
├─> _theme-variables.scss (M2 functions)
|
|
61
|
-
├─> components.scss
|
|
62
|
-
│ └─> 21 individual component imports
|
|
63
|
-
└─> Circular dependencies
|
|
64
|
-
```
|
|
65
|
-
|
|
66
|
-
## Key Files
|
|
67
|
-
|
|
68
|
-
### `index.scss` - Main Entry Point
|
|
69
|
-
|
|
70
|
-
Single file to import for all styles. Automatically includes:
|
|
71
|
-
|
|
72
|
-
- Design tokens
|
|
73
|
-
- Material theme
|
|
74
|
-
- Typography
|
|
75
|
-
- Utilities
|
|
76
|
-
- Component styles
|
|
77
|
-
|
|
78
|
-
**Usage:**
|
|
79
|
-
|
|
80
|
-
```scss
|
|
81
|
-
@use './styles' as *;
|
|
82
|
-
```
|
|
83
|
-
|
|
84
|
-
### `_tokens.scss` - Design System Tokens
|
|
85
|
-
|
|
86
|
-
**Single source of truth** for all CSS variables:
|
|
87
|
-
|
|
88
|
-
- Light theme colors (`:root`, `body:not(.sto-dark-theme)`)
|
|
89
|
-
- Dark theme colors (`body.sto-dark-theme`)
|
|
90
|
-
- EDS (Equinor Design System) SCSS maps
|
|
91
|
-
- No dependencies
|
|
92
|
-
|
|
93
|
-
**Available CSS Variables:**
|
|
94
|
-
|
|
95
|
-
```scss
|
|
96
|
-
// Primary colors
|
|
97
|
-
--primary-resting, --primary-hover, --primary-text
|
|
98
|
-
|
|
99
|
-
// Accent colors
|
|
100
|
-
--accent-resting, --accent-hover, --accent-text
|
|
101
|
-
|
|
102
|
-
// Status colors
|
|
103
|
-
--success-*, --danger-*, --warning-*
|
|
104
|
-
|
|
105
|
-
// Text colors
|
|
106
|
-
--text, --text-secondary, --text-tertiary, --text-disabled
|
|
107
|
-
|
|
108
|
-
// Background colors
|
|
109
|
-
--bg-default, --bg-app, --bg-card, --bg-hover, --bg-focus
|
|
110
|
-
|
|
111
|
-
// UI elements
|
|
112
|
-
--divider, --border-disabled
|
|
113
|
-
```
|
|
114
|
-
|
|
115
|
-
### `_material-theme.scss` - Material 3 Configuration
|
|
116
|
-
|
|
117
|
-
Material Design 3 theme setup with `mat.define-theme()`:
|
|
118
|
-
|
|
119
|
-
- Azure/blue color scheme
|
|
120
|
-
- Component theme includes
|
|
121
|
-
- CSS variable overrides for Material components
|
|
122
|
-
|
|
123
|
-
**Mixin:**
|
|
124
|
-
|
|
125
|
-
```scss
|
|
126
|
-
@include material-theme.apply-material-theme();
|
|
127
|
-
```
|
|
128
|
-
|
|
129
|
-
### `_typography.scss` - Typography Scales
|
|
130
|
-
|
|
131
|
-
Three typography hierarchies:
|
|
132
|
-
|
|
133
|
-
- `$sto-typography` - Normal scale (13px base)
|
|
134
|
-
- `$sto-sm-typography` - Small scale (10px base)
|
|
135
|
-
- `$sto-l-typography` - Large scale (16px base)
|
|
136
|
-
|
|
137
|
-
**Mixin:**
|
|
138
|
-
|
|
139
|
-
```scss
|
|
140
|
-
@include typography.apply-typography();
|
|
141
|
-
```
|
|
142
|
-
|
|
143
|
-
### `_utilities.scss` - Utility Classes
|
|
144
|
-
|
|
145
|
-
Flexible grid system and helper classes:
|
|
146
|
-
|
|
147
|
-
- `.sto-grid` - Responsive grid using CSS Container Queries (auto 1→2→4 columns based on container width)
|
|
148
|
-
- `.sto-grid--{n}` - Fixed column layouts (`--1`, `--2`, `--3`, `--4`, `--6`, `--12`) that override responsive behavior
|
|
149
|
-
- `.sto-grid__col` - Grid column with span modifiers (`--2`, `--3`, `--4`)
|
|
150
|
-
- `.sto-grid__col--spacer` - Hidden spacer column for layout alignment
|
|
151
|
-
|
|
152
|
-
### `components/_index.scss` - Component Barrel
|
|
153
|
-
|
|
154
|
-
Imports all component styles and provides single mixin:
|
|
155
|
-
|
|
156
|
-
```scss
|
|
157
|
-
@include components.apply-component-styles();
|
|
158
|
-
```
|
|
159
|
-
|
|
160
|
-
## Migration from Old Structure
|
|
161
|
-
|
|
162
|
-
### What Changed?
|
|
163
|
-
|
|
164
|
-
1. **Folder Name**: `style/` → `styles/` (avoids Windows permission issues)
|
|
165
|
-
|
|
166
|
-
2. **Import Chain**:
|
|
167
|
-
- Old: 4-5 levels deep with circular dependencies
|
|
168
|
-
- New: Flat structure, clear hierarchy
|
|
169
|
-
|
|
170
|
-
3. **CSS Variables**:
|
|
171
|
-
- Old: Duplicated in `ngx-stoui.scss` and `_colors.scss`
|
|
172
|
-
- New: Single source in `_tokens.scss`
|
|
173
|
-
|
|
174
|
-
4. **Material Theme**:
|
|
175
|
-
- Old: Material 2 with palette extraction
|
|
176
|
-
- New: Material 3 with direct theme definition
|
|
177
|
-
|
|
178
|
-
5. **Component Organization**:
|
|
179
|
-
- Old: Nested in `style/theme/` with barrel file
|
|
180
|
-
- New: Flat in `styles/components/` with barrel file
|
|
181
|
-
|
|
182
|
-
### Migration Status
|
|
183
|
-
|
|
184
|
-
✅ **Completed:**
|
|
185
|
-
|
|
186
|
-
- Created new `styles/` folder structure
|
|
187
|
-
- Migrated all 16 component files from `style/theme/`
|
|
188
|
-
- Migrated form styles from `style/form/`
|
|
189
|
-
- Migrated datatable styles from `style/datatable/`
|
|
190
|
-
- Centralized CSS variables in `_tokens.scss`
|
|
191
|
-
- Converted to Material 3 in `_material-theme.scss`
|
|
192
|
-
- Updated `ngx-stoui.scss` to use new structure
|
|
193
|
-
- Removed all legacy imports
|
|
194
|
-
- Build successful
|
|
195
|
-
- Lint passing
|
|
196
|
-
|
|
197
|
-
✅ **Migration Complete!** All files have been moved to the new structure. The old `style/` folder can now be removed.
|
|
198
|
-
|
|
199
|
-
### Old `style/` Folder (Deprecated)
|
|
200
|
-
|
|
201
|
-
The old `style/` folder is now deprecated and can be safely deleted. All styles have been migrated to the new `styles/` structure.
|
|
202
|
-
|
|
203
|
-
## Best Practices
|
|
204
|
-
|
|
205
|
-
### 1. Use CSS Variables Directly
|
|
206
|
-
|
|
207
|
-
```scss
|
|
208
|
-
// ✅ CORRECT
|
|
209
|
-
.my-component {
|
|
210
|
-
color: var(--text);
|
|
211
|
-
background: var(--bg-card);
|
|
212
|
-
}
|
|
213
|
-
|
|
214
|
-
// ❌ AVOID (old pattern)
|
|
215
|
-
.my-component {
|
|
216
|
-
color: $text-color; // SCSS variable wrapper
|
|
217
|
-
}
|
|
218
|
-
```
|
|
219
|
-
|
|
220
|
-
### 2. Component Styles
|
|
221
|
-
|
|
222
|
-
Component files should export mixins:
|
|
223
|
-
|
|
224
|
-
```scss
|
|
225
|
-
@mixin my-component-theme() {
|
|
226
|
-
.my-component {
|
|
227
|
-
border: 1px solid var(--divider);
|
|
228
|
-
}
|
|
229
|
-
}
|
|
230
|
-
```
|
|
231
|
-
|
|
232
|
-
### 3. Import Order
|
|
233
|
-
|
|
234
|
-
When creating new files, follow this order:
|
|
235
|
-
|
|
236
|
-
```scss
|
|
237
|
-
// 1. Design tokens (if needed)
|
|
238
|
-
@use '../tokens';
|
|
239
|
-
|
|
240
|
-
// 2. Material dependencies (if needed)
|
|
241
|
-
@use '@angular/material' as mat;
|
|
242
|
-
|
|
243
|
-
// 3. Component styles
|
|
244
|
-
@mixin my-component-theme() {
|
|
245
|
-
// styles here
|
|
246
|
-
}
|
|
247
|
-
```
|
|
248
|
-
|
|
249
|
-
### 4. Flat Structure
|
|
250
|
-
|
|
251
|
-
Keep component files flat - avoid nesting:
|
|
252
|
-
|
|
253
|
-
- `components/_my-component.scss` ✅
|
|
254
|
-
- `components/feature/_my-component.scss` ❌
|
|
255
|
-
|
|
256
|
-
## Benefits
|
|
257
|
-
|
|
258
|
-
1. **Discoverability**: Easy to find where styles are defined
|
|
259
|
-
2. **No Circular Dependencies**: Clear import hierarchy
|
|
260
|
-
3. **Single Source of Truth**: CSS variables in one place
|
|
261
|
-
4. **Modern Material**: Material 3 API
|
|
262
|
-
5. **Clean Separation**: Tokens, theme, typography, components
|
|
263
|
-
6. **Easy Debugging**: Flat structure, clear file names
|
|
264
|
-
7. **Performance**: Removed duplicate CSS variable definitions
|
|
265
|
-
|
|
266
|
-
## Future Improvements
|
|
267
|
-
|
|
268
|
-
1. Migrate `style/form/` to `styles/forms/`
|
|
269
|
-
2. Migrate `style/datatable/` to `styles/components/datatable/`
|
|
270
|
-
3. Convert remaining `@import` to `@use`/`@forward`
|
|
271
|
-
4. Remove old `style/` folder
|
|
272
|
-
5. Add Storybook integration for design tokens
|
|
273
|
-
6. Document CSS variable usage in component stories
|
|
1
|
+
# Styles Folder Architecture
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
The new `styles/` directory provides a clean, intuitive structure that eliminates the complex import chains of the old `style/` folder. All CSS variables are centralized, and the import path is straightforward.
|
|
6
|
+
|
|
7
|
+
## Directory Structure
|
|
8
|
+
|
|
9
|
+
```
|
|
10
|
+
styles/
|
|
11
|
+
├── index.scss # Main entry point (import this!)
|
|
12
|
+
├── _tokens.scss # Design system tokens and CSS variables
|
|
13
|
+
├── _material-theme.scss # Material 3 theme configuration
|
|
14
|
+
├── _typography.scss # Typography scales (normal, small, large)
|
|
15
|
+
├── _utilities.scss # Utility classes (grid, helpers)
|
|
16
|
+
├── fonts/
|
|
17
|
+
│ └── _fonts.scss # Font loading from CDN
|
|
18
|
+
└── components/
|
|
19
|
+
├── _index.scss # Component barrel file
|
|
20
|
+
├── _action-footer.scss # Individual component styles
|
|
21
|
+
├── _appheader.scss
|
|
22
|
+
├── _card.scss
|
|
23
|
+
├── _datatable.scss
|
|
24
|
+
├── _daterange.scss
|
|
25
|
+
├── _dialog.scss
|
|
26
|
+
├── _drawer.scss
|
|
27
|
+
├── _filterpanel.scss
|
|
28
|
+
├── _input-overrides.scss
|
|
29
|
+
├── _message-panel.scss
|
|
30
|
+
├── _number-input.scss
|
|
31
|
+
├── _number-unit-input.scss
|
|
32
|
+
├── _preference-manager.scss
|
|
33
|
+
├── _select-filter.scss
|
|
34
|
+
├── _status-indicators.scss
|
|
35
|
+
└── _wysiwyg.scss
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
## Import Flow
|
|
39
|
+
|
|
40
|
+
### New Structure (Simplified)
|
|
41
|
+
|
|
42
|
+
```
|
|
43
|
+
ngx-stoui.scss
|
|
44
|
+
└─> styles/index.scss
|
|
45
|
+
├─> _tokens.scss (CSS variables)
|
|
46
|
+
├─> _material-theme.scss (Material 3)
|
|
47
|
+
├─> _typography.scss (Typography scales)
|
|
48
|
+
├─> _utilities.scss (Grid utilities)
|
|
49
|
+
├─> fonts/_fonts.scss (Font loading)
|
|
50
|
+
└─> components/_index.scss
|
|
51
|
+
└─> All component files
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
### Old Structure (Complex)
|
|
55
|
+
|
|
56
|
+
```
|
|
57
|
+
ngx-stoui.scss
|
|
58
|
+
└─> style/theme/_theme.scss
|
|
59
|
+
├─> _colors.scss (M2 palettes)
|
|
60
|
+
├─> _theme-variables.scss (M2 functions)
|
|
61
|
+
├─> components.scss
|
|
62
|
+
│ └─> 21 individual component imports
|
|
63
|
+
└─> Circular dependencies
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
## Key Files
|
|
67
|
+
|
|
68
|
+
### `index.scss` - Main Entry Point
|
|
69
|
+
|
|
70
|
+
Single file to import for all styles. Automatically includes:
|
|
71
|
+
|
|
72
|
+
- Design tokens
|
|
73
|
+
- Material theme
|
|
74
|
+
- Typography
|
|
75
|
+
- Utilities
|
|
76
|
+
- Component styles
|
|
77
|
+
|
|
78
|
+
**Usage:**
|
|
79
|
+
|
|
80
|
+
```scss
|
|
81
|
+
@use './styles' as *;
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
### `_tokens.scss` - Design System Tokens
|
|
85
|
+
|
|
86
|
+
**Single source of truth** for all CSS variables:
|
|
87
|
+
|
|
88
|
+
- Light theme colors (`:root`, `body:not(.sto-dark-theme)`)
|
|
89
|
+
- Dark theme colors (`body.sto-dark-theme`)
|
|
90
|
+
- EDS (Equinor Design System) SCSS maps
|
|
91
|
+
- No dependencies
|
|
92
|
+
|
|
93
|
+
**Available CSS Variables:**
|
|
94
|
+
|
|
95
|
+
```scss
|
|
96
|
+
// Primary colors
|
|
97
|
+
--primary-resting, --primary-hover, --primary-text
|
|
98
|
+
|
|
99
|
+
// Accent colors
|
|
100
|
+
--accent-resting, --accent-hover, --accent-text
|
|
101
|
+
|
|
102
|
+
// Status colors
|
|
103
|
+
--success-*, --danger-*, --warning-*
|
|
104
|
+
|
|
105
|
+
// Text colors
|
|
106
|
+
--text, --text-secondary, --text-tertiary, --text-disabled
|
|
107
|
+
|
|
108
|
+
// Background colors
|
|
109
|
+
--bg-default, --bg-app, --bg-card, --bg-hover, --bg-focus
|
|
110
|
+
|
|
111
|
+
// UI elements
|
|
112
|
+
--divider, --border-disabled
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
### `_material-theme.scss` - Material 3 Configuration
|
|
116
|
+
|
|
117
|
+
Material Design 3 theme setup with `mat.define-theme()`:
|
|
118
|
+
|
|
119
|
+
- Azure/blue color scheme
|
|
120
|
+
- Component theme includes
|
|
121
|
+
- CSS variable overrides for Material components
|
|
122
|
+
|
|
123
|
+
**Mixin:**
|
|
124
|
+
|
|
125
|
+
```scss
|
|
126
|
+
@include material-theme.apply-material-theme();
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
### `_typography.scss` - Typography Scales
|
|
130
|
+
|
|
131
|
+
Three typography hierarchies:
|
|
132
|
+
|
|
133
|
+
- `$sto-typography` - Normal scale (13px base)
|
|
134
|
+
- `$sto-sm-typography` - Small scale (10px base)
|
|
135
|
+
- `$sto-l-typography` - Large scale (16px base)
|
|
136
|
+
|
|
137
|
+
**Mixin:**
|
|
138
|
+
|
|
139
|
+
```scss
|
|
140
|
+
@include typography.apply-typography();
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
### `_utilities.scss` - Utility Classes
|
|
144
|
+
|
|
145
|
+
Flexible grid system and helper classes:
|
|
146
|
+
|
|
147
|
+
- `.sto-grid` - Responsive grid using CSS Container Queries (auto 1→2→4 columns based on container width)
|
|
148
|
+
- `.sto-grid--{n}` - Fixed column layouts (`--1`, `--2`, `--3`, `--4`, `--6`, `--12`) that override responsive behavior
|
|
149
|
+
- `.sto-grid__col` - Grid column with span modifiers (`--2`, `--3`, `--4`)
|
|
150
|
+
- `.sto-grid__col--spacer` - Hidden spacer column for layout alignment
|
|
151
|
+
|
|
152
|
+
### `components/_index.scss` - Component Barrel
|
|
153
|
+
|
|
154
|
+
Imports all component styles and provides single mixin:
|
|
155
|
+
|
|
156
|
+
```scss
|
|
157
|
+
@include components.apply-component-styles();
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
## Migration from Old Structure
|
|
161
|
+
|
|
162
|
+
### What Changed?
|
|
163
|
+
|
|
164
|
+
1. **Folder Name**: `style/` → `styles/` (avoids Windows permission issues)
|
|
165
|
+
|
|
166
|
+
2. **Import Chain**:
|
|
167
|
+
- Old: 4-5 levels deep with circular dependencies
|
|
168
|
+
- New: Flat structure, clear hierarchy
|
|
169
|
+
|
|
170
|
+
3. **CSS Variables**:
|
|
171
|
+
- Old: Duplicated in `ngx-stoui.scss` and `_colors.scss`
|
|
172
|
+
- New: Single source in `_tokens.scss`
|
|
173
|
+
|
|
174
|
+
4. **Material Theme**:
|
|
175
|
+
- Old: Material 2 with palette extraction
|
|
176
|
+
- New: Material 3 with direct theme definition
|
|
177
|
+
|
|
178
|
+
5. **Component Organization**:
|
|
179
|
+
- Old: Nested in `style/theme/` with barrel file
|
|
180
|
+
- New: Flat in `styles/components/` with barrel file
|
|
181
|
+
|
|
182
|
+
### Migration Status
|
|
183
|
+
|
|
184
|
+
✅ **Completed:**
|
|
185
|
+
|
|
186
|
+
- Created new `styles/` folder structure
|
|
187
|
+
- Migrated all 16 component files from `style/theme/`
|
|
188
|
+
- Migrated form styles from `style/form/`
|
|
189
|
+
- Migrated datatable styles from `style/datatable/`
|
|
190
|
+
- Centralized CSS variables in `_tokens.scss`
|
|
191
|
+
- Converted to Material 3 in `_material-theme.scss`
|
|
192
|
+
- Updated `ngx-stoui.scss` to use new structure
|
|
193
|
+
- Removed all legacy imports
|
|
194
|
+
- Build successful
|
|
195
|
+
- Lint passing
|
|
196
|
+
|
|
197
|
+
✅ **Migration Complete!** All files have been moved to the new structure. The old `style/` folder can now be removed.
|
|
198
|
+
|
|
199
|
+
### Old `style/` Folder (Deprecated)
|
|
200
|
+
|
|
201
|
+
The old `style/` folder is now deprecated and can be safely deleted. All styles have been migrated to the new `styles/` structure.
|
|
202
|
+
|
|
203
|
+
## Best Practices
|
|
204
|
+
|
|
205
|
+
### 1. Use CSS Variables Directly
|
|
206
|
+
|
|
207
|
+
```scss
|
|
208
|
+
// ✅ CORRECT
|
|
209
|
+
.my-component {
|
|
210
|
+
color: var(--text);
|
|
211
|
+
background: var(--bg-card);
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
// ❌ AVOID (old pattern)
|
|
215
|
+
.my-component {
|
|
216
|
+
color: $text-color; // SCSS variable wrapper
|
|
217
|
+
}
|
|
218
|
+
```
|
|
219
|
+
|
|
220
|
+
### 2. Component Styles
|
|
221
|
+
|
|
222
|
+
Component files should export mixins:
|
|
223
|
+
|
|
224
|
+
```scss
|
|
225
|
+
@mixin my-component-theme() {
|
|
226
|
+
.my-component {
|
|
227
|
+
border: 1px solid var(--divider);
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
```
|
|
231
|
+
|
|
232
|
+
### 3. Import Order
|
|
233
|
+
|
|
234
|
+
When creating new files, follow this order:
|
|
235
|
+
|
|
236
|
+
```scss
|
|
237
|
+
// 1. Design tokens (if needed)
|
|
238
|
+
@use '../tokens';
|
|
239
|
+
|
|
240
|
+
// 2. Material dependencies (if needed)
|
|
241
|
+
@use '@angular/material' as mat;
|
|
242
|
+
|
|
243
|
+
// 3. Component styles
|
|
244
|
+
@mixin my-component-theme() {
|
|
245
|
+
// styles here
|
|
246
|
+
}
|
|
247
|
+
```
|
|
248
|
+
|
|
249
|
+
### 4. Flat Structure
|
|
250
|
+
|
|
251
|
+
Keep component files flat - avoid nesting:
|
|
252
|
+
|
|
253
|
+
- `components/_my-component.scss` ✅
|
|
254
|
+
- `components/feature/_my-component.scss` ❌
|
|
255
|
+
|
|
256
|
+
## Benefits
|
|
257
|
+
|
|
258
|
+
1. **Discoverability**: Easy to find where styles are defined
|
|
259
|
+
2. **No Circular Dependencies**: Clear import hierarchy
|
|
260
|
+
3. **Single Source of Truth**: CSS variables in one place
|
|
261
|
+
4. **Modern Material**: Material 3 API
|
|
262
|
+
5. **Clean Separation**: Tokens, theme, typography, components
|
|
263
|
+
6. **Easy Debugging**: Flat structure, clear file names
|
|
264
|
+
7. **Performance**: Removed duplicate CSS variable definitions
|
|
265
|
+
|
|
266
|
+
## Future Improvements
|
|
267
|
+
|
|
268
|
+
1. Migrate `style/form/` to `styles/forms/`
|
|
269
|
+
2. Migrate `style/datatable/` to `styles/components/datatable/`
|
|
270
|
+
3. Convert remaining `@import` to `@use`/`@forward`
|
|
271
|
+
4. Remove old `style/` folder
|
|
272
|
+
5. Add Storybook integration for design tokens
|
|
273
|
+
6. Document CSS variable usage in component stories
|