@kerfjs/ui 5.0.0-beta.110 → 5.0.0-beta.111
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 +1 -0
- package/ai/component-catalog.json +9 -2
- package/ai/component-composition.json +8 -1
- package/ai/components/button.md +5 -2
- package/ai/components/surface-scaffold.md +3 -0
- package/ai/public-api-signatures-v1.md +86 -39
- package/ai/skill.md +4 -0
- package/ai/webawesome-jsx-signatures-v1.md +1 -1
- package/dist/backdrop-image.d.ts +8 -0
- package/dist/backdrop-image.js +1 -1
- package/dist/browser/content-item.js +1 -0
- package/dist/button.d.ts +4 -2
- package/dist/button.js +1 -1
- package/dist/catalog-resources.d.ts +2 -1
- package/dist/catalog.d.ts +2 -1
- package/dist/catalog.js +2 -1
- package/dist/catalog.js.map +1 -1
- package/dist/{chunk-P7EJ4CAD.js → chunk-ETFP7HAR.js} +2 -2
- package/dist/{chunk-P7EJ4CAD.js.map → chunk-ETFP7HAR.js.map} +1 -1
- package/dist/{chunk-SOFPUW3O.js → chunk-IIQ2XIMU.js} +4 -3
- package/dist/chunk-IIQ2XIMU.js.map +1 -0
- package/dist/chunk-IRC5N7FA.js +16 -0
- package/dist/chunk-IRC5N7FA.js.map +1 -0
- package/dist/{chunk-SQ5DH66U.js → chunk-ITENVZ6Q.js} +2 -15
- package/dist/chunk-ITENVZ6Q.js.map +1 -0
- package/dist/{chunk-WSEJ2FDE.js → chunk-OUCHU7JB.js} +2 -2
- package/dist/{chunk-WSEJ2FDE.js.map → chunk-OUCHU7JB.js.map} +1 -1
- package/dist/{chunk-KPINJHIC.js → chunk-PS24PVR6.js} +3 -1
- package/dist/chunk-PS24PVR6.js.map +1 -0
- package/dist/{chunk-SCDWURBO.js → chunk-SOBRGH7T.js} +18 -3
- package/dist/chunk-SOBRGH7T.js.map +1 -0
- package/dist/{chunk-6CDILXF4.js → chunk-VGECEXM6.js} +11 -2
- package/dist/chunk-VGECEXM6.js.map +1 -0
- package/dist/chunk-WD6KABEU.js +200 -0
- package/dist/chunk-WD6KABEU.js.map +1 -0
- package/dist/{chunk-HQZG3OFL.js → chunk-XRZSK2WC.js} +3 -2
- package/dist/chunk-XRZSK2WC.js.map +1 -0
- package/dist/{chunk-CPSGUGAY.js → chunk-YPAQFBMN.js} +4 -4
- package/dist/{chunk-CPSGUGAY.js.map → chunk-YPAQFBMN.js.map} +1 -1
- package/dist/collapsible-panel.d.ts +1 -0
- package/dist/collapsible-panel.js +3 -2
- package/dist/collapsible-panel.js.map +1 -1
- package/dist/content-item.d.ts +44 -2
- package/dist/content-item.js +4 -1
- package/dist/index.d.ts +3 -2
- package/dist/index.js +6 -5
- package/dist/list-detail-dialog.d.ts +2 -1
- package/dist/list-detail-dialog.js +4 -3
- package/dist/list-detail-dialog.js.map +1 -1
- package/dist/{nav-stack-CU_0dKtI.d.ts → nav-stack-CrZF95VO.d.ts} +2 -1
- package/dist/nav-stack.d.ts +2 -1
- package/dist/nav-stack.js +2 -1
- package/dist/pane.d.ts +3 -23
- package/dist/pane.js +2 -1
- package/dist/split-view.d.ts +2 -1
- package/dist/split-view.js +2 -1
- package/dist/styles/backdrop-image.css +18 -1
- package/dist/styles/components/surfaces/backdrop-image/backdrop-image.css +18 -1
- package/dist/styles/components/surfaces/content-item/content-item.css +52 -0
- package/dist/styles/components/surfaces/surface-scaffold/surface-scaffold.css +9 -1
- package/dist/styles/content-item.css +3 -168
- package/dist/styles/foundation.css +4 -4
- package/dist/styles/surface-scaffold.css +9 -1
- package/dist/styles/webawesome.css +2 -2
- package/dist/surface-scaffold.d.ts +6 -2
- package/dist/surface-scaffold.js +1 -1
- package/dist/surface-tint-DQgYCaP9.d.ts +25 -0
- package/dist/tab-navigator.d.ts +2 -1
- package/dist/tab-navigator.js +2 -1
- package/dist/tab-navigator.js.map +1 -1
- package/dist/toolbar.d.ts +1 -0
- package/dist/wire-catalog.d.ts +2 -1
- package/dist/wire-content-items.js +62 -0
- package/dist/wire-content-items.js.map +1 -1
- package/dist/workbench-dialog.d.ts +2 -1
- package/dist/workbench-dialog.js +3 -2
- package/dist/workbench-dialog.js.map +1 -1
- package/dist/workbench.d.ts +2 -1
- package/dist/workbench.js +2 -1
- package/docs/accessibility.md +6 -0
- package/docs/backdrop-image.md +4 -0
- package/docs/button.md +15 -0
- package/docs/component-contract.md +7 -0
- package/docs/component-selection.md +1 -1
- package/docs/design/templates/button/emphasis-dark.svg +1 -1
- package/docs/design/templates/button-dark.svg +1 -1
- package/docs/design/templates/checkbox/error-dark.svg +1 -1
- package/docs/design/templates/checkbox/states.svg +1 -1
- package/docs/design/templates/checkbox-dark.svg +1 -1
- package/docs/design/templates/checkbox-group/horizontal-dark.svg +1 -1
- package/docs/design/templates/checkbox-group/vertical.svg +1 -1
- package/docs/design/templates/checkbox-group-dark.svg +1 -1
- package/docs/design/templates/checkbox-group.svg +1 -1
- package/docs/design/templates/checkbox.svg +1 -1
- package/docs/design/templates/choice-chips/color-palette-dark.svg +1 -1
- package/docs/design/templates/choice-chips-dark.svg +1 -1
- package/docs/design/templates/color-field/error-dark.svg +1 -1
- package/docs/design/templates/color-field/hint.svg +1 -1
- package/docs/design/templates/color-field-dark.svg +1 -1
- package/docs/design/templates/color-field.svg +1 -1
- package/docs/design/templates/color-picker/gray.svg +1 -1
- package/docs/design/templates/color-picker/hsb.svg +1 -1
- package/docs/design/templates/color-picker/rgb.svg +1 -1
- package/docs/design/templates/color-picker.svg +1 -1
- package/docs/design/templates/color-swatches/palette-dark.svg +1 -1
- package/docs/design/templates/color-swatches-dark.svg +1 -1
- package/docs/design/templates/disclosure/embedded.svg +1 -1
- package/docs/design/templates/disclosure/framed-sunken.svg +1 -1
- package/docs/design/templates/disclosure/plain.svg +1 -1
- package/docs/design/templates/disclosure.svg +1 -1
- package/docs/design/templates/message-composer/chat.svg +1 -1
- package/docs/design/templates/message-composer.svg +1 -1
- package/docs/design/templates/progress-bar/determinate.svg +1 -1
- package/docs/design/templates/progress-bar/tones.svg +1 -1
- package/docs/design/templates/progress-bar.svg +1 -1
- package/docs/design/templates/radio-group/horizontal-dark.svg +1 -1
- package/docs/design/templates/radio-group/vertical.svg +1 -1
- package/docs/design/templates/radio-group-dark.svg +1 -1
- package/docs/design/templates/radio-group.svg +1 -1
- package/docs/design/templates/search-field/empty.svg +1 -1
- package/docs/design/templates/search-field/tokens.svg +1 -1
- package/docs/design/templates/search-field.svg +1 -1
- package/docs/design/templates/select/form.svg +1 -1
- package/docs/design/templates/select.svg +1 -1
- package/docs/design/templates/slider/compact.svg +1 -1
- package/docs/design/templates/slider/readout.svg +1 -1
- package/docs/design/templates/slider/ticks.svg +1 -1
- package/docs/design/templates/slider.svg +1 -1
- package/docs/design/templates/switch/states.svg +1 -1
- package/docs/design/templates/switch.svg +1 -1
- package/docs/design/templates/tag-field/error-dark.svg +1 -1
- package/docs/design/templates/tag-field/error.svg +1 -1
- package/docs/design/templates/tag-field/tags.svg +1 -1
- package/docs/design/templates/tag-field-dark.svg +1 -1
- package/docs/design/templates/tag-field.svg +1 -1
- package/docs/design/templates/text-field/error-dark.svg +1 -1
- package/docs/design/templates/text-field/labeled.svg +1 -1
- package/docs/design/templates/text-field/multiline.svg +1 -1
- package/docs/design/templates/text-field/search.svg +1 -1
- package/docs/design/templates/text-field-dark.svg +1 -1
- package/docs/design/templates/text-field.svg +1 -1
- package/docs/design/templates/toolbar-control-group/icon-tile-danger-dark.svg +1 -1
- package/docs/design/templates/toolbar-control-group-dark.svg +1 -1
- package/docs/design/templates.md +3 -1
- package/docs/layout.md +25 -0
- package/docs/manual-test-plan.md +27 -1
- package/docs/recipes.md +9 -0
- package/docs/surface-scaffold.md +4 -1
- package/llms.txt +3 -0
- package/package.json +1 -1
- package/dist/chunk-5USKCWGL.js +0 -113
- package/dist/chunk-5USKCWGL.js.map +0 -1
- package/dist/chunk-6CDILXF4.js.map +0 -1
- package/dist/chunk-HQZG3OFL.js.map +0 -1
- package/dist/chunk-KPINJHIC.js.map +0 -1
- package/dist/chunk-SCDWURBO.js.map +0 -1
- package/dist/chunk-SOFPUW3O.js.map +0 -1
- package/dist/chunk-SQ5DH66U.js.map +0 -1
package/dist/index.js
CHANGED
|
@@ -30,7 +30,7 @@ export { Select } from './chunk-ZX2QQJXD.js';
|
|
|
30
30
|
export { applySelection, isApplePlatform, selectionGesture } from './chunk-GXSX6Q6O.js';
|
|
31
31
|
export { MessageComposer } from './chunk-4OV272LF.js';
|
|
32
32
|
export { RadioGroup } from './chunk-OHPYT2BH.js';
|
|
33
|
-
export { DialogSurface, PopoverDialogSurface, PopupSurface } from './chunk-
|
|
33
|
+
export { DialogSurface, PopoverDialogSurface, PopupSurface } from './chunk-VGECEXM6.js';
|
|
34
34
|
export { closeDialog, openDialog } from './chunk-ATGAJVZ6.js';
|
|
35
35
|
|
|
36
36
|
export { EmptyState } from './chunk-B53PS2LE.js';
|
|
@@ -39,7 +39,7 @@ export { FramedList, FramedListRow } from './chunk-S2XULQEK.js';
|
|
|
39
39
|
export { Grid } from './chunk-KCS6NJ3O.js';
|
|
40
40
|
|
|
41
41
|
export { ListActionRow } from './chunk-JCCN3U6X.js';
|
|
42
|
-
export { ContentItem } from './chunk-
|
|
42
|
+
export { ContentItem } from './chunk-WD6KABEU.js';
|
|
43
43
|
export { ContentSwap } from './chunk-EIET4QLK.js';
|
|
44
44
|
export { CornerStatus } from './chunk-G3J7JDP6.js';
|
|
45
45
|
export { EdgeActivityIndicator } from './chunk-QH5KOFNS.js';
|
|
@@ -48,8 +48,8 @@ export { ChoiceChips } from './chunk-ITUQC4FW.js';
|
|
|
48
48
|
export { ColumnTrack } from './chunk-QYMJHS4K.js';
|
|
49
49
|
export { Combobox } from './chunk-BKUMG2KB.js';
|
|
50
50
|
export { openAnchoredSurface, openAnchoredSurfaceAt } from './chunk-3WYREXW4.js';
|
|
51
|
-
export { BackdropImage } from './chunk-
|
|
52
|
-
export { Button } from './chunk-
|
|
51
|
+
export { BackdropImage } from './chunk-SOBRGH7T.js';
|
|
52
|
+
export { Button } from './chunk-PS24PVR6.js';
|
|
53
53
|
export { Switch } from './chunk-LTBVP6VN.js';
|
|
54
54
|
export { Row } from './chunk-AMIHGFLP.js';
|
|
55
55
|
export { SearchField, placeSearchFieldCaret, readSearchField } from './chunk-VEME3D7K.js';
|
|
@@ -69,12 +69,13 @@ export { Skeleton } from './chunk-CVD5IZGB.js';
|
|
|
69
69
|
export { DisclosureArrow } from './chunk-TKNVL53O.js';
|
|
70
70
|
export { ToolbarActionLink, ToolbarControlGroup } from './chunk-5J6Z4BWY.js';
|
|
71
71
|
export { Toolbar } from './chunk-ZN7KUMPY.js';
|
|
72
|
-
export { Pane } from './chunk-
|
|
72
|
+
export { Pane } from './chunk-XRZSK2WC.js';
|
|
73
73
|
|
|
74
74
|
export { ensureSunkenTexture } from './chunk-IKS72C6P.js';
|
|
75
75
|
export { List } from './chunk-NB6POCFH.js';
|
|
76
76
|
|
|
77
77
|
|
|
78
|
+
|
|
78
79
|
export { LoadingSpinner } from './chunk-WVS6CUCT.js';
|
|
79
80
|
export { Badge } from './chunk-RMWNO6BA.js';
|
|
80
81
|
export { CheckboxGroup } from './chunk-HU5IHXCI.js';
|
|
@@ -4,9 +4,10 @@ import { CssLength } from './css-values.js';
|
|
|
4
4
|
import { SplitViewListWidth } from './split-view.js';
|
|
5
5
|
import { DialogSurfaceSize, DialogSurfaceHeight, DialogSurfaceMaxHeight, DialogSurfaceRootAttributes } from './surface-scaffold.js';
|
|
6
6
|
export { DialogCloseSource, DialogRequestCloseDetail, closeDialog, openDialog } from './surface-scaffold.js';
|
|
7
|
-
import './nav-stack-
|
|
7
|
+
import './nav-stack-CrZF95VO.js';
|
|
8
8
|
import './pane.js';
|
|
9
9
|
import './scroll-clearance-BikHljTc.js';
|
|
10
|
+
import './surface-tint-DQgYCaP9.js';
|
|
10
11
|
import './list.js';
|
|
11
12
|
import './extension-attributes-mu8MFUl0.js';
|
|
12
13
|
import './flex-alignment-4ms8ZbV8.js';
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { SplitView } from './chunk-
|
|
2
|
-
import { DialogSurface } from './chunk-
|
|
1
|
+
import { SplitView } from './chunk-ETFP7HAR.js';
|
|
2
|
+
import { DialogSurface } from './chunk-VGECEXM6.js';
|
|
3
3
|
export { closeDialog, openDialog } from './chunk-ATGAJVZ6.js';
|
|
4
4
|
|
|
5
5
|
|
|
@@ -9,7 +9,8 @@ import { ToolbarText } from './chunk-EKHDLBRP.js';
|
|
|
9
9
|
|
|
10
10
|
import { ToolbarControlGroup } from './chunk-5J6Z4BWY.js';
|
|
11
11
|
import { Toolbar } from './chunk-ZN7KUMPY.js';
|
|
12
|
-
import { Pane } from './chunk-
|
|
12
|
+
import { Pane } from './chunk-XRZSK2WC.js';
|
|
13
|
+
|
|
13
14
|
|
|
14
15
|
|
|
15
16
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/surfaces/list-detail-dialog/list-detail-dialog.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AA2HA,IAAM,kBAAA,GAAyC,EAAE,IAAA,EAAM,GAAA,EAAK,aAAa,GAAA,EAAI;AAE7E,SAAS,WAAW,UAAA,EAAoB;AACtC,EAAA,uBACE,GAAA,CAAC,uBAAoB,UAAA,EAAW,YAAA,EAAa,QAAM,IAAA,EACjD,QAAA,kBAAA,GAAA,CAAC,YAAO,IAAA,EAAK,QAAA,EAAS,cAAY,UAAA,EAAY,mBAAA,EAAkB,IAC9D,QAAA,kBAAA,GAAA,CAAC,UAAA,EAAA,EAAW,MAAM,CAAA,EAAG,IAAA,EAAK,GAAA,EAAI,CAAA,EAChC,CAAA,EACF,CAAA;AAEJ;AAaO,SAAS,gBAAA,CAAiB;AAAA,EAC/B,EAAA;AAAA,EACA,KAAA;AAAA,EACA,WAAA;AAAA,EACA,IAAA;AAAA,EACA,MAAA;AAAA,EACA,OAAA,GAAU,KAAA;AAAA,EACV,YAAA,GAAe,KAAA;AAAA,EACf,SAAA,GAAY,MAAA;AAAA,EACZ,UAAA,GAAa,OAAA;AAAA,EACb,YAAA,GAAe,KAAA;AAAA,EACf,IAAA,GAAO,OAAA;AAAA,EACP,cAAA;AAAA,EACA,MAAA;AAAA,EACA,SAAA;AAAA,EACA,cAAA;AAAA,EACA,cAAA;AAAA,EACA,SAAA,GAAY,EAAA;AAAA,EACZ;AACF,CAAA,EAA0B;AACxB,EAAA,MAAM,KAAA,GAAQ,WAAW,UAAU,CAAA;AACnC,EAAA,MAAM,QAAQ,OAAA,mBACZ,GAAA;AAAA,IAAC,SAAA;AAAA,IAAA;AAAA,MACC,EAAA,EAAI,GAAG,EAAE,CAAA,MAAA,CAAA;AAAA,MACT,KAAA;AAAA,MACA,OAAA,EAAO,IAAA;AAAA,MACP,YAAA;AAAA,MACA,WAAW,IAAA,CAAK,KAAA;AAAA,MAChB,aAAa,MAAA,CAAO,KAAA;AAAA,MACpB,SAAA;AAAA,MACA,YAAA,EAAc;AAAA,QACZ,IAAA,EAAM;AAAA,UACJ,OAAA,EAAS;AAAA,YACP,0BACE,IAAA,CAAA,QAAA,EAAA,EACG,QAAA,EAAA;AAAA,cAAA,IAAA,CAAK,OAAA;AAAA,cACL;AAAA,aAAA,EACH;AAAA,WAEJ;AAAA,UACA,QAAQ,IAAA,CAAK;AAAA,SACf;AAAA,QACA,MAAA,EAAQ;AAAA,UACN,OAAA,EAAS;AAAA,YACP,0BACE,IAAA,CAAA,QAAA,EAAA,EACG,QAAA,EAAA;AAAA,cAAA,MAAA,CAAO,OAAA;AAAA,cACP;AAAA,aAAA,EACH;AAAA,WAEJ;AAAA,UACA,QAAQ,MAAA,CAAO;AAAA;AACjB,OACF;AAAA,MACA,MAAM,IAAA,CAAK,OAAA;AAAA,MACX,QAAQ,MAAA,CAAO;AAAA;AAAA,GACjB,mBAEA,GAAA;AAAA,IAAC,SAAA;AAAA,IAAA;AAAA,MACC,EAAA,EAAI,GAAG,EAAE,CAAA,MAAA,CAAA;AAAA,MACT,KAAA;AAAA,MACA,WAAW,IAAA,CAAK,KAAA;AAAA,MAChB,aAAa,MAAA,CAAO,KAAA;AAAA,MACpB,SAAA,EAAW,KAAK,KAAA,IAAS,kBAAA;AAAA,MACzB,IAAA,kBACE,GAAA;AAAA,QAAC,IAAA;AAAA,QAAA;AAAA,UACC,OAAO,IAAA,CAAK,KAAA;AAAA,UACZ,MAAA,kBACE,GAAA;AAAA,YAAC,OAAA;AAAA,YAAA;AAAA,cACC,OAAO,IAAA,CAAK,KAAA;AAAA,cACZ,OAAA,kBAAS,GAAA,CAAC,WAAA,EAAA,EAAY,IAAA,EAAM,KAAK,KAAA,EAAO,CAAA;AAAA,cACxC,UAAU,IAAA,CAAK;AAAA;AAAA,WACjB;AAAA,UAEF,QAAQ,IAAA,CAAK,MAAA;AAAA,UAEZ,QAAA,EAAA,IAAA,CAAK;AAAA;AAAA,OACR;AAAA,MAEF,MAAA,kBACE,GAAA;AAAA,QAAC,IAAA;AAAA,QAAA;AAAA,UACC,OAAO,MAAA,CAAO,KAAA;AAAA,UACd,MAAA,kBACE,GAAA;AAAA,YAAC,OAAA;AAAA,YAAA;AAAA,cACC,OAAO,MAAA,CAAO,KAAA;AAAA,cACd,OAAA,kBACE,GAAA;AAAA,gBAAC,WAAA;AAAA,gBAAA;AAAA,kBACC,MAAM,MAAA,CAAO,KAAA;AAAA,kBACb,aAAa,MAAA,CAAO,WAAA;AAAA,kBACpB,IAAA,EAAK,QAAA;AAAA,kBACL,EAAA,EAAI,GAAG,EAAE,CAAA,MAAA,CAAA;AAAA,kBACT,YAAA,EAAc;AAAA;AAAA,eAChB;AAAA,cAEF,0BACE,IAAA,CAAA,QAAA,EAAA,EACG,QAAA,EAAA;AAAA,gBAAA,MAAA,CAAO,OAAA;AAAA,gBACP;AAAA,eAAA,EACH;AAAA;AAAA,WAEJ;AAAA,UAEF,QAAQ,MAAA,CAAO,MAAA;AAAA,UAEd,QAAA,EAAA,MAAA,CAAO;AAAA;AAAA;AACV;AAAA,GAEJ;AAEF,EAAA,uBACE,GAAA;AAAA,IAAC,aAAA;AAAA,IAAA;AAAA,MACC,EAAA;AAAA,MACA,KAAA;AAAA,MACA,WAAA;AAAA,MACA,aAAA,EAAa,IAAA;AAAA,MACb,YAAA;AAAA,MACA,UAAA;AAAA,MACA,IAAA;AAAA,MACA,YAAA,EAAc,UAAU,YAAA,GAAe,OAAA;AAAA,MACvC,cAAA;AAAA,MACA,MAAA,EACE,UACI,MAAA,GACA,SAAA,KAAc,SACX,MAAA,IAAU,MAAA,CAAO,GAAG,CAAA,GACrB,MAAA;AAAA,MAER,SAAA,EAAW,UAAU,MAAA,GAAY,SAAA;AAAA,MACjC,cAAA,EAAgB,UAAU,MAAA,GAAY,cAAA;AAAA,MACtC,SAAA,EAAU,MAAA;AAAA,MACV,UAAA,EAAW,MAAA;AAAA,MACX,cAAA,EAAgB;AAAA,QACd,GAAG,cAAA;AAAA,QACH,oBAAA,EAAsB;AAAA,OACxB;AAAA,MACA,SAAA;AAAA,MACA,IAAA;AAAA,MAEC,QAAA,EAAA;AAAA;AAAA,GACH;AAEJ","file":"list-detail-dialog.js","sourcesContent":["import { X } from 'lucide';\n\nimport type { KerfUiContent } from '../../../shared/content/semantic-content.js';\nimport type { CssLength } from '../../../shared/styles/css-values.js';\nimport { remify } from '../../../shared/styles/css-values.js';\nimport { Toolbar } from '../../actions/toolbar/toolbar.js';\nimport { ToolbarControlGroup } from '../../actions/toolbar-control-group/toolbar-control-group.js';\nimport { ToolbarText } from '../../actions/toolbar-text/toolbar-text.js';\nimport { Pane } from '../../layout/pane/pane.js';\nimport {\n SplitView,\n type SplitViewListWidth,\n} from '../../layout/split-view/split-view.js';\nimport { LucideIcon } from '../../media/lucide-icon/lucide-icon.js';\nimport {\n DialogSurface,\n type DialogSurfaceHeight,\n type DialogSurfaceMaxHeight,\n type DialogSurfaceRootAttributes,\n type DialogSurfaceSize,\n} from '../surface-scaffold/surface-scaffold.js';\n\n// Open and close it like any DialogSurface, from the same import.\nexport {\n closeDialog,\n type DialogCloseSource,\n type DialogRequestCloseDetail,\n openDialog,\n} from '../surface-scaffold/surface-scaffold.js';\n\n/** The list column: a secondary title, its own controls, and the list. */\nexport interface ListDetailDialogList {\n /**\n * The column's title, at the default toolbar size so it reads as pane\n * identity beside the detail's primary title. On compact devices it titles\n * the root view.\n */\n title: string;\n /** Controls after the title in the column's header, such as a `ToolbarControlGroup`. */\n toolbar?: KerfUiContent;\n /** The list, usually a `List` of selectable `ListItem`s. */\n content: KerfUiContent;\n /** Content pinned below the list, such as an add control. */\n footer?: KerfUiContent;\n /**\n * The column's width on roomy devices (default 280px, at most 40% of the\n * dialog's width).\n */\n width?: SplitViewListWidth;\n}\n\n/** The detail column: the dialog's primary title, actions, and close control. */\nexport interface ListDetailDialogDetail {\n /**\n * The dialog's primary title: an xl heading at the top of the detail\n * column on roomy devices, and the pushed view's title on compact devices.\n */\n title: string;\n /** A short supporting line under the roomy title. */\n description?: string;\n /**\n * Header controls before the close control, such as a\n * `ToolbarControlGroup`. Primary record actions usually go in `footer`.\n */\n actions?: KerfUiContent;\n /** The selected item's detail. */\n content: KerfUiContent;\n /** Content pinned below the detail, usually its buttons. */\n footer?: KerfUiContent;\n}\n\n/**\n * Application `data-*` identity on the dialog root, such as `data-key`; the\n * dialog's own configuration attributes stay protected.\n */\nexport type ListDetailDialogRootAttributes = DialogSurfaceRootAttributes;\n\nexport interface ListDetailDialogProps {\n /**\n * The dialog's id, for `openDialog(document.getElementById(id))`. Also\n * prefixes the ids of the split and the detail title.\n */\n id: string;\n /** The dialog's accessible name. */\n label: string;\n /**\n * Id of the element whose text is the dialog's accessible description,\n * such as app-owned summary copy. The detail's `description` describes the\n * selection, not the dialog, so it is not wired automatically.\n */\n describedBy?: string;\n list: ListDetailDialogList;\n detail: ListDetailDialogDetail;\n /**\n * One pane at a time: derive from `deviceClass().value.compact`. The dialog\n * fills the screen and drills from the list into the detail as a\n * `NavStack`; every view keeps the close control.\n */\n compact?: boolean;\n /** On compact devices, whether the detail is pushed over the list. */\n detailActive?: boolean;\n /** The compact back control's accessible name (default `Back`). */\n backLabel?: string;\n /** The close control's accessible name (default `Close`). */\n closeLabel?: string;\n /** Close on a press on the backdrop; otherwise the panel pulses. */\n lightDismiss?: boolean;\n /** Roomy preferred width preset (default `large`). */\n size?: DialogSurfaceSize;\n /** Roomy preferred width; takes precedence over `size`. */\n preferredWidth?: CssLength;\n /** Roomy definite height (default 560px), bounded by the viewport. */\n height?: DialogSurfaceHeight;\n /** Roomy height cap in place of a definite height. */\n maxHeight?: DialogSurfaceMaxHeight;\n /** Roomy edge clearance from the viewport. */\n viewportGutter?: CssLength;\n rootAttributes?: ListDetailDialogRootAttributes;\n className?: string;\n /** Native named-slot assignment when composed inside a web component. */\n slot?: string;\n}\n\nconst DEFAULT_LIST_WIDTH: SplitViewListWidth = { size: 280, maxFraction: 0.4 };\n\nfunction closeGroup(closeLabel: string) {\n return (\n <ToolbarControlGroup appearance=\"borderless\" single>\n <button type=\"button\" aria-label={closeLabel} data-dialog-close=\"\">\n <LucideIcon icon={X} name=\"x\" />\n </button>\n </ToolbarControlGroup>\n );\n}\n\n/**\n * A list-detail dialog: a modal whose list column and detail column each run\n * its full height. The list column carries a secondary title and its own\n * controls; the detail column carries the dialog's primary title, its\n * actions, and the close control, so the divider between them runs from top\n * to bottom. On compact devices it fills the screen and becomes a `NavStack`\n * that drills from the list into the detail. Open it with `openDialog()`;\n * the app owns the selection and, on compact devices, `detailActive` (the\n * stack's back control dispatches `nav-back`). Built from `DialogSurface`,\n * `SplitView`, and `Pane`.\n */\nexport function ListDetailDialog({\n id,\n label,\n describedBy,\n list,\n detail,\n compact = false,\n detailActive = false,\n backLabel = 'Back',\n closeLabel = 'Close',\n lightDismiss = false,\n size = 'large',\n preferredWidth,\n height,\n maxHeight,\n viewportGutter,\n rootAttributes,\n className = '',\n slot,\n}: ListDetailDialogProps) {\n const close = closeGroup(closeLabel);\n const split = compact ? (\n <SplitView\n id={`${id}-split`}\n label={label}\n compact\n detailActive={detailActive}\n listTitle={list.title}\n detailTitle={detail.title}\n backLabel={backLabel}\n compactStack={{\n list: {\n toolbar: {\n trailing: (\n <>\n {list.toolbar}\n {close}\n </>\n ),\n },\n footer: list.footer,\n },\n detail: {\n toolbar: {\n trailing: (\n <>\n {detail.actions}\n {close}\n </>\n ),\n },\n footer: detail.footer,\n },\n }}\n list={list.content}\n detail={detail.content}\n />\n ) : (\n <SplitView\n id={`${id}-split`}\n label={label}\n listTitle={list.title}\n detailTitle={detail.title}\n listWidth={list.width ?? DEFAULT_LIST_WIDTH}\n list={\n <Pane\n label={list.title}\n header={\n <Toolbar\n label={list.title}\n leading={<ToolbarText text={list.title} />}\n trailing={list.toolbar}\n />\n }\n footer={list.footer}\n >\n {list.content}\n </Pane>\n }\n detail={\n <Pane\n label={detail.title}\n header={\n <Toolbar\n label={detail.title}\n leading={\n <ToolbarText\n text={detail.title}\n description={detail.description}\n size=\"xlarge\"\n id={`${id}-title`}\n headingLevel={2}\n />\n }\n trailing={\n <>\n {detail.actions}\n {close}\n </>\n }\n />\n }\n footer={detail.footer}\n >\n {detail.content}\n </Pane>\n }\n />\n );\n return (\n <DialogSurface\n id={id}\n label={label}\n describedBy={describedBy}\n withoutHeader\n lightDismiss={lightDismiss}\n closeLabel={closeLabel}\n size={size}\n presentation={compact ? 'fullscreen' : 'modal'}\n preferredWidth={preferredWidth}\n height={\n compact\n ? undefined\n : maxHeight === undefined\n ? (height ?? remify(560))\n : height\n }\n maxHeight={compact ? undefined : maxHeight}\n viewportGutter={compact ? undefined : viewportGutter}\n bodyInset=\"none\"\n bodyLayout=\"fill\"\n rootAttributes={{\n ...rootAttributes,\n 'data-dialog-layout': 'list-detail',\n }}\n className={className}\n slot={slot}\n >\n {split}\n </DialogSurface>\n );\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/components/surfaces/list-detail-dialog/list-detail-dialog.tsx"],"names":[],"mappings":"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","file":"list-detail-dialog.js","sourcesContent":["import { X } from 'lucide';\n\nimport type { KerfUiContent } from '../../../shared/content/semantic-content.js';\nimport type { CssLength } from '../../../shared/styles/css-values.js';\nimport { remify } from '../../../shared/styles/css-values.js';\nimport { Toolbar } from '../../actions/toolbar/toolbar.js';\nimport { ToolbarControlGroup } from '../../actions/toolbar-control-group/toolbar-control-group.js';\nimport { ToolbarText } from '../../actions/toolbar-text/toolbar-text.js';\nimport { Pane } from '../../layout/pane/pane.js';\nimport {\n SplitView,\n type SplitViewListWidth,\n} from '../../layout/split-view/split-view.js';\nimport { LucideIcon } from '../../media/lucide-icon/lucide-icon.js';\nimport {\n DialogSurface,\n type DialogSurfaceHeight,\n type DialogSurfaceMaxHeight,\n type DialogSurfaceRootAttributes,\n type DialogSurfaceSize,\n} from '../surface-scaffold/surface-scaffold.js';\n\n// Open and close it like any DialogSurface, from the same import.\nexport {\n closeDialog,\n type DialogCloseSource,\n type DialogRequestCloseDetail,\n openDialog,\n} from '../surface-scaffold/surface-scaffold.js';\n\n/** The list column: a secondary title, its own controls, and the list. */\nexport interface ListDetailDialogList {\n /**\n * The column's title, at the default toolbar size so it reads as pane\n * identity beside the detail's primary title. On compact devices it titles\n * the root view.\n */\n title: string;\n /** Controls after the title in the column's header, such as a `ToolbarControlGroup`. */\n toolbar?: KerfUiContent;\n /** The list, usually a `List` of selectable `ListItem`s. */\n content: KerfUiContent;\n /** Content pinned below the list, such as an add control. */\n footer?: KerfUiContent;\n /**\n * The column's width on roomy devices (default 280px, at most 40% of the\n * dialog's width).\n */\n width?: SplitViewListWidth;\n}\n\n/** The detail column: the dialog's primary title, actions, and close control. */\nexport interface ListDetailDialogDetail {\n /**\n * The dialog's primary title: an xl heading at the top of the detail\n * column on roomy devices, and the pushed view's title on compact devices.\n */\n title: string;\n /** A short supporting line under the roomy title. */\n description?: string;\n /**\n * Header controls before the close control, such as a\n * `ToolbarControlGroup`. Primary record actions usually go in `footer`.\n */\n actions?: KerfUiContent;\n /** The selected item's detail. */\n content: KerfUiContent;\n /** Content pinned below the detail, usually its buttons. */\n footer?: KerfUiContent;\n}\n\n/**\n * Application `data-*` identity on the dialog root, such as `data-key`; the\n * dialog's own configuration attributes stay protected.\n */\nexport type ListDetailDialogRootAttributes = DialogSurfaceRootAttributes;\n\nexport interface ListDetailDialogProps {\n /**\n * The dialog's id, for `openDialog(document.getElementById(id))`. Also\n * prefixes the ids of the split and the detail title.\n */\n id: string;\n /** The dialog's accessible name. */\n label: string;\n /**\n * Id of the element whose text is the dialog's accessible description,\n * such as app-owned summary copy. The detail's `description` describes the\n * selection, not the dialog, so it is not wired automatically.\n */\n describedBy?: string;\n list: ListDetailDialogList;\n detail: ListDetailDialogDetail;\n /**\n * One pane at a time: derive from `deviceClass().value.compact`. The dialog\n * fills the screen and drills from the list into the detail as a\n * `NavStack`; every view keeps the close control.\n */\n compact?: boolean;\n /** On compact devices, whether the detail is pushed over the list. */\n detailActive?: boolean;\n /** The compact back control's accessible name (default `Back`). */\n backLabel?: string;\n /** The close control's accessible name (default `Close`). */\n closeLabel?: string;\n /** Close on a press on the backdrop; otherwise the panel pulses. */\n lightDismiss?: boolean;\n /** Roomy preferred width preset (default `large`). */\n size?: DialogSurfaceSize;\n /** Roomy preferred width; takes precedence over `size`. */\n preferredWidth?: CssLength;\n /** Roomy definite height (default 560px), bounded by the viewport. */\n height?: DialogSurfaceHeight;\n /** Roomy height cap in place of a definite height. */\n maxHeight?: DialogSurfaceMaxHeight;\n /** Roomy edge clearance from the viewport. */\n viewportGutter?: CssLength;\n rootAttributes?: ListDetailDialogRootAttributes;\n className?: string;\n /** Native named-slot assignment when composed inside a web component. */\n slot?: string;\n}\n\nconst DEFAULT_LIST_WIDTH: SplitViewListWidth = { size: 280, maxFraction: 0.4 };\n\nfunction closeGroup(closeLabel: string) {\n return (\n <ToolbarControlGroup appearance=\"borderless\" single>\n <button type=\"button\" aria-label={closeLabel} data-dialog-close=\"\">\n <LucideIcon icon={X} name=\"x\" />\n </button>\n </ToolbarControlGroup>\n );\n}\n\n/**\n * A list-detail dialog: a modal whose list column and detail column each run\n * its full height. The list column carries a secondary title and its own\n * controls; the detail column carries the dialog's primary title, its\n * actions, and the close control, so the divider between them runs from top\n * to bottom. On compact devices it fills the screen and becomes a `NavStack`\n * that drills from the list into the detail. Open it with `openDialog()`;\n * the app owns the selection and, on compact devices, `detailActive` (the\n * stack's back control dispatches `nav-back`). Built from `DialogSurface`,\n * `SplitView`, and `Pane`.\n */\nexport function ListDetailDialog({\n id,\n label,\n describedBy,\n list,\n detail,\n compact = false,\n detailActive = false,\n backLabel = 'Back',\n closeLabel = 'Close',\n lightDismiss = false,\n size = 'large',\n preferredWidth,\n height,\n maxHeight,\n viewportGutter,\n rootAttributes,\n className = '',\n slot,\n}: ListDetailDialogProps) {\n const close = closeGroup(closeLabel);\n const split = compact ? (\n <SplitView\n id={`${id}-split`}\n label={label}\n compact\n detailActive={detailActive}\n listTitle={list.title}\n detailTitle={detail.title}\n backLabel={backLabel}\n compactStack={{\n list: {\n toolbar: {\n trailing: (\n <>\n {list.toolbar}\n {close}\n </>\n ),\n },\n footer: list.footer,\n },\n detail: {\n toolbar: {\n trailing: (\n <>\n {detail.actions}\n {close}\n </>\n ),\n },\n footer: detail.footer,\n },\n }}\n list={list.content}\n detail={detail.content}\n />\n ) : (\n <SplitView\n id={`${id}-split`}\n label={label}\n listTitle={list.title}\n detailTitle={detail.title}\n listWidth={list.width ?? DEFAULT_LIST_WIDTH}\n list={\n <Pane\n label={list.title}\n header={\n <Toolbar\n label={list.title}\n leading={<ToolbarText text={list.title} />}\n trailing={list.toolbar}\n />\n }\n footer={list.footer}\n >\n {list.content}\n </Pane>\n }\n detail={\n <Pane\n label={detail.title}\n header={\n <Toolbar\n label={detail.title}\n leading={\n <ToolbarText\n text={detail.title}\n description={detail.description}\n size=\"xlarge\"\n id={`${id}-title`}\n headingLevel={2}\n />\n }\n trailing={\n <>\n {detail.actions}\n {close}\n </>\n }\n />\n }\n footer={detail.footer}\n >\n {detail.content}\n </Pane>\n }\n />\n );\n return (\n <DialogSurface\n id={id}\n label={label}\n describedBy={describedBy}\n withoutHeader\n lightDismiss={lightDismiss}\n closeLabel={closeLabel}\n size={size}\n presentation={compact ? 'fullscreen' : 'modal'}\n preferredWidth={preferredWidth}\n height={\n compact\n ? undefined\n : maxHeight === undefined\n ? (height ?? remify(560))\n : height\n }\n maxHeight={compact ? undefined : maxHeight}\n viewportGutter={compact ? undefined : viewportGutter}\n bodyInset=\"none\"\n bodyLayout=\"fill\"\n rootAttributes={{\n ...rootAttributes,\n 'data-dialog-layout': 'list-detail',\n }}\n className={className}\n slot={slot}\n >\n {split}\n </DialogSurface>\n );\n}\n"]}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import * as kerfjs from 'kerfjs';
|
|
2
2
|
import { K as KerfUiContent } from './semantic-content-BbzjvSu9.js';
|
|
3
|
-
import { PaneConfig, ScrollEdge
|
|
3
|
+
import { PaneConfig, ScrollEdge } from './pane.js';
|
|
4
4
|
import { ListConfig } from './list.js';
|
|
5
5
|
import { c as PanelBottomToolbar } from './panel-toolbar-vg6Ir5Dy.js';
|
|
6
6
|
import { CssColor } from './css-values.js';
|
|
7
|
+
import { S as SurfaceTint } from './surface-tint-DQgYCaP9.js';
|
|
7
8
|
import { ToolbarConfig } from './toolbar.js';
|
|
8
9
|
import { ToolbarTextSize, HeadingLevel } from './toolbar-text.js';
|
|
9
10
|
|
package/dist/nav-stack.d.ts
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
export { c as NavStack, d as NavStackBottomToolbarPresentation, e as NavStackChromePresentation, N as NavStackProps, f as NavStackToolbarConfig, a as NavStackView, g as NavStackViewBottomToolbar, h as NavStackViewToolbar } from './nav-stack-
|
|
1
|
+
export { c as NavStack, d as NavStackBottomToolbarPresentation, e as NavStackChromePresentation, N as NavStackProps, f as NavStackToolbarConfig, a as NavStackView, g as NavStackViewBottomToolbar, h as NavStackViewToolbar } from './nav-stack-CrZF95VO.js';
|
|
2
2
|
import 'kerfjs';
|
|
3
3
|
import './semantic-content-BbzjvSu9.js';
|
|
4
4
|
import './pane.js';
|
|
5
5
|
import './scroll-clearance-BikHljTc.js';
|
|
6
6
|
import './css-values.js';
|
|
7
|
+
import './surface-tint-DQgYCaP9.js';
|
|
7
8
|
import './list.js';
|
|
8
9
|
import './extension-attributes-mu8MFUl0.js';
|
|
9
10
|
import './flex-alignment-4ms8ZbV8.js';
|
package/dist/nav-stack.js
CHANGED
package/dist/pane.d.ts
CHANGED
|
@@ -2,6 +2,8 @@ import * as kerfjs from 'kerfjs';
|
|
|
2
2
|
import { K as KerfUiContent } from './semantic-content-BbzjvSu9.js';
|
|
3
3
|
import { S as ScrollClearance } from './scroll-clearance-BikHljTc.js';
|
|
4
4
|
import { CssColor } from './css-values.js';
|
|
5
|
+
import { S as SurfaceTint } from './surface-tint-DQgYCaP9.js';
|
|
6
|
+
export { a as SurfaceTintScheme } from './surface-tint-DQgYCaP9.js';
|
|
5
7
|
|
|
6
8
|
/**
|
|
7
9
|
* What clear (fully transparent) chrome fades in as content scrolls beneath
|
|
@@ -12,28 +14,6 @@ import { CssColor } from './css-values.js';
|
|
|
12
14
|
*/
|
|
13
15
|
type ScrollEdge = 'none' | 'material' | 'surface';
|
|
14
16
|
|
|
15
|
-
/** The color scheme an app declares for a {@link SurfaceTint}'s color. */
|
|
16
|
-
type SurfaceTintScheme = 'light' | 'dark';
|
|
17
|
-
/**
|
|
18
|
-
* A scoped tint for a layout surface: the app's color (usually sampled from
|
|
19
|
-
* artwork it already knows) and the scheme that color belongs to. Kerf does no
|
|
20
|
-
* color detection; `scheme` says whether the color reads as a light or a dark
|
|
21
|
-
* surface. Inside the scope the surface, raised surface, text, quiet text, and
|
|
22
|
-
* everything built on them (quiet fills, separators' backdrop, the chrome
|
|
23
|
-
* material) re-derive from the color, with lightness clamped so text keeps
|
|
24
|
-
* WCAG AA over any color.
|
|
25
|
-
*/
|
|
26
|
-
interface SurfaceTint {
|
|
27
|
-
color: CssColor;
|
|
28
|
-
scheme: SurfaceTintScheme;
|
|
29
|
-
/**
|
|
30
|
-
* An optional accent (usually the artwork's most vivid color). The scope's
|
|
31
|
-
* brand ramp re-derives from it: loud fills and their text, brand text and
|
|
32
|
-
* links, text on brand fills, and the focus ring, each clamped to keep AA.
|
|
33
|
-
*/
|
|
34
|
-
accent?: CssColor;
|
|
35
|
-
}
|
|
36
|
-
|
|
37
17
|
/**
|
|
38
18
|
* Logical pane sides: where a {@link Pane} can show a separator and where it can
|
|
39
19
|
* compensate for a device safe-area inset.
|
|
@@ -255,4 +235,4 @@ type PaneConfig = Pick<PaneProps, 'contentElement' | 'contentLabel' | 'separator
|
|
|
255
235
|
*/
|
|
256
236
|
declare function Pane({ header, children, footer, chromePlacement, chromeDividers, compactChrome, compactChromeOpen, headerPresentation, scrollEdge, scrollEdgeDistance, appearance, background, tint, deepInset, scrollClearance, tabIndex, outlined, element, contentElement, separators, safeAreaEdges, id, label, contentLabel, className, headerClassName, contentClassName, footerClassName, rootAttributes, slot, }: PaneProps): kerfjs.SafeHtml;
|
|
257
237
|
|
|
258
|
-
export { Pane, type PaneAppearance, type PaneChromeDividers, type PaneChromePlacement, type PaneCompactChrome, type PaneCompactChromePolicy, type PaneConfig, type PaneContentElement, type PaneElement, type PaneHeaderPresentation, type PaneProps, type PaneSeparatorSide, ScrollClearance, type ScrollEdge,
|
|
238
|
+
export { Pane, type PaneAppearance, type PaneChromeDividers, type PaneChromePlacement, type PaneCompactChrome, type PaneCompactChromePolicy, type PaneConfig, type PaneContentElement, type PaneElement, type PaneHeaderPresentation, type PaneProps, type PaneSeparatorSide, ScrollClearance, type ScrollEdge, SurfaceTint };
|
package/dist/pane.js
CHANGED
package/dist/split-view.d.ts
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import * as kerfjs from 'kerfjs';
|
|
2
2
|
import { K as KerfUiContent } from './semantic-content-BbzjvSu9.js';
|
|
3
|
-
import { N as NavStackProps, a as NavStackView } from './nav-stack-
|
|
3
|
+
import { N as NavStackProps, a as NavStackView } from './nav-stack-CrZF95VO.js';
|
|
4
4
|
import { ResizableRegionProps } from './resizable-region.js';
|
|
5
5
|
import './pane.js';
|
|
6
6
|
import './scroll-clearance-BikHljTc.js';
|
|
7
7
|
import './css-values.js';
|
|
8
|
+
import './surface-tint-DQgYCaP9.js';
|
|
8
9
|
import './list.js';
|
|
9
10
|
import './extension-attributes-mu8MFUl0.js';
|
|
10
11
|
import './flex-alignment-4ms8ZbV8.js';
|
package/dist/split-view.js
CHANGED
|
@@ -27,6 +27,11 @@
|
|
|
27
27
|
isolation: isolate;
|
|
28
28
|
}
|
|
29
29
|
|
|
30
|
+
.kui-backdrop-image[data-inline-bleed="false"] {
|
|
31
|
+
--_kui-backdrop-image-inset-start: 0px;
|
|
32
|
+
--_kui-backdrop-image-inset-end: 0px;
|
|
33
|
+
}
|
|
34
|
+
|
|
30
35
|
/* `underChrome`: the block runs up beneath the scroller's block-start inset
|
|
31
36
|
(overlay or clear chrome clearance plus the top safe area, as the Pane
|
|
32
37
|
publishes it) and the hero grows by the same amount, so the visible image
|
|
@@ -60,6 +65,11 @@
|
|
|
60
65
|
view-timeline: --kui-backdrop-image block;
|
|
61
66
|
}
|
|
62
67
|
|
|
68
|
+
.kui-backdrop-image[data-aspect-ratio="true"] .kui-backdrop-image__hero {
|
|
69
|
+
min-height: 0;
|
|
70
|
+
aspect-ratio: var(--_kui-backdrop-image-ratio);
|
|
71
|
+
}
|
|
72
|
+
|
|
63
73
|
.kui-backdrop-image__backdrop {
|
|
64
74
|
position: absolute;
|
|
65
75
|
inset: 0;
|
|
@@ -89,6 +99,10 @@
|
|
|
89
99
|
background-position: var(--_kui-backdrop-image-position);
|
|
90
100
|
}
|
|
91
101
|
|
|
102
|
+
.kui-backdrop-image__blurred[data-image-error="true"] {
|
|
103
|
+
display: none;
|
|
104
|
+
}
|
|
105
|
+
|
|
92
106
|
/* Progressive blur: a copy over the sharp image, blurred once and hidden
|
|
93
107
|
until the scroll timeline fades it in. A filtered copy overhangs the block
|
|
94
108
|
by its radius on every side, so the blur's transparent fringe falls outside
|
|
@@ -208,7 +222,10 @@
|
|
|
208
222
|
animation: none;
|
|
209
223
|
}
|
|
210
224
|
|
|
211
|
-
@media (update: slow)
|
|
225
|
+
@media (update: slow),
|
|
226
|
+
(prefers-reduced-transparency: reduce),
|
|
227
|
+
(prefers-contrast: more),
|
|
228
|
+
(forced-colors: active) {
|
|
212
229
|
.kui-backdrop-image[data-parallax="scroll"] .kui-backdrop-image__layers,
|
|
213
230
|
.kui-backdrop-image[data-blur]
|
|
214
231
|
:is(.kui-backdrop-image__blurred, .kui-backdrop-image__dim) {
|
|
@@ -27,6 +27,11 @@
|
|
|
27
27
|
isolation: isolate;
|
|
28
28
|
}
|
|
29
29
|
|
|
30
|
+
.kui-backdrop-image[data-inline-bleed="false"] {
|
|
31
|
+
--_kui-backdrop-image-inset-start: 0px;
|
|
32
|
+
--_kui-backdrop-image-inset-end: 0px;
|
|
33
|
+
}
|
|
34
|
+
|
|
30
35
|
/* `underChrome`: the block runs up beneath the scroller's block-start inset
|
|
31
36
|
(overlay or clear chrome clearance plus the top safe area, as the Pane
|
|
32
37
|
publishes it) and the hero grows by the same amount, so the visible image
|
|
@@ -60,6 +65,11 @@
|
|
|
60
65
|
view-timeline: --kui-backdrop-image block;
|
|
61
66
|
}
|
|
62
67
|
|
|
68
|
+
.kui-backdrop-image[data-aspect-ratio="true"] .kui-backdrop-image__hero {
|
|
69
|
+
min-height: 0;
|
|
70
|
+
aspect-ratio: var(--_kui-backdrop-image-ratio);
|
|
71
|
+
}
|
|
72
|
+
|
|
63
73
|
.kui-backdrop-image__backdrop {
|
|
64
74
|
position: absolute;
|
|
65
75
|
inset: 0;
|
|
@@ -89,6 +99,10 @@
|
|
|
89
99
|
background-position: var(--_kui-backdrop-image-position);
|
|
90
100
|
}
|
|
91
101
|
|
|
102
|
+
.kui-backdrop-image__blurred[data-image-error="true"] {
|
|
103
|
+
display: none;
|
|
104
|
+
}
|
|
105
|
+
|
|
92
106
|
/* Progressive blur: a copy over the sharp image, blurred once and hidden
|
|
93
107
|
until the scroll timeline fades it in. A filtered copy overhangs the block
|
|
94
108
|
by its radius on every side, so the blur's transparent fringe falls outside
|
|
@@ -208,7 +222,10 @@
|
|
|
208
222
|
animation: none;
|
|
209
223
|
}
|
|
210
224
|
|
|
211
|
-
@media (update: slow)
|
|
225
|
+
@media (update: slow),
|
|
226
|
+
(prefers-reduced-transparency: reduce),
|
|
227
|
+
(prefers-contrast: more),
|
|
228
|
+
(forced-colors: active) {
|
|
212
229
|
.kui-backdrop-image[data-parallax="scroll"] .kui-backdrop-image__layers,
|
|
213
230
|
.kui-backdrop-image[data-blur]
|
|
214
231
|
:is(.kui-backdrop-image__blurred, .kui-backdrop-image__dim) {
|
|
@@ -17,6 +17,54 @@
|
|
|
17
17
|
background: var(--kui-content-item-background, transparent);
|
|
18
18
|
}
|
|
19
19
|
|
|
20
|
+
/* BackdropImage supplies the image, overlay, fade, and per-card view timeline.
|
|
21
|
+
ContentItem owns only how that media block meets the card's geometry. */
|
|
22
|
+
.kui-content-item__media {
|
|
23
|
+
overflow: clip;
|
|
24
|
+
border-radius: max(0px, calc(var(--kui-content-item-radius, 12px) - 9px));
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
.kui-content-item[data-media-edge="true"] .kui-content-item__media {
|
|
28
|
+
margin-inline: calc(-1 * var(--kui-layout-item-padding, 0.5rem));
|
|
29
|
+
margin-block-start: calc(-1 * var(--kui-layout-item-padding, 0.5rem));
|
|
30
|
+
border-start-start-radius: max(
|
|
31
|
+
0px,
|
|
32
|
+
calc(var(--kui-content-item-radius, 12px) - 1px)
|
|
33
|
+
);
|
|
34
|
+
border-start-end-radius: max(
|
|
35
|
+
0px,
|
|
36
|
+
calc(var(--kui-content-item-radius, 12px) - 1px)
|
|
37
|
+
);
|
|
38
|
+
border-end-start-radius: 0;
|
|
39
|
+
border-end-end-radius: 0;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
.kui-content-item__body {
|
|
43
|
+
min-width: 0;
|
|
44
|
+
margin-block-start: var(--kui-space-xs);
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
.kui-content-item[data-media-state][data-kui-tint][data-appearance="transparent"] {
|
|
48
|
+
--kui-content-item-background: var(--kui-color-surface);
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
.kui-content-item[data-media-state="error"] .kui-content-item__media {
|
|
52
|
+
display: none;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
.kui-content-item[data-media-state="error"] .kui-content-item__body {
|
|
56
|
+
margin-block-start: 0;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
@media (forced-colors: active) {
|
|
60
|
+
.kui-content-item .kui-content-item__media {
|
|
61
|
+
display: none;
|
|
62
|
+
}
|
|
63
|
+
.kui-content-item__body {
|
|
64
|
+
margin-block-start: 0;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
|
|
20
68
|
.kui-content-item--pill {
|
|
21
69
|
--kui-content-item-radius: var(
|
|
22
70
|
--kui-layout-pill-radius,
|
|
@@ -95,6 +143,10 @@
|
|
|
95
143
|
--kui-content-item-foreground: var(--kui-color-danger-on-fill);
|
|
96
144
|
}
|
|
97
145
|
|
|
146
|
+
.kui-content-item[data-media-fade="true"]:not([data-media-state="error"]) {
|
|
147
|
+
--kui-content-item-background: var(--_kui-content-item-media-fade-to);
|
|
148
|
+
}
|
|
149
|
+
|
|
98
150
|
.kui-content-item[data-interactive="true"] {
|
|
99
151
|
color: var(--kui-content-item-foreground, var(--kui-color-neutral-on-normal));
|
|
100
152
|
cursor: pointer;
|
|
@@ -173,15 +173,23 @@ h2.kui-dialog-surface__title {
|
|
|
173
173
|
background: transparent;
|
|
174
174
|
cursor: pointer;
|
|
175
175
|
}
|
|
176
|
+
.kui-dialog-surface__close[data-emphasis="quiet"] {
|
|
177
|
+
color: var(--kui-color-text-quiet);
|
|
178
|
+
}
|
|
176
179
|
.kui-dialog-surface__close:hover {
|
|
177
180
|
background-color: var(--kui-color-neutral-fill-normal);
|
|
178
181
|
}
|
|
182
|
+
.kui-dialog-surface__close[data-emphasis="quiet"]:is(:hover, :focus-visible) {
|
|
183
|
+
color: var(--kui-color-neutral-on-quiet);
|
|
184
|
+
}
|
|
179
185
|
.kui-dialog-surface__close:focus-visible {
|
|
180
186
|
outline: var(--kui-focus-ring);
|
|
181
187
|
outline-offset: var(--kui-focus-ring-offset, 1px);
|
|
182
188
|
}
|
|
183
189
|
@media (forced-colors: active) {
|
|
184
|
-
.kui-dialog-surface__close
|
|
190
|
+
.kui-dialog-surface__close,
|
|
191
|
+
.kui-dialog-surface__close[data-emphasis="quiet"]:is(:hover, :focus-visible),
|
|
192
|
+
.kui-dialog-surface__close[data-emphasis="quiet"] {
|
|
185
193
|
color: ButtonText;
|
|
186
194
|
}
|
|
187
195
|
}
|
|
@@ -1,168 +1,3 @@
|
|
|
1
|
-
/*
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
.kui-content-item {
|
|
6
|
-
min-width: 0;
|
|
7
|
-
margin-inline: var(--kui-layout-inline-margin, 0.5rem);
|
|
8
|
-
padding: var(--kui-layout-item-padding, 0.5rem);
|
|
9
|
-
box-sizing: border-box;
|
|
10
|
-
border: var(--kui-layout-item-border-width, 1px) solid
|
|
11
|
-
var(--kui-content-item-border, transparent);
|
|
12
|
-
border-radius: var(
|
|
13
|
-
--kui-content-item-radius,
|
|
14
|
-
var(--kui-layout-rounded-radius, calc(1px + 0.6875rem))
|
|
15
|
-
);
|
|
16
|
-
color: var(--kui-content-item-foreground, inherit);
|
|
17
|
-
background: var(--kui-content-item-background, transparent);
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
.kui-content-item--pill {
|
|
21
|
-
--kui-content-item-radius: var(
|
|
22
|
-
--kui-layout-pill-radius,
|
|
23
|
-
calc(1px + 1.3125rem)
|
|
24
|
-
);
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
.kui-content-item--flush {
|
|
28
|
-
padding-block: 0;
|
|
29
|
-
border-block-width: 0;
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
/* A visible frame for a content item that marks a real distinction: the
|
|
33
|
-
standard neutral border, same geometry (the border is always reserved). */
|
|
34
|
-
.kui-content-item--framed {
|
|
35
|
-
--kui-content-item-border: var(--kui-color-neutral-border-normal);
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
.kui-content-item[data-appearance="surface"] {
|
|
39
|
-
--kui-content-item-border: var(--kui-color-neutral-border-normal);
|
|
40
|
-
--kui-content-item-background: var(--kui-color-surface);
|
|
41
|
-
--kui-content-item-foreground: var(--kui-color-neutral-on-normal);
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
.kui-content-item[data-appearance="neutral"] {
|
|
45
|
-
--kui-content-item-border: var(--kui-color-neutral-border-normal);
|
|
46
|
-
--kui-content-item-background: var(--kui-color-neutral-fill-quiet);
|
|
47
|
-
--kui-content-item-foreground: var(--kui-color-neutral-on-normal);
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
.kui-content-item[data-appearance="info"] {
|
|
51
|
-
--kui-content-item-border: var(--kui-color-brand-border-quiet);
|
|
52
|
-
--kui-content-item-background: var(--kui-color-brand-fill-quiet);
|
|
53
|
-
--kui-content-item-foreground: var(--kui-color-brand-on-fill);
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
.kui-content-item[data-appearance="pop"] {
|
|
57
|
-
--kui-content-item-border: var(--kui-color-pop-border-normal);
|
|
58
|
-
--kui-content-item-background: var(--kui-color-pop-fill-quiet);
|
|
59
|
-
--kui-content-item-foreground: var(--kui-color-pop-on-fill);
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
.kui-content-item[data-appearance="success"] {
|
|
63
|
-
--kui-content-item-border: var(--kui-color-success-border-normal);
|
|
64
|
-
--kui-content-item-background: var(--kui-color-success-fill-quiet);
|
|
65
|
-
--kui-content-item-foreground: var(--kui-color-success-on-fill);
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
.kui-content-item[data-appearance="warning"] {
|
|
69
|
-
--kui-content-item-border: var(--kui-color-warning-border-normal);
|
|
70
|
-
--kui-content-item-background: var(--kui-color-warning-fill-quiet);
|
|
71
|
-
--kui-content-item-foreground: var(--kui-color-warning-on-fill);
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
.kui-content-item[data-appearance="brand-loud"] {
|
|
75
|
-
--kui-content-item-border: var(--kui-color-brand-border-loud);
|
|
76
|
-
--kui-content-item-background: var(--kui-color-brand-fill-loud);
|
|
77
|
-
--kui-content-item-foreground: var(--kui-color-brand-on-loud);
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
/* Chat bubble: the item shrinks to its content up to 80% of the row and sits
|
|
81
|
-
at the start or end of the line; long unbroken text wraps inside it. */
|
|
82
|
-
.kui-content-item[data-bubble] {
|
|
83
|
-
width: fit-content;
|
|
84
|
-
max-width: 80%;
|
|
85
|
-
overflow-wrap: anywhere;
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
.kui-content-item[data-bubble="end"] {
|
|
89
|
-
margin-inline-start: auto;
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
.kui-content-item[data-appearance="danger"] {
|
|
93
|
-
--kui-content-item-border: var(--kui-color-danger-border-quiet);
|
|
94
|
-
--kui-content-item-background: var(--kui-color-danger-fill-quiet);
|
|
95
|
-
--kui-content-item-foreground: var(--kui-color-danger-on-fill);
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
.kui-content-item[data-interactive="true"] {
|
|
99
|
-
color: var(--kui-content-item-foreground, var(--kui-color-neutral-on-normal));
|
|
100
|
-
cursor: pointer;
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
.kui-content-item[data-interactive="true"]:hover:not(
|
|
104
|
-
[data-disabled="true"],
|
|
105
|
-
[data-selected="true"]
|
|
106
|
-
),
|
|
107
|
-
.kui-content-item[data-interactive="true"][data-kui-pressed="true"]:not(
|
|
108
|
-
[data-selected="true"]
|
|
109
|
-
) {
|
|
110
|
-
--kui-content-item-border: var(--kui-color-neutral-border-normal);
|
|
111
|
-
--kui-content-item-background: var(--kui-color-neutral-fill-normal);
|
|
112
|
-
--kui-content-item-foreground: var(--kui-color-neutral-on-normal);
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
.kui-content-item[data-interactive="true"]:active:not([data-disabled="true"]) {
|
|
116
|
-
--kui-content-item-background: color-mix(
|
|
117
|
-
in srgb,
|
|
118
|
-
var(--kui-color-neutral-fill-normal) 75%,
|
|
119
|
-
var(--kui-color-neutral-fill-loud)
|
|
120
|
-
);
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
.kui-content-item[data-interactive="true"][data-selected="true"] {
|
|
124
|
-
--kui-content-item-border: var(--kui-color-brand-border-quiet);
|
|
125
|
-
--kui-content-item-background: var(--kui-color-brand-fill-normal);
|
|
126
|
-
--kui-content-item-foreground: var(--kui-color-brand-on-fill);
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
/* The surface context follows the fill an item paints: a quiet appearance,
|
|
130
|
-
a hover, press, or selection. A transparent item keeps its parent's
|
|
131
|
-
context; a brand-loud fill shares the focus ring's hue, so a control on it
|
|
132
|
-
keeps the surface line. A surface appearance is opaque, so it resets. */
|
|
133
|
-
.kui-content-item:is(
|
|
134
|
-
[data-appearance]:not(
|
|
135
|
-
[data-appearance="transparent"],
|
|
136
|
-
[data-appearance="brand-loud"]
|
|
137
|
-
),
|
|
138
|
-
[data-interactive="true"]:hover:not([data-disabled="true"]),
|
|
139
|
-
[data-interactive="true"]:is(
|
|
140
|
-
[data-kui-pressed="true"],
|
|
141
|
-
[data-selected="true"]
|
|
142
|
-
)
|
|
143
|
-
) {
|
|
144
|
-
--kui-color-surface-current-tint: var(--kui-content-item-background);
|
|
145
|
-
}
|
|
146
|
-
|
|
147
|
-
.kui-content-item[data-appearance="surface"]:not(
|
|
148
|
-
[data-interactive="true"]:is(
|
|
149
|
-
:hover,
|
|
150
|
-
[data-kui-pressed="true"],
|
|
151
|
-
[data-selected="true"]
|
|
152
|
-
)
|
|
153
|
-
) {
|
|
154
|
-
--kui-color-surface-current: var(--kui-color-surface);
|
|
155
|
-
--kui-color-surface-current-region: transparent;
|
|
156
|
-
--kui-color-surface-current-tint: transparent;
|
|
157
|
-
}
|
|
158
|
-
|
|
159
|
-
.kui-content-item:is(:focus-visible, [data-outlined="true"]) {
|
|
160
|
-
outline: var(--kui-focus-ring);
|
|
161
|
-
outline-offset: 1px;
|
|
162
|
-
}
|
|
163
|
-
|
|
164
|
-
.kui-content-item[data-interactive="true"][data-disabled="true"] {
|
|
165
|
-
color: var(--kui-color-neutral-on-quiet);
|
|
166
|
-
opacity: 0.58;
|
|
167
|
-
cursor: not-allowed;
|
|
168
|
-
}
|
|
1
|
+
/* Public stylesheet entry; implementation is colocated with the component. */
|
|
2
|
+
@import "./backdrop-image.css";
|
|
3
|
+
@import "./components/surfaces/content-item/content-item.css";
|
|
@@ -223,7 +223,7 @@
|
|
|
223
223
|
--kui-color-text: var(--wa-color-text-normal, light-dark(#1d1d1f, #f5f5f7));
|
|
224
224
|
--kui-color-text-quiet: var(
|
|
225
225
|
--wa-color-text-quiet,
|
|
226
|
-
light-dark(#
|
|
226
|
+
light-dark(#646469, #aeaeb2)
|
|
227
227
|
);
|
|
228
228
|
--kui-color-text-link: var(
|
|
229
229
|
--wa-color-text-link,
|
|
@@ -525,7 +525,7 @@
|
|
|
525
525
|
);
|
|
526
526
|
--kui-color-danger-on-quiet: var(
|
|
527
527
|
--wa-color-danger-on-quiet,
|
|
528
|
-
light-dark(#c20b20, #
|
|
528
|
+
light-dark(#c20b20, #ff8588)
|
|
529
529
|
);
|
|
530
530
|
--kui-color-danger-on-normal: var(
|
|
531
531
|
--wa-color-danger-on-normal,
|
|
@@ -538,8 +538,8 @@
|
|
|
538
538
|
/* Danger text placed ON a danger fill (e.g. the danger StateBanner) and the
|
|
539
539
|
danger Badge's solid fill. The light value matches danger-on-quiet, which
|
|
540
540
|
already clears WCAG AA (5.7:1) over danger-fill-quiet. The dark value is
|
|
541
|
-
lighter than danger-on-quiet (#
|
|
542
|
-
dark fill-quiet (4.0:1 as dimmed banner detail) and left the solid badge's
|
|
541
|
+
lighter than danger-on-quiet (#ff8588); the former #ff696c reached only
|
|
542
|
+
5.7:1 over the dark fill-quiet (4.0:1 as dimmed banner detail) and left the solid badge's
|
|
543
543
|
dark text and placeholder skeleton the weakest of any tone on a mid-red
|
|
544
544
|
fill; #ffa0a2 matches the other tones' pale dark on-fill values. */
|
|
545
545
|
--kui-color-danger-on-fill: light-dark(#c20b20, #ffa0a2);
|
|
@@ -173,15 +173,23 @@ h2.kui-dialog-surface__title {
|
|
|
173
173
|
background: transparent;
|
|
174
174
|
cursor: pointer;
|
|
175
175
|
}
|
|
176
|
+
.kui-dialog-surface__close[data-emphasis="quiet"] {
|
|
177
|
+
color: var(--kui-color-text-quiet);
|
|
178
|
+
}
|
|
176
179
|
.kui-dialog-surface__close:hover {
|
|
177
180
|
background-color: var(--kui-color-neutral-fill-normal);
|
|
178
181
|
}
|
|
182
|
+
.kui-dialog-surface__close[data-emphasis="quiet"]:is(:hover, :focus-visible) {
|
|
183
|
+
color: var(--kui-color-neutral-on-quiet);
|
|
184
|
+
}
|
|
179
185
|
.kui-dialog-surface__close:focus-visible {
|
|
180
186
|
outline: var(--kui-focus-ring);
|
|
181
187
|
outline-offset: var(--kui-focus-ring-offset, 1px);
|
|
182
188
|
}
|
|
183
189
|
@media (forced-colors: active) {
|
|
184
|
-
.kui-dialog-surface__close
|
|
190
|
+
.kui-dialog-surface__close,
|
|
191
|
+
.kui-dialog-surface__close[data-emphasis="quiet"]:is(:hover, :focus-visible),
|
|
192
|
+
.kui-dialog-surface__close[data-emphasis="quiet"] {
|
|
185
193
|
color: ButtonText;
|
|
186
194
|
}
|
|
187
195
|
}
|