@actioneer/ads 0.5.6 → 0.5.8

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 (149) hide show
  1. package/bin/ads-init.mjs +6 -0
  2. package/components/accordion.js +50 -48
  3. package/components/agent-icon.d.ts +12 -0
  4. package/components/agent-icon.js +135 -121
  5. package/components/ai-elements/chain-of-thought-icon.d.ts +10 -12
  6. package/components/ai-elements/chain-of-thought-icon.js +341 -201
  7. package/components/ai-elements/chain-of-thought.d.ts +2 -2
  8. package/components/ai-elements/chain-of-thought.js +108 -108
  9. package/components/ai-elements/chart.js +16 -14
  10. package/components/ai-elements/inline-citation.js +41 -41
  11. package/components/ai-elements/message.js +4 -4
  12. package/components/ai-elements/queue.js +7 -7
  13. package/components/ai-elements/research-activity.js +114 -114
  14. package/components/ai-elements/shimmer.d.ts +2 -2
  15. package/components/ai-elements/speech-input.js +28 -28
  16. package/components/ai-elements/task-progress.js +26 -16
  17. package/components/ai-elements/task.js +17 -17
  18. package/components/ai-elements/tool.js +6 -6
  19. package/components/ai-elements/transcript.js +6 -5
  20. package/components/ai-elements/voice.js +1 -1
  21. package/components/alert.js +10 -10
  22. package/components/answer-sources.d.ts +42 -0
  23. package/components/answer-sources.js +111 -0
  24. package/components/answer.js +115 -114
  25. package/components/assistant-ui/action-bar.js +94 -48
  26. package/components/assistant-ui/attachment.js +131 -103
  27. package/components/assistant-ui/badge.d.ts +1 -1
  28. package/components/assistant-ui/badge.js +17 -17
  29. package/components/assistant-ui/chain-of-thought.d.ts +1 -1
  30. package/components/assistant-ui/composer-add-context.js +9 -9
  31. package/components/assistant-ui/composer-deep-research.js +5 -5
  32. package/components/assistant-ui/composer-harness.js +12 -9
  33. package/components/assistant-ui/composer-trigger-popover.js +45 -34
  34. package/components/assistant-ui/composer.js +59 -59
  35. package/components/assistant-ui/error.js +14 -14
  36. package/components/assistant-ui/file.d.ts +1 -1
  37. package/components/assistant-ui/image.d.ts +1 -1
  38. package/components/assistant-ui/image.js +113 -103
  39. package/components/assistant-ui/markdown-text.js +18 -18
  40. package/components/assistant-ui/message.js +46 -45
  41. package/components/assistant-ui/quote.js +1 -1
  42. package/components/assistant-ui/reasoning.d.ts +1 -1
  43. package/components/assistant-ui/reasoning.js +66 -77
  44. package/components/assistant-ui/suggestions.js +4 -4
  45. package/components/assistant-ui/thread-context.d.ts +2 -0
  46. package/components/assistant-ui/thread.js +41 -40
  47. package/components/assistant-ui/tool-fallback.js +60 -63
  48. package/components/assistant-ui/tool-group.d.ts +1 -1
  49. package/components/assistant-ui/tool-group.js +36 -42
  50. package/components/audio-waveform.js +25 -24
  51. package/components/autocomplete.d.ts +1 -0
  52. package/components/autocomplete.js +45 -43
  53. package/components/avatar.js +30 -30
  54. package/components/badge.d.ts +1 -1
  55. package/components/breadcrumbs.js +2 -2
  56. package/components/button.d.ts +2 -2
  57. package/components/button.js +22 -20
  58. package/components/card.js +8 -8
  59. package/components/carousel.js +105 -104
  60. package/components/chart.js +9 -7
  61. package/components/checkbox.js +74 -38
  62. package/components/chip.d.ts +1 -1
  63. package/components/code-block.js +3 -3
  64. package/components/collapsible.js +67 -23
  65. package/components/connector-card.js +6 -6
  66. package/components/drawer.d.ts +15 -10
  67. package/components/drawer.js +78 -77
  68. package/components/dropdown.d.ts +3 -1
  69. package/components/dropdown.js +88 -79
  70. package/components/empty-state.d.ts +4 -4
  71. package/components/empty-state.js +7 -7
  72. package/components/field.d.ts +4 -0
  73. package/components/field.js +45 -34
  74. package/components/file-dropzone.js +12 -12
  75. package/components/index.d.ts +4 -0
  76. package/components/index.js +584 -553
  77. package/components/infinite-canvas.js +1 -1
  78. package/components/input-field.js +51 -46
  79. package/components/input.js +20 -20
  80. package/components/link.js +9 -9
  81. package/components/modal.js +105 -73
  82. package/components/navbar.d.ts +1 -1
  83. package/components/navbar.js +1 -1
  84. package/components/number-field.js +38 -29
  85. package/components/page-header.js +12 -12
  86. package/components/pagination.js +19 -19
  87. package/components/panel.js +2 -2
  88. package/components/pixel-blast-svg.js +3 -3
  89. package/components/pixel-icon.d.ts +3 -1
  90. package/components/pixel-icon.js +294 -215
  91. package/components/popover.d.ts +1 -1
  92. package/components/popover.js +66 -64
  93. package/components/progress-circle.js +36 -32
  94. package/components/progress.js +28 -24
  95. package/components/radio.js +59 -49
  96. package/components/resizable-panel.js +1 -1
  97. package/components/reveal.d.ts +2 -2
  98. package/components/ripple.d.ts +3 -3
  99. package/components/scroll-area.js +17 -16
  100. package/components/segmented.d.ts +4 -1
  101. package/components/segmented.js +26 -25
  102. package/components/select.d.ts +2 -0
  103. package/components/select.js +61 -57
  104. package/components/setting-row.js +45 -42
  105. package/components/sidebar.d.ts +2 -2
  106. package/components/sidebar.js +131 -127
  107. package/components/skeleton.js +5 -5
  108. package/components/spinner.d.ts +13 -4
  109. package/components/spinner.js +42 -42
  110. package/components/stepper.js +21 -21
  111. package/components/switch.js +52 -32
  112. package/components/table.d.ts +24 -7
  113. package/components/table.js +457 -220
  114. package/components/tabs.js +149 -137
  115. package/components/textarea.js +1 -2
  116. package/components/toast.js +66 -66
  117. package/components/tooltip.js +2 -2
  118. package/components/tree.js +62 -51
  119. package/components/typography.d.ts +2 -1
  120. package/components/typography.js +33 -32
  121. package/components/ui/button.d.ts +2 -2
  122. package/components/ui/button.js +19 -19
  123. package/components/ui/collapsible.d.ts +1 -5
  124. package/components/ui/dialog.d.ts +3 -3
  125. package/components/ui/dialog.js +95 -58
  126. package/components/ui/tooltip.d.ts +2 -2
  127. package/components/ui/tooltip.js +67 -33
  128. package/components/viz-charts.js +95 -95
  129. package/demo/components/add-to-artifact.js +341 -0
  130. package/demo/lib/artifact-library.js +134 -0
  131. package/fonts/aribau-grotesk-medium.woff2 +0 -0
  132. package/fonts/aribau-grotesk-regular.woff2 +0 -0
  133. package/fonts.css +11 -11
  134. package/hooks/agents-ui/use-agent-audio-visualizer-aura.js +17 -16
  135. package/hooks/agents-ui/use-agent-audio-visualizer-wave.js +21 -20
  136. package/lib/icons.d.ts +12 -0
  137. package/lib/icons.js +107 -104
  138. package/lib/motion.d.ts +42 -39
  139. package/lib/motion.js +112 -52
  140. package/lib/spinner-mark.d.ts +9 -0
  141. package/lib/spinner-mark.js +98 -0
  142. package/llms.txt +69 -26
  143. package/manifest.json +344 -42
  144. package/package.json +1 -1
  145. package/styles.css +175 -161
  146. package/theme.css +104 -128
  147. package/components/ui/collapsible.js +0 -35
  148. package/fonts/aribau-grotesk-500.otf +0 -0
  149. package/fonts/aribau-grotesk-600.woff2 +0 -0
@@ -1,5 +1,5 @@
1
1
  "use client";
2
- import { jsx as r, jsxs as k } from "react/jsx-runtime";
2
+ import { jsx as i, jsxs as k } from "react/jsx-runtime";
3
3
  import * as o from "react";
4
4
  import { createPortal as M } from "react-dom";
5
5
  import { MotionConfig as R, AnimatePresence as E, motion as L } from "motion/react";
@@ -7,7 +7,7 @@ import { cn as c } from "../../lib/cn.js";
7
7
  import { floatVariants as T } from "../../lib/motion.js";
8
8
  import { ArrowRight as P, ArrowLeft as z } from "../../lib/icons.js";
9
9
  import { Badge as S } from "../badge.js";
10
- const F = ({ className: e, ...t }) => /* @__PURE__ */ r(
10
+ const F = ({ className: e, ...t }) => /* @__PURE__ */ i(
11
11
  "span",
12
12
  {
13
13
  className: c("group/citation inline items-center gap-1", e),
@@ -16,7 +16,7 @@ const F = ({ className: e, ...t }) => /* @__PURE__ */ r(
16
16
  ), H = ({
17
17
  className: e,
18
18
  ...t
19
- }) => /* @__PURE__ */ r(
19
+ }) => /* @__PURE__ */ i(
20
20
  "span",
21
21
  {
22
22
  className: c(
@@ -37,7 +37,7 @@ const Q = ({
37
37
  open: t,
38
38
  defaultOpen: s = !1,
39
39
  onOpenChange: n,
40
- openDelay: i = 0,
40
+ openDelay: r = 0,
41
41
  closeDelay: a = 0
42
42
  }) => {
43
43
  const d = t !== void 0, [C, l] = o.useState(s), h = d ? t : C, u = o.useRef(null), f = o.useRef(null), m = o.useRef({}), x = o.useCallback(
@@ -46,8 +46,8 @@ const Q = ({
46
46
  },
47
47
  [d, n]
48
48
  ), p = o.useCallback(() => {
49
- window.clearTimeout(m.current.close), m.current.open = window.setTimeout(() => x(!0), i);
50
- }, [i, x]), w = o.useCallback(() => {
49
+ window.clearTimeout(m.current.close), m.current.open = window.setTimeout(() => x(!0), r);
50
+ }, [r, x]), w = o.useCallback(() => {
51
51
  window.clearTimeout(m.current.open), m.current.close = window.setTimeout(
52
52
  () => x(!1),
53
53
  a + 120
@@ -58,7 +58,7 @@ const Q = ({
58
58
  window.clearTimeout(m.current.open), window.clearTimeout(m.current.close);
59
59
  },
60
60
  []
61
- ), /* @__PURE__ */ r(
61
+ ), /* @__PURE__ */ i(
62
62
  g.Provider,
63
63
  {
64
64
  value: { open: h, triggerRef: u, contentRef: f, handleOpen: p, handleClose: w },
@@ -70,7 +70,7 @@ const Q = ({
70
70
  className: t,
71
71
  ...s
72
72
  }) => {
73
- const { open: n, triggerRef: i, handleOpen: a, handleClose: d } = N(
73
+ const { open: n, triggerRef: r, handleOpen: a, handleClose: d } = N(
74
74
  "InlineCitationCardTrigger"
75
75
  ), C = o.useMemo(() => {
76
76
  if (!e[0]) return "unknown";
@@ -81,10 +81,10 @@ const Q = ({
81
81
  }
82
82
  return e.length > 1 ? `${l} +${e.length - 1}` : l;
83
83
  }, [e]);
84
- return /* @__PURE__ */ r(
84
+ return /* @__PURE__ */ i(
85
85
  S,
86
86
  {
87
- ref: i,
87
+ ref: r,
88
88
  variant: "soft",
89
89
  className: c("ml-1 cursor-default align-middle", t),
90
90
  role: "button",
@@ -104,10 +104,10 @@ const Q = ({
104
104
  children: t,
105
105
  ...s
106
106
  }) => {
107
- const { open: n, triggerRef: i, contentRef: a, handleOpen: d, handleClose: C } = N("InlineCitationCardBody"), [l, h] = o.useState(null);
107
+ const { open: n, triggerRef: r, contentRef: a, handleOpen: d, handleClose: C } = N("InlineCitationCardBody"), [l, h] = o.useState(null);
108
108
  return o.useLayoutEffect(() => {
109
109
  if (!n) return;
110
- const u = i.current;
110
+ const u = r.current;
111
111
  if (!u) return;
112
112
  const f = () => {
113
113
  var b;
@@ -117,8 +117,8 @@ const Q = ({
117
117
  return f(), window.addEventListener("resize", f), window.addEventListener("scroll", f, !0), () => {
118
118
  window.removeEventListener("resize", f), window.removeEventListener("scroll", f, !0);
119
119
  };
120
- }, [n, i]), M(
121
- /* @__PURE__ */ r(R, { reducedMotion: "user", children: /* @__PURE__ */ r(E, { children: n && /* @__PURE__ */ r(
120
+ }, [n, r]), M(
121
+ /* @__PURE__ */ i(R, { reducedMotion: "user", children: /* @__PURE__ */ i(E, { children: n && /* @__PURE__ */ i(
122
122
  L.div,
123
123
  {
124
124
  ref: a,
@@ -160,20 +160,20 @@ const G = ({
160
160
  children: t,
161
161
  ...s
162
162
  }) => {
163
- const [n, i] = o.useState(0), [a, d] = o.useState(0), C = o.useCallback(
164
- () => i((u) => Math.max(0, u - 1)),
163
+ const [n, r] = o.useState(0), [a, d] = o.useState(0), C = o.useCallback(
164
+ () => r((u) => Math.max(0, u - 1)),
165
165
  []
166
166
  ), l = o.useCallback(
167
- () => i((u) => Math.min(Math.max(0, a - 1), u + 1)),
167
+ () => r((u) => Math.min(Math.max(0, a - 1), u + 1)),
168
168
  [a]
169
169
  ), h = o.useCallback((u) => {
170
- d(u), i((f) => Math.min(f, Math.max(0, u - 1)));
170
+ d(u), r((f) => Math.min(f, Math.max(0, u - 1)));
171
171
  }, []);
172
- return /* @__PURE__ */ r(
172
+ return /* @__PURE__ */ i(
173
173
  I.Provider,
174
174
  {
175
175
  value: { index: n, count: a, setCount: h, scrollPrev: C, scrollNext: l },
176
- children: /* @__PURE__ */ r("div", { className: c("w-full", e), ...s, children: t })
176
+ children: /* @__PURE__ */ i("div", { className: c("w-full", e), ...s, children: t })
177
177
  }
178
178
  );
179
179
  }, J = ({
@@ -181,13 +181,13 @@ const G = ({
181
181
  children: t,
182
182
  ...s
183
183
  }) => {
184
- const { index: n, setCount: i } = v(), a = o.Children.count(t);
184
+ const { index: n, setCount: r } = v(), a = o.Children.count(t);
185
185
  return o.useEffect(() => {
186
- i(a);
187
- }, [a, i]), /* @__PURE__ */ r("div", { className: c("overflow-hidden", e), ...s, children: /* @__PURE__ */ r(
186
+ r(a);
187
+ }, [a, r]), /* @__PURE__ */ i("div", { className: c("overflow-hidden", e), ...s, children: /* @__PURE__ */ i(
188
188
  "div",
189
189
  {
190
- className: "flex transition-transform duration-(--duration-normal) ease-out motion-reduce:transition-none",
190
+ className: "flex transition-transform duration-200 ease-out motion-reduce:transition-none",
191
191
  style: { transform: `translateX(-${n * 100}%)` },
192
192
  children: t
193
193
  }
@@ -195,7 +195,7 @@ const G = ({
195
195
  }, K = ({
196
196
  className: e,
197
197
  ...t
198
- }) => /* @__PURE__ */ r(
198
+ }) => /* @__PURE__ */ i(
199
199
  "div",
200
200
  {
201
201
  className: c("w-full shrink-0 space-y-2 p-4", e),
@@ -204,7 +204,7 @@ const G = ({
204
204
  ), O = ({
205
205
  className: e,
206
206
  ...t
207
- }) => /* @__PURE__ */ r(
207
+ }) => /* @__PURE__ */ i(
208
208
  "div",
209
209
  {
210
210
  className: c(
@@ -218,8 +218,8 @@ const G = ({
218
218
  className: t,
219
219
  ...s
220
220
  }) => {
221
- const { index: n, count: i } = v();
222
- return /* @__PURE__ */ r(
221
+ const { index: n, count: r } = v();
222
+ return /* @__PURE__ */ i(
223
223
  "div",
224
224
  {
225
225
  className: c(
@@ -227,7 +227,7 @@ const G = ({
227
227
  t
228
228
  ),
229
229
  ...s,
230
- children: e ?? `${i === 0 ? 0 : n + 1}/${i}`
230
+ children: e ?? `${r === 0 ? 0 : n + 1}/${r}`
231
231
  }
232
232
  );
233
233
  }, y = c(
@@ -240,7 +240,7 @@ const G = ({
240
240
  ...t
241
241
  }) => {
242
242
  const { scrollPrev: s, index: n } = v();
243
- return /* @__PURE__ */ r(
243
+ return /* @__PURE__ */ i(
244
244
  "button",
245
245
  {
246
246
  type: "button",
@@ -249,24 +249,24 @@ const G = ({
249
249
  onClick: s,
250
250
  className: c(y, e),
251
251
  ...t,
252
- children: /* @__PURE__ */ r(z, { className: "size-4" })
252
+ children: /* @__PURE__ */ i(z, { className: "size-4" })
253
253
  }
254
254
  );
255
255
  }, _ = ({
256
256
  className: e,
257
257
  ...t
258
258
  }) => {
259
- const { scrollNext: s, index: n, count: i } = v();
260
- return /* @__PURE__ */ r(
259
+ const { scrollNext: s, index: n, count: r } = v();
260
+ return /* @__PURE__ */ i(
261
261
  "button",
262
262
  {
263
263
  type: "button",
264
264
  "aria-label": "Next source",
265
- disabled: n >= i - 1,
265
+ disabled: n >= r - 1,
266
266
  onClick: s,
267
267
  className: c(y, e),
268
268
  ...t,
269
- children: /* @__PURE__ */ r(P, { className: "size-4" })
269
+ children: /* @__PURE__ */ i(P, { className: "size-4" })
270
270
  }
271
271
  );
272
272
  }, D = ({
@@ -274,18 +274,18 @@ const G = ({
274
274
  url: t,
275
275
  description: s,
276
276
  className: n,
277
- children: i,
277
+ children: r,
278
278
  ...a
279
279
  }) => /* @__PURE__ */ k("div", { className: c("space-y-1", n), ...a, children: [
280
- e && /* @__PURE__ */ r("p", { className: "truncate font-normal text-base leading-tight text-primary", children: e }),
281
- t && /* @__PURE__ */ r("p", { className: "truncate break-all text-xs text-tertiary", children: t }),
282
- s && /* @__PURE__ */ r("p", { className: "line-clamp-3 text-base leading-relaxed text-secondary", children: s }),
283
- i
280
+ e && /* @__PURE__ */ i("p", { className: "truncate font-normal text-base leading-tight text-primary", children: e }),
281
+ t && /* @__PURE__ */ i("p", { className: "truncate break-all text-xs text-tertiary", children: t }),
282
+ s && /* @__PURE__ */ i("p", { className: "line-clamp-3 text-base leading-relaxed text-secondary", children: s }),
283
+ r
284
284
  ] }), ee = ({
285
285
  children: e,
286
286
  className: t,
287
287
  ...s
288
- }) => /* @__PURE__ */ r(
288
+ }) => /* @__PURE__ */ i(
289
289
  "blockquote",
290
290
  {
291
291
  className: c(
@@ -100,9 +100,9 @@ const S = i(
100
100
  "size-full text-base leading-relaxed text-foreground",
101
101
  "[&>*:first-child]:mt-0 [&>*:last-child]:mb-0",
102
102
  "[&_p]:my-2",
103
- "[&_h1]:mt-4 [&_h1]:mb-2 [&_h1]:text-xl [&_h1]:font-semibold [&_h1]:tracking-tight",
104
- "[&_h2]:mt-4 [&_h2]:mb-2 [&_h2]:text-lg [&_h2]:font-semibold [&_h2]:tracking-tight",
105
- "[&_h3]:mt-3 [&_h3]:mb-1 [&_h3]:text-base [&_h3]:font-semibold",
103
+ "[&_h1]:mt-4 [&_h1]:mb-2 [&_h1]:text-xl [&_h1]:font-medium [&_h1]:tracking-tight",
104
+ "[&_h2]:mt-4 [&_h2]:mb-2 [&_h2]:text-lg [&_h2]:font-medium [&_h2]:tracking-tight",
105
+ "[&_h3]:mt-3 [&_h3]:mb-1 [&_h3]:text-base [&_h3]:font-medium",
106
106
  "[&_ul]:my-2 [&_ul]:list-disc [&_ul]:pl-5 [&_ol]:my-2 [&_ol]:list-decimal [&_ol]:pl-5 [&_li]:my-1",
107
107
  "[&_a]:font-normal [&_a]:underline [&_a]:underline-offset-2",
108
108
  "[&_code]:rounded-xs [&_code]:bg-muted [&_code]:px-1 [&_code]:py-0.5 [&_code]:text-xs [&_code]:tabular-nums",
@@ -111,7 +111,7 @@ const S = i(
111
111
  // <Table> nested in a response keeps its own padding and per-column
112
112
  // alignment — unscoped, these descendant rules silently beat it.
113
113
  "[&_table:not([data-slot=table])]:my-3 [&_table:not([data-slot=table])]:w-full [&_table:not([data-slot=table])]:text-xs",
114
- "[&_table:not([data-slot=table])_th]:px-2 [&_table:not([data-slot=table])_th]:py-1.5 [&_table:not([data-slot=table])_th]:text-left [&_table:not([data-slot=table])_th]:font-semibold",
114
+ "[&_table:not([data-slot=table])_th]:px-2 [&_table:not([data-slot=table])_th]:py-1.5 [&_table:not([data-slot=table])_th]:text-left [&_table:not([data-slot=table])_th]:font-medium",
115
115
  "[&_table:not([data-slot=table])_td]:px-2 [&_table:not([data-slot=table])_td]:py-1.5",
116
116
  "[&_table:not([data-slot=table])_thead]:text-secondary"
117
117
  ), W = o.memo(
@@ -1,5 +1,5 @@
1
1
  "use client";
2
- import { jsx as s, jsxs as r } from "react/jsx-runtime";
2
+ import { jsx as s, jsxs as n } from "react/jsx-runtime";
3
3
  import { cn as a } from "../../lib/cn.js";
4
4
  import { Button as c } from "../button.js";
5
5
  import { Collapsible as l, CollapsibleContent as u, CollapsibleTrigger as m } from "../collapsible.js";
@@ -98,7 +98,7 @@ const y = ({ className: e, ...t }) => /* @__PURE__ */ s(
98
98
  children: e,
99
99
  className: t,
100
100
  ...o
101
- }) => /* @__PURE__ */ r(
101
+ }) => /* @__PURE__ */ n(
102
102
  "span",
103
103
  {
104
104
  className: a(
@@ -135,7 +135,7 @@ const y = ({ className: e, ...t }) => /* @__PURE__ */ s(
135
135
  {
136
136
  type: "button",
137
137
  className: a(
138
- "group flex w-full items-center justify-between rounded-md bg-muted px-3 py-2 text-left font-normal text-base text-secondary transition-colors hover:bg-fill",
138
+ "group flex w-full items-center justify-between rounded-md bg-muted px-3 py-2 text-left font-normal text-base text-secondary transition-colors hover:bg-accent",
139
139
  t
140
140
  ),
141
141
  ...o,
@@ -145,18 +145,18 @@ const y = ({ className: e, ...t }) => /* @__PURE__ */ s(
145
145
  count: e,
146
146
  label: t,
147
147
  icon: o,
148
- className: n,
148
+ className: r,
149
149
  ...i
150
- }) => /* @__PURE__ */ r("span", { className: a("flex items-center gap-2", n), ...i, children: [
150
+ }) => /* @__PURE__ */ n("span", { className: a("flex items-center gap-2", r), ...i, children: [
151
151
  /* @__PURE__ */ s(
152
152
  p,
153
153
  {
154
154
  strokeWidth: 2,
155
- className: "size-4 shrink-0 transition-transform group-data-[state=closed]:-rotate-90"
155
+ className: "size-4 shrink-0 transition-transform group-data-[state=closed]:-rotate-90 motion-reduce:transition-none"
156
156
  }
157
157
  ),
158
158
  o,
159
- /* @__PURE__ */ r("span", { children: [
159
+ /* @__PURE__ */ n("span", { children: [
160
160
  e,
161
161
  " ",
162
162
  t