diff --git a/packages/designer/public/designer-canvas/step.json b/packages/designer/public/designer-canvas/step.json new file mode 100644 index 0000000000000000000000000000000000000000..f7741e9a145ee4493c622672d26fea8ba00928c1 --- /dev/null +++ b/packages/designer/public/designer-canvas/step.json @@ -0,0 +1,108 @@ +{ + "id": "root-component", + "type": "component", + "componentType": "frame", + "contents": [ + { + "id": "root-layout", + "type": "content-container", + "appearance": { + "class": "f-page f-page-navigate f-page-is-grid-card" + }, + "contents": [ + { + "id": "page-header", + "type": "page-header", + "appearance": { + "class": "f-page-header" + }, + "icon": "f-icon f-icon-page-title-dictionary", + "title": "步骤条示例", + "toolbar": { + "type": "response-toolbar", + "buttons": [ + { + "id": "button-add", + "type": "response-toolbar-item", + "appearance": { + "class": "btn-primary" + }, + "text": "新增" + }, + { + "id": "button-edit", + "type": "response-toolbar-item", + "text": "编辑" + }, + { + "id": "button-save", + "type": "response-toolbar-item", + "text": "保存" + }, + { + "id": "button-cancel", + "type": "response-toolbar-item", + "text": "取消" + }, + { + "id": "button-delete", + "type": "response-toolbar-item", + "text": "删除" + } + ] + } + }, + { + "id": "main-container", + "type": "content-container", + "appearance": { + "class": "f-page-main" + }, + "contents": [ + { + "id": "step-component", + "type": "component", + "componentType": "step", + "appearance": { + "class": "f-progress-step" + }, + "props": { + "direction": "horizontal", + "fill": false, + "height": 0, + "clickable": true, + "steps": [ + { + "id": "1", + "title": "第一步", + "description": "这是第一步的描述", + "disable": false, + "icon": "", + "status": "" + }, + { + "id": "2", + "title": "第二步", + "description": "这是第二步的描述", + "disable": false, + "icon": "", + "status": "" + }, + { + "id": "3", + "title": "第三步", + "description": "这是第三步的描述", + "disable": false, + "icon": "", + "status": "" + } + ], + "activeIndex": 0 + } + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/packages/designer/src/app-providers.ts b/packages/designer/src/app-providers.ts index ea3461537cdcd86238143feb91494b8095ee811b..bc8b288b6bf61e1f3af32d2c6fc36641887b03c0 100644 --- a/packages/designer/src/app-providers.ts +++ b/packages/designer/src/app-providers.ts @@ -2,15 +2,13 @@ import { FLoadingService, FTooltipDirective, FMessageBoxService, F_MODAL_SERVICE_TOKEN, FModalService, LookupSchemaRepositoryToken, FieldSelectorRepositoryToken, F_NOTIFY_SERVICE_TOKEN, FNotifyService, ControllerSchemaRepositorySymbol, FormSchemaRepositorySymbol } from "@farris/ui-vue/components"; import { App } from "vue"; import { useDesignerContext } from "./components/composition/designer-context/use-designer-context"; -// const designerContext =useDesignerContext(); - +// const designerContext = useDesignerContext(); export default { install(app: App): void { app.provide(F_MODAL_SERVICE_TOKEN, new FModalService(app)); app.provide('FLoadingService', FLoadingService); // app.provide('designerContext', designerContext); - // const metadataPath = metadataService.getMetadataPath(); // app.provide(MetadataPathToken, metadataPath); diff --git a/packages/designer/src/components/components/form-designer/form-designer.component.tsx b/packages/designer/src/components/components/form-designer/form-designer.component.tsx index a562675fd849d91a0b5b4b86801a65ff91117bd0..9ff9c2d54c419454113c64cf6aea077f57755f54 100644 --- a/packages/designer/src/components/components/form-designer/form-designer.component.tsx +++ b/packages/designer/src/components/components/form-designer/form-designer.component.tsx @@ -7,7 +7,7 @@ import MonacoEditor from '../monaco-editor/monaco-editor.component'; import FEntityTreeView from '../entity-tree-view/components/entity-tree-view.component'; import FCustomClassEditor from './components/custom-class-editor/custom-class-editor.component'; import modulePropertyConfig from '../../types/form-property-config.json'; -import { UseDesignerContext } from "src/components/types/designer-context"; +import { UseDesignerContext } from "../../types/designer-context"; export default defineComponent({ name: 'FFormDesigner', @@ -25,6 +25,8 @@ export default defineComponent({ const monacoEditorRef = ref(); const customClassEditorRef = ref(); const designerHostService = inject('designer-host-service') as DesignerHost; + // const designerContext = inject('designerContext') as UseDesignerContext; + // const { toolboxItems, componentsToRegister, designerMode } = designerContext; const designerContextRef = inject("designerContext") as Ref; const designerContext = designerContextRef.value as UseDesignerContext; diff --git a/packages/designer/src/components/types/toolbox/pc-toolbox.json b/packages/designer/src/components/types/toolbox/pc-toolbox.json index 57d0ba4a51096f132513436257c7edd874b5dd5d..4988ca94a881f2b4f089641ae451e4e74a93fa9e 100644 --- a/packages/designer/src/components/types/toolbox/pc-toolbox.json +++ b/packages/designer/src/components/types/toolbox/pc-toolbox.json @@ -162,6 +162,13 @@ "type": "business", "name": "业务类控件", "items": [ + { + "id": "Step", + "type": "step", + "name": "步骤条", + "category": "container", + "icon": "steps" + }, { "id": "QuerySolution", "type": "query-solution", @@ -173,12 +180,6 @@ "type": "page-header", "name": "页头", "category": "container" - },{ - "id": "Step", - "type": "step", - "name": "步骤条", - "category": "container", - "icon": "steps" } ] }, diff --git a/packages/ui-vue/components/dynamic-form/src/composition/use-type-resolver.ts b/packages/ui-vue/components/dynamic-form/src/composition/use-type-resolver.ts index b97e375b61ea4304a837f711081691ced907883a..51dc9a36e14679639173b8a5181cf61eb9c77878 100644 --- a/packages/ui-vue/components/dynamic-form/src/composition/use-type-resolver.ts +++ b/packages/ui-vue/components/dynamic-form/src/composition/use-type-resolver.ts @@ -77,6 +77,7 @@ export function useTypeResolver(): UseTypeResolver { case 'response-layout-splitter': case 'menu-lookup': case 'json-editor': + case 'style-editor': return 'onChange'; case 'field-selector': case 'binding-selector': return 'onFieldSelected'; diff --git a/packages/ui-vue/components/dynamic-form/src/types.ts b/packages/ui-vue/components/dynamic-form/src/types.ts index 0ad906cbc9d03707aed8c577a810f27378afad31..5a37fea415ea2f83df68a5a8792c8187e346ba88 100644 --- a/packages/ui-vue/components/dynamic-form/src/types.ts +++ b/packages/ui-vue/components/dynamic-form/src/types.ts @@ -4,7 +4,7 @@ export type EditorType = 'button-edit' | 'check-box' | 'check-group' | 'combo-li 'response-layout-editor-setting' | 'switch' | 'grid-field-editor' | 'field-selector' | 'schema-selector' | 'mapping-editor' | 'textarea' | 'response-form-layout-setting' | 'binding-selector' | 'query-solution-config' | 'solution-preset' | 'item-collection-editor' | 'menu-lookup' | 'response-layout-splitter' | 'json-editor' | 'property-editor' | 'sort-condition-editor' | - 'filter-condition-editor' | 'expression-editor' | 'code-editor' | 'collection-property-editor'; + 'filter-condition-editor' | 'expression-editor' | 'code-editor' | 'collection-property-editor'|'style-editor'; export interface EditorConfig { /** 编辑器类型 */ diff --git a/packages/ui-vue/components/dynamic-view/src/components/maps.ts b/packages/ui-vue/components/dynamic-view/src/components/maps.ts index 4d1970af0bf9f36b7476bb3a6136e245e22c5d3b..b1e9d5e5477111a005634fa6ac976a6a84e8b9c2 100644 --- a/packages/ui-vue/components/dynamic-view/src/components/maps.ts +++ b/packages/ui-vue/components/dynamic-view/src/components/maps.ts @@ -70,6 +70,7 @@ import FExpressionEditor from '@farris/ui-vue/components/expression-editor'; import FCodeEditor from '@farris/ui-vue/components/code-editor'; import FHtmlTemplate from '@farris/ui-vue/components/html-template'; import FCollectionPropertyEditor from '@farris/ui-vue/components/collection-property-editor'; +import FStyleEditor from '@farris/ui-vue/components/style-editor'; const componentMap: Record = {}; const componentPropsConverter: Record = {}; @@ -156,6 +157,7 @@ function loadRegister() { FCodeEditor.register(componentMap, componentPropsConverter, componentPropertyConfigConverter, resolverMap); FHtmlTemplate.register(componentMap, componentPropsConverter, componentPropertyConfigConverter, resolverMap); FCollectionPropertyEditor.register(componentMap, componentPropsConverter, componentPropertyConfigConverter, resolverMap); + FStyleEditor.register(componentMap, componentPropsConverter, componentPropertyConfigConverter, resolverMap); } } diff --git a/packages/ui-vue/components/section/src/property-config/section.property-config.ts b/packages/ui-vue/components/section/src/property-config/section.property-config.ts index b505d422cb6e1d8b1ecd59068fccc9897ba6518b..e70772ffff826c8445fff18342711829f6237440 100644 --- a/packages/ui-vue/components/section/src/property-config/section.property-config.ts +++ b/packages/ui-vue/components/section/src/property-config/section.property-config.ts @@ -16,12 +16,14 @@ export class SectionProperty extends BaseControlProperty { // 行为 const behavior = this.getBehaviorConfig(propertyData, ''); + const style = this.getStyleProperties(propertyData); + this.propertyConfig.categories = { - basic, appearance, headerTemplate, extend, behavior + basic, appearance, headerTemplate, extend, behavior,style }; return this.propertyConfig; } - getAppearanceProperties(propertyData) { + getAppearanceProperties(propertyData) { return { title: '外观', @@ -127,6 +129,29 @@ export class SectionProperty extends BaseControlProperty { } }; } + getStyleProperties(propertyData) { + + return { + title: '样式', + description: 'sdfsf', + tabId:'style', + tabName: '样式', + properties: { + style: { + description: '组件的Style样式', + title: 'class样式', + editor: { + type: "style-editor"} + } + }, + setPropertyRelates(changeObject, prop) { + if (!changeObject) { + return; + } + } + + }; + } getExtendConfig(propertyData) { return { title: '扩展', diff --git a/packages/ui-vue/components/style-editor/index.ts b/packages/ui-vue/components/style-editor/index.ts new file mode 100644 index 0000000000000000000000000000000000000000..8a9ec857dc96ef25e54bd33e6ad139f2483ac37a --- /dev/null +++ b/packages/ui-vue/components/style-editor/index.ts @@ -0,0 +1,19 @@ + +import type { App, Plugin } from 'vue'; +import FStyle from './src/style-editor.component'; +import { stylePropsResolver } from './src/style-editor.props'; + +export * from './src/style-editor.props'; + +FStyle.install = (app: App) => { + app.component(FStyle.name as string, FStyle); + // app.component(FStylePane.name as string, FStylePane); +}; +FStyle.register = (componentMap: Record, propsResolverMap: Record, configResolverMap: Record, resolverMap: Record) => { + componentMap['style-editor'] = FStyle; + propsResolverMap['style-editor'] = stylePropsResolver; + +}; + +export { FStyle }; +export default FStyle as typeof FStyle & Plugin; diff --git a/packages/ui-vue/components/style-editor/src/composition/types.ts b/packages/ui-vue/components/style-editor/src/composition/types.ts new file mode 100644 index 0000000000000000000000000000000000000000..3f69b08c741eee54ecd86562a5b561034d41c1a4 --- /dev/null +++ b/packages/ui-vue/components/style-editor/src/composition/types.ts @@ -0,0 +1,40 @@ +import { Ref } from "vue"; + +export interface UseResizePane { + actualHeight: Ref; + + actualWidth: Ref; + + onClickStyleEditorHorizontalResizeBar: ($event: MouseEvent, position: string, element: HTMLElement) => any; + + onClickStyleEditorVerticalResizeBar: ($event: MouseEvent, position: string, element: HTMLElement) => any; +} + +export interface UseResizeHandle { + horizontalResizeBarPosition: Ref; + + horizontalResizeHandleOffset: Ref; + + showHorizontalResizeHandle: Ref; + + showVerticalResizeHandle: Ref; + + verticalResizeBarPosition: Ref; + + verticalResizeHandleOffset: Ref; + + horizontalResizeHandleStyleEditor: Ref>; + + verticalResizeHandleStyleEditor: Ref>; + + resizeOverlayStyleEditor: Ref>; + + draggingHorizontalResizeHandle: ($event: MouseEvent) => void; + + draggingVerticalResizeHandle: ($event: MouseEvent) => void; + +} + +export interface StyleEditorContext { + useResizeHandleComposition: UseResizeHandle; +} diff --git a/packages/ui-vue/components/style-editor/src/composition/use-resize-handle.ts b/packages/ui-vue/components/style-editor/src/composition/use-resize-handle.ts new file mode 100644 index 0000000000000000000000000000000000000000..23868cfac5589472e30da86575e3a36d086ab914 --- /dev/null +++ b/packages/ui-vue/components/style-editor/src/composition/use-resize-handle.ts @@ -0,0 +1,66 @@ +import { computed, Ref, ref } from 'vue'; +import { UseResizeHandle } from './types'; + +export function useResizeHandle( + styleEditorElementRef: Ref +): UseResizeHandle { + const horizontalResizeBarPosition = ref(-1); + const verticalResizeBarPosition = ref(-1); + const horizontalResizeHandleOffset = ref(0); + const verticalResizeHandleOffset = ref(0); + const showHorizontalResizeHandle = ref(false); + const showVerticalResizeHandle = ref(false); + + const horizontalResizeHandleStyleEditor = computed(() => { + const styleEditorObject = { + display: showHorizontalResizeHandle.value ? 'block' : 'none', + left: `${horizontalResizeHandleOffset.value}px` + } as Record; + return styleEditorObject; + }); + + const verticalResizeHandleStyleEditor = computed(() => { + const styleEditorObject = { + display: showVerticalResizeHandle.value ? 'block' : 'none', + top: `${verticalResizeHandleOffset.value}px` + } as Record; + return styleEditorObject; + }); + + const resizeOverlayStyleEditor = computed(() => { + const styleEditorObject = { + display: (showVerticalResizeHandle.value || showHorizontalResizeHandle.value) ? 'block' : 'none' + } as Record; + return styleEditorObject; + }); + + function draggingHorizontalResizeHandle($event: MouseEvent) { + const styleEditorElement = styleEditorElementRef.value; + if (styleEditorElement) { + const { left: styleEditorOffsetLeft } = (styleEditorElement.getBoundingClientRect() as DOMRect); + horizontalResizeHandleOffset.value = $event.clientX - styleEditorOffsetLeft; + } + } + + function draggingVerticalResizeHandle($event: MouseEvent) { + const styleEditorElement = styleEditorElementRef.value; + if (styleEditorElement) { + const { top: styleEditorOffsetTop } = (styleEditorElement.getBoundingClientRect() as DOMRect); + verticalResizeHandleOffset.value = $event.clientY - styleEditorOffsetTop; + } + } + + return { + horizontalResizeHandleStyleEditor, + verticalResizeHandleStyleEditor, + resizeOverlayStyleEditor, + showHorizontalResizeHandle, + showVerticalResizeHandle, + horizontalResizeBarPosition, + verticalResizeBarPosition, + verticalResizeHandleOffset, + horizontalResizeHandleOffset, + draggingHorizontalResizeHandle, + draggingVerticalResizeHandle + }; +} diff --git a/packages/ui-vue/components/style-editor/src/designer/style-editor-use-designer-rules.ts b/packages/ui-vue/components/style-editor/src/designer/style-editor-use-designer-rules.ts new file mode 100644 index 0000000000000000000000000000000000000000..74a589b97ad00eeac5381e2287f6321cd8f4b10e --- /dev/null +++ b/packages/ui-vue/components/style-editor/src/designer/style-editor-use-designer-rules.ts @@ -0,0 +1,32 @@ +import { DesignerHost, UseDesignerRules } from "../../../designer-canvas/src/composition/types"; +import { ComponentSchema, DesignerItemContext } from "../../../designer-canvas/src/types"; +import { UseTemplateDragAndDropRules } from "../../../designer-canvas/src/composition/rule/use-template-rule"; +import { StyleProperty } from "../property-config/style-editor.property-config"; + +export function useDesignerRules(designItemContext: DesignerItemContext, designerHostService?: DesignerHost): UseDesignerRules { + const dragAndDropRules = new UseTemplateDragAndDropRules(); + const { canMove, canDelete } = dragAndDropRules.getTemplateRule(designItemContext, designerHostService); + const schema = designItemContext.schema as ComponentSchema; + function canAccepts(): boolean { + return false; + } + function checkCanDeleteComponent() { + return canDelete; + } + + function checkCanMoveComponent() { + return canMove; + } + + function hideNestedPaddingInDesginerView() { + return true; + } + // 构造属性配置方法 + function getPropsConfig(componentId: string) { + const styleProp = new StyleProperty(componentId, designerHostService); + return styleProp.getPropertyConfig(schema); + } + + return { canAccepts, checkCanDeleteComponent, checkCanMoveComponent, hideNestedPaddingInDesginerView, getPropsConfig }; + +} diff --git a/packages/ui-vue/components/style-editor/src/property-config/style-editor.property-config.ts b/packages/ui-vue/components/style-editor/src/property-config/style-editor.property-config.ts new file mode 100644 index 0000000000000000000000000000000000000000..1284e28a47e0f74b1643ab2857503db31e98da5a --- /dev/null +++ b/packages/ui-vue/components/style-editor/src/property-config/style-editor.property-config.ts @@ -0,0 +1,73 @@ +import { BaseControlProperty } from "../../../property-panel/src/composition/entity/base-property"; + +export class StyleProperty extends BaseControlProperty { + constructor(componentId: string, designerHostService: any) { + super(componentId, designerHostService); + } + public getPropertyConfig(propertyData: any) { + // 基本信息 + this.propertyConfig.categories['basic'] = this.getBasicPropConfig(propertyData); + // 外观 + this.propertyConfig.categories['appearance'] = this.getAppearanceConfig(propertyData); + // 行为 + this.propertyConfig.categories['behavior'] = this.getBehaviorProperties(propertyData); + return this.propertyConfig; + } + private getBehaviorProperties(propertyData: any) { + return { + description: "", + title: "行为", + properties: { + direction: { + title: "布局方向", + description: "指定内部分栏面板的布局方向", + type: "string", + editor: { + type: "combo-list", + data: [ + { + "id": "row", + "name": "横向排列" + }, + { + "id": "column", + "name": "上下排列" + } + ] + } + } + }, + setPropertyRelates(changeObject: any, data: any) { + if (!changeObject) { + return; + } + if (changeObject.propertyID === 'direction') { + const isRow = changeObject.propertyValue !== 'column'; + const originalClass = isRow ? 'f-col-h' : 'f-col-w'; + const replaceClass = isRow ? 'f-col-w' : 'f-col-h'; + const targetDirection = isRow ? ['s', 'n'] : ['e', 'w']; + // 替换样式 + propertyData?.contents.forEach((panel, inex) => { + if (panel.appearance?.class) { + panel.appearance.class = panel.appearance.class.replaceAll(originalClass, replaceClass); + } + if (panel.resizable === true && panel.resizeHandle) { + if (targetDirection.findIndex(direction => direction === panel.resizeHandle) > -1) { + // 需要更改schema + if (inex === 0) { + panel.resizeHandle = isRow ? 'e' : 's'; + } + } + } + if (isRow && panel.minHeight) { + panel.minHeight = null; + } + if (!isRow && panel.minWidth) { + panel.minWidth = null; + } + }); + } + } + }; + } +} diff --git a/packages/ui-vue/components/style-editor/src/schema/style-editor-schema-mapper.ts b/packages/ui-vue/components/style-editor/src/schema/style-editor-schema-mapper.ts new file mode 100644 index 0000000000000000000000000000000000000000..e6b8490a4c00a68e0d4a73c00b3052bab585bf4e --- /dev/null +++ b/packages/ui-vue/components/style-editor/src/schema/style-editor-schema-mapper.ts @@ -0,0 +1,5 @@ +import { MapperFunction, resolveAppearance } from '../../../dynamic-resolver'; + +export const styleSchemaMapper = new Map([ + ['appearance', resolveAppearance] +]); diff --git a/packages/ui-vue/components/style-editor/src/schema/style-editor-schema-resolver.ts b/packages/ui-vue/components/style-editor/src/schema/style-editor-schema-resolver.ts new file mode 100644 index 0000000000000000000000000000000000000000..726c2bd0e74bb67986cbbcec3cbe632f3a4dabd1 --- /dev/null +++ b/packages/ui-vue/components/style-editor/src/schema/style-editor-schema-resolver.ts @@ -0,0 +1,47 @@ + +import { ComponentSchema, DesignerComponentInstance } from "../../../designer-canvas/src/types"; +import { DynamicResolver } from "../../../dynamic-resolver"; + +function wrapContentContainerForDataGrid(resolver: DynamicResolver, schema: ComponentSchema, context: Record): ComponentSchema { + const contentContainerSchema = resolver.getSchemaByType('content-container') as ComponentSchema; + contentContainerSchema.id = `${schema.id}-layout`; + contentContainerSchema.appearance = { class: 'f-grid-is-sub f-utils-flex-column' }; + contentContainerSchema.contents = [schema]; + return contentContainerSchema; +} + +function addLeftPane(resolver: DynamicResolver, schema: ComponentSchema, context: Record): ComponentSchema { + const leftPaneSchema = resolver.getSchemaByType('style-pane') as ComponentSchema; + leftPaneSchema.appearance = { + class: "f-col-w6 f-page-content-nav" + }; + leftPaneSchema.position = 'left'; + (schema.contents as ComponentSchema[]).unshift(leftPaneSchema); + return schema; + +} + +function addMainPane(resolver: DynamicResolver, schema: ComponentSchema, context: Record): ComponentSchema { + const mainPaneSchema = resolver.getSchemaByType('style-pane') as ComponentSchema; + mainPaneSchema.appearance = { + class: "f-page-content-main" + }; + mainPaneSchema.position = 'main'; + (schema.contents as ComponentSchema[]).push(mainPaneSchema); + return schema; +} + +export function schemaResolver(resolver: DynamicResolver, schema: Record, context: Record): Record { + const parentComponentInstance = context.parentComponentInstance as DesignerComponentInstance; + const parentClass = String(parentComponentInstance.schema.appearance.class || '').split(' '); + const droppedOnMainContainer = parentClass.includes('f-page-main'); + if (droppedOnMainContainer) { + schema.appearance = { class: 'f-page-content' }; + } + addLeftPane(resolver, schema as ComponentSchema, context); + addMainPane(resolver, schema as ComponentSchema, context); + return schema; +} +export function stylePaneSchemaResolver(resolver: DynamicResolver, schema: Record, context: Record): Record { + return schema; +} diff --git a/packages/ui-vue/components/style-editor/src/schema/style.schema.json b/packages/ui-vue/components/style-editor/src/schema/style.schema.json new file mode 100644 index 0000000000000000000000000000000000000000..d40127d40b982fe21afebb2e4408dd5d3ae25a94 --- /dev/null +++ b/packages/ui-vue/components/style-editor/src/schema/style.schema.json @@ -0,0 +1,50 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "https://farris-design.gitee.io/style.schema.json", + "title": "style", + "description": "A Farris Container Component", + "type": "object", + "properties": { + "id": { + "description": "The unique identifier for a style", + "type": "string" + }, + "type": { + "description": "The type string of style component", + "type": "string", + "default": "style" + }, + "appearance": { + "description": "", + "type": "object", + "properties": { + "class": { + "type": "string" + }, + "style": { + "type": "string" + } + }, + "default": {} + }, + "contents": { + "description": "", + "type": "array", + "default": [] + }, + "direction": { + "description": "", + "type": "string", + "default": "row", + "enum": [ + "column", + "row" + ] + } + }, + "required": [ + "id", + "type", + "contents" + ] +} \ No newline at end of file diff --git a/packages/ui-vue/components/style-editor/src/style-editor.component.tsx b/packages/ui-vue/components/style-editor/src/style-editor.component.tsx new file mode 100644 index 0000000000000000000000000000000000000000..218cbef25541640ad6b80c90cf4f6babef5423ba --- /dev/null +++ b/packages/ui-vue/components/style-editor/src/style-editor.component.tsx @@ -0,0 +1,672 @@ +import { SetupContext, computed, defineComponent, provide, ref, Ref, onMounted, reactive } from 'vue'; +import { StylePropsType, styleProps } from './style-editor.props'; +import { useResizeHandle } from './composition/use-resize-handle'; +import { StyleEditorContext } from './composition/types'; +import { getCustomClass, getCustomStyle } from '@farris/ui-vue/components/common'; +import { FNumberSpinner } from '@farris/ui-vue/components/number-spinner'; +import FComboList from '@farris/ui-vue/components/combo-list'; +import FSection from '@farris/ui-vue/components/section'; +import './style-editor.css'; + +// 定义边框模型类型 +interface BorderDirectionModel { + width: number; + color: string; + style: string; +} + +interface BorderModel { + top: BorderDirectionModel; + right: BorderDirectionModel; + bottom: BorderDirectionModel; + left: BorderDirectionModel; +} + +// 定义圆角模型类型 +interface BorderRadiusModel { + topLeft: number; + topRight: number; + bottomRight: number; + bottomLeft: number; +} + +export default defineComponent({ + name: 'FStyle', + props: styleProps, + emits: ['change'], + setup(props: StylePropsType, context: SetupContext) { + const styleElementRef = ref(); + const useResizeHandleComposition = useResizeHandle(styleElementRef); + const { horizontalResizeHandleStyleEditor, verticalResizeHandleStyleEditor, resizeOverlayStyleEditor } = useResizeHandleComposition; + provide('style', { useResizeHandleComposition }); + + // 折叠状态控制 + const marginExpanded = ref(true); + const paddingExpanded = ref(true); + const borderExpanded = ref(true); + const shadowExpanded = ref(true); + const backgroundExpanded = ref(true); + + // 样式计算 + const styleClass = computed(() => { + const classObject = { + 'f-style': true, + 'f-style-custom': true + } as Record; + return getCustomClass(classObject, props?.customClass); + }); + + const styleStyle = computed(() => { + const styleObject = { + 'flex-direction': props.direction === 'row' ? 'row' : 'column', + 'background-color': '#fff' // 白色背景 + } as Record; + return getCustomStyle(styleObject, props?.customStyle); + }); + + // 响应式样式模型 + const marginModel = reactive({ + marginTop: 0, + marginRight: 0, + marginBottom: 0, + marginLeft: 0 + }); + + const paddingModel = reactive({ + paddingTop: 0, + paddingRight: 0, + paddingBottom: 0, + paddingLeft: 0 + }); + + const shadowModel = reactive({ + shadowX: 0, + shadowY: 0, + shadowBlur: 0, + shadowSpread: 0, + shadowColor: '#000000', + shadowDirection: 'inside' // 默认阴影方向为内侧 + }); + + // 边框模型 - 重构为每个方向独立控制 + const borderModel = reactive({ + top: { width: 0, color: '#000000', style: 'solid' }, + right: { width: 0, color: '#000000', style: 'solid' }, + bottom: { width: 0, color: '#000000', style: 'solid' }, + left: { width: 0, color: '#000000', style: 'solid' } + }); + + // 当前选中的边框方向(单选) + const selectedBorderDirection = ref<'top' | 'right' | 'bottom' | 'left' | 'all' | null>(null); + + // 背景模型 + const backgroundModel = reactive({ + backgroundColor: 'transparent' + }); + + // 圆角模型 + const borderRadiusModel = reactive({ + topLeft: 0, + topRight: 0, + bottomRight: 0, + bottomLeft: 0 + }); + + // 当前选中的圆角方向(多选) + const selectedBorderRadiusDirections = reactive({ + topLeft: false, + topRight: false, + bottomRight: false, + bottomLeft: false + }); + + // 当前圆角半径值 + const currentBorderRadius = ref(0); + + // 阴影方向选项 + const shadowDirections = ref([ + { id: 'outside', name: '外侧' }, + { id: 'inside', name: '内侧' }, + ]); + + // 边框样式选项 + const borderStyles = ref([ + { id: 'solid', name: '实线' }, + { id: 'dashed', name: '虚线' }, + { id: 'dotted', name: '点线' }, + { id: 'double', name: '双线' }, + { id: 'none', name: '无' } + ]); + + // 生成CSS样式字符串 + const generateStyleString = () => { + const margin = `margin: ${marginModel.marginTop}px ${marginModel.marginRight}px ${marginModel.marginBottom}px ${marginModel.marginLeft}px;`; + const padding = `padding: ${paddingModel.paddingTop}px ${paddingModel.paddingRight}px ${paddingModel.paddingBottom}px ${paddingModel.paddingLeft}px;`; + + const shadowInset = shadowModel.shadowDirection === 'outside' ? '' : 'inset '; + const shadow = `box-shadow: ${shadowInset}${shadowModel.shadowX}px ${shadowModel.shadowY}px ${shadowModel.shadowBlur}px ${shadowModel.shadowSpread}px ${shadowModel.shadowColor};`; + + // 边框样式 - 每个方向独立 + const borderTop = borderModel.top.width > 0 + ? `border-top: ${borderModel.top.width}px ${borderModel.top.style} ${borderModel.top.color};` + : ''; + const borderRight = borderModel.right.width > 0 + ? `border-right: ${borderModel.right.width}px ${borderModel.right.style} ${borderModel.right.color};` + : ''; + const borderBottom = borderModel.bottom.width > 0 + ? `border-bottom: ${borderModel.bottom.width}px ${borderModel.bottom.style} ${borderModel.bottom.color};` + : ''; + const borderLeft = borderModel.left.width > 0 + ? `border-left: ${borderModel.left.width}px ${borderModel.left.style} ${borderModel.left.color};` + : ''; + + // 背景样式 + const background = `background-color: ${backgroundModel.backgroundColor};`; + + // 圆角样式 + const borderRadius = `border-radius: ${borderRadiusModel.topLeft}px ${borderRadiusModel.topRight}px ${borderRadiusModel.bottomRight}px ${borderRadiusModel.bottomLeft}px;`; + + return `${margin}${padding}${shadow}${borderTop}${borderRight}${borderBottom}${borderLeft}${background}${borderRadius}`; + }; + + // 处理变化事件 + const handleStyleChange = () => { + const styleString = generateStyleString(); + context.emit('change', styleString); + }; + + // 初始化时触发一次 + onMounted(handleStyleChange); + + // 更新阴影方向处理 + const updateShadowDirection = (value: string) => { + shadowModel.shadowDirection = value; + handleStyleChange(); + }; + + // 处理边框方向选择 + const handleBorderDirectionSelect = (direction: 'top' | 'right' | 'bottom' | 'left' | 'all') => { + selectedBorderDirection.value = direction; + }; + // 计算当前选中的边框样式 + const currentBorderStyle = computed(() => { + if (!selectedBorderDirection.value) {return '';} + + if (selectedBorderDirection.value === 'all') { + return borderModel.top.style; + } + + return borderModel[selectedBorderDirection.value].style; + }); + + // 计算当前选中的边框颜色 + const currentBorderColor = computed(() => { + if (!selectedBorderDirection.value) {return '#000000';} + + if (selectedBorderDirection.value === 'all') { + return borderModel.top.color; + } + + return borderModel[selectedBorderDirection.value].color; + }); + + // 处理边框宽度变化 + const handleBorderWidthChange = (value: number) => { + if (!selectedBorderDirection.value) {return;} + + if (selectedBorderDirection.value === 'all') { + // 更新所有方向 + borderModel.top.width = value; + borderModel.right.width = value; + borderModel.bottom.width = value; + borderModel.left.width = value; + } else { + // 更新单个方向 + borderModel[selectedBorderDirection.value].width = value; + } + + handleStyleChange(); + }; + + // 处理所有边框样式变化 + const handleBorderStyleChange = (value: string) => { + if (!selectedBorderDirection.value) {return;} + + if (selectedBorderDirection.value === 'all') { + // 更新所有方向 + borderModel.top.style = value; + borderModel.right.style = value; + borderModel.bottom.style = value; + borderModel.left.style = value; + } else { + // 更新单个方向 + borderModel[selectedBorderDirection.value].style = value; + } + + handleStyleChange(); + }; + + // 处理所有边框颜色变化 + const handleBorderColorChange = (color: string) => { + if (!selectedBorderDirection.value) {return;} + + if (selectedBorderDirection.value === 'all') { + // 更新所有方向 + borderModel.top.color = color; + borderModel.right.color = color; + borderModel.bottom.color = color; + borderModel.left.color = color; + } else { + // 更新单个方向 + borderModel[selectedBorderDirection.value].color = color; + } + + handleStyleChange(); + }; + + // 添加颜色选择处理函数 + const handleShadowColorChange = (color: string) => { + shadowModel.shadowColor = color; + handleStyleChange(); + }; + + // 处理圆角方向选择 + const handleBorderRadiusDirectionSelect = (direction: 'topLeft' | 'topRight' | 'bottomRight' | 'bottomLeft') => { + // 切换选中状态 + selectedBorderRadiusDirections[direction] = !selectedBorderRadiusDirections[direction]; + }; + + // 处理全部圆角方向选择 + const handleAllBorderRadiusDirectionSelect = () => { + const allSelected = Object.values(selectedBorderRadiusDirections).every(v => v); + const newValue = !allSelected; + + selectedBorderRadiusDirections.topLeft = newValue; + selectedBorderRadiusDirections.topRight = newValue; + selectedBorderRadiusDirections.bottomRight = newValue; + selectedBorderRadiusDirections.bottomLeft = newValue; + }; + + // 处理圆角半径变化 + const handleBorderRadiusChange = (value: number) => { + currentBorderRadius.value = value; + + // 只更新选中的方向 + if (selectedBorderRadiusDirections.topLeft) { + borderRadiusModel.topLeft = value; + } + if (selectedBorderRadiusDirections.topRight) { + borderRadiusModel.topRight = value; + } + if (selectedBorderRadiusDirections.bottomRight) { + borderRadiusModel.bottomRight = value; + } + if (selectedBorderRadiusDirections.bottomLeft) { + borderRadiusModel.bottomLeft = value; + } + + handleStyleChange(); + }; + + return () => { + // 检查边框方向是否选中 + const borderTopActive = selectedBorderDirection.value === 'top'; + const borderRightActive = selectedBorderDirection.value === 'right'; + const borderBottomActive = selectedBorderDirection.value === 'bottom'; + const borderLeftActive = selectedBorderDirection.value === 'left'; + const borderAllActive = selectedBorderDirection.value === 'all'; + + // 检查圆角方向是否选中 + const borderRadiusTopLeftActive = selectedBorderRadiusDirections.topLeft; + const borderRadiusTopRightActive = selectedBorderRadiusDirections.topRight; + const borderRadiusBottomRightActive = selectedBorderRadiusDirections.bottomRight; + const borderRadiusBottomLeftActive = selectedBorderRadiusDirections.bottomLeft; + const borderRadiusAllActive = borderRadiusTopLeftActive && borderRadiusTopRightActive && + borderRadiusBottomRightActive && borderRadiusBottomLeftActive; + + // 计算当前选中的边框宽度 + const currentBorderWidth = computed(() => { + if (!selectedBorderDirection.value) {return 0;} + + if (selectedBorderDirection.value === 'all') { + return borderModel.top.width; + } + + return borderModel[selectedBorderDirection.value].width; + }).value; + + return ( +
+ {/* 外间距控制区 */} + marginExpanded.value = val} + > +
+ {[ + { key: 'marginTop', label: '上间距(px)' }, + { key: 'marginRight', label: '右间距(px)' }, + { key: 'marginBottom', label: '下间距(px)' }, + { key: 'marginLeft', label: '左间距(px)' } + ].map(item => ( +
+
+ + +
+
+ ))} +
+
+ + {/* 内间距控制区 */} + paddingExpanded.value = val} + > +
+ {[ + { key: 'paddingTop', label: '上间距(px)' }, + { key: 'paddingRight', label: '右间距(px)' }, + { key: 'paddingBottom', label: '下间距(px)' }, + { key: 'paddingLeft', label: '左间距(px)' } + ].map(item => ( +
+
+ + +
+
+ ))} +
+
+ + {/* 边框控制区 - 重构 */} + borderExpanded.value = val} + > +
+ {/* 边框方向选择器 (图形化) */} +
+
+
边框方向
+
+
handleBorderDirectionSelect('top')} + style="top: 0; left: 50%; transform: translateX(-50%);" + > +
+
+
handleBorderDirectionSelect('right')} + style="top: 50%; right: 0; transform: translateY(-50%);" + > +
+
+
handleBorderDirectionSelect('bottom')} + style="bottom: 0; left: 50%; transform: translateX(-50%);" + > +
+
+
handleBorderDirectionSelect('left')} + style="top: 50%; left: 0; transform: translateY(-50%);" + > +
+
+
handleBorderDirectionSelect('all')} + style="top: 50%; left: 50%; transform: translate(-50%, -50%);" + > +
+
+
+
+
+
+ + {/* 边框控制 */} +
+
+
+
+ + +
+
+ +
+
+ + +
+
+ +
+
+ + handleBorderColorChange(e.target.value)} + style="flex: 1; height: 36px;" + disabled={!selectedBorderDirection.value} + /> +
+
+
+
+
+ + {/* 圆角控制区 - 重构 */} +
+
+
圆角方向
+
+
handleBorderRadiusDirectionSelect('topLeft')} + style="top: 0; left: 0;" + > +
+
+
handleBorderRadiusDirectionSelect('topRight')} + style="top: 0; right: 0;" + > +
+
+
handleBorderRadiusDirectionSelect('bottomRight')} + style="bottom: 0; right: 0;" + > +
+
+
handleBorderRadiusDirectionSelect('bottomLeft')} + style="bottom: 0; left: 0;" + > +
+
+
+
+
+
+
+
+
+ + {/* 圆角控制 */} +
+
+
+ + v)} + /> +
+
+
+
+
+
+ + {/* 阴影控制区 */} + shadowExpanded.value = val} + > +
+ {/* 阴影参数 */} + {[ + { key: 'shadowX', label: 'X(px)' }, + { key: 'shadowY', label: 'Y(px)' }, + { key: 'shadowBlur', label: '模糊(px)' }, + { key: 'shadowSpread', label: '扩张(px)' } + ].map(item => ( +
+
+ + +
+
+ ))} + + {/* 颜色选择器 */} +
+
+ + handleShadowColorChange(e.target.value)} + style="flex: 1; height: 36px;" + /> +
+
+ + {/* 阴影方向 */} +
+
+ + +
+
+
+
+ + {/* 背景控制区 */} + backgroundExpanded.value = val} + > +
+
+
+ + { + backgroundModel.backgroundColor = e.target.value; + handleStyleChange(); + }} + style="flex: 1; height: 36px;" + /> +
+
+
+
+
+ ); + }; + } +}); \ No newline at end of file diff --git a/packages/ui-vue/components/style-editor/src/style-editor.css b/packages/ui-vue/components/style-editor/src/style-editor.css new file mode 100644 index 0000000000000000000000000000000000000000..58840b9918673ec20ef00bc8e392c6df38f2dad7 --- /dev/null +++ b/packages/ui-vue/components/style-editor/src/style-editor.css @@ -0,0 +1,146 @@ +/* style-editor.css */ +/* 边框方向选择器样式 */ +.border-direction-selector { + position: relative; + width: 60px; + height: 60px; + border: 1px solid #ddd; + border-radius: 4px; + background-color: #f9f9f9; +} + +.border-direction-btn { + position: absolute; + width: 18px; + height: 18px; + display: flex; + align-items: center; + justify-content: center; + cursor: pointer; + border-radius: 4px; + background-color: #fff; + border: 1px solid #ddd; + transition: all 0.2s; + z-index: 2; +} + +.border-direction-btn:hover { + background-color: #f0f0f0; +} + +.border-direction-btn.active { + background-color: #e6f7ff; + border-color: #1890ff; +} + +.border-line { + background-color: #666; +} + +.border-line.horizontal { + width: 8px; + height: 2px; +} + +.border-line.vertical { + width: 2px; + height: 8px; +} + +.border-all-icon { + font-size: 12px; + font-weight: bold; + color: #666; +} + +.border-preview-box { + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + width: 40px; + height: 40px; + border: 1px solid #ddd; + background-color: #fff; +} + +/* 圆角方向选择器样式 */ +.border-radius-direction-selector { + position: relative; + width: 60px; + height: 60px; + border: 1px solid #ddd; + border-radius: 4px; + background-color: #f9f9f9; +} + +.border-radius-direction-btn { + position: absolute; + width: 18px; + height: 18px; + display: flex; + align-items: center; + justify-content: center; + cursor: pointer; + border-radius: 4px; + background-color: #fff; + border: 1px solid #ddd; + transition: all 0.2s; + z-index: 2; +} + +.border-radius-direction-btn:hover { + background-color: #f0f0f0; +} + +.border-radius-direction-btn.active { + background-color: #e6f7ff; + border-color: #1890ff; +} + +.border-radius-corner { + width: 8px; + height: 8px; + border: 1px solid #666; +} + +.border-radius-corner.top-left { + border-right: none; + border-bottom: none; + border-top-left-radius: 4px; +} + +.border-radius-corner.top-right { + border-left: none; + border-bottom: none; + border-top-right-radius: 4px; +} + +.border-radius-corner.bottom-right { + border-left: none; + border-top: none; + border-bottom-right-radius: 4px; +} + +.border-radius-corner.bottom-left { + border-right: none; + border-top: none; + border-bottom-left-radius: 4px; +} + +.border-radius-all-icon { + font-size: 12px; + font-weight: bold; + color: #666; +} + +.border-radius-preview-box { + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + width: 40px; + height: 40px; + border: 1px solid #ddd; + background-color: #fff; +} \ No newline at end of file diff --git a/packages/ui-vue/components/style-editor/src/style-editor.props.ts b/packages/ui-vue/components/style-editor/src/style-editor.props.ts new file mode 100644 index 0000000000000000000000000000000000000000..181f5896d017c9a0c990834ff4f504ecc0acc1f9 --- /dev/null +++ b/packages/ui-vue/components/style-editor/src/style-editor.props.ts @@ -0,0 +1,18 @@ + +import { ExtractPropTypes, PropType } from "vue"; +import { createPropsResolver } from "../../dynamic-resolver"; +import { styleSchemaMapper } from "./schema/style-editor-schema-mapper"; +import { schemaResolver } from './schema/style-editor-schema-resolver'; +import styleSchema from './schema/style.schema.json'; + +export type SpliteDirection = 'column' | 'row'; + +export const styleProps = { + customStyle: { type: String, default: '' }, + customClass: { type: String, default: '' }, + direction: { Type: String as PropType, default: 'row' } +} as Record; + +export type StylePropsType = ExtractPropTypes; + +export const stylePropsResolver = createPropsResolver(styleProps, styleSchema, styleSchemaMapper, schemaResolver); diff --git a/packages/ui-vue/components/style-editor/style.ts b/packages/ui-vue/components/style-editor/style.ts new file mode 100644 index 0000000000000000000000000000000000000000..024f347409387f7f4da869947548a4080e6c6de4 --- /dev/null +++ b/packages/ui-vue/components/style-editor/style.ts @@ -0,0 +1,2 @@ +import "@farris/ui-vue/components/dependent-base/style"; +import "@farris/ui-vue/theme-default/components/style.css"; \ No newline at end of file diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 0025d88bced1d7dde9fce7e75debab279ab8dc10..6a078741bb1e8bc002054f16f15a2fcbef8f2ec4 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -11,18 +11,9 @@ importers: '@eslint/js': specifier: ^9.19.0 version: 9.19.0 - '@types/stats.js': - specifier: ^0.17.4 - version: 0.17.4 - '@types/three': - specifier: ^0.152.1 - version: 0.152.1 axios: specifier: ^1.7.2 version: 1.7.7 - draco3dgltf: - specifier: ^1.5.7 - version: 1.5.7 echarts: specifier: ^5.5.0 version: 5.5.1 @@ -38,9 +29,6 @@ importers: markdown-it-container: specifier: ^4.0.0 version: 4.0.0 - three: - specifier: ^0.152.2 - version: 0.152.2 ts-jest: specifier: ^29.1.2 version: 29.2.5(@babel/core@7.25.8)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.25.8))(esbuild@0.23.1)(jest@29.7.0(@types/node@18.19.57)(ts-node@10.9.2(@types/node@18.19.57)(typescript@5.6.3)))(typescript@5.6.3) @@ -378,10 +366,10 @@ importers: version: 7.18.0(eslint@9.19.0(jiti@1.21.6))(typescript@4.9.5) '@vitejs/plugin-vue': specifier: ^4.0.0 - version: 4.6.2(vite@4.5.5(@types/node@20.5.1)(sass@1.80.3)(terser@5.36.0))(vue@3.5.12(typescript@4.9.5)) + version: 4.6.2(vite@4.5.5(@types/node@18.19.57)(sass@1.80.3)(terser@5.36.0))(vue@3.5.12(typescript@4.9.5)) '@vitejs/plugin-vue-jsx': specifier: ^3.0.0 - version: 3.1.0(vite@4.5.5(@types/node@20.5.1)(sass@1.80.3)(terser@5.36.0))(vue@3.5.12(typescript@4.9.5)) + version: 3.1.0(vite@4.5.5(@types/node@18.19.57)(sass@1.80.3)(terser@5.36.0))(vue@3.5.12(typescript@4.9.5)) '@vue/babel-plugin-jsx': specifier: ^1.1.1 version: 1.2.5(@babel/core@7.25.8) @@ -456,19 +444,19 @@ importers: version: 4.9.5 vite: specifier: ^4.1.4 - version: 4.5.5(@types/node@20.5.1)(sass@1.80.3)(terser@5.36.0) + version: 4.5.5(@types/node@18.19.57)(sass@1.80.3)(terser@5.36.0) vite-plugin-dts: specifier: ^2.1.0 - version: 2.3.0(@types/node@20.5.1)(rollup@4.24.0)(vite@4.5.5(@types/node@20.5.1)(sass@1.80.3)(terser@5.36.0)) + version: 2.3.0(@types/node@18.19.57)(rollup@4.24.0)(vite@4.5.5(@types/node@18.19.57)(sass@1.80.3)(terser@5.36.0)) vite-plugin-md: specifier: ^0.20.0 - version: 0.20.6(jsdom@20.0.3)(sass@1.80.3)(terser@5.36.0) + version: 0.20.6(@vitejs/plugin-vue@4.6.2(vite@4.5.5(@types/node@18.19.57)(sass@1.80.3)(terser@5.36.0))(vue@3.5.12(typescript@4.9.5)))(happy-dom@8.9.0)(jsdom@20.0.3)(sass@1.80.3)(terser@5.36.0)(vite@4.5.5(@types/node@18.19.57)(sass@1.80.3)(terser@5.36.0)) vite-svg-loader: specifier: ^4.0.0 version: 4.0.0 vitepress: specifier: 1.0.0-alpha.8 - version: 1.0.0-alpha.8(@algolia/client-search@4.24.0)(@types/node@20.5.1)(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(sass@1.80.3)(search-insights@2.17.2)(terser@5.36.0)(typescript@4.9.5) + version: 1.0.0-alpha.8(@types/node@18.19.57)(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(sass@1.80.3)(terser@5.36.0)(typescript@4.9.5) vitepress-theme-demoblock: specifier: 1.4.2 version: 1.4.2(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(sass@1.80.3)(typescript@4.9.5) @@ -1094,7 +1082,7 @@ importers: version: 4.0.0 vitepress: specifier: 1.0.0-alpha.8 - version: 1.0.0-alpha.8(@algolia/client-search@4.24.0)(@types/node@20.5.1)(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(sass@1.80.3)(search-insights@2.17.2)(terser@5.36.0)(typescript@4.9.5) + version: 1.0.0-alpha.8(@types/node@20.5.1)(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(sass@1.80.3)(terser@5.36.0)(typescript@4.9.5) vitepress-theme-demoblock: specifier: 1.4.2 version: 1.4.2(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(sass@1.80.3)(typescript@4.9.5) @@ -1272,7 +1260,7 @@ importers: version: 4.0.0 vitepress: specifier: 1.0.0-alpha.8 - version: 1.0.0-alpha.8(@algolia/client-search@4.24.0)(@types/node@20.5.1)(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(sass@1.80.3)(search-insights@2.17.2)(terser@5.36.0)(typescript@4.9.5) + version: 1.0.0-alpha.8(@types/node@20.5.1)(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(sass@1.80.3)(terser@5.36.0)(typescript@4.9.5) vitepress-theme-demoblock: specifier: 1.4.2 version: 1.4.2(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(sass@1.80.3)(typescript@4.9.5) @@ -1502,7 +1490,7 @@ importers: version: 4.0.0 vitepress: specifier: 1.0.0-alpha.8 - version: 1.0.0-alpha.8(@algolia/client-search@4.24.0)(@types/node@20.5.1)(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(sass@1.80.3)(search-insights@2.17.2)(terser@5.36.0)(typescript@4.9.5) + version: 1.0.0-alpha.8(@types/node@20.5.1)(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(sass@1.80.3)(terser@5.36.0)(typescript@4.9.5) vitepress-theme-demoblock: specifier: 1.4.2 version: 1.4.2(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(sass@1.80.3)(typescript@4.9.5) @@ -1723,7 +1711,7 @@ importers: version: 4.0.0 vitepress: specifier: 1.0.0-alpha.8 - version: 1.0.0-alpha.8(@algolia/client-search@4.24.0)(@types/node@20.5.1)(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(sass@1.80.3)(search-insights@2.17.2)(terser@5.36.0)(typescript@4.9.5) + version: 1.0.0-alpha.8(@types/node@20.5.1)(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(sass@1.80.3)(terser@5.36.0)(typescript@4.9.5) vitepress-theme-demoblock: specifier: 1.4.2 version: 1.4.2(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(sass@1.80.3)(typescript@4.9.5) @@ -1911,7 +1899,7 @@ importers: dependencies: '@edp-bif/runtime-api-vue': specifier: 0.0.1 - version: 0.0.1(@algolia/client-search@4.24.0)(@types/node@20.5.1)(monaco-editor@0.52.2)(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(rollup@4.24.0)(search-insights@2.17.2)(typescript@4.9.5)(vite@4.5.5(@types/node@20.5.1)(sass@1.80.3)(terser@5.36.0)) + version: 0.0.1(@types/node@20.5.1)(monaco-editor@0.52.2)(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(rollup@4.24.0)(typescript@4.9.5)(vite@4.5.5(@types/node@20.5.1)(sass@1.80.3)(terser@5.36.0)) '@farris/bef-vue': specifier: workspace:^ version: link:../bef @@ -1932,7 +1920,7 @@ importers: version: link:../ui-vue '@gsp-wf/wf-task-handler-vue': specifier: 0.0.1 - version: 0.0.1(@algolia/client-search@4.24.0)(@types/node@20.5.1)(monaco-editor@0.52.2)(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(rollup@4.24.0)(search-insights@2.17.2)(typescript@4.9.5)(vite@4.5.5(@types/node@20.5.1)(sass@1.80.3)(terser@5.36.0)) + version: 0.0.1(@types/node@20.5.1)(monaco-editor@0.52.2)(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(rollup@4.24.0)(typescript@4.9.5)(vite@4.5.5(@types/node@20.5.1)(sass@1.80.3)(terser@5.36.0)) '@types/lodash-es': specifier: ^4.17.4 version: 4.17.12 @@ -2077,7 +2065,7 @@ importers: version: 4.0.0 vitepress: specifier: 1.0.0-alpha.8 - version: 1.0.0-alpha.8(@algolia/client-search@4.24.0)(@types/node@20.5.1)(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(sass@1.80.3)(search-insights@2.17.2)(terser@5.36.0)(typescript@4.9.5) + version: 1.0.0-alpha.8(@types/node@20.5.1)(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(sass@1.80.3)(terser@5.36.0)(typescript@4.9.5) vitepress-theme-demoblock: specifier: 1.4.2 version: 1.4.2(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(sass@1.80.3)(typescript@4.9.5) @@ -3288,9 +3276,6 @@ packages: '@docsearch/js@3.6.0': resolution: {integrity: sha512-QujhqINEElrkIfKwyyyTfbsfMAYCkylInLYMRqHy7PHc8xTBQCow73tlo/Kc7oIwBrCLf0P3YhjlOeV4v8hevQ==} - '@docsearch/js@3.6.2': - resolution: {integrity: sha512-pS4YZF+VzUogYrkblCucQ0Oy2m8Wggk8Kk7lECmZM60hTbaydSIhJTTiCrmoxtBqV8wxORnOqcqqOfbmkkQEcA==} - '@docsearch/react@1.0.0-alpha.28': resolution: {integrity: sha512-XjJOnCBXn+UZmtuDmgzlVIHnnvh6yHVwG4aFq8AXN6xJEIX3f180FvGaowFWAxgdtHplJxFGux0Xx4piHqBzIw==} peerDependencies: @@ -3314,23 +3299,6 @@ packages: search-insights: optional: true - '@docsearch/react@3.6.2': - resolution: {integrity: sha512-rtZce46OOkVflCQH71IdbXSFK+S8iJZlUF56XBW5rIgx/eG5qoomC7Ag3anZson1bBac/JFQn7XOBfved/IMRA==} - peerDependencies: - '@types/react': '>= 16.8.0 < 19.0.0' - react: '>= 16.8.0 < 19.0.0' - react-dom: '>= 16.8.0 < 19.0.0' - search-insights: '>= 1 < 3' - peerDependenciesMeta: - '@types/react': - optional: true - react: - optional: true - react-dom: - optional: true - search-insights: - optional: true - '@dual-bundle/import-meta-resolve@4.1.0': resolution: {integrity: sha512-+nxncfwHM5SgAtrVzgpzJOI1ol0PkumhVo469KCf9lUi21IGcY90G98VuHm9VRrUypmAzawAHO9bs6hqeADaVg==} @@ -4528,9 +4496,6 @@ packages: '@tsconfig/node16@1.0.4': resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} - '@tweenjs/tween.js@18.6.4': - resolution: {integrity: sha512-lB9lMjuqjtuJrx7/kOkqQBtllspPIN+96OvTCeJ2j5FEzinoAXTdAMFnDAQT1KVPRlnYfBrqxtqP66vDM40xxQ==} - '@types/argparse@1.0.38': resolution: {integrity: sha512-ebDJ9b0e702Yr7pWgB0jzm+CX4Srzz8RcXtLJDJB+BSccqMa36uyH/zUsSYao5+BD1ytv3k3rPYCq4mAE1hsXA==} @@ -4663,12 +4628,6 @@ packages: '@types/stack-utils@2.0.3': resolution: {integrity: sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==} - '@types/stats.js@0.17.4': - resolution: {integrity: sha512-jIBvWWShCvlBqBNIZt0KAshWpvSjhkwkEu4ZUcASoAvhmrgAUI2t1dXrjSL4xXVLB4FznPrIsX3nKXFl/Dt4vA==} - - '@types/three@0.152.1': - resolution: {integrity: sha512-PMOCQnx9JRmq+2OUGTPoY9h1hTWD2L7/nmuW/SyNq1Vbq3Lwt3MNdl3wYSa4DvLTGv62NmIXD9jYdAOwohwJyw==} - '@types/through@0.0.33': resolution: {integrity: sha512-HsJ+z3QuETzP3cswwtzt2vEIiHBk/dCcHGhbmG5X3ecnwFD/lPrMpliGXxSCg03L9AhrdwA4Oz/qfspkDW+xGQ==} @@ -4684,9 +4643,6 @@ packages: '@types/web-bluetooth@0.0.15': resolution: {integrity: sha512-w7hEHXnPMEZ+4nGKl/KDRVpxkwYxYExuHOYXyzIzCDzEZ9ZCGMAewulr9IqJu2LR4N37fcnb1XVeuZ09qgOxhA==} - '@types/webxr@0.5.22': - resolution: {integrity: sha512-Vr6Stjv5jPRqH690f5I5GLjVk8GSsoQSYJ2FVd/3jJF7KaqfwPi3ehfBS96mlQ2kPCwZaX6U0rG2+NGHBKkA/A==} - '@types/yargs-parser@21.0.3': resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==} @@ -6524,9 +6480,6 @@ packages: resolution: {integrity: sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==} engines: {node: '>=8'} - draco3dgltf@1.5.7: - resolution: {integrity: sha512-LeqcpmoHIyYUi0z70/H3tMkGj8QhqVxq6FJGPjlzR24BNkQ6jyMheMvFKJBI0dzGZrEOUyQEmZ8axM1xRrbRiw==} - duplexer2@0.0.2: resolution: {integrity: sha512-+AWBwjGadtksxjOQSFDhPNQbed7icNXApT4+2BNpsXzcCBiInq2H9XW0O8sfHFaPmnQRs7cg/P0fAr2IWQSW0g==} @@ -7244,9 +7197,6 @@ packages: picomatch: optional: true - fflate@0.6.10: - resolution: {integrity: sha512-IQrh3lEPM93wVCEczc9SaAOvkmcoQn/G8Bo1e8ZPlY3X3bnAxWaBdvTdvM1hP62iZp0BXWDy4vTAy4fF0+Dlpg==} - file-entry-cache@8.0.0: resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} engines: {node: '>=16.0.0'} @@ -8631,9 +8581,6 @@ packages: resolution: {integrity: sha512-DlIPlJUkCV0Ips2zf2pJP0unEoT1kwYhiiPUGF3s/jtxTCjziNLoiVVh+jqWOWeFi6mmwQ5fNxvAUyPad4Dfog==} engines: {node: '>= 0.8'} - lil-gui@0.17.0: - resolution: {integrity: sha512-MVBHmgY+uEbmJNApAaPbtvNh1RCAeMnKym82SBjtp5rODTYKWtM+MXHCifLe2H2Ti1HuBGBtK/5SyG4ShQ3pUQ==} - lilconfig@3.1.2: resolution: {integrity: sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow==} engines: {node: '>=14'} @@ -9847,7 +9794,6 @@ packages: engines: {node: '>=0.6.0', teleport: '>=0.2.0'} deprecated: |- You or someone you depend on is using Q, the JavaScript Promise library that gave JavaScript developers strong feelings about promises. They can almost certainly migrate to the native JavaScript promise now. Thank you literally everyone for joining me in this bet against the odds. Be excellent to each other. - (For a CapTP with native promises, see @endo/eventual-send and @endo/captp) qs@6.13.0: @@ -13251,17 +13197,6 @@ snapshots: - react-dom - search-insights - '@docsearch/js@3.6.2(@algolia/client-search@4.24.0)(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(search-insights@2.17.2)': - dependencies: - '@docsearch/react': 3.6.2(@algolia/client-search@4.24.0)(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(search-insights@2.17.2) - preact: 10.24.3 - transitivePeerDependencies: - - '@algolia/client-search' - - '@types/react' - - react - - react-dom - - search-insights - '@docsearch/react@1.0.0-alpha.28(react-dom@16.14.0(react@16.14.0))(react@16.14.0)': dependencies: '@docsearch/css': 1.0.0-alpha.28 @@ -13284,19 +13219,6 @@ snapshots: transitivePeerDependencies: - '@algolia/client-search' - '@docsearch/react@3.6.2(@algolia/client-search@4.24.0)(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(search-insights@2.17.2)': - dependencies: - '@algolia/autocomplete-core': 1.9.3(@algolia/client-search@4.24.0)(algoliasearch@4.24.0)(search-insights@2.17.2) - '@algolia/autocomplete-preset-algolia': 1.9.3(@algolia/client-search@4.24.0)(algoliasearch@4.24.0) - '@docsearch/css': 3.6.2 - algoliasearch: 4.24.0 - optionalDependencies: - react: 16.14.0 - react-dom: 16.14.0(react@16.14.0) - search-insights: 2.17.2 - transitivePeerDependencies: - - '@algolia/client-search' - '@dual-bundle/import-meta-resolve@4.1.0': {} '@edp-aif/common-api@1.1.0': @@ -13308,7 +13230,7 @@ snapshots: '@edp-aif/common-api': 1.1.0 tslib: 1.14.1 - '@edp-bif/runtime-api-vue@0.0.1(@algolia/client-search@4.24.0)(@types/node@20.5.1)(monaco-editor@0.52.2)(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(rollup@4.24.0)(search-insights@2.17.2)(typescript@4.9.5)(vite@4.5.5(@types/node@20.5.1)(sass@1.80.3)(terser@5.36.0))': + '@edp-bif/runtime-api-vue@0.0.1(@types/node@20.5.1)(monaco-editor@0.52.2)(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(rollup@4.24.0)(typescript@4.9.5)(vite@4.5.5(@types/node@20.5.1)(sass@1.80.3)(terser@5.36.0))': dependencies: '@edp-aif/common-api': 1.1.0 '@edp-bif/common-api': 1.2.2(@edp-aif/common-api@1.1.0) @@ -13316,7 +13238,7 @@ snapshots: '@farris/bef-vue': 0.0.3 '@farris/command-services-vue': 0.0.3(typescript@4.9.5) '@farris/devkit-vue': 0.0.5(typescript@4.9.5) - '@farris/ui-vue': 1.5.3(@algolia/client-search@4.24.0)(@types/node@20.5.1)(monaco-editor@0.52.2)(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(rollup@4.24.0)(search-insights@2.17.2)(vite@4.5.5(@types/node@20.5.1)(sass@1.80.3)(terser@5.36.0))(vue@3.5.12(typescript@4.9.5)) + '@farris/ui-vue': 1.5.3(@types/node@20.5.1)(monaco-editor@0.52.2)(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(rollup@4.24.0)(vite@4.5.5(@types/node@20.5.1)(sass@1.80.3)(terser@5.36.0))(vue@3.5.12(typescript@4.9.5)) '@vue/shared': 3.5.12 '@vueuse/core': 9.2.0(vue@3.5.12(typescript@4.9.5)) async-validator: 4.2.5 @@ -13649,7 +13571,7 @@ snapshots: - debug - typescript - '@farris/ui-vue@1.5.3(@algolia/client-search@4.24.0)(@types/node@20.5.1)(monaco-editor@0.52.2)(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(rollup@4.24.0)(search-insights@2.17.2)(vite@4.5.5(@types/node@20.5.1)(sass@1.80.3)(terser@5.36.0))(vue@3.5.12(typescript@4.9.5))': + '@farris/ui-vue@1.5.3(@types/node@20.5.1)(monaco-editor@0.52.2)(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(rollup@4.24.0)(vite@4.5.5(@types/node@20.5.1)(sass@1.80.3)(terser@5.36.0))(vue@3.5.12(typescript@4.9.5))': dependencies: '@docsearch/js': 3.6.0(@algolia/client-search@4.24.0)(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(search-insights@2.17.2) '@monaco-editor/loader': 1.4.0(monaco-editor@0.52.2) @@ -13694,11 +13616,11 @@ snapshots: '@francoischalifour/autocomplete-preset-algolia@1.0.0-alpha.28': {} - '@gsp-wf/wf-task-handler-vue@0.0.1(@algolia/client-search@4.24.0)(@types/node@20.5.1)(monaco-editor@0.52.2)(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(rollup@4.24.0)(search-insights@2.17.2)(typescript@4.9.5)(vite@4.5.5(@types/node@20.5.1)(sass@1.80.3)(terser@5.36.0))': + '@gsp-wf/wf-task-handler-vue@0.0.1(@types/node@20.5.1)(monaco-editor@0.52.2)(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(rollup@4.24.0)(typescript@4.9.5)(vite@4.5.5(@types/node@20.5.1)(sass@1.80.3)(terser@5.36.0))': dependencies: '@farris/bef-vue': 0.0.3 '@farris/devkit-vue': 0.0.5(typescript@4.9.5) - '@farris/ui-vue': 1.5.3(@algolia/client-search@4.24.0)(@types/node@20.5.1)(monaco-editor@0.52.2)(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(rollup@4.24.0)(search-insights@2.17.2)(vite@4.5.5(@types/node@20.5.1)(sass@1.80.3)(terser@5.36.0))(vue@3.5.12(typescript@4.9.5)) + '@farris/ui-vue': 1.5.3(@types/node@20.5.1)(monaco-editor@0.52.2)(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(rollup@4.24.0)(vite@4.5.5(@types/node@20.5.1)(sass@1.80.3)(terser@5.36.0))(vue@3.5.12(typescript@4.9.5)) '@vue/shared': 3.5.12 '@vueuse/core': 9.2.0(vue@3.5.12(typescript@4.9.5)) async-validator: 4.2.5 @@ -13874,6 +13796,41 @@ snapshots: jest-util: 29.7.0 slash: 3.0.0 + '@jest/core@29.7.0(ts-node@10.9.2(@types/node@18.19.57)(typescript@4.9.5))': + dependencies: + '@jest/console': 29.7.0 + '@jest/reporters': 29.7.0 + '@jest/test-result': 29.7.0 + '@jest/transform': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 18.19.57 + ansi-escapes: 4.3.2 + chalk: 4.1.2 + ci-info: 3.9.0 + exit: 0.1.2 + graceful-fs: 4.2.11 + jest-changed-files: 29.7.0 + jest-config: 29.7.0(@types/node@18.19.57)(ts-node@10.9.2(@types/node@18.19.57)(typescript@4.9.5)) + jest-haste-map: 29.7.0 + jest-message-util: 29.7.0 + jest-regex-util: 29.6.3 + jest-resolve: 29.7.0 + jest-resolve-dependencies: 29.7.0 + jest-runner: 29.7.0 + jest-runtime: 29.7.0 + jest-snapshot: 29.7.0 + jest-util: 29.7.0 + jest-validate: 29.7.0 + jest-watcher: 29.7.0 + micromatch: 4.0.8 + pretty-format: 29.7.0 + slash: 3.0.0 + strip-ansi: 6.0.1 + transitivePeerDependencies: + - babel-plugin-macros + - supports-color + - ts-node + '@jest/core@29.7.0(ts-node@10.9.2(@types/node@18.19.57)(typescript@5.6.3))': dependencies: '@jest/console': 29.7.0 @@ -14707,8 +14664,6 @@ snapshots: '@tsconfig/node16@1.0.4': {} - '@tweenjs/tween.js@18.6.4': {} - '@types/argparse@1.0.38': {} '@types/aria-query@5.0.4': {} @@ -14856,16 +14811,6 @@ snapshots: '@types/stack-utils@2.0.3': {} - '@types/stats.js@0.17.4': {} - - '@types/three@0.152.1': - dependencies: - '@tweenjs/tween.js': 18.6.4 - '@types/stats.js': 0.17.4 - '@types/webxr': 0.5.22 - fflate: 0.6.10 - lil-gui: 0.17.0 - '@types/through@0.0.33': dependencies: '@types/node': 18.19.57 @@ -14881,8 +14826,6 @@ snapshots: '@types/web-bluetooth@0.0.15': {} - '@types/webxr@0.5.22': {} - '@types/yargs-parser@21.0.3': {} '@types/yargs@15.0.19': @@ -17237,6 +17180,21 @@ snapshots: p-filter: 3.0.0 p-map: 6.0.0 + create-jest@29.7.0(@types/node@18.19.57)(ts-node@10.9.2(@types/node@18.19.57)(typescript@4.9.5)): + dependencies: + '@jest/types': 29.6.3 + chalk: 4.1.2 + exit: 0.1.2 + graceful-fs: 4.2.11 + jest-config: 29.7.0(@types/node@18.19.57)(ts-node@10.9.2(@types/node@18.19.57)(typescript@4.9.5)) + jest-util: 29.7.0 + prompts: 2.4.2 + transitivePeerDependencies: + - '@types/node' + - babel-plugin-macros + - supports-color + - ts-node + create-jest@29.7.0(@types/node@18.19.57)(ts-node@10.9.2(@types/node@18.19.57)(typescript@5.6.3)): dependencies: '@jest/types': 29.6.3 @@ -17588,8 +17546,6 @@ snapshots: dependencies: is-obj: 2.0.0 - draco3dgltf@1.5.7: {} - duplexer2@0.0.2: dependencies: readable-stream: 1.1.14 @@ -18502,8 +18458,6 @@ snapshots: optionalDependencies: picomatch: 4.0.2 - fflate@0.6.10: {} - file-entry-cache@8.0.0: dependencies: flat-cache: 4.0.1 @@ -19724,6 +19678,25 @@ snapshots: - babel-plugin-macros - supports-color + jest-cli@29.7.0(@types/node@18.19.57)(ts-node@10.9.2(@types/node@18.19.57)(typescript@4.9.5)): + dependencies: + '@jest/core': 29.7.0(ts-node@10.9.2(@types/node@18.19.57)(typescript@4.9.5)) + '@jest/test-result': 29.7.0 + '@jest/types': 29.6.3 + chalk: 4.1.2 + create-jest: 29.7.0(@types/node@18.19.57)(ts-node@10.9.2(@types/node@18.19.57)(typescript@4.9.5)) + exit: 0.1.2 + import-local: 3.2.0 + jest-config: 29.7.0(@types/node@18.19.57)(ts-node@10.9.2(@types/node@18.19.57)(typescript@4.9.5)) + jest-util: 29.7.0 + jest-validate: 29.7.0 + yargs: 17.7.2 + transitivePeerDependencies: + - '@types/node' + - babel-plugin-macros + - supports-color + - ts-node + jest-cli@29.7.0(@types/node@18.19.57)(ts-node@10.9.2(@types/node@18.19.57)(typescript@5.6.3)): dependencies: '@jest/core': 29.7.0(ts-node@10.9.2(@types/node@18.19.57)(typescript@5.6.3)) @@ -19781,16 +19754,23 @@ snapshots: - supports-color - ts-node - jest-cli@29.7.0(@types/node@20.5.1)(ts-node@10.9.2(@types/node@20.5.1)(typescript@5.6.3)): + jest-config@29.7.0(@types/node@18.19.57)(ts-node@10.9.2(@types/node@18.19.57)(typescript@4.9.5)): dependencies: - '@jest/core': 29.7.0(ts-node@10.9.2(@types/node@20.5.1)(typescript@5.6.3)) - '@jest/test-result': 29.7.0 + '@babel/core': 7.25.8 + '@jest/test-sequencer': 29.7.0 '@jest/types': 29.6.3 + babel-jest: 29.7.0(@babel/core@7.25.8) chalk: 4.1.2 - create-jest: 29.7.0(@types/node@20.5.1)(ts-node@10.9.2(@types/node@20.5.1)(typescript@5.6.3)) - exit: 0.1.2 - import-local: 3.2.0 - jest-config: 29.7.0(@types/node@20.5.1)(ts-node@10.9.2(@types/node@20.5.1)(typescript@5.6.3)) + ci-info: 3.9.0 + deepmerge: 4.3.1 + glob: 7.2.3 + graceful-fs: 4.2.11 + jest-circus: 29.7.0 + jest-environment-node: 29.7.0 + jest-get-type: 29.6.3 + jest-regex-util: 29.6.3 + jest-resolve: 29.7.0 + jest-runner: 29.7.0 jest-util: 29.7.0 jest-validate: 29.7.0 micromatch: 4.0.8 @@ -19802,10 +19782,8 @@ snapshots: '@types/node': 18.19.57 ts-node: 10.9.2(@types/node@20.5.1)(typescript@5.6.3) transitivePeerDependencies: - - '@types/node' - babel-plugin-macros - supports-color - - ts-node jest-config@29.7.0(@types/node@18.19.57)(ts-node@10.9.2(@types/node@18.19.57)(typescript@5.6.3)): dependencies: @@ -20170,6 +20148,18 @@ snapshots: merge-stream: 2.0.0 supports-color: 8.1.1 + jest@29.7.0(@types/node@18.19.57)(ts-node@10.9.2(@types/node@18.19.57)(typescript@4.9.5)): + dependencies: + '@jest/core': 29.7.0(ts-node@10.9.2(@types/node@18.19.57)(typescript@4.9.5)) + '@jest/types': 29.6.3 + import-local: 3.2.0 + jest-cli: 29.7.0(@types/node@18.19.57)(ts-node@10.9.2(@types/node@18.19.57)(typescript@4.9.5)) + transitivePeerDependencies: + - '@types/node' + - babel-plugin-macros + - supports-color + - ts-node + jest@29.7.0(@types/node@18.19.57)(ts-node@10.9.2(@types/node@18.19.57)(typescript@5.6.3)): dependencies: '@jest/core': 29.7.0(ts-node@10.9.2(@types/node@18.19.57)(typescript@5.6.3)) @@ -20387,8 +20377,6 @@ snapshots: transitivePeerDependencies: - supports-color - lil-gui@0.17.0: {} - lilconfig@3.1.2: {} lines-and-columns@1.2.4: {} @@ -20947,7 +20935,7 @@ snapshots: native-dash@1.25.0(happy-dom@8.9.0)(jsdom@20.0.3)(sass@1.80.3)(terser@5.36.0): dependencies: brilliant-errors: 0.7.3(happy-dom@8.9.0)(jsdom@20.0.3)(sass@1.80.3)(terser@5.36.0) - inferred-types: 0.37.6(happy-dom@14.12.3)(jsdom@20.0.3)(sass@1.80.3)(terser@5.36.0) + inferred-types: 0.37.6(happy-dom@8.9.0)(jsdom@20.0.3)(sass@1.80.3)(terser@5.36.0) transitivePeerDependencies: - '@edge-runtime/vm' - '@vitest/browser' @@ -23472,47 +23460,14 @@ snapshots: vite-plugin-md@0.20.6(@vitejs/plugin-vue@4.6.2(vite@4.5.5(@types/node@18.19.57)(sass@1.80.3)(terser@5.36.0))(vue@3.5.12(typescript@4.9.5)))(happy-dom@8.9.0)(jsdom@20.0.3)(sass@1.80.3)(terser@5.36.0)(vite@4.5.5(@types/node@18.19.57)(sass@1.80.3)(terser@5.36.0)): dependencies: - '@microsoft/api-extractor': 7.43.0(@types/node@20.5.1) - '@rollup/pluginutils': 5.1.2(rollup@4.24.0) - '@vue/language-core': 1.8.27(typescript@4.9.5) - debug: 4.3.7 - kolorist: 1.8.0 - magic-string: 0.30.12 - typescript: 4.9.5 - vue-tsc: 1.8.27(typescript@4.9.5) - optionalDependencies: - vite: 4.5.5(@types/node@20.5.1)(sass@1.80.3)(terser@5.36.0) - transitivePeerDependencies: - - '@types/node' - - rollup - - supports-color - - vite-plugin-dts@3.9.1(@types/node@20.5.1)(rollup@4.24.0)(typescript@5.6.3)(vite@5.4.9(@types/node@20.5.1)(sass-embedded@1.80.3)(sass@1.80.3)(terser@5.36.0)): - dependencies: - '@microsoft/api-extractor': 7.43.0(@types/node@20.5.1) - '@rollup/pluginutils': 5.1.2(rollup@4.24.0) - '@vue/language-core': 1.8.27(typescript@5.6.3) - debug: 4.3.7 - kolorist: 1.8.0 - magic-string: 0.30.12 - typescript: 5.6.3 - vue-tsc: 1.8.27(typescript@5.6.3) - optionalDependencies: - vite: 5.4.9(@types/node@20.5.1)(sass-embedded@1.80.3)(sass@1.80.3)(terser@5.36.0) - transitivePeerDependencies: - - '@types/node' - - rollup - - supports-color - - vite-plugin-md@0.20.6(jsdom@20.0.3)(sass@1.80.3)(terser@5.36.0): - dependencies: - '@yankeeinlondon/builder-api': 1.4.1(@vitejs/plugin-vue@5.1.4(vite@5.4.9(@types/node@18.19.57)(sass-embedded@1.80.3)(sass@1.80.3)(terser@5.36.0))(vue@3.5.12(typescript@5.6.3)))(happy-dom@14.12.3)(jsdom@20.0.3)(sass@1.80.3)(terser@5.36.0)(vite@5.4.9(@types/node@18.19.57)(sass-embedded@1.80.3)(sass@1.80.3)(terser@5.36.0)) + '@yankeeinlondon/builder-api': 1.4.1(@vitejs/plugin-vue@4.6.2(vite@4.5.5(@types/node@18.19.57)(sass@1.80.3)(terser@5.36.0))(vue@3.5.12(typescript@4.9.5)))(happy-dom@8.9.0)(jsdom@20.0.3)(sass@1.80.3)(terser@5.36.0)(vite@4.5.5(@types/node@18.19.57)(sass@1.80.3)(terser@5.36.0)) '@yankeeinlondon/happy-wrapper': 2.10.1(jsdom@20.0.3)(sass@1.80.3)(terser@5.36.0) gray-matter: 4.0.3 markdown-it: 13.0.2 source-map-js: 1.2.1 transitivePeerDependencies: - '@edge-runtime/vm' + - '@vitejs/plugin-vue' - '@vitest/browser' - '@vitest/ui' - encoding @@ -23592,7 +23547,7 @@ snapshots: - supports-color - terser - vite-plugin-md@0.21.5(happy-dom@8.9.0)(jsdom@20.0.3)(sass@1.80.3)(terser@5.36.0)(vite@5.4.9(@types/node@20.5.1)(sass-embedded@1.80.3)(sass@1.80.3)(terser@5.36.0)): + vite-plugin-md@0.22.5(@vitejs/plugin-vue@4.6.2(vite@4.5.5(@types/node@18.19.57)(sass@1.80.3)(terser@5.36.0))(vue@3.5.12(typescript@4.9.5)))(happy-dom@8.9.0)(jsdom@20.0.3)(sass@1.80.3)(terser@5.36.0)(vite@4.5.5(@types/node@18.19.57)(sass@1.80.3)(terser@5.36.0)): dependencies: '@vitejs/plugin-vue': 4.6.2(vite@4.5.5(@types/node@18.19.57)(sass@1.80.3)(terser@5.36.0))(vue@3.5.12(typescript@4.9.5)) '@yankeeinlondon/builder-api': 1.4.1(@vitejs/plugin-vue@4.6.2(vite@4.5.5(@types/node@18.19.57)(sass@1.80.3)(terser@5.36.0))(vue@3.5.12(typescript@4.9.5)))(happy-dom@8.9.0)(jsdom@20.0.3)(sass@1.80.3)(terser@5.36.0)(vite@4.5.5(@types/node@18.19.57)(sass@1.80.3)(terser@5.36.0)) @@ -23600,7 +23555,7 @@ snapshots: '@yankeeinlondon/happy-wrapper': 2.10.1(jsdom@20.0.3)(sass@1.80.3)(terser@5.36.0) markdown-it: 13.0.2 source-map-js: 1.2.1 - vite: 5.4.9(@types/node@20.5.1)(sass-embedded@1.80.3)(sass@1.80.3)(terser@5.36.0) + vite: 4.5.5(@types/node@18.19.57)(sass@1.80.3)(terser@5.36.0) transitivePeerDependencies: - '@edge-runtime/vm' - '@vitest/browser' @@ -23898,10 +23853,10 @@ snapshots: - terser - typescript - vitepress@1.0.0-alpha.8(@algolia/client-search@4.24.0)(@types/node@18.19.57)(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(sass@1.80.3)(search-insights@2.17.2)(terser@5.36.0)(typescript@4.9.5): + vitepress@1.0.0-alpha.8(@types/node@18.19.57)(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(sass@1.80.3)(terser@5.36.0)(typescript@4.9.5): dependencies: '@docsearch/css': 3.6.2 - '@docsearch/js': 3.6.2(@algolia/client-search@4.24.0)(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(search-insights@2.17.2) + '@docsearch/js': 3.6.0(@algolia/client-search@4.24.0)(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(search-insights@2.17.2) '@vitejs/plugin-vue': 3.2.0(vite@3.2.11(@types/node@18.19.57)(sass@1.80.3)(terser@5.36.0))(vue@3.5.12(typescript@4.9.5)) '@vue/devtools-api': 6.6.4 '@vueuse/core': 9.2.0(vue@3.5.12(typescript@4.9.5)) @@ -23924,10 +23879,10 @@ snapshots: - terser - typescript - vitepress@1.0.0-alpha.8(@algolia/client-search@4.24.0)(@types/node@20.5.1)(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(sass@1.80.3)(search-insights@2.17.2)(terser@5.36.0)(typescript@4.9.5): + vitepress@1.0.0-alpha.8(@types/node@20.5.1)(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(sass@1.80.3)(terser@5.36.0)(typescript@4.9.5): dependencies: '@docsearch/css': 3.6.2 - '@docsearch/js': 3.6.2(@algolia/client-search@4.24.0)(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(search-insights@2.17.2) + '@docsearch/js': 3.6.0(@algolia/client-search@4.24.0)(react-dom@16.14.0(react@16.14.0))(react@16.14.0)(search-insights@2.17.2) '@vitejs/plugin-vue': 3.2.0(vite@3.2.11(@types/node@20.5.1)(sass@1.80.3)(terser@5.36.0))(vue@3.5.12(typescript@4.9.5)) '@vue/devtools-api': 6.6.4 '@vueuse/core': 9.2.0(vue@3.5.12(typescript@4.9.5))