ngx-oecd-ai-design-system 2.1.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 +15 -0
- package/fesm2022/ngx-oecd-ai-design-system-tabs-nav.mjs +31 -0
- package/fesm2022/ngx-oecd-ai-design-system-tabs-nav.mjs.map +1 -0
- package/fesm2022/ngx-oecd-ai-design-system.mjs +4 -0
- package/fesm2022/ngx-oecd-ai-design-system.mjs.map +1 -0
- package/package.json +41 -0
- package/styles/base.scss +15 -0
- package/styles/index.scss +11 -0
- package/styles/tailwind.css +16 -0
- package/styles/variables/index.scss +2 -0
- package/styles/variables/palette.scss +13 -0
- package/styles/variables/sizes.scss +25 -0
- package/tabs-nav/README.md +3 -0
- package/types/ngx-oecd-ai-design-system-tabs-nav.d.ts +19 -0
- package/types/ngx-oecd-ai-design-system.d.ts +2 -0
package/README.md
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# ui
|
|
2
|
+
|
|
3
|
+
`ngx-oecd-ai-design-system` is the package shell for the OECD AI design system.
|
|
4
|
+
|
|
5
|
+
Public components are exposed through secondary entry points:
|
|
6
|
+
|
|
7
|
+
```ts
|
|
8
|
+
import { OecdTabsNavComponent } from 'ngx-oecd-ai-design-system/tabs-nav';
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
Each entry point lives directly under `libs/ui/<entry-point>`. The package root intentionally exports no components, while `libs/ui/styles` is copied as a static package asset.
|
|
12
|
+
|
|
13
|
+
## Running unit tests
|
|
14
|
+
|
|
15
|
+
Run `npx nx test ui` to execute the unit tests.
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import { input, Component } from '@angular/core';
|
|
3
|
+
import * as i1 from '@angular/router';
|
|
4
|
+
import { RouterModule } from '@angular/router';
|
|
5
|
+
|
|
6
|
+
class OecdTabsNavComponent {
|
|
7
|
+
$tabs = input.required({ ...(ngDevMode ? { debugName: "$tabs" } : /* istanbul ignore next */ {}), alias: 'tabs' });
|
|
8
|
+
onTabClick(event, tab) {
|
|
9
|
+
event.preventDefault();
|
|
10
|
+
if (tab.disabled) {
|
|
11
|
+
return;
|
|
12
|
+
}
|
|
13
|
+
const tabs = this.$tabs();
|
|
14
|
+
tabs.forEach((currentTab) => {
|
|
15
|
+
currentTab.active = currentTab.type === tab.type;
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: OecdTabsNavComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
19
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: OecdTabsNavComponent, isStandalone: true, selector: "oecd-tabs-nav", inputs: { $tabs: { classPropertyName: "$tabs", publicName: "tabs", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: "@let tabs = $tabs();\n\n<div class=\"flex flex-row gap-7\">\n @for (tab of tabs; track tab.type) {\n @if (tab.url) {\n <a \n class=\"flex item-center justify-center font-medium pb-3\"\n routerLinkActive=\"tab--active\"\n [attr.disabled]=\"tab.disabled\"\n [class.tab--disabled]=\"tab.disabled\"\n [queryParams]=\"tab.queryParams\"\n [routerLink]=\"tab.disabled ? null : tab.url\"\n (click)=\"onTabClick($event, tab)\">\n {{ tab.title }}\n </a>\n } @else {\n <button\n [disabled]=\"tab.disabled\"\n type=\"button\"\n class=\"flex item-center justify-center font-medium pb-3\"\n (click)=\"onTabClick($event, tab)\">\n {{ tab.title }}\n </button>\n }\n }\n</div>", styles: ["a,button{color:var(--oecd-color-primary-dark)}a:hover,button:hover,a:active,button:active{color:var(--oecd-color-primary-active);border-bottom:var(--oecd-border-size-base) solid var(--oecd-color-primary-active);cursor:pointer}a:disabled,a.tab--disabled,a[aria-disabled=true],button:disabled,button.tab--disabled,button[aria-disabled=true]{opacity:var(--oecd-opacity-disabled);cursor:not-allowed;pointer-events:none;text-decoration:none}a.tab--active,button.tab--active{color:var(--oecd-color-primary-active);border-bottom:var(--oecd-border-size-base) solid var(--oecd-color-primary-active)}\n"], dependencies: [{ kind: "ngmodule", type: RouterModule }, { kind: "directive", type: i1.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "browserUrl", "routerLink"] }, { kind: "directive", type: i1.RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }] });
|
|
20
|
+
}
|
|
21
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: OecdTabsNavComponent, decorators: [{
|
|
22
|
+
type: Component,
|
|
23
|
+
args: [{ selector: 'oecd-tabs-nav', imports: [RouterModule], template: "@let tabs = $tabs();\n\n<div class=\"flex flex-row gap-7\">\n @for (tab of tabs; track tab.type) {\n @if (tab.url) {\n <a \n class=\"flex item-center justify-center font-medium pb-3\"\n routerLinkActive=\"tab--active\"\n [attr.disabled]=\"tab.disabled\"\n [class.tab--disabled]=\"tab.disabled\"\n [queryParams]=\"tab.queryParams\"\n [routerLink]=\"tab.disabled ? null : tab.url\"\n (click)=\"onTabClick($event, tab)\">\n {{ tab.title }}\n </a>\n } @else {\n <button\n [disabled]=\"tab.disabled\"\n type=\"button\"\n class=\"flex item-center justify-center font-medium pb-3\"\n (click)=\"onTabClick($event, tab)\">\n {{ tab.title }}\n </button>\n }\n }\n</div>", styles: ["a,button{color:var(--oecd-color-primary-dark)}a:hover,button:hover,a:active,button:active{color:var(--oecd-color-primary-active);border-bottom:var(--oecd-border-size-base) solid var(--oecd-color-primary-active);cursor:pointer}a:disabled,a.tab--disabled,a[aria-disabled=true],button:disabled,button.tab--disabled,button[aria-disabled=true]{opacity:var(--oecd-opacity-disabled);cursor:not-allowed;pointer-events:none;text-decoration:none}a.tab--active,button.tab--active{color:var(--oecd-color-primary-active);border-bottom:var(--oecd-border-size-base) solid var(--oecd-color-primary-active)}\n"] }]
|
|
24
|
+
}], propDecorators: { $tabs: [{ type: i0.Input, args: [{ isSignal: true, alias: "tabs", required: true }] }] } });
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Generated bundle index. Do not edit.
|
|
28
|
+
*/
|
|
29
|
+
|
|
30
|
+
export { OecdTabsNavComponent };
|
|
31
|
+
//# sourceMappingURL=ngx-oecd-ai-design-system-tabs-nav.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ngx-oecd-ai-design-system-tabs-nav.mjs","sources":["../../../../libs/ui/tabs-nav/src/lib/tabs-nav.component.ts","../../../../libs/ui/tabs-nav/src/lib/tabs-nav.component.html","../../../../libs/ui/tabs-nav/src/ngx-oecd-ai-design-system-tabs-nav.ts"],"sourcesContent":["import { Component, input } from '@angular/core';\nimport { RouterModule } from '@angular/router';\n\nimport { Tab } from './models';\n\n@Component({\n selector: 'oecd-tabs-nav',\n imports: [RouterModule],\n templateUrl: './tabs-nav.component.html',\n styleUrl: './tabs-nav.component.scss',\n})\nexport class OecdTabsNavComponent<T> {\n readonly $tabs = input.required<Tab<T>[]>({ alias: 'tabs'})\n\n onTabClick(event: Event, tab: Tab<T>): void {\n event.preventDefault();\n\n if (tab.disabled) {\n return;\n }\n\n const tabs = this.$tabs();\n\n tabs.forEach((currentTab: Tab<T>): void => {\n currentTab.active = currentTab.type === tab.type;\n });\n }\n}\n","@let tabs = $tabs();\n\n<div class=\"flex flex-row gap-7\">\n @for (tab of tabs; track tab.type) {\n @if (tab.url) {\n <a \n class=\"flex item-center justify-center font-medium pb-3\"\n routerLinkActive=\"tab--active\"\n [attr.disabled]=\"tab.disabled\"\n [class.tab--disabled]=\"tab.disabled\"\n [queryParams]=\"tab.queryParams\"\n [routerLink]=\"tab.disabled ? null : tab.url\"\n (click)=\"onTabClick($event, tab)\">\n {{ tab.title }}\n </a>\n } @else {\n <button\n [disabled]=\"tab.disabled\"\n type=\"button\"\n class=\"flex item-center justify-center font-medium pb-3\"\n (click)=\"onTabClick($event, tab)\">\n {{ tab.title }}\n </button>\n }\n }\n</div>","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;MAWa,oBAAoB,CAAA;IACtB,KAAK,GAAG,KAAK,CAAC,QAAQ,4EAAa,KAAK,EAAE,MAAM,EAAA,CAAE;IAE3D,UAAU,CAAC,KAAY,EAAE,GAAW,EAAA;QAClC,KAAK,CAAC,cAAc,EAAE;AAEtB,QAAA,IAAI,GAAG,CAAC,QAAQ,EAAE;YAChB;QACF;AAEA,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,EAAE;AAEzB,QAAA,IAAI,CAAC,OAAO,CAAC,CAAC,UAAkB,KAAU;YACxC,UAAU,CAAC,MAAM,GAAG,UAAU,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI;AAClD,QAAA,CAAC,CAAC;IACJ;uGAfW,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAApB,oBAAoB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECXjC,+wBAyBM,EAAA,MAAA,EAAA,CAAA,klBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDlBM,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,aAAA,EAAA,UAAA,EAAA,qBAAA,EAAA,OAAA,EAAA,MAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,YAAA,EAAA,YAAA,EAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,uBAAA,EAAA,kBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAIX,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBANhC,SAAS;+BACE,eAAe,EAAA,OAAA,EAChB,CAAC,YAAY,CAAC,EAAA,QAAA,EAAA,+wBAAA,EAAA,MAAA,EAAA,CAAA,klBAAA,CAAA,EAAA;;;AEPzB;;AAEG;;;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ngx-oecd-ai-design-system.mjs","sources":["../../../../libs/ui/ngx-oecd-ai-design-system.ts"],"sourcesContent":["/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"AAAA;;AAEG"}
|
package/package.json
ADDED
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "ngx-oecd-ai-design-system",
|
|
3
|
+
"version": "2.1.5",
|
|
4
|
+
"peerDependencies": {
|
|
5
|
+
"@angular/common": "^22.0.0",
|
|
6
|
+
"@angular/core": "^22.0.0",
|
|
7
|
+
"@angular/router": "^22.0.0"
|
|
8
|
+
},
|
|
9
|
+
"publishConfig": {
|
|
10
|
+
"access": "public"
|
|
11
|
+
},
|
|
12
|
+
"sideEffects": [
|
|
13
|
+
"**/*.css",
|
|
14
|
+
"**/*.scss"
|
|
15
|
+
],
|
|
16
|
+
"exports": {
|
|
17
|
+
"./styles": {
|
|
18
|
+
"sass": "./styles/index.scss",
|
|
19
|
+
"style": "./styles/index.scss",
|
|
20
|
+
"default": "./styles/index.scss"
|
|
21
|
+
},
|
|
22
|
+
"./styles/*": "./styles/*",
|
|
23
|
+
"./package.json": {
|
|
24
|
+
"default": "./package.json"
|
|
25
|
+
},
|
|
26
|
+
".": {
|
|
27
|
+
"types": "./types/ngx-oecd-ai-design-system.d.ts",
|
|
28
|
+
"default": "./fesm2022/ngx-oecd-ai-design-system.mjs"
|
|
29
|
+
},
|
|
30
|
+
"./tabs-nav": {
|
|
31
|
+
"types": "./types/ngx-oecd-ai-design-system-tabs-nav.d.ts",
|
|
32
|
+
"default": "./fesm2022/ngx-oecd-ai-design-system-tabs-nav.mjs"
|
|
33
|
+
}
|
|
34
|
+
},
|
|
35
|
+
"module": "fesm2022/ngx-oecd-ai-design-system.mjs",
|
|
36
|
+
"typings": "types/ngx-oecd-ai-design-system.d.ts",
|
|
37
|
+
"type": "module",
|
|
38
|
+
"dependencies": {
|
|
39
|
+
"tslib": "^2.3.0"
|
|
40
|
+
}
|
|
41
|
+
}
|
package/styles/base.scss
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
@use 'variables' as tokens;
|
|
2
|
+
@use 'base';
|
|
3
|
+
|
|
4
|
+
@import 'https://fonts.googleapis.com/css2?family=Noto+Sans:ital,wght@0,100..900;1,100..900&display=swap';
|
|
5
|
+
|
|
6
|
+
:root {
|
|
7
|
+
@include tokens.palette;
|
|
8
|
+
@include tokens.sizes;
|
|
9
|
+
|
|
10
|
+
--oecd-font-family-sans: 'Noto Sans', sans-serif;
|
|
11
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
@import 'tailwindcss';
|
|
2
|
+
|
|
3
|
+
@source '..';
|
|
4
|
+
@source '../fesm2022';
|
|
5
|
+
@source '../../../apps/playground/src';
|
|
6
|
+
|
|
7
|
+
@theme inline {
|
|
8
|
+
--font-sans: var(--oecd-font-family-sans);
|
|
9
|
+
|
|
10
|
+
--color-oecd-primary-dark: var(--oecd-color-primary-dark);
|
|
11
|
+
--color-oecd-primary-active: var(--oecd-color-primary-active);
|
|
12
|
+
--color-oecd-white: var(--oecd-color-white);
|
|
13
|
+
--color-oecd-black: var(--oecd-color-black);
|
|
14
|
+
--color-oecd-dark-blue: var(--oecd-color-dark-blue);
|
|
15
|
+
--color-oecd-navy: var(--oecd-color-navy);
|
|
16
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
@mixin palette {
|
|
2
|
+
/* Brand */
|
|
3
|
+
--oecd-color-primary-dark: #264e75;
|
|
4
|
+
--oecd-color-primary-active: #379aa4;
|
|
5
|
+
|
|
6
|
+
/* Base */
|
|
7
|
+
--oecd-color-white: #ffffff;
|
|
8
|
+
--oecd-color-black: #000000;
|
|
9
|
+
|
|
10
|
+
/* Blue */
|
|
11
|
+
--oecd-color-dark-blue: #0e1749;
|
|
12
|
+
--oecd-color-navy: #101d40;
|
|
13
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
@mixin sizes {
|
|
2
|
+
// Font sizes
|
|
3
|
+
--oecd-font-size-base: 16px;
|
|
4
|
+
--oecd-font-size-small: 14px;
|
|
5
|
+
--oecd-font-size-large: 18px;
|
|
6
|
+
--oecd-font-size-xlarge: 20px;
|
|
7
|
+
--oecd-font-size-xxlarge: 22px;
|
|
8
|
+
--oecd-font-size-xxxlarge: 24px;
|
|
9
|
+
--oecd-font-size-xxxxlarge: 26px;
|
|
10
|
+
|
|
11
|
+
// Border sizes
|
|
12
|
+
--oecd-border-size-small: 1px;
|
|
13
|
+
--oecd-border-size-base: 2px;
|
|
14
|
+
--oecd-border-size-large: 3px;
|
|
15
|
+
--oecd-border-size-xlarge: 4px;
|
|
16
|
+
--oecd-border-size-xxlarge: 5px;
|
|
17
|
+
--oecd-border-size-xxxlarge: 6px;
|
|
18
|
+
--oecd-border-size-xxxxlarge: 7px;
|
|
19
|
+
--oecd-border-size-xxxxxlarge: 8px;
|
|
20
|
+
--oecd-border-size-xxxxxxlarge: 9px;
|
|
21
|
+
--oecd-border-size-xxxxxxxlarge: 10px;
|
|
22
|
+
|
|
23
|
+
// Opacity sizes
|
|
24
|
+
--oecd-opacity-disabled: 0.5;
|
|
25
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
|
|
3
|
+
interface Tab<T> {
|
|
4
|
+
type: T;
|
|
5
|
+
title: string;
|
|
6
|
+
active?: boolean;
|
|
7
|
+
url?: string | string[];
|
|
8
|
+
queryParams?: Record<string, string>;
|
|
9
|
+
disabled?: boolean;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
declare class OecdTabsNavComponent<T> {
|
|
13
|
+
readonly $tabs: i0.InputSignal<Tab<T>[]>;
|
|
14
|
+
onTabClick(event: Event, tab: Tab<T>): void;
|
|
15
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<OecdTabsNavComponent<any>, never>;
|
|
16
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<OecdTabsNavComponent<any>, "oecd-tabs-nav", never, { "$tabs": { "alias": "tabs"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export { OecdTabsNavComponent };
|