@jonsoc/ui 1.1.34 → 1.1.49

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 (201) hide show
  1. package/package.json +28 -24
  2. package/script/colors.txt +234 -234
  3. package/src/assets/favicon/favicon-v3.svg +6 -6
  4. package/src/assets/favicon/favicon.svg +6 -6
  5. package/src/assets/favicon/site.webmanifest +21 -21
  6. package/src/assets/icons/file-types/auto_light.svg +12 -12
  7. package/src/assets/icons/file-types/cursor.svg +1 -1
  8. package/src/assets/icons/file-types/cursor_light.svg +1 -1
  9. package/src/assets/icons/file-types/drone_light.svg +4 -4
  10. package/src/assets/icons/file-types/folder-admin-open.svg +6 -6
  11. package/src/assets/icons/file-types/folder-admin.svg +6 -6
  12. package/src/assets/icons/file-types/folder-circleci-open.svg +7 -7
  13. package/src/assets/icons/file-types/folder-circleci.svg +7 -7
  14. package/src/assets/icons/file-types/folder-flow-open.svg +6 -6
  15. package/src/assets/icons/file-types/folder-flow.svg +6 -6
  16. package/src/assets/icons/file-types/folder-gh-workflows-open.svg +6 -6
  17. package/src/assets/icons/file-types/folder-gh-workflows.svg +6 -6
  18. package/src/assets/icons/file-types/folder-github-open.svg +6 -6
  19. package/src/assets/icons/file-types/folder-github.svg +6 -6
  20. package/src/assets/icons/file-types/folder-intellij-open.svg +39 -39
  21. package/src/assets/icons/file-types/folder-intellij.svg +39 -39
  22. package/src/assets/icons/file-types/folder-macos-open.svg +6 -6
  23. package/src/assets/icons/file-types/folder-macos.svg +6 -6
  24. package/src/assets/icons/file-types/folder-next-open.svg +6 -6
  25. package/src/assets/icons/file-types/folder-next.svg +6 -6
  26. package/src/assets/icons/file-types/folder-nuxt-open.svg +6 -6
  27. package/src/assets/icons/file-types/folder-nuxt.svg +6 -6
  28. package/src/assets/icons/file-types/folder-open.svg +5 -5
  29. package/src/assets/icons/file-types/folder-scripts-open.svg +6 -6
  30. package/src/assets/icons/file-types/folder-scripts.svg +6 -6
  31. package/src/assets/icons/file-types/folder-target-open.svg +10 -10
  32. package/src/assets/icons/file-types/folder-target.svg +10 -10
  33. package/src/assets/icons/file-types/folder-turborepo-open.svg +15 -15
  34. package/src/assets/icons/file-types/folder-turborepo.svg +15 -15
  35. package/src/assets/icons/file-types/folder-vercel-open.svg +5 -5
  36. package/src/assets/icons/file-types/folder-vercel.svg +5 -5
  37. package/src/assets/icons/file-types/folder.svg +5 -5
  38. package/src/assets/icons/file-types/go_gopher.svg +35 -35
  39. package/src/assets/icons/file-types/nano-staged_light.svg +4 -4
  40. package/src/assets/icons/file-types/opa.svg +9 -9
  41. package/src/assets/icons/file-types/quarto.svg +5 -5
  42. package/src/assets/icons/file-types/rome.svg +6 -6
  43. package/src/assets/icons/file-types/stitches_light.svg +10 -10
  44. package/src/assets/icons/file-types/stylelint_light.svg +13 -13
  45. package/src/assets/icons/file-types/systemd.svg +0 -0
  46. package/src/assets/icons/file-types/systemd_light.svg +0 -0
  47. package/src/assets/icons/file-types/unocss.svg +5 -5
  48. package/src/assets/icons/file-types/vlang.svg +6 -6
  49. package/src/assets/icons/provider/abacus.svg +14 -14
  50. package/src/assets/icons/provider/aihubmix.svg +3 -3
  51. package/src/assets/icons/provider/alibaba-cn.svg +3 -3
  52. package/src/assets/icons/provider/alibaba.svg +3 -3
  53. package/src/assets/icons/provider/amazon-bedrock.svg +3 -3
  54. package/src/assets/icons/provider/anthropic.svg +2 -2
  55. package/src/assets/icons/provider/azure-cognitive-services.svg +24 -24
  56. package/src/assets/icons/provider/azure.svg +3 -3
  57. package/src/assets/icons/provider/bailing.svg +3 -3
  58. package/src/assets/icons/provider/baseten.svg +3 -3
  59. package/src/assets/icons/provider/cerebras.svg +4 -4
  60. package/src/assets/icons/provider/chutes.svg +24 -24
  61. package/src/assets/icons/provider/cloudflare-ai-gateway.svg +4 -4
  62. package/src/assets/icons/provider/cloudflare-workers-ai.svg +4 -4
  63. package/src/assets/icons/provider/cohere.svg +5 -5
  64. package/src/assets/icons/provider/cortecs.svg +24 -24
  65. package/src/assets/icons/provider/deepinfra.svg +4 -4
  66. package/src/assets/icons/provider/deepseek.svg +3 -3
  67. package/src/assets/icons/provider/fastrouter.svg +3 -3
  68. package/src/assets/icons/provider/fireworks-ai.svg +3 -3
  69. package/src/assets/icons/provider/friendli.svg +3 -3
  70. package/src/assets/icons/provider/github-copilot.svg +3 -3
  71. package/src/assets/icons/provider/github-models.svg +3 -3
  72. package/src/assets/icons/provider/google-vertex-anthropic.svg +24 -24
  73. package/src/assets/icons/provider/google-vertex.svg +10 -10
  74. package/src/assets/icons/provider/google.svg +3 -3
  75. package/src/assets/icons/provider/groq.svg +3 -3
  76. package/src/assets/icons/provider/helicone.svg +6 -6
  77. package/src/assets/icons/provider/huggingface.svg +3 -3
  78. package/src/assets/icons/provider/iflowcn.svg +3 -3
  79. package/src/assets/icons/provider/inception.svg +4 -4
  80. package/src/assets/icons/provider/inference.svg +3 -3
  81. package/src/assets/icons/provider/io-net.svg +5 -5
  82. package/src/assets/icons/provider/kimi-for-coding.svg +3 -3
  83. package/src/assets/icons/provider/llama.svg +3 -3
  84. package/src/assets/icons/provider/lmstudio.svg +24 -24
  85. package/src/assets/icons/provider/lucidquery.svg +3 -3
  86. package/src/assets/icons/provider/minimax-cn.svg +3 -3
  87. package/src/assets/icons/provider/minimax.svg +3 -3
  88. package/src/assets/icons/provider/mistral.svg +3 -3
  89. package/src/assets/icons/provider/modelscope.svg +5 -5
  90. package/src/assets/icons/provider/moonshotai-cn.svg +3 -3
  91. package/src/assets/icons/provider/moonshotai.svg +3 -3
  92. package/src/assets/icons/provider/morph.svg +24 -24
  93. package/src/assets/icons/provider/nano-gpt.svg +2 -2
  94. package/src/assets/icons/provider/nebius.svg +4 -4
  95. package/src/assets/icons/provider/nvidia.svg +3 -3
  96. package/src/assets/icons/provider/ollama-cloud.svg +7 -7
  97. package/src/assets/icons/provider/openai.svg +3 -3
  98. package/src/assets/icons/provider/opencode.svg +4 -4
  99. package/src/assets/icons/provider/openrouter.svg +8 -8
  100. package/src/assets/icons/provider/ovhcloud.svg +3 -3
  101. package/src/assets/icons/provider/perplexity.svg +3 -3
  102. package/src/assets/icons/provider/poe.svg +7 -7
  103. package/src/assets/icons/provider/requesty.svg +24 -24
  104. package/src/assets/icons/provider/sap-ai-core.svg +24 -24
  105. package/src/assets/icons/provider/scaleway.svg +5 -5
  106. package/src/assets/icons/provider/siliconflow-cn.svg +3 -3
  107. package/src/assets/icons/provider/siliconflow.svg +3 -3
  108. package/src/assets/icons/provider/submodel.svg +3 -3
  109. package/src/assets/icons/provider/synthetic.svg +24 -24
  110. package/src/assets/icons/provider/togetherai.svg +4 -4
  111. package/src/assets/icons/provider/upstage.svg +24 -24
  112. package/src/assets/icons/provider/v0.svg +3 -3
  113. package/src/assets/icons/provider/venice.svg +4 -4
  114. package/src/assets/icons/provider/vercel.svg +3 -3
  115. package/src/assets/icons/provider/vultr.svg +6 -6
  116. package/src/assets/icons/provider/wandb.svg +24 -24
  117. package/src/assets/icons/provider/xai.svg +3 -3
  118. package/src/assets/icons/provider/xiaomi.svg +3 -3
  119. package/src/assets/icons/provider/zai-coding-plan.svg +3 -3
  120. package/src/assets/icons/provider/zai.svg +3 -3
  121. package/src/assets/icons/provider/zenmux.svg +3 -3
  122. package/src/assets/icons/provider/zhipuai-coding-plan.svg +3 -3
  123. package/src/assets/icons/provider/zhipuai.svg +3 -3
  124. package/src/components/accordion.css +98 -98
  125. package/src/components/avatar.css +41 -41
  126. package/src/components/basic-tool.css +97 -97
  127. package/src/components/button.css +165 -165
  128. package/src/components/card.css +29 -29
  129. package/src/components/checkbox.css +121 -121
  130. package/src/components/code.css +4 -4
  131. package/src/components/collapsible.css +97 -97
  132. package/src/components/dialog.css +185 -185
  133. package/src/components/diff-changes.css +41 -41
  134. package/src/components/diff.css +35 -35
  135. package/src/components/dropdown-menu.css +125 -125
  136. package/src/components/file-icon.css +5 -5
  137. package/src/components/file-icons/sprite.svg +11707 -11707
  138. package/src/components/hover-card.css +61 -61
  139. package/src/components/icon-button.css +140 -140
  140. package/src/components/icon.css +34 -34
  141. package/src/components/image-preview.css +63 -63
  142. package/src/components/inline-input.css +17 -17
  143. package/src/components/keybind.css +18 -18
  144. package/src/components/list.css +278 -278
  145. package/src/components/logo.css +4 -4
  146. package/src/components/markdown.css +209 -209
  147. package/src/components/message-nav.css +122 -122
  148. package/src/components/message-part.css +803 -803
  149. package/src/components/popover.css +98 -98
  150. package/src/components/progress-circle.css +12 -12
  151. package/src/components/provider-icon.css +5 -5
  152. package/src/components/provider-icons/sprite.svg +882 -882
  153. package/src/components/radio-group.css +157 -157
  154. package/src/components/resize-handle.css +46 -46
  155. package/src/components/select.css +202 -202
  156. package/src/components/session-review.css +323 -323
  157. package/src/components/session-turn.css +514 -514
  158. package/src/components/spinner.css +6 -6
  159. package/src/components/sticky-accordion-header.css +16 -16
  160. package/src/components/switch.css +132 -132
  161. package/src/components/tabs.css +359 -359
  162. package/src/components/tag.css +37 -37
  163. package/src/components/text-field.css +134 -134
  164. package/src/components/toast.css +205 -205
  165. package/src/components/tooltip.css +74 -74
  166. package/src/components/typewriter.css +14 -14
  167. package/src/styles/animations.css +130 -130
  168. package/src/styles/base.css +393 -393
  169. package/src/styles/colors.css +592 -592
  170. package/src/styles/index.css +52 -52
  171. package/src/styles/tailwind/colors.css +244 -244
  172. package/src/styles/tailwind/index.css +72 -72
  173. package/src/styles/tailwind/utilities.css +113 -113
  174. package/src/styles/theme.css +592 -592
  175. package/src/styles/utilities.css +131 -131
  176. package/src/assets/fonts/cascadia-code-nerd-font-bold.woff2 +0 -1
  177. package/src/assets/fonts/cascadia-code-nerd-font.woff2 +0 -1
  178. package/src/assets/fonts/fira-code-nerd-font-bold.woff2 +0 -1
  179. package/src/assets/fonts/fira-code-nerd-font.woff2 +0 -1
  180. package/src/assets/fonts/geist-mono-bold.woff2 +0 -1
  181. package/src/assets/fonts/geist-mono-medium.woff2 +0 -1
  182. package/src/assets/fonts/geist-mono.woff2 +0 -1
  183. package/src/assets/fonts/hack-nerd-font-bold.woff2 +0 -1
  184. package/src/assets/fonts/hack-nerd-font.woff2 +0 -1
  185. package/src/assets/fonts/ibm-plex-mono-bold.woff2 +0 -1
  186. package/src/assets/fonts/ibm-plex-mono-medium.woff2 +0 -1
  187. package/src/assets/fonts/ibm-plex-mono.woff2 +0 -1
  188. package/src/assets/fonts/inconsolata-nerd-font-bold.woff2 +0 -1
  189. package/src/assets/fonts/inconsolata-nerd-font.woff2 +0 -1
  190. package/src/assets/fonts/intel-one-mono-nerd-font-bold.woff2 +0 -1
  191. package/src/assets/fonts/intel-one-mono-nerd-font.woff2 +0 -1
  192. package/src/assets/fonts/jetbrains-mono-nerd-font-bold.woff2 +0 -1
  193. package/src/assets/fonts/jetbrains-mono-nerd-font.woff2 +0 -1
  194. package/src/assets/fonts/meslo-lgs-nerd-font-bold.woff2 +0 -1
  195. package/src/assets/fonts/meslo-lgs-nerd-font.woff2 +0 -1
  196. package/src/assets/fonts/roboto-mono-nerd-font-bold.woff2 +0 -1
  197. package/src/assets/fonts/roboto-mono-nerd-font.woff2 +0 -1
  198. package/src/assets/fonts/source-code-pro-nerd-font-bold.woff2 +0 -1
  199. package/src/assets/fonts/source-code-pro-nerd-font.woff2 +0 -1
  200. package/src/assets/fonts/ubuntu-mono-nerd-font-bold.woff2 +0 -1
  201. package/src/assets/fonts/ubuntu-mono-nerd-font.woff2 +0 -1
@@ -1,35 +1,35 @@
1
- [data-component="diff"] {
2
- content-visibility: auto;
3
-
4
- [data-slot="diff-hunk-separator-line-number"] {
5
- position: sticky;
6
- left: 0;
7
- background-color: var(--surface-diff-hidden-strong);
8
- z-index: 2;
9
- display: flex;
10
- align-items: center;
11
- justify-content: center;
12
-
13
- [data-slot="diff-hunk-separator-line-number-icon"] {
14
- aspect-ratio: 1;
15
- width: 24px;
16
- height: 24px;
17
- color: var(--icon-strong-base);
18
- }
19
- }
20
- [data-slot="diff-hunk-separator-content"] {
21
- position: sticky;
22
- background-color: var(--surface-diff-hidden-base);
23
- color: var(--text-base);
24
- width: var(--diffs-column-content-width);
25
- left: var(--diffs-column-number-width);
26
- padding-left: 8px;
27
- user-select: none;
28
- cursor: default;
29
- text-align: left;
30
-
31
- [data-slot="diff-hunk-separator-content-span"] {
32
- mix-blend-mode: var(--text-mix-blend-mode);
33
- }
34
- }
35
- }
1
+ [data-component="diff"] {
2
+ content-visibility: auto;
3
+
4
+ [data-slot="diff-hunk-separator-line-number"] {
5
+ position: sticky;
6
+ left: 0;
7
+ background-color: var(--surface-diff-hidden-strong);
8
+ z-index: 2;
9
+ display: flex;
10
+ align-items: center;
11
+ justify-content: center;
12
+
13
+ [data-slot="diff-hunk-separator-line-number-icon"] {
14
+ aspect-ratio: 1;
15
+ width: 24px;
16
+ height: 24px;
17
+ color: var(--icon-strong-base);
18
+ }
19
+ }
20
+ [data-slot="diff-hunk-separator-content"] {
21
+ position: sticky;
22
+ background-color: var(--surface-diff-hidden-base);
23
+ color: var(--text-base);
24
+ width: var(--diffs-column-content-width);
25
+ left: var(--diffs-column-number-width);
26
+ padding-left: 8px;
27
+ user-select: none;
28
+ cursor: default;
29
+ text-align: left;
30
+
31
+ [data-slot="diff-hunk-separator-content-span"] {
32
+ mix-blend-mode: var(--text-mix-blend-mode);
33
+ }
34
+ }
35
+ }
@@ -1,125 +1,125 @@
1
- [data-component="dropdown-menu-content"],
2
- [data-component="dropdown-menu-sub-content"] {
3
- min-width: 8rem;
4
- overflow: hidden;
5
- border-radius: var(--radius-md);
6
- border: 1px solid color-mix(in oklch, var(--border-base) 50%, transparent);
7
- background-clip: padding-box;
8
- background-color: var(--surface-raised-stronger-non-alpha);
9
- padding: 4px;
10
- box-shadow: var(--shadow-md);
11
- z-index: 50;
12
- transform-origin: var(--kb-menu-content-transform-origin);
13
-
14
- &:focus,
15
- &:focus-visible {
16
- outline: none;
17
- }
18
-
19
- &[data-closed] {
20
- animation: dropdown-menu-close 0.15s ease-out;
21
- }
22
-
23
- &[data-expanded] {
24
- animation: dropdown-menu-open 0.15s ease-out;
25
- }
26
- }
27
-
28
- [data-component="dropdown-menu-content"],
29
- [data-component="dropdown-menu-sub-content"] {
30
- [data-slot="dropdown-menu-item"],
31
- [data-slot="dropdown-menu-checkbox-item"],
32
- [data-slot="dropdown-menu-radio-item"],
33
- [data-slot="dropdown-menu-sub-trigger"] {
34
- position: relative;
35
- display: flex;
36
- align-items: center;
37
- gap: 8px;
38
- padding: 4px 8px;
39
- border-radius: var(--radius-sm);
40
- cursor: default;
41
- user-select: none;
42
- outline: none;
43
-
44
- font-family: var(--font-family-sans);
45
- font-size: var(--font-size-small);
46
- font-weight: var(--font-weight-medium);
47
- line-height: var(--line-height-large);
48
- letter-spacing: var(--letter-spacing-normal);
49
- color: var(--text-strong);
50
-
51
- &[data-highlighted] {
52
- background: var(--surface-raised-base-hover);
53
- }
54
-
55
- &[data-disabled] {
56
- color: var(--text-weak);
57
- pointer-events: none;
58
- }
59
- }
60
-
61
- [data-slot="dropdown-menu-sub-trigger"] {
62
- &[data-expanded] {
63
- background: var(--surface-raised-base-hover);
64
- }
65
- }
66
-
67
- [data-slot="dropdown-menu-item-indicator"] {
68
- display: flex;
69
- align-items: center;
70
- justify-content: center;
71
- width: 16px;
72
- height: 16px;
73
- }
74
-
75
- [data-slot="dropdown-menu-item-label"] {
76
- flex: 1;
77
- }
78
-
79
- [data-slot="dropdown-menu-item-description"] {
80
- font-size: var(--font-size-x-small);
81
- color: var(--text-weak);
82
- }
83
-
84
- [data-slot="dropdown-menu-separator"] {
85
- height: 1px;
86
- margin: 4px -4px;
87
- border-top-color: var(--border-weak-base);
88
- }
89
-
90
- [data-slot="dropdown-menu-group-label"] {
91
- padding: 4px 8px;
92
- font-family: var(--font-family-sans);
93
- font-size: var(--font-size-x-small);
94
- font-weight: var(--font-weight-medium);
95
- line-height: var(--line-height-large);
96
- letter-spacing: var(--letter-spacing-normal);
97
- color: var(--text-weak);
98
- }
99
-
100
- [data-slot="dropdown-menu-arrow"] {
101
- fill: var(--surface-raised-stronger-non-alpha);
102
- }
103
- }
104
-
105
- @keyframes dropdown-menu-open {
106
- from {
107
- opacity: 0;
108
- transform: scale(0.96);
109
- }
110
- to {
111
- opacity: 1;
112
- transform: scale(1);
113
- }
114
- }
115
-
116
- @keyframes dropdown-menu-close {
117
- from {
118
- opacity: 1;
119
- transform: scale(1);
120
- }
121
- to {
122
- opacity: 0;
123
- transform: scale(0.96);
124
- }
125
- }
1
+ [data-component="dropdown-menu-content"],
2
+ [data-component="dropdown-menu-sub-content"] {
3
+ min-width: 8rem;
4
+ overflow: hidden;
5
+ border-radius: var(--radius-md);
6
+ border: 1px solid color-mix(in oklch, var(--border-base) 50%, transparent);
7
+ background-clip: padding-box;
8
+ background-color: var(--surface-raised-stronger-non-alpha);
9
+ padding: 4px;
10
+ box-shadow: var(--shadow-md);
11
+ z-index: 50;
12
+ transform-origin: var(--kb-menu-content-transform-origin);
13
+
14
+ &:focus,
15
+ &:focus-visible {
16
+ outline: none;
17
+ }
18
+
19
+ &[data-closed] {
20
+ animation: dropdown-menu-close 0.15s ease-out;
21
+ }
22
+
23
+ &[data-expanded] {
24
+ animation: dropdown-menu-open 0.15s ease-out;
25
+ }
26
+ }
27
+
28
+ [data-component="dropdown-menu-content"],
29
+ [data-component="dropdown-menu-sub-content"] {
30
+ [data-slot="dropdown-menu-item"],
31
+ [data-slot="dropdown-menu-checkbox-item"],
32
+ [data-slot="dropdown-menu-radio-item"],
33
+ [data-slot="dropdown-menu-sub-trigger"] {
34
+ position: relative;
35
+ display: flex;
36
+ align-items: center;
37
+ gap: 8px;
38
+ padding: 4px 8px;
39
+ border-radius: var(--radius-sm);
40
+ cursor: default;
41
+ user-select: none;
42
+ outline: none;
43
+
44
+ font-family: var(--font-family-sans);
45
+ font-size: var(--font-size-small);
46
+ font-weight: var(--font-weight-medium);
47
+ line-height: var(--line-height-large);
48
+ letter-spacing: var(--letter-spacing-normal);
49
+ color: var(--text-strong);
50
+
51
+ &[data-highlighted] {
52
+ background: var(--surface-raised-base-hover);
53
+ }
54
+
55
+ &[data-disabled] {
56
+ color: var(--text-weak);
57
+ pointer-events: none;
58
+ }
59
+ }
60
+
61
+ [data-slot="dropdown-menu-sub-trigger"] {
62
+ &[data-expanded] {
63
+ background: var(--surface-raised-base-hover);
64
+ }
65
+ }
66
+
67
+ [data-slot="dropdown-menu-item-indicator"] {
68
+ display: flex;
69
+ align-items: center;
70
+ justify-content: center;
71
+ width: 16px;
72
+ height: 16px;
73
+ }
74
+
75
+ [data-slot="dropdown-menu-item-label"] {
76
+ flex: 1;
77
+ }
78
+
79
+ [data-slot="dropdown-menu-item-description"] {
80
+ font-size: var(--font-size-x-small);
81
+ color: var(--text-weak);
82
+ }
83
+
84
+ [data-slot="dropdown-menu-separator"] {
85
+ height: 1px;
86
+ margin: 4px -4px;
87
+ border-top-color: var(--border-weak-base);
88
+ }
89
+
90
+ [data-slot="dropdown-menu-group-label"] {
91
+ padding: 4px 8px;
92
+ font-family: var(--font-family-sans);
93
+ font-size: var(--font-size-x-small);
94
+ font-weight: var(--font-weight-medium);
95
+ line-height: var(--line-height-large);
96
+ letter-spacing: var(--letter-spacing-normal);
97
+ color: var(--text-weak);
98
+ }
99
+
100
+ [data-slot="dropdown-menu-arrow"] {
101
+ fill: var(--surface-raised-stronger-non-alpha);
102
+ }
103
+ }
104
+
105
+ @keyframes dropdown-menu-open {
106
+ from {
107
+ opacity: 0;
108
+ transform: scale(0.96);
109
+ }
110
+ to {
111
+ opacity: 1;
112
+ transform: scale(1);
113
+ }
114
+ }
115
+
116
+ @keyframes dropdown-menu-close {
117
+ from {
118
+ opacity: 1;
119
+ transform: scale(1);
120
+ }
121
+ to {
122
+ opacity: 0;
123
+ transform: scale(0.96);
124
+ }
125
+ }
@@ -1,5 +1,5 @@
1
- [data-component="file-icon"] {
2
- flex-shrink: 0;
3
- width: 16px;
4
- height: 16px;
5
- }
1
+ [data-component="file-icon"] {
2
+ flex-shrink: 0;
3
+ width: 16px;
4
+ height: 16px;
5
+ }