@crewlethq/ui 0.10.0 → 0.12.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.
- package/README.md +27 -1
- package/dist/Accordion/index.js +3 -3
- package/dist/AppShell/index.js +2 -2
- package/dist/AvatarPicker/AvatarPicker.d.ts +32 -0
- package/dist/AvatarPicker/index.d.ts +3 -0
- package/dist/AvatarPicker/index.js +14 -0
- package/dist/AvatarPicker-PREY36MG.css +54 -0
- package/dist/Canvas/index.js +3 -3
- package/dist/Card/index.js +2 -2
- package/dist/CharacterPicker/index.js +2 -1
- package/dist/ChoiceList/ChoiceList.d.ts +45 -0
- package/dist/ChoiceList/index.d.ts +3 -0
- package/dist/ChoiceList/index.js +2 -0
- package/dist/ChoiceList-2PQJS4DX.css +109 -0
- package/dist/CodeBlock/index.js +3 -3
- package/dist/Combobox/index.js +3 -3
- package/dist/CommandPalette/index.js +7 -7
- package/dist/Composer/Composer.d.ts +27 -0
- package/dist/Composer/index.d.ts +3 -0
- package/dist/Composer/index.js +7 -0
- package/dist/Composer-ABGJIAIR.css +88 -0
- package/dist/Copyable/index.js +2 -2
- package/dist/DataTable/index.js +7 -7
- package/dist/DataView/index.js +14 -14
- package/dist/DateTimePicker/index.js +4 -4
- package/dist/Disclosure/index.js +3 -3
- package/dist/FactList/FactList.d.ts +33 -0
- package/dist/FactList/index.d.ts +3 -0
- package/dist/FactList/index.js +6 -0
- package/dist/FactList-G2H73NFR.css +57 -0
- package/dist/HuePicker/index.js +4 -3
- package/dist/Input/FormField.d.ts +8 -1
- package/dist/Input/index.js +1 -1
- package/dist/{Input-DRFNI26F.css → Input-RAKNQJCV.css} +7 -0
- package/dist/ListInput/ListInput.d.ts +3 -1
- package/dist/ListInput/index.js +3 -3
- package/dist/Menu/index.js +3 -3
- package/dist/Modal/index.js +3 -3
- package/dist/OrgTable/index.js +5 -5
- package/dist/SegmentedControl/index.js +3 -3
- package/dist/Tabs/Tabs.d.ts +18 -0
- package/dist/Tabs/index.d.ts +1 -1
- package/dist/Tabs/index.js +1 -1
- package/dist/{Tabs-BWFQSWY3.css → Tabs-5I5Q5KKM.css} +33 -0
- package/dist/TagsInput/index.js +2 -2
- package/dist/ThemeSwitcher/index.js +4 -4
- package/dist/TimeWindowPicker/index.js +5 -5
- package/dist/TreeCanvas/index.js +4 -4
- package/dist/TreeGrid/index.js +2 -2
- package/dist/chunk-3L5NHASN.js +1 -0
- package/dist/{chunk-L7THQMFB.js → chunk-5WEVLIB6.js} +1 -1
- package/dist/{chunk-LPHHDCN3.js → chunk-EBBAAQDY.js} +1 -1
- package/dist/chunk-EXHQ2QVW.js +1 -0
- package/dist/{chunk-ZGX2DP7F.js → chunk-FTEJPHBI.js} +8 -2
- package/dist/{chunk-RIAZM6L3.js → chunk-G2AVKPSL.js} +1 -1
- package/dist/{chunk-6HXH57BL.js → chunk-GARACZAH.js} +4 -2
- package/dist/{chunk-CVB7O3SZ.js → chunk-GOUKOXJK.js} +5 -5
- package/dist/{chunk-UYK72NOS.js → chunk-GXYNEDNA.js} +1 -1
- package/dist/{chunk-IZHN5I3H.js → chunk-HLBRPES3.js} +4 -4
- package/dist/chunk-HV6IZFBK.js +64 -0
- package/dist/{chunk-EUT7VBQG.js → chunk-IINFVK3W.js} +8 -8
- package/dist/{chunk-HEOVQZL7.js → chunk-JHQUT4WJ.js} +6 -2
- package/dist/{chunk-26TXVHN2.js → chunk-K5Q2DK3P.js} +1 -2
- package/dist/{chunk-MORLKUGM.js → chunk-KGTQ5CVD.js} +1 -1
- package/dist/chunk-QBXZLGK2.js +40 -0
- package/dist/chunk-QSLIN64M.js +47 -0
- package/dist/{chunk-MICH6QSJ.js → chunk-S4RCG44T.js} +1 -1
- package/dist/{chunk-UI6HWAWE.js → chunk-UAQIUSSK.js} +1 -1
- package/dist/chunk-URYDN2KA.js +25 -0
- package/dist/{chunk-X6K6OZ47.js → chunk-WEIINZPA.js} +1 -1
- package/dist/{chunk-IGWPZZIB.js → chunk-XV65NTIT.js} +3 -3
- package/dist/{chunk-UO5UK7V2.js → chunk-YXMCUKFI.js} +0 -1
- package/dist/{chunk-7FFDJQ23.js → chunk-ZMJHK7DR.js} +1 -1
- package/dist/generated/index.d.ts +4 -0
- package/dist/generated/index.js +66 -60
- package/dist/index.js +66 -60
- package/dist/styles.css +362 -2
- package/dist/utils/index.js +1 -1
- package/package.json +3 -3
- package/dist/{chunk-VE6LD3KM.js → chunk-2PZBIHRV.js} +2 -2
- package/dist/{chunk-YPTC4TX5.js → chunk-74OVQWA5.js} +0 -0
- package/dist/{chunk-OVLJEVQS.js → chunk-7LD6P32I.js} +1 -1
- package/dist/{chunk-CEOXFO3E.js → chunk-EG6NYWVK.js} +1 -1
- package/dist/{chunk-FZVJDJFN.js → chunk-ENJUPIND.js} +1 -1
- package/dist/{chunk-5I56UXBJ.js → chunk-JCNUQ3US.js} +2 -2
- package/dist/{chunk-SX2DFTQV.js → chunk-MCPKHYMC.js} +1 -1
- package/dist/{chunk-BTHX2FS3.js → chunk-TEEJSTFG.js} +2 -2
- package/dist/{chunk-LSB3EHBW.js → chunk-TFH6SYWB.js} +2 -2
- package/dist/{chunk-26SCUACK.js → chunk-YACKC3K2.js} +1 -1
- package/dist/{chunk-MPXI6FM6.js → chunk-ZHOM65MI.js} +1 -1
package/dist/styles.css
CHANGED
|
@@ -1413,6 +1413,63 @@
|
|
|
1413
1413
|
}
|
|
1414
1414
|
|
|
1415
1415
|
|
|
1416
|
+
/* AvatarPicker-PREY36MG.css */
|
|
1417
|
+
/*
|
|
1418
|
+
* The badge as a button, with a pencil pip on its corner saying it changes
|
|
1419
|
+
* the badge. No chrome of its own beyond the focus ring: the badge is the
|
|
1420
|
+
* control's face.
|
|
1421
|
+
*/
|
|
1422
|
+
.crewlet-avatar-picker {
|
|
1423
|
+
position: relative;
|
|
1424
|
+
display: inline-flex;
|
|
1425
|
+
flex: none;
|
|
1426
|
+
padding: 0;
|
|
1427
|
+
border: 0;
|
|
1428
|
+
border-radius: var(--radius-lg);
|
|
1429
|
+
background: none;
|
|
1430
|
+
cursor: pointer;
|
|
1431
|
+
}
|
|
1432
|
+
|
|
1433
|
+
button.crewlet-avatar-picker:focus-visible {
|
|
1434
|
+
outline: 2px solid var(--color-focus);
|
|
1435
|
+
outline-offset: 2px;
|
|
1436
|
+
}
|
|
1437
|
+
|
|
1438
|
+
.crewlet-avatar-picker__pip {
|
|
1439
|
+
position: absolute;
|
|
1440
|
+
right: calc(var(--spacing-1) * -1);
|
|
1441
|
+
bottom: calc(var(--spacing-1) * -1);
|
|
1442
|
+
display: grid;
|
|
1443
|
+
place-items: center;
|
|
1444
|
+
width: 16px;
|
|
1445
|
+
height: 16px;
|
|
1446
|
+
border: 1px solid var(--color-border-strong);
|
|
1447
|
+
border-radius: var(--radius-circle);
|
|
1448
|
+
background: var(--color-surface-elevated);
|
|
1449
|
+
color: var(--color-text-secondary);
|
|
1450
|
+
}
|
|
1451
|
+
|
|
1452
|
+
button.crewlet-avatar-picker:hover .crewlet-avatar-picker__pip {
|
|
1453
|
+
color: var(--color-text-primary);
|
|
1454
|
+
}
|
|
1455
|
+
|
|
1456
|
+
.crewlet-avatar-picker__body {
|
|
1457
|
+
display: grid;
|
|
1458
|
+
gap: var(--spacing-2);
|
|
1459
|
+
width: max-content;
|
|
1460
|
+
max-width: 100%;
|
|
1461
|
+
padding: var(--spacing-3);
|
|
1462
|
+
}
|
|
1463
|
+
|
|
1464
|
+
.crewlet-avatar-picker__label {
|
|
1465
|
+
font-size: var(--font-size-2xs);
|
|
1466
|
+
font-weight: var(--font-weight-medium);
|
|
1467
|
+
letter-spacing: var(--font-letter-spacing-wide);
|
|
1468
|
+
text-transform: uppercase;
|
|
1469
|
+
color: var(--color-text-tertiary);
|
|
1470
|
+
}
|
|
1471
|
+
|
|
1472
|
+
|
|
1416
1473
|
/* AvatarStack-GEJBNV7E.css */
|
|
1417
1474
|
/*
|
|
1418
1475
|
* Several badges as one mark (AvatarStack.tsx).
|
|
@@ -3996,6 +4053,118 @@
|
|
|
3996
4053
|
}
|
|
3997
4054
|
|
|
3998
4055
|
|
|
4056
|
+
/* ChoiceList-2PQJS4DX.css */
|
|
4057
|
+
/*
|
|
4058
|
+
* A short list of answers in one bordered box: a radio, the label with a line
|
|
4059
|
+
* of detail under it, and a tag at the row's end. The selected row takes the
|
|
4060
|
+
* accent's soft fill, so the answer reads at a glance without the radio.
|
|
4061
|
+
*/
|
|
4062
|
+
.crewlet-choice-list {
|
|
4063
|
+
display: grid;
|
|
4064
|
+
gap: var(--spacing-1);
|
|
4065
|
+
padding: var(--spacing-1);
|
|
4066
|
+
border: 1px solid var(--color-border-strong);
|
|
4067
|
+
border-radius: var(--radius-md);
|
|
4068
|
+
background: var(--color-surface-subtle);
|
|
4069
|
+
}
|
|
4070
|
+
|
|
4071
|
+
.crewlet-choice-list.is-disabled {
|
|
4072
|
+
opacity: 0.6;
|
|
4073
|
+
}
|
|
4074
|
+
|
|
4075
|
+
.crewlet-choice-list__group {
|
|
4076
|
+
display: grid;
|
|
4077
|
+
gap: var(--spacing-1);
|
|
4078
|
+
}
|
|
4079
|
+
|
|
4080
|
+
.crewlet-choice-list__item {
|
|
4081
|
+
display: grid;
|
|
4082
|
+
gap: var(--spacing-1);
|
|
4083
|
+
}
|
|
4084
|
+
|
|
4085
|
+
/* The "Something else" a list ends with, set apart by a dashed rule. */
|
|
4086
|
+
.crewlet-choice-list__item.is-separated {
|
|
4087
|
+
padding-top: var(--spacing-1);
|
|
4088
|
+
border-top: 1px dashed var(--color-border-strong);
|
|
4089
|
+
}
|
|
4090
|
+
|
|
4091
|
+
.crewlet-choice-list__row {
|
|
4092
|
+
display: grid;
|
|
4093
|
+
grid-template-columns: auto minmax(0, 1fr) auto;
|
|
4094
|
+
align-items: start;
|
|
4095
|
+
gap: var(--spacing-3);
|
|
4096
|
+
padding: var(--spacing-2);
|
|
4097
|
+
border-radius: var(--radius-sm);
|
|
4098
|
+
cursor: pointer;
|
|
4099
|
+
transition: background-color var(--motion-duration-fast) var(--motion-easing-default);
|
|
4100
|
+
}
|
|
4101
|
+
|
|
4102
|
+
.crewlet-choice-list__row:hover {
|
|
4103
|
+
background: var(--color-surface-hover);
|
|
4104
|
+
}
|
|
4105
|
+
|
|
4106
|
+
.crewlet-choice-list__row.is-checked {
|
|
4107
|
+
background: var(--color-brand-accent-soft);
|
|
4108
|
+
}
|
|
4109
|
+
|
|
4110
|
+
.crewlet-choice-list.is-disabled .crewlet-choice-list__row {
|
|
4111
|
+
cursor: not-allowed;
|
|
4112
|
+
}
|
|
4113
|
+
|
|
4114
|
+
.crewlet-choice-list__radio {
|
|
4115
|
+
margin: 3px 0 0;
|
|
4116
|
+
accent-color: var(--color-brand-accent);
|
|
4117
|
+
cursor: inherit;
|
|
4118
|
+
}
|
|
4119
|
+
|
|
4120
|
+
/* A radio draws its own edge, so the ring sits on it, as a checkbox's does. */
|
|
4121
|
+
.crewlet-choice-list__radio:focus-visible {
|
|
4122
|
+
outline: 2px solid var(--color-focus);
|
|
4123
|
+
outline-offset: 0;
|
|
4124
|
+
}
|
|
4125
|
+
|
|
4126
|
+
.crewlet-choice-list__text {
|
|
4127
|
+
display: grid;
|
|
4128
|
+
min-width: 0;
|
|
4129
|
+
}
|
|
4130
|
+
|
|
4131
|
+
.crewlet-choice-list__label {
|
|
4132
|
+
font-size: var(--font-size-compact);
|
|
4133
|
+
font-weight: 500;
|
|
4134
|
+
color: var(--color-text-primary);
|
|
4135
|
+
overflow-wrap: anywhere;
|
|
4136
|
+
}
|
|
4137
|
+
|
|
4138
|
+
.crewlet-choice-list__detail {
|
|
4139
|
+
font-size: var(--font-size-xs);
|
|
4140
|
+
color: var(--color-text-tertiary);
|
|
4141
|
+
overflow-wrap: anywhere;
|
|
4142
|
+
}
|
|
4143
|
+
|
|
4144
|
+
.crewlet-choice-list__tag {
|
|
4145
|
+
padding-top: 2px;
|
|
4146
|
+
font-size: var(--font-size-2xs);
|
|
4147
|
+
font-weight: 500;
|
|
4148
|
+
letter-spacing: 0.05em;
|
|
4149
|
+
text-transform: uppercase;
|
|
4150
|
+
color: var(--color-brand-accent-ink);
|
|
4151
|
+
white-space: nowrap;
|
|
4152
|
+
}
|
|
4153
|
+
|
|
4154
|
+
.crewlet-choice-list__footer {
|
|
4155
|
+
display: flex;
|
|
4156
|
+
justify-content: flex-end;
|
|
4157
|
+
gap: var(--spacing-2);
|
|
4158
|
+
padding: var(--spacing-1);
|
|
4159
|
+
}
|
|
4160
|
+
|
|
4161
|
+
@media (prefers-reduced-motion: reduce) {
|
|
4162
|
+
.crewlet-choice-list__row {
|
|
4163
|
+
transition: none;
|
|
4164
|
+
}
|
|
4165
|
+
}
|
|
4166
|
+
|
|
4167
|
+
|
|
3999
4168
|
/* CodeBlock-GYNJ2HI6.css */
|
|
4000
4169
|
/*
|
|
4001
4170
|
* CodeBlock, a monospace command, config or record surface. One step off the
|
|
@@ -4532,6 +4701,97 @@
|
|
|
4532
4701
|
}
|
|
4533
4702
|
|
|
4534
4703
|
|
|
4704
|
+
/* Composer-ABGJIAIR.css */
|
|
4705
|
+
/*
|
|
4706
|
+
* A message written in place: the field and its footer strip in one box. The
|
|
4707
|
+
* BOX takes the focus ring, an accent border and a 2px soft halo, so the
|
|
4708
|
+
* field inside draws no border or outline of its own and the footer reads as
|
|
4709
|
+
* part of what is being written.
|
|
4710
|
+
*/
|
|
4711
|
+
.crewlet-composer {
|
|
4712
|
+
display: grid;
|
|
4713
|
+
overflow: hidden;
|
|
4714
|
+
border: 1px solid var(--color-border-strong);
|
|
4715
|
+
border-radius: var(--radius-md);
|
|
4716
|
+
background: var(--color-surface-background);
|
|
4717
|
+
transition:
|
|
4718
|
+
border-color var(--motion-duration-fast) var(--motion-easing-default),
|
|
4719
|
+
box-shadow var(--motion-duration-fast) var(--motion-easing-default);
|
|
4720
|
+
}
|
|
4721
|
+
|
|
4722
|
+
.crewlet-composer:hover {
|
|
4723
|
+
border-color: var(--color-border-strong-hover);
|
|
4724
|
+
}
|
|
4725
|
+
|
|
4726
|
+
.crewlet-composer:focus-within {
|
|
4727
|
+
border-color: var(--color-brand-accent);
|
|
4728
|
+
box-shadow: 0 0 0 2px var(--color-brand-accent-soft);
|
|
4729
|
+
}
|
|
4730
|
+
|
|
4731
|
+
.crewlet-composer .crewlet-composer__field {
|
|
4732
|
+
min-height: 68px;
|
|
4733
|
+
max-height: 220px;
|
|
4734
|
+
padding: var(--spacing-2) var(--spacing-3);
|
|
4735
|
+
border: 0;
|
|
4736
|
+
border-radius: 0;
|
|
4737
|
+
background: transparent;
|
|
4738
|
+
resize: none;
|
|
4739
|
+
}
|
|
4740
|
+
|
|
4741
|
+
/* The ring is the box's, above. A transparent outline stays, because forced
|
|
4742
|
+
colors drops the box's shadow and paints an outline in its place. */
|
|
4743
|
+
.crewlet-composer .crewlet-composer__field:focus-visible {
|
|
4744
|
+
outline: 2px solid transparent;
|
|
4745
|
+
outline-offset: -2px;
|
|
4746
|
+
}
|
|
4747
|
+
|
|
4748
|
+
/* Past its cap the field scrolls rather than pushing the page. */
|
|
4749
|
+
.crewlet-composer .crewlet-composer__field.is-auto-resize {
|
|
4750
|
+
overflow-y: auto;
|
|
4751
|
+
}
|
|
4752
|
+
|
|
4753
|
+
.crewlet-composer__footer {
|
|
4754
|
+
display: flex;
|
|
4755
|
+
flex-wrap: wrap;
|
|
4756
|
+
align-items: center;
|
|
4757
|
+
gap: var(--spacing-2);
|
|
4758
|
+
padding: var(--spacing-1) var(--spacing-1) var(--spacing-1) var(--spacing-3);
|
|
4759
|
+
border-top: 1px solid var(--color-border-default);
|
|
4760
|
+
background: var(--color-surface-subtle);
|
|
4761
|
+
}
|
|
4762
|
+
|
|
4763
|
+
.crewlet-composer__hint {
|
|
4764
|
+
display: inline-flex;
|
|
4765
|
+
align-items: center;
|
|
4766
|
+
gap: var(--spacing-1);
|
|
4767
|
+
font-size: var(--font-size-2xs);
|
|
4768
|
+
color: var(--color-text-tertiary);
|
|
4769
|
+
}
|
|
4770
|
+
|
|
4771
|
+
.crewlet-composer__counter {
|
|
4772
|
+
font-family: var(--font-family-mono);
|
|
4773
|
+
font-size: var(--font-size-2xs);
|
|
4774
|
+
font-variant-numeric: tabular-nums;
|
|
4775
|
+
color: var(--color-feedback-warning-ink);
|
|
4776
|
+
}
|
|
4777
|
+
|
|
4778
|
+
.crewlet-composer__spacer {
|
|
4779
|
+
flex: 1;
|
|
4780
|
+
}
|
|
4781
|
+
|
|
4782
|
+
@media (width < 640px) {
|
|
4783
|
+
.crewlet-composer__hint {
|
|
4784
|
+
display: none;
|
|
4785
|
+
}
|
|
4786
|
+
}
|
|
4787
|
+
|
|
4788
|
+
@media (prefers-reduced-motion: reduce) {
|
|
4789
|
+
.crewlet-composer {
|
|
4790
|
+
transition: none;
|
|
4791
|
+
}
|
|
4792
|
+
}
|
|
4793
|
+
|
|
4794
|
+
|
|
4535
4795
|
/* Container-3TSKMGNI.css */
|
|
4536
4796
|
/*
|
|
4537
4797
|
* Container, the centred content measure. One max-width scale shared by every
|
|
@@ -8032,6 +8292,66 @@ svg.crewlet-datetime__chevron {
|
|
|
8032
8292
|
}
|
|
8033
8293
|
|
|
8034
8294
|
|
|
8295
|
+
/* FactList-G2H73NFR.css */
|
|
8296
|
+
/*
|
|
8297
|
+
* Read-only facts in one bordered box, a 32px row each: label and lock on the
|
|
8298
|
+
* left, the value on the right. The rows share the box's hairline between
|
|
8299
|
+
* them, so a list of six reads as one object rather than six cards.
|
|
8300
|
+
*/
|
|
8301
|
+
.crewlet-fact-list {
|
|
8302
|
+
display: grid;
|
|
8303
|
+
margin: 0;
|
|
8304
|
+
border: 1px solid var(--color-border-default);
|
|
8305
|
+
border-radius: var(--radius-md);
|
|
8306
|
+
overflow: hidden;
|
|
8307
|
+
}
|
|
8308
|
+
|
|
8309
|
+
.crewlet-fact-list__row {
|
|
8310
|
+
display: flex;
|
|
8311
|
+
align-items: center;
|
|
8312
|
+
gap: var(--spacing-2);
|
|
8313
|
+
min-height: 32px;
|
|
8314
|
+
padding: var(--spacing-1) var(--spacing-3);
|
|
8315
|
+
font-size: var(--font-size-compact);
|
|
8316
|
+
}
|
|
8317
|
+
|
|
8318
|
+
.crewlet-fact-list__row + .crewlet-fact-list__row {
|
|
8319
|
+
border-top: 1px solid var(--color-border-default);
|
|
8320
|
+
}
|
|
8321
|
+
|
|
8322
|
+
.crewlet-fact-list__row.is-locked {
|
|
8323
|
+
cursor: help;
|
|
8324
|
+
}
|
|
8325
|
+
|
|
8326
|
+
.crewlet-fact-list__label {
|
|
8327
|
+
display: flex;
|
|
8328
|
+
flex: 1 1 auto;
|
|
8329
|
+
align-items: center;
|
|
8330
|
+
gap: var(--spacing-1);
|
|
8331
|
+
min-width: 0;
|
|
8332
|
+
margin: 0;
|
|
8333
|
+
color: var(--color-text-tertiary);
|
|
8334
|
+
}
|
|
8335
|
+
|
|
8336
|
+
.crewlet-fact-list__lock {
|
|
8337
|
+
flex: none;
|
|
8338
|
+
color: var(--color-text-tertiary);
|
|
8339
|
+
}
|
|
8340
|
+
|
|
8341
|
+
.crewlet-fact-list__value {
|
|
8342
|
+
display: flex;
|
|
8343
|
+
flex: 0 1 auto;
|
|
8344
|
+
align-items: center;
|
|
8345
|
+
justify-content: flex-end;
|
|
8346
|
+
gap: var(--spacing-2);
|
|
8347
|
+
min-width: 0;
|
|
8348
|
+
margin: 0;
|
|
8349
|
+
color: var(--color-text-secondary);
|
|
8350
|
+
text-align: right;
|
|
8351
|
+
overflow-wrap: anywhere;
|
|
8352
|
+
}
|
|
8353
|
+
|
|
8354
|
+
|
|
8035
8355
|
/* FilterChip-EZ4QMW4E.css */
|
|
8036
8356
|
/*
|
|
8037
8357
|
* The filter chip: neutral until it is on, and then the accent.
|
|
@@ -8624,7 +8944,7 @@ svg.crewlet-datetime__chevron {
|
|
|
8624
8944
|
}
|
|
8625
8945
|
|
|
8626
8946
|
|
|
8627
|
-
/* Input-
|
|
8947
|
+
/* Input-RAKNQJCV.css */
|
|
8628
8948
|
/*
|
|
8629
8949
|
* The form row: Input, Textarea, Label, FormField, FormRow, FormSection and
|
|
8630
8950
|
* ReadOnlyField.
|
|
@@ -9129,6 +9449,13 @@ svg.crewlet-datetime__chevron {
|
|
|
9129
9449
|
color: var(--color-text-tertiary);
|
|
9130
9450
|
}
|
|
9131
9451
|
|
|
9452
|
+
/* SHOWN ONLY WHILE THE FIELD HAS FOCUS (`helperOnFocus`): a dense form reads as
|
|
9453
|
+
labels and values at rest, and the sentence appears under the field the
|
|
9454
|
+
reader is in. Still described, so a screen reader hears it on entry. */
|
|
9455
|
+
.crewlet-form-field--helper-on-focus:not(:focus-within) .crewlet-form-field__helper {
|
|
9456
|
+
display: none;
|
|
9457
|
+
}
|
|
9458
|
+
|
|
9132
9459
|
/*
|
|
9133
9460
|
* The error line, on the danger INK. It stays BESIDE the help rather than
|
|
9134
9461
|
* replacing it: a reader told they are wrong needs the line that says what
|
|
@@ -15492,7 +15819,7 @@ svg.crewlet-select__chevron {
|
|
|
15492
15819
|
}
|
|
15493
15820
|
|
|
15494
15821
|
|
|
15495
|
-
/* Tabs-
|
|
15822
|
+
/* Tabs-5I5Q5KKM.css */
|
|
15496
15823
|
/*
|
|
15497
15824
|
* The pill register: Tabs and SegmentedControl.
|
|
15498
15825
|
*
|
|
@@ -15833,6 +16160,39 @@ svg.crewlet-select__chevron {
|
|
|
15833
16160
|
}
|
|
15834
16161
|
}
|
|
15835
16162
|
|
|
16163
|
+
/* ── markers ──────────────────────────────────────────────────────────────
|
|
16164
|
+
What needs the reader behind a tab: a danger count for problems, a 6px
|
|
16165
|
+
dot for a warning or an unsaved change. One per tab, the most urgent. */
|
|
16166
|
+
.crewlet-tabs__marker {
|
|
16167
|
+
display: inline-flex;
|
|
16168
|
+
align-items: center;
|
|
16169
|
+
justify-content: center;
|
|
16170
|
+
flex: none;
|
|
16171
|
+
}
|
|
16172
|
+
.crewlet-tabs__marker--danger {
|
|
16173
|
+
min-width: 16px;
|
|
16174
|
+
height: 16px;
|
|
16175
|
+
padding: 0 var(--spacing-1);
|
|
16176
|
+
border-radius: var(--radius-circle);
|
|
16177
|
+
background: var(--color-feedback-danger-soft);
|
|
16178
|
+
color: var(--color-feedback-danger-ink);
|
|
16179
|
+
font-family: var(--font-family-mono);
|
|
16180
|
+
font-size: var(--font-size-2xs);
|
|
16181
|
+
line-height: 1;
|
|
16182
|
+
}
|
|
16183
|
+
.crewlet-tabs__marker--warning,
|
|
16184
|
+
.crewlet-tabs__marker--changed {
|
|
16185
|
+
width: 6px;
|
|
16186
|
+
height: 6px;
|
|
16187
|
+
border-radius: var(--radius-circle);
|
|
16188
|
+
}
|
|
16189
|
+
.crewlet-tabs__marker--warning {
|
|
16190
|
+
background: var(--color-feedback-warning);
|
|
16191
|
+
}
|
|
16192
|
+
.crewlet-tabs__marker--changed {
|
|
16193
|
+
background: var(--color-brand-accent);
|
|
16194
|
+
}
|
|
16195
|
+
|
|
15836
16196
|
|
|
15837
16197
|
/* Tag-4BRQS6GN.css */
|
|
15838
16198
|
/*
|
package/dist/utils/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import '../chunk-AER7UDD4.js';
|
|
2
|
-
export { NODE_HUES, NODE_HUE_NAMES, isNodeHue } from '../chunk-AYKXMIOR.js';
|
|
3
2
|
export { useClipboard, writeClipboard } from '../chunk-5VNUYO76.js';
|
|
4
3
|
export { HeadingLevelProvider, headingTag, nextHeadingLevel, useHeadingLevel } from '../chunk-PQADV6P6.js';
|
|
4
|
+
export { NODE_HUES, NODE_HUE_NAMES, isNodeHue } from '../chunk-AYKXMIOR.js';
|
|
5
5
|
export { cx } from '../chunk-ODEQTPFM.js';
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@crewlethq/ui",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.12.0",
|
|
4
4
|
"description": "Crewlet shared React components built on @crewlethq/tokens and @crewlethq/icons.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -42,8 +42,8 @@
|
|
|
42
42
|
"clean": "rm -rf dist src/generated"
|
|
43
43
|
},
|
|
44
44
|
"dependencies": {
|
|
45
|
-
"@crewlethq/icons": "0.
|
|
46
|
-
"@crewlethq/tokens": "0.
|
|
45
|
+
"@crewlethq/icons": "0.12.0",
|
|
46
|
+
"@crewlethq/tokens": "0.12.0"
|
|
47
47
|
},
|
|
48
48
|
"peerDependencies": {
|
|
49
49
|
"react": ">=18",
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { LayerNodeBridge } from './chunk-53DVJCVW.js';
|
|
2
|
-
import { LAYER_REPOSITION_EVENT, LayerHost } from './chunk-7RPGY3JE.js';
|
|
3
|
-
import { IconButton } from './chunk-4FQT6ZAY.js';
|
|
4
2
|
import { Button } from './chunk-OG6CL3EB.js';
|
|
3
|
+
import { IconButton } from './chunk-4FQT6ZAY.js';
|
|
4
|
+
import { LAYER_REPOSITION_EVENT, LayerHost } from './chunk-7RPGY3JE.js';
|
|
5
5
|
import { VisuallyHidden } from './chunk-BZFWDIV6.js';
|
|
6
6
|
import { cx } from './chunk-ODEQTPFM.js';
|
|
7
7
|
import './Canvas-YVXHMWLN.css';
|
|
File without changes
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { useModalLayer, focusables } from './chunk-R25RGPUB.js';
|
|
2
1
|
import { IconButton } from './chunk-4FQT6ZAY.js';
|
|
2
|
+
import { useModalLayer, focusables } from './chunk-R25RGPUB.js';
|
|
3
3
|
import { cx } from './chunk-ODEQTPFM.js';
|
|
4
4
|
import './AppShell-CEVLW4QG.css';
|
|
5
5
|
import { createContext, useContext, useId, useState, useRef, useCallback, useEffect, useLayoutEffect, useSyncExternalStore } from 'react';
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { CardHeaderSlotContext } from './chunk-AV2DXAEL.js';
|
|
2
|
-
import { Count } from './chunk-BHHIIK3M.js';
|
|
3
2
|
import { useHeadingLevel, HeadingLevelProvider, nextHeadingLevel, headingTag } from './chunk-PQADV6P6.js';
|
|
3
|
+
import { Count } from './chunk-BHHIIK3M.js';
|
|
4
4
|
import { cx } from './chunk-ODEQTPFM.js';
|
|
5
5
|
import './Card-KJOYHDTJ.css';
|
|
6
6
|
import { createContext, useId, useState, isValidElement, useRef, useCallback, useMemo, Children, cloneElement, useContext, useEffect, Fragment } from 'react';
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { Count } from './chunk-BHHIIK3M.js';
|
|
2
1
|
import { headingTag } from './chunk-PQADV6P6.js';
|
|
2
|
+
import { Count } from './chunk-BHHIIK3M.js';
|
|
3
3
|
import { cx } from './chunk-ODEQTPFM.js';
|
|
4
4
|
import { ChevronDownGlyph } from '@crewlethq/icons/glyphs';
|
|
5
5
|
import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { Popover } from './chunk-PDUZO35I.js';
|
|
2
1
|
import { today, CalendarGrid, shiftMonth, compareDays } from './chunk-GXQ3B46I.js';
|
|
3
|
-
import { IconButton } from './chunk-4FQT6ZAY.js';
|
|
4
2
|
import { Button } from './chunk-OG6CL3EB.js';
|
|
3
|
+
import { IconButton } from './chunk-4FQT6ZAY.js';
|
|
4
|
+
import { Popover } from './chunk-PDUZO35I.js';
|
|
5
5
|
import { cx } from './chunk-ODEQTPFM.js';
|
|
6
6
|
import './DateTimePicker-4AZBTODT.css';
|
|
7
7
|
import { useMemo, useState, useEffect } from 'react';
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { useTreeState, treeExpandable, treeLevel, treePosInSet, treeSetSize, treeItemAction, treePrevious, treeNext, treeStep } from './chunk-S3BCVWTU.js';
|
|
2
2
|
import { LayerNodeBridge } from './chunk-53DVJCVW.js';
|
|
3
|
+
import { IconButton } from './chunk-4FQT6ZAY.js';
|
|
3
4
|
import { LayerHost, LAYER_REPOSITION_EVENT } from './chunk-7RPGY3JE.js';
|
|
4
5
|
import { focusables } from './chunk-R25RGPUB.js';
|
|
5
|
-
import { IconButton } from './chunk-4FQT6ZAY.js';
|
|
6
6
|
import { VisuallyHidden } from './chunk-BZFWDIV6.js';
|
|
7
7
|
import { cx } from './chunk-ODEQTPFM.js';
|
|
8
8
|
import './TreeGrid-NSW7VMOX.css';
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
+
import { Button } from './chunk-OG6CL3EB.js';
|
|
1
2
|
import { HeadingLevelProvider } from './chunk-PQADV6P6.js';
|
|
3
|
+
import { IconButton } from './chunk-4FQT6ZAY.js';
|
|
2
4
|
import { useLayerContainer } from './chunk-7RPGY3JE.js';
|
|
3
5
|
import { focusables, useModalLayer, useBodyScrollLock } from './chunk-R25RGPUB.js';
|
|
4
|
-
import { IconButton } from './chunk-4FQT6ZAY.js';
|
|
5
|
-
import { Button } from './chunk-OG6CL3EB.js';
|
|
6
6
|
import { cx } from './chunk-ODEQTPFM.js';
|
|
7
7
|
import './Modal-BNT3TDV2.css';
|
|
8
8
|
import { useId, useRef, useCallback } from 'react';
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
+
import { Button } from './chunk-OG6CL3EB.js';
|
|
2
|
+
import { IconButton } from './chunk-4FQT6ZAY.js';
|
|
1
3
|
import { useLayerContainer, viewportBounds, LAYER_GAP, outsideBounds, placePopup, LAYER_REPOSITION_EVENT } from './chunk-7RPGY3JE.js';
|
|
2
4
|
import { usePopupLayer } from './chunk-R25RGPUB.js';
|
|
3
|
-
import { IconButton } from './chunk-4FQT6ZAY.js';
|
|
4
|
-
import { Button } from './chunk-OG6CL3EB.js';
|
|
5
5
|
import { cx } from './chunk-ODEQTPFM.js';
|
|
6
6
|
import './Menu-BT5PMFJI.css';
|
|
7
7
|
import { useId, useState, useRef, useCallback, useLayoutEffect, useEffect } from 'react';
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { useClipboard } from './chunk-5VNUYO76.js';
|
|
2
|
-
import { IconButton } from './chunk-4FQT6ZAY.js';
|
|
3
2
|
import { Button } from './chunk-OG6CL3EB.js';
|
|
3
|
+
import { IconButton } from './chunk-4FQT6ZAY.js';
|
|
4
4
|
import { VisuallyHidden } from './chunk-BZFWDIV6.js';
|
|
5
5
|
import { cx } from './chunk-ODEQTPFM.js';
|
|
6
6
|
import './Copyable-5PNRFOLS.css';
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { Tag } from './chunk-LOECRMHA.js';
|
|
2
2
|
import { useListbox } from './chunk-6MU7HNB4.js';
|
|
3
3
|
import { announce } from './chunk-RSAQOKH3.js';
|
|
4
|
-
import { isComposing } from './chunk-R25RGPUB.js';
|
|
5
4
|
import { IconButton } from './chunk-4FQT6ZAY.js';
|
|
5
|
+
import { isComposing } from './chunk-R25RGPUB.js';
|
|
6
6
|
import { cx } from './chunk-ODEQTPFM.js';
|
|
7
7
|
import './TagsInput-P2HS5QL4.css';
|
|
8
8
|
import { forwardRef, useState, useRef, useId, useImperativeHandle, useEffect, useMemo, useLayoutEffect } from 'react';
|