@operato/data-grist 2.0.0-alpha.145 → 2.0.0-alpha.148

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 (152) hide show
  1. package/CHANGELOG.md +25 -0
  2. package/demo/data-grist-test.html +1 -1
  3. package/demo/index.html +1 -1
  4. package/dist/src/data-card/data-card-field.js +2 -2
  5. package/dist/src/data-card/data-card-field.js.map +1 -1
  6. package/dist/src/data-card/data-card-gutter-menu.js +5 -5
  7. package/dist/src/data-card/data-card-gutter-menu.js.map +1 -1
  8. package/dist/src/data-card/data-card-gutter.js +8 -6
  9. package/dist/src/data-card/data-card-gutter.js.map +1 -1
  10. package/dist/src/data-card/data-card.js +7 -9
  11. package/dist/src/data-card/data-card.js.map +1 -1
  12. package/dist/src/data-card/record-card.js +9 -10
  13. package/dist/src/data-card/record-card.js.map +1 -1
  14. package/dist/src/data-grid/data-grid-accum-field.js +5 -3
  15. package/dist/src/data-grid/data-grid-accum-field.js.map +1 -1
  16. package/dist/src/data-grid/data-grid-body-style.js +1 -1
  17. package/dist/src/data-grid/data-grid-body-style.js.map +1 -1
  18. package/dist/src/data-grid/data-grid-body.js +3 -3
  19. package/dist/src/data-grid/data-grid-body.js.map +1 -1
  20. package/dist/src/data-grid/data-grid-footer.js +2 -2
  21. package/dist/src/data-grid/data-grid-footer.js.map +1 -1
  22. package/dist/src/data-grid/data-grid-header.js +4 -4
  23. package/dist/src/data-grid/data-grid-header.js.map +1 -1
  24. package/dist/src/data-grid/data-grid.js +13 -1
  25. package/dist/src/data-grid/data-grid.js.map +1 -1
  26. package/dist/src/data-list/data-list-field.js +5 -5
  27. package/dist/src/data-list/data-list-field.js.map +1 -1
  28. package/dist/src/data-list/data-list-gutter.js +3 -3
  29. package/dist/src/data-list/data-list-gutter.js.map +1 -1
  30. package/dist/src/data-list/data-list.js +4 -4
  31. package/dist/src/data-list/data-list.js.map +1 -1
  32. package/dist/src/data-list/record-partial.js +9 -10
  33. package/dist/src/data-list/record-partial.js.map +1 -1
  34. package/dist/src/editors/ox-input-tree.js +7 -7
  35. package/dist/src/editors/ox-input-tree.js.map +1 -1
  36. package/dist/src/filters/filter-input-barcode.js +1 -0
  37. package/dist/src/filters/filter-input-barcode.js.map +1 -1
  38. package/dist/src/filters/filter-styles.js +25 -19
  39. package/dist/src/filters/filter-styles.js.map +1 -1
  40. package/dist/src/filters/filters-form.js +4 -0
  41. package/dist/src/filters/filters-form.js.map +1 -1
  42. package/dist/src/gutters/gutter-dirty.js +1 -1
  43. package/dist/src/gutters/gutter-dirty.js.map +1 -1
  44. package/dist/src/renderers/ox-grist-renderer-tree.js +7 -7
  45. package/dist/src/renderers/ox-grist-renderer-tree.js.map +1 -1
  46. package/dist/src/sorters/sorters-control.js +3 -3
  47. package/dist/src/sorters/sorters-control.js.map +1 -1
  48. package/dist/stories/accumulator-format.stories.d.ts +5 -0
  49. package/dist/stories/accumulator-format.stories.js +17 -4
  50. package/dist/stories/accumulator-format.stories.js.map +1 -1
  51. package/dist/stories/barcode-input-filter.stories.d.ts +5 -0
  52. package/dist/stories/barcode-input-filter.stories.js +19 -5
  53. package/dist/stories/barcode-input-filter.stories.js.map +1 -1
  54. package/dist/stories/bounded-select-filters.stories.d.ts +5 -0
  55. package/dist/stories/bounded-select-filters.stories.js +21 -7
  56. package/dist/stories/bounded-select-filters.stories.js.map +1 -1
  57. package/dist/stories/bounded-select-record.stories.d.ts +5 -0
  58. package/dist/stories/bounded-select-record.stories.js +21 -7
  59. package/dist/stories/bounded-select-record.stories.js.map +1 -1
  60. package/dist/stories/creatable-only-column.stories.d.ts +5 -0
  61. package/dist/stories/creatable-only-column.stories.js +34 -21
  62. package/dist/stories/creatable-only-column.stories.js.map +1 -1
  63. package/dist/stories/default-filters.stories.d.ts +5 -0
  64. package/dist/stories/default-filters.stories.js +31 -17
  65. package/dist/stories/default-filters.stories.js.map +1 -1
  66. package/dist/stories/dynamic-editable.stories.d.ts +5 -0
  67. package/dist/stories/dynamic-editable.stories.js +34 -21
  68. package/dist/stories/dynamic-editable.stories.js.map +1 -1
  69. package/dist/stories/empty-sorters.stories.d.ts +7 -1
  70. package/dist/stories/empty-sorters.stories.js +31 -17
  71. package/dist/stories/empty-sorters.stories.js.map +1 -1
  72. package/dist/stories/explicit-fetch.stories.d.ts +5 -0
  73. package/dist/stories/explicit-fetch.stories.js +30 -17
  74. package/dist/stories/explicit-fetch.stories.js.map +1 -1
  75. package/dist/stories/fixed-column.stories.d.ts +5 -0
  76. package/dist/stories/fixed-column.stories.js +34 -21
  77. package/dist/stories/fixed-column.stories.js.map +1 -1
  78. package/dist/stories/grid-setting.stories.d.ts +5 -0
  79. package/dist/stories/grid-setting.stories.js +41 -15
  80. package/dist/stories/grid-setting.stories.js.map +1 -1
  81. package/dist/stories/grist-modes.stories.d.ts +5 -0
  82. package/dist/stories/grist-modes.stories.js +39 -26
  83. package/dist/stories/grist-modes.stories.js.map +1 -1
  84. package/dist/stories/group-header.stories.d.ts +5 -0
  85. package/dist/stories/group-header.stories.js +34 -21
  86. package/dist/stories/group-header.stories.js.map +1 -1
  87. package/dist/stories/textarea.stories.d.ts +5 -0
  88. package/dist/stories/textarea.stories.js +27 -13
  89. package/dist/stories/textarea.stories.js.map +1 -1
  90. package/dist/stories/tree-column-with-checkbox.stories.d.ts +5 -0
  91. package/dist/stories/tree-column-with-checkbox.stories.js +34 -21
  92. package/dist/stories/tree-column-with-checkbox.stories.js.map +1 -1
  93. package/dist/stories/tree-column.stories.d.ts +5 -0
  94. package/dist/stories/tree-column.stories.js +34 -21
  95. package/dist/stories/tree-column.stories.js.map +1 -1
  96. package/dist/tsconfig.tsbuildinfo +1 -1
  97. package/package.json +6 -6
  98. package/src/data-card/data-card-field.ts +2 -2
  99. package/src/data-card/data-card-gutter-menu.ts +5 -5
  100. package/src/data-card/data-card-gutter.ts +8 -6
  101. package/src/data-card/data-card.ts +7 -9
  102. package/src/data-card/record-card.ts +9 -10
  103. package/src/data-grid/data-grid-accum-field.ts +5 -3
  104. package/src/data-grid/data-grid-body-style.ts +1 -1
  105. package/src/data-grid/data-grid-body.ts +4 -3
  106. package/src/data-grid/data-grid-footer.ts +2 -2
  107. package/src/data-grid/data-grid-header.ts +4 -4
  108. package/src/data-grid/data-grid.ts +13 -1
  109. package/src/data-list/data-list-field.ts +5 -5
  110. package/src/data-list/data-list-gutter.ts +3 -3
  111. package/src/data-list/data-list.ts +4 -4
  112. package/src/data-list/record-partial.ts +9 -10
  113. package/src/editors/ox-input-tree.ts +7 -7
  114. package/src/filters/filter-input-barcode.ts +1 -0
  115. package/src/filters/filter-styles.ts +25 -19
  116. package/src/filters/filters-form.ts +4 -0
  117. package/src/gutters/gutter-dirty.ts +1 -1
  118. package/src/renderers/ox-grist-renderer-tree.ts +7 -7
  119. package/src/sorters/sorters-control.ts +3 -3
  120. package/stories/accumulator-format.stories.ts +20 -5
  121. package/stories/barcode-input-filter.stories.ts +21 -6
  122. package/stories/bounded-select-filters.stories.ts +24 -8
  123. package/stories/bounded-select-record.stories.ts +24 -8
  124. package/stories/creatable-only-column.stories.ts +42 -28
  125. package/stories/default-filters.stories.ts +39 -24
  126. package/stories/dynamic-editable.stories.ts +42 -28
  127. package/stories/empty-sorters.stories.ts +41 -25
  128. package/stories/explicit-fetch.stories.ts +38 -24
  129. package/stories/fixed-column.stories.ts +42 -28
  130. package/stories/grid-setting.stories.ts +44 -16
  131. package/stories/grist-modes.stories.ts +53 -33
  132. package/stories/group-header.stories.ts +42 -28
  133. package/stories/textarea.stories.ts +35 -14
  134. package/stories/tree-column-with-checkbox.stories.ts +42 -28
  135. package/stories/tree-column.stories.ts +42 -28
  136. package/themes/dark-hc.css +151 -0
  137. package/themes/dark-mc.css +151 -0
  138. package/themes/dark.css +151 -0
  139. package/themes/grist-theme.css +99 -100
  140. package/themes/light-hc.css +151 -0
  141. package/themes/light-mc.css +151 -0
  142. package/themes/light.css +151 -0
  143. package/themes/md-typescale-styles.css +100 -0
  144. package/themes/spacing.css +43 -0
  145. package/themes/state-color.css +6 -0
  146. package/dist/stories/accumulator-format.stories copy.d.ts +0 -40
  147. package/dist/stories/accumulator-format.stories copy.js +0 -232
  148. package/dist/stories/accumulator-format.stories copy.js.map +0 -1
  149. package/themes/app-theme.css +0 -145
  150. package/themes/form-theme.css +0 -75
  151. package/themes/oops-theme.css +0 -26
  152. package/themes/report-theme.css +0 -47
@@ -6,6 +6,7 @@ import '@operato/popup/ox-popup-list.js'
6
6
  import '@material/web/icon/icon.js'
7
7
 
8
8
  import { html, TemplateResult } from 'lit'
9
+ import { styles as MDTypeScaleStyles } from '@material/web/typography/md-typescale-styles'
9
10
 
10
11
  import { CommonHeaderStyles, CommonGristStyles } from '@operato/styles'
11
12
 
@@ -338,7 +339,8 @@ export default {
338
339
  argTypes: {
339
340
  config: { control: 'object' },
340
341
  mode: { control: 'select', options: ['GRID', 'LIST', 'CARD'] },
341
- urlParamsSensitive: { control: 'boolean' }
342
+ urlParamsSensitive: { control: 'boolean' },
343
+ theme: { control: 'select', options: ['light', 'dark'] }
342
344
  }
343
345
  }
344
346
 
@@ -352,11 +354,25 @@ interface ArgTypes {
352
354
  config: object
353
355
  mode: 'GRID' | 'LIST' | 'CARD'
354
356
  urlParamsSensitive: boolean
357
+ theme: 'light' | 'dark'
355
358
  fetchHandler: FetchHandler
356
359
  }
357
360
 
358
- const Template: Story<ArgTypes> = ({ config, mode = 'GRID', urlParamsSensitive = false, fetchHandler }: ArgTypes) =>
359
- html` <link
361
+ const Template: Story<ArgTypes> = ({
362
+ config,
363
+ mode = 'GRID',
364
+ urlParamsSensitive = false,
365
+ fetchHandler,
366
+ theme = 'light'
367
+ }: ArgTypes) =>
368
+ html` <link href="https://fonts.googleapis.com/css2?family=Roboto:wght@400;500;700&display=swap" rel="stylesheet" />
369
+
370
+ <link href="/themes/light.css" rel="stylesheet" />
371
+ <link href="/themes/dark.css" rel="stylesheet" />
372
+ <link href="/themes/spacing.css" rel="stylesheet" />
373
+ <link href="/themes/grist-theme.css" rel="stylesheet" />
374
+
375
+ <link
360
376
  href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL@20..48,100..700,0..1"
361
377
  rel="stylesheet"
362
378
  />
@@ -369,15 +385,19 @@ const Template: Story<ArgTypes> = ({ config, mode = 'GRID', urlParamsSensitive =
369
385
  rel="stylesheet"
370
386
  />
371
387
 
372
- <link href="/themes/app-theme.css" rel="stylesheet" />
373
- <link href="/themes/oops-theme.css" rel="stylesheet" />
374
- <link href="/themes/grist-theme.css" rel="stylesheet" />
388
+ <style>
389
+ ${MDTypeScaleStyles.cssText}
390
+ </style>
375
391
 
376
392
  <style>
377
393
  ${CommonGristStyles.cssText}
378
394
  ${CommonHeaderStyles.cssText}
379
395
  </style>
380
396
 
397
+ <script>
398
+ document.body.classList.add('${theme}')
399
+ </script>
400
+
381
401
  <style>
382
402
  ox-grist {
383
403
  height: 600px;
@@ -395,37 +415,37 @@ const Template: Story<ArgTypes> = ({ config, mode = 'GRID', urlParamsSensitive =
395
415
  ?url-params-sensitive=${urlParamsSensitive}
396
416
  @filters-change=${(e: Event) => console.log('filters', (e.target as any).filters)}
397
417
  >
398
- <div slot="headroom">
399
- <div id="filters">
418
+ <div slot="headroom" class="header">
419
+ <div class="filters">
400
420
  <ox-filters-form autofocus></ox-filters-form>
401
- </div>
402
421
 
403
- <div id="sorters">
404
- Sort
405
- <md-icon
406
- @click=${(e: Event) => {
407
- const target = e.currentTarget as HTMLElement
408
- ;(target.closest('#sorters')!.querySelector('#sorter-control') as any).open({
409
- right: 0,
410
- top: target.offsetTop + target.offsetHeight
411
- })
412
- }}
413
- >expand_more</md-icon
414
- >
415
- <ox-popup id="sorter-control">
416
- <ox-sorters-control> </ox-sorters-control>
417
- </ox-popup>
418
- </div>
422
+ <div id="sorters">
423
+ Sort
424
+ <md-icon
425
+ @click=${(e: Event) => {
426
+ const target = e.currentTarget as HTMLElement
427
+ ;(target.closest('#sorters')!.querySelector('#sorter-control') as any).open({
428
+ right: 0,
429
+ top: target.offsetTop + target.offsetHeight
430
+ })
431
+ }}
432
+ >expand_more</md-icon
433
+ >
434
+ <ox-popup id="sorter-control">
435
+ <ox-sorters-control> </ox-sorters-control>
436
+ </ox-popup>
437
+ </div>
419
438
 
420
- <div id="modes">
421
- <md-icon @click=${() => (mode = 'GRID')} ?active=${mode == 'GRID'}>grid_on</md-icon>
422
- <md-icon @click=${() => (mode = 'LIST')} ?active=${mode == 'LIST'}>format_list_bulleted</md-icon>
423
- <md-icon @click=${() => (mode = 'CARD')} ?active=${mode == 'CARD'}>apps</md-icon>
424
- </div>
439
+ <div id="modes">
440
+ <md-icon @click=${() => (mode = 'GRID')} ?active=${mode == 'GRID'}>grid_on</md-icon>
441
+ <md-icon @click=${() => (mode = 'LIST')} ?active=${mode == 'LIST'}>format_list_bulleted</md-icon>
442
+ <md-icon @click=${() => (mode = 'CARD')} ?active=${mode == 'CARD'}>apps</md-icon>
443
+ </div>
425
444
 
426
- <ox-record-creator id="add" light-popup>
427
- <button><md-icon>add</md-icon></button>
428
- </ox-record-creator>
445
+ <ox-record-creator id="add" light-popup>
446
+ <button><md-icon>add</md-icon></button>
447
+ </ox-record-creator>
448
+ </div>
429
449
  </div>
430
450
  </ox-grist>`
431
451
 
@@ -6,6 +6,7 @@ import '@operato/popup/ox-popup-list.js'
6
6
  import '@material/web/icon/icon.js'
7
7
 
8
8
  import { html, TemplateResult } from 'lit'
9
+ import { styles as MDTypeScaleStyles } from '@material/web/typography/md-typescale-styles'
9
10
 
10
11
  import { CommonHeaderStyles, CommonGristStyles } from '@operato/styles'
11
12
 
@@ -346,7 +347,8 @@ export default {
346
347
  title: 'group header',
347
348
  component: 'ox-grist',
348
349
  argTypes: {
349
- config: { control: 'object' }
350
+ config: { control: 'object' },
351
+ theme: { control: 'select', options: ['light', 'dark'] }
350
352
  }
351
353
  }
352
354
 
@@ -358,10 +360,18 @@ interface Story<T> {
358
360
 
359
361
  interface ArgTypes {
360
362
  config: object
363
+ theme: 'light' | 'dark'
361
364
  }
362
365
 
363
- const Template: Story<ArgTypes> = ({ config }: ArgTypes) =>
364
- html` <link
366
+ const Template: Story<ArgTypes> = ({ config, theme = 'light' }: ArgTypes) =>
367
+ html` <link href="https://fonts.googleapis.com/css2?family=Roboto:wght@400;500;700&display=swap" rel="stylesheet" />
368
+
369
+ <link href="/themes/light.css" rel="stylesheet" />
370
+ <link href="/themes/dark.css" rel="stylesheet" />
371
+ <link href="/themes/spacing.css" rel="stylesheet" />
372
+ <link href="/themes/grist-theme.css" rel="stylesheet" />
373
+
374
+ <link
365
375
  href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL@20..48,100..700,0..1"
366
376
  rel="stylesheet"
367
377
  />
@@ -374,15 +384,19 @@ const Template: Story<ArgTypes> = ({ config }: ArgTypes) =>
374
384
  rel="stylesheet"
375
385
  />
376
386
 
377
- <link href="/themes/app-theme.css" rel="stylesheet" />
378
- <link href="/themes/oops-theme.css" rel="stylesheet" />
379
- <link href="/themes/grist-theme.css" rel="stylesheet" />
387
+ <style>
388
+ ${MDTypeScaleStyles.cssText}
389
+ </style>
380
390
 
381
391
  <style>
382
392
  ${CommonGristStyles.cssText}
383
393
  ${CommonHeaderStyles.cssText}
384
394
  </style>
385
395
 
396
+ <script>
397
+ document.body.classList.add('${theme}')
398
+ </script>
399
+
386
400
  <style>
387
401
  ox-grist {
388
402
  height: 600px;
@@ -399,31 +413,31 @@ const Template: Story<ArgTypes> = ({ config }: ArgTypes) =>
399
413
  .fetchHandler=${fetchHandler}
400
414
  @filters-change=${(e: Event) => console.log('filters', (e.target as any).filters)}
401
415
  >
402
- <div slot="headroom">
403
- <div id="filters">
416
+ <div slot="headroom" class="header">
417
+ <div class="filters">
404
418
  <ox-filters-form autofocus></ox-filters-form>
405
- </div>
406
419
 
407
- <div id="sorters">
408
- Sort
409
- <md-icon
410
- @click=${(e: Event) => {
411
- const target = e.currentTarget as HTMLElement
412
- ;(target.closest('#sorters')!.querySelector('#sorter-control') as any).open({
413
- right: 0,
414
- top: target.offsetTop + target.offsetHeight
415
- })
416
- }}
417
- >expand_more</md-icon
418
- >
419
- <ox-popup id="sorter-control">
420
- <ox-sorters-control> </ox-sorters-control>
421
- </ox-popup>
422
- </div>
420
+ <div id="sorters">
421
+ Sort
422
+ <md-icon
423
+ @click=${(e: Event) => {
424
+ const target = e.currentTarget as HTMLElement
425
+ ;(target.closest('#sorters')!.querySelector('#sorter-control') as any).open({
426
+ right: 0,
427
+ top: target.offsetTop + target.offsetHeight
428
+ })
429
+ }}
430
+ >expand_more</md-icon
431
+ >
432
+ <ox-popup id="sorter-control">
433
+ <ox-sorters-control> </ox-sorters-control>
434
+ </ox-popup>
435
+ </div>
423
436
 
424
- <ox-record-creator id="add" light-popup>
425
- <button><md-icon>add</md-icon></button>
426
- </ox-record-creator>
437
+ <ox-record-creator id="add" light-popup>
438
+ <button><md-icon>add</md-icon></button>
439
+ </ox-record-creator>
440
+ </div>
427
441
  </div>
428
442
  </ox-grist>`
429
443
 
@@ -6,6 +6,7 @@ import '@operato/popup/ox-popup-list.js'
6
6
  import '@material/web/icon/icon.js'
7
7
 
8
8
  import { html, TemplateResult } from 'lit'
9
+ import { styles as MDTypeScaleStyles } from '@material/web/typography/md-typescale-styles'
9
10
 
10
11
  import { CommonHeaderStyles, CommonGristStyles } from '@operato/styles'
11
12
 
@@ -175,7 +176,8 @@ export default {
175
176
  argTypes: {
176
177
  config: { control: 'object' },
177
178
  mode: { control: 'select', options: ['GRID', 'LIST', 'CARD'] },
178
- urlParamsSensitive: { control: 'boolean' }
179
+ urlParamsSensitive: { control: 'boolean' },
180
+ theme: { control: 'select', options: ['light', 'dark'] }
179
181
  }
180
182
  }
181
183
 
@@ -189,11 +191,25 @@ interface ArgTypes {
189
191
  config: object
190
192
  mode: 'GRID' | 'LIST' | 'CARD'
191
193
  urlParamsSensitive: boolean
194
+ theme: 'light' | 'dark'
192
195
  fetchHandler: FetchHandler
193
196
  }
194
197
 
195
- const Template: Story<ArgTypes> = ({ config, mode = 'GRID', urlParamsSensitive = false, fetchHandler }: ArgTypes) =>
196
- html` <link
198
+ const Template: Story<ArgTypes> = ({
199
+ config,
200
+ mode = 'GRID',
201
+ urlParamsSensitive = false,
202
+ fetchHandler,
203
+ theme = 'light'
204
+ }: ArgTypes) =>
205
+ html` <link href="https://fonts.googleapis.com/css2?family=Roboto:wght@400;500;700&display=swap" rel="stylesheet" />
206
+
207
+ <link href="/themes/light.css" rel="stylesheet" />
208
+ <link href="/themes/dark.css" rel="stylesheet" />
209
+ <link href="/themes/spacing.css" rel="stylesheet" />
210
+ <link href="/themes/grist-theme.css" rel="stylesheet" />
211
+
212
+ <link
197
213
  href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL@20..48,100..700,0..1"
198
214
  rel="stylesheet"
199
215
  />
@@ -206,15 +222,20 @@ const Template: Story<ArgTypes> = ({ config, mode = 'GRID', urlParamsSensitive =
206
222
  rel="stylesheet"
207
223
  />
208
224
 
209
- <link href="/themes/app-theme.css" rel="stylesheet" />
210
- <link href="/themes/oops-theme.css" rel="stylesheet" />
211
- <link href="/themes/grist-theme.css" rel="stylesheet" />
225
+ <style>
226
+ ${MDTypeScaleStyles.cssText}
227
+ </style>
212
228
 
213
229
  <style>
214
- ${CommonGristStyles.cssText}
215
- ${CommonHeaderStyles.cssText}
230
+ ${CommonGristStyles.cssText} ${CommonHeaderStyles.cssText} #add {
231
+ margin-left: auto;
232
+ }
216
233
  </style>
217
234
 
235
+ <script>
236
+ document.body.classList.add('${theme}')
237
+ </script>
238
+
218
239
  <style>
219
240
  ox-grist {
220
241
  height: 600px;
@@ -232,14 +253,14 @@ const Template: Story<ArgTypes> = ({ config, mode = 'GRID', urlParamsSensitive =
232
253
  ?url-params-sensitive=${urlParamsSensitive}
233
254
  @filters-change=${(e: Event) => console.log('filters', (e.target as any).filters)}
234
255
  >
235
- <div slot="headroom">
236
- <div id="filters">
256
+ <div slot="headroom" class="header">
257
+ <div class="filters">
237
258
  <ox-filters-form autofocus></ox-filters-form>
238
- </div>
239
259
 
240
- <ox-record-creator id="add" light-popup>
241
- <button><md-icon>add</md-icon></button>
242
- </ox-record-creator>
260
+ <ox-record-creator id="add" light-popup>
261
+ <button><md-icon>add</md-icon></button>
262
+ </ox-record-creator>
263
+ </div>
243
264
  </div>
244
265
  </ox-grist>`
245
266
 
@@ -6,6 +6,7 @@ import '@operato/popup/ox-popup-list.js'
6
6
  import '@material/web/icon/icon.js'
7
7
 
8
8
  import { html, TemplateResult } from 'lit'
9
+ import { styles as MDTypeScaleStyles } from '@material/web/typography/md-typescale-styles'
9
10
 
10
11
  import { CommonHeaderStyles, CommonGristStyles } from '@operato/styles'
11
12
 
@@ -202,7 +203,8 @@ export default {
202
203
  title: 'tree column with checkbox',
203
204
  component: 'ox-grist',
204
205
  argTypes: {
205
- config: { control: 'object' }
206
+ config: { control: 'object' },
207
+ theme: { control: 'select', options: ['light', 'dark'] }
206
208
  }
207
209
  }
208
210
 
@@ -214,10 +216,18 @@ interface Story<T> {
214
216
 
215
217
  interface ArgTypes {
216
218
  config: object
219
+ theme: 'light' | 'dark'
217
220
  }
218
221
 
219
- const Template: Story<ArgTypes> = ({ config }: ArgTypes) =>
220
- html` <link
222
+ const Template: Story<ArgTypes> = ({ config, theme = 'light' }: ArgTypes) =>
223
+ html` <link href="https://fonts.googleapis.com/css2?family=Roboto:wght@400;500;700&display=swap" rel="stylesheet" />
224
+
225
+ <link href="/themes/light.css" rel="stylesheet" />
226
+ <link href="/themes/dark.css" rel="stylesheet" />
227
+ <link href="/themes/spacing.css" rel="stylesheet" />
228
+ <link href="/themes/grist-theme.css" rel="stylesheet" />
229
+
230
+ <link
221
231
  href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL@20..48,100..700,0..1"
222
232
  rel="stylesheet"
223
233
  />
@@ -230,15 +240,19 @@ const Template: Story<ArgTypes> = ({ config }: ArgTypes) =>
230
240
  rel="stylesheet"
231
241
  />
232
242
 
233
- <link href="/themes/app-theme.css" rel="stylesheet" />
234
- <link href="/themes/oops-theme.css" rel="stylesheet" />
235
- <link href="/themes/grist-theme.css" rel="stylesheet" />
243
+ <style>
244
+ ${MDTypeScaleStyles.cssText}
245
+ </style>
236
246
 
237
247
  <style>
238
248
  ${CommonGristStyles.cssText}
239
249
  ${CommonHeaderStyles.cssText}
240
250
  </style>
241
251
 
252
+ <script>
253
+ document.body.classList.add('${theme}')
254
+ </script>
255
+
242
256
  <style>
243
257
  ox-grist {
244
258
  height: 600px;
@@ -255,31 +269,31 @@ const Template: Story<ArgTypes> = ({ config }: ArgTypes) =>
255
269
  .fetchHandler=${fetchHandler}
256
270
  @filters-change=${(e: Event) => console.log('filters', (e.target as any).filters)}
257
271
  >
258
- <div slot="headroom">
259
- <div id="filters">
272
+ <div slot="headroom" class="header">
273
+ <div class="filters">
260
274
  <ox-filters-form autofocus></ox-filters-form>
261
- </div>
262
275
 
263
- <div id="sorters">
264
- Sort
265
- <md-icon
266
- @click=${(e: Event) => {
267
- const target = e.currentTarget as HTMLElement
268
- ;(target.closest('#sorters')!.querySelector('#sorter-control') as any).open({
269
- right: 0,
270
- top: target.offsetTop + target.offsetHeight
271
- })
272
- }}
273
- >expand_more</md-icon
274
- >
275
- <ox-popup id="sorter-control">
276
- <ox-sorters-control> </ox-sorters-control>
277
- </ox-popup>
278
- </div>
276
+ <div id="sorters">
277
+ Sort
278
+ <md-icon
279
+ @click=${(e: Event) => {
280
+ const target = e.currentTarget as HTMLElement
281
+ ;(target.closest('#sorters')!.querySelector('#sorter-control') as any).open({
282
+ right: 0,
283
+ top: target.offsetTop + target.offsetHeight
284
+ })
285
+ }}
286
+ >expand_more</md-icon
287
+ >
288
+ <ox-popup id="sorter-control">
289
+ <ox-sorters-control> </ox-sorters-control>
290
+ </ox-popup>
291
+ </div>
279
292
 
280
- <ox-record-creator id="add" light-popup>
281
- <button><md-icon>add</md-icon></button>
282
- </ox-record-creator>
293
+ <ox-record-creator id="add" light-popup>
294
+ <button><md-icon>add</md-icon></button>
295
+ </ox-record-creator>
296
+ </div>
283
297
  </div>
284
298
  </ox-grist>`
285
299
 
@@ -6,6 +6,7 @@ import '@operato/popup/ox-popup-list.js'
6
6
  import '@material/web/icon/icon.js'
7
7
 
8
8
  import { html, TemplateResult } from 'lit'
9
+ import { styles as MDTypeScaleStyles } from '@material/web/typography/md-typescale-styles'
9
10
 
10
11
  import { CommonHeaderStyles, CommonGristStyles } from '@operato/styles'
11
12
 
@@ -201,7 +202,8 @@ export default {
201
202
  title: 'tree column',
202
203
  component: 'ox-grist',
203
204
  argTypes: {
204
- config: { control: 'object' }
205
+ config: { control: 'object' },
206
+ theme: { control: 'select', options: ['light', 'dark'] }
205
207
  }
206
208
  }
207
209
 
@@ -213,10 +215,18 @@ interface Story<T> {
213
215
 
214
216
  interface ArgTypes {
215
217
  config: object
218
+ theme: 'light' | 'dark'
216
219
  }
217
220
 
218
- const Template: Story<ArgTypes> = ({ config }: ArgTypes) =>
219
- html` <link
221
+ const Template: Story<ArgTypes> = ({ config, theme = 'light' }: ArgTypes) =>
222
+ html` <link href="https://fonts.googleapis.com/css2?family=Roboto:wght@400;500;700&display=swap" rel="stylesheet" />
223
+
224
+ <link href="/themes/light.css" rel="stylesheet" />
225
+ <link href="/themes/dark.css" rel="stylesheet" />
226
+ <link href="/themes/spacing.css" rel="stylesheet" />
227
+ <link href="/themes/grist-theme.css" rel="stylesheet" />
228
+
229
+ <link
220
230
  href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL@20..48,100..700,0..1"
221
231
  rel="stylesheet"
222
232
  />
@@ -229,15 +239,19 @@ const Template: Story<ArgTypes> = ({ config }: ArgTypes) =>
229
239
  rel="stylesheet"
230
240
  />
231
241
 
232
- <link href="/themes/app-theme.css" rel="stylesheet" />
233
- <link href="/themes/oops-theme.css" rel="stylesheet" />
234
- <link href="/themes/grist-theme.css" rel="stylesheet" />
242
+ <style>
243
+ ${MDTypeScaleStyles.cssText}
244
+ </style>
235
245
 
236
246
  <style>
237
247
  ${CommonGristStyles.cssText}
238
248
  ${CommonHeaderStyles.cssText}
239
249
  </style>
240
250
 
251
+ <script>
252
+ document.body.classList.add('${theme}')
253
+ </script>
254
+
241
255
  <style>
242
256
  ox-grist {
243
257
  height: 600px;
@@ -254,31 +268,31 @@ const Template: Story<ArgTypes> = ({ config }: ArgTypes) =>
254
268
  .fetchHandler=${fetchHandler}
255
269
  @filters-change=${(e: Event) => console.log('filters', (e.target as any).filters)}
256
270
  >
257
- <div slot="headroom">
258
- <div id="filters">
271
+ <div slot="headroom" class="header">
272
+ <div class="filters">
259
273
  <ox-filters-form autofocus></ox-filters-form>
260
- </div>
261
274
 
262
- <div id="sorters">
263
- Sort
264
- <md-icon
265
- @click=${(e: Event) => {
266
- const target = e.currentTarget as HTMLElement
267
- ;(target.closest('#sorters')!.querySelector('#sorter-control') as any).open({
268
- right: 0,
269
- top: target.offsetTop + target.offsetHeight
270
- })
271
- }}
272
- >expand_more</md-icon
273
- >
274
- <ox-popup id="sorter-control">
275
- <ox-sorters-control> </ox-sorters-control>
276
- </ox-popup>
277
- </div>
275
+ <div id="sorters">
276
+ Sort
277
+ <md-icon
278
+ @click=${(e: Event) => {
279
+ const target = e.currentTarget as HTMLElement
280
+ ;(target.closest('#sorters')!.querySelector('#sorter-control') as any).open({
281
+ right: 0,
282
+ top: target.offsetTop + target.offsetHeight
283
+ })
284
+ }}
285
+ >expand_more</md-icon
286
+ >
287
+ <ox-popup id="sorter-control">
288
+ <ox-sorters-control> </ox-sorters-control>
289
+ </ox-popup>
290
+ </div>
278
291
 
279
- <ox-record-creator id="add" light-popup>
280
- <button><md-icon>add</md-icon></button>
281
- </ox-record-creator>
292
+ <ox-record-creator id="add" light-popup>
293
+ <button><md-icon>add</md-icon></button>
294
+ </ox-record-creator>
295
+ </div>
282
296
  </div>
283
297
  </ox-grist>`
284
298