@mastra/playground-ui 64.0.0 → 65.0.0-alpha.1
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 -2
- package/components.css +340 -0
- package/dist/code-DJReJPSX.cjs.map +1 -1
- package/dist/code-DLuATvYu.js.map +1 -1
- package/dist/components/Breadcrumb.cjs.js +4 -2
- package/dist/components/Breadcrumb.cjs.js.map +1 -1
- package/dist/components/Breadcrumb.es.js +5 -3
- package/dist/components/Breadcrumb.es.js.map +1 -1
- package/dist/domains/chat/tools/badges/workflow-badge.cjs.js +2 -0
- package/dist/domains/chat/tools/badges/workflow-badge.cjs.js.map +1 -1
- package/dist/domains/chat/tools/badges/workflow-badge.es.js +2 -0
- package/dist/domains/chat/tools/badges/workflow-badge.es.js.map +1 -1
- package/dist/domains/datasets/components/save-as-dataset-item-dialog.cjs.js +104 -92
- package/dist/domains/datasets/components/save-as-dataset-item-dialog.cjs.js.map +1 -1
- package/dist/domains/datasets/components/save-as-dataset-item-dialog.es.js +105 -93
- package/dist/domains/datasets/components/save-as-dataset-item-dialog.es.js.map +1 -1
- package/dist/domains/observability/components/add-trace-mocks-to-item-dialog.cjs.js +3 -3
- package/dist/domains/observability/components/add-trace-mocks-to-item-dialog.es.js +3 -3
- package/dist/domains/observability/components/trace-as-item-dialog.cjs.js +6 -10
- package/dist/domains/observability/components/trace-as-item-dialog.cjs.js.map +1 -1
- package/dist/domains/observability/components/trace-as-item-dialog.es.js +7 -11
- package/dist/domains/observability/components/trace-as-item-dialog.es.js.map +1 -1
- package/dist/domains/scores/components/score-as-item-dialog.cjs.js +3 -9
- package/dist/domains/scores/components/score-as-item-dialog.cjs.js.map +1 -1
- package/dist/domains/scores/components/score-as-item-dialog.es.js +4 -10
- package/dist/domains/scores/components/score-as-item-dialog.es.js.map +1 -1
- package/dist/domains/scores/components/score-data-panel.cjs.js +9 -1
- package/dist/domains/scores/components/score-data-panel.cjs.js.map +1 -1
- package/dist/domains/scores/components/score-data-panel.es.js +9 -1
- package/dist/domains/scores/components/score-data-panel.es.js.map +1 -1
- package/dist/domains/traces/components/thread-view-by-trace.cjs.js +1 -0
- package/dist/domains/traces/components/thread-view-by-trace.cjs.js.map +1 -1
- package/dist/domains/traces/components/thread-view-by-trace.es.js +1 -0
- package/dist/domains/traces/components/thread-view-by-trace.es.js.map +1 -1
- package/dist/domains/traces/components/trace-data-panel.cjs.js +1 -0
- package/dist/domains/traces/components/trace-data-panel.cjs.js.map +1 -1
- package/dist/domains/traces/components/trace-data-panel.es.js +1 -0
- package/dist/domains/traces/components/trace-data-panel.es.js.map +1 -1
- package/dist/domains/workflows/workflow/workflow-input-data.cjs.js +1 -0
- package/dist/domains/workflows/workflow/workflow-input-data.cjs.js.map +1 -1
- package/dist/domains/workflows/workflow/workflow-input-data.es.js +1 -0
- package/dist/domains/workflows/workflow/workflow-input-data.es.js.map +1 -1
- package/dist/primitives/raised-surface.cjs.js.map +1 -1
- package/dist/primitives/raised-surface.es.js.map +1 -1
- package/dist/src/domains/datasets/components/index.d.ts +1 -1
- package/dist/src/domains/datasets/components/save-as-dataset-item-dialog.d.ts +14 -3
- package/dist/src/domains/observability/components/trace-as-item-dialog.d.ts +5 -3
- package/dist/src/domains/scores/components/score-as-item-dialog.d.ts +3 -3
- package/dist/src/ds/components/Breadcrumb/Breadcrumb.d.ts +2 -2
- package/dist/src/ds/components/Code/code.d.ts +1 -1
- package/dist/src/ds/primitives/raised-surface.d.ts +1 -1
- package/dist/style.css +22 -19
- package/dist/toast.css +1 -1
- package/dist/tokens.cjs.js.map +1 -1
- package/dist/tokens.es.js.map +1 -1
- package/dist/use-text-highlight.css +4 -4
- package/package.json +16 -12
- package/sources.css +1 -0
- package/theme/code.css +17 -0
- package/theme/surfaces.css +2 -2
- package/theme.css +2 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workflow-input-data.es.js","sources":["../../../../src/domains/workflows/workflow/workflow-input-data.tsx"],"sourcesContent":["import { Play } from 'lucide-react';\nimport type { ReactNode } from 'react';\nimport { useRef, useState } from 'react';\nimport type { ZodSchema } from 'zod';\n\nimport { createProcessorInput, parseProcessorDraft } from './input/processor-input';\nimport type { ProcessorDraft } from './input/processor-input';\nimport { WorkflowJsonInput } from './input/workflow-json-input';\nimport { WorkflowProcessorInput } from './input/workflow-processor-input';\nimport { WorkflowInputTypeToggle } from './workflow-input-type-toggle';\nimport type { WorkflowInputType } from './workflow-input-type-toggle';\nimport { Button } from '@/ds/components/Button';\nimport { Collapsible, CollapsibleContent, CollapsibleTrigger } from '@/ds/components/Collapsible';\nimport { DisclosureChevron } from '@/ds/components/DisclosureChevron';\nimport { Txt } from '@/ds/components/Txt';\nimport { Icon } from '@/ds/icons/Icon';\nimport { DynamicForm } from '@/lib/form';\nimport { getFormShapeError, parseJsonDraft, validateJsonDraft } from '@/lib/form/json-draft';\nimport type { JsonDraftValue } from '@/lib/form/json-draft';\nimport { cn } from '@/utils/cn';\n\nexport interface WorkflowInputDataProps {\n schema: ZodSchema;\n defaultValues?: unknown;\n isSubmitLoading: boolean;\n submitButtonLabel: string;\n onSubmit: (data: any) => void;\n children?: React.ReactNode;\n isProcessorWorkflow?: boolean;\n submitActions?: React.ReactNode;\n leftActions?: React.ReactNode;\n headingSlot?: ReactNode;\n collapsible?: boolean;\n submitButtonIcon?: ReactNode;\n submitButtonVariant?: React.ComponentProps<typeof Button>['variant'];\n submitButtonFullWidth?: boolean;\n hideInputTypeLabel?: boolean;\n inputTypeLabel?: string;\n hideHeading?: boolean;\n}\n\ntype InputDraft =\n | { type: 'json'; value: string }\n | { type: 'form'; value: unknown }\n | { type: 'simple'; value: ProcessorDraft };\n\nconst defaultSubmitIcon = (\n <Icon>\n <Play />\n </Icon>\n);\n\nfunction createInitialDraft(defaultValues: unknown, isProcessorWorkflow: boolean | undefined): InputDraft {\n if (!isProcessorWorkflow) return { type: 'form', value: defaultValues };\n const input = defaultValues ?? createProcessorInput();\n const draft = parseProcessorDraft(input);\n return draft ? { type: 'simple', value: draft } : { type: 'json', value: JSON.stringify(input, null, 2) };\n}\n\nexport const WorkflowInputData = ({\n schema,\n defaultValues,\n isSubmitLoading,\n submitButtonLabel,\n onSubmit,\n children,\n isProcessorWorkflow,\n submitActions,\n leftActions,\n headingSlot,\n collapsible = true,\n submitButtonIcon = defaultSubmitIcon,\n submitButtonVariant = 'primary',\n submitButtonFullWidth,\n hideInputTypeLabel,\n inputTypeLabel = 'Run input',\n hideHeading,\n}: WorkflowInputDataProps) => {\n const [draft, setDraft] = useState(() => createInitialDraft(defaultValues, isProcessorWorkflow));\n // The Form view is uncontrolled: state here would only re-render this tree on every keystroke.\n const formValues = useRef<unknown>(defaultValues);\n const [errors, setErrors] = useState<string[]>([]);\n\n function readDraftValue(): JsonDraftValue {\n if (draft.type === 'json') return parseJsonDraft(draft.value);\n return { ok: true, value: draft.type === 'form' ? formValues.current : draft.value };\n }\n\n function submitJsonDraft(text: string) {\n const result = validateJsonDraft(schema, text);\n if (result.ok) onSubmit(result.value);\n else setErrors(result.errors);\n }\n\n function changeInputType(type: WorkflowInputType) {\n if (type === draft.type) return;\n setErrors([]);\n const current = readDraftValue();\n if (!current.ok) return setErrors([current.error]);\n if (type === 'json') {\n return setDraft({ type, value: JSON.stringify(current.value === undefined ? {} : current.value, null, 2) });\n }\n if (type === 'simple') {\n const processorDraft = parseProcessorDraft(current.value);\n if (processorDraft) return setDraft({ type, value: processorDraft });\n return setErrors([\n 'Simple input requires a messages array with text parts and a string phase. Correct the JSON first.',\n ]);\n }\n const formShapeError = getFormShapeError(schema, current.value);\n return formShapeError ? setErrors([formShapeError]) : setDraft({ type, value: current.value });\n }\n\n const defaultHeading = (\n <Txt as=\"span\" variant=\"subheading\" tone=\"ink\">\n Trigger a run\n </Txt>\n );\n const toggleSitsInLabelRow = !collapsible && !hideHeading;\n const toggleSitsAboveInput = collapsible || hideHeading || hideInputTypeLabel;\n const inputTypeToggle = (\n <WorkflowInputTypeToggle\n value={draft.type}\n onChange={changeInputType}\n disabled={isSubmitLoading}\n includeSimple={isProcessorWorkflow}\n compact={toggleSitsInLabelRow}\n />\n );\n\n const body = (\n <>\n {!hideInputTypeLabel && (\n <div className=\"flex justify-between gap-3 px-5 py-3\">\n <Txt as=\"p\" variant=\"caption\" tone=\"muted\">\n {inputTypeLabel}\n </Txt>\n {toggleSitsInLabelRow && <div className=\"shrink-0\">{inputTypeToggle}</div>}\n </div>\n )}\n\n <div className=\"px-5\">\n {toggleSitsAboveInput && <div className=\"pb-4\">{inputTypeToggle}</div>}\n\n <div\n className={cn('pb-4', {\n 'pointer-events-none opacity-50': isSubmitLoading,\n })}\n >\n {draft.type === 'json' ? (\n <WorkflowJsonInput\n value={draft.value}\n onChange={value => {\n setDraft({ type: 'json', value });\n setErrors([]);\n }}\n errors={errors}\n isSubmitLoading={isSubmitLoading}\n submitButtonLabel={submitButtonLabel}\n submitButtonIcon={submitButtonIcon}\n submitButtonVariant={submitButtonVariant}\n submitButtonFullWidth={submitButtonFullWidth}\n onSubmit={() => submitJsonDraft(draft.value)}\n submitActions={submitActions}\n leftActions={leftActions}\n >\n {children}\n </WorkflowJsonInput>\n ) : draft.type === 'simple' && isProcessorWorkflow ? (\n <WorkflowProcessorInput\n schema={schema}\n value={draft.value}\n onChange={value => setDraft({ type: 'simple', value })}\n isSubmitLoading={isSubmitLoading}\n submitButtonLabel={submitButtonLabel}\n submitButtonIcon={submitButtonIcon}\n submitButtonVariant={submitButtonVariant}\n submitButtonFullWidth={submitButtonFullWidth}\n onSubmit={onSubmit}\n submitActions={submitActions}\n leftActions={leftActions}\n >\n {children}\n </WorkflowProcessorInput>\n ) : (\n <WorkflowFormInput\n schema={schema}\n onValuesChange={value => {\n formValues.current = value;\n }}\n defaultValues={draft.value}\n isSubmitLoading={isSubmitLoading}\n submitButtonLabel={submitButtonLabel}\n submitButtonIcon={submitButtonIcon}\n submitButtonVariant={submitButtonVariant}\n submitButtonFullWidth={submitButtonFullWidth}\n onSubmit={onSubmit}\n submitActions={submitActions}\n leftActions={leftActions}\n >\n {children}\n </WorkflowFormInput>\n )}\n </div>\n </div>\n </>\n );\n\n if (!collapsible) {\n return (\n <>\n {!hideHeading && <div className=\"border-b border-border pb-3\">{headingSlot ?? defaultHeading}</div>}\n <div>{body}</div>\n </>\n );\n }\n\n return (\n <Collapsible defaultOpen>\n <CollapsibleTrigger className=\"flex w-full items-center gap-2 pb-3 text-left\">\n <DisclosureChevron direction=\"right\" className=\"size-4 text-muted-foreground\" />\n {headingSlot ?? defaultHeading}\n </CollapsibleTrigger>\n\n <CollapsibleContent keepMounted>{body}</CollapsibleContent>\n </Collapsible>\n );\n};\n\nconst WorkflowFormInput = ({\n schema,\n defaultValues,\n isSubmitLoading,\n submitButtonLabel,\n onSubmit,\n children,\n submitActions,\n leftActions,\n submitButtonIcon,\n submitButtonVariant,\n submitButtonFullWidth,\n onValuesChange,\n}: WorkflowInputDataProps & { onValuesChange: (value: unknown) => void }) => (\n <DynamicForm\n schema={schema}\n defaultValues={defaultValues}\n onValuesChange={onValuesChange}\n isSubmitLoading={isSubmitLoading}\n submitButtonLabel={submitButtonLabel}\n submitButtonIcon={submitButtonIcon}\n submitButtonVariant={submitButtonVariant}\n submitButtonFullWidth={submitButtonFullWidth}\n onSubmit={onSubmit}\n readOnly={isSubmitLoading}\n submitActions={submitActions}\n leftActions={leftActions}\n >\n {children}\n </DynamicForm>\n);\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"workflow-input-data.es.js","sources":["../../../../src/domains/workflows/workflow/workflow-input-data.tsx"],"sourcesContent":["import { Play } from 'lucide-react';\nimport type { ReactNode } from 'react';\nimport { useRef, useState } from 'react';\nimport type { ZodSchema } from 'zod';\n\nimport { createProcessorInput, parseProcessorDraft } from './input/processor-input';\nimport type { ProcessorDraft } from './input/processor-input';\nimport { WorkflowJsonInput } from './input/workflow-json-input';\nimport { WorkflowProcessorInput } from './input/workflow-processor-input';\nimport { WorkflowInputTypeToggle } from './workflow-input-type-toggle';\nimport type { WorkflowInputType } from './workflow-input-type-toggle';\nimport { Button } from '@/ds/components/Button';\nimport { Collapsible, CollapsibleContent, CollapsibleTrigger } from '@/ds/components/Collapsible';\nimport { DisclosureChevron } from '@/ds/components/DisclosureChevron';\nimport { Txt } from '@/ds/components/Txt';\nimport { Icon } from '@/ds/icons/Icon';\nimport { DynamicForm } from '@/lib/form';\nimport { getFormShapeError, parseJsonDraft, validateJsonDraft } from '@/lib/form/json-draft';\nimport type { JsonDraftValue } from '@/lib/form/json-draft';\nimport { cn } from '@/utils/cn';\n\nexport interface WorkflowInputDataProps {\n schema: ZodSchema;\n defaultValues?: unknown;\n isSubmitLoading: boolean;\n submitButtonLabel: string;\n onSubmit: (data: any) => void;\n children?: React.ReactNode;\n isProcessorWorkflow?: boolean;\n submitActions?: React.ReactNode;\n leftActions?: React.ReactNode;\n headingSlot?: ReactNode;\n collapsible?: boolean;\n submitButtonIcon?: ReactNode;\n submitButtonVariant?: React.ComponentProps<typeof Button>['variant'];\n submitButtonFullWidth?: boolean;\n hideInputTypeLabel?: boolean;\n inputTypeLabel?: string;\n hideHeading?: boolean;\n}\n\ntype InputDraft =\n | { type: 'json'; value: string }\n | { type: 'form'; value: unknown }\n | { type: 'simple'; value: ProcessorDraft };\n\nconst defaultSubmitIcon = (\n <Icon>\n <Play />\n </Icon>\n);\n\nfunction createInitialDraft(defaultValues: unknown, isProcessorWorkflow: boolean | undefined): InputDraft {\n if (!isProcessorWorkflow) return { type: 'form', value: defaultValues };\n const input = defaultValues ?? createProcessorInput();\n const draft = parseProcessorDraft(input);\n return draft ? { type: 'simple', value: draft } : { type: 'json', value: JSON.stringify(input, null, 2) };\n}\n\nexport const WorkflowInputData = ({\n schema,\n defaultValues,\n isSubmitLoading,\n submitButtonLabel,\n onSubmit,\n children,\n isProcessorWorkflow,\n submitActions,\n leftActions,\n headingSlot,\n collapsible = true,\n submitButtonIcon = defaultSubmitIcon,\n submitButtonVariant = 'primary',\n submitButtonFullWidth,\n hideInputTypeLabel,\n inputTypeLabel = 'Run input',\n hideHeading,\n}: WorkflowInputDataProps) => {\n const [draft, setDraft] = useState(() => createInitialDraft(defaultValues, isProcessorWorkflow));\n // The Form view is uncontrolled: state here would only re-render this tree on every keystroke.\n const formValues = useRef<unknown>(defaultValues);\n const [errors, setErrors] = useState<string[]>([]);\n\n function readDraftValue(): JsonDraftValue {\n if (draft.type === 'json') return parseJsonDraft(draft.value);\n return { ok: true, value: draft.type === 'form' ? formValues.current : draft.value };\n }\n\n function submitJsonDraft(text: string) {\n const result = validateJsonDraft(schema, text);\n if (result.ok) onSubmit(result.value);\n else setErrors(result.errors);\n }\n\n function changeInputType(type: WorkflowInputType) {\n if (type === draft.type) return;\n setErrors([]);\n const current = readDraftValue();\n if (!current.ok) return setErrors([current.error]);\n if (type === 'json') {\n return setDraft({ type, value: JSON.stringify(current.value === undefined ? {} : current.value, null, 2) });\n }\n if (type === 'simple') {\n const processorDraft = parseProcessorDraft(current.value);\n if (processorDraft) return setDraft({ type, value: processorDraft });\n return setErrors([\n 'Simple input requires a messages array with text parts and a string phase. Correct the JSON first.',\n ]);\n }\n const formShapeError = getFormShapeError(schema, current.value);\n return formShapeError ? setErrors([formShapeError]) : setDraft({ type, value: current.value });\n }\n\n const defaultHeading = (\n <Txt as=\"span\" variant=\"subheading\" tone=\"ink\">\n Trigger a run\n </Txt>\n );\n const toggleSitsInLabelRow = !collapsible && !hideHeading;\n const toggleSitsAboveInput = collapsible || hideHeading || hideInputTypeLabel;\n const inputTypeToggle = (\n <WorkflowInputTypeToggle\n value={draft.type}\n onChange={changeInputType}\n disabled={isSubmitLoading}\n includeSimple={isProcessorWorkflow}\n compact={toggleSitsInLabelRow}\n />\n );\n\n const body = (\n <>\n {!hideInputTypeLabel && (\n <div className=\"flex justify-between gap-3 px-5 py-3\">\n <Txt as=\"p\" variant=\"caption\" tone=\"muted\">\n {inputTypeLabel}\n </Txt>\n {toggleSitsInLabelRow && <div className=\"shrink-0\">{inputTypeToggle}</div>}\n </div>\n )}\n\n <div className=\"px-5\">\n {toggleSitsAboveInput && <div className=\"pb-4\">{inputTypeToggle}</div>}\n\n <div\n className={cn('pb-4', {\n 'pointer-events-none opacity-50': isSubmitLoading,\n })}\n >\n {draft.type === 'json' ? (\n <WorkflowJsonInput\n value={draft.value}\n onChange={value => {\n setDraft({ type: 'json', value });\n setErrors([]);\n }}\n errors={errors}\n isSubmitLoading={isSubmitLoading}\n submitButtonLabel={submitButtonLabel}\n submitButtonIcon={submitButtonIcon}\n submitButtonVariant={submitButtonVariant}\n submitButtonFullWidth={submitButtonFullWidth}\n onSubmit={() => submitJsonDraft(draft.value)}\n submitActions={submitActions}\n leftActions={leftActions}\n >\n {children}\n </WorkflowJsonInput>\n ) : draft.type === 'simple' && isProcessorWorkflow ? (\n <WorkflowProcessorInput\n schema={schema}\n value={draft.value}\n onChange={value => setDraft({ type: 'simple', value })}\n isSubmitLoading={isSubmitLoading}\n submitButtonLabel={submitButtonLabel}\n submitButtonIcon={submitButtonIcon}\n submitButtonVariant={submitButtonVariant}\n submitButtonFullWidth={submitButtonFullWidth}\n onSubmit={onSubmit}\n submitActions={submitActions}\n leftActions={leftActions}\n >\n {children}\n </WorkflowProcessorInput>\n ) : (\n <WorkflowFormInput\n schema={schema}\n onValuesChange={value => {\n formValues.current = value;\n }}\n defaultValues={draft.value}\n isSubmitLoading={isSubmitLoading}\n submitButtonLabel={submitButtonLabel}\n submitButtonIcon={submitButtonIcon}\n submitButtonVariant={submitButtonVariant}\n submitButtonFullWidth={submitButtonFullWidth}\n onSubmit={onSubmit}\n submitActions={submitActions}\n leftActions={leftActions}\n >\n {children}\n </WorkflowFormInput>\n )}\n </div>\n </div>\n </>\n );\n\n if (!collapsible) {\n return (\n <>\n {!hideHeading && <div className=\"border-b border-border pb-3\">{headingSlot ?? defaultHeading}</div>}\n <div>{body}</div>\n </>\n );\n }\n\n return (\n <Collapsible defaultOpen>\n <CollapsibleTrigger className=\"flex w-full items-center gap-2 pb-3 text-left\">\n <DisclosureChevron direction=\"right\" className=\"size-4 text-muted-foreground\" />\n {headingSlot ?? defaultHeading}\n </CollapsibleTrigger>\n\n <CollapsibleContent keepMounted>{body}</CollapsibleContent>\n </Collapsible>\n );\n};\n\nconst WorkflowFormInput = ({\n schema,\n defaultValues,\n isSubmitLoading,\n submitButtonLabel,\n onSubmit,\n children,\n submitActions,\n leftActions,\n submitButtonIcon,\n submitButtonVariant,\n submitButtonFullWidth,\n onValuesChange,\n}: WorkflowInputDataProps & { onValuesChange: (value: unknown) => void }) => (\n <DynamicForm\n schema={schema}\n defaultValues={defaultValues}\n onValuesChange={onValuesChange}\n isSubmitLoading={isSubmitLoading}\n submitButtonLabel={submitButtonLabel}\n submitButtonIcon={submitButtonIcon}\n submitButtonVariant={submitButtonVariant}\n submitButtonFullWidth={submitButtonFullWidth}\n onSubmit={onSubmit}\n readOnly={isSubmitLoading}\n submitActions={submitActions}\n leftActions={leftActions}\n >\n {children}\n </DynamicForm>\n);\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AA8CA,MAAM,iBAAA,mBACJ,GAAA,CAAC,IAAA,EAAA,EACC,QAAA,kBAAA,GAAA,CAAC,QAAK,CAAA,EACR,CAAA;AAGF,SAAS,kBAAA,CAAmB,eAAwB,mBAAA,EAAsD;AACxG,EAAA,IAAI,CAAC,mBAAA,EAAqB,OAAO,EAAE,IAAA,EAAM,MAAA,EAAQ,OAAO,aAAA,EAAc;AACtE,EAAA,MAAM,KAAA,GAAQ,iBAAiB,oBAAA,EAAqB;AACpD,EAAA,MAAM,KAAA,GAAQ,oBAAoB,KAAK,CAAA;AACvC,EAAA,OAAO,QAAQ,EAAE,IAAA,EAAM,QAAA,EAAU,KAAA,EAAO,OAAM,GAAI,EAAE,IAAA,EAAM,MAAA,EAAQ,OAAO,IAAA,CAAK,SAAA,CAAU,KAAA,EAAO,IAAA,EAAM,CAAC,CAAA,EAAE;AAC1G;AAEO,MAAM,oBAAoB,CAAC;AAAA,EAChC,MAAA;AAAA,EACA,aAAA;AAAA,EACA,eAAA;AAAA,EACA,iBAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,mBAAA;AAAA,EACA,aAAA;AAAA,EACA,WAAA;AAAA,EACA,WAAA;AAAA,EACA,WAAA,GAAc,IAAA;AAAA,EACd,gBAAA,GAAmB,iBAAA;AAAA,EACnB,mBAAA,GAAsB,SAAA;AAAA,EACtB,qBAAA;AAAA,EACA,kBAAA;AAAA,EACA,cAAA,GAAiB,WAAA;AAAA,EACjB;AACF,CAAA,KAA8B;AAC5B,EAAA,MAAM,CAAC,OAAO,QAAQ,CAAA,GAAI,SAAS,MAAM,kBAAA,CAAmB,aAAA,EAAe,mBAAmB,CAAC,CAAA;AAE/F,EAAA,MAAM,UAAA,GAAa,OAAgB,aAAa,CAAA;AAChD,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAI,QAAA,CAAmB,EAAE,CAAA;AAEjD,EAAA,SAAS,cAAA,GAAiC;AACxC,IAAA,IAAI,MAAM,IAAA,KAAS,MAAA,EAAQ,OAAO,cAAA,CAAe,MAAM,KAAK,CAAA;AAC5D,IAAA,OAAO,EAAE,EAAA,EAAI,IAAA,EAAM,KAAA,EAAO,KAAA,CAAM,SAAS,MAAA,GAAS,UAAA,CAAW,OAAA,GAAU,KAAA,CAAM,KAAA,EAAM;AAAA,EACrF;AAEA,EAAA,SAAS,gBAAgB,IAAA,EAAc;AACrC,IAAA,MAAM,MAAA,GAAS,iBAAA,CAAkB,MAAA,EAAQ,IAAI,CAAA;AAC7C,IAAA,IAAI,MAAA,CAAO,EAAA,EAAI,QAAA,CAAS,MAAA,CAAO,KAAK,CAAA;AAAA,SAC/B,SAAA,CAAU,OAAO,MAAM,CAAA;AAAA,EAC9B;AAEA,EAAA,SAAS,gBAAgB,IAAA,EAAyB;AAChD,IAAA,IAAI,IAAA,KAAS,MAAM,IAAA,EAAM;AACzB,IAAA,SAAA,CAAU,EAAE,CAAA;AACZ,IAAA,MAAM,UAAU,cAAA,EAAe;AAC/B,IAAA,IAAI,CAAC,QAAQ,EAAA,EAAI,OAAO,UAAU,CAAC,OAAA,CAAQ,KAAK,CAAC,CAAA;AACjD,IAAA,IAAI,SAAS,MAAA,EAAQ;AACnB,MAAA,OAAO,SAAS,EAAE,IAAA,EAAM,KAAA,EAAO,IAAA,CAAK,UAAU,OAAA,CAAQ,KAAA,KAAU,MAAA,GAAY,KAAK,OAAA,CAAQ,KAAA,EAAO,IAAA,EAAM,CAAC,GAAG,CAAA;AAAA,IAC5G;AACA,IAAA,IAAI,SAAS,QAAA,EAAU;AACrB,MAAA,MAAM,cAAA,GAAiB,mBAAA,CAAoB,OAAA,CAAQ,KAAK,CAAA;AACxD,MAAA,IAAI,gBAAgB,OAAO,QAAA,CAAS,EAAE,IAAA,EAAM,KAAA,EAAO,gBAAgB,CAAA;AACnE,MAAA,OAAO,SAAA,CAAU;AAAA,QACf;AAAA,OACD,CAAA;AAAA,IACH;AACA,IAAA,MAAM,cAAA,GAAiB,iBAAA,CAAkB,MAAA,EAAQ,OAAA,CAAQ,KAAK,CAAA;AAC9D,IAAA,OAAO,cAAA,GAAiB,SAAA,CAAU,CAAC,cAAc,CAAC,CAAA,GAAI,QAAA,CAAS,EAAE,IAAA,EAAM,KAAA,EAAO,OAAA,CAAQ,KAAA,EAAO,CAAA;AAAA,EAC/F;AAEA,EAAA,MAAM,cAAA,uBACH,GAAA,EAAA,EAAI,EAAA,EAAG,QAAO,OAAA,EAAQ,YAAA,EAAa,IAAA,EAAK,KAAA,EAAM,QAAA,EAAA,eAAA,EAE/C,CAAA;AAEF,EAAA,MAAM,oBAAA,GAAuB,CAAC,WAAA,IAAe,CAAC,WAAA;AAC9C,EAAA,MAAM,oBAAA,GAAuB,eAAe,WAAA,IAAe,kBAAA;AAC3D,EAAA,MAAM,eAAA,mBACJ,GAAA;AAAA,IAAC,uBAAA;AAAA,IAAA;AAAA,MACC,OAAO,KAAA,CAAM,IAAA;AAAA,MACb,QAAA,EAAU,eAAA;AAAA,MACV,QAAA,EAAU,eAAA;AAAA,MACV,aAAA,EAAe,mBAAA;AAAA,MACf,OAAA,EAAS;AAAA;AAAA,GACX;AAGF,EAAA,MAAM,uBACJ,IAAA,CAAA,QAAA,EAAA,EACG,QAAA,EAAA;AAAA,IAAA,CAAC,kBAAA,oBACA,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,sCAAA,EACb,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,OAAI,EAAA,EAAG,GAAA,EAAI,SAAQ,SAAA,EAAU,IAAA,EAAK,SAChC,QAAA,EAAA,cAAA,EACH,CAAA;AAAA,MACC,oBAAA,oBAAwB,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,YAAY,QAAA,EAAA,eAAA,EAAgB;AAAA,KAAA,EACtE,CAAA;AAAA,oBAGF,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,MAAA,EACZ,QAAA,EAAA;AAAA,MAAA,oBAAA,oBAAwB,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,MAAA,EAAQ,QAAA,EAAA,eAAA,EAAgB,CAAA;AAAA,sBAEhE,GAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACC,SAAA,EAAW,GAAG,MAAA,EAAQ;AAAA,YACpB,gCAAA,EAAkC;AAAA,WACnC,CAAA;AAAA,UAEA,QAAA,EAAA,KAAA,CAAM,SAAS,MAAA,mBACd,GAAA;AAAA,YAAC,iBAAA;AAAA,YAAA;AAAA,cACC,OAAO,KAAA,CAAM,KAAA;AAAA,cACb,UAAU,CAAA,KAAA,KAAS;AACjB,gBAAA,QAAA,CAAS,EAAE,IAAA,EAAM,MAAA,EAAQ,KAAA,EAAO,CAAA;AAChC,gBAAA,SAAA,CAAU,EAAE,CAAA;AAAA,cACd,CAAA;AAAA,cACA,MAAA;AAAA,cACA,eAAA;AAAA,cACA,iBAAA;AAAA,cACA,gBAAA;AAAA,cACA,mBAAA;AAAA,cACA,qBAAA;AAAA,cACA,QAAA,EAAU,MAAM,eAAA,CAAgB,KAAA,CAAM,KAAK,CAAA;AAAA,cAC3C,aAAA;AAAA,cACA,WAAA;AAAA,cAEC;AAAA;AAAA,WACH,GACE,KAAA,CAAM,IAAA,KAAS,QAAA,IAAY,mBAAA,mBAC7B,GAAA;AAAA,YAAC,sBAAA;AAAA,YAAA;AAAA,cACC,MAAA;AAAA,cACA,OAAO,KAAA,CAAM,KAAA;AAAA,cACb,UAAU,CAAA,KAAA,KAAS,QAAA,CAAS,EAAE,IAAA,EAAM,QAAA,EAAU,OAAO,CAAA;AAAA,cACrD,eAAA;AAAA,cACA,iBAAA;AAAA,cACA,gBAAA;AAAA,cACA,mBAAA;AAAA,cACA,qBAAA;AAAA,cACA,QAAA;AAAA,cACA,aAAA;AAAA,cACA,WAAA;AAAA,cAEC;AAAA;AAAA,WACH,mBAEA,GAAA;AAAA,YAAC,iBAAA;AAAA,YAAA;AAAA,cACC,MAAA;AAAA,cACA,gBAAgB,CAAA,KAAA,KAAS;AACvB,gBAAA,UAAA,CAAW,OAAA,GAAU,KAAA;AAAA,cACvB,CAAA;AAAA,cACA,eAAe,KAAA,CAAM,KAAA;AAAA,cACrB,eAAA;AAAA,cACA,iBAAA;AAAA,cACA,gBAAA;AAAA,cACA,mBAAA;AAAA,cACA,qBAAA;AAAA,cACA,QAAA;AAAA,cACA,aAAA;AAAA,cACA,WAAA;AAAA,cAEC;AAAA;AAAA;AACH;AAAA;AAEJ,KAAA,EACF;AAAA,GAAA,EACF,CAAA;AAGF,EAAA,IAAI,CAAC,WAAA,EAAa;AAChB,IAAA,uBACE,IAAA,CAAA,QAAA,EAAA,EACG,QAAA,EAAA;AAAA,MAAA,CAAC,+BAAe,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,6BAAA,EAA+B,yBAAe,cAAA,EAAe,CAAA;AAAA,sBAC7F,GAAA,CAAC,SAAK,QAAA,EAAA,IAAA,EAAK;AAAA,KAAA,EACb,CAAA;AAAA,EAEJ;AAEA,EAAA,uBACE,IAAA,CAAC,WAAA,EAAA,EAAY,WAAA,EAAW,IAAA,EACtB,QAAA,EAAA;AAAA,oBAAA,IAAA,CAAC,kBAAA,EAAA,EAAmB,WAAU,+CAAA,EAC5B,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,iBAAA,EAAA,EAAkB,SAAA,EAAU,OAAA,EAAQ,SAAA,EAAU,8BAAA,EAA+B,CAAA;AAAA,MAC7E,WAAA,IAAe;AAAA,KAAA,EAClB,CAAA;AAAA,oBAEA,GAAA,CAAC,kBAAA,EAAA,EAAmB,WAAA,EAAW,IAAA,EAAE,QAAA,EAAA,IAAA,EAAK;AAAA,GAAA,EACxC,CAAA;AAEJ;AAEA,MAAM,oBAAoB,CAAC;AAAA,EACzB,MAAA;AAAA,EACA,aAAA;AAAA,EACA,eAAA;AAAA,EACA,iBAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,aAAA;AAAA,EACA,WAAA;AAAA,EACA,gBAAA;AAAA,EACA,mBAAA;AAAA,EACA,qBAAA;AAAA,EACA;AACF,CAAA,qBACE,GAAA;AAAA,EAAC,WAAA;AAAA,EAAA;AAAA,IACC,MAAA;AAAA,IACA,aAAA;AAAA,IACA,cAAA;AAAA,IACA,eAAA;AAAA,IACA,iBAAA;AAAA,IACA,gBAAA;AAAA,IACA,mBAAA;AAAA,IACA,qBAAA;AAAA,IACA,QAAA;AAAA,IACA,QAAA,EAAU,eAAA;AAAA,IACV,aAAA;AAAA,IACA,WAAA;AAAA,IAEC;AAAA;AACH,CAAA;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"raised-surface.cjs.js","sources":["../../src/ds/primitives/raised-surface.ts"],"sourcesContent":["/**\n * Two recipes, because elevation encodes distance from the canvas and there are\n * only two distances in this product.\n *\n * A *raised* surface sits in the flow — card, list panel, settings container,\n * table head, app frame. It lifts a couple of pixels, which is also what keeps\n * it honest: a tile in a grid inside a scroller is clipped by that scroller, so\n * a shadow that bleeds further than the tile's own clearance gets sliced into a\n * hard line along the container edge.\n *\n * An *overlay* is detached — popover, dropdown, dialog, drawer, tooltip. It is\n * never clipped, has to separate from arbitrary content beneath it, and so\n * carries the long falloff.\n *\n * Both recipes carry a `--surface-rim` inset edge, a top highlight in dark,\n * and elevation drops. Adding a CSS border on that same edge doubles it.\n * Content dividers use `--border`; frame headers use `border-surface-rim`\n * and stay inside the inset pixel reserved by MainCard.\n *\n * Radius is deliberately absent — it belongs to the family (`rounded-xl` for a\n * popup, `rounded-studio-frame` for the app frame).\n *\n * A raised surface pins its own fill across states. Interaction is expressed by\n * the state layer below, never by swapping the background: `Button`'s variants\n * all drive `background-color` on hover, and a raised surface wearing one would\n * otherwise turn translucent mid-hover and composite over the canvas. A call\n * site that genuinely wants another fill still overrides it, since its own\n * classes come after these.\n */\nconst fieldsOnSurface =\n '[--field:var(--field-on-surface)] [--field-disabled:var(--field-on-surface)] [--field-rim:var(--field-rim-on-surface)]';\nconst fieldsOnDialog =\n '[--field:var(--field-on-surface)] [--field-disabled:var(--field-on-surface)] [--field-rim:var(--surface-rim)]';\nconst fieldsOnPage = '[--field:var(--card)] [--field-disabled:var(--fill-subtle)] [--field-rim:var(--surface-rim)]';\n\nexport const raisedSurfaceStyle = 'bg-card hover:bg-card active:bg-card shadow-raised ' + fieldsOnSurface;\n\nexport const overlaySurfaceStyle = 'bg-card shadow-overlay ' + fieldsOnSurface;\n\nexport const dialogSurfaceStyle = 'bg-dialog shadow-overlay ' + fieldsOnDialog;\n\n/**\n * The app frame and the panels docked beside it. Same elevation as a card, one\n * step lower fill: a frame is a hole cut in the rail, and what sits inside it —\n * cards, fields, tables — needs a step to rise above. `Card` is for that\n * content, never for the frame around it.\n */\nexport const frameSurfaceStyle = 'bg-background shadow-raised ' + fieldsOnPage;\n\n/**\n * The frame's fill without its elevation, for a frame that is raised only at\n * some breakpoints: `MainCard` is flat page content below `lg`.\n */\nexport const frameFillStyle = 'bg-background ' + fieldsOnPage;\n\n/**\n * Interaction states for a surface that already carries an opaque fill. The\n * `state-layer` utility in `
|
|
1
|
+
{"version":3,"file":"raised-surface.cjs.js","sources":["../../src/ds/primitives/raised-surface.ts"],"sourcesContent":["/**\n * Two recipes, because elevation encodes distance from the canvas and there are\n * only two distances in this product.\n *\n * A *raised* surface sits in the flow — card, list panel, settings container,\n * table head, app frame. It lifts a couple of pixels, which is also what keeps\n * it honest: a tile in a grid inside a scroller is clipped by that scroller, so\n * a shadow that bleeds further than the tile's own clearance gets sliced into a\n * hard line along the container edge.\n *\n * An *overlay* is detached — popover, dropdown, dialog, drawer, tooltip. It is\n * never clipped, has to separate from arbitrary content beneath it, and so\n * carries the long falloff.\n *\n * Both recipes carry a `--surface-rim` inset edge, a top highlight in dark,\n * and elevation drops. Adding a CSS border on that same edge doubles it.\n * Content dividers use `--border`; frame headers use `border-surface-rim`\n * and stay inside the inset pixel reserved by MainCard.\n *\n * Radius is deliberately absent — it belongs to the family (`rounded-xl` for a\n * popup, `rounded-studio-frame` for the app frame).\n *\n * A raised surface pins its own fill across states. Interaction is expressed by\n * the state layer below, never by swapping the background: `Button`'s variants\n * all drive `background-color` on hover, and a raised surface wearing one would\n * otherwise turn translucent mid-hover and composite over the canvas. A call\n * site that genuinely wants another fill still overrides it, since its own\n * classes come after these.\n */\nconst fieldsOnSurface =\n '[--field:var(--field-on-surface)] [--field-disabled:var(--field-on-surface)] [--field-rim:var(--field-rim-on-surface)]';\nconst fieldsOnDialog =\n '[--field:var(--field-on-surface)] [--field-disabled:var(--field-on-surface)] [--field-rim:var(--surface-rim)]';\nconst fieldsOnPage = '[--field:var(--card)] [--field-disabled:var(--fill-subtle)] [--field-rim:var(--surface-rim)]';\n\nexport const raisedSurfaceStyle = 'bg-card hover:bg-card active:bg-card shadow-raised ' + fieldsOnSurface;\n\nexport const overlaySurfaceStyle = 'bg-card shadow-overlay ' + fieldsOnSurface;\n\nexport const dialogSurfaceStyle = 'bg-dialog shadow-overlay ' + fieldsOnDialog;\n\n/**\n * The app frame and the panels docked beside it. Same elevation as a card, one\n * step lower fill: a frame is a hole cut in the rail, and what sits inside it —\n * cards, fields, tables — needs a step to rise above. `Card` is for that\n * content, never for the frame around it.\n */\nexport const frameSurfaceStyle = 'bg-background shadow-raised ' + fieldsOnPage;\n\n/**\n * The frame's fill without its elevation, for a frame that is raised only at\n * some breakpoints: `MainCard` is flat page content below `lg`.\n */\nexport const frameFillStyle = 'bg-background ' + fieldsOnPage;\n\n/**\n * Interaction states for a surface that already carries an opaque fill. The\n * `state-layer` utility in `components.css` holds the reasoning and the measured\n * numbers: the rung has to be layered, never swapped into `background-color`.\n */\nexport const surfaceStateLayerStyle = 'state-layer';\n\n/**\n * Same layer, driven by an ancestor marked `group` rather than the surface\n * itself. A utility cannot read an ancestor's state, so this one stays composed\n * from variants — `isolate` and the negative z-index do the same job as the\n * utility's, and `inset-px` likewise keeps the inset rim visible.\n */\nexport const surfaceGroupStateLayerStyle =\n 'relative isolate before:pointer-events-none before:absolute before:-z-1 before:inset-px before:rounded-[inherit] before:transition-colors before:duration-fast motion-reduce:before:transition-none group-hover:before:bg-fill-subtle group-focus-visible:before:bg-fill-subtle';\n"],"names":[],"mappings":";;;;AA6BA,MAAM,eAAA,GACJ,wHAAA;AACF,MAAM,cAAA,GACJ,+GAAA;AACF,MAAM,YAAA,GAAe,8FAAA;AAEd,MAAM,qBAAqB,qDAAA,GAAwD;AAEnF,MAAM,sBAAsB,yBAAA,GAA4B;AAExD,MAAM,qBAAqB,2BAAA,GAA8B;AAQzD,MAAM,oBAAoB,8BAAA,GAAiC;AAM3D,MAAM,iBAAiB,gBAAA,GAAmB;AAO1C,MAAM,sBAAA,GAAyB;AAQ/B,MAAM,2BAAA,GACX;;;;;;;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"raised-surface.es.js","sources":["../../src/ds/primitives/raised-surface.ts"],"sourcesContent":["/**\n * Two recipes, because elevation encodes distance from the canvas and there are\n * only two distances in this product.\n *\n * A *raised* surface sits in the flow — card, list panel, settings container,\n * table head, app frame. It lifts a couple of pixels, which is also what keeps\n * it honest: a tile in a grid inside a scroller is clipped by that scroller, so\n * a shadow that bleeds further than the tile's own clearance gets sliced into a\n * hard line along the container edge.\n *\n * An *overlay* is detached — popover, dropdown, dialog, drawer, tooltip. It is\n * never clipped, has to separate from arbitrary content beneath it, and so\n * carries the long falloff.\n *\n * Both recipes carry a `--surface-rim` inset edge, a top highlight in dark,\n * and elevation drops. Adding a CSS border on that same edge doubles it.\n * Content dividers use `--border`; frame headers use `border-surface-rim`\n * and stay inside the inset pixel reserved by MainCard.\n *\n * Radius is deliberately absent — it belongs to the family (`rounded-xl` for a\n * popup, `rounded-studio-frame` for the app frame).\n *\n * A raised surface pins its own fill across states. Interaction is expressed by\n * the state layer below, never by swapping the background: `Button`'s variants\n * all drive `background-color` on hover, and a raised surface wearing one would\n * otherwise turn translucent mid-hover and composite over the canvas. A call\n * site that genuinely wants another fill still overrides it, since its own\n * classes come after these.\n */\nconst fieldsOnSurface =\n '[--field:var(--field-on-surface)] [--field-disabled:var(--field-on-surface)] [--field-rim:var(--field-rim-on-surface)]';\nconst fieldsOnDialog =\n '[--field:var(--field-on-surface)] [--field-disabled:var(--field-on-surface)] [--field-rim:var(--surface-rim)]';\nconst fieldsOnPage = '[--field:var(--card)] [--field-disabled:var(--fill-subtle)] [--field-rim:var(--surface-rim)]';\n\nexport const raisedSurfaceStyle = 'bg-card hover:bg-card active:bg-card shadow-raised ' + fieldsOnSurface;\n\nexport const overlaySurfaceStyle = 'bg-card shadow-overlay ' + fieldsOnSurface;\n\nexport const dialogSurfaceStyle = 'bg-dialog shadow-overlay ' + fieldsOnDialog;\n\n/**\n * The app frame and the panels docked beside it. Same elevation as a card, one\n * step lower fill: a frame is a hole cut in the rail, and what sits inside it —\n * cards, fields, tables — needs a step to rise above. `Card` is for that\n * content, never for the frame around it.\n */\nexport const frameSurfaceStyle = 'bg-background shadow-raised ' + fieldsOnPage;\n\n/**\n * The frame's fill without its elevation, for a frame that is raised only at\n * some breakpoints: `MainCard` is flat page content below `lg`.\n */\nexport const frameFillStyle = 'bg-background ' + fieldsOnPage;\n\n/**\n * Interaction states for a surface that already carries an opaque fill. The\n * `state-layer` utility in `
|
|
1
|
+
{"version":3,"file":"raised-surface.es.js","sources":["../../src/ds/primitives/raised-surface.ts"],"sourcesContent":["/**\n * Two recipes, because elevation encodes distance from the canvas and there are\n * only two distances in this product.\n *\n * A *raised* surface sits in the flow — card, list panel, settings container,\n * table head, app frame. It lifts a couple of pixels, which is also what keeps\n * it honest: a tile in a grid inside a scroller is clipped by that scroller, so\n * a shadow that bleeds further than the tile's own clearance gets sliced into a\n * hard line along the container edge.\n *\n * An *overlay* is detached — popover, dropdown, dialog, drawer, tooltip. It is\n * never clipped, has to separate from arbitrary content beneath it, and so\n * carries the long falloff.\n *\n * Both recipes carry a `--surface-rim` inset edge, a top highlight in dark,\n * and elevation drops. Adding a CSS border on that same edge doubles it.\n * Content dividers use `--border`; frame headers use `border-surface-rim`\n * and stay inside the inset pixel reserved by MainCard.\n *\n * Radius is deliberately absent — it belongs to the family (`rounded-xl` for a\n * popup, `rounded-studio-frame` for the app frame).\n *\n * A raised surface pins its own fill across states. Interaction is expressed by\n * the state layer below, never by swapping the background: `Button`'s variants\n * all drive `background-color` on hover, and a raised surface wearing one would\n * otherwise turn translucent mid-hover and composite over the canvas. A call\n * site that genuinely wants another fill still overrides it, since its own\n * classes come after these.\n */\nconst fieldsOnSurface =\n '[--field:var(--field-on-surface)] [--field-disabled:var(--field-on-surface)] [--field-rim:var(--field-rim-on-surface)]';\nconst fieldsOnDialog =\n '[--field:var(--field-on-surface)] [--field-disabled:var(--field-on-surface)] [--field-rim:var(--surface-rim)]';\nconst fieldsOnPage = '[--field:var(--card)] [--field-disabled:var(--fill-subtle)] [--field-rim:var(--surface-rim)]';\n\nexport const raisedSurfaceStyle = 'bg-card hover:bg-card active:bg-card shadow-raised ' + fieldsOnSurface;\n\nexport const overlaySurfaceStyle = 'bg-card shadow-overlay ' + fieldsOnSurface;\n\nexport const dialogSurfaceStyle = 'bg-dialog shadow-overlay ' + fieldsOnDialog;\n\n/**\n * The app frame and the panels docked beside it. Same elevation as a card, one\n * step lower fill: a frame is a hole cut in the rail, and what sits inside it —\n * cards, fields, tables — needs a step to rise above. `Card` is for that\n * content, never for the frame around it.\n */\nexport const frameSurfaceStyle = 'bg-background shadow-raised ' + fieldsOnPage;\n\n/**\n * The frame's fill without its elevation, for a frame that is raised only at\n * some breakpoints: `MainCard` is flat page content below `lg`.\n */\nexport const frameFillStyle = 'bg-background ' + fieldsOnPage;\n\n/**\n * Interaction states for a surface that already carries an opaque fill. The\n * `state-layer` utility in `components.css` holds the reasoning and the measured\n * numbers: the rung has to be layered, never swapped into `background-color`.\n */\nexport const surfaceStateLayerStyle = 'state-layer';\n\n/**\n * Same layer, driven by an ancestor marked `group` rather than the surface\n * itself. A utility cannot read an ancestor's state, so this one stays composed\n * from variants — `isolate` and the negative z-index do the same job as the\n * utility's, and `inset-px` likewise keeps the inset rim visible.\n */\nexport const surfaceGroupStateLayerStyle =\n 'relative isolate before:pointer-events-none before:absolute before:-z-1 before:inset-px before:rounded-[inherit] before:transition-colors before:duration-fast motion-reduce:before:transition-none group-hover:before:bg-fill-subtle group-focus-visible:before:bg-fill-subtle';\n"],"names":[],"mappings":"AA6BA,MAAM,eAAA,GACJ,wHAAA;AACF,MAAM,cAAA,GACJ,+GAAA;AACF,MAAM,YAAA,GAAe,8FAAA;AAEd,MAAM,qBAAqB,qDAAA,GAAwD;AAEnF,MAAM,sBAAsB,yBAAA,GAA4B;AAExD,MAAM,qBAAqB,2BAAA,GAA8B;AAQzD,MAAM,oBAAoB,8BAAA,GAAiC;AAM3D,MAAM,iBAAiB,gBAAA,GAAmB;AAO1C,MAAM,sBAAA,GAAyB;AAQ/B,MAAM,2BAAA,GACX;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export { SaveAsDatasetItemDialog, type SaveAsDatasetItemDialogProps } from './save-as-dataset-item-dialog';
|
|
1
|
+
export { SaveAsDatasetItemDialog, type SaveAsDatasetItemDialogProps, type CreateDatasetDialogRenderProps, } from './save-as-dataset-item-dialog';
|
|
@@ -1,5 +1,10 @@
|
|
|
1
1
|
import { ReactNode } from 'react';
|
|
2
|
-
import {
|
|
2
|
+
import { DataPanelProps } from '../../../ds/components/DataPanel';
|
|
3
|
+
export type CreateDatasetDialogRenderProps = {
|
|
4
|
+
open: boolean;
|
|
5
|
+
onOpenChange: (open: boolean) => void;
|
|
6
|
+
onSuccess: (datasetId: string) => void;
|
|
7
|
+
};
|
|
3
8
|
export type SaveAsDatasetItemDialogProps = {
|
|
4
9
|
initialInput: string;
|
|
5
10
|
initialGroundTruth: string;
|
|
@@ -12,10 +17,16 @@ export type SaveAsDatasetItemDialogProps = {
|
|
|
12
17
|
breadcrumb: ReactNode;
|
|
13
18
|
isOpen: boolean;
|
|
14
19
|
onClose: () => void;
|
|
15
|
-
|
|
20
|
+
/** Sibling-drawer elevation (see `DataPanel`); render after the panel it covers. */
|
|
21
|
+
depth?: DataPanelProps['depth'];
|
|
16
22
|
source?: {
|
|
17
23
|
type: 'csv' | 'json' | 'trace' | 'llm' | 'experiment-result' | 'candidate-screener';
|
|
18
24
|
referenceId?: string;
|
|
19
25
|
};
|
|
26
|
+
/**
|
|
27
|
+
* Renders a create-dataset dialog. When set, the Dataset select offers "Create dataset" as its
|
|
28
|
+
* first option and selects the new dataset once created.
|
|
29
|
+
*/
|
|
30
|
+
renderCreateDatasetDialog?: (props: CreateDatasetDialogRenderProps) => ReactNode;
|
|
20
31
|
};
|
|
21
|
-
export declare function SaveAsDatasetItemDialog({ initialInput, initialGroundTruth, initialTrajectory, trajectoryLoading, initialToolMocks, breadcrumb, isOpen, onClose,
|
|
32
|
+
export declare function SaveAsDatasetItemDialog({ initialInput, initialGroundTruth, initialTrajectory, trajectoryLoading, initialToolMocks, breadcrumb, isOpen, onClose, depth, source, renderCreateDatasetDialog, }: SaveAsDatasetItemDialogProps): import("react").JSX.Element;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
+
import { SaveAsDatasetItemDialogProps } from '../../datasets';
|
|
1
2
|
import { SpanRecord } from '../../traces/types';
|
|
2
|
-
import {
|
|
3
|
+
import { DataPanelProps } from '../../../ds/components/DataPanel';
|
|
3
4
|
type TraceAsItemDialogProps = {
|
|
4
5
|
/** Full span record — if provided, used directly (no fetch). */
|
|
5
6
|
traceDetails?: SpanRecord;
|
|
@@ -8,7 +9,8 @@ type TraceAsItemDialogProps = {
|
|
|
8
9
|
traceId?: string;
|
|
9
10
|
isOpen: boolean;
|
|
10
11
|
onClose: () => void;
|
|
11
|
-
|
|
12
|
+
depth?: DataPanelProps['depth'];
|
|
13
|
+
renderCreateDatasetDialog?: SaveAsDatasetItemDialogProps['renderCreateDatasetDialog'];
|
|
12
14
|
};
|
|
13
|
-
export declare function TraceAsItemDialog({ traceDetails: externalTraceDetails, rootSpanId, traceId, isOpen, onClose,
|
|
15
|
+
export declare function TraceAsItemDialog({ traceDetails: externalTraceDetails, rootSpanId, traceId, isOpen, onClose, depth, renderCreateDatasetDialog, }: TraceAsItemDialogProps): import("react").JSX.Element;
|
|
14
16
|
export {};
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { ClientScoreRowData } from '@mastra/client-js';
|
|
2
2
|
import { ScoreRowData } from '@mastra/core/evals';
|
|
3
|
-
import {
|
|
3
|
+
import { DataPanelProps } from '../../../ds/components/DataPanel';
|
|
4
4
|
type ScoreForDatasetItem = ScoreRowData | ClientScoreRowData;
|
|
5
5
|
export type ScoreAsItemDialogProps = {
|
|
6
6
|
score?: ScoreForDatasetItem;
|
|
7
7
|
isOpen: boolean;
|
|
8
8
|
onClose: () => void;
|
|
9
|
-
|
|
9
|
+
depth?: DataPanelProps['depth'];
|
|
10
10
|
};
|
|
11
|
-
export declare function ScoreAsItemDialog({ score, isOpen, onClose,
|
|
11
|
+
export declare function ScoreAsItemDialog({ score, isOpen, onClose, depth }: ScoreAsItemDialogProps): import("react").JSX.Element;
|
|
12
12
|
export {};
|
|
@@ -24,7 +24,7 @@ export interface CrumbProps {
|
|
|
24
24
|
action?: React.ReactNode;
|
|
25
25
|
/**
|
|
26
26
|
* Entity switcher rendered next to the label; spread `crumbSwitcherTriggerProps` on it.
|
|
27
|
-
*
|
|
27
|
+
* When the crumb doesn't navigate (current crumb, or no `to`), its hit area covers the whole crumb.
|
|
28
28
|
*/
|
|
29
29
|
switcher?: React.ReactNode;
|
|
30
30
|
'data-testid'?: string;
|
|
@@ -32,4 +32,4 @@ export interface CrumbProps {
|
|
|
32
32
|
export declare const CrumbSkeleton: (props: {
|
|
33
33
|
"data-testid"?: string;
|
|
34
34
|
}) => React.JSX.Element;
|
|
35
|
-
export declare const Crumb: ({ className, as, isCurrent, action, switcher, icon, isLoading, children, ...props }: CrumbProps) => React.JSX.Element;
|
|
35
|
+
export declare const Crumb: ({ className, as, to, isCurrent, action, switcher, icon, isLoading, children, ...props }: CrumbProps) => React.JSX.Element;
|
|
@@ -8,7 +8,7 @@ export interface CodeProps extends React.HTMLAttributes<HTMLPreElement> {
|
|
|
8
8
|
/**
|
|
9
9
|
* Low-level shiki token renderer shared by `CodeBlock` and `MarkdownRenderer`.
|
|
10
10
|
* Dual-theme colors stay as `--shiki-light` / `--shiki-dark` CSS variables on
|
|
11
|
-
* each token span; the `.shiki-token` class (
|
|
11
|
+
* each token span; the `.shiki-token` class (components.css) picks the variant from
|
|
12
12
|
* the `.dark` root class, so theme switching is pure CSS — no ThemeProvider
|
|
13
13
|
* required. Renders plain text while highlighting is pending or when the
|
|
14
14
|
* language is missing/unknown.
|
|
@@ -15,7 +15,7 @@ export declare const frameSurfaceStyle: string;
|
|
|
15
15
|
export declare const frameFillStyle: string;
|
|
16
16
|
/**
|
|
17
17
|
* Interaction states for a surface that already carries an opaque fill. The
|
|
18
|
-
* `state-layer` utility in `
|
|
18
|
+
* `state-layer` utility in `components.css` holds the reasoning and the measured
|
|
19
19
|
* numbers: the rung has to be layered, never swapped into `background-color`.
|
|
20
20
|
*/
|
|
21
21
|
export declare const surfaceStateLayerStyle = "state-layer";
|
package/dist/style.css
CHANGED
|
@@ -193,8 +193,6 @@
|
|
|
193
193
|
--color-brand-blue: #6ccdfb;
|
|
194
194
|
--color-brand-red: #ff4758;
|
|
195
195
|
--color-brand-yellow: #e7e67b;
|
|
196
|
-
--color-warning-subtle: var(--warning-subtle);
|
|
197
|
-
--color-warning-indicator: var(--warning-indicator);
|
|
198
196
|
--color-scrim: var(--scrim);
|
|
199
197
|
--color-surface-overlay-soft: var(--surface-overlay-soft);
|
|
200
198
|
--color-surface-overlay-strong: var(--surface-overlay-strong);
|
|
@@ -279,7 +277,6 @@
|
|
|
279
277
|
--duration-slow: .3s;
|
|
280
278
|
--ease-out-custom: cubic-bezier(.33, 1, .68, 1);
|
|
281
279
|
--color-background: var(--background);
|
|
282
|
-
--color-sidebar: var(--sidebar);
|
|
283
280
|
}
|
|
284
281
|
}
|
|
285
282
|
|
|
@@ -3919,6 +3916,12 @@
|
|
|
3919
3916
|
animation: var(--animate-spin);
|
|
3920
3917
|
}
|
|
3921
3918
|
|
|
3919
|
+
.time-input::-webkit-calendar-picker-indicator {
|
|
3920
|
+
cursor: pointer;
|
|
3921
|
+
filter: invert(50%);
|
|
3922
|
+
background: url("/icons/clock.svg") center / 1em 1em no-repeat;
|
|
3923
|
+
}
|
|
3924
|
+
|
|
3922
3925
|
.cursor-col-resize {
|
|
3923
3926
|
cursor: col-resize;
|
|
3924
3927
|
}
|
|
@@ -14180,6 +14183,22 @@ html.light {
|
|
|
14180
14183
|
--chart-sequential-5: var(--purple-500);
|
|
14181
14184
|
}
|
|
14182
14185
|
|
|
14186
|
+
:root {
|
|
14187
|
+
--syntax-string: var(--green-300);
|
|
14188
|
+
--syntax-keyword: var(--red-400);
|
|
14189
|
+
--syntax-literal: var(--amber-300);
|
|
14190
|
+
--syntax-name: var(--cyan-300);
|
|
14191
|
+
--syntax-link: var(--blue-400);
|
|
14192
|
+
}
|
|
14193
|
+
|
|
14194
|
+
html.light {
|
|
14195
|
+
--syntax-string: var(--green-700);
|
|
14196
|
+
--syntax-keyword: var(--red-600);
|
|
14197
|
+
--syntax-literal: var(--amber-800);
|
|
14198
|
+
--syntax-name: var(--cyan-800);
|
|
14199
|
+
--syntax-link: var(--blue-600);
|
|
14200
|
+
}
|
|
14201
|
+
|
|
14183
14202
|
:root {
|
|
14184
14203
|
--fill-tint: 100%;
|
|
14185
14204
|
--fill-subtle: oklch(var(--fill-tint) 0 0 / 4%);
|
|
@@ -14292,22 +14311,6 @@ html.light {
|
|
|
14292
14311
|
--placeholder: var(--gray-7);
|
|
14293
14312
|
}
|
|
14294
14313
|
|
|
14295
|
-
.cm-editor {
|
|
14296
|
-
--syntax-string: var(--green-300);
|
|
14297
|
-
--syntax-keyword: var(--red-400);
|
|
14298
|
-
--syntax-literal: var(--amber-300);
|
|
14299
|
-
--syntax-name: var(--cyan-300);
|
|
14300
|
-
--syntax-link: var(--blue-400);
|
|
14301
|
-
}
|
|
14302
|
-
|
|
14303
|
-
html.light .cm-editor {
|
|
14304
|
-
--syntax-string: var(--green-700);
|
|
14305
|
-
--syntax-keyword: var(--red-600);
|
|
14306
|
-
--syntax-literal: var(--amber-800);
|
|
14307
|
-
--syntax-name: var(--cyan-800);
|
|
14308
|
-
--syntax-link: var(--blue-600);
|
|
14309
|
-
}
|
|
14310
|
-
|
|
14311
14314
|
.thread-viewport > [data-radix-scroll-area-content] {
|
|
14312
14315
|
background-color: inherit;
|
|
14313
14316
|
flex-direction: column;
|
package/dist/toast.css
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/* Toast tokens live here — only consumed by `.mastra-toaster` so they don't need to ship in
|
|
2
|
-
|
|
2
|
+
components.css for every component. The bg/border alias theme-scoped status roles, so the single
|
|
3
3
|
:root declaration flips with the theme. */
|
|
4
4
|
:root {
|
|
5
5
|
--toast-success-bg: var(--success-subtle);
|
package/dist/tokens.cjs.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tokens.cjs.js","sources":["../src/ds/tokens/animations.ts","../src/ds/tokens/borders.ts","../src/ds/tokens/fonts.ts","../src/ds/tokens/shadows.ts","../src/ds/tokens/sizes.ts"],"sourcesContent":["/** Named duration rungs, one per `@utility duration-*` in `theme/motion.css`. Tailwind cannot\n * infer a custom utility, so `lib/tw-merge-config.ts` registers these names to keep\n * `duration-fast` and `duration-slow` from both surviving a merge. */\nexport const Durations = ['fast', 'normal', 'slow'] as const;\n\n/** Entrance played by anything the reader watches arrive. Defined in `ds/components/Arrival/arrival.css`. */\nexport const ARRIVING_CLASS = 'mastra-arriving';\n\n/** How long that entrance runs, and so how long a word counts as new. Kept in step with `arrival.css`. */\nexport const ARRIVING_MS = 800;\n","export const BorderRadius = {\n none: 'var(--radius-none)',\n sm: 'var(--radius-sm)',\n md: 'var(--radius-md)',\n lg: 'var(--radius-lg)',\n xl: 'var(--radius-xl)',\n};\n","// Every `--text-*` role in `theme/typography.css`, in scale order. `lib/tw-merge-config.ts`\n// turns this list into the `font-size` conflict group, so one role class cleanly replaces\n// another in `cn()`; a role added to the CSS and missing here silently stops deduping.\n// `theme-export.test.ts` holds the two sides in step.\n//\n// A role is a complete text style: the size arrives with the weight, line height and\n// tracking declared beside it in the CSS. Components pick a role; they never assemble one,\n// and nothing mirrors those values here — the foundations story reads them off the element.\nexport const TextRoles = [\n 'hero',\n 'lead',\n 'display',\n 'title',\n 'heading',\n 'subheading',\n 'body',\n 'label',\n 'card-title',\n 'card-title-tight',\n 'card-title-strong',\n 'body-sm',\n 'column',\n 'caption',\n 'eyebrow',\n 'meta',\n] as const;\n\nexport type TextRole = (typeof TextRoles)[number];\n\n/** SVG/canvas text can't read CSS tokens; these mirror `meta` (10px) and `caption` (12px). */\nexport const CHART_TICK_FONT_SIZE = 10;\nexport const CHART_LABEL_FONT_SIZE = 12;\n","// The `shadow-raised` / `shadow-overlay` utilities compose lip + rim + drops on\n// the element (see `
|
|
1
|
+
{"version":3,"file":"tokens.cjs.js","sources":["../src/ds/tokens/animations.ts","../src/ds/tokens/borders.ts","../src/ds/tokens/fonts.ts","../src/ds/tokens/shadows.ts","../src/ds/tokens/sizes.ts"],"sourcesContent":["/** Named duration rungs, one per `@utility duration-*` in `theme/motion.css`. Tailwind cannot\n * infer a custom utility, so `lib/tw-merge-config.ts` registers these names to keep\n * `duration-fast` and `duration-slow` from both surviving a merge. */\nexport const Durations = ['fast', 'normal', 'slow'] as const;\n\n/** Entrance played by anything the reader watches arrive. Defined in `ds/components/Arrival/arrival.css`. */\nexport const ARRIVING_CLASS = 'mastra-arriving';\n\n/** How long that entrance runs, and so how long a word counts as new. Kept in step with `arrival.css`. */\nexport const ARRIVING_MS = 800;\n","export const BorderRadius = {\n none: 'var(--radius-none)',\n sm: 'var(--radius-sm)',\n md: 'var(--radius-md)',\n lg: 'var(--radius-lg)',\n xl: 'var(--radius-xl)',\n};\n","// Every `--text-*` role in `theme/typography.css`, in scale order. `lib/tw-merge-config.ts`\n// turns this list into the `font-size` conflict group, so one role class cleanly replaces\n// another in `cn()`; a role added to the CSS and missing here silently stops deduping.\n// `theme-export.test.ts` holds the two sides in step.\n//\n// A role is a complete text style: the size arrives with the weight, line height and\n// tracking declared beside it in the CSS. Components pick a role; they never assemble one,\n// and nothing mirrors those values here — the foundations story reads them off the element.\nexport const TextRoles = [\n 'hero',\n 'lead',\n 'display',\n 'title',\n 'heading',\n 'subheading',\n 'body',\n 'label',\n 'card-title',\n 'card-title-tight',\n 'card-title-strong',\n 'body-sm',\n 'column',\n 'caption',\n 'eyebrow',\n 'meta',\n] as const;\n\nexport type TextRole = (typeof TextRoles)[number];\n\n/** SVG/canvas text can't read CSS tokens; these mirror `meta` (10px) and `caption` (12px). */\nexport const CHART_TICK_FONT_SIZE = 10;\nexport const CHART_LABEL_FONT_SIZE = 12;\n","// The `shadow-raised` / `shadow-overlay` utilities compose lip + rim + drops on\n// the element (see `components.css`); these are the drop layers they pull in.\nexport const Shadows = {\n raised: 'var(--elevation-raised)',\n overlay: 'var(--elevation-overlay)',\n input: 'var(--elevation-raised)',\n};\n","export const Sizes = {\n 'icon-xs': '12px',\n 'icon-sm': '14px',\n 'icon-md': '16px',\n 'icon-lg': '20px',\n 'control-sm': '1.75rem',\n 'control-md': '1.875rem',\n 'control-lg': '2rem',\n 'header-default': '40px',\n 'table-header': '28px',\n 'table-row': '40px',\n 'table-row-small': '32px',\n 'avatar-sm': '24px',\n 'avatar-md': '32px',\n 'avatar-lg': '40px',\n dropdown: '300px',\n};\n"],"names":[],"mappings":";;;;;;AAGO,MAAM,SAAA,GAAY,CAAC,MAAA,EAAQ,QAAA,EAAU,MAAM;AAG3C,MAAM,cAAA,GAAiB;AAGvB,MAAM,WAAA,GAAc;;ACTpB,MAAM,YAAA,GAAe;AAAA,EAC1B,IAAA,EAAM,oBAAA;AAAA,EACN,EAAA,EAAI,kBAAA;AAAA,EACJ,EAAA,EAAI,kBAAA;AAAA,EACJ,EAAA,EAAI,kBAAA;AAAA,EACJ,EAAA,EAAI;AACN;;ACEO,MAAM,SAAA,GAAY;AAAA,EACvB,MAAA;AAAA,EACA,MAAA;AAAA,EACA,SAAA;AAAA,EACA,OAAA;AAAA,EACA,SAAA;AAAA,EACA,YAAA;AAAA,EACA,MAAA;AAAA,EACA,OAAA;AAAA,EACA,YAAA;AAAA,EACA,kBAAA;AAAA,EACA,mBAAA;AAAA,EACA,SAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA;AACF;AAKO,MAAM,oBAAA,GAAuB;AAC7B,MAAM,qBAAA,GAAwB;;AC7B9B,MAAM,OAAA,GAAU;AAAA,EACrB,MAAA,EAAQ,yBAAA;AAAA,EACR,OAAA,EAAS,0BAAA;AAAA,EACT,KAAA,EAAO;AACT;;ACNO,MAAM,KAAA,GAAQ;AAAA,EACnB,SAAA,EAAW,MAAA;AAAA,EACX,SAAA,EAAW,MAAA;AAAA,EACX,SAAA,EAAW,MAAA;AAAA,EACX,SAAA,EAAW,MAAA;AAAA,EACX,YAAA,EAAc,SAAA;AAAA,EACd,YAAA,EAAc,UAAA;AAAA,EACd,YAAA,EAAc,MAAA;AAAA,EACd,gBAAA,EAAkB,MAAA;AAAA,EAClB,cAAA,EAAgB,MAAA;AAAA,EAChB,WAAA,EAAa,MAAA;AAAA,EACb,iBAAA,EAAmB,MAAA;AAAA,EACnB,WAAA,EAAa,MAAA;AAAA,EACb,WAAA,EAAa,MAAA;AAAA,EACb,WAAA,EAAa,MAAA;AAAA,EACb,QAAA,EAAU;AACZ;;;;;;;;;;;;;;;"}
|
package/dist/tokens.es.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tokens.es.js","sources":["../src/ds/tokens/animations.ts","../src/ds/tokens/borders.ts","../src/ds/tokens/fonts.ts","../src/ds/tokens/shadows.ts","../src/ds/tokens/sizes.ts"],"sourcesContent":["/** Named duration rungs, one per `@utility duration-*` in `theme/motion.css`. Tailwind cannot\n * infer a custom utility, so `lib/tw-merge-config.ts` registers these names to keep\n * `duration-fast` and `duration-slow` from both surviving a merge. */\nexport const Durations = ['fast', 'normal', 'slow'] as const;\n\n/** Entrance played by anything the reader watches arrive. Defined in `ds/components/Arrival/arrival.css`. */\nexport const ARRIVING_CLASS = 'mastra-arriving';\n\n/** How long that entrance runs, and so how long a word counts as new. Kept in step with `arrival.css`. */\nexport const ARRIVING_MS = 800;\n","export const BorderRadius = {\n none: 'var(--radius-none)',\n sm: 'var(--radius-sm)',\n md: 'var(--radius-md)',\n lg: 'var(--radius-lg)',\n xl: 'var(--radius-xl)',\n};\n","// Every `--text-*` role in `theme/typography.css`, in scale order. `lib/tw-merge-config.ts`\n// turns this list into the `font-size` conflict group, so one role class cleanly replaces\n// another in `cn()`; a role added to the CSS and missing here silently stops deduping.\n// `theme-export.test.ts` holds the two sides in step.\n//\n// A role is a complete text style: the size arrives with the weight, line height and\n// tracking declared beside it in the CSS. Components pick a role; they never assemble one,\n// and nothing mirrors those values here — the foundations story reads them off the element.\nexport const TextRoles = [\n 'hero',\n 'lead',\n 'display',\n 'title',\n 'heading',\n 'subheading',\n 'body',\n 'label',\n 'card-title',\n 'card-title-tight',\n 'card-title-strong',\n 'body-sm',\n 'column',\n 'caption',\n 'eyebrow',\n 'meta',\n] as const;\n\nexport type TextRole = (typeof TextRoles)[number];\n\n/** SVG/canvas text can't read CSS tokens; these mirror `meta` (10px) and `caption` (12px). */\nexport const CHART_TICK_FONT_SIZE = 10;\nexport const CHART_LABEL_FONT_SIZE = 12;\n","// The `shadow-raised` / `shadow-overlay` utilities compose lip + rim + drops on\n// the element (see `
|
|
1
|
+
{"version":3,"file":"tokens.es.js","sources":["../src/ds/tokens/animations.ts","../src/ds/tokens/borders.ts","../src/ds/tokens/fonts.ts","../src/ds/tokens/shadows.ts","../src/ds/tokens/sizes.ts"],"sourcesContent":["/** Named duration rungs, one per `@utility duration-*` in `theme/motion.css`. Tailwind cannot\n * infer a custom utility, so `lib/tw-merge-config.ts` registers these names to keep\n * `duration-fast` and `duration-slow` from both surviving a merge. */\nexport const Durations = ['fast', 'normal', 'slow'] as const;\n\n/** Entrance played by anything the reader watches arrive. Defined in `ds/components/Arrival/arrival.css`. */\nexport const ARRIVING_CLASS = 'mastra-arriving';\n\n/** How long that entrance runs, and so how long a word counts as new. Kept in step with `arrival.css`. */\nexport const ARRIVING_MS = 800;\n","export const BorderRadius = {\n none: 'var(--radius-none)',\n sm: 'var(--radius-sm)',\n md: 'var(--radius-md)',\n lg: 'var(--radius-lg)',\n xl: 'var(--radius-xl)',\n};\n","// Every `--text-*` role in `theme/typography.css`, in scale order. `lib/tw-merge-config.ts`\n// turns this list into the `font-size` conflict group, so one role class cleanly replaces\n// another in `cn()`; a role added to the CSS and missing here silently stops deduping.\n// `theme-export.test.ts` holds the two sides in step.\n//\n// A role is a complete text style: the size arrives with the weight, line height and\n// tracking declared beside it in the CSS. Components pick a role; they never assemble one,\n// and nothing mirrors those values here — the foundations story reads them off the element.\nexport const TextRoles = [\n 'hero',\n 'lead',\n 'display',\n 'title',\n 'heading',\n 'subheading',\n 'body',\n 'label',\n 'card-title',\n 'card-title-tight',\n 'card-title-strong',\n 'body-sm',\n 'column',\n 'caption',\n 'eyebrow',\n 'meta',\n] as const;\n\nexport type TextRole = (typeof TextRoles)[number];\n\n/** SVG/canvas text can't read CSS tokens; these mirror `meta` (10px) and `caption` (12px). */\nexport const CHART_TICK_FONT_SIZE = 10;\nexport const CHART_LABEL_FONT_SIZE = 12;\n","// The `shadow-raised` / `shadow-overlay` utilities compose lip + rim + drops on\n// the element (see `components.css`); these are the drop layers they pull in.\nexport const Shadows = {\n raised: 'var(--elevation-raised)',\n overlay: 'var(--elevation-overlay)',\n input: 'var(--elevation-raised)',\n};\n","export const Sizes = {\n 'icon-xs': '12px',\n 'icon-sm': '14px',\n 'icon-md': '16px',\n 'icon-lg': '20px',\n 'control-sm': '1.75rem',\n 'control-md': '1.875rem',\n 'control-lg': '2rem',\n 'header-default': '40px',\n 'table-header': '28px',\n 'table-row': '40px',\n 'table-row-small': '32px',\n 'avatar-sm': '24px',\n 'avatar-md': '32px',\n 'avatar-lg': '40px',\n dropdown: '300px',\n};\n"],"names":[],"mappings":";;AAGO,MAAM,SAAA,GAAY,CAAC,MAAA,EAAQ,QAAA,EAAU,MAAM;AAG3C,MAAM,cAAA,GAAiB;AAGvB,MAAM,WAAA,GAAc;;ACTpB,MAAM,YAAA,GAAe;AAAA,EAC1B,IAAA,EAAM,oBAAA;AAAA,EACN,EAAA,EAAI,kBAAA;AAAA,EACJ,EAAA,EAAI,kBAAA;AAAA,EACJ,EAAA,EAAI,kBAAA;AAAA,EACJ,EAAA,EAAI;AACN;;ACEO,MAAM,SAAA,GAAY;AAAA,EACvB,MAAA;AAAA,EACA,MAAA;AAAA,EACA,SAAA;AAAA,EACA,OAAA;AAAA,EACA,SAAA;AAAA,EACA,YAAA;AAAA,EACA,MAAA;AAAA,EACA,OAAA;AAAA,EACA,YAAA;AAAA,EACA,kBAAA;AAAA,EACA,mBAAA;AAAA,EACA,SAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA;AACF;AAKO,MAAM,oBAAA,GAAuB;AAC7B,MAAM,qBAAA,GAAwB;;AC7B9B,MAAM,OAAA,GAAU;AAAA,EACrB,MAAA,EAAQ,yBAAA;AAAA,EACR,OAAA,EAAS,0BAAA;AAAA,EACT,KAAA,EAAO;AACT;;ACNO,MAAM,KAAA,GAAQ;AAAA,EACnB,SAAA,EAAW,MAAA;AAAA,EACX,SAAA,EAAW,MAAA;AAAA,EACX,SAAA,EAAW,MAAA;AAAA,EACX,SAAA,EAAW,MAAA;AAAA,EACX,YAAA,EAAc,SAAA;AAAA,EACd,YAAA,EAAc,UAAA;AAAA,EACd,YAAA,EAAc,MAAA;AAAA,EACd,gBAAA,EAAkB,MAAA;AAAA,EAClB,cAAA,EAAgB,MAAA;AAAA,EAChB,WAAA,EAAa,MAAA;AAAA,EACb,iBAAA,EAAmB,MAAA;AAAA,EACnB,WAAA,EAAa,MAAA;AAAA,EACb,WAAA,EAAa,MAAA;AAAA,EACb,WAAA,EAAa,MAAA;AAAA,EACb,QAAA,EAAU;AACZ;;;;"}
|
|
@@ -3,14 +3,14 @@
|
|
|
3
3
|
and text-shadow are honoured by `::highlight()` — border, padding and border-radius are
|
|
4
4
|
ignored by the spec, so the highlight cannot have rounded corners. */
|
|
5
5
|
::highlight(search-result) {
|
|
6
|
-
background-color: var(--
|
|
7
|
-
color: var(--
|
|
6
|
+
background-color: var(--warning-indicator);
|
|
7
|
+
color: var(--sidebar);
|
|
8
8
|
}
|
|
9
9
|
|
|
10
10
|
/* The indirect match is a hint, not the answer: same hue, muted pairing (`warning-subtle`
|
|
11
11
|
background with `warning-indicator` text) so it reads as related
|
|
12
12
|
to the direct highlight without competing with it. Both themes define the pair. */
|
|
13
13
|
::highlight(search-result-indirect) {
|
|
14
|
-
background-color: var(--
|
|
15
|
-
color: var(--
|
|
14
|
+
background-color: var(--warning-subtle);
|
|
15
|
+
color: var(--warning-indicator);
|
|
16
16
|
}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mastra/playground-ui",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "
|
|
4
|
+
"version": "65.0.0-alpha.1",
|
|
5
5
|
"description": "Mastra Playground components",
|
|
6
6
|
"sideEffects": [
|
|
7
7
|
"**/*.css"
|
|
@@ -9,11 +9,15 @@
|
|
|
9
9
|
"files": [
|
|
10
10
|
"dist",
|
|
11
11
|
"theme.css",
|
|
12
|
+
"components.css",
|
|
13
|
+
"sources.css",
|
|
12
14
|
"theme"
|
|
13
15
|
],
|
|
14
16
|
"exports": {
|
|
15
17
|
"./style.css": "./dist/style.css",
|
|
16
18
|
"./theme.css": "./theme.css",
|
|
19
|
+
"./components.css": "./components.css",
|
|
20
|
+
"./sources.css": "./sources.css",
|
|
17
21
|
"./tokens": {
|
|
18
22
|
"import": {
|
|
19
23
|
"types": "./dist/tokens.d.ts",
|
|
@@ -170,6 +174,7 @@
|
|
|
170
174
|
"@mcp-ui/client": "^7.1.0",
|
|
171
175
|
"@pierre/diffs": "1.5.1",
|
|
172
176
|
"@radix-ui/react-visually-hidden": "^1.2.4",
|
|
177
|
+
"@tailwindcss/typography": "^0.5.19",
|
|
173
178
|
"@tanstack/react-virtual": "^3.13.22",
|
|
174
179
|
"@uiw/codemirror-theme-dracula": "^4.25.11",
|
|
175
180
|
"@uiw/react-codemirror": "^4.25.11",
|
|
@@ -191,6 +196,7 @@
|
|
|
191
196
|
"shiki": "^1.29.2",
|
|
192
197
|
"sonner": "^2.0.7",
|
|
193
198
|
"superjson": "^2.2.6",
|
|
199
|
+
"tw-animate-css": "^1.4.0",
|
|
194
200
|
"use-debounce": "^10.1.0",
|
|
195
201
|
"zod": "^3.25.0"
|
|
196
202
|
},
|
|
@@ -202,9 +208,9 @@
|
|
|
202
208
|
"react": ">=19.0.0",
|
|
203
209
|
"react-dom": ">=19.0.0",
|
|
204
210
|
"tailwindcss": "^4.0.0",
|
|
205
|
-
"@mastra/ai-sdk": "^1.11.
|
|
206
|
-
"@mastra/
|
|
207
|
-
"@mastra/
|
|
211
|
+
"@mastra/ai-sdk": "^1.11.2-alpha.0",
|
|
212
|
+
"@mastra/client-js": "^1.56.0-alpha.1",
|
|
213
|
+
"@mastra/react": "1.11.1-alpha.1"
|
|
208
214
|
},
|
|
209
215
|
"devDependencies": {
|
|
210
216
|
"@modelcontextprotocol/sdk": "^1.32.1",
|
|
@@ -215,7 +221,6 @@
|
|
|
215
221
|
"@stryker-mutator/core": "10.0.0",
|
|
216
222
|
"@stryker-mutator/vitest-runner": "10.0.0",
|
|
217
223
|
"@tailwindcss/postcss": "^4.3.3",
|
|
218
|
-
"@tailwindcss/typography": "^0.5.19",
|
|
219
224
|
"@tailwindcss/vite": "4.3.3",
|
|
220
225
|
"@tanstack/react-query": "^5.90.21",
|
|
221
226
|
"@testing-library/react": "^16.3.2",
|
|
@@ -243,19 +248,18 @@
|
|
|
243
248
|
"storybook": "^10.6.0",
|
|
244
249
|
"tailwind-merge": "^3.5.0",
|
|
245
250
|
"tailwindcss": "4.3.3",
|
|
246
|
-
"tw-animate-css": "^1.4.0",
|
|
247
251
|
"typescript": "^7.0.2",
|
|
248
252
|
"vite": "^7.3.1",
|
|
249
253
|
"vite-plugin-dts": "^4.5.4",
|
|
250
254
|
"vite-plugin-lib-inject-css": "^2.2.2",
|
|
251
255
|
"vitest": "4.1.11",
|
|
252
|
-
"@mastra/client-js": "^1.55.0",
|
|
253
256
|
"@internal/lint": "0.0.144",
|
|
254
|
-
"@mastra/
|
|
255
|
-
"@mastra/
|
|
256
|
-
"@mastra/
|
|
257
|
-
"@mastra/
|
|
258
|
-
"@mastra/
|
|
257
|
+
"@mastra/ai-sdk": "1.11.2-alpha.0",
|
|
258
|
+
"@mastra/client-js": "^1.56.0-alpha.1",
|
|
259
|
+
"@mastra/react": "1.11.1-alpha.1",
|
|
260
|
+
"@mastra/schema-compat": "1.3.16-alpha.0",
|
|
261
|
+
"@mastra/core": "1.79.0-alpha.1",
|
|
262
|
+
"@mastra/memory": "1.39.0-alpha.0"
|
|
259
263
|
},
|
|
260
264
|
"homepage": "https://mastra.ai",
|
|
261
265
|
"repository": {
|
package/sources.css
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
@source './dist/**/*.js';
|
package/theme/code.css
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/* Syntax highlight roles the CodeMirror themes read, one chromatic ramp step per role. */
|
|
2
|
+
|
|
3
|
+
:root {
|
|
4
|
+
--syntax-string: var(--green-300);
|
|
5
|
+
--syntax-keyword: var(--red-400);
|
|
6
|
+
--syntax-literal: var(--amber-300);
|
|
7
|
+
--syntax-name: var(--cyan-300);
|
|
8
|
+
--syntax-link: var(--blue-400);
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
html.light {
|
|
12
|
+
--syntax-string: var(--green-700);
|
|
13
|
+
--syntax-keyword: var(--red-600);
|
|
14
|
+
--syntax-literal: var(--amber-800);
|
|
15
|
+
--syntax-name: var(--cyan-800);
|
|
16
|
+
--syntax-link: var(--blue-600);
|
|
17
|
+
}
|
package/theme/surfaces.css
CHANGED
|
@@ -100,7 +100,7 @@
|
|
|
100
100
|
* overlay (popover, dropdown, dialog, drawer, tooltip).
|
|
101
101
|
*
|
|
102
102
|
* These are the drop layers only. The `shadow-raised` / `shadow-overlay`
|
|
103
|
-
* utilities in `
|
|
103
|
+
* utilities in `components.css` assemble lip + rim + drops on the element
|
|
104
104
|
* itself, which is what lets a state repaint the rim: a custom property
|
|
105
105
|
* holding `var(--surface-rim)` would be substituted here, on the root, and
|
|
106
106
|
* every descendant would inherit the finished string.
|
|
@@ -117,7 +117,7 @@
|
|
|
117
117
|
* `border` beside it, which would read as two lines — and is why a field and
|
|
118
118
|
* a card can be the same material. Hover does not touch it: the rim is the
|
|
119
119
|
* loudest part of a borderless surface, so a pointer wash goes through
|
|
120
|
-
* `--surface-tint` (see `
|
|
120
|
+
* `--surface-tint` (see `components.css`) and leaves the boundary alone.
|
|
121
121
|
*
|
|
122
122
|
* The rim is inset, so it cannot be clipped: the app frame and every
|
|
123
123
|
* ScrollArea viewport are `overflow-hidden`, and an outer ring on a surface
|
package/theme.css
CHANGED
|
@@ -10,6 +10,7 @@
|
|
|
10
10
|
* colors raw ramps — background, gray, gray-alpha, chromatic hues, Mastra brand
|
|
11
11
|
* status status, badge, and product roles
|
|
12
12
|
* data-viz chart series and span-type hues
|
|
13
|
+
* code syntax highlight roles
|
|
13
14
|
* surfaces fill ladder, boundary ladder, elevation, scrim
|
|
14
15
|
* typography text roles and font families
|
|
15
16
|
* scale spacing multiplier, named rungs, radii, breakpoints
|
|
@@ -23,6 +24,7 @@
|
|
|
23
24
|
@import './theme/colors.css';
|
|
24
25
|
@import './theme/status.css';
|
|
25
26
|
@import './theme/data-viz.css';
|
|
27
|
+
@import './theme/code.css';
|
|
26
28
|
@import './theme/surfaces.css';
|
|
27
29
|
@import './theme/typography.css';
|
|
28
30
|
@import './theme/scale.css';
|