@morscherlab/mint-sdk 1.0.0-beta.3 → 1.0.0-beta.4

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 (165) hide show
  1. package/README.md +9 -2
  2. package/dist/__tests__/composables/experiment-utils.test.d.ts +1 -0
  3. package/dist/__tests__/composables/useApi.test.d.ts +1 -0
  4. package/dist/components/AppContainer.vue.d.ts +1 -1
  5. package/dist/components/AppLayout.vue.d.ts +20 -1
  6. package/dist/components/AppSidebar.vue.d.ts +56 -4
  7. package/dist/components/AppTopBar.vue.d.ts +7 -25
  8. package/dist/components/BioTemplateExperimentWorkspaceView.vue.d.ts +3 -1
  9. package/dist/components/BioTemplatePackWorkspaceView.vue.d.ts +1 -0
  10. package/dist/components/BioTemplatePresetWorkspaceView.vue.d.ts +5 -0
  11. package/dist/components/ComponentBindingRenderer.vue.d.ts +44 -0
  12. package/dist/components/ControlWorkspaceView.vue.d.ts +24 -7
  13. package/dist/components/DoseDesignWorkspaceView.vue.d.ts +149 -0
  14. package/dist/components/ExperimentTimeline.vue.d.ts +1 -1
  15. package/dist/components/FormBuilder.vue.d.ts +9 -9
  16. package/dist/components/PlateMapEditor.vue.d.ts +1 -1
  17. package/dist/components/PluginWorkspaceView.vue.d.ts +310 -0
  18. package/dist/components/SettingsModal.vue.d.ts +1 -1
  19. package/dist/components/WellPlate.vue.d.ts +2 -2
  20. package/dist/components/index.d.ts +3 -12
  21. package/dist/components/index.js +3 -3
  22. package/dist/components/{AppPageSelector.vue.d.ts → internal/AppPageSelectorInternal.vue.d.ts} +1 -1
  23. package/dist/components/{AppPillNav.vue.d.ts → internal/AppPillNavInternal.vue.d.ts} +3 -1
  24. package/dist/components/{CalendarGridPanel.vue.d.ts → internal/CalendarGridPanelInternal.vue.d.ts} +1 -1
  25. package/dist/components/internal/FormSectionRenderer.vue.d.ts +4 -4
  26. package/dist/components/{WellEditPopup.vue.d.ts → internal/WellEditPopupInternal.vue.d.ts} +1 -1
  27. package/dist/{components-D_Sr0adg.js → components-BkGF4B4y.js} +4484 -3967
  28. package/dist/components-BkGF4B4y.js.map +1 -0
  29. package/dist/composables/experiment-utils.d.ts +8 -0
  30. package/dist/composables/index.d.ts +5 -7
  31. package/dist/composables/index.js +4 -4
  32. package/dist/composables/useAppExperiment.d.ts +31 -2
  33. package/dist/composables/useBioTemplateComponents.d.ts +5 -3
  34. package/dist/composables/useBioTemplatePackWorkspace.d.ts +3 -2
  35. package/dist/composables/useBioTemplatePresetWorkspace.d.ts +6 -5
  36. package/dist/composables/useBioTemplateWorkspace.d.ts +5 -4
  37. package/dist/composables/useControlSchema.d.ts +43 -21
  38. package/dist/composables/usePluginClient.d.ts +5 -2
  39. package/dist/{composables-C3dpXQN5.js → composables-CHsME9H1.js} +40 -28
  40. package/dist/composables-CHsME9H1.js.map +1 -0
  41. package/dist/index.d.ts +5 -12
  42. package/dist/index.js +5 -5
  43. package/dist/install.js +2 -2
  44. package/dist/styles.css +3625 -3651
  45. package/dist/templates/componentBindings.d.ts +13 -0
  46. package/dist/templates/index.d.ts +3 -3
  47. package/dist/templates/index.js +2 -2
  48. package/dist/{templates-50NPjaxL.js → templates-B5jmTWuk.js} +111 -56
  49. package/dist/templates-B5jmTWuk.js.map +1 -0
  50. package/dist/types/components.d.ts +6 -25
  51. package/dist/types/index.d.ts +1 -1
  52. package/dist/{useScheduleDrag-D4oWdh41.js → useScheduleDrag-BgzpQT53.js} +160 -117
  53. package/dist/useScheduleDrag-BgzpQT53.js.map +1 -0
  54. package/package.json +1 -1
  55. package/src/__tests__/components/ActionItem.test.ts +6 -6
  56. package/src/__tests__/components/AppLayout.test.ts +44 -0
  57. package/src/__tests__/components/AppPageSelector.test.ts +8 -8
  58. package/src/__tests__/components/AppPillNav.test.ts +53 -6
  59. package/src/__tests__/components/AppSidebar.test.ts +126 -0
  60. package/src/__tests__/components/AppToastContainer.test.ts +0 -11
  61. package/src/__tests__/components/AppTopBar.test.ts +182 -119
  62. package/src/__tests__/components/BioTemplateExperimentWorkspaceView.test.ts +7 -1
  63. package/src/__tests__/components/BioTemplatePackWorkspaceView.test.ts +15 -1
  64. package/src/__tests__/components/BioTemplatePresetWorkspaceView.test.ts +26 -1
  65. package/src/__tests__/components/CalendarGridPanel.test.ts +3 -3
  66. package/src/__tests__/components/ComponentBindingRenderer.test.ts +161 -0
  67. package/src/__tests__/components/ControlWorkspaceView.test.ts +134 -63
  68. package/src/__tests__/components/DateTimePicker.test.ts +2 -2
  69. package/src/__tests__/components/DoseDesignWorkspaceView.test.ts +185 -0
  70. package/src/__tests__/components/PluginWorkspaceView.test.ts +548 -0
  71. package/src/__tests__/composables/experiment-utils.test.ts +30 -0
  72. package/src/__tests__/composables/useApi.test.ts +30 -0
  73. package/src/__tests__/composables/useAppExperiment.test.ts +100 -1
  74. package/src/__tests__/composables/useBioTemplatePackWorkspace.test.ts +6 -3
  75. package/src/__tests__/composables/useBioTemplatePresetWorkspace.test.ts +6 -6
  76. package/src/__tests__/composables/useBioTemplateWorkspace.test.ts +6 -1
  77. package/src/__tests__/composables/useControlSchema.test.ts +150 -36
  78. package/src/__tests__/composables/usePluginClient.test.ts +99 -2
  79. package/src/__tests__/docs/frontendDocsCatalog.test.ts +120 -25
  80. package/src/__tests__/templates/templates.test.ts +12 -0
  81. package/src/components/AppAvatarMenu.vue +3 -3
  82. package/src/components/AppLayout.story.vue +39 -0
  83. package/src/components/AppLayout.vue +83 -2
  84. package/src/components/AppPluginSwitcher.vue +5 -5
  85. package/src/components/AppSidebar.story.vue +113 -5
  86. package/src/components/AppSidebar.vue +144 -24
  87. package/src/components/AppTopBar.story.vue +2 -5
  88. package/src/components/AppTopBar.vue +35 -425
  89. package/src/components/BioTemplateExperimentWorkspaceView.story.vue +2 -2
  90. package/src/components/BioTemplateExperimentWorkspaceView.vue +6 -0
  91. package/src/components/BioTemplatePackWorkspaceView.story.vue +4 -4
  92. package/src/components/BioTemplatePackWorkspaceView.vue +1 -0
  93. package/src/components/BioTemplatePresetWorkspaceView.story.vue +14 -2
  94. package/src/components/BioTemplatePresetWorkspaceView.vue +11 -2
  95. package/src/components/BioTemplateRenderer.vue +15 -227
  96. package/src/components/ComponentBindingRenderer.story.vue +57 -0
  97. package/src/components/ComponentBindingRenderer.vue +308 -0
  98. package/src/components/ControlWorkspaceView.story.vue +20 -9
  99. package/src/components/ControlWorkspaceView.vue +43 -12
  100. package/src/components/DatePicker.vue +2 -2
  101. package/src/components/DateTimePicker.vue +2 -2
  102. package/src/components/DoseDesignWorkspaceView.story.vue +77 -0
  103. package/src/components/DoseDesignWorkspaceView.vue +255 -0
  104. package/src/components/ExperimentPopover.vue +2 -6
  105. package/src/components/ExperimentSelectorModal.vue +6 -5
  106. package/src/components/FormBuilder.story.vue +190 -0
  107. package/src/components/PluginWorkspaceView.story.vue +334 -0
  108. package/src/components/PluginWorkspaceView.vue +708 -0
  109. package/src/components/SettingsModal.story.vue +87 -0
  110. package/src/components/WellPlate.vue +2 -2
  111. package/src/components/index.ts +3 -12
  112. package/src/components/{AppPageSelector.vue → internal/AppPageSelectorInternal.vue} +9 -9
  113. package/src/components/internal/AppPillNavInternal.vue +194 -0
  114. package/src/components/{CalendarGridPanel.vue → internal/CalendarGridPanelInternal.vue} +1 -1
  115. package/src/components/{WellEditPopup.vue → internal/WellEditPopupInternal.vue} +3 -3
  116. package/src/composables/experiment-utils.ts +26 -0
  117. package/src/composables/index.ts +21 -7
  118. package/src/composables/useApi.ts +9 -2
  119. package/src/composables/useAppExperiment.ts +85 -13
  120. package/src/composables/useBioTemplateComponents.ts +12 -0
  121. package/src/composables/useBioTemplatePackWorkspace.ts +6 -2
  122. package/src/composables/useBioTemplatePresetWorkspace.ts +10 -21
  123. package/src/composables/useBioTemplateWorkspace.ts +6 -4
  124. package/src/composables/useControlSchema.ts +157 -69
  125. package/src/composables/usePluginClient.ts +50 -9
  126. package/src/index.ts +6 -563
  127. package/src/styles/components/app-layout.css +82 -0
  128. package/src/styles/components/app-pill-nav.css +70 -0
  129. package/src/styles/components/app-sidebar.css +119 -0
  130. package/src/styles/components/app-top-bar.css +0 -235
  131. package/src/styles/index.css +0 -1
  132. package/src/templates/componentBindings.ts +38 -0
  133. package/src/templates/index.ts +4 -0
  134. package/src/types/components.ts +6 -31
  135. package/src/types/index.ts +2 -6
  136. package/dist/__tests__/composables/usePluginApi.test.d.ts +0 -13
  137. package/dist/components/FormFieldRenderer.vue.d.ts +0 -28
  138. package/dist/components/FormSection.vue.d.ts +0 -30
  139. package/dist/components/GroupingModal.vue.d.ts +0 -12
  140. package/dist/components/SettingsButton.vue.d.ts +0 -30
  141. package/dist/components/ToastNotification.vue.d.ts +0 -2
  142. package/dist/components-D_Sr0adg.js.map +0 -1
  143. package/dist/composables/usePluginApi.d.ts +0 -22
  144. package/dist/composables-C3dpXQN5.js.map +0 -1
  145. package/dist/templates-50NPjaxL.js.map +0 -1
  146. package/dist/useScheduleDrag-D4oWdh41.js.map +0 -1
  147. package/src/__tests__/components/FormCompatibility.test.ts +0 -94
  148. package/src/__tests__/components/GroupingModal.test.ts +0 -73
  149. package/src/__tests__/components/SettingsButton.test.ts +0 -44
  150. package/src/__tests__/composables/usePluginApi.test.ts +0 -81
  151. package/src/components/AppPillNav.vue +0 -71
  152. package/src/components/FormFieldRenderer.vue +0 -35
  153. package/src/components/FormSection.vue +0 -37
  154. package/src/components/GroupingModal.story.vue +0 -52
  155. package/src/components/GroupingModal.vue +0 -61
  156. package/src/components/SettingsButton.story.vue +0 -58
  157. package/src/components/SettingsButton.vue +0 -64
  158. package/src/components/ToastNotification.vue +0 -9
  159. package/src/composables/usePluginApi.ts +0 -32
  160. package/src/styles/components/settings-button.css +0 -31
  161. /package/dist/__tests__/components/{FormCompatibility.test.d.ts → ComponentBindingRenderer.test.d.ts} +0 -0
  162. /package/dist/__tests__/components/{GroupingModal.test.d.ts → DoseDesignWorkspaceView.test.d.ts} +0 -0
  163. /package/dist/__tests__/components/{SettingsButton.test.d.ts → PluginWorkspaceView.test.d.ts} +0 -0
  164. /package/dist/components/{ActionItem.vue.d.ts → internal/ActionItemInternal.vue.d.ts} +0 -0
  165. /package/src/components/{ActionItem.vue → internal/ActionItemInternal.vue} +0 -0
@@ -0,0 +1,334 @@
1
+ <script setup lang="ts">
2
+ import { ref } from 'vue'
3
+ import type { ExperimentSummary, PillNavItem, SidebarToolSection } from '../types'
4
+ import { defineDoseDesignControlModel } from '../composables/useControlSchema'
5
+ import { ExperimentProvider, mockExperiments } from '../__stories__/experiment-helpers'
6
+ import PluginWorkspaceView from './PluginWorkspaceView.vue'
7
+ import AlertBox from './AlertBox.vue'
8
+ import BaseButton from './BaseButton.vue'
9
+ import BaseSelect from './BaseSelect.vue'
10
+ import DataFrame from './DataFrame.vue'
11
+ import DoseCalculator from './DoseCalculator.vue'
12
+ import FileUploader from './FileUploader.vue'
13
+ import FormField from './FormField.vue'
14
+ import WellPlate from './WellPlate.vue'
15
+
16
+ type SidebarVariant = 'analysis' | 'default'
17
+
18
+ const pillNav: PillNavItem[] = [
19
+ { id: 'data', label: 'Data' },
20
+ { id: 'analysis', label: 'Analysis' },
21
+ { id: 'results', label: 'Results' },
22
+ ]
23
+
24
+ const panels: Record<string, SidebarToolSection[]> = {
25
+ data: [
26
+ {
27
+ id: 'import',
28
+ label: 'Import',
29
+ subtitle: 'CSV or plate reader output',
30
+ icon: 'M12 3v12m0 0l-4-4m4 4l4-4M4 17v2a2 2 0 002 2h12a2 2 0 002-2v-2',
31
+ defaultOpen: true,
32
+ },
33
+ ],
34
+ analysis: [
35
+ {
36
+ id: 'parameters',
37
+ label: 'Parameters',
38
+ subtitle: 'Threshold and method',
39
+ icon: 'M12 6v6l4 2',
40
+ defaultOpen: true,
41
+ },
42
+ ],
43
+ results: [
44
+ {
45
+ id: 'display',
46
+ label: 'Display',
47
+ subtitle: 'Table density',
48
+ icon: 'M4 6h16M4 12h16M4 18h16',
49
+ defaultOpen: true,
50
+ },
51
+ ],
52
+ }
53
+
54
+ const methodOptions = [
55
+ { label: 'Linear', value: 'linear' },
56
+ { label: 'Logistic', value: 'logistic' },
57
+ { label: 'Spline', value: 'spline' },
58
+ ]
59
+
60
+ const doseDesignModel = defineDoseDesignControlModel({
61
+ selectedWells: ['A1', 'A2', 'B1', 'B2'],
62
+ includeMolecularWeight: true,
63
+ componentProps: {
64
+ plate: {
65
+ onUpdateModelValue: false,
66
+ },
67
+ dose: {
68
+ onApplyToWells: false,
69
+ },
70
+ },
71
+ })
72
+ const doseDesignValues = ref({})
73
+ const shellExperiment = ref<ExperimentSummary | null>(mockExperiments[0] ?? null)
74
+
75
+ const state = ref({
76
+ title: 'Plugin Workspace',
77
+ sidebarTitle: 'Analysis Tools',
78
+ sidebarSubtitle: 'Current run',
79
+ sidebarVariant: 'analysis' as SidebarVariant,
80
+ responsiveSidebar: true,
81
+ floating: true,
82
+ dense: true,
83
+ })
84
+
85
+ function handleExperimentSelect(experiment: ExperimentSummary) {
86
+ shellExperiment.value = experiment
87
+ }
88
+
89
+ function handleExperimentDetach() {
90
+ shellExperiment.value = null
91
+ }
92
+
93
+ async function saveDoseDesign() {
94
+ return 'Dose design saved'
95
+ }
96
+ </script>
97
+
98
+ <template>
99
+ <Story title="Layout/PluginWorkspaceView">
100
+ <Variant title="Plugin Shell">
101
+ <div style="min-height: 720px; background: var(--bg-secondary, #f8fafc);">
102
+ <PluginWorkspaceView
103
+ :title="state.title"
104
+ subtitle="Topbar, sidebar, settings, and content in one component"
105
+ :pill-nav="pillNav"
106
+ :panels="panels"
107
+ :sidebar-title="state.sidebarTitle"
108
+ :sidebar-subtitle="state.sidebarSubtitle"
109
+ :sidebar-variant="state.sidebarVariant"
110
+ :responsive-sidebar="state.responsiveSidebar"
111
+ :floating="state.floating"
112
+ :dense="state.dense"
113
+ show-settings
114
+ show-theme-toggle
115
+ :settings-config="{ title: 'Workspace settings', showAppearance: true }"
116
+ >
117
+ <template #section-import>
118
+ <FileUploader accept=".csv,.txt" size="sm" />
119
+ <AlertBox type="info">
120
+ Import controls stay colocated with the shell.
121
+ </AlertBox>
122
+ </template>
123
+
124
+ <template #section-parameters>
125
+ <FormField label="Method">
126
+ <BaseSelect
127
+ :options="methodOptions"
128
+ model-value="logistic"
129
+ size="sm"
130
+ />
131
+ </FormField>
132
+ <BaseButton variant="primary" size="sm" full-width>
133
+ Run analysis
134
+ </BaseButton>
135
+ </template>
136
+
137
+ <template #default="{ activeView }">
138
+ <div class="plugin-workspace-story__content">
139
+ <h2 class="plugin-workspace-story__title">
140
+ {{ activeView }}
141
+ </h2>
142
+ <DataFrame
143
+ :data="[
144
+ { metric: 'Samples', value: 24 },
145
+ { metric: 'Compounds', value: 12 },
146
+ { metric: 'QC flags', value: 1 },
147
+ ]"
148
+ :columns="[
149
+ { key: 'metric', label: 'Metric' },
150
+ { key: 'value', label: 'Value' },
151
+ ]"
152
+ size="sm"
153
+ max-height="320px"
154
+ />
155
+ </div>
156
+ </template>
157
+ </PluginWorkspaceView>
158
+ </div>
159
+
160
+ <template #controls>
161
+ <HstText v-model="state.title" title="Title" />
162
+ <HstText v-model="state.sidebarTitle" title="Sidebar title" />
163
+ <HstText v-model="state.sidebarSubtitle" title="Sidebar subtitle" />
164
+ <HstSelect
165
+ v-model="state.sidebarVariant"
166
+ title="Sidebar variant"
167
+ :options="[
168
+ { label: 'Analysis', value: 'analysis' },
169
+ { label: 'Default', value: 'default' },
170
+ ]"
171
+ />
172
+ <HstCheckbox v-model="state.responsiveSidebar" title="Responsive sidebar" />
173
+ <HstCheckbox v-model="state.floating" title="Floating" />
174
+ <HstCheckbox v-model="state.dense" title="Dense" />
175
+ </template>
176
+ </Variant>
177
+
178
+ <Variant title="Route-owned Sidebar">
179
+ <div style="min-height: 560px; background: var(--bg-secondary, #f8fafc);">
180
+ <PluginWorkspaceView
181
+ title="Route Workspace"
182
+ subtitle="Sidebar target is owned by the active route"
183
+ :pill-nav="pillNav"
184
+ current-pill-id="analysis"
185
+ sidebar-title="Run Tools"
186
+ sidebar-subtitle="Teleported controls"
187
+ sidebar-content-id="workspace-route-sidebar"
188
+ :sidebar-collapsible="true"
189
+ show-settings
190
+ >
191
+ <template #footer>
192
+ <BaseButton variant="primary" size="sm" full-width>
193
+ Apply
194
+ </BaseButton>
195
+ </template>
196
+
197
+ <template #default>
198
+ <Teleport to="#workspace-route-sidebar">
199
+ <div class="plugin-workspace-story__route-tools">
200
+ <FormField label="Method">
201
+ <BaseSelect
202
+ :options="methodOptions"
203
+ model-value="linear"
204
+ size="sm"
205
+ />
206
+ </FormField>
207
+ <AlertBox type="success">
208
+ Route content can own this surface.
209
+ </AlertBox>
210
+ </div>
211
+ </Teleport>
212
+
213
+ <div class="plugin-workspace-story__content">
214
+ <h2 class="plugin-workspace-story__title">
215
+ Analysis
216
+ </h2>
217
+ <DataFrame
218
+ :data="[
219
+ { metric: 'Targets', value: 18 },
220
+ { metric: 'Batches', value: 4 },
221
+ ]"
222
+ :columns="[
223
+ { key: 'metric', label: 'Metric' },
224
+ { key: 'value', label: 'Value' },
225
+ ]"
226
+ size="sm"
227
+ />
228
+ </div>
229
+ </template>
230
+ </PluginWorkspaceView>
231
+ </div>
232
+ </Variant>
233
+
234
+ <Variant title="Model-driven Dose Design">
235
+ <ExperimentProvider>
236
+ <div style="min-height: 720px; background: var(--bg-secondary, #f8fafc);">
237
+ <PluginWorkspaceView
238
+ v-model="doseDesignValues"
239
+ :model="doseDesignModel"
240
+ title="Dose Design"
241
+ subtitle="Experiment-aware workspace generated from one model"
242
+ sidebar-title="Design Controls"
243
+ sidebar-subtitle="Plate and dose setup"
244
+ experiment-shell
245
+ :experiment="shellExperiment"
246
+ :experiment-save="saveDoseDesign"
247
+ show-settings
248
+ show-theme-toggle
249
+ :settings-config="{ title: 'Workspace settings', showAppearance: true }"
250
+ @experiment-select="handleExperimentSelect"
251
+ @experiment-detach="handleExperimentDetach"
252
+ >
253
+ <template #default="{ componentBindingsById }">
254
+ <div class="plugin-workspace-story__dose-grid">
255
+ <section class="plugin-workspace-story__dose-panel plugin-workspace-story__dose-panel--plate">
256
+ <WellPlate
257
+ v-bind="componentBindingsById.plate.props"
258
+ size="fill"
259
+ selection-mode="multiple"
260
+ readonly
261
+ show-legend
262
+ :heatmap="{ enabled: true, min: 0, max: 100, colorScale: 'viridis' }"
263
+ />
264
+ </section>
265
+
266
+ <section class="plugin-workspace-story__dose-panel plugin-workspace-story__dose-panel--calculator">
267
+ <DoseCalculator v-bind="componentBindingsById.dose.props" />
268
+ </section>
269
+ </div>
270
+ </template>
271
+ </PluginWorkspaceView>
272
+ </div>
273
+ </ExperimentProvider>
274
+ </Variant>
275
+ </Story>
276
+ </template>
277
+
278
+ <style scoped>
279
+ .plugin-workspace-story__content {
280
+ display: grid;
281
+ gap: 1rem;
282
+ min-width: 0;
283
+ padding: 1rem;
284
+ }
285
+
286
+ .plugin-workspace-story__title {
287
+ margin: 0;
288
+ color: var(--text-primary, #0f172a);
289
+ font-size: 1rem;
290
+ font-weight: 600;
291
+ text-transform: capitalize;
292
+ }
293
+
294
+ .plugin-workspace-story__route-tools {
295
+ display: grid;
296
+ gap: 0.75rem;
297
+ }
298
+
299
+ .plugin-workspace-story__dose-grid {
300
+ display: grid;
301
+ grid-template-columns: minmax(0, 1.45fr) minmax(18rem, 0.65fr);
302
+ gap: 1rem;
303
+ align-items: start;
304
+ min-width: 0;
305
+ padding: 1rem;
306
+ }
307
+
308
+ .plugin-workspace-story__dose-panel {
309
+ min-width: 0;
310
+ padding: 1rem;
311
+ border: 1px solid var(--border-color);
312
+ border-radius: var(--radius-md, 0.5rem);
313
+ background: var(--bg-primary);
314
+ }
315
+
316
+ .plugin-workspace-story__dose-panel--plate {
317
+ min-height: 32rem;
318
+ overflow-x: auto;
319
+ }
320
+
321
+ .plugin-workspace-story__dose-panel--calculator {
322
+ max-width: 24rem;
323
+ }
324
+
325
+ @media (max-width: 960px) {
326
+ .plugin-workspace-story__dose-grid {
327
+ grid-template-columns: minmax(0, 1fr);
328
+ }
329
+
330
+ .plugin-workspace-story__dose-panel--calculator {
331
+ max-width: none;
332
+ }
333
+ }
334
+ </style>