@mangtre/ui 0.1.0

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.
Files changed (95) hide show
  1. package/LICENSE +26 -0
  2. package/dist/MangThemeProvider-BqdGKBP2.d.ts +34 -0
  3. package/dist/Money-Dw3GnUvX.d.ts +27 -0
  4. package/dist/actions.d.ts +31 -0
  5. package/dist/actions.js +13 -0
  6. package/dist/ai.d.ts +58 -0
  7. package/dist/ai.js +13 -0
  8. package/dist/analytics.d.ts +40 -0
  9. package/dist/analytics.js +15 -0
  10. package/dist/app.d.ts +24 -0
  11. package/dist/app.js +9 -0
  12. package/dist/catalog.d.ts +76 -0
  13. package/dist/catalog.js +1210 -0
  14. package/dist/charts.d.ts +89 -0
  15. package/dist/charts.js +34 -0
  16. package/dist/chunk-3AL4SUFD.js +301 -0
  17. package/dist/chunk-4XNSYKQE.js +142 -0
  18. package/dist/chunk-5Z4VLQKH.js +43 -0
  19. package/dist/chunk-7P2EQZYD.js +59 -0
  20. package/dist/chunk-7WHNIEDV.js +120 -0
  21. package/dist/chunk-ASZKHSMG.js +82 -0
  22. package/dist/chunk-BCBN2EGH.js +216 -0
  23. package/dist/chunk-BLYAFV45.js +320 -0
  24. package/dist/chunk-DLKEXWPA.js +90 -0
  25. package/dist/chunk-DTASXPTB.js +70 -0
  26. package/dist/chunk-FZRXVRC7.js +63 -0
  27. package/dist/chunk-ID233AGM.js +108 -0
  28. package/dist/chunk-IVYXOKMO.js +74 -0
  29. package/dist/chunk-IX3DYETF.js +61 -0
  30. package/dist/chunk-JJB4PJC3.js +166 -0
  31. package/dist/chunk-K5Q3RCV6.js +119 -0
  32. package/dist/chunk-LNRUPJDF.js +161 -0
  33. package/dist/chunk-LZORNMBL.js +0 -0
  34. package/dist/chunk-OBPXCUVF.js +282 -0
  35. package/dist/chunk-OJX2EIMB.js +145 -0
  36. package/dist/chunk-PPOYMKV3.js +170 -0
  37. package/dist/chunk-PQGUWJG4.js +47 -0
  38. package/dist/chunk-RE7OWRA4.js +187 -0
  39. package/dist/chunk-SJF3CHAW.js +108 -0
  40. package/dist/chunk-UF6ANDJZ.js +112 -0
  41. package/dist/chunk-VGC5DMOM.js +107 -0
  42. package/dist/chunk-VP56Z4BS.js +0 -0
  43. package/dist/chunk-VRD66FIA.js +77 -0
  44. package/dist/chunk-X7T2DJLU.js +113 -0
  45. package/dist/chunk-XPV3OOLU.js +147 -0
  46. package/dist/chunk-YN5O6YL6.js +69 -0
  47. package/dist/chunk-Z4ANGBPC.js +94 -0
  48. package/dist/creator.d.ts +55 -0
  49. package/dist/creator.js +20 -0
  50. package/dist/data-room.d.ts +50 -0
  51. package/dist/data-room.js +17 -0
  52. package/dist/editor.d.ts +32 -0
  53. package/dist/editor.js +14 -0
  54. package/dist/feedback.d.ts +48 -0
  55. package/dist/feedback.js +16 -0
  56. package/dist/forms.d.ts +91 -0
  57. package/dist/forms.js +26 -0
  58. package/dist/handoff.d.ts +37 -0
  59. package/dist/handoff.js +13 -0
  60. package/dist/index.css +2 -0
  61. package/dist/index.d.ts +62 -0
  62. package/dist/index.js +338 -0
  63. package/dist/layout.d.ts +57 -0
  64. package/dist/layout.js +22 -0
  65. package/dist/learning.d.ts +46 -0
  66. package/dist/learning.js +15 -0
  67. package/dist/media.d.ts +48 -0
  68. package/dist/media.js +16 -0
  69. package/dist/monetization.d.ts +30 -0
  70. package/dist/monetization.js +14 -0
  71. package/dist/money.d.ts +45 -0
  72. package/dist/money.js +28 -0
  73. package/dist/navigation.d.ts +36 -0
  74. package/dist/navigation.js +14 -0
  75. package/dist/overlay.d.ts +72 -0
  76. package/dist/overlay.js +20 -0
  77. package/dist/platform.d.ts +94 -0
  78. package/dist/platform.js +42 -0
  79. package/dist/primitives.d.ts +83 -0
  80. package/dist/primitives.js +22 -0
  81. package/dist/privacy.d.ts +28 -0
  82. package/dist/privacy.js +15 -0
  83. package/dist/sandbox.d.ts +40 -0
  84. package/dist/sandbox.js +15 -0
  85. package/dist/settings.d.ts +29 -0
  86. package/dist/settings.js +13 -0
  87. package/dist/surface.d.ts +33 -0
  88. package/dist/surface.js +16 -0
  89. package/dist/theme.css +63 -0
  90. package/dist/theme.d.ts +64 -0
  91. package/dist/theme.js +27 -0
  92. package/dist/tokens.css +119 -0
  93. package/dist/tokens.d.ts +128 -0
  94. package/dist/tokens.js +8 -0
  95. package/package.json +151 -0
package/LICENSE ADDED
@@ -0,0 +1,26 @@
1
+ Măng — Proprietary License
2
+
3
+ Copyright © 2026 RumitX. All rights reserved.
4
+
5
+ This software and its source code (the "Software"), including the Măng shell,
6
+ the @mangtre/* packages, and the bundled mini-apps in this repository, are the
7
+ confidential and proprietary property of RumitX.
8
+
9
+ No license, right, or permission is granted to any person to use, copy, modify,
10
+ merge, publish, distribute, sublicense, sell, or create derivative works of the
11
+ Software, in whole or in part, without the prior written consent of RumitX.
12
+
13
+ Unauthorized copying, distribution, or use of the Software, via any medium, is
14
+ strictly prohibited.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
18
+ FOR A PARTICULAR PURPOSE, AND NONINFRINGEMENT. IN NO EVENT SHALL RUMITX BE LIABLE
19
+ FOR ANY CLAIM, DAMAGES, OR OTHER LIABILITY ARISING FROM, OUT OF, OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
21
+
22
+ Note: this proprietary notice protects the codebase during the early (NOW)
23
+ horizon. When Măng opens to third-party creators, a separate license may be
24
+ issued for the fork-able starter kit.
25
+
26
+ For licensing inquiries: RumitX — https://rumitx.com
@@ -0,0 +1,34 @@
1
+ import * as react from 'react';
2
+ import { ReactNode } from 'react';
3
+ import { Locale } from '@mangtre/core';
4
+
5
+ /** Surface theme. `"auto"` follows the OS (`prefers-color-scheme`). */
6
+ type ThemeMode = "light" | "dark" | "auto";
7
+ /** Control density — affects padding/heights on inputs and buttons. */
8
+ type Density = "comfortable" | "compact" | "touch";
9
+ interface MangThemeContextValue {
10
+ theme: ThemeMode;
11
+ locale: Locale;
12
+ density: Density;
13
+ }
14
+ interface MangThemeProviderProps {
15
+ /** Surface theme for descendants. Default `"light"`. */
16
+ theme?: ThemeMode;
17
+ /** UI language for localized component labels. Default `"vi"`. */
18
+ locale?: Locale;
19
+ /** Control density. Default `"comfortable"`. */
20
+ density?: Density;
21
+ children: ReactNode;
22
+ }
23
+ /** Provides ambient theme/locale/density to `@mangtre/ui` components (context only, no DOM). */
24
+ declare function MangThemeProvider({ theme, locale, density, children, }: MangThemeProviderProps): react.FunctionComponentElement<react.ProviderProps<MangThemeContextValue>>;
25
+ /** The full ambient context (theme + locale + density). */
26
+ declare function useMangTheme(): MangThemeContextValue;
27
+ /** Resolve a component's effective theme: explicit prop wins, else the ambient context. */
28
+ declare function useResolvedTheme(override?: ThemeMode): ThemeMode;
29
+ /** Ambient UI language (for components with built-in labels). */
30
+ declare function useLocale(): Locale;
31
+ /** Ambient control density. */
32
+ declare function useDensity(): Density;
33
+
34
+ export { type Density as D, type MangThemeContextValue as M, type ThemeMode as T, MangThemeProvider as a, type MangThemeProviderProps as b, useLocale as c, useMangTheme as d, useResolvedTheme as e, useDensity as u };
@@ -0,0 +1,27 @@
1
+ import * as react from 'react';
2
+ import { T as ThemeMode } from './MangThemeProvider-BqdGKBP2.js';
3
+
4
+ /** Format an integer amount of VND with vi-VN grouping + the "đ" suffix (e.g. 1500000 → "1.500.000 đ"). */
5
+ declare function formatVnd(amount: number): string;
6
+ type Sign = "auto" | "none" | "positive" | "negative";
7
+ interface VndTextProps {
8
+ amount: number;
9
+ /** Color by sign. `"auto"` colors +/- automatically; `"none"` keeps neutral. Default "none". */
10
+ sign?: Sign;
11
+ theme?: ThemeMode;
12
+ className?: string;
13
+ }
14
+ declare function VndText({ amount, sign, theme, className }: VndTextProps): react.JSX.Element;
15
+ interface MoneyTextProps {
16
+ amount: number;
17
+ /** BCP-47 locale for grouping. Default "vi-VN". */
18
+ locale?: string;
19
+ /** ISO 4217 currency. Default "VND". */
20
+ currency?: string;
21
+ sign?: Sign;
22
+ theme?: ThemeMode;
23
+ className?: string;
24
+ }
25
+ declare function MoneyText({ amount, locale, currency, sign, theme, className, }: MoneyTextProps): react.JSX.Element;
26
+
27
+ export { MoneyText as M, VndText as V, type MoneyTextProps as a, type VndTextProps as b, formatVnd as f };
@@ -0,0 +1,31 @@
1
+ import * as react from 'react';
2
+ import { ButtonHTMLAttributes, ReactNode } from 'react';
3
+ import { T as ThemeMode } from './MangThemeProvider-BqdGKBP2.js';
4
+ import '@mangtre/core';
5
+
6
+ type ButtonVariant = "primary" | "secondary" | "ghost" | "danger";
7
+ type ButtonSize = "sm" | "md" | "lg";
8
+ interface ButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {
9
+ variant?: ButtonVariant;
10
+ size?: ButtonSize;
11
+ /** Stretch to the full width of the container. */
12
+ block?: boolean;
13
+ /** Leading icon/emoji node. */
14
+ icon?: ReactNode;
15
+ theme?: ThemeMode;
16
+ }
17
+ declare function Button({ variant, size, block, icon, theme, className, children, type, ...rest }: ButtonProps): react.JSX.Element;
18
+ interface IconButtonProps extends Omit<ButtonProps, "block" | "icon"> {
19
+ /** Accessible label (required — the button has no visible text). */
20
+ label: string;
21
+ }
22
+ /** Square, icon-only button. `label` is required for accessibility. */
23
+ declare function IconButton({ label, size, variant, className, children, ...rest }: IconButtonProps): react.JSX.Element;
24
+ interface ButtonGroupProps {
25
+ className?: string;
26
+ children?: ReactNode;
27
+ }
28
+ /** Inline row of buttons with consistent gap. */
29
+ declare function ButtonGroup({ className, children }: ButtonGroupProps): react.JSX.Element;
30
+
31
+ export { Button, ButtonGroup, type ButtonGroupProps, type ButtonProps, type ButtonSize, type ButtonVariant, IconButton, type IconButtonProps };
@@ -0,0 +1,13 @@
1
+ import "./chunk-LZORNMBL.js";
2
+ import {
3
+ Button,
4
+ ButtonGroup,
5
+ IconButton
6
+ } from "./chunk-YN5O6YL6.js";
7
+ import "./chunk-3AL4SUFD.js";
8
+ import "./chunk-PPOYMKV3.js";
9
+ export {
10
+ Button,
11
+ ButtonGroup,
12
+ IconButton
13
+ };
package/dist/ai.d.ts ADDED
@@ -0,0 +1,58 @@
1
+ import * as react from 'react';
2
+ import { ReactNode } from 'react';
3
+ import { AIPower, AICapability, Locale } from '@mangtre/core';
4
+ import { T as ThemeMode } from './MangThemeProvider-BqdGKBP2.js';
5
+
6
+ interface PowerPickerProps {
7
+ /** Powers to choose from — pass the ones runnable now (e.g. `ai.powers()` ∩ `status.capabilities`). */
8
+ powers: readonly AIPower[];
9
+ /** The currently selected capability tier (or null before a default is set). */
10
+ value: AICapability | null;
11
+ /** Called with the chosen tier. */
12
+ onChange: (capability: AICapability) => void;
13
+ /** UI language for the localized power labels/descriptions + the group label. */
14
+ locale: Locale;
15
+ /** Disable interaction (e.g. while generating). */
16
+ disabled?: boolean;
17
+ /**
18
+ * Surface theme. Default `"light"` (white/light cards). Use `"dark"` on a dark surface, or
19
+ * `"auto"` to follow the OS (`prefers-color-scheme`). The host picks this from ITS surface.
20
+ */
21
+ theme?: "light" | "dark" | "auto";
22
+ }
23
+ /** The canonical Măng power picker. Renders null when there's nothing to choose (< 2 powers). */
24
+ declare function PowerPicker({ powers, value, onChange, locale, disabled, theme, }: PowerPickerProps): react.JSX.Element | null;
25
+
26
+ interface AiStatusCardProps {
27
+ ready: boolean;
28
+ /** Optional status detail line. */
29
+ detail?: ReactNode;
30
+ locale?: Locale;
31
+ theme?: ThemeMode;
32
+ className?: string;
33
+ }
34
+ declare function AiStatusCard({ ready, detail, locale, theme, className, }: AiStatusCardProps): react.JSX.Element;
35
+ interface AiModelOption {
36
+ id: string;
37
+ name: string;
38
+ /** e.g. size / speed hint. */
39
+ meta?: string;
40
+ }
41
+ interface AiSetupCardProps {
42
+ title?: ReactNode;
43
+ description?: ReactNode;
44
+ /** Recommended models to pull. */
45
+ models?: AiModelOption[];
46
+ /** Called to install the runtime (e.g. open Ollama download). */
47
+ onInstall?: () => void;
48
+ /** Called to download a model by id. */
49
+ onPull?: (id: string) => void;
50
+ /** Progress UI (e.g. a <Progress/>) shown under the models while pulling. */
51
+ progress?: ReactNode;
52
+ locale?: Locale;
53
+ theme?: ThemeMode;
54
+ className?: string;
55
+ }
56
+ declare function AiSetupCard({ title, description, models, onInstall, onPull, progress, locale, theme, className, }: AiSetupCardProps): react.JSX.Element;
57
+
58
+ export { type AiModelOption, AiSetupCard, type AiSetupCardProps, AiStatusCard, type AiStatusCardProps, PowerPicker, type PowerPickerProps };
package/dist/ai.js ADDED
@@ -0,0 +1,13 @@
1
+ import {
2
+ AiSetupCard,
3
+ AiStatusCard,
4
+ PowerPicker
5
+ } from "./chunk-BCBN2EGH.js";
6
+ import "./chunk-YN5O6YL6.js";
7
+ import "./chunk-3AL4SUFD.js";
8
+ import "./chunk-PPOYMKV3.js";
9
+ export {
10
+ AiSetupCard,
11
+ AiStatusCard,
12
+ PowerPicker
13
+ };
@@ -0,0 +1,40 @@
1
+ import * as react from 'react';
2
+ import { Locale } from '@mangtre/core';
3
+ import { T as ThemeMode } from './MangThemeProvider-BqdGKBP2.js';
4
+
5
+ interface Themed {
6
+ theme?: ThemeMode;
7
+ className?: string;
8
+ }
9
+ interface AnalyticsConsentToggleProps extends Themed {
10
+ /** True when analytics is ON (i.e. NOT opted out). */
11
+ enabled: boolean;
12
+ onChange: (enabled: boolean) => void;
13
+ locale?: Locale;
14
+ }
15
+ declare function AnalyticsConsentToggle({ enabled, onChange, locale, theme, className, }: AnalyticsConsentToggleProps): react.JSX.Element;
16
+ interface GateMetBadgeProps extends Themed {
17
+ met: boolean;
18
+ locale?: Locale;
19
+ }
20
+ declare function GateMetBadge({ met, locale, theme, className }: GateMetBadgeProps): react.JSX.Element;
21
+ interface GateReportRow {
22
+ app: string;
23
+ devices: number;
24
+ returning: number;
25
+ }
26
+ interface GateReportProps extends Themed {
27
+ rows: GateReportRow[];
28
+ locale?: Locale;
29
+ }
30
+ declare function GateReport({ rows, locale, theme, className }: GateReportProps): react.JSX.Element;
31
+ interface EventLogRow {
32
+ name: string;
33
+ props?: Record<string, unknown>;
34
+ }
35
+ interface EventLogTableProps extends Themed {
36
+ events: EventLogRow[];
37
+ }
38
+ declare function EventLogTable({ events, theme, className }: EventLogTableProps): react.JSX.Element;
39
+
40
+ export { AnalyticsConsentToggle, type AnalyticsConsentToggleProps, type EventLogRow, EventLogTable, type EventLogTableProps, GateMetBadge, type GateMetBadgeProps, GateReport, type GateReportProps, type GateReportRow };
@@ -0,0 +1,15 @@
1
+ import {
2
+ AnalyticsConsentToggle,
3
+ EventLogTable,
4
+ GateMetBadge,
5
+ GateReport
6
+ } from "./chunk-ID233AGM.js";
7
+ import "./chunk-PQGUWJG4.js";
8
+ import "./chunk-3AL4SUFD.js";
9
+ import "./chunk-PPOYMKV3.js";
10
+ export {
11
+ AnalyticsConsentToggle,
12
+ EventLogTable,
13
+ GateMetBadge,
14
+ GateReport
15
+ };
package/dist/app.d.ts ADDED
@@ -0,0 +1,24 @@
1
+ import * as react from 'react';
2
+ import { CSSProperties, ReactNode } from 'react';
3
+ import { Locale, ThemeTokens } from '@mangtre/core';
4
+ import { T as ThemeMode, D as Density } from './MangThemeProvider-BqdGKBP2.js';
5
+
6
+ interface MangAppProps {
7
+ /** Interior surface theme. Default `"light"` (AD v0.2 §9). */
8
+ theme?: ThemeMode;
9
+ /** UI language for built-in component labels. Pass `sdk.locale`. Default `"vi"`. */
10
+ locale?: Locale;
11
+ /** Control density. Default `"comfortable"`. */
12
+ density?: Density;
13
+ /** Optional runtime accent thread (`sdk.theme`) → CSS vars on the root. */
14
+ sdkTheme?: ThemeTokens;
15
+ /** Mount a `ToastProvider` so `useToast()` works anywhere inside. Default `true`. */
16
+ withToasts?: boolean;
17
+ className?: string;
18
+ style?: CSSProperties;
19
+ children: ReactNode;
20
+ }
21
+ /** Theme/locale provider + a scoped root (+ optional toasts) — the mini-app interior wrapper. */
22
+ declare function MangApp({ theme, locale, density, sdkTheme, withToasts, className, style, children, }: MangAppProps): react.JSX.Element;
23
+
24
+ export { MangApp, type MangAppProps };
package/dist/app.js ADDED
@@ -0,0 +1,9 @@
1
+ import {
2
+ MangApp
3
+ } from "./chunk-7P2EQZYD.js";
4
+ import "./chunk-DTASXPTB.js";
5
+ import "./chunk-3AL4SUFD.js";
6
+ import "./chunk-PPOYMKV3.js";
7
+ export {
8
+ MangApp
9
+ };
@@ -0,0 +1,76 @@
1
+ /**
2
+ * The `@mangtre/ui` component **catalog** — the source-of-truth DATA describing every component:
3
+ * what it is, when to use it, a copy-paste snippet, and its key props. PURE DATA (no JSX) so it
4
+ * diffs cleanly, exports to JSON, and is editable without touching the guide page. The `?guide=1`
5
+ * Creator Guide renders FROM this; adding a component = appending one `CatalogEntry`.
6
+ *
7
+ * Governance + schema: `sot/Mang_UI_Catalog_v0.1.md`. Inventory + phasing: `Mang_UI_Component_Library_v0.1.md`.
8
+ */
9
+ /** Localized text (Vietnamese-first; product docs are VN, code identifiers stay English). */
10
+ interface L10n {
11
+ vi: string;
12
+ en: string;
13
+ }
14
+ /** Lifecycle of a catalogued component. */
15
+ type CatalogStatus = "stable" | "beta" | "stub" | "deprecated";
16
+ /** The phase a component shipped in (mirrors the library roadmap). */
17
+ type CatalogPhase = "P0" | "P1" | "P2";
18
+ /** The 24 component areas — one per `@mangtre/ui` subpath. */
19
+ type CatalogArea = "theme" | "primitives" | "actions" | "forms" | "surface" | "navigation" | "overlay" | "feedback" | "platform" | "charts" | "ai" | "handoff" | "data-room" | "analytics" | "sandbox" | "creator" | "money" | "learning" | "layout" | "media" | "settings" | "privacy" | "editor" | "monetization";
20
+ /** One documented prop (the guidance subset — not the exhaustive TS type). */
21
+ interface CatalogProp {
22
+ name: string;
23
+ type: string;
24
+ required?: boolean;
25
+ default?: string;
26
+ desc: L10n;
27
+ }
28
+ /** A single catalogued component (or tight family rendered together). */
29
+ interface CatalogEntry {
30
+ /** Unique id, `"<area>/<Name>"` (e.g. `"actions/Button"`). */
31
+ id: string;
32
+ area: CatalogArea;
33
+ /** Primary export name (or comma list for a family, e.g. `"Tabs, TabList, Tab, TabPanel"`). */
34
+ name: string;
35
+ /** Where to import from (e.g. `"@mangtre/ui"` or `"@mangtre/ui/charts"`). */
36
+ importPath: string;
37
+ status: CatalogStatus;
38
+ /** Phase it shipped in. */
39
+ since: CatalogPhase;
40
+ /** Per-entry semver — bump when the entry's API/guidance changes (versioning lever). */
41
+ version: string;
42
+ /** Text guidance: what it is + when to use it. */
43
+ summary: L10n;
44
+ /** Copy-paste usage snippet. */
45
+ code: string;
46
+ /** Key props worth documenting (not the full type). */
47
+ props?: CatalogProp[];
48
+ /** Related entry ids. */
49
+ related?: string[];
50
+ }
51
+ /** Ordered area metadata for the guide's table of contents. */
52
+ interface CatalogAreaMeta {
53
+ id: CatalogArea;
54
+ title: L10n;
55
+ /** One-line description of the area. */
56
+ blurb: L10n;
57
+ }
58
+
59
+ /**
60
+ * `@mangtre/ui/catalog` — the component catalog (source-of-truth DATA). The `?guide=1` Creator Guide
61
+ * renders from `CATALOG`; adding a component = appending one `CatalogEntry` in `areas/*`.
62
+ * Schema + governance: `sot/Mang_UI_Catalog_v0.1.md`.
63
+ */
64
+
65
+ /** Catalog data version — bump on any structural/entry change (the versioning lever). */
66
+ declare const CATALOG_VERSION = "0.1.0";
67
+ /** Every catalogued component, in area order. */
68
+ declare const CATALOG: CatalogEntry[];
69
+ /** Ordered area metadata — drives the guide's table of contents. */
70
+ declare const AREAS: CatalogAreaMeta[];
71
+ /** Entries for one area, preserving declared order. */
72
+ declare function entriesByArea(area: CatalogArea): CatalogEntry[];
73
+ /** Look up a single entry by id. */
74
+ declare function getEntry(id: string): CatalogEntry | undefined;
75
+
76
+ export { AREAS, CATALOG, CATALOG_VERSION, type CatalogArea, type CatalogAreaMeta, type CatalogEntry, type CatalogPhase, type CatalogProp, type CatalogStatus, type L10n, entriesByArea, getEntry };