@dashboard-designer/ui 0.1.2 → 0.1.27

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/styles.css CHANGED
@@ -589,9 +589,90 @@
589
589
  transition: box-shadow 120ms ease;
590
590
  }
591
591
 
592
+ /* Never show resize grips in view / readonly mode */
593
+ .dd-root.dd-readonly .dd-canvas .react-resizable-handle,
594
+ .dd-root.dd-readonly .dd-canvas .dd-grid-resize-handle {
595
+ display: none !important;
596
+ visibility: hidden !important;
597
+ pointer-events: none !important;
598
+ opacity: 0 !important;
599
+ }
600
+
601
+ .dd-root:not(.dd-readonly) .dd-canvas .react-grid-item {
602
+ overflow: visible;
603
+ }
604
+
592
605
  .dd-canvas .react-grid-item > .dd-widget,
593
- .dd-canvas .react-grid-item > div {
606
+ .dd-canvas .react-grid-item > div:not(.react-resizable-handle) {
594
607
  height: 100%;
608
+ position: relative;
609
+ z-index: 1;
610
+ }
611
+
612
+ /* Pass clicks through widget corner to the resize handle */
613
+ .dd-root:not(.dd-readonly) .dd-canvas .react-grid-item > .dd-widget {
614
+ pointer-events: none;
615
+ }
616
+
617
+ .dd-root:not(.dd-readonly) .dd-canvas .react-grid-item > .dd-widget > * {
618
+ pointer-events: auto;
619
+ }
620
+
621
+ .dd-root:not(.dd-readonly) .dd-canvas .react-grid-item > .dd-widget .dd-widget-body {
622
+ clip-path: polygon(
623
+ 0 0,
624
+ 100% 0,
625
+ 100% calc(100% - 28px),
626
+ calc(100% - 28px) calc(100% - 28px),
627
+ calc(100% - 28px) 100%,
628
+ 0 100%
629
+ );
630
+ }
631
+
632
+ /* Bottom-right resize handle (edit mode); left calc keeps physical right in RTL */
633
+ .dd-root:not(.dd-readonly) .dd-canvas .react-grid-item .dd-grid-resize-handle {
634
+ position: absolute !important;
635
+ z-index: 100;
636
+ pointer-events: auto;
637
+ display: flex !important;
638
+ visibility: visible !important;
639
+ opacity: 1 !important;
640
+ align-items: center;
641
+ justify-content: center;
642
+ background-image: none;
643
+ padding: 0;
644
+ box-sizing: border-box;
645
+ touch-action: none;
646
+ margin: 0 !important;
647
+ transform: none !important;
648
+ }
649
+
650
+ .dd-root:not(.dd-readonly) .dd-canvas .react-grid-item .dd-grid-resize-handle.react-resizable-handle-se {
651
+ width: 20px;
652
+ height: 20px;
653
+ top: auto !important;
654
+ right: auto !important;
655
+ left: calc(100% - 30px) !important;
656
+ bottom: 10px !important;
657
+ cursor: se-resize;
658
+ background: var(--dd-surface);
659
+ border: 1px solid var(--dd-border);
660
+ border-radius: 4px;
661
+ color: var(--dd-muted);
662
+ box-shadow: 0 1px 3px color-mix(in srgb, var(--dd-shadow) 65%, transparent);
663
+ }
664
+
665
+ .dd-root:not(.dd-readonly) .dd-canvas .react-grid-item .dd-grid-resize-handle-icon {
666
+ flex-shrink: 0;
667
+ pointer-events: none;
668
+ opacity: 0.85;
669
+ }
670
+
671
+ .dd-root:not(.dd-readonly) .dd-canvas .react-grid-item .dd-grid-resize-handle:hover,
672
+ .dd-root:not(.dd-readonly) .dd-canvas .react-grid-item.resizing .dd-grid-resize-handle {
673
+ color: var(--dd-accent);
674
+ border-color: color-mix(in srgb, var(--dd-accent) 50%, var(--dd-border));
675
+ box-shadow: 0 1px 4px color-mix(in srgb, var(--dd-accent) 25%, transparent);
595
676
  }
596
677
 
597
678
  .dd-canvas .react-resizable-handle::after {
@@ -614,6 +695,34 @@
614
695
  box-shadow: 0 0 0 2px var(--dd-accent-soft), var(--dd-shadow);
615
696
  }
616
697
 
698
+ .dd-widget-headerless {
699
+ position: relative;
700
+ }
701
+
702
+ .dd-widget-headerless .dd-widget-body {
703
+ flex: 1;
704
+ min-height: 0;
705
+ }
706
+
707
+ .dd-widget-floating-actions {
708
+ position: absolute;
709
+ top: 6px;
710
+ right: 6px;
711
+ z-index: 3;
712
+ display: flex;
713
+ gap: 2px;
714
+ pointer-events: auto;
715
+ }
716
+
717
+ .dd-widget-headerless .dd-widget-body.dd-widget-drag {
718
+ cursor: grab;
719
+ user-select: none;
720
+ }
721
+
722
+ .dd-widget-headerless .dd-widget-body.dd-widget-drag:active {
723
+ cursor: grabbing;
724
+ }
725
+
617
726
  .dd-widget-header {
618
727
  display: flex;
619
728
  justify-content: space-between;
@@ -1241,10 +1350,23 @@ select.dd-input[multiple] {
1241
1350
  background: #64748b;
1242
1351
  }
1243
1352
 
1353
+ .dd-filters-popover-arrow {
1354
+ position: fixed;
1355
+ z-index: 41;
1356
+ width: 10px;
1357
+ height: 10px;
1358
+ margin: -5px 0 0 -5px;
1359
+ transform: rotate(45deg);
1360
+ background: var(--dd-surface);
1361
+ border-left: 1px solid var(--dd-border);
1362
+ border-top: 1px solid var(--dd-border);
1363
+ border-top-left-radius: 2px;
1364
+ }
1365
+
1244
1366
  .dd-filters-popover-panel {
1245
- position: absolute;
1246
- top: calc(100% + 8px);
1247
- right: 0;
1367
+ position: fixed;
1368
+ top: 0;
1369
+ left: 0;
1248
1370
  z-index: 40;
1249
1371
  width: min(640px, calc(100vw - 32px));
1250
1372
  max-height: min(420px, 70vh);
@@ -1506,6 +1628,257 @@ select.dd-input[multiple] {
1506
1628
  font-size: 13px;
1507
1629
  }
1508
1630
 
1631
+ .dd-label-widget {
1632
+ width: 100%;
1633
+ height: 100%;
1634
+ display: flex;
1635
+ align-items: center;
1636
+ justify-content: center;
1637
+ padding: 12px 16px;
1638
+ border: none;
1639
+ border-radius: var(--dd-radius-sm);
1640
+ text-align: center;
1641
+ line-height: 1.35;
1642
+ font-weight: 600;
1643
+ font-family: inherit;
1644
+ box-sizing: border-box;
1645
+ appearance: none;
1646
+ -webkit-appearance: none;
1647
+ color: var(--dd-on-accent, #fff);
1648
+ background-color: var(--dd-accent);
1649
+ }
1650
+
1651
+ .dd-label-widget-text {
1652
+ display: block;
1653
+ white-space: pre-wrap;
1654
+ word-break: break-word;
1655
+ }
1656
+
1657
+ .dd-label-widget-link:not(:disabled) {
1658
+ cursor: pointer;
1659
+ }
1660
+
1661
+ .dd-label-widget-link:not(:disabled):hover {
1662
+ filter: brightness(0.95);
1663
+ }
1664
+
1665
+ .dd-label-widget:disabled {
1666
+ cursor: default;
1667
+ opacity: 1;
1668
+ color: var(--dd-on-accent, #fff);
1669
+ background-color: var(--dd-accent);
1670
+ }
1671
+
1672
+ .dd-label-container {
1673
+ width: 100%;
1674
+ height: 100%;
1675
+ min-height: 0;
1676
+ box-sizing: border-box;
1677
+ border-radius: var(--dd-radius-sm);
1678
+ background-color: transparent;
1679
+ }
1680
+
1681
+ .dd-label-container-vertical {
1682
+ display: flex;
1683
+ flex-direction: column;
1684
+ align-items: stretch;
1685
+ }
1686
+
1687
+ .dd-label-container-horizontal {
1688
+ display: flex;
1689
+ flex-direction: row;
1690
+ flex-wrap: wrap;
1691
+ align-items: center;
1692
+ }
1693
+
1694
+ .dd-label-container-empty {
1695
+ display: block;
1696
+ text-align: center;
1697
+ padding: 8px;
1698
+ }
1699
+
1700
+ .dd-container-label {
1701
+ display: block;
1702
+ width: 100%;
1703
+ padding: 8px 12px;
1704
+ border: none;
1705
+ border-radius: var(--dd-radius-sm);
1706
+ text-align: center;
1707
+ line-height: 1.35;
1708
+ font-weight: 600;
1709
+ font-family: inherit;
1710
+ box-sizing: border-box;
1711
+ appearance: none;
1712
+ -webkit-appearance: none;
1713
+ color: var(--dd-on-accent, #fff);
1714
+ background-color: var(--dd-accent);
1715
+ }
1716
+
1717
+ .dd-container-label:disabled {
1718
+ cursor: default;
1719
+ opacity: 1;
1720
+ color: var(--dd-on-accent, #fff);
1721
+ background-color: var(--dd-accent);
1722
+ }
1723
+
1724
+ .dd-label-container-horizontal .dd-container-label {
1725
+ width: auto;
1726
+ flex: 0 1 auto;
1727
+ }
1728
+
1729
+ .dd-container-label-text {
1730
+ display: block;
1731
+ white-space: pre-wrap;
1732
+ word-break: break-word;
1733
+ }
1734
+
1735
+ .dd-container-label-link:not(:disabled) {
1736
+ cursor: pointer;
1737
+ }
1738
+
1739
+ .dd-container-label-link:not(:disabled):hover {
1740
+ filter: brightness(0.95);
1741
+ }
1742
+
1743
+ .dd-label-container-editor {
1744
+ display: flex;
1745
+ flex-direction: column;
1746
+ gap: 12px;
1747
+ }
1748
+
1749
+ .dd-label-container-editor-item {
1750
+ padding: 12px;
1751
+ border: 1px solid var(--dd-border);
1752
+ border-radius: var(--dd-radius);
1753
+ background: color-mix(in srgb, var(--dd-surface) 96%, var(--dd-border));
1754
+ }
1755
+
1756
+ .dd-label-container-editor-head {
1757
+ display: flex;
1758
+ align-items: center;
1759
+ justify-content: space-between;
1760
+ gap: 8px;
1761
+ margin-bottom: 8px;
1762
+ }
1763
+
1764
+ .dd-label-container-editor-actions {
1765
+ display: flex;
1766
+ align-items: center;
1767
+ gap: 2px;
1768
+ flex-shrink: 0;
1769
+ }
1770
+
1771
+ .dd-field-label-row {
1772
+ display: flex;
1773
+ align-items: center;
1774
+ justify-content: space-between;
1775
+ gap: 12px;
1776
+ margin-bottom: 8px;
1777
+ }
1778
+
1779
+ .dd-label-style-row {
1780
+ display: grid;
1781
+ grid-template-columns: repeat(3, minmax(0, 1fr));
1782
+ gap: 10px;
1783
+ }
1784
+
1785
+ .dd-color-input {
1786
+ padding: 4px;
1787
+ height: 38px;
1788
+ min-height: 38px;
1789
+ }
1790
+
1791
+ .dd-field-row {
1792
+ display: flex;
1793
+ gap: 10px;
1794
+ flex-wrap: wrap;
1795
+ }
1796
+
1797
+ .dd-measure-aggregations {
1798
+ display: flex;
1799
+ flex-direction: column;
1800
+ gap: 8px;
1801
+ }
1802
+
1803
+ .dd-measure-agg-row {
1804
+ display: flex;
1805
+ align-items: center;
1806
+ gap: 10px;
1807
+ }
1808
+
1809
+ .dd-measure-agg-field {
1810
+ flex: 1;
1811
+ min-width: 0;
1812
+ font-size: 13px;
1813
+ font-family: var(--dd-mono);
1814
+ color: var(--dd-muted);
1815
+ overflow: hidden;
1816
+ text-overflow: ellipsis;
1817
+ white-space: nowrap;
1818
+ }
1819
+
1820
+ .dd-measure-agg-select {
1821
+ width: 120px;
1822
+ flex-shrink: 0;
1823
+ }
1824
+
1825
+ .dd-label-color-swap-btn {
1826
+ width: 38px;
1827
+ min-width: 38px;
1828
+ height: 38px;
1829
+ padding: 0;
1830
+ }
1831
+
1832
+ .dd-guidelines-editor {
1833
+ margin-top: 4px;
1834
+ }
1835
+
1836
+ .dd-guidelines-group {
1837
+ margin-top: 10px;
1838
+ display: flex;
1839
+ flex-direction: column;
1840
+ gap: 8px;
1841
+ }
1842
+
1843
+ .dd-guidelines-group-head {
1844
+ display: flex;
1845
+ align-items: center;
1846
+ justify-content: space-between;
1847
+ gap: 8px;
1848
+ }
1849
+
1850
+ .dd-guidelines-group-title {
1851
+ font-size: 12px;
1852
+ font-weight: 700;
1853
+ color: var(--dd-muted);
1854
+ text-transform: uppercase;
1855
+ letter-spacing: 0.04em;
1856
+ }
1857
+
1858
+ .dd-guideline-item {
1859
+ padding: 10px 12px;
1860
+ border: 1px solid var(--dd-border-subtle);
1861
+ border-radius: var(--dd-radius-sm);
1862
+ background: var(--dd-surface);
1863
+ }
1864
+
1865
+ .dd-guideline-item-head {
1866
+ display: flex;
1867
+ align-items: center;
1868
+ justify-content: space-between;
1869
+ gap: 8px;
1870
+ margin-bottom: 8px;
1871
+ }
1872
+
1873
+ .dd-guideline-item-title {
1874
+ font-size: 13px;
1875
+ font-weight: 600;
1876
+ }
1877
+
1878
+ .dd-guideline-fields {
1879
+ align-items: flex-end;
1880
+ }
1881
+
1509
1882
  .dd-listbox {
1510
1883
  display: flex;
1511
1884
  flex-direction: column;
@@ -1612,6 +1985,12 @@ select.dd-input[multiple] {
1612
1985
  z-index: 1;
1613
1986
  }
1614
1987
 
1988
+ .dd-table-empty-cell {
1989
+ color: var(--dd-muted);
1990
+ text-align: center;
1991
+ padding: 16px;
1992
+ }
1993
+
1615
1994
  .dd-muted {
1616
1995
  color: var(--dd-muted);
1617
1996
  font-size: 13px;
@@ -2920,6 +3299,7 @@ select.dd-input[multiple] {
2920
3299
  html.dd-print-mode .dd-widget-drag-grip,
2921
3300
  html.dd-print-mode .dd-canvas-empty,
2922
3301
  html.dd-print-mode .dd-badge,
3302
+ html.dd-print-mode .dd-grid-resize-handle,
2923
3303
  html.dd-print-mode .react-resizable-handle {
2924
3304
  display: none !important;
2925
3305
  }
@@ -3016,3 +3396,14 @@ select.dd-input[multiple] {
3016
3396
  }
3017
3397
  }
3018
3398
 
3399
+
3400
+
3401
+ /* --- table-empty-overrides.css --- */
3402
+ /* Overrides .dd-table td { text-align: left } for empty-state rows */
3403
+ .dd-table td.dd-table-empty-cell {
3404
+ text-align: center;
3405
+ }
3406
+
3407
+ .dd-query-data-table td.dd-query-data-empty-cell {
3408
+ text-align: center;
3409
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dashboard-designer/ui",
3
- "version": "0.1.2",
3
+ "version": "0.1.27",
4
4
  "type": "module",
5
5
  "main": "./dist/index.js",
6
6
  "module": "./dist/index.js",
@@ -15,17 +15,11 @@
15
15
  "files": [
16
16
  "dist"
17
17
  ],
18
- "scripts": {
19
- "build": "tsup src/index.ts --format esm --dts --external react --external react-dom --external lucide-react && node ./scripts/copy-css.mjs",
20
- "typecheck": "tsc --noEmit",
21
- "dev": "tsup src/index.ts --format esm --dts --external react --external react-dom --external lucide-react --watch"
22
- },
23
18
  "peerDependencies": {
24
19
  "react": "^18.0.0 || ^19.0.0",
25
20
  "react-dom": "^18.0.0 || ^19.0.0"
26
21
  },
27
22
  "dependencies": {
28
- "@dashboard-designer/core": "^0.1.1",
29
23
  "html2canvas": "^1.4.1",
30
24
  "i18next": "^24.2.2",
31
25
  "jspdf": "^4.2.1",
@@ -33,7 +27,8 @@
33
27
  "react-grid-layout": "^1.5.0",
34
28
  "react-i18next": "^15.4.1",
35
29
  "react-resizable": "^3.0.5",
36
- "recharts": "^2.15.1"
30
+ "recharts": "^2.15.1",
31
+ "@dashboard-designer/core": "0.1.15"
37
32
  },
38
33
  "devDependencies": {
39
34
  "@types/react": "^19.0.10",
@@ -46,5 +41,10 @@
46
41
  },
47
42
  "publishConfig": {
48
43
  "access": "public"
44
+ },
45
+ "scripts": {
46
+ "build": "tsup src/index.ts --format esm --dts --external react --external react-dom --external lucide-react && node ./scripts/copy-css.mjs",
47
+ "typecheck": "tsc --noEmit",
48
+ "dev": "tsup src/index.ts --format esm --dts --external react --external react-dom --external lucide-react --watch"
49
49
  }
50
- }
50
+ }