@zeyos/zx 4.3.0 → 4.3.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 (34) hide show
  1. package/CHANGELOG.md +111 -1
  2. package/README.md +0 -3
  3. package/dist/types/components/calendar/calendar-model.d.ts +22 -0
  4. package/dist/types/components/card-view/card-view.d.ts +1 -1
  5. package/dist/types/components/card-view/record-card.d.ts +47 -5
  6. package/dist/types/components/kanban-view/kanban-policy.d.ts +268 -0
  7. package/dist/types/components/kanban-view/kanban-view.d.ts +669 -24
  8. package/dist/types/core/component.d.ts +6 -1
  9. package/dist/types/index.d.ts +2 -1
  10. package/dist/zx-zeyos.esm.js +35 -11
  11. package/dist/zx-zeyos.esm.min.js +1 -1
  12. package/dist/zx.css +597 -78
  13. package/dist/zx.esm.js +1758 -238
  14. package/dist/zx.esm.min.js +3 -3
  15. package/dist/zx.global.js +1758 -238
  16. package/dist/zx.global.min.js +3 -3
  17. package/dist/zx.min.css +1 -1
  18. package/docs/api.json +214 -2
  19. package/docs/llms.md +30 -30
  20. package/docs/llms.txt +0 -2
  21. package/package.json +1 -2
  22. package/src/components/calendar/calendar-model.js +45 -0
  23. package/src/components/calendar/calendar.css +30 -10
  24. package/src/components/calendar/calendar.js +8 -10
  25. package/src/components/card-view/card-view.css +211 -9
  26. package/src/components/card-view/card-view.js +7 -7
  27. package/src/components/card-view/record-card.js +92 -19
  28. package/src/components/kanban-view/kanban-policy.js +412 -0
  29. package/src/components/kanban-view/kanban-view.css +480 -36
  30. package/src/components/kanban-view/kanban-view.js +1514 -235
  31. package/src/components/message/message.css +9 -10
  32. package/src/core/component.js +8 -3
  33. package/src/index.js +8 -3
  34. package/DESIGN-SYSTEM.md +0 -182
package/dist/zx.css CHANGED
@@ -3399,29 +3399,30 @@ button.zx-panel__toggle:focus-visible {
3399
3399
  }
3400
3400
  .zx-message__toast {
3401
3401
  --zx-message-kind: var(--zx-color-info);
3402
+ --zx-message-fallback-bg: var(--zx-color-info-bg);
3402
3403
  position: relative;
3403
3404
  display: grid;
3404
3405
  grid-template-columns: auto minmax(0, 1fr) auto;
3405
3406
  align-items: start;
3406
3407
  gap: var(--zx-space-3);
3407
3408
  border: 1px solid var(--zx-color-overlay-border);
3408
- border-radius: var(--zx-radius-md);
3409
- background: var(--zx-color-info-bg);
3409
+ border-radius: var(--zx-radius-lg);
3410
+ background: var(--zx-message-fallback-bg);
3410
3411
  box-shadow: inset 0 0 0 1px var(--zx-message-kind), var(--zx-glass-raised-shadow);
3411
3412
  padding: var(--zx-space-3);
3412
3413
  color: var(--zx-color-text);
3413
3414
  }
3414
3415
  .zx-message__toast[data-kind=success] {
3415
3416
  --zx-message-kind: var(--zx-color-success);
3416
- background: var(--zx-color-success-bg);
3417
+ --zx-message-fallback-bg: var(--zx-color-success-bg);
3417
3418
  }
3418
3419
  .zx-message__toast[data-kind=warning] {
3419
3420
  --zx-message-kind: var(--zx-color-warning);
3420
- background: var(--zx-color-warning-bg);
3421
+ --zx-message-fallback-bg: var(--zx-color-warning-bg);
3421
3422
  }
3422
3423
  .zx-message__toast[data-kind=error] {
3423
3424
  --zx-message-kind: var(--zx-color-danger);
3424
- background: var(--zx-color-danger-bg);
3425
+ --zx-message-fallback-bg: var(--zx-color-danger-bg);
3425
3426
  }
3426
3427
  @supports ((backdrop-filter: blur(1px)) or (-webkit-backdrop-filter: blur(1px))) {
3427
3428
  .zx-message__toast {
@@ -3431,28 +3432,17 @@ button.zx-panel__toggle:focus-visible {
3431
3432
  background-clip: padding-box;
3432
3433
  -webkit-backdrop-filter: var(--zx-glass-filter-overlay);
3433
3434
  backdrop-filter: var(--zx-glass-filter-overlay);
3434
- box-shadow: var(--zx-glass-overlay-shadow);
3435
+ box-shadow: inset 3px 0 0 color-mix(in srgb, var(--zx-message-kind) 72%, var(--zx-color-glass-highlight-strong)), var(--zx-glass-overlay-shadow);
3435
3436
  }
3436
3437
  }
3437
3438
  @media (prefers-reduced-transparency: reduce) {
3438
3439
  .zx-message__toast {
3439
3440
  border-color: var(--zx-color-border);
3441
+ background: var(--zx-message-fallback-bg);
3440
3442
  -webkit-backdrop-filter: none;
3441
3443
  backdrop-filter: none;
3442
3444
  box-shadow: var(--zx-overlay-shadow);
3443
3445
  }
3444
- .zx-message__toast[data-kind=info] {
3445
- background: var(--zx-color-info-bg);
3446
- }
3447
- .zx-message__toast[data-kind=success] {
3448
- background: var(--zx-color-success-bg);
3449
- }
3450
- .zx-message__toast[data-kind=warning] {
3451
- background: var(--zx-color-warning-bg);
3452
- }
3453
- .zx-message__toast[data-kind=error] {
3454
- background: var(--zx-color-danger-bg);
3455
- }
3456
3446
  }
3457
3447
  .zx-message__icon {
3458
3448
  display: inline-grid;
@@ -6091,14 +6081,14 @@ body:has(.zx-modal:modal) {
6091
6081
  min-inline-size: 0;
6092
6082
  overflow: hidden;
6093
6083
  border: 1px solid var(--zx-color-border);
6094
- border-radius: var(--zx-radius-lg);
6084
+ border-radius: 0;
6095
6085
  background: var(--zx-color-bg-surface);
6096
6086
  color: var(--zx-color-text);
6097
6087
  font-size: var(--zx-text-sm);
6098
6088
  }
6099
6089
  .zx-calendar__toolbar {
6100
6090
  display: grid;
6101
- grid-template-columns: 1fr auto 1fr;
6091
+ grid-template-columns: auto minmax(0, 1fr) auto;
6102
6092
  align-items: center;
6103
6093
  gap: var(--zx-space-3);
6104
6094
  min-inline-size: 0;
@@ -6121,7 +6111,12 @@ body:has(.zx-modal:modal) {
6121
6111
  gap: var(--zx-space-3);
6122
6112
  }
6123
6113
  .zx-calendar__views {
6114
+ block-size: var(--zx-control-height);
6115
+ gap: 2px;
6124
6116
  overflow-x: auto;
6117
+ border-radius: 0;
6118
+ background: var(--zx-color-bg-muted);
6119
+ padding: 3px;
6125
6120
  }
6126
6121
  .zx-calendar__toolbar-button,
6127
6122
  .zx-calendar__view-button,
@@ -6146,24 +6141,20 @@ body:has(.zx-modal:modal) {
6146
6141
  padding-inline: var(--zx-space-2);
6147
6142
  }
6148
6143
  .zx-calendar__view-button {
6149
- border-inline-end-width: 0;
6144
+ block-size: 100%;
6145
+ min-block-size: 0;
6146
+ border-color: transparent;
6147
+ border-radius: 0;
6148
+ background: transparent;
6150
6149
  padding-inline: var(--zx-space-3);
6151
6150
  }
6152
- .zx-calendar__view-button:first-child {
6153
- border-start-start-radius: var(--zx-control-radius);
6154
- border-end-start-radius: var(--zx-control-radius);
6155
- }
6156
- .zx-calendar__view-button:last-child {
6157
- border-inline-end-width: 1px;
6158
- border-start-end-radius: var(--zx-control-radius);
6159
- border-end-end-radius: var(--zx-control-radius);
6160
- }
6161
6151
  .zx-calendar__view-button[aria-pressed=true] {
6162
6152
  position: relative;
6163
6153
  z-index: 1;
6164
- border-color: var(--zx-color-accent);
6165
- background: var(--zx-color-bg-selected);
6166
- color: var(--zx-color-accent);
6154
+ border-color: var(--zx-color-border-control);
6155
+ background: var(--zx-color-bg-control);
6156
+ box-shadow: var(--zx-shadow-2);
6157
+ color: var(--zx-color-text);
6167
6158
  }
6168
6159
  .zx-calendar__new {
6169
6160
  gap: var(--zx-space-2);
@@ -6175,7 +6166,7 @@ body:has(.zx-modal:modal) {
6175
6166
  font-weight: 650;
6176
6167
  }
6177
6168
  .zx-calendar__toolbar-button:hover:not(:disabled),
6178
- .zx-calendar__view-button:hover:not(:disabled) {
6169
+ .zx-calendar__view-button:hover:not(:disabled):not([aria-pressed=true]) {
6179
6170
  background: var(--zx-color-bg-hover);
6180
6171
  }
6181
6172
  .zx-calendar__new:hover:not(:disabled) {
@@ -6246,6 +6237,7 @@ body:has(.zx-modal:modal) {
6246
6237
  min-block-size: calc(var(--zx-control-height) + var(--zx-space-2));
6247
6238
  place-content: center;
6248
6239
  border: 0;
6240
+ border-radius: 0;
6249
6241
  border-inline-end: 1px solid var(--zx-color-border);
6250
6242
  background: var(--zx-color-bg-surface);
6251
6243
  color: var(--zx-color-text);
@@ -6336,6 +6328,7 @@ body:has(.zx-modal:modal) {
6336
6328
  .zx-calendar__slot {
6337
6329
  min-inline-size: 0;
6338
6330
  border: 0;
6331
+ border-radius: 0;
6339
6332
  border-block-start: 1px solid var(--zx-color-border);
6340
6333
  border-inline-end: 1px solid var(--zx-color-border);
6341
6334
  background: var(--zx-color-bg-surface);
@@ -7450,8 +7443,12 @@ body:has(.zx-modal:modal) {
7450
7443
 
7451
7444
  /* src/components/card-view/card-view.css */
7452
7445
  .zx-card-view {
7453
- --zx-card-view-min-card-width: 18rem;
7446
+ --zx-card-view-min-card-width: 15rem;
7454
7447
  --zx-card-view-column-basis: 0%;
7448
+ --zx-card-view-card-padding: var(--zx-space-3);
7449
+ --zx-card-view-card-gap: var(--zx-space-2);
7450
+ --zx-card-view-grid-gap: var(--zx-space-3);
7451
+ --zx-card-view-preview-size: 1.75rem;
7455
7452
  inline-size: 100%;
7456
7453
  min-inline-size: 0;
7457
7454
  container-type: inline-size;
@@ -7488,18 +7485,19 @@ body:has(.zx-modal:modal) {
7488
7485
  min-inline-size: 0;
7489
7486
  }
7490
7487
  .zx-card-view__group + .zx-card-view__group {
7491
- margin-block-start: var(--zx-space-6);
7488
+ margin-block-start: var(--zx-space-4);
7492
7489
  }
7493
7490
  .zx-card-view__group-heading {
7494
- margin: 0 0 var(--zx-space-3);
7491
+ margin: 0 0 var(--zx-space-2);
7495
7492
  color: var(--zx-color-text);
7496
- font-size: var(--zx-text-lg);
7497
- line-height: 1.35;
7493
+ font-size: var(--zx-text-sm);
7494
+ font-weight: 600;
7495
+ line-height: 1.3;
7498
7496
  }
7499
7497
  .zx-card-view__list {
7500
7498
  display: grid;
7501
- grid-template-columns: repeat(auto-fit, minmax(min(100%, max(var(--zx-card-view-min-card-width), calc(var(--zx-card-view-column-basis) - var(--zx-space-4)))), 1fr));
7502
- gap: var(--zx-space-4);
7499
+ grid-template-columns: repeat(auto-fill, minmax(min(100%, max(var(--zx-card-view-min-card-width), calc(var(--zx-card-view-column-basis) - var(--zx-card-view-grid-gap)))), 1fr));
7500
+ gap: var(--zx-card-view-grid-gap);
7503
7501
  min-inline-size: 0;
7504
7502
  margin: 0;
7505
7503
  padding: 0;
@@ -7535,7 +7533,7 @@ body:has(.zx-modal:modal) {
7535
7533
  outline: none;
7536
7534
  box-shadow: var(--zx-focus-ring);
7537
7535
  }
7538
- .zx-record-card[aria-selected=true] {
7536
+ .zx-record-card[data-selected=true] {
7539
7537
  border-color: var(--zx-color-accent);
7540
7538
  box-shadow: inset 0 0 0 1px var(--zx-color-accent);
7541
7539
  }
@@ -7602,6 +7600,35 @@ body:has(.zx-modal:modal) {
7602
7600
  flex: 1 1 auto;
7603
7601
  min-inline-size: 0;
7604
7602
  }
7603
+ .zx-record-card__eyebrow {
7604
+ display: flex;
7605
+ align-items: flex-start;
7606
+ gap: var(--zx-space-2);
7607
+ min-inline-size: 0;
7608
+ }
7609
+ .zx-record-card__eyebrow-group,
7610
+ .zx-record-card__title-prefix {
7611
+ display: flex;
7612
+ flex-wrap: wrap;
7613
+ align-items: center;
7614
+ gap: var(--zx-space-1);
7615
+ min-inline-size: 0;
7616
+ margin: 0;
7617
+ }
7618
+ .zx-record-card__eyebrow-group[data-card-slot=eyebrow-end] {
7619
+ justify-content: flex-end;
7620
+ margin-inline-start: auto;
7621
+ }
7622
+ .zx-record-card__title-row {
7623
+ display: flex;
7624
+ align-items: flex-start;
7625
+ gap: var(--zx-space-2);
7626
+ min-inline-size: 0;
7627
+ }
7628
+ .zx-record-card__title-row > .zx-record-card__heading {
7629
+ flex: 1 1 auto;
7630
+ min-inline-size: 0;
7631
+ }
7605
7632
  .zx-record-card__heading {
7606
7633
  margin: 0;
7607
7634
  overflow-wrap: anywhere;
@@ -7781,13 +7808,154 @@ body:has(.zx-modal:modal) {
7781
7808
  box-shadow var(--zx-dur-fast) var(--zx-ease);
7782
7809
  }
7783
7810
  }
7811
+ .zx-card-view .zx-record-card {
7812
+ border-radius: var(--zx-radius-md);
7813
+ }
7814
+ .zx-card-view .zx-record-card:has(> .zx-record-card__preview) {
7815
+ grid-template-columns: auto minmax(0, 1fr);
7816
+ align-items: start;
7817
+ }
7818
+ .zx-card-view .zx-record-card__preview {
7819
+ inline-size: var(--zx-card-view-preview-size);
7820
+ block-size: var(--zx-card-view-preview-size);
7821
+ margin-block-start: var(--zx-card-view-card-padding);
7822
+ margin-inline-start: var(--zx-card-view-card-padding);
7823
+ border: 0;
7824
+ border-radius: var(--zx-radius-sm);
7825
+ aspect-ratio: 1;
7826
+ }
7827
+ .zx-card-view .zx-record-card__preview .zx-icon {
7828
+ inline-size: .875rem;
7829
+ block-size: .875rem;
7830
+ }
7831
+ .zx-card-view .zx-record-card__body {
7832
+ gap: var(--zx-card-view-card-gap);
7833
+ padding: var(--zx-card-view-card-padding);
7834
+ }
7835
+ .zx-card-view .zx-record-card:has(> .zx-record-card__preview) .zx-record-card__body {
7836
+ padding-inline-start: var(--zx-card-view-card-gap);
7837
+ }
7838
+ .zx-card-view .zx-record-card__header {
7839
+ gap: var(--zx-space-2);
7840
+ }
7841
+ .zx-card-view .zx-record-card__selection {
7842
+ min-block-size: 1.25rem;
7843
+ }
7844
+ .zx-card-view .zx-record-card__heading {
7845
+ font-size: var(--zx-text-md);
7846
+ font-weight: 600;
7847
+ line-height: 1.3;
7848
+ }
7849
+ .zx-card-view .zx-record-card__primary,
7850
+ .zx-card-view .zx-record-card__title {
7851
+ display: -webkit-box;
7852
+ overflow: hidden;
7853
+ -webkit-box-orient: vertical;
7854
+ -webkit-line-clamp: 2;
7855
+ }
7856
+ .zx-card-view .zx-record-card__subtitle {
7857
+ margin-block-start: calc(var(--zx-space-1) / 2);
7858
+ overflow: hidden;
7859
+ font-size: var(--zx-text-xs);
7860
+ line-height: 1.3;
7861
+ text-overflow: ellipsis;
7862
+ white-space: nowrap;
7863
+ }
7864
+ .zx-card-view .zx-record-card__actions {
7865
+ flex-wrap: nowrap;
7866
+ gap: calc(var(--zx-space-1) / 2);
7867
+ }
7868
+ .zx-card-view .zx-record-card__action {
7869
+ min-block-size: 1.75rem;
7870
+ border-color: transparent;
7871
+ background: transparent;
7872
+ padding-inline: var(--zx-space-2);
7873
+ font-size: var(--zx-text-xs);
7874
+ }
7875
+ .zx-card-view .zx-record-card__metadata {
7876
+ display: flex;
7877
+ flex-wrap: wrap;
7878
+ gap: var(--zx-space-1);
7879
+ }
7880
+ .zx-card-view .zx-record-card__field {
7881
+ display: inline-flex;
7882
+ flex: 0 1 auto;
7883
+ align-items: center;
7884
+ gap: var(--zx-space-1);
7885
+ max-inline-size: 100%;
7886
+ border: 1px solid var(--zx-color-border);
7887
+ border-radius: var(--zx-radius-full);
7888
+ background: var(--zx-color-bg-muted);
7889
+ padding: calc(var(--zx-space-1) / 2) var(--zx-space-2);
7890
+ }
7891
+ .zx-card-view .zx-record-card__label {
7892
+ flex: none;
7893
+ font-size: var(--zx-text-xs);
7894
+ font-weight: 500;
7895
+ line-height: 1.2;
7896
+ }
7897
+ .zx-card-view .zx-record-card__value {
7898
+ overflow: hidden;
7899
+ font-size: var(--zx-text-xs);
7900
+ line-height: 1.2;
7901
+ text-overflow: ellipsis;
7902
+ white-space: nowrap;
7903
+ }
7904
+ .zx-card-view .zx-card-view__group-empty {
7905
+ padding: var(--zx-space-3);
7906
+ font-size: var(--zx-text-sm);
7907
+ }
7908
+ .zx-card-view .zx-card-view__empty {
7909
+ min-block-size: 6rem;
7910
+ border-radius: var(--zx-radius-md);
7911
+ padding: var(--zx-space-4);
7912
+ font-size: var(--zx-text-sm);
7913
+ }
7914
+ .zx-card-view .zx-card-view__skeleton {
7915
+ grid-template-columns: var(--zx-card-view-preview-size) minmax(0, 1fr);
7916
+ gap: var(--zx-card-view-card-gap);
7917
+ padding: var(--zx-card-view-card-padding);
7918
+ }
7919
+ .zx-card-view .zx-card-view__skeleton-preview {
7920
+ grid-row: 1 / span 2;
7921
+ inline-size: var(--zx-card-view-preview-size);
7922
+ margin: 0;
7923
+ aspect-ratio: 1;
7924
+ border-radius: var(--zx-radius-sm);
7925
+ }
7926
+ .zx-card-view .zx-card-view__skeleton-line {
7927
+ min-inline-size: 0;
7928
+ block-size: .625rem;
7929
+ }
7930
+ .zx-card-view .zx-card-view__skeleton-line:nth-child(3) {
7931
+ inline-size: 62%;
7932
+ }
7933
+ .zx-card-view .zx-card-view__skeleton-line:nth-child(4) {
7934
+ grid-column: 1 / -1;
7935
+ inline-size: 42%;
7936
+ }
7937
+ @media (pointer: coarse) {
7938
+ .zx-card-view .zx-record-card__selection,
7939
+ .zx-card-view .zx-record-card__action {
7940
+ min-inline-size: 44px;
7941
+ min-block-size: 44px;
7942
+ }
7943
+ }
7784
7944
 
7785
7945
  /* src/components/kanban-view/kanban-view.css */
7786
7946
  .zx-kanban-view {
7947
+ --zx-kanban-column-width: 18.5rem;
7948
+ --zx-kanban-thumbnail-size: 2rem;
7949
+ --zx-kanban-card-padding-block: var(--zx-space-2);
7950
+ --zx-kanban-card-padding-inline: var(--zx-space-3);
7951
+ --zx-kanban-card-gap: var(--zx-space-2);
7787
7952
  inline-size: 100%;
7788
7953
  min-inline-size: 0;
7789
7954
  container-type: inline-size;
7790
7955
  }
7956
+ .zx-kanban-view__toolbar {
7957
+ margin-block-end: var(--zx-space-1);
7958
+ }
7791
7959
  .zx-kanban-view__toolbar:empty {
7792
7960
  display: none;
7793
7961
  }
@@ -7795,53 +7963,56 @@ body:has(.zx-modal:modal) {
7795
7963
  min-inline-size: 0;
7796
7964
  overflow: auto;
7797
7965
  overscroll-behavior-inline: contain;
7798
- border: 1px solid var(--zx-color-border);
7799
- border-radius: var(--zx-radius-lg);
7800
- background: var(--zx-color-bg-muted);
7801
- padding: var(--zx-space-3);
7802
7966
  scrollbar-gutter: stable;
7803
7967
  }
7804
7968
  .zx-kanban-view__lane + .zx-kanban-view__lane {
7805
- margin-block-start: var(--zx-space-4);
7969
+ margin-block-start: var(--zx-space-3);
7806
7970
  border-block-start: 1px solid var(--zx-color-border);
7807
- padding-block-start: var(--zx-space-3);
7971
+ padding-block-start: var(--zx-space-2);
7808
7972
  }
7809
7973
  .zx-kanban-view__lane-heading,
7810
7974
  .zx-kanban-view__column-heading {
7811
7975
  display: flex;
7812
7976
  align-items: center;
7813
- gap: var(--zx-space-2);
7977
+ min-inline-size: 0;
7814
7978
  margin: 0;
7815
7979
  color: var(--zx-color-text);
7816
- font-size: var(--zx-text-md);
7980
+ font-size: var(--zx-text-sm);
7817
7981
  font-weight: var(--zx-control-font-weight);
7818
- line-height: 1.3;
7982
+ line-height: 1.25;
7819
7983
  }
7820
7984
  .zx-kanban-view__lane-heading {
7985
+ min-block-size: 2rem;
7986
+ gap: var(--zx-space-1);
7987
+ margin-block-end: var(--zx-space-1);
7988
+ }
7989
+ .zx-kanban-view__column-heading {
7990
+ min-block-size: 2rem;
7991
+ gap: var(--zx-space-1);
7821
7992
  margin-block-end: var(--zx-space-2);
7822
7993
  }
7823
7994
  .zx-kanban-view__columns {
7824
7995
  display: grid;
7825
7996
  grid-auto-flow: column;
7826
- grid-auto-columns: minmax(260px, min(82vw, 340px));
7997
+ grid-auto-columns: minmax(18rem, var(--zx-kanban-column-width));
7827
7998
  align-items: start;
7828
- gap: var(--zx-space-3);
7999
+ gap: var(--zx-space-4);
7829
8000
  min-inline-size: max-content;
7830
8001
  }
8002
+ .zx-kanban-view__columns[hidden],
8003
+ .zx-kanban-view__cards[hidden] {
8004
+ display: none;
8005
+ }
7831
8006
  .zx-kanban-view__column {
7832
8007
  display: grid;
7833
- grid-template-rows: auto minmax(64px, auto);
7834
- gap: var(--zx-space-2);
8008
+ grid-template-rows: auto minmax(4rem, auto);
7835
8009
  min-inline-size: 0;
7836
- border: 1px solid var(--zx-color-border);
7837
- border-radius: var(--zx-radius-md);
7838
- background: var(--zx-color-bg-surface);
7839
- padding: var(--zx-space-2);
7840
8010
  }
7841
8011
  .zx-kanban-view__column[data-collapsed=true] {
7842
8012
  grid-template-rows: auto;
7843
8013
  }
7844
8014
  .zx-kanban-view__column-label {
8015
+ order: 1;
7845
8016
  min-inline-size: 0;
7846
8017
  overflow: hidden;
7847
8018
  text-overflow: ellipsis;
@@ -7849,6 +8020,7 @@ body:has(.zx-modal:modal) {
7849
8020
  }
7850
8021
  .zx-kanban-view__collapse,
7851
8022
  .zx-kanban-view__move-handle {
8023
+ position: relative;
7852
8024
  display: inline-grid;
7853
8025
  flex: 0 0 auto;
7854
8026
  place-items: center;
@@ -7859,12 +8031,14 @@ body:has(.zx-modal:modal) {
7859
8031
  cursor: pointer;
7860
8032
  }
7861
8033
  .zx-kanban-view__collapse {
7862
- inline-size: 26px;
7863
- block-size: 26px;
8034
+ order: 3;
8035
+ inline-size: calc(var(--zx-control-height) - var(--zx-space-1));
8036
+ block-size: calc(var(--zx-control-height) - var(--zx-space-1));
8037
+ margin-inline-start: auto;
7864
8038
  }
7865
8039
  .zx-kanban-view__move-handle {
7866
- inline-size: 28px;
7867
- block-size: 28px;
8040
+ inline-size: calc(var(--zx-control-height) - var(--zx-space-1));
8041
+ block-size: calc(var(--zx-control-height) - var(--zx-space-1));
7868
8042
  cursor: grab;
7869
8043
  touch-action: none;
7870
8044
  }
@@ -7885,38 +8059,222 @@ body:has(.zx-modal:modal) {
7885
8059
  box-shadow: var(--zx-focus-ring);
7886
8060
  }
7887
8061
  .zx-kanban-view__count {
8062
+ order: 2;
7888
8063
  flex: 0 0 auto;
7889
- margin-inline-start: auto;
7890
- border-radius: var(--zx-radius-sm);
7891
- background: var(--zx-color-bg-muted);
7892
- padding: var(--zx-space-1) var(--zx-space-2);
7893
8064
  color: var(--zx-color-text-muted);
7894
- font-size: var(--zx-control-font-size);
7895
- font-weight: var(--zx-control-font-weight);
8065
+ font-size: var(--zx-text-xs);
8066
+ font-weight: 400;
8067
+ line-height: 1.25;
7896
8068
  white-space: nowrap;
7897
8069
  }
7898
8070
  .zx-kanban-view__column[data-wip=limit] .zx-kanban-view__count {
7899
- background: var(--zx-color-warning-bg);
7900
8071
  color: var(--zx-color-warning);
8072
+ font-weight: 600;
7901
8073
  }
7902
8074
  .zx-kanban-view__column[data-wip=exceeded] .zx-kanban-view__count {
7903
- background: var(--zx-color-danger-bg);
7904
8075
  color: var(--zx-color-danger);
8076
+ font-weight: 600;
8077
+ }
8078
+ .zx-kanban-view__lane[data-wip=limit] > .zx-kanban-view__lane-heading .zx-kanban-view__count {
8079
+ color: var(--zx-color-warning);
8080
+ font-weight: 600;
8081
+ }
8082
+ .zx-kanban-view__lane[data-wip=exceeded] > .zx-kanban-view__lane-heading .zx-kanban-view__count {
8083
+ color: var(--zx-color-danger);
8084
+ font-weight: 600;
7905
8085
  }
7906
8086
  .zx-kanban-view__cards {
7907
8087
  position: relative;
7908
8088
  display: flex;
7909
8089
  flex-direction: column;
7910
8090
  gap: var(--zx-space-2);
7911
- min-block-size: 64px;
8091
+ min-block-size: 4rem;
7912
8092
  margin: 0;
7913
- border-radius: var(--zx-radius-sm);
7914
- padding: var(--zx-space-1);
8093
+ padding: 0;
7915
8094
  list-style: none;
7916
8095
  }
7917
8096
  .zx-kanban-view__cards > .zx-record-card {
7918
8097
  inline-size: 100%;
7919
8098
  min-inline-size: 0;
8099
+ overflow: visible;
8100
+ border-radius: var(--zx-radius-md);
8101
+ }
8102
+ .zx-kanban-view :where(.zx-record-card[data-variant=outlined]) {
8103
+ box-shadow: var(--zx-shadow-1);
8104
+ }
8105
+ .zx-kanban-view .zx-record-card:has(> .zx-record-card__preview) {
8106
+ grid-template-columns: var(--zx-kanban-thumbnail-size) minmax(0, 1fr);
8107
+ align-items: start;
8108
+ column-gap: var(--zx-space-2);
8109
+ padding-block: var(--zx-kanban-card-padding-block);
8110
+ padding-inline: var(--zx-kanban-card-padding-inline);
8111
+ }
8112
+ .zx-kanban-view .zx-record-card > .zx-record-card__preview {
8113
+ inline-size: var(--zx-kanban-thumbnail-size);
8114
+ block-size: var(--zx-kanban-thumbnail-size);
8115
+ aspect-ratio: 1;
8116
+ align-self: start;
8117
+ border: 0;
8118
+ border-radius: var(--zx-radius-sm);
8119
+ }
8120
+ .zx-kanban-view .zx-record-card:has(> .zx-record-card__preview) > .zx-record-card__body {
8121
+ padding: 0;
8122
+ }
8123
+ .zx-kanban-view .zx-record-card:not(:has(> .zx-record-card__preview)) > .zx-record-card__body {
8124
+ padding-block: var(--zx-kanban-card-padding-block);
8125
+ padding-inline: var(--zx-kanban-card-padding-inline);
8126
+ }
8127
+ .zx-kanban-view .zx-record-card__body {
8128
+ gap: var(--zx-kanban-card-gap);
8129
+ }
8130
+ .zx-kanban-view .zx-record-card__header {
8131
+ gap: var(--zx-space-2);
8132
+ }
8133
+ .zx-kanban-view .zx-record-card__selection {
8134
+ min-block-size: calc(var(--zx-control-height) - var(--zx-space-1));
8135
+ }
8136
+ .zx-kanban-view .zx-record-card__heading {
8137
+ display: -webkit-box;
8138
+ overflow: hidden;
8139
+ font-size: var(--zx-text-md);
8140
+ font-weight: 600;
8141
+ line-height: 1.3;
8142
+ -webkit-box-orient: vertical;
8143
+ -webkit-line-clamp: 2;
8144
+ }
8145
+ .zx-kanban-view .zx-record-card__subtitle {
8146
+ margin-block-start: var(--zx-space-1);
8147
+ overflow: hidden;
8148
+ font-size: var(--zx-text-xs);
8149
+ line-height: 1.3;
8150
+ text-overflow: ellipsis;
8151
+ white-space: nowrap;
8152
+ }
8153
+ .zx-kanban-view .zx-record-card__actions {
8154
+ gap: 0;
8155
+ opacity: 0;
8156
+ pointer-events: none;
8157
+ }
8158
+ .zx-kanban-view .zx-record-card:hover .zx-record-card__actions,
8159
+ .zx-kanban-view .zx-record-card:focus-within .zx-record-card__actions,
8160
+ .zx-kanban-view .zx-record-card[data-selected=true] .zx-record-card__actions,
8161
+ .zx-kanban-view .zx-record-card[data-grabbed=true] .zx-record-card__actions {
8162
+ opacity: 1;
8163
+ pointer-events: auto;
8164
+ }
8165
+ .zx-kanban-view .zx-record-card__action {
8166
+ inline-size: calc(var(--zx-control-height) - var(--zx-space-1));
8167
+ min-block-size: calc(var(--zx-control-height) - var(--zx-space-1));
8168
+ padding: 0;
8169
+ }
8170
+ .zx-kanban-view .zx-record-card__action-label {
8171
+ position: absolute;
8172
+ inline-size: 1px;
8173
+ block-size: 1px;
8174
+ overflow: hidden;
8175
+ clip-path: inset(50%);
8176
+ white-space: nowrap;
8177
+ }
8178
+ .zx-kanban-view .zx-record-card__metadata {
8179
+ display: flex;
8180
+ flex-wrap: wrap;
8181
+ gap: var(--zx-space-2);
8182
+ }
8183
+ .zx-kanban-view .zx-record-card__field {
8184
+ display: inline-flex;
8185
+ align-items: center;
8186
+ gap: var(--zx-space-1);
8187
+ min-inline-size: 0;
8188
+ max-inline-size: 100%;
8189
+ min-block-size: 0;
8190
+ border: 0;
8191
+ padding: 0;
8192
+ }
8193
+ .zx-kanban-view .zx-record-card__label,
8194
+ .zx-kanban-view .zx-record-card__value {
8195
+ overflow: hidden;
8196
+ font-size: var(--zx-text-xs);
8197
+ line-height: 1.2;
8198
+ text-overflow: ellipsis;
8199
+ white-space: nowrap;
8200
+ }
8201
+ .zx-kanban-view .zx-record-card__label {
8202
+ flex: none;
8203
+ color: var(--zx-color-text-muted);
8204
+ font-weight: 500;
8205
+ }
8206
+ .zx-kanban-view .zx-record-card__value {
8207
+ min-inline-size: 0;
8208
+ }
8209
+ .zx-kanban-view .zx-record-card__eyebrow {
8210
+ display: flex;
8211
+ align-items: center;
8212
+ gap: var(--zx-space-2);
8213
+ min-block-size: 1.25rem;
8214
+ min-inline-size: 0;
8215
+ }
8216
+ .zx-kanban-view .zx-record-card__eyebrow-group,
8217
+ .zx-kanban-view .zx-record-card__title-prefix {
8218
+ display: flex;
8219
+ align-items: center;
8220
+ gap: var(--zx-space-1);
8221
+ min-inline-size: 0;
8222
+ margin: 0;
8223
+ }
8224
+ .zx-kanban-view .zx-record-card__eyebrow-group[data-card-slot=eyebrow-end] {
8225
+ justify-content: flex-end;
8226
+ margin-inline-start: auto;
8227
+ }
8228
+ .zx-kanban-view .zx-record-card__eyebrow-group .zx-record-card__label,
8229
+ .zx-kanban-view .zx-record-card__title-prefix .zx-record-card__label {
8230
+ position: absolute;
8231
+ inline-size: 1px;
8232
+ block-size: 1px;
8233
+ overflow: hidden;
8234
+ clip-path: inset(50%);
8235
+ white-space: nowrap;
8236
+ }
8237
+ .zx-kanban-view .zx-record-card__eyebrow-group[data-card-slot=eyebrow-start] .zx-record-card__field {
8238
+ border-radius: var(--zx-radius-full);
8239
+ background: var(--zx-color-bg-muted);
8240
+ padding: calc(var(--zx-space-1) / 2) var(--zx-space-2);
8241
+ }
8242
+ .zx-kanban-view .zx-record-card__eyebrow-group .zx-record-card__value {
8243
+ color: var(--zx-color-text-muted);
8244
+ }
8245
+ .zx-kanban-view .zx-record-card__eyebrow-group .zx-record-card__value > :only-child {
8246
+ display: inline-flex;
8247
+ align-items: center;
8248
+ gap: var(--zx-space-1);
8249
+ min-inline-size: 0;
8250
+ }
8251
+ .zx-kanban-view .zx-record-card__title-row {
8252
+ display: flex;
8253
+ align-items: flex-start;
8254
+ gap: var(--zx-space-2);
8255
+ min-inline-size: 0;
8256
+ }
8257
+ .zx-kanban-view .zx-record-card__title-row .zx-record-card__heading {
8258
+ min-inline-size: 0;
8259
+ }
8260
+ .zx-kanban-view .zx-record-card__title-prefix {
8261
+ flex: none;
8262
+ padding-block-start: calc(var(--zx-space-1) + 1px);
8263
+ }
8264
+ .zx-kanban-view .zx-record-card__title-prefix .zx-record-card__value {
8265
+ display: grid;
8266
+ place-items: center;
8267
+ color: var(--zx-color-accent);
8268
+ line-height: 1;
8269
+ }
8270
+ .zx-kanban-view .zx-record-card__title-prefix .zx-icon {
8271
+ inline-size: .5rem;
8272
+ block-size: .5rem;
8273
+ }
8274
+ .zx-kanban-view .zx-record-card__title-prefix .zx-badge {
8275
+ border: 0;
8276
+ background: transparent;
8277
+ padding: 0;
7920
8278
  }
7921
8279
  .zx-kanban-view__cards[data-drop=append],
7922
8280
  .zx-kanban-view__cards[data-keyboard-target=append] {
@@ -7939,7 +8297,7 @@ body:has(.zx-modal:modal) {
7939
8297
  .zx-kanban-view__empty {
7940
8298
  display: grid;
7941
8299
  place-items: center;
7942
- min-block-size: 160px;
8300
+ min-block-size: 6rem;
7943
8301
  color: var(--zx-color-text-muted);
7944
8302
  text-align: center;
7945
8303
  }
@@ -7955,14 +8313,38 @@ body:has(.zx-modal:modal) {
7955
8313
  pointer-events: none;
7956
8314
  }
7957
8315
  @container (max-width: 420px) {
7958
- .zx-kanban-view__columns {
7959
- grid-auto-columns: minmax(240px, 88vw);
8316
+ .zx-kanban-view .zx-record-card__label {
8317
+ position: absolute;
8318
+ inline-size: 1px;
8319
+ block-size: 1px;
8320
+ overflow: hidden;
8321
+ clip-path: inset(50%);
8322
+ white-space: nowrap;
7960
8323
  }
7961
8324
  }
8325
+ @media (hover: none), (pointer: coarse) {
8326
+ .zx-kanban-view .zx-record-card__actions {
8327
+ opacity: 1;
8328
+ pointer-events: auto;
8329
+ }
8330
+ }
8331
+ @media (pointer: coarse) {
8332
+ .zx-kanban-view__collapse,
8333
+ .zx-kanban-view__move-handle,
8334
+ .zx-kanban-view .zx-record-card__action,
8335
+ .zx-kanban-view .zx-record-card__selection {
8336
+ inline-size: 2.75rem;
8337
+ min-block-size: 2.75rem;
8338
+ }
8339
+ }
8340
+ [data-zx-density=compact] .zx-kanban-view {
8341
+ --zx-kanban-card-padding-inline: var(--zx-space-2);
8342
+ }
7962
8343
  @media (prefers-reduced-motion: no-preference) {
7963
8344
  .zx-kanban-view__collapse,
7964
8345
  .zx-kanban-view__move-handle,
7965
- .zx-kanban-view .zx-record-card {
8346
+ .zx-kanban-view .zx-record-card,
8347
+ .zx-kanban-view .zx-record-card__actions {
7966
8348
  transition:
7967
8349
  color var(--zx-dur-fast) var(--zx-ease),
7968
8350
  background var(--zx-dur-fast) var(--zx-ease),
@@ -7970,6 +8352,143 @@ body:has(.zx-modal:modal) {
7970
8352
  opacity var(--zx-dur-fast) var(--zx-ease);
7971
8353
  }
7972
8354
  }
8355
+ .zx-kanban-view__toolbar {
8356
+ display: flex;
8357
+ flex-wrap: wrap;
8358
+ align-items: center;
8359
+ gap: var(--zx-space-2);
8360
+ }
8361
+ .zx-kanban-view__search {
8362
+ position: relative;
8363
+ display: inline-flex;
8364
+ align-items: center;
8365
+ gap: var(--zx-space-1);
8366
+ min-inline-size: 0;
8367
+ }
8368
+ .zx-kanban-view__search > .zx-icon {
8369
+ position: absolute;
8370
+ inset-inline-start: var(--zx-control-pad-x);
8371
+ color: var(--zx-color-text-muted);
8372
+ pointer-events: none;
8373
+ }
8374
+ .zx-kanban-view__search-input {
8375
+ min-inline-size: 12rem;
8376
+ max-inline-size: 100%;
8377
+ padding-inline-start: calc(var(--zx-control-pad-x) * 2 + 13px);
8378
+ }
8379
+ .zx-kanban-view__search-input::-webkit-search-cancel-button {
8380
+ cursor: pointer;
8381
+ }
8382
+ .zx-kanban-view__history {
8383
+ display: inline-flex;
8384
+ gap: var(--zx-space-1);
8385
+ margin-inline-start: auto;
8386
+ }
8387
+ .zx-kanban-view[data-column-scroll=true] .zx-kanban-view__cards {
8388
+ max-block-size: var(--zx-kanban-column-height);
8389
+ overflow-y: auto;
8390
+ overscroll-behavior-block: contain;
8391
+ scrollbar-gutter: stable;
8392
+ }
8393
+ .zx-kanban-view__add {
8394
+ display: inline-flex;
8395
+ align-items: center;
8396
+ justify-content: center;
8397
+ gap: var(--zx-space-1);
8398
+ margin-block-start: var(--zx-space-2);
8399
+ border: 1px dashed var(--zx-color-border);
8400
+ border-radius: var(--zx-radius-md);
8401
+ background: transparent;
8402
+ padding-block: var(--zx-space-1);
8403
+ color: var(--zx-color-text-muted);
8404
+ font-size: var(--zx-text-xs);
8405
+ cursor: pointer;
8406
+ }
8407
+ .zx-kanban-view__add:hover {
8408
+ border-color: var(--zx-color-border-strong);
8409
+ background: var(--zx-color-bg-hover);
8410
+ color: var(--zx-color-text);
8411
+ }
8412
+ .zx-kanban-view__add:focus-visible {
8413
+ outline: none;
8414
+ box-shadow: var(--zx-focus-ring);
8415
+ }
8416
+ .zx-kanban-view__add[hidden] {
8417
+ display: none;
8418
+ }
8419
+ .zx-kanban-view__column-empty {
8420
+ display: grid;
8421
+ place-items: center;
8422
+ min-block-size: 4rem;
8423
+ padding: var(--zx-space-2);
8424
+ color: var(--zx-color-text-muted);
8425
+ font-size: var(--zx-text-xs);
8426
+ text-align: center;
8427
+ }
8428
+ .zx-kanban-view .zx-record-card[data-rule-tone] {
8429
+ position: relative;
8430
+ overflow: hidden;
8431
+ }
8432
+ .zx-kanban-view .zx-record-card[data-rule-tone]::before {
8433
+ position: absolute;
8434
+ inset-block: 0;
8435
+ inset-inline-start: 0;
8436
+ inline-size: 3px;
8437
+ background: var(--zx-color-border-strong);
8438
+ content: "";
8439
+ }
8440
+ .zx-kanban-view .zx-record-card[data-rule-tone=accent]::before {
8441
+ background: var(--zx-color-accent);
8442
+ }
8443
+ .zx-kanban-view .zx-record-card[data-rule-tone=success]::before {
8444
+ background: var(--zx-color-success);
8445
+ }
8446
+ .zx-kanban-view .zx-record-card[data-rule-tone=warning]::before {
8447
+ background: var(--zx-color-warning);
8448
+ }
8449
+ .zx-kanban-view .zx-record-card[data-rule-tone=danger]::before {
8450
+ background: var(--zx-color-danger);
8451
+ }
8452
+ .zx-kanban-view .zx-record-card[data-rule-tone=info]::before {
8453
+ background: var(--zx-color-info);
8454
+ }
8455
+ .zx-kanban-view__rules {
8456
+ display: flex;
8457
+ flex-wrap: wrap;
8458
+ gap: var(--zx-space-1);
8459
+ margin: 0;
8460
+ }
8461
+ .zx-kanban-view__board[data-dragging=true] {
8462
+ cursor: grabbing;
8463
+ user-select: none;
8464
+ }
8465
+ .zx-kanban-view__board[data-dragging=true] .zx-record-card {
8466
+ cursor: grabbing;
8467
+ }
8468
+ .zx-kanban-view__drag-preview {
8469
+ position: fixed;
8470
+ inset-block-start: 0;
8471
+ inset-inline-start: 0;
8472
+ z-index: 2;
8473
+ max-inline-size: var(--zx-kanban-column-width);
8474
+ border: 1px solid var(--zx-color-border);
8475
+ border-radius: var(--zx-radius-md);
8476
+ background: var(--zx-color-bg-raised);
8477
+ box-shadow: var(--zx-shadow-2);
8478
+ padding: var(--zx-space-1) var(--zx-space-2);
8479
+ color: var(--zx-color-text);
8480
+ font-size: var(--zx-text-xs);
8481
+ white-space: nowrap;
8482
+ overflow: hidden;
8483
+ text-overflow: ellipsis;
8484
+ pointer-events: none;
8485
+ translate: var(--zx-space-3) var(--zx-space-3);
8486
+ }
8487
+ @media (pointer: coarse) {
8488
+ .zx-kanban-view__add {
8489
+ min-block-size: 2.75rem;
8490
+ }
8491
+ }
7973
8492
 
7974
8493
  /* src/components/grid/grid.css */
7975
8494
  .zx-table[data-preset=billing-items] tr.zx-grid-billing__summary > td {