G
GDS · GStack & GPay Design System
{{ t.tagline }}
v1.0.0
{{ t.download_tokens }}
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_col_a }}
✓ {{ t.adv_col_b }}
{{ r.a }}
{{ r.b }}
{{ t.adv_sum_t }}
{{ t.adv_sum_x }}

{{ t.col_title }}

{{ t.col_sub }}

{{ t.col_neutrals }}

{{ c.token }}
{{ c.use }}{{ c.hex }}

{{ t.col_accents }}

{{ t.col_accents_note }}

{{ c.token }}
{{ c.use }}{{ c.hex }}

{{ 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.type_role }}
Token
{{ t.type_sample }}
{{ r.role }}
{{ r.token }}
{{ r.sample }}
{{ t.rule }} {{ t.type_rule }}

{{ t.sp_title }}

{{ t.sp_sub }}

{{ t.sp_scale }}

{{ s.token }}
{{ s.px }}

{{ t.sp_radius }}

{{ r.token }}
{{ r.px }} · {{ r.use }}

{{ t.sp_layout }}

sidebar
242px
header · 58px
content · max 1180px · padding 24–34px
{{ t.sp_layout_note }}
{{ t.rule }} {{ t.sp_rule }}

{{ t.nav_title }}

{{ t.nav_sub }}

P
GPay Core
{{ t.nav_demo_sub }}
{{ g.label }}
VD
Virtosu D.
{{ t.nav_demo_role }}
{{ 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 }}

{{ b.label }} {{ t.badge_role }} GET /v1/payments 3
{{ 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_demo_title }} {{ txRowsCount }}
{{ t.tbl_c1 }}
{{ t.tbl_c2 }}
{{ t.tbl_c3 }}
{{ t.tbl_c4 }}
{{ t.tbl_c5 }}
{{ r.name }}
{{ r.code }}
{{ r.payer }}
{{ r.amount }}
{{ r.status }}
{{ r.date }}
{{ t.tbl_details }}
{{ t.acc_method }}
{{ r.method }}
{{ t.acc_ref }}
{{ r.ref }}
{{ t.acc_fee }}
{{ r.fee }}
{{ t.acc_payer_id }}
{{ r.idnp }}
{{ t.tbl_no_results }}
{{ 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.tbl_demo_title }}{{ t.dr_hint }}
{{ r.name }}
{{ r.code }}
{{ r.status }}
{{ t.tbl_details }} →
{{ dwSel.abbr }}
{{ dwSel.name }}
{{ dwSel.code }}
{{ f.label }} {{ f.value }}
{{ h.text }} {{ h.time }}
{{ 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.tpl1_name }}gds-template-dashboard{{ t.tpl1_used }}
{{ t.tpl1_desc }}
{{ t.tpl2_name }}gds-template-service-form{{ t.tpl2_used }}
{{ t.tpl2_desc }}
{{ t.tpl3_name }}gds-template-records{{ t.tpl3_used }}
{{ t.tpl3_desc }}
{{ t.tpl_note }}

{{ t.demo_title }}

{{ t.demo_sub }}

P
GPay Core
{{ t.nav_demo_sub }}
{{ g.label }}

{{ t.tbl_demo_title }}

{{ t.card_kpi_label }}
2,4M MDL
▲ 12%
{{ t.demo_kpi2 }}
8.412
▲ 4%
{{ r.name }}
{{ r.code }}
{{ r.amount }}
{{ r.status }}
{{ t.tbl_details }} →
{{ t.tbl_no_results }}
{{ dwSel.abbr }}
{{ dwSel.name }}
{{ dwSel.code }}
{{ f.label }} {{ f.value }}
{{ h.text }} {{ h.time }}
/* 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_empty }}
{{ b.num }} {{ b.label }} {{ b.tag }}
{{ 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 }}

gds-core.css
{{ t.imp_pkg1 }}
{{ t.imp_dl }}
README.md
{{ t.imp_pkg2 }}
{{ t.imp_dl }}
@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_level }}
{{ t.ver_when }}
{{ r.level }}
{{ r.text }}
{{ 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 }}
design@esempla.systems

{{ 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_col1 }}
{{ t.mud_col2 }}
{{ r.mud }}
{{ r.gds }}
{{ t.mud_when }}
</> {{ t.rail_title }} {{ railWLabel }}
{{ railCode }}