@operato/data-grist 2.0.0-alpha.64 → 2.0.0-alpha.68

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 (118) hide show
  1. package/CHANGELOG.md +9 -0
  2. package/demo/data-grist-test.html +25 -14
  3. package/demo/index.html +25 -14
  4. package/demo/report-test.html +13 -2
  5. package/dist/src/data-card/data-card-gutter-menu.d.ts +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.d.ts +1 -1
  9. package/dist/src/data-card/data-card.js +3 -3
  10. package/dist/src/data-card/data-card.js.map +1 -1
  11. package/dist/src/data-card/record-card.d.ts +1 -1
  12. package/dist/src/data-card/record-card.js +26 -26
  13. package/dist/src/data-card/record-card.js.map +1 -1
  14. package/dist/src/data-grid/data-grid-accum-field.js +5 -1
  15. package/dist/src/data-grid/data-grid-accum-field.js.map +1 -1
  16. package/dist/src/data-grid/data-grid-footer.d.ts +1 -1
  17. package/dist/src/data-grid/data-grid-footer.js +17 -9
  18. package/dist/src/data-grid/data-grid-footer.js.map +1 -1
  19. package/dist/src/data-grid/data-grid-header.d.ts +1 -1
  20. package/dist/src/data-grid/data-grid-header.js +13 -15
  21. package/dist/src/data-grid/data-grid-header.js.map +1 -1
  22. package/dist/src/data-grist.js +21 -21
  23. package/dist/src/data-grist.js.map +1 -1
  24. package/dist/src/data-list/data-list.d.ts +1 -1
  25. package/dist/src/data-list/data-list.js +3 -3
  26. package/dist/src/data-list/data-list.js.map +1 -1
  27. package/dist/src/data-list/record-partial.d.ts +1 -1
  28. package/dist/src/data-list/record-partial.js +19 -19
  29. package/dist/src/data-list/record-partial.js.map +1 -1
  30. package/dist/src/empty-note.d.ts +1 -1
  31. package/dist/src/empty-note.js +3 -3
  32. package/dist/src/empty-note.js.map +1 -1
  33. package/dist/src/gutters/gutter-button.d.ts +1 -1
  34. package/dist/src/gutters/gutter-button.js +3 -3
  35. package/dist/src/gutters/gutter-button.js.map +1 -1
  36. package/dist/src/gutters/gutter-dirty.d.ts +1 -1
  37. package/dist/src/gutters/gutter-dirty.js +5 -5
  38. package/dist/src/gutters/gutter-dirty.js.map +1 -1
  39. package/dist/src/handlers/contextmenu-tree-mutation.js +4 -4
  40. package/dist/src/handlers/contextmenu-tree-mutation.js.map +1 -1
  41. package/dist/src/record-view/record-creator.d.ts +1 -1
  42. package/dist/src/record-view/record-creator.js +1 -1
  43. package/dist/src/record-view/record-creator.js.map +1 -1
  44. package/dist/src/record-view/record-view-body.d.ts +1 -1
  45. package/dist/src/record-view/record-view-body.js +4 -4
  46. package/dist/src/record-view/record-view-body.js.map +1 -1
  47. package/dist/src/record-view/record-view.d.ts +1 -1
  48. package/dist/src/record-view/record-view.js +5 -5
  49. package/dist/src/record-view/record-view.js.map +1 -1
  50. package/dist/src/sorters/sorters-control.js +3 -3
  51. package/dist/src/sorters/sorters-control.js.map +1 -1
  52. package/dist/stories/accumulator.stories.d.ts +1 -1
  53. package/dist/stories/accumulator.stories.js +22 -10
  54. package/dist/stories/accumulator.stories.js.map +1 -1
  55. package/dist/stories/barcode-input-filter.stories.d.ts +1 -1
  56. package/dist/stories/barcode-input-filter.stories.js +80 -72
  57. package/dist/stories/barcode-input-filter.stories.js.map +1 -1
  58. package/dist/stories/default-filters.stories.d.ts +1 -1
  59. package/dist/stories/default-filters.stories.js +80 -72
  60. package/dist/stories/default-filters.stories.js.map +1 -1
  61. package/dist/stories/dynamic-editable.stories.d.ts +1 -1
  62. package/dist/stories/dynamic-editable.stories.js +21 -9
  63. package/dist/stories/dynamic-editable.stories.js.map +1 -1
  64. package/dist/stories/empty-sorters.stories.d.ts +1 -1
  65. package/dist/stories/empty-sorters.stories.js +80 -71
  66. package/dist/stories/empty-sorters.stories.js.map +1 -1
  67. package/dist/stories/explicit-fetch.stories.d.ts +1 -1
  68. package/dist/stories/explicit-fetch.stories.js +81 -72
  69. package/dist/stories/explicit-fetch.stories.js.map +1 -1
  70. package/dist/stories/fixed-column.stories.d.ts +1 -1
  71. package/dist/stories/fixed-column.stories.js +122 -113
  72. package/dist/stories/fixed-column.stories.js.map +1 -1
  73. package/dist/stories/grist-modes.stories.d.ts +1 -1
  74. package/dist/stories/grist-modes.stories.js +132 -123
  75. package/dist/stories/grist-modes.stories.js.map +1 -1
  76. package/dist/stories/group-header.stories.d.ts +1 -1
  77. package/dist/stories/group-header.stories.js +122 -113
  78. package/dist/stories/group-header.stories.js.map +1 -1
  79. package/dist/stories/textarea.stories.d.ts +1 -1
  80. package/dist/stories/textarea.stories.js +113 -104
  81. package/dist/stories/textarea.stories.js.map +1 -1
  82. package/dist/stories/tree-column-with-checkbox.stories.d.ts +1 -1
  83. package/dist/stories/tree-column-with-checkbox.stories.js +126 -117
  84. package/dist/stories/tree-column-with-checkbox.stories.js.map +1 -1
  85. package/dist/stories/tree-column.stories.d.ts +1 -1
  86. package/dist/stories/tree-column.stories.js +126 -117
  87. package/dist/stories/tree-column.stories.js.map +1 -1
  88. package/dist/tsconfig.tsbuildinfo +1 -1
  89. package/package.json +7 -7
  90. package/src/data-card/data-card-gutter-menu.ts +5 -5
  91. package/src/data-card/data-card.ts +3 -3
  92. package/src/data-card/record-card.ts +30 -32
  93. package/src/data-grid/data-grid-accum-field.ts +5 -1
  94. package/src/data-grid/data-grid-footer.ts +18 -11
  95. package/src/data-grid/data-grid-header.ts +13 -15
  96. package/src/data-grist.ts +23 -23
  97. package/src/data-list/data-list.ts +3 -3
  98. package/src/data-list/record-partial.ts +21 -23
  99. package/src/empty-note.ts +3 -3
  100. package/src/gutters/gutter-button.ts +3 -3
  101. package/src/gutters/gutter-dirty.ts +5 -5
  102. package/src/handlers/contextmenu-tree-mutation.ts +4 -4
  103. package/src/record-view/record-creator.ts +1 -1
  104. package/src/record-view/record-view-body.ts +4 -4
  105. package/src/record-view/record-view.ts +5 -5
  106. package/src/sorters/sorters-control.ts +3 -3
  107. package/stories/accumulator.stories.ts +22 -10
  108. package/stories/barcode-input-filter.stories.ts +91 -82
  109. package/stories/default-filters.stories.ts +91 -82
  110. package/stories/dynamic-editable.stories.ts +21 -9
  111. package/stories/empty-sorters.stories.ts +92 -82
  112. package/stories/explicit-fetch.stories.ts +93 -83
  113. package/stories/fixed-column.stories.ts +134 -124
  114. package/stories/grist-modes.stories.ts +144 -139
  115. package/stories/group-header.stories.ts +134 -124
  116. package/stories/textarea.stories.ts +115 -110
  117. package/stories/tree-column-with-checkbox.stories.ts +134 -124
  118. package/stories/tree-column.stories.ts +134 -124
@@ -3,7 +3,7 @@ import '../src/filters/filters-form.js'
3
3
  import '../src/sorters/sorters-control.js'
4
4
  import '../src/record-view/record-creator.js'
5
5
  import '@operato/popup/ox-popup-list.js'
6
- import '@material/mwc-icon'
6
+ import '@material/web/icon/icon.js'
7
7
 
8
8
  import { html, TemplateResult } from 'lit'
9
9
 
@@ -50,10 +50,10 @@ const fetchHandler: FetchHandler = async ({ page, limit }) => {
50
50
  idx % 4 === 0
51
51
  ? '' /* no source */
52
52
  : idx % 4 === 1
53
- ? `http://www.hatiolab.com/assets/img/operato-biz3.png`
54
- : idx % 4 === 2
55
- ? `http://www.hatiolab.com/assets/img/thingsboard-30.png`
56
- : `http://www.hatiolab.com/wrong-url.png` /* wrong source */,
53
+ ? `http://www.hatiolab.com/assets/img/operato-biz3.png`
54
+ : idx % 4 === 2
55
+ ? `http://www.hatiolab.com/assets/img/thingsboard-30.png`
56
+ : `http://www.hatiolab.com/wrong-url.png` /* wrong source */,
57
57
  role: ['admin', 'worker', 'tester'][idx % 3],
58
58
  color: idx % 2 ? `#87f018` : `#180f87`,
59
59
  rate: Math.round(Math.random() * 100),
@@ -330,144 +330,154 @@ interface ArgTypes {
330
330
  config: object
331
331
  }
332
332
 
333
- const Template: Story<ArgTypes> = ({ config }: ArgTypes) => html` <link
334
- href="https://fonts.googleapis.com/css?family=Material+Icons&display=block"
335
- rel="stylesheet"
336
- />
337
- <link href="/themes/app-theme.css" rel="stylesheet" />
338
- <link href="/themes/oops-theme.css" rel="stylesheet" />
339
- <link href="/themes/grist-theme.css" rel="stylesheet" />
333
+ const Template: Story<ArgTypes> = ({ config }: ArgTypes) =>
334
+ html` <link
335
+ href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL@20..48,100..700,0..1"
336
+ rel="stylesheet"
337
+ />
338
+ <link
339
+ href="https://fonts.googleapis.com/css2?family=Material+Symbols+Rounded:opsz,wght,FILL@20..48,100..700,0..1"
340
+ rel="stylesheet"
341
+ />
342
+ <link
343
+ href="https://fonts.googleapis.com/css2?family=Material+Symbols+Sharp:opsz,wght,FILL@20..48,100..700,0..1"
344
+ rel="stylesheet"
345
+ />
340
346
 
341
- <style>
342
- [slot='headroom'] {
343
- display: flex;
344
- flex-direction: row;
345
- align-items: center;
346
- padding: var(--padding-default) var(--padding-wide);
347
- background-color: var(--theme-white-color);
348
- box-shadow: var(--box-shadow);
347
+ <link href="/themes/app-theme.css" rel="stylesheet" />
348
+ <link href="/themes/oops-theme.css" rel="stylesheet" />
349
+ <link href="/themes/grist-theme.css" rel="stylesheet" />
349
350
 
350
- --mdc-icon-size: 24px;
351
- }
352
- #sorters mwc-icon,
353
- #modes mwc-icon {
354
- --mdc-icon-size: 18px;
355
- }
356
- #sorters {
357
- margin-left: auto;
358
- margin-right: var(--margin-default);
359
- padding-left: var(--padding-narrow);
360
- border-bottom: var(--border-dark-color);
361
- position: relative;
362
- color: var(--secondary-color);
363
- font-size: var(--fontsize-default);
364
- user-select: none;
365
- }
366
-
367
- #sorters > * {
368
- padding: var(--padding-narrow);
369
- vertical-align: middle;
370
- }
351
+ <style>
352
+ [slot='headroom'] {
353
+ display: flex;
354
+ flex-direction: row;
355
+ align-items: center;
356
+ padding: var(--padding-default) var(--padding-wide);
357
+ background-color: var(--theme-white-color);
358
+ box-shadow: var(--box-shadow);
371
359
 
372
- #modes > * {
373
- padding: var(--padding-narrow);
374
- opacity: 0.5;
375
- color: var(--primary-text-color);
376
- cursor: pointer;
377
- }
360
+ --md-icon-size: 24px;
361
+ }
362
+ #sorters md-icon,
363
+ #modes md-icon {
364
+ --md-icon-size: 18px;
365
+ }
366
+ #sorters {
367
+ margin-left: auto;
368
+ margin-right: var(--margin-default);
369
+ padding-left: var(--padding-narrow);
370
+ border-bottom: var(--border-dark-color);
371
+ position: relative;
372
+ color: var(--secondary-color);
373
+ font-size: var(--fontsize-default);
374
+ user-select: none;
375
+ }
378
376
 
379
- #modes > mwc-icon[active] {
380
- border-radius: 9px;
381
- background-color: rgba(var(--primary-color-rgb), 0.05);
382
- opacity: 1;
383
- color: var(--secondary-text-color);
384
- cursor: default;
385
- }
377
+ #sorters > * {
378
+ padding: var(--padding-narrow);
379
+ vertical-align: middle;
380
+ }
386
381
 
387
- #modes > mwc-icon:hover {
388
- opacity: 1;
389
- color: var(--secondary-text-color);
390
- }
382
+ #modes > * {
383
+ padding: var(--padding-narrow);
384
+ opacity: 0.5;
385
+ color: var(--primary-text-color);
386
+ cursor: pointer;
387
+ }
391
388
 
392
- #add {
393
- width: 50px;
394
- text-align: right;
395
- }
389
+ #modes > md-icon[active] {
390
+ border-radius: 9px;
391
+ background-color: rgba(var(--primary-color-rgb), 0.05);
392
+ opacity: 1;
393
+ color: var(--secondary-text-color);
394
+ cursor: default;
395
+ }
396
396
 
397
- #add button {
398
- background-color: var(--primary-color);
399
- border: 0;
400
- border-radius: 50%;
401
- padding: 5px;
402
- width: 36px;
403
- height: 36px;
404
- cursor: pointer;
405
- }
397
+ #modes > md-icon:hover {
398
+ opacity: 1;
399
+ color: var(--secondary-text-color);
400
+ }
406
401
 
407
- #add button:hover {
408
- background-color: var(--focus-background-color);
409
- box-shadow: var(--box-shadow);
410
- }
402
+ #add {
403
+ width: 50px;
404
+ text-align: right;
405
+ }
411
406
 
412
- #add button mwc-icon {
413
- font-size: 2em;
414
- color: var(--theme-white-color);
415
- }
407
+ #add button {
408
+ background-color: var(--primary-color);
409
+ border: 0;
410
+ border-radius: 50%;
411
+ padding: 5px;
412
+ width: 36px;
413
+ height: 36px;
414
+ cursor: pointer;
415
+ }
416
416
 
417
- #filters {
418
- display: flex;
419
- justify-content: center;
420
- align-items: center;
421
- }
417
+ #add button:hover {
418
+ background-color: var(--focus-background-color);
419
+ box-shadow: var(--box-shadow);
420
+ }
422
421
 
423
- #filters * {
424
- margin-right: var(--margin-default);
425
- }
422
+ #add button md-icon {
423
+ font-size: 2em;
424
+ color: var(--theme-white-color);
425
+ }
426
426
 
427
- @media only screen and (max-width: 460px) {
428
427
  #filters {
429
- flex-direction: column;
428
+ display: flex;
429
+ justify-content: center;
430
+ align-items: center;
430
431
  }
431
432
 
432
- #modes {
433
- display: none;
433
+ #filters * {
434
+ margin-right: var(--margin-default);
434
435
  }
435
- }
436
- </style>
437
436
 
438
- <ox-grist
439
- mode="GRID"
440
- .config=${config}
441
- .fetchHandler=${fetchHandler}
442
- @filters-change=${(e: Event) => console.log('filters', (e.target as any).filters)}
443
- >
444
- <div slot="headroom">
445
- <div id="filters">
446
- <ox-filters-form autofocus></ox-filters-form>
447
- </div>
437
+ @media only screen and (max-width: 460px) {
438
+ #filters {
439
+ flex-direction: column;
440
+ }
448
441
 
449
- <div id="sorters">
450
- Sort
451
- <mwc-icon
452
- @click=${(e: Event) => {
453
- const target = e.currentTarget as HTMLElement
454
- ;(target.closest('#sorters')!.querySelector('#sorter-control') as any).open({
455
- right: 0,
456
- top: target.offsetTop + target.offsetHeight
457
- })
458
- }}
459
- >expand_more</mwc-icon
460
- >
461
- <ox-popup id="sorter-control">
462
- <ox-sorters-control> </ox-sorters-control>
463
- </ox-popup>
464
- </div>
442
+ #modes {
443
+ display: none;
444
+ }
445
+ }
446
+ </style>
447
+
448
+ <ox-grist
449
+ mode="GRID"
450
+ .config=${config}
451
+ .fetchHandler=${fetchHandler}
452
+ @filters-change=${(e: Event) => console.log('filters', (e.target as any).filters)}
453
+ >
454
+ <div slot="headroom">
455
+ <div id="filters">
456
+ <ox-filters-form autofocus></ox-filters-form>
457
+ </div>
465
458
 
466
- <ox-record-creator id="add" light-popup>
467
- <button><mwc-icon>add</mwc-icon></button>
468
- </ox-record-creator>
469
- </div>
470
- </ox-grist>`
459
+ <div id="sorters">
460
+ Sort
461
+ <md-icon
462
+ @click=${(e: Event) => {
463
+ const target = e.currentTarget as HTMLElement
464
+ ;(target.closest('#sorters')!.querySelector('#sorter-control') as any).open({
465
+ right: 0,
466
+ top: target.offsetTop + target.offsetHeight
467
+ })
468
+ }}
469
+ >expand_more</md-icon
470
+ >
471
+ <ox-popup id="sorter-control">
472
+ <ox-sorters-control> </ox-sorters-control>
473
+ </ox-popup>
474
+ </div>
475
+
476
+ <ox-record-creator id="add" light-popup>
477
+ <button><md-icon>add</md-icon></button>
478
+ </ox-record-creator>
479
+ </div>
480
+ </ox-grist>`
471
481
 
472
482
  export const Regular = Template.bind({})
473
483
  Regular.args = {
@@ -3,7 +3,7 @@ import '../src/filters/filters-form.js'
3
3
  import '../src/sorters/sorters-control.js'
4
4
  import '../src/record-view/record-creator.js'
5
5
  import '@operato/popup/ox-popup-list.js'
6
- import '@material/mwc-icon'
6
+ import '@material/web/icon/icon.js'
7
7
 
8
8
  import { html, TemplateResult } from 'lit'
9
9
 
@@ -50,10 +50,10 @@ const fetchHandler: FetchHandler = async ({ page, limit }) => {
50
50
  idx % 4 === 0
51
51
  ? '' /* no source */
52
52
  : idx % 4 === 1
53
- ? `http://www.hatiolab.com/assets/img/operato-biz3.png`
54
- : idx % 4 === 2
55
- ? `http://www.hatiolab.com/assets/img/thingsboard-30.png`
56
- : `http://www.hatiolab.com/wrong-url.png` /* wrong source */,
53
+ ? `http://www.hatiolab.com/assets/img/operato-biz3.png`
54
+ : idx % 4 === 2
55
+ ? `http://www.hatiolab.com/assets/img/thingsboard-30.png`
56
+ : `http://www.hatiolab.com/wrong-url.png` /* wrong source */,
57
57
  role: ['admin', 'worker', 'tester'][idx % 3],
58
58
  color: idx % 2 ? `#87f018` : `#180f87`,
59
59
  rate: Math.round(Math.random() * 100),
@@ -355,161 +355,166 @@ interface ArgTypes {
355
355
  fetchHandler: object
356
356
  }
357
357
 
358
- const Template: Story<ArgTypes> = ({
359
- config,
360
- mode = 'GRID',
361
- urlParamsSensitive = false,
362
- fetchHandler
363
- }: ArgTypes) => html` <link
364
- href="https://fonts.googleapis.com/css?family=Material+Icons&display=block"
365
- rel="stylesheet"
366
- />
367
- <link href="/themes/app-theme.css" rel="stylesheet" />
368
- <link href="/themes/oops-theme.css" rel="stylesheet" />
369
- <link href="/themes/grist-theme.css" rel="stylesheet" />
370
-
371
- <style>
372
- ox-grist {
373
- width: 100%;
374
- height: 600px;
375
- }
358
+ const Template: Story<ArgTypes> = ({ config, mode = 'GRID', urlParamsSensitive = false, fetchHandler }: ArgTypes) =>
359
+ html` <link
360
+ href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL@20..48,100..700,0..1"
361
+ rel="stylesheet"
362
+ />
363
+ <link
364
+ href="https://fonts.googleapis.com/css2?family=Material+Symbols+Rounded:opsz,wght,FILL@20..48,100..700,0..1"
365
+ rel="stylesheet"
366
+ />
367
+ <link
368
+ href="https://fonts.googleapis.com/css2?family=Material+Symbols+Sharp:opsz,wght,FILL@20..48,100..700,0..1"
369
+ rel="stylesheet"
370
+ />
376
371
 
377
- [slot='headroom'] {
378
- display: flex;
379
- flex-direction: row;
380
- align-items: center;
381
- padding: var(--padding-default) var(--padding-wide);
382
- background-color: var(--theme-white-color);
383
- box-shadow: var(--box-shadow);
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" />
384
375
 
385
- --mdc-icon-size: 24px;
386
- }
387
- #sorters mwc-icon,
388
- #modes mwc-icon {
389
- --mdc-icon-size: 18px;
390
- }
391
- #sorters {
392
- margin-left: auto;
393
- margin-right: var(--margin-default);
394
- padding-left: var(--padding-narrow);
395
- border-bottom: var(--border-dark-color);
396
- position: relative;
397
- color: var(--secondary-color);
398
- font-size: var(--fontsize-default);
399
- user-select: none;
400
- }
376
+ <style>
377
+ ox-grist {
378
+ width: 100%;
379
+ height: 600px;
380
+ }
401
381
 
402
- #sorters > * {
403
- padding: var(--padding-narrow);
404
- vertical-align: middle;
405
- }
382
+ [slot='headroom'] {
383
+ display: flex;
384
+ flex-direction: row;
385
+ align-items: center;
386
+ padding: var(--padding-default) var(--padding-wide);
387
+ background-color: var(--theme-white-color);
388
+ box-shadow: var(--box-shadow);
406
389
 
407
- #modes > * {
408
- padding: var(--padding-narrow);
409
- opacity: 0.5;
410
- color: var(--primary-text-color);
411
- cursor: pointer;
412
- }
390
+ --md-icon-size: 24px;
391
+ }
392
+ #sorters md-icon,
393
+ #modes md-icon {
394
+ --md-icon-size: 18px;
395
+ }
396
+ #sorters {
397
+ margin-left: auto;
398
+ margin-right: var(--margin-default);
399
+ padding-left: var(--padding-narrow);
400
+ border-bottom: var(--border-dark-color);
401
+ position: relative;
402
+ color: var(--secondary-color);
403
+ font-size: var(--fontsize-default);
404
+ user-select: none;
405
+ }
413
406
 
414
- #modes > mwc-icon[active] {
415
- border-radius: 9px;
416
- background-color: rgba(var(--primary-color-rgb), 0.05);
417
- opacity: 1;
418
- color: var(--secondary-text-color);
419
- cursor: default;
420
- }
407
+ #sorters > * {
408
+ padding: var(--padding-narrow);
409
+ vertical-align: middle;
410
+ }
421
411
 
422
- #modes > mwc-icon:hover {
423
- opacity: 1;
424
- color: var(--secondary-text-color);
425
- }
412
+ #modes > * {
413
+ padding: var(--padding-narrow);
414
+ opacity: 0.5;
415
+ color: var(--primary-text-color);
416
+ cursor: pointer;
417
+ }
426
418
 
427
- #add {
428
- width: 50px;
429
- text-align: right;
430
- }
419
+ #modes > md-icon[active] {
420
+ border-radius: 9px;
421
+ background-color: rgba(var(--primary-color-rgb), 0.05);
422
+ opacity: 1;
423
+ color: var(--secondary-text-color);
424
+ cursor: default;
425
+ }
431
426
 
432
- #add button {
433
- background-color: var(--primary-color);
434
- border: 0;
435
- border-radius: 50%;
436
- padding: 5px;
437
- width: 36px;
438
- height: 36px;
439
- cursor: pointer;
440
- }
427
+ #modes > md-icon:hover {
428
+ opacity: 1;
429
+ color: var(--secondary-text-color);
430
+ }
441
431
 
442
- #add button:hover {
443
- background-color: var(--focus-background-color);
444
- box-shadow: var(--box-shadow);
445
- }
432
+ #add {
433
+ width: 50px;
434
+ text-align: right;
435
+ }
446
436
 
447
- #add button mwc-icon {
448
- font-size: 2em;
449
- color: var(--theme-white-color);
450
- }
437
+ #add button {
438
+ background-color: var(--primary-color);
439
+ border: 0;
440
+ border-radius: 50%;
441
+ padding: 5px;
442
+ width: 36px;
443
+ height: 36px;
444
+ cursor: pointer;
445
+ }
451
446
 
452
- #filters {
453
- display: flex;
454
- justify-content: center;
455
- align-items: center;
456
- }
447
+ #add button:hover {
448
+ background-color: var(--focus-background-color);
449
+ box-shadow: var(--box-shadow);
450
+ }
457
451
 
458
- #filters * {
459
- margin-right: var(--margin-default);
460
- }
452
+ #add button md-icon {
453
+ font-size: 2em;
454
+ color: var(--theme-white-color);
455
+ }
461
456
 
462
- @media only screen and (max-width: 460px) {
463
457
  #filters {
464
- flex-direction: column;
458
+ display: flex;
459
+ justify-content: center;
460
+ align-items: center;
465
461
  }
466
462
 
467
- #modes {
468
- display: none;
463
+ #filters * {
464
+ margin-right: var(--margin-default);
469
465
  }
470
- }
471
- </style>
472
466
 
473
- <ox-grist
474
- .config=${config}
475
- .mode=${mode}
476
- .fetchHandler=${fetchHandler}
477
- ?url-params-sensitive=${urlParamsSensitive}
478
- @filters-change=${(e: Event) => console.log('filters', (e.target as any).filters)}
479
- >
480
- <div slot="headroom">
481
- <div id="filters">
482
- <ox-filters-form autofocus></ox-filters-form>
483
- </div>
467
+ @media only screen and (max-width: 460px) {
468
+ #filters {
469
+ flex-direction: column;
470
+ }
484
471
 
485
- <div id="sorters">
486
- Sort
487
- <mwc-icon
488
- @click=${(e: Event) => {
489
- const target = e.currentTarget as HTMLElement
490
- ;(target.closest('#sorters')!.querySelector('#sorter-control') as any).open({
491
- right: 0,
492
- top: target.offsetTop + target.offsetHeight
493
- })
494
- }}
495
- >expand_more</mwc-icon
496
- >
497
- <ox-popup id="sorter-control">
498
- <ox-sorters-control> </ox-sorters-control>
499
- </ox-popup>
500
- </div>
472
+ #modes {
473
+ display: none;
474
+ }
475
+ }
476
+ </style>
501
477
 
502
- <div id="modes">
503
- <mwc-icon @click=${() => (mode = 'GRID')} ?active=${mode == 'GRID'}>grid_on</mwc-icon>
504
- <mwc-icon @click=${() => (mode = 'LIST')} ?active=${mode == 'LIST'}>format_list_bulleted</mwc-icon>
505
- <mwc-icon @click=${() => (mode = 'CARD')} ?active=${mode == 'CARD'}>apps</mwc-icon>
506
- </div>
478
+ <ox-grist
479
+ .config=${config}
480
+ .mode=${mode}
481
+ .fetchHandler=${fetchHandler}
482
+ ?url-params-sensitive=${urlParamsSensitive}
483
+ @filters-change=${(e: Event) => console.log('filters', (e.target as any).filters)}
484
+ >
485
+ <div slot="headroom">
486
+ <div id="filters">
487
+ <ox-filters-form autofocus></ox-filters-form>
488
+ </div>
489
+
490
+ <div id="sorters">
491
+ Sort
492
+ <md-icon
493
+ @click=${(e: Event) => {
494
+ const target = e.currentTarget as HTMLElement
495
+ ;(target.closest('#sorters')!.querySelector('#sorter-control') as any).open({
496
+ right: 0,
497
+ top: target.offsetTop + target.offsetHeight
498
+ })
499
+ }}
500
+ >expand_more</md-icon
501
+ >
502
+ <ox-popup id="sorter-control">
503
+ <ox-sorters-control> </ox-sorters-control>
504
+ </ox-popup>
505
+ </div>
507
506
 
508
- <ox-record-creator id="add" light-popup>
509
- <button><mwc-icon>add</mwc-icon></button>
510
- </ox-record-creator>
511
- </div>
512
- </ox-grist>`
507
+ <div id="modes">
508
+ <md-icon @click=${() => (mode = 'GRID')} ?active=${mode == 'GRID'}>grid_on</md-icon>
509
+ <md-icon @click=${() => (mode = 'LIST')} ?active=${mode == 'LIST'}>format_list_bulleted</md-icon>
510
+ <md-icon @click=${() => (mode = 'CARD')} ?active=${mode == 'CARD'}>apps</md-icon>
511
+ </div>
512
+
513
+ <ox-record-creator id="add" light-popup>
514
+ <button><md-icon>add</md-icon></button>
515
+ </ox-record-creator>
516
+ </div>
517
+ </ox-grist>`
513
518
 
514
519
  export const Regular = Template.bind({})
515
520
  Regular.args = {