@aortl/admin-react 0.15.0 → 0.16.0

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.
@@ -299,6 +299,7 @@
299
299
  --tracking-wide: 0.025em;
300
300
  --leading-tight: 1.25;
301
301
  --leading-snug: 1.375;
302
+ --leading-normal: 1.5;
302
303
  --leading-relaxed: 1.625;
303
304
  --radius-sm: 0.25rem;
304
305
  --radius-md: 0.375rem;
@@ -436,6 +437,10 @@
436
437
  --color-border-strong: light-dark(var(--color-base-300), var(--color-base-700));
437
438
  --color-code-surface: light-dark(var(--color-base-150), var(--color-base-950));
438
439
  --color-code-text: light-dark(var(--color-base-800), var(--color-base-200));
440
+ --color-scrim: color-mix(in srgb, #0f0f0f 40%, transparent);
441
+ @supports (color: color-mix(in lab, red, red)) {
442
+ --color-scrim: color-mix(in oklab, var(--color-black) 40%, transparent);
443
+ }
439
444
  --color-primary: light-dark(var(--color-black), var(--color-paper));
440
445
  --color-primary-hover: light-dark(var(--color-base-800), var(--color-base-200));
441
446
  --color-primary-muted: light-dark(var(--color-base-150), var(--color-base-800));
@@ -989,7 +994,8 @@
989
994
  line-height: 1;
990
995
  white-space: nowrap;
991
996
  color: var(--color-text-muted);
992
- font-variant-numeric: tabular-nums;
997
+ --tw-numeric-spacing: tabular-nums;
998
+ font-variant-numeric: var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,);
993
999
  }
994
1000
  :scope._ao-kbd-group, :scope ._ao-kbd-group {
995
1001
  display: inline-flex;
@@ -1365,24 +1371,26 @@
1365
1371
  }
1366
1372
  :scope._ao-property-list-label, :scope ._ao-property-list-label, :scope._ao-property-list-value, :scope ._ao-property-list-value {
1367
1373
  display: flex;
1374
+ min-height: calc(var(--spacing) * 8);
1368
1375
  align-items: center;
1369
- padding: 0.375rem 0.75rem;
1370
- min-height: 2rem;
1376
+ padding-inline: calc(var(--spacing) * 3);
1377
+ padding-block: calc(var(--spacing) * 1.5);
1371
1378
  }
1372
1379
  :scope._ao-property-list-label, :scope ._ao-property-list-label {
1373
1380
  color: var(--color-text-muted);
1374
1381
  }
1375
1382
  :scope._ao-property-list-value, :scope ._ao-property-list-value {
1376
- gap: 0.5rem;
1377
- min-width: 0;
1383
+ min-width: calc(var(--spacing) * 0);
1384
+ gap: calc(var(--spacing) * 2);
1378
1385
  overflow-wrap: break-word;
1379
1386
  }
1380
1387
  :scope._ao-property-list-compact ._ao-property-list-title, :scope ._ao-property-list-compact ._ao-property-list-title {
1381
1388
  margin-bottom: calc(var(--spacing) * 1);
1382
1389
  }
1383
1390
  :scope._ao-property-list-compact ._ao-property-list-label, :scope ._ao-property-list-compact ._ao-property-list-label, :scope._ao-property-list-compact ._ao-property-list-value, :scope ._ao-property-list-compact ._ao-property-list-value {
1384
- padding: 0.125rem 0.5rem;
1385
- min-height: 1.5rem;
1391
+ min-height: calc(var(--spacing) * 6);
1392
+ padding-inline: calc(var(--spacing) * 2);
1393
+ padding-block: calc(var(--spacing) * 0.5);
1386
1394
  }
1387
1395
  :scope._ao-property-list-value-numeric, :scope ._ao-property-list-value-numeric {
1388
1396
  justify-content: flex-end;
@@ -1627,7 +1635,7 @@
1627
1635
  :scope._ao-btn-group:not(._ao-btn-group-vertical) > ._ao-btn:not(:first-child), :scope ._ao-btn-group:not(._ao-btn-group-vertical) > ._ao-btn:not(:first-child), :scope._ao-btn-group:not(._ao-btn-group-vertical) > ._ao-menu:not(:first-child) > ._ao-menu-trigger, :scope ._ao-btn-group:not(._ao-btn-group-vertical) > ._ao-menu:not(:first-child) > ._ao-menu-trigger {
1628
1636
  border-left-color: currentColor;
1629
1637
  @supports (color: color-mix(in lab, red, red)) {
1630
- border-left-color: color-mix(in srgb, currentColor 25%, transparent);
1638
+ border-left-color: color-mix(in oklab, currentColor 25%, transparent);
1631
1639
  }
1632
1640
  }
1633
1641
  :scope._ao-btn-group-vertical, :scope ._ao-btn-group-vertical {
@@ -1651,7 +1659,7 @@
1651
1659
  :scope._ao-btn-group-vertical > ._ao-btn:not(:first-child), :scope ._ao-btn-group-vertical > ._ao-btn:not(:first-child), :scope._ao-btn-group-vertical > ._ao-menu:not(:first-child) > ._ao-menu-trigger, :scope ._ao-btn-group-vertical > ._ao-menu:not(:first-child) > ._ao-menu-trigger {
1652
1660
  border-top-color: currentColor;
1653
1661
  @supports (color: color-mix(in lab, red, red)) {
1654
- border-top-color: color-mix(in srgb, currentColor 25%, transparent);
1662
+ border-top-color: color-mix(in oklab, currentColor 25%, transparent);
1655
1663
  }
1656
1664
  }
1657
1665
  :scope._ao-btn-group-full-width:not(._ao-btn-group-vertical), :scope ._ao-btn-group-full-width:not(._ao-btn-group-vertical) {
@@ -2054,6 +2062,33 @@
2054
2062
  justify-content: center;
2055
2063
  color: var(--color-primary-content);
2056
2064
  }
2065
+ :scope input._ao-checkbox {
2066
+ appearance: none;
2067
+ border-color: var(--color-border-strong);
2068
+ &:hover {
2069
+ @media (hover: hover) {
2070
+ border-color: var(--color-text-muted);
2071
+ }
2072
+ }
2073
+ --checkbox-check: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='3' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='20 6 9 17 4 12'/%3E%3C/svg%3E");
2074
+ }
2075
+ :scope input._ao-checkbox:checked, :scope input._ao-checkbox:indeterminate {
2076
+ border-color: var(--color-primary);
2077
+ background-color: var(--color-primary);
2078
+ &:hover {
2079
+ @media (hover: hover) {
2080
+ background-color: var(--color-primary-hover);
2081
+ }
2082
+ }
2083
+ }
2084
+ :scope input._ao-checkbox:checked::after, :scope input._ao-checkbox:indeterminate::after {
2085
+ content: "";
2086
+ width: calc(var(--spacing) * 3);
2087
+ height: calc(var(--spacing) * 3);
2088
+ background-color: var(--color-primary-content);
2089
+ -webkit-mask: var(--checkbox-check) center / contain no-repeat;
2090
+ mask: var(--checkbox-check) center / contain no-repeat;
2091
+ }
2057
2092
  :scope label:has(> ._ao-checkbox) {
2058
2093
  display: inline-flex;
2059
2094
  cursor: pointer;
@@ -2126,6 +2161,31 @@
2126
2161
  border-radius: calc(infinity * 1px);
2127
2162
  background-color: var(--color-primary-content);
2128
2163
  }
2164
+ :scope input._ao-radio {
2165
+ appearance: none;
2166
+ border-color: var(--color-border-strong);
2167
+ &:hover {
2168
+ @media (hover: hover) {
2169
+ border-color: var(--color-text-muted);
2170
+ }
2171
+ }
2172
+ }
2173
+ :scope input._ao-radio:checked {
2174
+ border-color: var(--color-primary);
2175
+ background-color: var(--color-primary);
2176
+ &:hover {
2177
+ @media (hover: hover) {
2178
+ background-color: var(--color-primary-hover);
2179
+ }
2180
+ }
2181
+ }
2182
+ :scope input._ao-radio:checked::after {
2183
+ content: "";
2184
+ width: calc(var(--spacing) * 1.5);
2185
+ height: calc(var(--spacing) * 1.5);
2186
+ border-radius: calc(infinity * 1px);
2187
+ background-color: var(--color-primary-content);
2188
+ }
2129
2189
  :scope._ao-radio-group, :scope ._ao-radio-group {
2130
2190
  display: inline-flex;
2131
2191
  flex-wrap: wrap;
@@ -2342,7 +2402,7 @@
2342
2402
  :scope select._ao-select {
2343
2403
  appearance: none;
2344
2404
  padding-right: 2rem;
2345
- background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23878580' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'><polyline points='6 9 12 15 18 9'/></svg>");
2405
+ background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23848484' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'><polyline points='6 9 12 15 18 9'/></svg>");
2346
2406
  background-repeat: no-repeat;
2347
2407
  background-position: right 0.5rem center;
2348
2408
  background-size: 1rem;
@@ -2447,7 +2507,6 @@
2447
2507
  :scope._ao-card, :scope ._ao-card {
2448
2508
  display: flex;
2449
2509
  flex-direction: column;
2450
- overflow: auto;
2451
2510
  border-radius: var(--radius-xl);
2452
2511
  border-style: var(--tw-border-style);
2453
2512
  border-width: 1px;
@@ -2617,7 +2676,7 @@
2617
2676
  display: flex;
2618
2677
  }
2619
2678
  :scope._ao-dialog::backdrop, :scope ._ao-dialog::backdrop {
2620
- background: rgb(0 0 0 / 0.4);
2679
+ background: var(--color-scrim);
2621
2680
  transition: display 150ms allow-discrete, overlay 150ms allow-discrete, background 150ms ease-out;
2622
2681
  }
2623
2682
  @starting-style {
@@ -2626,7 +2685,7 @@
2626
2685
  transform: translateY(-0.5rem) scale(0.98);
2627
2686
  }
2628
2687
  :scope._ao-dialog[open]::backdrop, :scope ._ao-dialog[open]::backdrop {
2629
- background: rgb(0 0 0 / 0);
2688
+ background: transparent;
2630
2689
  }
2631
2690
  }
2632
2691
  :scope._ao-dialog-sm, :scope ._ao-dialog-sm {
@@ -2666,12 +2725,20 @@
2666
2725
  }
2667
2726
  :scope._ao-dialog-body, :scope ._ao-dialog-body {
2668
2727
  display: flex;
2728
+ min-height: calc(var(--spacing) * 0);
2729
+ flex: 1;
2669
2730
  flex-direction: column;
2670
2731
  gap: calc(var(--spacing) * 3);
2671
2732
  overflow-y: auto;
2672
2733
  padding-inline: calc(var(--spacing) * 5);
2673
2734
  padding-block: calc(var(--spacing) * 3);
2674
2735
  }
2736
+ :scope._ao-dialog > form, :scope ._ao-dialog > form {
2737
+ display: flex;
2738
+ min-height: calc(var(--spacing) * 0);
2739
+ flex: 1;
2740
+ flex-direction: column;
2741
+ }
2675
2742
  :scope._ao-dialog-footer, :scope ._ao-dialog-footer {
2676
2743
  display: flex;
2677
2744
  flex-wrap: wrap;
@@ -3602,10 +3669,7 @@
3602
3669
  position: fixed;
3603
3670
  inset: calc(var(--spacing) * 0);
3604
3671
  z-index: 40;
3605
- background-color: color-mix(in srgb, #0f0f0f 40%, transparent);
3606
- @supports (color: color-mix(in lab, red, red)) {
3607
- background-color: color-mix(in oklab, var(--color-black) 40%, transparent);
3608
- }
3672
+ background-color: var(--color-scrim);
3609
3673
  transition-property: opacity;
3610
3674
  transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));
3611
3675
  transition-duration: var(--tw-duration, var(--default-transition-duration));
@@ -3748,6 +3812,8 @@
3748
3812
  padding: calc(var(--spacing) * 0.5);
3749
3813
  }
3750
3814
  :scope._ao-tabs-boxed ._ao-tab, :scope ._ao-tabs-boxed ._ao-tab {
3815
+ position: relative;
3816
+ z-index: 1;
3751
3817
  border-radius: 0.25rem;
3752
3818
  }
3753
3819
  :scope._ao-tabs-boxed ._ao-tab[data-selected], :scope ._ao-tabs-boxed ._ao-tab[data-selected], :scope._ao-tabs-boxed ._ao-tab[aria-selected="true"], :scope ._ao-tabs-boxed ._ao-tab[aria-selected="true"], :scope._ao-tabs-boxed ._ao-tab-input:checked + ._ao-tab, :scope ._ao-tabs-boxed ._ao-tab-input:checked + ._ao-tab {
@@ -3756,6 +3822,56 @@
3756
3822
  --tw-shadow: 0 1px 3px 0 var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 1px 2px -1px var(--tw-shadow-color, rgb(0 0 0 / 0.1));
3757
3823
  box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
3758
3824
  }
3825
+ @supports (anchor-scope: --x) {
3826
+ :scope._ao-tabs ._ao-tab-list, :scope ._ao-tabs ._ao-tab-list {
3827
+ anchor-scope: --tab-thumb;
3828
+ }
3829
+ :scope._ao-tabs ._ao-tab[data-selected], :scope ._ao-tabs ._ao-tab[data-selected], :scope._ao-tabs ._ao-tab[aria-selected="true"], :scope ._ao-tabs ._ao-tab[aria-selected="true"], :scope._ao-tabs ._ao-tab-input:checked + ._ao-tab, :scope ._ao-tabs ._ao-tab-input:checked + ._ao-tab {
3830
+ anchor-name: --tab-thumb;
3831
+ }
3832
+ :scope._ao-tabs ._ao-tab-list::before, :scope ._ao-tabs ._ao-tab-list::before {
3833
+ content: "";
3834
+ position: absolute;
3835
+ position-anchor: --tab-thumb;
3836
+ }
3837
+ :scope._ao-tabs:not(._ao-tabs-boxed) ._ao-tab::after, :scope ._ao-tabs:not(._ao-tabs-boxed) ._ao-tab::after {
3838
+ display: none;
3839
+ }
3840
+ :scope._ao-tabs:not(._ao-tabs-boxed) ._ao-tab-list::before, :scope ._ao-tabs:not(._ao-tabs-boxed) ._ao-tab-list::before {
3841
+ background-color: var(--color-primary);
3842
+ left: anchor(left);
3843
+ right: anchor(right);
3844
+ inset-block-end: -1px;
3845
+ block-size: 2px;
3846
+ transition: left 180ms ease, right 180ms ease;
3847
+ }
3848
+ :scope._ao-tabs[data-orientation="vertical"]:not(._ao-tabs-boxed) ._ao-tab-list::before, :scope ._ao-tabs[data-orientation="vertical"]:not(._ao-tabs-boxed) ._ao-tab-list::before {
3849
+ inset-inline: auto;
3850
+ inset-inline-end: -1px;
3851
+ inline-size: 2px;
3852
+ top: anchor(top);
3853
+ bottom: anchor(bottom);
3854
+ block-size: auto;
3855
+ transition: top 180ms ease, bottom 180ms ease;
3856
+ }
3857
+ :scope._ao-tabs-boxed ._ao-tab[data-selected], :scope ._ao-tabs-boxed ._ao-tab[data-selected], :scope._ao-tabs-boxed ._ao-tab[aria-selected="true"], :scope ._ao-tabs-boxed ._ao-tab[aria-selected="true"], :scope._ao-tabs-boxed ._ao-tab-input:checked + ._ao-tab, :scope ._ao-tabs-boxed ._ao-tab-input:checked + ._ao-tab {
3858
+ background-color: transparent;
3859
+ --tw-shadow: 0 0 #0000;
3860
+ box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
3861
+ }
3862
+ :scope._ao-tabs-boxed ._ao-tab-list::before, :scope ._ao-tabs-boxed ._ao-tab-list::before {
3863
+ top: anchor(top);
3864
+ right: anchor(right);
3865
+ bottom: anchor(bottom);
3866
+ left: anchor(left);
3867
+ z-index: 0;
3868
+ border-radius: 0.25rem;
3869
+ background-color: var(--color-surface);
3870
+ --tw-shadow: 0 1px 3px 0 var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 1px 2px -1px var(--tw-shadow-color, rgb(0 0 0 / 0.1));
3871
+ box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
3872
+ transition: top 180ms ease, right 180ms ease, bottom 180ms ease, left 180ms ease;
3873
+ }
3874
+ }
3759
3875
  :scope._ao-tabs-full-width:not([data-orientation="vertical"]) ._ao-tab-list, :scope ._ao-tabs-full-width:not([data-orientation="vertical"]) ._ao-tab-list {
3760
3876
  display: flex;
3761
3877
  width: 100%;
@@ -3818,6 +3934,11 @@
3818
3934
  :scope._ao-tabs[data-orientation="vertical"]:not(._ao-tabs-boxed) ._ao-tab[data-selected]::after, :scope ._ao-tabs[data-orientation="vertical"]:not(._ao-tabs-boxed) ._ao-tab[data-selected]::after, :scope._ao-tabs[data-orientation="vertical"]:not(._ao-tabs-boxed) ._ao-tab[aria-selected="true"]::after, :scope ._ao-tabs[data-orientation="vertical"]:not(._ao-tabs-boxed) ._ao-tab[aria-selected="true"]::after {
3819
3935
  transform: scaleY(1);
3820
3936
  }
3937
+ @media (prefers-reduced-motion: reduce) {
3938
+ :scope._ao-tabs ._ao-tab-list::before, :scope ._ao-tabs ._ao-tab-list::before, :scope._ao-tabs:not(._ao-tabs-boxed) ._ao-tab::after, :scope ._ao-tabs:not(._ao-tabs-boxed) ._ao-tab::after {
3939
+ transition: none;
3940
+ }
3941
+ }
3821
3942
  :scope._ao-table, :scope ._ao-table {
3822
3943
  width: 100%;
3823
3944
  border-collapse: collapse;
@@ -4035,6 +4156,161 @@
4035
4156
  white-space: pre;
4036
4157
  word-wrap: normal;
4037
4158
  }
4159
+ :scope._ao-prose, :scope ._ao-prose {
4160
+ font-size: var(--text-sm);
4161
+ line-height: var(--tw-leading, var(--text-sm--line-height));
4162
+ --tw-leading: var(--leading-normal);
4163
+ line-height: var(--leading-normal);
4164
+ color: var(--color-text);
4165
+ }
4166
+ :scope._ao-prose :where(p, ul, ol, blockquote, pre, table, figure), :scope ._ao-prose :where(p, ul, ol, blockquote, pre, table, figure) {
4167
+ margin-block: calc(var(--spacing) * 3);
4168
+ }
4169
+ :scope._ao-prose > :first-child, :scope ._ao-prose > :first-child {
4170
+ margin-top: 0;
4171
+ }
4172
+ :scope._ao-prose > :last-child, :scope ._ao-prose > :last-child {
4173
+ margin-bottom: 0;
4174
+ }
4175
+ :scope._ao-prose :where(h1, h2, h3, h4, h5, h6), :scope ._ao-prose :where(h1, h2, h3, h4, h5, h6) {
4176
+ margin-top: calc(var(--spacing) * 6);
4177
+ margin-bottom: calc(var(--spacing) * 2);
4178
+ --tw-leading: var(--leading-tight);
4179
+ line-height: var(--leading-tight);
4180
+ --tw-font-weight: var(--font-weight-semibold);
4181
+ font-weight: var(--font-weight-semibold);
4182
+ }
4183
+ :scope._ao-prose :where(h4), :scope ._ao-prose :where(h4) {
4184
+ font-size: var(--text-sm);
4185
+ line-height: var(--tw-leading, var(--text-sm--line-height));
4186
+ }
4187
+ :scope._ao-prose :where(h5, h6), :scope ._ao-prose :where(h5, h6) {
4188
+ font-size: var(--text-xs);
4189
+ line-height: var(--tw-leading, var(--text-xs--line-height));
4190
+ --tw-tracking: var(--tracking-wide);
4191
+ letter-spacing: var(--tracking-wide);
4192
+ color: var(--color-text-muted);
4193
+ text-transform: uppercase;
4194
+ }
4195
+ :scope._ao-prose :where(ul), :scope ._ao-prose :where(ul) {
4196
+ list-style-type: disc;
4197
+ padding-inline-start: calc(var(--spacing) * 5);
4198
+ }
4199
+ :scope._ao-prose :where(ol), :scope ._ao-prose :where(ol) {
4200
+ list-style-type: decimal;
4201
+ padding-inline-start: calc(var(--spacing) * 5);
4202
+ }
4203
+ :scope._ao-prose :where(li), :scope ._ao-prose :where(li) {
4204
+ margin-block: calc(var(--spacing) * 1);
4205
+ }
4206
+ :scope._ao-prose :where(li) :where(p), :scope ._ao-prose :where(li) :where(p) {
4207
+ margin-block: calc(var(--spacing) * 1);
4208
+ }
4209
+ :scope._ao-prose :where(li > ul, li > ol), :scope ._ao-prose :where(li > ul, li > ol) {
4210
+ margin-block: calc(var(--spacing) * 1);
4211
+ }
4212
+ :scope._ao-prose :where(a), :scope ._ao-prose :where(a) {
4213
+ border-radius: var(--radius-sm);
4214
+ color: var(--color-link);
4215
+ text-decoration-line: underline;
4216
+ text-underline-offset: 2px;
4217
+ &:hover {
4218
+ @media (hover: hover) {
4219
+ color: var(--color-link-hover);
4220
+ }
4221
+ }
4222
+ &:focus-visible {
4223
+ outline-style: var(--tw-outline-style);
4224
+ outline-width: 2px;
4225
+ }
4226
+ &:focus-visible {
4227
+ outline-offset: 2px;
4228
+ }
4229
+ &:focus-visible {
4230
+ outline-color: var(--color-focus);
4231
+ }
4232
+ }
4233
+ :scope._ao-prose :where(code), :scope ._ao-prose :where(code) {
4234
+ border-radius: 0.25rem;
4235
+ border-style: var(--tw-border-style);
4236
+ border-width: 1px;
4237
+ border-color: var(--color-border);
4238
+ background-color: var(--color-code-surface);
4239
+ padding-inline: calc(var(--spacing) * 1);
4240
+ padding-block: calc(var(--spacing) * 0.5);
4241
+ font-family: var(--font-mono);
4242
+ color: var(--color-code-text);
4243
+ font-size: 0.85em;
4244
+ }
4245
+ :scope._ao-prose :where(pre), :scope ._ao-prose :where(pre) {
4246
+ border-radius: var(--radius-lg);
4247
+ background-color: var(--color-code-surface);
4248
+ padding: calc(var(--spacing) * 3);
4249
+ font-family: var(--font-mono);
4250
+ font-size: var(--text-sm);
4251
+ line-height: var(--tw-leading, var(--text-sm--line-height));
4252
+ color: var(--color-code-text);
4253
+ white-space: pre;
4254
+ overflow-x: auto;
4255
+ }
4256
+ :scope._ao-prose :where(pre) code, :scope ._ao-prose :where(pre) code {
4257
+ border-radius: 0;
4258
+ border-style: var(--tw-border-style);
4259
+ border-width: 0px;
4260
+ background-color: transparent;
4261
+ padding: calc(var(--spacing) * 0);
4262
+ font-size: inherit;
4263
+ }
4264
+ :scope._ao-prose :where(blockquote), :scope ._ao-prose :where(blockquote) {
4265
+ border-inline-start-style: var(--tw-border-style);
4266
+ border-inline-start-width: 2px;
4267
+ border-color: var(--color-border-strong);
4268
+ padding-inline-start: calc(var(--spacing) * 3);
4269
+ color: var(--color-text-muted);
4270
+ }
4271
+ :scope._ao-prose :where(hr), :scope ._ao-prose :where(hr) {
4272
+ margin-block: calc(var(--spacing) * 6);
4273
+ border-style: var(--tw-border-style);
4274
+ border-width: 0px;
4275
+ border-top-style: var(--tw-border-style);
4276
+ border-top-width: 1px;
4277
+ border-color: var(--color-border);
4278
+ }
4279
+ :scope._ao-prose :where(table), :scope ._ao-prose :where(table) {
4280
+ width: 100%;
4281
+ border-collapse: collapse;
4282
+ font-size: var(--text-sm);
4283
+ line-height: var(--tw-leading, var(--text-sm--line-height));
4284
+ }
4285
+ :scope._ao-prose :where(th, td), :scope ._ao-prose :where(th, td) {
4286
+ border-bottom-style: var(--tw-border-style);
4287
+ border-bottom-width: 1px;
4288
+ border-color: var(--color-border);
4289
+ padding-inline: calc(var(--spacing) * 3);
4290
+ padding-block: calc(var(--spacing) * 2);
4291
+ text-align: start;
4292
+ vertical-align: top;
4293
+ }
4294
+ :scope._ao-prose :where(thead th), :scope ._ao-prose :where(thead th) {
4295
+ --tw-font-weight: var(--font-weight-semibold);
4296
+ font-weight: var(--font-weight-semibold);
4297
+ color: var(--color-text-muted);
4298
+ }
4299
+ :scope._ao-prose :where(img), :scope ._ao-prose :where(img) {
4300
+ height: auto;
4301
+ max-width: 100%;
4302
+ border-radius: var(--radius-md);
4303
+ }
4304
+ :scope._ao-prose :where(figcaption), :scope ._ao-prose :where(figcaption) {
4305
+ margin-top: calc(var(--spacing) * 1);
4306
+ font-size: var(--text-xs);
4307
+ line-height: var(--tw-leading, var(--text-xs--line-height));
4308
+ color: var(--color-text-muted);
4309
+ }
4310
+ :scope._ao-prose :where(strong), :scope ._ao-prose :where(strong) {
4311
+ --tw-font-weight: var(--font-weight-semibold);
4312
+ font-weight: var(--font-weight-semibold);
4313
+ }
4038
4314
  :scope._ao-chart, :scope ._ao-chart {
4039
4315
  --chart-max: 100;
4040
4316
  --chart-height: 8rem;
@@ -4051,9 +4327,6 @@
4051
4327
  :scope._ao-chart-danger, :scope ._ao-chart-danger {
4052
4328
  color: var(--color-danger);
4053
4329
  }
4054
- :scope._ao-chart-info, :scope ._ao-chart-info {
4055
- color: var(--color-info);
4056
- }
4057
4330
  :scope._ao-chart-bars, :scope ._ao-chart-bars {
4058
4331
  display: grid;
4059
4332
  grid-template-columns: auto 1fr auto;
package/dist/index.cjs CHANGED
@@ -158,7 +158,7 @@ var AppShellContext = (0, react.createContext)(null);
158
158
  function useAppShell() {
159
159
  return (0, react.useContext)(AppShellContext);
160
160
  }
161
- function AppShellRoot({ hasSidebar = false, hasFooter = false, mobileDrawerOpen, defaultMobileDrawerOpen = false, onMobileDrawerOpenChange, systemAccent, className, style, children, ...rest }) {
161
+ function AppShellRoot({ hasSidebar = false, mobileDrawerOpen, defaultMobileDrawerOpen = false, onMobileDrawerOpenChange, systemAccent, className, style, children, ...rest }) {
162
162
  const [uncontrolledOpen, setUncontrolledOpen] = (0, react.useState)(defaultMobileDrawerOpen);
163
163
  const isControlled = mobileDrawerOpen !== void 0;
164
164
  const open = isControlled ? mobileDrawerOpen : uncontrolledOpen;
@@ -182,11 +182,7 @@ function AppShellRoot({ hasSidebar = false, hasFooter = false, mobileDrawerOpen,
182
182
  return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(AppShellContext.Provider, {
183
183
  value,
184
184
  children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
185
- className: cn([
186
- "app-shell",
187
- hasSidebar && "app-shell-with-sidebar",
188
- hasFooter && "app-shell-with-footer"
189
- ], className),
185
+ className: cn(["app-shell", hasSidebar && "app-shell-with-sidebar"], className),
190
186
  style: rootStyle,
191
187
  ...rest,
192
188
  children
@@ -210,7 +206,7 @@ function Badge({ variant = "neutral", size = "md", icon, className, children, ..
210
206
  size !== "md" && `badge-${size}`
211
207
  ], className),
212
208
  ...rest,
213
- children: [renderIcon(icon, size === "sm" ? 10 : 12), children]
209
+ children: [renderIcon(icon), children]
214
210
  });
215
211
  }
216
212
  //#endregion
@@ -624,7 +620,7 @@ function InputGroupAddon({ className, ...rest }) {
624
620
  var InputGroup = Object.assign(InputGroupRoot, { Addon: InputGroupAddon });
625
621
  //#endregion
626
622
  //#region src/Indicator.tsx
627
- function Indicator({ label, variant = "neutral", size = "sm", icon, placement = "top-end", offset, className, "aria-label": ariaLabel, children }) {
623
+ function Indicator({ label, variant = "neutral", size = "sm", icon, placement = "top-end", offset, className, "aria-label": ariaLabel, style: styleProp, children, ...rest }) {
628
624
  const [vertical, horizontal] = placement.split("-");
629
625
  const placementClasses = [
630
626
  "indicator-item",
@@ -632,10 +628,14 @@ function Indicator({ label, variant = "neutral", size = "sm", icon, placement =
632
628
  horizontal !== "end" && `indicator-${horizontal}`
633
629
  ];
634
630
  const hasContent = label !== void 0 || icon !== void 0;
635
- const style = offset !== void 0 ? { "--indicator-offset": `${offset}px` } : void 0;
631
+ const style = offset !== void 0 ? {
632
+ ...styleProp,
633
+ "--indicator-offset": `${offset}px`
634
+ } : styleProp;
636
635
  return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
637
636
  className: cn("indicator", className),
638
637
  style,
638
+ ...rest,
639
639
  children: [hasContent ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Badge, {
640
640
  className: cn(placementClasses, void 0),
641
641
  variant,
@@ -909,13 +909,13 @@ function RadioGroup({ orientation = "horizontal", className, ...rest }) {
909
909
  }
910
910
  //#endregion
911
911
  //#region src/Progress.tsx
912
- function Progress({ value, max = 100, variant = "primary", size = "md", className, ...rest }) {
912
+ function Progress({ value, max = 100, variant = "info", size = "md", className, ...rest }) {
913
913
  return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("progress", {
914
914
  value,
915
915
  max,
916
916
  className: cn([
917
917
  "progress",
918
- variant !== "primary" && `progress-${variant}`,
918
+ variant !== "info" && `progress-${variant}`,
919
919
  size !== "md" && `progress-${size}`
920
920
  ], className),
921
921
  ...rest
@@ -1166,7 +1166,7 @@ var Card = Object.assign(CardRoot, {
1166
1166
  * label/value tables, use `<PropertyList>`.
1167
1167
  */
1168
1168
  function StatCard({ variant = "default", label, value, detail, icon, compact, bordered, className, children, ...rest }) {
1169
- const hasLabel = icon !== void 0 || label !== void 0;
1169
+ const hasLabel = label !== void 0;
1170
1170
  return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
1171
1171
  className: cn([
1172
1172
  "card",
@@ -1271,7 +1271,7 @@ function mergeStyle(vars, incoming) {
1271
1271
  * The bare bar-chart grid — no bars. Compose `<BarChart.Bar>` children by hand
1272
1272
  * (e.g. to interleave a reference line). Sets `role="img"`; pass `aria-label`.
1273
1273
  */
1274
- function BarChartContainer({ orientation = "horizontal", size = "md", showValues, inline, variant = "primary", className, ...rest }) {
1274
+ function BarChartContainer({ orientation = "horizontal", size = "md", showValues, inline, variant = "info", className, ...rest }) {
1275
1275
  return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
1276
1276
  role: "img",
1277
1277
  className: cn([
@@ -1281,7 +1281,7 @@ function BarChartContainer({ orientation = "horizontal", size = "md", showValues
1281
1281
  size !== "md" && `chart-${size}`,
1282
1282
  showValues && "chart-values",
1283
1283
  inline && "chart-inline",
1284
- variant !== "primary" && `chart-${variant}`
1284
+ variant !== "info" && `chart-${variant}`
1285
1285
  ], className),
1286
1286
  ...rest
1287
1287
  });
@@ -1328,7 +1328,7 @@ function Bar({ datum, value, label, color, className, style, ...rest }) {
1328
1328
  * Horizontal by default; pass `orientation="vertical"` for columns. For
1329
1329
  * hand-composed layouts use `<BarChart.Container>` + `<BarChart.Bar>`.
1330
1330
  */
1331
- function BarChartRoot({ data, max, orientation = "horizontal", size = "md", showValues, inline, variant = "primary", style, "aria-label": ariaLabel, ...rest }) {
1331
+ function BarChartRoot({ data, max, orientation = "horizontal", size = "md", showValues, inline, variant = "info", style, "aria-label": ariaLabel, ...rest }) {
1332
1332
  return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(BarChartContainer, {
1333
1333
  orientation,
1334
1334
  size,
@@ -1491,10 +1491,15 @@ function DefaultCloseIcon() {
1491
1491
  * Use this when the default `<Dialog>` layout doesn't fit (custom header,
1492
1492
  * media block, multi-step content).
1493
1493
  */
1494
- function DialogContainer({ open, onOpenChange, size = "md", closedby = "any", className, children, ...rest }) {
1494
+ function DialogContainer({ open, onOpenChange, size = "md", closedby = "any", className, children, ref: consumerRef, ...rest }) {
1495
1495
  const ref = (0, react.useRef)(null);
1496
1496
  const onOpenChangeRef = (0, react.useRef)(onOpenChange);
1497
1497
  onOpenChangeRef.current = onOpenChange;
1498
+ const setRef = (0, react.useCallback)((node) => {
1499
+ ref.current = node;
1500
+ if (typeof consumerRef === "function") consumerRef(node);
1501
+ else if (consumerRef) consumerRef.current = node;
1502
+ }, [consumerRef]);
1498
1503
  (0, react.useEffect)(() => {
1499
1504
  const el = ref.current;
1500
1505
  if (!el || open === void 0) return;
@@ -1513,7 +1518,7 @@ function DialogContainer({ open, onOpenChange, size = "md", closedby = "any", cl
1513
1518
  children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(PortalContainerContext.Provider, {
1514
1519
  value: ref,
1515
1520
  children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("dialog", {
1516
- ref,
1521
+ ref: setRef,
1517
1522
  className: cn(["dialog", size !== "md" && `dialog-${size}`], className),
1518
1523
  closedby,
1519
1524
  ...rest,
@@ -1717,14 +1722,23 @@ function MenuPopup({ className, role = "menu", ...rest }) {
1717
1722
  function MenuItem(props) {
1718
1723
  const ref = (0, react.useRef)(null);
1719
1724
  const hotkey = props.hotkey;
1720
- const { ariaKeyShortcuts, primaryChord } = useHotkey(hotkey, () => ref.current?.click(), { enabled: !("disabled" in props && props.disabled) });
1725
+ const ariaDisabled = props["aria-disabled"];
1726
+ const isDisabled = "disabled" in props && props.disabled === true || ariaDisabled === true || ariaDisabled === "true";
1727
+ const { ariaKeyShortcuts, primaryChord } = useHotkey(hotkey, () => ref.current?.click(), { enabled: !isDisabled });
1721
1728
  if (props.href !== void 0) {
1722
- const { className, role = "menuitem", icon, children, hotkey: _hk, ...rest } = props;
1729
+ const { className, role = "menuitem", icon, children, hotkey: _hk, onClick, ...rest } = props;
1723
1730
  return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("a", {
1724
1731
  ref,
1725
1732
  role,
1726
1733
  "aria-keyshortcuts": ariaKeyShortcuts,
1727
1734
  className: cn("menu-item", className),
1735
+ onClick: (event) => {
1736
+ if (isDisabled) {
1737
+ event.preventDefault();
1738
+ return;
1739
+ }
1740
+ onClick?.(event);
1741
+ },
1728
1742
  ...rest,
1729
1743
  children: [
1730
1744
  renderIcon(icon),
@@ -1870,17 +1884,10 @@ function TabsPanel({ className, ...rest }) {
1870
1884
  ...rest
1871
1885
  });
1872
1886
  }
1873
- function TabsIndicator({ className, ...rest }) {
1874
- return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_base_ui_react_tabs.Tabs.Indicator, {
1875
- className: cn("tab-indicator", className),
1876
- ...rest
1877
- });
1878
- }
1879
1887
  var Tabs = Object.assign(TabsRoot, {
1880
1888
  List: TabsList,
1881
1889
  Tab: TabsTab,
1882
- Panel: TabsPanel,
1883
- Indicator: TabsIndicator
1890
+ Panel: TabsPanel
1884
1891
  });
1885
1892
  //#endregion
1886
1893
  //#region src/CodeBlock.tsx
@@ -1897,6 +1904,28 @@ function CodeBlock({ nowrap, className, ...rest }) {
1897
1904
  });
1898
1905
  }
1899
1906
  //#endregion
1907
+ //#region src/Prose.tsx
1908
+ /**
1909
+ * A styled container for HTML the system can't annotate with its semantic class
1910
+ * names — backend-rendered markdown, CMS bodies, model output. Styles its
1911
+ * descendant flow elements (`p`, `ul`, `a`, `code`, `blockquote`, `table`, …)
1912
+ * from the design tokens, scoped to this wrapper so the rest of the admin UI
1913
+ * keeps the global element reset.
1914
+ *
1915
+ * ```tsx
1916
+ * <Prose dangerouslySetInnerHTML={{ __html: renderedMarkdown }} />
1917
+ * ```
1918
+ *
1919
+ * Accepts children too — `<Prose><h2>…</h2><p>…</p></Prose>` — for content
1920
+ * authored directly in JSX.
1921
+ */
1922
+ function Prose({ className, ...rest }) {
1923
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
1924
+ className: cn("prose", className),
1925
+ ...rest
1926
+ });
1927
+ }
1928
+ //#endregion
1900
1929
  //#region src/Tooltip.tsx
1901
1930
  function TooltipProvider(props) {
1902
1931
  return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_base_ui_react_tooltip.Tooltip.Provider, { ...props });
@@ -2313,6 +2342,7 @@ exports.Navbar = Navbar;
2313
2342
  exports.Pagination = Pagination;
2314
2343
  exports.Progress = Progress;
2315
2344
  exports.PropertyList = PropertyList;
2345
+ exports.Prose = Prose;
2316
2346
  exports.Radio = Radio;
2317
2347
  exports.RadioGroup = RadioGroup;
2318
2348
  exports.SERIES = SERIES;