Commercial registration
Register a new establishment, update its activities, or renew its record. The service completes in one session and issues the certificate as a PDF.
- Fee
- SAR 200
- Duration
- 3 working days
- Channel
- Online
Installation
Add three packages, import the styles once, and wrap your app in the provider. Then tune the whole system - palette, radius, typography, dark mode, direction - from one layer of CSS variables.
dev-dga targets modern React and any bundler that can import a CSS file.
react and react-dom 19 are peer dependencies - the components use the React 19 runtime.
Next.js, Vite, Remix - any setup where you can import a stylesheet. No CSS-in-JS runtime is involved.
Full types ship with the package. TypeScript is recommended but not required.
Three packages: the React components, the compiled CSS, and the design tokens. Install all three together.
The CSS package is a peer dependency of the React package - install it explicitly, not transitively.
Import the stylesheet a single time at the root of your app (e.g. your root layout or entry file). It ships the reset, tokens, dark theme, and every component style.
Because the design system lives in @layer ddga-base / ddga-components, any unlayered rule of yours overrides it without !important.
@dev-dga/css is plain CSS in two cascade layers, ddga-base and ddga-components. Tailwind is optional. Use component props for a component’s internals, and utilities or your own CSS for the layout around them. Restyling a component’s internals with utility classes is brittle: cascade-layer order, not specificity, decides which rule wins.
Both Tailwind majors get the DGA scale as utilities through a token bridge: bg-primary, text-ink, text-ink-secondary, rounded-lg, shadow-md, text-display-md, max-w-dga, and every palette step (bg-sa-600, border-gray-200). Every value is a var(--ddga-*) reference, so DgaProvider themes and dark mode flow through the utilities.
Import the stylesheet once and compose the components. Style the layout around them with your own CSS.
Install @dev-dga/tokens so the preset import is explicit:
Add the preset to your Tailwind config:
Layer the stylesheets in this order:
The order statement must come first, and the @layer tailwind-base wrap is mandatory. An unlayered @tailwind base (preflight sets border-width: 0 on every element) beats every layered rule and strips the border from every component. The library declares its own two layers at the top of its stylesheet, so an order statement placed after the import sorts tailwind-base above the components.
Opacity modifiers on bridge colors (bg-primary/50) need v4. Tailwind v3 skips them for var() values.
No config file and no @source needed. Preflight is skipped; the library reset covers it.
To add preflight, import it into the base layer. The order statement keeps base below ddga-base:
The bridge keeps Tailwind’s own palette and scales. To keep only the DGA tokens (strict mode), reset the namespaces before the bridge import, not after it:
Rules for both majors
This card is bridge utilities only: no library component and no custom CSS. Switch dark mode or the brand palette and every utility re-tones, because each one resolves a --ddga-* variable.
Register a new establishment, update its activities, or renew its record. The service completes in one session and issues the certificate as a PDF.
Source
DgaProvider supplies direction, dark mode, the brand theme, and the portal root that overlays (modals, tooltips, toasts) render into. Mount it once, near the root, above everything that uses the library.
DgaProvider props
| Prop | Type | Default | What it controls |
|---|---|---|---|
dir | 'ltr' | 'rtl' | 'ltr' | Layout direction. Mirrors the whole tree via logical properties. |
mode | 'light' | 'dark' | 'light' | Color mode. Applies the dark token set on the provider root. |
theme | DgaTheme | saGreen | Brand theme - a palette name, a CSS color, or a full triplet. |
locale | string | - | BCP-47 locale forwarded to date- and number-aware components. |
as | ElementType | 'div' | The element the provider renders as (e.g. render on <body>). |
The whole system re-tones from one value. Pass theme.primary in any of three forms - hover and active states are derived automatically with color-mix().
One of saGreen, info, success, warning, error, gray.
A hex, rgb, or oklch string. Hover and active are derived for you.
Full control via { base, hover, active, foreground } when you need exact values.
Every color, radius, space, font, and shadow is a --ddga-* CSS variable declared in @layer ddga-base. Redeclare one anywhere - globally on :root, or scoped to a subtree - and the system follows. No build step, no Sass.
Token groups
| Group | Example variables | Controls |
|---|---|---|
| Color | --ddga-color-primary · --ddga-color-background · --ddga-text-primary · --ddga-color-border | Surfaces, text, borders, and semantic colors. |
| Radius | --ddga-radius-sm · --ddga-radius-md · --ddga-radius-lg · --ddga-radius-full | Corner rounding across every component. |
| Spacing | --ddga-space-1 … --ddga-space-16 | The spacing scale used for padding and gaps. |
| Typography | --ddga-font-ar · --ddga-font-mono · --ddga-font-size-* · --ddga-font-weight-* | Font families, sizes, and weights. |
| Shadow | --ddga-shadow-xs … --ddga-shadow-3xl | Elevation for cards, overlays, and popovers. |
| Charts | --ddga-chart-1 … --ddga-chart-6 | The categorical palette for data visualization. |
Scope overrides to a subtree by setting the variables on any wrapper element - the cascade does the rest, in light and dark.
A quick taste - tweak a few tokens and watch the preview re-tone. For complete control over all 188 tokens, open the full Theme Studio.
Manage how your profile appears across every government service.
Your changes are saved automatically.
This is a preview. The Theme Studio gives you every --ddga-* token - all the color scales, radius, spacing, typography, and shadows - with live search and one-click export.
Open the full Theme StudioYour overrides
Paste these into a CSS file loaded after @dev-dga/css (e.g. your globals.css). They override the tokens every component reads - put them on :root for the whole app, or on any element to theme a subtree. Only the values you change appear here.
Dark mode is a curated token set, not a mechanical inversion. Drive it with the provider’s mode prop, or by toggling data-theme="dark" on a wrapper. Apply it before first paint (as this site does) to avoid a flash.
Set dir="rtl" and the entire layout mirrors through logical properties - no per-component work. IBM Plex Sans Arabic covers Arabic and Latin from one family, so mixed content stays consistent.
You’re set up. Here’s where to go from here: