GStack · GPay · Esempla Systems
{{ t.hero_title }}
{{ t.hero_sub }}
{{ t.principles_title }}
{{ p.num }}
{{ p.title }}
{{ p.text }}
{{ t.eco_title }}
{{ t.eco_sub }}
{{ pr.abbr }}
{{ pr.name }}
{{ pr.role }}
{{ t.how_title }}
{{ s.n }}
{{ s.title }}
{{ s.text }}
{{ t.adv_title }}
{{ t.adv_sub }}
{{ a.num }}
{{ a.title }}
{{ a.text }}
{{ t.adv_cmp_t }}
{{ t.adv_sum_t }}
{{ t.adv_sum_x }}
{{ t.col_title }}
{{ t.col_sub }}
{{ t.col_neutrals }}
{{ t.col_accents }}
{{ t.col_accents_note }}
{{ t.col_semantic }}
{{ c.label }}
{{ c.tokens }}
{{ c.use }}
{{ t.rule }} {{ t.col_rule }}
{{ t.type_title }}
{{ t.type_sub }}
{{ t.type_ui }}
IBM Plex Sans
{{ t.type_ui_note }}
{{ t.type_data }}
IBM Plex Mono
{{ t.type_data_note }}
{{ t.rule }} {{ t.type_rule }}
{{ t.sp_title }}
{{ t.sp_sub }}
{{ t.sp_scale }}
{{ s.token }}
{{ s.px }}
{{ s.px }}
{{ t.sp_radius }}
{{ r.token }}
{{ r.px }} · {{ r.use }}
{{ r.px }} · {{ r.use }}
{{ t.sp_layout }}
sidebar
242px
242px
header · 58px
content · max 1180px · padding 24–34px
{{ t.sp_layout_note }}
{{ t.rule }} {{ t.sp_rule }}
{{ t.nav_title }}
{{ t.nav_sub }}
{{ a.num }}
{{ a.title }}
{{ a.text }}
{{ t.nav_specs }}
import { GdsSidenavComponent } from '@esempla/gds-angular';
<gds-sidenav [product]="{ name: 'GPay Core', abbr: 'P' }"
[groups]="navGroups"
[activeRoute]="router.url"
(navigate)="router.navigateByUrl($event)"></gds-sidenav>
{{ t.btn_title }}
{{ t.btn_sub }}
{{ t.btn_specs }}
<gds-button variant="primary" icon="plus">{{ t.btn_primary }}</gds-button>
<gds-button variant="secondary">{{ t.btn_secondary }}</gds-button>
<gds-button variant="danger" size="md">{{ t.btn_danger }}</gds-button>
{{ t.badge_title }}
{{ t.badge_specs }}
<gds-badge status="success" dot>{{ t.st_active }}</gds-badge>
<gds-badge status="warning" dot>{{ t.st_pending }}</gds-badge>
<gds-badge kind="mono">GET /v1/payments</gds-badge>
{{ t.form_title }}
{{ t.form_sub }}
{{ t.form_help_name }}
{{ t.form_err_idno }}
{{ t.form_sel_now }}: {{ selLabel }}
{{ t.form_lbl_opts }}
{{ t.form_switch }}: {{ switchLabel }}
{{ t.form_specs }}
<gds-input label="{{ t.form_lbl_name }}" required helper="{{ t.form_help_name }}"></gds-input>
<gds-select label="{{ t.form_lbl_method }}" [options]="methods"></gds-select>
<gds-toggle [(ngModel)]="notify">{{ t.form_switch }}</gds-toggle>
{{ t.tbl_title }}
{{ t.tbl_sub }}
{{ t.tbl_specs }}
{{ t.tbl_acc_specs }}
import { GdsTableComponent } from '@esempla/gds-angular';
<gds-table [columns]="cols" [rows]="payments"
searchable [searchKeys]="['name','payer','code']"
[filters]="{ key: 'status', options: statusFilters }"
expandable="accordion"
(rowExpand)="loadDetail($event)">
<ng-template #expanded let-row>…meta + {{ t.acc_receipt }}…</ng-template>
</gds-table>
{{ t.card_title }}
{{ t.card_sub }}
{{ t.card_kpi_label }}
2,4M MDL
▲ 12% {{ t.card_kpi_delta }}
{{ t.card_list_title }}
{{ t.card_list_meta }}
{{ t.card_accent_label }}
62%
2,9 TB / 4,7 TB · replicat 3 {{ t.card_accent_zones }}
{{ t.card_info_t }} {{ t.card_info_x }}
{{ t.card_warn_t }} {{ t.card_warn_x }}
{{ t.tabs_title }}
{{ tabContent }}
<gds-kpi label="{{ t.card_kpi_label }}" value="2,4M MDL" delta="+12%"></gds-kpi>
<gds-tabs [tabs]="tabs" (change)="onTab($event)"></gds-tabs>
<gds-alert kind="info">{{ t.card_info_x }}</gds-alert>
{{ t.dr_title }}
{{ t.dr_sub }}
{{ t.dr_specs }}
import { GdsDrawerComponent, GdsTabsComponent } from '@esempla/gds-angular';
<gds-drawer [open]="!!selected" (close)="selected = null">
<gds-tabs [tabs]="['{{ t.tab1 }}','{{ t.tab2 }}','{{ t.dr_t3 }}']" (change)="tab = $event"></gds-tabs>
...
</gds-drawer>
{{ t.tpl_title }}
{{ t.tpl_sub }}
{{ t.tpl_note }}
{{ t.demo_title }}
{{ t.demo_sub }}
/* styles.css */
@import "@esempla/gds-core/gds-core.css";
:root { --gds-accent: var(--gds-accent-gpay); }
// transactions.component.ts
import { Component } from '@angular/core';
import { GdsSidenavComponent, GdsTableComponent, GdsDrawerComponent,
GdsTabsComponent, GdsKpiComponent, GdsButtonComponent }
from '@esempla/gds-angular';
@Component({
standalone: true,
selector: 'app-transactions',
imports: [GdsSidenavComponent, GdsTableComponent, GdsDrawerComponent,
GdsTabsComponent, GdsKpiComponent, GdsButtonComponent],
templateUrl: './transactions.component.html',
})
export class TransactionsComponent {
cols = ['name', 'amount', 'status'];
rows = this.api.payments();
selected: Payment | null = null;
tab = 0;
}
<!-- transactions.component.html -->
<gds-sidenav [product]="{ name: 'GPay Core', abbr: 'P' }"
[groups]="nav" [activeRoute]="router.url"
(navigate)="router.navigateByUrl($event)"></gds-sidenav>
<main>
<header>
<h1>{{ t.tbl_demo_title }}</h1>
<gds-button variant="primary" icon="plus">{{ t.tbl_new }}</gds-button>
</header>
<gds-kpi label="{{ t.card_kpi_label }}" value="2,4M MDL" delta="+12%"></gds-kpi>
<gds-table [columns]="cols" [rows]="rows"
searchable [searchKeys]="['name','payer','code']"
[filters]="{ key: 'status', options: statusFilters }"
(rowClick)="selected = $event"></gds-table>
<gds-drawer [open]="!!selected" (close)="selected = null">
<gds-tabs [tabs]="['{{ t.tab1 }}','{{ t.tab2 }}','{{ t.dr_t3 }}']"
(change)="tab = $event"></gds-tabs>
</gds-drawer>
</main>
{{ t.demo_note }}
{{ t.cons_title }}
{{ t.cons_sub }}
{{ t.cons_palette }}
{{ t.cons_hint }}
{{ t.cons_note }}
{{ t.imp_title }}
{{ t.imp_sub }}
1 · {{ t.imp_s1 }}
npm install @esempla/gds-core @esempla/gds-angular
2 · {{ t.imp_s2 }}
/* styles.css */
@import "@esempla/gds-core/gds-core.css";
:root {
--gds-accent: var(--gds-accent-gpay); /* {{ t.imp_accent_cm }} */
}
3 · {{ t.imp_s3 }}
// app.module.ts
import { GdsModule } from '@esempla/gds-angular';
@NgModule({ imports: [GdsModule] })
export class AppModule {}
// template
<gds-button variant="primary" (click)="save()">{{ t.btn_primary }}</gds-button>
{{ t.imp_pkgs }}
@esempla/gds-angular
{{ t.imp_pkg3 }}
{{ t.imp_soon }}
{{ t.imp_struct_t }}
@esempla/gds-angular
├─ components/
│ gds-button · gds-badge · gds-input · gds-select · gds-toggle
│ gds-sidenav ← {{ t.imp_tree_nav }}
│ gds-table ← {{ t.imp_tree_table }}
│ gds-drawer · gds-tabs · gds-kpi · gds-alert
├─ templates/ gds-template-dashboard · -service-form · -records
├─ styles/ re-export @esempla/gds-core
└─ i18n/ ro.json · en.json
{{ t.imp_import_t }}
{{ t.imp_import_note }}
import { GdsTableComponent, GdsDrawerComponent, GdsSidenavComponent }
from '@esempla/gds-angular';
@Component({
standalone: true,
imports: [GdsTableComponent, GdsDrawerComponent, GdsSidenavComponent],
templateUrl: './payments.component.html'
})
export class PaymentsComponent {}
{{ t.imp_pub_t }}
npm.esempla.systems
{{ t.imp_pub1_x }}
GitHub Packages
{{ t.imp_pub2_x }}
dist-tags
{{ t.imp_pub3_x }}
# .npmrc ({{ t.imp_npmrc_cm }})
@esempla:registry=https://npm.esempla.systems
//npm.esempla.systems/:_authToken=${ESEMPLA_NPM_TOKEN}
{{ t.ver_title }}
{{ t.ver_note }}
{{ t.gov_title }}
{{ t.gov_sub }}
{{ s.n }}
{{ s.title }}
{{ s.text }}
✓ {{ t.gov_do }}
·{{ d.x }}
✕ {{ t.gov_dont }}
·{{ d.x }}
{{ t.gov_contrib_t }}
{{ c.tag }}
{{ c.x }}
{{ t.gov_cta_t }}
{{ t.gov_cta_x }}
{{ t.mud_title }}
{{ t.mud_sub }}
MUD · mud.egov.md
{{ t.mud_card1 }}
GDS · GStack & GPay
{{ t.mud_card2 }}
{{ t.mud_map_t }}
{{ t.mud_when }}