@plumile/ui-devtools 0.2.3 → 0.2.5
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 +10 -0
- package/lib/esm/content/devtoolsCodeBlock.css.js.map +1 -1
- package/lib/esm/controls/DevtoolsSelect.js +11 -7
- package/lib/esm/controls/DevtoolsSelect.js.map +1 -1
- package/lib/esm/controls/devtoolsControls.css.js.map +1 -1
- package/lib/esm/devtoolsComponents.stories.css.js +7 -0
- package/lib/esm/devtoolsComponents.stories.css.js.map +1 -0
- package/lib/esm/empty_state/devtoolsEmptyState.css.js.map +1 -1
- package/lib/esm/feedback/devtoolsFeedback.css.js.map +1 -1
- package/lib/esm/layout/DevtoolsSplitView.js +36 -35
- package/lib/esm/layout/DevtoolsSplitView.js.map +1 -1
- package/lib/esm/layout/devtoolsSplitView.css.js.map +1 -1
- package/lib/esm/navigation/DevtoolsTabs.js +32 -11
- package/lib/esm/navigation/DevtoolsTabs.js.map +1 -1
- package/lib/esm/navigation/devtoolsTabs.css.js.map +1 -1
- package/lib/esm/style.css +1 -1
- package/lib/esm/surfaces/devtoolsSurfaces.css.js.map +1 -1
- package/lib/esm/theme/DevtoolsTheme.js +2 -1
- package/lib/esm/theme/DevtoolsTheme.js.map +1 -1
- package/lib/esm/theme/devtoolsTheme.css.js.map +1 -1
- package/lib/esm/toolbar/DevtoolsToolbarButton.js +14 -12
- package/lib/esm/toolbar/DevtoolsToolbarButton.js.map +1 -1
- package/lib/esm/toolbar/devtoolsToolbar.css.js +2 -2
- package/lib/esm/toolbar/devtoolsToolbar.css.js.map +1 -1
- package/lib/types/controls/DevtoolsSelect.d.ts +1 -1
- package/lib/types/controls/DevtoolsSelect.d.ts.map +1 -1
- package/lib/types/empty_state/devtoolsEmptyState.css.d.ts.map +1 -1
- package/lib/types/feedback/devtoolsFeedback.css.d.ts.map +1 -1
- package/lib/types/index.d.ts +2 -2
- package/lib/types/index.d.ts.map +1 -1
- package/lib/types/layout/DevtoolsSplitView.d.ts +2 -0
- package/lib/types/layout/DevtoolsSplitView.d.ts.map +1 -1
- package/lib/types/navigation/DevtoolsTabs.d.ts.map +1 -1
- package/lib/types/navigation/devtoolsTabs.css.d.ts.map +1 -1
- package/lib/types/surfaces/devtoolsSurfaces.css.d.ts.map +1 -1
- package/lib/types/theme/DevtoolsTheme.d.ts +4 -1
- package/lib/types/theme/DevtoolsTheme.d.ts.map +1 -1
- package/lib/types/theme/devtoolsTheme.css.d.ts.map +1 -1
- package/lib/types/toolbar/DevtoolsToolbarButton.d.ts +11 -3
- package/lib/types/toolbar/DevtoolsToolbarButton.d.ts.map +1 -1
- package/lib/types/toolbar/devtoolsToolbar.css.d.ts +0 -1
- package/lib/types/toolbar/devtoolsToolbar.css.d.ts.map +1 -1
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -69,6 +69,15 @@ optional per-category overflow limits and block or inline layout variants.
|
|
|
69
69
|
separator accessibility behavior is aligned with `@plumile/ui`
|
|
70
70
|
`ResizableSplitView`, but it keeps the compact `--pdt-*` styling and no runtime
|
|
71
71
|
dependency on `@plumile/ui`.
|
|
72
|
+
`DevtoolsTheme` accepts `colorScheme="light"` or `colorScheme="dark"` when a
|
|
73
|
+
host such as Chrome DevTools exposes its effective theme. When omitted, it
|
|
74
|
+
falls back to the operating-system preference for Storybook and standalone
|
|
75
|
+
previews.
|
|
76
|
+
`DevtoolsToolbarButton` supports a compact icon-only presentation with
|
|
77
|
+
`presentation="icon"`; this form requires both an icon and a tooltip `title`,
|
|
78
|
+
while `label` remains its accessible name. `DevtoolsSplitView` defaults to
|
|
79
|
+
stacking its panes at 688 px and below and accepts `narrowMode="detail"` to show only
|
|
80
|
+
the detail pane when a consumer provides its own return navigation.
|
|
72
81
|
Use `DevtoolsJsonBlock` for visual JSON payloads; it renders nullish values as
|
|
73
82
|
an empty fallback, pretty-prints serializable values through `DevtoolsCodeBlock`,
|
|
74
83
|
and exposes a fallback for circular or otherwise unserializable input.
|
|
@@ -78,6 +87,7 @@ For the complete entry point, see [`src/index.ts`](./src/index.ts).
|
|
|
78
87
|
## Quick Start
|
|
79
88
|
|
|
80
89
|
```tsx
|
|
90
|
+
import '@plumile/ui-devtools/style.css';
|
|
81
91
|
import {
|
|
82
92
|
DevtoolsCard,
|
|
83
93
|
DevtoolsSection,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"devtoolsCodeBlock.css.js","names":[],"sources":["../../../src/content/devtoolsCodeBlock.css.ts"],"sourcesContent":["import { style } from '@vanilla-extract/css';\n\nexport const codeBlock = style({\n margin: 0,\n padding: '
|
|
1
|
+
{"version":3,"file":"devtoolsCodeBlock.css.js","names":[],"sources":["../../../src/content/devtoolsCodeBlock.css.ts"],"sourcesContent":["import { style } from '@vanilla-extract/css';\n\nexport const codeBlock = style({\n margin: 0,\n padding: '8px',\n borderRadius: '4px',\n backgroundColor: 'var(--pdt-code-bg)',\n fontSize: '12px',\n lineHeight: '16px',\n overflowX: 'auto',\n whiteSpace: 'pre-wrap',\n wordBreak: 'break-word',\n});\n"],"mappings":""}
|
|
@@ -1,18 +1,22 @@
|
|
|
1
1
|
import { select as e, selectField as t, selectLabel as n } from "./devtoolsControls.css.js";
|
|
2
2
|
import { jsx as r, jsxs as i } from "react/jsx-runtime";
|
|
3
|
+
import { useId as a } from "react";
|
|
3
4
|
//#region src/controls/DevtoolsSelect.tsx
|
|
4
|
-
function
|
|
5
|
-
let { label:
|
|
5
|
+
function o(o) {
|
|
6
|
+
let { label: s, onChange: c, options: l, value: u } = o, d = a();
|
|
6
7
|
return /* @__PURE__ */ i("label", {
|
|
7
8
|
className: t,
|
|
9
|
+
htmlFor: d,
|
|
8
10
|
children: [/* @__PURE__ */ r("span", {
|
|
9
11
|
className: n,
|
|
10
|
-
children:
|
|
12
|
+
children: s
|
|
11
13
|
}), /* @__PURE__ */ r("select", {
|
|
12
14
|
className: e,
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
15
|
+
id: d,
|
|
16
|
+
name: d,
|
|
17
|
+
value: u,
|
|
18
|
+
onChange: c,
|
|
19
|
+
children: l.map((e) => /* @__PURE__ */ r("option", {
|
|
16
20
|
value: e.value,
|
|
17
21
|
children: e.label
|
|
18
22
|
}, e.value))
|
|
@@ -20,6 +24,6 @@ function a(a) {
|
|
|
20
24
|
});
|
|
21
25
|
}
|
|
22
26
|
//#endregion
|
|
23
|
-
export {
|
|
27
|
+
export { o as DevtoolsSelect };
|
|
24
28
|
|
|
25
29
|
//# sourceMappingURL=DevtoolsSelect.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DevtoolsSelect.js","names":[],"sources":["../../../src/controls/DevtoolsSelect.tsx"],"sourcesContent":["import type
|
|
1
|
+
{"version":3,"file":"DevtoolsSelect.js","names":[],"sources":["../../../src/controls/DevtoolsSelect.tsx"],"sourcesContent":["import {\n useId,\n type ChangeEventHandler,\n type JSX,\n type ReactNode,\n} from 'react';\nimport { select, selectField, selectLabel } from './devtoolsControls.css.js';\n\nexport type DevtoolsSelectOption = {\n value: string;\n label: ReactNode;\n};\n\nexport type DevtoolsSelectProps = {\n label: ReactNode;\n value: string;\n onChange: ChangeEventHandler<HTMLSelectElement>;\n options: readonly DevtoolsSelectOption[];\n};\n\n/** Render a compact labeled DevTools select control. */\nexport function DevtoolsSelect(props: DevtoolsSelectProps): JSX.Element {\n const { label, onChange, options, value } = props;\n const selectId = useId();\n\n return (\n <label className={selectField} htmlFor={selectId}>\n <span className={selectLabel}>{label}</span>\n <select\n className={select}\n id={selectId}\n name={selectId}\n value={value}\n onChange={onChange}\n >\n {options.map((option) => {\n return (\n <option key={option.value} value={option.value}>\n {option.label}\n </option>\n );\n })}\n </select>\n </label>\n );\n}\n"],"mappings":";;;;AAqBA,SAAgB,EAAe,GAAyC;CACtE,IAAM,EAAE,UAAO,aAAU,YAAS,aAAU,GACtC,IAAW,EAAM;CAEvB,OACE,kBAAC,SAAD;EAAO,WAAW;EAAa,SAAS;EAAxC,UAAA,CACE,kBAAC,QAAD;GAAM,WAAW;GAAc,UAAA;EAAY,CAAA,GAC3C,kBAAC,UAAD;GACE,WAAW;GACX,IAAI;GACJ,MAAM;GACC;GACG;GAET,UAAA,EAAQ,KAAK,MAEV,kBAAC,UAAD;IAA2B,OAAO,EAAO;IACtC,UAAA,EAAO;GACF,GAFK,EAAO,KAEZ,CAEX;EACK,CAAA,CACH;;AAEX"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"devtoolsControls.css.js","names":[],"sources":["../../../src/controls/devtoolsControls.css.ts"],"sourcesContent":["import { style } from '@vanilla-extract/css';\n\nexport const button = style({\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n gap: '6px',\n minHeight: '
|
|
1
|
+
{"version":3,"file":"devtoolsControls.css.js","names":[],"sources":["../../../src/controls/devtoolsControls.css.ts"],"sourcesContent":["import { globalStyle, style } from '@vanilla-extract/css';\n\nexport const button = style({\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n gap: '6px',\n minHeight: '26px',\n padding: '3px 8px',\n border: '1px solid var(--pdt-border)',\n borderRadius: '4px',\n backgroundColor: 'transparent',\n color: 'var(--pdt-text)',\n fontSize: '12px',\n lineHeight: 1.2,\n cursor: 'pointer',\n transition: 'background-color 100ms ease, border-color 100ms ease',\n selectors: {\n '&:hover:not(:disabled)': {\n backgroundColor: 'color-mix(in srgb, var(--pdt-accent) 8%, transparent)',\n },\n '&:focus-visible': {\n outline: 'none',\n boxShadow: 'var(--pdt-shadow-focus)',\n },\n '&:disabled': {\n opacity: 0.5,\n cursor: 'not-allowed',\n },\n },\n});\n\nexport const buttonDanger = style({\n color: 'var(--pdt-danger)',\n selectors: {\n '&:hover:not(:disabled)': {\n backgroundColor: 'color-mix(in srgb, var(--pdt-danger) 10%, transparent)',\n borderColor: 'color-mix(in srgb, var(--pdt-danger) 34%, transparent)',\n },\n },\n});\n\nexport const selectField = style({\n display: 'inline-flex',\n alignItems: 'center',\n gap: '6px',\n minWidth: 0,\n fontSize: '12px',\n color: 'var(--pdt-text-muted)',\n '@media': {\n 'screen and (max-width: 520px)': {\n flex: '1 1 100%',\n },\n },\n});\n\nexport const selectLabel = style({\n fontSize: '12px',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n});\n\nexport const select = style({\n flex: '1 1 auto',\n minWidth: 0,\n minHeight: '26px',\n padding: '3px 6px',\n border: '1px solid var(--pdt-border)',\n borderRadius: '4px',\n backgroundColor: 'var(--pdt-bg)',\n color: 'var(--pdt-text)',\n fontSize: '12px',\n selectors: {\n '&:focus-visible': {\n outline: 'none',\n boxShadow: 'var(--pdt-shadow-focus)',\n },\n },\n});\n\nglobalStyle(`${button}:focus-visible, ${select}:focus-visible`, {\n '@media': {\n '(forced-colors: active)': {\n outline: '2px solid Highlight',\n outlineOffset: '2px',\n boxShadow: 'none',\n },\n },\n});\n"],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"devtoolsComponents.stories.css.js","names":[],"sources":["../../src/devtoolsComponents.stories.css.ts"],"sourcesContent":["import { style } from '@vanilla-extract/css';\n\nexport const storyPage = style({\n display: 'flex',\n minHeight: '100vh',\n flexDirection: 'column',\n gap: '16px',\n padding: '16px',\n});\n\nexport const storyTitle = style({\n margin: 0,\n color: 'var(--pdt-text)',\n fontSize: '18px',\n fontWeight: 600,\n lineHeight: 1.3,\n});\n\nexport const storyBodyText = style({\n color: 'var(--pdt-text)',\n});\n"],"mappings":""}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"devtoolsEmptyState.css.js","names":[],"sources":["../../../src/empty_state/devtoolsEmptyState.css.ts"],"sourcesContent":["import { style } from '@vanilla-extract/css';\n\nexport const root = style({\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'flex-start',\n gap: '
|
|
1
|
+
{"version":3,"file":"devtoolsEmptyState.css.js","names":[],"sources":["../../../src/empty_state/devtoolsEmptyState.css.ts"],"sourcesContent":["import { style } from '@vanilla-extract/css';\n\nexport const root = style({\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'flex-start',\n gap: '8px',\n maxWidth: '420px',\n padding: '16px',\n});\n\nexport const title = style({\n margin: 0,\n fontSize: '13px',\n fontWeight: 600,\n color: 'var(--pdt-text)',\n});\n\nexport const description = style({\n margin: 0,\n fontSize: '12px',\n lineHeight: '16px',\n color: 'var(--pdt-text-muted)',\n});\n\nexport const actions = style({\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n flexWrap: 'wrap',\n});\n"],"mappings":""}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"devtoolsFeedback.css.js","names":[],"sources":["../../../src/feedback/devtoolsFeedback.css.ts"],"sourcesContent":["import { keyframes, style } from '@vanilla-extract/css';\n\nexport const badge = style({\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n gap: '4px',\n minHeight: '
|
|
1
|
+
{"version":3,"file":"devtoolsFeedback.css.js","names":[],"sources":["../../../src/feedback/devtoolsFeedback.css.ts"],"sourcesContent":["import { keyframes, style } from '@vanilla-extract/css';\n\nexport const badge = style({\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n gap: '4px',\n minHeight: '18px',\n padding: '1px 6px',\n borderRadius: '4px',\n border: '1px solid transparent',\n fontSize: '11px',\n lineHeight: 1.2,\n whiteSpace: 'nowrap',\n backgroundColor: 'var(--pdt-surface-muted)',\n color: 'var(--pdt-text-muted)',\n});\n\nexport const badgeNeutral = style({\n backgroundColor: 'var(--pdt-surface-muted)',\n borderColor: 'var(--pdt-border)',\n color: 'var(--pdt-text-muted)',\n});\n\nexport const badgeInfo = style({\n backgroundColor: 'color-mix(in srgb, var(--pdt-info) 12%, transparent)',\n borderColor: 'color-mix(in srgb, var(--pdt-info) 24%, transparent)',\n color: 'var(--pdt-info)',\n});\n\nexport const badgeSuccess = style({\n backgroundColor: 'color-mix(in srgb, var(--pdt-success) 12%, transparent)',\n borderColor: 'color-mix(in srgb, var(--pdt-success) 24%, transparent)',\n color: 'var(--pdt-success)',\n});\n\nexport const badgeWarning = style({\n backgroundColor: 'color-mix(in srgb, var(--pdt-warning) 12%, transparent)',\n borderColor: 'color-mix(in srgb, var(--pdt-warning) 24%, transparent)',\n color: 'var(--pdt-warning)',\n});\n\nexport const badgeDanger = style({\n backgroundColor: 'color-mix(in srgb, var(--pdt-danger) 12%, transparent)',\n borderColor: 'color-mix(in srgb, var(--pdt-danger) 24%, transparent)',\n color: 'var(--pdt-danger)',\n});\n\nexport const pill = style({\n display: 'inline-flex',\n alignItems: 'center',\n minHeight: '18px',\n padding: '1px 6px',\n borderRadius: '4px',\n border: '1px solid var(--pdt-border)',\n fontSize: '11px',\n lineHeight: 1.2,\n whiteSpace: 'nowrap',\n backgroundColor: 'transparent',\n color: 'var(--pdt-text)',\n});\n\nexport const pillNeutral = style({\n backgroundColor: 'var(--pdt-surface-muted)',\n borderColor: 'var(--pdt-border)',\n});\n\nexport const pillNavigation = style({\n backgroundColor: 'color-mix(in srgb, var(--pdt-accent) 10%, transparent)',\n borderColor: 'color-mix(in srgb, var(--pdt-accent) 24%, transparent)',\n});\n\nexport const pillUpdate = style({\n backgroundColor: 'color-mix(in srgb, var(--pdt-info) 10%, transparent)',\n borderColor: 'color-mix(in srgb, var(--pdt-info) 24%, transparent)',\n});\n\nexport const pillSnapshot = style({\n backgroundColor: 'var(--pdt-event-snapshot-bg)',\n borderColor: 'var(--pdt-event-snapshot-border)',\n});\n\nexport const pillPreload = style({\n backgroundColor: 'color-mix(in srgb, var(--pdt-success) 10%, transparent)',\n borderColor: 'color-mix(in srgb, var(--pdt-success) 24%, transparent)',\n});\n\nexport const pillHistory = style({\n backgroundColor: 'var(--pdt-event-history-bg)',\n borderColor: 'var(--pdt-event-history-border)',\n});\n\nexport const pillPopstate = style({\n backgroundColor: 'var(--pdt-event-popstate-bg)',\n borderColor: 'var(--pdt-event-popstate-border)',\n});\n\nexport const pillPrepare = style({\n backgroundColor: 'var(--pdt-event-prepare-bg)',\n borderColor: 'var(--pdt-event-prepare-border)',\n});\n\nexport const statusLight = style({\n display: 'inline-flex',\n alignItems: 'center',\n gap: '6px',\n minHeight: '18px',\n fontSize: '12px',\n color: 'var(--pdt-text-muted)',\n});\n\nexport const statusDot = style({\n width: '10px',\n height: '10px',\n borderRadius: '50%',\n backgroundColor: 'var(--pdt-border)',\n});\n\nexport const statusReady = style({\n backgroundColor: 'var(--pdt-success)',\n boxShadow:\n '0 0 0 2px color-mix(in srgb, var(--pdt-success) 30%, transparent)',\n});\n\nexport const statusIdle = style({\n backgroundColor: 'var(--pdt-border)',\n boxShadow: 'inset 0 0 0 1px var(--pdt-text-muted)',\n});\n\nconst diffFlash = keyframes({\n from: {\n boxShadow: 'var(--pdt-diff-flash-start)',\n },\n to: {\n boxShadow: 'var(--pdt-diff-flash-end)',\n },\n});\n\nexport const diffList = style({\n display: 'flex',\n flexWrap: 'wrap',\n gap: '4px',\n marginTop: '4px',\n fontSize: '11px',\n});\n\nexport const diffInline = style({\n display: 'flex',\n flexWrap: 'wrap',\n gap: '4px',\n marginTop: 0,\n fontSize: '11px',\n});\n\nexport const diffPill = style({\n padding: '1px 6px',\n border: '1px solid transparent',\n borderRadius: '4px',\n fontWeight: 600,\n});\n\nexport const diffPillAdded = style({\n backgroundColor: 'var(--pdt-diff-added-bg)',\n borderColor: 'var(--pdt-diff-added-border)',\n color: 'var(--pdt-diff-added-text)',\n});\n\nexport const diffPillChanged = style({\n backgroundColor: 'var(--pdt-diff-changed-bg)',\n borderColor: 'var(--pdt-diff-changed-border)',\n color: 'var(--pdt-diff-changed-text)',\n});\n\nexport const diffPillRemoved = style({\n backgroundColor: 'var(--pdt-diff-removed-bg)',\n borderColor: 'var(--pdt-diff-removed-border)',\n color: 'var(--pdt-diff-removed-text)',\n});\n\nexport const diffPillFlash = style({\n animation: `${diffFlash} 0.8s ease-in-out`,\n '@media': {\n '(prefers-reduced-motion: reduce)': {\n animation: 'none',\n },\n },\n});\n"],"mappings":""}
|
|
@@ -7,76 +7,77 @@ function f(e, t, n) {
|
|
|
7
7
|
return e < t ? t : e > n ? n : e;
|
|
8
8
|
}
|
|
9
9
|
function p(p) {
|
|
10
|
-
let { main: m, maxSidebarWidth: h, minSidebarWidth: g,
|
|
10
|
+
let { main: m, maxSidebarWidth: h, minSidebarWidth: g, narrowMode: _ = "stack", onSidebarWidthChange: v, sidebar: y, sidebarLabel: b, sidebarWidth: x } = p, S = c({
|
|
11
11
|
active: !1,
|
|
12
12
|
pointerId: null,
|
|
13
13
|
startX: 0,
|
|
14
|
-
width:
|
|
15
|
-
}),
|
|
16
|
-
let t =
|
|
14
|
+
width: x
|
|
15
|
+
}), C = o((e) => {
|
|
16
|
+
let t = S.current;
|
|
17
17
|
if (!t.active || t.pointerId != null && e.pointerId !== t.pointerId) return;
|
|
18
18
|
e.preventDefault();
|
|
19
19
|
let n = t.startX - e.clientX;
|
|
20
|
-
|
|
20
|
+
v(f(t.width + n, g, h));
|
|
21
21
|
}, [
|
|
22
22
|
h,
|
|
23
23
|
g,
|
|
24
|
-
|
|
25
|
-
]),
|
|
26
|
-
|
|
27
|
-
}, [
|
|
24
|
+
v
|
|
25
|
+
]), w = o(() => {
|
|
26
|
+
S.current.active && (S.current.active = !1, S.current.pointerId = null, window.removeEventListener("pointermove", C), window.removeEventListener("pointerup", w), window.removeEventListener("pointercancel", w));
|
|
27
|
+
}, [C]);
|
|
28
28
|
s(() => () => {
|
|
29
|
-
window.removeEventListener("pointermove",
|
|
30
|
-
}, [
|
|
31
|
-
let
|
|
32
|
-
|
|
29
|
+
window.removeEventListener("pointermove", C), window.removeEventListener("pointerup", w), window.removeEventListener("pointercancel", w);
|
|
30
|
+
}, [C, w]);
|
|
31
|
+
let T = o((e) => {
|
|
32
|
+
y != null && (e.preventDefault(), "setPointerCapture" in e.currentTarget && e.currentTarget.setPointerCapture(e.pointerId), S.current = {
|
|
33
33
|
active: !0,
|
|
34
34
|
pointerId: e.pointerId,
|
|
35
35
|
startX: e.clientX,
|
|
36
|
-
width:
|
|
37
|
-
}, window.addEventListener("pointermove",
|
|
36
|
+
width: x
|
|
37
|
+
}, window.addEventListener("pointermove", C), window.addEventListener("pointerup", w), window.addEventListener("pointercancel", w));
|
|
38
38
|
}, [
|
|
39
|
-
S,
|
|
40
39
|
C,
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
40
|
+
w,
|
|
41
|
+
y,
|
|
42
|
+
x
|
|
43
|
+
]), E = o((e) => {
|
|
44
|
+
if (y == null) return;
|
|
45
45
|
let t = l;
|
|
46
46
|
if (e.shiftKey && (t = u), e.key === "ArrowLeft") {
|
|
47
|
-
e.preventDefault(),
|
|
47
|
+
e.preventDefault(), v(f(x + t, g, h));
|
|
48
48
|
return;
|
|
49
49
|
}
|
|
50
|
-
e.key === "ArrowRight" && (e.preventDefault(),
|
|
50
|
+
e.key === "ArrowRight" && (e.preventDefault(), v(f(x - t, g, h)));
|
|
51
51
|
}, [
|
|
52
52
|
h,
|
|
53
53
|
g,
|
|
54
|
-
_,
|
|
55
54
|
v,
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
55
|
+
y,
|
|
56
|
+
x
|
|
57
|
+
]), D = e;
|
|
58
|
+
return y != null && (D = `${e} ${t}`), /* @__PURE__ */ a("div", {
|
|
59
59
|
className: n,
|
|
60
|
+
"data-narrow-mode": y == null ? "stack" : _,
|
|
60
61
|
children: [/* @__PURE__ */ i("div", {
|
|
61
|
-
className:
|
|
62
|
+
className: D,
|
|
62
63
|
children: m
|
|
63
|
-
}),
|
|
64
|
+
}), y != null && /* @__PURE__ */ a(r, { children: [/* @__PURE__ */ i("div", {
|
|
64
65
|
className: "_1m64tse3",
|
|
65
66
|
role: "separator",
|
|
66
67
|
"aria-orientation": "vertical",
|
|
67
|
-
"aria-label":
|
|
68
|
+
"aria-label": b ?? d,
|
|
68
69
|
"aria-valuemin": Math.round(g),
|
|
69
70
|
"aria-valuemax": Math.round(h),
|
|
70
|
-
"aria-valuenow": Math.round(
|
|
71
|
+
"aria-valuenow": Math.round(x),
|
|
71
72
|
tabIndex: 0,
|
|
72
|
-
onPointerDown:
|
|
73
|
-
onKeyDown:
|
|
73
|
+
onPointerDown: T,
|
|
74
|
+
onKeyDown: E,
|
|
74
75
|
children: /* @__PURE__ */ i("span", { className: "_1m64tse4" })
|
|
75
76
|
}), /* @__PURE__ */ i("section", {
|
|
76
77
|
className: "_1m64tse5",
|
|
77
|
-
"aria-label":
|
|
78
|
-
style: { width: `${
|
|
79
|
-
children:
|
|
78
|
+
"aria-label": b ?? void 0,
|
|
79
|
+
style: { width: `${x}px` },
|
|
80
|
+
children: y
|
|
80
81
|
})] })]
|
|
81
82
|
});
|
|
82
83
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DevtoolsSplitView.js","names":[],"sources":["../../../src/layout/DevtoolsSplitView.tsx"],"sourcesContent":["import {\n useCallback,\n useEffect,\n useRef,\n type JSX,\n type KeyboardEvent as ReactKeyboardEvent,\n type PointerEvent as ReactPointerEvent,\n type ReactNode,\n} from 'react';\nimport {\n main,\n mainBordered,\n resizer,\n resizerLine,\n root,\n sidebar,\n} from './devtoolsSplitView.css.js';\n\ntype DragState = {\n active: boolean;\n pointerId: number | null;\n startX: number;\n width: number;\n};\n\nconst RESIZE_STEP = 16;\nconst RESIZE_SHIFT_STEP = 64;\nconst DEFAULT_SIDEBAR_LABEL = 'Resize sidebar';\n\nexport type DevtoolsSplitViewProps = {\n main: ReactNode;\n sidebar: ReactNode | null;\n sidebarWidth: number;\n minSidebarWidth: number;\n maxSidebarWidth: number;\n onSidebarWidthChange: (width: number) => void;\n sidebarLabel?: string;\n};\n\n/** Clamp a sidebar width within the configured resize bounds. */\nfunction clampWidth(value: number, minWidth: number, maxWidth: number): number {\n if (value < minWidth) {\n return minWidth;\n }\n if (value > maxWidth) {\n return maxWidth;\n }\n return value;\n}\n\n/** Render a split view with a resizable optional sidebar. */\nexport function DevtoolsSplitView(props: DevtoolsSplitViewProps): JSX.Element {\n const {\n main: mainContent,\n maxSidebarWidth,\n minSidebarWidth,\n onSidebarWidthChange,\n sidebar: sidebarContent,\n sidebarLabel,\n sidebarWidth,\n } = props;\n const dragRef = useRef<DragState>({\n active: false,\n pointerId: null,\n startX: 0,\n width: sidebarWidth,\n });\n\n const handlePointerMove = useCallback(\n (event: PointerEvent) => {\n const state = dragRef.current;\n if (!state.active) {\n return;\n }\n if (state.pointerId != null && event.pointerId !== state.pointerId) {\n return;\n }\n event.preventDefault();\n const delta = state.startX - event.clientX;\n onSidebarWidthChange(\n clampWidth(state.width + delta, minSidebarWidth, maxSidebarWidth),\n );\n },\n [maxSidebarWidth, minSidebarWidth, onSidebarWidthChange],\n );\n\n const handlePointerUp = useCallback(() => {\n if (!dragRef.current.active) {\n return;\n }\n dragRef.current.active = false;\n dragRef.current.pointerId = null;\n window.removeEventListener('pointermove', handlePointerMove);\n window.removeEventListener('pointerup', handlePointerUp);\n window.removeEventListener('pointercancel', handlePointerUp);\n }, [handlePointerMove]);\n\n useEffect(() => {\n return () => {\n window.removeEventListener('pointermove', handlePointerMove);\n window.removeEventListener('pointerup', handlePointerUp);\n window.removeEventListener('pointercancel', handlePointerUp);\n };\n }, [handlePointerMove, handlePointerUp]);\n\n const handlePointerDown = useCallback(\n (event: ReactPointerEvent<HTMLDivElement>) => {\n if (sidebarContent == null) {\n return;\n }\n event.preventDefault();\n if ('setPointerCapture' in event.currentTarget) {\n event.currentTarget.setPointerCapture(event.pointerId);\n }\n dragRef.current = {\n active: true,\n pointerId: event.pointerId,\n startX: event.clientX,\n width: sidebarWidth,\n };\n window.addEventListener('pointermove', handlePointerMove);\n window.addEventListener('pointerup', handlePointerUp);\n window.addEventListener('pointercancel', handlePointerUp);\n },\n [handlePointerMove, handlePointerUp, sidebarContent, sidebarWidth],\n );\n\n const handleKeyDown = useCallback(\n (event: ReactKeyboardEvent<HTMLDivElement>) => {\n if (sidebarContent == null) {\n return;\n }\n let step = RESIZE_STEP;\n if (event.shiftKey) {\n step = RESIZE_SHIFT_STEP;\n }\n if (event.key === 'ArrowLeft') {\n event.preventDefault();\n onSidebarWidthChange(\n clampWidth(sidebarWidth + step, minSidebarWidth, maxSidebarWidth),\n );\n return;\n }\n if (event.key === 'ArrowRight') {\n event.preventDefault();\n onSidebarWidthChange(\n clampWidth(sidebarWidth - step, minSidebarWidth, maxSidebarWidth),\n );\n }\n },\n [\n maxSidebarWidth,\n minSidebarWidth,\n onSidebarWidthChange,\n sidebarContent,\n sidebarWidth,\n ],\n );\n\n let mainClassName = main;\n if (sidebarContent != null) {\n mainClassName = `${main} ${mainBordered}`;\n }\n\n return (\n <div
|
|
1
|
+
{"version":3,"file":"DevtoolsSplitView.js","names":[],"sources":["../../../src/layout/DevtoolsSplitView.tsx"],"sourcesContent":["import {\n useCallback,\n useEffect,\n useRef,\n type JSX,\n type KeyboardEvent as ReactKeyboardEvent,\n type PointerEvent as ReactPointerEvent,\n type ReactNode,\n} from 'react';\nimport {\n main,\n mainBordered,\n resizer,\n resizerLine,\n root,\n sidebar,\n} from './devtoolsSplitView.css.js';\n\ntype DragState = {\n active: boolean;\n pointerId: number | null;\n startX: number;\n width: number;\n};\n\nconst RESIZE_STEP = 16;\nconst RESIZE_SHIFT_STEP = 64;\nconst DEFAULT_SIDEBAR_LABEL = 'Resize sidebar';\n\nexport type DevtoolsSplitViewNarrowMode = 'stack' | 'detail';\n\nexport type DevtoolsSplitViewProps = {\n main: ReactNode;\n sidebar: ReactNode | null;\n sidebarWidth: number;\n minSidebarWidth: number;\n maxSidebarWidth: number;\n onSidebarWidthChange: (width: number) => void;\n sidebarLabel?: string;\n /** Choose whether a narrow viewport stacks both panes or focuses the detail. */\n narrowMode?: DevtoolsSplitViewNarrowMode;\n};\n\n/** Clamp a sidebar width within the configured resize bounds. */\nfunction clampWidth(value: number, minWidth: number, maxWidth: number): number {\n if (value < minWidth) {\n return minWidth;\n }\n if (value > maxWidth) {\n return maxWidth;\n }\n return value;\n}\n\n/** Render a split view with a resizable optional sidebar. */\nexport function DevtoolsSplitView(props: DevtoolsSplitViewProps): JSX.Element {\n const {\n main: mainContent,\n maxSidebarWidth,\n minSidebarWidth,\n narrowMode = 'stack',\n onSidebarWidthChange,\n sidebar: sidebarContent,\n sidebarLabel,\n sidebarWidth,\n } = props;\n const dragRef = useRef<DragState>({\n active: false,\n pointerId: null,\n startX: 0,\n width: sidebarWidth,\n });\n\n const handlePointerMove = useCallback(\n (event: PointerEvent) => {\n const state = dragRef.current;\n if (!state.active) {\n return;\n }\n if (state.pointerId != null && event.pointerId !== state.pointerId) {\n return;\n }\n event.preventDefault();\n const delta = state.startX - event.clientX;\n onSidebarWidthChange(\n clampWidth(state.width + delta, minSidebarWidth, maxSidebarWidth),\n );\n },\n [maxSidebarWidth, minSidebarWidth, onSidebarWidthChange],\n );\n\n const handlePointerUp = useCallback(() => {\n if (!dragRef.current.active) {\n return;\n }\n dragRef.current.active = false;\n dragRef.current.pointerId = null;\n window.removeEventListener('pointermove', handlePointerMove);\n window.removeEventListener('pointerup', handlePointerUp);\n window.removeEventListener('pointercancel', handlePointerUp);\n }, [handlePointerMove]);\n\n useEffect(() => {\n return () => {\n window.removeEventListener('pointermove', handlePointerMove);\n window.removeEventListener('pointerup', handlePointerUp);\n window.removeEventListener('pointercancel', handlePointerUp);\n };\n }, [handlePointerMove, handlePointerUp]);\n\n const handlePointerDown = useCallback(\n (event: ReactPointerEvent<HTMLDivElement>) => {\n if (sidebarContent == null) {\n return;\n }\n event.preventDefault();\n if ('setPointerCapture' in event.currentTarget) {\n event.currentTarget.setPointerCapture(event.pointerId);\n }\n dragRef.current = {\n active: true,\n pointerId: event.pointerId,\n startX: event.clientX,\n width: sidebarWidth,\n };\n window.addEventListener('pointermove', handlePointerMove);\n window.addEventListener('pointerup', handlePointerUp);\n window.addEventListener('pointercancel', handlePointerUp);\n },\n [handlePointerMove, handlePointerUp, sidebarContent, sidebarWidth],\n );\n\n const handleKeyDown = useCallback(\n (event: ReactKeyboardEvent<HTMLDivElement>) => {\n if (sidebarContent == null) {\n return;\n }\n let step = RESIZE_STEP;\n if (event.shiftKey) {\n step = RESIZE_SHIFT_STEP;\n }\n if (event.key === 'ArrowLeft') {\n event.preventDefault();\n onSidebarWidthChange(\n clampWidth(sidebarWidth + step, minSidebarWidth, maxSidebarWidth),\n );\n return;\n }\n if (event.key === 'ArrowRight') {\n event.preventDefault();\n onSidebarWidthChange(\n clampWidth(sidebarWidth - step, minSidebarWidth, maxSidebarWidth),\n );\n }\n },\n [\n maxSidebarWidth,\n minSidebarWidth,\n onSidebarWidthChange,\n sidebarContent,\n sidebarWidth,\n ],\n );\n\n let mainClassName = main;\n if (sidebarContent != null) {\n mainClassName = `${main} ${mainBordered}`;\n }\n\n return (\n <div\n className={root}\n data-narrow-mode={sidebarContent == null ? 'stack' : narrowMode}\n >\n <div className={mainClassName}>{mainContent}</div>\n {sidebarContent != null && (\n <>\n <div\n className={resizer}\n role=\"separator\"\n aria-orientation=\"vertical\"\n aria-label={sidebarLabel ?? DEFAULT_SIDEBAR_LABEL}\n aria-valuemin={Math.round(minSidebarWidth)}\n aria-valuemax={Math.round(maxSidebarWidth)}\n aria-valuenow={Math.round(sidebarWidth)}\n tabIndex={0}\n onPointerDown={handlePointerDown}\n onKeyDown={handleKeyDown}\n >\n <span className={resizerLine} />\n </div>\n <section\n className={sidebar}\n aria-label={sidebarLabel ?? undefined}\n style={{ width: `${sidebarWidth}px` }}\n >\n {sidebarContent}\n </section>\n </>\n )}\n </div>\n );\n}\n"],"mappings":";;;;AAyBA,IAAM,IAAc,IACd,IAAoB,IACpB,IAAwB;AAiB9B,SAAS,EAAW,GAAe,GAAkB,GAA0B;CAO7E,OANI,IAAQ,IACH,IAEL,IAAQ,IACH,IAEF;AACT;AAGA,SAAgB,EAAkB,GAA4C;CAC5E,IAAM,EACJ,MAAM,GACN,oBACA,oBACA,gBAAa,SACb,yBACA,SAAS,GACT,iBACA,oBACE,GACE,IAAU,EAAkB;EAChC,QAAQ;EACR,WAAW;EACX,QAAQ;EACR,OAAO;CACT,CAAC,GAEK,IAAoB,GACvB,MAAwB;EACvB,IAAM,IAAQ,EAAQ;EAItB,IAHI,CAAC,EAAM,UAGP,EAAM,aAAa,QAAQ,EAAM,cAAc,EAAM,WACvD;EAEF,EAAM,eAAe;EACrB,IAAM,IAAQ,EAAM,SAAS,EAAM;EACnC,EACE,EAAW,EAAM,QAAQ,GAAO,GAAiB,CAAe,CAClE;CACF,GACA;EAAC;EAAiB;EAAiB;CAAoB,CACzD,GAEM,IAAkB,QAAkB;EACnC,EAAQ,QAAQ,WAGrB,EAAQ,QAAQ,SAAS,IACzB,EAAQ,QAAQ,YAAY,MAC5B,OAAO,oBAAoB,eAAe,CAAiB,GAC3D,OAAO,oBAAoB,aAAa,CAAe,GACvD,OAAO,oBAAoB,iBAAiB,CAAe;CAC7D,GAAG,CAAC,CAAiB,CAAC;CAEtB,cACe;EAGX,AAFA,OAAO,oBAAoB,eAAe,CAAiB,GAC3D,OAAO,oBAAoB,aAAa,CAAe,GACvD,OAAO,oBAAoB,iBAAiB,CAAe;CAC7D,GACC,CAAC,GAAmB,CAAe,CAAC;CAEvC,IAAM,IAAoB,GACvB,MAA6C;EACxC,KAAkB,SAGtB,EAAM,eAAe,GACjB,uBAAuB,EAAM,iBAC/B,EAAM,cAAc,kBAAkB,EAAM,SAAS,GAEvD,EAAQ,UAAU;GAChB,QAAQ;GACR,WAAW,EAAM;GACjB,QAAQ,EAAM;GACd,OAAO;EACT,GACA,OAAO,iBAAiB,eAAe,CAAiB,GACxD,OAAO,iBAAiB,aAAa,CAAe,GACpD,OAAO,iBAAiB,iBAAiB,CAAe;CAC1D,GACA;EAAC;EAAmB;EAAiB;EAAgB;CAAY,CACnE,GAEM,IAAgB,GACnB,MAA8C;EAC7C,IAAI,KAAkB,MACpB;EAEF,IAAI,IAAO;EAIX,IAHI,EAAM,aACR,IAAO,IAEL,EAAM,QAAQ,aAAa;GAE7B,AADA,EAAM,eAAe,GACrB,EACE,EAAW,IAAe,GAAM,GAAiB,CAAe,CAClE;GACA;EACF;EACA,AAAI,EAAM,QAAQ,iBAChB,EAAM,eAAe,GACrB,EACE,EAAW,IAAe,GAAM,GAAiB,CAAe,CAClE;CAEJ,GACA;EACE;EACA;EACA;EACA;EACA;CACF,CACF,GAEI,IAAgB;CAKpB,OAJI,KAAkB,SACpB,IAAgB,GAAG,EAAK,GAAG,MAI3B,kBAAC,OAAD;EACE,WAAW;EACX,oBAAkB,KAAkB,OAAO,UAAU;EAFvD,UAAA,CAIE,kBAAC,OAAD;GAAK,WAAW;GAAgB,UAAA;EAAiB,CAAA,GAChD,KAAkB,QACjB,kBAAA,GAAA,EAAA,UAAA,CACE,kBAAC,OAAD;GACE,WAAA;GACA,MAAK;GACL,oBAAiB;GACjB,cAAY,KAAgB;GAC5B,iBAAe,KAAK,MAAM,CAAe;GACzC,iBAAe,KAAK,MAAM,CAAe;GACzC,iBAAe,KAAK,MAAM,CAAY;GACtC,UAAU;GACV,eAAe;GACf,WAAW;GAEX,UAAA,kBAAC,QAAD,EAAM,WAAA,YAAyB,CAAA;EAC5B,CAAA,GACL,kBAAC,WAAD;GACE,WAAA;GACA,cAAY,KAAgB,KAAA;GAC5B,OAAO,EAAE,OAAO,GAAG,EAAa,IAAI;GAEnC,UAAA;EACM,CAAA,CACT,EAAA,CAAA,CAED;;AAET"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"devtoolsSplitView.css.js","names":[],"sources":["../../../src/layout/devtoolsSplitView.css.ts"],"sourcesContent":["import { style } from '@vanilla-extract/css';\n\nexport const root = style({\n flex: 1,\n display: 'flex',\n alignItems: 'stretch',\n minHeight: 0,\n minWidth: 0,\n '@media': {\n 'screen and (max-width:
|
|
1
|
+
{"version":3,"file":"devtoolsSplitView.css.js","names":[],"sources":["../../../src/layout/devtoolsSplitView.css.ts"],"sourcesContent":["import { globalStyle, style } from '@vanilla-extract/css';\n\nexport const root = style({\n flex: 1,\n display: 'flex',\n alignItems: 'stretch',\n minHeight: 0,\n minWidth: 0,\n '@media': {\n 'screen and (max-width: 688px)': {\n flexDirection: 'column',\n overflow: 'auto',\n },\n },\n});\n\nexport const main = style({\n flex: '1 1 auto',\n minWidth: 0,\n display: 'flex',\n flexDirection: 'column',\n backgroundColor: 'var(--pdt-surface)',\n overflow: 'hidden',\n});\n\nexport const mainBordered = style({\n borderInlineEnd: '1px solid var(--pdt-border)',\n '@media': {\n 'screen and (max-width: 688px)': {\n borderInlineEnd: 0,\n borderBottom: '1px solid var(--pdt-border)',\n },\n },\n});\n\nexport const resizer = style({\n flex: '0 0 8px',\n position: 'relative',\n cursor: 'col-resize',\n backgroundColor: 'transparent',\n selectors: {\n '&:focus-visible': {\n outline: 'none',\n },\n },\n '@media': {\n 'screen and (max-width: 688px)': {\n display: 'none',\n },\n },\n});\n\nexport const resizerLine = style({\n position: 'absolute',\n top: 0,\n bottom: 0,\n left: '50%',\n width: '2px',\n transform: 'translateX(-50%)',\n borderRadius: '2px',\n backgroundColor: 'var(--pdt-border)',\n selectors: {\n [`${resizer}:hover &`]: {\n backgroundColor: 'var(--pdt-accent)',\n },\n [`${resizer}:focus-visible &`]: {\n backgroundColor: 'var(--pdt-accent)',\n },\n },\n});\n\nexport const sidebar = style({\n flex: '0 0 auto',\n minWidth: '280px',\n maxWidth: '90%',\n display: 'flex',\n flexDirection: 'column',\n overflow: 'hidden',\n backgroundColor: 'var(--pdt-surface)',\n '@media': {\n 'screen and (max-width: 688px)': {\n flex: '0 0 auto',\n minHeight: '12rem',\n minWidth: 0,\n width: '100% !important',\n maxWidth: '100%',\n },\n },\n});\n\nglobalStyle(`${root}[data-narrow-mode='detail'] ${main}`, {\n '@media': {\n 'screen and (max-width: 688px)': {\n display: 'none',\n },\n },\n});\n\nglobalStyle(`${root}[data-narrow-mode='detail'] ${sidebar}`, {\n '@media': {\n 'screen and (max-width: 688px)': {\n flex: '1 1 auto',\n minHeight: 0,\n },\n },\n});\n\nglobalStyle(`${resizer}:focus-visible`, {\n '@media': {\n '(forced-colors: active)': {\n outline: '2px solid Highlight',\n outlineOffset: '-2px',\n boxShadow: 'none',\n },\n },\n});\n"],"mappings":""}
|
|
@@ -1,21 +1,42 @@
|
|
|
1
1
|
import { container as e, tab as t, tabSelected as n } from "./devtoolsTabs.css.js";
|
|
2
2
|
import { jsx as r } from "react/jsx-runtime";
|
|
3
3
|
//#region src/navigation/DevtoolsTabs.tsx
|
|
4
|
-
function i(
|
|
5
|
-
|
|
6
|
-
|
|
4
|
+
function i(e, t, n) {
|
|
5
|
+
switch (e) {
|
|
6
|
+
case "ArrowLeft": return (t - 1 + n) % n;
|
|
7
|
+
case "ArrowRight": return (t + 1) % n;
|
|
8
|
+
case "Home": return 0;
|
|
9
|
+
case "End": return n - 1;
|
|
10
|
+
default: return null;
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
function a(e, t, n, r) {
|
|
14
|
+
let a = i(e.key, t, n.length);
|
|
15
|
+
if (a === null) return;
|
|
16
|
+
let o = n[a], s = e.currentTarget.parentElement?.querySelectorAll("[role=\"tab\"]")[a];
|
|
17
|
+
o !== void 0 && s instanceof HTMLButtonElement && (e.preventDefault(), s.focus(), r(o.id));
|
|
18
|
+
}
|
|
19
|
+
function o(i) {
|
|
20
|
+
let { ariaLabel: o, items: s, onSelect: c, selectedId: l } = i, u = s.findIndex((e) => e.id === l);
|
|
21
|
+
return u < 0 && (u = 0), /* @__PURE__ */ r("div", {
|
|
7
22
|
className: e,
|
|
8
23
|
role: "tablist",
|
|
9
|
-
"aria-label":
|
|
10
|
-
children:
|
|
11
|
-
let
|
|
12
|
-
|
|
24
|
+
"aria-label": o,
|
|
25
|
+
children: s.map((e, i) => {
|
|
26
|
+
let o = e.id === l, d = t;
|
|
27
|
+
o && (d = `${t} ${n}`);
|
|
28
|
+
let f = -1;
|
|
29
|
+
return i === u && (f = 0), /* @__PURE__ */ r("button", {
|
|
13
30
|
type: "button",
|
|
14
31
|
role: "tab",
|
|
15
|
-
"aria-selected":
|
|
16
|
-
className:
|
|
32
|
+
"aria-selected": o,
|
|
33
|
+
className: d,
|
|
34
|
+
tabIndex: f,
|
|
17
35
|
onClick: () => {
|
|
18
|
-
|
|
36
|
+
c(e.id);
|
|
37
|
+
},
|
|
38
|
+
onKeyDown: (e) => {
|
|
39
|
+
a(e, i, s, c);
|
|
19
40
|
},
|
|
20
41
|
children: e.label
|
|
21
42
|
}, e.id);
|
|
@@ -23,6 +44,6 @@ function i(i) {
|
|
|
23
44
|
});
|
|
24
45
|
}
|
|
25
46
|
//#endregion
|
|
26
|
-
export {
|
|
47
|
+
export { o as DevtoolsTabs };
|
|
27
48
|
|
|
28
49
|
//# sourceMappingURL=DevtoolsTabs.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DevtoolsTabs.js","names":[],"sources":["../../../src/navigation/DevtoolsTabs.tsx"],"sourcesContent":["import type { JSX, ReactNode } from 'react';\nimport { container, tab, tabSelected } from './devtoolsTabs.css.js';\n\nexport type DevtoolsTabItem = {\n id: string;\n label: ReactNode;\n};\n\nexport type DevtoolsTabsProps = {\n items: readonly DevtoolsTabItem[];\n selectedId: string;\n onSelect: (id: string) => void;\n ariaLabel?: string;\n};\n\n/** Render a simple tab list with controlled selection. */\nexport function DevtoolsTabs(props: DevtoolsTabsProps): JSX.Element {\n const { ariaLabel, items, onSelect, selectedId } = props;\n\n return (\n <div className={container} role=\"tablist\" aria-label={ariaLabel}>\n {items.map((item) => {\n const isSelected = item.id === selectedId;\n let className = tab;\n if (isSelected) className = `${tab} ${tabSelected}`;\n\n return (\n <button\n key={item.id}\n type=\"button\"\n role=\"tab\"\n aria-selected={isSelected}\n className={className}\n onClick={() => {\n onSelect(item.id);\n }}\n >\n {item.label}\n </button>\n );\n })}\n </div>\n );\n}\n"],"mappings":";;;AAgBA,SAAgB,EAAa,GAAuC;CAClE,IAAM,EAAE,cAAW,UAAO,aAAU,kBAAe;
|
|
1
|
+
{"version":3,"file":"DevtoolsTabs.js","names":[],"sources":["../../../src/navigation/DevtoolsTabs.tsx"],"sourcesContent":["import type { JSX, KeyboardEvent, ReactNode } from 'react';\nimport { container, tab, tabSelected } from './devtoolsTabs.css.js';\n\nexport type DevtoolsTabItem = {\n id: string;\n label: ReactNode;\n};\n\nexport type DevtoolsTabsProps = {\n items: readonly DevtoolsTabItem[];\n selectedId: string;\n onSelect: (id: string) => void;\n ariaLabel?: string;\n};\n\n/** Resolve horizontal tab-list navigation with wrapping boundaries. */\nfunction getKeyboardTargetIndex(\n key: string,\n currentIndex: number,\n itemCount: number,\n): number | null {\n switch (key) {\n case 'ArrowLeft':\n return (currentIndex - 1 + itemCount) % itemCount;\n case 'ArrowRight':\n return (currentIndex + 1) % itemCount;\n case 'Home':\n return 0;\n case 'End':\n return itemCount - 1;\n default:\n return null;\n }\n}\n\n/** Move focus and selection together for automatic tab activation. */\nfunction handleTabKeyDown(\n event: KeyboardEvent<HTMLButtonElement>,\n currentIndex: number,\n items: readonly DevtoolsTabItem[],\n onSelect: (id: string) => void,\n): void {\n const targetIndex = getKeyboardTargetIndex(\n event.key,\n currentIndex,\n items.length,\n );\n if (targetIndex === null) return;\n\n const targetItem = items[targetIndex];\n const targetTab =\n event.currentTarget.parentElement?.querySelectorAll('[role=\"tab\"]')[\n targetIndex\n ];\n if (targetItem === undefined || !(targetTab instanceof HTMLButtonElement)) {\n return;\n }\n\n event.preventDefault();\n targetTab.focus();\n onSelect(targetItem.id);\n}\n\n/** Render a simple tab list with controlled selection. */\nexport function DevtoolsTabs(props: DevtoolsTabsProps): JSX.Element {\n const { ariaLabel, items, onSelect, selectedId } = props;\n const selectedIndex = items.findIndex((item) => {\n return item.id === selectedId;\n });\n let focusableIndex = selectedIndex;\n if (focusableIndex < 0) focusableIndex = 0;\n\n return (\n <div className={container} role=\"tablist\" aria-label={ariaLabel}>\n {items.map((item, index) => {\n const isSelected = item.id === selectedId;\n let className = tab;\n if (isSelected) className = `${tab} ${tabSelected}`;\n let tabIndex = -1;\n if (index === focusableIndex) tabIndex = 0;\n\n return (\n <button\n key={item.id}\n type=\"button\"\n role=\"tab\"\n aria-selected={isSelected}\n className={className}\n tabIndex={tabIndex}\n onClick={() => {\n onSelect(item.id);\n }}\n onKeyDown={(event) => {\n handleTabKeyDown(event, index, items, onSelect);\n }}\n >\n {item.label}\n </button>\n );\n })}\n </div>\n );\n}\n"],"mappings":";;;AAgBA,SAAS,EACP,GACA,GACA,GACe;CACf,QAAQ,GAAR;EACE,KAAK,aACH,QAAQ,IAAe,IAAI,KAAa;EAC1C,KAAK,cACH,QAAQ,IAAe,KAAK;EAC9B,KAAK,QACH,OAAO;EACT,KAAK,OACH,OAAO,IAAY;EACrB,SACE,OAAO;CACX;AACF;AAGA,SAAS,EACP,GACA,GACA,GACA,GACM;CACN,IAAM,IAAc,EAClB,EAAM,KACN,GACA,EAAM,MACR;CACA,IAAI,MAAgB,MAAM;CAE1B,IAAM,IAAa,EAAM,IACnB,IACJ,EAAM,cAAc,eAAe,iBAAiB,gBAAc,CAAC,CACjE;CAEA,MAAe,KAAA,KAAe,aAAqB,sBAIvD,EAAM,eAAe,GACrB,EAAU,MAAM,GAChB,EAAS,EAAW,EAAE;AACxB;AAGA,SAAgB,EAAa,GAAuC;CAClE,IAAM,EAAE,cAAW,UAAO,aAAU,kBAAe,GAI/C,IAHkB,EAAM,WAAW,MAC9B,EAAK,OAAO,CAEA;CAGrB,OAFI,IAAiB,MAAG,IAAiB,IAGvC,kBAAC,OAAD;EAAK,WAAW;EAAW,MAAK;EAAU,cAAY;EACnD,UAAA,EAAM,KAAK,GAAM,MAAU;GAC1B,IAAM,IAAa,EAAK,OAAO,GAC3B,IAAY;GAChB,AAAI,MAAY,IAAY,GAAG,EAAI,GAAG;GACtC,IAAI,IAAW;GAGf,OAFI,MAAU,MAAgB,IAAW,IAGvC,kBAAC,UAAD;IAEE,MAAK;IACL,MAAK;IACL,iBAAe;IACJ;IACD;IACV,eAAe;KACb,EAAS,EAAK,EAAE;IAClB;IACA,YAAY,MAAU;KACpB,EAAiB,GAAO,GAAO,GAAO,CAAQ;IAChD;IAEC,UAAA,EAAK;GACA,GAdD,EAAK,EAcJ;EAEZ,CAAC;CACE,CAAA;AAET"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"devtoolsTabs.css.js","names":[],"sources":["../../../src/navigation/devtoolsTabs.css.ts"],"sourcesContent":["import { style } from '@vanilla-extract/css';\n\nexport const container = style({\n display: 'flex',\n alignItems: 'center',\n gap: '
|
|
1
|
+
{"version":3,"file":"devtoolsTabs.css.js","names":[],"sources":["../../../src/navigation/devtoolsTabs.css.ts"],"sourcesContent":["import { globalStyle, style } from '@vanilla-extract/css';\n\nexport const container = style({\n display: 'flex',\n alignItems: 'center',\n gap: 0,\n height: '28px',\n padding: '0 4px',\n borderBottom: '1px solid var(--pdt-border)',\n backgroundColor: 'var(--pdt-surface)',\n});\n\nexport const tab = style({\n appearance: 'none',\n position: 'relative',\n alignSelf: 'stretch',\n border: 0,\n borderRadius: 0,\n backgroundColor: 'transparent',\n color: 'var(--pdt-text-muted)',\n padding: '0 10px',\n fontSize: '12px',\n lineHeight: '16px',\n cursor: 'pointer',\n transition: 'background-color 100ms ease, color 100ms ease',\n selectors: {\n '&:hover:not(:disabled)': {\n backgroundColor: 'color-mix(in srgb, var(--pdt-text) 8%, transparent)',\n },\n '&:focus-visible': {\n outline: 'none',\n boxShadow: 'var(--pdt-shadow-focus)',\n },\n '&:disabled': {\n opacity: 0.6,\n cursor: 'default',\n },\n },\n});\n\nexport const tabSelected = style({\n color: 'var(--pdt-accent)',\n fontWeight: 600,\n selectors: {\n '&::after': {\n content: '',\n position: 'absolute',\n insetInline: '6px',\n bottom: 0,\n height: '2px',\n backgroundColor: 'var(--pdt-accent)',\n },\n },\n});\n\nglobalStyle(`${tab}:focus-visible`, {\n '@media': {\n '(forced-colors: active)': {\n outline: '2px solid Highlight',\n outlineOffset: '-2px',\n boxShadow: 'none',\n },\n },\n});\n\nglobalStyle(`${tabSelected}::after`, {\n '@media': {\n '(forced-colors: active)': {\n backgroundColor: 'Highlight',\n },\n },\n});\n"],"mappings":""}
|
package/lib/esm/style.css
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
._1sbiiq0{background-color:var(--pdt-code-bg);white-space:pre-wrap;word-break:break-word;border-radius:6px;margin:0;padding:12px;font-size:12px;line-height:1.4;overflow-x:auto}._83ws9k0{border:1px solid var(--pdt-border);min-height:28px;color:var(--pdt-text);cursor:pointer;background-color:#0000;border-radius:4px;justify-content:center;align-items:center;gap:6px;padding:4px 10px;font-size:12px;line-height:1.2;transition:background-color .15s,border-color .15s;display:inline-flex}._83ws9k0:hover:not(:disabled){background-color:color-mix(in srgb, var(--pdt-accent) 8%, transparent)}._83ws9k0:focus-visible{box-shadow:var(--pdt-shadow-focus);outline:none}._83ws9k0:disabled{opacity:.5;cursor:not-allowed}._83ws9k1{color:var(--pdt-danger)}._83ws9k1:hover:not(:disabled){background-color:color-mix(in srgb, var(--pdt-danger) 10%, transparent);border-color:color-mix(in srgb, var(--pdt-danger) 34%, transparent)}._83ws9k2{min-width:0;color:var(--pdt-text-muted);align-items:center;gap:6px;font-size:12px;display:inline-flex}._83ws9k3{text-overflow:ellipsis;white-space:nowrap;font-size:12px;overflow:hidden}._83ws9k4{border:1px solid var(--pdt-border);background-color:var(--pdt-bg);min-width:0;min-height:28px;color:var(--pdt-text);border-radius:4px;flex:auto;padding:4px 8px;font-size:12px}._83ws9k4:focus-visible{box-shadow:var(--pdt-shadow-focus);outline:none}@media screen and (width<=520px){._83ws9k2{flex:100%}}.fmw3vj0{flex-direction:column;align-items:flex-start;gap:12px;max-width:420px;padding:24px;display:flex}.fmw3vj1{margin:0;font-size:18px;font-weight:600}.fmw3vj2{color:var(--pdt-text-muted);margin:0;font-size:13px;line-height:1.5}.fmw3vj3{flex-wrap:wrap;align-items:center;gap:12px;display:flex}@keyframes kewyeuj{0%{box-shadow:var(--pdt-diff-flash-start)}to{box-shadow:var(--pdt-diff-flash-end)}}.kewyeu0{white-space:nowrap;background-color:var(--pdt-surface-muted);min-height:20px;color:var(--pdt-text-muted);border:1px solid #0000;border-radius:999px;justify-content:center;align-items:center;gap:4px;padding:2px 8px;font-size:11px;line-height:1.2;display:inline-flex}.kewyeu1{background-color:var(--pdt-surface-muted);border-color:var(--pdt-border);color:var(--pdt-text-muted)}.kewyeu2{background-color:color-mix(in srgb, var(--pdt-info) 12%, transparent);border-color:color-mix(in srgb, var(--pdt-info) 24%, transparent);color:var(--pdt-info)}.kewyeu3{background-color:color-mix(in srgb, var(--pdt-success) 12%, transparent);border-color:color-mix(in srgb, var(--pdt-success) 24%, transparent);color:var(--pdt-success)}.kewyeu4{background-color:color-mix(in srgb, var(--pdt-warning) 12%, transparent);border-color:color-mix(in srgb, var(--pdt-warning) 24%, transparent);color:var(--pdt-warning)}.kewyeu5{background-color:color-mix(in srgb, var(--pdt-danger) 12%, transparent);border-color:color-mix(in srgb, var(--pdt-danger) 24%, transparent);color:var(--pdt-danger)}.kewyeu6{border:1px solid var(--pdt-border);white-space:nowrap;min-height:20px;color:var(--pdt-text);background-color:#0000;border-radius:999px;align-items:center;padding:2px 8px;font-size:11px;line-height:1.2;display:inline-flex}.kewyeu7{background-color:var(--pdt-surface-muted);border-color:var(--pdt-border)}.kewyeu8{background-color:color-mix(in srgb, var(--pdt-accent) 10%, transparent);border-color:color-mix(in srgb, var(--pdt-accent) 24%, transparent)}.kewyeu9{background-color:color-mix(in srgb, var(--pdt-info) 10%, transparent);border-color:color-mix(in srgb, var(--pdt-info) 24%, transparent)}.kewyeua{background-color:var(--pdt-event-snapshot-bg);border-color:var(--pdt-event-snapshot-border)}.kewyeub{background-color:color-mix(in srgb, var(--pdt-success) 10%, transparent);border-color:color-mix(in srgb, var(--pdt-success) 24%, transparent)}.kewyeuc{background-color:var(--pdt-event-history-bg);border-color:var(--pdt-event-history-border)}.kewyeud{background-color:var(--pdt-event-popstate-bg);border-color:var(--pdt-event-popstate-border)}.kewyeue{background-color:var(--pdt-event-prepare-bg);border-color:var(--pdt-event-prepare-border)}.kewyeuf{min-height:20px;color:var(--pdt-text-muted);align-items:center;gap:6px;font-size:12px;display:inline-flex}.kewyeug{background-color:var(--pdt-border);border-radius:50%;width:10px;height:10px}.kewyeuh{background-color:var(--pdt-success);box-shadow:0 0 0 2px color-mix(in srgb, var(--pdt-success) 30%, transparent)}.kewyeui{background-color:var(--pdt-border);box-shadow:inset 0 0 0 1px var(--pdt-text-muted)}.kewyeuk{flex-wrap:wrap;gap:6px;margin-top:6px;font-size:11px;display:flex}.kewyeul{flex-wrap:wrap;gap:6px;margin-top:0;font-size:11px;display:flex}.kewyeum{border:1px solid #0000;border-radius:999px;padding:2px 8px;font-weight:600}.kewyeun{background-color:var(--pdt-diff-added-bg);border-color:var(--pdt-diff-added-border);color:var(--pdt-diff-added-text)}.kewyeuo{background-color:var(--pdt-diff-changed-bg);border-color:var(--pdt-diff-changed-border);color:var(--pdt-diff-changed-text)}.kewyeup{background-color:var(--pdt-diff-removed-bg);border-color:var(--pdt-diff-removed-border);color:var(--pdt-diff-removed-text)}.kewyeuq{animation:.8s ease-in-out kewyeuj}._11l3mw40{--pdt-bg:#f3f4f6;--pdt-surface:#fff;--pdt-surface-muted:#f8fafc;--pdt-border:#d1d5db;--pdt-border-strong:#9ca3af;--pdt-text:#111827;--pdt-text-muted:#4b5563;--pdt-accent:#2563eb;--pdt-on-accent:#fff;--pdt-info:#0369a1;--pdt-success:#166534;--pdt-warning:#9a3412;--pdt-danger:#b91c1c;--pdt-code-bg:#0f172a0f;--pdt-shadow-focus:0 0 0 2px #2563eb59;--pdt-event-snapshot-bg:#6366f11f;--pdt-event-snapshot-border:#6366f147;--pdt-event-history-bg:#9333ea1f;--pdt-event-history-border:#9333ea47;--pdt-event-popstate-bg:#3b82f61f;--pdt-event-popstate-border:#3b82f647;--pdt-event-prepare-bg:#d977061f;--pdt-event-prepare-border:#d9770647;--pdt-diff-added-bg:#22863a1f;--pdt-diff-added-border:#22863a59;--pdt-diff-added-text:#166534;--pdt-diff-changed-bg:#735c0f1f;--pdt-diff-changed-border:#735c0f59;--pdt-diff-changed-text:#735c0f;--pdt-diff-removed-bg:#cb24311f;--pdt-diff-removed-border:#cb243159;--pdt-diff-removed-text:#b3212c;--pdt-diff-flash-start:0 0 0 0 #2563eb66;--pdt-diff-flash-end:0 0 0 12px #2563eb00;background-color:var(--pdt-bg);color:var(--pdt-text);--lightningcss-light:initial;--lightningcss-dark: ;--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light dark;min-height:100vh;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,Arial,sans-serif}@media (prefers-color-scheme:dark){._11l3mw40{--lightningcss-light: ;--lightningcss-dark:initial}}._11l3mw40,._11l3mw40 *{box-sizing:border-box}._11l3mw40 a{color:var(--pdt-accent)}._11l3mw40 button,._11l3mw40 input,._11l3mw40 select,._11l3mw40 textarea{font:inherit}._11l3mw40 pre,._11l3mw40 code{font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,Courier,monospace}@media (prefers-color-scheme:dark){._11l3mw40{--pdt-bg:#1f1f1f;--pdt-surface:#242424;--pdt-surface-muted:#2d2d2d;--pdt-border:#3f3f46;--pdt-border-strong:#52525b;--pdt-text:#f5f5f5;--pdt-text-muted:#a1a1aa;--pdt-accent:#60a5fa;--pdt-on-accent:#08111f;--pdt-info:#38bdf8;--pdt-success:#4ade80;--pdt-warning:#fb923c;--pdt-danger:#f87171;--pdt-code-bg:#94a3b81f;--pdt-shadow-focus:0 0 0 2px #60a5fa59;--pdt-event-snapshot-bg:#818cf82e;--pdt-event-snapshot-border:#818cf857;--pdt-event-history-bg:#c084fc29;--pdt-event-history-border:#c084fc52;--pdt-event-popstate-bg:#60a5fa29;--pdt-event-popstate-border:#60a5fa52;--pdt-event-prepare-bg:#fb923c29;--pdt-event-prepare-border:#fb923c52;--pdt-diff-added-bg:#4ade8029;--pdt-diff-added-border:#4ade8059;--pdt-diff-added-text:#86efac;--pdt-diff-changed-bg:#fbbf2429;--pdt-diff-changed-border:#fbbf2459;--pdt-diff-changed-text:#fde68a;--pdt-diff-removed-bg:#f8717129;--pdt-diff-removed-border:#f8717159;--pdt-diff-removed-text:#fca5a5;--pdt-diff-flash-start:0 0 0 0 #60a5fa73;--pdt-diff-flash-end:0 0 0 12px #60a5fa00}}.ca0gms0{border:1px solid var(--pdt-border);background-color:var(--pdt-surface);border-radius:8px;flex-direction:column;gap:12px;padding:16px;display:flex}.ca0gms1{justify-content:space-between;align-items:center;gap:12px;display:flex}.ca0gms2{margin:0;font-size:14px;font-weight:600}.ca0gms3{flex-direction:column;gap:8px;display:flex}.ca0gms4{justify-content:space-between;align-items:center;gap:12px;display:flex}.ca0gms5{text-transform:uppercase;letter-spacing:.04em;margin:0;font-size:13px;font-weight:600}.ca0gms6{flex-direction:column;gap:8px;margin:0;padding:0;list-style:none;display:flex}.ca0gms7{border:1px solid var(--pdt-border);border-radius:8px;flex-direction:column;gap:8px;padding:12px;display:flex}.ca0gms8:focus{box-shadow:var(--pdt-shadow-focus);outline:none}.ca0gms9{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.ca0gmsa{color:var(--pdt-text-muted);flex-wrap:wrap;gap:12px;font-size:12px;display:flex}.vzai5r0{border-bottom:1px solid var(--pdt-border);background-color:var(--pdt-surface);align-items:center;gap:8px;padding:12px 16px;display:flex}.vzai5r1{appearance:none;border:1px solid var(--pdt-border);background-color:var(--pdt-bg);color:var(--pdt-text);cursor:pointer;border-radius:999px;padding:6px 16px;font-size:12px;transition:background-color .15s,border-color .15s}.vzai5r1:hover:not(:disabled){background-color:var(--pdt-border)}.vzai5r1:focus-visible{box-shadow:var(--pdt-shadow-focus);outline:none}.vzai5r1:disabled{opacity:.6;cursor:default}.vzai5r2{background-color:var(--pdt-accent);border-color:var(--pdt-accent);color:var(--pdt-on-accent)}._1q96x230{border-bottom:1px solid var(--pdt-border);background-color:var(--pdt-surface);flex-wrap:wrap;align-items:center;gap:8px;min-width:0;padding:6px 16px;display:flex;overflow:hidden}._1q96x231{flex:auto;min-width:0}._1q96x232{background-color:var(--pdt-border);width:1px;height:18px}._1q96x233{border:1px solid var(--pdt-border);background-color:var(--pdt-bg);min-width:0;max-width:100%;min-height:28px;color:var(--pdt-text);cursor:pointer;border-radius:4px;align-items:center;gap:6px;padding:4px 12px;font-size:12px;transition:background-color .15s,border-color .15s;display:inline-flex}._1q96x233:hover:not(:disabled){background-color:var(--pdt-border)}._1q96x233:focus-visible{box-shadow:var(--pdt-shadow-focus);outline:none}._1q96x233:disabled{opacity:.5;cursor:not-allowed}._1q96x234{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}._1q96x235{background-color:var(--pdt-warning);border-color:var(--pdt-warning);color:var(--pdt-on-accent)}@media screen and (width<=520px){._1q96x230{align-items:stretch;padding:6px 8px}._1q96x233{flex:auto;justify-content:center;padding:4px 8px}}._1m64tse0{flex:1;align-items:stretch;min-width:0;min-height:0;display:flex}._1m64tse1{background-color:var(--pdt-surface);flex-direction:column;flex:auto;min-width:0;display:flex;overflow:hidden}._1m64tse2{border-right:1px solid var(--pdt-border)}._1m64tse3{cursor:col-resize;background-color:#0000;flex:0 0 8px;position:relative}._1m64tse3:focus-visible{outline:none}._1m64tse4{background-color:var(--pdt-border);border-radius:2px;width:2px;position:absolute;top:0;bottom:0;left:50%;transform:translate(-50%)}._1m64tse3:hover ._1m64tse4,._1m64tse3:focus-visible ._1m64tse4{background-color:var(--pdt-accent)}._1m64tse5{background-color:var(--pdt-surface);flex-direction:column;flex:none;min-width:280px;max-width:90%;display:flex;overflow:hidden}@media screen and (width<=640px){._1m64tse0{flex-direction:column;overflow:auto}._1m64tse2{border-right:0;border-bottom:1px solid var(--pdt-border)}._1m64tse3{display:none}._1m64tse5{flex:none;min-width:0;max-width:100%;min-height:12rem;width:100%!important}}
|
|
1
|
+
._1sbiiq0{background-color:var(--pdt-code-bg);white-space:pre-wrap;word-break:break-word;border-radius:4px;margin:0;padding:8px;font-size:12px;line-height:16px;overflow-x:auto}._83ws9k0{border:1px solid var(--pdt-border);min-height:26px;color:var(--pdt-text);cursor:pointer;background-color:#0000;border-radius:4px;justify-content:center;align-items:center;gap:6px;padding:3px 8px;font-size:12px;line-height:1.2;transition:background-color .1s,border-color .1s;display:inline-flex}._83ws9k0:hover:not(:disabled){background-color:color-mix(in srgb, var(--pdt-accent) 8%, transparent)}._83ws9k0:focus-visible{box-shadow:var(--pdt-shadow-focus);outline:none}._83ws9k0:disabled{opacity:.5;cursor:not-allowed}._83ws9k1{color:var(--pdt-danger)}._83ws9k1:hover:not(:disabled){background-color:color-mix(in srgb, var(--pdt-danger) 10%, transparent);border-color:color-mix(in srgb, var(--pdt-danger) 34%, transparent)}._83ws9k2{min-width:0;color:var(--pdt-text-muted);align-items:center;gap:6px;font-size:12px;display:inline-flex}._83ws9k3{text-overflow:ellipsis;white-space:nowrap;font-size:12px;overflow:hidden}._83ws9k4{border:1px solid var(--pdt-border);background-color:var(--pdt-bg);min-width:0;min-height:26px;color:var(--pdt-text);border-radius:4px;flex:auto;padding:3px 6px;font-size:12px}._83ws9k4:focus-visible{box-shadow:var(--pdt-shadow-focus);outline:none}@media screen and (width<=520px){._83ws9k2{flex:100%}}@media (forced-colors:active){._83ws9k0:focus-visible,._83ws9k4:focus-visible{outline-offset:2px;box-shadow:none;outline:2px solid highlight}}.ifni760{flex-direction:column;gap:16px;min-height:100vh;padding:16px;display:flex}.ifni761{color:var(--pdt-text);margin:0;font-size:18px;font-weight:600;line-height:1.3}.ifni762{color:var(--pdt-text)}.fmw3vj0{flex-direction:column;align-items:flex-start;gap:8px;max-width:420px;padding:16px;display:flex}.fmw3vj1{color:var(--pdt-text);margin:0;font-size:13px;font-weight:600}.fmw3vj2{color:var(--pdt-text-muted);margin:0;font-size:12px;line-height:16px}.fmw3vj3{flex-wrap:wrap;align-items:center;gap:8px;display:flex}@keyframes kewyeuj{0%{box-shadow:var(--pdt-diff-flash-start)}to{box-shadow:var(--pdt-diff-flash-end)}}.kewyeu0{white-space:nowrap;background-color:var(--pdt-surface-muted);min-height:18px;color:var(--pdt-text-muted);border:1px solid #0000;border-radius:4px;justify-content:center;align-items:center;gap:4px;padding:1px 6px;font-size:11px;line-height:1.2;display:inline-flex}.kewyeu1{background-color:var(--pdt-surface-muted);border-color:var(--pdt-border);color:var(--pdt-text-muted)}.kewyeu2{background-color:color-mix(in srgb, var(--pdt-info) 12%, transparent);border-color:color-mix(in srgb, var(--pdt-info) 24%, transparent);color:var(--pdt-info)}.kewyeu3{background-color:color-mix(in srgb, var(--pdt-success) 12%, transparent);border-color:color-mix(in srgb, var(--pdt-success) 24%, transparent);color:var(--pdt-success)}.kewyeu4{background-color:color-mix(in srgb, var(--pdt-warning) 12%, transparent);border-color:color-mix(in srgb, var(--pdt-warning) 24%, transparent);color:var(--pdt-warning)}.kewyeu5{background-color:color-mix(in srgb, var(--pdt-danger) 12%, transparent);border-color:color-mix(in srgb, var(--pdt-danger) 24%, transparent);color:var(--pdt-danger)}.kewyeu6{border:1px solid var(--pdt-border);white-space:nowrap;min-height:18px;color:var(--pdt-text);background-color:#0000;border-radius:4px;align-items:center;padding:1px 6px;font-size:11px;line-height:1.2;display:inline-flex}.kewyeu7{background-color:var(--pdt-surface-muted);border-color:var(--pdt-border)}.kewyeu8{background-color:color-mix(in srgb, var(--pdt-accent) 10%, transparent);border-color:color-mix(in srgb, var(--pdt-accent) 24%, transparent)}.kewyeu9{background-color:color-mix(in srgb, var(--pdt-info) 10%, transparent);border-color:color-mix(in srgb, var(--pdt-info) 24%, transparent)}.kewyeua{background-color:var(--pdt-event-snapshot-bg);border-color:var(--pdt-event-snapshot-border)}.kewyeub{background-color:color-mix(in srgb, var(--pdt-success) 10%, transparent);border-color:color-mix(in srgb, var(--pdt-success) 24%, transparent)}.kewyeuc{background-color:var(--pdt-event-history-bg);border-color:var(--pdt-event-history-border)}.kewyeud{background-color:var(--pdt-event-popstate-bg);border-color:var(--pdt-event-popstate-border)}.kewyeue{background-color:var(--pdt-event-prepare-bg);border-color:var(--pdt-event-prepare-border)}.kewyeuf{min-height:18px;color:var(--pdt-text-muted);align-items:center;gap:6px;font-size:12px;display:inline-flex}.kewyeug{background-color:var(--pdt-border);border-radius:50%;width:10px;height:10px}.kewyeuh{background-color:var(--pdt-success);box-shadow:0 0 0 2px color-mix(in srgb, var(--pdt-success) 30%, transparent)}.kewyeui{background-color:var(--pdt-border);box-shadow:inset 0 0 0 1px var(--pdt-text-muted)}.kewyeuk{flex-wrap:wrap;gap:4px;margin-top:4px;font-size:11px;display:flex}.kewyeul{flex-wrap:wrap;gap:4px;margin-top:0;font-size:11px;display:flex}.kewyeum{border:1px solid #0000;border-radius:4px;padding:1px 6px;font-weight:600}.kewyeun{background-color:var(--pdt-diff-added-bg);border-color:var(--pdt-diff-added-border);color:var(--pdt-diff-added-text)}.kewyeuo{background-color:var(--pdt-diff-changed-bg);border-color:var(--pdt-diff-changed-border);color:var(--pdt-diff-changed-text)}.kewyeup{background-color:var(--pdt-diff-removed-bg);border-color:var(--pdt-diff-removed-border);color:var(--pdt-diff-removed-text)}.kewyeuq{animation:.8s ease-in-out kewyeuj}@media (prefers-reduced-motion:reduce){.kewyeuq{animation:none}}._11l3mw40{--pdt-bg:#fff;--pdt-surface:#fff;--pdt-surface-muted:#f1f3f4;--pdt-border:#d3e3fd;--pdt-border-strong:#a8c7fa;--pdt-text:#1f1f1f;--pdt-text-muted:#474747;--pdt-accent:#0b57d0;--pdt-on-accent:#fff;--pdt-info:#00639b;--pdt-success:#137333;--pdt-warning:#b06000;--pdt-danger:#b3261e;--pdt-code-bg:#1f1f1f0f;--pdt-shadow-focus:0 0 0 2px #0b57d059;--pdt-event-snapshot-bg:#6366f11f;--pdt-event-snapshot-border:#6366f147;--pdt-event-history-bg:#9333ea1f;--pdt-event-history-border:#9333ea47;--pdt-event-popstate-bg:#3b82f61f;--pdt-event-popstate-border:#3b82f647;--pdt-event-prepare-bg:#d977061f;--pdt-event-prepare-border:#d9770647;--pdt-diff-added-bg:#22863a1f;--pdt-diff-added-border:#22863a59;--pdt-diff-added-text:#166534;--pdt-diff-changed-bg:#735c0f1f;--pdt-diff-changed-border:#735c0f59;--pdt-diff-changed-text:#735c0f;--pdt-diff-removed-bg:#cb24311f;--pdt-diff-removed-border:#cb243159;--pdt-diff-removed-text:#b3212c;--pdt-diff-flash-start:0 0 0 0 #0b57d066;--pdt-diff-flash-end:0 0 0 12px #0b57d000;background-color:var(--pdt-bg);color:var(--pdt-text);min-height:100%;font-size:12px;line-height:16px}._11l3mw40[data-color-scheme=light]{--pdt-bg:#fff;--pdt-surface:#fff;--pdt-surface-muted:#f1f3f4;--pdt-border:#d3e3fd;--pdt-border-strong:#a8c7fa;--pdt-text:#1f1f1f;--pdt-text-muted:#474747;--pdt-accent:#0b57d0;--pdt-on-accent:#fff;--pdt-info:#00639b;--pdt-success:#137333;--pdt-warning:#b06000;--pdt-danger:#b3261e;--pdt-code-bg:#1f1f1f0f;--pdt-shadow-focus:0 0 0 2px #0b57d059;--pdt-event-snapshot-bg:#6366f11f;--pdt-event-snapshot-border:#6366f147;--pdt-event-history-bg:#9333ea1f;--pdt-event-history-border:#9333ea47;--pdt-event-popstate-bg:#3b82f61f;--pdt-event-popstate-border:#3b82f647;--pdt-event-prepare-bg:#d977061f;--pdt-event-prepare-border:#d9770647;--pdt-diff-added-bg:#22863a1f;--pdt-diff-added-border:#22863a59;--pdt-diff-added-text:#166534;--pdt-diff-changed-bg:#735c0f1f;--pdt-diff-changed-border:#735c0f59;--pdt-diff-changed-text:#735c0f;--pdt-diff-removed-bg:#cb24311f;--pdt-diff-removed-border:#cb243159;--pdt-diff-removed-text:#b3212c;--pdt-diff-flash-start:0 0 0 0 #0b57d066;--pdt-diff-flash-end:0 0 0 12px #0b57d000;--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}._11l3mw40[data-color-scheme=dark]{--pdt-bg:#1f1f1f;--pdt-surface:#1f1f1f;--pdt-surface-muted:#292a2d;--pdt-border:#3c4043;--pdt-border-strong:#5f6368;--pdt-text:#e3e3e3;--pdt-text-muted:#c4c7c5;--pdt-accent:#a8c7fa;--pdt-on-accent:#062e6f;--pdt-info:#78d9ec;--pdt-success:#81c995;--pdt-warning:#ffb95c;--pdt-danger:#f2b8b5;--pdt-code-bg:#e3e3e314;--pdt-shadow-focus:0 0 0 2px #a8c7fa66;--pdt-event-snapshot-bg:#818cf82e;--pdt-event-snapshot-border:#818cf857;--pdt-event-history-bg:#c084fc29;--pdt-event-history-border:#c084fc52;--pdt-event-popstate-bg:#60a5fa29;--pdt-event-popstate-border:#60a5fa52;--pdt-event-prepare-bg:#fb923c29;--pdt-event-prepare-border:#fb923c52;--pdt-diff-added-bg:#4ade8029;--pdt-diff-added-border:#4ade8059;--pdt-diff-added-text:#86efac;--pdt-diff-changed-bg:#fbbf2429;--pdt-diff-changed-border:#fbbf2459;--pdt-diff-changed-text:#fde68a;--pdt-diff-removed-bg:#f8717129;--pdt-diff-removed-border:#f8717159;--pdt-diff-removed-text:#fca5a5;--pdt-diff-flash-start:0 0 0 0 #a8c7fa73;--pdt-diff-flash-end:0 0 0 12px #a8c7fa00;--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}._11l3mw40:not([data-color-scheme]){--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light dark}@media (prefers-color-scheme:dark){._11l3mw40:not([data-color-scheme]){--lightningcss-light: ;--lightningcss-dark:initial}}._11l3mw40{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,Arial,sans-serif}._11l3mw40,._11l3mw40 *{box-sizing:border-box}._11l3mw40 a{color:var(--pdt-accent)}._11l3mw40 button,._11l3mw40 input,._11l3mw40 select,._11l3mw40 textarea{font:inherit}._11l3mw40 pre,._11l3mw40 code{font-family:ui-monospace,SFMono-Regular,Consolas,Liberation Mono,Menlo,monospace}@media (prefers-color-scheme:dark){._11l3mw40{--pdt-bg:#1f1f1f;--pdt-surface:#1f1f1f;--pdt-surface-muted:#292a2d;--pdt-border:#3c4043;--pdt-border-strong:#5f6368;--pdt-text:#e3e3e3;--pdt-text-muted:#c4c7c5;--pdt-accent:#a8c7fa;--pdt-on-accent:#062e6f;--pdt-info:#78d9ec;--pdt-success:#81c995;--pdt-warning:#ffb95c;--pdt-danger:#f2b8b5;--pdt-code-bg:#e3e3e314;--pdt-shadow-focus:0 0 0 2px #a8c7fa66;--pdt-event-snapshot-bg:#818cf82e;--pdt-event-snapshot-border:#818cf857;--pdt-event-history-bg:#c084fc29;--pdt-event-history-border:#c084fc52;--pdt-event-popstate-bg:#60a5fa29;--pdt-event-popstate-border:#60a5fa52;--pdt-event-prepare-bg:#fb923c29;--pdt-event-prepare-border:#fb923c52;--pdt-diff-added-bg:#4ade8029;--pdt-diff-added-border:#4ade8059;--pdt-diff-added-text:#86efac;--pdt-diff-changed-bg:#fbbf2429;--pdt-diff-changed-border:#fbbf2459;--pdt-diff-changed-text:#fde68a;--pdt-diff-removed-bg:#f8717129;--pdt-diff-removed-border:#f8717159;--pdt-diff-removed-text:#fca5a5;--pdt-diff-flash-start:0 0 0 0 #a8c7fa73;--pdt-diff-flash-end:0 0 0 12px #a8c7fa00}._11l3mw40[data-color-scheme=light]{--pdt-bg:#fff;--pdt-surface:#fff;--pdt-surface-muted:#f1f3f4;--pdt-border:#d3e3fd;--pdt-border-strong:#a8c7fa;--pdt-text:#1f1f1f;--pdt-text-muted:#474747;--pdt-accent:#0b57d0;--pdt-on-accent:#fff;--pdt-info:#00639b;--pdt-success:#137333;--pdt-warning:#b06000;--pdt-danger:#b3261e;--pdt-code-bg:#1f1f1f0f;--pdt-shadow-focus:0 0 0 2px #0b57d059;--pdt-event-snapshot-bg:#6366f11f;--pdt-event-snapshot-border:#6366f147;--pdt-event-history-bg:#9333ea1f;--pdt-event-history-border:#9333ea47;--pdt-event-popstate-bg:#3b82f61f;--pdt-event-popstate-border:#3b82f647;--pdt-event-prepare-bg:#d977061f;--pdt-event-prepare-border:#d9770647;--pdt-diff-added-bg:#22863a1f;--pdt-diff-added-border:#22863a59;--pdt-diff-added-text:#166534;--pdt-diff-changed-bg:#735c0f1f;--pdt-diff-changed-border:#735c0f59;--pdt-diff-changed-text:#735c0f;--pdt-diff-removed-bg:#cb24311f;--pdt-diff-removed-border:#cb243159;--pdt-diff-removed-text:#b3212c;--pdt-diff-flash-start:0 0 0 0 #0b57d066;--pdt-diff-flash-end:0 0 0 12px #0b57d000}}@media (prefers-color-scheme:light){._11l3mw40[data-color-scheme=dark]{--pdt-bg:#1f1f1f;--pdt-surface:#1f1f1f;--pdt-surface-muted:#292a2d;--pdt-border:#3c4043;--pdt-border-strong:#5f6368;--pdt-text:#e3e3e3;--pdt-text-muted:#c4c7c5;--pdt-accent:#a8c7fa;--pdt-on-accent:#062e6f;--pdt-info:#78d9ec;--pdt-success:#81c995;--pdt-warning:#ffb95c;--pdt-danger:#f2b8b5;--pdt-code-bg:#e3e3e314;--pdt-shadow-focus:0 0 0 2px #a8c7fa66;--pdt-event-snapshot-bg:#818cf82e;--pdt-event-snapshot-border:#818cf857;--pdt-event-history-bg:#c084fc29;--pdt-event-history-border:#c084fc52;--pdt-event-popstate-bg:#60a5fa29;--pdt-event-popstate-border:#60a5fa52;--pdt-event-prepare-bg:#fb923c29;--pdt-event-prepare-border:#fb923c52;--pdt-diff-added-bg:#4ade8029;--pdt-diff-added-border:#4ade8059;--pdt-diff-added-text:#86efac;--pdt-diff-changed-bg:#fbbf2429;--pdt-diff-changed-border:#fbbf2459;--pdt-diff-changed-text:#fde68a;--pdt-diff-removed-bg:#f8717129;--pdt-diff-removed-border:#f8717159;--pdt-diff-removed-text:#fca5a5;--pdt-diff-flash-start:0 0 0 0 #a8c7fa73;--pdt-diff-flash-end:0 0 0 12px #a8c7fa00}}@media (prefers-reduced-motion:reduce){._11l3mw40 *{scroll-behavior:auto;transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}}.ca0gms0{border:1px solid var(--pdt-border);background-color:var(--pdt-surface);border-radius:4px;flex-direction:column;gap:8px;padding:12px;display:flex}.ca0gms1{justify-content:space-between;align-items:center;gap:8px;display:flex}.ca0gms2{color:var(--pdt-text);margin:0;font-size:12px;font-weight:600}.ca0gms3{flex-direction:column;gap:6px;display:flex}.ca0gms4{justify-content:space-between;align-items:center;gap:8px;display:flex}.ca0gms5{color:var(--pdt-text);margin:0;font-size:12px;font-weight:600}.ca0gms6{flex-direction:column;gap:4px;margin:0;padding:0;list-style:none;display:flex}.ca0gms7{border:1px solid var(--pdt-border);color:var(--pdt-text);border-radius:4px;flex-direction:column;gap:4px;padding:8px;display:flex}.ca0gms7>p{color:var(--pdt-text)}.ca0gms8:focus{box-shadow:var(--pdt-shadow-focus);outline:none}.ca0gms9{flex-wrap:wrap;align-items:center;gap:6px;display:flex}.ca0gmsa{color:var(--pdt-text-muted);flex-wrap:wrap;gap:8px;font-size:12px;display:flex}@media (forced-colors:active){.ca0gms8:focus{outline-offset:2px;box-shadow:none;outline:2px solid highlight}}.vzai5r0{border-bottom:1px solid var(--pdt-border);background-color:var(--pdt-surface);align-items:center;gap:0;height:28px;padding:0 4px;display:flex}.vzai5r1{appearance:none;color:var(--pdt-text-muted);cursor:pointer;background-color:#0000;border:0;border-radius:0;align-self:stretch;padding:0 10px;font-size:12px;line-height:16px;transition:background-color .1s,color .1s;position:relative}.vzai5r1:hover:not(:disabled){background-color:color-mix(in srgb, var(--pdt-text) 8%, transparent)}.vzai5r1:focus-visible{box-shadow:var(--pdt-shadow-focus);outline:none}.vzai5r1:disabled{opacity:.6;cursor:default}.vzai5r2{color:var(--pdt-accent);font-weight:600}.vzai5r2:after{content:"";inset-inline:6px;background-color:var(--pdt-accent);height:2px;position:absolute;bottom:0}@media (forced-colors:active){.vzai5r1:focus-visible{outline-offset:-2px;box-shadow:none;outline:2px solid highlight}.vzai5r2:after{background-color:highlight}}._1q96x230{border-bottom:1px solid var(--pdt-border);background-color:var(--pdt-surface);flex-wrap:nowrap;align-items:center;gap:2px;min-width:0;height:27px;padding:0 4px;display:flex;overflow:hidden}._1q96x231{flex:auto;min-width:0}._1q96x232{background-color:var(--pdt-border);flex:0 0 1px;width:1px;height:17px;margin:0 2px}._1q96x233{min-width:26px;max-width:100%;height:26px;color:var(--pdt-text);cursor:pointer;background-color:#0000;border:0;border-radius:2px;flex:none;justify-content:center;align-items:center;gap:4px;padding:0 6px;font-size:12px;line-height:16px;transition:background-color .1s;display:inline-flex}._1q96x233:hover:not(:disabled){background-color:color-mix(in srgb, var(--pdt-text) 10%, transparent)}._1q96x233:focus-visible{box-shadow:var(--pdt-shadow-focus);outline:none}._1q96x233[data-active=true]{background-color:color-mix(in srgb, var(--pdt-accent) 18%, transparent);color:var(--pdt-accent)}._1q96x233[data-presentation=icon]{width:26px;padding:0}._1q96x233:disabled{opacity:.5;cursor:not-allowed}._1q96x233>svg{fill:currentColor;flex:none;width:16px;height:16px}._1q96x234{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}._1q96x233[data-presentation=icon] ._1q96x234{clip:rect(0, 0, 0, 0);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}@media (forced-colors:active){._1q96x233:focus-visible{outline-offset:2px;box-shadow:none;outline:2px solid highlight}}._1m64tse0{flex:1;align-items:stretch;min-width:0;min-height:0;display:flex}._1m64tse1{background-color:var(--pdt-surface);flex-direction:column;flex:auto;min-width:0;display:flex;overflow:hidden}._1m64tse2{border-inline-end:1px solid var(--pdt-border)}._1m64tse3{cursor:col-resize;background-color:#0000;flex:0 0 8px;position:relative}._1m64tse3:focus-visible{outline:none}._1m64tse4{background-color:var(--pdt-border);border-radius:2px;width:2px;position:absolute;top:0;bottom:0;left:50%;transform:translate(-50%)}._1m64tse3:hover ._1m64tse4,._1m64tse3:focus-visible ._1m64tse4{background-color:var(--pdt-accent)}._1m64tse5{background-color:var(--pdt-surface);flex-direction:column;flex:none;min-width:280px;max-width:90%;display:flex;overflow:hidden}@media screen and (width<=688px){._1m64tse0{flex-direction:column;overflow:auto}._1m64tse2{border-inline-end:0;border-bottom:1px solid var(--pdt-border)}._1m64tse3{display:none}._1m64tse5{flex:none;min-width:0;max-width:100%;min-height:12rem;width:100%!important}._1m64tse0[data-narrow-mode=detail] ._1m64tse1{display:none}._1m64tse0[data-narrow-mode=detail] ._1m64tse5{flex:auto;min-height:0}}@media (forced-colors:active){._1m64tse3:focus-visible{outline-offset:-2px;box-shadow:none;outline:2px solid highlight}}
|
|
2
2
|
/*$vite$:1*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"devtoolsSurfaces.css.js","names":[],"sources":["../../../src/surfaces/devtoolsSurfaces.css.ts"],"sourcesContent":["import { style } from '@vanilla-extract/css';\n\nexport const card = style({\n display: 'flex',\n flexDirection: 'column',\n gap: '
|
|
1
|
+
{"version":3,"file":"devtoolsSurfaces.css.js","names":[],"sources":["../../../src/surfaces/devtoolsSurfaces.css.ts"],"sourcesContent":["import { globalStyle, style } from '@vanilla-extract/css';\n\nexport const card = style({\n display: 'flex',\n flexDirection: 'column',\n gap: '8px',\n padding: '12px',\n border: '1px solid var(--pdt-border)',\n borderRadius: '4px',\n backgroundColor: 'var(--pdt-surface)',\n});\n\nexport const cardHeader = style({\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n gap: '8px',\n});\n\nexport const cardTitle = style({\n margin: 0,\n fontSize: '12px',\n fontWeight: 600,\n color: 'var(--pdt-text)',\n});\n\nexport const section = style({\n display: 'flex',\n flexDirection: 'column',\n gap: '6px',\n});\n\nexport const sectionHeader = style({\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n gap: '8px',\n});\n\nexport const sectionTitle = style({\n margin: 0,\n fontSize: '12px',\n fontWeight: 600,\n color: 'var(--pdt-text)',\n});\n\nexport const list = style({\n display: 'flex',\n flexDirection: 'column',\n gap: '4px',\n margin: 0,\n padding: 0,\n listStyle: 'none',\n});\n\nexport const listItem = style({\n display: 'flex',\n flexDirection: 'column',\n gap: '4px',\n padding: '8px',\n border: '1px solid var(--pdt-border)',\n borderRadius: '4px',\n color: 'var(--pdt-text)',\n});\n\nglobalStyle(`${listItem} > p`, {\n color: 'var(--pdt-text)',\n});\n\nexport const listItemInteractive = style({\n selectors: {\n '&:focus': {\n outline: 'none',\n boxShadow: 'var(--pdt-shadow-focus)',\n },\n },\n});\n\nglobalStyle(`${listItemInteractive}:focus`, {\n '@media': {\n '(forced-colors: active)': {\n outline: '2px solid Highlight',\n outlineOffset: '2px',\n boxShadow: 'none',\n },\n },\n});\n\nexport const listItemHeader = style({\n display: 'flex',\n flexWrap: 'wrap',\n alignItems: 'center',\n gap: '6px',\n});\n\nexport const listItemMeta = style({\n display: 'flex',\n flexWrap: 'wrap',\n gap: '8px',\n fontSize: '12px',\n color: 'var(--pdt-text-muted)',\n});\n"],"mappings":""}
|
|
@@ -2,9 +2,10 @@ import { root as e } from "./devtoolsTheme.css.js";
|
|
|
2
2
|
import { jsx as t } from "react/jsx-runtime";
|
|
3
3
|
//#region src/theme/DevtoolsTheme.tsx
|
|
4
4
|
function n(n) {
|
|
5
|
-
let { children: r } = n;
|
|
5
|
+
let { children: r, colorScheme: i } = n;
|
|
6
6
|
return /* @__PURE__ */ t("div", {
|
|
7
7
|
className: e,
|
|
8
|
+
"data-color-scheme": i,
|
|
8
9
|
children: r
|
|
9
10
|
});
|
|
10
11
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DevtoolsTheme.js","names":[],"sources":["../../../src/theme/DevtoolsTheme.tsx"],"sourcesContent":["import type { JSX, PropsWithChildren } from 'react';\nimport { root } from './devtoolsTheme.css.js';\n\nexport type DevtoolsThemeProps = PropsWithChildren;\n\n/** Provide the root devtools theme wrapper. */\nexport function DevtoolsTheme(props: DevtoolsThemeProps): JSX.Element {\n const { children } = props;\n\n return <div className={root}
|
|
1
|
+
{"version":3,"file":"DevtoolsTheme.js","names":[],"sources":["../../../src/theme/DevtoolsTheme.tsx"],"sourcesContent":["import type { JSX, PropsWithChildren } from 'react';\nimport { root } from './devtoolsTheme.css.js';\n\nexport type DevtoolsColorScheme = 'light' | 'dark';\n\nexport type DevtoolsThemeProps = PropsWithChildren<{\n /** Force the DevTools palette. Omit to follow the operating-system scheme. */\n colorScheme?: DevtoolsColorScheme;\n}>;\n\n/** Provide the root devtools theme wrapper. */\nexport function DevtoolsTheme(props: DevtoolsThemeProps): JSX.Element {\n const { children, colorScheme } = props;\n\n return (\n <div className={root} data-color-scheme={colorScheme}>\n {children}\n </div>\n );\n}\n"],"mappings":";;;AAWA,SAAgB,EAAc,GAAwC;CACpE,IAAM,EAAE,aAAU,mBAAgB;CAElC,OACE,kBAAC,OAAD;EAAK,WAAW;EAAM,qBAAmB;EACtC;CACE,CAAA;AAET"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"devtoolsTheme.css.js","names":[],"sources":["../../../src/theme/devtoolsTheme.css.ts"],"sourcesContent":["import { globalStyle, style } from '@vanilla-extract/css';\n\
|
|
1
|
+
{"version":3,"file":"devtoolsTheme.css.js","names":[],"sources":["../../../src/theme/devtoolsTheme.css.ts"],"sourcesContent":["import { globalStyle, style } from '@vanilla-extract/css';\n\nconst lightTheme = {\n '--pdt-bg': '#ffffff',\n '--pdt-surface': '#ffffff',\n '--pdt-surface-muted': '#f1f3f4',\n '--pdt-border': '#d3e3fd',\n '--pdt-border-strong': '#a8c7fa',\n '--pdt-text': '#1f1f1f',\n '--pdt-text-muted': '#474747',\n '--pdt-accent': '#0b57d0',\n '--pdt-on-accent': '#ffffff',\n '--pdt-info': '#00639b',\n '--pdt-success': '#137333',\n '--pdt-warning': '#b06000',\n '--pdt-danger': '#b3261e',\n '--pdt-code-bg': 'rgba(31, 31, 31, 0.06)',\n '--pdt-shadow-focus': '0 0 0 2px rgba(11, 87, 208, 0.35)',\n '--pdt-event-snapshot-bg': 'rgba(99, 102, 241, 0.12)',\n '--pdt-event-snapshot-border': 'rgba(99, 102, 241, 0.28)',\n '--pdt-event-history-bg': 'rgba(147, 51, 234, 0.12)',\n '--pdt-event-history-border': 'rgba(147, 51, 234, 0.28)',\n '--pdt-event-popstate-bg': 'rgba(59, 130, 246, 0.12)',\n '--pdt-event-popstate-border': 'rgba(59, 130, 246, 0.28)',\n '--pdt-event-prepare-bg': 'rgba(217, 119, 6, 0.12)',\n '--pdt-event-prepare-border': 'rgba(217, 119, 6, 0.28)',\n '--pdt-diff-added-bg': 'rgba(34, 134, 58, 0.12)',\n '--pdt-diff-added-border': 'rgba(34, 134, 58, 0.35)',\n '--pdt-diff-added-text': '#166534',\n '--pdt-diff-changed-bg': 'rgba(115, 92, 15, 0.12)',\n '--pdt-diff-changed-border': 'rgba(115, 92, 15, 0.35)',\n '--pdt-diff-changed-text': '#735c0f',\n '--pdt-diff-removed-bg': 'rgba(203, 36, 49, 0.12)',\n '--pdt-diff-removed-border': 'rgba(203, 36, 49, 0.35)',\n '--pdt-diff-removed-text': '#b3212c',\n '--pdt-diff-flash-start': '0 0 0 0 rgba(11, 87, 208, 0.4)',\n '--pdt-diff-flash-end': '0 0 0 12px rgba(11, 87, 208, 0)',\n};\n\nconst darkTheme = {\n '--pdt-bg': '#1f1f1f',\n '--pdt-surface': '#1f1f1f',\n '--pdt-surface-muted': '#292a2d',\n '--pdt-border': '#3c4043',\n '--pdt-border-strong': '#5f6368',\n '--pdt-text': '#e3e3e3',\n '--pdt-text-muted': '#c4c7c5',\n '--pdt-accent': '#a8c7fa',\n '--pdt-on-accent': '#062e6f',\n '--pdt-info': '#78d9ec',\n '--pdt-success': '#81c995',\n '--pdt-warning': '#ffb95c',\n '--pdt-danger': '#f2b8b5',\n '--pdt-code-bg': 'rgba(227, 227, 227, 0.08)',\n '--pdt-shadow-focus': '0 0 0 2px rgba(168, 199, 250, 0.4)',\n '--pdt-event-snapshot-bg': 'rgba(129, 140, 248, 0.18)',\n '--pdt-event-snapshot-border': 'rgba(129, 140, 248, 0.34)',\n '--pdt-event-history-bg': 'rgba(192, 132, 252, 0.16)',\n '--pdt-event-history-border': 'rgba(192, 132, 252, 0.32)',\n '--pdt-event-popstate-bg': 'rgba(96, 165, 250, 0.16)',\n '--pdt-event-popstate-border': 'rgba(96, 165, 250, 0.32)',\n '--pdt-event-prepare-bg': 'rgba(251, 146, 60, 0.16)',\n '--pdt-event-prepare-border': 'rgba(251, 146, 60, 0.32)',\n '--pdt-diff-added-bg': 'rgba(74, 222, 128, 0.16)',\n '--pdt-diff-added-border': 'rgba(74, 222, 128, 0.35)',\n '--pdt-diff-added-text': '#86efac',\n '--pdt-diff-changed-bg': 'rgba(251, 191, 36, 0.16)',\n '--pdt-diff-changed-border': 'rgba(251, 191, 36, 0.35)',\n '--pdt-diff-changed-text': '#fde68a',\n '--pdt-diff-removed-bg': 'rgba(248, 113, 113, 0.16)',\n '--pdt-diff-removed-border': 'rgba(248, 113, 113, 0.35)',\n '--pdt-diff-removed-text': '#fca5a5',\n '--pdt-diff-flash-start': '0 0 0 0 rgba(168, 199, 250, 0.45)',\n '--pdt-diff-flash-end': '0 0 0 12px rgba(168, 199, 250, 0)',\n};\n\nexport const root = style({\n vars: lightTheme,\n backgroundColor: 'var(--pdt-bg)',\n color: 'var(--pdt-text)',\n minHeight: '100%',\n fontSize: '12px',\n lineHeight: '16px',\n '@media': {\n '(prefers-color-scheme: dark)': {\n vars: darkTheme,\n },\n },\n});\n\nglobalStyle(`${root}[data-color-scheme='light']`, {\n vars: lightTheme,\n colorScheme: 'light',\n '@media': {\n '(prefers-color-scheme: dark)': {\n vars: lightTheme,\n },\n },\n});\n\nglobalStyle(`${root}[data-color-scheme='dark']`, {\n vars: darkTheme,\n colorScheme: 'dark',\n '@media': {\n '(prefers-color-scheme: light)': {\n vars: darkTheme,\n },\n },\n});\n\nglobalStyle(`${root}:not([data-color-scheme])`, {\n colorScheme: 'light dark',\n});\n\nglobalStyle(`${root}`, {\n fontFamily:\n '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Helvetica, Arial, sans-serif',\n});\n\nglobalStyle(`${root}, ${root} *`, {\n boxSizing: 'border-box',\n});\n\nglobalStyle(`${root} a`, {\n color: 'var(--pdt-accent)',\n});\n\nglobalStyle(`${root} button, ${root} input, ${root} select, ${root} textarea`, {\n font: 'inherit',\n});\n\nglobalStyle(`${root} pre, ${root} code`, {\n fontFamily:\n 'ui-monospace, \"SFMono-Regular\", Consolas, \"Liberation Mono\", Menlo, monospace',\n});\n\nglobalStyle(`${root} *`, {\n '@media': {\n '(prefers-reduced-motion: reduce)': {\n animationDuration: '0.01ms !important',\n animationIterationCount: '1 !important',\n scrollBehavior: 'auto',\n transitionDuration: '0.01ms !important',\n },\n },\n});\n"],"mappings":""}
|
|
@@ -1,22 +1,24 @@
|
|
|
1
|
-
import { button as e,
|
|
2
|
-
import { jsx as
|
|
1
|
+
import { button as e, buttonLabel as t } from "./devtoolsToolbar.css.js";
|
|
2
|
+
import { jsx as n, jsxs as r } from "react/jsx-runtime";
|
|
3
3
|
//#region src/toolbar/DevtoolsToolbarButton.tsx
|
|
4
|
-
function
|
|
5
|
-
let { active:
|
|
6
|
-
return
|
|
4
|
+
function i(i) {
|
|
5
|
+
let { active: a = !1, disabled: o, icon: s, label: c, onClick: l, presentation: u = "label", pressed: d, title: f } = i;
|
|
6
|
+
return /* @__PURE__ */ r("button", {
|
|
7
7
|
type: "button",
|
|
8
|
-
className:
|
|
9
|
-
|
|
8
|
+
className: e,
|
|
9
|
+
"data-active": a || void 0,
|
|
10
|
+
"data-presentation": u,
|
|
11
|
+
disabled: o,
|
|
10
12
|
title: f,
|
|
11
13
|
"aria-pressed": d,
|
|
12
|
-
onClick:
|
|
13
|
-
children: [
|
|
14
|
-
className:
|
|
15
|
-
children:
|
|
14
|
+
onClick: l,
|
|
15
|
+
children: [s ?? null, /* @__PURE__ */ n("span", {
|
|
16
|
+
className: t,
|
|
17
|
+
children: c
|
|
16
18
|
})]
|
|
17
19
|
});
|
|
18
20
|
}
|
|
19
21
|
//#endregion
|
|
20
|
-
export {
|
|
22
|
+
export { i as DevtoolsToolbarButton };
|
|
21
23
|
|
|
22
24
|
//# sourceMappingURL=DevtoolsToolbarButton.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DevtoolsToolbarButton.js","names":[],"sources":["../../../src/toolbar/DevtoolsToolbarButton.tsx"],"sourcesContent":["import type { JSX, ReactNode } from 'react';\nimport { button,
|
|
1
|
+
{"version":3,"file":"DevtoolsToolbarButton.js","names":[],"sources":["../../../src/toolbar/DevtoolsToolbarButton.tsx"],"sourcesContent":["import type { JSX, ReactNode } from 'react';\nimport { button, buttonLabel } from './devtoolsToolbar.css.js';\n\ntype DevtoolsToolbarButtonCommonProps = {\n label: ReactNode;\n onClick: () => void;\n disabled?: boolean;\n active?: boolean;\n pressed?: boolean;\n};\n\nexport type DevtoolsToolbarButtonProps = DevtoolsToolbarButtonCommonProps &\n (\n | {\n presentation?: 'label';\n title?: string;\n icon?: ReactNode;\n }\n | {\n presentation: 'icon';\n title: string;\n icon: ReactNode;\n }\n );\n\n/** Render a toolbar button with optional active and pressed states. */\nexport function DevtoolsToolbarButton(\n props: DevtoolsToolbarButtonProps,\n): JSX.Element {\n const {\n active = false,\n disabled,\n icon,\n label,\n onClick,\n presentation = 'label',\n pressed,\n title,\n } = props;\n\n return (\n <button\n type=\"button\"\n className={button}\n data-active={active || undefined}\n data-presentation={presentation}\n disabled={disabled}\n title={title}\n aria-pressed={pressed}\n onClick={onClick}\n >\n {icon ?? null}\n <span className={buttonLabel}>{label}</span>\n </button>\n );\n}\n"],"mappings":";;;AA0BA,SAAgB,EACd,GACa;CACb,IAAM,EACJ,YAAS,IACT,aACA,SACA,UACA,YACA,kBAAe,SACf,YACA,aACE;CAEJ,OACE,kBAAC,UAAD;EACE,MAAK;EACL,WAAW;EACX,eAAa,KAAU,KAAA;EACvB,qBAAmB;EACT;EACH;EACP,gBAAc;EACL;EARX,UAAA,CAUG,KAAQ,MACT,kBAAC,QAAD;GAAM,WAAW;GAAc,UAAA;EAAY,CAAA,CACrC;;AAEZ"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/* empty css */
|
|
2
2
|
//#region src/toolbar/devtoolsToolbar.css.ts
|
|
3
|
-
var e = "_1q96x230", t = "_1q96x231", n = "_1q96x232", r = "_1q96x233", i = "_1q96x234"
|
|
3
|
+
var e = "_1q96x230", t = "_1q96x231", n = "_1q96x232", r = "_1q96x233", i = "_1q96x234";
|
|
4
4
|
//#endregion
|
|
5
|
-
export { r as button,
|
|
5
|
+
export { r as button, i as buttonLabel, t as grow, n as separator, e as toolbar };
|
|
6
6
|
|
|
7
7
|
//# sourceMappingURL=devtoolsToolbar.css.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"devtoolsToolbar.css.js","names":[],"sources":["../../../src/toolbar/devtoolsToolbar.css.ts"],"sourcesContent":["import { style } from '@vanilla-extract/css';\n\nexport const toolbar = style({\n display: 'flex',\n alignItems: 'center',\n flexWrap: '
|
|
1
|
+
{"version":3,"file":"devtoolsToolbar.css.js","names":[],"sources":["../../../src/toolbar/devtoolsToolbar.css.ts"],"sourcesContent":["import { globalStyle, style } from '@vanilla-extract/css';\n\nexport const toolbar = style({\n display: 'flex',\n alignItems: 'center',\n flexWrap: 'nowrap',\n gap: '2px',\n height: '27px',\n padding: '0 4px',\n borderBottom: '1px solid var(--pdt-border)',\n backgroundColor: 'var(--pdt-surface)',\n minWidth: 0,\n overflow: 'hidden',\n});\n\nexport const grow = style({\n flex: '1 1 auto',\n minWidth: 0,\n});\n\nexport const separator = style({\n flex: '0 0 1px',\n width: '1px',\n height: '17px',\n margin: '0 2px',\n backgroundColor: 'var(--pdt-border)',\n});\n\nexport const button = style({\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n gap: '4px',\n flex: '0 0 auto',\n maxWidth: '100%',\n height: '26px',\n minWidth: '26px',\n padding: '0 6px',\n border: 0,\n borderRadius: '2px',\n backgroundColor: 'transparent',\n color: 'var(--pdt-text)',\n fontSize: '12px',\n lineHeight: '16px',\n cursor: 'pointer',\n transition: 'background-color 100ms ease',\n selectors: {\n '&:hover:not(:disabled)': {\n backgroundColor: 'color-mix(in srgb, var(--pdt-text) 10%, transparent)',\n },\n '&:focus-visible': {\n outline: 'none',\n boxShadow: 'var(--pdt-shadow-focus)',\n },\n \"&[data-active='true']\": {\n backgroundColor: 'color-mix(in srgb, var(--pdt-accent) 18%, transparent)',\n color: 'var(--pdt-accent)',\n },\n \"&[data-presentation='icon']\": {\n width: '26px',\n padding: 0,\n },\n '&:disabled': {\n opacity: 0.5,\n cursor: 'not-allowed',\n },\n },\n});\n\nglobalStyle(`${button} > svg`, {\n flex: '0 0 auto',\n width: '16px',\n height: '16px',\n fill: 'currentColor',\n});\n\nexport const buttonLabel = style({\n minWidth: 0,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n});\n\nglobalStyle(`${button}[data-presentation='icon'] ${buttonLabel}`, {\n position: 'absolute',\n width: '1px',\n height: '1px',\n padding: 0,\n margin: '-1px',\n overflow: 'hidden',\n clip: 'rect(0, 0, 0, 0)',\n whiteSpace: 'nowrap',\n border: 0,\n});\n\nglobalStyle(`${button}:focus-visible`, {\n '@media': {\n '(forced-colors: active)': {\n outline: '2px solid Highlight',\n outlineOffset: '2px',\n boxShadow: 'none',\n },\n },\n});\n"],"mappings":""}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DevtoolsSelect.d.ts","sourceRoot":"","sources":["../../../src/controls/DevtoolsSelect.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"DevtoolsSelect.d.ts","sourceRoot":"","sources":["../../../src/controls/DevtoolsSelect.tsx"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,kBAAkB,EACvB,KAAK,GAAG,EACR,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAGf,MAAM,MAAM,oBAAoB,GAAG;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,SAAS,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC,KAAK,EAAE,SAAS,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,kBAAkB,CAAC,iBAAiB,CAAC,CAAC;IAChD,OAAO,EAAE,SAAS,oBAAoB,EAAE,CAAC;CAC1C,CAAC;AAGF,wBAAgB,cAAc,CAAC,KAAK,EAAE,mBAAmB,GAAG,GAAG,CAAC,OAAO,CAwBtE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"devtoolsEmptyState.css.d.ts","sourceRoot":"","sources":["../../../src/empty_state/devtoolsEmptyState.css.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,IAAI,QAOf,CAAC;AAEH,eAAO,MAAM,KAAK,
|
|
1
|
+
{"version":3,"file":"devtoolsEmptyState.css.d.ts","sourceRoot":"","sources":["../../../src/empty_state/devtoolsEmptyState.css.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,IAAI,QAOf,CAAC;AAEH,eAAO,MAAM,KAAK,QAKhB,CAAC;AAEH,eAAO,MAAM,WAAW,QAKtB,CAAC;AAEH,eAAO,MAAM,OAAO,QAKlB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"devtoolsFeedback.css.d.ts","sourceRoot":"","sources":["../../../src/feedback/devtoolsFeedback.css.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,KAAK,QAchB,CAAC;AAEH,eAAO,MAAM,YAAY,QAIvB,CAAC;AAEH,eAAO,MAAM,SAAS,QAIpB,CAAC;AAEH,eAAO,MAAM,YAAY,QAIvB,CAAC;AAEH,eAAO,MAAM,YAAY,QAIvB,CAAC;AAEH,eAAO,MAAM,WAAW,QAItB,CAAC;AAEH,eAAO,MAAM,IAAI,QAYf,CAAC;AAEH,eAAO,MAAM,WAAW,QAGtB,CAAC;AAEH,eAAO,MAAM,cAAc,QAGzB,CAAC;AAEH,eAAO,MAAM,UAAU,QAGrB,CAAC;AAEH,eAAO,MAAM,YAAY,QAGvB,CAAC;AAEH,eAAO,MAAM,WAAW,QAGtB,CAAC;AAEH,eAAO,MAAM,WAAW,QAGtB,CAAC;AAEH,eAAO,MAAM,YAAY,QAGvB,CAAC;AAEH,eAAO,MAAM,WAAW,QAGtB,CAAC;AAEH,eAAO,MAAM,WAAW,QAOtB,CAAC;AAEH,eAAO,MAAM,SAAS,QAKpB,CAAC;AAEH,eAAO,MAAM,WAAW,QAItB,CAAC;AAEH,eAAO,MAAM,UAAU,QAGrB,CAAC;AAWH,eAAO,MAAM,QAAQ,QAMnB,CAAC;AAEH,eAAO,MAAM,UAAU,QAMrB,CAAC;AAEH,eAAO,MAAM,QAAQ,QAKnB,CAAC;AAEH,eAAO,MAAM,aAAa,QAIxB,CAAC;AAEH,eAAO,MAAM,eAAe,QAI1B,CAAC;AAEH,eAAO,MAAM,eAAe,QAI1B,CAAC;AAEH,eAAO,MAAM,aAAa,
|
|
1
|
+
{"version":3,"file":"devtoolsFeedback.css.d.ts","sourceRoot":"","sources":["../../../src/feedback/devtoolsFeedback.css.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,KAAK,QAchB,CAAC;AAEH,eAAO,MAAM,YAAY,QAIvB,CAAC;AAEH,eAAO,MAAM,SAAS,QAIpB,CAAC;AAEH,eAAO,MAAM,YAAY,QAIvB,CAAC;AAEH,eAAO,MAAM,YAAY,QAIvB,CAAC;AAEH,eAAO,MAAM,WAAW,QAItB,CAAC;AAEH,eAAO,MAAM,IAAI,QAYf,CAAC;AAEH,eAAO,MAAM,WAAW,QAGtB,CAAC;AAEH,eAAO,MAAM,cAAc,QAGzB,CAAC;AAEH,eAAO,MAAM,UAAU,QAGrB,CAAC;AAEH,eAAO,MAAM,YAAY,QAGvB,CAAC;AAEH,eAAO,MAAM,WAAW,QAGtB,CAAC;AAEH,eAAO,MAAM,WAAW,QAGtB,CAAC;AAEH,eAAO,MAAM,YAAY,QAGvB,CAAC;AAEH,eAAO,MAAM,WAAW,QAGtB,CAAC;AAEH,eAAO,MAAM,WAAW,QAOtB,CAAC;AAEH,eAAO,MAAM,SAAS,QAKpB,CAAC;AAEH,eAAO,MAAM,WAAW,QAItB,CAAC;AAEH,eAAO,MAAM,UAAU,QAGrB,CAAC;AAWH,eAAO,MAAM,QAAQ,QAMnB,CAAC;AAEH,eAAO,MAAM,UAAU,QAMrB,CAAC;AAEH,eAAO,MAAM,QAAQ,QAKnB,CAAC;AAEH,eAAO,MAAM,aAAa,QAIxB,CAAC;AAEH,eAAO,MAAM,eAAe,QAI1B,CAAC;AAEH,eAAO,MAAM,eAAe,QAI1B,CAAC;AAEH,eAAO,MAAM,aAAa,QAOxB,CAAC"}
|
package/lib/types/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { DevtoolsTheme, type DevtoolsThemeProps, } from './theme/DevtoolsTheme.js';
|
|
1
|
+
export { DevtoolsTheme, type DevtoolsColorScheme, type DevtoolsThemeProps, } from './theme/DevtoolsTheme.js';
|
|
2
2
|
export { DevtoolsBadge, type DevtoolsBadgeProps, } from './feedback/DevtoolsBadge.js';
|
|
3
3
|
export { DevtoolsPill, type DevtoolsPillProps, } from './feedback/DevtoolsPill.js';
|
|
4
4
|
export { DevtoolsStatusLight, type DevtoolsStatusLightProps, } from './feedback/DevtoolsStatusLight.js';
|
|
@@ -15,5 +15,5 @@ export { DevtoolsTabs, type DevtoolsTabItem, type DevtoolsTabsProps, } from './n
|
|
|
15
15
|
export { DevtoolsToolbar, DevtoolsToolbarGrow, type DevtoolsToolbarProps, } from './toolbar/DevtoolsToolbar.js';
|
|
16
16
|
export { DevtoolsToolbarButton, type DevtoolsToolbarButtonProps, } from './toolbar/DevtoolsToolbarButton.js';
|
|
17
17
|
export { DevtoolsToolbarSeparator } from './toolbar/DevtoolsToolbarSeparator.js';
|
|
18
|
-
export { DevtoolsSplitView, type DevtoolsSplitViewProps, } from './layout/DevtoolsSplitView.js';
|
|
18
|
+
export { DevtoolsSplitView, type DevtoolsSplitViewNarrowMode, type DevtoolsSplitViewProps, } from './layout/DevtoolsSplitView.js';
|
|
19
19
|
//# sourceMappingURL=index.d.ts.map
|
package/lib/types/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EACb,KAAK,kBAAkB,GACxB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,aAAa,EACb,KAAK,kBAAkB,GACxB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACL,YAAY,EACZ,KAAK,iBAAiB,GACvB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACL,mBAAmB,EACnB,KAAK,wBAAwB,GAC9B,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EACL,iBAAiB,EACjB,KAAK,qBAAqB,EAC1B,KAAK,sBAAsB,GAC5B,MAAM,iCAAiC,CAAC;AACzC,OAAO,EACL,cAAc,EACd,KAAK,mBAAmB,GACzB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EACL,cAAc,EACd,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,GACzB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EACL,YAAY,EACZ,KAAK,iBAAiB,GACvB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACL,eAAe,EACf,KAAK,oBAAoB,GAC1B,MAAM,+BAA+B,CAAC;AACvC,OAAO,EACL,YAAY,EACZ,gBAAgB,EAChB,KAAK,qBAAqB,EAC1B,KAAK,iBAAiB,GACvB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACL,iBAAiB,EACjB,KAAK,sBAAsB,GAC5B,MAAM,gCAAgC,CAAC;AACxC,OAAO,EACL,iBAAiB,EACjB,KAAK,sBAAsB,GAC5B,MAAM,gCAAgC,CAAC;AACxC,OAAO,EACL,kBAAkB,EAClB,KAAK,uBAAuB,GAC7B,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EACL,YAAY,EACZ,KAAK,eAAe,EACpB,KAAK,iBAAiB,GACvB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EACL,eAAe,EACf,mBAAmB,EACnB,KAAK,oBAAoB,GAC1B,MAAM,8BAA8B,CAAC;AACtC,OAAO,EACL,qBAAqB,EACrB,KAAK,0BAA0B,GAChC,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,wBAAwB,EAAE,MAAM,uCAAuC,CAAC;AACjF,OAAO,EACL,iBAAiB,EACjB,KAAK,sBAAsB,GAC5B,MAAM,+BAA+B,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EACb,KAAK,mBAAmB,EACxB,KAAK,kBAAkB,GACxB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,aAAa,EACb,KAAK,kBAAkB,GACxB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACL,YAAY,EACZ,KAAK,iBAAiB,GACvB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACL,mBAAmB,EACnB,KAAK,wBAAwB,GAC9B,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EACL,iBAAiB,EACjB,KAAK,qBAAqB,EAC1B,KAAK,sBAAsB,GAC5B,MAAM,iCAAiC,CAAC;AACzC,OAAO,EACL,cAAc,EACd,KAAK,mBAAmB,GACzB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EACL,cAAc,EACd,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,GACzB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EACL,YAAY,EACZ,KAAK,iBAAiB,GACvB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACL,eAAe,EACf,KAAK,oBAAoB,GAC1B,MAAM,+BAA+B,CAAC;AACvC,OAAO,EACL,YAAY,EACZ,gBAAgB,EAChB,KAAK,qBAAqB,EAC1B,KAAK,iBAAiB,GACvB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACL,iBAAiB,EACjB,KAAK,sBAAsB,GAC5B,MAAM,gCAAgC,CAAC;AACxC,OAAO,EACL,iBAAiB,EACjB,KAAK,sBAAsB,GAC5B,MAAM,gCAAgC,CAAC;AACxC,OAAO,EACL,kBAAkB,EAClB,KAAK,uBAAuB,GAC7B,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EACL,YAAY,EACZ,KAAK,eAAe,EACpB,KAAK,iBAAiB,GACvB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EACL,eAAe,EACf,mBAAmB,EACnB,KAAK,oBAAoB,GAC1B,MAAM,8BAA8B,CAAC;AACtC,OAAO,EACL,qBAAqB,EACrB,KAAK,0BAA0B,GAChC,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,wBAAwB,EAAE,MAAM,uCAAuC,CAAC;AACjF,OAAO,EACL,iBAAiB,EACjB,KAAK,2BAA2B,EAChC,KAAK,sBAAsB,GAC5B,MAAM,+BAA+B,CAAC"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { type JSX, type ReactNode } from 'react';
|
|
2
|
+
export type DevtoolsSplitViewNarrowMode = 'stack' | 'detail';
|
|
2
3
|
export type DevtoolsSplitViewProps = {
|
|
3
4
|
main: ReactNode;
|
|
4
5
|
sidebar: ReactNode | null;
|
|
@@ -7,6 +8,7 @@ export type DevtoolsSplitViewProps = {
|
|
|
7
8
|
maxSidebarWidth: number;
|
|
8
9
|
onSidebarWidthChange: (width: number) => void;
|
|
9
10
|
sidebarLabel?: string;
|
|
11
|
+
narrowMode?: DevtoolsSplitViewNarrowMode;
|
|
10
12
|
};
|
|
11
13
|
export declare function DevtoolsSplitView(props: DevtoolsSplitViewProps): JSX.Element;
|
|
12
14
|
//# sourceMappingURL=DevtoolsSplitView.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DevtoolsSplitView.d.ts","sourceRoot":"","sources":["../../../src/layout/DevtoolsSplitView.tsx"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,GAAG,EAGR,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAqBf,MAAM,MAAM,sBAAsB,GAAG;IACnC,IAAI,EAAE,SAAS,CAAC;IAChB,OAAO,EAAE,SAAS,GAAG,IAAI,CAAC;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;IACxB,eAAe,EAAE,MAAM,CAAC;IACxB,oBAAoB,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAC9C,YAAY,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"DevtoolsSplitView.d.ts","sourceRoot":"","sources":["../../../src/layout/DevtoolsSplitView.tsx"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,GAAG,EAGR,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAqBf,MAAM,MAAM,2BAA2B,GAAG,OAAO,GAAG,QAAQ,CAAC;AAE7D,MAAM,MAAM,sBAAsB,GAAG;IACnC,IAAI,EAAE,SAAS,CAAC;IAChB,OAAO,EAAE,SAAS,GAAG,IAAI,CAAC;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;IACxB,eAAe,EAAE,MAAM,CAAC;IACxB,oBAAoB,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAC9C,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB,UAAU,CAAC,EAAE,2BAA2B,CAAC;CAC1C,CAAC;AAcF,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,sBAAsB,GAAG,GAAG,CAAC,OAAO,CAmJ5E"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DevtoolsTabs.d.ts","sourceRoot":"","sources":["../../../src/navigation/DevtoolsTabs.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,
|
|
1
|
+
{"version":3,"file":"DevtoolsTabs.d.ts","sourceRoot":"","sources":["../../../src/navigation/DevtoolsTabs.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAiB,SAAS,EAAE,MAAM,OAAO,CAAC;AAG3D,MAAM,MAAM,eAAe,GAAG;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,SAAS,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,KAAK,EAAE,SAAS,eAAe,EAAE,CAAC;IAClC,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAmDF,wBAAgB,YAAY,CAAC,KAAK,EAAE,iBAAiB,GAAG,GAAG,CAAC,OAAO,CAsClE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"devtoolsTabs.css.d.ts","sourceRoot":"","sources":["../../../src/navigation/devtoolsTabs.css.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,SAAS,
|
|
1
|
+
{"version":3,"file":"devtoolsTabs.css.d.ts","sourceRoot":"","sources":["../../../src/navigation/devtoolsTabs.css.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,SAAS,QAQpB,CAAC;AAEH,eAAO,MAAM,GAAG,QA0Bd,CAAC;AAEH,eAAO,MAAM,WAAW,QAatB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"devtoolsSurfaces.css.d.ts","sourceRoot":"","sources":["../../../src/surfaces/devtoolsSurfaces.css.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,IAAI,QAQf,CAAC;AAEH,eAAO,MAAM,UAAU,QAKrB,CAAC;AAEH,eAAO,MAAM,SAAS,
|
|
1
|
+
{"version":3,"file":"devtoolsSurfaces.css.d.ts","sourceRoot":"","sources":["../../../src/surfaces/devtoolsSurfaces.css.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,IAAI,QAQf,CAAC;AAEH,eAAO,MAAM,UAAU,QAKrB,CAAC;AAEH,eAAO,MAAM,SAAS,QAKpB,CAAC;AAEH,eAAO,MAAM,OAAO,QAIlB,CAAC;AAEH,eAAO,MAAM,aAAa,QAKxB,CAAC;AAEH,eAAO,MAAM,YAAY,QAKvB,CAAC;AAEH,eAAO,MAAM,IAAI,QAOf,CAAC;AAEH,eAAO,MAAM,QAAQ,QAQnB,CAAC;AAMH,eAAO,MAAM,mBAAmB,QAO9B,CAAC;AAYH,eAAO,MAAM,cAAc,QAKzB,CAAC;AAEH,eAAO,MAAM,YAAY,QAMvB,CAAC"}
|
|
@@ -1,4 +1,7 @@
|
|
|
1
1
|
import type { JSX, PropsWithChildren } from 'react';
|
|
2
|
-
export type
|
|
2
|
+
export type DevtoolsColorScheme = 'light' | 'dark';
|
|
3
|
+
export type DevtoolsThemeProps = PropsWithChildren<{
|
|
4
|
+
colorScheme?: DevtoolsColorScheme;
|
|
5
|
+
}>;
|
|
3
6
|
export declare function DevtoolsTheme(props: DevtoolsThemeProps): JSX.Element;
|
|
4
7
|
//# sourceMappingURL=DevtoolsTheme.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DevtoolsTheme.d.ts","sourceRoot":"","sources":["../../../src/theme/DevtoolsTheme.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,iBAAiB,EAAE,MAAM,OAAO,CAAC;AAGpD,MAAM,MAAM,kBAAkB,GAAG,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"DevtoolsTheme.d.ts","sourceRoot":"","sources":["../../../src/theme/DevtoolsTheme.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,iBAAiB,EAAE,MAAM,OAAO,CAAC;AAGpD,MAAM,MAAM,mBAAmB,GAAG,OAAO,GAAG,MAAM,CAAC;AAEnD,MAAM,MAAM,kBAAkB,GAAG,iBAAiB,CAAC;IAEjD,WAAW,CAAC,EAAE,mBAAmB,CAAC;CACnC,CAAC,CAAC;AAGH,wBAAgB,aAAa,CAAC,KAAK,EAAE,kBAAkB,GAAG,GAAG,CAAC,OAAO,CAQpE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"devtoolsTheme.css.d.ts","sourceRoot":"","sources":["../../../src/theme/devtoolsTheme.css.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"devtoolsTheme.css.d.ts","sourceRoot":"","sources":["../../../src/theme/devtoolsTheme.css.ts"],"names":[],"mappings":"AA4EA,eAAO,MAAM,IAAI,QAYf,CAAC"}
|
|
@@ -1,12 +1,20 @@
|
|
|
1
1
|
import type { JSX, ReactNode } from 'react';
|
|
2
|
-
|
|
2
|
+
type DevtoolsToolbarButtonCommonProps = {
|
|
3
3
|
label: ReactNode;
|
|
4
4
|
onClick: () => void;
|
|
5
5
|
disabled?: boolean;
|
|
6
6
|
active?: boolean;
|
|
7
|
-
title?: string;
|
|
8
|
-
icon?: ReactNode;
|
|
9
7
|
pressed?: boolean;
|
|
10
8
|
};
|
|
9
|
+
export type DevtoolsToolbarButtonProps = DevtoolsToolbarButtonCommonProps & ({
|
|
10
|
+
presentation?: 'label';
|
|
11
|
+
title?: string;
|
|
12
|
+
icon?: ReactNode;
|
|
13
|
+
} | {
|
|
14
|
+
presentation: 'icon';
|
|
15
|
+
title: string;
|
|
16
|
+
icon: ReactNode;
|
|
17
|
+
});
|
|
11
18
|
export declare function DevtoolsToolbarButton(props: DevtoolsToolbarButtonProps): JSX.Element;
|
|
19
|
+
export {};
|
|
12
20
|
//# sourceMappingURL=DevtoolsToolbarButton.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DevtoolsToolbarButton.d.ts","sourceRoot":"","sources":["../../../src/toolbar/DevtoolsToolbarButton.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAG5C,
|
|
1
|
+
{"version":3,"file":"DevtoolsToolbarButton.d.ts","sourceRoot":"","sources":["../../../src/toolbar/DevtoolsToolbarButton.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAG5C,KAAK,gCAAgC,GAAG;IACtC,KAAK,EAAE,SAAS,CAAC;IACjB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,0BAA0B,GAAG,gCAAgC,GACvE,CACI;IACE,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,SAAS,CAAC;CAClB,GACD;IACE,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,SAAS,CAAC;CACjB,CACJ,CAAC;AAGJ,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,0BAA0B,GAChC,GAAG,CAAC,OAAO,CA2Bb"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"devtoolsToolbar.css.d.ts","sourceRoot":"","sources":["../../../src/toolbar/devtoolsToolbar.css.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,OAAO,
|
|
1
|
+
{"version":3,"file":"devtoolsToolbar.css.d.ts","sourceRoot":"","sources":["../../../src/toolbar/devtoolsToolbar.css.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,OAAO,QAWlB,CAAC;AAEH,eAAO,MAAM,IAAI,QAGf,CAAC;AAEH,eAAO,MAAM,SAAS,QAMpB,CAAC;AAEH,eAAO,MAAM,MAAM,QAuCjB,CAAC;AASH,eAAO,MAAM,WAAW,QAKtB,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@plumile/ui-devtools",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.5",
|
|
4
4
|
"description": "Shared DevTools UI primitives for Kronex extensions",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
@@ -127,7 +127,7 @@
|
|
|
127
127
|
},
|
|
128
128
|
"devDependencies": {
|
|
129
129
|
"@types/react": "19.2.18",
|
|
130
|
-
"@types/react-dom": "19.2.
|
|
130
|
+
"@types/react-dom": "19.2.7",
|
|
131
131
|
"@typescript/native": "npm:typescript@7.0.2",
|
|
132
132
|
"react": "19.2.8",
|
|
133
133
|
"react-dom": "19.2.8",
|