@devup-ui/components 0.1.39 → 0.1.41

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.
@@ -1,6 +1,6 @@
1
1
  "use client";
2
2
  import { jsxs as c, jsx as o } from "react/jsx-runtime";
3
- import { Flex as x, css as p, Input as k, Box as y, Text as b } from "@devup-ui/react";
3
+ import { Flex as x, Input as k, Box as y, css as p, Text as b } from "@devup-ui/react";
4
4
  import { useId as v, useState as D } from "react";
5
5
  import { CheckIcon as E } from "./CheckIcon.js";
6
6
  function _({
@@ -2,13 +2,13 @@
2
2
  import { jsx as s } from "react/jsx-runtime";
3
3
  import { Flex as f, css as i } from "@devup-ui/react";
4
4
  import F from "clsx";
5
- import { useState as S, createContext as h, useContext as g } from "react";
5
+ import { useState as S, useContext as h, createContext as g } from "react";
6
6
  import { Button as m } from "../Button/index.js";
7
7
  import { Input as C } from "../Input/index.js";
8
8
  import { IconMinus as I } from "./IconMinus.js";
9
9
  import { IconPlus as k } from "./IconPlus.js";
10
- const b = h(null), c = () => {
11
- const e = g(b);
10
+ const b = g(null), c = () => {
11
+ const e = h(b);
12
12
  if (!e)
13
13
  throw new Error("useStepper must be used within a StepperProvider");
14
14
  return e;
@@ -0,0 +1,14 @@
1
+ import { Meta, StoryObj } from '@storybook/react-vite';
2
+ import { Textarea } from './index';
3
+ type Story = StoryObj<typeof meta>;
4
+ declare const meta: Meta<typeof Textarea>;
5
+ export declare const Default: Story;
6
+ export declare const WithDefaultValue: Story;
7
+ export declare const Disabled: Story;
8
+ export declare const DisabledWithValue: Story;
9
+ export declare const Error: Story;
10
+ export declare const ErrorWithMessage: Story;
11
+ export declare const CustomRows: Story;
12
+ export declare const CustomColors: Story;
13
+ export default meta;
14
+ //# sourceMappingURL=Textarea.stories.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Textarea.stories.d.ts","sourceRoot":"","sources":["../../../src/components/Textarea/Textarea.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAA;AAEtD,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AAElC,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAA;AAElC,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,QAAQ,CAU/B,CAAA;AAED,eAAO,MAAM,OAAO,EAAE,KAIrB,CAAA;AAED,eAAO,MAAM,gBAAgB,EAAE,KAK9B,CAAA;AAED,eAAO,MAAM,QAAQ,EAAE,KAKtB,CAAA;AAED,eAAO,MAAM,iBAAiB,EAAE,KAK/B,CAAA;AAED,eAAO,MAAM,KAAK,EAAE,KAKnB,CAAA;AAED,eAAO,MAAM,gBAAgB,EAAE,KAM9B,CAAA;AAED,eAAO,MAAM,UAAU,EAAE,KAKxB,CAAA;AAED,eAAO,MAAM,YAAY,EAAE,KAS1B,CAAA;AAED,eAAe,IAAI,CAAA"}
@@ -0,0 +1,2 @@
1
+ "use client";
2
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const a=require("react/jsx-runtime"),o=require("@devup-ui/react");function g({typography:d,error:t=!1,errorMessage:l,colors:r,disabled:i,className:n,classNames:e,rows:b=3,...s}){return a.jsxs(o.Box,{className:e?.container,display:"inline-block",pos:"relative",selectors:{"&, & *":{boxSizing:"border-box"}},w:"100%",children:[a.jsx(o.Box,{_disabled:{_placeholder:{color:"var(--disabledText, light-dark(#D6D7DE, #373737))"},bg:"var(--disabledBg, light-dark(#F0F0F3, #414244))",borderColor:"var(--border, light-dark(#E4E4E4, #434343))",color:"var(--disabledText, light-dark(#D6D7DE, #373737))",cursor:"not-allowed",opacity:.5},_focus:{borderColor:"var(--primary, light-dark(#674DC7, #8163E1))",boxShadow:"0 0 0 3px var(--focusRing, light-dark(rgba(103, 77, 199, 0.15), rgba(129, 99, 225, 0.25)))",outline:"none"},_hover:!i&&{borderColor:"var(--primary, light-dark(#674DC7, #8163E1))"},_placeholder:{color:"var(--placeholder, light-dark(#A9A8AB, #CBCBCB))"},"aria-invalid":t||void 0,"aria-label":"textarea",as:"textarea",bg:"var(--background, light-dark(#FFFFFF, #2E2E2E))",borderColor:"var(--border, light-dark(#E4E4E4, #434343))",borderRadius:"8px",borderStyle:"solid",borderWidth:"1px",className:`${n||""} ${e?.textarea||""}`.trim(),color:"var(--text, light-dark(#272727, #F6F6F6))",disabled:i,fontSize:["16px",null,null,null,"14px"],lineHeight:"1.5",minH:"80px",p:"12px",rows:b,selectors:{'&[aria-invalid="true"]':{borderColor:"var(--error, light-dark(#D52B2E, #FF5B5E))"},'&[aria-invalid="true"]:focus':{borderColor:"var(--error, light-dark(#D52B2E, #FF5B5E))",boxShadow:"0 0 0 3px var(--focusRing, light-dark(rgba(213, 43, 46, 0.2), rgba(255, 91, 94, 0.4)))"}},styleOrder:1,styleVars:{primary:r?.primary,error:r?.error,text:r?.text,border:r?.border,background:r?.background,placeholder:r?.placeholder,focusRing:r?.focusRing},transition:"border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out",typography:d,w:"100%",...s}),t&&l&&a.jsx(o.Text,{"aria-label":"error-message",bottom:"-8px",className:e?.errorMessage,color:"var(--error, light-dark(#D52B2E, #FF5B5E))",fontSize:"12px",left:"0",pos:"absolute",styleOrder:1,transform:"translateY(100%)",children:l})]})}exports.Textarea=g;
@@ -0,0 +1,24 @@
1
+ import { DevupThemeTypography } from '@devup-ui/react';
2
+ import { ComponentProps } from 'react';
3
+ interface TextareaProps extends ComponentProps<'textarea'> {
4
+ typography?: keyof DevupThemeTypography;
5
+ error?: boolean;
6
+ errorMessage?: string;
7
+ classNames?: {
8
+ container?: string;
9
+ textarea?: string;
10
+ errorMessage?: string;
11
+ };
12
+ colors?: {
13
+ primary?: string;
14
+ error?: string;
15
+ text?: string;
16
+ border?: string;
17
+ background?: string;
18
+ placeholder?: string;
19
+ focusRing?: string;
20
+ };
21
+ }
22
+ export declare function Textarea({ typography, error, errorMessage, colors, disabled, className, classNames, rows, ...props }: TextareaProps): import("react/jsx-runtime").JSX.Element;
23
+ export {};
24
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/Textarea/index.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAO,KAAK,oBAAoB,EAAQ,MAAM,iBAAiB,CAAA;AACtE,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,OAAO,CAAA;AAE3C,UAAU,aAAc,SAAQ,cAAc,CAAC,UAAU,CAAC;IACxD,UAAU,CAAC,EAAE,MAAM,oBAAoB,CAAA;IACvC,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,UAAU,CAAC,EAAE;QACX,SAAS,CAAC,EAAE,MAAM,CAAA;QAClB,QAAQ,CAAC,EAAE,MAAM,CAAA;QACjB,YAAY,CAAC,EAAE,MAAM,CAAA;KACtB,CAAA;IACD,MAAM,CAAC,EAAE;QACP,OAAO,CAAC,EAAE,MAAM,CAAA;QAChB,KAAK,CAAC,EAAE,MAAM,CAAA;QACd,IAAI,CAAC,EAAE,MAAM,CAAA;QACb,MAAM,CAAC,EAAE,MAAM,CAAA;QACf,UAAU,CAAC,EAAE,MAAM,CAAA;QACnB,WAAW,CAAC,EAAE,MAAM,CAAA;QACpB,SAAS,CAAC,EAAE,MAAM,CAAA;KACnB,CAAA;CACF;AAED,wBAAgB,QAAQ,CAAC,EACvB,UAAU,EACV,KAAa,EACb,YAAY,EACZ,MAAM,EACN,QAAQ,EACR,SAAS,EACT,UAAU,EACV,IAAQ,EACR,GAAG,KAAK,EACT,EAAE,aAAa,2CA4Ff"}
@@ -0,0 +1,110 @@
1
+ "use client";
2
+ import { jsxs as g, jsx as i } from "react/jsx-runtime";
3
+ import { Box as t, Text as x } from "@devup-ui/react";
4
+ function c({
5
+ typography: d,
6
+ error: e = !1,
7
+ errorMessage: o,
8
+ colors: r,
9
+ disabled: l,
10
+ className: b,
11
+ classNames: a,
12
+ rows: n = 3,
13
+ ...s
14
+ }) {
15
+ return /* @__PURE__ */ g(
16
+ t,
17
+ {
18
+ className: a?.container,
19
+ display: "inline-block",
20
+ pos: "relative",
21
+ selectors: { "&, & *": { boxSizing: "border-box" } },
22
+ w: "100%",
23
+ children: [
24
+ /* @__PURE__ */ i(
25
+ t,
26
+ {
27
+ _disabled: {
28
+ _placeholder: {
29
+ color: "var(--disabledText, light-dark(#D6D7DE, #373737))"
30
+ },
31
+ bg: "var(--disabledBg, light-dark(#F0F0F3, #414244))",
32
+ borderColor: "var(--border, light-dark(#E4E4E4, #434343))",
33
+ color: "var(--disabledText, light-dark(#D6D7DE, #373737))",
34
+ cursor: "not-allowed",
35
+ opacity: 0.5
36
+ },
37
+ _focus: {
38
+ borderColor: "var(--primary, light-dark(#674DC7, #8163E1))",
39
+ boxShadow: "0 0 0 3px var(--focusRing, light-dark(rgba(103, 77, 199, 0.15), rgba(129, 99, 225, 0.25)))",
40
+ outline: "none"
41
+ },
42
+ _hover: !l && {
43
+ borderColor: "var(--primary, light-dark(#674DC7, #8163E1))"
44
+ },
45
+ _placeholder: {
46
+ color: "var(--placeholder, light-dark(#A9A8AB, #CBCBCB))"
47
+ },
48
+ "aria-invalid": e || void 0,
49
+ "aria-label": "textarea",
50
+ as: "textarea",
51
+ bg: "var(--background, light-dark(#FFFFFF, #2E2E2E))",
52
+ borderColor: "var(--border, light-dark(#E4E4E4, #434343))",
53
+ borderRadius: "8px",
54
+ borderStyle: "solid",
55
+ borderWidth: "1px",
56
+ className: `${b || ""} ${a?.textarea || ""}`.trim(),
57
+ color: "var(--text, light-dark(#272727, #F6F6F6))",
58
+ disabled: l,
59
+ fontSize: ["16px", null, null, null, "14px"],
60
+ lineHeight: "1.5",
61
+ minH: "80px",
62
+ p: "12px",
63
+ rows: n,
64
+ selectors: {
65
+ '&[aria-invalid="true"]': {
66
+ borderColor: "var(--error, light-dark(#D52B2E, #FF5B5E))"
67
+ },
68
+ '&[aria-invalid="true"]:focus': {
69
+ borderColor: "var(--error, light-dark(#D52B2E, #FF5B5E))",
70
+ boxShadow: "0 0 0 3px var(--focusRing, light-dark(rgba(213, 43, 46, 0.2), rgba(255, 91, 94, 0.4)))"
71
+ }
72
+ },
73
+ styleOrder: 1,
74
+ styleVars: {
75
+ primary: r?.primary,
76
+ error: r?.error,
77
+ text: r?.text,
78
+ border: r?.border,
79
+ background: r?.background,
80
+ placeholder: r?.placeholder,
81
+ focusRing: r?.focusRing
82
+ },
83
+ transition: "border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out",
84
+ typography: d,
85
+ w: "100%",
86
+ ...s
87
+ }
88
+ ),
89
+ e && o && /* @__PURE__ */ i(
90
+ x,
91
+ {
92
+ "aria-label": "error-message",
93
+ bottom: "-8px",
94
+ className: a?.errorMessage,
95
+ color: "var(--error, light-dark(#D52B2E, #FF5B5E))",
96
+ fontSize: "12px",
97
+ left: "0",
98
+ pos: "absolute",
99
+ styleOrder: 1,
100
+ transform: "translateY(100%)",
101
+ children: o
102
+ }
103
+ )
104
+ ]
105
+ }
106
+ );
107
+ }
108
+ export {
109
+ c as Textarea
110
+ };
package/dist/index.cjs CHANGED
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const n=require("./components/Button/index.cjs"),o=require("./components/Checkbox/index.cjs"),i=require("./components/Input/index.cjs"),p=require("./components/Radio/index.cjs"),c=require("./components/RadioGroup/index.cjs"),t=require("./components/Select/index.cjs"),e=require("./components/Stepper/index.cjs"),u=require("./components/Toggle/index.cjs"),r=require("./contexts/useSelect.cjs");exports.Button=n.Button;exports.Checkbox=o.Checkbox;exports.Input=i.Input;exports.Radio=p.Radio;exports.RadioGroup=c.RadioGroup;exports.Select=t.Select;exports.SelectContainer=t.SelectContainer;exports.SelectDivider=t.SelectDivider;exports.SelectOption=t.SelectOption;exports.SelectTrigger=t.SelectTrigger;exports.Stepper=e.Stepper;exports.StepperContainer=e.StepperContainer;exports.StepperDecreaseButton=e.StepperDecreaseButton;exports.StepperIncreaseButton=e.StepperIncreaseButton;exports.StepperInput=e.StepperInput;exports.useStepper=e.useStepper;exports.Toggle=u.Toggle;exports.SelectContext=r.SelectContext;exports.useSelect=r.useSelect;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const n=require("./components/Button/index.cjs"),i=require("./components/Checkbox/index.cjs"),o=require("./components/Input/index.cjs"),c=require("./components/Radio/index.cjs"),p=require("./components/RadioGroup/index.cjs"),t=require("./components/Select/index.cjs"),e=require("./components/Stepper/index.cjs"),u=require("./components/Textarea/index.cjs"),S=require("./components/Toggle/index.cjs"),r=require("./contexts/useSelect.cjs");exports.Button=n.Button;exports.Checkbox=i.Checkbox;exports.Input=o.Input;exports.Radio=c.Radio;exports.RadioGroup=p.RadioGroup;exports.Select=t.Select;exports.SelectContainer=t.SelectContainer;exports.SelectDivider=t.SelectDivider;exports.SelectOption=t.SelectOption;exports.SelectTrigger=t.SelectTrigger;exports.Stepper=e.Stepper;exports.StepperContainer=e.StepperContainer;exports.StepperDecreaseButton=e.StepperDecreaseButton;exports.StepperIncreaseButton=e.StepperIncreaseButton;exports.StepperInput=e.StepperInput;exports.useStepper=e.useStepper;exports.Textarea=u.Textarea;exports.Toggle=S.Toggle;exports.SelectContext=r.SelectContext;exports.useSelect=r.useSelect;
package/dist/index.d.ts CHANGED
@@ -5,6 +5,7 @@ export { Radio } from './components/Radio';
5
5
  export { RadioGroup } from './components/RadioGroup';
6
6
  export { Select, SelectContainer, SelectDivider, SelectOption, SelectTrigger, } from './components/Select';
7
7
  export { Stepper, StepperContainer, StepperDecreaseButton, StepperIncreaseButton, StepperInput, useStepper, } from './components/Stepper';
8
+ export { Textarea } from './components/Textarea';
8
9
  export { Toggle } from './components/Toggle';
9
10
  export { SelectContext, useSelect } from './contexts/useSelect';
10
11
  export type { SelectType, SelectValue } from './types/select';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAA;AAC5C,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAA;AAChD,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAA;AAC1C,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAA;AAC1C,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAA;AACpD,OAAO,EACL,MAAM,EACN,eAAe,EACf,aAAa,EACb,YAAY,EACZ,aAAa,GACd,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EACL,OAAO,EACP,gBAAgB,EAChB,qBAAqB,EACrB,qBAAqB,EACrB,YAAY,EACZ,UAAU,GACX,MAAM,sBAAsB,CAAA;AAC7B,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAA;AAC5C,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAA;AAC/D,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAA;AAC5C,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAA;AAChD,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAA;AAC1C,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAA;AAC1C,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAA;AACpD,OAAO,EACL,MAAM,EACN,eAAe,EACf,aAAa,EACb,YAAY,EACZ,aAAa,GACd,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EACL,OAAO,EACP,gBAAgB,EAChB,qBAAqB,EACrB,qBAAqB,EACrB,YAAY,EACZ,UAAU,GACX,MAAM,sBAAsB,CAAA;AAC7B,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAA;AAChD,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAA;AAC5C,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAA;AAC/D,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA"}
package/dist/index.js CHANGED
@@ -1,30 +1,32 @@
1
1
  import { Button as r } from "./components/Button/index.js";
2
2
  import { Checkbox as p } from "./components/Checkbox/index.js";
3
- import { Input as n } from "./components/Input/index.js";
3
+ import { Input as S } from "./components/Input/index.js";
4
4
  import { Radio as c } from "./components/Radio/index.js";
5
5
  import { RadioGroup as m } from "./components/RadioGroup/index.js";
6
- import { Select as l, SelectContainer as u, SelectDivider as a, SelectOption as g, SelectTrigger as s } from "./components/Select/index.js";
7
- import { Stepper as d, StepperContainer as B, StepperDecreaseButton as I, StepperIncreaseButton as D, StepperInput as R, useStepper as T } from "./components/Stepper/index.js";
8
- import { Toggle as h } from "./components/Toggle/index.js";
9
- import { SelectContext as v, useSelect as G } from "./contexts/useSelect.js";
6
+ import { Select as i, SelectContainer as l, SelectDivider as u, SelectOption as g, SelectTrigger as s } from "./components/Select/index.js";
7
+ import { Stepper as d, StepperContainer as B, StepperDecreaseButton as I, StepperIncreaseButton as T, StepperInput as D, useStepper as R } from "./components/Stepper/index.js";
8
+ import { Textarea as h } from "./components/Textarea/index.js";
9
+ import { Toggle as v } from "./components/Toggle/index.js";
10
+ import { SelectContext as O, useSelect as j } from "./contexts/useSelect.js";
10
11
  export {
11
12
  r as Button,
12
13
  p as Checkbox,
13
- n as Input,
14
+ S as Input,
14
15
  c as Radio,
15
16
  m as RadioGroup,
16
- l as Select,
17
- u as SelectContainer,
18
- v as SelectContext,
19
- a as SelectDivider,
17
+ i as Select,
18
+ l as SelectContainer,
19
+ O as SelectContext,
20
+ u as SelectDivider,
20
21
  g as SelectOption,
21
22
  s as SelectTrigger,
22
23
  d as Stepper,
23
24
  B as StepperContainer,
24
25
  I as StepperDecreaseButton,
25
- D as StepperIncreaseButton,
26
- R as StepperInput,
27
- h as Toggle,
28
- G as useSelect,
29
- T as useStepper
26
+ T as StepperIncreaseButton,
27
+ D as StepperInput,
28
+ h as Textarea,
29
+ v as Toggle,
30
+ j as useSelect,
31
+ R as useStepper
30
32
  };
package/package.json CHANGED
@@ -16,7 +16,7 @@
16
16
  "css-in-js-framework",
17
17
  "react"
18
18
  ],
19
- "version": "0.1.39",
19
+ "version": "0.1.41",
20
20
  "type": "module",
21
21
  "scripts": {
22
22
  "lint": "eslint",
@@ -43,27 +43,27 @@
43
43
  ],
44
44
  "types": "./dist/index.d.ts",
45
45
  "dependencies": {
46
- "@devup-ui/react": "^1.0.31",
46
+ "@devup-ui/react": "^1.0.33",
47
47
  "csstype-extra": "latest",
48
- "react": "^19.2.3",
49
- "react-dom": "^19.2.3",
48
+ "react": "^19.2.4",
49
+ "react-dom": "^19.2.4",
50
50
  "clsx": "^2.1"
51
51
  },
52
52
  "devDependencies": {
53
- "@devup-ui/vite-plugin": "^1.0.52",
54
- "@storybook/addon-docs": "^10.1",
55
- "@storybook/addon-onboarding": "^10.1",
56
- "@storybook/react-vite": "^10.1",
53
+ "@devup-ui/vite-plugin": "^1.0.55",
54
+ "@storybook/addon-docs": "^10.2",
55
+ "@storybook/addon-onboarding": "^10.2",
56
+ "@storybook/react-vite": "^10.2",
57
57
  "@types/react": "^19.2",
58
- "eslint-plugin-storybook": "^10.1",
58
+ "eslint-plugin-storybook": "^10.2",
59
59
  "rollup-plugin-preserve-directives": "^0.4",
60
- "storybook": "^10.1",
60
+ "storybook": "^10.2",
61
61
  "typescript": "^5.9",
62
62
  "vite": "^7.3",
63
63
  "vite-plugin-dts": "^4.5"
64
64
  },
65
65
  "peerDependencies": {
66
- "@devup-ui/react": "^1.0.31",
66
+ "@devup-ui/react": "^1.0.33",
67
67
  "csstype-extra": "*",
68
68
  "react": "*"
69
69
  }