@discourser/design-system 0.22.0 → 0.22.2
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/dist/{chunk-VJN7TIGL.js → chunk-GLPWI7OF.js} +3 -3
- package/dist/chunk-GLPWI7OF.js.map +1 -0
- package/dist/{chunk-IGCGVSG4.cjs → chunk-NN4YW27E.cjs} +3 -3
- package/dist/chunk-NN4YW27E.cjs.map +1 -0
- package/dist/figma-codex.json +2 -2
- package/dist/index.cjs +4 -4
- package/dist/index.js +1 -1
- package/dist/languages/transform.d.ts +1 -1
- package/dist/preset/index.cjs +2 -2
- package/dist/preset/index.js +1 -1
- package/dist/stories/foundations/components/ColorSwatch.d.ts +1 -15
- package/dist/stories/foundations/components/ColorSwatch.d.ts.map +1 -1
- package/dist/stories/foundations/components/ElevationCard.d.ts +3 -6
- package/dist/stories/foundations/components/ElevationCard.d.ts.map +1 -1
- package/dist/stories/foundations/components/SpacingBox.d.ts.map +1 -1
- package/dist/stories/foundations/components/TypeSpecimen.d.ts +2 -1
- package/dist/stories/foundations/components/TypeSpecimen.d.ts.map +1 -1
- package/package.json +4 -3
- package/src/languages/transform.ts +1 -1
- package/src/stories/foundations/Borders.stories.tsx +138 -0
- package/src/stories/foundations/ColorScale.stories.tsx +737 -0
- package/src/stories/foundations/Colors.mdx +2 -131
- package/src/stories/foundations/Elevation.mdx +26 -45
- package/src/stories/foundations/Motion.stories.tsx +306 -0
- package/src/stories/foundations/Shape.stories.tsx +159 -0
- package/src/stories/foundations/Spacing.mdx +24 -25
- package/src/stories/foundations/Typography.mdx +93 -79
- package/src/stories/foundations/components/ColorSwatch.tsx +72 -109
- package/src/stories/foundations/components/ElevationCard.tsx +19 -22
- package/src/stories/foundations/components/SpacingBox.tsx +15 -2
- package/src/stories/foundations/components/TypeSpecimen.tsx +20 -21
- package/dist/chunk-IGCGVSG4.cjs.map +0 -1
- package/dist/chunk-VJN7TIGL.js.map +0 -1
package/dist/figma-codex.json
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": "1.0.0",
|
|
3
3
|
"packageName": "@discourser/design-system",
|
|
4
|
-
"generatedAt": "2026-03-
|
|
5
|
-
"gitHash": "
|
|
4
|
+
"generatedAt": "2026-03-13T03:32:14.503Z",
|
|
5
|
+
"gitHash": "7c8d515d",
|
|
6
6
|
"figmaFiles": {
|
|
7
7
|
"GaHmFfmvO4loUzuZS4TgEz": {
|
|
8
8
|
"fileKey": "GaHmFfmvO4loUzuZS4TgEz"
|
package/dist/index.cjs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var chunkNN4YW27E_cjs = require('./chunk-NN4YW27E.cjs');
|
|
4
4
|
var chunkWSJLKVXZ_cjs = require('./chunk-WSJLKVXZ.cjs');
|
|
5
5
|
require('./chunk-EARF7VDF.cjs');
|
|
6
6
|
var clsx = require('clsx');
|
|
@@ -11,15 +11,15 @@ function cn(...inputs) {
|
|
|
11
11
|
|
|
12
12
|
Object.defineProperty(exports, "activeLanguage", {
|
|
13
13
|
enumerable: true,
|
|
14
|
-
get: function () { return
|
|
14
|
+
get: function () { return chunkNN4YW27E_cjs.material3Language; }
|
|
15
15
|
});
|
|
16
16
|
Object.defineProperty(exports, "discourserPandaPreset", {
|
|
17
17
|
enumerable: true,
|
|
18
|
-
get: function () { return
|
|
18
|
+
get: function () { return chunkNN4YW27E_cjs.discourserPandaPreset; }
|
|
19
19
|
});
|
|
20
20
|
Object.defineProperty(exports, "transformToPandaTheme", {
|
|
21
21
|
enumerable: true,
|
|
22
|
-
get: function () { return
|
|
22
|
+
get: function () { return chunkNN4YW27E_cjs.transformToPandaTheme; }
|
|
23
23
|
});
|
|
24
24
|
Object.defineProperty(exports, "AbsoluteCenter", {
|
|
25
25
|
enumerable: true,
|
package/dist/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { material3Language as activeLanguage, discourserPandaPreset, transformToPandaTheme } from './chunk-
|
|
1
|
+
export { material3Language as activeLanguage, discourserPandaPreset, transformToPandaTheme } from './chunk-GLPWI7OF.js';
|
|
2
2
|
export { AbsoluteCenter_exports as AbsoluteCenter, Accordion_exports as Accordion, AccountIcon, AddScenarioDialog, AudienceIcon, AudioSpeakerIcon, Avatar_exports as Avatar, Badge, BookmarkPlusIcon, Breadcrumb_exports as Breadcrumb, Button, ButtonGroup, Card_exports as Card, Checkbox_exports as Checkbox, ChevronUpIcon, ClipBoardIcon, ClockIcon, CloseButton_exports as CloseButton, ContentCard_exports as ContentCard, DashboardIcon, Dialog_exports as Dialog, DiscourserLogo, Drawer_exports as Drawer, ExitStudioIcon, GripDotsVerticalIcon, Group_exports as Group, Header, HelpIcon, Icon_exports as Icon, IconButton, Input, InputAddon, InputGroup, MicrophoneIcon, NavigationMenu, NotebookIcon, NotebookPenIcon, PausePlayIcon, PlayIcon, Popover_exports as Popover, Progress_exports as Progress, RadioGroup_exports as RadioGroup, RecordIcon, RepeatQuestionIcon, RightArrowIcon, ScenarioCard, ScenarioIcon, ScenarioQueue, ScenarioSettings, ScrollTextIcon, Select_exports as Select, Skeleton_exports as Skeleton, Slider_exports as Slider, SparklesIcon, SpeechIcon, Spinner, Stepper, StopPlayIcon, Switch_exports as Switch, Tabs_exports as Tabs, Textarea, TimerIcon, Toaster, Tooltip_exports as Tooltip, UserProfileIcon, difficultyColorMap, difficultyLabel, toaster } from './chunk-NU6GI57K.js';
|
|
3
3
|
import './chunk-WR5Z5QMQ.js';
|
|
4
4
|
import { clsx } from 'clsx';
|
package/dist/preset/index.cjs
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var chunkNN4YW27E_cjs = require('../chunk-NN4YW27E.cjs');
|
|
4
4
|
require('../chunk-EARF7VDF.cjs');
|
|
5
5
|
|
|
6
6
|
|
|
7
7
|
|
|
8
8
|
Object.defineProperty(exports, "discourserPandaPreset", {
|
|
9
9
|
enumerable: true,
|
|
10
|
-
get: function () { return
|
|
10
|
+
get: function () { return chunkNN4YW27E_cjs.discourserPandaPreset; }
|
|
11
11
|
});
|
|
12
12
|
//# sourceMappingURL=index.cjs.map
|
|
13
13
|
//# sourceMappingURL=index.cjs.map
|
package/dist/preset/index.js
CHANGED
|
@@ -1,21 +1,7 @@
|
|
|
1
|
-
interface ColorSwatchProps {
|
|
2
|
-
name: string;
|
|
3
|
-
value: string;
|
|
4
|
-
description?: string;
|
|
5
|
-
}
|
|
6
|
-
export declare const ColorSwatch: ({ name, value, description }: ColorSwatchProps) => import("react/jsx-runtime").JSX.Element;
|
|
7
|
-
interface TonalSwatchProps {
|
|
8
|
-
paletteName: string;
|
|
9
|
-
tone: number;
|
|
10
|
-
value: string;
|
|
11
|
-
}
|
|
12
|
-
export declare const TonalSwatch: ({ paletteName, tone, value }: TonalSwatchProps) => import("react/jsx-runtime").JSX.Element;
|
|
13
1
|
interface SemanticSwatchProps {
|
|
14
2
|
name: string;
|
|
15
|
-
lightValue: string;
|
|
16
|
-
darkValue: string;
|
|
17
3
|
description?: string;
|
|
18
4
|
}
|
|
19
|
-
export declare const SemanticSwatch: ({ name,
|
|
5
|
+
export declare const SemanticSwatch: ({ name, description }: SemanticSwatchProps) => import("react/jsx-runtime").JSX.Element;
|
|
20
6
|
export {};
|
|
21
7
|
//# sourceMappingURL=ColorSwatch.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ColorSwatch.d.ts","sourceRoot":"","sources":["../../../../src/stories/foundations/components/ColorSwatch.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ColorSwatch.d.ts","sourceRoot":"","sources":["../../../../src/stories/foundations/components/ColorSwatch.tsx"],"names":[],"mappings":"AAoDA,UAAU,mBAAmB;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,eAAO,MAAM,cAAc,GAAI,uBAAuB,mBAAmB,4CAuExE,CAAC"}
|
|
@@ -1,11 +1,8 @@
|
|
|
1
|
+
export declare const elevationClasses: Record<string, string>;
|
|
1
2
|
interface ElevationCardProps {
|
|
2
3
|
level: string;
|
|
3
|
-
shadow: string;
|
|
4
4
|
}
|
|
5
|
-
export declare const ElevationCard: ({ level
|
|
6
|
-
|
|
7
|
-
elevations: Record<string, string>;
|
|
8
|
-
}
|
|
9
|
-
export declare const ElevationGrid: ({ elevations }: ElevationGridProps) => import("react/jsx-runtime").JSX.Element;
|
|
5
|
+
export declare const ElevationCard: ({ level }: ElevationCardProps) => import("react/jsx-runtime").JSX.Element;
|
|
6
|
+
export declare const ElevationGrid: () => import("react/jsx-runtime").JSX.Element;
|
|
10
7
|
export {};
|
|
11
8
|
//# sourceMappingURL=ElevationCard.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ElevationCard.d.ts","sourceRoot":"","sources":["../../../../src/stories/foundations/components/ElevationCard.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ElevationCard.d.ts","sourceRoot":"","sources":["../../../../src/stories/foundations/components/ElevationCard.tsx"],"names":[],"mappings":"AAIA,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAOnD,CAAC;AAEF,UAAU,kBAAkB;IAC1B,KAAK,EAAE,MAAM,CAAC;CACf;AAED,eAAO,MAAM,aAAa,GAAI,WAAW,kBAAkB,4CAsC1D,CAAC;AAEF,eAAO,MAAM,aAAa,+CAoBzB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SpacingBox.d.ts","sourceRoot":"","sources":["../../../../src/stories/foundations/components/SpacingBox.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"SpacingBox.d.ts","sourceRoot":"","sources":["../../../../src/stories/foundations/components/SpacingBox.tsx"],"names":[],"mappings":"AAgBA,UAAU,eAAe;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf;AAED,eAAO,MAAM,UAAU,GAAI,iBAAiB,eAAe,4CAgE1D,CAAC;AAEF,UAAU,gBAAgB;IACxB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClC;AAED,eAAO,MAAM,WAAW,GAAI,cAAc,gBAAgB,4CAezD,CAAC"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
interface TypeSpecimenProps {
|
|
2
|
+
styleName: string;
|
|
2
3
|
name: string;
|
|
3
4
|
fontSize: string;
|
|
4
5
|
lineHeight: string;
|
|
@@ -7,6 +8,6 @@ interface TypeSpecimenProps {
|
|
|
7
8
|
fontFamily: string;
|
|
8
9
|
sampleText?: string;
|
|
9
10
|
}
|
|
10
|
-
export declare const TypeSpecimen: ({ name, fontSize, lineHeight, fontWeight, letterSpacing, fontFamily, sampleText, }: TypeSpecimenProps) => import("react/jsx-runtime").JSX.Element;
|
|
11
|
+
export declare const TypeSpecimen: ({ styleName: _styleName, name, fontSize, lineHeight, fontWeight, letterSpacing, fontFamily, sampleText, }: TypeSpecimenProps) => import("react/jsx-runtime").JSX.Element;
|
|
11
12
|
export {};
|
|
12
13
|
//# sourceMappingURL=TypeSpecimen.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TypeSpecimen.d.ts","sourceRoot":"","sources":["../../../../src/stories/foundations/components/TypeSpecimen.tsx"],"names":[],"mappings":"AAEA,UAAU,iBAAiB;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,eAAO,MAAM,YAAY,GAAI,
|
|
1
|
+
{"version":3,"file":"TypeSpecimen.d.ts","sourceRoot":"","sources":["../../../../src/stories/foundations/components/TypeSpecimen.tsx"],"names":[],"mappings":"AAEA,UAAU,iBAAiB;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,eAAO,MAAM,YAAY,GAAI,2GAS1B,iBAAiB,4CA6FnB,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@discourser/design-system",
|
|
3
|
-
"version": "0.22.
|
|
3
|
+
"version": "0.22.2",
|
|
4
4
|
"description": "Aesthetic-agnostic design system with Panda CSS and Ark UI",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"publishConfig": {
|
|
@@ -180,13 +180,13 @@
|
|
|
180
180
|
"src"
|
|
181
181
|
],
|
|
182
182
|
"scripts": {
|
|
183
|
-
"dev": "pnpm docs:generate && storybook dev -p 6006",
|
|
183
|
+
"dev": "pnpm build:css && pnpm docs:generate && storybook dev -p 6006",
|
|
184
184
|
"build": "pnpm build:panda && pnpm typecheck && pnpm build:lib && pnpm build:types && pnpm codex:generate",
|
|
185
185
|
"build:panda": "panda codegen",
|
|
186
186
|
"build:css": "panda cssgen --outfile dist/styles.css",
|
|
187
187
|
"build:lib": "tsup",
|
|
188
188
|
"build:types": "tsc --project tsconfig.build.json",
|
|
189
|
-
"build:storybook": "pnpm docs:generate && storybook build",
|
|
189
|
+
"build:storybook": "pnpm build:css && pnpm docs:generate && storybook build",
|
|
190
190
|
"prepare": "panda codegen && husky",
|
|
191
191
|
"lint": "eslint src --ext .ts,.tsx",
|
|
192
192
|
"test": "vitest",
|
|
@@ -210,6 +210,7 @@
|
|
|
210
210
|
"codex:watch": "tsx --watch src/figma-codex/generate.ts",
|
|
211
211
|
"figma:connect": "figma connect publish",
|
|
212
212
|
"figma:connect:dry": "figma connect publish --dry-run",
|
|
213
|
+
"figma:export": "tsx scripts/export-figma-tokens.ts",
|
|
213
214
|
"changeset": "changeset",
|
|
214
215
|
"version": "changeset version",
|
|
215
216
|
"ci:version": "pnpm exec changeset version",
|
|
@@ -84,7 +84,7 @@ function transformTextStyles(language: DesignLanguageContract) {
|
|
|
84
84
|
name,
|
|
85
85
|
{
|
|
86
86
|
value: {
|
|
87
|
-
fontFamily: style.fontFamily || 'body'
|
|
87
|
+
fontFamily: `{fonts.${style.fontFamily || 'body'}}`,
|
|
88
88
|
fontSize: style.fontSize,
|
|
89
89
|
lineHeight: style.lineHeight,
|
|
90
90
|
fontWeight: style.fontWeight,
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
import type { Meta, StoryObj } from '@storybook/react-vite';
|
|
2
|
+
import { css } from 'styled-system/css';
|
|
3
|
+
|
|
4
|
+
const meta = {
|
|
5
|
+
title: 'Foundations/Borders',
|
|
6
|
+
parameters: { layout: 'padded' },
|
|
7
|
+
} satisfies Meta;
|
|
8
|
+
|
|
9
|
+
export default meta;
|
|
10
|
+
type Story = StoryObj<typeof meta>;
|
|
11
|
+
|
|
12
|
+
// ── Pre-declared css() calls — Panda CSS statically extracts these ─────────────
|
|
13
|
+
// (dynamic template literals cannot be extracted; explicit literals are required)
|
|
14
|
+
|
|
15
|
+
const borderBox: Record<string, string> = {
|
|
16
|
+
thin: css({
|
|
17
|
+
borderWidth: 'thin',
|
|
18
|
+
borderStyle: 'solid',
|
|
19
|
+
borderColor: 'neutral.outline.border',
|
|
20
|
+
bg: 'neutral.1',
|
|
21
|
+
}),
|
|
22
|
+
medium: css({
|
|
23
|
+
borderWidth: 'medium',
|
|
24
|
+
borderStyle: 'solid',
|
|
25
|
+
borderColor: 'neutral.outline.border',
|
|
26
|
+
bg: 'neutral.1',
|
|
27
|
+
}),
|
|
28
|
+
thick: css({
|
|
29
|
+
borderWidth: 'thick',
|
|
30
|
+
borderStyle: 'solid',
|
|
31
|
+
borderColor: 'neutral.outline.border',
|
|
32
|
+
bg: 'neutral.1',
|
|
33
|
+
}),
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
// ── Data ────────────────────────────────────────────────────────────────────────
|
|
37
|
+
|
|
38
|
+
const BORDER_WIDTHS: { token: string; value: string }[] = [
|
|
39
|
+
{ token: 'thin', value: '1px' },
|
|
40
|
+
{ token: 'medium', value: '2px' },
|
|
41
|
+
{ token: 'thick', value: '4px' },
|
|
42
|
+
];
|
|
43
|
+
|
|
44
|
+
// ── Shared helpers ──────────────────────────────────────────────────────────────
|
|
45
|
+
|
|
46
|
+
function SectionHeading({
|
|
47
|
+
title,
|
|
48
|
+
description,
|
|
49
|
+
}: {
|
|
50
|
+
title: string;
|
|
51
|
+
description: string;
|
|
52
|
+
}) {
|
|
53
|
+
return (
|
|
54
|
+
<div style={{ marginBottom: '24px' }}>
|
|
55
|
+
<h2
|
|
56
|
+
style={{
|
|
57
|
+
fontSize: '18px',
|
|
58
|
+
fontWeight: '600',
|
|
59
|
+
margin: '0 0 8px',
|
|
60
|
+
fontFamily: 'Inter, system-ui, sans-serif',
|
|
61
|
+
}}
|
|
62
|
+
>
|
|
63
|
+
{title}
|
|
64
|
+
</h2>
|
|
65
|
+
<p
|
|
66
|
+
style={{ fontSize: '14px', color: '#666', margin: 0, lineHeight: 1.5 }}
|
|
67
|
+
>
|
|
68
|
+
{description}
|
|
69
|
+
</p>
|
|
70
|
+
</div>
|
|
71
|
+
);
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
// ── Story 1: Border Width Tokens ───────────────────────────────────────────────
|
|
75
|
+
|
|
76
|
+
export const BorderWidthTokens: Story = {
|
|
77
|
+
name: '1 · Border Width Tokens',
|
|
78
|
+
render: () => (
|
|
79
|
+
<div style={{ display: 'flex', flexDirection: 'column', gap: '24px' }}>
|
|
80
|
+
<SectionHeading
|
|
81
|
+
title="Border Width Tokens"
|
|
82
|
+
description="Three border width tokens for consistent stroke weight across components. Use borderWidth token names in recipes — never raw pixel values."
|
|
83
|
+
/>
|
|
84
|
+
<div
|
|
85
|
+
style={{
|
|
86
|
+
display: 'flex',
|
|
87
|
+
gap: '24px',
|
|
88
|
+
flexWrap: 'wrap',
|
|
89
|
+
alignItems: 'flex-start',
|
|
90
|
+
}}
|
|
91
|
+
>
|
|
92
|
+
{BORDER_WIDTHS.map(({ token, value }) => (
|
|
93
|
+
<div
|
|
94
|
+
key={token}
|
|
95
|
+
style={{
|
|
96
|
+
display: 'flex',
|
|
97
|
+
flexDirection: 'column',
|
|
98
|
+
alignItems: 'center',
|
|
99
|
+
gap: '8px',
|
|
100
|
+
}}
|
|
101
|
+
>
|
|
102
|
+
<div
|
|
103
|
+
className={borderBox[token]}
|
|
104
|
+
style={{
|
|
105
|
+
width: '120px',
|
|
106
|
+
height: '72px',
|
|
107
|
+
borderRadius: '6px',
|
|
108
|
+
flexShrink: 0,
|
|
109
|
+
}}
|
|
110
|
+
title={`borderWidth: ${token}`}
|
|
111
|
+
/>
|
|
112
|
+
<span
|
|
113
|
+
style={{
|
|
114
|
+
fontSize: '11px',
|
|
115
|
+
fontFamily: 'monospace',
|
|
116
|
+
color: '#444',
|
|
117
|
+
textAlign: 'center',
|
|
118
|
+
lineHeight: 1.3,
|
|
119
|
+
}}
|
|
120
|
+
>
|
|
121
|
+
{token}
|
|
122
|
+
</span>
|
|
123
|
+
<span
|
|
124
|
+
style={{
|
|
125
|
+
fontSize: '10px',
|
|
126
|
+
fontFamily: 'monospace',
|
|
127
|
+
color: '#888',
|
|
128
|
+
textAlign: 'center',
|
|
129
|
+
}}
|
|
130
|
+
>
|
|
131
|
+
{value}
|
|
132
|
+
</span>
|
|
133
|
+
</div>
|
|
134
|
+
))}
|
|
135
|
+
</div>
|
|
136
|
+
</div>
|
|
137
|
+
),
|
|
138
|
+
};
|