@universe-platform/ui 0.1.0-beta.10 → 0.1.0-beta.12

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.
package/dist/globals.css CHANGED
@@ -364,18 +364,36 @@
364
364
  .z-20 {
365
365
  z-index: 20;
366
366
  }
367
+ .z-30 {
368
+ z-index: 30;
369
+ }
367
370
  .z-50 {
368
371
  z-index: 50;
369
372
  }
370
- .z-\[100\] {
371
- z-index: 100;
372
- }
373
373
  .z-\[9999\] {
374
374
  z-index: 9999;
375
375
  }
376
376
  .z-\[99999\] {
377
377
  z-index: 99999;
378
378
  }
379
+ .container {
380
+ width: 100%;
381
+ @media (width >= 40rem) {
382
+ max-width: 40rem;
383
+ }
384
+ @media (width >= 48rem) {
385
+ max-width: 48rem;
386
+ }
387
+ @media (width >= 64rem) {
388
+ max-width: 64rem;
389
+ }
390
+ @media (width >= 80rem) {
391
+ max-width: 80rem;
392
+ }
393
+ @media (width >= 96rem) {
394
+ max-width: 96rem;
395
+ }
396
+ }
379
397
  .mx-1 {
380
398
  margin-inline: var(--spacing);
381
399
  }
@@ -397,6 +415,9 @@
397
415
  .mr-1 {
398
416
  margin-right: var(--spacing);
399
417
  }
418
+ .mb-0\.5 {
419
+ margin-bottom: calc(var(--spacing) * 0.5);
420
+ }
400
421
  .mb-1 {
401
422
  margin-bottom: var(--spacing);
402
423
  }
@@ -418,6 +439,9 @@
418
439
  .ml-1 {
419
440
  margin-left: var(--spacing);
420
441
  }
442
+ .ml-2 {
443
+ margin-left: calc(var(--spacing) * 2);
444
+ }
421
445
  .block {
422
446
  display: block;
423
447
  }
@@ -442,9 +466,15 @@
442
466
  .table {
443
467
  display: table;
444
468
  }
469
+ .h-0\.5 {
470
+ height: calc(var(--spacing) * 0.5);
471
+ }
445
472
  .h-2 {
446
473
  height: calc(var(--spacing) * 2);
447
474
  }
475
+ .h-2\.5 {
476
+ height: calc(var(--spacing) * 2.5);
477
+ }
448
478
  .h-3 {
449
479
  height: calc(var(--spacing) * 3);
450
480
  }
@@ -493,27 +523,33 @@
493
523
  .max-h-60 {
494
524
  max-height: calc(var(--spacing) * 60);
495
525
  }
496
- .max-h-\[180px\] {
497
- max-height: 180px;
526
+ .max-h-\[250px\] {
527
+ max-height: 250px;
528
+ }
529
+ .max-h-\[calc\(100vh-240px\)\] {
530
+ max-height: calc(100vh - 240px);
498
531
  }
499
532
  .max-h-full {
500
533
  max-height: 100%;
501
534
  }
535
+ .min-h-0 {
536
+ min-height: 0;
537
+ }
502
538
  .min-h-\[48px\] {
503
539
  min-height: 48px;
504
540
  }
505
541
  .min-h-\[260px\] {
506
542
  min-height: 260px;
507
543
  }
508
- .min-h-\[350px\] {
509
- min-height: 350px;
510
- }
511
544
  .w-1\.5 {
512
545
  width: calc(var(--spacing) * 1.5);
513
546
  }
514
547
  .w-2 {
515
548
  width: calc(var(--spacing) * 2);
516
549
  }
550
+ .w-2\.5 {
551
+ width: calc(var(--spacing) * 2.5);
552
+ }
517
553
  .w-3 {
518
554
  width: calc(var(--spacing) * 3);
519
555
  }
@@ -556,6 +592,9 @@
556
592
  .w-72 {
557
593
  width: calc(var(--spacing) * 72);
558
594
  }
595
+ .w-\[260px\] {
596
+ width: 260px;
597
+ }
559
598
  .w-\[280px\] {
560
599
  width: 280px;
561
600
  }
@@ -574,9 +613,6 @@
574
613
  .max-w-\[160px\] {
575
614
  max-width: 160px;
576
615
  }
577
- .max-w-\[300px\] {
578
- max-width: 300px;
579
- }
580
616
  .max-w-\[calc\(100\%-24px\)\] {
581
617
  max-width: calc(100% - 24px);
582
618
  }
@@ -601,9 +637,6 @@
601
637
  .min-w-\[50px\] {
602
638
  min-width: 50px;
603
639
  }
604
- .min-w-\[200px\] {
605
- min-width: 200px;
606
- }
607
640
  .flex-1 {
608
641
  flex: 1;
609
642
  }
@@ -638,6 +671,9 @@
638
671
  .rotate-180 {
639
672
  rotate: 180deg;
640
673
  }
674
+ .transform {
675
+ transform: var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,);
676
+ }
641
677
  .animate-pulse {
642
678
  animation: var(--animate-pulse);
643
679
  }
@@ -926,6 +962,12 @@
926
962
  .bg-blue-500 {
927
963
  background-color: var(--color-blue-500);
928
964
  }
965
+ .bg-blue-500\/20 {
966
+ background-color: color-mix(in srgb, oklch(62.3% 0.214 259.815) 20%, transparent);
967
+ @supports (color: color-mix(in lab, red, red)) {
968
+ background-color: color-mix(in oklab, var(--color-blue-500) 20%, transparent);
969
+ }
970
+ }
929
971
  .bg-blue-600 {
930
972
  background-color: var(--color-blue-600);
931
973
  }
@@ -1007,6 +1049,12 @@
1007
1049
  background-color: color-mix(in oklab, var(--color-slate-50) 50%, transparent);
1008
1050
  }
1009
1051
  }
1052
+ .bg-slate-50\/60 {
1053
+ background-color: color-mix(in srgb, oklch(98.4% 0.003 247.858) 60%, transparent);
1054
+ @supports (color: color-mix(in lab, red, red)) {
1055
+ background-color: color-mix(in oklab, var(--color-slate-50) 60%, transparent);
1056
+ }
1057
+ }
1010
1058
  .bg-slate-100 {
1011
1059
  background-color: var(--color-slate-100);
1012
1060
  }
@@ -1079,6 +1127,9 @@
1079
1127
  .p-2 {
1080
1128
  padding: calc(var(--spacing) * 2);
1081
1129
  }
1130
+ .p-2\.5 {
1131
+ padding: calc(var(--spacing) * 2.5);
1132
+ }
1082
1133
  .p-3 {
1083
1134
  padding: calc(var(--spacing) * 3);
1084
1135
  }
@@ -1136,9 +1187,18 @@
1136
1187
  .py-12 {
1137
1188
  padding-block: calc(var(--spacing) * 12);
1138
1189
  }
1190
+ .pt-1 {
1191
+ padding-top: var(--spacing);
1192
+ }
1193
+ .pt-1\.5 {
1194
+ padding-top: calc(var(--spacing) * 1.5);
1195
+ }
1139
1196
  .pt-2 {
1140
1197
  padding-top: calc(var(--spacing) * 2);
1141
1198
  }
1199
+ .pr-0\.5 {
1200
+ padding-right: calc(var(--spacing) * 0.5);
1201
+ }
1142
1202
  .pr-2 {
1143
1203
  padding-right: calc(var(--spacing) * 2);
1144
1204
  }
@@ -1148,24 +1208,30 @@
1148
1208
  .pr-9 {
1149
1209
  padding-right: calc(var(--spacing) * 9);
1150
1210
  }
1211
+ .pb-0\.5 {
1212
+ padding-bottom: calc(var(--spacing) * 0.5);
1213
+ }
1151
1214
  .pb-1 {
1152
1215
  padding-bottom: var(--spacing);
1153
1216
  }
1217
+ .pb-1\.5 {
1218
+ padding-bottom: calc(var(--spacing) * 1.5);
1219
+ }
1154
1220
  .pb-2 {
1155
1221
  padding-bottom: calc(var(--spacing) * 2);
1156
1222
  }
1157
1223
  .pb-2\.5 {
1158
1224
  padding-bottom: calc(var(--spacing) * 2.5);
1159
1225
  }
1160
- .pl-2 {
1161
- padding-left: calc(var(--spacing) * 2);
1162
- }
1163
1226
  .pl-3 {
1164
1227
  padding-left: calc(var(--spacing) * 3);
1165
1228
  }
1166
1229
  .pl-6 {
1167
1230
  padding-left: calc(var(--spacing) * 6);
1168
1231
  }
1232
+ .pl-7 {
1233
+ padding-left: calc(var(--spacing) * 7);
1234
+ }
1169
1235
  .pl-8 {
1170
1236
  padding-left: calc(var(--spacing) * 8);
1171
1237
  }
@@ -1370,6 +1436,9 @@
1370
1436
  color: var(--color-slate-400);
1371
1437
  }
1372
1438
  }
1439
+ .accent-\[\#0d9488\] {
1440
+ accent-color: #0d9488;
1441
+ }
1373
1442
  .opacity-0 {
1374
1443
  opacity: 0%;
1375
1444
  }
@@ -1407,10 +1476,6 @@
1407
1476
  --tw-shadow: 0 -2px 4px var(--tw-shadow-color, rgba(0,0,0,0.02));
1408
1477
  box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
1409
1478
  }
1410
- .shadow-lg {
1411
- --tw-shadow: 0 10px 15px -3px var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 4px 6px -4px var(--tw-shadow-color, rgb(0 0 0 / 0.1));
1412
- box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
1413
- }
1414
1479
  .shadow-md {
1415
1480
  --tw-shadow: 0 4px 6px -1px var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 2px 4px -2px var(--tw-shadow-color, rgb(0 0 0 / 0.1));
1416
1481
  box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
@@ -1466,6 +1531,11 @@
1466
1531
  -webkit-backdrop-filter: var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);
1467
1532
  backdrop-filter: var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);
1468
1533
  }
1534
+ .transition {
1535
+ transition-property: color, background-color, border-color, outline-color, text-decoration-color, fill, stroke, --tw-gradient-from, --tw-gradient-via, --tw-gradient-to, opacity, box-shadow, transform, translate, scale, rotate, filter, -webkit-backdrop-filter, backdrop-filter, display, content-visibility, overlay, pointer-events;
1536
+ transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));
1537
+ transition-duration: var(--tw-duration, var(--default-transition-duration));
1538
+ }
1469
1539
  .transition-all {
1470
1540
  transition-property: all;
1471
1541
  transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));
@@ -1543,6 +1613,11 @@
1543
1613
  color: var(--color-blue-900);
1544
1614
  }
1545
1615
  }
1616
+ .placeholder\:text-slate-400 {
1617
+ &::placeholder {
1618
+ color: var(--color-slate-400);
1619
+ }
1620
+ }
1546
1621
  .hover\:border-emerald-400 {
1547
1622
  &:hover {
1548
1623
  @media (hover: hover) {
@@ -1550,6 +1625,13 @@
1550
1625
  }
1551
1626
  }
1552
1627
  }
1628
+ .hover\:bg-amber-100 {
1629
+ &:hover {
1630
+ @media (hover: hover) {
1631
+ background-color: var(--color-amber-100);
1632
+ }
1633
+ }
1634
+ }
1553
1635
  .hover\:bg-amber-100\/80 {
1554
1636
  &:hover {
1555
1637
  @media (hover: hover) {
@@ -1732,6 +1814,13 @@
1732
1814
  }
1733
1815
  }
1734
1816
  }
1817
+ .hover\:text-blue-700 {
1818
+ &:hover {
1819
+ @media (hover: hover) {
1820
+ color: var(--color-blue-700);
1821
+ }
1822
+ }
1823
+ }
1735
1824
  .hover\:text-emerald-600 {
1736
1825
  &:hover {
1737
1826
  @media (hover: hover) {
@@ -1774,6 +1863,13 @@
1774
1863
  }
1775
1864
  }
1776
1865
  }
1866
+ .hover\:text-slate-900 {
1867
+ &:hover {
1868
+ @media (hover: hover) {
1869
+ color: var(--color-slate-900);
1870
+ }
1871
+ }
1872
+ }
1777
1873
  .hover\:underline {
1778
1874
  &:hover {
1779
1875
  @media (hover: hover) {
@@ -1973,6 +2069,26 @@
1973
2069
  inherits: false;
1974
2070
  initial-value: 1;
1975
2071
  }
2072
+ @property --tw-rotate-x {
2073
+ syntax: "*";
2074
+ inherits: false;
2075
+ }
2076
+ @property --tw-rotate-y {
2077
+ syntax: "*";
2078
+ inherits: false;
2079
+ }
2080
+ @property --tw-rotate-z {
2081
+ syntax: "*";
2082
+ inherits: false;
2083
+ }
2084
+ @property --tw-skew-x {
2085
+ syntax: "*";
2086
+ inherits: false;
2087
+ }
2088
+ @property --tw-skew-y {
2089
+ syntax: "*";
2090
+ inherits: false;
2091
+ }
1976
2092
  @property --tw-space-y-reverse {
1977
2093
  syntax: "*";
1978
2094
  inherits: false;
@@ -2172,6 +2288,11 @@
2172
2288
  --tw-scale-x: 1;
2173
2289
  --tw-scale-y: 1;
2174
2290
  --tw-scale-z: 1;
2291
+ --tw-rotate-x: initial;
2292
+ --tw-rotate-y: initial;
2293
+ --tw-rotate-z: initial;
2294
+ --tw-skew-x: initial;
2295
+ --tw-skew-y: initial;
2175
2296
  --tw-space-y-reverse: 0;
2176
2297
  --tw-border-style: solid;
2177
2298
  --tw-leading: initial;
package/dist/index.d.mts CHANGED
@@ -76,7 +76,9 @@ interface BaseComponentProps<TData = any, TConfig = Record<string, any>> extends
76
76
  interface TableConfig extends SchemaDef {
77
77
  }
78
78
  type TableData = RecordData[];
79
- type TableBlockProps = BaseComponentProps<TableData, TableConfig>;
79
+ interface TableBlockProps extends BaseComponentProps<TableData, TableConfig> {
80
+ exportAction?: (payload: any) => Promise<any>;
81
+ }
80
82
  interface CreateRecordPayload {
81
83
  records: RecordData[];
82
84
  }
@@ -228,6 +230,30 @@ interface RelationPickerCellProps {
228
230
  declare function normalizeRelationValue(val: any): string[];
229
231
  declare function RelationPickerCell({ value, onChange, column, context, rowId, readOnly, }: RelationPickerCellProps): react_jsx_runtime.JSX.Element;
230
232
 
233
+ interface RelationFilterOption {
234
+ id: string;
235
+ label: string;
236
+ }
237
+ type RelationFilterPayload = string[] | {
238
+ operator: 'notIn';
239
+ values: string[];
240
+ } | undefined;
241
+ interface RelationFilterPopoverProps {
242
+ isOpen: boolean;
243
+ onClose: () => void;
244
+ column: ColumnDef;
245
+ triggerRect: DOMRect | null;
246
+ options: RelationFilterOption[];
247
+ filterValue?: string[] | {
248
+ operator: 'notIn';
249
+ values: string[];
250
+ };
251
+ selectedValues?: string[];
252
+ onSelectionChange: (payload: RelationFilterPayload) => void;
253
+ isLoading?: boolean;
254
+ }
255
+ declare function RelationFilterPopover({ isOpen, onClose, column, triggerRect, options, filterValue, selectedValues, onSelectionChange, isLoading, }: RelationFilterPopoverProps): react_jsx_runtime.JSX.Element | null;
256
+
231
257
  /**
232
258
  * UNIVERSE_COMPONENTS
233
259
  * Dynamic Component Registry dictionary mapping component type strings (e.g., "TABLE")
@@ -259,4 +285,4 @@ declare function ToastProvider({ children }: {
259
285
 
260
286
  declare function useToast(): ToastContextType;
261
287
 
262
- export { type BaseComponentProps, ColumnHeaderTitle, type ColumnHeaderTitleProps, type ComponentCommunication, type ComponentConfig, type ComponentData, type ComponentPermissions, type ComponentRegistry, type ComponentState, type CreateRecordPayload, DatePickerCell, type DeleteRecordPayload, LinkPickerCell, PASTEL_PALETTES, type PastelPalette, RelationPickerCell, type SplitTitleResult, TableBlock, type TableBlockProps, type TableConfig, type TableData, TimePickerCell, ToastContext, type ToastContextType, type ToastItem, ToastProvider, UNIVERSE_COMPONENTS, type UniverseComponentType, type UpdateRecordPayload, type UseColumnReorderOptions, type UseColumnResizeOptions, calculateMinColumnWidth, cn, formatConflictCellValue, formatPhoneDisplay, formatTimeInput, formatTimeIso, getDeterministicPastelBadge, measureTextWidth, normalizeRelationValue, openWhatsAppChat, parseLinkValue, parseTimeParts, resolveProtocol, splitHeaderTitle, useColumnReorder, useColumnResize, useToast };
288
+ export { type BaseComponentProps, ColumnHeaderTitle, type ColumnHeaderTitleProps, type ComponentCommunication, type ComponentConfig, type ComponentData, type ComponentPermissions, type ComponentRegistry, type ComponentState, type CreateRecordPayload, DatePickerCell, type DeleteRecordPayload, LinkPickerCell, PASTEL_PALETTES, type PastelPalette, type RelationFilterOption, type RelationFilterPayload, RelationFilterPopover, type RelationFilterPopoverProps, RelationPickerCell, type SplitTitleResult, TableBlock, type TableBlockProps, type TableConfig, type TableData, TimePickerCell, ToastContext, type ToastContextType, type ToastItem, ToastProvider, UNIVERSE_COMPONENTS, type UniverseComponentType, type UpdateRecordPayload, type UseColumnReorderOptions, type UseColumnResizeOptions, calculateMinColumnWidth, cn, formatConflictCellValue, formatPhoneDisplay, formatTimeInput, formatTimeIso, getDeterministicPastelBadge, measureTextWidth, normalizeRelationValue, openWhatsAppChat, parseLinkValue, parseTimeParts, resolveProtocol, splitHeaderTitle, useColumnReorder, useColumnResize, useToast };
package/dist/index.d.ts CHANGED
@@ -76,7 +76,9 @@ interface BaseComponentProps<TData = any, TConfig = Record<string, any>> extends
76
76
  interface TableConfig extends SchemaDef {
77
77
  }
78
78
  type TableData = RecordData[];
79
- type TableBlockProps = BaseComponentProps<TableData, TableConfig>;
79
+ interface TableBlockProps extends BaseComponentProps<TableData, TableConfig> {
80
+ exportAction?: (payload: any) => Promise<any>;
81
+ }
80
82
  interface CreateRecordPayload {
81
83
  records: RecordData[];
82
84
  }
@@ -228,6 +230,30 @@ interface RelationPickerCellProps {
228
230
  declare function normalizeRelationValue(val: any): string[];
229
231
  declare function RelationPickerCell({ value, onChange, column, context, rowId, readOnly, }: RelationPickerCellProps): react_jsx_runtime.JSX.Element;
230
232
 
233
+ interface RelationFilterOption {
234
+ id: string;
235
+ label: string;
236
+ }
237
+ type RelationFilterPayload = string[] | {
238
+ operator: 'notIn';
239
+ values: string[];
240
+ } | undefined;
241
+ interface RelationFilterPopoverProps {
242
+ isOpen: boolean;
243
+ onClose: () => void;
244
+ column: ColumnDef;
245
+ triggerRect: DOMRect | null;
246
+ options: RelationFilterOption[];
247
+ filterValue?: string[] | {
248
+ operator: 'notIn';
249
+ values: string[];
250
+ };
251
+ selectedValues?: string[];
252
+ onSelectionChange: (payload: RelationFilterPayload) => void;
253
+ isLoading?: boolean;
254
+ }
255
+ declare function RelationFilterPopover({ isOpen, onClose, column, triggerRect, options, filterValue, selectedValues, onSelectionChange, isLoading, }: RelationFilterPopoverProps): react_jsx_runtime.JSX.Element | null;
256
+
231
257
  /**
232
258
  * UNIVERSE_COMPONENTS
233
259
  * Dynamic Component Registry dictionary mapping component type strings (e.g., "TABLE")
@@ -259,4 +285,4 @@ declare function ToastProvider({ children }: {
259
285
 
260
286
  declare function useToast(): ToastContextType;
261
287
 
262
- export { type BaseComponentProps, ColumnHeaderTitle, type ColumnHeaderTitleProps, type ComponentCommunication, type ComponentConfig, type ComponentData, type ComponentPermissions, type ComponentRegistry, type ComponentState, type CreateRecordPayload, DatePickerCell, type DeleteRecordPayload, LinkPickerCell, PASTEL_PALETTES, type PastelPalette, RelationPickerCell, type SplitTitleResult, TableBlock, type TableBlockProps, type TableConfig, type TableData, TimePickerCell, ToastContext, type ToastContextType, type ToastItem, ToastProvider, UNIVERSE_COMPONENTS, type UniverseComponentType, type UpdateRecordPayload, type UseColumnReorderOptions, type UseColumnResizeOptions, calculateMinColumnWidth, cn, formatConflictCellValue, formatPhoneDisplay, formatTimeInput, formatTimeIso, getDeterministicPastelBadge, measureTextWidth, normalizeRelationValue, openWhatsAppChat, parseLinkValue, parseTimeParts, resolveProtocol, splitHeaderTitle, useColumnReorder, useColumnResize, useToast };
288
+ export { type BaseComponentProps, ColumnHeaderTitle, type ColumnHeaderTitleProps, type ComponentCommunication, type ComponentConfig, type ComponentData, type ComponentPermissions, type ComponentRegistry, type ComponentState, type CreateRecordPayload, DatePickerCell, type DeleteRecordPayload, LinkPickerCell, PASTEL_PALETTES, type PastelPalette, type RelationFilterOption, type RelationFilterPayload, RelationFilterPopover, type RelationFilterPopoverProps, RelationPickerCell, type SplitTitleResult, TableBlock, type TableBlockProps, type TableConfig, type TableData, TimePickerCell, ToastContext, type ToastContextType, type ToastItem, ToastProvider, UNIVERSE_COMPONENTS, type UniverseComponentType, type UpdateRecordPayload, type UseColumnReorderOptions, type UseColumnResizeOptions, calculateMinColumnWidth, cn, formatConflictCellValue, formatPhoneDisplay, formatTimeInput, formatTimeIso, getDeterministicPastelBadge, measureTextWidth, normalizeRelationValue, openWhatsAppChat, parseLinkValue, parseTimeParts, resolveProtocol, splitHeaderTitle, useColumnReorder, useColumnResize, useToast };