@tekus/design-system 1.0.3 → 1.0.4
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 +86 -13
- package/components/search-bar/index.d.ts +5 -0
- package/components/search-bar/search-bar.component.d.ts +25 -0
- package/esm2022/components/search-bar/public-api.mjs +2 -0
- package/esm2022/components/search-bar/search-bar.component.mjs +83 -0
- package/esm2022/components/search-bar/tekus-design-system-components-search-bar.mjs +5 -0
- package/esm2022/index.mjs +2 -0
- package/esm2022/tekus-design-system.mjs +5 -0
- package/fesm2022/tekus-design-system-components-search-bar.mjs +90 -0
- package/fesm2022/tekus-design-system-components-search-bar.mjs.map +1 -0
- package/fesm2022/tekus-design-system.mjs +4 -0
- package/fesm2022/tekus-design-system.mjs.map +1 -0
- package/index.d.ts +1 -0
- package/package.json +21 -2
- package/.eslintrc.json +0 -37
- package/.storybook/main.ts +0 -19
- package/.storybook/preview.ts +0 -18
- package/.storybook/tsconfig.json +0 -23
- package/.storybook/typings.d.ts +0 -4
- package/components/search-bar/index.ts +0 -1
- package/components/search-bar/ng-package.json +0 -5
- package/components/search-bar/search-bar.component.css +0 -46
- package/components/search-bar/search-bar.component.spec.ts +0 -54
- package/components/search-bar/search-bar.component.stories.ts +0 -29
- package/components/search-bar/search-bar.component.ts +0 -75
- package/documentation.json +0 -371
- package/index.ts +0 -1
- package/karma-ci.conf.js +0 -54
- package/karma.conf.js +0 -33
- package/ng-package.json +0 -7
- package/tsconfig.lib.json +0 -14
- package/tsconfig.lib.prod.json +0 -10
- package/tsconfig.spec.json +0 -14
- /package/components/search-bar/{public-api.ts → public-api.d.ts} +0 -0
package/README.md
CHANGED
|
@@ -1,24 +1,97 @@
|
|
|
1
|
-
#
|
|
1
|
+
# Tekus Design System
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Welcome to the Tekus Design System brought to you by Tekus UX/UI team.
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
- Tailored for building Tekus apps: Using the Design System results in UIs that reflect the Tekus look and feel.
|
|
6
|
+
- Continuously updated: As long as you’re using the latest version of the Design System, your pages are always up to date with Tekus UI changes.
|
|
6
7
|
|
|
7
|
-
|
|
8
|
-
> Note: Don't forget to add `--project design-system` or else it will be added to the default project in your `angular.json` file.
|
|
8
|
+
## Getting Started 🚀
|
|
9
9
|
|
|
10
|
-
|
|
10
|
+
These instructions will get you a copy of the project up and running on your local machine for development and testing purposes.
|
|
11
11
|
|
|
12
|
-
|
|
12
|
+
### Prerequisites 📝
|
|
13
13
|
|
|
14
|
-
|
|
14
|
+
First start by cloning the project into your machine, then you need to run the following command within the source path:
|
|
15
15
|
|
|
16
|
-
|
|
16
|
+
```
|
|
17
|
+
npm install
|
|
18
|
+
```
|
|
17
19
|
|
|
18
|
-
|
|
20
|
+
Finally start the storybook to view and interact with all the available components using the following command:
|
|
19
21
|
|
|
20
|
-
|
|
22
|
+
```
|
|
23
|
+
npm run storybook
|
|
24
|
+
```
|
|
21
25
|
|
|
22
|
-
|
|
26
|
+
And you will see something like this running in your local machine:
|
|
23
27
|
|
|
24
|
-
|
|
28
|
+
<img src="assets/readme-images/storybook-main-page.png" width="821" alt="Storybook main page">
|
|
29
|
+
|
|
30
|
+
## Use a component from the library
|
|
31
|
+
|
|
32
|
+
### Prerequisites 📝
|
|
33
|
+
|
|
34
|
+
First you have to install the library inside the project where you want to use the component, using the following command:
|
|
35
|
+
|
|
36
|
+
```
|
|
37
|
+
npm i @tekus/design-system
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
Then you have to import the library component inside your component if you are working with standalone components or inside the target module of your project. Here you have an example to correctly import the search bar component from the library:
|
|
41
|
+
|
|
42
|
+
<img src="assets/readme-images/tks-library-import-example.png" width="821" alt="tekus library import example">
|
|
43
|
+
|
|
44
|
+
<br>
|
|
45
|
+
|
|
46
|
+
And do not forget to import inside your module or standalone component:
|
|
47
|
+
|
|
48
|
+
<br>
|
|
49
|
+
|
|
50
|
+
<img src="assets/readme-images/tks-library-module-import.png" width="400" alt="tekus library import example">
|
|
51
|
+
|
|
52
|
+
<br>
|
|
53
|
+
|
|
54
|
+
Once you have selected the component that you want to use and imported to your app, you can go to the storybook docs related with this specific component and click on the "show code" link:
|
|
55
|
+
|
|
56
|
+
<img src="assets/readme-images/storybook-docs-show-code.png" width="821" alt="Storybook show code">
|
|
57
|
+
|
|
58
|
+
<br>
|
|
59
|
+
|
|
60
|
+
Then you will see something like this:
|
|
61
|
+
|
|
62
|
+
<img src="assets/readme-images/storybook-copy-code.png" width="821" alt="Storybook copy code">
|
|
63
|
+
|
|
64
|
+
<br>
|
|
65
|
+
|
|
66
|
+
Now you can copy this code and paste it directly in you html file within the app you want to use the component, as follows:
|
|
67
|
+
|
|
68
|
+
<img src="assets/readme-images/storybook-use-case.png" width="821" alt="Storybook copy code">
|
|
69
|
+
|
|
70
|
+
<br>
|
|
71
|
+
|
|
72
|
+
## Note:
|
|
73
|
+
|
|
74
|
+
You need to ensure that you have installed all the peer dependencies related with the exact component that you want to use.
|
|
75
|
+
|
|
76
|
+
## Built with 🏗️
|
|
77
|
+
|
|
78
|
+
- [NPM](https://www.npmjs.com/)
|
|
79
|
+
- [Angular](https://angular.dev/)
|
|
80
|
+
- [StoryBook](https://storybook.js.org/)
|
|
81
|
+
|
|
82
|
+
## Contributions 🖇️
|
|
83
|
+
|
|
84
|
+
If you want to contribute to Tekus Design System, please follow these guidelines:
|
|
85
|
+
|
|
86
|
+
- Send a pull request from a branch with a meaningful name.
|
|
87
|
+
- Make changes using [Conventional Commits](https://www.conventionalcommits.org/en/v1.0.0/) for easy versioning management. You will get an error message if you don't follow this, so you can either do it manually or use a vscode extension like [Conventional Commits](https://marketplace.visualstudio.com/items?itemName=vivaxy.vscode-conventional-commits)
|
|
88
|
+
|
|
89
|
+
## Versioning 🔩
|
|
90
|
+
|
|
91
|
+
We use [SemVer](https://semver.org/) for versioning. For the versions available, see the tags on this repository.
|
|
92
|
+
|
|
93
|
+
## License
|
|
94
|
+
|
|
95
|
+
This library does not have an explicit license attached. All rights are reserved and any use or distribution is prohibited without the explicit permission of the copyright holder.
|
|
96
|
+
|
|
97
|
+
If you are interested in using, modifying, or distributing this library, please contact [Tekus](https://www.tekus.co/contacto/) for more information.
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { ElementRef, EventEmitter } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
export declare class SearchBarComponent {
|
|
4
|
+
inputValue: string;
|
|
5
|
+
readonly faXmark: import("@fortawesome/fontawesome-common-types").IconDefinition;
|
|
6
|
+
readonly faMagnifyingGlass: import("@fortawesome/fontawesome-common-types").IconDefinition;
|
|
7
|
+
searchInput: ElementRef;
|
|
8
|
+
/**
|
|
9
|
+
* Search bar hint label
|
|
10
|
+
*/
|
|
11
|
+
hintLabel: string;
|
|
12
|
+
/**
|
|
13
|
+
* What background color to use
|
|
14
|
+
*/
|
|
15
|
+
backgroundColor?: string;
|
|
16
|
+
/**
|
|
17
|
+
* Input changes handler
|
|
18
|
+
*/
|
|
19
|
+
inputValueChange: EventEmitter<string>;
|
|
20
|
+
onInputChange(): void;
|
|
21
|
+
onMouseEnter(): void;
|
|
22
|
+
onInputClear(): void;
|
|
23
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<SearchBarComponent, never>;
|
|
24
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<SearchBarComponent, "lib-tks-search-bar", never, { "hintLabel": { "alias": "hintLabel"; "required": false; }; "backgroundColor": { "alias": "backgroundColor"; "required": false; }; }, { "inputValueChange": "inputValueChange"; }, never, never, true, never>;
|
|
25
|
+
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export * from './search-bar.component';
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Rlc2lnbi1zeXN0ZW0vY29tcG9uZW50cy9zZWFyY2gtYmFyL3B1YmxpYy1hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyx3QkFBd0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vc2VhcmNoLWJhci5jb21wb25lbnQnO1xuIl19
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { Input, Output, Component, ViewChild, EventEmitter, } from '@angular/core';
|
|
2
|
+
import { FormsModule } from '@angular/forms';
|
|
3
|
+
import { NgClass, NgStyle, NgIf } from '@angular/common';
|
|
4
|
+
import { FontAwesomeModule } from '@fortawesome/angular-fontawesome';
|
|
5
|
+
import { faMagnifyingGlass, faXmark } from '@fortawesome/pro-solid-svg-icons';
|
|
6
|
+
import * as i0 from "@angular/core";
|
|
7
|
+
import * as i1 from "@angular/forms";
|
|
8
|
+
import * as i2 from "@fortawesome/angular-fontawesome";
|
|
9
|
+
export class SearchBarComponent {
|
|
10
|
+
constructor() {
|
|
11
|
+
this.inputValue = '';
|
|
12
|
+
this.faXmark = faXmark;
|
|
13
|
+
this.faMagnifyingGlass = faMagnifyingGlass;
|
|
14
|
+
/**
|
|
15
|
+
* Search bar hint label
|
|
16
|
+
*/
|
|
17
|
+
this.hintLabel = '';
|
|
18
|
+
/**
|
|
19
|
+
* Input changes handler
|
|
20
|
+
*/
|
|
21
|
+
this.inputValueChange = new EventEmitter();
|
|
22
|
+
}
|
|
23
|
+
onInputChange() {
|
|
24
|
+
this.inputValueChange.emit(this.inputValue);
|
|
25
|
+
}
|
|
26
|
+
onMouseEnter() {
|
|
27
|
+
this.searchInput.nativeElement.focus();
|
|
28
|
+
}
|
|
29
|
+
onInputClear() {
|
|
30
|
+
this.inputValue = '';
|
|
31
|
+
this.inputValueChange.emit('');
|
|
32
|
+
}
|
|
33
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: SearchBarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
34
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: SearchBarComponent, isStandalone: true, selector: "lib-tks-search-bar", inputs: { hintLabel: "hintLabel", backgroundColor: "backgroundColor" }, outputs: { inputValueChange: "inputValueChange" }, viewQueries: [{ propertyName: "searchInput", first: true, predicate: ["searchInput"], descendants: true }], ngImport: i0, template: `<div
|
|
35
|
+
class="search__bar"
|
|
36
|
+
(mouseenter)="onMouseEnter()"
|
|
37
|
+
[ngStyle]="{ 'background-color': backgroundColor }">
|
|
38
|
+
<input
|
|
39
|
+
class="search__bar__input"
|
|
40
|
+
type="text"
|
|
41
|
+
#searchInput
|
|
42
|
+
[(ngModel)]="inputValue"
|
|
43
|
+
[placeholder]="hintLabel"
|
|
44
|
+
(input)="onInputChange()" />
|
|
45
|
+
<fa-icon
|
|
46
|
+
class="search__bar__clear__mark__icon"
|
|
47
|
+
[icon]="faXmark"
|
|
48
|
+
*ngIf="inputValue !== ''"
|
|
49
|
+
(click)="onInputClear()"></fa-icon>
|
|
50
|
+
<fa-icon [icon]="faMagnifyingGlass"></fa-icon>
|
|
51
|
+
</div>`, isInline: true, styles: ["*{margin:0;padding:0;box-sizing:border-box}.search__bar{display:flex;cursor:pointer;max-width:15rem;padding:.3rem 0;width:-moz-fit-content;width:fit-content;align-items:center;justify-content:center;background-color:#fff}.search__bar:hover{border-bottom:2px solid black}.search__bar:hover .search__bar__input{width:13rem}.search__bar__input{width:0;border:none;outline:none;font-weight:500;background:transparent;transition:all ease-in-out .5s;font-size:clamp(.8rem,.675rem + .333vw,.975rem)}.search__bar__input:focus{width:13rem}.search__bar__clear__mark__icon{margin:0 .5rem}.search__bar__clear__mark__icon:hover{scale:1.3;transition:all ease-in-out .1s}\n"], dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: FontAwesomeModule }, { kind: "component", type: i2.FaIconComponent, selector: "fa-icon", inputs: ["icon", "title", "animation", "spin", "pulse", "mask", "styles", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "classes", "transform", "a11yRole"] }] }); }
|
|
52
|
+
}
|
|
53
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: SearchBarComponent, decorators: [{
|
|
54
|
+
type: Component,
|
|
55
|
+
args: [{ selector: 'lib-tks-search-bar', standalone: true, imports: [NgIf, NgClass, NgStyle, FormsModule, FontAwesomeModule], template: `<div
|
|
56
|
+
class="search__bar"
|
|
57
|
+
(mouseenter)="onMouseEnter()"
|
|
58
|
+
[ngStyle]="{ 'background-color': backgroundColor }">
|
|
59
|
+
<input
|
|
60
|
+
class="search__bar__input"
|
|
61
|
+
type="text"
|
|
62
|
+
#searchInput
|
|
63
|
+
[(ngModel)]="inputValue"
|
|
64
|
+
[placeholder]="hintLabel"
|
|
65
|
+
(input)="onInputChange()" />
|
|
66
|
+
<fa-icon
|
|
67
|
+
class="search__bar__clear__mark__icon"
|
|
68
|
+
[icon]="faXmark"
|
|
69
|
+
*ngIf="inputValue !== ''"
|
|
70
|
+
(click)="onInputClear()"></fa-icon>
|
|
71
|
+
<fa-icon [icon]="faMagnifyingGlass"></fa-icon>
|
|
72
|
+
</div>`, styles: ["*{margin:0;padding:0;box-sizing:border-box}.search__bar{display:flex;cursor:pointer;max-width:15rem;padding:.3rem 0;width:-moz-fit-content;width:fit-content;align-items:center;justify-content:center;background-color:#fff}.search__bar:hover{border-bottom:2px solid black}.search__bar:hover .search__bar__input{width:13rem}.search__bar__input{width:0;border:none;outline:none;font-weight:500;background:transparent;transition:all ease-in-out .5s;font-size:clamp(.8rem,.675rem + .333vw,.975rem)}.search__bar__input:focus{width:13rem}.search__bar__clear__mark__icon{margin:0 .5rem}.search__bar__clear__mark__icon:hover{scale:1.3;transition:all ease-in-out .1s}\n"] }]
|
|
73
|
+
}], propDecorators: { searchInput: [{
|
|
74
|
+
type: ViewChild,
|
|
75
|
+
args: ['searchInput', { static: false }]
|
|
76
|
+
}], hintLabel: [{
|
|
77
|
+
type: Input
|
|
78
|
+
}], backgroundColor: [{
|
|
79
|
+
type: Input
|
|
80
|
+
}], inputValueChange: [{
|
|
81
|
+
type: Output
|
|
82
|
+
}] } });
|
|
83
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoLWJhci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kZXNpZ24tc3lzdGVtL2NvbXBvbmVudHMvc2VhcmNoLWJhci9zZWFyY2gtYmFyLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsS0FBSyxFQUNMLE1BQU0sRUFDTixTQUFTLEVBQ1QsU0FBUyxFQUVULFlBQVksR0FDYixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDckUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE9BQU8sRUFBRSxNQUFNLGtDQUFrQyxDQUFDOzs7O0FBMEI5RSxNQUFNLE9BQU8sa0JBQWtCO0lBeEIvQjtRQXlCUyxlQUFVLEdBQUcsRUFBRSxDQUFDO1FBQ1AsWUFBTyxHQUFHLE9BQU8sQ0FBQztRQUNsQixzQkFBaUIsR0FBRyxpQkFBaUIsQ0FBQztRQUl0RDs7V0FFRztRQUVILGNBQVMsR0FBRyxFQUFFLENBQUM7UUFRZjs7V0FFRztRQUVILHFCQUFnQixHQUFHLElBQUksWUFBWSxFQUFVLENBQUM7S0FjL0M7SUFaUSxhQUFhO1FBQ2xCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFFTSxZQUFZO1FBQ2pCLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ3pDLENBQUM7SUFFTSxZQUFZO1FBQ2pCLElBQUksQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDakMsQ0FBQzsrR0FwQ1Usa0JBQWtCO21HQUFsQixrQkFBa0IscVRBcEJuQjs7Ozs7Ozs7Ozs7Ozs7Ozs7U0FpQkgsNHRCQWxCRyxJQUFJLDZGQUFXLE9BQU8sMEVBQUUsV0FBVyw4bUJBQUUsaUJBQWlCOzs0RkFxQnJELGtCQUFrQjtrQkF4QjlCLFNBQVM7K0JBQ0Usb0JBQW9CLGNBQ2xCLElBQUksV0FDUCxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxpQkFBaUIsQ0FBQyxZQUN2RDs7Ozs7Ozs7Ozs7Ozs7Ozs7U0FpQkg7OEJBUXNDLFdBQVc7c0JBQXZELFNBQVM7dUJBQUMsYUFBYSxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkFNM0MsU0FBUztzQkFEUixLQUFLO2dCQU9OLGVBQWU7c0JBRGQsS0FBSztnQkFPTixnQkFBZ0I7c0JBRGYsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIElucHV0LFxuICBPdXRwdXQsXG4gIENvbXBvbmVudCxcbiAgVmlld0NoaWxkLFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBOZ0NsYXNzLCBOZ1N0eWxlLCBOZ0lmIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEZvbnRBd2Vzb21lTW9kdWxlIH0gZnJvbSAnQGZvcnRhd2Vzb21lL2FuZ3VsYXItZm9udGF3ZXNvbWUnO1xuaW1wb3J0IHsgZmFNYWduaWZ5aW5nR2xhc3MsIGZhWG1hcmsgfSBmcm9tICdAZm9ydGF3ZXNvbWUvcHJvLXNvbGlkLXN2Zy1pY29ucyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2xpYi10a3Mtc2VhcmNoLWJhcicsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtOZ0lmLCBOZ0NsYXNzLCBOZ1N0eWxlLCBGb3Jtc01vZHVsZSwgRm9udEF3ZXNvbWVNb2R1bGVdLFxuICB0ZW1wbGF0ZTogYDxkaXZcbiAgICBjbGFzcz1cInNlYXJjaF9fYmFyXCJcbiAgICAobW91c2VlbnRlcik9XCJvbk1vdXNlRW50ZXIoKVwiXG4gICAgW25nU3R5bGVdPVwieyAnYmFja2dyb3VuZC1jb2xvcic6IGJhY2tncm91bmRDb2xvciB9XCI+XG4gICAgPGlucHV0XG4gICAgICBjbGFzcz1cInNlYXJjaF9fYmFyX19pbnB1dFwiXG4gICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAjc2VhcmNoSW5wdXRcbiAgICAgIFsobmdNb2RlbCldPVwiaW5wdXRWYWx1ZVwiXG4gICAgICBbcGxhY2Vob2xkZXJdPVwiaGludExhYmVsXCJcbiAgICAgIChpbnB1dCk9XCJvbklucHV0Q2hhbmdlKClcIiAvPlxuICAgIDxmYS1pY29uXG4gICAgICBjbGFzcz1cInNlYXJjaF9fYmFyX19jbGVhcl9fbWFya19faWNvblwiXG4gICAgICBbaWNvbl09XCJmYVhtYXJrXCJcbiAgICAgICpuZ0lmPVwiaW5wdXRWYWx1ZSAhPT0gJydcIlxuICAgICAgKGNsaWNrKT1cIm9uSW5wdXRDbGVhcigpXCI+PC9mYS1pY29uPlxuICAgIDxmYS1pY29uIFtpY29uXT1cImZhTWFnbmlmeWluZ0dsYXNzXCI+PC9mYS1pY29uPlxuICA8L2Rpdj5gLFxuICBzdHlsZVVybHM6IFsnLi9zZWFyY2gtYmFyLmNvbXBvbmVudC5jc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgU2VhcmNoQmFyQ29tcG9uZW50IHtcbiAgcHVibGljIGlucHV0VmFsdWUgPSAnJztcbiAgcHVibGljIHJlYWRvbmx5IGZhWG1hcmsgPSBmYVhtYXJrO1xuICBwdWJsaWMgcmVhZG9ubHkgZmFNYWduaWZ5aW5nR2xhc3MgPSBmYU1hZ25pZnlpbmdHbGFzcztcblxuICBAVmlld0NoaWxkKCdzZWFyY2hJbnB1dCcsIHsgc3RhdGljOiBmYWxzZSB9KSBzZWFyY2hJbnB1dCE6IEVsZW1lbnRSZWY7XG5cbiAgLyoqXG4gICAqIFNlYXJjaCBiYXIgaGludCBsYWJlbFxuICAgKi9cbiAgQElucHV0KClcbiAgaGludExhYmVsID0gJyc7XG5cbiAgLyoqXG4gICAqIFdoYXQgYmFja2dyb3VuZCBjb2xvciB0byB1c2VcbiAgICovXG4gIEBJbnB1dCgpXG4gIGJhY2tncm91bmRDb2xvcj86IHN0cmluZztcblxuICAvKipcbiAgICogSW5wdXQgY2hhbmdlcyBoYW5kbGVyXG4gICAqL1xuICBAT3V0cHV0KClcbiAgaW5wdXRWYWx1ZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuXG4gIHB1YmxpYyBvbklucHV0Q2hhbmdlKCk6IHZvaWQge1xuICAgIHRoaXMuaW5wdXRWYWx1ZUNoYW5nZS5lbWl0KHRoaXMuaW5wdXRWYWx1ZSk7XG4gIH1cblxuICBwdWJsaWMgb25Nb3VzZUVudGVyKCk6IHZvaWQge1xuICAgIHRoaXMuc2VhcmNoSW5wdXQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICB9XG5cbiAgcHVibGljIG9uSW5wdXRDbGVhcigpIHtcbiAgICB0aGlzLmlucHV0VmFsdWUgPSAnJztcbiAgICB0aGlzLmlucHV0VmFsdWVDaGFuZ2UuZW1pdCgnJyk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generated bundle index. Do not edit.
|
|
3
|
+
*/
|
|
4
|
+
export * from './public-api';
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVrdXMtZGVzaWduLXN5c3RlbS1jb21wb25lbnRzLXNlYXJjaC1iYXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kZXNpZ24tc3lzdGVtL2NvbXBvbmVudHMvc2VhcmNoLWJhci90ZWt1cy1kZXNpZ24tc3lzdGVtLWNvbXBvbmVudHMtc2VhcmNoLWJhci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsY0FBYyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL3B1YmxpYy1hcGknO1xuIl19
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generated bundle index. Do not edit.
|
|
3
|
+
*/
|
|
4
|
+
export * from './index';
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVrdXMtZGVzaWduLXN5c3RlbS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL2Rlc2lnbi1zeXN0ZW0vdGVrdXMtZGVzaWduLXN5c3RlbS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2luZGV4JztcbiJdfQ==
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import { EventEmitter, Component, ViewChild, Input, Output } from '@angular/core';
|
|
3
|
+
import * as i1 from '@angular/forms';
|
|
4
|
+
import { FormsModule } from '@angular/forms';
|
|
5
|
+
import { NgIf, NgStyle, NgClass } from '@angular/common';
|
|
6
|
+
import * as i2 from '@fortawesome/angular-fontawesome';
|
|
7
|
+
import { FontAwesomeModule } from '@fortawesome/angular-fontawesome';
|
|
8
|
+
import { faXmark, faMagnifyingGlass } from '@fortawesome/pro-solid-svg-icons';
|
|
9
|
+
|
|
10
|
+
class SearchBarComponent {
|
|
11
|
+
constructor() {
|
|
12
|
+
this.inputValue = '';
|
|
13
|
+
this.faXmark = faXmark;
|
|
14
|
+
this.faMagnifyingGlass = faMagnifyingGlass;
|
|
15
|
+
/**
|
|
16
|
+
* Search bar hint label
|
|
17
|
+
*/
|
|
18
|
+
this.hintLabel = '';
|
|
19
|
+
/**
|
|
20
|
+
* Input changes handler
|
|
21
|
+
*/
|
|
22
|
+
this.inputValueChange = new EventEmitter();
|
|
23
|
+
}
|
|
24
|
+
onInputChange() {
|
|
25
|
+
this.inputValueChange.emit(this.inputValue);
|
|
26
|
+
}
|
|
27
|
+
onMouseEnter() {
|
|
28
|
+
this.searchInput.nativeElement.focus();
|
|
29
|
+
}
|
|
30
|
+
onInputClear() {
|
|
31
|
+
this.inputValue = '';
|
|
32
|
+
this.inputValueChange.emit('');
|
|
33
|
+
}
|
|
34
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: SearchBarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
35
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: SearchBarComponent, isStandalone: true, selector: "lib-tks-search-bar", inputs: { hintLabel: "hintLabel", backgroundColor: "backgroundColor" }, outputs: { inputValueChange: "inputValueChange" }, viewQueries: [{ propertyName: "searchInput", first: true, predicate: ["searchInput"], descendants: true }], ngImport: i0, template: `<div
|
|
36
|
+
class="search__bar"
|
|
37
|
+
(mouseenter)="onMouseEnter()"
|
|
38
|
+
[ngStyle]="{ 'background-color': backgroundColor }">
|
|
39
|
+
<input
|
|
40
|
+
class="search__bar__input"
|
|
41
|
+
type="text"
|
|
42
|
+
#searchInput
|
|
43
|
+
[(ngModel)]="inputValue"
|
|
44
|
+
[placeholder]="hintLabel"
|
|
45
|
+
(input)="onInputChange()" />
|
|
46
|
+
<fa-icon
|
|
47
|
+
class="search__bar__clear__mark__icon"
|
|
48
|
+
[icon]="faXmark"
|
|
49
|
+
*ngIf="inputValue !== ''"
|
|
50
|
+
(click)="onInputClear()"></fa-icon>
|
|
51
|
+
<fa-icon [icon]="faMagnifyingGlass"></fa-icon>
|
|
52
|
+
</div>`, isInline: true, styles: ["*{margin:0;padding:0;box-sizing:border-box}.search__bar{display:flex;cursor:pointer;max-width:15rem;padding:.3rem 0;width:-moz-fit-content;width:fit-content;align-items:center;justify-content:center;background-color:#fff}.search__bar:hover{border-bottom:2px solid black}.search__bar:hover .search__bar__input{width:13rem}.search__bar__input{width:0;border:none;outline:none;font-weight:500;background:transparent;transition:all ease-in-out .5s;font-size:clamp(.8rem,.675rem + .333vw,.975rem)}.search__bar__input:focus{width:13rem}.search__bar__clear__mark__icon{margin:0 .5rem}.search__bar__clear__mark__icon:hover{scale:1.3;transition:all ease-in-out .1s}\n"], dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: FontAwesomeModule }, { kind: "component", type: i2.FaIconComponent, selector: "fa-icon", inputs: ["icon", "title", "animation", "spin", "pulse", "mask", "styles", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "classes", "transform", "a11yRole"] }] }); }
|
|
53
|
+
}
|
|
54
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: SearchBarComponent, decorators: [{
|
|
55
|
+
type: Component,
|
|
56
|
+
args: [{ selector: 'lib-tks-search-bar', standalone: true, imports: [NgIf, NgClass, NgStyle, FormsModule, FontAwesomeModule], template: `<div
|
|
57
|
+
class="search__bar"
|
|
58
|
+
(mouseenter)="onMouseEnter()"
|
|
59
|
+
[ngStyle]="{ 'background-color': backgroundColor }">
|
|
60
|
+
<input
|
|
61
|
+
class="search__bar__input"
|
|
62
|
+
type="text"
|
|
63
|
+
#searchInput
|
|
64
|
+
[(ngModel)]="inputValue"
|
|
65
|
+
[placeholder]="hintLabel"
|
|
66
|
+
(input)="onInputChange()" />
|
|
67
|
+
<fa-icon
|
|
68
|
+
class="search__bar__clear__mark__icon"
|
|
69
|
+
[icon]="faXmark"
|
|
70
|
+
*ngIf="inputValue !== ''"
|
|
71
|
+
(click)="onInputClear()"></fa-icon>
|
|
72
|
+
<fa-icon [icon]="faMagnifyingGlass"></fa-icon>
|
|
73
|
+
</div>`, styles: ["*{margin:0;padding:0;box-sizing:border-box}.search__bar{display:flex;cursor:pointer;max-width:15rem;padding:.3rem 0;width:-moz-fit-content;width:fit-content;align-items:center;justify-content:center;background-color:#fff}.search__bar:hover{border-bottom:2px solid black}.search__bar:hover .search__bar__input{width:13rem}.search__bar__input{width:0;border:none;outline:none;font-weight:500;background:transparent;transition:all ease-in-out .5s;font-size:clamp(.8rem,.675rem + .333vw,.975rem)}.search__bar__input:focus{width:13rem}.search__bar__clear__mark__icon{margin:0 .5rem}.search__bar__clear__mark__icon:hover{scale:1.3;transition:all ease-in-out .1s}\n"] }]
|
|
74
|
+
}], propDecorators: { searchInput: [{
|
|
75
|
+
type: ViewChild,
|
|
76
|
+
args: ['searchInput', { static: false }]
|
|
77
|
+
}], hintLabel: [{
|
|
78
|
+
type: Input
|
|
79
|
+
}], backgroundColor: [{
|
|
80
|
+
type: Input
|
|
81
|
+
}], inputValueChange: [{
|
|
82
|
+
type: Output
|
|
83
|
+
}] } });
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* Generated bundle index. Do not edit.
|
|
87
|
+
*/
|
|
88
|
+
|
|
89
|
+
export { SearchBarComponent };
|
|
90
|
+
//# sourceMappingURL=tekus-design-system-components-search-bar.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tekus-design-system-components-search-bar.mjs","sources":["../../../projects/design-system/components/search-bar/search-bar.component.ts","../../../projects/design-system/components/search-bar/tekus-design-system-components-search-bar.ts"],"sourcesContent":["import {\n Input,\n Output,\n Component,\n ViewChild,\n ElementRef,\n EventEmitter,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { NgClass, NgStyle, NgIf } from '@angular/common';\nimport { FontAwesomeModule } from '@fortawesome/angular-fontawesome';\nimport { faMagnifyingGlass, faXmark } from '@fortawesome/pro-solid-svg-icons';\n\n@Component({\n selector: 'lib-tks-search-bar',\n standalone: true,\n imports: [NgIf, NgClass, NgStyle, FormsModule, FontAwesomeModule],\n template: `<div\n class=\"search__bar\"\n (mouseenter)=\"onMouseEnter()\"\n [ngStyle]=\"{ 'background-color': backgroundColor }\">\n <input\n class=\"search__bar__input\"\n type=\"text\"\n #searchInput\n [(ngModel)]=\"inputValue\"\n [placeholder]=\"hintLabel\"\n (input)=\"onInputChange()\" />\n <fa-icon\n class=\"search__bar__clear__mark__icon\"\n [icon]=\"faXmark\"\n *ngIf=\"inputValue !== ''\"\n (click)=\"onInputClear()\"></fa-icon>\n <fa-icon [icon]=\"faMagnifyingGlass\"></fa-icon>\n </div>`,\n styleUrls: ['./search-bar.component.css'],\n})\nexport class SearchBarComponent {\n public inputValue = '';\n public readonly faXmark = faXmark;\n public readonly faMagnifyingGlass = faMagnifyingGlass;\n\n @ViewChild('searchInput', { static: false }) searchInput!: ElementRef;\n\n /**\n * Search bar hint label\n */\n @Input()\n hintLabel = '';\n\n /**\n * What background color to use\n */\n @Input()\n backgroundColor?: string;\n\n /**\n * Input changes handler\n */\n @Output()\n inputValueChange = new EventEmitter<string>();\n\n public onInputChange(): void {\n this.inputValueChange.emit(this.inputValue);\n }\n\n public onMouseEnter(): void {\n this.searchInput.nativeElement.focus();\n }\n\n public onInputClear() {\n this.inputValue = '';\n this.inputValueChange.emit('');\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;;;;;MAqCa,kBAAkB,CAAA;AAxB/B,IAAA,WAAA,GAAA;QAyBS,IAAU,CAAA,UAAA,GAAG,EAAE,CAAC;QACP,IAAO,CAAA,OAAA,GAAG,OAAO,CAAC;QAClB,IAAiB,CAAA,iBAAA,GAAG,iBAAiB,CAAC;AAItD;;AAEG;QAEH,IAAS,CAAA,SAAA,GAAG,EAAE,CAAC;AAQf;;AAEG;AAEH,QAAA,IAAA,CAAA,gBAAgB,GAAG,IAAI,YAAY,EAAU,CAAC;AAc/C,KAAA;IAZQ,aAAa,GAAA;QAClB,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;KAC7C;IAEM,YAAY,GAAA;AACjB,QAAA,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;KACxC;IAEM,YAAY,GAAA;AACjB,QAAA,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;AACrB,QAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;KAChC;+GApCU,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAAlB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,kBAAkB,EApBnB,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,EAAA,SAAA,EAAA,WAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,EAAA,OAAA,EAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,aAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,aAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA;;;;;;;;;;;;;;;;;AAiBH,QAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,opBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAlBG,IAAI,EAAW,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,OAAO,EAAE,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,WAAW,8mBAAE,iBAAiB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,OAAA,EAAA,WAAA,EAAA,MAAA,EAAA,OAAA,EAAA,MAAA,EAAA,QAAA,EAAA,MAAA,EAAA,MAAA,EAAA,MAAA,EAAA,QAAA,EAAA,SAAA,EAAA,QAAA,EAAA,QAAA,EAAA,YAAA,EAAA,SAAA,EAAA,WAAA,EAAA,UAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;4FAqBrD,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAxB9B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,oBAAoB,EAClB,UAAA,EAAA,IAAI,EACP,OAAA,EAAA,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,iBAAiB,CAAC,EACvD,QAAA,EAAA,CAAA;;;;;;;;;;;;;;;;;AAiBH,QAAA,CAAA,EAAA,MAAA,EAAA,CAAA,opBAAA,CAAA,EAAA,CAAA;8BAQsC,WAAW,EAAA,CAAA;sBAAvD,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,aAAa,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAA;gBAM3C,SAAS,EAAA,CAAA;sBADR,KAAK;gBAON,eAAe,EAAA,CAAA;sBADd,KAAK;gBAON,gBAAgB,EAAA,CAAA;sBADf,MAAM;;;AC3DT;;AAEG;;;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tekus-design-system.mjs","sources":["../../../projects/design-system/tekus-design-system.ts"],"sourcesContent":["/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"AAAA;;AAEG"}
|
package/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tekus/design-system",
|
|
3
3
|
"description": "Tekus design system library",
|
|
4
|
-
"version": "1.0.
|
|
4
|
+
"version": "1.0.4",
|
|
5
5
|
"license": "UNLICENSED",
|
|
6
6
|
"peerDependencies": {
|
|
7
7
|
"@angular/core": "^16.2.0",
|
|
@@ -18,5 +18,24 @@
|
|
|
18
18
|
"access": "public",
|
|
19
19
|
"registry": "https://registry.npmjs.org/"
|
|
20
20
|
},
|
|
21
|
-
"sideEffects": false
|
|
21
|
+
"sideEffects": false,
|
|
22
|
+
"module": "fesm2022/tekus-design-system.mjs",
|
|
23
|
+
"typings": "index.d.ts",
|
|
24
|
+
"exports": {
|
|
25
|
+
"./package.json": {
|
|
26
|
+
"default": "./package.json"
|
|
27
|
+
},
|
|
28
|
+
".": {
|
|
29
|
+
"types": "./index.d.ts",
|
|
30
|
+
"esm2022": "./esm2022/tekus-design-system.mjs",
|
|
31
|
+
"esm": "./esm2022/tekus-design-system.mjs",
|
|
32
|
+
"default": "./fesm2022/tekus-design-system.mjs"
|
|
33
|
+
},
|
|
34
|
+
"./components/search-bar": {
|
|
35
|
+
"types": "./components/search-bar/index.d.ts",
|
|
36
|
+
"esm2022": "./esm2022/components/search-bar/tekus-design-system-components-search-bar.mjs",
|
|
37
|
+
"esm": "./esm2022/components/search-bar/tekus-design-system-components-search-bar.mjs",
|
|
38
|
+
"default": "./fesm2022/tekus-design-system-components-search-bar.mjs"
|
|
39
|
+
}
|
|
40
|
+
}
|
|
22
41
|
}
|
package/.eslintrc.json
DELETED
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"extends": "../../.eslintrc.json",
|
|
3
|
-
"ignorePatterns": [
|
|
4
|
-
"!**/*"
|
|
5
|
-
],
|
|
6
|
-
"overrides": [
|
|
7
|
-
{
|
|
8
|
-
"files": [
|
|
9
|
-
"*.ts"
|
|
10
|
-
],
|
|
11
|
-
"rules": {
|
|
12
|
-
"@angular-eslint/directive-selector": [
|
|
13
|
-
"error",
|
|
14
|
-
{
|
|
15
|
-
"type": "attribute",
|
|
16
|
-
"prefix": "lib",
|
|
17
|
-
"style": "camelCase"
|
|
18
|
-
}
|
|
19
|
-
],
|
|
20
|
-
"@angular-eslint/component-selector": [
|
|
21
|
-
"error",
|
|
22
|
-
{
|
|
23
|
-
"type": "element",
|
|
24
|
-
"prefix": "lib",
|
|
25
|
-
"style": "kebab-case"
|
|
26
|
-
}
|
|
27
|
-
]
|
|
28
|
-
}
|
|
29
|
-
},
|
|
30
|
-
{
|
|
31
|
-
"files": [
|
|
32
|
-
"*.html"
|
|
33
|
-
],
|
|
34
|
-
"rules": {}
|
|
35
|
-
}
|
|
36
|
-
]
|
|
37
|
-
}
|
package/.storybook/main.ts
DELETED
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import type { StorybookConfig } from '@storybook/angular';
|
|
2
|
-
|
|
3
|
-
const config: StorybookConfig = {
|
|
4
|
-
stories: ['../**/*.mdx', '../**/*.stories.@(js|jsx|mjs|ts|tsx)'],
|
|
5
|
-
addons: [
|
|
6
|
-
'@storybook/addon-a11y',
|
|
7
|
-
'@storybook/addon-links',
|
|
8
|
-
'@storybook/addon-essentials',
|
|
9
|
-
'@storybook/addon-interactions',
|
|
10
|
-
],
|
|
11
|
-
framework: {
|
|
12
|
-
name: '@storybook/angular',
|
|
13
|
-
options: {},
|
|
14
|
-
},
|
|
15
|
-
docs: {
|
|
16
|
-
autodocs: 'tag',
|
|
17
|
-
},
|
|
18
|
-
};
|
|
19
|
-
export default config;
|
package/.storybook/preview.ts
DELETED
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import type { Preview } from "@storybook/angular";
|
|
2
|
-
import { setCompodocJson } from "@storybook/addon-docs/angular";
|
|
3
|
-
import docJson from "../documentation.json";
|
|
4
|
-
setCompodocJson(docJson);
|
|
5
|
-
|
|
6
|
-
const preview: Preview = {
|
|
7
|
-
parameters: {
|
|
8
|
-
actions: { argTypesRegex: "^on[A-Z].*" },
|
|
9
|
-
controls: {
|
|
10
|
-
matchers: {
|
|
11
|
-
color: /(background|color)$/i,
|
|
12
|
-
date: /Date$/i,
|
|
13
|
-
},
|
|
14
|
-
},
|
|
15
|
-
},
|
|
16
|
-
};
|
|
17
|
-
|
|
18
|
-
export default preview;
|
package/.storybook/tsconfig.json
DELETED
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"extends": "../tsconfig.lib.json",
|
|
3
|
-
"compilerOptions": {
|
|
4
|
-
"types": [
|
|
5
|
-
"node"
|
|
6
|
-
],
|
|
7
|
-
"allowSyntheticDefaultImports": true,
|
|
8
|
-
"resolveJsonModule": true
|
|
9
|
-
},
|
|
10
|
-
"exclude": [
|
|
11
|
-
"../test.ts",
|
|
12
|
-
"../**/*.spec.ts"
|
|
13
|
-
],
|
|
14
|
-
"include": [
|
|
15
|
-
"../**/*",
|
|
16
|
-
"./preview.ts",
|
|
17
|
-
"../stories/**/*",
|
|
18
|
-
"../projects/**/*"
|
|
19
|
-
],
|
|
20
|
-
"files": [
|
|
21
|
-
"./typings.d.ts"
|
|
22
|
-
]
|
|
23
|
-
}
|
package/.storybook/typings.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export * from './public-api';
|
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
* {
|
|
2
|
-
margin: 0;
|
|
3
|
-
padding: 0;
|
|
4
|
-
box-sizing: border-box;
|
|
5
|
-
}
|
|
6
|
-
|
|
7
|
-
.search__bar {
|
|
8
|
-
display: flex;
|
|
9
|
-
cursor: pointer;
|
|
10
|
-
max-width: 15rem;
|
|
11
|
-
padding: 0.3rem 0;
|
|
12
|
-
width: fit-content;
|
|
13
|
-
align-items: center;
|
|
14
|
-
justify-content: center;
|
|
15
|
-
background-color: white;
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
.search__bar:hover {
|
|
19
|
-
border-bottom: 2px solid black;
|
|
20
|
-
.search__bar__input {
|
|
21
|
-
width: 13rem;
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
.search__bar__input {
|
|
26
|
-
width: 0;
|
|
27
|
-
border: none;
|
|
28
|
-
outline: none;
|
|
29
|
-
font-weight: 500;
|
|
30
|
-
background: transparent;
|
|
31
|
-
transition: all ease-in-out 0.5s;
|
|
32
|
-
font-size: clamp(0.8rem, 0.675rem + 0.333vw, 0.975rem);
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
.search__bar__input:focus {
|
|
36
|
-
width: 13rem;
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
.search__bar__clear__mark__icon {
|
|
40
|
-
margin: 0 0.5rem;
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
.search__bar__clear__mark__icon:hover {
|
|
44
|
-
scale: 1.3;
|
|
45
|
-
transition: all ease-in-out 0.1s;
|
|
46
|
-
}
|
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
import { SearchBarComponent } from './search-bar.component';
|
|
2
|
-
import { ComponentFixture, TestBed } from '@angular/core/testing';
|
|
3
|
-
|
|
4
|
-
describe('SearchBarComponent', () => {
|
|
5
|
-
let component: SearchBarComponent;
|
|
6
|
-
let fixture: ComponentFixture<SearchBarComponent>;
|
|
7
|
-
|
|
8
|
-
beforeEach(() => {
|
|
9
|
-
TestBed.configureTestingModule({
|
|
10
|
-
imports: [SearchBarComponent],
|
|
11
|
-
});
|
|
12
|
-
fixture = TestBed.createComponent(SearchBarComponent);
|
|
13
|
-
component = fixture.componentInstance;
|
|
14
|
-
fixture.detectChanges();
|
|
15
|
-
});
|
|
16
|
-
|
|
17
|
-
it('should create', () => {
|
|
18
|
-
expect(component).toBeTruthy();
|
|
19
|
-
});
|
|
20
|
-
|
|
21
|
-
it('should emit inputValueChange event with the input value when onInputChange is called', () => {
|
|
22
|
-
const inputValue = 'test input';
|
|
23
|
-
component.inputValue = inputValue;
|
|
24
|
-
spyOn(component.inputValueChange, 'emit');
|
|
25
|
-
component.onInputChange();
|
|
26
|
-
expect(component.inputValueChange.emit).toHaveBeenCalledWith(inputValue);
|
|
27
|
-
});
|
|
28
|
-
|
|
29
|
-
it('should focus on searchInput when onMouseEnter is called', () => {
|
|
30
|
-
const focusSpy = spyOn(component.searchInput.nativeElement, 'focus');
|
|
31
|
-
component.onMouseEnter();
|
|
32
|
-
expect(focusSpy).toHaveBeenCalled();
|
|
33
|
-
});
|
|
34
|
-
|
|
35
|
-
it('should clear inputValue and emit inputValueChange event with empty string when onInputClear is called', () => {
|
|
36
|
-
component.inputValue = 'test input';
|
|
37
|
-
spyOn(component.inputValueChange, 'emit');
|
|
38
|
-
component.onInputClear();
|
|
39
|
-
expect(component.inputValue).toBe('');
|
|
40
|
-
expect(component.inputValueChange.emit).toHaveBeenCalledWith('');
|
|
41
|
-
});
|
|
42
|
-
|
|
43
|
-
it('should set hintLabel input correctly', () => {
|
|
44
|
-
const hintLabel = 'test hint';
|
|
45
|
-
component.hintLabel = hintLabel;
|
|
46
|
-
expect(component.hintLabel).toBe(hintLabel);
|
|
47
|
-
});
|
|
48
|
-
|
|
49
|
-
it('should set backgroundColor input correctly', () => {
|
|
50
|
-
const backgroundColor = 'red';
|
|
51
|
-
component.backgroundColor = backgroundColor;
|
|
52
|
-
expect(component.backgroundColor).toBe(backgroundColor);
|
|
53
|
-
});
|
|
54
|
-
});
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
import { Meta, StoryObj } from '@storybook/angular';
|
|
2
|
-
import { SearchBarComponent } from './search-bar.component';
|
|
3
|
-
|
|
4
|
-
const meta: Meta<SearchBarComponent> = {
|
|
5
|
-
title: 'Components/Search bar',
|
|
6
|
-
component: SearchBarComponent,
|
|
7
|
-
tags: ['autodocs'],
|
|
8
|
-
render: (args: SearchBarComponent) => ({
|
|
9
|
-
props: {
|
|
10
|
-
backgroundColor: null,
|
|
11
|
-
...args,
|
|
12
|
-
},
|
|
13
|
-
}),
|
|
14
|
-
argTypes: {
|
|
15
|
-
backgroundColor: {
|
|
16
|
-
control: 'color',
|
|
17
|
-
},
|
|
18
|
-
},
|
|
19
|
-
};
|
|
20
|
-
|
|
21
|
-
export default meta;
|
|
22
|
-
type Story = StoryObj<SearchBarComponent>;
|
|
23
|
-
|
|
24
|
-
export const Default: Story = {
|
|
25
|
-
args: {
|
|
26
|
-
hintLabel: 'Search...',
|
|
27
|
-
backgroundColor: 'white',
|
|
28
|
-
},
|
|
29
|
-
};
|
|
@@ -1,75 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
Input,
|
|
3
|
-
Output,
|
|
4
|
-
Component,
|
|
5
|
-
ViewChild,
|
|
6
|
-
ElementRef,
|
|
7
|
-
EventEmitter,
|
|
8
|
-
} from '@angular/core';
|
|
9
|
-
import { FormsModule } from '@angular/forms';
|
|
10
|
-
import { NgClass, NgStyle, NgIf } from '@angular/common';
|
|
11
|
-
import { FontAwesomeModule } from '@fortawesome/angular-fontawesome';
|
|
12
|
-
import { faMagnifyingGlass, faXmark } from '@fortawesome/pro-solid-svg-icons';
|
|
13
|
-
|
|
14
|
-
@Component({
|
|
15
|
-
selector: 'lib-tks-search-bar',
|
|
16
|
-
standalone: true,
|
|
17
|
-
imports: [NgIf, NgClass, NgStyle, FormsModule, FontAwesomeModule],
|
|
18
|
-
template: `<div
|
|
19
|
-
class="search__bar"
|
|
20
|
-
(mouseenter)="onMouseEnter()"
|
|
21
|
-
[ngStyle]="{ 'background-color': backgroundColor }">
|
|
22
|
-
<input
|
|
23
|
-
class="search__bar__input"
|
|
24
|
-
type="text"
|
|
25
|
-
#searchInput
|
|
26
|
-
[(ngModel)]="inputValue"
|
|
27
|
-
[placeholder]="hintLabel"
|
|
28
|
-
(input)="onInputChange()" />
|
|
29
|
-
<fa-icon
|
|
30
|
-
class="search__bar__clear__mark__icon"
|
|
31
|
-
[icon]="faXmark"
|
|
32
|
-
*ngIf="inputValue !== ''"
|
|
33
|
-
(click)="onInputClear()"></fa-icon>
|
|
34
|
-
<fa-icon [icon]="faMagnifyingGlass"></fa-icon>
|
|
35
|
-
</div>`,
|
|
36
|
-
styleUrls: ['./search-bar.component.css'],
|
|
37
|
-
})
|
|
38
|
-
export class SearchBarComponent {
|
|
39
|
-
public inputValue = '';
|
|
40
|
-
public readonly faXmark = faXmark;
|
|
41
|
-
public readonly faMagnifyingGlass = faMagnifyingGlass;
|
|
42
|
-
|
|
43
|
-
@ViewChild('searchInput', { static: false }) searchInput!: ElementRef;
|
|
44
|
-
|
|
45
|
-
/**
|
|
46
|
-
* Search bar hint label
|
|
47
|
-
*/
|
|
48
|
-
@Input()
|
|
49
|
-
hintLabel = '';
|
|
50
|
-
|
|
51
|
-
/**
|
|
52
|
-
* What background color to use
|
|
53
|
-
*/
|
|
54
|
-
@Input()
|
|
55
|
-
backgroundColor?: string;
|
|
56
|
-
|
|
57
|
-
/**
|
|
58
|
-
* Input changes handler
|
|
59
|
-
*/
|
|
60
|
-
@Output()
|
|
61
|
-
inputValueChange = new EventEmitter<string>();
|
|
62
|
-
|
|
63
|
-
public onInputChange(): void {
|
|
64
|
-
this.inputValueChange.emit(this.inputValue);
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
public onMouseEnter(): void {
|
|
68
|
-
this.searchInput.nativeElement.focus();
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
public onInputClear() {
|
|
72
|
-
this.inputValue = '';
|
|
73
|
-
this.inputValueChange.emit('');
|
|
74
|
-
}
|
|
75
|
-
}
|
package/documentation.json
DELETED
|
@@ -1,371 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"pipes": [],
|
|
3
|
-
"interfaces": [],
|
|
4
|
-
"injectables": [],
|
|
5
|
-
"guards": [],
|
|
6
|
-
"interceptors": [],
|
|
7
|
-
"classes": [],
|
|
8
|
-
"directives": [],
|
|
9
|
-
"components": [
|
|
10
|
-
{
|
|
11
|
-
"name": "SearchBarComponent",
|
|
12
|
-
"id": "component-SearchBarComponent-4ee13de11aa08b3cb3fd2d16bf08aacfbb0762a33c8ee74339eb947d2daab9a0bb34821c6028bf478dda6035cb325bb44af1a09ef1589f9e8c18f162e0cedeec",
|
|
13
|
-
"file": "projects/design-system/components/search-bar/search-bar.component.ts",
|
|
14
|
-
"encapsulation": [],
|
|
15
|
-
"entryComponents": [],
|
|
16
|
-
"inputs": [],
|
|
17
|
-
"outputs": [],
|
|
18
|
-
"providers": [],
|
|
19
|
-
"selector": "lib-tks-search-bar",
|
|
20
|
-
"styleUrls": [
|
|
21
|
-
"./search-bar.component.css"
|
|
22
|
-
],
|
|
23
|
-
"styles": [],
|
|
24
|
-
"template": "<div class=\"search__bar\"\n #searchBar\n (mouseenter)=\"onMouseEnter()\"\n [ngStyle]=\"{ 'background-color': backgroundColor }\">\n <input\n class=\"search__bar__input\"\n type=\"text\"\n #searchInput\n [(ngModel)]=\"inputValue\"\n [placeholder]=\"hintLabel\"\n (input)=\"onInputChange()\" />\n <fa-icon\n class=\"search__bar__clear__mark__icon\"\n [icon]=\"faXmark\"\n *ngIf=\"inputValue !== ''\"\n (click)=\"onInputClear()\"></fa-icon>\n <fa-icon [icon]=\"faMagnifyingGlass\"></fa-icon>\n </div>",
|
|
25
|
-
"templateUrl": [],
|
|
26
|
-
"viewProviders": [],
|
|
27
|
-
"hostDirectives": [],
|
|
28
|
-
"inputsClass": [
|
|
29
|
-
{
|
|
30
|
-
"name": "backgroundColor",
|
|
31
|
-
"deprecated": false,
|
|
32
|
-
"deprecationMessage": "",
|
|
33
|
-
"rawdescription": "\n\nWhat background color to use\n",
|
|
34
|
-
"description": "<p>What background color to use</p>\n",
|
|
35
|
-
"line": 57,
|
|
36
|
-
"type": "string",
|
|
37
|
-
"decorators": []
|
|
38
|
-
},
|
|
39
|
-
{
|
|
40
|
-
"name": "hintLabel",
|
|
41
|
-
"defaultValue": "''",
|
|
42
|
-
"deprecated": false,
|
|
43
|
-
"deprecationMessage": "",
|
|
44
|
-
"rawdescription": "\n\nSearch bar hint label\n",
|
|
45
|
-
"description": "<p>Search bar hint label</p>\n",
|
|
46
|
-
"line": 51,
|
|
47
|
-
"type": "string",
|
|
48
|
-
"decorators": []
|
|
49
|
-
}
|
|
50
|
-
],
|
|
51
|
-
"outputsClass": [
|
|
52
|
-
{
|
|
53
|
-
"name": "inputValueChange",
|
|
54
|
-
"defaultValue": "new EventEmitter<string>()",
|
|
55
|
-
"deprecated": false,
|
|
56
|
-
"deprecationMessage": "",
|
|
57
|
-
"rawdescription": "\n\nInput changes handler\n",
|
|
58
|
-
"description": "<p>Input changes handler</p>\n",
|
|
59
|
-
"line": 63,
|
|
60
|
-
"type": "EventEmitter"
|
|
61
|
-
}
|
|
62
|
-
],
|
|
63
|
-
"propertiesClass": [
|
|
64
|
-
{
|
|
65
|
-
"name": "faMagnifyingGlass",
|
|
66
|
-
"defaultValue": "faMagnifyingGlass",
|
|
67
|
-
"deprecated": false,
|
|
68
|
-
"deprecationMessage": "",
|
|
69
|
-
"type": "",
|
|
70
|
-
"optional": false,
|
|
71
|
-
"description": "",
|
|
72
|
-
"line": 42,
|
|
73
|
-
"modifierKind": [
|
|
74
|
-
125,
|
|
75
|
-
148
|
|
76
|
-
]
|
|
77
|
-
},
|
|
78
|
-
{
|
|
79
|
-
"name": "faXmark",
|
|
80
|
-
"defaultValue": "faXmark",
|
|
81
|
-
"deprecated": false,
|
|
82
|
-
"deprecationMessage": "",
|
|
83
|
-
"type": "",
|
|
84
|
-
"optional": false,
|
|
85
|
-
"description": "",
|
|
86
|
-
"line": 41,
|
|
87
|
-
"modifierKind": [
|
|
88
|
-
125,
|
|
89
|
-
148
|
|
90
|
-
]
|
|
91
|
-
},
|
|
92
|
-
{
|
|
93
|
-
"name": "inputValue",
|
|
94
|
-
"defaultValue": "''",
|
|
95
|
-
"deprecated": false,
|
|
96
|
-
"deprecationMessage": "",
|
|
97
|
-
"type": "string",
|
|
98
|
-
"optional": false,
|
|
99
|
-
"description": "",
|
|
100
|
-
"line": 40,
|
|
101
|
-
"modifierKind": [
|
|
102
|
-
125
|
|
103
|
-
]
|
|
104
|
-
},
|
|
105
|
-
{
|
|
106
|
-
"name": "searchBar",
|
|
107
|
-
"deprecated": false,
|
|
108
|
-
"deprecationMessage": "",
|
|
109
|
-
"type": "ElementRef",
|
|
110
|
-
"optional": false,
|
|
111
|
-
"description": "",
|
|
112
|
-
"line": 44,
|
|
113
|
-
"decorators": [
|
|
114
|
-
{
|
|
115
|
-
"name": "ViewChild",
|
|
116
|
-
"stringifiedArguments": "'searchBar', {static: false}"
|
|
117
|
-
}
|
|
118
|
-
],
|
|
119
|
-
"modifierKind": [
|
|
120
|
-
170
|
|
121
|
-
]
|
|
122
|
-
},
|
|
123
|
-
{
|
|
124
|
-
"name": "searchInput",
|
|
125
|
-
"deprecated": false,
|
|
126
|
-
"deprecationMessage": "",
|
|
127
|
-
"type": "ElementRef",
|
|
128
|
-
"optional": false,
|
|
129
|
-
"description": "",
|
|
130
|
-
"line": 45,
|
|
131
|
-
"decorators": [
|
|
132
|
-
{
|
|
133
|
-
"name": "ViewChild",
|
|
134
|
-
"stringifiedArguments": "'searchInput', {static: false}"
|
|
135
|
-
}
|
|
136
|
-
],
|
|
137
|
-
"modifierKind": [
|
|
138
|
-
170
|
|
139
|
-
]
|
|
140
|
-
}
|
|
141
|
-
],
|
|
142
|
-
"methodsClass": [
|
|
143
|
-
{
|
|
144
|
-
"name": "onInputChange",
|
|
145
|
-
"args": [],
|
|
146
|
-
"optional": false,
|
|
147
|
-
"returnType": "void",
|
|
148
|
-
"typeParameters": [],
|
|
149
|
-
"line": 65,
|
|
150
|
-
"deprecated": false,
|
|
151
|
-
"deprecationMessage": "",
|
|
152
|
-
"modifierKind": [
|
|
153
|
-
125
|
|
154
|
-
]
|
|
155
|
-
},
|
|
156
|
-
{
|
|
157
|
-
"name": "onInputClear",
|
|
158
|
-
"args": [],
|
|
159
|
-
"optional": false,
|
|
160
|
-
"returnType": "void",
|
|
161
|
-
"typeParameters": [],
|
|
162
|
-
"line": 74,
|
|
163
|
-
"deprecated": false,
|
|
164
|
-
"deprecationMessage": "",
|
|
165
|
-
"modifierKind": [
|
|
166
|
-
125
|
|
167
|
-
]
|
|
168
|
-
},
|
|
169
|
-
{
|
|
170
|
-
"name": "onMouseEnter",
|
|
171
|
-
"args": [],
|
|
172
|
-
"optional": false,
|
|
173
|
-
"returnType": "void",
|
|
174
|
-
"typeParameters": [],
|
|
175
|
-
"line": 69,
|
|
176
|
-
"deprecated": false,
|
|
177
|
-
"deprecationMessage": "",
|
|
178
|
-
"modifierKind": [
|
|
179
|
-
125
|
|
180
|
-
]
|
|
181
|
-
}
|
|
182
|
-
],
|
|
183
|
-
"deprecated": false,
|
|
184
|
-
"deprecationMessage": "",
|
|
185
|
-
"hostBindings": [],
|
|
186
|
-
"hostListeners": [],
|
|
187
|
-
"standalone": true,
|
|
188
|
-
"imports": [
|
|
189
|
-
{
|
|
190
|
-
"name": "NgIf"
|
|
191
|
-
},
|
|
192
|
-
{
|
|
193
|
-
"name": "NgClass"
|
|
194
|
-
},
|
|
195
|
-
{
|
|
196
|
-
"name": "NgStyle"
|
|
197
|
-
},
|
|
198
|
-
{
|
|
199
|
-
"name": "FormsModule",
|
|
200
|
-
"type": "module"
|
|
201
|
-
},
|
|
202
|
-
{
|
|
203
|
-
"name": "FontAwesomeModule",
|
|
204
|
-
"type": "module"
|
|
205
|
-
}
|
|
206
|
-
],
|
|
207
|
-
"description": "",
|
|
208
|
-
"rawdescription": "\n",
|
|
209
|
-
"type": "component",
|
|
210
|
-
"sourceCode": "import {\r\n Input,\r\n Output,\r\n Component,\r\n ViewChild,\r\n ElementRef,\r\n EventEmitter,\r\n} from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { NgClass, NgStyle, NgIf } from '@angular/common';\r\nimport { FontAwesomeModule } from '@fortawesome/angular-fontawesome';\r\nimport { faMagnifyingGlass, faXmark } from '@fortawesome/pro-solid-svg-icons';\r\n\r\n@Component({\r\n selector: 'lib-tks-search-bar',\r\n standalone: true,\r\n imports: [NgIf, NgClass, NgStyle, FormsModule, FontAwesomeModule],\r\n template: `<div\r\n class=\"search__bar\"\r\n #searchBar\r\n (mouseenter)=\"onMouseEnter()\"\r\n [ngStyle]=\"{ 'background-color': backgroundColor }\">\r\n <input\r\n class=\"search__bar__input\"\r\n type=\"text\"\r\n #searchInput\r\n [(ngModel)]=\"inputValue\"\r\n [placeholder]=\"hintLabel\"\r\n (input)=\"onInputChange()\" />\r\n <fa-icon\r\n class=\"search__bar__clear__mark__icon\"\r\n [icon]=\"faXmark\"\r\n *ngIf=\"inputValue !== ''\"\r\n (click)=\"onInputClear()\"></fa-icon>\r\n <fa-icon [icon]=\"faMagnifyingGlass\"></fa-icon>\r\n </div>`,\r\n styleUrls: ['./search-bar.component.css'],\r\n})\r\nexport class SearchBarComponent {\r\n public inputValue = '';\r\n public readonly faXmark = faXmark;\r\n public readonly faMagnifyingGlass = faMagnifyingGlass;\r\n\r\n @ViewChild('searchBar', { static: false }) searchBar!: ElementRef;\r\n @ViewChild('searchInput', { static: false }) searchInput!: ElementRef;\r\n\r\n /**\r\n * Search bar hint label\r\n */\r\n @Input()\r\n hintLabel = '';\r\n\r\n /**\r\n * What background color to use\r\n */\r\n @Input()\r\n backgroundColor?: string;\r\n\r\n /**\r\n * Input changes handler\r\n */\r\n @Output()\r\n inputValueChange = new EventEmitter<string>();\r\n\r\n public onInputChange(): void {\r\n this.inputValueChange.emit(this.inputValue);\r\n }\r\n\r\n public onMouseEnter(): void {\r\n this.searchInput.nativeElement.focus();\r\n this.searchBar.nativeElement.focus();\r\n }\r\n\r\n public onInputClear() {\r\n this.inputValue = '';\r\n this.inputValueChange.emit('');\r\n }\r\n}\r\n",
|
|
211
|
-
"assetsDirs": [],
|
|
212
|
-
"styleUrlsData": [
|
|
213
|
-
{
|
|
214
|
-
"data": "* {\r\n margin: 0;\r\n padding: 0;\r\n box-sizing: border-box;\r\n}\r\n\r\n.search__bar {\r\n display: flex;\r\n cursor: pointer;\r\n max-width: 15rem;\r\n padding: 0.3rem 0;\r\n width: fit-content;\r\n align-items: center;\r\n justify-content: center;\r\n background-color: white;\r\n}\r\n\r\n.search__bar:hover {\r\n border-bottom: 2px solid black;\r\n .search__bar__input {\r\n width: 13rem;\r\n }\r\n}\r\n\r\n.search__bar__input {\r\n width: 0;\r\n border: none;\r\n outline: none;\r\n font-weight: 500;\r\n background: transparent;\r\n transition: all ease-in-out 0.5s;\r\n font-size: clamp(0.8rem, 0.675rem + 0.333vw, 0.975rem);\r\n}\r\n\r\n.search__bar__input:focus {\r\n width: 13rem;\r\n}\r\n\r\n.search__bar__clear__mark__icon {\r\n margin: 0 0.5rem;\r\n}\r\n\r\n.search__bar__clear__mark__icon:hover {\r\n scale: 1.3;\r\n transition: all ease-in-out 0.1s;\r\n}\r\n",
|
|
215
|
-
"styleUrl": "./search-bar.component.css"
|
|
216
|
-
}
|
|
217
|
-
],
|
|
218
|
-
"stylesData": "",
|
|
219
|
-
"extends": []
|
|
220
|
-
}
|
|
221
|
-
],
|
|
222
|
-
"modules": [],
|
|
223
|
-
"miscellaneous": {
|
|
224
|
-
"variables": [
|
|
225
|
-
{
|
|
226
|
-
"name": "Default",
|
|
227
|
-
"ctype": "miscellaneous",
|
|
228
|
-
"subtype": "variable",
|
|
229
|
-
"file": "projects/design-system/components/search-bar/search-bar.component.stories.ts",
|
|
230
|
-
"deprecated": false,
|
|
231
|
-
"deprecationMessage": "",
|
|
232
|
-
"type": "Story",
|
|
233
|
-
"defaultValue": "{\r\n args: {\r\n hintLabel: 'Search...',\r\n backgroundColor: 'white',\r\n },\r\n}"
|
|
234
|
-
},
|
|
235
|
-
{
|
|
236
|
-
"name": "meta",
|
|
237
|
-
"ctype": "miscellaneous",
|
|
238
|
-
"subtype": "variable",
|
|
239
|
-
"file": "projects/design-system/components/search-bar/search-bar.component.stories.ts",
|
|
240
|
-
"deprecated": false,
|
|
241
|
-
"deprecationMessage": "",
|
|
242
|
-
"type": "Meta<SearchBarComponent>",
|
|
243
|
-
"defaultValue": "{\r\n title: 'Components/Search bar',\r\n component: SearchBarComponent,\r\n tags: ['autodocs'],\r\n render: (args: SearchBarComponent) => ({\r\n props: {\r\n backgroundColor: null,\r\n ...args,\r\n },\r\n }),\r\n argTypes: {\r\n backgroundColor: {\r\n control: 'color',\r\n },\r\n },\r\n}"
|
|
244
|
-
},
|
|
245
|
-
{
|
|
246
|
-
"name": "preview",
|
|
247
|
-
"ctype": "miscellaneous",
|
|
248
|
-
"subtype": "variable",
|
|
249
|
-
"file": "projects/design-system/.storybook/preview.ts",
|
|
250
|
-
"deprecated": false,
|
|
251
|
-
"deprecationMessage": "",
|
|
252
|
-
"type": "Preview",
|
|
253
|
-
"defaultValue": "{\n parameters: {\n actions: { argTypesRegex: \"^on[A-Z].*\" },\n controls: {\n matchers: {\n color: /(background|color)$/i,\n date: /Date$/i,\n },\n },\n },\n}"
|
|
254
|
-
}
|
|
255
|
-
],
|
|
256
|
-
"functions": [],
|
|
257
|
-
"typealiases": [
|
|
258
|
-
{
|
|
259
|
-
"name": "Story",
|
|
260
|
-
"ctype": "miscellaneous",
|
|
261
|
-
"subtype": "typealias",
|
|
262
|
-
"rawtype": "StoryObj<SearchBarComponent>",
|
|
263
|
-
"file": "projects/design-system/components/search-bar/search-bar.component.stories.ts",
|
|
264
|
-
"deprecated": false,
|
|
265
|
-
"deprecationMessage": "",
|
|
266
|
-
"description": "",
|
|
267
|
-
"kind": 183
|
|
268
|
-
}
|
|
269
|
-
],
|
|
270
|
-
"enumerations": [],
|
|
271
|
-
"groupedVariables": {
|
|
272
|
-
"projects/design-system/components/search-bar/search-bar.component.stories.ts": [
|
|
273
|
-
{
|
|
274
|
-
"name": "Default",
|
|
275
|
-
"ctype": "miscellaneous",
|
|
276
|
-
"subtype": "variable",
|
|
277
|
-
"file": "projects/design-system/components/search-bar/search-bar.component.stories.ts",
|
|
278
|
-
"deprecated": false,
|
|
279
|
-
"deprecationMessage": "",
|
|
280
|
-
"type": "Story",
|
|
281
|
-
"defaultValue": "{\r\n args: {\r\n hintLabel: 'Search...',\r\n backgroundColor: 'white',\r\n },\r\n}"
|
|
282
|
-
},
|
|
283
|
-
{
|
|
284
|
-
"name": "meta",
|
|
285
|
-
"ctype": "miscellaneous",
|
|
286
|
-
"subtype": "variable",
|
|
287
|
-
"file": "projects/design-system/components/search-bar/search-bar.component.stories.ts",
|
|
288
|
-
"deprecated": false,
|
|
289
|
-
"deprecationMessage": "",
|
|
290
|
-
"type": "Meta<SearchBarComponent>",
|
|
291
|
-
"defaultValue": "{\r\n title: 'Components/Search bar',\r\n component: SearchBarComponent,\r\n tags: ['autodocs'],\r\n render: (args: SearchBarComponent) => ({\r\n props: {\r\n backgroundColor: null,\r\n ...args,\r\n },\r\n }),\r\n argTypes: {\r\n backgroundColor: {\r\n control: 'color',\r\n },\r\n },\r\n}"
|
|
292
|
-
}
|
|
293
|
-
],
|
|
294
|
-
"projects/design-system/.storybook/preview.ts": [
|
|
295
|
-
{
|
|
296
|
-
"name": "preview",
|
|
297
|
-
"ctype": "miscellaneous",
|
|
298
|
-
"subtype": "variable",
|
|
299
|
-
"file": "projects/design-system/.storybook/preview.ts",
|
|
300
|
-
"deprecated": false,
|
|
301
|
-
"deprecationMessage": "",
|
|
302
|
-
"type": "Preview",
|
|
303
|
-
"defaultValue": "{\n parameters: {\n actions: { argTypesRegex: \"^on[A-Z].*\" },\n controls: {\n matchers: {\n color: /(background|color)$/i,\n date: /Date$/i,\n },\n },\n },\n}"
|
|
304
|
-
}
|
|
305
|
-
]
|
|
306
|
-
},
|
|
307
|
-
"groupedFunctions": {},
|
|
308
|
-
"groupedEnumerations": {},
|
|
309
|
-
"groupedTypeAliases": {
|
|
310
|
-
"projects/design-system/components/search-bar/search-bar.component.stories.ts": [
|
|
311
|
-
{
|
|
312
|
-
"name": "Story",
|
|
313
|
-
"ctype": "miscellaneous",
|
|
314
|
-
"subtype": "typealias",
|
|
315
|
-
"rawtype": "StoryObj<SearchBarComponent>",
|
|
316
|
-
"file": "projects/design-system/components/search-bar/search-bar.component.stories.ts",
|
|
317
|
-
"deprecated": false,
|
|
318
|
-
"deprecationMessage": "",
|
|
319
|
-
"description": "",
|
|
320
|
-
"kind": 183
|
|
321
|
-
}
|
|
322
|
-
]
|
|
323
|
-
}
|
|
324
|
-
},
|
|
325
|
-
"routes": [],
|
|
326
|
-
"coverage": {
|
|
327
|
-
"count": 6,
|
|
328
|
-
"status": "low",
|
|
329
|
-
"files": [
|
|
330
|
-
{
|
|
331
|
-
"filePath": "projects/design-system/.storybook/preview.ts",
|
|
332
|
-
"type": "variable",
|
|
333
|
-
"linktype": "miscellaneous",
|
|
334
|
-
"linksubtype": "variable",
|
|
335
|
-
"name": "preview",
|
|
336
|
-
"coveragePercent": 0,
|
|
337
|
-
"coverageCount": "0/1",
|
|
338
|
-
"status": "low"
|
|
339
|
-
},
|
|
340
|
-
{
|
|
341
|
-
"filePath": "projects/design-system/components/search-bar/search-bar.component.stories.ts",
|
|
342
|
-
"type": "variable",
|
|
343
|
-
"linktype": "miscellaneous",
|
|
344
|
-
"linksubtype": "variable",
|
|
345
|
-
"name": "Default",
|
|
346
|
-
"coveragePercent": 0,
|
|
347
|
-
"coverageCount": "0/1",
|
|
348
|
-
"status": "low"
|
|
349
|
-
},
|
|
350
|
-
{
|
|
351
|
-
"filePath": "projects/design-system/components/search-bar/search-bar.component.stories.ts",
|
|
352
|
-
"type": "variable",
|
|
353
|
-
"linktype": "miscellaneous",
|
|
354
|
-
"linksubtype": "variable",
|
|
355
|
-
"name": "meta",
|
|
356
|
-
"coveragePercent": 0,
|
|
357
|
-
"coverageCount": "0/1",
|
|
358
|
-
"status": "low"
|
|
359
|
-
},
|
|
360
|
-
{
|
|
361
|
-
"filePath": "projects/design-system/components/search-bar/search-bar.component.ts",
|
|
362
|
-
"type": "component",
|
|
363
|
-
"linktype": "component",
|
|
364
|
-
"name": "SearchBarComponent",
|
|
365
|
-
"coveragePercent": 25,
|
|
366
|
-
"coverageCount": "3/12",
|
|
367
|
-
"status": "low"
|
|
368
|
-
}
|
|
369
|
-
]
|
|
370
|
-
}
|
|
371
|
-
}
|
package/index.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
package/karma-ci.conf.js
DELETED
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
// Karma configuration file, see link for more information
|
|
2
|
-
// https://karma-runner.github.io/1.0/config/configuration-file.html
|
|
3
|
-
|
|
4
|
-
module.exports = function (config) {
|
|
5
|
-
config.set({
|
|
6
|
-
basePath: "",
|
|
7
|
-
frameworks: ["jasmine", "@angular-devkit/build-angular"],
|
|
8
|
-
plugins: [
|
|
9
|
-
require("karma-jasmine"),
|
|
10
|
-
require("karma-chrome-launcher"),
|
|
11
|
-
require("karma-jasmine-html-reporter"),
|
|
12
|
-
require("karma-coverage"),
|
|
13
|
-
require("@angular-devkit/build-angular/plugins/karma"),
|
|
14
|
-
],
|
|
15
|
-
client: {
|
|
16
|
-
clearContext: false, // leave Jasmine Spec Runner output visible in browser
|
|
17
|
-
},
|
|
18
|
-
jasmineHtmlReporter: {
|
|
19
|
-
suppressAll: true, // removes the duplicated traces
|
|
20
|
-
},
|
|
21
|
-
coverageReporter: {
|
|
22
|
-
dir: require("path").join(__dirname, "../../coverage/design-system"),
|
|
23
|
-
subdir: ".",
|
|
24
|
-
reporters: [{ type: "lcov" }],
|
|
25
|
-
fixWebpackSourcePaths: true,
|
|
26
|
-
thresholds: {
|
|
27
|
-
statements: 50,
|
|
28
|
-
lines: 50,
|
|
29
|
-
branches: 50,
|
|
30
|
-
functions: 50,
|
|
31
|
-
},
|
|
32
|
-
},
|
|
33
|
-
reporters: ["progress", "kjhtml"],
|
|
34
|
-
port: 9876,
|
|
35
|
-
colors: true,
|
|
36
|
-
logLevel: config.LOG_INFO,
|
|
37
|
-
autoWatch: false,
|
|
38
|
-
restartOnFileChange: true,
|
|
39
|
-
browsers: ["ChromeHeadless"],
|
|
40
|
-
customLaunchers: {
|
|
41
|
-
ChromeHeadless: {
|
|
42
|
-
base: "Chrome",
|
|
43
|
-
flags: [
|
|
44
|
-
"--headless",
|
|
45
|
-
"--disable-gpu",
|
|
46
|
-
"--no-sandbox",
|
|
47
|
-
"--remote-debugging-port=9222",
|
|
48
|
-
],
|
|
49
|
-
},
|
|
50
|
-
},
|
|
51
|
-
singleRun: true,
|
|
52
|
-
browserNoActivityTimeout: 40000,
|
|
53
|
-
});
|
|
54
|
-
};
|
package/karma.conf.js
DELETED
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
// Karma configuration file, see link for more information
|
|
2
|
-
// https://karma-runner.github.io/1.0/config/configuration-file.html
|
|
3
|
-
|
|
4
|
-
module.exports = function (config) {
|
|
5
|
-
config.set({
|
|
6
|
-
basePath: "",
|
|
7
|
-
frameworks: ["jasmine", "@angular-devkit/build-angular"],
|
|
8
|
-
files: [
|
|
9
|
-
"projects/**/*.ts", // Buscará todos los archivos .ts dentro de la carpeta design-system y sus subdirectorios
|
|
10
|
-
],
|
|
11
|
-
plugins: [
|
|
12
|
-
require("karma-jasmine"),
|
|
13
|
-
require("karma-chrome-launcher"),
|
|
14
|
-
require("karma-jasmine-html-reporter"),
|
|
15
|
-
require("karma-coverage"),
|
|
16
|
-
require("@angular-devkit/build-angular/plugins/karma"),
|
|
17
|
-
],
|
|
18
|
-
client: {
|
|
19
|
-
clearContext: false, // leave Jasmine Spec Runner output visible in browser
|
|
20
|
-
},
|
|
21
|
-
jasmineHtmlReporter: {
|
|
22
|
-
suppressAll: true, // removes the duplicated traces
|
|
23
|
-
},
|
|
24
|
-
coverageReporter: {
|
|
25
|
-
dir: require("path").join(__dirname, "../../coverage/design-system"),
|
|
26
|
-
subdir: ".",
|
|
27
|
-
reporters: [{ type: "html" }, { type: "text-summary" }],
|
|
28
|
-
},
|
|
29
|
-
reporters: ["progress", "kjhtml"],
|
|
30
|
-
browsers: ["Chrome"],
|
|
31
|
-
restartOnFileChange: true,
|
|
32
|
-
});
|
|
33
|
-
};
|
package/ng-package.json
DELETED
package/tsconfig.lib.json
DELETED
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
/* To learn more about this file see: https://angular.io/config/tsconfig. */
|
|
2
|
-
{
|
|
3
|
-
"extends": "../../tsconfig.json",
|
|
4
|
-
"compilerOptions": {
|
|
5
|
-
"outDir": "../../out-tsc/lib",
|
|
6
|
-
"declaration": true,
|
|
7
|
-
"declarationMap": true,
|
|
8
|
-
"inlineSources": true,
|
|
9
|
-
"types": []
|
|
10
|
-
},
|
|
11
|
-
"exclude": [
|
|
12
|
-
"**/*.spec.ts"
|
|
13
|
-
]
|
|
14
|
-
}
|
package/tsconfig.lib.prod.json
DELETED
package/tsconfig.spec.json
DELETED
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
/* To learn more about this file see: https://angular.io/config/tsconfig. */
|
|
2
|
-
{
|
|
3
|
-
"extends": "../../tsconfig.json",
|
|
4
|
-
"compilerOptions": {
|
|
5
|
-
"outDir": "../../out-tsc/spec",
|
|
6
|
-
"types": [
|
|
7
|
-
"jasmine"
|
|
8
|
-
]
|
|
9
|
-
},
|
|
10
|
-
"include": [
|
|
11
|
-
"**/*.spec.ts",
|
|
12
|
-
"**/*.d.ts"
|
|
13
|
-
]
|
|
14
|
-
}
|
|
File without changes
|