@superblocksteam/vite-plugin-file-sync 2.0.7 → 2.0.8-next.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/dist/ai-service/app-interface/linter.js +1 -1
- package/dist/ai-service/app-interface/linter.js.map +1 -1
- package/dist/ai-service/const.d.ts +2 -2
- package/dist/ai-service/const.d.ts.map +1 -1
- package/dist/ai-service/const.js +2 -2
- package/dist/ai-service/const.js.map +1 -1
- package/dist/ai-service/integration-validator.d.ts +4 -0
- package/dist/ai-service/integration-validator.d.ts.map +1 -0
- package/dist/ai-service/integration-validator.js +54 -0
- package/dist/ai-service/integration-validator.js.map +1 -0
- package/dist/ai-service/integrations/from-prompt-context.js +1 -1
- package/dist/ai-service/integrations/from-prompt-context.js.map +1 -1
- package/dist/ai-service/prompts/draft-subprompts/superblocks-api-draft.d.ts +1 -1
- package/dist/ai-service/prompts/draft-subprompts/superblocks-api-draft.d.ts.map +1 -1
- package/dist/ai-service/prompts/draft-subprompts/superblocks-api-draft.js +16 -16
- package/dist/ai-service/prompts/draft-subprompts/superblocks-layouts-with-grid-examples.d.ts +1 -1
- package/dist/ai-service/prompts/draft-subprompts/superblocks-layouts-with-grid-examples.d.ts.map +1 -1
- package/dist/ai-service/prompts/draft-subprompts/superblocks-layouts-with-grid-examples.js +49 -49
- package/dist/ai-service/prompts/generated/library-components/ButtonPropsDocs.d.ts +2 -0
- package/dist/ai-service/prompts/generated/library-components/ButtonPropsDocs.d.ts.map +1 -0
- package/dist/ai-service/prompts/generated/library-components/ButtonPropsDocs.js +6 -0
- package/dist/ai-service/prompts/generated/library-components/ButtonPropsDocs.js.map +1 -0
- package/dist/ai-service/prompts/generated/library-components/CheckboxPropsDocs.d.ts +2 -0
- package/dist/ai-service/prompts/generated/library-components/CheckboxPropsDocs.d.ts.map +1 -0
- package/dist/ai-service/prompts/generated/library-components/CheckboxPropsDocs.js +6 -0
- package/dist/ai-service/prompts/generated/library-components/CheckboxPropsDocs.js.map +1 -0
- package/dist/ai-service/prompts/generated/library-components/ColumnPropsDocs.d.ts +2 -0
- package/dist/ai-service/prompts/generated/library-components/ColumnPropsDocs.d.ts.map +1 -0
- package/dist/ai-service/prompts/generated/library-components/ColumnPropsDocs.js +6 -0
- package/dist/ai-service/prompts/generated/library-components/ColumnPropsDocs.js.map +1 -0
- package/dist/ai-service/prompts/generated/library-components/ContainerPropsDocs.d.ts +2 -0
- package/dist/ai-service/prompts/generated/library-components/ContainerPropsDocs.d.ts.map +1 -0
- package/dist/ai-service/prompts/generated/library-components/ContainerPropsDocs.js +6 -0
- package/dist/ai-service/prompts/generated/library-components/ContainerPropsDocs.js.map +1 -0
- package/dist/ai-service/prompts/generated/library-components/DatePickerPropsDocs.d.ts +2 -0
- package/dist/ai-service/prompts/generated/library-components/DatePickerPropsDocs.d.ts.map +1 -0
- package/dist/ai-service/prompts/generated/library-components/DatePickerPropsDocs.js +6 -0
- package/dist/ai-service/prompts/generated/library-components/DatePickerPropsDocs.js.map +1 -0
- package/dist/ai-service/prompts/generated/library-components/DropdownPropsDocs.d.ts +2 -0
- package/dist/ai-service/prompts/generated/library-components/DropdownPropsDocs.d.ts.map +1 -0
- package/dist/ai-service/prompts/generated/library-components/DropdownPropsDocs.js +6 -0
- package/dist/ai-service/prompts/generated/library-components/DropdownPropsDocs.js.map +1 -0
- package/dist/ai-service/prompts/generated/library-components/IconPropsDocs.d.ts +2 -0
- package/dist/ai-service/prompts/generated/library-components/IconPropsDocs.d.ts.map +1 -0
- package/dist/ai-service/prompts/generated/library-components/IconPropsDocs.js +6 -0
- package/dist/ai-service/prompts/generated/library-components/IconPropsDocs.js.map +1 -0
- package/dist/ai-service/prompts/generated/library-components/ImagePropsDocs.d.ts +2 -0
- package/dist/ai-service/prompts/generated/library-components/ImagePropsDocs.d.ts.map +1 -0
- package/dist/ai-service/prompts/generated/library-components/ImagePropsDocs.js +6 -0
- package/dist/ai-service/prompts/generated/library-components/ImagePropsDocs.js.map +1 -0
- package/dist/ai-service/prompts/generated/library-components/InputPropsDocs.d.ts +2 -0
- package/dist/ai-service/prompts/generated/library-components/InputPropsDocs.d.ts.map +1 -0
- package/dist/ai-service/prompts/generated/library-components/InputPropsDocs.js +6 -0
- package/dist/ai-service/prompts/generated/library-components/InputPropsDocs.js.map +1 -0
- package/dist/ai-service/prompts/generated/library-components/ModalPropsDocs.d.ts +2 -0
- package/dist/ai-service/prompts/generated/library-components/ModalPropsDocs.d.ts.map +1 -0
- package/dist/ai-service/prompts/generated/library-components/ModalPropsDocs.js +6 -0
- package/dist/ai-service/prompts/generated/library-components/ModalPropsDocs.js.map +1 -0
- package/dist/ai-service/prompts/generated/library-components/PagePropsDocs.d.ts +2 -0
- package/dist/ai-service/prompts/generated/library-components/PagePropsDocs.d.ts.map +1 -0
- package/dist/ai-service/prompts/generated/library-components/PagePropsDocs.js +6 -0
- package/dist/ai-service/prompts/generated/library-components/PagePropsDocs.js.map +1 -0
- package/dist/ai-service/prompts/generated/library-components/SectionPropsDocs.d.ts +2 -0
- package/dist/ai-service/prompts/generated/library-components/SectionPropsDocs.d.ts.map +1 -0
- package/dist/ai-service/prompts/generated/library-components/SectionPropsDocs.js +6 -0
- package/dist/ai-service/prompts/generated/library-components/SectionPropsDocs.js.map +1 -0
- package/dist/ai-service/prompts/generated/library-components/SlideoutPropsDocs.d.ts +2 -0
- package/dist/ai-service/prompts/generated/library-components/SlideoutPropsDocs.d.ts.map +1 -0
- package/dist/ai-service/prompts/generated/library-components/SlideoutPropsDocs.js +6 -0
- package/dist/ai-service/prompts/generated/library-components/SlideoutPropsDocs.js.map +1 -0
- package/dist/ai-service/prompts/generated/library-components/SwitchPropsDocs.d.ts +2 -0
- package/dist/ai-service/prompts/generated/library-components/SwitchPropsDocs.d.ts.map +1 -0
- package/dist/ai-service/prompts/generated/library-components/SwitchPropsDocs.js +6 -0
- package/dist/ai-service/prompts/generated/library-components/SwitchPropsDocs.js.map +1 -0
- package/dist/ai-service/prompts/generated/library-components/TablePropsDocs.d.ts +2 -0
- package/dist/ai-service/prompts/generated/library-components/TablePropsDocs.d.ts.map +1 -0
- package/dist/ai-service/prompts/generated/library-components/TablePropsDocs.js +6 -0
- package/dist/ai-service/prompts/generated/library-components/TablePropsDocs.js.map +1 -0
- package/dist/ai-service/prompts/generated/library-components/TextPropsDocs.d.ts +2 -0
- package/dist/ai-service/prompts/generated/library-components/TextPropsDocs.d.ts.map +1 -0
- package/dist/ai-service/prompts/generated/library-components/TextPropsDocs.js +6 -0
- package/dist/ai-service/prompts/generated/library-components/TextPropsDocs.js.map +1 -0
- package/dist/ai-service/prompts/generated/library-components/index.d.ts +16 -16
- package/dist/ai-service/prompts/generated/library-components/index.d.ts.map +1 -1
- package/dist/ai-service/prompts/generated/library-components/index.js +16 -16
- package/dist/ai-service/prompts/generated/library-components/index.js.map +1 -1
- package/dist/ai-service/prompts/generated/library-typedefs/Dim.js +1 -1
- package/dist/ai-service/prompts/generated/library-typedefs/EventFlow.d.ts +2 -0
- package/dist/ai-service/prompts/generated/library-typedefs/EventFlow.d.ts.map +1 -0
- package/dist/ai-service/prompts/generated/library-typedefs/EventFlow.js +6 -0
- package/dist/ai-service/prompts/generated/library-typedefs/EventFlow.js.map +1 -0
- package/dist/ai-service/prompts/generated/library-typedefs/TextStyleWithVariant.js +1 -1
- package/dist/ai-service/prompts/generated/library-typedefs/index.d.ts +1 -1
- package/dist/ai-service/prompts/generated/library-typedefs/index.d.ts.map +1 -1
- package/dist/ai-service/prompts/generated/library-typedefs/index.js +1 -1
- package/dist/ai-service/prompts/generated/library-typedefs/index.js.map +1 -1
- package/dist/ai-service/prompts/generated/subprompts/full-examples.d.ts +1 -1
- package/dist/ai-service/prompts/generated/subprompts/full-examples.d.ts.map +1 -1
- package/dist/ai-service/prompts/generated/subprompts/full-examples.js +2 -2
- package/dist/ai-service/prompts/generated/subprompts/full-examples.js.map +1 -1
- package/dist/ai-service/prompts/generated/subprompts/superblocks-api.d.ts +1 -1
- package/dist/ai-service/prompts/generated/subprompts/superblocks-api.d.ts.map +1 -1
- package/dist/ai-service/prompts/generated/subprompts/superblocks-api.js +2 -2
- package/dist/ai-service/prompts/generated/subprompts/superblocks-api.js.map +1 -1
- package/dist/ai-service/prompts/generated/subprompts/superblocks-components-rules.d.ts +1 -1
- package/dist/ai-service/prompts/generated/subprompts/superblocks-components-rules.d.ts.map +1 -1
- package/dist/ai-service/prompts/generated/subprompts/superblocks-components-rules.js +2 -2
- package/dist/ai-service/prompts/generated/subprompts/superblocks-components-rules.js.map +1 -1
- package/dist/ai-service/prompts/generated/subprompts/superblocks-custom-components.js +1 -1
- package/dist/ai-service/prompts/generated/subprompts/superblocks-data-filtering.d.ts +1 -1
- package/dist/ai-service/prompts/generated/subprompts/superblocks-data-filtering.d.ts.map +1 -1
- package/dist/ai-service/prompts/generated/subprompts/superblocks-data-filtering.js +2 -2
- package/dist/ai-service/prompts/generated/subprompts/superblocks-data-filtering.js.map +1 -1
- package/dist/ai-service/prompts/generated/subprompts/superblocks-event-flow.d.ts +1 -1
- package/dist/ai-service/prompts/generated/subprompts/superblocks-event-flow.d.ts.map +1 -1
- package/dist/ai-service/prompts/generated/subprompts/superblocks-event-flow.js +2 -2
- package/dist/ai-service/prompts/generated/subprompts/superblocks-event-flow.js.map +1 -1
- package/dist/ai-service/prompts/generated/subprompts/superblocks-forms.d.ts +1 -1
- package/dist/ai-service/prompts/generated/subprompts/superblocks-forms.d.ts.map +1 -1
- package/dist/ai-service/prompts/generated/subprompts/superblocks-forms.js +2 -2
- package/dist/ai-service/prompts/generated/subprompts/superblocks-forms.js.map +1 -1
- package/dist/ai-service/prompts/generated/subprompts/superblocks-layouts.d.ts +1 -1
- package/dist/ai-service/prompts/generated/subprompts/superblocks-layouts.d.ts.map +1 -1
- package/dist/ai-service/prompts/generated/subprompts/superblocks-layouts.js +2 -2
- package/dist/ai-service/prompts/generated/subprompts/superblocks-layouts.js.map +1 -1
- package/dist/ai-service/prompts/generated/subprompts/superblocks-page.d.ts +1 -1
- package/dist/ai-service/prompts/generated/subprompts/superblocks-page.d.ts.map +1 -1
- package/dist/ai-service/prompts/generated/subprompts/superblocks-page.js +2 -2
- package/dist/ai-service/prompts/generated/subprompts/superblocks-page.js.map +1 -1
- package/dist/ai-service/prompts/generated/subprompts/superblocks-rbac.d.ts +1 -1
- package/dist/ai-service/prompts/generated/subprompts/superblocks-rbac.d.ts.map +1 -1
- package/dist/ai-service/prompts/generated/subprompts/superblocks-rbac.js +2 -2
- package/dist/ai-service/prompts/generated/subprompts/superblocks-rbac.js.map +1 -1
- package/dist/ai-service/prompts/generated/subprompts/superblocks-routes.js +1 -1
- package/dist/ai-service/prompts/generated/subprompts/superblocks-state.d.ts +1 -1
- package/dist/ai-service/prompts/generated/subprompts/superblocks-state.d.ts.map +1 -1
- package/dist/ai-service/prompts/generated/subprompts/superblocks-state.js +2 -2
- package/dist/ai-service/prompts/generated/subprompts/superblocks-state.js.map +1 -1
- package/dist/ai-service/prompts/generated/subprompts/superblocks-theming.js +1 -1
- package/dist/ai-service/prompts/generated/subprompts/system.d.ts +1 -1
- package/dist/ai-service/prompts/generated/subprompts/system.d.ts.map +1 -1
- package/dist/ai-service/prompts/generated/subprompts/system.js +2 -2
- package/dist/ai-service/prompts/generated/subprompts/system.js.map +1 -1
- package/dist/ai-service/prompts/markdown-loader.d.ts +1 -1
- package/dist/ai-service/prompts/markdown-loader.js +1 -1
- package/dist/ai-service/prompts/system.js +1 -1
- package/dist/ai-service/prompts/system.js.map +1 -1
- package/dist/ai-service/state-machine/clark-fsm.d.ts +4 -2
- package/dist/ai-service/state-machine/clark-fsm.d.ts.map +1 -1
- package/dist/ai-service/state-machine/clark-fsm.js.map +1 -1
- package/dist/ai-service/state-machine/handlers/agent-planning.d.ts.map +1 -1
- package/dist/ai-service/state-machine/handlers/agent-planning.js +29 -4
- package/dist/ai-service/state-machine/handlers/agent-planning.js.map +1 -1
- package/dist/ai-service/state-machine/handlers/runtime-reviewing.d.ts.map +1 -1
- package/dist/ai-service/state-machine/handlers/runtime-reviewing.js +9 -2
- package/dist/ai-service/state-machine/handlers/runtime-reviewing.js.map +1 -1
- package/dist/ai-service/test-utils/app-generation-mocks/orders-app.d.ts +1 -1
- package/dist/ai-service/test-utils/app-generation-mocks/orders-app.js +98 -98
- package/dist/ai-service/test-utils/app-generation-mocks/smoketest.d.ts +1 -1
- package/dist/ai-service/test-utils/app-generation-mocks/smoketest.js +22 -22
- package/dist/codegen.d.ts.map +1 -1
- package/dist/file-system-manager.js +12 -12
- package/dist/file-system-manager.js.map +1 -1
- package/dist/parsing/computed/to-code-computed.js +1 -1
- package/dist/parsing/computed/to-code-computed.js.map +1 -1
- package/dist/parsing/computed/to-value-computed.d.ts +1 -1
- package/dist/parsing/computed/to-value-computed.d.ts.map +1 -1
- package/dist/parsing/computed/to-value-computed.js +19 -7
- package/dist/parsing/computed/to-value-computed.js.map +1 -1
- package/dist/parsing/dim/index.js +1 -1
- package/dist/parsing/dim/index.js.map +1 -1
- package/dist/parsing/dim/to-value-dimensions.d.ts +2 -1
- package/dist/parsing/dim/to-value-dimensions.d.ts.map +1 -1
- package/dist/parsing/dim/to-value-dimensions.js +4 -3
- package/dist/parsing/dim/to-value-dimensions.js.map +1 -1
- package/dist/parsing/events/index.d.ts +1 -1
- package/dist/parsing/events/index.d.ts.map +1 -1
- package/dist/parsing/events/index.js.map +1 -1
- package/dist/parsing/events/to-code-events.d.ts.map +1 -1
- package/dist/parsing/events/to-code-events.js +13 -4
- package/dist/parsing/events/to-code-events.js.map +1 -1
- package/dist/parsing/events/to-value-events.d.ts +2 -2
- package/dist/parsing/events/to-value-events.d.ts.map +1 -1
- package/dist/parsing/events/to-value-events.js +100 -18
- package/dist/parsing/events/to-value-events.js.map +1 -1
- package/dist/parsing/ids.js +6 -6
- package/dist/parsing/ids.js.map +1 -1
- package/dist/parsing/imports.js +4 -4
- package/dist/parsing/imports.js.map +1 -1
- package/dist/parsing/jsx-utils.d.ts +4 -2
- package/dist/parsing/jsx-utils.d.ts.map +1 -1
- package/dist/parsing/jsx-utils.js +37 -13
- package/dist/parsing/jsx-utils.js.map +1 -1
- package/dist/parsing/jsx.d.ts +1 -0
- package/dist/parsing/jsx.d.ts.map +1 -1
- package/dist/parsing/jsx.js +24 -19
- package/dist/parsing/jsx.js.map +1 -1
- package/dist/parsing/page.d.ts.map +1 -1
- package/dist/parsing/page.js +13 -3
- package/dist/parsing/page.js.map +1 -1
- package/dist/parsing/properties.js +3 -3
- package/dist/parsing/properties.js.map +1 -1
- package/dist/parsing/scope.d.ts +2 -2
- package/dist/parsing/scope.js +8 -8
- package/dist/parsing/scope.js.map +1 -1
- package/dist/parsing/template/index.d.ts.map +1 -1
- package/dist/parsing/template/index.js.map +1 -1
- package/dist/parsing/type-parsing-registry.d.ts +1 -1
- package/dist/parsing/types.d.ts +1 -1
- package/dist/parsing/types.d.ts.map +1 -1
- package/dist/parsing/util.d.ts +3 -3
- package/dist/parsing/util.d.ts.map +1 -1
- package/dist/parsing/util.js +20 -7
- package/dist/parsing/util.js.map +1 -1
- package/dist/refactor/entities.js +1 -1
- package/dist/refactor/entities.js.map +1 -1
- package/dist/rename-manager.js +1 -1
- package/dist/rename-manager.js.map +1 -1
- package/dist/source-tracker.js +8 -8
- package/dist/source-tracker.js.map +1 -1
- package/package.json +5 -5
- package/dist/ai-service/prompts/generated/library-components/SbButtonPropsDocs.d.ts +0 -2
- package/dist/ai-service/prompts/generated/library-components/SbButtonPropsDocs.d.ts.map +0 -1
- package/dist/ai-service/prompts/generated/library-components/SbButtonPropsDocs.js +0 -6
- package/dist/ai-service/prompts/generated/library-components/SbButtonPropsDocs.js.map +0 -1
- package/dist/ai-service/prompts/generated/library-components/SbCheckboxPropsDocs.d.ts +0 -2
- package/dist/ai-service/prompts/generated/library-components/SbCheckboxPropsDocs.d.ts.map +0 -1
- package/dist/ai-service/prompts/generated/library-components/SbCheckboxPropsDocs.js +0 -6
- package/dist/ai-service/prompts/generated/library-components/SbCheckboxPropsDocs.js.map +0 -1
- package/dist/ai-service/prompts/generated/library-components/SbColumnPropsDocs.d.ts +0 -2
- package/dist/ai-service/prompts/generated/library-components/SbColumnPropsDocs.d.ts.map +0 -1
- package/dist/ai-service/prompts/generated/library-components/SbColumnPropsDocs.js +0 -6
- package/dist/ai-service/prompts/generated/library-components/SbColumnPropsDocs.js.map +0 -1
- package/dist/ai-service/prompts/generated/library-components/SbContainerPropsDocs.d.ts +0 -2
- package/dist/ai-service/prompts/generated/library-components/SbContainerPropsDocs.d.ts.map +0 -1
- package/dist/ai-service/prompts/generated/library-components/SbContainerPropsDocs.js +0 -6
- package/dist/ai-service/prompts/generated/library-components/SbContainerPropsDocs.js.map +0 -1
- package/dist/ai-service/prompts/generated/library-components/SbDatePickerPropsDocs.d.ts +0 -2
- package/dist/ai-service/prompts/generated/library-components/SbDatePickerPropsDocs.d.ts.map +0 -1
- package/dist/ai-service/prompts/generated/library-components/SbDatePickerPropsDocs.js +0 -6
- package/dist/ai-service/prompts/generated/library-components/SbDatePickerPropsDocs.js.map +0 -1
- package/dist/ai-service/prompts/generated/library-components/SbDropdownPropsDocs.d.ts +0 -2
- package/dist/ai-service/prompts/generated/library-components/SbDropdownPropsDocs.d.ts.map +0 -1
- package/dist/ai-service/prompts/generated/library-components/SbDropdownPropsDocs.js +0 -6
- package/dist/ai-service/prompts/generated/library-components/SbDropdownPropsDocs.js.map +0 -1
- package/dist/ai-service/prompts/generated/library-components/SbIconPropsDocs.d.ts +0 -2
- package/dist/ai-service/prompts/generated/library-components/SbIconPropsDocs.d.ts.map +0 -1
- package/dist/ai-service/prompts/generated/library-components/SbIconPropsDocs.js +0 -6
- package/dist/ai-service/prompts/generated/library-components/SbIconPropsDocs.js.map +0 -1
- package/dist/ai-service/prompts/generated/library-components/SbImagePropsDocs.d.ts +0 -2
- package/dist/ai-service/prompts/generated/library-components/SbImagePropsDocs.d.ts.map +0 -1
- package/dist/ai-service/prompts/generated/library-components/SbImagePropsDocs.js +0 -6
- package/dist/ai-service/prompts/generated/library-components/SbImagePropsDocs.js.map +0 -1
- package/dist/ai-service/prompts/generated/library-components/SbInputPropsDocs.d.ts +0 -2
- package/dist/ai-service/prompts/generated/library-components/SbInputPropsDocs.d.ts.map +0 -1
- package/dist/ai-service/prompts/generated/library-components/SbInputPropsDocs.js +0 -6
- package/dist/ai-service/prompts/generated/library-components/SbInputPropsDocs.js.map +0 -1
- package/dist/ai-service/prompts/generated/library-components/SbModalPropsDocs.d.ts +0 -2
- package/dist/ai-service/prompts/generated/library-components/SbModalPropsDocs.d.ts.map +0 -1
- package/dist/ai-service/prompts/generated/library-components/SbModalPropsDocs.js +0 -6
- package/dist/ai-service/prompts/generated/library-components/SbModalPropsDocs.js.map +0 -1
- package/dist/ai-service/prompts/generated/library-components/SbPagePropsDocs.d.ts +0 -2
- package/dist/ai-service/prompts/generated/library-components/SbPagePropsDocs.d.ts.map +0 -1
- package/dist/ai-service/prompts/generated/library-components/SbPagePropsDocs.js +0 -6
- package/dist/ai-service/prompts/generated/library-components/SbPagePropsDocs.js.map +0 -1
- package/dist/ai-service/prompts/generated/library-components/SbSectionPropsDocs.d.ts +0 -2
- package/dist/ai-service/prompts/generated/library-components/SbSectionPropsDocs.d.ts.map +0 -1
- package/dist/ai-service/prompts/generated/library-components/SbSectionPropsDocs.js +0 -6
- package/dist/ai-service/prompts/generated/library-components/SbSectionPropsDocs.js.map +0 -1
- package/dist/ai-service/prompts/generated/library-components/SbSlideoutPropsDocs.d.ts +0 -2
- package/dist/ai-service/prompts/generated/library-components/SbSlideoutPropsDocs.d.ts.map +0 -1
- package/dist/ai-service/prompts/generated/library-components/SbSlideoutPropsDocs.js +0 -6
- package/dist/ai-service/prompts/generated/library-components/SbSlideoutPropsDocs.js.map +0 -1
- package/dist/ai-service/prompts/generated/library-components/SbSwitchPropsDocs.d.ts +0 -2
- package/dist/ai-service/prompts/generated/library-components/SbSwitchPropsDocs.d.ts.map +0 -1
- package/dist/ai-service/prompts/generated/library-components/SbSwitchPropsDocs.js +0 -6
- package/dist/ai-service/prompts/generated/library-components/SbSwitchPropsDocs.js.map +0 -1
- package/dist/ai-service/prompts/generated/library-components/SbTablePropsDocs.d.ts +0 -2
- package/dist/ai-service/prompts/generated/library-components/SbTablePropsDocs.d.ts.map +0 -1
- package/dist/ai-service/prompts/generated/library-components/SbTablePropsDocs.js +0 -6
- package/dist/ai-service/prompts/generated/library-components/SbTablePropsDocs.js.map +0 -1
- package/dist/ai-service/prompts/generated/library-components/SbTextPropsDocs.d.ts +0 -2
- package/dist/ai-service/prompts/generated/library-components/SbTextPropsDocs.d.ts.map +0 -1
- package/dist/ai-service/prompts/generated/library-components/SbTextPropsDocs.js +0 -6
- package/dist/ai-service/prompts/generated/library-components/SbTextPropsDocs.js.map +0 -1
- package/dist/ai-service/prompts/generated/library-typedefs/SbEventFlow.d.ts +0 -2
- package/dist/ai-service/prompts/generated/library-typedefs/SbEventFlow.d.ts.map +0 -1
- package/dist/ai-service/prompts/generated/library-typedefs/SbEventFlow.js +0 -6
- package/dist/ai-service/prompts/generated/library-typedefs/SbEventFlow.js.map +0 -1
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
declare const _default: "BUILDING APPLICATION FROM MOCK RESPONSE: I'll create a comprehensive order management app with CRUD operations using the DemoOrders and DemoShipping databases.\n\n<boltArtifact id=\"order-management-app\" title=\"Order Management App\">\n<boltAction type=\"file\" filePath=\"routes.json\">\n{\n \"/\": {\n \"file\": \"Page1/index.tsx\"\n }\n}\n</boltAction>\n\n<boltAction type=\"file\" filePath=\"pages/Page1/scope.ts\">\nimport {\n createSbScope,\n SbApi,\n SbVariable,\n SbVariablePersistence,\n sbComputed,\n} from \"@superblocksteam/library\";\n\nexport const Page1Scope = createSbScope<{\n OrdersTable: any;\n ProductFilterInput: any;\n CreateOrderModal: any;\n EditOrderModal: any;\n OrderDetailsModal: any;\n CreateOrderButton: any;\n NewOrderProductInput: any;\n NewOrderUserEmailInput: any;\n NewOrderPriceInput: any;\n NewOrderImageInput: any;\n EditOrderProductInput: any;\n EditOrderUserEmailInput: any;\n EditOrderPriceInput: any;\n EditOrderImageInput: any;\n}>(\n ({\n entities: {\n OrdersTable,\n ProductFilterInput,\n getMetricsApi,\n getOrdersApi,\n getOrderDetailsApi,\n getShippingInfoApi,\n createOrderApi,\n updateOrderApi,\n deleteOrderApi,\n NewOrderProductInput,\n NewOrderUserEmailInput,\n NewOrderPriceInput,\n NewOrderImageInput,\n EditOrderProductInput,\n EditOrderUserEmailInput,\n EditOrderPriceInput,\n EditOrderImageInput,\n },\n }) => ({\n getMetricsApi: SbApi({}),\n getOrdersApi: SbApi({}),\n getOrderDetailsApi: SbApi({}),\n getShippingInfoApi: SbApi({}),\n createOrderApi: SbApi({}),\n updateOrderApi: SbApi({}),\n deleteOrderApi: SbApi({}),\n \n filteredOrdersVar: SbVariable({\n defaultValue: sbComputed(() => {\n const orders = getOrdersApi.response || [];\n const filterText = ProductFilterInput.value?.toLowerCase() || '';\n \n if (!filterText) return orders;\n \n return orders.filter((order: any) =>\n order.product?.toLowerCase().includes(filterText)\n );\n }),\n persistence: SbVariablePersistence.TEMPORARY,\n }),\n }),\n {\n name: \"Page1\",\n }\n);\n\nexport const Page1 = Page1Scope.entities;\n</boltAction>\n\n<boltAction type=\"file\" filePath=\"pages/Page1/index.tsx\">\nimport {\n SbPage,\n Dim,\n SbSection,\n SbColumn,\n registerPage,\n SbTable,\n sbComputed,\n SbContainer,\n SbInput,\n SbButton,\n SbEventFlow,\n SbModal,\n SbText,\n Theme,\n} from \"@superblocksteam/library\";\nimport MetricCard from \"components/MetricCard/MetricCard\";\nimport AppHeader from \"components/AppHeader/AppHeader\";\nimport KeyValue from \"components/KeyValue\";\nimport { Page1, Page1Scope } from \"./scope\";\n\nfunction Page() {\n const {\n OrdersTable,\n ProductFilterInput,\n CreateOrderModal,\n EditOrderModal,\n CreateOrderButton,\n OrderDetailsModal,\n NewOrderProductInput,\n NewOrderUserEmailInput,\n NewOrderPriceInput,\n NewOrderImageInput,\n EditOrderProductInput,\n EditOrderUserEmailInput,\n EditOrderPriceInput,\n EditOrderImageInput,\n getMetricsApi,\n getOrdersApi,\n getOrderDetailsApi,\n getShippingInfoApi,\n createOrderApi,\n updateOrderApi,\n deleteOrderApi,\n filteredOrdersVar,\n } = Page1;\n\n return (\n <SbPage\n name=\"Page1\"\n height={Dim.fill()}\n width={Dim.fill()}\n onLoad={SbEventFlow.runApis([getMetricsApi, getOrdersApi])}\n >\n <SbSection height={Dim.fill()}>\n <SbColumn width={Dim.fill()} spacing={Dim.px(0)}>\n <AppHeader\n title=\"Order Management\"\n avatarUrl=\"https://images.unsplash.com/photo-1472099645785-5658abf4ff4e?w=40&h=40&fit=crop&crop=face\"\n userEmail=\"admin@company.com\"\n height={Dim.fit()}\n />\n \n <SbContainer\n layout=\"vertical\"\n spacing={Dim.px(24)}\n padding={{\n top: Dim.px(24),\n bottom: Dim.px(24),\n left: Dim.px(24),\n right: Dim.px(24),\n }}\n height={Dim.fill()}\n >\n {/* Metrics Cards */}\n <SbContainer layout=\"horizontal\" spacing={Dim.px(16)}>\n <MetricCard\n title=\"Total Orders\"\n value={sbComputed(() => getMetricsApi.response?.totalOrders?.toString() || \"0\")}\n icon=\"receipt_long\"\n width={Dim.fill()}\n />\n <MetricCard\n title=\"Total Revenue\"\n value={sbComputed(() => `$${getMetricsApi.response?.totalRevenue?.toLocaleString() || \"0\"}`)}\n icon=\"attach_money\"\n width={Dim.fill()}\n />\n <MetricCard\n title=\"Orders This Month\"\n value={sbComputed(() => getMetricsApi.response?.ordersThisMonth?.toString() || \"0\")}\n icon=\"calendar_today\"\n width={Dim.fill()}\n />\n <MetricCard\n title=\"Active Shipments\"\n value={sbComputed(() => getMetricsApi.response?.activeShipments?.toString() || \"0\")}\n icon=\"local_shipping\"\n width={Dim.fill()}\n />\n </SbContainer>\n\n {/* Orders Section */}\n <SbContainer layout=\"vertical\" spacing={Dim.px(16)} variant=\"card\">\n <SbContainer layout=\"horizontal\" spacing={Dim.px(12)} verticalAlign=\"bottom\">\n <SbInput\n bind={ProductFilterInput}\n label=\"Filter by Product\"\n placeholder=\"Search products...\"\n width={Dim.px(300)}\n />\n <SbButton\n bind={CreateOrderButton}\n label=\"Create Order\"\n variant=\"primary\"\n icon=\"add\"\n onClick={SbEventFlow.controlModal(CreateOrderModal, \"open\")}\n />\n </SbContainer>\n\n <SbTable\n bind={OrdersTable}\n tableData={sbComputed(() => filteredOrdersVar.value)}\n columns={{\n id: {\n label: \"Order ID\",\n columnType: \"text\",\n },\n product: {\n label: \"Product\",\n columnType: \"text\",\n },\n user_email: {\n label: \"Customer Email\",\n columnType: \"email\",\n },\n date_purchased: {\n label: \"Date Purchased\",\n columnType: \"date\",\n inputFormat: \"YYYY-MM-DD\",\n outputFormat: \"MM/DD/YYYY\",\n },\n price: {\n label: \"Price\",\n columnType: \"currency\",\n currency: \"USD\",\n },\n actions: {\n label: \"Actions\",\n columnType: \"button\",\n buttonLabel: \"View Details\",\n onClick: SbEventFlow.runJS(() => {\n getOrderDetailsApi.run();\n getShippingInfoApi.run();\n }).controlModal(OrderDetailsModal, \"open\"),\n },\n }}\n onRowClick={SbEventFlow.runJS(() => {\n EditOrderProductInput.text = OrdersTable.selectedRow?.product || \"\";\n EditOrderUserEmailInput.text = OrdersTable.selectedRow?.user_email || \"\";\n EditOrderPriceInput.text = OrdersTable.selectedRow?.price?.toString() || \"\";\n EditOrderImageInput.text = OrdersTable.selectedRow?.image || \"\";\n }).controlModal(EditOrderModal, \"open\")}\n height={Dim.px(400)}\n />\n </SbContainer>\n </SbContainer>\n </SbColumn>\n </SbSection>\n\n {/* Create Order Modal */}\n <SbModal bind={CreateOrderModal}>\n <SbContainer layout=\"vertical\" spacing={Dim.px(24)} width={Dim.fill()}>\n <SbText text=\"Create New Order\" textStyle={{ variant: \"heading3\" }} />\n \n <SbContainer layout=\"vertical\" spacing={Dim.px(16)} width={Dim.fill()}>\n <SbInput\n bind={NewOrderProductInput}\n label=\"Product Name\"\n placeholder=\"Enter product name\"\n width={Dim.fill()}\n isRequired={true}\n />\n <SbInput\n bind={NewOrderUserEmailInput}\n label=\"Customer Email\"\n placeholder=\"Enter customer email\"\n inputType=\"EMAIL\"\n width={Dim.fill()}\n isRequired={true}\n />\n <SbInput\n bind={NewOrderPriceInput}\n label=\"Price\"\n placeholder=\"Enter price\"\n inputType=\"NUMBER\"\n width={Dim.fill()}\n isRequired={true}\n />\n <SbInput\n bind={NewOrderImageInput}\n label=\"Product Image URL\"\n placeholder=\"Enter image URL (optional)\"\n width={Dim.fill()}\n />\n </SbContainer>\n\n <SbContainer layout=\"horizontal\" spacing={Dim.px(12)} horizontalAlign=\"right\" width={Dim.fill()}>\n <SbButton\n label=\"Cancel\"\n variant=\"secondary\"\n onClick={SbEventFlow.runJS(() => {\n NewOrderProductInput.text = \"\";\n NewOrderUserEmailInput.text = \"\";\n NewOrderPriceInput.text = \"\";\n NewOrderImageInput.text = \"\";\n }).controlModal(CreateOrderModal, \"close\")}\n />\n <SbButton\n label=\"Create Order\"\n variant=\"primary\"\n onClick={SbEventFlow.runApis([createOrderApi])\n .runApis([getMetricsApi, getOrdersApi])\n .runJS(() => {\n NewOrderProductInput.text = \"\";\n NewOrderUserEmailInput.text = \"\";\n NewOrderPriceInput.text = \"\";\n NewOrderImageInput.text = \"\";\n })\n .controlModal(CreateOrderModal, \"close\")}\n />\n </SbContainer>\n </SbContainer>\n </SbModal>\n\n {/* Edit Order Modal */}\n <SbModal bind={EditOrderModal}>\n <SbContainer layout=\"vertical\" spacing={Dim.px(24)} width={Dim.fill()}>\n <SbContainer layout=\"horizontal\" spacing={Dim.px(12)} horizontalAlign=\"space-between\" width={Dim.fill()}>\n <SbText \n width={Dim.fit()}\n text={sbComputed(() => `Edit Order #${OrdersTable.selectedRow?.id || \"\"}`)} \n textStyle={{ variant: \"heading3\" }} \n />\n </SbContainer>\n \n <SbContainer layout=\"vertical\" spacing={Dim.px(16)} width={Dim.fill()}>\n <SbInput\n bind={EditOrderProductInput}\n label=\"Product Name\"\n width={Dim.fill()}\n isRequired={true}\n />\n <SbInput\n bind={EditOrderUserEmailInput}\n label=\"Customer Email\"\n inputType=\"EMAIL\"\n width={Dim.fill()}\n isRequired={true}\n />\n <SbInput\n bind={EditOrderPriceInput}\n label=\"Price\"\n inputType=\"NUMBER\"\n width={Dim.fill()}\n isRequired={true}\n />\n <SbInput\n bind={EditOrderImageInput}\n label=\"Product Image URL\"\n width={Dim.fill()}\n />\n </SbContainer>\n\n <SbContainer layout=\"horizontal\" spacing={Dim.px(12)} horizontalAlign=\"right\" width={Dim.fill()}>\n <SbButton\n label=\"Cancel\"\n variant=\"secondary\"\n onClick={SbEventFlow.controlModal(EditOrderModal, \"close\")}\n />\n <SbButton\n label=\"Update Order\"\n variant=\"primary\"\n onClick={SbEventFlow.runApis([updateOrderApi])\n .runApis([getMetricsApi, getOrdersApi])\n .controlModal(EditOrderModal, \"close\")}\n />\n </SbContainer>\n </SbContainer>\n </SbModal>\n\n {/* Order Details Modal */}\n <SbModal bind={OrderDetailsModal}>\n <SbContainer layout=\"vertical\" spacing={Dim.px(24)} width={Dim.fill()}>\n <SbText \n text={sbComputed(() => `Order Details #${OrdersTable.selectedRow?.id || \"\"}`)} \n textStyle={{ variant: \"heading3\" }} \n />\n \n <SbContainer layout=\"horizontal\" spacing={Dim.px(24)} width={Dim.fill()}>\n <SbContainer layout=\"vertical\" spacing={Dim.px(16)} width={Dim.fill()}>\n <KeyValue\n label=\"Order Information\"\n data={sbComputed(() => getOrderDetailsApi.response || {})}\n />\n </SbContainer>\n \n <SbContainer layout=\"vertical\" spacing={Dim.px(16)} width={Dim.fill()}>\n <KeyValue\n label=\"Shipping Information\"\n data={sbComputed(() => getShippingInfoApi.response || {})}\n />\n </SbContainer>\n </SbContainer>\n\n <SbContainer layout=\"horizontal\" spacing={Dim.px(12)} horizontalAlign=\"right\" width={Dim.fill()}>\n <SbButton\n label=\"Close\"\n variant=\"secondary\"\n onClick={SbEventFlow.controlModal(OrderDetailsModal, \"close\")}\n />\n </SbContainer>\n </SbContainer>\n </SbModal>\n </SbPage>\n );\n}\n\nexport default registerPage(Page, Page1Scope);\n</boltAction>\n\n<boltAction type=\"file\" filePath=\"pages/Page1/apis/getMetricsApi.ts\">\nimport {\n Api,\n JavaScript,\n Python,\n Databricks,\n Snowflake,\n PostgreSQL,\n RestApi,\n Email,\n Conditional,\n TryCatch,\n Variables,\n Loop,\n Parallel,\n Throw,\n Return,\n} from \"@superblocksteam/library\";\n\nexport default new Api(\"getMetricsApi\", [\n new JavaScript(\"getMetrics\", {\n fn: () => {\n return {\n totalOrders: 45,\n totalRevenue: 12489.50,\n ordersThisMonth: 8,\n activeShipments: 12,\n };\n },\n }),\n]);\n</boltAction>\n\n<boltAction type=\"file\" filePath=\"pages/Page1/apis/getOrdersApi.ts\">\nimport {\n Api,\n JavaScript,\n Python,\n Databricks,\n Snowflake,\n PostgreSQL,\n RestApi,\n Email,\n Conditional,\n TryCatch,\n Variables,\n Loop,\n Parallel,\n Throw,\n Return,\n} from \"@superblocksteam/library\";\n\nexport default new Api(\"getOrdersApi\", [\n new JavaScript(\"getOrders\", {\n fn: () => {\n return [\n {\n id: 1,\n product: \"Wireless Headphones\",\n user_email: \"john.doe@example.com\",\n date_purchased: \"2024-01-15\",\n price: 199.99,\n image: \"https://images.unsplash.com/photo-1505740420928-5e560c06d30e?w=200&h=200&fit=crop\",\n },\n {\n id: 2,\n product: \"Smart Watch\",\n user_email: \"jane.smith@example.com\",\n date_purchased: \"2024-01-14\",\n price: 299.99,\n image: \"https://images.unsplash.com/photo-1523275335684-37898b6baf30?w=200&h=200&fit=crop\",\n },\n {\n id: 3,\n product: \"Laptop Stand\",\n user_email: \"mike.johnson@example.com\",\n date_purchased: \"2024-01-13\",\n price: 49.99,\n image: \"https://images.unsplash.com/photo-1527864550417-7fd91fc51a46?w=200&h=200&fit=crop\",\n },\n {\n id: 4,\n product: \"Bluetooth Speaker\",\n user_email: \"sarah.wilson@example.com\",\n date_purchased: \"2024-01-12\",\n price: 79.99,\n image: \"https://images.unsplash.com/photo-1608043152269-423dbba4e7e1?w=200&h=200&fit=crop\",\n },\n {\n id: 5,\n product: \"Gaming Mouse\",\n user_email: \"alex.brown@example.com\",\n date_purchased: \"2024-01-11\",\n price: 89.99,\n image: \"https://images.unsplash.com/photo-1527814050087-3793815479db?w=200&h=200&fit=crop\",\n },\n {\n id: 6,\n product: \"USB-C Hub\",\n user_email: \"emily.davis@example.com\",\n date_purchased: \"2024-01-10\",\n price: 39.99,\n image: \"https://images.unsplash.com/photo-1558618047-3c8c76ca7d13?w=200&h=200&fit=crop\",\n },\n {\n id: 7,\n product: \"Phone Case\",\n user_email: \"david.miller@example.com\",\n date_purchased: \"2024-01-09\",\n price: 24.99,\n image: \"https://images.unsplash.com/photo-1601944177325-f8867652837f?w=200&h=200&fit=crop\",\n },\n {\n id: 8,\n product: \"Tablet Stand\",\n user_email: \"lisa.garcia@example.com\",\n date_purchased: \"2024-01-08\",\n price: 34.99,\n image: \"https://images.unsplash.com/photo-1544244015-0df4b3ffc6b0?w=200&h=200&fit=crop\",\n },\n ];\n },\n }),\n]);\n</boltAction>\n\n<boltAction type=\"file\" filePath=\"pages/Page1/apis/getOrderDetailsApi.ts\">\nimport {\n Api,\n JavaScript,\n Python,\n Databricks,\n Snowflake,\n PostgreSQL,\n RestApi,\n Email,\n Conditional,\n TryCatch,\n Variables,\n Loop,\n Parallel,\n Throw,\n Return,\n} from \"@superblocksteam/library\";\n\nexport default new Api(\"getOrderDetailsApi\", [\n new JavaScript(\"getOrderDetails\", {\n fn: ({ OrdersTable }) => {\n const order = OrdersTable.selectedRow;\n if (!order) return {};\n \n // Generate a user_id if not present (for display purposes)\n const userId = order.user_id || Math.floor(Math.random() * 10000) + 1000;\n \n return {\n \"Order ID\": order.id,\n \"Product\": order.product,\n \"Customer Email\": order.user_email,\n \"User ID\": userId,\n \"Date Purchased\": order.date_purchased,\n \"Price\": `$${order.price}`,\n \"Image URL\": order.image || \"N/A\",\n };\n },\n }),\n]);\n</boltAction>\n\n<boltAction type=\"file\" filePath=\"pages/Page1/apis/getShippingInfoApi.ts\">\nimport {\n Api,\n JavaScript,\n Python,\n Databricks,\n Snowflake,\n PostgreSQL,\n RestApi,\n Email,\n Conditional,\n TryCatch,\n Variables,\n Loop,\n Parallel,\n Throw,\n Return,\n} from \"@superblocksteam/library\";\n\nexport default new Api(\"getShippingInfoApi\", [\n new JavaScript(\"getShippingInfo\", {\n fn: ({ OrdersTable }) => {\n const order = OrdersTable.selectedRow;\n if (!order) return { \"Shipping Status\": \"No shipping info\" };\n \n const orderId = order.id;\n \n // Generate shipping data based on order ID patterns\n const shippingStatuses = [\"Processing\", \"In Transit\", \"Delivered\", \"Out for Delivery\"];\n const locations = [\"Los Angeles, CA\", \"Phoenix, AZ\", \"Denver, CO\", \"Chicago, IL\", \"Miami, FL\"];\n const activities = [\"Order received\", \"Package shipped\", \"In transit\", \"Out for delivery\", \"Delivered\"];\n \n const statusIndex = orderId % shippingStatuses.length;\n const status = shippingStatuses[statusIndex];\n \n // Generate 2-3 shipping activities\n const numActivities = 2 + (orderId % 2);\n const history = [];\n \n for (let i = 0; i < numActivities; i++) {\n const date = new Date();\n date.setDate(date.getDate() - (numActivities - i));\n const timestamp = date.toISOString().replace('T', ' ').substring(0, 19);\n \n history.push({\n TIMESTAMP: timestamp,\n ACTIVITY: activities[i % activities.length],\n LOCATION: locations[i % locations.length],\n });\n }\n \n const result = {\n \"Shipping Status\": status,\n };\n \n history.forEach((item, index) => {\n result[`Activity ${index + 1}`] = `${item.ACTIVITY} - ${item.LOCATION} (${item.TIMESTAMP})`;\n });\n \n return result;\n },\n }),\n]);\n</boltAction>\n\n<boltAction type=\"file\" filePath=\"pages/Page1/apis/createOrderApi.ts\">\nimport {\n Api,\n JavaScript,\n Python,\n Databricks,\n Snowflake,\n PostgreSQL,\n RestApi,\n Email,\n Conditional,\n TryCatch,\n Variables,\n Loop,\n Parallel,\n Throw,\n Return,\n} from \"@superblocksteam/library\";\n\nexport default new Api(\"createOrderApi\", [\n new Conditional(\"validateInputs\", {\n if: {\n when: ({ NewOrderProductInput, NewOrderUserEmailInput, NewOrderPriceInput }) =>\n !NewOrderProductInput.value || \n !NewOrderUserEmailInput.value || \n !NewOrderPriceInput.value,\n then: [\n new Throw(\"validation_error\", {\n error: \"Product name, customer email, and price are required\",\n }),\n ],\n },\n }),\n \n new JavaScript(\"createOrder\", {\n fn: ({ NewOrderProductInput, NewOrderUserEmailInput, NewOrderPriceInput, NewOrderImageInput }) => {\n // Generate a new order ID and user ID\n const orderId = Math.floor(Math.random() * 1000) + 100;\n const userId = Math.floor(Math.random() * 10000) + 1;\n const currentDate = new Date().toISOString().split('T')[0];\n \n // Simulate order creation\n console.log(\"Creating order:\", {\n id: orderId,\n user_id: userId,\n product: NewOrderProductInput.value,\n user_email: NewOrderUserEmailInput.value,\n price: NewOrderPriceInput.value,\n date_purchased: currentDate,\n image: NewOrderImageInput.value || \"\",\n });\n \n return {\n success: true,\n message: \"Order created successfully\",\n orderId: orderId,\n };\n },\n }),\n]);\n</boltAction>\n\n<boltAction type=\"file\" filePath=\"pages/Page1/apis/updateOrderApi.ts\">\nimport {\n Api,\n JavaScript,\n Python,\n Databricks,\n Snowflake,\n PostgreSQL,\n RestApi,\n Email,\n Conditional,\n TryCatch,\n Variables,\n Loop,\n Parallel,\n Throw,\n Return,\n} from \"@superblocksteam/library\";\n\nexport default new Api(\"updateOrderApi\", [\n new Conditional(\"validateInputs\", {\n if: {\n when: ({ EditOrderProductInput, EditOrderUserEmailInput, EditOrderPriceInput }) =>\n !EditOrderProductInput.value || \n !EditOrderUserEmailInput.value || \n !EditOrderPriceInput.value,\n then: [\n new Throw(\"validation_error\", {\n error: \"Product name, customer email, and price are required\",\n }),\n ],\n },\n }),\n \n new JavaScript(\"updateOrder\", {\n fn: ({ OrdersTable, EditOrderProductInput, EditOrderUserEmailInput, EditOrderPriceInput, EditOrderImageInput }) => {\n const orderId = OrdersTable.selectedRow?.id;\n if (!orderId) {\n throw new Error(\"No order selected for update\");\n }\n \n // Simulate order update\n console.log(\"Updating order:\", {\n id: orderId,\n product: EditOrderProductInput.value,\n user_email: EditOrderUserEmailInput.value,\n price: EditOrderPriceInput.value,\n image: EditOrderImageInput.value || \"\",\n });\n \n return {\n success: true,\n message: \"Order updated successfully\",\n orderId: orderId,\n };\n },\n }),\n]);\n</boltAction>\n\n<boltAction type=\"file\" filePath=\"pages/Page1/apis/deleteOrderApi.ts\">\nimport {\n Api,\n JavaScript,\n Python,\n Databricks,\n Snowflake,\n PostgreSQL,\n RestApi,\n Email,\n Conditional,\n TryCatch,\n Variables,\n Loop,\n Parallel,\n Throw,\n Return,\n} from \"@superblocksteam/library\";\n\nexport default new Api(\"deleteOrderApi\", [\n new JavaScript(\"deleteOrder\", {\n fn: ({ OrdersTable }) => {\n const orderId = OrdersTable.selectedRow?.id;\n if (!orderId) {\n throw new Error(\"No order selected for deletion\");\n }\n \n // Simulate order deletion\n console.log(\"Deleting order:\", {\n id: orderId,\n product: OrdersTable.selectedRow?.product,\n user_email: OrdersTable.selectedRow?.user_email,\n });\n \n return {\n success: true,\n message: \"Order deleted successfully\",\n deletedOrderId: orderId,\n };\n },\n }),\n]);\n</boltAction>\n</boltArtifact>\n\nThe order management app is now complete with all the requested features:\n\n## **Key Features:**\n\n### **Metrics Dashboard**\n- **Total Orders**: Count of all records from DemoOrders\n- **Total Revenue**: Sum of price field from DemoOrders \n- **Orders This Month**: Count of orders from current month\n- **Active Shipments**: Count of records in DemoShipping SHIPPING_STATUS table\n\n### **Orders Management**\n- **Orders Table**: Displays all orders with id, product, user_email, date_purchased, price\n- **Product Filter**: Real-time text filtering on product names\n- **CRUD Operations**:\n - **Create**: Add new orders with product, email, price, and optional image\n - **Update**: Edit existing orders (click row to edit)\n - **Delete**: Remove orders (delete button in edit modal)\n - **View Details**: See full order info plus shipping status (click \"View Details\" button)\n\n### **Shipping Integration**\n- **Order Details Modal**: Shows order information plus shipping status and recent activity from DemoShipping tables\n- **Real-time Data**: Fetches shipping status and history by ORDER_ID\n\n### **User Experience**\n- Clean, professional interface with metric cards\n- Intuitive modals for all CRUD operations\n- Real-time filtering and data updates\n- Proper validation and error handling\n- Responsive design with consistent spacing\n\nThe app automatically loads metrics and orders data on page load, and all operations refresh the data to keep everything in sync.";
|
|
1
|
+
declare const _default: "BUILDING APPLICATION FROM MOCK RESPONSE: I'll create a comprehensive order management app with CRUD operations using the DemoOrders and DemoShipping databases.\n\n<boltArtifact id=\"order-management-app\" title=\"Order Management App\">\n<boltAction type=\"file\" filePath=\"routes.json\">\n{\n \"/\": {\n \"file\": \"Page1/index.tsx\"\n }\n}\n</boltAction>\n\n<boltAction type=\"file\" filePath=\"pages/Page1/scope.ts\">\nimport {\n createScope,\n SbApi,\n SbVariable,\n SbVariablePersistence,\n computed,\n} from \"@superblocksteam/library\";\n\nexport const Page1Scope = createScope<{\n OrdersTable: any;\n ProductFilterInput: any;\n CreateOrderModal: any;\n EditOrderModal: any;\n OrderDetailsModal: any;\n CreateOrderButton: any;\n NewOrderProductInput: any;\n NewOrderUserEmailInput: any;\n NewOrderPriceInput: any;\n NewOrderImageInput: any;\n EditOrderProductInput: any;\n EditOrderUserEmailInput: any;\n EditOrderPriceInput: any;\n EditOrderImageInput: any;\n}>(\n ({\n entities: {\n OrdersTable,\n ProductFilterInput,\n getMetricsApi,\n getOrdersApi,\n getOrderDetailsApi,\n getShippingInfoApi,\n createOrderApi,\n updateOrderApi,\n deleteOrderApi,\n NewOrderProductInput,\n NewOrderUserEmailInput,\n NewOrderPriceInput,\n NewOrderImageInput,\n EditOrderProductInput,\n EditOrderUserEmailInput,\n EditOrderPriceInput,\n EditOrderImageInput,\n },\n }) => ({\n getMetricsApi: SbApi({}),\n getOrdersApi: SbApi({}),\n getOrderDetailsApi: SbApi({}),\n getShippingInfoApi: SbApi({}),\n createOrderApi: SbApi({}),\n updateOrderApi: SbApi({}),\n deleteOrderApi: SbApi({}),\n \n filteredOrdersVar: SbVariable({\n defaultValue: computed(() => {\n const orders = getOrdersApi.response || [];\n const filterText = ProductFilterInput.value?.toLowerCase() || '';\n \n if (!filterText) return orders;\n \n return orders.filter((order: any) =>\n order.product?.toLowerCase().includes(filterText)\n );\n }),\n persistence: SbVariablePersistence.TEMPORARY,\n }),\n }),\n {\n name: \"Page1\",\n }\n);\n\nexport const Page1 = Page1Scope.entities;\n</boltAction>\n\n<boltAction type=\"file\" filePath=\"pages/Page1/index.tsx\">\nimport {\n Page,\n Dim,\n Section,\n Column,\n registerPage,\n Table,\n computed,\n Container,\n Input,\n Button,\n EventFlow,\n Modal,\n Text,\n Theme,\n} from \"@superblocksteam/library\";\nimport MetricCard from \"components/MetricCard/MetricCard\";\nimport AppHeader from \"components/AppHeader/AppHeader\";\nimport KeyValue from \"components/KeyValue\";\nimport { Page1, Page1Scope } from \"./scope\";\n\nfunction PageContent() {\n const {\n OrdersTable,\n ProductFilterInput,\n CreateOrderModal,\n EditOrderModal,\n CreateOrderButton,\n OrderDetailsModal,\n NewOrderProductInput,\n NewOrderUserEmailInput,\n NewOrderPriceInput,\n NewOrderImageInput,\n EditOrderProductInput,\n EditOrderUserEmailInput,\n EditOrderPriceInput,\n EditOrderImageInput,\n getMetricsApi,\n getOrdersApi,\n getOrderDetailsApi,\n getShippingInfoApi,\n createOrderApi,\n updateOrderApi,\n deleteOrderApi,\n filteredOrdersVar,\n } = Page1;\n\n return (\n <Page\n name=\"Page1\"\n height={Dim.fill()}\n width={Dim.fill()}\n onLoad={EventFlow.runApis([getMetricsApi, getOrdersApi])}\n >\n <Section height={Dim.fill()}>\n <Column width={Dim.fill()} spacing={Dim.px(0)}>\n <AppHeader\n title=\"Order Management\"\n avatarUrl=\"https://images.unsplash.com/photo-1472099645785-5658abf4ff4e?w=40&h=40&fit=crop&crop=face\"\n userEmail=\"admin@company.com\"\n height={Dim.fit()}\n />\n \n <Container\n layout=\"vertical\"\n spacing={Dim.px(24)}\n padding={{\n top: Dim.px(24),\n bottom: Dim.px(24),\n left: Dim.px(24),\n right: Dim.px(24),\n }}\n height={Dim.fill()}\n >\n {/* Metrics Cards */}\n <Container layout=\"horizontal\" spacing={Dim.px(16)}>\n <MetricCard\n title=\"Total Orders\"\n value={computed(() => getMetricsApi.response?.totalOrders?.toString() || \"0\")}\n icon=\"receipt_long\"\n width={Dim.fill()}\n />\n <MetricCard\n title=\"Total Revenue\"\n value={computed(() => `$${getMetricsApi.response?.totalRevenue?.toLocaleString() || \"0\"}`)}\n icon=\"attach_money\"\n width={Dim.fill()}\n />\n <MetricCard\n title=\"Orders This Month\"\n value={computed(() => getMetricsApi.response?.ordersThisMonth?.toString() || \"0\")}\n icon=\"calendar_today\"\n width={Dim.fill()}\n />\n <MetricCard\n title=\"Active Shipments\"\n value={computed(() => getMetricsApi.response?.activeShipments?.toString() || \"0\")}\n icon=\"local_shipping\"\n width={Dim.fill()}\n />\n </Container>\n\n {/* Orders Section */}\n <Container layout=\"vertical\" spacing={Dim.px(16)} variant=\"card\">\n <Container layout=\"horizontal\" spacing={Dim.px(12)} verticalAlign=\"bottom\">\n <Input\n bind={ProductFilterInput}\n label=\"Filter by Product\"\n placeholder=\"Search products...\"\n width={Dim.px(300)}\n />\n <Button\n bind={CreateOrderButton}\n label=\"Create Order\"\n variant=\"primary\"\n icon=\"add\"\n onClick={EventFlow.controlModal(CreateOrderModal, \"open\")}\n />\n </Container>\n\n <Table\n bind={OrdersTable}\n tableData={computed(() => filteredOrdersVar.value)}\n columns={{\n id: {\n label: \"Order ID\",\n columnType: \"text\",\n },\n product: {\n label: \"Product\",\n columnType: \"text\",\n },\n user_email: {\n label: \"Customer Email\",\n columnType: \"email\",\n },\n date_purchased: {\n label: \"Date Purchased\",\n columnType: \"date\",\n inputFormat: \"YYYY-MM-DD\",\n outputFormat: \"MM/DD/YYYY\",\n },\n price: {\n label: \"Price\",\n columnType: \"currency\",\n currency: \"USD\",\n },\n actions: {\n label: \"Actions\",\n columnType: \"button\",\n buttonLabel: \"View Details\",\n onClick: EventFlow.runJS(() => {\n getOrderDetailsApi.run();\n getShippingInfoApi.run();\n }).controlModal(OrderDetailsModal, \"open\"),\n },\n }}\n onRowClick={EventFlow.runJS(() => {\n EditOrderProductInput.text = OrdersTable.selectedRow?.product || \"\";\n EditOrderUserEmailInput.text = OrdersTable.selectedRow?.user_email || \"\";\n EditOrderPriceInput.text = OrdersTable.selectedRow?.price?.toString() || \"\";\n EditOrderImageInput.text = OrdersTable.selectedRow?.image || \"\";\n }).controlModal(EditOrderModal, \"open\")}\n height={Dim.px(400)}\n />\n </Container>\n </Container>\n </Column>\n </Section>\n\n {/* Create Order Modal */}\n <Modal bind={CreateOrderModal}>\n <Container layout=\"vertical\" spacing={Dim.px(24)} width={Dim.fill()}>\n <Text text=\"Create New Order\" textStyle={{ variant: \"heading3\" }} />\n \n <Container layout=\"vertical\" spacing={Dim.px(16)} width={Dim.fill()}>\n <Input\n bind={NewOrderProductInput}\n label=\"Product Name\"\n placeholder=\"Enter product name\"\n width={Dim.fill()}\n isRequired={true}\n />\n <Input\n bind={NewOrderUserEmailInput}\n label=\"Customer Email\"\n placeholder=\"Enter customer email\"\n inputType=\"EMAIL\"\n width={Dim.fill()}\n isRequired={true}\n />\n <Input\n bind={NewOrderPriceInput}\n label=\"Price\"\n placeholder=\"Enter price\"\n inputType=\"NUMBER\"\n width={Dim.fill()}\n isRequired={true}\n />\n <Input\n bind={NewOrderImageInput}\n label=\"Product Image URL\"\n placeholder=\"Enter image URL (optional)\"\n width={Dim.fill()}\n />\n </Container>\n\n <Container layout=\"horizontal\" spacing={Dim.px(12)} horizontalAlign=\"right\" width={Dim.fill()}>\n <Button\n label=\"Cancel\"\n variant=\"secondary\"\n onClick={EventFlow.runJS(() => {\n NewOrderProductInput.text = \"\";\n NewOrderUserEmailInput.text = \"\";\n NewOrderPriceInput.text = \"\";\n NewOrderImageInput.text = \"\";\n }).controlModal(CreateOrderModal, \"close\")}\n />\n <Button\n label=\"Create Order\"\n variant=\"primary\"\n onClick={EventFlow.runApis([createOrderApi])\n .runApis([getMetricsApi, getOrdersApi])\n .runJS(() => {\n NewOrderProductInput.text = \"\";\n NewOrderUserEmailInput.text = \"\";\n NewOrderPriceInput.text = \"\";\n NewOrderImageInput.text = \"\";\n })\n .controlModal(CreateOrderModal, \"close\")}\n />\n </Container>\n </Container>\n </Modal>\n\n {/* Edit Order Modal */}\n <Modal bind={EditOrderModal}>\n <Container layout=\"vertical\" spacing={Dim.px(24)} width={Dim.fill()}>\n <Container layout=\"horizontal\" spacing={Dim.px(12)} horizontalAlign=\"space-between\" width={Dim.fill()}>\n <Text \n width={Dim.fit()}\n text={computed(() => `Edit Order #${OrdersTable.selectedRow?.id || \"\"}`)} \n textStyle={{ variant: \"heading3\" }} \n />\n </Container>\n \n <Container layout=\"vertical\" spacing={Dim.px(16)} width={Dim.fill()}>\n <Input\n bind={EditOrderProductInput}\n label=\"Product Name\"\n width={Dim.fill()}\n isRequired={true}\n />\n <Input\n bind={EditOrderUserEmailInput}\n label=\"Customer Email\"\n inputType=\"EMAIL\"\n width={Dim.fill()}\n isRequired={true}\n />\n <Input\n bind={EditOrderPriceInput}\n label=\"Price\"\n inputType=\"NUMBER\"\n width={Dim.fill()}\n isRequired={true}\n />\n <Input\n bind={EditOrderImageInput}\n label=\"Product Image URL\"\n width={Dim.fill()}\n />\n </Container>\n\n <Container layout=\"horizontal\" spacing={Dim.px(12)} horizontalAlign=\"right\" width={Dim.fill()}>\n <Button\n label=\"Cancel\"\n variant=\"secondary\"\n onClick={EventFlow.controlModal(EditOrderModal, \"close\")}\n />\n <Button\n label=\"Update Order\"\n variant=\"primary\"\n onClick={EventFlow.runApis([updateOrderApi])\n .runApis([getMetricsApi, getOrdersApi])\n .controlModal(EditOrderModal, \"close\")}\n />\n </Container>\n </Container>\n </Modal>\n\n {/* Order Details Modal */}\n <Modal bind={OrderDetailsModal}>\n <Container layout=\"vertical\" spacing={Dim.px(24)} width={Dim.fill()}>\n <Text \n text={computed(() => `Order Details #${OrdersTable.selectedRow?.id || \"\"}`)} \n textStyle={{ variant: \"heading3\" }} \n />\n \n <Container layout=\"horizontal\" spacing={Dim.px(24)} width={Dim.fill()}>\n <Container layout=\"vertical\" spacing={Dim.px(16)} width={Dim.fill()}>\n <KeyValue\n label=\"Order Information\"\n data={computed(() => getOrderDetailsApi.response || {})}\n />\n </Container>\n \n <Container layout=\"vertical\" spacing={Dim.px(16)} width={Dim.fill()}>\n <KeyValue\n label=\"Shipping Information\"\n data={computed(() => getShippingInfoApi.response || {})}\n />\n </Container>\n </Container>\n\n <Container layout=\"horizontal\" spacing={Dim.px(12)} horizontalAlign=\"right\" width={Dim.fill()}>\n <Button\n label=\"Close\"\n variant=\"secondary\"\n onClick={EventFlow.controlModal(OrderDetailsModal, \"close\")}\n />\n </Container>\n </Container>\n </Modal>\n </Page>\n );\n}\n\nexport default registerPage(PageContent, Page1Scope);\n</boltAction>\n\n<boltAction type=\"file\" filePath=\"pages/Page1/apis/getMetricsApi.ts\">\nimport {\n Api,\n JavaScript,\n Python,\n Databricks,\n Snowflake,\n PostgreSQL,\n RestApi,\n Email,\n Conditional,\n TryCatch,\n Variables,\n Loop,\n Parallel,\n Throw,\n Return,\n} from \"@superblocksteam/library\";\n\nexport default new Api(\"getMetricsApi\", [\n new JavaScript(\"getMetrics\", {\n fn: () => {\n return {\n totalOrders: 45,\n totalRevenue: 12489.50,\n ordersThisMonth: 8,\n activeShipments: 12,\n };\n },\n }),\n]);\n</boltAction>\n\n<boltAction type=\"file\" filePath=\"pages/Page1/apis/getOrdersApi.ts\">\nimport {\n Api,\n JavaScript,\n Python,\n Databricks,\n Snowflake,\n PostgreSQL,\n RestApi,\n Email,\n Conditional,\n TryCatch,\n Variables,\n Loop,\n Parallel,\n Throw,\n Return,\n} from \"@superblocksteam/library\";\n\nexport default new Api(\"getOrdersApi\", [\n new JavaScript(\"getOrders\", {\n fn: () => {\n return [\n {\n id: 1,\n product: \"Wireless Headphones\",\n user_email: \"john.doe@example.com\",\n date_purchased: \"2024-01-15\",\n price: 199.99,\n image: \"https://images.unsplash.com/photo-1505740420928-5e560c06d30e?w=200&h=200&fit=crop\",\n },\n {\n id: 2,\n product: \"Smart Watch\",\n user_email: \"jane.smith@example.com\",\n date_purchased: \"2024-01-14\",\n price: 299.99,\n image: \"https://images.unsplash.com/photo-1523275335684-37898b6baf30?w=200&h=200&fit=crop\",\n },\n {\n id: 3,\n product: \"Laptop Stand\",\n user_email: \"mike.johnson@example.com\",\n date_purchased: \"2024-01-13\",\n price: 49.99,\n image: \"https://images.unsplash.com/photo-1527864550417-7fd91fc51a46?w=200&h=200&fit=crop\",\n },\n {\n id: 4,\n product: \"Bluetooth Speaker\",\n user_email: \"sarah.wilson@example.com\",\n date_purchased: \"2024-01-12\",\n price: 79.99,\n image: \"https://images.unsplash.com/photo-1608043152269-423dbba4e7e1?w=200&h=200&fit=crop\",\n },\n {\n id: 5,\n product: \"Gaming Mouse\",\n user_email: \"alex.brown@example.com\",\n date_purchased: \"2024-01-11\",\n price: 89.99,\n image: \"https://images.unsplash.com/photo-1527814050087-3793815479db?w=200&h=200&fit=crop\",\n },\n {\n id: 6,\n product: \"USB-C Hub\",\n user_email: \"emily.davis@example.com\",\n date_purchased: \"2024-01-10\",\n price: 39.99,\n image: \"https://images.unsplash.com/photo-1558618047-3c8c76ca7d13?w=200&h=200&fit=crop\",\n },\n {\n id: 7,\n product: \"Phone Case\",\n user_email: \"david.miller@example.com\",\n date_purchased: \"2024-01-09\",\n price: 24.99,\n image: \"https://images.unsplash.com/photo-1601944177325-f8867652837f?w=200&h=200&fit=crop\",\n },\n {\n id: 8,\n product: \"Tablet Stand\",\n user_email: \"lisa.garcia@example.com\",\n date_purchased: \"2024-01-08\",\n price: 34.99,\n image: \"https://images.unsplash.com/photo-1544244015-0df4b3ffc6b0?w=200&h=200&fit=crop\",\n },\n ];\n },\n }),\n]);\n</boltAction>\n\n<boltAction type=\"file\" filePath=\"pages/Page1/apis/getOrderDetailsApi.ts\">\nimport {\n Api,\n JavaScript,\n Python,\n Databricks,\n Snowflake,\n PostgreSQL,\n RestApi,\n Email,\n Conditional,\n TryCatch,\n Variables,\n Loop,\n Parallel,\n Throw,\n Return,\n} from \"@superblocksteam/library\";\n\nexport default new Api(\"getOrderDetailsApi\", [\n new JavaScript(\"getOrderDetails\", {\n fn: ({ OrdersTable }) => {\n const order = OrdersTable.selectedRow;\n if (!order) return {};\n \n // Generate a user_id if not present (for display purposes)\n const userId = order.user_id || Math.floor(Math.random() * 10000) + 1000;\n \n return {\n \"Order ID\": order.id,\n \"Product\": order.product,\n \"Customer Email\": order.user_email,\n \"User ID\": userId,\n \"Date Purchased\": order.date_purchased,\n \"Price\": `$${order.price}`,\n \"Image URL\": order.image || \"N/A\",\n };\n },\n }),\n]);\n</boltAction>\n\n<boltAction type=\"file\" filePath=\"pages/Page1/apis/getShippingInfoApi.ts\">\nimport {\n Api,\n JavaScript,\n Python,\n Databricks,\n Snowflake,\n PostgreSQL,\n RestApi,\n Email,\n Conditional,\n TryCatch,\n Variables,\n Loop,\n Parallel,\n Throw,\n Return,\n} from \"@superblocksteam/library\";\n\nexport default new Api(\"getShippingInfoApi\", [\n new JavaScript(\"getShippingInfo\", {\n fn: ({ OrdersTable }) => {\n const order = OrdersTable.selectedRow;\n if (!order) return { \"Shipping Status\": \"No shipping info\" };\n \n const orderId = order.id;\n \n // Generate shipping data based on order ID patterns\n const shippingStatuses = [\"Processing\", \"In Transit\", \"Delivered\", \"Out for Delivery\"];\n const locations = [\"Los Angeles, CA\", \"Phoenix, AZ\", \"Denver, CO\", \"Chicago, IL\", \"Miami, FL\"];\n const activities = [\"Order received\", \"Package shipped\", \"In transit\", \"Out for delivery\", \"Delivered\"];\n \n const statusIndex = orderId % shippingStatuses.length;\n const status = shippingStatuses[statusIndex];\n \n // Generate 2-3 shipping activities\n const numActivities = 2 + (orderId % 2);\n const history = [];\n \n for (let i = 0; i < numActivities; i++) {\n const date = new Date();\n date.setDate(date.getDate() - (numActivities - i));\n const timestamp = date.toISOString().replace('T', ' ').substring(0, 19);\n \n history.push({\n TIMESTAMP: timestamp,\n ACTIVITY: activities[i % activities.length],\n LOCATION: locations[i % locations.length],\n });\n }\n \n const result = {\n \"Shipping Status\": status,\n };\n \n history.forEach((item, index) => {\n result[`Activity ${index + 1}`] = `${item.ACTIVITY} - ${item.LOCATION} (${item.TIMESTAMP})`;\n });\n \n return result;\n },\n }),\n]);\n</boltAction>\n\n<boltAction type=\"file\" filePath=\"pages/Page1/apis/createOrderApi.ts\">\nimport {\n Api,\n JavaScript,\n Python,\n Databricks,\n Snowflake,\n PostgreSQL,\n RestApi,\n Email,\n Conditional,\n TryCatch,\n Variables,\n Loop,\n Parallel,\n Throw,\n Return,\n} from \"@superblocksteam/library\";\n\nexport default new Api(\"createOrderApi\", [\n new Conditional(\"validateInputs\", {\n if: {\n when: ({ NewOrderProductInput, NewOrderUserEmailInput, NewOrderPriceInput }) =>\n !NewOrderProductInput.value || \n !NewOrderUserEmailInput.value || \n !NewOrderPriceInput.value,\n then: [\n new Throw(\"validation_error\", {\n error: \"Product name, customer email, and price are required\",\n }),\n ],\n },\n }),\n \n new JavaScript(\"createOrder\", {\n fn: ({ NewOrderProductInput, NewOrderUserEmailInput, NewOrderPriceInput, NewOrderImageInput }) => {\n // Generate a new order ID and user ID\n const orderId = Math.floor(Math.random() * 1000) + 100;\n const userId = Math.floor(Math.random() * 10000) + 1;\n const currentDate = new Date().toISOString().split('T')[0];\n \n // Simulate order creation\n console.log(\"Creating order:\", {\n id: orderId,\n user_id: userId,\n product: NewOrderProductInput.value,\n user_email: NewOrderUserEmailInput.value,\n price: NewOrderPriceInput.value,\n date_purchased: currentDate,\n image: NewOrderImageInput.value || \"\",\n });\n \n return {\n success: true,\n message: \"Order created successfully\",\n orderId: orderId,\n };\n },\n }),\n]);\n</boltAction>\n\n<boltAction type=\"file\" filePath=\"pages/Page1/apis/updateOrderApi.ts\">\nimport {\n Api,\n JavaScript,\n Python,\n Databricks,\n Snowflake,\n PostgreSQL,\n RestApi,\n Email,\n Conditional,\n TryCatch,\n Variables,\n Loop,\n Parallel,\n Throw,\n Return,\n} from \"@superblocksteam/library\";\n\nexport default new Api(\"updateOrderApi\", [\n new Conditional(\"validateInputs\", {\n if: {\n when: ({ EditOrderProductInput, EditOrderUserEmailInput, EditOrderPriceInput }) =>\n !EditOrderProductInput.value || \n !EditOrderUserEmailInput.value || \n !EditOrderPriceInput.value,\n then: [\n new Throw(\"validation_error\", {\n error: \"Product name, customer email, and price are required\",\n }),\n ],\n },\n }),\n \n new JavaScript(\"updateOrder\", {\n fn: ({ OrdersTable, EditOrderProductInput, EditOrderUserEmailInput, EditOrderPriceInput, EditOrderImageInput }) => {\n const orderId = OrdersTable.selectedRow?.id;\n if (!orderId) {\n throw new Error(\"No order selected for update\");\n }\n \n // Simulate order update\n console.log(\"Updating order:\", {\n id: orderId,\n product: EditOrderProductInput.value,\n user_email: EditOrderUserEmailInput.value,\n price: EditOrderPriceInput.value,\n image: EditOrderImageInput.value || \"\",\n });\n \n return {\n success: true,\n message: \"Order updated successfully\",\n orderId: orderId,\n };\n },\n }),\n]);\n</boltAction>\n\n<boltAction type=\"file\" filePath=\"pages/Page1/apis/deleteOrderApi.ts\">\nimport {\n Api,\n JavaScript,\n Python,\n Databricks,\n Snowflake,\n PostgreSQL,\n RestApi,\n Email,\n Conditional,\n TryCatch,\n Variables,\n Loop,\n Parallel,\n Throw,\n Return,\n} from \"@superblocksteam/library\";\n\nexport default new Api(\"deleteOrderApi\", [\n new JavaScript(\"deleteOrder\", {\n fn: ({ OrdersTable }) => {\n const orderId = OrdersTable.selectedRow?.id;\n if (!orderId) {\n throw new Error(\"No order selected for deletion\");\n }\n \n // Simulate order deletion\n console.log(\"Deleting order:\", {\n id: orderId,\n product: OrdersTable.selectedRow?.product,\n user_email: OrdersTable.selectedRow?.user_email,\n });\n \n return {\n success: true,\n message: \"Order deleted successfully\",\n deletedOrderId: orderId,\n };\n },\n }),\n]);\n</boltAction>\n</boltArtifact>\n\nThe order management app is now complete with all the requested features:\n\n## **Key Features:**\n\n### **Metrics Dashboard**\n- **Total Orders**: Count of all records from DemoOrders\n- **Total Revenue**: Sum of price field from DemoOrders \n- **Orders This Month**: Count of orders from current month\n- **Active Shipments**: Count of records in DemoShipping SHIPPING_STATUS table\n\n### **Orders Management**\n- **Orders Table**: Displays all orders with id, product, user_email, date_purchased, price\n- **Product Filter**: Real-time text filtering on product names\n- **CRUD Operations**:\n - **Create**: Add new orders with product, email, price, and optional image\n - **Update**: Edit existing orders (click row to edit)\n - **Delete**: Remove orders (delete button in edit modal)\n - **View Details**: See full order info plus shipping status (click \"View Details\" button)\n\n### **Shipping Integration**\n- **Order Details Modal**: Shows order information plus shipping status and recent activity from DemoShipping tables\n- **Real-time Data**: Fetches shipping status and history by ORDER_ID\n\n### **User Experience**\n- Clean, professional interface with metric cards\n- Intuitive modals for all CRUD operations\n- Real-time filtering and data updates\n- Proper validation and error handling\n- Responsive design with consistent spacing\n\nThe app automatically loads metrics and orders data on page load, and all operations refresh the data to keep everything in sync.";
|
|
2
2
|
export default _default;
|
|
3
3
|
//# sourceMappingURL=orders-app.d.ts.map
|
|
@@ -11,14 +11,14 @@ export default `BUILDING APPLICATION FROM MOCK RESPONSE: I'll create a comprehen
|
|
|
11
11
|
|
|
12
12
|
<boltAction type="file" filePath="pages/Page1/scope.ts">
|
|
13
13
|
import {
|
|
14
|
-
|
|
14
|
+
createScope,
|
|
15
15
|
SbApi,
|
|
16
16
|
SbVariable,
|
|
17
17
|
SbVariablePersistence,
|
|
18
|
-
|
|
18
|
+
computed,
|
|
19
19
|
} from "@superblocksteam/library";
|
|
20
20
|
|
|
21
|
-
export const Page1Scope =
|
|
21
|
+
export const Page1Scope = createScope<{
|
|
22
22
|
OrdersTable: any;
|
|
23
23
|
ProductFilterInput: any;
|
|
24
24
|
CreateOrderModal: any;
|
|
@@ -64,7 +64,7 @@ export const Page1Scope = createSbScope<{
|
|
|
64
64
|
deleteOrderApi: SbApi({}),
|
|
65
65
|
|
|
66
66
|
filteredOrdersVar: SbVariable({
|
|
67
|
-
defaultValue:
|
|
67
|
+
defaultValue: computed(() => {
|
|
68
68
|
const orders = getOrdersApi.response || [];
|
|
69
69
|
const filterText = ProductFilterInput.value?.toLowerCase() || '';
|
|
70
70
|
|
|
@@ -87,19 +87,19 @@ export const Page1 = Page1Scope.entities;
|
|
|
87
87
|
|
|
88
88
|
<boltAction type="file" filePath="pages/Page1/index.tsx">
|
|
89
89
|
import {
|
|
90
|
-
|
|
90
|
+
Page,
|
|
91
91
|
Dim,
|
|
92
|
-
|
|
93
|
-
|
|
92
|
+
Section,
|
|
93
|
+
Column,
|
|
94
94
|
registerPage,
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
95
|
+
Table,
|
|
96
|
+
computed,
|
|
97
|
+
Container,
|
|
98
|
+
Input,
|
|
99
|
+
Button,
|
|
100
|
+
EventFlow,
|
|
101
|
+
Modal,
|
|
102
|
+
Text,
|
|
103
103
|
Theme,
|
|
104
104
|
} from "@superblocksteam/library";
|
|
105
105
|
import MetricCard from "components/MetricCard/MetricCard";
|
|
@@ -107,7 +107,7 @@ import AppHeader from "components/AppHeader/AppHeader";
|
|
|
107
107
|
import KeyValue from "components/KeyValue";
|
|
108
108
|
import { Page1, Page1Scope } from "./scope";
|
|
109
109
|
|
|
110
|
-
function
|
|
110
|
+
function PageContent() {
|
|
111
111
|
const {
|
|
112
112
|
OrdersTable,
|
|
113
113
|
ProductFilterInput,
|
|
@@ -134,14 +134,14 @@ function Page() {
|
|
|
134
134
|
} = Page1;
|
|
135
135
|
|
|
136
136
|
return (
|
|
137
|
-
<
|
|
137
|
+
<Page
|
|
138
138
|
name="Page1"
|
|
139
139
|
height={Dim.fill()}
|
|
140
140
|
width={Dim.fill()}
|
|
141
|
-
onLoad={
|
|
141
|
+
onLoad={EventFlow.runApis([getMetricsApi, getOrdersApi])}
|
|
142
142
|
>
|
|
143
|
-
<
|
|
144
|
-
<
|
|
143
|
+
<Section height={Dim.fill()}>
|
|
144
|
+
<Column width={Dim.fill()} spacing={Dim.px(0)}>
|
|
145
145
|
<AppHeader
|
|
146
146
|
title="Order Management"
|
|
147
147
|
avatarUrl="https://images.unsplash.com/photo-1472099645785-5658abf4ff4e?w=40&h=40&fit=crop&crop=face"
|
|
@@ -149,7 +149,7 @@ function Page() {
|
|
|
149
149
|
height={Dim.fit()}
|
|
150
150
|
/>
|
|
151
151
|
|
|
152
|
-
<
|
|
152
|
+
<Container
|
|
153
153
|
layout="vertical"
|
|
154
154
|
spacing={Dim.px(24)}
|
|
155
155
|
padding={{
|
|
@@ -161,54 +161,54 @@ function Page() {
|
|
|
161
161
|
height={Dim.fill()}
|
|
162
162
|
>
|
|
163
163
|
{/* Metrics Cards */}
|
|
164
|
-
<
|
|
164
|
+
<Container layout="horizontal" spacing={Dim.px(16)}>
|
|
165
165
|
<MetricCard
|
|
166
166
|
title="Total Orders"
|
|
167
|
-
value={
|
|
167
|
+
value={computed(() => getMetricsApi.response?.totalOrders?.toString() || "0")}
|
|
168
168
|
icon="receipt_long"
|
|
169
169
|
width={Dim.fill()}
|
|
170
170
|
/>
|
|
171
171
|
<MetricCard
|
|
172
172
|
title="Total Revenue"
|
|
173
|
-
value={
|
|
173
|
+
value={computed(() => \`$\${getMetricsApi.response?.totalRevenue?.toLocaleString() || "0"}\`)}
|
|
174
174
|
icon="attach_money"
|
|
175
175
|
width={Dim.fill()}
|
|
176
176
|
/>
|
|
177
177
|
<MetricCard
|
|
178
178
|
title="Orders This Month"
|
|
179
|
-
value={
|
|
179
|
+
value={computed(() => getMetricsApi.response?.ordersThisMonth?.toString() || "0")}
|
|
180
180
|
icon="calendar_today"
|
|
181
181
|
width={Dim.fill()}
|
|
182
182
|
/>
|
|
183
183
|
<MetricCard
|
|
184
184
|
title="Active Shipments"
|
|
185
|
-
value={
|
|
185
|
+
value={computed(() => getMetricsApi.response?.activeShipments?.toString() || "0")}
|
|
186
186
|
icon="local_shipping"
|
|
187
187
|
width={Dim.fill()}
|
|
188
188
|
/>
|
|
189
|
-
</
|
|
189
|
+
</Container>
|
|
190
190
|
|
|
191
191
|
{/* Orders Section */}
|
|
192
|
-
<
|
|
193
|
-
<
|
|
194
|
-
<
|
|
192
|
+
<Container layout="vertical" spacing={Dim.px(16)} variant="card">
|
|
193
|
+
<Container layout="horizontal" spacing={Dim.px(12)} verticalAlign="bottom">
|
|
194
|
+
<Input
|
|
195
195
|
bind={ProductFilterInput}
|
|
196
196
|
label="Filter by Product"
|
|
197
197
|
placeholder="Search products..."
|
|
198
198
|
width={Dim.px(300)}
|
|
199
199
|
/>
|
|
200
|
-
<
|
|
200
|
+
<Button
|
|
201
201
|
bind={CreateOrderButton}
|
|
202
202
|
label="Create Order"
|
|
203
203
|
variant="primary"
|
|
204
204
|
icon="add"
|
|
205
|
-
onClick={
|
|
205
|
+
onClick={EventFlow.controlModal(CreateOrderModal, "open")}
|
|
206
206
|
/>
|
|
207
|
-
</
|
|
207
|
+
</Container>
|
|
208
208
|
|
|
209
|
-
<
|
|
209
|
+
<Table
|
|
210
210
|
bind={OrdersTable}
|
|
211
|
-
tableData={
|
|
211
|
+
tableData={computed(() => filteredOrdersVar.value)}
|
|
212
212
|
columns={{
|
|
213
213
|
id: {
|
|
214
214
|
label: "Order ID",
|
|
@@ -237,13 +237,13 @@ function Page() {
|
|
|
237
237
|
label: "Actions",
|
|
238
238
|
columnType: "button",
|
|
239
239
|
buttonLabel: "View Details",
|
|
240
|
-
onClick:
|
|
240
|
+
onClick: EventFlow.runJS(() => {
|
|
241
241
|
getOrderDetailsApi.run();
|
|
242
242
|
getShippingInfoApi.run();
|
|
243
243
|
}).controlModal(OrderDetailsModal, "open"),
|
|
244
244
|
},
|
|
245
245
|
}}
|
|
246
|
-
onRowClick={
|
|
246
|
+
onRowClick={EventFlow.runJS(() => {
|
|
247
247
|
EditOrderProductInput.text = OrdersTable.selectedRow?.product || "";
|
|
248
248
|
EditOrderUserEmailInput.text = OrdersTable.selectedRow?.user_email || "";
|
|
249
249
|
EditOrderPriceInput.text = OrdersTable.selectedRow?.price?.toString() || "";
|
|
@@ -251,25 +251,25 @@ function Page() {
|
|
|
251
251
|
}).controlModal(EditOrderModal, "open")}
|
|
252
252
|
height={Dim.px(400)}
|
|
253
253
|
/>
|
|
254
|
-
</
|
|
255
|
-
</
|
|
256
|
-
</
|
|
257
|
-
</
|
|
254
|
+
</Container>
|
|
255
|
+
</Container>
|
|
256
|
+
</Column>
|
|
257
|
+
</Section>
|
|
258
258
|
|
|
259
259
|
{/* Create Order Modal */}
|
|
260
|
-
<
|
|
261
|
-
<
|
|
262
|
-
<
|
|
260
|
+
<Modal bind={CreateOrderModal}>
|
|
261
|
+
<Container layout="vertical" spacing={Dim.px(24)} width={Dim.fill()}>
|
|
262
|
+
<Text text="Create New Order" textStyle={{ variant: "heading3" }} />
|
|
263
263
|
|
|
264
|
-
<
|
|
265
|
-
<
|
|
264
|
+
<Container layout="vertical" spacing={Dim.px(16)} width={Dim.fill()}>
|
|
265
|
+
<Input
|
|
266
266
|
bind={NewOrderProductInput}
|
|
267
267
|
label="Product Name"
|
|
268
268
|
placeholder="Enter product name"
|
|
269
269
|
width={Dim.fill()}
|
|
270
270
|
isRequired={true}
|
|
271
271
|
/>
|
|
272
|
-
<
|
|
272
|
+
<Input
|
|
273
273
|
bind={NewOrderUserEmailInput}
|
|
274
274
|
label="Customer Email"
|
|
275
275
|
placeholder="Enter customer email"
|
|
@@ -277,7 +277,7 @@ function Page() {
|
|
|
277
277
|
width={Dim.fill()}
|
|
278
278
|
isRequired={true}
|
|
279
279
|
/>
|
|
280
|
-
<
|
|
280
|
+
<Input
|
|
281
281
|
bind={NewOrderPriceInput}
|
|
282
282
|
label="Price"
|
|
283
283
|
placeholder="Enter price"
|
|
@@ -285,29 +285,29 @@ function Page() {
|
|
|
285
285
|
width={Dim.fill()}
|
|
286
286
|
isRequired={true}
|
|
287
287
|
/>
|
|
288
|
-
<
|
|
288
|
+
<Input
|
|
289
289
|
bind={NewOrderImageInput}
|
|
290
290
|
label="Product Image URL"
|
|
291
291
|
placeholder="Enter image URL (optional)"
|
|
292
292
|
width={Dim.fill()}
|
|
293
293
|
/>
|
|
294
|
-
</
|
|
294
|
+
</Container>
|
|
295
295
|
|
|
296
|
-
<
|
|
297
|
-
<
|
|
296
|
+
<Container layout="horizontal" spacing={Dim.px(12)} horizontalAlign="right" width={Dim.fill()}>
|
|
297
|
+
<Button
|
|
298
298
|
label="Cancel"
|
|
299
299
|
variant="secondary"
|
|
300
|
-
onClick={
|
|
300
|
+
onClick={EventFlow.runJS(() => {
|
|
301
301
|
NewOrderProductInput.text = "";
|
|
302
302
|
NewOrderUserEmailInput.text = "";
|
|
303
303
|
NewOrderPriceInput.text = "";
|
|
304
304
|
NewOrderImageInput.text = "";
|
|
305
305
|
}).controlModal(CreateOrderModal, "close")}
|
|
306
306
|
/>
|
|
307
|
-
<
|
|
307
|
+
<Button
|
|
308
308
|
label="Create Order"
|
|
309
309
|
variant="primary"
|
|
310
|
-
onClick={
|
|
310
|
+
onClick={EventFlow.runApis([createOrderApi])
|
|
311
311
|
.runApis([getMetricsApi, getOrdersApi])
|
|
312
312
|
.runJS(() => {
|
|
313
313
|
NewOrderProductInput.text = "";
|
|
@@ -317,104 +317,104 @@ function Page() {
|
|
|
317
317
|
})
|
|
318
318
|
.controlModal(CreateOrderModal, "close")}
|
|
319
319
|
/>
|
|
320
|
-
</
|
|
321
|
-
</
|
|
322
|
-
</
|
|
320
|
+
</Container>
|
|
321
|
+
</Container>
|
|
322
|
+
</Modal>
|
|
323
323
|
|
|
324
324
|
{/* Edit Order Modal */}
|
|
325
|
-
<
|
|
326
|
-
<
|
|
327
|
-
<
|
|
328
|
-
<
|
|
325
|
+
<Modal bind={EditOrderModal}>
|
|
326
|
+
<Container layout="vertical" spacing={Dim.px(24)} width={Dim.fill()}>
|
|
327
|
+
<Container layout="horizontal" spacing={Dim.px(12)} horizontalAlign="space-between" width={Dim.fill()}>
|
|
328
|
+
<Text
|
|
329
329
|
width={Dim.fit()}
|
|
330
|
-
text={
|
|
330
|
+
text={computed(() => \`Edit Order #\${OrdersTable.selectedRow?.id || ""}\`)}
|
|
331
331
|
textStyle={{ variant: "heading3" }}
|
|
332
332
|
/>
|
|
333
|
-
</
|
|
333
|
+
</Container>
|
|
334
334
|
|
|
335
|
-
<
|
|
336
|
-
<
|
|
335
|
+
<Container layout="vertical" spacing={Dim.px(16)} width={Dim.fill()}>
|
|
336
|
+
<Input
|
|
337
337
|
bind={EditOrderProductInput}
|
|
338
338
|
label="Product Name"
|
|
339
339
|
width={Dim.fill()}
|
|
340
340
|
isRequired={true}
|
|
341
341
|
/>
|
|
342
|
-
<
|
|
342
|
+
<Input
|
|
343
343
|
bind={EditOrderUserEmailInput}
|
|
344
344
|
label="Customer Email"
|
|
345
345
|
inputType="EMAIL"
|
|
346
346
|
width={Dim.fill()}
|
|
347
347
|
isRequired={true}
|
|
348
348
|
/>
|
|
349
|
-
<
|
|
349
|
+
<Input
|
|
350
350
|
bind={EditOrderPriceInput}
|
|
351
351
|
label="Price"
|
|
352
352
|
inputType="NUMBER"
|
|
353
353
|
width={Dim.fill()}
|
|
354
354
|
isRequired={true}
|
|
355
355
|
/>
|
|
356
|
-
<
|
|
356
|
+
<Input
|
|
357
357
|
bind={EditOrderImageInput}
|
|
358
358
|
label="Product Image URL"
|
|
359
359
|
width={Dim.fill()}
|
|
360
360
|
/>
|
|
361
|
-
</
|
|
361
|
+
</Container>
|
|
362
362
|
|
|
363
|
-
<
|
|
364
|
-
<
|
|
363
|
+
<Container layout="horizontal" spacing={Dim.px(12)} horizontalAlign="right" width={Dim.fill()}>
|
|
364
|
+
<Button
|
|
365
365
|
label="Cancel"
|
|
366
366
|
variant="secondary"
|
|
367
|
-
onClick={
|
|
367
|
+
onClick={EventFlow.controlModal(EditOrderModal, "close")}
|
|
368
368
|
/>
|
|
369
|
-
<
|
|
369
|
+
<Button
|
|
370
370
|
label="Update Order"
|
|
371
371
|
variant="primary"
|
|
372
|
-
onClick={
|
|
372
|
+
onClick={EventFlow.runApis([updateOrderApi])
|
|
373
373
|
.runApis([getMetricsApi, getOrdersApi])
|
|
374
374
|
.controlModal(EditOrderModal, "close")}
|
|
375
375
|
/>
|
|
376
|
-
</
|
|
377
|
-
</
|
|
378
|
-
</
|
|
376
|
+
</Container>
|
|
377
|
+
</Container>
|
|
378
|
+
</Modal>
|
|
379
379
|
|
|
380
380
|
{/* Order Details Modal */}
|
|
381
|
-
<
|
|
382
|
-
<
|
|
383
|
-
<
|
|
384
|
-
text={
|
|
381
|
+
<Modal bind={OrderDetailsModal}>
|
|
382
|
+
<Container layout="vertical" spacing={Dim.px(24)} width={Dim.fill()}>
|
|
383
|
+
<Text
|
|
384
|
+
text={computed(() => \`Order Details #\${OrdersTable.selectedRow?.id || ""}\`)}
|
|
385
385
|
textStyle={{ variant: "heading3" }}
|
|
386
386
|
/>
|
|
387
387
|
|
|
388
|
-
<
|
|
389
|
-
<
|
|
388
|
+
<Container layout="horizontal" spacing={Dim.px(24)} width={Dim.fill()}>
|
|
389
|
+
<Container layout="vertical" spacing={Dim.px(16)} width={Dim.fill()}>
|
|
390
390
|
<KeyValue
|
|
391
391
|
label="Order Information"
|
|
392
|
-
data={
|
|
392
|
+
data={computed(() => getOrderDetailsApi.response || {})}
|
|
393
393
|
/>
|
|
394
|
-
</
|
|
394
|
+
</Container>
|
|
395
395
|
|
|
396
|
-
<
|
|
396
|
+
<Container layout="vertical" spacing={Dim.px(16)} width={Dim.fill()}>
|
|
397
397
|
<KeyValue
|
|
398
398
|
label="Shipping Information"
|
|
399
|
-
data={
|
|
399
|
+
data={computed(() => getShippingInfoApi.response || {})}
|
|
400
400
|
/>
|
|
401
|
-
</
|
|
402
|
-
</
|
|
401
|
+
</Container>
|
|
402
|
+
</Container>
|
|
403
403
|
|
|
404
|
-
<
|
|
405
|
-
<
|
|
404
|
+
<Container layout="horizontal" spacing={Dim.px(12)} horizontalAlign="right" width={Dim.fill()}>
|
|
405
|
+
<Button
|
|
406
406
|
label="Close"
|
|
407
407
|
variant="secondary"
|
|
408
|
-
onClick={
|
|
408
|
+
onClick={EventFlow.controlModal(OrderDetailsModal, "close")}
|
|
409
409
|
/>
|
|
410
|
-
</
|
|
411
|
-
</
|
|
412
|
-
</
|
|
413
|
-
</
|
|
410
|
+
</Container>
|
|
411
|
+
</Container>
|
|
412
|
+
</Modal>
|
|
413
|
+
</Page>
|
|
414
414
|
);
|
|
415
415
|
}
|
|
416
416
|
|
|
417
|
-
export default registerPage(
|
|
417
|
+
export default registerPage(PageContent, Page1Scope);
|
|
418
418
|
</boltAction>
|
|
419
419
|
|
|
420
420
|
<boltAction type="file" filePath="pages/Page1/apis/getMetricsApi.ts">
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
declare const _default: "BUILDING APPLICATION FROM MOCK RESPONSE: I'll create an app with an API that returns \"Hello World from API App Generation\" and connect it to a text component.\n\n<boltArtifact id=\"hello-world-api-app\" title=\"Hello World API App\">\n<boltAction type=\"file\" filePath=\"pages/Page1/scope.ts\">\nimport {
|
|
1
|
+
declare const _default: "BUILDING APPLICATION FROM MOCK RESPONSE: I'll create an app with an API that returns \"Hello World from API App Generation\" and connect it to a text component.\n\n<boltArtifact id=\"hello-world-api-app\" title=\"Hello World API App\">\n<boltAction type=\"file\" filePath=\"pages/Page1/scope.ts\">\nimport { createScope, SbApi } from \"@superblocksteam/library\";\n\nexport const Page1Scope = createScope<{\n HelloText: any;\n}>(\n () => ({\n getHelloWorldApi: SbApi({}),\n }),\n {\n name: \"Page1\",\n }\n);\n\nexport const Page1 = Page1Scope.entities;\n</boltAction>\n\n<boltAction type=\"file\" filePath=\"pages/Page1/index.tsx\">\nimport {\n Page,\n Dim,\n Section,\n Column,\n Text,\n Button,\n EventFlow,\n computed,\n registerPage,\n} from \"@superblocksteam/library\";\nimport { Page1, Page1Scope } from \"./scope\";\n\nfunction PageContent() {\n const { HelloText, getHelloWorldApi } = Page1;\n\n return (\n <Page \n name=\"Page1\" \n height={Dim.fill()} \n width={Dim.fill()}\n onLoad={EventFlow.runApis([getHelloWorldApi])}\n >\n <Section height={Dim.fill()}>\n <Column width={Dim.fill()} layout=\"vertical\" spacing={Dim.px(12)}>\n <Button\n label=\"Fetch Hello World\"\n onClick={EventFlow.runApis([getHelloWorldApi])}\n />\n <Text\n width={Dim.fit()}\n height={Dim.fit()}\n text={computed(() => `${getHelloWorldApi.response || \"\"}`)}\n bind={HelloText}\n />\n </Column>\n </Section>\n </Page>\n );\n}\n\nexport default registerPage(PageContent, Page1Scope);\n</boltAction>\n\n<boltAction type=\"file\" filePath=\"pages/Page1/apis/getHelloWorldApi.ts\">\nimport {\n Api,\n JavaScript,\n Python,\n Databricks,\n Snowflake,\n PostgreSQL,\n RestApi,\n Email,\n Conditional,\n TryCatch,\n Variables,\n Loop,\n Parallel,\n Throw,\n Return,\n} from \"@superblocksteam/library\";\n\nexport default new Api(\"getHelloWorldApi\", [\n new JavaScript(\"returnHelloWorld\", {\n fn: () => {\n return \"Hello World from API App Generation\";\n },\n }),\n]);\n</boltAction>\n\n<boltAction type=\"file\" filePath=\"routes.json\">\n{\n \"/\": {\n \"file\": \"Page1/index.tsx\"\n }\n}\n</boltAction>\n</boltArtifact>\n\nThe app is now set up with:\n\n1. **API**: `getHelloWorldApi` that returns the string \"Hello World from API App Generation\"\n2. **Text**: Connected to display the API response value\n3. **Button**: To manually trigger the API call\n4. **Auto-load**: The API runs automatically when the page loads\n\nThe text will show the API response, and you can click the button to refresh the data from the API.";
|
|
2
2
|
export default _default;
|
|
3
3
|
//# sourceMappingURL=smoketest.d.ts.map
|