@lobb-js/studio 0.7.1 → 0.7.3
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/package.json +3 -2
- package/src/App.svelte +5 -0
- package/src/app.css +124 -0
- package/src/lib/components/LlmButton.svelte +137 -0
- package/src/lib/components/Studio.svelte +129 -0
- package/src/lib/components/alertView.svelte +20 -0
- package/src/lib/components/breadCrumbs.svelte +60 -0
- package/src/lib/components/codeEditor.svelte +152 -0
- package/src/lib/components/combobox.svelte +92 -0
- package/src/lib/components/confirmationDialog/confirmationDialog.svelte +33 -0
- package/src/lib/components/confirmationDialog/store.svelte.ts +28 -0
- package/src/lib/components/createManyButton.svelte +109 -0
- package/src/lib/components/dataTable/childRecords.svelte +142 -0
- package/src/lib/components/dataTable/dataTable.svelte +225 -0
- package/src/lib/components/dataTable/fieldCell.svelte +77 -0
- package/src/lib/components/dataTable/filter.svelte +284 -0
- package/src/lib/components/dataTable/filterButton.svelte +39 -0
- package/src/lib/components/dataTable/footer.svelte +84 -0
- package/src/lib/components/dataTable/header.svelte +155 -0
- package/src/lib/components/dataTable/sort.svelte +173 -0
- package/src/lib/components/dataTable/sortButton.svelte +36 -0
- package/src/lib/components/dataTable/table.svelte +337 -0
- package/src/lib/components/dataTable/utils.ts +127 -0
- package/src/lib/components/detailView/create/children.svelte +70 -0
- package/src/lib/components/detailView/create/createDetailView.svelte +228 -0
- package/src/lib/components/detailView/create/createDetailViewButton.svelte +37 -0
- package/src/lib/components/detailView/create/createManyView.svelte +252 -0
- package/src/lib/components/detailView/create/subRecords.svelte +50 -0
- package/src/lib/components/detailView/detailViewForm.svelte +104 -0
- package/src/lib/components/detailView/fieldCustomInput.svelte +26 -0
- package/src/lib/components/detailView/fieldInput.svelte +258 -0
- package/src/lib/components/detailView/fieldInputReplacement.svelte +199 -0
- package/src/lib/components/detailView/store.svelte.ts +59 -0
- package/src/lib/components/detailView/update/children.svelte +96 -0
- package/src/lib/components/detailView/update/updateDetailView.svelte +176 -0
- package/src/lib/components/detailView/update/updateDetailViewButton.svelte +56 -0
- package/src/lib/components/detailView/utils.ts +176 -0
- package/src/lib/components/diffViewer.svelte +105 -0
- package/src/lib/components/drawer.svelte +28 -0
- package/src/lib/components/extensionsComponents.svelte +33 -0
- package/src/lib/components/foreingKeyInput.svelte +80 -0
- package/src/lib/components/header.svelte +45 -0
- package/src/lib/components/loadingTypesForMonacoEditor.ts +36 -0
- package/src/lib/components/miniSidebar.svelte +226 -0
- package/src/lib/components/rangeCalendarButton.svelte +257 -0
- package/src/lib/components/richTextEditor.svelte +284 -0
- package/src/lib/components/routes/collections/collection.svelte +57 -0
- package/src/lib/components/routes/collections/collections.svelte +45 -0
- package/src/lib/components/routes/data_model/dataModel.svelte +40 -0
- package/src/lib/components/routes/data_model/flow.css +22 -0
- package/src/lib/components/routes/data_model/flow.svelte +84 -0
- package/src/lib/components/routes/data_model/syncManager.svelte +94 -0
- package/src/lib/components/routes/data_model/utils.ts +35 -0
- package/src/lib/components/routes/extensions/extension.svelte +19 -0
- package/src/lib/components/routes/home.svelte +40 -0
- package/src/lib/components/routes/workflows/workflows.svelte +136 -0
- package/src/lib/components/selectRecord.svelte +130 -0
- package/src/lib/components/setServerPage.svelte +50 -0
- package/src/lib/components/sidebar/index.ts +4 -0
- package/src/lib/components/sidebar/sidebar.svelte +149 -0
- package/src/lib/components/sidebar/sidebarElements.svelte +144 -0
- package/src/lib/components/sidebar/sidebarTrigger.svelte +33 -0
- package/src/lib/components/singletone.svelte +71 -0
- package/src/lib/components/ui/accordion/accordion-content.svelte +22 -0
- package/src/lib/components/ui/accordion/accordion-item.svelte +12 -0
- package/src/lib/components/ui/accordion/accordion-trigger.svelte +31 -0
- package/src/lib/components/ui/accordion/index.ts +17 -0
- package/src/lib/components/ui/alert/alert-description.svelte +16 -0
- package/src/lib/components/ui/alert/alert-title.svelte +24 -0
- package/src/lib/components/ui/alert/alert.svelte +39 -0
- package/src/lib/components/ui/alert/index.ts +14 -0
- package/src/lib/components/ui/alert-dialog/alert-dialog-action.svelte +13 -0
- package/src/lib/components/ui/alert-dialog/alert-dialog-cancel.svelte +17 -0
- package/src/lib/components/ui/alert-dialog/alert-dialog-content.svelte +26 -0
- package/src/lib/components/ui/alert-dialog/alert-dialog-description.svelte +16 -0
- package/src/lib/components/ui/alert-dialog/alert-dialog-footer.svelte +20 -0
- package/src/lib/components/ui/alert-dialog/alert-dialog-header.svelte +20 -0
- package/src/lib/components/ui/alert-dialog/alert-dialog-overlay.svelte +19 -0
- package/src/lib/components/ui/alert-dialog/alert-dialog-title.svelte +18 -0
- package/src/lib/components/ui/alert-dialog/index.ts +40 -0
- package/src/lib/components/ui/breadcrumb/breadcrumb-ellipsis.svelte +23 -0
- package/src/lib/components/ui/breadcrumb/breadcrumb-item.svelte +16 -0
- package/src/lib/components/ui/breadcrumb/breadcrumb-link.svelte +31 -0
- package/src/lib/components/ui/breadcrumb/breadcrumb-list.svelte +23 -0
- package/src/lib/components/ui/breadcrumb/breadcrumb-page.svelte +23 -0
- package/src/lib/components/ui/breadcrumb/breadcrumb-separator.svelte +27 -0
- package/src/lib/components/ui/breadcrumb/breadcrumb.svelte +15 -0
- package/src/lib/components/ui/breadcrumb/index.ts +25 -0
- package/src/lib/components/ui/button/button.svelte +110 -0
- package/src/lib/components/ui/button/index.ts +17 -0
- package/src/lib/components/ui/checkbox/checkbox.svelte +35 -0
- package/src/lib/components/ui/checkbox/index.ts +6 -0
- package/src/lib/components/ui/command/command-dialog.svelte +35 -0
- package/src/lib/components/ui/command/command-empty.svelte +12 -0
- package/src/lib/components/ui/command/command-group.svelte +31 -0
- package/src/lib/components/ui/command/command-input.svelte +25 -0
- package/src/lib/components/ui/command/command-item.svelte +19 -0
- package/src/lib/components/ui/command/command-link-item.svelte +19 -0
- package/src/lib/components/ui/command/command-list.svelte +16 -0
- package/src/lib/components/ui/command/command-separator.svelte +12 -0
- package/src/lib/components/ui/command/command-shortcut.svelte +20 -0
- package/src/lib/components/ui/command/command.svelte +21 -0
- package/src/lib/components/ui/command/index.ts +40 -0
- package/src/lib/components/ui/dialog/dialog-content.svelte +38 -0
- package/src/lib/components/ui/dialog/dialog-description.svelte +16 -0
- package/src/lib/components/ui/dialog/dialog-footer.svelte +20 -0
- package/src/lib/components/ui/dialog/dialog-header.svelte +20 -0
- package/src/lib/components/ui/dialog/dialog-overlay.svelte +19 -0
- package/src/lib/components/ui/dialog/dialog-title.svelte +16 -0
- package/src/lib/components/ui/dialog/index.ts +37 -0
- package/src/lib/components/ui/input/index.ts +7 -0
- package/src/lib/components/ui/input/input.svelte +46 -0
- package/src/lib/components/ui/label/index.ts +7 -0
- package/src/lib/components/ui/label/label.svelte +19 -0
- package/src/lib/components/ui/popover/index.ts +17 -0
- package/src/lib/components/ui/popover/popover-content.svelte +28 -0
- package/src/lib/components/ui/range-calendar/index.ts +30 -0
- package/src/lib/components/ui/range-calendar/range-calendar-cell.svelte +19 -0
- package/src/lib/components/ui/range-calendar/range-calendar-day.svelte +35 -0
- package/src/lib/components/ui/range-calendar/range-calendar-grid-body.svelte +12 -0
- package/src/lib/components/ui/range-calendar/range-calendar-grid-head.svelte +12 -0
- package/src/lib/components/ui/range-calendar/range-calendar-grid-row.svelte +12 -0
- package/src/lib/components/ui/range-calendar/range-calendar-grid.svelte +16 -0
- package/src/lib/components/ui/range-calendar/range-calendar-head-cell.svelte +16 -0
- package/src/lib/components/ui/range-calendar/range-calendar-header.svelte +16 -0
- package/src/lib/components/ui/range-calendar/range-calendar-heading.svelte +16 -0
- package/src/lib/components/ui/range-calendar/range-calendar-months.svelte +20 -0
- package/src/lib/components/ui/range-calendar/range-calendar-next-button.svelte +27 -0
- package/src/lib/components/ui/range-calendar/range-calendar-prev-button.svelte +27 -0
- package/src/lib/components/ui/range-calendar/range-calendar.svelte +57 -0
- package/src/lib/components/ui/select/index.ts +34 -0
- package/src/lib/components/ui/select/select-content.svelte +38 -0
- package/src/lib/components/ui/select/select-group-heading.svelte +16 -0
- package/src/lib/components/ui/select/select-item.svelte +37 -0
- package/src/lib/components/ui/select/select-scroll-down-button.svelte +19 -0
- package/src/lib/components/ui/select/select-scroll-up-button.svelte +19 -0
- package/src/lib/components/ui/select/select-separator.svelte +13 -0
- package/src/lib/components/ui/select/select-trigger.svelte +24 -0
- package/src/lib/components/ui/separator/index.ts +7 -0
- package/src/lib/components/ui/separator/separator.svelte +22 -0
- package/src/lib/components/ui/skeleton/index.ts +7 -0
- package/src/lib/components/ui/skeleton/skeleton.svelte +22 -0
- package/src/lib/components/ui/sonner/index.ts +1 -0
- package/src/lib/components/ui/sonner/sonner.svelte +20 -0
- package/src/lib/components/ui/switch/index.ts +7 -0
- package/src/lib/components/ui/switch/switch.svelte +27 -0
- package/src/lib/components/ui/textarea/index.ts +7 -0
- package/src/lib/components/ui/textarea/textarea.svelte +22 -0
- package/src/lib/components/ui/tooltip/index.ts +18 -0
- package/src/lib/components/ui/tooltip/tooltip-content.svelte +21 -0
- package/src/lib/components/workflowEditor.svelte +188 -0
- package/src/lib/context.ts +22 -0
- package/src/lib/eventSystem.ts +40 -0
- package/src/lib/extensions/extension.types.ts +92 -0
- package/src/lib/extensions/extensionUtils.ts +156 -0
- package/src/lib/index.ts +24 -0
- package/src/lib/store.svelte.ts +13 -0
- package/src/lib/store.types.ts +28 -0
- package/src/lib/utils.ts +68 -0
- package/src/main.ts +18 -0
- package/src/stories/detailView/detailViewForm.stories.svelte +79 -0
- package/src/vite-env.d.ts +2 -0
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { LobbClient } from '@lobb-js/sdk';
|
|
2
|
+
import { toast } from 'svelte-sonner';
|
|
3
|
+
|
|
4
|
+
export function createLobb(url: string) {
|
|
5
|
+
const client = new LobbClient(url);
|
|
6
|
+
client.onResponse(async (response) => {
|
|
7
|
+
if (response.status >= 400) {
|
|
8
|
+
const body = await response.json();
|
|
9
|
+
toast.error(body.message);
|
|
10
|
+
}
|
|
11
|
+
});
|
|
12
|
+
return client;
|
|
13
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { Extension } from "../extensions/extension.types";
|
|
2
|
+
|
|
3
|
+
interface Collection {
|
|
4
|
+
category: string;
|
|
5
|
+
owner: string;
|
|
6
|
+
fields: Record<string, any>;
|
|
7
|
+
singleton: boolean;
|
|
8
|
+
}
|
|
9
|
+
type Collections = Record<string, Collection>;
|
|
10
|
+
|
|
11
|
+
interface Meta {
|
|
12
|
+
version: string;
|
|
13
|
+
relations: Array<any>;
|
|
14
|
+
collections: Collections;
|
|
15
|
+
extensions: Record<string, any>;
|
|
16
|
+
filter: any;
|
|
17
|
+
events: any[];
|
|
18
|
+
event_context_type: string;
|
|
19
|
+
studio_workflows: any[];
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export interface CTX {
|
|
23
|
+
studioVersion?: string;
|
|
24
|
+
lobbUrl: string | null;
|
|
25
|
+
extensions: Record<string, Extension>;
|
|
26
|
+
meta: Meta;
|
|
27
|
+
currentUrl: URL;
|
|
28
|
+
}
|
package/src/lib/utils.ts
ADDED
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { clsx, type ClassValue } from "clsx";
|
|
2
|
+
import { twMerge } from "tailwind-merge";
|
|
3
|
+
|
|
4
|
+
import { MediaQuery } from 'svelte/reactivity';
|
|
5
|
+
import type { CTX } from "./store.types";
|
|
6
|
+
|
|
7
|
+
export function cn(...inputs: ClassValue[]) {
|
|
8
|
+
return twMerge(clsx(inputs));
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
12
|
+
export type WithoutChild<T> = T extends { child?: any } ? Omit<T, "child"> : T;
|
|
13
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
14
|
+
export type WithoutChildren<T> = T extends { children?: any } ? Omit<T, "children"> : T;
|
|
15
|
+
export type WithoutChildrenOrChild<T> = WithoutChildren<WithoutChild<T>>;
|
|
16
|
+
export type WithElementRef<T, U extends HTMLElement = HTMLElement> = T & { ref?: U | null };
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
export const mediaQueries = {
|
|
20
|
+
sm: new MediaQuery('min-width: 640px'),
|
|
21
|
+
md: new MediaQuery('min-width: 768px'),
|
|
22
|
+
lg: new MediaQuery('min-width: 1024px'),
|
|
23
|
+
xl: new MediaQuery('min-width: 1280px'),
|
|
24
|
+
'2xl': new MediaQuery('min-width: 1536px'),
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
export function getFieldRelation(ctx: CTX, collectionName: string, fieldName: string) {
|
|
28
|
+
const relations = ctx.meta.relations;
|
|
29
|
+
for (let index = 0; index < relations.length; index++) {
|
|
30
|
+
const relation = relations[index];
|
|
31
|
+
if (relation.from.collection === collectionName && relation.from.field === fieldName) {
|
|
32
|
+
return relation;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
return null;
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
export function recordHasChildrean(ctx: CTX, collectionName: string) {
|
|
39
|
+
for (let index = 0; index < ctx.meta.relations.length; index++) {
|
|
40
|
+
const relation = ctx.meta.relations[index];
|
|
41
|
+
if (relation.to.collection === collectionName) {
|
|
42
|
+
return true;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
return false;
|
|
46
|
+
};
|
|
47
|
+
|
|
48
|
+
export function calculateDrawerWidth() {
|
|
49
|
+
const backgroundDrawerButtons = document.querySelectorAll(".backgroundDrawerButton");
|
|
50
|
+
const drawersCount = Array.from(backgroundDrawerButtons).length;
|
|
51
|
+
const width = 672 - (30 * drawersCount);
|
|
52
|
+
return width;
|
|
53
|
+
};
|
|
54
|
+
|
|
55
|
+
export function getChangedProperties(oldObj: Record<string, any>, newObj: Record<string, any>) {
|
|
56
|
+
const changes: Record<string, any> = {};
|
|
57
|
+
for (const key of Object.keys(newObj)) {
|
|
58
|
+
if (oldObj[key] !== newObj[key]) {
|
|
59
|
+
changes[key] = newObj[key];
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
return changes;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
export function parseFunction(functionString: string) {
|
|
66
|
+
const functionObj = new Function("return " + functionString)();
|
|
67
|
+
return functionObj;
|
|
68
|
+
};
|
package/src/main.ts
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import "./app.css";
|
|
2
|
+
|
|
3
|
+
import { mount } from 'svelte'
|
|
4
|
+
import App from './App.svelte'
|
|
5
|
+
|
|
6
|
+
declare global {
|
|
7
|
+
interface Window {
|
|
8
|
+
APP_ENV: {
|
|
9
|
+
LOBB_URL: string
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
const app = mount(App, {
|
|
15
|
+
target: document.getElementById('app')!,
|
|
16
|
+
})
|
|
17
|
+
|
|
18
|
+
export default app
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
<script lang="ts" module>
|
|
2
|
+
import "../../app.css";
|
|
3
|
+
|
|
4
|
+
import DetailViewForm from '$lib/components/detailView/detailViewForm.svelte';
|
|
5
|
+
import { defineMeta } from '@storybook/addon-svelte-csf';
|
|
6
|
+
import { Calendar, Edit, Key } from "lucide-svelte";
|
|
7
|
+
|
|
8
|
+
const { Story } = defineMeta({
|
|
9
|
+
title: 'lobb/detailViewForm',
|
|
10
|
+
component: DetailViewForm,
|
|
11
|
+
args: {
|
|
12
|
+
value: {
|
|
13
|
+
name: "Malik",
|
|
14
|
+
age: 26,
|
|
15
|
+
bio: "This is a sample biography",
|
|
16
|
+
gender: "male",
|
|
17
|
+
birthDate: "1997-01-01",
|
|
18
|
+
appointmentTime: "14:30",
|
|
19
|
+
appointmentDateTime: "2025-10-31T15:00",
|
|
20
|
+
newsletter: true,
|
|
21
|
+
},
|
|
22
|
+
fields: [
|
|
23
|
+
{
|
|
24
|
+
key: "name",
|
|
25
|
+
label: "Name",
|
|
26
|
+
type: "input",
|
|
27
|
+
placeholder: "Enter your name",
|
|
28
|
+
icon: Key,
|
|
29
|
+
errorMessages: ["Name is required"],
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
key: "age",
|
|
33
|
+
label: "Age",
|
|
34
|
+
type: "input",
|
|
35
|
+
inputType: "number",
|
|
36
|
+
inputStep: 1,
|
|
37
|
+
icon: Edit,
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
key: "bio",
|
|
41
|
+
label: "Biography",
|
|
42
|
+
type: "textarea",
|
|
43
|
+
placeholder: "Tell us about yourself",
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
key: "gender",
|
|
47
|
+
label: "Gender",
|
|
48
|
+
type: "select",
|
|
49
|
+
options: ["male", "female", "other"],
|
|
50
|
+
placeholder: "Select gender",
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
key: "birthDate",
|
|
54
|
+
label: "Birth Date",
|
|
55
|
+
type: "date",
|
|
56
|
+
icon: Calendar,
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
key: "appointmentTime",
|
|
60
|
+
label: "Appointment Time",
|
|
61
|
+
type: "time",
|
|
62
|
+
},
|
|
63
|
+
{
|
|
64
|
+
key: "appointmentDateTime",
|
|
65
|
+
label: "Appointment Date & Time",
|
|
66
|
+
type: "datetime",
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
key: "newsletter",
|
|
70
|
+
label: "Subscribe to newsletter",
|
|
71
|
+
type: "switch",
|
|
72
|
+
},
|
|
73
|
+
]
|
|
74
|
+
}
|
|
75
|
+
});
|
|
76
|
+
</script>
|
|
77
|
+
|
|
78
|
+
<!-- More on writing stories with args: https://storybook.js.org/docs/writing-stories/args -->
|
|
79
|
+
<Story name="Primary" />
|